diff --git a/zh-cn/native_sdk/multimedia/av_codec/native_avcapability.h b/zh-cn/native_sdk/multimedia/av_codec/native_avcapability.h index d47521963f24d6ea69a747b0def0f79484ffe682..c9ca31ba7a17af6bde8279d3b9b48b3797d6385b 100644 --- a/zh-cn/native_sdk/multimedia/av_codec/native_avcapability.h +++ b/zh-cn/native_sdk/multimedia/av_codec/native_avcapability.h @@ -27,6 +27,7 @@ * @file native_avcapability.h * * @brief 声明用于编解码能力查询到的Native API。 + * @sample [AVCodec](https://gitee.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Media/AVCodec) * * @kit AVCodecKit * @include diff --git a/zh-cn/native_sdk/multimedia/av_codec/native_avcodec_base.h b/zh-cn/native_sdk/multimedia/av_codec/native_avcodec_base.h index 2504a01787fa040fe49be98e5b0614b898198daf..1944f3d400e8f5a900e3c87134c09757309c566f 100644 --- a/zh-cn/native_sdk/multimedia/av_codec/native_avcodec_base.h +++ b/zh-cn/native_sdk/multimedia/av_codec/native_avcodec_base.h @@ -27,6 +27,7 @@ * @file native_avcodec_base.h * * @brief 声明用于音视频封装、解封装、编解码基础功能的Native API。 + * @sample [AVCodec](https://gitee.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Media/AVCodec) * @kit AVCodecKit * @include * @library libnative_media_codecbase.so @@ -1067,6 +1068,19 @@ extern const char *OH_MD_KEY_TRACK_REFERENCE_TYPE; * @since 20 */ extern const char *OH_MD_KEY_TRACK_DESCRIPTION; +/** + * @brief 使能视频编解码同步模式的键。 + * 值类型为int32_t,1表示使能,0表示其它情况。该键是可选的,默认值为0。 + * + * 如果使能,需要注意:\n + * 1. 编解码器不可设置回调函数。\n + * 2. 必须使用缓冲区查询接口替代回调。\n + * 3. 只能在Configure阶段使用。 + * + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 20 + */ +extern const char *OH_MD_KEY_ENABLE_SYNC_MODE; /** * @brief 媒体类型。 diff --git a/zh-cn/native_sdk/multimedia/av_codec/native_avcodec_videodecoder.h b/zh-cn/native_sdk/multimedia/av_codec/native_avcodec_videodecoder.h index 54091b3df96b42d10aa3c16681ea3d2d433e516f..a346f5f332ccd6fa828543ca3264530cac73bf52 100644 --- a/zh-cn/native_sdk/multimedia/av_codec/native_avcodec_videodecoder.h +++ b/zh-cn/native_sdk/multimedia/av_codec/native_avcodec_videodecoder.h @@ -27,6 +27,7 @@ * @file native_avcodec_videodecoder.h * * @brief 声明用于视频解码的Native API。 + * @sample [AVCodec](https://gitee.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Media/AVCodec) * * @kit AVCodecKit * @include @@ -180,7 +181,7 @@ OH_AVErrCode OH_VideoDecoder_Configure(OH_AVCodec *codec, OH_AVFormat *format); OH_AVErrCode OH_VideoDecoder_Prepare(OH_AVCodec *codec); /** - * @brief 调用OH_VideoDecoder_Prepare接口成功后调用此接口启动解码器。成功启动后,解码器将开始报告注册的回调事件。 + * @brief 调用{@link OH_VideoDecoder_Prepare}接口成功后调用此接口启动解码器。成功启动后,解码器将开始报告注册的回调事件。 * * @syscap SystemCapability.Multimedia.Media.VideoDecoder * @param codec 指向视频解码实例的指针。 @@ -445,6 +446,78 @@ OH_AVErrCode OH_VideoDecoder_IsValid(OH_AVCodec *codec, bool *isValid); OH_AVErrCode OH_VideoDecoder_SetDecryptionConfig(OH_AVCodec *codec, MediaKeySession *mediaKeySession, bool secureVideoPath); +/** + * @brief 查询下一个可用输入缓冲区的索引。 + * + * 调用此接口后需要接着调用{@link OH_VideoDecoder_GetInputBuffer}接口获取缓冲区实例,并通过{@link OH_VideoDecoder_PushInputBuffer}接口传递给解码器。\n + * 需要注意的是,上述操作仅在同步模式下支持。 + * + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向视频解码实例的指针。 + * @param index 输入buffer对应的索引值。 + * @param timeoutUs 超时时长,单位为微秒。负值:无限等待;0:立即退出;正值:指定时间timeout后退出。 + * @return 返回接口结果:\n + * AV_ERR_OK:执行成功。\n + * AV_ERR_NO_MEMORY:输入的解码器实例已经销毁。\n + * AV_ERR_INVALID_VAL:输入的codec指针为非解码器实例,或者为空指针。\n + * AV_ERR_UNKNOWN:未知错误。\n + * AV_ERR_SERVICE_DIED:编解码服务已终止。\n + * AV_ERR_INVALID_STATE:解码器状态不支持调用本接口时调用。\n + * AV_ERR_OPERATE_NOT_PERMIT:禁止异步模式下使用。\n + * AV_ERR_TRY_AGAIN_LATER:查询失败,建议等待短暂间隔后重试。 + * @since 20 + */ +OH_AVErrCode OH_VideoDecoder_QueryInputBuffer(struct OH_AVCodec *codec, uint32_t *index, int64_t timeoutUs); + +/** + * @brief 获取可用输入缓冲区的实例。需要注意的是,此接口仅适用于同步模式。 + * + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向视频解码实例的指针。 + * @param index 输入buffer对应的索引值,可通过{@link OH_VideoDecoder_QueryInputBuffer}接口获取。 + * @return 如果执行成功,则返回一个指向OH_AVBuffer实例的指针,否则返回NULL。 + * @since 20 + */ +OH_AVBuffer *OH_VideoDecoder_GetInputBuffer(struct OH_AVCodec *codec, uint32_t index); + +/** + * @brief 查询下一个可用输出缓冲区的索引。 + * + * 通过{@link OH_VideoDecoder_GetOutputBuffer}接口获取的缓冲区实例可以通过执行以下操作来显示或释放解码帧:\n + * 1. 通过{@link OH_VideoDecoder_FreeOutputBuffer}接口将处理后的输出缓冲区返回到解码器。\n + * 2. 通过{@link OH_VideoDecoder_RenderOutputBuffer}在输出surface上渲染。\n + * 3. 通过{@link OH_VideoDecoder_RenderOutputBufferAtTime}在指定时间内完成输出surface上渲染。\n + * 需要注意的是,上述操作仅在同步模式下支持。 + * + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向视频解码实例的指针。 + * @param index 输出buffer对应的索引值。 + * @param timeoutUs 超时时长,单位为微秒。负值:无限等待;0:立即退出;正值:指定时间timeout后退出。 + * @return 返回接口结果:\n + * AV_ERR_OK:执行成功。\n + * AV_ERR_NO_MEMORY:输入的解码器实例已经销毁。\n + * AV_ERR_INVALID_VAL:输入的codec指针为非解码器实例,或者为空指针。\n + * AV_ERR_UNKNOWN:未知错误。\n + * AV_ERR_SERVICE_DIED:编解码服务已终止。\n + * AV_ERR_INVALID_STATE:解码器状态不支持调用本接口时调用。\n + * AV_ERR_OPERATE_NOT_PERMIT:禁止异步模式下使用。\n + * AV_ERR_STREAM_CHANGED:流格式已变更,可以通过调用{@link OH_VideoDecoder_GetOutputDescription}接口获取新的流信息。\n + * AV_ERR_TRY_AGAIN_LATER:查询失败,建议等待短暂间隔后重试。 + * @since 20 + */ +OH_AVErrCode OH_VideoDecoder_QueryOutputBuffer(struct OH_AVCodec *codec, uint32_t *index, int64_t timeoutUs); + +/** + * @brief 获取可用输出缓冲区的实例。需要注意的是,此接口仅适用于同步模式。 + * + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向视频解码实例的指针。 + * @param index 输出buffer对应的索引值,可通过{@link OH_VideoDecoder_QueryOutputBuffer}接口获取。 + * @return 如果执行成功,则返回一个指向OH_AVBuffer实例的指针,否则返回NULL。 + * @since 20 + */ +OH_AVBuffer *OH_VideoDecoder_GetOutputBuffer(struct OH_AVCodec *codec, uint32_t index); + #ifdef __cplusplus } #endif diff --git a/zh-cn/native_sdk/multimedia/av_codec/native_avcodec_videoencoder.h b/zh-cn/native_sdk/multimedia/av_codec/native_avcodec_videoencoder.h index 1ffb52148ccb19879cf4222244456544e4ab2d71..2a401826fae06a35d84918a1e0e229bbf6ddac96 100644 --- a/zh-cn/native_sdk/multimedia/av_codec/native_avcodec_videoencoder.h +++ b/zh-cn/native_sdk/multimedia/av_codec/native_avcodec_videoencoder.h @@ -28,6 +28,7 @@ * @file native_avcodec_videoencoder.h * * @brief 声明用于视频编码的接口。 + * @sample [AVCodec](https://gitee.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Media/AVCodec) * * @kit AVCodecKit * @include @@ -186,7 +187,7 @@ OH_AVErrCode OH_VideoEncoder_Configure(OH_AVCodec *codec, OH_AVFormat *format); OH_AVErrCode OH_VideoEncoder_Prepare(OH_AVCodec *codec); /** - * @brief 调用OH_VideoEncoder_Prepare接口成功后调用此接口启动解码器。成功启动后,编码器将开始报告注册的回调事件。 + * @brief 调用{@link OH_VideoEncoder_Prepare}接口成功后调用此接口启动编码器。成功启动后,编码器将开始报告注册的回调事件。 * * @syscap SystemCapability.Multimedia.Media.VideoEncoder * @param codec 指向视频编码实例的指针。 @@ -457,6 +458,75 @@ typedef enum OH_VideoEncodeBitrateMode { CQ = 2, } OH_VideoEncodeBitrateMode; +/** + * @brief 查询下一个可用输入缓冲区的索引。 + * + * 调用此接口后需要接着调用{@link OH_VideoEncoder_GetInputBuffer}接口获取缓冲区实例,并通过{@link OH_VideoEncoder_PushInputBuffer}接口传递给编码器。\n + * 需要注意的是,上述操作仅在同步模式下支持。 + * + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向视频编码实例的指针。 + * @param index 输入buffer对应的索引值。 + * @param timeoutUs 超时时长,单位为微秒。负值:无限等待;0:立即退出;正值:指定时间timeout后退出。 + * @return 返回接口结果:\n + * AV_ERR_OK:执行成功。\n + * AV_ERR_NO_MEMORY:输入的编码器实例已经销毁。\n + * AV_ERR_INVALID_VAL:输入的codec指针为非编码器实例,或者为空指针。\n + * AV_ERR_UNKNOWN:未知错误。\n + * AV_ERR_SERVICE_DIED:编解码服务已终止。\n + * AV_ERR_INVALID_STATE:编码器状态不支持调用本接口时调用。\n + * AV_ERR_OPERATE_NOT_PERMIT:禁止异步模式下使用。\n + * AV_ERR_TRY_AGAIN_LATER:查询失败,建议等待短暂间隔后重试。 + * @since 20 + */ +OH_AVErrCode OH_VideoEncoder_QueryInputBuffer(struct OH_AVCodec *codec, uint32_t *index, int64_t timeoutUs); + +/** + * @brief 获取可用输入缓冲区的实例。需要注意的是,此接口仅适用于同步模式。 + * + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向视频编码实例的指针。 + * @param index 输入buffer对应的索引值,可通过{@link OH_VideoEncoder_GetOutputBuffer} 接口获取。 + * @return 如果执行成功,则返回一个指向OH_AVBuffer实例的指针,否则返回NULL。 + * @since 20 + */ +OH_AVBuffer *OH_VideoEncoder_GetInputBuffer(struct OH_AVCodec *codec, uint32_t index); + +/** + * @brief 查询下一个可用输出缓冲区的索引。 + * + * 通过{@link OH_VideoEncoder_GetOutputBuffer}接口获取的缓冲区实例可以通过{@link OH_VideoEncoder_FreeOutputBuffer}接口将处理后的输出缓冲区返回到编码器。\n + * 需要注意的是,上述操作仅在同步模式下支持。 + * + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向视频编码实例的指针。 + * @param index 输出buffer对应的索引值。 + * @param timeoutUs 超时时长,单位为微秒。负值:无限等待;0:立即退出;正值:指定时间timeout后退出。 + * @return 返回接口结果:\n + * AV_ERR_OK:执行成功。\n + * AV_ERR_NO_MEMORY:输入的编码器实例已经销毁。\n + * AV_ERR_INVALID_VAL:输入的codec指针为非编码器实例,或者为空指针。\n + * AV_ERR_UNKNOWN:未知错误。\n + * AV_ERR_SERVICE_DIED:编解码服务已终止。\n + * AV_ERR_INVALID_STATE:编码器状态不支持调用本接口时调用。\n + * AV_ERR_OPERATE_NOT_PERMIT:禁止异步模式下使用。\n + * AV_ERR_STREAM_CHANGED:流格式已变更,可以通过调用{@link OH_VideoEncoder_GetOutputDescription}接口获取新的流信息。\n + * AV_ERR_TRY_AGAIN_LATER:查询失败,建议等待短暂间隔后重试。 + * @since 20 + */ +OH_AVErrCode OH_VideoEncoder_QueryOutputBuffer(struct OH_AVCodec *codec, uint32_t *index, int64_t timeoutUs); + +/** + * @brief 获取可用输出缓冲区的实例。需要注意的是,此接口仅适用于同步模式。 + * + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向视频编码实例的指针。 + * @param index 输出buffer对应的索引值,可通过{@link OH_VideoEncoder_QueryOutputBuffer}接口获取。 + * @return 如果执行成功,则返回一个指向OH_AVBuffer实例的指针,否则返回NULL。 + * @since 20 + */ +OH_AVBuffer *OH_VideoEncoder_GetOutputBuffer(struct OH_AVCodec *codec, uint32_t index); + #ifdef __cplusplus } #endif diff --git a/zh-cn/native_sdk/multimedia/av_codec/native_avdemuxer.h b/zh-cn/native_sdk/multimedia/av_codec/native_avdemuxer.h index faa82bca1a1f2699aac1e854ed2a1a757d3188aa..c6ebef4f686674be5d0945e8500cde694d1ffc15 100644 --- a/zh-cn/native_sdk/multimedia/av_codec/native_avdemuxer.h +++ b/zh-cn/native_sdk/multimedia/av_codec/native_avdemuxer.h @@ -28,6 +28,7 @@ * @file native_avdemuxer.h * * @brief 声明用于音视频媒体数据解析的接口。 + * @sample [AVCodec](https://gitee.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Media/AVCodec) * * @kit AVCodecKit * @include diff --git a/zh-cn/native_sdk/multimedia/av_codec/native_avsource.h b/zh-cn/native_sdk/multimedia/av_codec/native_avsource.h index 64dc8530c5d9cf72338ae43514f1ede2d350a316..b2cb411be7595bf9df09b0ef7f49aca7ee003d28 100644 --- a/zh-cn/native_sdk/multimedia/av_codec/native_avsource.h +++ b/zh-cn/native_sdk/multimedia/av_codec/native_avsource.h @@ -27,6 +27,7 @@ * @file native_avsource.h * * @brief 声明用于音视频媒体数据解析的接口。 + * @sample [AVCodec](https://gitee.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Media/AVCodec) * * @kit AVCodecKit * @include diff --git a/zh-cn/native_sdk/multimedia/media_foundation/native_avbuffer.h b/zh-cn/native_sdk/multimedia/media_foundation/native_avbuffer.h index 86743a76d72582dcbd07e714c39147f38a5de242..9d11030ac4836d18156c752c0436cb4334ca507d 100644 --- a/zh-cn/native_sdk/multimedia/media_foundation/native_avbuffer.h +++ b/zh-cn/native_sdk/multimedia/media_foundation/native_avbuffer.h @@ -28,6 +28,7 @@ * @file native_avbuffer.h * * @brief 声明了媒体数据结构AVBuffer的函数接口。 + * @sample [AVCodec](https://gitee.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Media/AVCodec) * * @kit AVCodecKit * @include diff --git a/zh-cn/native_sdk/multimedia/media_foundation/native_avbuffer_info.h b/zh-cn/native_sdk/multimedia/media_foundation/native_avbuffer_info.h index ca629cc961ac664b85c6a91a54ae07b668805faf..9bef71d2005900f79866e2f90d9042f4c4d87f00 100644 --- a/zh-cn/native_sdk/multimedia/media_foundation/native_avbuffer_info.h +++ b/zh-cn/native_sdk/multimedia/media_foundation/native_avbuffer_info.h @@ -28,6 +28,7 @@ * @file native_avbuffer_info.h * * @brief 声明了媒体数据结构AVBuffer属性的定义。 + * @sample [AVCodec](https://gitee.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Media/AVCodec) * * @kit AVCodecKit * @include diff --git a/zh-cn/native_sdk/multimedia/media_foundation/native_averrors.h b/zh-cn/native_sdk/multimedia/media_foundation/native_averrors.h index beada3a6273a528a62079b768b296f57760f71c9..ebaca438fe306ae83cf62acc3073775e4b4c0d1c 100644 --- a/zh-cn/native_sdk/multimedia/media_foundation/native_averrors.h +++ b/zh-cn/native_sdk/multimedia/media_foundation/native_averrors.h @@ -176,6 +176,20 @@ typedef enum OH_AVErrCode { * @since 14 */ AV_ERR_IO_UNSUPPORTED_REQUEST = 5411011, + /** + * @error 同步模式下流格式发生变更。 + * 可以通过调用以下接口来获取更新后流的配置信息: + * - 视频编码: 调用{@link OH_VideoEncoder_GetOutputDescription}接口。 + * - 视频解码: 调用{@link OH_VideoDecoder_GetOutputDescription}接口。 + * - 音频解码: 调用{@link OH_AudioCodec_GetOutputDescription}接口。 + * @since 20 + */ + AV_ERR_STREAM_CHANGED = 5410005, + /** + * @error 同步模式下临时缓冲区查询失败,建议等待短暂间隔后重试操作。 + * @since 20 + */ + AV_ERR_TRY_AGAIN_LATER = 5410006, } OH_AVErrCode; #ifdef __cplusplus diff --git a/zh-cn/native_sdk/multimedia/media_foundation/native_avformat.h b/zh-cn/native_sdk/multimedia/media_foundation/native_avformat.h index 2b81a45a6e00048b37e3746c2ae8b9c02bb0a9ff..c553833b698ad72dfcde2fa9f4ae19480e1e58e1 100644 --- a/zh-cn/native_sdk/multimedia/media_foundation/native_avformat.h +++ b/zh-cn/native_sdk/multimedia/media_foundation/native_avformat.h @@ -27,6 +27,7 @@ * @file native_avformat.h * * @brief 声明了OH_AVFormat相关的函数和枚举。 + * @sample [AVCodec](https://gitee.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Media/AVCodec) * * @kit AVCodecKit * @include