diff --git a/zh-cn/device_api/hdi/codec/v1_0/CodecTypes.idl b/zh-cn/device_api/hdi/codec/v1_0/CodecTypes.idl new file mode 100644 index 0000000000000000000000000000000000000000..8445638ee637edfc8d12220465919e2766a9bd9e --- /dev/null +++ b/zh-cn/device_api/hdi/codec/v1_0/CodecTypes.idl @@ -0,0 +1,368 @@ +/* + * Copyright (c) 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. + */ + +/** + * @addtogroup Codec + * @{ + * + * @brief Codec模块接口定义。 + * + * Codec模块涉及自定义类型、音视频编解码组件初始化、参数设置、数据的轮转和控制等。 + * + * @since 3.2 + * @version 1.0 + */ + +/** + * @file CodecTypes.idl + * + * @brief Codec模块接口定义中使用的自定义数据类型。 + * + * Codec模块接口定义中使用的自定义数据类型,包括编解码类型、音视频参数、buffer定义等。 + * + * @since 3.2 + * @version 1.0 + */ + +package ohos.hdi.codec.v1_0; +sequenceable OHOS.HDI.CODEC.BufferHandleParcelable; + +/** + * @brief 枚举编解码的类型。 + */ +enum CodecType { + VIDEO_DECODER, /**< 视频解码类型。 */ + VIDEO_ENCODER, /**< 视频编码类型。 */ + AUDIO_DECODER, /**< 音频解码类型。 */ + AUDIO_ENCODER, /**< 音频编码类型。 */ + INVALID_TYPE, /**< 无效类型。 */ +}; + +/** + * @brief 枚举音视频编解码组件类型。 + */ +enum AvCodecRole { + MEDIA_ROLETYPE_IMAGE_JPEG = 0, /**< 图像JPEG媒体类型。 */ + MEDIA_ROLETYPE_VIDEO_AVC, /**< 视频H.264媒体类型。 */ + MEDIA_ROLETYPE_VIDEO_HEVC, /**< 视频H.265媒体类型。 */ + MEDIA_ROLETYPE_AUDIO_FIRST = 65536, /**< 音频编解码器类型。 */ + MEDIA_ROLETYPE_AUDIO_AAC = 65536, /**< 音频AAC媒体类型。 */ + MEDIA_ROLETYPE_AUDIO_G711A, /**< 音频G711A媒体类型。 */ + MEDIA_ROLETYPE_AUDIO_G711U, /**< 音频G711U媒体类型。 */ + MEDIA_ROLETYPE_AUDIO_G726, /**< 音频G726媒体类型。 */ + MEDIA_ROLETYPE_AUDIO_PCM, /**< 音频PCM媒体类型。 */ + MEDIA_ROLETYPE_AUDIO_MP3, /**< 音频MP3媒体类型。 */ + MEDIA_ROLETYPE_INVALID, /**< 无效媒体类型。 */ +}; + +/** + * @brief 枚举Codec规格。 + */ +enum Profile { + INVALID_PROFILE = 0, /**< 无效的规格。 */ + AAC_LC_PROFILE = 4096, /**< AAC低复杂度规格。 */ + AAC_MAIN_PROFILE, /**< AAC主规格。 */ + AAC_HE_V1_PROFILE, /**< AAC高效率和频带重现规格,又称为HEAAC,AAC+,或者AACPlusV1。 */ + AAC_HE_V2_PROFILE, /**< AAC高效率和频带重现以及变量立体声规格,又称为AAC++或者AACPlusV2。 */ + AAC_LD_PROFILE, /**< AAC低延迟规格。 */ + AAC_ELD_PROFILE, /**< AAC增强型低延迟规格。 */ + AVC_BASELINE_PROFILE = 8192, /**< H.264低规格。 */ + AVC_MAIN_PROFILE, /**< H.264主规格。 */ + AVC_HIGH_PROFILE, /**< H.264高规格。 */ + HEVC_MAIN_PROFILE = 12288, /**< H.265主规格。 */ + HEVC_MAIN_10_PROFILE, /**< H.265 10比特主规格。 */ +}; + +/** + * @brief 枚举播放能力。 + */ +enum CodecCapsMask { + CODEC_CAP_ADAPTIVE_PLAYBACK = 1, /**< 自适应播放能力。 */ + CODEC_CAP_SECURE_PLAYBACK = 2, /**< 安全播放能力。 */ + CODEC_CAP_TUNNEL_PLAYBACK = 4, /**< 通道播放能力。 */ + CODEC_CAP_MULTI_PLANE = 65536, /**< 视频图像平面/音频通道平面能力。 */ +}; + +/** + * @brief 枚举音频采样率。 + */ +enum AudioSampleRate { + AUD_SAMPLE_RATE_8000 = 8000, /**< 8K采样率。 */ + AUD_SAMPLE_RATE_12000 = 12000, /**< 12K采样率。 */ + AUD_SAMPLE_RATE_11025 = 11025, /**< 11.025K采样率。 */ + AUD_SAMPLE_RATE_16000 = 16000, /**< 16K采样率。 */ + AUD_SAMPLE_RATE_22050 = 22050, /**< 22.050K采样率。 */ + AUD_SAMPLE_RATE_24000 = 24000, /**< 24K采样率。 */ + AUD_SAMPLE_RATE_32000 = 32000, /**< 32K采样率。 */ + AUD_SAMPLE_RATE_44100 = 44100, /**< 44.1K采样率。 */ + AUD_SAMPLE_RATE_48000 = 48000, /**< 48K采样率。 */ + AUD_SAMPLE_RATE_64000 = 64000, /**< 64K采样率。 */ + AUD_SAMPLE_RATE_96000 = 96000, /**< 96K采样率。 */ + AUD_SAMPLE_RATE_INVALID, /**< 无效采样率。 */ +}; + +/** + * @brief 枚举音频采样格式。 + * + * 对于planar的采样格式,每个声道的数据是独立存储在data中; + * 对于packed的采样格式,只使用第一个data,每个声道的数据是交错存储的。 + */ +enum AudioSampleFormat { + AUDIO_SAMPLE_FMT_U8 = 0, /**< 无符号8位整型,打包格式。 */ + AUDIO_SAMPLE_FMT_S16, /**< 带符号16位整型, 打包格式。 */ + AUDIO_SAMPLE_FMT_S32, /**< 带符号32位整型, 打包格式。 */ + AUDIO_SAMPLE_FMT_FLOAT, /**< 浮点型, 打包格式。 */ + AUDIO_SAMPLE_FMT_DOUBLE, /**< 双精度浮点型, 打包格式。 */ + AUDIO_SAMPLE_FMT_U8P, /**< 无符号8位整型, 平面格式。 */ + AUDIO_SAMPLE_FMT_S16P, /**< 带符号16位整型, 平面格式。 */ + AUDIO_SAMPLE_FMT_S32P, /**< 带符号32位整型, 平面格式。 */ + AUDIO_SAMPLE_FMT_FLOATP, /**< 浮点型, 平面格式。 */ + AUDIO_SAMPLE_FMT_DOUBLEP, /**< 双精度浮点型, 平面格式。 */ + AUDIO_SAMPLE_FMT_INVALID, /**< 无效采样格式。 */ +}; + +/** + * @brief 枚举编解码处理模式。 + */ +enum CodecProcessMode { + PROCESS_BLOCKING_INPUT_BUFFER = 1, /**< 同步模式输入buffer。 */ + PROCESS_BLOCKING_OUTPUT_BUFFER = 2, /**< 同步模式输出buffer。 */ + PROCESS_BLOCKING_CONTROL_FLOW = 4, /**< 同步模式控制流。 */ + PROCESS_NONBLOCKING_INPUT_BUFFER = 256, /**< 异步模式输入buffer。 */ + PROCESS_NONBLOCKING_OUTPUT_BUFFER = 512, /**< 异步模式输出buffer。 */ + PROCESS_NONBLOCKING_CONTROL_FLOW = 1024, /**< 异步模式控制流。 */ +}; + +/** + * @brief 枚举共享内存类型。 + */ +enum ShareMemTypes { + READ_WRITE_TYPE = 1, /**< 可读可写的共享内存类型。 */ + READ_ONLY_TYPE = 2, /**< 可读的共享内存类型。 */ +}; + +/** + * @brief 枚举比特率类型。 + */ +enum BitRateMode { + BIT_RATE_MODE_INVALID, + BIT_RATE_MODE_VBR, /**< 可变比特率。 */ + BIT_RATE_MODE_CBR, /**< 恒定比特率。 */ + BIT_RATE_MODE_CQ, /**< 恒定质量。 */ + BIT_RATE_MODE_VCBR, /**< 受约束的可变位速率。 */ + BIT_RATE_MODE_ABR, /**< 平均比特率。 */ +}; + +/** +* @brief 对齐结构定义,包含宽高的对齐值。 + */ +struct Alignment { + int widthAlignment; /**< 宽的对齐值。 */ + int heightAlignment; /**< 高的对齐值。 */ +}; + +/** + * @brief 矩形的定义。 + */ +struct Rect { + int width; /**< 矩形的宽。 */ + int height; /**< 矩形的高。 */ +}; + +/** + * @brief 取值范围的定义。 + */ +struct RangeValue { + int min; /**< 最小值。 */ + int max; /**< 最大值。 */ +}; + +/** + * @brief 定义视频编解码能力。 + */ +struct CodecVideoPortCap { + struct Rect minSize; /**< 支持的最小分辨率。 */ + struct Rect maxSize; /**< 支持的最大分辨率。 */ + struct Alignment whAlignment; /**< 宽高对齐值。 */ + struct RangeValue blockCount; /**< 支持的块数量范围。 */ + struct RangeValue blocksPerSecond; /**< 每秒可处理的块数量范围。 */ + struct Rect blockSize; /**< 支持的块大小。 */ + int[] supportPixFmts; /**< 支持的像素格式,详见{@link OMX_COLOR_FORMATTYPE}。 */ + enum BitRateMode[] bitRatemode; /**< 传输速率模式,有恒定的,有变化的等几种模式。 */ + struct RangeValue frameRate;      /**< 帧率的范围。 */ + int[] measuredFrameRate; /**< 实测的帧率。 */ +}; + +/** + * @brief 定义音频编解码能力。 + */ +struct CodecAudioPortCap { + int[] sampleFormats; /**< 支持的音频采样格式,详见{@link AudioSampleFormat}。 */ + int[] sampleRate; /**< 支持的音频采样率,详见{@link AudioSampleRate}。 */ + int[] channelLayouts; /**< 支持的音频通道数channel layouts。 */ + int[] channelCount; /**< 支持的音频通道数。 */ +}; + +/** + * @brief 定义音视频编解码能力。 + */ +struct PortCap { + struct CodecVideoPortCap video; /**< 视频编解码能力。 */ + struct CodecAudioPortCap audio; /**< 音频编解码能力。 */ +}; + +/** + * @brief 定义组件的版本信息。 + */ +struct OmxVerType { + unsigned char nVersionMajor; /**< 主要版本访问元件。 */ + unsigned char nVersionMinor; /**< 次要版本访问元件。 */ + unsigned char nRevision; /**< 修正版本访问元件。 */ + unsigned char nStep; /**< 步骤版本访问元件。 */ +}; + +/** + * @brief 定义组件的版本信息。 + */ +union OMX_VERSIONTYPE { + struct OmxVerType s; /**< 组件的版本信息。 */ + unsigned int nVersion; /**< 32位值,使访问版本在单个字大小复制/比较操作中轻松完成。 */ +}; + +/** + * @brief 定义Codec编解码能力。 + */ +struct CodecCompCapability { + enum AvCodecRole role; /**< 媒体类型。 */ + enum CodecType type; /**< 编解码类型。 */ + String compName; /**< 编解码组件名称。 */ + int[] supportProfiles; /**< 支持的profiles,详见{@link Profile}。 */ + int maxInst; /**< 最大实例。 */ + boolean isSoftwareCodec; /**< 软件编解码还是硬件编解码。 */ + int processModeMask; /**< 编解码处理模式掩码,详见{@link CodecProcessMode}。 */ + unsigned int capsMask; /**< 编解码播放能力掩码,详见{@link CodecCapsMask}。 */ + struct RangeValue bitRate; /**< 支持的码率范围。 */ + struct PortCap port; /**< 支持的音视频编解码能力。 */ +}; + +/** + * @brief Codec buffer信息的定义。 + */ +struct OmxCodecBuffer { + unsigned int bufferId; /**< buffer ID。 */ + unsigned int size; /**< 结构体大小。 */ + union OMX_VERSIONTYPE version; /**< 组件版本信息。 */ + unsigned int bufferType; /**< buffer类型,详见{@CodecBufferType}。 */ + BufferHandleParcelable bufferhandle; /**< 编码或者解码使用的bufferhandle,详见{@BufferHandleParcelable}。 */ + FileDescriptor fd; /**< 共享内存文件描述符。 */ + unsigned int allocLen; /**< 申请的buffer大小。 */ + unsigned int filledLen; /**< 填充的buffer大小。 */ + unsigned int offset; /**< 有效数据从缓冲区开始的起始偏移量。 */ + FileDescriptor fenceFd; /**< 该描述符来自buffer消费者,Codec等待成功后才可以使用输入或者输出buffer。 */ + enum ShareMemTypes type; /**< 共享内存类型。 */ + long pts; /**< 缓冲区第一个逻辑样本时间戳。 */ + unsigned int flag; /**< 缓冲区特定标志。 */ +}; + +/** + * @brief 枚举组件状态。 + */ +enum OMX_EVENTTYPE { + OMX_EventCmdComplete, /**< 组件已成功完成命令。 */ + OMX_EventError, /**< 组件已检测到错误情况。 */ + OMX_EventMark, /**< 组件已检测到缓冲区标记。 */ + OMX_EventPortSettingsChanged, /**< 组件报告端口设置更改。 */ + OMX_EventBufferFlag, /**< 组件已检测到 EOS。 */ + OMX_EventResourcesAcquired, /**< 组件已被授予资源,并正在自动启动从OMX_StateWaitForResources状态更改为OMX_StateIdle。 */ + OMX_EventComponentResumed, /**< 组件回收由于重新占用的资源。 */ + OMX_EventDynamicResourcesAvailable, /**< 组件已获取此前不可用的动态资源。 */ + OMX_EventPortFormatDetected, /**< 组件已检测到受支持的格式。 */ + OMX_EventKhronosExtensions = 1862270976, /**< 用于引入 Khronos 标准扩展的保留区域。 */ + OMX_EventVendorStartUnused = 2130706432, /**< 用于引入供应商扩展的预留区域。 */ + OMX_EventMax = 2147483647, /**< 枚举的最大值。 */ +}; + +/** + * @brief 枚举OMX_SendCommand宏中的操作。 + */ +enum OMX_COMMANDTYPE +{ + OMX_CommandStateSet, /**< 更改组件状态。 */ + OMX_CommandFlush, /**< 刷新组件的数据队列。 */ + OMX_CommandPortDisable, /**< 禁用组件上的端口。 */ + OMX_CommandPortEnable, /**< 启用组件上的端口。 */ + OMX_CommandMarkBuffer, /**< 标记组件/缓冲区以进行观察。 */ + OMX_CommandKhronosExtensions = 1862270976, /**< 用于引入 Khronos 标准扩展的保留区域。 */ + OMX_CommandVendorStartUnused = 2130706432, /**< 用于引入供应商扩展的预留区域。 */ + OMX_CommandMax = 2147483647 /**< 枚举的最大值。 */ +}; + +/** + * @brief 表示或更改组件状态。 + */ +enum OMX_STATETYPE +{ + OMX_StateInvalid, /**< 组件已检测到其内部数据结构已损坏,以至于无法正确确定其状态。 */ + OMX_StateLoaded, /**< 组件已加载,但尚未完成初始化。 OMX_SetParameter宏 + 和OMX_GetParameter宏是允许发送到处于此状态的组件的唯一有效宏。 */ + OMX_StateIdle, /**< 组件初始化已成功完成,组件已准备好启动。*/ + OMX_StateExecuting, /**< 组件已接受启动命令并正在处理数据(如果数据可用)。 */ + OMX_StatePause, /**< 组件已收到暂停命令。 */ + OMX_StateWaitForResources, /**< 组件正在等待资源,无论是在抢占之后还是在获得请求的资源之前。*/ + OMX_StateKhronosExtensions = 1862270976, /**< 用于引入 Khronos 标准扩展的保留区域。 */ + OMX_StateVendorStartUnused = 2130706432, /**< 用于引入供应商扩展的预留区域。 */ + OMX_StateMax = 2147483647 /**< 枚举最大值。 */ +}; + +/** + * @brief 表示端口供应商在两个端口之间建立隧道时的首选项。 + */ +enum OMX_BUFFERSUPPLIERTYPE +{ + OMX_BufferSupplyUnspecified = 0, /**< 提供缓冲区的端口未指定,或不指定。 */ + OMX_BufferSupplyInput, /**< 为输入端口提供缓冲区。 */ + OMX_BufferSupplyOutput, /**< 为输出端口提供缓冲区。 */ + OMX_BufferSupplyKhronosExtensions = 1862270976, /**< 用于引入 Khronos 标准扩展的保留区域。 */ + OMX_BufferSupplyVendorStartUnused = 2130706432, /**< 用于引入供应商扩展的预留区域。 */ + OMX_BufferSupplyMax = 2147483647 /**< 枚举的最大值。 */ +}; + +/** + * @brief 用于将数据从输出端口传递到输入端口。 + */ +struct OMX_TUNNELSETUPTYPE { + unsigned int nTunnelFlags; /**< 隧道的位标志。 */ + enum OMX_BUFFERSUPPLIERTYPE eSupplier; /**< 供应商首选项。 */ +}; + +/** + * @brief 定义组件版本信息。 + */ +struct CompVerInfo { + String compName; /**< 组件名称。 */ + unsigned char[] compUUID; /**< 组件的UUID标识符。 */ + union OMX_VERSIONTYPE compVersion; /**< OMX组件版本信息。 */ + union OMX_VERSIONTYPE specVersion; /**< 构建组件所依据的规范的版本信息。 */ +}; + +/** + * @brief 定义事件上报信息。 + */ +struct EventInfo { + long appData; /**< 设置回调时给入的上层实例。 */ + unsigned int data1; /**< Error类型,可能是portIndex或者其它数据。 */ + unsigned int data2; /**< 事件上报携带的数据1。 */ + byte[] eventData; /**< 事件上报携带的数据信息。 */ +}; diff --git a/zh-cn/device_api/hdi/codec/v1_0/ICodecCallback.idl b/zh-cn/device_api/hdi/codec/v1_0/ICodecCallback.idl new file mode 100644 index 0000000000000000000000000000000000000000..9fbabe0b34b0c31f6f1b8eb326152d62cba5eff6 --- /dev/null +++ b/zh-cn/device_api/hdi/codec/v1_0/ICodecCallback.idl @@ -0,0 +1,115 @@ +/* + * Copyright (c) 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. + */ + +/** + * @addtogroup Codec + * @{ + * + * @brief Codec模块接口定义。 + * + * Codec模块涉及自定义类型、音视频编解码组件初始化、参数设置、数据的轮转和控制等。 + * + * @since 3.2 + * @version 1.0 + */ + +/** + * @file ICodecCallback.idl + * + * @brief 主要包括回调函数接口定义。 + * + * Codec模块事件上报、上报输入buffer和输出buffer处理完毕等接口定义。 + * + * @since 3.2 + * @version 1.0 + */ + +/** + * @brief Codec回调接口定义。 + * + * 提供了以下3种回调函数: + * - 组件错误事件、命令完成事件、端口设置等事件回调,详见{@link EventHandler}。 + * - 输入端口处理完buffer回调,详见{@link EmptyBufferDone}。 + * - 输出端口填充完buffer回调,详见{@link FillBufferDone}。 + * 通过以下两种方式注册回调: + * - 创建组件时,通过{@link CreateComponent}方法。 + * - 当组件处于OMX_StateLoaded状态时,通过{@link SetCallbacks}方法注册回调。 + */ + + +package ohos.hdi.codec.v1_0; + +import ohos.hdi.codec.v1_0.CodecTypes; + +[callback] interface ICodecCallback { + + /** + * @brief 事件上报。 + * + * 组件运行过程中向上报告错误事件、命令完成事件、端口设置更改事件等。 + * - 当eEvent为OMX_EventCmdComplete,eventData为NULL,data1 数据为OMX_COMMANDTYPE, + * 此时,当data1为OMX_CommandStateSet,data2表示状态,其它情况下,data2表示端口。 + * - 当event为OMX_EventError时,data1表示错误码,data2和eventData都为0。 + * - 当event为OMX_EventMark时,data1和data2都为0,eventData指向mark指针。 + * - 当event为OMX_EventPortSettingsChanged时,data1表示端口,data2和eventData为0。 + * - 当event为OMX_EventBufferFlag时,data1表示端口,data2表示flag,eventData为0。 + * - 当event为OMX_EventResourcesAcquired或OMX_EventDynamicResourcesAvailable时,data1、data2和eventData都为0。 + * + * @param event 输入参数,要通知的事件类型,详见{@link OMX_EVENTTYPE}。 + * @param info 输入参数,指向事件上报携带的信息指针,详见{@link EventInfo}。 + * + * @return HDF_SUCCESS 表示事件上报成功。 + * @return HDF_ERR_INVALID_PARAM 表示参数无效,事件上报失败。 + * @return HDF_ERR_INVALID_OBJECT 表示对象无效,事件上报失败。 + * @return HDF_ERR_MALLOC_FAIL 表示申请内存失败,事件上报失败。 + * + * @since 3.2 + */ + EventHandler([in] enum OMX_EVENTTYPE event, [in] struct EventInfo info); + + /** + * @brief 上报输入buffer编码或者解码处理完毕。 + * + * 组件运行过程中向上报告输入buffer已经使用完毕。 + * + * @param appData 输入参数,上层数据,通常是设置回调时给入的上层实例。 + * @param buffer 输入参数,已经处理完毕的输入buffer信息{@link OmxCodecBuffer}。 + * + * @return HDF_SUCCESS 表示上报成功。 + * @return HDF_ERR_INVALID_PARAM 表示参数无效,上报失败。 + * @return HDF_ERR_INVALID_OBJECT 表示对象无效,上报失败。 + * @return HDF_ERR_MALLOC_FAIL 表示申请内存失败,上报失败。 + * + * @since 3.2 + */ + EmptyBufferDone([in] long appData, [in] struct OmxCodecBuffer buffer); + + /** + * @brief 上报输出buffer填充完毕。 + * + * 组件运行过程中向上报告输出buffer已经填充完毕。 + * + * @param appData 输入参数,上层数据,通常是设置回调时给入的上层实例。 + * @param buffer 输入参数,已经填充完毕的buffer信息{@link OmxCodecBuffer}。 + * + * @return HDF_SUCCESS 表示上报成功。 + * @return HDF_ERR_INVALID_PARAM 表示参数无效,上报失败。 + * @return HDF_ERR_INVALID_OBJECT 表示对象无效,上报失败。 + * @return HDF_ERR_MALLOC_FAIL 表示申请内存失败,上报失败。 + * + * @since 3.2 + */ + FillBufferDone([in] long appData, [in] struct OmxCodecBuffer buffer); +} diff --git a/zh-cn/device_api/hdi/codec/v1_0/ICodecComponent.idl b/zh-cn/device_api/hdi/codec/v1_0/ICodecComponent.idl new file mode 100644 index 0000000000000000000000000000000000000000..95b9916ac9a908d88a41b6802695d43a0595f49c --- /dev/null +++ b/zh-cn/device_api/hdi/codec/v1_0/ICodecComponent.idl @@ -0,0 +1,380 @@ +/* + * Copyright (c) 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. + */ + +/** + * @addtogroup Codec + * @{ + * + * @brief Codec模块接口定义。 + * + * Codec模块涉及自定义类型、音视频编解码组件初始化、参数设置、数据的轮转和控制等。 + * + * @since 3.2 + * @version 1.0 + */ + +/** + * @file ICodecComponent.idl + * + * @brief 主要包括Codec组件接口定义。 + * + * Codec模块提供了获取组件信息、给组件发送命令、组件参数设置、buffer轮转和控制等接口定义。创建组件后,可使用下列接口进行编解码处理。 + * + * @since 3.2 + * @version 1.0 + */ + +/** + * @brief Codec组件接口定义。 + * + * 主要提供以下功能: + * - 获取组件的版本 + * - 组件参数配置的获取和设置 + * - 发送命令至组件及获取组件状态 + * - 设置回调函数 + * - 设置/释放组件使用的buffer + * - 编解码输入输出buffer处理 + * 具体方法使用详见函数说明。 + */ + +package ohos.hdi.codec.v1_0; + +import ohos.hdi.codec.v1_0.CodecTypes; +import ohos.hdi.codec.v1_0.ICodecCallback; + +interface ICodecComponent { + /** + * @brief 获取Codec组件版本号。 + * + * 通过查询组件,返回组件版本信息。 + * + * @param verInfo 输出参数,指向组件版本信息的指针,详见{@link CompVerInfo}。 + * + * @return HDF_SUCCESS 表示获取版本号成功。 + * @return HDF_ERR_INVALID_PARAM 表示参数无效,获取版本号失败。 + * @return HDF_ERR_INVALID_OBJECT 表示对象无效,获取版本号失败。 + * @return HDF_ERR_MALLOC_FAIL 表示申请内存失败,获取版本号失败。 + * + * @since 3.2 + */ + GetComponentVersion([out] struct CompVerInfo verInfo); + + /** + * @brief 发送命令给组件。 + * + * 发送命令给组件,当命令为设置状态时,会有事件回调通知结果给上层,其他命令则没有事件上报。 + * + * @param cmd 输入参数,组件要执行的命令,详见{@link OMX_COMMANDTYPE}。 + * @param param 输入参数,组件要执行的命令携带的参数。 + * - 当cmd为OMX_CommandStateSet时,param的值详见{@link OMX_STATETYPE}。 + * - 当cmd为OMX_CommandFlush、OMX_CommandPortDisable、OMX_CommandPortEnable、OMX_CommandMarkBuffer时,param为目标端口。 + * @param cmdData 输入参数,当cmd为OMX_CommandMarkBuffer时,指向OMX_MARKTYPE结构体指针。 + * + * @return HDF_SUCCESS 表示发送命令成功。 + * @return HDF_ERR_INVALID_PARAM 表示参数无效,发送命令失败。 + * @return HDF_ERR_INVALID_OBJECT 表示对象无效,发送命令失败。 + * @return HDF_ERR_MALLOC_FAIL 表示申请内存失败,发送命令失败。 + * + * @since 3.2 + */ + SendCommand([in] enum OMX_COMMANDTYPE cmd, [in] unsigned int param, [in] byte[] cmdData); + + /** + * @brief 获取组件参数设置。 + * + * 当组件处于除了OMX_StateInvalid(组件状态异常)之外的其他状态,用户可通过此接口获取组件参数。 + * + * @param index 输入参数,待填充结构的索引,详见{@link OMX_INDEXTYPE}。 + * @param inParamStruct 输入参数,指向由组件填充的应用程序分配的结构体指针。 + * @param outParamStruct 输出参数,指向由组件填充的应用程序分配的结构体指针。 + * + * @return HDF_SUCCESS 表示获取参数成功。 + * @return HDF_ERR_INVALID_PARAM 表示参数无效,获取参数失败。 + * @return HDF_ERR_INVALID_OBJECT 表示对象无效,获取参数失败。 + * @return HDF_ERR_MALLOC_FAIL 表示申请内存失败,获取参数失败。 + * + * @since 3.2 + */ + GetParameter([in] unsigned int index, [in] byte[] inParamStruct, [out] byte[] outParamStruct); + + /** + * @brief 设置组件需要的参数。 + * + * 当组件处于OMX_StateLoaded、OMX_StateWaitForResources状态或者端口是去使能状态,用户可通过此接口设置组件参数。 + * + * @param index 输入参数,要设置的结构索引,详见{@link OMX_INDEXTYPE}。 + * @param paramStruct 输入参数,指向组件用于初始化的应用程序分配结构的指针。 + * + * @return HDF_SUCCESS 表示设置参数成功。 + * @return HDF_ERR_INVALID_PARAM 表示参数无效,设置参数失败。 + * @return HDF_ERR_INVALID_OBJECT 表示对象无效,设置参数失败。 + * @return HDF_ERR_MALLOC_FAIL 表示申请内存失败,设置参数失败。 + * + * @since 3.2 + */ + SetParameter([in] unsigned int index, [in] byte[] paramStruct); + + /** + * @brief 获取组件的配置结构。 + * + * 加载组件后可以随时调用此接口获取组件的配置。 + * + * @param index 输入参数,待填充结构的索引,详见{@link OMX_INDEXTYPE}。 + * @param inCfgStruct 输入参数,指向由组件填充的应用程序分配的结构体指针。 + * @param outCfgStruct 输出参数,指向由组件填充的应用程序分配的结构体指针。 + * + * @return HDF_SUCCESS 表示获取配置成功。 + * @return HDF_ERR_INVALID_PARAM 表示参数无效,获取配置失败。 + * @return HDF_ERR_INVALID_OBJECT 表示对象无效,获取配置失败。 + * @return HDF_ERR_MALLOC_FAIL 表示申请内存失败,获取配置失败。 + * + * @since 3.2 + */ + GetConfig([in] unsigned int index, [in] byte[] inCfgStruct, [out] byte[] outCfgStruct); + + /** + * @brief 设置组件的配置。 + * + * 加载组件后可以随时调用此接口设置组件的配置。 + * + * @param index 输入参数,要设置的结构索引,详见{@link OMX_INDEXTYPE}。 + * @param cfgStruct 输入参数,指向组件用于初始化的应用程序分配结构的指针。 + * + * @return HDF_SUCCESS 表示设置配置成功。 + * @return HDF_ERR_INVALID_PARAM 表示参数无效,设置失败。 + * @return HDF_ERR_INVALID_OBJECT 表示对象无效,设置失败。 + * @return HDF_ERR_MALLOC_FAIL 表示申请内存失败,设置失败。 + * + * @since 3.2 + */ + SetConfig([in] unsigned int index, [in] byte[] cfgStruct); + + /** + * @brief 根据字符串获取组件的扩展索引。 + * + * 将扩展字符串转换为Openmax IL结构索引。 + * + * @param paramName 输入参数,组件用来转换为配置索引的字符串。 + * @param indexType 输出参数,由paramName转换的配置索引,详见{@link OMX_INDEXTYPE}。 + * + * @return HDF_SUCCESS 表示获取扩展索引成功。 + * @return HDF_ERR_INVALID_PARAM 表示参数无效,获取扩展索引失败。 + * @return HDF_ERR_INVALID_OBJECT 表示对象无效,获取扩展索引失败。 + * @return HDF_ERR_MALLOC_FAIL 表示申请内存失败,获取扩展索引失败。 + * + * @since 3.2 + */ + GetExtensionIndex([in] String paramName, [out] unsigned int indexType); + + /** + * @brief 获取组件的当前状态。 + * + * 用户可调用此接口获取组件的当前状态,组件状态详见{@link OMX_STATETYPE}。 + * + * @param state 输出参数,指向获取到的状态指针,组件状态详见{@link OMX_STATETYPE}。 + * + * @return HDF_SUCCESS 表示获取状态成功。 + * @return HDF_ERR_INVALID_PARAM 表示参数无效,获取状态失败。 + * @return HDF_ERR_INVALID_OBJECT 表示对象无效,获取状态失败。 + * @return HDF_ERR_MALLOC_FAIL 表示申请内存失败,获取状态失败。 + * + * @since 3.2 + */ + GetState([out] enum OMX_STATETYPE state); + + /** + * @brief 设置组件采用Tunnel方式通信。 + * + * 当组件处于OMX_StateLoaded 状态时,用户通过调用此接口确定组件是否可以进行Tunnel传输,如果可以则设置组件的Tunnel传输。 + * + * @param port 输入参数,组件设置的端口。 + * @param tunneledComp 输入参数,组件的tunnel handle。 + * @param tunneledPort 输入参数,组件用来Tunnel通信的端口。 + * @param inTunnelSetup 输入参数,指向Tunnel设置的结构体{@link OMX_TUNNELSETUPTYPE}指针。 + * @param outTunnelSetup 输出参数,指向Tunnel设置的结构体{@link OMX_TUNNELSETUPTYPE}指针。 + * + * @return HDF_SUCCESS 表示设置成功。 + * @return HDF_ERR_INVALID_PARAM 表示参数无效,设置失败。 + * @return HDF_ERR_INVALID_OBJECT 表示对象无效,设置失败。 + * @return HDF_ERR_MALLOC_FAIL 表示申请内存失败,设置失败。 + * + * @since 3.2 + */ + ComponentTunnelRequest([in] unsigned int port, [in] int tunneledComp, [in] unsigned int tunneledPort, [in] struct OMX_TUNNELSETUPTYPE inTunnelSetup, [out] struct OMX_TUNNELSETUPTYPE outTunnelSetup); + + /** + * @brief 指定组件端口的buffer。 + * + * 此接口在以下情况下使用: + * - 当组件处于OMX_StateLoaded状态,并且用户已经向组件发送OMX_StateIdle状态转换请求。 + * - 当组件处于OMX_StateWaitForResources状态,所需的资源可用,并且组件已准备好进入OMX_StateIdle状态。 + * - 在去使能端口上,组件处于OMX_StateExecuting、OMX_StatePause或OMX_StateIdle状态。 + * + * @param portIndex 输入参数,指定的组件端口。 + * @param inBuffer 输入参数,指向要使用的buffer结构体{@link OmxCodecBuffer}指针。 + * @param outBuffer 输出参数,指向要使用的buffer结构体{@link OmxCodecBuffer}指针。 + * + * @return HDF_SUCCESS 表示指定成功。 + * @return HDF_ERR_INVALID_PARAM 表示参数无效,指定失败。 + * @return HDF_ERR_INVALID_OBJECT 表示对象无效,指定失败。 + * @return HDF_ERR_MALLOC_FAIL 表示申请内存失败,指定失败。 + * + * @since 3.2 + */ + UseBuffer([in] unsigned int portIndex, [in] struct OmxCodecBuffer inBuffer, [out] struct OmxCodecBuffer outBuffer); + + /** + * @brief 向组件申请端口buffer。 + * + * 向组件申请分配新的buffer,此接口在以下情况下使用: + * - 当组件处于OMX_StateLoaded状态,并且用户已经向组件发送OMX_StateIdle状态转换请求。 + * - 当组件处于OMX_StateWaitForResources状态,所需的资源可用,并且组件已准备好进入OMX_StateIdle状态。 + * - 在去使能端口上,组件处于OMX_StateExecuting、OMX_StatePause或OMX_StateIdle状态。 + * + * @param portIndex 输入参数,指定的组件端口。 + * @param inBuffer 输入参数,指向要申请的buffer结构体{@link OmxCodecBuffer}指针。 + * @param outBuffer 输入参数,指向要申请的buffer结构体{@link OmxCodecBuffer}指针。 + * + * @return HDF_SUCCESS 表示申请buffer成功。 + * @return HDF_ERR_INVALID_PARAM 表示参数无效,申请buffer失败。 + * @return HDF_ERR_INVALID_OBJECT 表示对象无效,申请buffer失败。 + * @return HDF_ERR_MALLOC_FAIL 表示申请内存失败,申请buffer失败。 + * + * @since 3.2 + */ + AllocateBuffer([in] unsigned int portIndex, [in] struct OmxCodecBuffer inBuffer, [out] struct OmxCodecBuffer outBuffer); + + /** + * @brief 释放buffer。 + * + * 此接口在以下情况下使用: + * - 当组件处于OMX_StateIdle状态,并且已经向组件发送OMX_StateLoaded状态转换请求。 + * - 在去使能端口上,组件处于OMX_StateExecuting、OMX_StatePause或OMX_StateIdle时调用。 + * - 此接口调用可随时进行,但是如果未在上述情况下执行,可能会导致组件上报OMX_ErrorPortUnpopulated事件。 + * + * @param portIndex 输入参数,指定的组件端口。 + * @param buffer 输入参数,指向{@link OmxCodecBuffer}结构体的指针。 + * + * @return HDF_SUCCESS 表示释放buffer成功。 + * @return HDF_ERR_INVALID_PARAM 表示参数无效,释放buffer失败。 + * @return HDF_ERR_INVALID_OBJECT 表示对象无效,释放buffer失败。 + * @return HDF_ERR_MALLOC_FAIL 表示申请内存失败,释放buffer失败。 + * + * @since 3.2 + */ + FreeBuffer([in] unsigned int portIndex, [in] struct OmxCodecBuffer buffer); + + /** + * @brief 编解码输入待处理buffer。 + * + * 此接口在组件处于OMX_StateExecuting或者OMX_StatePause状态时调用。 + * + * @param buffer 输入参数,指向{@link OmxCodecBuffer}结构体的指针。 + * + * @return HDF_SUCCESS 表示输入buffer成功。 + * @return HDF_ERR_INVALID_PARAM 表示参数无效,输入buffer失败。 + * @return HDF_ERR_INVALID_OBJECT 表示对象无效,输入buffer失败。 + * @return HDF_ERR_MALLOC_FAIL 表示申请内存失败,输入buffer失败。 + * + * @since 3.2 + */ + EmptyThisBuffer([in] struct OmxCodecBuffer buffer); + + /** + * @brief 编解码输出填充buffer。 + * + * 此接口在组件处于OMX_StateExecuting或者OMX_StatePause状态时调用。 + * + * @param buffer 输入参数,指向{@link OmxCodecBuffer}结构体的指针。 + * + * @return HDF_SUCCESS 表示填充buffer成功。 + * @return HDF_ERR_INVALID_PARAM 表示参数无效,填充buffer失败。 + * @return HDF_ERR_INVALID_OBJECT 表示对象无效,填充buffer失败。 + * @return HDF_ERR_MALLOC_FAIL 表示申请内存失败,填充buffer失败。 + * + * @since 3.2 + */ + FillThisBuffer([in] struct OmxCodecBuffer buffer); + + /** + * @brief 设置Codec组件的回调函数。 + * + * 当组件处于OMX_StateLoaded状态时,使用此回调函数向上通知事件以及上报可用的输入输出信息。 + * + * @param callbacks 输入参数,指向回调函数{@link CodecCallbackType}对象指针。 + * @param appData 输入参数,指向应用程序定义的值的指针,该值将在回调期间返回。 + * + * @return HDF_SUCCESS 表示设置回调成功。 + * @return HDF_ERR_INVALID_PARAM 表示参数无效,设置回调失败。 + * @return HDF_ERR_INVALID_OBJECT 表示对象无效,设置回调失败。 + * @return HDF_ERR_MALLOC_FAIL 表示申请内存失败,设置回调失败。 + * + * @since 3.2 + */ + SetCallbacks([in] ICodecCallback callbacks, [in] long appData); + + /** + * @brief 组件去初始化。 + * + * 调用此接口使组件去初始化,当组件处于OMX_StateLoaded状态时,将直接关闭组件。 + * + * @return HDF_SUCCESS 表示去初始化成功。 + * @return HDF_ERR_INVALID_PARAM 表示参数无效,去初始化失败。 + * @return HDF_ERR_INVALID_OBJECT 表示对象无效,去初始化失败。 + * @return HDF_ERR_MALLOC_FAIL 表示申请内存失败,去初始化失败。 + * + * @since 3.2 + */ + ComponentDeInit(); + + /** + * @brief 使用已在EGL中申请的空间。 + * + * 此接口在以下情况下使用: + * - 当组件处于OMX_StateLoaded状态,并且已经向组件发送OMX_StateIdle状态转换请求。 + * - 当组件处于OMX_StateWaitForResources状态,所需的资源可用,并且组件已准备好进入OMX_StateIdle状态。 + * - 在去使能端口上,组件处于OMX_StateExecuting、OMX_StatePause或OMX_StateIdle状态。 + * + * @param portIndex 输入参数,指定的组件端口。 + * @param inBuffer 输入参数,指向{@link OmxCodecBuffer}结构体的指针。 + * @param outBuffer 输出参数,指向{@link OmxCodecBuffer}结构体的指针。 + * @param eglImage 输入参数,EGL申请的图像指针。 + * + * @return HDF_SUCCESS 表示使用成功。 + * @return HDF_ERR_INVALID_PARAM 表示参数无效,使用失败。 + * @return HDF_ERR_INVALID_OBJECT 表示对象无效,使用失败。 + * @return HDF_ERR_MALLOC_FAIL 表示申请内存失败,使用失败。 + * + * @since 3.2 + */ + UseEglImage([in] unsigned int portIndex, [in] struct OmxCodecBuffer inBuffer, [out] struct OmxCodecBuffer outBuffer, [in] byte[] eglImage); + + /** + * @brief 获取组件角色。 + * + * 根据组件角色索引获取对应组件角色。 + * + * @param role 输出参数,角色名称。 + * @param index 输入参数,角色的索引,一个组件可能支持多种角色。 + * + * @return HDF_SUCCESS 表示获取角色成功。 + * @return HDF_ERR_INVALID_PARAM 表示参数无效,获取角色失败。 + * @return HDF_ERR_INVALID_OBJECT 表示对象无效,获取角色失败。 + * @return HDF_ERR_MALLOC_FAIL 表示申请内存失败,获取角色失败。 + * + * @since 3.2 + */ + ComponentRoleEnum([out] unsigned char[] role, [in] unsigned int index); +} diff --git a/zh-cn/device_api/hdi/codec/v1_0/ICodecComponentManager.idl b/zh-cn/device_api/hdi/codec/v1_0/ICodecComponentManager.idl new file mode 100644 index 0000000000000000000000000000000000000000..3b8c3ebb0a9cb3259138631fea6790b9b298cebf --- /dev/null +++ b/zh-cn/device_api/hdi/codec/v1_0/ICodecComponentManager.idl @@ -0,0 +1,122 @@ +/* + * Copyright (c) 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. + */ + +/** + * @addtogroup Codec + * @{ + * + * @brief Codec模块接口定义。 + * + * Codec模块涉及自定义类型、音视频编解码组件初始化、参数设置、数据的轮转和控制等。 + * + * @since 3.2 + * @version 1.0 + */ + +/** + * @file ICodecComponentManager.idl + * + * @brief 主要包括Codec组件管理类接口。 + * + * Codec模块获取组件编解码能力集、创建组件和销毁组件等接口定义。 + * + * @since 3.2 + * @version 1.0 + */ + +/** + * @brief Codec组件管理类接口定义。 + * + * 主要提供以下功能: + * - 获取Codec编解码组件数量以及编解码能力集表。 + * - 创建/销毁Codec组件。 + */ + +package ohos.hdi.codec.v1_0; + +import ohos.hdi.codec.v1_0.CodecTypes; +import ohos.hdi.codec.v1_0.ICodecComponent; + +interface ICodecComponentManager { + + /** + * @brief 获取Codec编解码组件数量。 + * + * 通过此接口获取Codec编解码组件数量,用来获取全部编解码能力集。 + * + * @param count 输出参数,编解码组件数量。 + * + * @return HDF_SUCCESS 表示获取编解码组件数量成功。 + * @return HDF_ERR_INVALID_PARAM 表示参数无效,获取编解码组件数量失败。 + * @return HDF_ERR_INVALID_OBJECT 表示对象无效,获取编解码组件数量失败。 + * @return HDF_ERR_MALLOC_FAIL 表示申请内存失败,获取编解码组件数量失败。 + * + * @since 3.2 + */ + GetComponentNum([out] int count); + + /** + * @brief 获取编解码能力集表。 + * + * 用户可通过此接口了解Codec模块提供了哪些编解码能力,对应的能力体现在{@link CodecCompCapability}结构体。 + * + * @param capList 输出参数,返回全部组件的能力集表{@link CodecCompCapability}。 + * @param count 输入参数,编解码组件数量,由{@link GetComponentNum}获得。 + * + * @return HDF_SUCCESS 表示获取能力集表成功。 + * @return HDF_ERR_INVALID_PARAM 表示参数无效,获取能力集表失败。 + * @return HDF_ERR_INVALID_OBJECT 表示对象无效,获取能力集表失败。 + * @return HDF_ERR_MALLOC_FAIL 表示申请内存失败,获取能力集表失败。 + * + * @since 3.2 + */ + GetComponentCapabilityList([out] struct CodecCompCapability[] capList, [in] int count); + + /** + * @brief 创建Codec组件实例。 + * + * 根据组件名称创建Codec组件实例。 + * + * @param component 输出参数,指向Codec组件的指针。 + * @param componentId 输出参数,创建组件的Id。 + * @param compName 输入参数,组件名称。 + * @param appData 输入参数,指向应用程序定义的值的指针,该值将在回调期间返回。 + * @param callbacks 输入参数,回调接口,指向OMX_CALLBACKTYPE结构的指针,详见{@link CodecCallbackType}。 + * + * @return HDF_SUCCESS 表示创建组件成功。 + * @return HDF_ERR_INVALID_PARAM 表示参数无效,创建组件失败。 + * @return HDF_ERR_INVALID_OBJECT 表示对象无效,创建组件失败。 + * @return HDF_ERR_MALLOC_FAIL 表示申请内存失败,创建组件失败。 + * + * @since 3.2 + */ + CreateComponent([out] ICodecComponent component, [out] unsigned int componentId, [in] String compName, [in] long appData, [in] ICodecCallback callbacks); + + /** + * @brief 销毁组件实例。 + * + * 销毁指定的Codec组件。 + * + * @param componentId 输入参数,需要销毁的Codec组件。 + * + * @return HDF_SUCCESS 表示销毁组件成功。 + * @return HDF_ERR_INVALID_PARAM 表示参数无效,销毁组件失败。 + * @return HDF_ERR_INVALID_OBJECT 表示对象无效,销毁组件失败。 + * @return HDF_ERR_MALLOC_FAIL 表示申请内存失败,销毁组件失败。 + * + * @since 3.2 + */ + DestoryComponent([in] unsigned int componentId); +}