From 5cbcccffc99d8cde1c66c926ca3f7382cd3d22b9 Mon Sep 17 00:00:00 2001 From: lin-jianwu Date: Thu, 30 Jun 2022 20:02:43 +0800 Subject: [PATCH 01/14] add media capi interface Signed-off-by: lin-jianwu --- zh-cn/native_sdk/media/media/ndk_av_codec.h | 759 +++++++++++++++++++ zh-cn/native_sdk/media/media/ndk_av_errors.h | 79 ++ zh-cn/native_sdk/media/media/ndk_av_format.h | 245 ++++++ zh-cn/native_sdk/media/media/ndk_av_memory.h | 77 ++ 4 files changed, 1160 insertions(+) create mode 100644 zh-cn/native_sdk/media/media/ndk_av_codec.h create mode 100644 zh-cn/native_sdk/media/media/ndk_av_errors.h create mode 100644 zh-cn/native_sdk/media/media/ndk_av_format.h create mode 100644 zh-cn/native_sdk/media/media/ndk_av_memory.h diff --git a/zh-cn/native_sdk/media/media/ndk_av_codec.h b/zh-cn/native_sdk/media/media/ndk_av_codec.h new file mode 100644 index 00000000..2702900c --- /dev/null +++ b/zh-cn/native_sdk/media/media/ndk_av_codec.h @@ -0,0 +1,759 @@ +/* + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NDK_AV_CODEC_H +#define NDK_AV_CODEC_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include "ndk_av_errors.h" +#include "ndk_av_format.h" +#include "ndk_av_memory.h" + +typedef struct NativeWindow NativeWindow; +typedef struct AVCodec AVCodec; + +/** + * @brief AVCodec MIME types. + * @syscap SystemCapability.Multimedia.Media.Codec + * @since 3.2 + * @version 3.2 + */ +const char * const AVCODEC_MIME_TYPE_VIDEO_AVC = "video/avc"; +const char * const AVCODEC_MIME_TYPE_AUDIO_AAC = "audio/mp4a-latm"; + + +/** + * @brief Enumerates AVCodec Buffer Flags. + * @syscap SystemCapability.Multimedia.Media.Codec + * @since 3.2 + * @version 3.2 + */ +typedef enum AVCodecBufferFlags { + AVCODEC_BUFFER_FLAGS_NONE = 0, + /* This signals the end of stream */ + AVCODEC_BUFFER_FLAGS_EOS = 1 << 0, + /* This indicates that the buffer contains the data for a sync frame */ + AVCODEC_BUFFER_FLAGS_SYNC_FRAME = 1 << 1, + /* This indicates that the buffer only contains part of a frame */ + AVCODEC_BUFFER_FLAGS_PARTIAL_FRAME = 1 << 2, + /* This indicated that the buffer contains codec specific data */ + AVCODEC_BUFFER_FLAGS_CODEC_DATA = 1 << 3, +} AVCodecBufferFlags; + +/** + * @brief Enumerates AVCodec Buffer Flags. + * @syscap SystemCapability.Multimedia.Media.Codec + * @since 3.2 + * @version 3.2 + */ +typedef struct AVCodecBufferAttr { + /* The presentation timestamp in microseconds for the buffer */ + int64_t presentationTimeUs; + /* The amount of data (in bytes) in the buffer */ + int32_t size; + /* The start-offset of the data in the buffer */ + int32_t offset; + /** + * @brief the flags associated with the sample, this + * maybe be a combination of multiple {@link AVCodecBufferFlags}. + */ + uint32_t flags; +} AVCodecBufferAttr; + +/** + * @brief Called when an error occurred. + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @param errorCode Error code. + * @param userData specified data + * @since 3.2 + * @version 3.2 + */ +typedef void (* AVCodecOnAsyncError)(AVCodec *codec, int32_t errorCode, void *userData); + +/** + * @brief Called when the output format has changed. format生命周期仅维持在StreamChanged事件中,禁止结束后访问 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @param format AVFormat句柄指针 + * @param userData specified data + * @since 3.2 + * @version 3.2 + */ +typedef void (* AVCodecOnAsyncStreamChanged)(AVCodec *codec, AVFormat *format, void *userData); + +/** + * @brief Called when an input buffer becomes available. + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @param index The index of the available input buffer. + * @param userData specified data + * @since 3.2 + * @version 3.2 + */ +typedef void (* AVCodecOnAsyncNeedInputData)(AVCodec *codec, uint32_t index, AVMemory *data, void *userData); + +/** + * @brief Called when an out buffer becomes available. attr生命周期仅维持在NewOutputData事件中,禁止结束后访问 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @param index The index of the available output buffer. + * @param attr attr of the available output buffer. For details, see {@link AVCodecBufferAttr} + * @param userData specified data + * @since 3.2 + * @version 3.2 + */ +typedef void (* AVCodecOnAsyncNewOutputData)(AVCodec *codec, uint32_t index, AVMemory *data, + AVCodecBufferAttr *attr, void *userData); + +/** + * @brief Register callback function, Respond to codec reporting events + * @syscap SystemCapability.Multimedia.Media.Codec + * @param onAsyncError 监听编解码错误码,当回调产生时,编解码出现异常状况 + * @param onAsyncStreamChanged 监听编解码流信息,当回调产生时,流信息变更 + * @param onAsyncNeedInputData 监听编解码需要输入数据,当回调产生时,调用者可通过GetInputData获得InputData + * @param onAsyncNewOutputData 监听编解码产生输出数据,当回调产生时,调用者方可调用GetOutputData获取OutputData + * @since 3.2 + * @version 3.2 + */ +typedef struct AVCodecOnAsyncCallback { + AVCodecOnAsyncError onAsyncError; + AVCodecOnAsyncStreamChanged onAsyncStreamChanged; + AVCodecOnAsyncNeedInputData onAsyncNeedInputData; + AVCodecOnAsyncNewOutputData onAsyncNewOutputData; +} AVCodecOnAsyncCallback; + + +/** + * @brief 通过mime创建一个视频解码句柄指针 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param mime 编解码器类型 see AVCODEC_MIME_TYPE + * @return 返回一个AVCodec句柄指针 + * @since 3.2 + * @version 3.2 + */ +AVCodec* OH_AVCODEC_CreateVideoDecoderByMime(const char *mime); + + +/** + * @brief 通过name创建一个视频解码句柄指针 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param name 查询Xml能力 或者 芯片手册,必须确保解码器name正确 + * @return 返回一个AVCodec句柄指针 + * @since 3.2 + * @version 3.2 + */ +AVCodec* OH_AVCODEC_CreateVideoDecoderByName(const char *name); + +/** + * @brief 设置解码器到Release状态,清空解码器资源,销毁解码器 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @since 3.2 + * @version 3.2 + */ +void OH_AVCODEC_DestroyVideoDecoder(AVCodec *codec); + +/** + * @brief 设置一个异步回调函数,用以响应编解码产生的事件,监听编解码工作状态,输入/输出Data情况,要求在Configure/Prepare前设置 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @param callback Refer to the definition of AVCodecOnAsyncCallback on how each callback function is called and what are specified. + * @param userData The specified userdata is the pointer used when those callback functions are called. + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_VideoDecoderSetCallback(AVCodec *codec, AVCodecOnAsyncCallback callback, void *userData); + +/** + * @brief 设置输出Window和Surface,提供解码输出和窗口渲染 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @param window NativeWindow句柄指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_VideoDecoderSetOutputSurface(AVCodec *codec, NativeWindow *window); + +/** + * @brief 设置解码器参数 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @param format AVFormat句柄指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_VideoDecoderConfigure(AVCodec *codec, AVFormat *format); + +/** + * @brief 设置解码器到Prepared状态 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_VideoDecoderPrepare(AVCodec *codec); + +/** + * @brief 设置解码器到Started状态,等待监听事件,通过QueueInputBuffer送入SPS/PTS/ES数据 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_VideoDecoderStart(AVCodec *codec); + +/** + * @brief 设置解码器到Stoped状态,停止解码,可通过Start重新进入Started状态,但需重新输入SPS/PTS数据 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_VideoDecoderStop(AVCodec *codec); + +/** + * @brief 清空解码器队列缓存中的任务 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_VideoDecoderFlush(AVCodec *codec); + +/** + * @brief 设置解码器到Reset状态,清空解码器的工作参数,如需再次使用,需通过Configure和Prepare重新进入Prepared状态 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_VideoDecoderReset(AVCodec *codec); + +/** + * @brief 获取输出AVFormat格式,可以通过AVFormat的KEY获取PixelFormat、Width/Hight等参数 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @return 返回AVFormat句柄指针,生命周期随下一次GetOutputMediaDescription刷新,或伴随AVCodec销毁; + * @since 3.2 + * @version 3.2 + */ +AVFormat* OH_AVCODEC_VideoDecoderGetOutputMediaDescription(AVCodec *codec); + +/** + * @brief 向解码器设置动态参数,只能在Started状态下调用,注意:错误的参数变更,可能会导致解码失败 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @param format AVFormat句柄指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_VideoDecoderSetParameter(AVCodec *codec, AVFormat *format); + +/** + * @brief 当GetInputBuffer返回的AVMemory被写入SPS/PTS/ES数据后,可通过QueueInputBuffer通知解码器读取数据 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @param index AVCodecOnAsyncNeedInputData事件提供的索引值 + * @param attr 描述InputBuffer的属性信息 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_VideoDecoderPushInputData(AVCodec *codec, uint32_t index, AVCodecBufferAttr attr); + +/** + * @brief 当监听到AVCodecOnAsyncNewOutputData事件时,可通过事件提供的索引值,将OutputBuffer送给surface + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @param index OutputBuffer索引值 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_VideoDecoderRenderOutputData(AVCodec *codec, uint32_t index); + +/** + * @brief 当监听到AVCodecOnAsyncNewOutputData事件时,可通过事件提供的索引值,释放OutputBuffer + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @param index OutputBuffer索引值 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_VideoDecoderFreeOutputData(AVCodec *codec, uint32_t index); + +// Video Encoder +/** + * @brief 通过mime创建一个视频编码句柄指针 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param mime 编解码器类型 see AVCODEC_MIME_TYPE + * @return 返回一个AVCodec句柄指针 + * @since 3.2 + * @version 3.2 + */ +AVCodec* OH_AVCODEC_CreateVideoEncoderByMime(const char *mime); + +/** + * @brief 通过name创建一个视频编码句柄指针 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param name 查询Xml能力 或者 芯片手册,必须确保解码器name正确 + * @return 返回一个AVCodec句柄指针 + * @since 3.2 + * @version 3.2 + */ +AVCodec* OH_AVCODEC_CreateVideoEncoderByName(const char *name); + +/** + * @brief 设置编码器到Release状态,清空编码器资源,销毁编码器 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @since 3.2 + * @version 3.2 + */ +void OH_AVCODEC_DestroyVideoEncoder(AVCodec *codec); + +/** + * @brief 设置一个异步回调函数,用以响应编解码产生的事件,监听编解码工作状态,输入/输出Data情况,要求在Configure/Prepare前设置 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @param callback Refer to the definition of AVCodecOnAsyncCallback on how each callback function is called and what are specified. + * @param userData The specified userdata is the pointer used when those callback functions are called. + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_VideoEncoderSetCallback(AVCodec *codec, AVCodecOnAsyncCallback callback, void *userData); + +/** + * @brief 设置编码器参数 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @param format AVFormat句柄指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_VideoEncoderConfigure(AVCodec *codec, AVFormat *format); + +/** + * @brief 设置编码器到Prepared状态 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_VideoEncoderPrepare(AVCodec *codec); + +/** + * @brief 设置编码器到Started状态,等待监听事件,通过QueueInputBuffer送入SPS/PTS/ES数据 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_VideoEncoderStart(AVCodec *codec); + +/** + * @brief 设置编码器到Stoped状态,停止编码,可通过Start重新进入Started状态,但需重新输入SPS/PTS数据 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_VideoEncoderStop(AVCodec *codec); + +/** + * @brief 清空编码器队列缓存中的任务 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_VideoEncoderFlush(AVCodec *codec); + +/** + * @brief 设置编码器到Reset状态,清空编码器的工作参数,如需再次使用,需通过Configure和Prepare重新进入Prepared状态 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_VideoEncoderReset(AVCodec *codec); + +/** + * @brief 向编码器设置动态参数,只能在Started状态下调用,注意:错误的参数变更,可能会导致编码失败 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @param format AVFormat句柄指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_VideoEncoderSetParameter(AVCodec *codec, AVFormat *format); + +/** + * @brief 获取输出AVFormat格式,可以通过AVFormat的KEY获取PixelFormat、Width/Hight等参数 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @return 返回AVFormat句柄指针,生命周期随下一次GetOutputMediaDescription刷新,或伴随AVCodec销毁; + * @since 3.2 + * @version 3.2 + */ +AVFormat* OH_AVCODEC_VideoEncoderGetOutputMediaDescription(AVCodec *codec); + +/** + * @brief Obtains the surface from encoder. + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @param window NativeWindow句柄指针的指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_VideoEncoderGetInputSurface(AVCodec *codec, NativeWindow **window); + +/** + * @brief 当监听到AVCodecOnAsyncNewOutputData事件时,可通过事件提供的索引值,释放OutputBuffer + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @param index OutputBuffer索引值 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_VideoEncoderFreeOutputData(AVCodec *codec, uint32_t index); + +// Audio Decoder +/** + * @brief 通过mime创建一个音频解码码句柄指针 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param mime 编解码器类型 see AVCODEC_MIME_TYPE + * @return 返回一个AVCodec句柄指针 + * @since 3.2 + * @version 3.2 + */ +AVCodec* OH_AVCODEC_CreateAudioDecoderByMime(const char *mime); + +/** + * @brief 通过name创建一个音频解码句柄指针 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param name 查询Xml能力 或者 芯片手册,必须确保解码器name正确 + * @return 返回一个AVCodec句柄指针 + * @since 3.2 + * @version 3.2 + */ +AVCodec* OH_AVCODEC_CreateAudioDecoderByName(const char *name); + +/** + * @brief 设置解码器到Release状态,清空解码器资源,销毁解码器 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @since 3.2 + * @version 3.2 + */ +void OH_AVCODEC_DestroyAudioDecoder(AVCodec *codec); + +/** + * @brief 设置一个异步回调函数,用以响应编解码产生的事件,监听编解码工作状态,输入/输出Data情况,要求在Configure/Prepare前设置 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @param callback Refer to the definition of AVCodecOnAsyncCallback on how each callback function is called and what are specified. + * @param userData The specified userdata is the pointer used when those callback functions are called. + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_AudioDecoderSetCallback(AVCodec *codec, AVCodecOnAsyncCallback callback, void *userData); + +/** + * @brief 设置解码器参数 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @param format AVFormat句柄指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_AudioDecoderConfigure(AVCodec *codec, AVFormat *format); + +/** + * @brief 设置解码器到Prepared状态 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_AudioDecoderPrepare(AVCodec *codec); + +/** + * @brief 设置解码器到Started状态,等待监听事件,通过QueueInputBuffer送入ES数据 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_AudioDecoderStart(AVCodec *codec); + +/** + * @brief 设置解码器到Stoped状态,停止解码,可通过Start重新进入Started状态,但需重新输入ES数据 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_AudioDecoderStop(AVCodec *codec); + +/** + * @brief 清空解码器队列缓存中的任务 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_AudioDecoderFlush(AVCodec *codec); + +/** + * @brief 设置解码器到Reset状态,清空解码器的工作参数,如需再次使用,需通过Configure和Prepare重新进入Prepared状态 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ + +AVErrCode OH_AVCODEC_AudioDecoderReset(AVCodec *codec); + +/** + * @brief 向解码器设置动态参数,只能在Started状态下调用,注意:错误的参数变更,可能会导致解码失败 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @param format AVFormat句柄指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_AudioDecoderSetParameter(AVCodec *codec, AVFormat *format); + +/** + * @brief 获取输出AVFormat格式,可以通过AVFormat的KEY获取SampleFormat、channel、SampleRate等参数 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @return 返回AVFormat句柄指针,生命周期随下一次GetOutputMediaDescription刷新,或伴随AVCodec销毁; + * @since 3.2 + * @version 3.2 + */ +AVFormat* OH_AVCODEC_AudioDecoderGetOutputMediaDescription(AVCodec *codec); + +/** + * @brief 当GetInputBuffer返回的AVMemory被写入ES数据后,可通过QueueInputBuffer通知解码器读取数据 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @param index AVCodecOnAsyncNeedInputData事件提供的索引值 + * @param attr 描述InputBuffer的属性信息 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_AudioDecoderPushInputData(AVCodec *codec, uint32_t index, AVCodecBufferAttr attr); + +/** + * @brief 当监听到AVCodecOnAsyncNewOutputData事件时,可通过事件提供的索引值,释放OutputBuffer + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @param index OutputBuffer索引值 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_AudioDecoderFreeOutputData(AVCodec *codec, uint32_t index); + +// Audio Encoder +/** + * @brief 通过mime创建一个音频编码句柄指针 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param mime 编解码器类型 see AVCODEC_MIME_TYPE + * @return 返回一个AVCodec句柄指针 + * @since 3.2 + * @version 3.2 + */ +AVCodec* OH_AVCODEC_CreateAudioEncoderByMime(const char *mime); + +/** + * @brief 通过name创建一个音频编码句柄指针 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param name 查询Xml能力 或者 芯片手册,必须确保解码器name正确 + * @return 返回一个AVCodec句柄指针 + * @since 3.2 + * @version 3.2 + */ +AVCodec* OH_AVCODEC_CreateAudioEncoderByName(const char *name); + +/** + * @brief 设置编码器到Release状态,清空编码器资源,销毁编码器 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @since 3.2 + * @version 3.2 + */ +void OH_AVCODEC_DestroyAudioEncoder(AVCodec *codec); + +/** + * @brief 设置一个异步回调函数,用以响应编解码产生的事件,监听编解码工作状态,输入/输出Data情况,要求在Configure/Prepare前设置 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @param callback Refer to the definition of AVCodecOnAsyncCallback on how each callback function is called and what are specified. + * @param userData The specified userdata is the pointer used when those callback functions are called. + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_AudioEncoderSetCallback(AVCodec *codec, AVCodecOnAsyncCallback callback, void *userData); + +/** + * @brief 设置编码器参数 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @param format AVFormat句柄指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_AudioEncoderConfigure(AVCodec *codec, AVFormat *format); + +/** + * @brief 设置编码器到Prepared状态 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_AudioEncoderPrepare(AVCodec *codec); + +/** + * @brief 设置编码器到Started状态,等待监听事件,通过QueueInputBuffer送入ES数据 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_AudioEncoderStart(AVCodec *codec); + +/** + * @brief 设置编码器到Stoped状态,停止编码,可通过Start重新进入Started状态,但需重新输入ES数据 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_AudioEncoderStop(AVCodec *codec); + +/** + * @brief 清空编码器队列缓存中的任务 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_AudioEncoderFlush(AVCodec *codec); + +/** + * @brief 设置编码器到Reset状态,清空编码器的工作参数,如需再次使用,需通过Configure和Prepare重新进入Prepared状态 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_AudioEncoderReset(AVCodec *codec); + +/** + * @brief 向编码器设置动态参数,只能在Started状态下调用,注意:错误的参数变更,可能会导致编码失败 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @param format AVFormat句柄指针 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_AudioEncoderSetParameter(AVCodec *codec, AVFormat *format); + +/** + * @brief 获取输出AVFormat格式,可以通过AVFormat的KEY获取SampleFormat、channel、SampleRate等参数 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @return 返回AVFormat句柄指针,生命周期随下一次GetOutputMediaDescription刷新,或伴随AVCodec销毁; + * @since 3.2 + * @version 3.2 + */ +AVFormat* OH_AVCODEC_AudioEncoderGetOutputMediaDescription(AVCodec *codec); + +/** + * @brief 当GetInputBuffer返回的AVMemory被写入ES数据后,可通过QueueInputBuffer通知解码器读取数据 + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @param index AVCodecOnAsyncNeedInputData事件提供的索引值 + * @param attr 描述InputBuffer的属性信息 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_AudioEncoderPushInputData(AVCodec *codec, uint32_t index, AVCodecBufferAttr attr); + +/** + * @brief 当监听到AVCodecOnAsyncNewOutputData事件时,可通过事件提供的索引值,释放OutputBuffer + * @syscap SystemCapability.Multimedia.Media.Codec + * @param codec AVCodec句柄指针 + * @param index OutputBuffer索引值 + * @return AVErrCode 错误码 + * @since 3.2 + * @version 3.2 + */ +AVErrCode OH_AVCODEC_AudioEncoderFreeOutputData(AVCodec *codec, uint32_t index); + +#ifdef __cplusplus +} +#endif + +#endif // NDK_AV_CODEC_H \ No newline at end of file diff --git a/zh-cn/native_sdk/media/media/ndk_av_errors.h b/zh-cn/native_sdk/media/media/ndk_av_errors.h new file mode 100644 index 00000000..99daedd8 --- /dev/null +++ b/zh-cn/native_sdk/media/media/ndk_av_errors.h @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef NDK_AV_ERRORS_H +#define NDK_AV_ERRORS_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief AV error code + * + * @since 3.2 + * @version 3.2 + */ +typedef enum AVErrCode { + /** + * ok. + */ + AV_ERR_OK = 0, + /** + * no memory. + */ + AV_ERR_NO_MEMORY = 1, + /** + * opertation not be permitted. + */ + AV_ERR_OPERATE_NOT_PERMIT = 2, + /** + * invalid argument. + */ + AV_ERR_INVALID_VAL = 3, + /** + * IO error. + */ + AV_ERR_IO = 4, + /** + * network timeout. + */ + AV_ERR_TIMEOUT = 5, + /** + * unknown error. + */ + AV_ERR_UNKNOWN = 6, + /** + * media service died. + */ + AV_ERR_SERVICE_DIED = 7, + /** + * the state is not support this operation. + */ + AV_ERR_INVALID_STATE = 8, + /** + * unsupport interface. + */ + AV_ERR_UNSUPPORT = 9, + /** + * extend err start. + */ + AV_ERR_EXTEND_START = 100, +} AVErrCode; + +#ifdef __cplusplus +} +#endif + +#endif // NDK_AV_ERRORS_H \ No newline at end of file diff --git a/zh-cn/native_sdk/media/media/ndk_av_format.h b/zh-cn/native_sdk/media/media/ndk_av_format.h new file mode 100644 index 00000000..b1ec3791 --- /dev/null +++ b/zh-cn/native_sdk/media/media/ndk_av_format.h @@ -0,0 +1,245 @@ +/* + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NDK_AV_FORMAT_H +#define NDK_AV_FORMAT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +typedef struct AVFormat AVFormat; + +/** + * @brief Enumerates AVPixel Format. + * @syscap SystemCapability.Multimedia.Media.Core + * @since 3.2 + * @version 3.2 + */ +typedef enum AVPixelFormat { + /** + * yuv 420 planar. + */ + AV_PIXEL_FORMT_YUVI420 = 1, + /** + * NV12. yuv 420 semiplanar. + */ + AV_PIXEL_FORMT_NV12 = 2, + /** + * NV21. yvu 420 semiplanar. + */ + AV_PIXEL_FORMT_NV21 = 3, + /** + * format from surface. + */ + AV_PIXEL_FORMT_SURFACE_FORMAT = 4, +} AVPixelFormat; + +/** + * @brief 创建一个AVFormat句柄指针,用以读写数据 + * @syscap SystemCapability.Multimedia.Media.Core + * @return 返回值为AVFormat句柄指针 + * @since 3.2 + * @version 3.2 + */ +struct AVFormat* OH_AV_CreateFormat(void); + +/** + * @brief 销毁指定AVFormat句柄资源 + * @syscap SystemCapability.Multimedia.Media.Core + * @param format AVFormat句柄指针 + * @return void + * @since 3.2 + * @version 3.2 + */ +void OH_AV_DestroyFormat(struct AVFormat *format); + +/** + * @brief 拷贝AVFormat句柄资源 + * @syscap SystemCapability.Multimedia.Media.Core + * @param to 接收数据的AVFormat句柄指针 + * @param from 被拷贝数据的AVFormat句柄指针 + * @return 返回值为TRUE 成功,FALSE 失败 + * @since 3.2 + * @version 3.2 + */ +bool OH_AV_FormatCopy(struct AVFormat *to, struct AVFormat *from); + +/** + * @brief 向AVFormat写入Int数据 + * @syscap SystemCapability.Multimedia.Media.Core + * @param format AVFormat句柄指针 + * @param key 写入数据的键值 + * @param value 写入的数据 + * @return 返回值为TRUE 成功,FALSE 失败 + * @since 3.2 + * @version 3.2 + */ +bool OH_AV_FormatPutIntValue(struct AVFormat *format, const char *key, int32_t value); + +/** + * @brief 向AVFormat写入Long数据 + * @syscap SystemCapability.Multimedia.Media.Core + * @param format AVFormat句柄指针 + * @param key 写入数据的键值 + * @param value 写入的数据 + * @return 返回值为TRUE 成功,FALSE 失败 + * @since 3.2 + * @version 3.2 + */ +bool OH_AV_FormatPutLongValue(struct AVFormat *format, const char *key, int64_t value); + +/** + * @brief 向AVFormat写入Float数据 + * @syscap SystemCapability.Multimedia.Media.Core + * @param format AVFormat句柄指针 + * @param key 写入数据的键值 + * @param value 写入的数据 + * @return 返回值为TRUE 成功,FALSE 失败 + * @since 3.2 + * @version 3.2 + */ +bool OH_AV_FormatPutFloatValue(struct AVFormat *format, const char *key, float value); + +/** + * @brief 向AVFormat写入Double数据 + * @syscap SystemCapability.Multimedia.Media.Core + * @param format AVFormat句柄指针 + * @param key 写入数据的键值 + * @param value 写入的数据 + * @return 返回值为TRUE 成功,FALSE 失败 + * @since 3.2 + * @version 3.2 + */ +bool OH_AV_FormatPutDoubleValue(struct AVFormat *format, const char *key, double value); + +/** + * @brief 向AVFormat写入String数据 + * @syscap SystemCapability.Multimedia.Media.Core + * @param format AVFormat句柄指针 + * @param key 写入数据的键值 + * @param value 写入的数据 + * @return 返回值为TRUE 成功,FALSE 失败 + * @since 3.2 + * @version 3.2 + */ +bool OH_AV_FormatPutStringValue(struct AVFormat *format, const char *key, const char *value); + +/** + * @brief 向AVFormat写入一块指定长度的数据 + * @syscap SystemCapability.Multimedia.Media.Core + * @param format AVFormat句柄指针 + * @param key 写入数据的键值 + * @param addr 写入的数据地址 + * @param size 写入的数据长度 + * @return 返回值为TRUE 成功,FALSE 失败 + * @since 3.2 + * @version 3.2 + */ +bool OH_AV_FormatPutBuffer(struct AVFormat *format, const char *key, const uint8_t *addr, size_t size); + +/** + * @brief 从AVFormat读取Int数据 + * @syscap SystemCapability.Multimedia.Media.Core + * @param format AVFormat句柄指针 + * @param key 读取数据的键值 + * @param out 读取的数据 + * @return 返回值为TRUE 成功,FALSE 失败 + * @since 3.2 + * @version 3.2 + */ +bool OH_AV_FormatGetIntValue(struct AVFormat *format, const char *key, int32_t *out); + +/** + * @brief 从AVFormat读取Long数据 + * @syscap SystemCapability.Multimedia.Media.Core + * @param format AVFormat句柄指针 + * @param key 读取数据的键值 + * @param out 读取的数据 + * @return 返回值为TRUE 成功,FALSE 失败 + * @since 3.2 + * @version 3.2 + */ +bool OH_AV_FormatGetLongValue(struct AVFormat *format, const char *key, int64_t *out); + +/** + * @brief 从AVFormat读取Float数据 + * @syscap SystemCapability.Multimedia.Media.Core + * @param format AVFormat句柄指针 + * @param key 读取数据的键值 + * @param out 读取的数据 + * @return 返回值为TRUE 成功,FALSE 失败 + * @since 3.2 + * @version 3.2 + */ +bool OH_AV_FormatGetFloatValue(struct AVFormat *format, const char *key, float *out); + +/** + * @brief 从AVFormat读取Double数据 + * @syscap SystemCapability.Multimedia.Media.Core + * @param format AVFormat句柄指针 + * @param key 读取数据的键值 + * @param out 读取的数据 + * @return 返回值为TRUE 成功,FALSE 失败 + * @since 3.2 + * @version 3.2 + */ +bool OH_AV_FormatGetDoubleValue(struct AVFormat *format, const char *key, double *out); + +/** + * @brief 从AVFormat读取Double数据 + * @syscap SystemCapability.Multimedia.Media.Core + * @param format AVFormat句柄指针 + * @param key 读取数据的键值 + * @param out 读取的字符串指针,指向的数据生命周期伴随GetString更新,伴随Format销毁,如果调用者需要长期持有,必须进行内存拷贝 + * @return 返回值为TRUE 成功,FALSE 失败 + * @since 3.2 + * @version 3.2 + */ +bool OH_AV_FormatGetStringValue(struct AVFormat *format, const char *key, const char **out); + +/** + * @brief The returned data is owned by the format and remains valid as long as the named entry is part of the format. + * @syscap SystemCapability.Multimedia.Media.Core + * @param format AVFormat句柄指针 + * @param key 读写数据的键值 + * @param addr 生命周期是format持有,伴随Format销毁,如果调用者需要长期持有,必须进行内存拷贝 + * @param size 读写数据的长度 + * @return 返回值为TRUE 成功,FALSE 失败 + * @since 3.2 + * @version 3.2 + */ +bool OH_AV_FormatGetBuffer(struct AVFormat *format, const char *key, uint8_t **addr, size_t *size); + + +/** + * @brief The returned data is owned by the format and remains valid as long as the named entry is part of the format. + * @syscap SystemCapability.Multimedia.Media.Core + * @param format AVFormat句柄指针 + * @return 返回由键值和数据组成的字符串 + * @since 3.2 + * @version 3.2 + */ +const char * OH_AV_FormatDumpInfo(struct AVFormat *format); + +#ifdef __cplusplus +} +#endif + +#endif // NDK_AV_FORMAT_H \ No newline at end of file diff --git a/zh-cn/native_sdk/media/media/ndk_av_memory.h b/zh-cn/native_sdk/media/media/ndk_av_memory.h new file mode 100644 index 00000000..228377ae --- /dev/null +++ b/zh-cn/native_sdk/media/media/ndk_av_memory.h @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NDK_AV_MEMORY_H +#define NDK_AV_MEMORY_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +typedef struct AVMemory AVMemory; + +typedef enum AVMemoryFlags { + /** + * This flag bit indicates that the remote process is allowed to read and write + * the shared memory. If no flags are specified, this is the default memory + * sharing policy. If the FLAGS_READ_ONLY bit is set, this flag bit is ignored. + */ + FLAGS_READ_WRITE = 0x1, + /** + * For platforms that support multiple processes, this flag bit indicates that the + * remote process can only read data in the shared memory. If this flag is not set, + * the remote process has both read and write permissions by default. Adding this + * flag does not affect the process that creates the memory, which always has the + * read and write permission on the shared memory. For platforms that do not support + * multi-processes, the memory read and write permission control capability may + * not be available. In this case, this flag is invalid. + */ + FLAGS_READ_ONLY = 0x2, +} AVMemoryFlags; + +/** + * @brief Get the memory's virtual address + * @param mem Encapsulate AVMemory structure instance pointer + * @return the memory's virtual address if the memory is valid, otherwise nullptr. + * @since 3.2 + * @version 3.2 + */ +uint8_t* OH_AV_MemoryGetAddr(struct AVMemory *mem); + +/** + * @brief Get the memory's size + * @param mem Encapsulate AVMemory structure instance pointer + * @return the memory's size if the memory is valid, otherwise -1. + * @since 3.2 + * @version 3.2 + */ +int32_t OH_AV_MemoryGetSize(struct AVMemory *mem); + +/** + * @brief Get the memory's flags set by the creator, refer to {@AVMemoryFlags} + * @param mem Encapsulate AVMemory structure instance pointer + * @return the memory's flags if the memory is valid, otherwise 0. + * @since 3.2 + * @version 3.2 + */ +uint32_t OH_AV_MemoryGetFlags(struct AVMemory *mem); + +#ifdef __cplusplus +} +#endif + +#endif // NDK_AV_MEMORY_H \ No newline at end of file -- Gitee From 3d86eaf8ebf5a6f345f0aee1dd345ee1bf880d75 Mon Sep 17 00:00:00 2001 From: lin-jianwu Date: Thu, 30 Jun 2022 20:10:46 +0800 Subject: [PATCH 02/14] fix since and version num Signed-off-by: lin-jianwu --- zh-cn/native_sdk/media/media/ndk_av_codec.h | 264 +++++++++---------- zh-cn/native_sdk/media/media/ndk_av_errors.h | 4 +- zh-cn/native_sdk/media/media/ndk_av_format.h | 68 ++--- zh-cn/native_sdk/media/media/ndk_av_memory.h | 12 +- 4 files changed, 174 insertions(+), 174 deletions(-) diff --git a/zh-cn/native_sdk/media/media/ndk_av_codec.h b/zh-cn/native_sdk/media/media/ndk_av_codec.h index 2702900c..e343e092 100644 --- a/zh-cn/native_sdk/media/media/ndk_av_codec.h +++ b/zh-cn/native_sdk/media/media/ndk_av_codec.h @@ -33,8 +33,8 @@ typedef struct AVCodec AVCodec; /** * @brief AVCodec MIME types. * @syscap SystemCapability.Multimedia.Media.Codec - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ const char * const AVCODEC_MIME_TYPE_VIDEO_AVC = "video/avc"; const char * const AVCODEC_MIME_TYPE_AUDIO_AAC = "audio/mp4a-latm"; @@ -43,8 +43,8 @@ const char * const AVCODEC_MIME_TYPE_AUDIO_AAC = "audio/mp4a-latm"; /** * @brief Enumerates AVCodec Buffer Flags. * @syscap SystemCapability.Multimedia.Media.Codec - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ typedef enum AVCodecBufferFlags { AVCODEC_BUFFER_FLAGS_NONE = 0, @@ -61,8 +61,8 @@ typedef enum AVCodecBufferFlags { /** * @brief Enumerates AVCodec Buffer Flags. * @syscap SystemCapability.Multimedia.Media.Codec - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ typedef struct AVCodecBufferAttr { /* The presentation timestamp in microseconds for the buffer */ @@ -84,8 +84,8 @@ typedef struct AVCodecBufferAttr { * @param codec AVCodec句柄指针 * @param errorCode Error code. * @param userData specified data - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ typedef void (* AVCodecOnAsyncError)(AVCodec *codec, int32_t errorCode, void *userData); @@ -95,8 +95,8 @@ typedef void (* AVCodecOnAsyncError)(AVCodec *codec, int32_t errorCode, void *us * @param codec AVCodec句柄指针 * @param format AVFormat句柄指针 * @param userData specified data - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ typedef void (* AVCodecOnAsyncStreamChanged)(AVCodec *codec, AVFormat *format, void *userData); @@ -106,8 +106,8 @@ typedef void (* AVCodecOnAsyncStreamChanged)(AVCodec *codec, AVFormat *format, v * @param codec AVCodec句柄指针 * @param index The index of the available input buffer. * @param userData specified data - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ typedef void (* AVCodecOnAsyncNeedInputData)(AVCodec *codec, uint32_t index, AVMemory *data, void *userData); @@ -118,8 +118,8 @@ typedef void (* AVCodecOnAsyncNeedInputData)(AVCodec *codec, uint32_t index, AVM * @param index The index of the available output buffer. * @param attr attr of the available output buffer. For details, see {@link AVCodecBufferAttr} * @param userData specified data - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ typedef void (* AVCodecOnAsyncNewOutputData)(AVCodec *codec, uint32_t index, AVMemory *data, AVCodecBufferAttr *attr, void *userData); @@ -131,8 +131,8 @@ typedef void (* AVCodecOnAsyncNewOutputData)(AVCodec *codec, uint32_t index, AVM * @param onAsyncStreamChanged 监听编解码流信息,当回调产生时,流信息变更 * @param onAsyncNeedInputData 监听编解码需要输入数据,当回调产生时,调用者可通过GetInputData获得InputData * @param onAsyncNewOutputData 监听编解码产生输出数据,当回调产生时,调用者方可调用GetOutputData获取OutputData - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ typedef struct AVCodecOnAsyncCallback { AVCodecOnAsyncError onAsyncError; @@ -147,8 +147,8 @@ typedef struct AVCodecOnAsyncCallback { * @syscap SystemCapability.Multimedia.Media.Codec * @param mime 编解码器类型 see AVCODEC_MIME_TYPE * @return 返回一个AVCodec句柄指针 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVCodec* OH_AVCODEC_CreateVideoDecoderByMime(const char *mime); @@ -158,8 +158,8 @@ AVCodec* OH_AVCODEC_CreateVideoDecoderByMime(const char *mime); * @syscap SystemCapability.Multimedia.Media.Codec * @param name 查询Xml能力 或者 芯片手册,必须确保解码器name正确 * @return 返回一个AVCodec句柄指针 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVCodec* OH_AVCODEC_CreateVideoDecoderByName(const char *name); @@ -167,8 +167,8 @@ AVCodec* OH_AVCODEC_CreateVideoDecoderByName(const char *name); * @brief 设置解码器到Release状态,清空解码器资源,销毁解码器 * @syscap SystemCapability.Multimedia.Media.Codec * @param codec AVCodec句柄指针 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ void OH_AVCODEC_DestroyVideoDecoder(AVCodec *codec); @@ -179,8 +179,8 @@ void OH_AVCODEC_DestroyVideoDecoder(AVCodec *codec); * @param callback Refer to the definition of AVCodecOnAsyncCallback on how each callback function is called and what are specified. * @param userData The specified userdata is the pointer used when those callback functions are called. * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_VideoDecoderSetCallback(AVCodec *codec, AVCodecOnAsyncCallback callback, void *userData); @@ -190,8 +190,8 @@ AVErrCode OH_AVCODEC_VideoDecoderSetCallback(AVCodec *codec, AVCodecOnAsyncCallb * @param codec AVCodec句柄指针 * @param window NativeWindow句柄指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_VideoDecoderSetOutputSurface(AVCodec *codec, NativeWindow *window); @@ -201,8 +201,8 @@ AVErrCode OH_AVCODEC_VideoDecoderSetOutputSurface(AVCodec *codec, NativeWindow * * @param codec AVCodec句柄指针 * @param format AVFormat句柄指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_VideoDecoderConfigure(AVCodec *codec, AVFormat *format); @@ -211,8 +211,8 @@ AVErrCode OH_AVCODEC_VideoDecoderConfigure(AVCodec *codec, AVFormat *format); * @syscap SystemCapability.Multimedia.Media.Codec * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_VideoDecoderPrepare(AVCodec *codec); @@ -221,8 +221,8 @@ AVErrCode OH_AVCODEC_VideoDecoderPrepare(AVCodec *codec); * @syscap SystemCapability.Multimedia.Media.Codec * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_VideoDecoderStart(AVCodec *codec); @@ -231,8 +231,8 @@ AVErrCode OH_AVCODEC_VideoDecoderStart(AVCodec *codec); * @syscap SystemCapability.Multimedia.Media.Codec * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_VideoDecoderStop(AVCodec *codec); @@ -241,8 +241,8 @@ AVErrCode OH_AVCODEC_VideoDecoderStop(AVCodec *codec); * @syscap SystemCapability.Multimedia.Media.Codec * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_VideoDecoderFlush(AVCodec *codec); @@ -251,8 +251,8 @@ AVErrCode OH_AVCODEC_VideoDecoderFlush(AVCodec *codec); * @syscap SystemCapability.Multimedia.Media.Codec * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_VideoDecoderReset(AVCodec *codec); @@ -261,8 +261,8 @@ AVErrCode OH_AVCODEC_VideoDecoderReset(AVCodec *codec); * @syscap SystemCapability.Multimedia.Media.Codec * @param codec AVCodec句柄指针 * @return 返回AVFormat句柄指针,生命周期随下一次GetOutputMediaDescription刷新,或伴随AVCodec销毁; - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVFormat* OH_AVCODEC_VideoDecoderGetOutputMediaDescription(AVCodec *codec); @@ -272,8 +272,8 @@ AVFormat* OH_AVCODEC_VideoDecoderGetOutputMediaDescription(AVCodec *codec); * @param codec AVCodec句柄指针 * @param format AVFormat句柄指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_VideoDecoderSetParameter(AVCodec *codec, AVFormat *format); @@ -284,8 +284,8 @@ AVErrCode OH_AVCODEC_VideoDecoderSetParameter(AVCodec *codec, AVFormat *format); * @param index AVCodecOnAsyncNeedInputData事件提供的索引值 * @param attr 描述InputBuffer的属性信息 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_VideoDecoderPushInputData(AVCodec *codec, uint32_t index, AVCodecBufferAttr attr); @@ -295,8 +295,8 @@ AVErrCode OH_AVCODEC_VideoDecoderPushInputData(AVCodec *codec, uint32_t index, A * @param codec AVCodec句柄指针 * @param index OutputBuffer索引值 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_VideoDecoderRenderOutputData(AVCodec *codec, uint32_t index); @@ -306,8 +306,8 @@ AVErrCode OH_AVCODEC_VideoDecoderRenderOutputData(AVCodec *codec, uint32_t index * @param codec AVCodec句柄指针 * @param index OutputBuffer索引值 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_VideoDecoderFreeOutputData(AVCodec *codec, uint32_t index); @@ -317,8 +317,8 @@ AVErrCode OH_AVCODEC_VideoDecoderFreeOutputData(AVCodec *codec, uint32_t index); * @syscap SystemCapability.Multimedia.Media.Codec * @param mime 编解码器类型 see AVCODEC_MIME_TYPE * @return 返回一个AVCodec句柄指针 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVCodec* OH_AVCODEC_CreateVideoEncoderByMime(const char *mime); @@ -327,8 +327,8 @@ AVCodec* OH_AVCODEC_CreateVideoEncoderByMime(const char *mime); * @syscap SystemCapability.Multimedia.Media.Codec * @param name 查询Xml能力 或者 芯片手册,必须确保解码器name正确 * @return 返回一个AVCodec句柄指针 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVCodec* OH_AVCODEC_CreateVideoEncoderByName(const char *name); @@ -336,8 +336,8 @@ AVCodec* OH_AVCODEC_CreateVideoEncoderByName(const char *name); * @brief 设置编码器到Release状态,清空编码器资源,销毁编码器 * @syscap SystemCapability.Multimedia.Media.Codec * @param codec AVCodec句柄指针 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ void OH_AVCODEC_DestroyVideoEncoder(AVCodec *codec); @@ -348,8 +348,8 @@ void OH_AVCODEC_DestroyVideoEncoder(AVCodec *codec); * @param callback Refer to the definition of AVCodecOnAsyncCallback on how each callback function is called and what are specified. * @param userData The specified userdata is the pointer used when those callback functions are called. * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_VideoEncoderSetCallback(AVCodec *codec, AVCodecOnAsyncCallback callback, void *userData); @@ -359,8 +359,8 @@ AVErrCode OH_AVCODEC_VideoEncoderSetCallback(AVCodec *codec, AVCodecOnAsyncCallb * @param codec AVCodec句柄指针 * @param format AVFormat句柄指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_VideoEncoderConfigure(AVCodec *codec, AVFormat *format); @@ -369,8 +369,8 @@ AVErrCode OH_AVCODEC_VideoEncoderConfigure(AVCodec *codec, AVFormat *format); * @syscap SystemCapability.Multimedia.Media.Codec * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_VideoEncoderPrepare(AVCodec *codec); @@ -379,8 +379,8 @@ AVErrCode OH_AVCODEC_VideoEncoderPrepare(AVCodec *codec); * @syscap SystemCapability.Multimedia.Media.Codec * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_VideoEncoderStart(AVCodec *codec); @@ -389,8 +389,8 @@ AVErrCode OH_AVCODEC_VideoEncoderStart(AVCodec *codec); * @syscap SystemCapability.Multimedia.Media.Codec * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_VideoEncoderStop(AVCodec *codec); @@ -399,8 +399,8 @@ AVErrCode OH_AVCODEC_VideoEncoderStop(AVCodec *codec); * @syscap SystemCapability.Multimedia.Media.Codec * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_VideoEncoderFlush(AVCodec *codec); @@ -409,8 +409,8 @@ AVErrCode OH_AVCODEC_VideoEncoderFlush(AVCodec *codec); * @syscap SystemCapability.Multimedia.Media.Codec * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_VideoEncoderReset(AVCodec *codec); @@ -420,8 +420,8 @@ AVErrCode OH_AVCODEC_VideoEncoderReset(AVCodec *codec); * @param codec AVCodec句柄指针 * @param format AVFormat句柄指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_VideoEncoderSetParameter(AVCodec *codec, AVFormat *format); @@ -430,8 +430,8 @@ AVErrCode OH_AVCODEC_VideoEncoderSetParameter(AVCodec *codec, AVFormat *format); * @syscap SystemCapability.Multimedia.Media.Codec * @param codec AVCodec句柄指针 * @return 返回AVFormat句柄指针,生命周期随下一次GetOutputMediaDescription刷新,或伴随AVCodec销毁; - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVFormat* OH_AVCODEC_VideoEncoderGetOutputMediaDescription(AVCodec *codec); @@ -441,8 +441,8 @@ AVFormat* OH_AVCODEC_VideoEncoderGetOutputMediaDescription(AVCodec *codec); * @param codec AVCodec句柄指针 * @param window NativeWindow句柄指针的指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_VideoEncoderGetInputSurface(AVCodec *codec, NativeWindow **window); @@ -452,8 +452,8 @@ AVErrCode OH_AVCODEC_VideoEncoderGetInputSurface(AVCodec *codec, NativeWindow ** * @param codec AVCodec句柄指针 * @param index OutputBuffer索引值 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_VideoEncoderFreeOutputData(AVCodec *codec, uint32_t index); @@ -463,8 +463,8 @@ AVErrCode OH_AVCODEC_VideoEncoderFreeOutputData(AVCodec *codec, uint32_t index); * @syscap SystemCapability.Multimedia.Media.Codec * @param mime 编解码器类型 see AVCODEC_MIME_TYPE * @return 返回一个AVCodec句柄指针 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVCodec* OH_AVCODEC_CreateAudioDecoderByMime(const char *mime); @@ -473,8 +473,8 @@ AVCodec* OH_AVCODEC_CreateAudioDecoderByMime(const char *mime); * @syscap SystemCapability.Multimedia.Media.Codec * @param name 查询Xml能力 或者 芯片手册,必须确保解码器name正确 * @return 返回一个AVCodec句柄指针 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVCodec* OH_AVCODEC_CreateAudioDecoderByName(const char *name); @@ -482,8 +482,8 @@ AVCodec* OH_AVCODEC_CreateAudioDecoderByName(const char *name); * @brief 设置解码器到Release状态,清空解码器资源,销毁解码器 * @syscap SystemCapability.Multimedia.Media.Codec * @param codec AVCodec句柄指针 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ void OH_AVCODEC_DestroyAudioDecoder(AVCodec *codec); @@ -494,8 +494,8 @@ void OH_AVCODEC_DestroyAudioDecoder(AVCodec *codec); * @param callback Refer to the definition of AVCodecOnAsyncCallback on how each callback function is called and what are specified. * @param userData The specified userdata is the pointer used when those callback functions are called. * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_AudioDecoderSetCallback(AVCodec *codec, AVCodecOnAsyncCallback callback, void *userData); @@ -505,8 +505,8 @@ AVErrCode OH_AVCODEC_AudioDecoderSetCallback(AVCodec *codec, AVCodecOnAsyncCallb * @param codec AVCodec句柄指针 * @param format AVFormat句柄指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_AudioDecoderConfigure(AVCodec *codec, AVFormat *format); @@ -515,8 +515,8 @@ AVErrCode OH_AVCODEC_AudioDecoderConfigure(AVCodec *codec, AVFormat *format); * @syscap SystemCapability.Multimedia.Media.Codec * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_AudioDecoderPrepare(AVCodec *codec); @@ -525,8 +525,8 @@ AVErrCode OH_AVCODEC_AudioDecoderPrepare(AVCodec *codec); * @syscap SystemCapability.Multimedia.Media.Codec * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_AudioDecoderStart(AVCodec *codec); @@ -535,8 +535,8 @@ AVErrCode OH_AVCODEC_AudioDecoderStart(AVCodec *codec); * @syscap SystemCapability.Multimedia.Media.Codec * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_AudioDecoderStop(AVCodec *codec); @@ -545,8 +545,8 @@ AVErrCode OH_AVCODEC_AudioDecoderStop(AVCodec *codec); * @syscap SystemCapability.Multimedia.Media.Codec * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_AudioDecoderFlush(AVCodec *codec); @@ -555,8 +555,8 @@ AVErrCode OH_AVCODEC_AudioDecoderFlush(AVCodec *codec); * @syscap SystemCapability.Multimedia.Media.Codec * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_AudioDecoderReset(AVCodec *codec); @@ -567,8 +567,8 @@ AVErrCode OH_AVCODEC_AudioDecoderReset(AVCodec *codec); * @param codec AVCodec句柄指针 * @param format AVFormat句柄指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_AudioDecoderSetParameter(AVCodec *codec, AVFormat *format); @@ -577,8 +577,8 @@ AVErrCode OH_AVCODEC_AudioDecoderSetParameter(AVCodec *codec, AVFormat *format); * @syscap SystemCapability.Multimedia.Media.Codec * @param codec AVCodec句柄指针 * @return 返回AVFormat句柄指针,生命周期随下一次GetOutputMediaDescription刷新,或伴随AVCodec销毁; - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVFormat* OH_AVCODEC_AudioDecoderGetOutputMediaDescription(AVCodec *codec); @@ -589,8 +589,8 @@ AVFormat* OH_AVCODEC_AudioDecoderGetOutputMediaDescription(AVCodec *codec); * @param index AVCodecOnAsyncNeedInputData事件提供的索引值 * @param attr 描述InputBuffer的属性信息 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_AudioDecoderPushInputData(AVCodec *codec, uint32_t index, AVCodecBufferAttr attr); @@ -600,8 +600,8 @@ AVErrCode OH_AVCODEC_AudioDecoderPushInputData(AVCodec *codec, uint32_t index, A * @param codec AVCodec句柄指针 * @param index OutputBuffer索引值 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_AudioDecoderFreeOutputData(AVCodec *codec, uint32_t index); @@ -611,8 +611,8 @@ AVErrCode OH_AVCODEC_AudioDecoderFreeOutputData(AVCodec *codec, uint32_t index); * @syscap SystemCapability.Multimedia.Media.Codec * @param mime 编解码器类型 see AVCODEC_MIME_TYPE * @return 返回一个AVCodec句柄指针 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVCodec* OH_AVCODEC_CreateAudioEncoderByMime(const char *mime); @@ -621,8 +621,8 @@ AVCodec* OH_AVCODEC_CreateAudioEncoderByMime(const char *mime); * @syscap SystemCapability.Multimedia.Media.Codec * @param name 查询Xml能力 或者 芯片手册,必须确保解码器name正确 * @return 返回一个AVCodec句柄指针 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVCodec* OH_AVCODEC_CreateAudioEncoderByName(const char *name); @@ -630,8 +630,8 @@ AVCodec* OH_AVCODEC_CreateAudioEncoderByName(const char *name); * @brief 设置编码器到Release状态,清空编码器资源,销毁编码器 * @syscap SystemCapability.Multimedia.Media.Codec * @param codec AVCodec句柄指针 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ void OH_AVCODEC_DestroyAudioEncoder(AVCodec *codec); @@ -642,8 +642,8 @@ void OH_AVCODEC_DestroyAudioEncoder(AVCodec *codec); * @param callback Refer to the definition of AVCodecOnAsyncCallback on how each callback function is called and what are specified. * @param userData The specified userdata is the pointer used when those callback functions are called. * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_AudioEncoderSetCallback(AVCodec *codec, AVCodecOnAsyncCallback callback, void *userData); @@ -653,8 +653,8 @@ AVErrCode OH_AVCODEC_AudioEncoderSetCallback(AVCodec *codec, AVCodecOnAsyncCallb * @param codec AVCodec句柄指针 * @param format AVFormat句柄指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_AudioEncoderConfigure(AVCodec *codec, AVFormat *format); @@ -663,8 +663,8 @@ AVErrCode OH_AVCODEC_AudioEncoderConfigure(AVCodec *codec, AVFormat *format); * @syscap SystemCapability.Multimedia.Media.Codec * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_AudioEncoderPrepare(AVCodec *codec); @@ -673,8 +673,8 @@ AVErrCode OH_AVCODEC_AudioEncoderPrepare(AVCodec *codec); * @syscap SystemCapability.Multimedia.Media.Codec * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_AudioEncoderStart(AVCodec *codec); @@ -683,8 +683,8 @@ AVErrCode OH_AVCODEC_AudioEncoderStart(AVCodec *codec); * @syscap SystemCapability.Multimedia.Media.Codec * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_AudioEncoderStop(AVCodec *codec); @@ -693,8 +693,8 @@ AVErrCode OH_AVCODEC_AudioEncoderStop(AVCodec *codec); * @syscap SystemCapability.Multimedia.Media.Codec * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_AudioEncoderFlush(AVCodec *codec); @@ -703,8 +703,8 @@ AVErrCode OH_AVCODEC_AudioEncoderFlush(AVCodec *codec); * @syscap SystemCapability.Multimedia.Media.Codec * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_AudioEncoderReset(AVCodec *codec); @@ -714,8 +714,8 @@ AVErrCode OH_AVCODEC_AudioEncoderReset(AVCodec *codec); * @param codec AVCodec句柄指针 * @param format AVFormat句柄指针 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_AudioEncoderSetParameter(AVCodec *codec, AVFormat *format); @@ -724,8 +724,8 @@ AVErrCode OH_AVCODEC_AudioEncoderSetParameter(AVCodec *codec, AVFormat *format); * @syscap SystemCapability.Multimedia.Media.Codec * @param codec AVCodec句柄指针 * @return 返回AVFormat句柄指针,生命周期随下一次GetOutputMediaDescription刷新,或伴随AVCodec销毁; - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVFormat* OH_AVCODEC_AudioEncoderGetOutputMediaDescription(AVCodec *codec); @@ -736,8 +736,8 @@ AVFormat* OH_AVCODEC_AudioEncoderGetOutputMediaDescription(AVCodec *codec); * @param index AVCodecOnAsyncNeedInputData事件提供的索引值 * @param attr 描述InputBuffer的属性信息 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_AudioEncoderPushInputData(AVCodec *codec, uint32_t index, AVCodecBufferAttr attr); @@ -747,8 +747,8 @@ AVErrCode OH_AVCODEC_AudioEncoderPushInputData(AVCodec *codec, uint32_t index, A * @param codec AVCodec句柄指针 * @param index OutputBuffer索引值 * @return AVErrCode 错误码 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ AVErrCode OH_AVCODEC_AudioEncoderFreeOutputData(AVCodec *codec, uint32_t index); diff --git a/zh-cn/native_sdk/media/media/ndk_av_errors.h b/zh-cn/native_sdk/media/media/ndk_av_errors.h index 99daedd8..7d3ebb0f 100644 --- a/zh-cn/native_sdk/media/media/ndk_av_errors.h +++ b/zh-cn/native_sdk/media/media/ndk_av_errors.h @@ -22,8 +22,8 @@ extern "C" { /** * @brief AV error code * - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ typedef enum AVErrCode { /** diff --git a/zh-cn/native_sdk/media/media/ndk_av_format.h b/zh-cn/native_sdk/media/media/ndk_av_format.h index b1ec3791..2ddbf205 100644 --- a/zh-cn/native_sdk/media/media/ndk_av_format.h +++ b/zh-cn/native_sdk/media/media/ndk_av_format.h @@ -29,8 +29,8 @@ typedef struct AVFormat AVFormat; /** * @brief Enumerates AVPixel Format. * @syscap SystemCapability.Multimedia.Media.Core - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ typedef enum AVPixelFormat { /** @@ -55,8 +55,8 @@ typedef enum AVPixelFormat { * @brief 创建一个AVFormat句柄指针,用以读写数据 * @syscap SystemCapability.Multimedia.Media.Core * @return 返回值为AVFormat句柄指针 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ struct AVFormat* OH_AV_CreateFormat(void); @@ -65,8 +65,8 @@ struct AVFormat* OH_AV_CreateFormat(void); * @syscap SystemCapability.Multimedia.Media.Core * @param format AVFormat句柄指针 * @return void - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ void OH_AV_DestroyFormat(struct AVFormat *format); @@ -76,8 +76,8 @@ void OH_AV_DestroyFormat(struct AVFormat *format); * @param to 接收数据的AVFormat句柄指针 * @param from 被拷贝数据的AVFormat句柄指针 * @return 返回值为TRUE 成功,FALSE 失败 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ bool OH_AV_FormatCopy(struct AVFormat *to, struct AVFormat *from); @@ -88,8 +88,8 @@ bool OH_AV_FormatCopy(struct AVFormat *to, struct AVFormat *from); * @param key 写入数据的键值 * @param value 写入的数据 * @return 返回值为TRUE 成功,FALSE 失败 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ bool OH_AV_FormatPutIntValue(struct AVFormat *format, const char *key, int32_t value); @@ -100,8 +100,8 @@ bool OH_AV_FormatPutIntValue(struct AVFormat *format, const char *key, int32_t v * @param key 写入数据的键值 * @param value 写入的数据 * @return 返回值为TRUE 成功,FALSE 失败 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ bool OH_AV_FormatPutLongValue(struct AVFormat *format, const char *key, int64_t value); @@ -112,8 +112,8 @@ bool OH_AV_FormatPutLongValue(struct AVFormat *format, const char *key, int64_t * @param key 写入数据的键值 * @param value 写入的数据 * @return 返回值为TRUE 成功,FALSE 失败 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ bool OH_AV_FormatPutFloatValue(struct AVFormat *format, const char *key, float value); @@ -124,8 +124,8 @@ bool OH_AV_FormatPutFloatValue(struct AVFormat *format, const char *key, float v * @param key 写入数据的键值 * @param value 写入的数据 * @return 返回值为TRUE 成功,FALSE 失败 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ bool OH_AV_FormatPutDoubleValue(struct AVFormat *format, const char *key, double value); @@ -136,8 +136,8 @@ bool OH_AV_FormatPutDoubleValue(struct AVFormat *format, const char *key, double * @param key 写入数据的键值 * @param value 写入的数据 * @return 返回值为TRUE 成功,FALSE 失败 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ bool OH_AV_FormatPutStringValue(struct AVFormat *format, const char *key, const char *value); @@ -149,8 +149,8 @@ bool OH_AV_FormatPutStringValue(struct AVFormat *format, const char *key, const * @param addr 写入的数据地址 * @param size 写入的数据长度 * @return 返回值为TRUE 成功,FALSE 失败 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ bool OH_AV_FormatPutBuffer(struct AVFormat *format, const char *key, const uint8_t *addr, size_t size); @@ -161,8 +161,8 @@ bool OH_AV_FormatPutBuffer(struct AVFormat *format, const char *key, const uint8 * @param key 读取数据的键值 * @param out 读取的数据 * @return 返回值为TRUE 成功,FALSE 失败 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ bool OH_AV_FormatGetIntValue(struct AVFormat *format, const char *key, int32_t *out); @@ -173,8 +173,8 @@ bool OH_AV_FormatGetIntValue(struct AVFormat *format, const char *key, int32_t * * @param key 读取数据的键值 * @param out 读取的数据 * @return 返回值为TRUE 成功,FALSE 失败 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ bool OH_AV_FormatGetLongValue(struct AVFormat *format, const char *key, int64_t *out); @@ -185,8 +185,8 @@ bool OH_AV_FormatGetLongValue(struct AVFormat *format, const char *key, int64_t * @param key 读取数据的键值 * @param out 读取的数据 * @return 返回值为TRUE 成功,FALSE 失败 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ bool OH_AV_FormatGetFloatValue(struct AVFormat *format, const char *key, float *out); @@ -197,8 +197,8 @@ bool OH_AV_FormatGetFloatValue(struct AVFormat *format, const char *key, float * * @param key 读取数据的键值 * @param out 读取的数据 * @return 返回值为TRUE 成功,FALSE 失败 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ bool OH_AV_FormatGetDoubleValue(struct AVFormat *format, const char *key, double *out); @@ -209,8 +209,8 @@ bool OH_AV_FormatGetDoubleValue(struct AVFormat *format, const char *key, double * @param key 读取数据的键值 * @param out 读取的字符串指针,指向的数据生命周期伴随GetString更新,伴随Format销毁,如果调用者需要长期持有,必须进行内存拷贝 * @return 返回值为TRUE 成功,FALSE 失败 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ bool OH_AV_FormatGetStringValue(struct AVFormat *format, const char *key, const char **out); @@ -222,8 +222,8 @@ bool OH_AV_FormatGetStringValue(struct AVFormat *format, const char *key, const * @param addr 生命周期是format持有,伴随Format销毁,如果调用者需要长期持有,必须进行内存拷贝 * @param size 读写数据的长度 * @return 返回值为TRUE 成功,FALSE 失败 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ bool OH_AV_FormatGetBuffer(struct AVFormat *format, const char *key, uint8_t **addr, size_t *size); @@ -233,8 +233,8 @@ bool OH_AV_FormatGetBuffer(struct AVFormat *format, const char *key, uint8_t **a * @syscap SystemCapability.Multimedia.Media.Core * @param format AVFormat句柄指针 * @return 返回由键值和数据组成的字符串 - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ const char * OH_AV_FormatDumpInfo(struct AVFormat *format); diff --git a/zh-cn/native_sdk/media/media/ndk_av_memory.h b/zh-cn/native_sdk/media/media/ndk_av_memory.h index 228377ae..21607c2f 100644 --- a/zh-cn/native_sdk/media/media/ndk_av_memory.h +++ b/zh-cn/native_sdk/media/media/ndk_av_memory.h @@ -47,8 +47,8 @@ typedef enum AVMemoryFlags { * @brief Get the memory's virtual address * @param mem Encapsulate AVMemory structure instance pointer * @return the memory's virtual address if the memory is valid, otherwise nullptr. - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ uint8_t* OH_AV_MemoryGetAddr(struct AVMemory *mem); @@ -56,8 +56,8 @@ uint8_t* OH_AV_MemoryGetAddr(struct AVMemory *mem); * @brief Get the memory's size * @param mem Encapsulate AVMemory structure instance pointer * @return the memory's size if the memory is valid, otherwise -1. - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ int32_t OH_AV_MemoryGetSize(struct AVMemory *mem); @@ -65,8 +65,8 @@ int32_t OH_AV_MemoryGetSize(struct AVMemory *mem); * @brief Get the memory's flags set by the creator, refer to {@AVMemoryFlags} * @param mem Encapsulate AVMemory structure instance pointer * @return the memory's flags if the memory is valid, otherwise 0. - * @since 3.2 - * @version 3.2 + * @since 9 + * @version 1.0 */ uint32_t OH_AV_MemoryGetFlags(struct AVMemory *mem); -- Gitee From 34eea832c1d66b63e1b691d37ff35308ec00afbe Mon Sep 17 00:00:00 2001 From: lin-jianwu Date: Thu, 30 Jun 2022 20:23:19 +0800 Subject: [PATCH 03/14] fix syscap Signed-off-by: lin-jianwu --- zh-cn/native_sdk/media/media/ndk_av_codec.h | 132 +++++++++---------- zh-cn/native_sdk/media/media/ndk_av_errors.h | 2 +- 2 files changed, 67 insertions(+), 67 deletions(-) diff --git a/zh-cn/native_sdk/media/media/ndk_av_codec.h b/zh-cn/native_sdk/media/media/ndk_av_codec.h index e343e092..53674aa4 100644 --- a/zh-cn/native_sdk/media/media/ndk_av_codec.h +++ b/zh-cn/native_sdk/media/media/ndk_av_codec.h @@ -32,7 +32,7 @@ typedef struct AVCodec AVCodec; /** * @brief AVCodec MIME types. - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.CodecBase * @since 9 * @version 1.0 */ @@ -42,7 +42,7 @@ const char * const AVCODEC_MIME_TYPE_AUDIO_AAC = "audio/mp4a-latm"; /** * @brief Enumerates AVCodec Buffer Flags. - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.CodecBase * @since 9 * @version 1.0 */ @@ -60,7 +60,7 @@ typedef enum AVCodecBufferFlags { /** * @brief Enumerates AVCodec Buffer Flags. - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.CodecBase * @since 9 * @version 1.0 */ @@ -80,7 +80,7 @@ typedef struct AVCodecBufferAttr { /** * @brief Called when an error occurred. - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.CodecBase * @param codec AVCodec句柄指针 * @param errorCode Error code. * @param userData specified data @@ -91,7 +91,7 @@ typedef void (* AVCodecOnAsyncError)(AVCodec *codec, int32_t errorCode, void *us /** * @brief Called when the output format has changed. format生命周期仅维持在StreamChanged事件中,禁止结束后访问 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.CodecBase * @param codec AVCodec句柄指针 * @param format AVFormat句柄指针 * @param userData specified data @@ -102,7 +102,7 @@ typedef void (* AVCodecOnAsyncStreamChanged)(AVCodec *codec, AVFormat *format, v /** * @brief Called when an input buffer becomes available. - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.CodecBase * @param codec AVCodec句柄指针 * @param index The index of the available input buffer. * @param userData specified data @@ -113,7 +113,7 @@ typedef void (* AVCodecOnAsyncNeedInputData)(AVCodec *codec, uint32_t index, AVM /** * @brief Called when an out buffer becomes available. attr生命周期仅维持在NewOutputData事件中,禁止结束后访问 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.CodecBase * @param codec AVCodec句柄指针 * @param index The index of the available output buffer. * @param attr attr of the available output buffer. For details, see {@link AVCodecBufferAttr} @@ -126,7 +126,7 @@ typedef void (* AVCodecOnAsyncNewOutputData)(AVCodec *codec, uint32_t index, AVM /** * @brief Register callback function, Respond to codec reporting events - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.CodecBase * @param onAsyncError 监听编解码错误码,当回调产生时,编解码出现异常状况 * @param onAsyncStreamChanged 监听编解码流信息,当回调产生时,流信息变更 * @param onAsyncNeedInputData 监听编解码需要输入数据,当回调产生时,调用者可通过GetInputData获得InputData @@ -144,7 +144,7 @@ typedef struct AVCodecOnAsyncCallback { /** * @brief 通过mime创建一个视频解码句柄指针 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoDecoder * @param mime 编解码器类型 see AVCODEC_MIME_TYPE * @return 返回一个AVCodec句柄指针 * @since 9 @@ -155,7 +155,7 @@ AVCodec* OH_AVCODEC_CreateVideoDecoderByMime(const char *mime); /** * @brief 通过name创建一个视频解码句柄指针 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoDecoder * @param name 查询Xml能力 或者 芯片手册,必须确保解码器name正确 * @return 返回一个AVCodec句柄指针 * @since 9 @@ -165,7 +165,7 @@ AVCodec* OH_AVCODEC_CreateVideoDecoderByName(const char *name); /** * @brief 设置解码器到Release状态,清空解码器资源,销毁解码器 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoDecoder * @param codec AVCodec句柄指针 * @since 9 * @version 1.0 @@ -174,7 +174,7 @@ void OH_AVCODEC_DestroyVideoDecoder(AVCodec *codec); /** * @brief 设置一个异步回调函数,用以响应编解码产生的事件,监听编解码工作状态,输入/输出Data情况,要求在Configure/Prepare前设置 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoDecoder * @param codec AVCodec句柄指针 * @param callback Refer to the definition of AVCodecOnAsyncCallback on how each callback function is called and what are specified. * @param userData The specified userdata is the pointer used when those callback functions are called. @@ -186,7 +186,7 @@ AVErrCode OH_AVCODEC_VideoDecoderSetCallback(AVCodec *codec, AVCodecOnAsyncCallb /** * @brief 设置输出Window和Surface,提供解码输出和窗口渲染 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoDecoder * @param codec AVCodec句柄指针 * @param window NativeWindow句柄指针 * @return AVErrCode 错误码 @@ -197,7 +197,7 @@ AVErrCode OH_AVCODEC_VideoDecoderSetOutputSurface(AVCodec *codec, NativeWindow * /** * @brief 设置解码器参数 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoDecoder * @param codec AVCodec句柄指针 * @param format AVFormat句柄指针 * @return AVErrCode 错误码 @@ -208,7 +208,7 @@ AVErrCode OH_AVCODEC_VideoDecoderConfigure(AVCodec *codec, AVFormat *format); /** * @brief 设置解码器到Prepared状态 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoDecoder * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 * @since 9 @@ -218,7 +218,7 @@ AVErrCode OH_AVCODEC_VideoDecoderPrepare(AVCodec *codec); /** * @brief 设置解码器到Started状态,等待监听事件,通过QueueInputBuffer送入SPS/PTS/ES数据 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoDecoder * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 * @since 9 @@ -228,7 +228,7 @@ AVErrCode OH_AVCODEC_VideoDecoderStart(AVCodec *codec); /** * @brief 设置解码器到Stoped状态,停止解码,可通过Start重新进入Started状态,但需重新输入SPS/PTS数据 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoDecoder * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 * @since 9 @@ -238,7 +238,7 @@ AVErrCode OH_AVCODEC_VideoDecoderStop(AVCodec *codec); /** * @brief 清空解码器队列缓存中的任务 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoDecoder * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 * @since 9 @@ -248,7 +248,7 @@ AVErrCode OH_AVCODEC_VideoDecoderFlush(AVCodec *codec); /** * @brief 设置解码器到Reset状态,清空解码器的工作参数,如需再次使用,需通过Configure和Prepare重新进入Prepared状态 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoDecoder * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 * @since 9 @@ -258,7 +258,7 @@ AVErrCode OH_AVCODEC_VideoDecoderReset(AVCodec *codec); /** * @brief 获取输出AVFormat格式,可以通过AVFormat的KEY获取PixelFormat、Width/Hight等参数 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoDecoder * @param codec AVCodec句柄指针 * @return 返回AVFormat句柄指针,生命周期随下一次GetOutputMediaDescription刷新,或伴随AVCodec销毁; * @since 9 @@ -268,7 +268,7 @@ AVFormat* OH_AVCODEC_VideoDecoderGetOutputMediaDescription(AVCodec *codec); /** * @brief 向解码器设置动态参数,只能在Started状态下调用,注意:错误的参数变更,可能会导致解码失败 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoDecoder * @param codec AVCodec句柄指针 * @param format AVFormat句柄指针 * @return AVErrCode 错误码 @@ -279,7 +279,7 @@ AVErrCode OH_AVCODEC_VideoDecoderSetParameter(AVCodec *codec, AVFormat *format); /** * @brief 当GetInputBuffer返回的AVMemory被写入SPS/PTS/ES数据后,可通过QueueInputBuffer通知解码器读取数据 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoDecoder * @param codec AVCodec句柄指针 * @param index AVCodecOnAsyncNeedInputData事件提供的索引值 * @param attr 描述InputBuffer的属性信息 @@ -291,7 +291,7 @@ AVErrCode OH_AVCODEC_VideoDecoderPushInputData(AVCodec *codec, uint32_t index, A /** * @brief 当监听到AVCodecOnAsyncNewOutputData事件时,可通过事件提供的索引值,将OutputBuffer送给surface - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoDecoder * @param codec AVCodec句柄指针 * @param index OutputBuffer索引值 * @return AVErrCode 错误码 @@ -302,7 +302,7 @@ AVErrCode OH_AVCODEC_VideoDecoderRenderOutputData(AVCodec *codec, uint32_t index /** * @brief 当监听到AVCodecOnAsyncNewOutputData事件时,可通过事件提供的索引值,释放OutputBuffer - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoDecoder * @param codec AVCodec句柄指针 * @param index OutputBuffer索引值 * @return AVErrCode 错误码 @@ -314,7 +314,7 @@ AVErrCode OH_AVCODEC_VideoDecoderFreeOutputData(AVCodec *codec, uint32_t index); // Video Encoder /** * @brief 通过mime创建一个视频编码句柄指针 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoEncoder * @param mime 编解码器类型 see AVCODEC_MIME_TYPE * @return 返回一个AVCodec句柄指针 * @since 9 @@ -324,7 +324,7 @@ AVCodec* OH_AVCODEC_CreateVideoEncoderByMime(const char *mime); /** * @brief 通过name创建一个视频编码句柄指针 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoEncoder * @param name 查询Xml能力 或者 芯片手册,必须确保解码器name正确 * @return 返回一个AVCodec句柄指针 * @since 9 @@ -334,7 +334,7 @@ AVCodec* OH_AVCODEC_CreateVideoEncoderByName(const char *name); /** * @brief 设置编码器到Release状态,清空编码器资源,销毁编码器 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoEncoder * @param codec AVCodec句柄指针 * @since 9 * @version 1.0 @@ -343,7 +343,7 @@ void OH_AVCODEC_DestroyVideoEncoder(AVCodec *codec); /** * @brief 设置一个异步回调函数,用以响应编解码产生的事件,监听编解码工作状态,输入/输出Data情况,要求在Configure/Prepare前设置 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoEncoder * @param codec AVCodec句柄指针 * @param callback Refer to the definition of AVCodecOnAsyncCallback on how each callback function is called and what are specified. * @param userData The specified userdata is the pointer used when those callback functions are called. @@ -355,7 +355,7 @@ AVErrCode OH_AVCODEC_VideoEncoderSetCallback(AVCodec *codec, AVCodecOnAsyncCallb /** * @brief 设置编码器参数 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoEncoder * @param codec AVCodec句柄指针 * @param format AVFormat句柄指针 * @return AVErrCode 错误码 @@ -366,7 +366,7 @@ AVErrCode OH_AVCODEC_VideoEncoderConfigure(AVCodec *codec, AVFormat *format); /** * @brief 设置编码器到Prepared状态 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoEncoder * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 * @since 9 @@ -376,7 +376,7 @@ AVErrCode OH_AVCODEC_VideoEncoderPrepare(AVCodec *codec); /** * @brief 设置编码器到Started状态,等待监听事件,通过QueueInputBuffer送入SPS/PTS/ES数据 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoEncoder * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 * @since 9 @@ -386,7 +386,7 @@ AVErrCode OH_AVCODEC_VideoEncoderStart(AVCodec *codec); /** * @brief 设置编码器到Stoped状态,停止编码,可通过Start重新进入Started状态,但需重新输入SPS/PTS数据 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoEncoder * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 * @since 9 @@ -396,7 +396,7 @@ AVErrCode OH_AVCODEC_VideoEncoderStop(AVCodec *codec); /** * @brief 清空编码器队列缓存中的任务 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoEncoder * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 * @since 9 @@ -406,7 +406,7 @@ AVErrCode OH_AVCODEC_VideoEncoderFlush(AVCodec *codec); /** * @brief 设置编码器到Reset状态,清空编码器的工作参数,如需再次使用,需通过Configure和Prepare重新进入Prepared状态 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoEncoder * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 * @since 9 @@ -416,7 +416,7 @@ AVErrCode OH_AVCODEC_VideoEncoderReset(AVCodec *codec); /** * @brief 向编码器设置动态参数,只能在Started状态下调用,注意:错误的参数变更,可能会导致编码失败 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoEncoder * @param codec AVCodec句柄指针 * @param format AVFormat句柄指针 * @return AVErrCode 错误码 @@ -427,7 +427,7 @@ AVErrCode OH_AVCODEC_VideoEncoderSetParameter(AVCodec *codec, AVFormat *format); /** * @brief 获取输出AVFormat格式,可以通过AVFormat的KEY获取PixelFormat、Width/Hight等参数 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoEncoder * @param codec AVCodec句柄指针 * @return 返回AVFormat句柄指针,生命周期随下一次GetOutputMediaDescription刷新,或伴随AVCodec销毁; * @since 9 @@ -437,7 +437,7 @@ AVFormat* OH_AVCODEC_VideoEncoderGetOutputMediaDescription(AVCodec *codec); /** * @brief Obtains the surface from encoder. - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoEncoder * @param codec AVCodec句柄指针 * @param window NativeWindow句柄指针的指针 * @return AVErrCode 错误码 @@ -448,7 +448,7 @@ AVErrCode OH_AVCODEC_VideoEncoderGetInputSurface(AVCodec *codec, NativeWindow ** /** * @brief 当监听到AVCodecOnAsyncNewOutputData事件时,可通过事件提供的索引值,释放OutputBuffer - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.VideoEncoder * @param codec AVCodec句柄指针 * @param index OutputBuffer索引值 * @return AVErrCode 错误码 @@ -460,7 +460,7 @@ AVErrCode OH_AVCODEC_VideoEncoderFreeOutputData(AVCodec *codec, uint32_t index); // Audio Decoder /** * @brief 通过mime创建一个音频解码码句柄指针 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.AudioDecoder * @param mime 编解码器类型 see AVCODEC_MIME_TYPE * @return 返回一个AVCodec句柄指针 * @since 9 @@ -470,7 +470,7 @@ AVCodec* OH_AVCODEC_CreateAudioDecoderByMime(const char *mime); /** * @brief 通过name创建一个音频解码句柄指针 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.AudioDecoder * @param name 查询Xml能力 或者 芯片手册,必须确保解码器name正确 * @return 返回一个AVCodec句柄指针 * @since 9 @@ -480,7 +480,7 @@ AVCodec* OH_AVCODEC_CreateAudioDecoderByName(const char *name); /** * @brief 设置解码器到Release状态,清空解码器资源,销毁解码器 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.AudioDecoder * @param codec AVCodec句柄指针 * @since 9 * @version 1.0 @@ -489,7 +489,7 @@ void OH_AVCODEC_DestroyAudioDecoder(AVCodec *codec); /** * @brief 设置一个异步回调函数,用以响应编解码产生的事件,监听编解码工作状态,输入/输出Data情况,要求在Configure/Prepare前设置 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.AudioDecoder * @param codec AVCodec句柄指针 * @param callback Refer to the definition of AVCodecOnAsyncCallback on how each callback function is called and what are specified. * @param userData The specified userdata is the pointer used when those callback functions are called. @@ -501,7 +501,7 @@ AVErrCode OH_AVCODEC_AudioDecoderSetCallback(AVCodec *codec, AVCodecOnAsyncCallb /** * @brief 设置解码器参数 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.AudioDecoder * @param codec AVCodec句柄指针 * @param format AVFormat句柄指针 * @return AVErrCode 错误码 @@ -512,7 +512,7 @@ AVErrCode OH_AVCODEC_AudioDecoderConfigure(AVCodec *codec, AVFormat *format); /** * @brief 设置解码器到Prepared状态 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.AudioDecoder * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 * @since 9 @@ -522,7 +522,7 @@ AVErrCode OH_AVCODEC_AudioDecoderPrepare(AVCodec *codec); /** * @brief 设置解码器到Started状态,等待监听事件,通过QueueInputBuffer送入ES数据 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.AudioDecoder * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 * @since 9 @@ -532,7 +532,7 @@ AVErrCode OH_AVCODEC_AudioDecoderStart(AVCodec *codec); /** * @brief 设置解码器到Stoped状态,停止解码,可通过Start重新进入Started状态,但需重新输入ES数据 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.AudioDecoder * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 * @since 9 @@ -542,7 +542,7 @@ AVErrCode OH_AVCODEC_AudioDecoderStop(AVCodec *codec); /** * @brief 清空解码器队列缓存中的任务 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.AudioDecoder * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 * @since 9 @@ -552,7 +552,7 @@ AVErrCode OH_AVCODEC_AudioDecoderFlush(AVCodec *codec); /** * @brief 设置解码器到Reset状态,清空解码器的工作参数,如需再次使用,需通过Configure和Prepare重新进入Prepared状态 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.AudioDecoder * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 * @since 9 @@ -563,7 +563,7 @@ AVErrCode OH_AVCODEC_AudioDecoderReset(AVCodec *codec); /** * @brief 向解码器设置动态参数,只能在Started状态下调用,注意:错误的参数变更,可能会导致解码失败 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.AudioDecoder * @param codec AVCodec句柄指针 * @param format AVFormat句柄指针 * @return AVErrCode 错误码 @@ -574,7 +574,7 @@ AVErrCode OH_AVCODEC_AudioDecoderSetParameter(AVCodec *codec, AVFormat *format); /** * @brief 获取输出AVFormat格式,可以通过AVFormat的KEY获取SampleFormat、channel、SampleRate等参数 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.AudioDecoder * @param codec AVCodec句柄指针 * @return 返回AVFormat句柄指针,生命周期随下一次GetOutputMediaDescription刷新,或伴随AVCodec销毁; * @since 9 @@ -584,7 +584,7 @@ AVFormat* OH_AVCODEC_AudioDecoderGetOutputMediaDescription(AVCodec *codec); /** * @brief 当GetInputBuffer返回的AVMemory被写入ES数据后,可通过QueueInputBuffer通知解码器读取数据 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.AudioDecoder * @param codec AVCodec句柄指针 * @param index AVCodecOnAsyncNeedInputData事件提供的索引值 * @param attr 描述InputBuffer的属性信息 @@ -596,7 +596,7 @@ AVErrCode OH_AVCODEC_AudioDecoderPushInputData(AVCodec *codec, uint32_t index, A /** * @brief 当监听到AVCodecOnAsyncNewOutputData事件时,可通过事件提供的索引值,释放OutputBuffer - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.AudioDecoder * @param codec AVCodec句柄指针 * @param index OutputBuffer索引值 * @return AVErrCode 错误码 @@ -608,7 +608,7 @@ AVErrCode OH_AVCODEC_AudioDecoderFreeOutputData(AVCodec *codec, uint32_t index); // Audio Encoder /** * @brief 通过mime创建一个音频编码句柄指针 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.AudioEncoder * @param mime 编解码器类型 see AVCODEC_MIME_TYPE * @return 返回一个AVCodec句柄指针 * @since 9 @@ -618,7 +618,7 @@ AVCodec* OH_AVCODEC_CreateAudioEncoderByMime(const char *mime); /** * @brief 通过name创建一个音频编码句柄指针 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.AudioEncoder * @param name 查询Xml能力 或者 芯片手册,必须确保解码器name正确 * @return 返回一个AVCodec句柄指针 * @since 9 @@ -628,7 +628,7 @@ AVCodec* OH_AVCODEC_CreateAudioEncoderByName(const char *name); /** * @brief 设置编码器到Release状态,清空编码器资源,销毁编码器 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.AudioEncoder * @param codec AVCodec句柄指针 * @since 9 * @version 1.0 @@ -637,7 +637,7 @@ void OH_AVCODEC_DestroyAudioEncoder(AVCodec *codec); /** * @brief 设置一个异步回调函数,用以响应编解码产生的事件,监听编解码工作状态,输入/输出Data情况,要求在Configure/Prepare前设置 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.AudioEncoder * @param codec AVCodec句柄指针 * @param callback Refer to the definition of AVCodecOnAsyncCallback on how each callback function is called and what are specified. * @param userData The specified userdata is the pointer used when those callback functions are called. @@ -649,7 +649,7 @@ AVErrCode OH_AVCODEC_AudioEncoderSetCallback(AVCodec *codec, AVCodecOnAsyncCallb /** * @brief 设置编码器参数 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.AudioEncoder * @param codec AVCodec句柄指针 * @param format AVFormat句柄指针 * @return AVErrCode 错误码 @@ -660,7 +660,7 @@ AVErrCode OH_AVCODEC_AudioEncoderConfigure(AVCodec *codec, AVFormat *format); /** * @brief 设置编码器到Prepared状态 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.AudioEncoder * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 * @since 9 @@ -670,7 +670,7 @@ AVErrCode OH_AVCODEC_AudioEncoderPrepare(AVCodec *codec); /** * @brief 设置编码器到Started状态,等待监听事件,通过QueueInputBuffer送入ES数据 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.AudioEncoder * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 * @since 9 @@ -680,7 +680,7 @@ AVErrCode OH_AVCODEC_AudioEncoderStart(AVCodec *codec); /** * @brief 设置编码器到Stoped状态,停止编码,可通过Start重新进入Started状态,但需重新输入ES数据 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.AudioEncoder * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 * @since 9 @@ -690,7 +690,7 @@ AVErrCode OH_AVCODEC_AudioEncoderStop(AVCodec *codec); /** * @brief 清空编码器队列缓存中的任务 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.AudioEncoder * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 * @since 9 @@ -700,7 +700,7 @@ AVErrCode OH_AVCODEC_AudioEncoderFlush(AVCodec *codec); /** * @brief 设置编码器到Reset状态,清空编码器的工作参数,如需再次使用,需通过Configure和Prepare重新进入Prepared状态 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.AudioEncoder * @param codec AVCodec句柄指针 * @return AVErrCode 错误码 * @since 9 @@ -710,7 +710,7 @@ AVErrCode OH_AVCODEC_AudioEncoderReset(AVCodec *codec); /** * @brief 向编码器设置动态参数,只能在Started状态下调用,注意:错误的参数变更,可能会导致编码失败 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.AudioEncoder * @param codec AVCodec句柄指针 * @param format AVFormat句柄指针 * @return AVErrCode 错误码 @@ -721,7 +721,7 @@ AVErrCode OH_AVCODEC_AudioEncoderSetParameter(AVCodec *codec, AVFormat *format); /** * @brief 获取输出AVFormat格式,可以通过AVFormat的KEY获取SampleFormat、channel、SampleRate等参数 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.AudioEncoder * @param codec AVCodec句柄指针 * @return 返回AVFormat句柄指针,生命周期随下一次GetOutputMediaDescription刷新,或伴随AVCodec销毁; * @since 9 @@ -731,7 +731,7 @@ AVFormat* OH_AVCODEC_AudioEncoderGetOutputMediaDescription(AVCodec *codec); /** * @brief 当GetInputBuffer返回的AVMemory被写入ES数据后,可通过QueueInputBuffer通知解码器读取数据 - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.AudioEncoder * @param codec AVCodec句柄指针 * @param index AVCodecOnAsyncNeedInputData事件提供的索引值 * @param attr 描述InputBuffer的属性信息 @@ -743,7 +743,7 @@ AVErrCode OH_AVCODEC_AudioEncoderPushInputData(AVCodec *codec, uint32_t index, A /** * @brief 当监听到AVCodecOnAsyncNewOutputData事件时,可通过事件提供的索引值,释放OutputBuffer - * @syscap SystemCapability.Multimedia.Media.Codec + * @syscap SystemCapability.Multimedia.Media.AudioEncoder * @param codec AVCodec句柄指针 * @param index OutputBuffer索引值 * @return AVErrCode 错误码 diff --git a/zh-cn/native_sdk/media/media/ndk_av_errors.h b/zh-cn/native_sdk/media/media/ndk_av_errors.h index 7d3ebb0f..84cbc0c5 100644 --- a/zh-cn/native_sdk/media/media/ndk_av_errors.h +++ b/zh-cn/native_sdk/media/media/ndk_av_errors.h @@ -21,7 +21,7 @@ extern "C" { /** * @brief AV error code - * + * @syscap SystemCapability.Multimedia.Media.CodecBase * @since 9 * @version 1.0 */ -- Gitee From 50e0799d204c4aa6b675053264de67064986ad73 Mon Sep 17 00:00:00 2001 From: lin-jianwu Date: Thu, 30 Jun 2022 21:15:37 +0800 Subject: [PATCH 04/14] del flag Signed-off-by: lin-jianwu --- zh-cn/native_sdk/media/media/ndk_av_memory.h | 30 ++------------------ 1 file changed, 2 insertions(+), 28 deletions(-) diff --git a/zh-cn/native_sdk/media/media/ndk_av_memory.h b/zh-cn/native_sdk/media/media/ndk_av_memory.h index 21607c2f..2ffe3a26 100644 --- a/zh-cn/native_sdk/media/media/ndk_av_memory.h +++ b/zh-cn/native_sdk/media/media/ndk_av_memory.h @@ -24,27 +24,9 @@ extern "C" { typedef struct AVMemory AVMemory; -typedef enum AVMemoryFlags { - /** - * This flag bit indicates that the remote process is allowed to read and write - * the shared memory. If no flags are specified, this is the default memory - * sharing policy. If the FLAGS_READ_ONLY bit is set, this flag bit is ignored. - */ - FLAGS_READ_WRITE = 0x1, - /** - * For platforms that support multiple processes, this flag bit indicates that the - * remote process can only read data in the shared memory. If this flag is not set, - * the remote process has both read and write permissions by default. Adding this - * flag does not affect the process that creates the memory, which always has the - * read and write permission on the shared memory. For platforms that do not support - * multi-processes, the memory read and write permission control capability may - * not be available. In this case, this flag is invalid. - */ - FLAGS_READ_ONLY = 0x2, -} AVMemoryFlags; - /** * @brief Get the memory's virtual address + * @syscap SystemCapability.Multimedia.Media.Core * @param mem Encapsulate AVMemory structure instance pointer * @return the memory's virtual address if the memory is valid, otherwise nullptr. * @since 9 @@ -54,6 +36,7 @@ uint8_t* OH_AV_MemoryGetAddr(struct AVMemory *mem); /** * @brief Get the memory's size + * @syscap SystemCapability.Multimedia.Media.Core * @param mem Encapsulate AVMemory structure instance pointer * @return the memory's size if the memory is valid, otherwise -1. * @since 9 @@ -61,15 +44,6 @@ uint8_t* OH_AV_MemoryGetAddr(struct AVMemory *mem); */ int32_t OH_AV_MemoryGetSize(struct AVMemory *mem); -/** - * @brief Get the memory's flags set by the creator, refer to {@AVMemoryFlags} - * @param mem Encapsulate AVMemory structure instance pointer - * @return the memory's flags if the memory is valid, otherwise 0. - * @since 9 - * @version 1.0 - */ -uint32_t OH_AV_MemoryGetFlags(struct AVMemory *mem); - #ifdef __cplusplus } #endif -- Gitee From 8d1c2a7b65c35797b6ec6a490d744376e17743e2 Mon Sep 17 00:00:00 2001 From: lin-jianwu Date: Thu, 30 Jun 2022 21:20:07 +0800 Subject: [PATCH 05/14] fix review Signed-off-by: lin-jianwu --- zh-cn/native_sdk/media/media/ndk_av_errors.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh-cn/native_sdk/media/media/ndk_av_errors.h b/zh-cn/native_sdk/media/media/ndk_av_errors.h index 84cbc0c5..ee8bc1b6 100644 --- a/zh-cn/native_sdk/media/media/ndk_av_errors.h +++ b/zh-cn/native_sdk/media/media/ndk_av_errors.h @@ -21,7 +21,7 @@ extern "C" { /** * @brief AV error code - * @syscap SystemCapability.Multimedia.Media.CodecBase + * @syscap SystemCapability.Multimedia.Media.Core * @since 9 * @version 1.0 */ -- Gitee From 683740fbac67079f81582ec574fb1a384ed04f58 Mon Sep 17 00:00:00 2001 From: lin-jianwu Date: Sat, 2 Jul 2022 15:58:21 +0800 Subject: [PATCH 06/14] fix review Signed-off-by: lin-jianwu --- zh-cn/native_sdk/media/media/ndk_av_codec.h | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/zh-cn/native_sdk/media/media/ndk_av_codec.h b/zh-cn/native_sdk/media/media/ndk_av_codec.h index 53674aa4..06313012 100644 --- a/zh-cn/native_sdk/media/media/ndk_av_codec.h +++ b/zh-cn/native_sdk/media/media/ndk_av_codec.h @@ -167,10 +167,11 @@ AVCodec* OH_AVCODEC_CreateVideoDecoderByName(const char *name); * @brief 设置解码器到Release状态,清空解码器资源,销毁解码器 * @syscap SystemCapability.Multimedia.Media.VideoDecoder * @param codec AVCodec句柄指针 + * @return AVErrCode 错误码 * @since 9 * @version 1.0 */ -void OH_AVCODEC_DestroyVideoDecoder(AVCodec *codec); +AVErrCode OH_AVCODEC_DestroyVideoDecoder(AVCodec *codec); /** * @brief 设置一个异步回调函数,用以响应编解码产生的事件,监听编解码工作状态,输入/输出Data情况,要求在Configure/Prepare前设置 @@ -336,10 +337,11 @@ AVCodec* OH_AVCODEC_CreateVideoEncoderByName(const char *name); * @brief 设置编码器到Release状态,清空编码器资源,销毁编码器 * @syscap SystemCapability.Multimedia.Media.VideoEncoder * @param codec AVCodec句柄指针 + * @return AVErrCode 错误码 * @since 9 * @version 1.0 */ -void OH_AVCODEC_DestroyVideoEncoder(AVCodec *codec); +AVErrCode OH_AVCODEC_DestroyVideoEncoder(AVCodec *codec); /** * @brief 设置一个异步回调函数,用以响应编解码产生的事件,监听编解码工作状态,输入/输出Data情况,要求在Configure/Prepare前设置 @@ -482,10 +484,11 @@ AVCodec* OH_AVCODEC_CreateAudioDecoderByName(const char *name); * @brief 设置解码器到Release状态,清空解码器资源,销毁解码器 * @syscap SystemCapability.Multimedia.Media.AudioDecoder * @param codec AVCodec句柄指针 + * @return AVErrCode 错误码 * @since 9 * @version 1.0 */ -void OH_AVCODEC_DestroyAudioDecoder(AVCodec *codec); +AVErrCode OH_AVCODEC_DestroyAudioDecoder(AVCodec *codec); /** * @brief 设置一个异步回调函数,用以响应编解码产生的事件,监听编解码工作状态,输入/输出Data情况,要求在Configure/Prepare前设置 @@ -630,10 +633,11 @@ AVCodec* OH_AVCODEC_CreateAudioEncoderByName(const char *name); * @brief 设置编码器到Release状态,清空编码器资源,销毁编码器 * @syscap SystemCapability.Multimedia.Media.AudioEncoder * @param codec AVCodec句柄指针 + * @return AVErrCode 错误码 * @since 9 * @version 1.0 */ -void OH_AVCODEC_DestroyAudioEncoder(AVCodec *codec); +AVErrCode OH_AVCODEC_DestroyAudioEncoder(AVCodec *codec); /** * @brief 设置一个异步回调函数,用以响应编解码产生的事件,监听编解码工作状态,输入/输出Data情况,要求在Configure/Prepare前设置 -- Gitee From 1c3e5796556f55f1929e5a34f1dffd7aaee408e7 Mon Sep 17 00:00:00 2001 From: lin-jianwu Date: Sat, 9 Jul 2022 16:18:14 +0800 Subject: [PATCH 07/14] fix interface name and notes Signed-off-by: lin-jianwu --- zh-cn/native_sdk/media/media/native_avcodec.h | 787 ++++++++++++++++++ .../{ndk_av_errors.h => native_averrors.h} | 8 +- .../{ndk_av_format.h => native_avformat.h} | 117 ++- .../{ndk_av_memory.h => native_avmemory.h} | 16 +- zh-cn/native_sdk/media/media/ndk_av_codec.h | 763 ----------------- 5 files changed, 857 insertions(+), 834 deletions(-) create mode 100644 zh-cn/native_sdk/media/media/native_avcodec.h rename zh-cn/native_sdk/media/media/{ndk_av_errors.h => native_averrors.h} (92%) rename zh-cn/native_sdk/media/media/{ndk_av_format.h => native_avformat.h} (62%) rename zh-cn/native_sdk/media/media/{ndk_av_memory.h => native_avmemory.h} (85%) delete mode 100644 zh-cn/native_sdk/media/media/ndk_av_codec.h diff --git a/zh-cn/native_sdk/media/media/native_avcodec.h b/zh-cn/native_sdk/media/media/native_avcodec.h new file mode 100644 index 00000000..22475c99 --- /dev/null +++ b/zh-cn/native_sdk/media/media/native_avcodec.h @@ -0,0 +1,787 @@ +/* + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NATIVE_AVCODEC_H +#define NATIVE_AVCODEC_H + +#include +#include +#include +#include "native_averrors.h" +#include "native_avformat.h" +#include "native_avmemory.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct NativeWindow NativeWindow; +typedef struct AVCodec AVCodec; + +/** + * @brief 枚举音视频编解码的MIME类型 + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 9 + * @version 1.0 + */ +const char * const AVCODEC_MIME_TYPE_VIDEO_AVC = "video/avc"; +const char * const AVCODEC_MIME_TYPE_VIDEO_MPEG4 = "video/mp4v-es"; +const char * const AVCODEC_MIME_TYPE_AUDIO_AAC = "audio/mp4a-latm"; + +/** + * @brief 枚举AVCodec的Buffer标记的类别 + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 9 + * @version 1.0 + */ +typedef enum AVCodecBufferFlags { + AVCODEC_BUFFER_FLAGS_NONE = 0, + /* 表明该Buffer是End-of-Stream帧 */ + AVCODEC_BUFFER_FLAGS_EOS = 1 << 0, + /* 表明该Buffer内包含关键帧 */ + AVCODEC_BUFFER_FLAGS_SYNC_FRAME = 1 << 1, + /* 表明该Buffer内包含的数据仅仅为一帧的一部分 */ + AVCODEC_BUFFER_FLAGS_PARTIAL_FRAME = 1 << 2, + /* 表明该Buffer包含Codec-Specific-Data */ + AVCODEC_BUFFER_FLAGS_CODEC_DATA = 1 << 3, +} AVCodecBufferFlags; + +/** + * @brief 定义AVCodec的Buffer描述信息 + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 9 + * @version 1.0 + */ +typedef struct AVCodecBufferAttr { + /* 以微秒为单位表示的该Buffer的Presentation时间戳 */ + int64_t presentationTimeUs; + /* 以字节为单位表示的该Buffer内所包含数据的大小 */ + int32_t size; + /* 有效数据在该Buffer内的起始偏移量 */ + int32_t offset; + /* 该Buffer具有的标记, 也是多个{@link AVCodecBufferFlags}的组合. */ + uint32_t flags; +} AVCodecBufferAttr; + +/** + * @brief 当AVCodec实例运行发生错误时,该函数指针会被调用以报告具体错误信息。 + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param codec AVCodec实例 + * @param errorCode 具体错误码 + * @param userData 用户特定数据 + * @since 9 + * @version 1.0 + */ +typedef void (* AVCodecOnAsyncError)(AVCodec *codec, int32_t errorCode, void *userData); + +/** + * @brief 当输出流发生变化时,该函数指针会被调用以报告新的流描述信息. + * 需要注意的时,AVFormat指针的生命周期仅维持在该函数指针被调用时上有效,禁止在调用结束后继续访问。 + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param codec AVCodec实例 + * @param format 新的输出流描述信息 + * @param userData 用户特定数据 + * @since 9 + * @version 1.0 + */ +typedef void (* AVCodecOnAsyncStreamChanged)(AVCodec *codec, AVFormat *format, void *userData); + +/** + * @brief 当AVCodec运行过程中需要新的输入数据时,该函数指针会被调用,并携带一块可用的Buffer以供填入新的输入数据。 + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param codec AVCodec实例 + * @param index 新的可用的输入Buffer对应的索引. + * @param data 新的可用的输入Buffer. + * @param userData 用户特定数据 + * @since 9 + * @version 1.0 + */ +typedef void (* AVCodecOnAsyncNeedInputData)(AVCodec *codec, uint32_t index, AVMemory *data, void *userData); + +/** + * @brief 当AVCodec运行过程中产生了新的输出数据时,该函数指针会被调用,并携带一块包含新输出数据的Buffer. + * 需要注意的是,AVCodecBufferAttr指针的生命周期仅维持在该函数指针被调用时有效,禁止调用结束后继续访问. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param codec AVCodec实例 + * @param index 新的输出Buffer对应的索引. + * @param data 包含新的输出数据的Buffer + * @param attr 新的输出Buffer的描述信息,具体参考{@link AVCodecBufferAttr} + * @param userData specified data + * @since 9 + * @version 1.0 + */ +typedef void (* AVCodecOnAsyncNewOutputData)(AVCodec *codec, uint32_t index, AVMemory *data, + AVCodecBufferAttr *attr, void *userData); + +/** + * @brief AVCodec所有的异步回调函数指针集合。注册一个该结构体实例给AVCodec实例,并处理通过该回调报告 + * 的信息,以确保AVCodec正常运转。 + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param onAsyncError 监听AVCodec运行错误,参考{@link AVCodecOnAsyncError} + * @param onAsyncStreamChanged 监听编解码流信息,参考{@link AVCodecOnAsyncStreamChanged} + * @param onAsyncNeedInputData 监听编解码需要输入数据,参考{@link AVCodecOnAsyncNeedInputData} + * @param onAsyncNewOutputData 监听编解码产生输出数据,参考{@link onAsyncNewOutputData} + * @since 9 + * @version 1.0 + */ +typedef struct AVCodecOnAsyncCallback { + AVCodecOnAsyncError onAsyncError; + AVCodecOnAsyncStreamChanged onAsyncStreamChanged; + AVCodecOnAsyncNeedInputData onAsyncNeedInputData; + AVCodecOnAsyncNewOutputData onAsyncNewOutputData; +} AVCodecOnAsyncCallback; + +/** + * @brief 通过mime类型创建一个视频解码器实例,大多数情况下推荐使用该接口。 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param mime mime类型描述字符串,参考{@link AVCODEC_MIME_TYPE} + * @return 返回一个指向AVCodec实例的指针 + * @since 9 + * @version 1.0 + */ +AVCodec* OH_VideoDecoder_CreateByMime(const char *mime); + +/** + * @brief 通过视频解码器名称创建一个视频解码器实例,使用这个接口的前提是必须清楚解码器准确的名称。 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param name 视频解码器名称 + * @return 返回一个指向AVCodec实例的指针 + * @since 9 + * @version 1.0 + */ +AVCodec* OH_VideoDecoder_CreateByName(const char *name); + +/** + * @brief 清空解码器内部资源,并销毁解码器实例 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoDecoder_Destroy(AVCodec *codec); + +/** + * @brief 设置异步回调函数,使得你的应用能够响应视频解码器产生的事件,该接口被调用必须是在Prepare被调用前 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向AVCodec实例的指针 + * @param callback 一个包含所有回调函数的集合体,参考{@link AVCodecOnAsyncCallback} + * @param userData 用户特定数据 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoDecoder_SetCallback(AVCodec *codec, AVCodecOnAsyncCallback callback, void *userData); + +/** + * @brief 指定输出Surface,以提供视频解码输出, 该接口被调用必须是在Prepare被调用前 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向AVCodec实例的指针 + * @param window 指向一个NativeWindow实例的指针,具体参考{@link NativeWindow} + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoDecoder_SetOutputSurface(AVCodec *codec, NativeWindow *window); + +/** + * @brief 配置视频解码器,典型地,需要配置被解码视频轨道的描述信息,这些信息能够从容器中提取出来, + * 该接口被调用必须是在Prepare被调用前。 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向AVCodec实例的指针 + * @param format 指向AVFormat的指针,用以给出待解码视频轨道的描述信息 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoDecoder_Configure(AVCodec *codec, AVFormat *format); + +/** + * @brief 准备解码器内部资源,调用该接口前必须先调用Configure接口。 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoDecoder_Prepare(AVCodec *codec); + +/** + * @brief 启动解码器,该接口必须在已经Prepare成功后调用。在被启动成功后,解码器将开始报告NeedInputData事件。 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoDecoder_Start(AVCodec *codec); + +/** + * @brief 停止解码器。在停止后可通过Start重新进入Started状态,但需要注意的是,若先前给解码器输入过 + * Codec-Specific-Data,则需要重新输入。 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoDecoder_Stop(AVCodec *codec); + +/** + * @brief 清空解码器内部缓存的输入输出数据。在该接口被调用后,所有先前通过异步回调报告的Buffer的索引都将 + * 失效,确保不要再访问这些索引对应的Buffers。 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoDecoder_Flush(AVCodec *codec); + +/** + * @brief 重置解码器。如需继续解码工作,需要重新调用Configure接口以配置该解码器实例。 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoDecoder_Reset(AVCodec *codec); + +/** + * @brief 获取该解码器输出数据的描述信息,具体参考{@link AVFormat}. 需要注意的是,返回值所指向 + * 的AVFormat实例的生命周期将会再下一次调用该接口时或者该AVCodec实例被销毁时失效。 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向AVCodec实例的指针 + * @return 返回AVFormat实例的指针 + * @since 9 + * @version 1.0 + */ +AVFormat* OH_VideoDecoder_GetOutputDescription(AVCodec *codec); + +/** + * @brief 向解码器设置动态参数,注意:该接口仅能在解码器被启动后调用,同时错误的参数设置,可能会导致解码失败 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向AVCodec实例的指针 + * @param format 指向AVFormat实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoDecoder_SetParameter(AVCodec *codec, AVFormat *format); + +/** + * @brief 将填充好数据的输入Buffer提交给视频解码器。{@link AVCodecOnAsyncNeedInputData}回调会报告可用的 + * 输入Buffer及对应的索引值。一旦指定索引的Buffer被提交给了视频解码器,直到再一次收到{@link AVCodecOnAsyncNeedInputData} + * 回调报告相同索引的Buffer可用前,该Buffer都不可以再次被访问。另外,对于部分解码器,要求在最开始给解码器输入 + * Codec-Specific-Data,用以初始化解码器的解码过程,例如H264格式的PPS/SPS数据。 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向AVCodec实例的指针 + * @param index 输入Buffer对应的索引值 + * @param attr 描述该Buffer内所包含数据的信息 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoDecoder_PushInputData(AVCodec *codec, uint32_t index, AVCodecBufferAttr attr); + +/** + * @brief 将处理结束的输出Buffer交还给解码器,并通知解码器完成将该Buffer内包含的解码后的数据在输出Surface上渲染。 + * 如果先前未配置输出Surface,调用该接口仅仅将指定索引对应的输出Buffer交还给解码器。 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向AVCodec实例的指针 + * @param index 输出Buffer对应的索引值 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoDecoder_RenderOutputData(AVCodec *codec, uint32_t index); + +/** + * @brief 将处理结束的输出Buffer交还给解码器。 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向AVCodec实例的指针 + * @param index 输出Buffer对应的索引值 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoDecoder_FreeOutputData(AVCodec *codec, uint32_t index); + +// Video Encoder +/** + * @brief 通过mime类型创建一个视频编码器实例,大多数情况下推荐使用该接口。 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param mime mime类型描述字符串,参考{@link AVCODEC_MIME_TYPE} + * @return 返回一个指向AVCodec实例的指针 + * @since 9 + * @version 1.0 + */ +AVCodec* OH_VideoEncoder_CreateByMime(const char *mime); + +/** + * @brief 通过视频编码器名称创建一个视频编码器实例,使用这个接口的前提是必须清楚编码器准确的名称。 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param name 视频编码器名称 + * @return 返回一个指向AVCodec实例的指针 + * @since 9 + * @version 1.0 + */ +AVCodec* OH_VideoEncoder_CreateByName(const char *name); + +/** + * @brief 清空编码器内部资源,并销毁编码器实例 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoEncoder_Destroy(AVCodec *codec); + +/** + * @brief 设置异步回调函数,使得你的应用能够响应视频编码器产生的事件,该接口被调用必须是在Prepare被调用前 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向AVCodec实例的指针 + * @param callback 一个包含所有回调函数的集合体,参考{@link AVCodecOnAsyncCallback} + * @param userData 用户特定数据 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoEncoder_SetCallback(AVCodec *codec, AVCodecOnAsyncCallback callback, void *userData); + +/** + * @brief 配置视频编码器,典型地,需要配置被编码视频轨道的描述信息,这些信息能够从容器中提取出来, + * 该接口被调用必须是在Prepare被调用前。 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向AVCodec实例的指针 + * @param format 指向AVFormat的指针,用以给出待编码视频轨道的描述信息 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoEncoder_Configure(AVCodec *codec, AVFormat *format); + +/** + * @brief 准备编码器内部资源,调用该接口前必须先调用Configure接口。 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoEncoder_Prepare(AVCodec *codec); + +/** + * @brief 启动编码器,该接口必须在已经Prepare成功后调用。在被启动成功后,编码器将开始报告NeedInputData事件。 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoEncoder_Start(AVCodec *codec); + +/** + * @brief 停止编码器。在停止后可通过Start重新进入Started状态。 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoEncoder_Stop(AVCodec *codec); + +/** + * @brief 清空编码器内部缓存的输入输出数据。在该接口被调用后,所有先前通过异步回调报告的Buffer的索引都将 + * 失效,确保不要再访问这些索引对应的Buffers。 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoEncoder_Flush(AVCodec *codec); + +/** + * @brief 重置编码器。如需继续编码工作,需要重新调用Configure接口以配置该编码器实例。 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoEncoder_Reset(AVCodec *codec); + +/** + * @brief 获取该编码器输出数据的描述信息,具体参考{@link AVFormat}. 需要注意的是,返回值所指向 + * 的AVFormat实例的生命周期将会再下一次调用该接口时或者该AVCodec实例被销毁时失效。 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向AVCodec实例的指针 + * @return 返回AVFormat实例的指针 + * @since 9 + * @version 1.0 + */ +AVFormat* OH_VideoEncoder_GetOutputDescription(AVCodec *codec); + +/** + * @brief 向编码器设置动态参数,注意:该接口仅能在编码器被启动后调用,同时错误的参数设置,可能会导致编码失败 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向AVCodec实例的指针 + * @param format AVFormat句柄指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoEncoder_SetParameter(AVCodec *codec, AVFormat *format); + + +/** + * @brief 从视频编码器获取输入Surface, 该接口被调用必须是在Prepare被调用前。 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向AVCodec实例的指针 + * @param window 指向一个NativeWindow实例的指针,具体参考{@link NativeWindow} + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoEncoder_GetInputSurface(AVCodec *codec, NativeWindow **window); + +/** + * @brief 将处理结束的输出Buffer交还给编码器。 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向AVCodec实例的指针 + * @param index 输出Buffer对应的索引值 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoEncoder_FreeOutputData(AVCodec *codec, uint32_t index); + +// Audio Decoder +/** + * @brief 通过mime类型创建一个音频解码器实例,大多数情况下推荐使用该接口。 + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param mime mime类型描述字符串,参考{@link AVCODEC_MIME_TYPE} + * @return 返回一个指向AVCodec实例的指针 + * @since 9 + * @version 1.0 + */ +AVCodec* OH_AudioDecoder_CreateByMime(const char *mime); + +/** + * @brief 通过音频解码器名称创建一个音频解码器实例,使用这个接口的前提是必须清楚解码器准确的名称。 + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param name 音频解码器名称 + * @return 返回一个指向AVCodec实例的指针 + * @since 9 + * @version 1.0 + */ +AVCodec* OH_AudioDecoder_CreateByName(const char *name); + +/** + * @brief 清空解码器内部资源,并销毁解码器实例 + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioDecoder_Destroy(AVCodec *codec); + +/** + * @brief 设置异步回调函数,使得你的应用能够响应音频解码器产生的事件,该接口被调用必须是在Prepare被调用前 + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec 指向AVCodec实例的指针 + * @param callback 一个包含所有回调函数的集合体,参考{@link AVCodecOnAsyncCallback} + * @param userData 用户特定数据 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioDecoder_SetCallback(AVCodec *codec, AVCodecOnAsyncCallback callback, void *userData); + +/** + * @brief 配置音频解码器,典型地,需要配置被解码音频轨道的描述信息,这些信息能够从容器中提取出来, + * 该接口被调用必须是在Prepare被调用前。 + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec 指向AVCodec实例的指针 + * @param format 指向AVFormat的指针,用以给出待解码音频轨道的描述信息 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioDecoder_Configure(AVCodec *codec, AVFormat *format); + +/** + * @brief 准备解码器内部资源,调用该接口前必须先调用Configure接口。 + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioDecoder_Prepare(AVCodec *codec); + +/** + * @brief 启动解码器,该接口必须在已经Prepare成功后调用。在被启动成功后,解码器将开始报告NeedInputData事件。 + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioDecoder_Start(AVCodec *codec); + +/** + * @brief 停止解码器。在停止后可通过Start重新进入Started状态,但需要注意的是,若先前给解码器输入过 + * Codec-Specific-Data,则需要重新输入。 + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioDecoder_Stop(AVCodec *codec); + +/** + * @brief 清空解码器内部缓存的输入输出数据。在该接口被调用后,所有先前通过异步回调报告的Buffer的索引都将 + * 失效,确保不要再访问这些索引对应的Buffers。 + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioDecoder_Flush(AVCodec *codec); + +/** + * @brief 重置解码器。如需继续解码工作,需要重新调用Configure接口以配置该解码器实例。 + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ + +AVErrCode OH_AudioDecoder_Reset(AVCodec *codec); + +/** + * @brief 获取该解码器输出数据的描述信息,具体参考{@link AVFormat}. 需要注意的是,返回值所指向 + * 的AVFormat实例的生命周期将会再下一次调用该接口时或者该AVCodec实例被销毁时失效。 + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec 指向AVCodec实例的指针 + * @return 返回AVFormat句柄指针,生命周期随下一次GetOutputMediaDescription刷新,或伴随AVCodec销毁; + * @since 9 + * @version 1.0 + */ +AVFormat* OH_AudioDecoder_GetOutputDescription(AVCodec *codec); + +/** + * @brief 向解码器设置动态参数,注意:该接口仅能在解码器被启动后调用,同时错误的参数设置,可能会导致解码失败 + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec 指向AVCodec实例的指针 + * @param format AVFormat句柄指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioDecoder_SetParameter(AVCodec *codec, AVFormat *format); + +/** + * @brief 将填充好数据的输入Buffer提交给音频解码器。{@link AVCodecOnAsyncNeedInputData}回调会报告可用的 + * 输入Buffer及对应的索引值。一旦指定索引的Buffer被提交给了音频解码器,直到再一次收到{@link AVCodecOnAsyncNeedInputData} + * 回调报告相同索引的Buffer可用前,该Buffer都不可以再次被访问。另外,对于部分解码器,要求在最开始给解码器输入 + * Codec-Specific-Data,用以初始化解码器的解码过程。 + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec 指向AVCodec实例的指针 + * @param index 输入Buffer对应的索引值 + * @param attr 描述该Buffer内所包含数据的信息 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioDecoder_PushInputData(AVCodec *codec, uint32_t index, AVCodecBufferAttr attr); + +/** + * @brief 将处理结束的输出Buffer交还给解码器。 + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec 指向AVCodec实例的指针 + * @param index 输出Buffer对应的索引值 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioDecoder_FreeOutputData(AVCodec *codec, uint32_t index); + +// Audio Encoder +/** + * @brief 通过mime类型创建一个音频编码器实例,大多数情况下推荐使用该接口。 + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param mime mime类型描述字符串,参考{@link AVCODEC_MIME_TYPE} + * @return 返回一个指向AVCodec实例的指针 + * @since 9 + * @version 1.0 + */ +AVCodec* OH_AudioEncoder_CreateByMime(const char *mime); + +/** + * @brief 通过音频编码器名称创建一个音频编码器实例,使用这个接口的前提是必须清楚编码器准确的名称。 + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param name 音频编码器名称 + * @return 返回一个指向AVCodec实例的指针 + * @since 9 + * @version 1.0 + */ +AVCodec* OH_AudioEncoder_CreateByName(const char *name); + +/** + * @brief 清空编码器内部资源,并销毁编码器实例 + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OHAudioEncoder_Destroy(AVCodec *codec); + +/** + * @brief 设置异步回调函数,使得你的应用能够响应音频编码器产生的事件,该接口被调用必须是在Prepare被调用前 + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec 指向AVCodec实例的指针 + * @param callback 一个包含所有回调函数的集合体,参考{@link AVCodecOnAsyncCallback} + * @param userData 用户特定数据 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioEncoder_SetCallback(AVCodec *codec, AVCodecOnAsyncCallback callback, void *userData); + +/** + * @brief 配置音频编码器,典型地,需要配置被编码音频轨道的描述信息,这些信息能够从容器中提取出来, + * 该接口被调用必须是在Prepare被调用前。 + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec 指向AVCodec实例的指针 + * @param format AVFormat句柄指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioEncoder_Configure(AVCodec *codec, AVFormat *format); + +/** + * @brief 准备编码器内部资源,调用该接口前必须先调用Configure接口。 + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioEncoder_Prepare(AVCodec *codec); + +/** + * @brief 启动编码器,该接口必须在已经Prepare成功后调用。在被启动成功后,编码器将开始报告NeedInputData事件。 + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioEncoder_Start(AVCodec *codec); + +/** + * @brief 停止编码器。在停止后可通过Start重新进入Started状态。 + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioEncoder_Stop(AVCodec *codec); + +/** + * @brief 清空编码器内部缓存的输入输出数据。在该接口被调用后,所有先前通过异步回调报告的Buffer的索引都将 + * 失效,确保不要再访问这些索引对应的Buffers。 + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioEncoder_Flush(AVCodec *codec); + +/** + * @brief 重置编码器。如需继续编码工作,需要重新调用Configure接口以配置该编码器实例。 + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioEncoder_Reset(AVCodec *codec); + +/** + * @brief 获取该编码器输出数据的描述信息,具体参考{@link AVFormat}. 需要注意的是,返回值所指向 + * 的AVFormat实例的生命周期将会再下一次调用该接口时或者该AVCodec实例被销毁时失效。 + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec 指向AVCodec实例的指针 + * @return 返回AVFormat句柄指针,生命周期随下一次GetOutputMediaDescription刷新,或伴随AVCodec销毁; + * @since 9 + * @version 1.0 + */ +AVFormat* OH_AudioEncoder_GetOutputDescription(AVCodec *codec); + +/** + * @brief 向编码器设置动态参数,注意:该接口仅能在编码器被启动后调用,同时错误的参数设置,可能会导致编码失败 + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec 指向AVCodec实例的指针 + * @param format AVFormat句柄指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioEncoder_SetParameter(AVCodec *codec, AVFormat *format); + +/** + * @brief 将填充好数据的输入Buffer提交给音频编码器。{@link AVCodecOnAsyncNeedInputData}回调会报告可用的 + * 输入Buffer及对应的索引值。一旦指定索引的Buffer被提交给了音频编码器,直到再一次收到{@link AVCodecOnAsyncNeedInputData} + * 回调报告相同索引的Buffer可用前,该Buffer都不可以再次被访问。 + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec 指向AVCodec实例的指针 + * @param index 输入Buffer对应的索引值 + * @param attr 描述该Buffer内所包含数据的信息 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioEncoder_PushInputData(AVCodec *codec, uint32_t index, AVCodecBufferAttr attr); + +/** + * @brief 将处理结束的输出Buffer交还给编码器。 + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec 指向AVCodec实例的指针 + * @param index 输出Buffer对应的索引值 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioEncoder_FreeOutputData(AVCodec *codec, uint32_t index); + +#ifdef __cplusplus +} +#endif + +#endif // NATIVE_AVCODEC_H \ No newline at end of file diff --git a/zh-cn/native_sdk/media/media/ndk_av_errors.h b/zh-cn/native_sdk/media/media/native_averrors.h similarity index 92% rename from zh-cn/native_sdk/media/media/ndk_av_errors.h rename to zh-cn/native_sdk/media/media/native_averrors.h index ee8bc1b6..154f5bec 100644 --- a/zh-cn/native_sdk/media/media/ndk_av_errors.h +++ b/zh-cn/native_sdk/media/media/native_averrors.h @@ -12,8 +12,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef NDK_AV_ERRORS_H -#define NDK_AV_ERRORS_H +#ifndef NATIVE_AVERRORS_H +#define NATIVE_AVERRORS_H #ifdef __cplusplus extern "C" { @@ -27,7 +27,7 @@ extern "C" { */ typedef enum AVErrCode { /** - * ok. + * the operation completed successfully. */ AV_ERR_OK = 0, /** @@ -76,4 +76,4 @@ typedef enum AVErrCode { } #endif -#endif // NDK_AV_ERRORS_H \ No newline at end of file +#endif // NATIVE_AVERRORS_H \ No newline at end of file diff --git a/zh-cn/native_sdk/media/media/ndk_av_format.h b/zh-cn/native_sdk/media/media/native_avformat.h similarity index 62% rename from zh-cn/native_sdk/media/media/ndk_av_format.h rename to zh-cn/native_sdk/media/media/native_avformat.h index 2ddbf205..8cd02567 100644 --- a/zh-cn/native_sdk/media/media/ndk_av_format.h +++ b/zh-cn/native_sdk/media/media/native_avformat.h @@ -13,18 +13,18 @@ * limitations under the License. */ -#ifndef NDK_AV_FORMAT_H -#define NDK_AV_FORMAT_H - -#ifdef __cplusplus -extern "C" { -#endif +#ifndef NATIVE_AVFORMAT_H +#define NATIVE_AVFORMAT_H #include #include #include -typedef struct AVFormat AVFormat; +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct AVFormat AVFormat; /** * @brief Enumerates AVPixel Format. @@ -36,210 +36,209 @@ typedef enum AVPixelFormat { /** * yuv 420 planar. */ - AV_PIXEL_FORMT_YUVI420 = 1, + AV_PIXEL_FORMAT_YUVI420 = 1, /** * NV12. yuv 420 semiplanar. */ - AV_PIXEL_FORMT_NV12 = 2, + AV_PIXEL_FORMAT_NV12 = 2, /** * NV21. yvu 420 semiplanar. */ - AV_PIXEL_FORMT_NV21 = 3, + AV_PIXEL_FORMAT_NV21 = 3, /** * format from surface. */ - AV_PIXEL_FORMT_SURFACE_FORMAT = 4, + AV_PIXEL_FORMAT_SURFACE_FORMAT = 4, } AVPixelFormat; /** * @brief 创建一个AVFormat句柄指针,用以读写数据 * @syscap SystemCapability.Multimedia.Media.Core - * @return 返回值为AVFormat句柄指针 + * @return 返回AVFormat实例的指针 * @since 9 * @version 1.0 */ -struct AVFormat* OH_AV_CreateFormat(void); +struct AVFormat* OH_AVFormat_Create(void); /** * @brief 销毁指定AVFormat句柄资源 * @syscap SystemCapability.Multimedia.Media.Core - * @param format AVFormat句柄指针 + * @param format 指向AVFormat实例的指针 * @return void * @since 9 * @version 1.0 */ -void OH_AV_DestroyFormat(struct AVFormat *format); +void OH_AVFormat_Destroy(struct AVFormat *format); /** * @brief 拷贝AVFormat句柄资源 * @syscap SystemCapability.Multimedia.Media.Core * @param to 接收数据的AVFormat句柄指针 * @param from 被拷贝数据的AVFormat句柄指针 - * @return 返回值为TRUE 成功,FALSE 失败 + * @return 返回值为TRUE表示成功,FALSE表示失败 * @since 9 * @version 1.0 */ -bool OH_AV_FormatCopy(struct AVFormat *to, struct AVFormat *from); +bool OH_AVFormat_Copy(struct AVFormat *to, struct AVFormat *from); /** * @brief 向AVFormat写入Int数据 * @syscap SystemCapability.Multimedia.Media.Core - * @param format AVFormat句柄指针 + * @param format 指向AVFormat实例的指针 * @param key 写入数据的键值 * @param value 写入的数据 - * @return 返回值为TRUE 成功,FALSE 失败 + * @return 返回值为TRUE表示成功,FALSE表示失败 * @since 9 * @version 1.0 */ -bool OH_AV_FormatPutIntValue(struct AVFormat *format, const char *key, int32_t value); +bool OH_AVFormat_PutIntValue(struct AVFormat *format, const char *key, int32_t value); /** * @brief 向AVFormat写入Long数据 * @syscap SystemCapability.Multimedia.Media.Core - * @param format AVFormat句柄指针 + * @param format 指向AVFormat实例的指针 * @param key 写入数据的键值 * @param value 写入的数据 - * @return 返回值为TRUE 成功,FALSE 失败 + * @return 返回值为TRUE表示成功,FALSE表示失败 * @since 9 * @version 1.0 */ -bool OH_AV_FormatPutLongValue(struct AVFormat *format, const char *key, int64_t value); +bool OH_AVFormat_PutLongValue(struct AVFormat *format, const char *key, int64_t value); /** * @brief 向AVFormat写入Float数据 * @syscap SystemCapability.Multimedia.Media.Core - * @param format AVFormat句柄指针 + * @param format 指向AVFormat实例的指针 * @param key 写入数据的键值 * @param value 写入的数据 - * @return 返回值为TRUE 成功,FALSE 失败 + * @return 返回值为TRUE表示成功,FALSE表示失败 * @since 9 * @version 1.0 */ -bool OH_AV_FormatPutFloatValue(struct AVFormat *format, const char *key, float value); +bool OH_AVFormat_PutFloatValue(struct AVFormat *format, const char *key, float value); /** * @brief 向AVFormat写入Double数据 * @syscap SystemCapability.Multimedia.Media.Core - * @param format AVFormat句柄指针 + * @param format 指向AVFormat实例的指针 * @param key 写入数据的键值 * @param value 写入的数据 - * @return 返回值为TRUE 成功,FALSE 失败 + * @return 返回值为TRUE表示成功,FALSE表示失败 * @since 9 * @version 1.0 */ -bool OH_AV_FormatPutDoubleValue(struct AVFormat *format, const char *key, double value); +bool OH_AVFormat_PutDoubleValue(struct AVFormat *format, const char *key, double value); /** * @brief 向AVFormat写入String数据 * @syscap SystemCapability.Multimedia.Media.Core - * @param format AVFormat句柄指针 + * @param format 指向AVFormat实例的指针 * @param key 写入数据的键值 * @param value 写入的数据 - * @return 返回值为TRUE 成功,FALSE 失败 + * @return 返回值为TRUE表示成功,FALSE表示失败 * @since 9 * @version 1.0 */ -bool OH_AV_FormatPutStringValue(struct AVFormat *format, const char *key, const char *value); +bool OH_AVFormat_PutStringValue(struct AVFormat *format, const char *key, const char *value); /** * @brief 向AVFormat写入一块指定长度的数据 * @syscap SystemCapability.Multimedia.Media.Core - * @param format AVFormat句柄指针 + * @param format 指向AVFormat实例的指针 * @param key 写入数据的键值 * @param addr 写入的数据地址 * @param size 写入的数据长度 - * @return 返回值为TRUE 成功,FALSE 失败 + * @return 返回值为TRUE表示成功,FALSE表示失败 * @since 9 * @version 1.0 */ -bool OH_AV_FormatPutBuffer(struct AVFormat *format, const char *key, const uint8_t *addr, size_t size); +bool OH_AVFormat_PutBuffer(struct AVFormat *format, const char *key, const uint8_t *addr, size_t size); /** * @brief 从AVFormat读取Int数据 * @syscap SystemCapability.Multimedia.Media.Core - * @param format AVFormat句柄指针 + * @param format 指向AVFormat实例的指针 * @param key 读取数据的键值 * @param out 读取的数据 - * @return 返回值为TRUE 成功,FALSE 失败 + * @return 返回值为TRUE表示成功,FALSE表示失败 * @since 9 * @version 1.0 */ -bool OH_AV_FormatGetIntValue(struct AVFormat *format, const char *key, int32_t *out); +bool OH_AVFormat_GetIntValue(struct AVFormat *format, const char *key, int32_t *out); /** * @brief 从AVFormat读取Long数据 * @syscap SystemCapability.Multimedia.Media.Core - * @param format AVFormat句柄指针 + * @param format 指向AVFormat实例的指针 * @param key 读取数据的键值 * @param out 读取的数据 - * @return 返回值为TRUE 成功,FALSE 失败 + * @return 返回值为TRUE表示成功,FALSE表示失败 * @since 9 * @version 1.0 */ -bool OH_AV_FormatGetLongValue(struct AVFormat *format, const char *key, int64_t *out); +bool OH_AVFormat_GetLongValue(struct AVFormat *format, const char *key, int64_t *out); /** * @brief 从AVFormat读取Float数据 * @syscap SystemCapability.Multimedia.Media.Core - * @param format AVFormat句柄指针 + * @param format 指向AVFormat实例的指针 * @param key 读取数据的键值 * @param out 读取的数据 - * @return 返回值为TRUE 成功,FALSE 失败 + * @return 返回值为TRUE表示成功,FALSE表示失败 * @since 9 * @version 1.0 */ -bool OH_AV_FormatGetFloatValue(struct AVFormat *format, const char *key, float *out); +bool OH_AVFormat_GetFloatValue(struct AVFormat *format, const char *key, float *out); /** * @brief 从AVFormat读取Double数据 * @syscap SystemCapability.Multimedia.Media.Core - * @param format AVFormat句柄指针 + * @param format 指向AVFormat实例的指针 * @param key 读取数据的键值 * @param out 读取的数据 - * @return 返回值为TRUE 成功,FALSE 失败 + * @return 返回值为TRUE表示成功,FALSE表示失败 * @since 9 * @version 1.0 */ -bool OH_AV_FormatGetDoubleValue(struct AVFormat *format, const char *key, double *out); +bool OH_AVFormat_GetDoubleValue(struct AVFormat *format, const char *key, double *out); /** * @brief 从AVFormat读取Double数据 * @syscap SystemCapability.Multimedia.Media.Core - * @param format AVFormat句柄指针 + * @param format 指向AVFormat实例的指针 * @param key 读取数据的键值 * @param out 读取的字符串指针,指向的数据生命周期伴随GetString更新,伴随Format销毁,如果调用者需要长期持有,必须进行内存拷贝 - * @return 返回值为TRUE 成功,FALSE 失败 + * @return 返回值为TRUE表示成功,FALSE表示失败 * @since 9 * @version 1.0 */ -bool OH_AV_FormatGetStringValue(struct AVFormat *format, const char *key, const char **out); +bool OH_AVFormat_GetStringValue(struct AVFormat *format, const char *key, const char **out); /** - * @brief The returned data is owned by the format and remains valid as long as the named entry is part of the format. + * @brief 从AVFormat读取一块指定长度的数据 * @syscap SystemCapability.Multimedia.Media.Core - * @param format AVFormat句柄指针 + * @param format 指向AVFormat实例的指针 * @param key 读写数据的键值 * @param addr 生命周期是format持有,伴随Format销毁,如果调用者需要长期持有,必须进行内存拷贝 * @param size 读写数据的长度 - * @return 返回值为TRUE 成功,FALSE 失败 + * @return 返回值为TRUE表示成功,FALSE表示失败 * @since 9 * @version 1.0 */ -bool OH_AV_FormatGetBuffer(struct AVFormat *format, const char *key, uint8_t **addr, size_t *size); - +bool OH_AVFormat_GetBuffer(struct AVFormat *format, const char *key, uint8_t **addr, size_t *size); /** - * @brief The returned data is owned by the format and remains valid as long as the named entry is part of the format. + * @brief 以字符串的形式输出AVFormat所包含的信息。 * @syscap SystemCapability.Multimedia.Media.Core - * @param format AVFormat句柄指针 + * @param format 指向AVFormat实例的指针 * @return 返回由键值和数据组成的字符串 * @since 9 * @version 1.0 */ -const char * OH_AV_FormatDumpInfo(struct AVFormat *format); +const char * OH_AVFormat_DumpInfo(struct AVFormat *format); #ifdef __cplusplus } #endif -#endif // NDK_AV_FORMAT_H \ No newline at end of file +#endif // NATIVE_AVFORMAT_H \ No newline at end of file diff --git a/zh-cn/native_sdk/media/media/ndk_av_memory.h b/zh-cn/native_sdk/media/media/native_avmemory.h similarity index 85% rename from zh-cn/native_sdk/media/media/ndk_av_memory.h rename to zh-cn/native_sdk/media/media/native_avmemory.h index 2ffe3a26..68512642 100644 --- a/zh-cn/native_sdk/media/media/ndk_av_memory.h +++ b/zh-cn/native_sdk/media/media/native_avmemory.h @@ -13,16 +13,16 @@ * limitations under the License. */ -#ifndef NDK_AV_MEMORY_H -#define NDK_AV_MEMORY_H +#ifndef NATIVE_AVMEMORY_H +#define NATIVE_AVMEMORY_H + +#include #ifdef __cplusplus extern "C" { #endif -#include - -typedef struct AVMemory AVMemory; +typedef struct AVMemory AVMemory; /** * @brief Get the memory's virtual address @@ -32,7 +32,7 @@ typedef struct AVMemory AVMemory; * @since 9 * @version 1.0 */ -uint8_t* OH_AV_MemoryGetAddr(struct AVMemory *mem); +uint8_t* OH_AVMemory_GetAddr(struct AVMemory *mem); /** * @brief Get the memory's size @@ -42,10 +42,10 @@ uint8_t* OH_AV_MemoryGetAddr(struct AVMemory *mem); * @since 9 * @version 1.0 */ -int32_t OH_AV_MemoryGetSize(struct AVMemory *mem); +int32_t OH_AVMemory_GetSize(struct AVMemory *mem); #ifdef __cplusplus } #endif -#endif // NDK_AV_MEMORY_H \ No newline at end of file +#endif // NATIVE_AVMEMORY_H \ No newline at end of file diff --git a/zh-cn/native_sdk/media/media/ndk_av_codec.h b/zh-cn/native_sdk/media/media/ndk_av_codec.h deleted file mode 100644 index 06313012..00000000 --- a/zh-cn/native_sdk/media/media/ndk_av_codec.h +++ /dev/null @@ -1,763 +0,0 @@ -/* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef NDK_AV_CODEC_H -#define NDK_AV_CODEC_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -#include -#include "ndk_av_errors.h" -#include "ndk_av_format.h" -#include "ndk_av_memory.h" - -typedef struct NativeWindow NativeWindow; -typedef struct AVCodec AVCodec; - -/** - * @brief AVCodec MIME types. - * @syscap SystemCapability.Multimedia.Media.CodecBase - * @since 9 - * @version 1.0 - */ -const char * const AVCODEC_MIME_TYPE_VIDEO_AVC = "video/avc"; -const char * const AVCODEC_MIME_TYPE_AUDIO_AAC = "audio/mp4a-latm"; - - -/** - * @brief Enumerates AVCodec Buffer Flags. - * @syscap SystemCapability.Multimedia.Media.CodecBase - * @since 9 - * @version 1.0 - */ -typedef enum AVCodecBufferFlags { - AVCODEC_BUFFER_FLAGS_NONE = 0, - /* This signals the end of stream */ - AVCODEC_BUFFER_FLAGS_EOS = 1 << 0, - /* This indicates that the buffer contains the data for a sync frame */ - AVCODEC_BUFFER_FLAGS_SYNC_FRAME = 1 << 1, - /* This indicates that the buffer only contains part of a frame */ - AVCODEC_BUFFER_FLAGS_PARTIAL_FRAME = 1 << 2, - /* This indicated that the buffer contains codec specific data */ - AVCODEC_BUFFER_FLAGS_CODEC_DATA = 1 << 3, -} AVCodecBufferFlags; - -/** - * @brief Enumerates AVCodec Buffer Flags. - * @syscap SystemCapability.Multimedia.Media.CodecBase - * @since 9 - * @version 1.0 - */ -typedef struct AVCodecBufferAttr { - /* The presentation timestamp in microseconds for the buffer */ - int64_t presentationTimeUs; - /* The amount of data (in bytes) in the buffer */ - int32_t size; - /* The start-offset of the data in the buffer */ - int32_t offset; - /** - * @brief the flags associated with the sample, this - * maybe be a combination of multiple {@link AVCodecBufferFlags}. - */ - uint32_t flags; -} AVCodecBufferAttr; - -/** - * @brief Called when an error occurred. - * @syscap SystemCapability.Multimedia.Media.CodecBase - * @param codec AVCodec句柄指针 - * @param errorCode Error code. - * @param userData specified data - * @since 9 - * @version 1.0 - */ -typedef void (* AVCodecOnAsyncError)(AVCodec *codec, int32_t errorCode, void *userData); - -/** - * @brief Called when the output format has changed. format生命周期仅维持在StreamChanged事件中,禁止结束后访问 - * @syscap SystemCapability.Multimedia.Media.CodecBase - * @param codec AVCodec句柄指针 - * @param format AVFormat句柄指针 - * @param userData specified data - * @since 9 - * @version 1.0 - */ -typedef void (* AVCodecOnAsyncStreamChanged)(AVCodec *codec, AVFormat *format, void *userData); - -/** - * @brief Called when an input buffer becomes available. - * @syscap SystemCapability.Multimedia.Media.CodecBase - * @param codec AVCodec句柄指针 - * @param index The index of the available input buffer. - * @param userData specified data - * @since 9 - * @version 1.0 - */ -typedef void (* AVCodecOnAsyncNeedInputData)(AVCodec *codec, uint32_t index, AVMemory *data, void *userData); - -/** - * @brief Called when an out buffer becomes available. attr生命周期仅维持在NewOutputData事件中,禁止结束后访问 - * @syscap SystemCapability.Multimedia.Media.CodecBase - * @param codec AVCodec句柄指针 - * @param index The index of the available output buffer. - * @param attr attr of the available output buffer. For details, see {@link AVCodecBufferAttr} - * @param userData specified data - * @since 9 - * @version 1.0 - */ -typedef void (* AVCodecOnAsyncNewOutputData)(AVCodec *codec, uint32_t index, AVMemory *data, - AVCodecBufferAttr *attr, void *userData); - -/** - * @brief Register callback function, Respond to codec reporting events - * @syscap SystemCapability.Multimedia.Media.CodecBase - * @param onAsyncError 监听编解码错误码,当回调产生时,编解码出现异常状况 - * @param onAsyncStreamChanged 监听编解码流信息,当回调产生时,流信息变更 - * @param onAsyncNeedInputData 监听编解码需要输入数据,当回调产生时,调用者可通过GetInputData获得InputData - * @param onAsyncNewOutputData 监听编解码产生输出数据,当回调产生时,调用者方可调用GetOutputData获取OutputData - * @since 9 - * @version 1.0 - */ -typedef struct AVCodecOnAsyncCallback { - AVCodecOnAsyncError onAsyncError; - AVCodecOnAsyncStreamChanged onAsyncStreamChanged; - AVCodecOnAsyncNeedInputData onAsyncNeedInputData; - AVCodecOnAsyncNewOutputData onAsyncNewOutputData; -} AVCodecOnAsyncCallback; - - -/** - * @brief 通过mime创建一个视频解码句柄指针 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param mime 编解码器类型 see AVCODEC_MIME_TYPE - * @return 返回一个AVCodec句柄指针 - * @since 9 - * @version 1.0 - */ -AVCodec* OH_AVCODEC_CreateVideoDecoderByMime(const char *mime); - - -/** - * @brief 通过name创建一个视频解码句柄指针 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param name 查询Xml能力 或者 芯片手册,必须确保解码器name正确 - * @return 返回一个AVCodec句柄指针 - * @since 9 - * @version 1.0 - */ -AVCodec* OH_AVCODEC_CreateVideoDecoderByName(const char *name); - -/** - * @brief 设置解码器到Release状态,清空解码器资源,销毁解码器 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param codec AVCodec句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_DestroyVideoDecoder(AVCodec *codec); - -/** - * @brief 设置一个异步回调函数,用以响应编解码产生的事件,监听编解码工作状态,输入/输出Data情况,要求在Configure/Prepare前设置 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param codec AVCodec句柄指针 - * @param callback Refer to the definition of AVCodecOnAsyncCallback on how each callback function is called and what are specified. - * @param userData The specified userdata is the pointer used when those callback functions are called. - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_VideoDecoderSetCallback(AVCodec *codec, AVCodecOnAsyncCallback callback, void *userData); - -/** - * @brief 设置输出Window和Surface,提供解码输出和窗口渲染 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param codec AVCodec句柄指针 - * @param window NativeWindow句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_VideoDecoderSetOutputSurface(AVCodec *codec, NativeWindow *window); - -/** - * @brief 设置解码器参数 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param codec AVCodec句柄指针 - * @param format AVFormat句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_VideoDecoderConfigure(AVCodec *codec, AVFormat *format); - -/** - * @brief 设置解码器到Prepared状态 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param codec AVCodec句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_VideoDecoderPrepare(AVCodec *codec); - -/** - * @brief 设置解码器到Started状态,等待监听事件,通过QueueInputBuffer送入SPS/PTS/ES数据 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param codec AVCodec句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_VideoDecoderStart(AVCodec *codec); - -/** - * @brief 设置解码器到Stoped状态,停止解码,可通过Start重新进入Started状态,但需重新输入SPS/PTS数据 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param codec AVCodec句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_VideoDecoderStop(AVCodec *codec); - -/** - * @brief 清空解码器队列缓存中的任务 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param codec AVCodec句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_VideoDecoderFlush(AVCodec *codec); - -/** - * @brief 设置解码器到Reset状态,清空解码器的工作参数,如需再次使用,需通过Configure和Prepare重新进入Prepared状态 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param codec AVCodec句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_VideoDecoderReset(AVCodec *codec); - -/** - * @brief 获取输出AVFormat格式,可以通过AVFormat的KEY获取PixelFormat、Width/Hight等参数 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param codec AVCodec句柄指针 - * @return 返回AVFormat句柄指针,生命周期随下一次GetOutputMediaDescription刷新,或伴随AVCodec销毁; - * @since 9 - * @version 1.0 - */ -AVFormat* OH_AVCODEC_VideoDecoderGetOutputMediaDescription(AVCodec *codec); - -/** - * @brief 向解码器设置动态参数,只能在Started状态下调用,注意:错误的参数变更,可能会导致解码失败 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param codec AVCodec句柄指针 - * @param format AVFormat句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_VideoDecoderSetParameter(AVCodec *codec, AVFormat *format); - -/** - * @brief 当GetInputBuffer返回的AVMemory被写入SPS/PTS/ES数据后,可通过QueueInputBuffer通知解码器读取数据 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param codec AVCodec句柄指针 - * @param index AVCodecOnAsyncNeedInputData事件提供的索引值 - * @param attr 描述InputBuffer的属性信息 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_VideoDecoderPushInputData(AVCodec *codec, uint32_t index, AVCodecBufferAttr attr); - -/** - * @brief 当监听到AVCodecOnAsyncNewOutputData事件时,可通过事件提供的索引值,将OutputBuffer送给surface - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param codec AVCodec句柄指针 - * @param index OutputBuffer索引值 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_VideoDecoderRenderOutputData(AVCodec *codec, uint32_t index); - -/** - * @brief 当监听到AVCodecOnAsyncNewOutputData事件时,可通过事件提供的索引值,释放OutputBuffer - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param codec AVCodec句柄指针 - * @param index OutputBuffer索引值 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_VideoDecoderFreeOutputData(AVCodec *codec, uint32_t index); - -// Video Encoder -/** - * @brief 通过mime创建一个视频编码句柄指针 - * @syscap SystemCapability.Multimedia.Media.VideoEncoder - * @param mime 编解码器类型 see AVCODEC_MIME_TYPE - * @return 返回一个AVCodec句柄指针 - * @since 9 - * @version 1.0 - */ -AVCodec* OH_AVCODEC_CreateVideoEncoderByMime(const char *mime); - -/** - * @brief 通过name创建一个视频编码句柄指针 - * @syscap SystemCapability.Multimedia.Media.VideoEncoder - * @param name 查询Xml能力 或者 芯片手册,必须确保解码器name正确 - * @return 返回一个AVCodec句柄指针 - * @since 9 - * @version 1.0 - */ -AVCodec* OH_AVCODEC_CreateVideoEncoderByName(const char *name); - -/** - * @brief 设置编码器到Release状态,清空编码器资源,销毁编码器 - * @syscap SystemCapability.Multimedia.Media.VideoEncoder - * @param codec AVCodec句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_DestroyVideoEncoder(AVCodec *codec); - -/** - * @brief 设置一个异步回调函数,用以响应编解码产生的事件,监听编解码工作状态,输入/输出Data情况,要求在Configure/Prepare前设置 - * @syscap SystemCapability.Multimedia.Media.VideoEncoder - * @param codec AVCodec句柄指针 - * @param callback Refer to the definition of AVCodecOnAsyncCallback on how each callback function is called and what are specified. - * @param userData The specified userdata is the pointer used when those callback functions are called. - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_VideoEncoderSetCallback(AVCodec *codec, AVCodecOnAsyncCallback callback, void *userData); - -/** - * @brief 设置编码器参数 - * @syscap SystemCapability.Multimedia.Media.VideoEncoder - * @param codec AVCodec句柄指针 - * @param format AVFormat句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_VideoEncoderConfigure(AVCodec *codec, AVFormat *format); - -/** - * @brief 设置编码器到Prepared状态 - * @syscap SystemCapability.Multimedia.Media.VideoEncoder - * @param codec AVCodec句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_VideoEncoderPrepare(AVCodec *codec); - -/** - * @brief 设置编码器到Started状态,等待监听事件,通过QueueInputBuffer送入SPS/PTS/ES数据 - * @syscap SystemCapability.Multimedia.Media.VideoEncoder - * @param codec AVCodec句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_VideoEncoderStart(AVCodec *codec); - -/** - * @brief 设置编码器到Stoped状态,停止编码,可通过Start重新进入Started状态,但需重新输入SPS/PTS数据 - * @syscap SystemCapability.Multimedia.Media.VideoEncoder - * @param codec AVCodec句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_VideoEncoderStop(AVCodec *codec); - -/** - * @brief 清空编码器队列缓存中的任务 - * @syscap SystemCapability.Multimedia.Media.VideoEncoder - * @param codec AVCodec句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_VideoEncoderFlush(AVCodec *codec); - -/** - * @brief 设置编码器到Reset状态,清空编码器的工作参数,如需再次使用,需通过Configure和Prepare重新进入Prepared状态 - * @syscap SystemCapability.Multimedia.Media.VideoEncoder - * @param codec AVCodec句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_VideoEncoderReset(AVCodec *codec); - -/** - * @brief 向编码器设置动态参数,只能在Started状态下调用,注意:错误的参数变更,可能会导致编码失败 - * @syscap SystemCapability.Multimedia.Media.VideoEncoder - * @param codec AVCodec句柄指针 - * @param format AVFormat句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_VideoEncoderSetParameter(AVCodec *codec, AVFormat *format); - -/** - * @brief 获取输出AVFormat格式,可以通过AVFormat的KEY获取PixelFormat、Width/Hight等参数 - * @syscap SystemCapability.Multimedia.Media.VideoEncoder - * @param codec AVCodec句柄指针 - * @return 返回AVFormat句柄指针,生命周期随下一次GetOutputMediaDescription刷新,或伴随AVCodec销毁; - * @since 9 - * @version 1.0 - */ -AVFormat* OH_AVCODEC_VideoEncoderGetOutputMediaDescription(AVCodec *codec); - -/** - * @brief Obtains the surface from encoder. - * @syscap SystemCapability.Multimedia.Media.VideoEncoder - * @param codec AVCodec句柄指针 - * @param window NativeWindow句柄指针的指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_VideoEncoderGetInputSurface(AVCodec *codec, NativeWindow **window); - -/** - * @brief 当监听到AVCodecOnAsyncNewOutputData事件时,可通过事件提供的索引值,释放OutputBuffer - * @syscap SystemCapability.Multimedia.Media.VideoEncoder - * @param codec AVCodec句柄指针 - * @param index OutputBuffer索引值 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_VideoEncoderFreeOutputData(AVCodec *codec, uint32_t index); - -// Audio Decoder -/** - * @brief 通过mime创建一个音频解码码句柄指针 - * @syscap SystemCapability.Multimedia.Media.AudioDecoder - * @param mime 编解码器类型 see AVCODEC_MIME_TYPE - * @return 返回一个AVCodec句柄指针 - * @since 9 - * @version 1.0 - */ -AVCodec* OH_AVCODEC_CreateAudioDecoderByMime(const char *mime); - -/** - * @brief 通过name创建一个音频解码句柄指针 - * @syscap SystemCapability.Multimedia.Media.AudioDecoder - * @param name 查询Xml能力 或者 芯片手册,必须确保解码器name正确 - * @return 返回一个AVCodec句柄指针 - * @since 9 - * @version 1.0 - */ -AVCodec* OH_AVCODEC_CreateAudioDecoderByName(const char *name); - -/** - * @brief 设置解码器到Release状态,清空解码器资源,销毁解码器 - * @syscap SystemCapability.Multimedia.Media.AudioDecoder - * @param codec AVCodec句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_DestroyAudioDecoder(AVCodec *codec); - -/** - * @brief 设置一个异步回调函数,用以响应编解码产生的事件,监听编解码工作状态,输入/输出Data情况,要求在Configure/Prepare前设置 - * @syscap SystemCapability.Multimedia.Media.AudioDecoder - * @param codec AVCodec句柄指针 - * @param callback Refer to the definition of AVCodecOnAsyncCallback on how each callback function is called and what are specified. - * @param userData The specified userdata is the pointer used when those callback functions are called. - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_AudioDecoderSetCallback(AVCodec *codec, AVCodecOnAsyncCallback callback, void *userData); - -/** - * @brief 设置解码器参数 - * @syscap SystemCapability.Multimedia.Media.AudioDecoder - * @param codec AVCodec句柄指针 - * @param format AVFormat句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_AudioDecoderConfigure(AVCodec *codec, AVFormat *format); - -/** - * @brief 设置解码器到Prepared状态 - * @syscap SystemCapability.Multimedia.Media.AudioDecoder - * @param codec AVCodec句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_AudioDecoderPrepare(AVCodec *codec); - -/** - * @brief 设置解码器到Started状态,等待监听事件,通过QueueInputBuffer送入ES数据 - * @syscap SystemCapability.Multimedia.Media.AudioDecoder - * @param codec AVCodec句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_AudioDecoderStart(AVCodec *codec); - -/** - * @brief 设置解码器到Stoped状态,停止解码,可通过Start重新进入Started状态,但需重新输入ES数据 - * @syscap SystemCapability.Multimedia.Media.AudioDecoder - * @param codec AVCodec句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_AudioDecoderStop(AVCodec *codec); - -/** - * @brief 清空解码器队列缓存中的任务 - * @syscap SystemCapability.Multimedia.Media.AudioDecoder - * @param codec AVCodec句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_AudioDecoderFlush(AVCodec *codec); - -/** - * @brief 设置解码器到Reset状态,清空解码器的工作参数,如需再次使用,需通过Configure和Prepare重新进入Prepared状态 - * @syscap SystemCapability.Multimedia.Media.AudioDecoder - * @param codec AVCodec句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ - -AVErrCode OH_AVCODEC_AudioDecoderReset(AVCodec *codec); - -/** - * @brief 向解码器设置动态参数,只能在Started状态下调用,注意:错误的参数变更,可能会导致解码失败 - * @syscap SystemCapability.Multimedia.Media.AudioDecoder - * @param codec AVCodec句柄指针 - * @param format AVFormat句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_AudioDecoderSetParameter(AVCodec *codec, AVFormat *format); - -/** - * @brief 获取输出AVFormat格式,可以通过AVFormat的KEY获取SampleFormat、channel、SampleRate等参数 - * @syscap SystemCapability.Multimedia.Media.AudioDecoder - * @param codec AVCodec句柄指针 - * @return 返回AVFormat句柄指针,生命周期随下一次GetOutputMediaDescription刷新,或伴随AVCodec销毁; - * @since 9 - * @version 1.0 - */ -AVFormat* OH_AVCODEC_AudioDecoderGetOutputMediaDescription(AVCodec *codec); - -/** - * @brief 当GetInputBuffer返回的AVMemory被写入ES数据后,可通过QueueInputBuffer通知解码器读取数据 - * @syscap SystemCapability.Multimedia.Media.AudioDecoder - * @param codec AVCodec句柄指针 - * @param index AVCodecOnAsyncNeedInputData事件提供的索引值 - * @param attr 描述InputBuffer的属性信息 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_AudioDecoderPushInputData(AVCodec *codec, uint32_t index, AVCodecBufferAttr attr); - -/** - * @brief 当监听到AVCodecOnAsyncNewOutputData事件时,可通过事件提供的索引值,释放OutputBuffer - * @syscap SystemCapability.Multimedia.Media.AudioDecoder - * @param codec AVCodec句柄指针 - * @param index OutputBuffer索引值 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_AudioDecoderFreeOutputData(AVCodec *codec, uint32_t index); - -// Audio Encoder -/** - * @brief 通过mime创建一个音频编码句柄指针 - * @syscap SystemCapability.Multimedia.Media.AudioEncoder - * @param mime 编解码器类型 see AVCODEC_MIME_TYPE - * @return 返回一个AVCodec句柄指针 - * @since 9 - * @version 1.0 - */ -AVCodec* OH_AVCODEC_CreateAudioEncoderByMime(const char *mime); - -/** - * @brief 通过name创建一个音频编码句柄指针 - * @syscap SystemCapability.Multimedia.Media.AudioEncoder - * @param name 查询Xml能力 或者 芯片手册,必须确保解码器name正确 - * @return 返回一个AVCodec句柄指针 - * @since 9 - * @version 1.0 - */ -AVCodec* OH_AVCODEC_CreateAudioEncoderByName(const char *name); - -/** - * @brief 设置编码器到Release状态,清空编码器资源,销毁编码器 - * @syscap SystemCapability.Multimedia.Media.AudioEncoder - * @param codec AVCodec句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_DestroyAudioEncoder(AVCodec *codec); - -/** - * @brief 设置一个异步回调函数,用以响应编解码产生的事件,监听编解码工作状态,输入/输出Data情况,要求在Configure/Prepare前设置 - * @syscap SystemCapability.Multimedia.Media.AudioEncoder - * @param codec AVCodec句柄指针 - * @param callback Refer to the definition of AVCodecOnAsyncCallback on how each callback function is called and what are specified. - * @param userData The specified userdata is the pointer used when those callback functions are called. - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_AudioEncoderSetCallback(AVCodec *codec, AVCodecOnAsyncCallback callback, void *userData); - -/** - * @brief 设置编码器参数 - * @syscap SystemCapability.Multimedia.Media.AudioEncoder - * @param codec AVCodec句柄指针 - * @param format AVFormat句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_AudioEncoderConfigure(AVCodec *codec, AVFormat *format); - -/** - * @brief 设置编码器到Prepared状态 - * @syscap SystemCapability.Multimedia.Media.AudioEncoder - * @param codec AVCodec句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_AudioEncoderPrepare(AVCodec *codec); - -/** - * @brief 设置编码器到Started状态,等待监听事件,通过QueueInputBuffer送入ES数据 - * @syscap SystemCapability.Multimedia.Media.AudioEncoder - * @param codec AVCodec句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_AudioEncoderStart(AVCodec *codec); - -/** - * @brief 设置编码器到Stoped状态,停止编码,可通过Start重新进入Started状态,但需重新输入ES数据 - * @syscap SystemCapability.Multimedia.Media.AudioEncoder - * @param codec AVCodec句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_AudioEncoderStop(AVCodec *codec); - -/** - * @brief 清空编码器队列缓存中的任务 - * @syscap SystemCapability.Multimedia.Media.AudioEncoder - * @param codec AVCodec句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_AudioEncoderFlush(AVCodec *codec); - -/** - * @brief 设置编码器到Reset状态,清空编码器的工作参数,如需再次使用,需通过Configure和Prepare重新进入Prepared状态 - * @syscap SystemCapability.Multimedia.Media.AudioEncoder - * @param codec AVCodec句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_AudioEncoderReset(AVCodec *codec); - -/** - * @brief 向编码器设置动态参数,只能在Started状态下调用,注意:错误的参数变更,可能会导致编码失败 - * @syscap SystemCapability.Multimedia.Media.AudioEncoder - * @param codec AVCodec句柄指针 - * @param format AVFormat句柄指针 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_AudioEncoderSetParameter(AVCodec *codec, AVFormat *format); - -/** - * @brief 获取输出AVFormat格式,可以通过AVFormat的KEY获取SampleFormat、channel、SampleRate等参数 - * @syscap SystemCapability.Multimedia.Media.AudioEncoder - * @param codec AVCodec句柄指针 - * @return 返回AVFormat句柄指针,生命周期随下一次GetOutputMediaDescription刷新,或伴随AVCodec销毁; - * @since 9 - * @version 1.0 - */ -AVFormat* OH_AVCODEC_AudioEncoderGetOutputMediaDescription(AVCodec *codec); - -/** - * @brief 当GetInputBuffer返回的AVMemory被写入ES数据后,可通过QueueInputBuffer通知解码器读取数据 - * @syscap SystemCapability.Multimedia.Media.AudioEncoder - * @param codec AVCodec句柄指针 - * @param index AVCodecOnAsyncNeedInputData事件提供的索引值 - * @param attr 描述InputBuffer的属性信息 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_AudioEncoderPushInputData(AVCodec *codec, uint32_t index, AVCodecBufferAttr attr); - -/** - * @brief 当监听到AVCodecOnAsyncNewOutputData事件时,可通过事件提供的索引值,释放OutputBuffer - * @syscap SystemCapability.Multimedia.Media.AudioEncoder - * @param codec AVCodec句柄指针 - * @param index OutputBuffer索引值 - * @return AVErrCode 错误码 - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AVCODEC_AudioEncoderFreeOutputData(AVCodec *codec, uint32_t index); - -#ifdef __cplusplus -} -#endif - -#endif // NDK_AV_CODEC_H \ No newline at end of file -- Gitee From 632919b54ecc68a4fa6996aa0298de35c0a9cc59 Mon Sep 17 00:00:00 2001 From: lin-jianwu Date: Sat, 9 Jul 2022 17:20:03 +0800 Subject: [PATCH 08/14] add venc eos interface Signed-off-by: lin-jianwu --- zh-cn/native_sdk/media/media/native_avcodec.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/zh-cn/native_sdk/media/media/native_avcodec.h b/zh-cn/native_sdk/media/media/native_avcodec.h index 22475c99..dd5660f7 100644 --- a/zh-cn/native_sdk/media/media/native_avcodec.h +++ b/zh-cn/native_sdk/media/media/native_avcodec.h @@ -471,6 +471,16 @@ AVErrCode OH_VideoEncoder_GetInputSurface(AVCodec *codec, NativeWindow **window) */ AVErrCode OH_VideoEncoder_FreeOutputData(AVCodec *codec, uint32_t index); +/** + * @brief 通知视频编码器输入码流已结束。 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoDecoder_NotifyEndOfStream(AVCodec *codec); + // Audio Decoder /** * @brief 通过mime类型创建一个音频解码器实例,大多数情况下推荐使用该接口。 -- Gitee From ba4ea90d47f8ce3855065dc023a1889c27892593 Mon Sep 17 00:00:00 2001 From: lin-jianwu Date: Sat, 9 Jul 2022 17:46:19 +0800 Subject: [PATCH 09/14] fix name Signed-off-by: lin-jianwu --- zh-cn/native_sdk/media/media/native_avcodec.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh-cn/native_sdk/media/media/native_avcodec.h b/zh-cn/native_sdk/media/media/native_avcodec.h index dd5660f7..7a51c095 100644 --- a/zh-cn/native_sdk/media/media/native_avcodec.h +++ b/zh-cn/native_sdk/media/media/native_avcodec.h @@ -479,7 +479,7 @@ AVErrCode OH_VideoEncoder_FreeOutputData(AVCodec *codec, uint32_t index); * @since 9 * @version 1.0 */ -AVErrCode OH_VideoDecoder_NotifyEndOfStream(AVCodec *codec); +AVErrCode OH_VideoEncoder_NotifyEndOfStream(AVCodec *codec); // Audio Decoder /** -- Gitee From 7f846ea0cd93754abd57cdf32ac6e2684bb52db0 Mon Sep 17 00:00:00 2001 From: lin-jianwu Date: Mon, 11 Jul 2022 10:58:28 +0800 Subject: [PATCH 10/14] fix review Signed-off-by: lin-jianwu --- zh-cn/native_sdk/media/media/native_avcodec.h | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/zh-cn/native_sdk/media/media/native_avcodec.h b/zh-cn/native_sdk/media/media/native_avcodec.h index 7a51c095..4c4438b3 100644 --- a/zh-cn/native_sdk/media/media/native_avcodec.h +++ b/zh-cn/native_sdk/media/media/native_avcodec.h @@ -364,8 +364,7 @@ AVErrCode OH_VideoEncoder_Destroy(AVCodec *codec); AVErrCode OH_VideoEncoder_SetCallback(AVCodec *codec, AVCodecOnAsyncCallback callback, void *userData); /** - * @brief 配置视频编码器,典型地,需要配置被编码视频轨道的描述信息,这些信息能够从容器中提取出来, - * 该接口被调用必须是在Prepare被调用前。 + * @brief 配置视频编码器,典型地,需要配置被编码视频轨道的描述信息,该接口被调用必须是在Prepare被调用前。 * @syscap SystemCapability.Multimedia.Media.VideoEncoder * @param codec 指向AVCodec实例的指针 * @param format 指向AVFormat的指针,用以给出待编码视频轨道的描述信息 @@ -472,7 +471,8 @@ AVErrCode OH_VideoEncoder_GetInputSurface(AVCodec *codec, NativeWindow **window) AVErrCode OH_VideoEncoder_FreeOutputData(AVCodec *codec, uint32_t index); /** - * @brief 通知视频编码器输入码流已结束。 + * @brief 通知视频编码器输入码流已结束。surface模式推荐使用该接口通知编码器码流结束, + * bytebuffer模式推荐使用OH_AVCODEC_VideoEncoderPushInputData接口通知编码器码流结束。 * @syscap SystemCapability.Multimedia.Media.VideoEncoder * @param codec 指向AVCodec实例的指针 * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} @@ -681,8 +681,7 @@ AVErrCode OHAudioEncoder_Destroy(AVCodec *codec); AVErrCode OH_AudioEncoder_SetCallback(AVCodec *codec, AVCodecOnAsyncCallback callback, void *userData); /** - * @brief 配置音频编码器,典型地,需要配置被编码音频轨道的描述信息,这些信息能够从容器中提取出来, - * 该接口被调用必须是在Prepare被调用前。 + * @brief 配置音频编码器,典型地,需要配置被编码音频轨道的描述信息,该接口被调用必须是在Prepare被调用前。 * @syscap SystemCapability.Multimedia.Media.AudioEncoder * @param codec 指向AVCodec实例的指针 * @param format AVFormat句柄指针 -- Gitee From ea35bbfc6ba5ea492c921b76c1f7780632a873c1 Mon Sep 17 00:00:00 2001 From: lin-jianwu Date: Mon, 11 Jul 2022 20:19:32 +0800 Subject: [PATCH 11/14] fix review Signed-off-by: lin-jianwu --- zh-cn/native_sdk/media/media/native_avcodec.h | 5 ++--- zh-cn/native_sdk/media/media/native_avformat.h | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/zh-cn/native_sdk/media/media/native_avcodec.h b/zh-cn/native_sdk/media/media/native_avcodec.h index 4c4438b3..e92d1ad6 100644 --- a/zh-cn/native_sdk/media/media/native_avcodec.h +++ b/zh-cn/native_sdk/media/media/native_avcodec.h @@ -36,9 +36,8 @@ typedef struct AVCodec AVCodec; * @since 9 * @version 1.0 */ -const char * const AVCODEC_MIME_TYPE_VIDEO_AVC = "video/avc"; -const char * const AVCODEC_MIME_TYPE_VIDEO_MPEG4 = "video/mp4v-es"; -const char * const AVCODEC_MIME_TYPE_AUDIO_AAC = "audio/mp4a-latm"; +extern const char* AVCODEC_MIME_TYPE_VIDEO_AVC; +extern const char* AVCODEC_MIME_TYPE_AUDIO_AAC; /** * @brief 枚举AVCodec的Buffer标记的类别 diff --git a/zh-cn/native_sdk/media/media/native_avformat.h b/zh-cn/native_sdk/media/media/native_avformat.h index 8cd02567..6ab979f3 100644 --- a/zh-cn/native_sdk/media/media/native_avformat.h +++ b/zh-cn/native_sdk/media/media/native_avformat.h @@ -235,7 +235,7 @@ bool OH_AVFormat_GetBuffer(struct AVFormat *format, const char *key, uint8_t **a * @since 9 * @version 1.0 */ -const char * OH_AVFormat_DumpInfo(struct AVFormat *format); +const char *OH_AVFormat_DumpInfo(struct AVFormat *format); #ifdef __cplusplus } -- Gitee From d739ecbef553ab9a6569894fbc5bdbfd54b0ad82 Mon Sep 17 00:00:00 2001 From: lin-jianwu Date: Wed, 13 Jul 2022 15:21:35 +0800 Subject: [PATCH 12/14] update api name Signed-off-by: lin-jianwu --- zh-cn/native_sdk/media/media/native_avcodec.h | 65 +++++++++---------- .../native_sdk/media/media/native_avformat.h | 12 ++-- 2 files changed, 38 insertions(+), 39 deletions(-) diff --git a/zh-cn/native_sdk/media/media/native_avcodec.h b/zh-cn/native_sdk/media/media/native_avcodec.h index e92d1ad6..6f5a764a 100644 --- a/zh-cn/native_sdk/media/media/native_avcodec.h +++ b/zh-cn/native_sdk/media/media/native_avcodec.h @@ -18,7 +18,6 @@ #include #include -#include #include "native_averrors.h" #include "native_avformat.h" #include "native_avmemory.h" @@ -52,7 +51,7 @@ typedef enum AVCodecBufferFlags { /* 表明该Buffer内包含关键帧 */ AVCODEC_BUFFER_FLAGS_SYNC_FRAME = 1 << 1, /* 表明该Buffer内包含的数据仅仅为一帧的一部分 */ - AVCODEC_BUFFER_FLAGS_PARTIAL_FRAME = 1 << 2, + AVCODEC_BUFFER_FLAGS_INCOMPLETE_FRAME = 1 << 2, /* 表明该Buffer包含Codec-Specific-Data */ AVCODEC_BUFFER_FLAGS_CODEC_DATA = 1 << 3, } AVCodecBufferFlags; @@ -65,7 +64,7 @@ typedef enum AVCodecBufferFlags { */ typedef struct AVCodecBufferAttr { /* 以微秒为单位表示的该Buffer的Presentation时间戳 */ - int64_t presentationTimeUs; + int64_t pts; /* 以字节为单位表示的该Buffer内所包含数据的大小 */ int32_t size; /* 有效数据在该Buffer内的起始偏移量 */ @@ -83,7 +82,7 @@ typedef struct AVCodecBufferAttr { * @since 9 * @version 1.0 */ -typedef void (* AVCodecOnAsyncError)(AVCodec *codec, int32_t errorCode, void *userData); +typedef void (* AVCodecOnError)(AVCodec *codec, int32_t errorCode, void *userData); /** * @brief 当输出流发生变化时,该函数指针会被调用以报告新的流描述信息. @@ -95,7 +94,7 @@ typedef void (* AVCodecOnAsyncError)(AVCodec *codec, int32_t errorCode, void *us * @since 9 * @version 1.0 */ -typedef void (* AVCodecOnAsyncStreamChanged)(AVCodec *codec, AVFormat *format, void *userData); +typedef void (* AVCodecOnStreamChanged)(AVCodec *codec, AVFormat *format, void *userData); /** * @brief 当AVCodec运行过程中需要新的输入数据时,该函数指针会被调用,并携带一块可用的Buffer以供填入新的输入数据。 @@ -107,7 +106,7 @@ typedef void (* AVCodecOnAsyncStreamChanged)(AVCodec *codec, AVFormat *format, v * @since 9 * @version 1.0 */ -typedef void (* AVCodecOnAsyncNeedInputData)(AVCodec *codec, uint32_t index, AVMemory *data, void *userData); +typedef void (* AVCodecOnNeedInputData)(AVCodec *codec, uint32_t index, AVMemory *data, void *userData); /** * @brief 当AVCodec运行过程中产生了新的输出数据时,该函数指针会被调用,并携带一块包含新输出数据的Buffer. @@ -121,26 +120,26 @@ typedef void (* AVCodecOnAsyncNeedInputData)(AVCodec *codec, uint32_t index, AVM * @since 9 * @version 1.0 */ -typedef void (* AVCodecOnAsyncNewOutputData)(AVCodec *codec, uint32_t index, AVMemory *data, +typedef void (* AVCodecOnNewOutputData)(AVCodec *codec, uint32_t index, AVMemory *data, AVCodecBufferAttr *attr, void *userData); /** * @brief AVCodec所有的异步回调函数指针集合。注册一个该结构体实例给AVCodec实例,并处理通过该回调报告 * 的信息,以确保AVCodec正常运转。 * @syscap SystemCapability.Multimedia.Media.CodecBase - * @param onAsyncError 监听AVCodec运行错误,参考{@link AVCodecOnAsyncError} - * @param onAsyncStreamChanged 监听编解码流信息,参考{@link AVCodecOnAsyncStreamChanged} - * @param onAsyncNeedInputData 监听编解码需要输入数据,参考{@link AVCodecOnAsyncNeedInputData} - * @param onAsyncNewOutputData 监听编解码产生输出数据,参考{@link onAsyncNewOutputData} + * @param onError 监听AVCodec运行错误,参考{@link AVCodecOnError} + * @param onStreamChanged 监听编解码流信息,参考{@link AVCodecOnStreamChanged} + * @param onNeedInputData 监听编解码需要输入数据,参考{@link AVCodecOnNeedInputData} + * @param onNeedInputData 监听编解码产生输出数据,参考{@link onNeedInputData} * @since 9 * @version 1.0 */ -typedef struct AVCodecOnAsyncCallback { - AVCodecOnAsyncError onAsyncError; - AVCodecOnAsyncStreamChanged onAsyncStreamChanged; - AVCodecOnAsyncNeedInputData onAsyncNeedInputData; - AVCodecOnAsyncNewOutputData onAsyncNewOutputData; -} AVCodecOnAsyncCallback; +typedef struct AVCodecAsyncCallback { + AVCodecOnError onError; + AVCodecOnStreamChanged onStreamChanged; + AVCodecOnNeedInputData onNeedInputData; + AVCodecOnNewOutputData onNeedInputData; +} AVCodecAsyncCallback; /** * @brief 通过mime类型创建一个视频解码器实例,大多数情况下推荐使用该接口。 @@ -176,13 +175,13 @@ AVErrCode OH_VideoDecoder_Destroy(AVCodec *codec); * @brief 设置异步回调函数,使得你的应用能够响应视频解码器产生的事件,该接口被调用必须是在Prepare被调用前 * @syscap SystemCapability.Multimedia.Media.VideoDecoder * @param codec 指向AVCodec实例的指针 - * @param callback 一个包含所有回调函数的集合体,参考{@link AVCodecOnAsyncCallback} + * @param callback 一个包含所有回调函数的集合体,参考{@link AVCodecAsyncCallback} * @param userData 用户特定数据 * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} * @since 9 * @version 1.0 */ -AVErrCode OH_VideoDecoder_SetCallback(AVCodec *codec, AVCodecOnAsyncCallback callback, void *userData); +AVErrCode OH_VideoDecoder_SetCallback(AVCodec *codec, AVCodecAsyncCallback callback, void *userData); /** * @brief 指定输出Surface,以提供视频解码输出, 该接口被调用必须是在Prepare被调用前 @@ -193,7 +192,7 @@ AVErrCode OH_VideoDecoder_SetCallback(AVCodec *codec, AVCodecOnAsyncCallback cal * @since 9 * @version 1.0 */ -AVErrCode OH_VideoDecoder_SetOutputSurface(AVCodec *codec, NativeWindow *window); +AVErrCode OH_VideoDecoder_SetSurface(AVCodec *codec, NativeWindow *window); /** * @brief 配置视频解码器,典型地,需要配置被解码视频轨道的描述信息,这些信息能够从容器中提取出来, @@ -282,8 +281,8 @@ AVFormat* OH_VideoDecoder_GetOutputDescription(AVCodec *codec); AVErrCode OH_VideoDecoder_SetParameter(AVCodec *codec, AVFormat *format); /** - * @brief 将填充好数据的输入Buffer提交给视频解码器。{@link AVCodecOnAsyncNeedInputData}回调会报告可用的 - * 输入Buffer及对应的索引值。一旦指定索引的Buffer被提交给了视频解码器,直到再一次收到{@link AVCodecOnAsyncNeedInputData} + * @brief 将填充好数据的输入Buffer提交给视频解码器。{@link AVCodecOnNeedInputData}回调会报告可用的 + * 输入Buffer及对应的索引值。一旦指定索引的Buffer被提交给了视频解码器,直到再一次收到{@link AVCodecOnNeedInputData} * 回调报告相同索引的Buffer可用前,该Buffer都不可以再次被访问。另外,对于部分解码器,要求在最开始给解码器输入 * Codec-Specific-Data,用以初始化解码器的解码过程,例如H264格式的PPS/SPS数据。 * @syscap SystemCapability.Multimedia.Media.VideoDecoder @@ -354,13 +353,13 @@ AVErrCode OH_VideoEncoder_Destroy(AVCodec *codec); * @brief 设置异步回调函数,使得你的应用能够响应视频编码器产生的事件,该接口被调用必须是在Prepare被调用前 * @syscap SystemCapability.Multimedia.Media.VideoEncoder * @param codec 指向AVCodec实例的指针 - * @param callback 一个包含所有回调函数的集合体,参考{@link AVCodecOnAsyncCallback} + * @param callback 一个包含所有回调函数的集合体,参考{@link AVCodecAsyncCallback} * @param userData 用户特定数据 * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} * @since 9 * @version 1.0 */ -AVErrCode OH_VideoEncoder_SetCallback(AVCodec *codec, AVCodecOnAsyncCallback callback, void *userData); +AVErrCode OH_VideoEncoder_SetCallback(AVCodec *codec, AVCodecAsyncCallback callback, void *userData); /** * @brief 配置视频编码器,典型地,需要配置被编码视频轨道的描述信息,该接口被调用必须是在Prepare被调用前。 @@ -456,7 +455,7 @@ AVErrCode OH_VideoEncoder_SetParameter(AVCodec *codec, AVFormat *format); * @since 9 * @version 1.0 */ -AVErrCode OH_VideoEncoder_GetInputSurface(AVCodec *codec, NativeWindow **window); +AVErrCode OH_VideoEncoder_GetSurface(AVCodec *codec, NativeWindow **window); /** * @brief 将处理结束的输出Buffer交还给编码器。 @@ -515,13 +514,13 @@ AVErrCode OH_AudioDecoder_Destroy(AVCodec *codec); * @brief 设置异步回调函数,使得你的应用能够响应音频解码器产生的事件,该接口被调用必须是在Prepare被调用前 * @syscap SystemCapability.Multimedia.Media.AudioDecoder * @param codec 指向AVCodec实例的指针 - * @param callback 一个包含所有回调函数的集合体,参考{@link AVCodecOnAsyncCallback} + * @param callback 一个包含所有回调函数的集合体,参考{@link AVCodecAsyncCallback} * @param userData 用户特定数据 * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} * @since 9 * @version 1.0 */ -AVErrCode OH_AudioDecoder_SetCallback(AVCodec *codec, AVCodecOnAsyncCallback callback, void *userData); +AVErrCode OH_AudioDecoder_SetCallback(AVCodec *codec, AVCodecAsyncCallback callback, void *userData); /** * @brief 配置音频解码器,典型地,需要配置被解码音频轨道的描述信息,这些信息能够从容器中提取出来, @@ -611,8 +610,8 @@ AVFormat* OH_AudioDecoder_GetOutputDescription(AVCodec *codec); AVErrCode OH_AudioDecoder_SetParameter(AVCodec *codec, AVFormat *format); /** - * @brief 将填充好数据的输入Buffer提交给音频解码器。{@link AVCodecOnAsyncNeedInputData}回调会报告可用的 - * 输入Buffer及对应的索引值。一旦指定索引的Buffer被提交给了音频解码器,直到再一次收到{@link AVCodecOnAsyncNeedInputData} + * @brief 将填充好数据的输入Buffer提交给音频解码器。{@link AVCodecOnNeedInputData}回调会报告可用的 + * 输入Buffer及对应的索引值。一旦指定索引的Buffer被提交给了音频解码器,直到再一次收到{@link AVCodecOnNeedInputData} * 回调报告相同索引的Buffer可用前,该Buffer都不可以再次被访问。另外,对于部分解码器,要求在最开始给解码器输入 * Codec-Specific-Data,用以初始化解码器的解码过程。 * @syscap SystemCapability.Multimedia.Media.AudioDecoder @@ -671,13 +670,13 @@ AVErrCode OHAudioEncoder_Destroy(AVCodec *codec); * @brief 设置异步回调函数,使得你的应用能够响应音频编码器产生的事件,该接口被调用必须是在Prepare被调用前 * @syscap SystemCapability.Multimedia.Media.AudioEncoder * @param codec 指向AVCodec实例的指针 - * @param callback 一个包含所有回调函数的集合体,参考{@link AVCodecOnAsyncCallback} + * @param callback 一个包含所有回调函数的集合体,参考{@link AVCodecAsyncCallback} * @param userData 用户特定数据 * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} * @since 9 * @version 1.0 */ -AVErrCode OH_AudioEncoder_SetCallback(AVCodec *codec, AVCodecOnAsyncCallback callback, void *userData); +AVErrCode OH_AudioEncoder_SetCallback(AVCodec *codec, AVCodecAsyncCallback callback, void *userData); /** * @brief 配置音频编码器,典型地,需要配置被编码音频轨道的描述信息,该接口被调用必须是在Prepare被调用前。 @@ -764,8 +763,8 @@ AVFormat* OH_AudioEncoder_GetOutputDescription(AVCodec *codec); AVErrCode OH_AudioEncoder_SetParameter(AVCodec *codec, AVFormat *format); /** - * @brief 将填充好数据的输入Buffer提交给音频编码器。{@link AVCodecOnAsyncNeedInputData}回调会报告可用的 - * 输入Buffer及对应的索引值。一旦指定索引的Buffer被提交给了音频编码器,直到再一次收到{@link AVCodecOnAsyncNeedInputData} + * @brief 将填充好数据的输入Buffer提交给音频编码器。{@link AVCodecOnNeedInputData}回调会报告可用的 + * 输入Buffer及对应的索引值。一旦指定索引的Buffer被提交给了音频编码器,直到再一次收到{@link AVCodecOnNeedInputData} * 回调报告相同索引的Buffer可用前,该Buffer都不可以再次被访问。 * @syscap SystemCapability.Multimedia.Media.AudioEncoder * @param codec 指向AVCodec实例的指针 diff --git a/zh-cn/native_sdk/media/media/native_avformat.h b/zh-cn/native_sdk/media/media/native_avformat.h index 6ab979f3..643846cb 100644 --- a/zh-cn/native_sdk/media/media/native_avformat.h +++ b/zh-cn/native_sdk/media/media/native_avformat.h @@ -91,7 +91,7 @@ bool OH_AVFormat_Copy(struct AVFormat *to, struct AVFormat *from); * @since 9 * @version 1.0 */ -bool OH_AVFormat_PutIntValue(struct AVFormat *format, const char *key, int32_t value); +bool OH_AVFormat_SetIntValue(struct AVFormat *format, const char *key, int32_t value); /** * @brief 向AVFormat写入Long数据 @@ -103,7 +103,7 @@ bool OH_AVFormat_PutIntValue(struct AVFormat *format, const char *key, int32_t v * @since 9 * @version 1.0 */ -bool OH_AVFormat_PutLongValue(struct AVFormat *format, const char *key, int64_t value); +bool OH_AVFormat_SetLongValue(struct AVFormat *format, const char *key, int64_t value); /** * @brief 向AVFormat写入Float数据 @@ -115,7 +115,7 @@ bool OH_AVFormat_PutLongValue(struct AVFormat *format, const char *key, int64_t * @since 9 * @version 1.0 */ -bool OH_AVFormat_PutFloatValue(struct AVFormat *format, const char *key, float value); +bool OH_AVFormat_SetFloatValue(struct AVFormat *format, const char *key, float value); /** * @brief 向AVFormat写入Double数据 @@ -127,7 +127,7 @@ bool OH_AVFormat_PutFloatValue(struct AVFormat *format, const char *key, float v * @since 9 * @version 1.0 */ -bool OH_AVFormat_PutDoubleValue(struct AVFormat *format, const char *key, double value); +bool OH_AVFormat_SetDoubleValue(struct AVFormat *format, const char *key, double value); /** * @brief 向AVFormat写入String数据 @@ -139,7 +139,7 @@ bool OH_AVFormat_PutDoubleValue(struct AVFormat *format, const char *key, double * @since 9 * @version 1.0 */ -bool OH_AVFormat_PutStringValue(struct AVFormat *format, const char *key, const char *value); +bool OH_AVFormat_SetStringValue(struct AVFormat *format, const char *key, const char *value); /** * @brief 向AVFormat写入一块指定长度的数据 @@ -152,7 +152,7 @@ bool OH_AVFormat_PutStringValue(struct AVFormat *format, const char *key, const * @since 9 * @version 1.0 */ -bool OH_AVFormat_PutBuffer(struct AVFormat *format, const char *key, const uint8_t *addr, size_t size); +bool OH_AVFormat_SetBuffer(struct AVFormat *format, const char *key, const uint8_t *addr, size_t size); /** * @brief 从AVFormat读取Int数据 -- Gitee From 865c1635420722cdf07a2fd69687a5fd64df74dc Mon Sep 17 00:00:00 2001 From: lin-jianwu Date: Wed, 13 Jul 2022 15:26:58 +0800 Subject: [PATCH 13/14] update api name Signed-off-by: lin-jianwu --- zh-cn/native_sdk/media/media/native_avcodec.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zh-cn/native_sdk/media/media/native_avcodec.h b/zh-cn/native_sdk/media/media/native_avcodec.h index 6f5a764a..31156701 100644 --- a/zh-cn/native_sdk/media/media/native_avcodec.h +++ b/zh-cn/native_sdk/media/media/native_avcodec.h @@ -138,7 +138,7 @@ typedef struct AVCodecAsyncCallback { AVCodecOnError onError; AVCodecOnStreamChanged onStreamChanged; AVCodecOnNeedInputData onNeedInputData; - AVCodecOnNewOutputData onNeedInputData; + AVCodecOnNewOutputData onNeedOutputData; } AVCodecAsyncCallback; /** -- Gitee From 0153e749fadef2485982e603448aac11f6545320 Mon Sep 17 00:00:00 2001 From: lin-jianwu Date: Thu, 14 Jul 2022 17:34:15 +0800 Subject: [PATCH 14/14] update file Signed-off-by: lin-jianwu --- zh-cn/native_sdk/media/media/native_avcodec.h | 794 ------------------ .../media/media/native_avcodec_audiodecoder.h | 189 +++++ .../media/media/native_avcodec_audioencoder.h | 185 ++++ .../media/media/native_avcodec_base.h | 148 ++++ .../media/media/native_avcodec_videodecoder.h | 211 +++++ .../media/media/native_avcodec_videoencoder.h | 194 +++++ 6 files changed, 927 insertions(+), 794 deletions(-) delete mode 100644 zh-cn/native_sdk/media/media/native_avcodec.h create mode 100644 zh-cn/native_sdk/media/media/native_avcodec_audiodecoder.h create mode 100644 zh-cn/native_sdk/media/media/native_avcodec_audioencoder.h create mode 100644 zh-cn/native_sdk/media/media/native_avcodec_base.h create mode 100644 zh-cn/native_sdk/media/media/native_avcodec_videodecoder.h create mode 100644 zh-cn/native_sdk/media/media/native_avcodec_videoencoder.h diff --git a/zh-cn/native_sdk/media/media/native_avcodec.h b/zh-cn/native_sdk/media/media/native_avcodec.h deleted file mode 100644 index 31156701..00000000 --- a/zh-cn/native_sdk/media/media/native_avcodec.h +++ /dev/null @@ -1,794 +0,0 @@ -/* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef NATIVE_AVCODEC_H -#define NATIVE_AVCODEC_H - -#include -#include -#include "native_averrors.h" -#include "native_avformat.h" -#include "native_avmemory.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct NativeWindow NativeWindow; -typedef struct AVCodec AVCodec; - -/** - * @brief 枚举音视频编解码的MIME类型 - * @syscap SystemCapability.Multimedia.Media.CodecBase - * @since 9 - * @version 1.0 - */ -extern const char* AVCODEC_MIME_TYPE_VIDEO_AVC; -extern const char* AVCODEC_MIME_TYPE_AUDIO_AAC; - -/** - * @brief 枚举AVCodec的Buffer标记的类别 - * @syscap SystemCapability.Multimedia.Media.CodecBase - * @since 9 - * @version 1.0 - */ -typedef enum AVCodecBufferFlags { - AVCODEC_BUFFER_FLAGS_NONE = 0, - /* 表明该Buffer是End-of-Stream帧 */ - AVCODEC_BUFFER_FLAGS_EOS = 1 << 0, - /* 表明该Buffer内包含关键帧 */ - AVCODEC_BUFFER_FLAGS_SYNC_FRAME = 1 << 1, - /* 表明该Buffer内包含的数据仅仅为一帧的一部分 */ - AVCODEC_BUFFER_FLAGS_INCOMPLETE_FRAME = 1 << 2, - /* 表明该Buffer包含Codec-Specific-Data */ - AVCODEC_BUFFER_FLAGS_CODEC_DATA = 1 << 3, -} AVCodecBufferFlags; - -/** - * @brief 定义AVCodec的Buffer描述信息 - * @syscap SystemCapability.Multimedia.Media.CodecBase - * @since 9 - * @version 1.0 - */ -typedef struct AVCodecBufferAttr { - /* 以微秒为单位表示的该Buffer的Presentation时间戳 */ - int64_t pts; - /* 以字节为单位表示的该Buffer内所包含数据的大小 */ - int32_t size; - /* 有效数据在该Buffer内的起始偏移量 */ - int32_t offset; - /* 该Buffer具有的标记, 也是多个{@link AVCodecBufferFlags}的组合. */ - uint32_t flags; -} AVCodecBufferAttr; - -/** - * @brief 当AVCodec实例运行发生错误时,该函数指针会被调用以报告具体错误信息。 - * @syscap SystemCapability.Multimedia.Media.CodecBase - * @param codec AVCodec实例 - * @param errorCode 具体错误码 - * @param userData 用户特定数据 - * @since 9 - * @version 1.0 - */ -typedef void (* AVCodecOnError)(AVCodec *codec, int32_t errorCode, void *userData); - -/** - * @brief 当输出流发生变化时,该函数指针会被调用以报告新的流描述信息. - * 需要注意的时,AVFormat指针的生命周期仅维持在该函数指针被调用时上有效,禁止在调用结束后继续访问。 - * @syscap SystemCapability.Multimedia.Media.CodecBase - * @param codec AVCodec实例 - * @param format 新的输出流描述信息 - * @param userData 用户特定数据 - * @since 9 - * @version 1.0 - */ -typedef void (* AVCodecOnStreamChanged)(AVCodec *codec, AVFormat *format, void *userData); - -/** - * @brief 当AVCodec运行过程中需要新的输入数据时,该函数指针会被调用,并携带一块可用的Buffer以供填入新的输入数据。 - * @syscap SystemCapability.Multimedia.Media.CodecBase - * @param codec AVCodec实例 - * @param index 新的可用的输入Buffer对应的索引. - * @param data 新的可用的输入Buffer. - * @param userData 用户特定数据 - * @since 9 - * @version 1.0 - */ -typedef void (* AVCodecOnNeedInputData)(AVCodec *codec, uint32_t index, AVMemory *data, void *userData); - -/** - * @brief 当AVCodec运行过程中产生了新的输出数据时,该函数指针会被调用,并携带一块包含新输出数据的Buffer. - * 需要注意的是,AVCodecBufferAttr指针的生命周期仅维持在该函数指针被调用时有效,禁止调用结束后继续访问. - * @syscap SystemCapability.Multimedia.Media.CodecBase - * @param codec AVCodec实例 - * @param index 新的输出Buffer对应的索引. - * @param data 包含新的输出数据的Buffer - * @param attr 新的输出Buffer的描述信息,具体参考{@link AVCodecBufferAttr} - * @param userData specified data - * @since 9 - * @version 1.0 - */ -typedef void (* AVCodecOnNewOutputData)(AVCodec *codec, uint32_t index, AVMemory *data, - AVCodecBufferAttr *attr, void *userData); - -/** - * @brief AVCodec所有的异步回调函数指针集合。注册一个该结构体实例给AVCodec实例,并处理通过该回调报告 - * 的信息,以确保AVCodec正常运转。 - * @syscap SystemCapability.Multimedia.Media.CodecBase - * @param onError 监听AVCodec运行错误,参考{@link AVCodecOnError} - * @param onStreamChanged 监听编解码流信息,参考{@link AVCodecOnStreamChanged} - * @param onNeedInputData 监听编解码需要输入数据,参考{@link AVCodecOnNeedInputData} - * @param onNeedInputData 监听编解码产生输出数据,参考{@link onNeedInputData} - * @since 9 - * @version 1.0 - */ -typedef struct AVCodecAsyncCallback { - AVCodecOnError onError; - AVCodecOnStreamChanged onStreamChanged; - AVCodecOnNeedInputData onNeedInputData; - AVCodecOnNewOutputData onNeedOutputData; -} AVCodecAsyncCallback; - -/** - * @brief 通过mime类型创建一个视频解码器实例,大多数情况下推荐使用该接口。 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param mime mime类型描述字符串,参考{@link AVCODEC_MIME_TYPE} - * @return 返回一个指向AVCodec实例的指针 - * @since 9 - * @version 1.0 - */ -AVCodec* OH_VideoDecoder_CreateByMime(const char *mime); - -/** - * @brief 通过视频解码器名称创建一个视频解码器实例,使用这个接口的前提是必须清楚解码器准确的名称。 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param name 视频解码器名称 - * @return 返回一个指向AVCodec实例的指针 - * @since 9 - * @version 1.0 - */ -AVCodec* OH_VideoDecoder_CreateByName(const char *name); - -/** - * @brief 清空解码器内部资源,并销毁解码器实例 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param codec 指向AVCodec实例的指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_VideoDecoder_Destroy(AVCodec *codec); - -/** - * @brief 设置异步回调函数,使得你的应用能够响应视频解码器产生的事件,该接口被调用必须是在Prepare被调用前 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param codec 指向AVCodec实例的指针 - * @param callback 一个包含所有回调函数的集合体,参考{@link AVCodecAsyncCallback} - * @param userData 用户特定数据 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_VideoDecoder_SetCallback(AVCodec *codec, AVCodecAsyncCallback callback, void *userData); - -/** - * @brief 指定输出Surface,以提供视频解码输出, 该接口被调用必须是在Prepare被调用前 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param codec 指向AVCodec实例的指针 - * @param window 指向一个NativeWindow实例的指针,具体参考{@link NativeWindow} - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_VideoDecoder_SetSurface(AVCodec *codec, NativeWindow *window); - -/** - * @brief 配置视频解码器,典型地,需要配置被解码视频轨道的描述信息,这些信息能够从容器中提取出来, - * 该接口被调用必须是在Prepare被调用前。 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param codec 指向AVCodec实例的指针 - * @param format 指向AVFormat的指针,用以给出待解码视频轨道的描述信息 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_VideoDecoder_Configure(AVCodec *codec, AVFormat *format); - -/** - * @brief 准备解码器内部资源,调用该接口前必须先调用Configure接口。 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param codec 指向AVCodec实例的指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_VideoDecoder_Prepare(AVCodec *codec); - -/** - * @brief 启动解码器,该接口必须在已经Prepare成功后调用。在被启动成功后,解码器将开始报告NeedInputData事件。 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param codec 指向AVCodec实例的指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_VideoDecoder_Start(AVCodec *codec); - -/** - * @brief 停止解码器。在停止后可通过Start重新进入Started状态,但需要注意的是,若先前给解码器输入过 - * Codec-Specific-Data,则需要重新输入。 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param codec 指向AVCodec实例的指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_VideoDecoder_Stop(AVCodec *codec); - -/** - * @brief 清空解码器内部缓存的输入输出数据。在该接口被调用后,所有先前通过异步回调报告的Buffer的索引都将 - * 失效,确保不要再访问这些索引对应的Buffers。 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param codec 指向AVCodec实例的指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_VideoDecoder_Flush(AVCodec *codec); - -/** - * @brief 重置解码器。如需继续解码工作,需要重新调用Configure接口以配置该解码器实例。 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param codec 指向AVCodec实例的指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_VideoDecoder_Reset(AVCodec *codec); - -/** - * @brief 获取该解码器输出数据的描述信息,具体参考{@link AVFormat}. 需要注意的是,返回值所指向 - * 的AVFormat实例的生命周期将会再下一次调用该接口时或者该AVCodec实例被销毁时失效。 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param codec 指向AVCodec实例的指针 - * @return 返回AVFormat实例的指针 - * @since 9 - * @version 1.0 - */ -AVFormat* OH_VideoDecoder_GetOutputDescription(AVCodec *codec); - -/** - * @brief 向解码器设置动态参数,注意:该接口仅能在解码器被启动后调用,同时错误的参数设置,可能会导致解码失败 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param codec 指向AVCodec实例的指针 - * @param format 指向AVFormat实例的指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_VideoDecoder_SetParameter(AVCodec *codec, AVFormat *format); - -/** - * @brief 将填充好数据的输入Buffer提交给视频解码器。{@link AVCodecOnNeedInputData}回调会报告可用的 - * 输入Buffer及对应的索引值。一旦指定索引的Buffer被提交给了视频解码器,直到再一次收到{@link AVCodecOnNeedInputData} - * 回调报告相同索引的Buffer可用前,该Buffer都不可以再次被访问。另外,对于部分解码器,要求在最开始给解码器输入 - * Codec-Specific-Data,用以初始化解码器的解码过程,例如H264格式的PPS/SPS数据。 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param codec 指向AVCodec实例的指针 - * @param index 输入Buffer对应的索引值 - * @param attr 描述该Buffer内所包含数据的信息 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_VideoDecoder_PushInputData(AVCodec *codec, uint32_t index, AVCodecBufferAttr attr); - -/** - * @brief 将处理结束的输出Buffer交还给解码器,并通知解码器完成将该Buffer内包含的解码后的数据在输出Surface上渲染。 - * 如果先前未配置输出Surface,调用该接口仅仅将指定索引对应的输出Buffer交还给解码器。 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param codec 指向AVCodec实例的指针 - * @param index 输出Buffer对应的索引值 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_VideoDecoder_RenderOutputData(AVCodec *codec, uint32_t index); - -/** - * @brief 将处理结束的输出Buffer交还给解码器。 - * @syscap SystemCapability.Multimedia.Media.VideoDecoder - * @param codec 指向AVCodec实例的指针 - * @param index 输出Buffer对应的索引值 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_VideoDecoder_FreeOutputData(AVCodec *codec, uint32_t index); - -// Video Encoder -/** - * @brief 通过mime类型创建一个视频编码器实例,大多数情况下推荐使用该接口。 - * @syscap SystemCapability.Multimedia.Media.VideoEncoder - * @param mime mime类型描述字符串,参考{@link AVCODEC_MIME_TYPE} - * @return 返回一个指向AVCodec实例的指针 - * @since 9 - * @version 1.0 - */ -AVCodec* OH_VideoEncoder_CreateByMime(const char *mime); - -/** - * @brief 通过视频编码器名称创建一个视频编码器实例,使用这个接口的前提是必须清楚编码器准确的名称。 - * @syscap SystemCapability.Multimedia.Media.VideoEncoder - * @param name 视频编码器名称 - * @return 返回一个指向AVCodec实例的指针 - * @since 9 - * @version 1.0 - */ -AVCodec* OH_VideoEncoder_CreateByName(const char *name); - -/** - * @brief 清空编码器内部资源,并销毁编码器实例 - * @syscap SystemCapability.Multimedia.Media.VideoEncoder - * @param codec 指向AVCodec实例的指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_VideoEncoder_Destroy(AVCodec *codec); - -/** - * @brief 设置异步回调函数,使得你的应用能够响应视频编码器产生的事件,该接口被调用必须是在Prepare被调用前 - * @syscap SystemCapability.Multimedia.Media.VideoEncoder - * @param codec 指向AVCodec实例的指针 - * @param callback 一个包含所有回调函数的集合体,参考{@link AVCodecAsyncCallback} - * @param userData 用户特定数据 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_VideoEncoder_SetCallback(AVCodec *codec, AVCodecAsyncCallback callback, void *userData); - -/** - * @brief 配置视频编码器,典型地,需要配置被编码视频轨道的描述信息,该接口被调用必须是在Prepare被调用前。 - * @syscap SystemCapability.Multimedia.Media.VideoEncoder - * @param codec 指向AVCodec实例的指针 - * @param format 指向AVFormat的指针,用以给出待编码视频轨道的描述信息 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_VideoEncoder_Configure(AVCodec *codec, AVFormat *format); - -/** - * @brief 准备编码器内部资源,调用该接口前必须先调用Configure接口。 - * @syscap SystemCapability.Multimedia.Media.VideoEncoder - * @param codec 指向AVCodec实例的指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_VideoEncoder_Prepare(AVCodec *codec); - -/** - * @brief 启动编码器,该接口必须在已经Prepare成功后调用。在被启动成功后,编码器将开始报告NeedInputData事件。 - * @syscap SystemCapability.Multimedia.Media.VideoEncoder - * @param codec 指向AVCodec实例的指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_VideoEncoder_Start(AVCodec *codec); - -/** - * @brief 停止编码器。在停止后可通过Start重新进入Started状态。 - * @syscap SystemCapability.Multimedia.Media.VideoEncoder - * @param codec 指向AVCodec实例的指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_VideoEncoder_Stop(AVCodec *codec); - -/** - * @brief 清空编码器内部缓存的输入输出数据。在该接口被调用后,所有先前通过异步回调报告的Buffer的索引都将 - * 失效,确保不要再访问这些索引对应的Buffers。 - * @syscap SystemCapability.Multimedia.Media.VideoEncoder - * @param codec 指向AVCodec实例的指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_VideoEncoder_Flush(AVCodec *codec); - -/** - * @brief 重置编码器。如需继续编码工作,需要重新调用Configure接口以配置该编码器实例。 - * @syscap SystemCapability.Multimedia.Media.VideoEncoder - * @param codec 指向AVCodec实例的指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_VideoEncoder_Reset(AVCodec *codec); - -/** - * @brief 获取该编码器输出数据的描述信息,具体参考{@link AVFormat}. 需要注意的是,返回值所指向 - * 的AVFormat实例的生命周期将会再下一次调用该接口时或者该AVCodec实例被销毁时失效。 - * @syscap SystemCapability.Multimedia.Media.VideoEncoder - * @param codec 指向AVCodec实例的指针 - * @return 返回AVFormat实例的指针 - * @since 9 - * @version 1.0 - */ -AVFormat* OH_VideoEncoder_GetOutputDescription(AVCodec *codec); - -/** - * @brief 向编码器设置动态参数,注意:该接口仅能在编码器被启动后调用,同时错误的参数设置,可能会导致编码失败 - * @syscap SystemCapability.Multimedia.Media.VideoEncoder - * @param codec 指向AVCodec实例的指针 - * @param format AVFormat句柄指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_VideoEncoder_SetParameter(AVCodec *codec, AVFormat *format); - - -/** - * @brief 从视频编码器获取输入Surface, 该接口被调用必须是在Prepare被调用前。 - * @syscap SystemCapability.Multimedia.Media.VideoEncoder - * @param codec 指向AVCodec实例的指针 - * @param window 指向一个NativeWindow实例的指针,具体参考{@link NativeWindow} - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_VideoEncoder_GetSurface(AVCodec *codec, NativeWindow **window); - -/** - * @brief 将处理结束的输出Buffer交还给编码器。 - * @syscap SystemCapability.Multimedia.Media.VideoEncoder - * @param codec 指向AVCodec实例的指针 - * @param index 输出Buffer对应的索引值 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_VideoEncoder_FreeOutputData(AVCodec *codec, uint32_t index); - -/** - * @brief 通知视频编码器输入码流已结束。surface模式推荐使用该接口通知编码器码流结束, - * bytebuffer模式推荐使用OH_AVCODEC_VideoEncoderPushInputData接口通知编码器码流结束。 - * @syscap SystemCapability.Multimedia.Media.VideoEncoder - * @param codec 指向AVCodec实例的指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_VideoEncoder_NotifyEndOfStream(AVCodec *codec); - -// Audio Decoder -/** - * @brief 通过mime类型创建一个音频解码器实例,大多数情况下推荐使用该接口。 - * @syscap SystemCapability.Multimedia.Media.AudioDecoder - * @param mime mime类型描述字符串,参考{@link AVCODEC_MIME_TYPE} - * @return 返回一个指向AVCodec实例的指针 - * @since 9 - * @version 1.0 - */ -AVCodec* OH_AudioDecoder_CreateByMime(const char *mime); - -/** - * @brief 通过音频解码器名称创建一个音频解码器实例,使用这个接口的前提是必须清楚解码器准确的名称。 - * @syscap SystemCapability.Multimedia.Media.AudioDecoder - * @param name 音频解码器名称 - * @return 返回一个指向AVCodec实例的指针 - * @since 9 - * @version 1.0 - */ -AVCodec* OH_AudioDecoder_CreateByName(const char *name); - -/** - * @brief 清空解码器内部资源,并销毁解码器实例 - * @syscap SystemCapability.Multimedia.Media.AudioDecoder - * @param codec 指向AVCodec实例的指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AudioDecoder_Destroy(AVCodec *codec); - -/** - * @brief 设置异步回调函数,使得你的应用能够响应音频解码器产生的事件,该接口被调用必须是在Prepare被调用前 - * @syscap SystemCapability.Multimedia.Media.AudioDecoder - * @param codec 指向AVCodec实例的指针 - * @param callback 一个包含所有回调函数的集合体,参考{@link AVCodecAsyncCallback} - * @param userData 用户特定数据 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AudioDecoder_SetCallback(AVCodec *codec, AVCodecAsyncCallback callback, void *userData); - -/** - * @brief 配置音频解码器,典型地,需要配置被解码音频轨道的描述信息,这些信息能够从容器中提取出来, - * 该接口被调用必须是在Prepare被调用前。 - * @syscap SystemCapability.Multimedia.Media.AudioDecoder - * @param codec 指向AVCodec实例的指针 - * @param format 指向AVFormat的指针,用以给出待解码音频轨道的描述信息 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AudioDecoder_Configure(AVCodec *codec, AVFormat *format); - -/** - * @brief 准备解码器内部资源,调用该接口前必须先调用Configure接口。 - * @syscap SystemCapability.Multimedia.Media.AudioDecoder - * @param codec 指向AVCodec实例的指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AudioDecoder_Prepare(AVCodec *codec); - -/** - * @brief 启动解码器,该接口必须在已经Prepare成功后调用。在被启动成功后,解码器将开始报告NeedInputData事件。 - * @syscap SystemCapability.Multimedia.Media.AudioDecoder - * @param codec 指向AVCodec实例的指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AudioDecoder_Start(AVCodec *codec); - -/** - * @brief 停止解码器。在停止后可通过Start重新进入Started状态,但需要注意的是,若先前给解码器输入过 - * Codec-Specific-Data,则需要重新输入。 - * @syscap SystemCapability.Multimedia.Media.AudioDecoder - * @param codec 指向AVCodec实例的指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AudioDecoder_Stop(AVCodec *codec); - -/** - * @brief 清空解码器内部缓存的输入输出数据。在该接口被调用后,所有先前通过异步回调报告的Buffer的索引都将 - * 失效,确保不要再访问这些索引对应的Buffers。 - * @syscap SystemCapability.Multimedia.Media.AudioDecoder - * @param codec 指向AVCodec实例的指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AudioDecoder_Flush(AVCodec *codec); - -/** - * @brief 重置解码器。如需继续解码工作,需要重新调用Configure接口以配置该解码器实例。 - * @syscap SystemCapability.Multimedia.Media.AudioDecoder - * @param codec 指向AVCodec实例的指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ - -AVErrCode OH_AudioDecoder_Reset(AVCodec *codec); - -/** - * @brief 获取该解码器输出数据的描述信息,具体参考{@link AVFormat}. 需要注意的是,返回值所指向 - * 的AVFormat实例的生命周期将会再下一次调用该接口时或者该AVCodec实例被销毁时失效。 - * @syscap SystemCapability.Multimedia.Media.AudioDecoder - * @param codec 指向AVCodec实例的指针 - * @return 返回AVFormat句柄指针,生命周期随下一次GetOutputMediaDescription刷新,或伴随AVCodec销毁; - * @since 9 - * @version 1.0 - */ -AVFormat* OH_AudioDecoder_GetOutputDescription(AVCodec *codec); - -/** - * @brief 向解码器设置动态参数,注意:该接口仅能在解码器被启动后调用,同时错误的参数设置,可能会导致解码失败 - * @syscap SystemCapability.Multimedia.Media.AudioDecoder - * @param codec 指向AVCodec实例的指针 - * @param format AVFormat句柄指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AudioDecoder_SetParameter(AVCodec *codec, AVFormat *format); - -/** - * @brief 将填充好数据的输入Buffer提交给音频解码器。{@link AVCodecOnNeedInputData}回调会报告可用的 - * 输入Buffer及对应的索引值。一旦指定索引的Buffer被提交给了音频解码器,直到再一次收到{@link AVCodecOnNeedInputData} - * 回调报告相同索引的Buffer可用前,该Buffer都不可以再次被访问。另外,对于部分解码器,要求在最开始给解码器输入 - * Codec-Specific-Data,用以初始化解码器的解码过程。 - * @syscap SystemCapability.Multimedia.Media.AudioDecoder - * @param codec 指向AVCodec实例的指针 - * @param index 输入Buffer对应的索引值 - * @param attr 描述该Buffer内所包含数据的信息 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AudioDecoder_PushInputData(AVCodec *codec, uint32_t index, AVCodecBufferAttr attr); - -/** - * @brief 将处理结束的输出Buffer交还给解码器。 - * @syscap SystemCapability.Multimedia.Media.AudioDecoder - * @param codec 指向AVCodec实例的指针 - * @param index 输出Buffer对应的索引值 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AudioDecoder_FreeOutputData(AVCodec *codec, uint32_t index); - -// Audio Encoder -/** - * @brief 通过mime类型创建一个音频编码器实例,大多数情况下推荐使用该接口。 - * @syscap SystemCapability.Multimedia.Media.AudioEncoder - * @param mime mime类型描述字符串,参考{@link AVCODEC_MIME_TYPE} - * @return 返回一个指向AVCodec实例的指针 - * @since 9 - * @version 1.0 - */ -AVCodec* OH_AudioEncoder_CreateByMime(const char *mime); - -/** - * @brief 通过音频编码器名称创建一个音频编码器实例,使用这个接口的前提是必须清楚编码器准确的名称。 - * @syscap SystemCapability.Multimedia.Media.AudioEncoder - * @param name 音频编码器名称 - * @return 返回一个指向AVCodec实例的指针 - * @since 9 - * @version 1.0 - */ -AVCodec* OH_AudioEncoder_CreateByName(const char *name); - -/** - * @brief 清空编码器内部资源,并销毁编码器实例 - * @syscap SystemCapability.Multimedia.Media.AudioEncoder - * @param codec 指向AVCodec实例的指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OHAudioEncoder_Destroy(AVCodec *codec); - -/** - * @brief 设置异步回调函数,使得你的应用能够响应音频编码器产生的事件,该接口被调用必须是在Prepare被调用前 - * @syscap SystemCapability.Multimedia.Media.AudioEncoder - * @param codec 指向AVCodec实例的指针 - * @param callback 一个包含所有回调函数的集合体,参考{@link AVCodecAsyncCallback} - * @param userData 用户特定数据 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AudioEncoder_SetCallback(AVCodec *codec, AVCodecAsyncCallback callback, void *userData); - -/** - * @brief 配置音频编码器,典型地,需要配置被编码音频轨道的描述信息,该接口被调用必须是在Prepare被调用前。 - * @syscap SystemCapability.Multimedia.Media.AudioEncoder - * @param codec 指向AVCodec实例的指针 - * @param format AVFormat句柄指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AudioEncoder_Configure(AVCodec *codec, AVFormat *format); - -/** - * @brief 准备编码器内部资源,调用该接口前必须先调用Configure接口。 - * @syscap SystemCapability.Multimedia.Media.AudioEncoder - * @param codec 指向AVCodec实例的指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AudioEncoder_Prepare(AVCodec *codec); - -/** - * @brief 启动编码器,该接口必须在已经Prepare成功后调用。在被启动成功后,编码器将开始报告NeedInputData事件。 - * @syscap SystemCapability.Multimedia.Media.AudioEncoder - * @param codec 指向AVCodec实例的指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AudioEncoder_Start(AVCodec *codec); - -/** - * @brief 停止编码器。在停止后可通过Start重新进入Started状态。 - * @syscap SystemCapability.Multimedia.Media.AudioEncoder - * @param codec 指向AVCodec实例的指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AudioEncoder_Stop(AVCodec *codec); - -/** - * @brief 清空编码器内部缓存的输入输出数据。在该接口被调用后,所有先前通过异步回调报告的Buffer的索引都将 - * 失效,确保不要再访问这些索引对应的Buffers。 - * @syscap SystemCapability.Multimedia.Media.AudioEncoder - * @param codec 指向AVCodec实例的指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AudioEncoder_Flush(AVCodec *codec); - -/** - * @brief 重置编码器。如需继续编码工作,需要重新调用Configure接口以配置该编码器实例。 - * @syscap SystemCapability.Multimedia.Media.AudioEncoder - * @param codec 指向AVCodec实例的指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AudioEncoder_Reset(AVCodec *codec); - -/** - * @brief 获取该编码器输出数据的描述信息,具体参考{@link AVFormat}. 需要注意的是,返回值所指向 - * 的AVFormat实例的生命周期将会再下一次调用该接口时或者该AVCodec实例被销毁时失效。 - * @syscap SystemCapability.Multimedia.Media.AudioEncoder - * @param codec 指向AVCodec实例的指针 - * @return 返回AVFormat句柄指针,生命周期随下一次GetOutputMediaDescription刷新,或伴随AVCodec销毁; - * @since 9 - * @version 1.0 - */ -AVFormat* OH_AudioEncoder_GetOutputDescription(AVCodec *codec); - -/** - * @brief 向编码器设置动态参数,注意:该接口仅能在编码器被启动后调用,同时错误的参数设置,可能会导致编码失败 - * @syscap SystemCapability.Multimedia.Media.AudioEncoder - * @param codec 指向AVCodec实例的指针 - * @param format AVFormat句柄指针 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AudioEncoder_SetParameter(AVCodec *codec, AVFormat *format); - -/** - * @brief 将填充好数据的输入Buffer提交给音频编码器。{@link AVCodecOnNeedInputData}回调会报告可用的 - * 输入Buffer及对应的索引值。一旦指定索引的Buffer被提交给了音频编码器,直到再一次收到{@link AVCodecOnNeedInputData} - * 回调报告相同索引的Buffer可用前,该Buffer都不可以再次被访问。 - * @syscap SystemCapability.Multimedia.Media.AudioEncoder - * @param codec 指向AVCodec实例的指针 - * @param index 输入Buffer对应的索引值 - * @param attr 描述该Buffer内所包含数据的信息 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AudioEncoder_PushInputData(AVCodec *codec, uint32_t index, AVCodecBufferAttr attr); - -/** - * @brief 将处理结束的输出Buffer交还给编码器。 - * @syscap SystemCapability.Multimedia.Media.AudioEncoder - * @param codec 指向AVCodec实例的指针 - * @param index 输出Buffer对应的索引值 - * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} - * @since 9 - * @version 1.0 - */ -AVErrCode OH_AudioEncoder_FreeOutputData(AVCodec *codec, uint32_t index); - -#ifdef __cplusplus -} -#endif - -#endif // NATIVE_AVCODEC_H \ No newline at end of file diff --git a/zh-cn/native_sdk/media/media/native_avcodec_audiodecoder.h b/zh-cn/native_sdk/media/media/native_avcodec_audiodecoder.h new file mode 100644 index 00000000..6e4ed9b1 --- /dev/null +++ b/zh-cn/native_sdk/media/media/native_avcodec_audiodecoder.h @@ -0,0 +1,189 @@ +/* + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NATIVE_AVCODEC_AUDIODECODER_H +#define NATIVE_AVCODEC_AUDIODECODER_H + +#include +#include +#include "native_averrors.h" +#include "native_avformat.h" +#include "native_avmemory.h" +#include "native_avcodec_base.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief 通过mime类型创建一个音频解码器实例,大多数情况下推荐使用该接口。 + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param mime mime类型描述字符串,参考{@link AVCODEC_MIME_TYPE} + * @return 返回一个指向AVCodec实例的指针 + * @since 9 + * @version 1.0 + */ +AVCodec* OH_AudioDecoder_CreateByMime(const char *mime); + +/** + * @brief 通过音频解码器名称创建一个音频解码器实例,使用这个接口的前提是必须清楚解码器准确的名称。 + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param name 音频解码器名称 + * @return 返回一个指向AVCodec实例的指针 + * @since 9 + * @version 1.0 + */ +AVCodec* OH_AudioDecoder_CreateByName(const char *name); + +/** + * @brief 清空解码器内部资源,并销毁解码器实例 + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioDecoder_Destroy(AVCodec *codec); + +/** + * @brief 设置异步回调函数,使得你的应用能够响应音频解码器产生的事件,该接口被调用必须是在Prepare被调用前 + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec 指向AVCodec实例的指针 + * @param callback 一个包含所有回调函数的集合体,参考{@link AVCodecAsyncCallback} + * @param userData 用户特定数据 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioDecoder_SetCallback(AVCodec *codec, AVCodecAsyncCallback callback, void *userData); + +/** + * @brief 配置音频解码器,典型地,需要配置被解码音频轨道的描述信息,这些信息能够从容器中提取出来, + * 该接口被调用必须是在Prepare被调用前。 + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec 指向AVCodec实例的指针 + * @param format 指向AVFormat的指针,用以给出待解码音频轨道的描述信息 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioDecoder_Configure(AVCodec *codec, AVFormat *format); + +/** + * @brief 准备解码器内部资源,调用该接口前必须先调用Configure接口。 + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioDecoder_Prepare(AVCodec *codec); + +/** + * @brief 启动解码器,该接口必须在已经Prepare成功后调用。在被启动成功后,解码器将开始报告NeedInputData事件。 + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioDecoder_Start(AVCodec *codec); + +/** + * @brief 停止解码器。在停止后可通过Start重新进入Started状态,但需要注意的是,若先前给解码器输入过 + * Codec-Specific-Data,则需要重新输入。 + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioDecoder_Stop(AVCodec *codec); + +/** + * @brief 清空解码器内部缓存的输入输出数据。在该接口被调用后,所有先前通过异步回调报告的Buffer的索引都将 + * 失效,确保不要再访问这些索引对应的Buffers。 + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioDecoder_Flush(AVCodec *codec); + +/** + * @brief 重置解码器。如需继续解码工作,需要重新调用Configure接口以配置该解码器实例。 + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ + +AVErrCode OH_AudioDecoder_Reset(AVCodec *codec); + +/** + * @brief 获取该解码器输出数据的描述信息,具体参考{@link AVFormat}. 需要注意的是,返回值所指向 + * 的AVFormat实例的生命周期将会再下一次调用该接口时或者该AVCodec实例被销毁时失效。 + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec 指向AVCodec实例的指针 + * @return 返回AVFormat句柄指针,生命周期随下一次GetOutputMediaDescription刷新,或伴随AVCodec销毁; + * @since 9 + * @version 1.0 + */ +AVFormat* OH_AudioDecoder_GetOutputDescription(AVCodec *codec); + +/** + * @brief 向解码器设置动态参数,注意:该接口仅能在解码器被启动后调用,同时错误的参数设置,可能会导致解码失败 + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec 指向AVCodec实例的指针 + * @param format AVFormat句柄指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioDecoder_SetParameter(AVCodec *codec, AVFormat *format); + +/** + * @brief 将填充好数据的输入Buffer提交给音频解码器。{@link AVCodecOnNeedInputData}回调会报告可用的 + * 输入Buffer及对应的索引值。一旦指定索引的Buffer被提交给了音频解码器,直到再一次收到{@link AVCodecOnNeedInputData} + * 回调报告相同索引的Buffer可用前,该Buffer都不可以再次被访问。另外,对于部分解码器,要求在最开始给解码器输入 + * Codec-Specific-Data,用以初始化解码器的解码过程。 + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec 指向AVCodec实例的指针 + * @param index 输入Buffer对应的索引值 + * @param attr 描述该Buffer内所包含数据的信息 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioDecoder_PushInputData(AVCodec *codec, uint32_t index, AVCodecBufferAttr attr); + +/** + * @brief 将处理结束的输出Buffer交还给解码器。 + * @syscap SystemCapability.Multimedia.Media.AudioDecoder + * @param codec 指向AVCodec实例的指针 + * @param index 输出Buffer对应的索引值 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioDecoder_FreeOutputData(AVCodec *codec, uint32_t index); + +#ifdef __cplusplus +} +#endif + +#endif // NATIVE_AVCODEC_AUDIODECODER_H \ No newline at end of file diff --git a/zh-cn/native_sdk/media/media/native_avcodec_audioencoder.h b/zh-cn/native_sdk/media/media/native_avcodec_audioencoder.h new file mode 100644 index 00000000..2923804c --- /dev/null +++ b/zh-cn/native_sdk/media/media/native_avcodec_audioencoder.h @@ -0,0 +1,185 @@ +/* + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NATIVE_AVCODEC_AUDIOENCODER_H +#define NATIVE_AVCODEC_AUDIOENCODER_H + +#include +#include +#include "native_averrors.h" +#include "native_avformat.h" +#include "native_avmemory.h" +#include "native_avcodec_base.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief 通过mime类型创建一个音频编码器实例,大多数情况下推荐使用该接口。 + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param mime mime类型描述字符串,参考{@link AVCODEC_MIME_TYPE} + * @return 返回一个指向AVCodec实例的指针 + * @since 9 + * @version 1.0 + */ +AVCodec* OH_AudioEncoder_CreateByMime(const char *mime); + +/** + * @brief 通过音频编码器名称创建一个音频编码器实例,使用这个接口的前提是必须清楚编码器准确的名称。 + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param name 音频编码器名称 + * @return 返回一个指向AVCodec实例的指针 + * @since 9 + * @version 1.0 + */ +AVCodec* OH_AudioEncoder_CreateByName(const char *name); + +/** + * @brief 清空编码器内部资源,并销毁编码器实例 + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OHAudioEncoder_Destroy(AVCodec *codec); + +/** + * @brief 设置异步回调函数,使得你的应用能够响应音频编码器产生的事件,该接口被调用必须是在Prepare被调用前 + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec 指向AVCodec实例的指针 + * @param callback 一个包含所有回调函数的集合体,参考{@link AVCodecAsyncCallback} + * @param userData 用户特定数据 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioEncoder_SetCallback(AVCodec *codec, AVCodecAsyncCallback callback, void *userData); + +/** + * @brief 配置音频编码器,典型地,需要配置被编码音频轨道的描述信息,该接口被调用必须是在Prepare被调用前。 + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec 指向AVCodec实例的指针 + * @param format AVFormat句柄指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioEncoder_Configure(AVCodec *codec, AVFormat *format); + +/** + * @brief 准备编码器内部资源,调用该接口前必须先调用Configure接口。 + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioEncoder_Prepare(AVCodec *codec); + +/** + * @brief 启动编码器,该接口必须在已经Prepare成功后调用。在被启动成功后,编码器将开始报告NeedInputData事件。 + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioEncoder_Start(AVCodec *codec); + +/** + * @brief 停止编码器。在停止后可通过Start重新进入Started状态。 + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioEncoder_Stop(AVCodec *codec); + +/** + * @brief 清空编码器内部缓存的输入输出数据。在该接口被调用后,所有先前通过异步回调报告的Buffer的索引都将 + * 失效,确保不要再访问这些索引对应的Buffers。 + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioEncoder_Flush(AVCodec *codec); + +/** + * @brief 重置编码器。如需继续编码工作,需要重新调用Configure接口以配置该编码器实例。 + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioEncoder_Reset(AVCodec *codec); + +/** + * @brief 获取该编码器输出数据的描述信息,具体参考{@link AVFormat}. 需要注意的是,返回值所指向 + * 的AVFormat实例的生命周期将会再下一次调用该接口时或者该AVCodec实例被销毁时失效。 + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec 指向AVCodec实例的指针 + * @return 返回AVFormat句柄指针,生命周期随下一次GetOutputMediaDescription刷新,或伴随AVCodec销毁; + * @since 9 + * @version 1.0 + */ +AVFormat* OH_AudioEncoder_GetOutputDescription(AVCodec *codec); + +/** + * @brief 向编码器设置动态参数,注意:该接口仅能在编码器被启动后调用,同时错误的参数设置,可能会导致编码失败 + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec 指向AVCodec实例的指针 + * @param format AVFormat句柄指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioEncoder_SetParameter(AVCodec *codec, AVFormat *format); + +/** + * @brief 将填充好数据的输入Buffer提交给音频编码器。{@link AVCodecOnNeedInputData}回调会报告可用的 + * 输入Buffer及对应的索引值。一旦指定索引的Buffer被提交给了音频编码器,直到再一次收到{@link AVCodecOnNeedInputData} + * 回调报告相同索引的Buffer可用前,该Buffer都不可以再次被访问。 + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec 指向AVCodec实例的指针 + * @param index 输入Buffer对应的索引值 + * @param attr 描述该Buffer内所包含数据的信息 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioEncoder_PushInputData(AVCodec *codec, uint32_t index, AVCodecBufferAttr attr); + +/** + * @brief 将处理结束的输出Buffer交还给编码器。 + * @syscap SystemCapability.Multimedia.Media.AudioEncoder + * @param codec 指向AVCodec实例的指针 + * @param index 输出Buffer对应的索引值 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_AudioEncoder_FreeOutputData(AVCodec *codec, uint32_t index); + +#ifdef __cplusplus +} +#endif + +#endif // NATIVE_AVCODEC_AUDIOENCODER_H \ No newline at end of file diff --git a/zh-cn/native_sdk/media/media/native_avcodec_base.h b/zh-cn/native_sdk/media/media/native_avcodec_base.h new file mode 100644 index 00000000..70b3667d --- /dev/null +++ b/zh-cn/native_sdk/media/media/native_avcodec_base.h @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NATIVE_AVCODEC_BASE_H +#define NATIVE_AVCODEC_BASE_H + +#include +#include +#include "native_averrors.h" +#include "native_avformat.h" +#include "native_avmemory.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct NativeWindow NativeWindow; +typedef struct AVCodec AVCodec; + +/** + * @brief 枚举音视频编解码的MIME类型 + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 9 + * @version 1.0 + */ +extern const char* AVCODEC_MIME_TYPE_VIDEO_AVC; +extern const char* AVCODEC_MIME_TYPE_AUDIO_AAC; + +/** + * @brief 枚举AVCodec的Buffer标记的类别 + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 9 + * @version 1.0 + */ +typedef enum AVCodecBufferFlags { + AVCODEC_BUFFER_FLAGS_NONE = 0, + /* 表明该Buffer是End-of-Stream帧 */ + AVCODEC_BUFFER_FLAGS_EOS = 1 << 0, + /* 表明该Buffer内包含关键帧 */ + AVCODEC_BUFFER_FLAGS_SYNC_FRAME = 1 << 1, + /* 表明该Buffer内包含的数据仅仅为一帧的一部分 */ + AVCODEC_BUFFER_FLAGS_INCOMPLETE_FRAME = 1 << 2, + /* 表明该Buffer包含Codec-Specific-Data */ + AVCODEC_BUFFER_FLAGS_CODEC_DATA = 1 << 3, +} AVCodecBufferFlags; + +/** + * @brief 定义AVCodec的Buffer描述信息 + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 9 + * @version 1.0 + */ +typedef struct AVCodecBufferAttr { + /* 以微秒为单位表示的该Buffer的Presentation时间戳 */ + int64_t pts; + /* 以字节为单位表示的该Buffer内所包含数据的大小 */ + int32_t size; + /* 有效数据在该Buffer内的起始偏移量 */ + int32_t offset; + /* 该Buffer具有的标记, 也是多个{@link AVCodecBufferFlags}的组合. */ + uint32_t flags; +} AVCodecBufferAttr; + +/** + * @brief 当AVCodec实例运行发生错误时,该函数指针会被调用以报告具体错误信息。 + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param codec AVCodec实例 + * @param errorCode 具体错误码 + * @param userData 用户特定数据 + * @since 9 + * @version 1.0 + */ +typedef void (* AVCodecOnError)(AVCodec *codec, int32_t errorCode, void *userData); + +/** + * @brief 当输出流发生变化时,该函数指针会被调用以报告新的流描述信息. + * 需要注意的时,AVFormat指针的生命周期仅维持在该函数指针被调用时上有效,禁止在调用结束后继续访问。 + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param codec AVCodec实例 + * @param format 新的输出流描述信息 + * @param userData 用户特定数据 + * @since 9 + * @version 1.0 + */ +typedef void (* AVCodecOnStreamChanged)(AVCodec *codec, AVFormat *format, void *userData); + +/** + * @brief 当AVCodec运行过程中需要新的输入数据时,该函数指针会被调用,并携带一块可用的Buffer以供填入新的输入数据。 + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param codec AVCodec实例 + * @param index 新的可用的输入Buffer对应的索引. + * @param data 新的可用的输入Buffer. + * @param userData 用户特定数据 + * @since 9 + * @version 1.0 + */ +typedef void (* AVCodecOnNeedInputData)(AVCodec *codec, uint32_t index, AVMemory *data, void *userData); + +/** + * @brief 当AVCodec运行过程中产生了新的输出数据时,该函数指针会被调用,并携带一块包含新输出数据的Buffer. + * 需要注意的是,AVCodecBufferAttr指针的生命周期仅维持在该函数指针被调用时有效,禁止调用结束后继续访问. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param codec AVCodec实例 + * @param index 新的输出Buffer对应的索引. + * @param data 包含新的输出数据的Buffer + * @param attr 新的输出Buffer的描述信息,具体参考{@link AVCodecBufferAttr} + * @param userData specified data + * @since 9 + * @version 1.0 + */ +typedef void (* AVCodecOnNewOutputData)(AVCodec *codec, uint32_t index, AVMemory *data, + AVCodecBufferAttr *attr, void *userData); + +/** + * @brief AVCodec所有的异步回调函数指针集合。注册一个该结构体实例给AVCodec实例,并处理通过该回调报告 + * 的信息,以确保AVCodec正常运转。 + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param onError 监听AVCodec运行错误,参考{@link AVCodecOnError} + * @param onStreamChanged 监听编解码流信息,参考{@link AVCodecOnStreamChanged} + * @param onNeedInputData 监听编解码需要输入数据,参考{@link AVCodecOnNeedInputData} + * @param onNeedInputData 监听编解码产生输出数据,参考{@link onNeedInputData} + * @since 9 + * @version 1.0 + */ +typedef struct AVCodecAsyncCallback { + AVCodecOnError onError; + AVCodecOnStreamChanged onStreamChanged; + AVCodecOnNeedInputData onNeedInputData; + AVCodecOnNewOutputData onNeedOutputData; +} AVCodecAsyncCallback; + +#ifdef __cplusplus +} +#endif + +#endif // NATIVE_AVCODEC_BASE_H \ No newline at end of file diff --git a/zh-cn/native_sdk/media/media/native_avcodec_videodecoder.h b/zh-cn/native_sdk/media/media/native_avcodec_videodecoder.h new file mode 100644 index 00000000..c79a4cc6 --- /dev/null +++ b/zh-cn/native_sdk/media/media/native_avcodec_videodecoder.h @@ -0,0 +1,211 @@ +/* + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NATIVE_AVCODEC_VIDEODECODER_H +#define NATIVE_AVCODEC_VIDEODECODER_H + +#include +#include +#include "native_averrors.h" +#include "native_avformat.h" +#include "native_avmemory.h" +#include "native_avcodec_base.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief 通过mime类型创建一个视频解码器实例,大多数情况下推荐使用该接口。 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param mime mime类型描述字符串,参考{@link AVCODEC_MIME_TYPE} + * @return 返回一个指向AVCodec实例的指针 + * @since 9 + * @version 1.0 + */ +AVCodec* OH_VideoDecoder_CreateByMime(const char *mime); + +/** + * @brief 通过视频解码器名称创建一个视频解码器实例,使用这个接口的前提是必须清楚解码器准确的名称。 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param name 视频解码器名称 + * @return 返回一个指向AVCodec实例的指针 + * @since 9 + * @version 1.0 + */ +AVCodec* OH_VideoDecoder_CreateByName(const char *name); + +/** + * @brief 清空解码器内部资源,并销毁解码器实例 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoDecoder_Destroy(AVCodec *codec); + +/** + * @brief 设置异步回调函数,使得你的应用能够响应视频解码器产生的事件,该接口被调用必须是在Prepare被调用前 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向AVCodec实例的指针 + * @param callback 一个包含所有回调函数的集合体,参考{@link AVCodecAsyncCallback} + * @param userData 用户特定数据 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoDecoder_SetCallback(AVCodec *codec, AVCodecAsyncCallback callback, void *userData); + +/** + * @brief 指定输出Surface,以提供视频解码输出, 该接口被调用必须是在Prepare被调用前 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向AVCodec实例的指针 + * @param window 指向一个NativeWindow实例的指针,具体参考{@link NativeWindow} + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoDecoder_SetSurface(AVCodec *codec, NativeWindow *window); + +/** + * @brief 配置视频解码器,典型地,需要配置被解码视频轨道的描述信息,这些信息能够从容器中提取出来, + * 该接口被调用必须是在Prepare被调用前。 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向AVCodec实例的指针 + * @param format 指向AVFormat的指针,用以给出待解码视频轨道的描述信息 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoDecoder_Configure(AVCodec *codec, AVFormat *format); + +/** + * @brief 准备解码器内部资源,调用该接口前必须先调用Configure接口。 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoDecoder_Prepare(AVCodec *codec); + +/** + * @brief 启动解码器,该接口必须在已经Prepare成功后调用。在被启动成功后,解码器将开始报告NeedInputData事件。 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoDecoder_Start(AVCodec *codec); + +/** + * @brief 停止解码器。在停止后可通过Start重新进入Started状态,但需要注意的是,若先前给解码器输入过 + * Codec-Specific-Data,则需要重新输入。 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoDecoder_Stop(AVCodec *codec); + +/** + * @brief 清空解码器内部缓存的输入输出数据。在该接口被调用后,所有先前通过异步回调报告的Buffer的索引都将 + * 失效,确保不要再访问这些索引对应的Buffers。 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoDecoder_Flush(AVCodec *codec); + +/** + * @brief 重置解码器。如需继续解码工作,需要重新调用Configure接口以配置该解码器实例。 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoDecoder_Reset(AVCodec *codec); + +/** + * @brief 获取该解码器输出数据的描述信息,具体参考{@link AVFormat}. 需要注意的是,返回值所指向 + * 的AVFormat实例的生命周期将会再下一次调用该接口时或者该AVCodec实例被销毁时失效。 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向AVCodec实例的指针 + * @return 返回AVFormat实例的指针 + * @since 9 + * @version 1.0 + */ +AVFormat* OH_VideoDecoder_GetOutputDescription(AVCodec *codec); + +/** + * @brief 向解码器设置动态参数,注意:该接口仅能在解码器被启动后调用,同时错误的参数设置,可能会导致解码失败 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向AVCodec实例的指针 + * @param format 指向AVFormat实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoDecoder_SetParameter(AVCodec *codec, AVFormat *format); + +/** + * @brief 将填充好数据的输入Buffer提交给视频解码器。{@link AVCodecOnNeedInputData}回调会报告可用的 + * 输入Buffer及对应的索引值。一旦指定索引的Buffer被提交给了视频解码器,直到再一次收到{@link AVCodecOnNeedInputData} + * 回调报告相同索引的Buffer可用前,该Buffer都不可以再次被访问。另外,对于部分解码器,要求在最开始给解码器输入 + * Codec-Specific-Data,用以初始化解码器的解码过程,例如H264格式的PPS/SPS数据。 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向AVCodec实例的指针 + * @param index 输入Buffer对应的索引值 + * @param attr 描述该Buffer内所包含数据的信息 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoDecoder_PushInputData(AVCodec *codec, uint32_t index, AVCodecBufferAttr attr); + +/** + * @brief 将处理结束的输出Buffer交还给解码器,并通知解码器完成将该Buffer内包含的解码后的数据在输出Surface上渲染。 + * 如果先前未配置输出Surface,调用该接口仅仅将指定索引对应的输出Buffer交还给解码器。 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向AVCodec实例的指针 + * @param index 输出Buffer对应的索引值 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoDecoder_RenderOutputData(AVCodec *codec, uint32_t index); + +/** + * @brief 将处理结束的输出Buffer交还给解码器。 + * @syscap SystemCapability.Multimedia.Media.VideoDecoder + * @param codec 指向AVCodec实例的指针 + * @param index 输出Buffer对应的索引值 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoDecoder_FreeOutputData(AVCodec *codec, uint32_t index); + +#ifdef __cplusplus +} +#endif + +#endif // NATIVE_AVCODEC_VIDEODECODER_H \ No newline at end of file diff --git a/zh-cn/native_sdk/media/media/native_avcodec_videoencoder.h b/zh-cn/native_sdk/media/media/native_avcodec_videoencoder.h new file mode 100644 index 00000000..af73d2ee --- /dev/null +++ b/zh-cn/native_sdk/media/media/native_avcodec_videoencoder.h @@ -0,0 +1,194 @@ +/* + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NATIVE_AVCODEC_VIDEOENCODER_H +#define NATIVE_AVCODEC_VIDEOENCODER_H + +#include +#include +#include "native_averrors.h" +#include "native_avformat.h" +#include "native_avmemory.h" +#include "native_avcodec_base.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief 通过mime类型创建一个视频编码器实例,大多数情况下推荐使用该接口。 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param mime mime类型描述字符串,参考{@link AVCODEC_MIME_TYPE} + * @return 返回一个指向AVCodec实例的指针 + * @since 9 + * @version 1.0 + */ +AVCodec* OH_VideoEncoder_CreateByMime(const char *mime); + +/** + * @brief 通过视频编码器名称创建一个视频编码器实例,使用这个接口的前提是必须清楚编码器准确的名称。 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param name 视频编码器名称 + * @return 返回一个指向AVCodec实例的指针 + * @since 9 + * @version 1.0 + */ +AVCodec* OH_VideoEncoder_CreateByName(const char *name); + +/** + * @brief 清空编码器内部资源,并销毁编码器实例 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoEncoder_Destroy(AVCodec *codec); + +/** + * @brief 设置异步回调函数,使得你的应用能够响应视频编码器产生的事件,该接口被调用必须是在Prepare被调用前 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向AVCodec实例的指针 + * @param callback 一个包含所有回调函数的集合体,参考{@link AVCodecAsyncCallback} + * @param userData 用户特定数据 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoEncoder_SetCallback(AVCodec *codec, AVCodecAsyncCallback callback, void *userData); + +/** + * @brief 配置视频编码器,典型地,需要配置被编码视频轨道的描述信息,该接口被调用必须是在Prepare被调用前。 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向AVCodec实例的指针 + * @param format 指向AVFormat的指针,用以给出待编码视频轨道的描述信息 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoEncoder_Configure(AVCodec *codec, AVFormat *format); + +/** + * @brief 准备编码器内部资源,调用该接口前必须先调用Configure接口。 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoEncoder_Prepare(AVCodec *codec); + +/** + * @brief 启动编码器,该接口必须在已经Prepare成功后调用。在被启动成功后,编码器将开始报告NeedInputData事件。 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoEncoder_Start(AVCodec *codec); + +/** + * @brief 停止编码器。在停止后可通过Start重新进入Started状态。 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoEncoder_Stop(AVCodec *codec); + +/** + * @brief 清空编码器内部缓存的输入输出数据。在该接口被调用后,所有先前通过异步回调报告的Buffer的索引都将 + * 失效,确保不要再访问这些索引对应的Buffers。 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoEncoder_Flush(AVCodec *codec); + +/** + * @brief 重置编码器。如需继续编码工作,需要重新调用Configure接口以配置该编码器实例。 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoEncoder_Reset(AVCodec *codec); + +/** + * @brief 获取该编码器输出数据的描述信息,具体参考{@link AVFormat}. 需要注意的是,返回值所指向 + * 的AVFormat实例的生命周期将会再下一次调用该接口时或者该AVCodec实例被销毁时失效。 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向AVCodec实例的指针 + * @return 返回AVFormat实例的指针 + * @since 9 + * @version 1.0 + */ +AVFormat* OH_VideoEncoder_GetOutputDescription(AVCodec *codec); + +/** + * @brief 向编码器设置动态参数,注意:该接口仅能在编码器被启动后调用,同时错误的参数设置,可能会导致编码失败 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向AVCodec实例的指针 + * @param format AVFormat句柄指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoEncoder_SetParameter(AVCodec *codec, AVFormat *format); + + +/** + * @brief 从视频编码器获取输入Surface, 该接口被调用必须是在Prepare被调用前。 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向AVCodec实例的指针 + * @param window 指向一个NativeWindow实例的指针,具体参考{@link NativeWindow} + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoEncoder_GetSurface(AVCodec *codec, NativeWindow **window); + +/** + * @brief 将处理结束的输出Buffer交还给编码器。 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向AVCodec实例的指针 + * @param index 输出Buffer对应的索引值 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoEncoder_FreeOutputData(AVCodec *codec, uint32_t index); + +/** + * @brief 通知视频编码器输入码流已结束。surface模式推荐使用该接口通知编码器码流结束, + * bytebuffer模式推荐使用OH_AVCODEC_VideoEncoderPushInputData接口通知编码器码流结束。 + * @syscap SystemCapability.Multimedia.Media.VideoEncoder + * @param codec 指向AVCodec实例的指针 + * @return 执行成功返回AV_ERR_OK,否则返回具体错误码,参考{@link AVErrCode} + * @since 9 + * @version 1.0 + */ +AVErrCode OH_VideoEncoder_NotifyEndOfStream(AVCodec *codec); + +#ifdef __cplusplus +} +#endif + +#endif // NATIVE_AVCODEC_VIDEOENCODER_H \ No newline at end of file -- Gitee