mirror of
https://github.com/openharmony/interface_sdk_c.git
synced 2026-08-24 14:32:50 -04:00
!5688 merge OpenHarmony-7.0-Release into OpenHarmony-7.0-Release
add zh-cn av Created-by: yjzy2025 Commit-by: yjzy2025 Merged-by: openharmony_ci Description: ### 相关的Issue ### 原因(目的、解决的问题等) ### 描述(做了什么,变更了什么) ### 自检结果(结果截图添加到下面) - [x] 是否通过C语法扫描 - [x] 是否通过注释规则扫描 - [x] 是否更新json文件 - [x] 实现代码是否已经合入 - [x] 目标是否已经添加到interface/sdk_c仓ndk依赖目标(ndk_targets.gni)里 - [x] 头文件library声明与SDK so库名称一致 ### 兼容性影响评估,如有影响请写明(Y/N) - [ ] 不兼容 - [ ] 是否经过评审 ### L0新增用例自检结果 - [ ] 是,有新增L0用例,且完成自检 - [x] 否 ### API参考文档影响评估(提供docs仓pr链接) - [ ] 是,已刷新API参考文档 - [x] 否,不涉及刷新API参考文档 See merge request: openharmony/interface_sdk_c!5688
This commit is contained in:
@@ -167,7 +167,7 @@ OH_AVErrCode OH_VideoEncoder_CreateSecondaryFromPrimary(OH_AVCodec *primary, OH_
|
||||
OH_AVErrCode OH_VideoEncoder_Destroy(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief Sets an OH_AVCodecCallback callback so that your application can respond to events generated by a video
|
||||
* @brief Sets an OH_AVCodecAsyncCallback callback so that your application can respond to events generated by a video
|
||||
* encoder. This function must be called prior to {@link OH_VideoEncoder_Prepare}.
|
||||
*
|
||||
* @param codec Pointer to a video encoder instance.
|
||||
@@ -489,7 +489,8 @@ OH_AVErrCode OH_VideoEncoder_PushInputBuffer(OH_AVCodec *codec, uint32_t index);
|
||||
* @brief Pushes the parameter configured for a frame with the given index to a video encoder in surface mode.
|
||||
*
|
||||
* @param codec Pointer to a video encoder instance.
|
||||
* @param index Index of the input parameter buffer. The value is provided by {@link OH_AVCodecOnNeedInputBuffer}.
|
||||
* @param index Index of the input parameter buffer. The value is provided by
|
||||
* {@link OH_VideoEncoder_OnNeedInputParameter}.
|
||||
* @return {@link AV_ERR_OK}: The operation is successful.
|
||||
* <br>{@link AV_ERR_NO_MEMORY}: An internal exception occurs in the encoder instance, for example,
|
||||
* an unexpected nullptr.
|
||||
@@ -510,7 +511,7 @@ OH_AVErrCode OH_VideoEncoder_PushInputParameter(OH_AVCodec *codec, uint32_t inde
|
||||
* [Video Encoding](docroot://media/avcodec/video-encoding.md#surface-mode).
|
||||
*
|
||||
* @param codec Pointer to a video encoder instance.
|
||||
* @param index Index of the output buffer. The value is provided by {@link OH_AVCodecOnNeedInputBuffer}.
|
||||
* @param index Index of the output buffer. The value is provided by {@link OH_AVCodecOnNewOutputBuffer}.
|
||||
* @return {@link AV_ERR_OK}: The operation is successful.
|
||||
* <br>{@link AV_ERR_NO_MEMORY}: An internal exception occurs in the encoder instance, for example,
|
||||
* an unexpected nullptr.
|
||||
|
||||
@@ -0,0 +1,285 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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 CodecBase
|
||||
* @{
|
||||
*
|
||||
* @brief CodecBase模块提供用于音视频封装、解封装、编解码基础功能的变量、属性以及函数。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @since 9
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @file avcodec_audio_channel_layout.h
|
||||
*
|
||||
* @brief 音频编解码声道布局枚举的声明。
|
||||
*
|
||||
* @kit AVCodecKit
|
||||
* @include <multimedia/player_framework/avcodec_audio_channel_layout.h>
|
||||
* @library libnative_media_codecbase.so
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @deprecated since 11
|
||||
* @since 10
|
||||
*/
|
||||
|
||||
#ifndef AVCODEC_AUDIO_CHANNEL_LAYOUT_H
|
||||
#define AVCODEC_AUDIO_CHANNEL_LAYOUT_H
|
||||
#include <cstdint>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief 音频声道数集合,
|
||||
* 将每一个声道数映射为int64的变量。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioChannelSet}
|
||||
* @since 10
|
||||
*/
|
||||
typedef enum AudioChannelSet : uint64_t {
|
||||
/** 左前声道 */
|
||||
FRONT_LEFT = 1ULL << 0U,
|
||||
/** 右前声道 */
|
||||
FRONT_RIGHT = 1ULL << 1U,
|
||||
/** 中前声道 */
|
||||
FRONT_CENTER = 1ULL << 2U,
|
||||
/** 低频声道 */
|
||||
LOW_FREQUENCY = 1ULL << 3U,
|
||||
/** 左后声道 */
|
||||
BACK_LEFT = 1ULL << 4U,
|
||||
/** 右后声道 */
|
||||
BACK_RIGHT = 1ULL << 5U,
|
||||
/** 左前中置声道 */
|
||||
FRONT_LEFT_OF_CENTER = 1ULL << 6U,
|
||||
/** 右前中置声道 */
|
||||
FRONT_RIGHT_OF_CENTER = 1ULL << 7U,
|
||||
/** 后方中置声道 */
|
||||
BACK_CENTER = 1ULL << 8U,
|
||||
/** 左侧声道 */
|
||||
SIDE_LEFT = 1ULL << 9U,
|
||||
/** 右侧声道 */
|
||||
SIDE_RIGHT = 1ULL << 10U,
|
||||
/** 上方中置声道 */
|
||||
TOP_CENTER = 1ULL << 11U,
|
||||
/** 上方左前声道 */
|
||||
TOP_FRONT_LEFT = 1ULL << 12U,
|
||||
/** 上方中前声道 */
|
||||
TOP_FRONT_CENTER = 1ULL << 13U,
|
||||
/** 上方右前声道 */
|
||||
TOP_FRONT_RIGHT = 1ULL << 14U,
|
||||
/** 上方左后声道 */
|
||||
TOP_BACK_LEFT = 1ULL << 15U,
|
||||
/** 上方中后声道 */
|
||||
TOP_BACK_CENTER = 1ULL << 16U,
|
||||
/** 上方右后声道 */
|
||||
TOP_BACK_RIGHT = 1ULL << 17U,
|
||||
/** 立体声左声道 */
|
||||
STEREO_LEFT = 1ULL << 29U,
|
||||
/** 立体声右声道 */
|
||||
STEREO_RIGHT = 1ULL << 30U,
|
||||
/** 宽左声道 */
|
||||
WIDE_LEFT = 1ULL << 31U,
|
||||
/** 宽右声道 */
|
||||
WIDE_RIGHT = 1ULL << 32U,
|
||||
/** 左环绕声道 */
|
||||
SURROUND_DIRECT_LEFT = 1ULL << 33U,
|
||||
/** 右环绕声道 */
|
||||
SURROUND_DIRECT_RIGHT = 1ULL << 34U,
|
||||
/** 低频声道2 */
|
||||
LOW_FREQUENCY_2 = 1ULL << 35U,
|
||||
/** 上方左侧声道 */
|
||||
TOP_SIDE_LEFT = 1ULL << 36U,
|
||||
/** 上方右侧声道 */
|
||||
TOP_SIDE_RIGHT = 1ULL << 37U,
|
||||
/** 下方中前声道 */
|
||||
BOTTOM_FRONT_CENTER = 1ULL << 38U,
|
||||
/** 下方左前声道 */
|
||||
BOTTOM_FRONT_LEFT = 1ULL << 39U,
|
||||
/** 下方右前声道 */
|
||||
BOTTOM_FRONT_RIGHT = 1ULL << 40U,
|
||||
|
||||
/* ACN(Ambisonic Channel Number立体声声道数)格式 */
|
||||
|
||||
/* 零阶一阶立体声声道数 */
|
||||
|
||||
/** 零阶立体声声道数0 */
|
||||
AMBISONICS_ACN0 = 1ULL << 41U,
|
||||
/** 一阶立体声声道数1 */
|
||||
AMBISONICS_ACN1 = 1ULL << 42U,
|
||||
/** 一阶立体声声道数2 */
|
||||
AMBISONICS_ACN2 = 1ULL << 43U,
|
||||
/** 一阶立体声声道数3 */
|
||||
AMBISONICS_ACN3 = 1ULL << 44U,
|
||||
/** 同于零阶立体声声道数0 */
|
||||
AMBISONICS_W = AMBISONICS_ACN0,
|
||||
/** 同于一阶立体声声道数1 */
|
||||
AMBISONICS_Y = AMBISONICS_ACN1,
|
||||
/** 同于一阶立体声声道数2 */
|
||||
AMBISONICS_Z = AMBISONICS_ACN2,
|
||||
/** 同于一阶立体声声道数3 */
|
||||
AMBISONICS_X = AMBISONICS_ACN3,
|
||||
|
||||
/* 二阶立体声声道数*/
|
||||
|
||||
/** 二阶立体声声道数4 */
|
||||
AMBISONICS_ACN4 = 1ULL << 45U,
|
||||
/** 二阶立体声声道数5 */
|
||||
AMBISONICS_ACN5 = 1ULL << 46U,
|
||||
/** 二阶立体声声道数6 */
|
||||
AMBISONICS_ACN6 = 1ULL << 47U,
|
||||
/** 二阶立体声声道数7 */
|
||||
AMBISONICS_ACN7 = 1ULL << 48U,
|
||||
/** 二阶立体声声道数8 */
|
||||
AMBISONICS_ACN8 = 1ULL << 49U,
|
||||
|
||||
/* 三阶立体声声道数*/
|
||||
|
||||
/** 三阶立体声声道数9 */
|
||||
AMBISONICS_ACN9 = 1ULL << 50U,
|
||||
/** 三阶立体声声道数10 */
|
||||
AMBISONICS_ACN10 = 1ULL << 51U,
|
||||
/** 三阶立体声声道数11 */
|
||||
AMBISONICS_ACN11 = 1ULL << 52U,
|
||||
/** 三阶立体声声道数12 */
|
||||
AMBISONICS_ACN12 = 1ULL << 53U,
|
||||
/** 三阶立体声声道数13 */
|
||||
AMBISONICS_ACN13 = 1ULL << 54U,
|
||||
/** 三阶立体声声道数14 */
|
||||
AMBISONICS_ACN14 = 1ULL << 55U,
|
||||
/** 三阶立体声声道数15 */
|
||||
AMBISONICS_ACN15 = 1ULL << 56U,
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief 音频声道数类型,
|
||||
* 将用户申请的解码器输出格式表示为编解码器的声道类型。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioChannelLayout}
|
||||
* @since 10
|
||||
*/
|
||||
typedef enum AudioChannelLayout : uint64_t {
|
||||
/** 未知通道布局 */
|
||||
UNKNOWN_CHANNEL_LAYOUT = 0,
|
||||
/** 单通道布局 */
|
||||
MONO = (AudioChannelSet::FRONT_CENTER),
|
||||
/** 立体声布局 */
|
||||
STEREO = (AudioChannelSet::FRONT_LEFT | AudioChannelSet::FRONT_RIGHT),
|
||||
/** 2.1布局 */
|
||||
CH_2POINT1 = (STEREO | AudioChannelSet::LOW_FREQUENCY),
|
||||
/** 2_1布局 */
|
||||
CH_2_1 = (STEREO | AudioChannelSet::BACK_CENTER),
|
||||
/** 环绕布局 */
|
||||
SURROUND = (STEREO | AudioChannelSet::FRONT_CENTER),
|
||||
/** 3.1布局 */
|
||||
CH_3POINT1 = (SURROUND | AudioChannelSet::LOW_FREQUENCY),
|
||||
/** 4.0布局 */
|
||||
CH_4POINT0 = (SURROUND | AudioChannelSet::BACK_CENTER),
|
||||
/** 4.1布局 */
|
||||
CH_4POINT1 = (CH_4POINT0 | AudioChannelSet::LOW_FREQUENCY),
|
||||
/** 2_2布局 */
|
||||
CH_2_2 = (STEREO | AudioChannelSet::SIDE_LEFT | AudioChannelSet::SIDE_RIGHT),
|
||||
/** 四角形布局 */
|
||||
QUAD = (STEREO | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_RIGHT),
|
||||
/** 5.0布局 */
|
||||
CH_5POINT0 = (SURROUND | AudioChannelSet::SIDE_LEFT | AudioChannelSet::SIDE_RIGHT),
|
||||
/** 5.1布局 */
|
||||
CH_5POINT1 = (CH_5POINT0 | AudioChannelSet::LOW_FREQUENCY),
|
||||
/** 5.0后置布局 */
|
||||
CH_5POINT0_BACK = (SURROUND | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_RIGHT),
|
||||
/** 5.1后置布局 */
|
||||
CH_5POINT1_BACK = (CH_5POINT0_BACK | AudioChannelSet::LOW_FREQUENCY),
|
||||
/** 6.0布局 */
|
||||
CH_6POINT0 = (CH_5POINT0 | AudioChannelSet::BACK_CENTER),
|
||||
/** 6.0前置布局 */
|
||||
CH_6POINT0_FRONT = (CH_2_2 | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER),
|
||||
/** 六角形布局 */
|
||||
HEXAGONAL = (CH_5POINT0_BACK | AudioChannelSet::BACK_CENTER),
|
||||
/** 6.1布局 */
|
||||
CH_6POINT1 = (CH_5POINT1 | AudioChannelSet::BACK_CENTER),
|
||||
/** 6.1后置布局 */
|
||||
CH_6POINT1_BACK = (CH_5POINT1_BACK | AudioChannelSet::BACK_CENTER),
|
||||
/** 6.1前置布局 */
|
||||
CH_6POINT1_FRONT = (CH_6POINT0_FRONT | AudioChannelSet::LOW_FREQUENCY),
|
||||
/** 7.0布局 */
|
||||
CH_7POINT0 = (CH_5POINT0 | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_RIGHT),
|
||||
/** 7.0前置布局 */
|
||||
CH_7POINT0_FRONT = (CH_5POINT0 | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER),
|
||||
/** 7.1布局 */
|
||||
CH_7POINT1 = (CH_5POINT1 | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_RIGHT),
|
||||
/** 7.1宽布局 */
|
||||
CH_7POINT1_WIDE = (CH_5POINT1 | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER),
|
||||
/** 7.1后置宽布局 */
|
||||
CH_7POINT1_WIDE_BACK =
|
||||
(CH_5POINT1_BACK | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER),
|
||||
/** 3.1.2布局 */
|
||||
CH_3POINT1POINT2 = (CH_3POINT1 | AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT),
|
||||
/** 5.1.2布局 */
|
||||
CH_5POINT1POINT2 = (CH_5POINT1 | AudioChannelSet::TOP_SIDE_LEFT | AudioChannelSet::TOP_SIDE_RIGHT),
|
||||
/** 5.1.4布局 */
|
||||
CH_5POINT1POINT4 = (CH_5POINT1 | AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT |
|
||||
AudioChannelSet::TOP_BACK_LEFT | AudioChannelSet::TOP_BACK_RIGHT),
|
||||
/** 7.1.2布局 */
|
||||
CH_7POINT1POINT2 = (CH_7POINT1 | AudioChannelSet::TOP_SIDE_LEFT | AudioChannelSet::TOP_SIDE_RIGHT),
|
||||
/** 7.1.4布局 */
|
||||
CH_7POINT1POINT4 = (CH_7POINT1 | AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT |
|
||||
AudioChannelSet::TOP_BACK_LEFT | AudioChannelSet::TOP_BACK_RIGHT),
|
||||
/** 9.1.4布局 */
|
||||
CH_9POINT1POINT4 = (CH_7POINT1POINT4 | AudioChannelSet::WIDE_LEFT | AudioChannelSet::WIDE_RIGHT),
|
||||
/** 9.1.6布局 */
|
||||
CH_9POINT1POINT6 = (CH_9POINT1POINT4 | AudioChannelSet::TOP_SIDE_LEFT | AudioChannelSet::TOP_SIDE_RIGHT),
|
||||
/** 10.2布局 */
|
||||
CH_10POINT2 = (AudioChannelSet::FRONT_LEFT | AudioChannelSet::FRONT_RIGHT | AudioChannelSet::FRONT_CENTER |
|
||||
AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT | AudioChannelSet::BACK_LEFT |
|
||||
AudioChannelSet::BACK_RIGHT | AudioChannelSet::BACK_CENTER | AudioChannelSet::SIDE_LEFT |
|
||||
AudioChannelSet::SIDE_RIGHT | AudioChannelSet::WIDE_LEFT | AudioChannelSet::WIDE_RIGHT),
|
||||
/** 22.2布局 */
|
||||
CH_22POINT2 = (CH_7POINT1POINT4 | AudioChannelSet::FRONT_LEFT_OF_CENTER | AudioChannelSet::FRONT_RIGHT_OF_CENTER |
|
||||
AudioChannelSet::BACK_CENTER | AudioChannelSet::TOP_CENTER | AudioChannelSet::TOP_FRONT_CENTER |
|
||||
AudioChannelSet::TOP_BACK_CENTER | AudioChannelSet::TOP_SIDE_LEFT | AudioChannelSet::TOP_SIDE_RIGHT |
|
||||
AudioChannelSet::BOTTOM_FRONT_LEFT | AudioChannelSet::BOTTOM_FRONT_RIGHT |
|
||||
AudioChannelSet::BOTTOM_FRONT_CENTER | AudioChannelSet::LOW_FREQUENCY_2),
|
||||
/** 八边形布局 */
|
||||
OCTAGONAL = (CH_5POINT0 | AudioChannelSet::BACK_LEFT | AudioChannelSet::BACK_CENTER | AudioChannelSet::BACK_RIGHT),
|
||||
/** 六边形布局 */
|
||||
HEXADECAGONAL =
|
||||
(OCTAGONAL | AudioChannelSet::WIDE_LEFT | AudioChannelSet::WIDE_RIGHT | AudioChannelSet::TOP_BACK_LEFT |
|
||||
AudioChannelSet::TOP_BACK_RIGHT | AudioChannelSet::TOP_BACK_CENTER | AudioChannelSet::TOP_FRONT_CENTER |
|
||||
AudioChannelSet::TOP_FRONT_LEFT | AudioChannelSet::TOP_FRONT_RIGHT),
|
||||
/** 立体声下混布局 */
|
||||
STEREO_DOWNMIX = (AudioChannelSet::STEREO_LEFT | AudioChannelSet::STEREO_RIGHT),
|
||||
/** 高阶立体声一阶布局 */
|
||||
HOA_FIRST = AudioChannelSet::AMBISONICS_ACN0 | AudioChannelSet::AMBISONICS_ACN1 | AudioChannelSet::AMBISONICS_ACN2 |
|
||||
AudioChannelSet::AMBISONICS_ACN3,
|
||||
/** 高阶立体声二阶布局 */
|
||||
HOA_SECOND = HOA_FIRST | AudioChannelSet::AMBISONICS_ACN4 | AudioChannelSet::AMBISONICS_ACN5 |
|
||||
AudioChannelSet::AMBISONICS_ACN6 | AudioChannelSet::AMBISONICS_ACN7 | AudioChannelSet::AMBISONICS_ACN8,
|
||||
/** 高阶立体声三阶布局 */
|
||||
HOA_THIRD = HOA_SECOND | AudioChannelSet::AMBISONICS_ACN9 | AudioChannelSet::AMBISONICS_ACN10 |
|
||||
AudioChannelSet::AMBISONICS_ACN11 | AudioChannelSet::AMBISONICS_ACN12 |
|
||||
AudioChannelSet::AMBISONICS_ACN13 | AudioChannelSet::AMBISONICS_ACN14 |
|
||||
AudioChannelSet::AMBISONICS_ACN15,
|
||||
};
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif // AVCODEC_AUDIO_CHANNEL_LAYOUT_H
|
||||
|
||||
/** @} */
|
||||
@@ -0,0 +1,552 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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 AVCapability
|
||||
* @{
|
||||
*
|
||||
* @brief AVCapability模块提供用于编解码能力查询的函数。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @since 10
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file native_avcapability.h
|
||||
*
|
||||
* @brief 声明用于编解码能力查询到的Native API。
|
||||
* @sample [AVCodec](https://gitcode.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Media/AVCodec)
|
||||
*
|
||||
* @kit AVCodecKit
|
||||
* @include <multimedia/player_framework/native_avcapability.h>
|
||||
* @library libnative_media_codecbase.so
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @since 10
|
||||
*/
|
||||
|
||||
#ifndef NATIVE_AVCAPABILITY_H
|
||||
#define NATIVE_AVCAPABILITY_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include "native_averrors.h"
|
||||
#include "native_avformat.h"
|
||||
#include "native_avcodec_base.h"
|
||||
#include "native_buffer.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief 为OH_AVCapability接口定义native层对象。
|
||||
*
|
||||
* @since 10
|
||||
*/
|
||||
typedef struct OH_AVCapability OH_AVCapability;
|
||||
|
||||
/**
|
||||
* @brief 范围包含最小值和最大值。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @since 10
|
||||
*/
|
||||
typedef struct OH_AVRange {
|
||||
/**最小值。 */
|
||||
int32_t minVal;
|
||||
/**最大值。 */
|
||||
int32_t maxVal;
|
||||
} OH_AVRange;
|
||||
|
||||
/**
|
||||
* @brief 编解码器类别。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @since 10
|
||||
*/
|
||||
typedef enum OH_AVCodecCategory {
|
||||
/** 硬件编解码。 */
|
||||
HARDWARE = 0,
|
||||
/** 软件编解码。 */
|
||||
SOFTWARE
|
||||
} OH_AVCodecCategory;
|
||||
|
||||
/**
|
||||
* @brief 编解码器类型。
|
||||
*
|
||||
* @since 24
|
||||
*/
|
||||
typedef enum OH_AVCodecType {
|
||||
/**
|
||||
* @brief 表示视频编码器。
|
||||
* @since 24
|
||||
*/
|
||||
OH_AVCODEC_TYPE_VIDEO_ENCODER = 0,
|
||||
/**
|
||||
* @brief 表示视频解码器。
|
||||
* @since 24
|
||||
*/
|
||||
OH_AVCODEC_TYPE_VIDEO_DECODER = 1,
|
||||
/**
|
||||
* @brief 表示音频编码器。
|
||||
* @since 24
|
||||
*/
|
||||
OH_AVCODEC_TYPE_AUDIO_ENCODER = 2,
|
||||
/**
|
||||
* @brief 表示音频解码器。
|
||||
* @since 24
|
||||
*/
|
||||
OH_AVCODEC_TYPE_AUDIO_DECODER = 3
|
||||
} OH_AVCodecType;
|
||||
|
||||
/**
|
||||
* @brief 可以在特定编解码器场景中使用的可选特性。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @since 12
|
||||
*/
|
||||
typedef enum OH_AVCapabilityFeature {
|
||||
/** 编解码器支持时域可分层特性,只用于视频编码场景。 */
|
||||
VIDEO_ENCODER_TEMPORAL_SCALABILITY = 0,
|
||||
/** 编解码器支持长期参考帧特性,只用于视频编码场景。 */
|
||||
VIDEO_ENCODER_LONG_TERM_REFERENCE = 1,
|
||||
/** 编解码器支持低时延特性,只用于视频解码场景。 */
|
||||
VIDEO_LOW_LATENCY = 2,
|
||||
/** 编解码器支持B帧特性,只用于视频编码场景。
|
||||
* @since 20
|
||||
*/
|
||||
VIDEO_ENCODER_B_FRAME = 7,
|
||||
/**
|
||||
* @brief 解码器支持按解码顺序输出帧特性,只用于视频解码场景。
|
||||
*
|
||||
* @since 26.0.0
|
||||
*/
|
||||
VIDEO_DECODER_OUTPUT_IN_DECODING_ORDER = 8,
|
||||
/**
|
||||
* @brief 编码器支持视频编码前处理降采样特性,该能力仅适用于视频编码器。
|
||||
*
|
||||
* @note 仅当编码器通过{@link OH_VideoEncoder_CreatePrimaryWithPreproc}
|
||||
* 或{@link OH_VideoEncoder_CreateSecondaryFromPrimary}接口创建时,方可启用该能力。
|
||||
* @since 26.0.0
|
||||
*/
|
||||
VIDEO_ENCODER_PREPROC_DOWNSAMPLING = 9,
|
||||
/**
|
||||
* @brief 编码器支持视频编码前处理裁剪特性,该特性仅适用于视频编码器。
|
||||
*
|
||||
* @note 仅当编码器通过{@link OH_VideoEncoder_CreatePrimaryWithPreproc}
|
||||
* 或{@link OH_VideoEncoder_CreateSecondaryFromPrimary}接口创建时,方可启用该能力。
|
||||
* @since 26.0.0
|
||||
*/
|
||||
VIDEO_ENCODER_PREPROC_CROP = 10,
|
||||
} OH_AVCapabilityFeature;
|
||||
|
||||
/**
|
||||
* @brief 获取系统推荐的编解码器能力。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @param mime MIME类型描述字符串,请参阅{@link AVCODEC_MIME_TYPE}。
|
||||
* @param isEncoder 编码器为true,解码器为false。
|
||||
* @return 如果现有编解码器匹配,则返回能力实例,如果指定的MIME类型与任何现有编解码器不匹配,则返回NULL。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVCapability *OH_AVCodec_GetCapability(const char *mime, bool isEncoder);
|
||||
|
||||
/**
|
||||
* @brief 获取指定类别中的编解码器能力。
|
||||
* 通过指定类别,匹配的编解码器仅限于硬件编解码器或软件编解码器。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @param mime MIME类型描述字符串,请参阅{@link AVCODEC_MIME_TYPE}。
|
||||
* @param isEncoder 编码器为true,解码器为false。
|
||||
* @param category 编解码器类别。
|
||||
* @return 如果现有编解码器匹配,则返回能力实例,如果指定的MIME类型与任何现有编解码器不匹配,则返回NULL。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVCapability *OH_AVCodec_GetCapabilityByCategory(const char *mime, bool isEncoder, OH_AVCodecCategory category);
|
||||
|
||||
/**
|
||||
* @brief 获取指定编解码器类型的能力列表。
|
||||
*
|
||||
* 此功能会根据提供的编解码器类型检索出系统支持的所有匹配的编解码器能力。
|
||||
* @note 编解码器能力列表的内存由系统底层全局维护,调用者无需管理其生命周期,不得手动分配或释放此内存。
|
||||
* @param codecType 指定要查询的编解码器类型。
|
||||
* @param count 输出参数。指向一个uint32_t变量的指针,用于存储匹配到的编解码器能力数量。
|
||||
* @return 如果找到匹配项,则返回指向OH_AVCapability实例数组的指针。\n
|
||||
* 如果未找到匹配的编解码器或发生错误,则返回NULL。
|
||||
* @since 24
|
||||
*/
|
||||
OH_AVCapability **OH_AVCodec_GetCapabilityList(OH_AVCodecType codecType, uint32_t *count);
|
||||
|
||||
/**
|
||||
* @brief 检查能力实例是否描述了硬件编解码器。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @param capability 编解码能力指针。
|
||||
* @return 如果能力实例描述的是硬件编解码器,则返回true,如果功能实例描述的是软件编解码器,则为false。
|
||||
* @since 10
|
||||
*/
|
||||
bool OH_AVCapability_IsHardware(OH_AVCapability *capability);
|
||||
|
||||
/**
|
||||
* @brief 检查能力实例是否描述了一个安全解码器。
|
||||
*
|
||||
* @param capability 编解码能力指针。
|
||||
* @return 如果能力实例描述的是安全解码器,则返回true。\n
|
||||
* 如果能力实例描述的是非安全解码器,则为false。
|
||||
* @since 24
|
||||
*/
|
||||
bool OH_AVCapability_IsSecure(OH_AVCapability *capability);
|
||||
|
||||
/**
|
||||
* @brief 获取编解码器名称。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @param capability 编解码能力指针。
|
||||
* @return 返回编解码器名称字符串。
|
||||
* @since 10
|
||||
*/
|
||||
const char *OH_AVCapability_GetName(OH_AVCapability *capability);
|
||||
|
||||
/**
|
||||
* @brief 获取编解码器的MIME类型。
|
||||
*
|
||||
* @param capability 编解码能力指针。
|
||||
* @return 返回编解码器的MIME类型字符串。
|
||||
* @since 24
|
||||
*/
|
||||
const char *OH_AVCapability_GetMimeType(OH_AVCapability *capability);
|
||||
|
||||
/**
|
||||
* @brief 检查编解码器的MIME类型是否与指定的MIME类型匹配。
|
||||
*
|
||||
* @param capability 编解码能力指针。
|
||||
* @param mimeType 要检查的目标MIME类型字符串。
|
||||
* @return 如果MIME类型匹配则返回true,否则返回false。
|
||||
* @since 24
|
||||
*/
|
||||
bool OH_AVCapability_CheckMimeType(OH_AVCapability *capability, const char *mimeType);
|
||||
|
||||
/**
|
||||
* @brief 获取编解码器支持的最大实例数。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @param capability 编解码能力指针。
|
||||
* @return 返回支持的最大编解码器实例数。
|
||||
* @since 10
|
||||
*/
|
||||
int32_t OH_AVCapability_GetMaxSupportedInstances(OH_AVCapability *capability);
|
||||
|
||||
/**
|
||||
* @brief 获取编码器支持的比特率范围。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @param capability 编码器能力指针。如果给的是解码器能力指针,会导致未定义行为。
|
||||
* @param bitrateRange 输出参数。编码器码率范围。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:能力实例无效,或者指向编码器码率范围的指针为空指针。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AVCapability_GetEncoderBitrateRange(OH_AVCapability *capability, OH_AVRange *bitrateRange);
|
||||
|
||||
/**
|
||||
* @brief 检查编码器是否支持特定的比特率模式。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @param capability 编码器能力指针。如果给的是解码器能力指针,会导致未定义行为。
|
||||
* @param bitrateMode 比特率模式。
|
||||
* @return 如果支持该比特率模式,则返回true;如果不支持该比特率模式,则返回false。
|
||||
* @since 10
|
||||
*/
|
||||
bool OH_AVCapability_IsEncoderBitrateModeSupported(OH_AVCapability *capability, OH_BitrateMode bitrateMode);
|
||||
|
||||
/**
|
||||
* @brief 获取编码器支持的质量范围。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @param capability 编码器能力指针。如果给的是解码器能力指针,会导致未定义行为。
|
||||
* @param qualityRange 输出参数。编码器质量范围。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:能力实例无效,或者指向编码器质量范围的指针为空指针。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AVCapability_GetEncoderQualityRange(OH_AVCapability *capability, OH_AVRange *qualityRange);
|
||||
|
||||
/**
|
||||
* @brief 获取编码器支持的编码器复杂性范围。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @param capability 编码器能力指针。如果给的是解码器能力指针,会导致未定义行为。
|
||||
* @param complexityRange 输出参数。编码器复杂度范围。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:能力实例无效,或者指向编码器复杂度范围的指针为空指针。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AVCapability_GetEncoderComplexityRange(OH_AVCapability *capability, OH_AVRange *complexityRange);
|
||||
|
||||
/**
|
||||
* @brief 获取音频编解码器支持的采样率。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @param capability 音频编解码能力指针。如果给的是视频编解码器能力指针,会导致未定义行为。
|
||||
* @param sampleRates 输出参数。指向采样率数组的指针。
|
||||
* @param sampleRateNum 输出参数。采样率数组的元素数目。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:能力实例无效,或者指向采样率数组的指针为空指针,或者指向采样率数组的元素数目的指针为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_NO_MEMORY:内部使用内存分配失败。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AVCapability_GetAudioSupportedSampleRates(OH_AVCapability *capability, const int32_t **sampleRates,
|
||||
uint32_t *sampleRateNum);
|
||||
|
||||
/**
|
||||
* @brief 获取音频编解码器支持的采样率范围。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @param capability 音频编解码能力指针。如果给的是视频编解码器能力指针,会导致未定义行为。
|
||||
* @param sampleRateRanges 输出参数。指向采样率范围数组的指针。
|
||||
* @param rangesNum 输出参数。采样率范围数组的元素数目。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:能力实例无效,或者指向采样率范围数组的指针为空指针,或者指向采样率范围数组的元素数目的指针为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_NO_MEMORY:内部使用内存分配失败。
|
||||
* @since 20
|
||||
*/
|
||||
OH_AVErrCode OH_AVCapability_GetAudioSupportedSampleRateRanges(OH_AVCapability *capability,
|
||||
OH_AVRange **sampleRateRanges, uint32_t *rangesNum);
|
||||
|
||||
/**
|
||||
* @brief 获取音频编解码器支持的音频通道计数范围。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @param capability 音频编解码能力指针。如果给的是视频编解码器能力指针,会导致未定义行为。
|
||||
* @param channelCountRange 输出参数。音频通道计数范围。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:能力实例无效,或者指向音频通道计数范围的指针为空指针。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AVCapability_GetAudioChannelCountRange(OH_AVCapability *capability, OH_AVRange *channelCountRange);
|
||||
|
||||
/**
|
||||
* @brief 获取视频编解码器支持的视频宽度对齐。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @param capability 视频编解码能力指针。如果给的是音频编解码器能力指针,会导致未定义行为。
|
||||
* @param widthAlignment 输出参数。视频宽度对齐。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:能力实例无效,或者指向视频宽度对齐的指针为空指针。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AVCapability_GetVideoWidthAlignment(OH_AVCapability *capability, int32_t *widthAlignment);
|
||||
|
||||
/**
|
||||
* @brief 获取视频编解码器支持的视频高度对齐。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @param capability 视频编解码能力指针。如果给的是音频编解码器能力指针,会导致未定义行为。
|
||||
* @param heightAlignment 输出参数。视频高度对齐。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:能力实例无效,或者指向视频高度对齐的指针为空指针。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AVCapability_GetVideoHeightAlignment(OH_AVCapability *capability, int32_t *heightAlignment);
|
||||
|
||||
/**
|
||||
* @brief 获取指定高度情况下视频编解码器支持的视频宽度范围。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @param capability 视频编解码能力指针。如果给的是音频编解码器能力指针,会导致未定义行为。
|
||||
* @param height 视频垂直像素数。
|
||||
* @param widthRange 输出参数。视频宽度范围。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:能力实例无效,或者高度不在通过{@link OH_AVCapability_GetVideoHeightRange}获取支持的高度范围中,或者指向宽度范围的指针为空指针。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AVCapability_GetVideoWidthRangeForHeight(OH_AVCapability *capability, int32_t height,
|
||||
OH_AVRange *widthRange);
|
||||
|
||||
/**
|
||||
* @brief 获取指定宽度情况下视频编解码器支持的视频高度范围。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @param capability 视频编解码能力指针。如果给的是音频编解码器能力指针,会导致未定义行为。
|
||||
* @param width 视频水平像素数。
|
||||
* @param heightRange 输出参数。视频高度范围。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:能力实例无效,或者宽度不在通过{@link OH_AVCapability_GetVideoWidthRange}获取支持的宽度范围中,或者指向高度范围的指针为空指针。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AVCapability_GetVideoHeightRangeForWidth(OH_AVCapability *capability, int32_t width,
|
||||
OH_AVRange *heightRange);
|
||||
|
||||
/**
|
||||
* @brief 获取视频编解码器支持的视频宽度范围。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @param capability 视频编解码能力指针。如果给的是音频编解码器能力指针,会导致未定义行为。
|
||||
* @param widthRange 输出参数。视频宽度范围。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:能力实例无效,或者指向视频宽度范围的指针为空指针。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AVCapability_GetVideoWidthRange(OH_AVCapability *capability, OH_AVRange *widthRange);
|
||||
|
||||
/**
|
||||
* @brief 获取视频编解码器支持的视频高度范围。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @param capability 视频编解码能力指针。如果给的是音频编解码器能力指针,会导致未定义行为。
|
||||
* @param heightRange 输出参数。视频高度范围。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:能力实例无效,或者指向视频高度范围的指针为空指针。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AVCapability_GetVideoHeightRange(OH_AVCapability *capability, OH_AVRange *heightRange);
|
||||
|
||||
/**
|
||||
* @brief 检查视频编解码器是否支持特定的视频大小。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @param capability 视频编解码能力指针。如果给的是音频编解码器能力指针,会导致未定义行为。
|
||||
* @param width 视频水平像素数。
|
||||
* @param height 视频垂直像素数。
|
||||
* @return 如果支持该视频大小,则返回true,如果不支持该视频大小,则返回false。
|
||||
* @since 10
|
||||
*/
|
||||
bool OH_AVCapability_IsVideoSizeSupported(OH_AVCapability *capability, int32_t width, int32_t height);
|
||||
|
||||
/**
|
||||
* @brief 获取视频编解码器支持的视频帧率范围。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @param capability 视频编解码能力指针。如果给的是音频编解码器能力指针,会导致未定义行为。
|
||||
* @param frameRateRange 输出参数。视频帧率范围。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:能力实例无效,或者指向视频帧率范围的指针为空指针。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AVCapability_GetVideoFrameRateRange(OH_AVCapability *capability, OH_AVRange *frameRateRange);
|
||||
|
||||
/**
|
||||
* @brief 获取指定视频大小的视频编解码器支持的视频帧率范围。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @param capability 视频编解码能力指针。如果给的是音频编解码器能力指针,会导致未定义行为。
|
||||
* @param width 视频水平像素数。
|
||||
* @param height 视频垂直像素数。
|
||||
* @param frameRateRange 输出参数。视频帧率范围。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:能力实例无效,或者宽度和高度组合不支持,或者指向帧率范围的指针为空指针。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AVCapability_GetVideoFrameRateRangeForSize(OH_AVCapability *capability, int32_t width, int32_t height,
|
||||
OH_AVRange *frameRateRange);
|
||||
|
||||
/**
|
||||
* @brief 检查视频编解码器是否支持视频大小和帧率的特定组合。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @param capability 视频编解码能力指针。如果给的是音频编解码器能力指针,会导致未定义行为。
|
||||
* @param width 视频水平像素数。
|
||||
* @param height 视频垂直像素数。
|
||||
* @param frameRate 每秒帧数。
|
||||
* @return 如果支持视频大小和帧率的组合,则返回true。如果不支持,则为false。
|
||||
* @since 10
|
||||
*/
|
||||
bool OH_AVCapability_AreVideoSizeAndFrameRateSupported(OH_AVCapability *capability, int32_t width, int32_t height,
|
||||
int32_t frameRate);
|
||||
|
||||
/**
|
||||
* @brief 获取视频编解码器支持的视频像素格式。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @param capability 视频编解码能力指针。如果给的是音频编解码器能力指针,会导致未定义行为。
|
||||
* @param pixelFormats 输出参数。指向视频像素格式数组的指针。
|
||||
* @param pixelFormatNum 输出参数。像素格式数组的元素数目。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:能力实例无效,或者指向视频像素格式数组的指针为空指针,或者指向像素格式数组的元素数目的指针为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_NO_MEMORY:内部使用内存分配失败。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AVCapability_GetVideoSupportedPixelFormats(OH_AVCapability *capability, const int32_t **pixelFormats,
|
||||
uint32_t *pixelFormatNum);
|
||||
|
||||
/**
|
||||
*
|
||||
* @brief 获取视频编解码器支持的OH_NativeBuffer格式。
|
||||
*
|
||||
* 该函数提供了视频编解码器能够处理的OH_NativeBuffer格式信息,具体取值可见OH_NativeBuffer_Format。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @param capability 视频编解码能力指针。
|
||||
* @param nativeBufferFormats 输出参数。指向OH_NativeBuffer_Format数组的指针。
|
||||
* @param nativeBufferFormatNum 输出参数。OH_NativeBuffer_Format数组的元素数目。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:能力实例无效、能力实例是音频编码解码器能力、指向NativeBuffer格式数组的指针为空指针、
|
||||
* 或指向NativeBuffer格式数组的元素数目的指针为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_NO_MEMORY:内部使用内存分配失败。
|
||||
* @since 22
|
||||
*/
|
||||
OH_AVErrCode OH_AVCapability_GetVideoSupportedNativeBufferFormats(OH_AVCapability *capability,
|
||||
const OH_NativeBuffer_Format **nativeBufferFormats,
|
||||
uint32_t *nativeBufferFormatNum);
|
||||
|
||||
/**
|
||||
* @brief 获取编解码器支持的档次。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @param capability 编解码能力指针。
|
||||
* @param profiles 输出参数。指向档次数组的指针。
|
||||
* @param profileNum 输出参数。档次数组的元素数目。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:能力实例无效,或者指向档次数组的指针为空指针,或者指向档次数组的元素数目的指针为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_NO_MEMORY:内部使用内存分配失败。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AVCapability_GetSupportedProfiles(OH_AVCapability *capability, const int32_t **profiles,
|
||||
uint32_t *profileNum);
|
||||
|
||||
/**
|
||||
* @brief 获取特定档次支持的编解码器级别。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @param capability 编解码能力指针。
|
||||
* @param profile 编解码器档次。
|
||||
* @param levels 输出参数。指向级别数组的指针。
|
||||
* @param levelNum 输出参数。级别数组的元素数目。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:能力实例无效,或者档次不在通过{@link OH_AVCapability_GetSupportedProfiles}获取支持的档次数组中,
|
||||
* 或者指向级别数组的指针为空指针,或者指向级别数组的元素数目的指针为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_NO_MEMORY:内部使用内存分配失败。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AVCapability_GetSupportedLevelsForProfile(OH_AVCapability *capability, int32_t profile,
|
||||
const int32_t **levels, uint32_t *levelNum);
|
||||
|
||||
/**
|
||||
* @brief 检查编解码器是否支持档次和级别的特定组合。
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @param capability 编解码能力指针。
|
||||
* @param profile 编解码器档次。
|
||||
* @param level 编解码器级别。
|
||||
* @return 如果支持档次和级别的组合,则返回true。如果不支持,则为false。
|
||||
* @since 10
|
||||
*/
|
||||
bool OH_AVCapability_AreProfileAndLevelSupported(OH_AVCapability *capability, int32_t profile, int32_t level);
|
||||
|
||||
/**
|
||||
* @brief 检查编解码器是否支持指定特性。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @param capability 编解码能力指针。
|
||||
* @param feature 编解码特性。
|
||||
* @return 如果支持该特性,则返回true。如果不支持,则为false。
|
||||
* @since 12
|
||||
*/
|
||||
bool OH_AVCapability_IsFeatureSupported(OH_AVCapability *capability, OH_AVCapabilityFeature feature);
|
||||
|
||||
/**
|
||||
* @brief 获取指定特性的属性。
|
||||
* 需要注意的是,返回值指向的OH_AVFormat实例的生命周期需要调用者手动释放。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @param capability 编解码能力指针。
|
||||
* @param feature 编解码特性。
|
||||
* @return 返回指向OH_AVFormat实例的指针。
|
||||
* @since 12
|
||||
*/
|
||||
OH_AVFormat *OH_AVCapability_GetFeatureProperties(OH_AVCapability *capability, OH_AVCapabilityFeature feature);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif // NATIVE_AVCAPABILITY_H
|
||||
/** @} */
|
||||
@@ -0,0 +1,359 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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 AudioCodec
|
||||
* @{
|
||||
*
|
||||
* @brief AudioCodec模块提供用于音频编解码功能的函数。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioCodec
|
||||
* @since 11
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @file native_avcodec_audiocodec.h
|
||||
*
|
||||
* @brief 音频编解码Native API的声明。
|
||||
* @sample [AVCodec](https://gitcode.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Media/AVCodec)
|
||||
*
|
||||
* @kit AVCodecKit
|
||||
* @include <multimedia/player_framework/native_avcodec_audiocodec.h>
|
||||
* @library libnative_media_acodec.so
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioCodec
|
||||
* @since 11
|
||||
*/
|
||||
|
||||
#ifndef NATIVE_AVCODEC_AUDIOCODEC_H
|
||||
#define NATIVE_AVCODEC_AUDIOCODEC_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include "native_avcodec_base.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief MediaKeySession字段。
|
||||
* @since 12
|
||||
*/
|
||||
typedef struct MediaKeySession MediaKeySession;
|
||||
|
||||
/**
|
||||
* @brief 根据MIME类型创建音频编解码器实例,大多数场景下建议使用此方式。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioCodec
|
||||
* @param mime MIME类型描述字符串,请参阅{@link AVCODEC_MIME_TYPE}。
|
||||
* @param isEncoder true表示需要创建编码器,false表示需要创建解码器。
|
||||
* @return 返回OH_AVCodec实例的指针。
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVCodec *OH_AudioCodec_CreateByMime(const char *mime, bool isEncoder);
|
||||
|
||||
/**
|
||||
* @brief 通过音频编解码器名称创建音频编解码器实例,使用此接口的前提是知道编解码器的确切名称,编解码器的名称可以通过{@link OH_AVCapability_GetName}获取。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioCodec
|
||||
* @param name 音频编解码器名称。
|
||||
* @return 返回OH_AVCodec实例的指针。
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVCodec *OH_AudioCodec_CreateByName(const char *name);
|
||||
|
||||
/**
|
||||
* @brief 清理编解码器内部资源,销毁编解码器实例。注意不能进行重复销毁,否则将会导致程序崩溃。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioCodec
|
||||
* @param codec 指向OH_AVCodec实例的指针。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:OH_AVCodec实例为nullptr或无效。\n
|
||||
* AV_ERR_INVALID_STATE:编解码器服务不可用。\n
|
||||
* AV_ERR_NO_MEMORY:内部资源已经释放。\n
|
||||
* AV_ERR_UNKNOWN:发生内部错误,建议检查日志。
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVErrCode OH_AudioCodec_Destroy(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 设置异步回调函数,使应用可以响应音频编解码器生成的事件。在调用Prepare之前,必须调用此接口。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioCodec
|
||||
* @param codec 指向OH_AVCodec实例的指针。
|
||||
* @param callback 所有回调函数的集合。
|
||||
* @param userData 用户特定数据。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:输入参数为nullptr或无效。\n
|
||||
* AV_ERR_INVALID_STATE:编解码器服务不可用。
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVErrCode OH_AudioCodec_RegisterCallback(OH_AVCodec *codec, OH_AVCodecCallback callback, void *userData);
|
||||
|
||||
/**
|
||||
* @brief 配置音频描述信息。音频编解码器通常会根据音频描述信息进行配置。在调用Prepare之前,必须调用此接口。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioCodec
|
||||
* @param codec 指向OH_AVCodec实例的指针。
|
||||
* @param format 指向OH_AVFormat的指针,给出要编解码的音频轨道的描述。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:输入参数为nullptr或无效。\n
|
||||
* AV_ERR_INVALID_STATE:编解码器服务不可用。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:不允许操作,这可能是由于状态不正确或不支持的操作。\n
|
||||
* AV_ERR_UNKNOWN:发生内部错误,建议检查日志。
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVErrCode OH_AudioCodec_Configure(OH_AVCodec *codec, const OH_AVFormat *format);
|
||||
|
||||
/**
|
||||
* @brief 准备编解码器的内部资源,在调用此接口之前必须调用Configure接口。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioCodec
|
||||
* @param codec 指向OH_AVCodec实例的指针。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:OH_AVCodec实例为nullptr或无效。\n
|
||||
* AV_ERR_INVALID_STATE:编解码器服务不可用。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:不允许操作,这可能是由于状态不正确或不支持的操作。\n
|
||||
* AV_ERR_UNKNOWN:发生内部错误,建议检查日志。
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVErrCode OH_AudioCodec_Prepare(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 调用此接口启动编解码器,在Prepare成功后执行。启动后,编解码器将开始上报OH_AVCodecOnNeedInputBuffer事件。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioCodec
|
||||
* @param codec 指向OH_AVCodec实例的指针。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:OH_AVCodec实例为nullptr或无效。\n
|
||||
* AV_ERR_INVALID_STATE:编解码器服务不可用。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:不允许操作,这可能是由于状态不正确或不支持的操作。\n
|
||||
* AV_ERR_UNKNOWN:发生内部错误,建议检查日志。
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVErrCode OH_AudioCodec_Start(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 停止编解码器。停止后,可以通过Start重新进入已启动状态(started),但需要注意的是,
|
||||
* 如果编解码器之前已输入数据,则需要重新输入编解码器数据。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioCodec
|
||||
* @param codec 指向OH_AVCodec实例的指针。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:OH_AVCodec实例为nullptr或无效。\n
|
||||
* AV_ERR_INVALID_STATE:编解码器服务不可用。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:不允许操作,这可能是由于状态不正确或不支持的操作。\n
|
||||
* AV_ERR_UNKNOWN:发生内部错误,建议检查日志。
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVErrCode OH_AudioCodec_Stop(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 清除编解码器中缓存的输入和输出数据。调用此接口后,以前通过异步回调上报的所有缓冲区
|
||||
* 索引都将失效,请确保不要访问这些索引对应的缓冲区。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioCodec
|
||||
* @param codec 指向OH_AVCodec实例的指针。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:OH_AVCodec实例为nullptr或无效。\n
|
||||
* AV_ERR_INVALID_STATE:编解码器服务不可用。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:不允许操作,这可能是由于状态不正确或不支持的操作。\n
|
||||
* AV_ERR_UNKNOWN:发生内部错误,建议检查日志。
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVErrCode OH_AudioCodec_Flush(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 重置编解码器。此时会清空已配置的参数和输入输出数据。\n
|
||||
* 如果要继续编解码,需要再次调用Configure接口配置编解码器实例。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioCodec
|
||||
* @param codec 指向OH_AVCodec实例的指针。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:OH_AVCodec实例为nullptr或无效。\n
|
||||
* AV_ERR_INVALID_STATE:编解码器服务不可用。
|
||||
* @since 11
|
||||
*/
|
||||
|
||||
OH_AVErrCode OH_AudioCodec_Reset(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 获取编解码器输出数据的OH_AVFormat信息。\n
|
||||
* 需要注意的是,返回值所指向的OH_AVFormat实例需要开发者调用{@link OH_AVFormat_Destroy}接口手动释放。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioCodec
|
||||
* @param codec 指向OH_AVCodec实例的指针。
|
||||
* @return 返回OH_AVFormat句柄指针,生命周期将使用下一个{@link OH_AudioCodec_GetOutputDescription}刷新,或使用OH_AVCodec销毁。
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVFormat *OH_AudioCodec_GetOutputDescription(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 配置编解码器的动态参数。\n
|
||||
* 注意,该接口必须在编解码器启动后才能调用。另外,参数配置错误可能会导致编解码失败。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioCodec
|
||||
* @param codec 指向OH_AVCodec实例的指针。
|
||||
* @param format OH_AVFormat句柄指针。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:输入参数为nullptr或无效。\n
|
||||
* AV_ERR_INVALID_STATE:编解码器服务不可用。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:不允许操作,这可能是由于状态不正确或不支持的操作。\n
|
||||
* AV_ERR_UNKNOWN:发生内部错误,建议检查日志。
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVErrCode OH_AudioCodec_SetParameter(OH_AVCodec *codec, const OH_AVFormat *format);
|
||||
|
||||
/**
|
||||
* @brief 通知音频编解码器已完成对index所对应缓冲区进行输入数据的填充。\n
|
||||
* {@link OH_AVCodecOnNeedInputBuffer}回调将报告可用的输入缓冲区和对应的索引值。\n
|
||||
* 一旦具有指定索引的缓冲区被提交给音频编解码器,该缓冲区将无法再次访问,
|
||||
* 直到再次收到{@link OH_AVCodecOnNeedInputBuffer}回调,收到相同索引时此缓冲区才可使用。\n
|
||||
* 此外,对于某些编解码器,需要在开始时向编解码器输入编解码特定配置数据(Codec-Specific-Data),以初始化编解码器的编解码过程。\n
|
||||
* 注意:当返回值为AV_ERR_UNKNOWN时此次调用不生效,输入缓冲区仍为未处理状态,
|
||||
* 需根据返回的特定错误代码处理后输入相同的index重新调用OH_AudioCodec_PushInputBuffer。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioCodec
|
||||
* @param codec 指向OH_AVCodec实例的指针。
|
||||
* @param index 输入回调{@link OH_AVCodecOnNeedInputBuffer}给出的索引值。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:输入的index已使用或无效,需使用其他{@link OH_AVCodecOnNeedInputBuffer}回调返回的index。\n
|
||||
* AV_ERR_INVALID_STATE:编解码器状态错误,调用OH_AudioCodec_PushInputBuffer前需确保按顺序
|
||||
* 成功调用{@link OH_AudioCodec_Configure}、{@link OH_AudioCodec_Prepare}、{@link OH_AudioCodec_Start}。\n
|
||||
* AV_ERR_UNKNOWN:输入buffer size无效,需确保buffer设置了正确的buffer size和flags。
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVErrCode OH_AudioCodec_PushInputBuffer(OH_AVCodec *codec, uint32_t index);
|
||||
|
||||
/**
|
||||
* @brief 将处理后的输出缓冲区返回给编解码器。使用完输出缓冲区后需及时调用此接口进行释放,否则会阻塞编解码流程。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioCodec
|
||||
* @param codec 指向OH_AVCodec实例的指针。
|
||||
* @param index 输出{@link OH_AVCodecOnNewOutputBuffer}给出的索引值。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:输入参数为nullptr或无效。缓冲区索引应该由{@link OH_AVCodecOnNewOutputBuffer}给出。\n
|
||||
* AV_ERR_INVALID_STATE:编解码器服务不可用。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:不允许操作,这可能是由于状态不正确或不支持的操作。\n
|
||||
* AV_ERR_UNKNOWN:发生内部错误,建议检查日志。
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVErrCode OH_AudioCodec_FreeOutputBuffer(OH_AVCodec *codec, uint32_t index);
|
||||
|
||||
/**
|
||||
* @brief 检查当前编解码器实例是否有效。\n
|
||||
* 可用于后台故障恢复或应用程序从后台恢复时检测编解码器有效状态。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioCodec
|
||||
* @param codec 指向OH_AVCodec实例的指针。
|
||||
* @param isValid 输出参数。指向布尔类型的指针,true:编解码器实例有效,false:编解码器实例无效。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:输入参数为nullptr或无效。\n
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVErrCode OH_AudioCodec_IsValid(OH_AVCodec *codec, bool *isValid);
|
||||
|
||||
/**
|
||||
* @brief 设置解密信息。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioCodec
|
||||
* @param codec 指向OH_AVCodec实例的指针。
|
||||
* @param mediaKeySession 带有解密功能的媒体秘钥会话实例。
|
||||
* @param secureAudio 是否使用安全解码器。使用安全解码器为true,否则为false。\n
|
||||
* 注意:当前音频解密尚不支持使用安全解码器。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:OH_AVCodec实例为nullptr或无效,mediaKeySystemInfo实例为nullptr或无效。\n
|
||||
* AV_ERR_INVALID_STATE:编解码器服务不可用。\n
|
||||
* AV_ERR_NO_MEMORY:请求内存失败。
|
||||
* @since 12
|
||||
*/
|
||||
OH_AVErrCode OH_AudioCodec_SetDecryptionConfig(OH_AVCodec *codec, MediaKeySession *mediaKeySession,
|
||||
bool secureAudio);
|
||||
|
||||
/**
|
||||
* @brief 在设置的超时时间内,尝试查询对应音频编解码器可用的输入缓冲区的索引值。\n
|
||||
*
|
||||
* 获取到索引值后,使用{@link OH_AudioCodec_GetInputBuffer}接口获取索引值对应的缓冲区。\n
|
||||
* 在缓冲区填充数据后,使用{@link OH_AudioCodec_PushInputBuffer}输入对应索引值,将缓冲区数据送到编解码器。\n
|
||||
*
|
||||
* 注意:此接口仅可在音频编解码的同步模式中使用。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioCodec
|
||||
* @param codec 指向OH_AVCodec实例的指针。
|
||||
* @param index 输出参数,获取到的输入缓冲区的索引值。
|
||||
* @param timeoutUs 超时时间,单位:微秒。设置为负值时表示无限等待。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:执行失败,输入参数错误。\n
|
||||
* AV_ERR_INVALID_STATE:执行失败,状态非法,没有启动编解码器等。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:执行失败,不允许非同步模式下调用。\n
|
||||
* AV_ERR_TRY_AGAIN_LATER:执行失败,超时时间内获取不到可用的缓冲区。
|
||||
* @since 20
|
||||
*/
|
||||
OH_AVErrCode OH_AudioCodec_QueryInputBuffer(struct OH_AVCodec *codec, uint32_t *index, int64_t timeoutUs);
|
||||
|
||||
/**
|
||||
* @brief 输入索引值,获取对应音频编解码器中该索引值对应的输入缓冲区。
|
||||
*
|
||||
* 注意:此接口仅可在音频编解码的同步模式中使用。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioCodec
|
||||
* @param codec 指向OH_AVCodec实例的指针。
|
||||
* @param index 输入缓冲区的索引值。该索引值通过接口{@link OH_AudioCodec_QueryInputBuffer}获取。
|
||||
* @return 如果执行成功,则返回一个指向OH_AVBuffer实例的指针,否则返回NULL。
|
||||
* @since 20
|
||||
*/
|
||||
OH_AVBuffer *OH_AudioCodec_GetInputBuffer(struct OH_AVCodec *codec, uint32_t index);
|
||||
|
||||
/**
|
||||
* @brief 在设置的超时时间内,尝试查询对应音频编解码器可用的输出缓冲区的索引值。
|
||||
*
|
||||
* 获取到索引值后,通过{@link OH_AudioCodec_GetOutputBuffer}接口获取的输出缓冲区使用完后,\n
|
||||
* 需要调用{@link OH_AudioCodec_FreeOutputBuffer}接口进行释放。释放后无法再次使用,长期不释放会阻塞编解码流程。
|
||||
*
|
||||
* 注意:此接口仅可在音频编解码的同步模式中使用。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioCodec
|
||||
* @param codec 指向OH_AVCodec实例的指针。
|
||||
* @param index 输出参数,获取到的输出缓冲区的索引值。
|
||||
* @param timeoutUs 超时时间,单位:微秒。设置为负值时表示无限等待。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:执行失败,输入参数错误。\n
|
||||
* AV_ERR_INVALID_STATE:执行失败,状态非法,没有启动编解码器等。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:执行失败,不允许非同步模式下调用。\n
|
||||
* AV_ERR_STREAM_CHANGED:解码输出流格式发生变化, 可以通过调用{@link OH_AudioCodec_GetOutputDescription}接口获取新的流信息。\n
|
||||
* AV_ERR_TRY_AGAIN_LATER:执行失败,超时时间内获取不到可用的缓冲区。
|
||||
* @since 20
|
||||
*/
|
||||
OH_AVErrCode OH_AudioCodec_QueryOutputBuffer(struct OH_AVCodec *codec, uint32_t *index, int64_t timeoutUs);
|
||||
|
||||
/**
|
||||
* @brief 输入索引值,获取对应音频编解码器中该索引值对应的输出缓冲区。
|
||||
*
|
||||
* 注意:此接口仅可在音频编解码的同步模式中使用。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioCodec
|
||||
* @param codec 指向OH_AVCodec实例的指针。
|
||||
* @param index 输出缓冲区的索引值。该索引值通过接口{@link OH_AudioCodec_QueryOutputBuffer}获取。
|
||||
* @return 如果执行成功,则返回一个指向OH_AVBuffer实例的指针,否则返回NULL。
|
||||
* @since 20
|
||||
*/
|
||||
OH_AVBuffer *OH_AudioCodec_GetOutputBuffer(struct OH_AVCodec *codec, uint32_t index);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif // NATIVE_AVCODEC_AUDIOCODEC_H
|
||||
|
||||
/** @} */
|
||||
@@ -0,0 +1,249 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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 AudioDecoder
|
||||
* @{
|
||||
*
|
||||
* @brief AudioDecoder模块提供用于音频解码功能的函数。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioDecoder
|
||||
* @since 9
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @file native_avcodec_audiodecoder.h
|
||||
*
|
||||
* @brief 音频解码Native API的声明。
|
||||
*
|
||||
* @kit AVCodecKit
|
||||
* @include <multimedia/player_framework/native_avcodec_audiodecoder.h>
|
||||
* @library libnative_media_adec.so
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioDecoder
|
||||
* @since 9
|
||||
*/
|
||||
|
||||
#ifndef NATIVE_AVCODEC_AUDIODECODER_H
|
||||
#define NATIVE_AVCODEC_AUDIODECODER_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdio.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 返回指向OH_AVCodec实例的指针
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_CreateByMime}
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVCodec *OH_AudioDecoder_CreateByMime(const char *mime);
|
||||
|
||||
/**
|
||||
* @brief 通过音频解码器名称创建音频解码器实例,使用此接口的前提是知道解码器的确切名称
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioDecoder
|
||||
* @param name 音频解码器名称
|
||||
* @return 返回指向OH_AVCodec实例的指针
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_CreateByName}
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVCodec *OH_AudioDecoder_CreateByName(const char *name);
|
||||
|
||||
/**
|
||||
* @brief 清理解码器内部资源,销毁解码器实例
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioDecoder
|
||||
* @param codec 指向OH_AVCodec实例的指针
|
||||
* @return 如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 {@link OH_AVErrCode}
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_Destroy}
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_AudioDecoder_Destroy(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 设置异步回调函数,使您的应用程序可以响应音频解码器生成的事件。在调用Prepare之前,必须调用此接口。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioDecoder
|
||||
* @param codec 指向OH_AVCodec实例的指针
|
||||
* @param callback 所有回调函数的集合,请参见 {@link OH_AVCodecAsyncCallback}
|
||||
* @param userData 用户特定数据
|
||||
* @return 如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 {@link OH_AVErrCode}
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_RegisterCallback}
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_AudioDecoder_SetCallback(OH_AVCodec *codec, OH_AVCodecAsyncCallback callback, void *userData);
|
||||
|
||||
/**
|
||||
* @brief 配置音频描述信息。音频解码器通常会根据音频描述信息进行配置。在调用Prepare之前,必须调用此接口
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioDecoder
|
||||
* @param codec 指向OH_AVCodec实例的指针
|
||||
* @param format 指向OH_AVFormat的指针,给出要解码的音频轨道的描述
|
||||
* @return 如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 {@link OH_AVErrCode}
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_Configure}
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_AudioDecoder_Configure(OH_AVCodec *codec, OH_AVFormat *format);
|
||||
|
||||
/**
|
||||
* @brief 准备解码器的内部资源,在调用此接口之前必须调用Configure接口
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioDecoder
|
||||
* @param codec 指向OH_AVCodec实例的指针
|
||||
* @return 如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 {@link OH_AVErrCode}
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_Prepare}
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_AudioDecoder_Prepare(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 调用此接口启动编解码器,在Prepare成功后执行。启动后,解码器将开始上报OH_AVCodecOnNeedInputData事件。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioDecoder
|
||||
* @param codec 指向OH_AVCodec实例的指针
|
||||
* @return 如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 {@link OH_AVErrCode}
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_Start}
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_AudioDecoder_Start(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 停止解码器。停止后,您可以通过Start重新进入已启动状态,但需要注意的是,
|
||||
* 如果解码器之前已输入数据,则需要重新输入解码器数据
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioDecoder
|
||||
* @param codec 指向OH_AVCodec实例的指针
|
||||
* @return 如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 {@link OH_AVErrCode}
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_Stop}
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_AudioDecoder_Stop(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 清除解码器中缓存的输入和输出数据。调用此接口后,以前通过异步回调上报的所有缓冲区
|
||||
* 索引都将失效,请确保不要访问这些索引对应的缓冲区
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioDecoder
|
||||
* @param codec 指向OH_AVCodec实例的指针
|
||||
* @return 如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 {@link OH_AVErrCode}
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_Flush}
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_AudioDecoder_Flush(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 重置解码器。如果要继续解码,需要再次调用Configure接口配置解码器实例
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioDecoder
|
||||
* @param codec 指向OH_AVCodec实例的指针
|
||||
* @return 如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 {@link OH_AVErrCode}
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_Reset}
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_AudioDecoder_Reset(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 获取解码器输出数据的描述信息,详细信息请参见{@link OH_AVFormat}。
|
||||
* 需要注意的是,返回值所指向的OH_AVFormat实例的生命周期需要调用者手动释放
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioDecoder
|
||||
* @param codec 指向OH_AVCodec实例的指针
|
||||
* @return 返回OH_AVFormat句柄指针,生命周期将使用下一个GetOutputDescription
|
||||
* 刷新,或使用OH_AVCodec销毁
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_GetOutputDescription}
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVFormat *OH_AudioDecoder_GetOutputDescription(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 配置解码器的动态参数。注意:该接口必须在解码器启动后才能调用。另外,参数配置错误可能会导致解码失败。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioDecoder
|
||||
* @param codec 指向OH_AVCodec实例的指针
|
||||
* @param format OH_AVFormat句柄指针
|
||||
* @return 如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 {@link OH_AVErrCode}
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_SetParameter}
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_AudioDecoder_SetParameter(OH_AVCodec *codec, OH_AVFormat *format);
|
||||
|
||||
/**
|
||||
* @brief 将填充有数据的输入缓冲区提交给音频解码器。{@link OH_AVCodecOnNeedInputData}回调
|
||||
* 将报告可用的输入缓冲区和相应的索引值。一旦具有指定索引的缓冲区提交到音频解码器,则无法再次访问此缓冲区,
|
||||
* 直到再次收到{@link OH_AVCodecOnNeedInputData}回调,收到相同索引时此缓冲区才可使用。
|
||||
* 此外,对于某些解码器,需要在开始时向解码器输入特定配置参数,以初始化解码器的解码过程。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioDecoder
|
||||
* @param codec 指向OH_AVCodec实例的指针
|
||||
* @param index 输入缓冲区Buffer对应的索引值
|
||||
* @param attr 描述缓冲区中包含的数据的信息
|
||||
* @return 如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 {@link OH_AVErrCode}
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_PushInputBuffer}
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_AudioDecoder_PushInputData(OH_AVCodec *codec, uint32_t index, OH_AVCodecBufferAttr attr);
|
||||
|
||||
/**
|
||||
* @brief 将处理后的输出缓冲区返回给解码器
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioDecoder
|
||||
* @param codec 指向OH_AVCodec实例的指针
|
||||
* @param index 输出缓冲区Buffer对应的索引值
|
||||
* @return 如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 {@link OH_AVErrCode}
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_FreeOutputBuffer}
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_AudioDecoder_FreeOutputData(OH_AVCodec *codec, uint32_t index);
|
||||
|
||||
/**
|
||||
* @brief 检查当前解码器实例是否有效。可用于后台故障恢复或应用程序从后台恢复时检测解码器有效状态
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioDecoder
|
||||
* @param codec 指向OH_AVCodec实例的指针
|
||||
* @param isValid 指向布尔类型的指针,true:解码器实例有效,false:解码器实例无效
|
||||
* @return 如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 {@link OH_AVErrCode}
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_IsValid}
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AudioDecoder_IsValid(OH_AVCodec *codec, bool *isValid);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif // NATIVE_AVCODEC_AUDIODECODER_H
|
||||
/** @} */
|
||||
@@ -0,0 +1,261 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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 AudioEncoder
|
||||
* @{
|
||||
*
|
||||
* @brief AudioEncoder模块提供用于音频编码的函数。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioEncoder
|
||||
* @since 9
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @file native_avcodec_audioencoder.h
|
||||
*
|
||||
* @brief 音频编码Native API的声明。
|
||||
*
|
||||
* @kit AVCodecKit
|
||||
* @include <multimedia/player_framework/native_avcodec_audioencoder.h>
|
||||
* @library libnative_media_aenc.so
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioEncoder
|
||||
* @since 9
|
||||
*/
|
||||
#ifndef NATIVE_AVCODEC_AUDIOENCODER_H
|
||||
#define NATIVE_AVCODEC_AUDIOENCODER_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdio.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 返回指向OH_AVCodec实例的指针
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_CreateByMime}
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
OH_AVCodec *OH_AudioEncoder_CreateByMime(const char *mime);
|
||||
|
||||
/**
|
||||
* @brief 通过音频编码器名称创建音频编码器实例,使用此接口的前提是知道编码器的确切名称
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioEncoder
|
||||
* @param name 音频编码器名称
|
||||
* @return 返回指向OH_AVCodec实例的指针
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_CreateByName}
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
OH_AVCodec *OH_AudioEncoder_CreateByName(const char *name);
|
||||
|
||||
/**
|
||||
* @brief 清理编码器内部资源,销毁编码器实例
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioEncoder
|
||||
* @param codec 指向OH_AVCodec实例的指针
|
||||
* @return 如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 {@link OH_AVErrCode}
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_Destroy}
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
OH_AVErrCode OH_AudioEncoder_Destroy(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 设置异步回调函数,使您的应用程序可以响应音频编码器生成的事件。在调用Prepare之前,必须调用此接口。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioEncoder
|
||||
* @param codec 指向OH_AVCodec实例的指针
|
||||
* @param callback 所有回调函数的集合,请参见 {@link OH_AVCodecAsyncCallback}
|
||||
* @param userData 用户特定数据
|
||||
* @return 如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 {@link OH_AVErrCode}
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_RegisterCallback}
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
OH_AVErrCode OH_AudioEncoder_SetCallback(OH_AVCodec *codec, OH_AVCodecAsyncCallback callback, void *userData);
|
||||
|
||||
/**
|
||||
* @brief 配置音频描述信息。音频编码器通常会根据音频描述信息进行配置。在调用Prepare之前,必须调用此接口
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioEncoder
|
||||
* @param codec 指向OH_AVCodec实例的指针
|
||||
* @param format 指向OH_AVFormat的指针,给出要编码的音频轨道的描述
|
||||
* @return 如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 {@link OH_AVErrCode}
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_Configure}
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
OH_AVErrCode OH_AudioEncoder_Configure(OH_AVCodec *codec, OH_AVFormat *format);
|
||||
|
||||
/**
|
||||
* @brief 准备编码器的内部资源,在调用此接口之前必须调用Configure接口
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioEncoder
|
||||
* @param codec 指向OH_AVCodec实例的指针
|
||||
* @return 如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 {@link OH_AVErrCode}
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_Prepare}
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
OH_AVErrCode OH_AudioEncoder_Prepare(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 调用此接口启动编解码器,在Prepare成功后执行。启动后,编码器将开始上报OH_AVCodecOnNeedInputData事件。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioEncoder
|
||||
* @param codec 指向OH_AVCodec实例的指针
|
||||
* @return 如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 {@link OH_AVErrCode}
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_Start}
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
OH_AVErrCode OH_AudioEncoder_Start(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 停止编码器。停止后,您可以通过Start重新进入已启动状态
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioEncoder
|
||||
* @param codec 指向OH_AVCodec实例的指针
|
||||
* @return 如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 {@link OH_AVErrCode}
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_Stop}
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
OH_AVErrCode OH_AudioEncoder_Stop(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 清除编码器中缓存的输入和输出数据。调用此接口后,以前通过异步回调上报的所有缓冲区
|
||||
* 索引都将失效,请确保不要访问这些索引对应的缓冲区
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioEncoder
|
||||
* @param codec 指向OH_AVCodec实例的指针
|
||||
* @return 如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 {@link OH_AVErrCode}
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_Flush}
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
OH_AVErrCode OH_AudioEncoder_Flush(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 重置编码器。如果要继续编码,需要再次调用Configure接口配置编码器实例
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioEncoder
|
||||
* @param codec 指向OH_AVCodec实例的指针
|
||||
* @return 如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 {@link OH_AVErrCode}
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_Reset}
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
OH_AVErrCode OH_AudioEncoder_Reset(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 获取编码器输出数据的描述信息,详细信息请参见{@link OH_AVFormat}。
|
||||
* 需要注意的是,返回值所指向的OH_AVFormat实例的生命周期需要调用者手动释放
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioEncoder
|
||||
* @param codec 指向OH_AVCodec实例的指针
|
||||
* @return 返回OH_AVFormat句柄指针,生命周期将使用下一个GetOutputDescription
|
||||
* 刷新,或使用OH_AVCodec销毁
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_GetOutputDescription}
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
OH_AVFormat *OH_AudioEncoder_GetOutputDescription(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 配置编码器的动态参数。注意:该接口必须在编码器启动后才能调用。另外,参数配置错误可能会导致编码失败。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioEncoder
|
||||
* @param codec 指向OH_AVCodec实例的指针
|
||||
* @param format OH_AVFormat句柄指针
|
||||
* @return 如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 {@link OH_AVErrCode}
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_SetParameter}
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
OH_AVErrCode OH_AudioEncoder_SetParameter(OH_AVCodec *codec, OH_AVFormat *format);
|
||||
|
||||
/**
|
||||
* @brief 将填充有数据的输入缓冲区提交给音频编码器。{@link OH_AVCodecOnNeedInputData}回调
|
||||
* 将报告可用的输入缓冲区和相应的索引值。一旦具有指定索引的缓冲区提交到音频编码器,则无法再次访问此缓冲区,
|
||||
* 直到再次收到{@link OH_AVCodecOnNeedInputData}回调,收到相同索引时此缓冲区才可使用。
|
||||
* 此外,对于某些编码器,需要在开始时向编码器输入特定配置参数,以初始化编码器的编码过程。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioEncoder
|
||||
* @param codec 指向OH_AVCodec实例的指针
|
||||
* @param index 输入缓冲区Buffer对应的索引值
|
||||
* @param attr 描述缓冲区中包含的数据的信息
|
||||
* @return 如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 {@link OH_AVErrCode}
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_PushInputBuffer}
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
OH_AVErrCode OH_AudioEncoder_PushInputData(OH_AVCodec *codec, uint32_t index, OH_AVCodecBufferAttr attr);
|
||||
|
||||
/**
|
||||
* @brief 将处理后的输出缓冲区返回给编码器
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioEncoder
|
||||
* @param codec 指向OH_AVCodec实例的指针
|
||||
* @param index 输出缓冲区Buffer对应的索引值
|
||||
* @return 如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 {@link OH_AVErrCode}
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_FreeOutputBuffer}
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
OH_AVErrCode OH_AudioEncoder_FreeOutputData(OH_AVCodec *codec, uint32_t index);
|
||||
|
||||
/**
|
||||
* @brief 检查当前编码器实例是否有效。可用于后台故障恢复或应用程序从后台恢复时检测编码器有效状态
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.AudioEncoder
|
||||
* @param codec 指向OH_AVCodec实例的指针
|
||||
* @param isValid 指向布尔类型的指针,true:编码器实例有效,false:编码器实例无效
|
||||
* @return 如果执行成功,则返回AV_ERR_OK,否则返回特定错误代码,请参阅 {@link OH_AVErrCode}
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AudioCodec_IsValid}
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AudioEncoder_IsValid(OH_AVCodec *codec, bool *isValid);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif // NATIVE_AVCODEC_AUDIOENCODER_H
|
||||
/** @} */
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,197 @@
|
||||
/*
|
||||
* Copyright (C) 2026 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 CodecBase
|
||||
* @{
|
||||
*
|
||||
* @brief CodecBase模块提供了用于音视频封装、解封装、编解码基础功能的变量、属性以及函数。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @since 9
|
||||
*/
|
||||
/**
|
||||
* @file native_avcodec_videobase.h
|
||||
*
|
||||
* @brief 声明用于基础视频编解码功能以及视频特定配置和参数的Native API。
|
||||
*
|
||||
* @kit AVCodecKit
|
||||
* @include <multimedia/player_framework/native_avcodec_videobase.h>
|
||||
* @library libnative_media_codecbase.so
|
||||
* @syscap SystemCapability.Multimedia.Media.CodecBase
|
||||
* @since 26.0.0
|
||||
*/
|
||||
|
||||
#ifndef NATIVE_AVCODEC_VIDEOBASE_H
|
||||
#define NATIVE_AVCODEC_VIDEOBASE_H
|
||||
#include <stdint.h>
|
||||
#include "native_avformat.h"
|
||||
#include "native_averrors.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief 用于描述单个ROI(感兴趣区域)矩形顶部坐标(y)的键,值类型为int32_t。
|
||||
*
|
||||
* 坐标系的原点位于视频的左上角。
|
||||
* 取值范围为[0, {@link OH_MD_KEY_VIDEO_METADATA_ROI_BOTTOM})。
|
||||
* 这是配置ROI参数时的必填键。
|
||||
*
|
||||
* @since 26.0.0
|
||||
*/
|
||||
extern const char *OH_MD_KEY_VIDEO_METADATA_ROI_TOP;
|
||||
|
||||
/**
|
||||
* @brief 用于描述单个ROI矩形左侧坐标 (x) 的键,值类型为 int32_t。
|
||||
*
|
||||
* 坐标系的原点位于视频的左上角。
|
||||
* 取值范围为[0, {@link OH_MD_KEY_VIDEO_METADATA_ROI_RIGHT})。
|
||||
* 这是配置ROI参数时的必填键。
|
||||
*
|
||||
* @since 26.0.0
|
||||
*/
|
||||
extern const char *OH_MD_KEY_VIDEO_METADATA_ROI_LEFT;
|
||||
|
||||
/**
|
||||
* @brief 用于描述单个ROI矩形底部坐标(y)的键,值类型为int32_t。
|
||||
*
|
||||
* 坐标系的原点位于视频的左上角。
|
||||
* 取值范围为({@link OH_MD_KEY_VIDEO_METADATA_ROI_TOP}, {@link OH_MD_KEY_VIDEO_HEIGHT}]。
|
||||
* 这是配置ROI参数时的必填键。
|
||||
*
|
||||
* @since 26.0.0
|
||||
*/
|
||||
extern const char *OH_MD_KEY_VIDEO_METADATA_ROI_BOTTOM;
|
||||
|
||||
/**
|
||||
* @brief 用于描述单个ROI矩形右侧坐标(x)的键,值类型为int32_t。
|
||||
*
|
||||
* 坐标系的原点位于视频的左上角。
|
||||
* 取值范围为({@link OH_MD_KEY_VIDEO_METADATA_ROI_LEFT}, {@link OH_MD_KEY_VIDEO_WIDTH}]。
|
||||
* 这是配置ROI参数时的必填键。
|
||||
*
|
||||
* @since 26.0.0
|
||||
*/
|
||||
extern const char *OH_MD_KEY_VIDEO_METADATA_ROI_RIGHT;
|
||||
|
||||
/**
|
||||
* @brief 用于描述单个ROI的量化参数(QP)偏移量的键,值类型为int32_t。
|
||||
*
|
||||
* 该变量取值范围为[-51, 51]。
|
||||
* 这是配置ROI参数时的可选键。
|
||||
* 如果未设置此键,编码器将对此区域使用其默认的量化参数策略。
|
||||
*
|
||||
* @since 26.0.0
|
||||
*/
|
||||
extern const char *OH_MD_KEY_VIDEO_METADATA_ROI_DELTA_QP;
|
||||
|
||||
/**
|
||||
* @brief 用于描述单个ROI语义标签的键,值类型为int32_t。
|
||||
*
|
||||
* 该变量值必须与{@link OH_VideoMetadataRoiSemanticLabel}对应。
|
||||
* 这是配置ROI参数时的可选键。
|
||||
* 如果未设置此键,该区域将采用默认的语义处理策略。
|
||||
*
|
||||
* @since 26.0.0
|
||||
*/
|
||||
extern const char *OH_MD_KEY_VIDEO_METADATA_ROI_SEM_LABEL;
|
||||
|
||||
/**
|
||||
* @brief 视频编码中感兴趣区域(ROI)的语义标签。
|
||||
*
|
||||
* @since 26.0.0
|
||||
*/
|
||||
typedef enum OH_VideoMetadataRoiSemanticLabel {
|
||||
/**
|
||||
* @brief 表示未指定或未知的区域。
|
||||
*
|
||||
* @since 26.0.0
|
||||
*/
|
||||
OH_VIDEO_METADATA_ROI_SEM_LABEL_OTHER = 0,
|
||||
/**
|
||||
* @brief 表示该ROI包含人脸。
|
||||
*
|
||||
* @since 26.0.0
|
||||
*/
|
||||
OH_VIDEO_METADATA_ROI_SEM_LABEL_FACE = 1
|
||||
} OH_VideoMetadataRoiSemanticLabel;
|
||||
|
||||
/**
|
||||
* @brief 将OH_AVFormat句柄中的感兴趣区域(ROI)配置格式化为字符串,并将其追加到目标字符串中。
|
||||
*
|
||||
* 此函数从提供的格式句柄中提取ROI属性(如坐标、量化参数偏移量和语义标签),
|
||||
* 构建标准的ROI字符串表示,并将其追加到roiStrInOut指向的字符串中末尾。
|
||||
* 如果*roiStrInOut为NULL,则会分配一个新字符串,如果不为NULL,则会重新分配现有字符串的内存以追加新配置。
|
||||
*
|
||||
* @note 调用者拥有为*roiStrInOut分配内存的所有权。
|
||||
* 内存是通过标准C库分配器(malloc/realloc)分配的。
|
||||
* 当不再需要该字符串时,调用者必须使用匹配的标准C库释放器(free)释放该字符串,
|
||||
* 并将指针设置为NULL以防止重复释放。
|
||||
*
|
||||
* @param roiStrInOut 指向目标字符串的双重指针。指针本身不能为NULL。如果*roiStrInOut为NULL,则分配一个新字符串。
|
||||
* @param format 包含要追加的ROI参数的OH_AVFormat句柄,不能为NULL。
|
||||
* @return <ul>
|
||||
* <li>AV_ERR_OK:表示字符串成功格式化并追加。</li>
|
||||
* <li>AV_ERR_INVALID_VAL:表示roiStrInOut指针或format句柄为NULL,或者格式缺少必需的ROI键。</li>
|
||||
* <li>AV_ERR_NO_MEMORY:表示内部内存分配或重新分配失败。</li>
|
||||
* </ul>
|
||||
* @release free {roiStrInOut}
|
||||
* @since 26.0.0
|
||||
*/
|
||||
OH_AVErrCode OH_VideoMetadata_AppendRoiString(char **roiStrInOut, OH_AVFormat *format);
|
||||
|
||||
/**
|
||||
* @brief 预解析ROI字符串,以获取其中包含的有效ROI区域数量。
|
||||
*
|
||||
* 此接口不受具体后端容量限制影响,并根据语法规则准确返回字符串中识别出的有效区域数。
|
||||
*
|
||||
* @param roiStr 输入的ROI配置字符串。
|
||||
* @param outCount 返回从字符串中解析出的有效ROI区域的数量。
|
||||
* @return <ul>
|
||||
* <li>AV_ERR_OK:表示操作成功。</li>
|
||||
* <li>AV_ERR_INVALID_VAL:表示roiStr或outCount指针为NULL。</li>
|
||||
* </ul>
|
||||
* @since 26.0.0
|
||||
*/
|
||||
OH_AVErrCode OH_VideoMetadata_GetRoiCount(const char *roiStr, uint32_t *outCount);
|
||||
|
||||
/**
|
||||
* @brief 解析ROI字符串并填充调用者提供的OH_AVFormat数组。
|
||||
*
|
||||
* @note 调用者拥有每个成功创建的OH_AVFormat句柄的所有权。返回时,
|
||||
* 有效的句柄存储在outOwnedFormats数组的前*outCount个元素中。
|
||||
* - 完全或部分成功时(*outCount > 0),调用者必须使用{@link OH_AVFormat_Destroy}逐个销毁
|
||||
* 有效句柄,以防止内存泄漏。
|
||||
* - 完全失败时(*outCount == 0),不会创建任何句柄,也无需销毁。
|
||||
*
|
||||
* @param roiStr 输入的ROI配置字符串。
|
||||
* @param outOwnedFormats 由调用者分配的指针数组,用于接收解析后的OH_AVFormat句柄。调用者拥有此数组中每个非NULL句柄的所有权。
|
||||
* @param maxCapacity 指示outOwnedFormats数组的最大物理容量,以防止越界写入。
|
||||
* @param outCount 返回成功解析并填充到数组中的实际ROI数量。
|
||||
* @return <ul>
|
||||
* <li>AV_ERR_OK:表示操作成功。</li>
|
||||
* <li>AV_ERR_INVALID_VAL:表示roiStr、outOwnedFormats或outCount为NULL。</li>
|
||||
* </ul>
|
||||
* @release media_foundation/OH_AVFormat_Destroy {outOwnedFormats}。
|
||||
* @since 26.0.0
|
||||
*/
|
||||
OH_AVErrCode OH_VideoMetadata_ParseRoiString(const char *roiStr, OH_AVFormat **outOwnedFormats, uint32_t maxCapacity,
|
||||
uint32_t *outCount);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif // NATIVE_AVCODEC_VIDEOBASE_H
|
||||
/** @} */
|
||||
@@ -0,0 +1,532 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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 VideoDecoder
|
||||
* @{
|
||||
*
|
||||
* @brief VideoDecoder模块提供用于视频解码的函数。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @since 9
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file native_avcodec_videodecoder.h
|
||||
*
|
||||
* @brief 声明用于视频解码的Native API。
|
||||
* @sample [AVCodec](https://gitcode.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Media/AVCodec)
|
||||
*
|
||||
* @kit AVCodecKit
|
||||
* @include <multimedia/player_framework/native_avcodec_videodecoder.h>
|
||||
* @library libnative_media_vdec.so
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @since 9
|
||||
*/
|
||||
|
||||
#ifndef NATIVE_AVCODEC_VIDEODECODER_H
|
||||
#define NATIVE_AVCODEC_VIDEODECODER_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include "native_avcodec_base.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief 为MediaKeySession定义native层对象。
|
||||
*
|
||||
* @since 11
|
||||
*/
|
||||
typedef struct MediaKeySession MediaKeySession;
|
||||
|
||||
/**
|
||||
* @brief 根据MIME类型创建视频解码器实例,大多数情况下建议使用。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @param mime MIME类型描述字符串,请参阅{@link AVCODEC_MIME_TYPE}。
|
||||
* @return 返回一个指向视频解码实例的指针。
|
||||
* 当传入的解码器类型不支持或者内存资源耗尽时,返回NULL。
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVCodec *OH_VideoDecoder_CreateByMime(const char *mime);
|
||||
|
||||
/**
|
||||
* @brief 根据视频解码器名称创建视频解码器实例。使用此接口的前提是知道解码器的确切名称,解码器的名称可以通过能力查询获取。\n
|
||||
*
|
||||
* 详情请参见:[获取支持的编解码能力](../../media/avcodec/obtain-supported-codecs.md#创建指定名称的编解码器)。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @param name 视频解码器名称。
|
||||
* @return 返回指向视频解码实例的指针。
|
||||
* 当输入的解码器名称不支持或者内存资源耗尽时,返回NULL。
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVCodec *OH_VideoDecoder_CreateByName(const char *name);
|
||||
|
||||
/**
|
||||
* @brief 清理解码器内部资源,销毁解码器实例。不能重复销毁。
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @param codec 指向视频解码实例的指针。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的解码器实例已经销毁。\n
|
||||
* AV_ERR_INVALID_VAL:输入的codec指针为非解码器实例,或者为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。
|
||||
* @since 9
|
||||
*/
|
||||
|
||||
OH_AVErrCode OH_VideoDecoder_Destroy(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 设置异步回调函数,让应用可以响应视频解码器生成的事件。在调用OH_VideoDecoder_Prepare接口之前,必须调用此接口。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @param codec 指向视频解码实例的指针。
|
||||
* @param callback 所有回调函数的集合。
|
||||
* @param userData 开发者执行回调所依赖的数据。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的解码器实例已经销毁。\n
|
||||
* AV_ERR_INVALID_VAL:输入的codec指针为非解码器实例,或者为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_VideoDecoder_RegisterCallback}
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_VideoDecoder_SetCallback(OH_AVCodec *codec, OH_AVCodecAsyncCallback callback, void *userData);
|
||||
|
||||
/**
|
||||
* @brief 注册异步回调函数,让应用可以响应视频解码器生成的事件。在调用OH_VideoDecoder_Prepare接口之前,必须调用此接口。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @param codec 指向视频解码器实例的指针。
|
||||
* @param callback 所有回调函数的集合。
|
||||
* @param userData 开发者执行回调所依赖的数据。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的解码器实例已经销毁。\n
|
||||
* AV_ERR_INVALID_VAL:输入的codec指针为非解码器实例,或者为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVErrCode OH_VideoDecoder_RegisterCallback(OH_AVCodec *codec, OH_AVCodecCallback callback, void *userData);
|
||||
|
||||
/**
|
||||
* @brief 设置输出surface以提供视频解码输出。\n
|
||||
* 在初始化阶段,必须在调用OH_VideoDecoder_Prepare接口之前调用此接口。在Executing状态可以直接调用该接口。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @param codec 指向视频解码实例的指针。
|
||||
* @param window 指向OHNativeWindow实例的指针,请参阅{@link OHNativeWindow}。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的解码器实例已经销毁。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:本接口仅支持在Surface模式下调用, 如果在Buffer模式调用, 则返回此错误码。\n
|
||||
* AV_ERR_INVALID_VAL:1. 输入的codec指针为非解码器实例,或者为空指针;2. window为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_INVALID_STATE:当前解码器状态不支持调用本接口。
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_VideoDecoder_SetSurface(OH_AVCodec *codec, OHNativeWindow *window);
|
||||
|
||||
/**
|
||||
* @brief 配置视频解码器,通常需要配置解码视频的描述信息,这些信息可以从{@link OH_AVSource}中提取。在调用OH_VideoDecoder_Prepare接口之前,必须调用此接口。\n
|
||||
* 以下参数的配置范围可通过[能力查询](../../media/avcodec/obtain-supported-codecs.md)获取,OH_MD_KEY_ROTATION配置的参数都支持。\n
|
||||
* 设置OH_MD_KEY_VIDEO_ENABLE_LOW_LATENCY接口时如果当前平台不支持,不报错,走正常解码流程。\n
|
||||
* @table 参数校验规则:
|
||||
* | Key | 配置正常范围的值 | 配置超出范围的值 | 不配置该参数 |
|
||||
* | ----------| -------- | -------- | ------ |
|
||||
* | OH_MD_KEY_WIDTH | AV_ERR_OK | AV_ERR_INVALID_VAL | AV_ERR_INVALID_VAL |
|
||||
* | OH_MD_KEY_HEIGHT | AV_ERR_OK | AV_ERR_INVALID_VAL | AV_ERR_INVALID_VAL |
|
||||
* | OH_MD_KEY_PIXEL_FORMAT 请参阅{@link OH_AVPixelFormat} | AV_ERR_OK | AV_ERR_UNSUPPORT | AV_ERR_OK |
|
||||
* | OH_MD_KEY_FRAME_RATE | AV_ERR_OK | AV_ERR_INVALID_VAL | AV_ERR_OK |
|
||||
* | OH_MD_KEY_ROTATION 请参阅{@link OH_MD_KEY_ROTATION} | AV_ERR_OK | AV_ERR_INVALID_VAL | AV_ERR_OK |
|
||||
* @tableEnd
|
||||
* @note 建议按照该实例需要支持的最大分辨率来配置,否则可能会出现高于该分辨率的码流解码会触发异常。该设置直接影响应用的内存使用情况。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @param codec 指向视频解码实例的指针。
|
||||
* @param format 指向OH_AVFormat的指针,用于给出要解码的视频轨道的描述。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的解码器实例已经销毁。\n
|
||||
* AV_ERR_INVALID_VAL:1. 输入的codec指针为非解码器实例,或者为空指针;2. 输入format参数不支持。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。\n
|
||||
* AV_ERR_INVALID_STATE:本接口必须在OH_VideoDecoder_Prepare接口前调用,如果在其他状态时调用,则返回此错误码。\n
|
||||
* AV_ERR_VIDEO_UNSUPPORTED_COLOR_SPACE_CONVERSION:不支持色彩空间转换功能。\n
|
||||
* AV_ERR_UNSUPPORT:不支持的像素格式。
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_VideoDecoder_Configure(OH_AVCodec *codec, OH_AVFormat *format);
|
||||
|
||||
/**
|
||||
* @brief 准备解码器的内部资源,在调用该接口之前,必须调用OH_VideoDecoder_Configure接口。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @param codec 指向视频解码实例的指针。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的解码器实例已经销毁。\n
|
||||
* AV_ERR_INVALID_VAL:输入的codec指针为非解码器实例,或者为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_INVALID_STATE:当前解码器状态不支持调用本接口。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:1. 操作不允许;2. 配置了色彩空间转换功能,但解码器处于Buffer模式。
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_VideoDecoder_Prepare(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 调用{@link OH_VideoDecoder_Prepare}接口成功后调用此接口启动解码器。成功启动后,解码器将开始报告注册的回调事件。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @param codec 指向视频解码实例的指针。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的解码器实例已经销毁。\n
|
||||
* AV_ERR_INVALID_VAL:输入的codec指针为非解码器实例,或者为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_INVALID_STATE:当前解码器状态不支持调用本接口。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:1. 操作不允许;2. 视频色彩空间转换功能已配置,但是没有调用OH_VideoDecoder_Prepare接口。
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_VideoDecoder_Start(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 停止解码器,释放输入输出buffer。停止后,可以通过调用OH_VideoDecoder_Start接口重新进入Running状态。\n
|
||||
*
|
||||
* 需要注意的是,如果编解码器特定数据以前已输入到解码器,则需要再次输入。
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @param codec 指向视频解码实例的指针。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的解码器实例已经销毁。\n
|
||||
* AV_ERR_INVALID_VAL:输入的codec指针为非解码器实例,或者为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_INVALID_STATE:当前解码器状态不支持调用本接口。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_VideoDecoder_Stop(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 清除解码器中缓存的输入和输出数据及参数集如H.264格式的PPS/SPS。\n
|
||||
* 调用此接口后,以前通过异步回调上报的所有缓冲区index都将失效,请确保不要访问这些index对应的缓冲区。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @param codec 指向视频解码实例的指针。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的解码器实例已经销毁。\n
|
||||
* AV_ERR_INVALID_VAL:输入的codec指针为非解码器实例,或者为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_INVALID_STATE:当前解码器状态不支持调用本接口。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_VideoDecoder_Flush(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 重置解码器,解码器回到初始化状态。如果要继续解码,需要再次调用OH_VideoDecoder_Configure接口配置解码器实例。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @param codec 指向视频解码实例的指针。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的解码器实例已经销毁。\n
|
||||
* AV_ERR_INVALID_VAL:输入的codec指针为非解码器实例,或者为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_VideoDecoder_Reset(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 获取解码器输出数据的OH_AVFormat信息,请参阅{@link OH_AVFormat}。\n
|
||||
* 需要注意的是,指向的OH_AVFormat实例在生命周期结束时需开发者通过调用接口{@link OH_AVFormat_Destroy}释放。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @param codec 指向视频解码实例的指针。
|
||||
* @return 返回指向OH_AVFormat实例的指针。
|
||||
* 当输入的codec指针非解码器实例,或者为空指针,则返回NULL。
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVFormat *OH_VideoDecoder_GetOutputDescription(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 设置解码器的动态参数。\n
|
||||
* 注意,该接口只能在解码器启动后调用。同时,参数配置错误可能会导致解码失败。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @param codec 指向视频解码实例的指针。
|
||||
* @param format 指向OH_AVFormat实例的指针。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的解码器实例已经销毁。\n
|
||||
* AV_ERR_INVALID_VAL:1. 输入的codec指针为非解码器实例,或者为空指针;2. 输入format参数不支持。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_INVALID_STATE:当前解码器状态不支持调用本接口。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_VideoDecoder_SetParameter(OH_AVCodec *codec, OH_AVFormat *format);
|
||||
|
||||
/**
|
||||
* @brief 将填充数据的输入缓冲区提交给视频解码器。\n
|
||||
* 输入回调将报告可用的输入缓冲区和相应的index值,请参阅{@link OH_AVCodecOnNeedInputData}。
|
||||
* 一旦具有指定index的缓冲区提交到视频解码器,则无法再次访问缓冲区,直到再次收到输入回调,报告具有相同index的缓冲区可用。
|
||||
* 此外,对于某些解码器,需要在开始时向解码器输入编解码特定数据,以初始化解码器的解码过程,如H.264格式的PPS/SPS数据。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @param codec 指向视频解码实例的指针。
|
||||
* @param index 输入Buffer对应的索引值。由{@link OH_AVCodecOnNeedInputData}给出。
|
||||
* @param attr 描述缓冲区中包含的数据的信息。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的解码器实例已经销毁。\n
|
||||
* AV_ERR_INVALID_VAL:\n
|
||||
* 1. 输入的codec指针为非解码器实例,或者为空指针;\n
|
||||
* 2. index非法,该错误不影响后续解码流程。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_INVALID_STATE:当前解码器状态不支持调用本接口。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_VideoDecoder_PushInputBuffer}
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_VideoDecoder_PushInputData(OH_AVCodec *codec, uint32_t index, OH_AVCodecBufferAttr attr);
|
||||
|
||||
/**
|
||||
* @brief 将处理后的输出buffer返回给解码器,并通知解码器完成在输出surface上渲染buffer中包含的解码数据。\n
|
||||
* 如果之前没有配置输出surface,则调用此接口仅将指定index对应的输出缓冲区返回给解码器。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @param codec 指向视频解码实例的指针。
|
||||
* @param index 输出Buffer对应的索引值。由{@link OH_AVCodecOnNewOutputData}给出。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的解码器实例已经销毁。\n
|
||||
* AV_ERR_INVALID_VAL:\n
|
||||
* 1. 输入的codec指针为非解码器实例,或者为空指针;\n
|
||||
* 2. index非法,该错误不影响后续解码流程。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_INVALID_STATE:当前解码器状态不支持调用本接口。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_VideoDecoder_RenderOutputBuffer}
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_VideoDecoder_RenderOutputData(OH_AVCodec *codec, uint32_t index);
|
||||
|
||||
/**
|
||||
* @brief 将处理后的输出缓冲区返回到解码器。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @param codec 指向视频解码实例的指针。
|
||||
* @param index 输出buffer对应的索引值。由{@link OH_AVCodecOnNewOutputData}给出。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的解码器实例已经销毁。\n
|
||||
* AV_ERR_INVALID_VAL:\n
|
||||
* 1. 输入的codec指针为非解码器实例,或者为空指针;\n
|
||||
* 2. index非法,该错误不影响后续解码流程。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_INVALID_STATE:当前解码器状态不支持调用本接口。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_VideoDecoder_FreeOutputBuffer}
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_VideoDecoder_FreeOutputData(OH_AVCodec *codec, uint32_t index);
|
||||
|
||||
/**
|
||||
* @brief 通知视频解码器已对index对应的缓冲区完成输入数据的填充。\n
|
||||
* 输入回调将报告可用的输入缓冲区和相应的index值,请参阅{@link OH_AVCodecOnNeedInputBuffer}。
|
||||
* 一旦具有指定index的缓冲区提交到视频解码器,则无法再次访问缓冲区,直到再次收到输入回调,报告具有相同index的缓冲区可用。
|
||||
* 此外,对于某些解码器,需要在开始时向解码器输入编解码特定数据,以初始化解码器的解码过程,如H.264格式的PPS/SPS数据。\n
|
||||
* 开发者可以使用该接口把解码需要的参数集如H.264格式的PPS/SPS传递给解码器,该参数集可以单独送入解码器也可以和要解码的数据一起传入。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @param codec 指向视频解码实例的指针。
|
||||
* @param index 输入buffer对应的索引值。由{@link OH_AVCodecOnNeedInputBuffer}给出。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的解码器实例已经销毁。\n
|
||||
* AV_ERR_INVALID_VAL:\n
|
||||
* 1. 输入的codec指针为非解码器实例,或者为空指针;\n
|
||||
* 2. index非法,该错误不影响后续解码流程。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_INVALID_STATE:当前解码器状态不支持调用本接口。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。\n
|
||||
* AV_ERR_DRM_DECRYPT_FAILED: 受DRM保护的视频缓冲区解密失败,建议查看日志。
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVErrCode OH_VideoDecoder_PushInputBuffer(OH_AVCodec *codec, uint32_t index);
|
||||
|
||||
/**
|
||||
* @brief 将index对应的输出缓冲返回给解码器,缓冲区中携带解码输出数据,并通知解码器完成在输出surface上渲染,输出缓冲包含解码数据。\n
|
||||
* 如果之前没有配置输出surface,则调用此接口仅将指定index对应的输出缓冲区返回给解码器。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @param codec 指向视频解码实例的指针。
|
||||
* @param index 输出buffer对应的索引值。由{@link OH_AVCodecOnNewOutputBuffer}给出。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的解码器实例已经销毁。\n
|
||||
* AV_ERR_INVALID_VAL:\n
|
||||
* 1. 输入的codec指针为非解码器实例,或者为空指针;\n
|
||||
* 2. index非法,该错误不影响后续解码流程。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_INVALID_STATE:当前解码器状态不支持调用本接口。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVErrCode OH_VideoDecoder_RenderOutputBuffer(OH_AVCodec *codec, uint32_t index);
|
||||
|
||||
/**
|
||||
* @brief 将index对应的输出缓冲返回给解码器,缓冲区中携带解码输出数据,并通知解码器在开发者指定的时间内完成在输出surface上渲染,输出缓冲包含解码数据。\n
|
||||
* 如果之前没有配置输出surface,则调用此接口仅将指定index对应的输出缓冲区返回给解码器。\n
|
||||
* 开发者可以使用时间戳在特定时间(在VSYNC或者缓冲区时间戳之后)渲染缓冲区。若要在指定的时间戳显示,时间戳需要合理接近系统时间,有几点需要注意:\n
|
||||
* 1. 缓冲区是按照顺序处理的,因此可能会阻塞后续缓冲区在surface上的显示,如果想要对用户的一些行为做出反应,例如停止或者快进快退视频,这一点很重要。\n
|
||||
* 2. 如果多个缓冲区被发送到surface要在同一个VSYNC上渲染,那么最后一个将会被显示,其他的将被丢弃。\n
|
||||
* 3. 如果时间戳与当前的系统时间不是“合理接近”,surface将会忽略时间戳,并在可行的最早时间里显示buffer。在此模式下不会丢弃帧。
|
||||
* 4. 如果需要由系统根据显示刷新率来丢帧,则必须调用此接口,否则应用需自行实现丢帧逻辑。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @param codec 指向视频解码实例的指针。
|
||||
* @param index 输出buffer对应的索引值。由{@link OH_AVCodecOnNewOutputBuffer}给出。
|
||||
* @param renderTimestampNs 输出buffer被发送到surface的时间戳,取值范围大于0,应由std::chrono::steady_clock标准库时钟生成,且单位为纳秒。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的解码器实例已经销毁。\n
|
||||
* AV_ERR_INVALID_VAL:\n
|
||||
* 1. 输入的codec指针为非解码器实例,或者为空指针;\n
|
||||
* 2. index非法,该错误不影响后续解码流程。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_INVALID_STATE:当前解码器状态不支持调用本接口。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。
|
||||
* @since 12
|
||||
*/
|
||||
OH_AVErrCode OH_VideoDecoder_RenderOutputBufferAtTime(OH_AVCodec *codec, uint32_t index, int64_t renderTimestampNs);
|
||||
|
||||
/**
|
||||
* @brief 将处理后的输出缓冲区返回到解码器。用户使用完需要及时调用此接口释放输出缓存区,否则会阻塞解码流程。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @param codec 指向视频解码实例的指针
|
||||
* @param index 输出buffer对应的索引值。由{@link OH_AVCodecOnNewOutputBuffer}给出。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的解码器实例已经销毁。\n
|
||||
* AV_ERR_INVALID_VAL:1. 输入的codec指针为非解码器实例,或者为空指针;2. index非法或者连续给同一个index,该错误不影响后续解码流程。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_INVALID_STATE:当前解码器状态不支持调用本接口。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVErrCode OH_VideoDecoder_FreeOutputBuffer(OH_AVCodec *codec, uint32_t index);
|
||||
|
||||
/**
|
||||
* @brief 在解码器实例存在的情况下,检查当前解码器服务是否有效。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @param codec 指向视频解码实例的指针。
|
||||
* @param isValid 输出参数,指向布尔类型的指针。只有当接口返回AV_ERR_OK时,该值表示解码器服务的有效性(true为有效,false为无效)。建议开发者将isValid初始化为false。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:输入的codec指针为非解码器实例,或者为空指针。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_VideoDecoder_IsValid(OH_AVCodec *codec, bool *isValid);
|
||||
|
||||
/**
|
||||
* @brief 设置解密配置。在调用OH_VideoDecoder_Prepare接口之前,可选择调用此接口。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @param codec 指向视频解码实例的指针。
|
||||
* @param mediaKeySession 指向带有解密功能的DRM会话实例的指针。
|
||||
* @param secureVideoPath 安全视频通路。指定安全视频通路为true,非安全视频通路为false。
|
||||
* 在Surface模式下,既支持安全视频通路,也支持非安全视频通路。在Buffer模式下,仅支持非安全视频通路。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:1. 操作不允许;2. 解码服务进程异常;3. 媒体密钥会话服务处于错误状态。\n
|
||||
* AV_ERR_INVALID_VAL:1. 输入的codec指针为非解码器实例或为空指针;2. mediaKeySession为nullptr或无效。\n
|
||||
* AV_ERR_NO_MEMORY:输入的解码器实例已经销毁。
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVErrCode OH_VideoDecoder_SetDecryptionConfig(OH_AVCodec *codec, MediaKeySession *mediaKeySession,
|
||||
bool secureVideoPath);
|
||||
|
||||
/**
|
||||
* @brief 查询下一个可用输入缓冲区的索引。\n
|
||||
*
|
||||
* 调用此接口后需要接着调用{@link OH_VideoDecoder_GetInputBuffer}接口获取缓冲区实例,并通过{@link OH_VideoDecoder_PushInputBuffer}接口传递给解码器。\n
|
||||
* 需要注意的是,上述操作仅在同步模式下支持。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @param codec 指向视频解码实例的指针。
|
||||
* @param index 输入buffer对应的索引值。
|
||||
* @param timeoutUs 超时时长,单位为微秒。负值:无限等待;0:立即退出;正值:等待指定时长后退出。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的解码器实例已经销毁。\n
|
||||
* AV_ERR_INVALID_VAL:输入的codec指针为非解码器实例,或者为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_INVALID_STATE:当前解码器状态不支持调用本接口。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:禁止异步模式下使用。\n
|
||||
* AV_ERR_TRY_AGAIN_LATER:查询失败,建议等待短暂间隔后重试。
|
||||
* @since 20
|
||||
*/
|
||||
OH_AVErrCode OH_VideoDecoder_QueryInputBuffer(struct OH_AVCodec *codec, uint32_t *index, int64_t timeoutUs);
|
||||
|
||||
/**
|
||||
* @brief 获取可用输入缓冲区的实例。\n
|
||||
* 需要注意的是,此接口仅适用于同步模式。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @param codec 指向视频解码实例的指针。
|
||||
* @param index 输入buffer对应的索引值,可通过{@link OH_VideoDecoder_QueryInputBuffer}接口获取。
|
||||
* @return 如果执行成功,则返回一个指向OH_AVBuffer实例的指针,否则返回NULL。
|
||||
* @since 20
|
||||
*/
|
||||
OH_AVBuffer *OH_VideoDecoder_GetInputBuffer(struct OH_AVCodec *codec, uint32_t index);
|
||||
|
||||
/**
|
||||
* @brief 查询下一个可用输出缓冲区的索引。\n
|
||||
*
|
||||
* 通过{@link OH_VideoDecoder_GetOutputBuffer}接口获取的缓冲区实例可以通过执行以下操作来显示或释放解码帧:\n
|
||||
* 1. 通过{@link OH_VideoDecoder_FreeOutputBuffer}接口将处理后的输出缓冲区返回到解码器。\n
|
||||
* 2. 通过{@link OH_VideoDecoder_RenderOutputBuffer}在输出surface上渲染。\n
|
||||
* 3. 通过{@link OH_VideoDecoder_RenderOutputBufferAtTime}在指定时间内完成输出surface上渲染。\n
|
||||
* 需要注意的是,上述操作仅在同步模式下支持。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @param codec 指向视频解码实例的指针。
|
||||
* @param index 输出buffer对应的索引值。
|
||||
* @param timeoutUs 超时时长,单位为微秒。负值:无限等待;0:立即退出;正值:等待指定时长后退出。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的解码器实例已经销毁。\n
|
||||
* AV_ERR_INVALID_VAL:输入的codec指针为非解码器实例,或者为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_INVALID_STATE:当前解码器状态不支持调用本接口。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:禁止异步模式下使用。\n
|
||||
* AV_ERR_STREAM_CHANGED:流格式已变更,可以通过调用{@link OH_VideoDecoder_GetOutputDescription}接口获取新的流信息。\n
|
||||
* AV_ERR_TRY_AGAIN_LATER:查询失败,建议等待短暂间隔后重试。
|
||||
* @since 20
|
||||
*/
|
||||
OH_AVErrCode OH_VideoDecoder_QueryOutputBuffer(struct OH_AVCodec *codec, uint32_t *index, int64_t timeoutUs);
|
||||
|
||||
/**
|
||||
* @brief 获取可用输出缓冲区的实例。需要注意的是,此接口仅适用于同步模式。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoDecoder
|
||||
* @param codec 指向视频解码实例的指针。
|
||||
* @param index 输出buffer对应的索引值,可通过{@link OH_VideoDecoder_QueryOutputBuffer}接口获取。
|
||||
* @return 如果执行成功,则返回一个指向OH_AVBuffer实例的指针,否则返回NULL。
|
||||
* @since 20
|
||||
*/
|
||||
OH_AVBuffer *OH_VideoDecoder_GetOutputBuffer(struct OH_AVCodec *codec, uint32_t index);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // NATIVE_AVCODEC_VIDEODECODER_H
|
||||
/** @} */
|
||||
@@ -0,0 +1,600 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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 VideoEncoder
|
||||
* @{
|
||||
*
|
||||
* @brief VideoEncoder模块提供用于视频编码的接口。
|
||||
*
|
||||
* @since 9
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @file native_avcodec_videoencoder.h
|
||||
*
|
||||
* @brief 声明用于视频编码的接口。
|
||||
* @sample [AVCodec](https://gitcode.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Media/AVCodec)
|
||||
*
|
||||
* @kit AVCodecKit
|
||||
* @include <multimedia/player_framework/native_avcodec_videoencoder.h>
|
||||
* @library libnative_media_venc.so
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @since 9
|
||||
*/
|
||||
|
||||
#ifndef NATIVE_AVCODEC_VIDEOENCODER_H
|
||||
#define NATIVE_AVCODEC_VIDEOENCODER_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include "native_avcodec_base.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief 配置随帧参数,当需要设置index对应帧的编码参数时,可以通过该接口设置。只在Surface模式生效。\n
|
||||
* 该接口只能在Surface模式下使用,使用前需要调用OH_VideoEncoder_RegisterParameterCallback接口注册。\n
|
||||
* 在Buffer模式下,OH_AVBuffer可以直接携带帧的编码参数,当前可以支持的随帧参数有帧级QPMin/QPMax,指定LTR设置参考帧。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @param codec 指向视频编码实例的指针。
|
||||
* @param index 对应编码帧的index。
|
||||
* @param parameter 编码参数。
|
||||
* @param userData 开发者执行回调所依赖的数据。
|
||||
* @since 12
|
||||
*/
|
||||
typedef void (*OH_VideoEncoder_OnNeedInputParameter)(OH_AVCodec *codec, uint32_t index, OH_AVFormat *parameter,
|
||||
void *userData);
|
||||
/**
|
||||
* @brief 根据MIME类型创建视频编码器实例,推荐使用。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @param mime MIME类型描述字符串,请参阅{@link AVCODEC_MIME_TYPE}。
|
||||
* @return 成功则返回一个指向视频编码实例的指针。
|
||||
* 如果输入为不支持的编码器类型或内存不足时,则返回NULL。
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVCodec *OH_VideoEncoder_CreateByMime(const char *mime);
|
||||
|
||||
/**
|
||||
* @brief 根据视频编码器名称创建视频编码器实例。使用此接口的前提是知道编码器的确切名称,编码器的名称可以通过能力查询获取。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @param name 视频编码器名称。
|
||||
* @return 成功则返回一个指向视频编码实例的指针。
|
||||
* 如果输入是不支持编码器名称或者内存资源不足,则返回NULL。
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVCodec *OH_VideoEncoder_CreateByName(const char *name);
|
||||
|
||||
/**
|
||||
* @brief 创建支持前处理的主视频编码器实例。\n
|
||||
*
|
||||
* 该编码器支持以下能力:\n
|
||||
* 1. 前处理功能(降采样、裁剪、丢帧)。\n
|
||||
* 2. 从该主编码器创建副编码器实现一入二出双路编码。\n
|
||||
*
|
||||
* 通过该接口创建的编码器仅支持Surface模式,不支持Buffer模式和同步模式。创建成功后需通过{@link OH_VideoEncoder_Destroy}销毁。\n
|
||||
*
|
||||
* @param mime MIME类型字符串,不可为NULL。必须是支持的类型,如OH_AVCODEC_MIMETYPE_VIDEO_AVC、OH_AVCODEC_MIMETYPE_VIDEO_HEVC。
|
||||
* @param codec 双指针,用于接收创建的编码器实例,不可为NULL。创建成功后需通过{@link OH_VideoEncoder_Destroy}销毁。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:mime为NULL/codec为NULL/MIME类型不支持。\n
|
||||
* AV_ERR_NO_MEMORY:内存分配失败。
|
||||
*
|
||||
* @since 26.0.0
|
||||
*/
|
||||
OH_AVErrCode OH_VideoEncoder_CreatePrimaryWithPreproc(const char *mime, OH_AVCodec **codec);
|
||||
|
||||
/**
|
||||
* @brief 从主编码器创建副视频编码器实例。\n
|
||||
*
|
||||
* 副编码器具有以下特性:\n
|
||||
* 1. 与主编码器共享输入源。\n
|
||||
* 2. 可独立配置编码参数。\n
|
||||
* 3. 可使用不同的前处理参数。\n
|
||||
* 4. 可独立启动/停止(不依赖主编码器的启停状态)。\n
|
||||
* 5. 生命周期必须短于主编码器。\n
|
||||
* 6. 一个主编码器同时只能拥有一个副编码器。\n
|
||||
* 必须在主编码器创建成功之后才能创建。创建成功后需通过{@link OH_VideoEncoder_Destroy}销毁。销毁顺序建议先Destroy Secondary再Destroy Primary。\n
|
||||
*
|
||||
* @param primary 主编码器句柄,必须由{@link OH_VideoEncoder_CreatePrimaryWithPreproc}创建,不可为NULL。
|
||||
* @param codec 双指针,用于接收创建的副编码器实例,不可为NULL。创建成功后需通过{@link OH_VideoEncoder_Destroy}销毁。
|
||||
*
|
||||
* @return AV_ERR_OK:执行成功。
|
||||
* AV_ERR_INVALID_VAL:primary为NULL/codec为NULL/primary不是有效的主编码器。
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:主编码器已存在关联的副编码器。
|
||||
* AV_ERR_NO_MEMORY:内存分配失败。
|
||||
*
|
||||
* @since 26.0.0
|
||||
*/
|
||||
OH_AVErrCode OH_VideoEncoder_CreateSecondaryFromPrimary(OH_AVCodec *primary, OH_AVCodec **codec);
|
||||
|
||||
/**
|
||||
* @brief 清理编码器内部资源,销毁编码器实例。不能重复销毁。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @param codec 指向视频编码实例的指针。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的编码实例内部异常,如内部出现异常空指针。\n
|
||||
* AV_ERR_INVALID_VAL:输入的codec指针为非编码器实例,或者为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_VideoEncoder_Destroy(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 设置OH_AVCodecAsyncCallback回调函数,让应用可以响应视频编码器生成的事件。在调用OH_VideoEncoder_Prepare接口之前,必须调用此接口。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @param codec 指向视频编码实例的指针。
|
||||
* @param callback 所有回调函数的集合。
|
||||
* @param userData 开发者执行回调所依赖的数据。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的编码实例内部异常,如内部出现异常空指针。\n
|
||||
* AV_ERR_INVALID_VAL:输入的codec指针为非编码器实例,或者为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_VideoEncoder_RegisterCallback}
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_VideoEncoder_SetCallback(OH_AVCodec *codec, OH_AVCodecAsyncCallback callback, void *userData);
|
||||
|
||||
/**
|
||||
* @brief 注册OH_AVCodecCallback回调函数,让应用可以响应视频编码器生成的事件。在调用OH_VideoEncoder_Prepare接口之前,必须调用此接口。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @param codec 指向视频编码实例的指针。
|
||||
* @param callback 所有回调函数的集合。
|
||||
* @param userData 开发者执行回调所依赖的数据。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的编码实例内部异常,如内部出现异常空指针。\n
|
||||
* AV_ERR_INVALID_VAL:输入的codec指针为非编码器实例,或者为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVErrCode OH_VideoEncoder_RegisterCallback(OH_AVCodec *codec, OH_AVCodecCallback callback, void *userData);
|
||||
|
||||
/**
|
||||
* @brief 注册OH_VideoEncoder_OnNeedInputParameter输入参数回调函数,让应用可以响应视频编码器生成的事件。编码Surface模式,\n
|
||||
* 需要设置随帧参数时,须使用该接口。如果使用该接口,必须在{@link OH_VideoEncoder_Configure}之前调用该接口。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @param codec 指向视频编码实例的指针。
|
||||
* @param onInputParameter 输入参数回调指针。
|
||||
* @param userData 开发者执行回调所依赖的数据。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的编码实例内部异常,如内部出现异常空指针。\n
|
||||
* AV_ERR_INVALID_VAL:输入的codec指针为非编码器实例,或者为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。\n
|
||||
* AV_ERR_INVALID_STATE:本接口必须在OH_VideoEncoder_Prepare接口前调用,如果在其他状态时调用,则返回此错误码。
|
||||
* @since 12
|
||||
*/
|
||||
OH_AVErrCode OH_VideoEncoder_RegisterParameterCallback(OH_AVCodec *codec,
|
||||
OH_VideoEncoder_OnNeedInputParameter onInputParameter,
|
||||
void *userData);
|
||||
|
||||
/**
|
||||
* @brief 配置视频编码器的编码参数,通常需要配置输入视频帧的描述信息,如帧的宽、高、像素格式等。必须在调用OH_VideoEncoder_Prepare接口之前,调用此接口。\n
|
||||
* 该接口对配置参数进行合法性校验,部分非法参数不会强校验,使用默认值或直接丢弃。部分非法参数会强校验,具体规则如下:\n
|
||||
* 以下参数的配置范围可通过[能力查询](../../media/avcodec/obtain-supported-codecs.md)获取,OH_MD_KEY_I_FRAME_INTERVAL暂不支持能力查询。\n
|
||||
* 设置OH_MD_KEY_VIDEO_ENCODER_ENABLE_TEMPORAL_SCALABILITY、OH_MD_KEY_VIDEO_ENCODER_LTR_FRAME_COUNT参数时,
|
||||
* 如果当前平台不支持这些功能,该接口不会报错,而是继续按照正常编码流程执行。
|
||||
* @table 参数校验:
|
||||
* | Key | 配置正常范围的值 | 配置超出范围的值 | 不配置该参数 |
|
||||
* | ------- | -------- | -------- | ------ |
|
||||
* | OH_MD_KEY_WIDTH | AV_ERR_OK | AV_ERR_INVALID_VAL | AV_ERR_INVALID_VAL |
|
||||
* | OH_MD_KEY_HEIGHT | AV_ERR_OK | AV_ERR_INVALID_VAL | AV_ERR_INVALID_VAL |
|
||||
* | OH_MD_KEY_PIXEL_FORMAT 请参阅[OH_AVPixelFormat](_core.md#oh_avpixelformat-1) | AV_ERR_OK | AV_ERR_UNSUPPORT | AV_ERR_OK |
|
||||
* | OH_MD_KEY_FRAME_RATE | AV_ERR_OK | AV_ERR_INVALID_VAL | AV_ERR_OK |
|
||||
* | OH_MD_KEY_PROFILE 请参阅[OH_MD_KEY_PROFILE](_codec_base.md#oh_md_key_profile) | AV_ERR_OK | AV_ERR_INVALID_VAL | AV_ERR_OK |
|
||||
* | OH_MD_KEY_I_FRAME_INTERVAL | AV_ERR_OK | \\ | AV_ERR_OK |
|
||||
* @tableEnd
|
||||
*
|
||||
* @table
|
||||
* | OH_MD_KEY_<br>BITRATE | OH_MD_KEY_<br>QUALITY | OH_MD_KEY_<br>VIDEO_ENCODER_BITRATE_MODE | 返回值 | 说明 |
|
||||
* | -------- | ---------| ---------- | ---- | ---------- |
|
||||
* | \\ | \\ | \\ | AV_ERR_OK | 使用编码器默认值 |
|
||||
* | 超出范围 | 超出范围 | 不支持的模式 | AV_ERR_INVALID_VAL | 异常值均报错 |
|
||||
* | 正常值 | 正常值 | \\ | AV_ERR_INVALID_VAL | Bitrate与Quality冲突 |
|
||||
* | 正常值 | \\ | \\ | AV_ERR_OK | 使能默认码控模式 |
|
||||
* | 正常值 | \\ | BITRATE_MODE_VBR、BITRATE_MODE_CBR | AV_ERR_OK | \\ |
|
||||
* | 正常值 | \\ | BITRATE_MODE_CQ | AV_ERR_INVALID_VAL | Bitrate 与 CQ 模式冲突 |
|
||||
* | \\ | 正常值 | \\ | AV_ERR_OK | 使能 CQ 模式 |
|
||||
* | \\ | 正常值 | BITRATE_MODE_CQ | AV_ERR_OK | \\ |
|
||||
* | \\ | 正常值 | BITRATE_MODE_VBR、BITRATE_MODE_CBR | AV_ERR_INVALID_VAL | Quality 与 VBR、CBR 模式冲突 |
|
||||
* | \\ | \\ | BITRATE_MODE_VBR、BITRATE_MODE_CBR | AV_ERR_OK | 使用编码器默认码率|
|
||||
* | \\ | \\ | BITRATE_MODE_CQ | AV_ERR_OK | 使用默认quality |
|
||||
* @tableEnd
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @param codec 指向视频编码实例的指针。
|
||||
* @param format 指向OH_AVFormat的指针,用于给出要编码的视频轨的描述。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的编码实例内部异常,如内部出现异常空指针。\n
|
||||
* AV_ERR_INVALID_VAL:1. 输入的codec指针为非编码器实例,或者为空指针;2. 输入format参数不支持。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。\n
|
||||
* AV_ERR_INVALID_STATE:本接口必须在OH_VideoEncoder_Prepare接口前调用,如果在其他状态时调用,则返回此错误码。\n
|
||||
* AV_ERR_UNSUPPORT:不支持的像素格式。
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_VideoEncoder_Configure(OH_AVCodec *codec, OH_AVFormat *format);
|
||||
|
||||
/**
|
||||
* @brief 准备编码器的内部资源,在OH_VideoEncoder_Configure接口后调用。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @param codec 指向视频编码实例的指针。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的编码实例内部异常。\n
|
||||
* AV_ERR_INVALID_VAL:输入的codec指针为非编码器实例,或者为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。\n
|
||||
* AV_ERR_INVALID_STATE:当前编码器状态不支持调用本接口。
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_VideoEncoder_Prepare(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 调用{@link OH_VideoEncoder_Prepare}接口成功后调用此接口启动编码器。成功启动后,编码器将开始报告注册的回调事件。\n
|
||||
* Surface模式下,在surface中有正确的输入后,每完成一帧编码会触发OnNewOutputBuffer。\n
|
||||
* Buffer模式下,编码器会立即触发输入回调,开发者每完成一次输入,编码器执行编码,每完成一帧编码会触发OnNewOutputBuffer。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @param codec 指向视频编码实例的指针。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的编码实例内部异常,如内部出现异常空指针。\n
|
||||
* AV_ERR_INVALID_VAL:输入的codec指针为非编码器实例,或者为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。\n
|
||||
* AV_ERR_INVALID_STATE:当前编码器状态不支持调用本接口。
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_VideoEncoder_Start(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 停止编码器,释放输入输出buffer。停止之后,可以通过调用OH_VideoEncoder_Start接口重新进入Running状态。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @param codec 指向视频编码实例的指针。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的编码实例内部异常,如内部出现异常空指针。\n
|
||||
* AV_ERR_INVALID_VAL:输入的codec指针为非编码器实例,或者为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。\n
|
||||
* AV_ERR_INVALID_STATE:当前编码器状态不支持调用本接口。
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_VideoEncoder_Stop(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 清除编码器中缓存的输入和输出数据及参数集如H.264格式的PPS/SPS。\n
|
||||
*
|
||||
* 调用此接口后,以前通过异步回调上报的所有缓冲区index都将失效,请确保不要访问这些index对应的缓冲区。该接口不能连续调用。
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @param codec 指向视频编码实例的指针。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的编码实例内部异常,如内部出现异常空指针。\n
|
||||
* AV_ERR_INVALID_VAL:输入的codec指针为非编码器实例,或者为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。\n
|
||||
* AV_ERR_INVALID_STATE:当前编码器状态不支持调用本接口。
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_VideoEncoder_Flush(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 重置编码器,编码器回到初始化状态。如果要继续编码,需要再次调用OH_VideoEncoder_Configure接口配置编码器实例。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @param codec 指向视频编码实例的指针。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的编码实例内部异常,如内部出现异常空指针。\n
|
||||
* AV_ERR_INVALID_VAL:输入的codec指针为非编码器实例,或者为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_VideoEncoder_Reset(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 获取编码器输出数据的OH_AVFormat信息。\n
|
||||
*
|
||||
* 需要注意的是,返回值指向的OH_AVFormat实例的生命周期需要开发者通过调用接口{@link OH_AVFormat_Destroy}释放。
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @param codec 指向视频编码实例的指针。
|
||||
* @return 返回指向OH_AVFormat实例的指针。
|
||||
* 当输入的codec指针非编码实例,或者为空指针,则返回NULL。
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVFormat *OH_VideoEncoder_GetOutputDescription(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 在编码器运行时设置编码器参数。\n
|
||||
* 注意,此接口只有在编码器启动后才能调用。同时,不正确的参数设置可能会导致编码失败。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @param codec 指向视频编码实例的指针。
|
||||
* @param format 指向OH_AVFormat实例的指针。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的编码实例内部异常,如内部出现异常空指针。\n
|
||||
* AV_ERR_INVALID_VAL:1. 输入的codec指针为非编码器实例,或者为空指针;2. 输入format参数不支持。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。\n
|
||||
* AV_ERR_INVALID_STATE:当前编码器状态不支持调用本接口。
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_VideoEncoder_SetParameter(OH_AVCodec *codec, OH_AVFormat *format);
|
||||
|
||||
/**
|
||||
* @brief 从视频编码器获取输入surface,必须在调用OH_VideoEncoder_Configure接口之后OH_VideoEncoder_Prepare接口之前调用此接口。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @param codec 指向视频编码实例的指针。
|
||||
* @param window 指向OHNativeWindow实例的指针, 请参阅{@link OHNativeWindow}。
|
||||
* 应用负责管理window的生命周期,结束时调用{@link OH_NativeWindow_DestroyNativeWindow}释放。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:输入的codec指针为非编码器实例,或者为空指针。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_VideoEncoder_GetSurface(OH_AVCodec *codec, OHNativeWindow **window);
|
||||
|
||||
/**
|
||||
* @brief 将处理后的输出缓冲区返回给编码器。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @param codec 指向视频编码实例的指针。
|
||||
* @param index 输出缓冲区对应的索引值。由{@link OH_AVCodecOnNewOutputData}给出。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的编码实例内部异常,如内部出现异常空指针。\n
|
||||
* AV_ERR_INVALID_VAL:输入的codec指针为非编码器实例,或者为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。\n
|
||||
* AV_ERR_INVALID_STATE:当前编码器状态不支持调用本接口。
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_VideoEncoder_FreeOutputBuffer}
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_VideoEncoder_FreeOutputData(OH_AVCodec *codec, uint32_t index);
|
||||
|
||||
/**
|
||||
* @brief 通知视频编码器输入流已结束。建议使用此接口进行通知。该接口只在Surface模式下使用,
|
||||
* Buffer模式通过OH_AVBuffer携带EOS信息,通知输入流的结束。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @param codec 指向视频编码实例的指针。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的编码实例内部异常,如内部出现异常空指针。\n
|
||||
* AV_ERR_INVALID_VAL:输入的codec指针为非编码器实例,或者为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。\n
|
||||
* AV_ERR_INVALID_STATE:当前编码器状态不支持调用本接口。
|
||||
* @since 9
|
||||
*/
|
||||
OH_AVErrCode OH_VideoEncoder_NotifyEndOfStream(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 将填入数据的输入缓冲区提交给视频编码器。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @param codec 指向视频编码实例的指针。
|
||||
* @param index 输入缓冲区对应的索引值。由{@link OH_AVCodecOnNeedInputData}给出。
|
||||
* @param attr 缓冲区中包含数据的描述信息。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的编码实例内部异常,如内部出现异常空指针。\n
|
||||
* AV_ERR_INVALID_VAL:\n
|
||||
* 1. 输入的codec指针为非编码器实例,或者为空指针;\n
|
||||
* 2. index非法,该错误不影响后续编码流程。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。\n
|
||||
* AV_ERR_INVALID_STATE:当前编码器状态不支持调用本接口。
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_VideoEncoder_PushInputBuffer}
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_VideoEncoder_PushInputData(OH_AVCodec *codec, uint32_t index, OH_AVCodecBufferAttr attr);
|
||||
|
||||
/**
|
||||
* @brief Buffer模式下,将index对应的OH_AVBuffer送入编码器编码。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @param codec 指向视频编码实例的指针。
|
||||
* @param index 输入缓冲区对应的索引值。由{@link OH_AVCodecOnNeedInputBuffer}给出。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的编码实例内部异常,如内部出现异常空指针。\n
|
||||
* AV_ERR_INVALID_VAL:
|
||||
* 1. 输入的codec指针为非编码器实例,或者为空指针;
|
||||
* 2. index非法,该错误不影响后续编码流程。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。\n
|
||||
* AV_ERR_INVALID_STATE:当前编码器状态不支持调用本接口。
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVErrCode OH_VideoEncoder_PushInputBuffer(OH_AVCodec *codec, uint32_t index);
|
||||
|
||||
/**
|
||||
* @brief Surface模式下,将index对应帧的编码参数送入编码器编码。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @param codec 指向视频编码实例的指针。
|
||||
* @param index 输入参数缓冲区对应的索引值。由{@link OH_VideoEncoder_OnNeedInputParameter}给出。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的编码实例内部异常,如内部出现异常空指针。\n
|
||||
* AV_ERR_INVALID_VAL:\n
|
||||
* 1. 输入的codec指针为非编码器实例,或者为空指针;\n
|
||||
* 2. index非法,该错误不影响后续编码流程。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。\n
|
||||
* AV_ERR_INVALID_STATE:当前编码器状态不支持调用本接口。
|
||||
* @since 12
|
||||
*/
|
||||
OH_AVErrCode OH_VideoEncoder_PushInputParameter(OH_AVCodec *codec, uint32_t index);
|
||||
|
||||
/**
|
||||
* @brief 将处理后的index对应的OH_AVBuffer退回给编码器。开发者使用完需要及时调用此接口释放输出缓存区,否则会阻塞编码流程。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @param codec 指向视频编码实例的指针。
|
||||
* @param index 输出缓冲区对应的索引值。由{@link OH_AVCodecOnNewOutputBuffer}给出。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的编码实例内部异常,如内部出现异常空指针。\n
|
||||
* AV_ERR_INVALID_VAL:\n
|
||||
* 1. 输入的codec指针为非编码器实例,或者为空指针;\n
|
||||
* 2. index非法,该错误不影响后续编码流程。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:操作不允许。\n
|
||||
* AV_ERR_INVALID_STATE:当前编码器状态不支持调用本接口。
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVErrCode OH_VideoEncoder_FreeOutputBuffer(OH_AVCodec *codec, uint32_t index);
|
||||
|
||||
/**
|
||||
* @brief 编码器接收到的图像的描述信息。调用{@link OH_VideoEncoder_Configure}后调用此接口。\n
|
||||
* 需要注意的是,返回指针所指向的OH_AVFormat实例的生命周期需要由开发者通过调用{@link OH_AVFormat_Destroy}接口释放。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @param codec 指向视频编码实例的指针。
|
||||
* @return 返回指向OH_AVFormat实例的指针。
|
||||
* 当codec指针非编码实例,或者为空指针,则返回NULL。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVFormat *OH_VideoEncoder_GetInputDescription(OH_AVCodec *codec);
|
||||
|
||||
/**
|
||||
* @brief 在编码器实例存在的情况下,检查当前编码器服务是否有效。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @param codec 指向视频编码实例的指针。
|
||||
* @param isValid 输出参数,指向布尔类型的指针。
|
||||
* 只有当接口返回AV_ERR_OK时,该值表示编码器服务的有效性(true为有效,false为无效)。建议开发者将isValid初始化为false。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:输入的codec指针为非编码器实例,或者为空指针。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_VideoEncoder_IsValid(OH_AVCodec *codec, bool *isValid);
|
||||
|
||||
/**
|
||||
* @brief 视频编码器的码率控制模式。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @deprecated since 14
|
||||
* @useinstead {@link OH_BitrateMode}
|
||||
* @since 9
|
||||
*/
|
||||
typedef enum OH_VideoEncodeBitrateMode {
|
||||
/**
|
||||
* @brief 恒定码率模式。
|
||||
* @deprecated since 14
|
||||
* @useinstead {@link BITRATE_MODE_CBR}
|
||||
*/
|
||||
CBR = 0,
|
||||
/**
|
||||
* @brief 可变码率模式。
|
||||
* @deprecated since 14
|
||||
* @useinstead {@link BITRATE_MODE_VBR}
|
||||
*/
|
||||
VBR = 1,
|
||||
/**
|
||||
* @brief 恒定QP模式。
|
||||
* @deprecated since 14
|
||||
* @useinstead {@link BITRATE_MODE_CQ}
|
||||
*/
|
||||
CQ = 2,
|
||||
} OH_VideoEncodeBitrateMode;
|
||||
|
||||
/**
|
||||
* @brief 查询下一个可用输入缓冲区的索引。\n
|
||||
*
|
||||
* 调用此接口后需要接着调用{@link OH_VideoEncoder_GetInputBuffer}接口获取缓冲区实例,并通过{@link OH_VideoEncoder_PushInputBuffer}接口传递给编码器。\n
|
||||
* 需要注意的是,上述操作仅在同步模式下支持。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @param codec 指向视频编码实例的指针。
|
||||
* @param index 输入buffer对应的索引值。
|
||||
* @param timeoutUs 超时时长,单位为微秒。负值:无限等待;0:立即退出;正值:等待指定时长后退出。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的编码器实例已经销毁。\n
|
||||
* AV_ERR_INVALID_VAL:输入的codec指针为非编码器实例,或者为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_INVALID_STATE:当前编码器状态不支持调用本接口。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:禁止异步模式下使用。\n
|
||||
* AV_ERR_TRY_AGAIN_LATER:查询失败,建议等待短暂间隔后重试。
|
||||
* @since 20
|
||||
*/
|
||||
OH_AVErrCode OH_VideoEncoder_QueryInputBuffer(struct OH_AVCodec *codec, uint32_t *index, int64_t timeoutUs);
|
||||
|
||||
/**
|
||||
* @brief 获取可用输入缓冲区的实例。\n
|
||||
* 需要注意的是,此接口仅适用于同步模式。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @param codec 指向视频编码实例的指针。
|
||||
* @param index 输入buffer对应的索引值,可通过{@link OH_VideoEncoder_QueryInputBuffer} 接口获取。
|
||||
* @return 如果执行成功,则返回一个指向OH_AVBuffer实例的指针,否则返回NULL。
|
||||
* @since 20
|
||||
*/
|
||||
OH_AVBuffer *OH_VideoEncoder_GetInputBuffer(struct OH_AVCodec *codec, uint32_t index);
|
||||
|
||||
/**
|
||||
* @brief 查询下一个可用输出缓冲区的索引。
|
||||
*
|
||||
* 通过{@link OH_VideoEncoder_GetOutputBuffer}接口获取的缓冲区实例可以通过{@link OH_VideoEncoder_FreeOutputBuffer}接口将处理后的输出缓冲区返回到编码器。\n
|
||||
* 需要注意的是,上述操作仅在同步模式下支持。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @param codec 指向视频编码实例的指针。
|
||||
* @param index 输出buffer对应的索引值。
|
||||
* @param timeoutUs 超时时长,单位为微秒。负值:无限等待;0:立即退出;正值:等待指定时长后退出。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_NO_MEMORY:输入的编码器实例已经销毁。\n
|
||||
* AV_ERR_INVALID_VAL:输入的codec指针为非编码器实例,或者为空指针。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。\n
|
||||
* AV_ERR_INVALID_STATE:当前编码器状态不支持调用本接口。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:禁止异步模式下使用。\n
|
||||
* AV_ERR_STREAM_CHANGED:流格式已变更,可以通过调用{@link OH_VideoEncoder_GetOutputDescription}接口获取新的流信息。\n
|
||||
* AV_ERR_TRY_AGAIN_LATER:查询失败,建议等待短暂间隔后重试。
|
||||
* @since 20
|
||||
*/
|
||||
OH_AVErrCode OH_VideoEncoder_QueryOutputBuffer(struct OH_AVCodec *codec, uint32_t *index, int64_t timeoutUs);
|
||||
|
||||
/**
|
||||
* @brief 获取可用输出缓冲区的实例。\n
|
||||
* 需要注意的是,此接口仅适用于同步模式。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.VideoEncoder
|
||||
* @param codec 指向视频编码实例的指针。
|
||||
* @param index 输出buffer对应的索引值,可通过{@link OH_VideoEncoder_QueryOutputBuffer}接口获取。
|
||||
* @return 如果执行成功,则返回一个指向OH_AVBuffer实例的指针,否则返回NULL。
|
||||
* @since 20
|
||||
*/
|
||||
OH_AVBuffer *OH_VideoEncoder_GetOutputBuffer(struct OH_AVCodec *codec, uint32_t index);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // NATIVE_AVCODEC_VIDEOENCODER_H
|
||||
|
||||
/** @} */
|
||||
@@ -0,0 +1,261 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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 AVDemuxer
|
||||
* @{
|
||||
*
|
||||
* @brief AVDemuxer模块提供从媒体文件码流中提取sample的接口。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @since 10
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @file native_avdemuxer.h
|
||||
*
|
||||
* @brief 声明用于音视频媒体数据解析的接口。
|
||||
* @sample [AVCodec](https://gitcode.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Media/AVCodec)
|
||||
*
|
||||
* @kit AVCodecKit
|
||||
* @include <multimedia/player_framework/native_avdemuxer.h>
|
||||
* @library libnative_media_avdemuxer.so
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @since 10
|
||||
*/
|
||||
|
||||
#ifndef NATIVE_AVDEMUXER_H
|
||||
#define NATIVE_AVDEMUXER_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include "native_avcodec_base.h"
|
||||
#include "native_avsource.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief 为OH_AVDemuxer接口定义native层对象。
|
||||
*
|
||||
* @since 10
|
||||
*/
|
||||
typedef struct OH_AVDemuxer OH_AVDemuxer;
|
||||
/**
|
||||
* @brief 为DRM_MediaKeySystemInfo接口定义native层对象。
|
||||
*
|
||||
* @since 11
|
||||
*/
|
||||
typedef struct DRM_MediaKeySystemInfo DRM_MediaKeySystemInfo;
|
||||
|
||||
/**
|
||||
* @brief DRM_MediaKeySystemInfo回调函数指针类型,不返回解封装器实例,适用于单个解封装器实例场景。\n
|
||||
* 需要使用{@link OH_AVDemuxer_SetMediaKeySystemInfoCallback}接口将其设置为回调。
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @deprecated since 14
|
||||
* @useinstead {@link Demuxer_MediaKeySystemInfoCallback}
|
||||
* @since 11
|
||||
*/
|
||||
typedef void (*DRM_MediaKeySystemInfoCallback)(DRM_MediaKeySystemInfo* mediaKeySystemInfo);
|
||||
|
||||
/**
|
||||
* @brief DRM_MediaKeySystemInfo回调函数指针类型,返回解封装器实例,适用于多个解封装器实例场景。\n
|
||||
* 需要使用{@link OH_AVDemuxer_SetDemuxerMediaKeySystemInfoCallback}接口将其设置为回调,推荐使用。
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @since 12
|
||||
*/
|
||||
typedef void (*Demuxer_MediaKeySystemInfoCallback)(OH_AVDemuxer *demuxer, DRM_MediaKeySystemInfo *mediaKeySystemInfo);
|
||||
|
||||
/**
|
||||
* @brief 通过source实例创建OH_AVDemuxer实例。\n
|
||||
* source的创建、销毁及使用,详情请参考{@link OH_AVSource}。
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @param source 指向OH_AVSource实例的指针。
|
||||
* @return 返回一个指向OH_AVDemuxer实例的指针。\n
|
||||
* 如果执行成功,则返回指向OH_AVDemuxer实例的指针,否则返回NULL。\n
|
||||
* 可能的失败原因:\n
|
||||
* 1. source无效,即空指针或非OH_AVSource实例。\n
|
||||
* 2. 非OH_AVSource实例。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVDemuxer *OH_AVDemuxer_CreateWithSource(OH_AVSource *source);
|
||||
|
||||
/**
|
||||
* @brief 销毁OH_AVDemuxer实例并清理内部资源。同一实例只能被销毁一次。\n
|
||||
* 注意,销毁的实例在被重新创建之前不能再被使用。建议实例销毁成功后将指针置为NULL。
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @param demuxer 指向OH_AVDemuxer实例的指针。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:当输入的demuxer指针为空或非解封装器实例。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AVDemuxer_Destroy(OH_AVDemuxer *demuxer);
|
||||
|
||||
/**
|
||||
* @brief 指定读取sample的轨道,解封装器将会从该轨道中读取数据,未指定的轨道不会读取。\n
|
||||
* 注意,通过多次调用接口并传入不同轨道的索引来选中多个轨道。\n
|
||||
* 调用{@link OH_AVDemuxer_ReadSample}时只会读取被选中的轨道中数据,同一轨道被选择多次时,接口会返回AV_ERR_OK,并且只会生效一次。
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @param demuxer 指向OH_AVDemuxer实例的指针。
|
||||
* @param trackIndex 需选择的轨道的索引。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:\n
|
||||
* 1. 输入的demuxer指针为空或为非解封装器实例。\n
|
||||
* 2. 轨道的索引超出范围。\n
|
||||
* 3. 不支持读取轨道。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:demuxer没有正确的初始化。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AVDemuxer_SelectTrackByID(OH_AVDemuxer *demuxer, uint32_t trackIndex);
|
||||
|
||||
/**
|
||||
* @brief 移除读取sample的轨道,未选中的轨道的数据不会被解封装器读取。\n
|
||||
* 注意,通过多次调用接口并传入不同轨道的索引来取消对多个轨道的选择。\n
|
||||
* 同一轨道被多次取消选择时,接口会返回AV_ERR_OK,并且只会生效一次。
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @param demuxer 指向OH_AVDemuxer实例的指针。
|
||||
* @param trackIndex 需取消选择的轨道的索引。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:输入的demuxer指针为空或为非解封装器实例。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:demuxer没有正确的初始化。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AVDemuxer_UnselectTrackByID(OH_AVDemuxer *demuxer, uint32_t trackIndex);
|
||||
|
||||
/**
|
||||
* @brief 获取指定轨道的sample及相关信息。\n
|
||||
* 注意,读取轨道sample前,轨道必须被选中。调用接口后解封装器将自动前进到下一帧。
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @param demuxer 指向OH_AVDemuxer实例的指针。
|
||||
* @param trackIndex 本次读取压缩帧的轨道的索引。
|
||||
* @param sample 指向OH_AVMemory实例的指针,用于储存压缩帧数据。
|
||||
* @param info 指向OH_AVCodecBufferAttr实例的指针,用于储存压缩帧的相关信息。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:\n
|
||||
* 1. 输入的demuxer指针为空或为非解封装器实例。\n
|
||||
* 2. 轨道的索引超出范围。\n
|
||||
* 3. 不支持读取轨道。\n
|
||||
* 4. 输入sample为空。\n
|
||||
* 5. 输入info为空。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:\n
|
||||
* 1. 轨道的索引没有被选中。\n
|
||||
* 2. demuxer没有正确的初始化。\n
|
||||
* AV_ERR_NO_MEMORY:sample容量不足以存储所有帧数据。\n
|
||||
* AV_ERR_UNKNOWN:无法从文件中读取或解析帧。
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AVDemuxer_ReadSampleBuffer}
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AVDemuxer_ReadSample(OH_AVDemuxer *demuxer, uint32_t trackIndex,
|
||||
OH_AVMemory *sample, OH_AVCodecBufferAttr *info);
|
||||
|
||||
/**
|
||||
* @brief 获取指定轨道的sample及相关信息。\n
|
||||
* 注意,读取轨道sample前,轨道必须被选中。调用接口后解封装器将自动前进到下一帧。
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @param demuxer 指向OH_AVDemuxer实例的指针。
|
||||
* @param trackIndex 本次读取压缩帧的轨道的索引。
|
||||
* @param sample 指向OH_AVBuffer实例的指针,用于储存压缩帧数据以及相关信息。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:\n
|
||||
* 1. 输入的demuxer指针为空或为非解封装器实例。\n
|
||||
* 2. sample为空指针。\n
|
||||
* 3. 轨道的索引超出范围。\n
|
||||
* 4. 输入sample为空。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:\n
|
||||
* 1. 轨道的索引没有被选中。\n
|
||||
* 2. demuxer没有正确的初始化。\n
|
||||
* AV_ERR_NO_MEMORY:sample容量不足以存储所有帧数据。\n
|
||||
* AV_ERR_UNKNOWN:无法从文件中读取或解析帧。
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVErrCode OH_AVDemuxer_ReadSampleBuffer(OH_AVDemuxer *demuxer, uint32_t trackIndex,
|
||||
OH_AVBuffer *sample);
|
||||
|
||||
/**
|
||||
* @brief 根据设定的跳转模式,将所有选中的轨道到指定时间附近。
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @param demuxer 指向OH_AVDemuxer实例的指针。
|
||||
* @param millisecond 期望跳转位置对应的时间,单位为ms,该时间戳是相对文件开始的位置。
|
||||
* @param mode 跳转的模式。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:\n
|
||||
* 1. 输入的demuxer指针为空或为非解封装器实例。\n
|
||||
* 2. 毫秒值超出范围。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:\n
|
||||
* 1. 轨道的索引没有被选中。\n
|
||||
* 2. demuxer没有正确的初始化。\n
|
||||
* 3. 资源无法seek。\n
|
||||
* AV_ERR_UNKNOWN:\n
|
||||
* 1. seek失败。\n
|
||||
* 2. OH_AVSeekMode选择SEEK_MODE_NEXT_SYNC,并且时间点后无I帧,可能会跳转失败。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AVDemuxer_SeekToTime(OH_AVDemuxer *demuxer, int64_t millisecond, OH_AVSeekMode mode);
|
||||
|
||||
/**
|
||||
* @brief 设置DRM信息回调函数。
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @deprecated since 14
|
||||
* @useinstead {@link OH_AVDemuxer_SetDemuxerMediaKeySystemInfoCallback}
|
||||
* @param demuxer 指向OH_AVDemuxer实例的指针。
|
||||
* @param callback 回调函数。
|
||||
* @return AV_ERR_OK:操作成功。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:demuxer没有正确的初始化。\n
|
||||
* AV_ERR_INVALID_VAL:输入的demuxer指针为空或为非解封装器实例。
|
||||
* @since 11
|
||||
* @version 1.0
|
||||
*/
|
||||
OH_AVErrCode OH_AVDemuxer_SetMediaKeySystemInfoCallback(OH_AVDemuxer *demuxer,
|
||||
DRM_MediaKeySystemInfoCallback callback);
|
||||
|
||||
/**
|
||||
* @brief 设置DRM信息回调函数。
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @param demuxer 指向OH_AVDemuxer实例的指针。
|
||||
* @param callback 回调函数。
|
||||
* @return AV_ERR_OK:操作成功。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:demuxer没有正确的初始化。\n
|
||||
* AV_ERR_INVALID_VAL:输入的demuxer指针为空或为非解封装器实例。
|
||||
* @since 12
|
||||
* @version 1.0
|
||||
*/
|
||||
OH_AVErrCode OH_AVDemuxer_SetDemuxerMediaKeySystemInfoCallback(OH_AVDemuxer *demuxer,
|
||||
Demuxer_MediaKeySystemInfoCallback callback);
|
||||
|
||||
/**
|
||||
* @brief 获取DRM信息。在{@link Demuxer_MediaKeySystemInfoCallback}或{@link DRM_MediaKeySystemInfoCallback}接口成功回调以后,
|
||||
* 调用此接口才能获取到DRM信息。
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @param demuxer 指向OH_AVDemuxer实例的指针。
|
||||
* @param mediaKeySystemInfo 指向DRM信息的指针。
|
||||
* @return AV_ERR_OK:操作成功。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:解封装引擎未初始化或初始化失败。\n
|
||||
* AV_ERR_INVALID_VAL:\n
|
||||
* 1. 输入的demuxer指针为空或为非解封装器实例。\n
|
||||
* 2. mediaKeySystemInfo为nullptr。
|
||||
* @since 11
|
||||
* @version 1.0
|
||||
*/
|
||||
OH_AVErrCode OH_AVDemuxer_GetMediaKeySystemInfo(OH_AVDemuxer *demuxer, DRM_MediaKeySystemInfo *mediaKeySystemInfo);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // NATIVE_AVDEMUXER_H
|
||||
|
||||
/** @} */
|
||||
@@ -0,0 +1,190 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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 AVMuxer
|
||||
* @{
|
||||
*
|
||||
* @brief AVMuxer模块提供用于音视频封装功能的函数。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.Muxer
|
||||
* @since 10
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @file native_avmuxer.h
|
||||
*
|
||||
* @brief 声明用于音视频封装的Native API。
|
||||
* @sample [AVCodec](https://gitcode.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Media/AVCodec)
|
||||
*
|
||||
* @kit AVCodecKit
|
||||
* @include <multimedia/player_framework/native_avmuxer.h>
|
||||
* @library libnative_media_avmuxer.so
|
||||
* @syscap SystemCapability.Multimedia.Media.Muxer
|
||||
* @since 10
|
||||
*/
|
||||
|
||||
#ifndef NATIVE_AVMUXER_H
|
||||
#define NATIVE_AVMUXER_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include "native_avcodec_base.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/**
|
||||
* @brief 定义封装接口native层对象类型。
|
||||
* @since 10
|
||||
*/
|
||||
typedef struct OH_AVMuxer OH_AVMuxer;
|
||||
|
||||
/**
|
||||
* @brief 通过文件描述符fd和封装格式创建OH_AVMuxer实例。
|
||||
* @syscap SystemCapability.Multimedia.Media.Muxer
|
||||
* @param fd 用读写方式打开(O_RDWR),由调用者关闭该fd。
|
||||
* @param format 封装输出的文件格式。
|
||||
* @return 返回一个指向OH_AVMuxer实例的指针,需要调用{@link OH_AVMuxer_Destroy}销毁。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVMuxer *OH_AVMuxer_Create(int32_t fd, OH_AVOutputFormat format);
|
||||
|
||||
/**
|
||||
* @brief 设置视频的旋转角度(顺时针,且旋转角度必须为0、90、180或270)。该接口必须在{@link OH_AVMuxer_Start}前调用。
|
||||
* @syscap SystemCapability.Multimedia.Media.Muxer
|
||||
* @param muxer 指向OH_AVMuxer实例的指针。
|
||||
* @param rotation 角度,必须为0、90、180 或 270。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:muxer为空指针,或rotation无效。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:不允许调用该接口,请检查接口调用顺序。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AVMuxer_SetRotation(OH_AVMuxer *muxer, int32_t rotation);
|
||||
|
||||
/**
|
||||
* @brief 设置format数据到封装器。\n
|
||||
* API 14起,支持设置创建时间OH_MD_KEY_CREATION_TIME。若创建时间未写入成功,请排查OH_MD_KEY_CREATION_TIME字符串设置是否符合ISO 8601标准的时间格式且为UTC时间。\n
|
||||
* API 20起,支持:\n
|
||||
* - 设置文件的描述性文本信息OH_MD_KEY_COMMENT。若文件描述信息未写入成功,请排查OH_MD_KEY_COMMENT是否为字符串类型或字符长度大于等于1且小于等于256。\n
|
||||
* - 设置MP4 moov的位置OH_MD_KEY_ENABLE_MOOV_FRONT。OH_MD_KEY_ENABLE_MOOV_FRONT为0时moov后置,为1时前置,默认后置。
|
||||
* @syscap SystemCapability.Multimedia.Media.Muxer
|
||||
* @param muxer 指向OH_AVMuxer实例的指针。
|
||||
* @param format 指向OH_AVFormat实例的指针。文件级元数据集。
|
||||
* @return AV_ERR_OK:设置format参数正确。\n
|
||||
* AV_ERR_INVALID_VAL:muxer为空指针,或format无效。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:不允许调用该接口,请检查接口调用顺序。
|
||||
* @since 14
|
||||
*/
|
||||
OH_AVErrCode OH_AVMuxer_SetFormat(OH_AVMuxer *muxer, OH_AVFormat *format);
|
||||
|
||||
/**
|
||||
* @brief 向封装器添加音视频轨。每调用一次本接口可以在封装器中添加一个音视频轨。该接口必须在{@link OH_AVMuxer_Start}前调用。
|
||||
* @syscap SystemCapability.Multimedia.Media.Muxer
|
||||
* @param muxer 指向OH_AVMuxer实例的指针。
|
||||
* @param trackIndex 用于获取该轨的索引,该值在{@link OH_AVMuxer_WriteSample}接口中使用。
|
||||
* 如果媒体轨添加成功,该值大于或等于0,否则小于0。
|
||||
* @param trackFormat 指向OH_AVFormat实例的指针。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:muxer为空指针,或trackIndex无效,或trackFormat无效。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:不允许调用该接口,请检查接口调用顺序。\n
|
||||
* AV_ERR_UNSUPPORT:不支持的mime类型。\n
|
||||
* AV_ERR_NO_MEMORY:申请内存失败。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AVMuxer_AddTrack(OH_AVMuxer *muxer, int32_t *trackIndex, OH_AVFormat *trackFormat);
|
||||
|
||||
/**
|
||||
* @brief 开始封装。
|
||||
* 该接口必须在{@link OH_AVMuxer_AddTrack}后,{@link OH_AVMuxer_WriteSample}前调用。
|
||||
* @syscap SystemCapability.Multimedia.Media.Muxer
|
||||
* @param muxer 指向OH_AVMuxer实例的指针。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:muxer为空指针。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:不允许调用该接口,请检查接口调用顺序。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AVMuxer_Start(OH_AVMuxer *muxer);
|
||||
|
||||
/**
|
||||
* @brief 将sample写入封装器。
|
||||
* 该接口必须在{@link OH_AVMuxer_Start}后,{@link OH_AVMuxer_Stop}前调用。
|
||||
* 调用者需要按info中的时间顺序将sample写入正确的音视频轨。
|
||||
* @syscap SystemCapability.Multimedia.Media.Muxer
|
||||
* @param muxer 指向OH_AVMuxer实例的指针。
|
||||
* @param trackIndex 数据对应的音视频轨的索引。
|
||||
* @param sample 编码或解封装得到的数据。
|
||||
* @param info sample对应的描述信息。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:muxer为空指针,或trackIndex无效,或sample无效,或info无效。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:不允许调用该接口,请检查接口调用顺序。\n
|
||||
* AV_ERR_NO_MEMORY:申请内存失败。\n
|
||||
* AV_ERR_UNKNOWN:未知错误。
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AVMuxer_WriteSampleBuffer}
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AVMuxer_WriteSample(OH_AVMuxer *muxer, uint32_t trackIndex,
|
||||
OH_AVMemory *sample, OH_AVCodecBufferAttr info);
|
||||
|
||||
/**
|
||||
* @brief 将sample写入封装器。
|
||||
* 该接口必须在{@link OH_AVMuxer_Start}后,{@link OH_AVMuxer_Stop}前调用。
|
||||
* 调用者需要按sample中的时间顺序将sample写入正确的音视频轨。
|
||||
* @syscap SystemCapability.Multimedia.Media.Muxer
|
||||
* @param muxer 指向OH_AVMuxer实例的指针。
|
||||
* @param trackIndex 数据对应的音视频轨的索引。
|
||||
* @param sample 编码或解封装得到的数据及属性。
|
||||
* @return AV_ERR_OK:执行成功。
|
||||
* AV_ERR_INVALID_VAL:muxer为空指针,或trackIndex无效,或sample无效。
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:不允许调用该接口,请检查接口调用顺序。
|
||||
* AV_ERR_NO_MEMORY:申请内存失败。
|
||||
* AV_ERR_UNKNOWN:未知错误。
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVErrCode OH_AVMuxer_WriteSampleBuffer(OH_AVMuxer *muxer, uint32_t trackIndex, const OH_AVBuffer *sample);
|
||||
|
||||
/**
|
||||
* @brief 停止封装。封装器停止后不支持重新开始。
|
||||
* @syscap SystemCapability.Multimedia.Media.Muxer
|
||||
* @param muxer 指向OH_AVMuxer实例的指针。
|
||||
* @return AV_ERR_OK:执行成功。
|
||||
* AV_ERR_INVALID_VAL:muxer为空指针。
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:不允许调用该接口,请检查接口调用顺序。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AVMuxer_Stop(OH_AVMuxer *muxer);
|
||||
|
||||
/**
|
||||
* @brief 清理内部资源,销毁OH_AVMuxer实例。\n
|
||||
* 注意不能重复销毁,否则会导致程序崩溃。
|
||||
* @syscap SystemCapability.Multimedia.Media.Muxer
|
||||
* @param muxer 指向OH_AVMuxer实例的指针。
|
||||
* @return AV_ERR_OK:执行成功。
|
||||
* AV_ERR_INVALID_VAL:muxer为空指针。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AVMuxer_Destroy(OH_AVMuxer *muxer);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // NATIVE_AVMUXER_H
|
||||
|
||||
/** @} */
|
||||
@@ -0,0 +1,190 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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 AVSource
|
||||
* @{
|
||||
*
|
||||
* @brief AVSource模块提供用于构造媒体资源对象功能的函数。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @since 10
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file native_avsource.h
|
||||
*
|
||||
* @brief 声明用于音视频媒体数据解析的接口。
|
||||
* @sample [AVCodec](https://gitcode.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Media/AVCodec)
|
||||
*
|
||||
* @kit AVCodecKit
|
||||
* @include <multimedia/player_framework/native_avsource.h>
|
||||
* @library libnative_media_avsource.so
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @since 10
|
||||
*/
|
||||
|
||||
#ifndef NATIVE_AVSOURCE_H
|
||||
#define NATIVE_AVSOURCE_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include "native_avcodec_base.h"
|
||||
#include "native_averrors.h"
|
||||
#include "native_avformat.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/**
|
||||
* @brief 为媒体资源接口定义native层对象。
|
||||
* @since 10
|
||||
*/
|
||||
typedef struct OH_AVSource OH_AVSource;
|
||||
|
||||
/**
|
||||
* @brief 为用户自定义数据源的资源对象创建OH_AVSource实例,可以通过调用{@link OH_AVSource_Destroy}接口释放实例。\n
|
||||
* 参数dataSource生命周期需与返回的指针OH_AVSource *保持一致。
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @param dataSource 用户自定义数据源。
|
||||
* @return 如果执行成功,则返回一个指向OH_AVSource实例的指针,否则返回NULL。\n
|
||||
* 可能的故障原因:\n
|
||||
* 1. dataSource为nullptr。\n
|
||||
* 2. dataSource->size == 0。\n
|
||||
* 3. 设置数据源失败。\n
|
||||
* 4. 内存不足。\n
|
||||
* 5. 解码器引擎为nullptr。\n
|
||||
* 6. dataSource->readAt == nullptr。
|
||||
* @since 12
|
||||
*/
|
||||
OH_AVSource *OH_AVSource_CreateWithDataSource(OH_AVDataSource *dataSource);
|
||||
|
||||
/**
|
||||
* @brief 为用户自定义数据源的资源对象创建OH_AVSource实例,可以通过调用{@link OH_AVSource_Destroy}接口释放实例。\n
|
||||
* 回调支持通过userData传递用户自定义数据。\n
|
||||
* 参数dataSource生命周期需与返回的指针OH_AVSource *保持一致。
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @param dataSource 指向数据源结构体的指针,该结构体可用于获取输入数据。
|
||||
* @param userData 指向用户自定义数据的指针。
|
||||
* @return 如果执行成功,则返回一个指向OH_AVSource实例的指针,否则返回NULL。\n
|
||||
* 可能的故障原因:\n
|
||||
* 1. dataSource为nullptr。\n
|
||||
* 2. dataSource->size == 0。\n
|
||||
* 3. 设置数据源失败。\n
|
||||
* 4. 内存不足。\n
|
||||
* 5. 解码器引擎为nullptr。\n
|
||||
* 6. dataSource->readAt == nullptr。
|
||||
* @since 20
|
||||
*/
|
||||
OH_AVSource *OH_AVSource_CreateWithDataSourceExt(OH_AVDataSourceExt *dataSource, void *userData);
|
||||
|
||||
/**
|
||||
* @brief 为统一资源标识符对应的资源对象创建OH_AVSource实例,可以通过调用{@link OH_AVSource_Destroy}接口释放实例。
|
||||
*
|
||||
* 该接口仅支持HTTP渐进式流媒体,不支持HLS/DASH的流媒体;对于HLS/DASH的流媒体播放,推荐使用AVPlayer组件进行开发。
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @param uri 远程媒体资源的统一资源标识符。
|
||||
* @return 执行成功返回一个指向OH_AVSource实例的指针, 否则返回NULL。\n
|
||||
* 可能的故障原因:\n
|
||||
* 1. 网络异常。\n
|
||||
* 2. 资源无效。\n
|
||||
* 3. 文件格式不支持。\n
|
||||
* 4. 应用配置明文拦截。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVSource *OH_AVSource_CreateWithURI(char *uri);
|
||||
|
||||
/**
|
||||
* @brief 为文件描述符对应的资源对象创建OH_AVSource实例。可以通过调用{@link OH_AVSource_Destroy}接口释放实例。\n
|
||||
* 接口如果传入offset不为文件起始位置,或size不为文件大小时,可能会因数据获取不完整导致 OH_AVSource创建失败、后续解封装失败等未定义错误。
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @param fd 数据资源的文件描述符。
|
||||
* @param offset 开始读取数据的位置。
|
||||
* @param size 文件的字节数大小。
|
||||
* @return 执行成功返回一个指向OH_AVSource实例的指针, 否则返回NULL。\n
|
||||
* 可能的故障原因:\n
|
||||
* 1. fd无效。\n
|
||||
* 2. 传入offset不是文件起始位置。\n
|
||||
* 3. size错误。\n
|
||||
* 4. 资源无效。\n
|
||||
* 5. 文件格式不支持。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVSource *OH_AVSource_CreateWithFD(int32_t fd, int64_t offset, int64_t size);
|
||||
|
||||
/**
|
||||
* @brief 销毁OH_AVSource实例并清理内部资源。\n
|
||||
* 同一实例只能被销毁一次。销毁的实例在被重新创建之前不能再被使用。建议实例销毁成功后将指针置为NULL。
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @param source 指向OH_AVSource实例的指针。
|
||||
* @return AV_ERR_OK:操作成功。\n
|
||||
* AV_ERR_INVALID_VAL:\n
|
||||
* 1. source指针无效,空指针。\n
|
||||
* 2. 非OH_AVSource实例。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AVSource_Destroy(OH_AVSource *source);
|
||||
|
||||
/**
|
||||
* @brief 获取媒体资源文件的基础信息。\n
|
||||
* 需要注意的是,指向的OH_AVFormat实例在生命周期结束时需调用者通过调用接口{@link OH_AVFormat_Destroy}释放。
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @param source 指向OH_AVSource实例的指针。
|
||||
* @return 执行成功返回文件的基础信息,否则返回NULL。\n
|
||||
* 可能的故障原因:\n
|
||||
* 1. source指针无效。\n
|
||||
* 2. 空指针或非OH_AVSource实例。\n
|
||||
* 3. source没有初始化。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVFormat *OH_AVSource_GetSourceFormat(OH_AVSource *source);
|
||||
|
||||
/**
|
||||
* @brief 获取轨道的基础信息。\n
|
||||
* 需要注意的是,指向的OH_AVFormat实例在生命周期结束时需调用者通过调用接口{@link OH_AVFormat_Destroy}释放。
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @param source 指向OH_AVSource实例的指针。
|
||||
* @param trackIndex 需要获取信息的轨道的索引。
|
||||
* @return 执行成功返回轨道的基础信息,否则返回NULL。\n
|
||||
* 可能的故障原因:\n
|
||||
* 1. source指针无效,空指针或非OH_AVSource实例。\n
|
||||
* 2. 轨道的索引超出范围。\n
|
||||
* 3. source没有初始化。
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVFormat *OH_AVSource_GetTrackFormat(OH_AVSource *source, uint32_t trackIndex);
|
||||
|
||||
/**
|
||||
* @brief 获取自定义元数据的基础信息。\n
|
||||
*
|
||||
* 需要注意的是,指向的OH_AVFormat实例在生命周期结束时需开发者通过调用接口{@link OH_AVFormat_Destroy}释放。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @param source 指向OH_AVSource实例的指针。
|
||||
* @return 执行成功返回元数据的基础信息,否则返回NULL。\n
|
||||
* 可能的故障原因:\n
|
||||
* 1. source指针无效。\n
|
||||
* 2. 空指针或非OH_AVSource实例。\n
|
||||
* 3. source没有初始化。
|
||||
* @since 18
|
||||
*/
|
||||
OH_AVFormat *OH_AVSource_GetCustomMetadataFormat(OH_AVSource *source);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // NATIVE_AVSOURCE_H
|
||||
|
||||
/** @} */
|
||||
@@ -0,0 +1,239 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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 Multimedia_Drm
|
||||
* @{
|
||||
*
|
||||
* @brief 该功能使第三方应用程序可以自行实现媒体解封装和解复用功能,而不是使用系统提供的。\n
|
||||
* 在创建DRM实例和会话后,可以调用DRM提供的解密接口进行解密。解密参数结构定义了解密参数的传输格式。
|
||||
* @since 12
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file native_cencinfo.h
|
||||
*
|
||||
* @brief 声明用于设置解密参数的Native API。
|
||||
* @kit AVCodecKit
|
||||
* @include <multimedia/player_framework/native_cencinfo.h>
|
||||
* @library libnative_media_avcencinfo.so
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @since 12
|
||||
*/
|
||||
|
||||
#ifndef NATIVE_AVCENCINFO_H
|
||||
#define NATIVE_AVCENCINFO_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include "native_averrors.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief AVBuffer结构。
|
||||
* @since 12
|
||||
* @version 1.0
|
||||
*/
|
||||
typedef struct OH_AVBuffer OH_AVBuffer;
|
||||
/**
|
||||
* @brief AVCencInfo结构。
|
||||
* @since 12
|
||||
* @version 1.0
|
||||
*/
|
||||
typedef struct OH_AVCencInfo OH_AVCencInfo;
|
||||
/**
|
||||
* @brief Key id长度为16字节。
|
||||
* @since 12
|
||||
* @version 1.0
|
||||
*/
|
||||
#define DRM_KEY_ID_SIZE 16
|
||||
/**
|
||||
* @brief Iv长度为16字节。
|
||||
* @since 12
|
||||
* @version 1.0
|
||||
*/
|
||||
#define DRM_KEY_IV_SIZE 16
|
||||
/**
|
||||
* @brief 最大的Subsample数量为64个。
|
||||
* @since 12
|
||||
* @version 1.0
|
||||
*/
|
||||
#define DRM_KEY_MAX_SUB_SAMPLE_NUM 64
|
||||
|
||||
/**
|
||||
* @brief Drm CENC算法类型。
|
||||
* @since 12
|
||||
* @version 1.0
|
||||
*/
|
||||
typedef enum DrmCencAlgorithm {
|
||||
/**
|
||||
* 不加密算法。
|
||||
*/
|
||||
DRM_ALG_CENC_UNENCRYPTED = 0x0,
|
||||
/**
|
||||
* AES CTR算法。
|
||||
*/
|
||||
DRM_ALG_CENC_AES_CTR = 0x1,
|
||||
/**
|
||||
* AES WV算法。
|
||||
*/
|
||||
DRM_ALG_CENC_AES_WV = 0x2,
|
||||
/**
|
||||
* AES CBC算法。
|
||||
*/
|
||||
DRM_ALG_CENC_AES_CBC = 0x3,
|
||||
/**
|
||||
* SM4 CBC算法。
|
||||
*/
|
||||
DRM_ALG_CENC_SM4_CBC = 0x4,
|
||||
/**
|
||||
* SM4 CTR算法。
|
||||
*/
|
||||
DRM_ALG_CENC_SM4_CTR = 0x5
|
||||
} DrmCencAlgorithm;
|
||||
|
||||
/**
|
||||
* @brief 枚举类型,表示cencInfo中keyId/iv/subsample信息是否设置。
|
||||
* @since 12
|
||||
* @version 1.0
|
||||
*/
|
||||
typedef enum DrmCencInfoMode {
|
||||
/** keyId/iv/subsample信息已设置。 */
|
||||
DRM_CENC_INFO_KEY_IV_SUBSAMPLES_SET = 0x0,
|
||||
/** keyId/iv/subsample信息未设置。 */
|
||||
DRM_CENC_INFO_KEY_IV_SUBSAMPLES_NOT_SET = 0x1
|
||||
} DrmCencInfoMode;
|
||||
|
||||
/**
|
||||
* @brief Subsample结构类型定义。
|
||||
* @since 12
|
||||
* @version 1.0
|
||||
*/
|
||||
typedef struct DrmSubsample {
|
||||
/** 头部清流数据的长度。 */
|
||||
uint32_t clearHeaderLen;
|
||||
/** 加密数据的长度。 */
|
||||
uint32_t payLoadLen;
|
||||
} DrmSubsample;
|
||||
|
||||
/**
|
||||
* @brief 创建用于设置cencInfo的OH_AVCencInfo实例。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @return 返回新创建的OH_AVCencInfo对象。如果返回nullptr,则表示创建对象失败。\n
|
||||
* 可能失败的原因:应用程序地址空间已满,或者对象中的数据初始化失败。
|
||||
* @since 12
|
||||
* @version 1.0
|
||||
*/
|
||||
OH_AVCencInfo *OH_AVCencInfo_Create();
|
||||
|
||||
/**
|
||||
* @brief 销毁OH_AVCencInfo实例并释放内部资源。\n
|
||||
*
|
||||
* 同一个实例只能销毁一次。在再次创建实例之前,不应使用该实例。
|
||||
* 建议在实例销毁成功后立即将实例指针设置为nullptr。
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @param cencInfo 指向OH_AVCencInfo实例的指针。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:cencInfo为空。
|
||||
* @since 12
|
||||
* @version 1.0
|
||||
*/
|
||||
OH_AVErrCode OH_AVCencInfo_Destroy(OH_AVCencInfo *cencInfo);
|
||||
|
||||
/**
|
||||
* @brief 设置cencInfo加密算法。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @param cencInfo 指向OH_AVCencInfo实例的指针。
|
||||
* @param algo 加密算法模式。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:cencInfo为空。
|
||||
* @since 12
|
||||
* @version 1.0
|
||||
*/
|
||||
OH_AVErrCode OH_AVCencInfo_SetAlgorithm(OH_AVCencInfo *cencInfo, enum DrmCencAlgorithm algo);
|
||||
|
||||
/**
|
||||
* @brief 设置cencInfo的keyId和iv。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @param cencInfo 指向OH_AVCencInfo实例的指针。
|
||||
* @param keyId Key标识。
|
||||
* @param keyIdLen Key标识长度。
|
||||
* @param iv 初始化向量。
|
||||
* @param ivLen 初始化向量长度。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:cencInfo为空、keyId为空、keyIdLen != DRM_KEY_ID_SIZE、iv是空、
|
||||
* ivLen != DRM_KEY_IV_SIZE、keyId拷贝失败,或者iv拷贝失败。
|
||||
* @since 12
|
||||
* @version 1.0
|
||||
*/
|
||||
OH_AVErrCode OH_AVCencInfo_SetKeyIdAndIv(OH_AVCencInfo *cencInfo, uint8_t *keyId,
|
||||
uint32_t keyIdLen, uint8_t *iv, uint32_t ivLen);
|
||||
|
||||
/**
|
||||
* @brief 设置cencInfo的subsamples信息。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @param cencInfo 指向OH_AVCencInfo实例的指针。
|
||||
* @param encryptedBlockCount 加密块的数量。
|
||||
* @param skippedBlockCount 不加密块的数量。
|
||||
* @param firstEncryptedOffset 第一个加密有效负载的偏移量。
|
||||
* @param subsampleCount Subsample数量。
|
||||
* @param subsamples Subsample内容集。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:cencInfo为空、subsampleCount > DRM_KEY_MAX_SUB_SAMPLE_NUM,或者subsamples为空。
|
||||
* @since 12
|
||||
* @version 1.0
|
||||
*/
|
||||
OH_AVErrCode OH_AVCencInfo_SetSubsampleInfo(OH_AVCencInfo *cencInfo, uint32_t encryptedBlockCount,
|
||||
uint32_t skippedBlockCount, uint32_t firstEncryptedOffset, uint32_t subsampleCount, DrmSubsample *subsamples);
|
||||
|
||||
/**
|
||||
* @brief 设置cencInfo的模式。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @param cencInfo 指向OH_AVCencInfo实例的指针。
|
||||
* @param mode cencInfo模式,指示是否设置了keyId/iv/subsample。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:cencInfo为空。
|
||||
* @since 12
|
||||
* @version 1.0
|
||||
*/
|
||||
OH_AVErrCode OH_AVCencInfo_SetMode(OH_AVCencInfo *cencInfo, enum DrmCencInfoMode mode);
|
||||
|
||||
/**
|
||||
* @brief 将cencInfo设置到AVBuffer。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.Spliter
|
||||
* @param cencInfo 指向OH_AVCencInfo实例的指针。
|
||||
* @param buffer 携带数据的帧buffer。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:cencInfo为空、buffer为空、buffer->buffer_为空,或者buffer->buffer_->meta_为空。
|
||||
* @since 12
|
||||
* @version 1.0
|
||||
*/
|
||||
OH_AVErrCode OH_AVCencInfo_SetAVBuffer(OH_AVCencInfo *cencInfo, OH_AVBuffer *buffer);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // NATIVE_AVCENCINFO_H
|
||||
|
||||
/** @} */
|
||||
@@ -0,0 +1,70 @@
|
||||
/*
|
||||
* Copyright (C) 2025 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 Core
|
||||
* @{
|
||||
*
|
||||
* @brief Core模块提供用于媒体系统的基础骨干能力,包含内存、错误码、媒体数据结构等相关函数。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @since 9
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file media_types.h
|
||||
*
|
||||
* @brief 声明了常见媒体类型的定义。
|
||||
*
|
||||
* @kit AVCodecKit
|
||||
* @include <multimedia/player_framework/media_types.h>
|
||||
* @library libnative_media_core.so
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @since 18
|
||||
*/
|
||||
|
||||
#ifndef MEDIA_TYPES_H
|
||||
#define MEDIA_TYPES_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief HDR类型枚举。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @since 18
|
||||
*/
|
||||
typedef enum OH_Core_HdrType {
|
||||
/**
|
||||
* 此选项用于标记非HDR类型。
|
||||
*/
|
||||
OH_CORE_HDR_TYPE_NONE = 0,
|
||||
/**
|
||||
* 此选项用于标记HDR Vivid类型。
|
||||
*/
|
||||
OH_CORE_HDR_TYPE_VIVID = 1,
|
||||
} OH_Core_HdrType;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // MEDIA_TYPES_H
|
||||
/** @} */
|
||||
@@ -0,0 +1,353 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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 Core
|
||||
* @{
|
||||
*
|
||||
* @brief Core模块提供用于媒体系统的基础骨干能力,包含内存、错误码、媒体数据结构等相关函数。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @since 9
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @file native_audio_channel_layout.h
|
||||
*
|
||||
* @brief 在录制和播放时的扬声器布局。
|
||||
*
|
||||
* @kit AVCodecKit
|
||||
* @include <multimedia/native_audio_channel_layout.h>
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @since 11
|
||||
*/
|
||||
|
||||
#ifndef NATIVE_AUDIO_CHANNEL_LAYOUT_H
|
||||
#define NATIVE_AUDIO_CHANNEL_LAYOUT_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief 音频声道集合。\n
|
||||
*
|
||||
* 将每一个声道映射为int64的变量。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @since 11
|
||||
*/
|
||||
typedef enum OH_AudioChannelSet {
|
||||
/** 左前声道 */
|
||||
CH_SET_FRONT_LEFT = 1ULL << 0U,
|
||||
|
||||
/** 右前声道 */
|
||||
CH_SET_FRONT_RIGHT = 1ULL << 1U,
|
||||
|
||||
/** 中前声道 */
|
||||
CH_SET_FRONT_CENTER = 1ULL << 2U,
|
||||
|
||||
/** 低频声道 */
|
||||
CH_SET_LOW_FREQUENCY = 1ULL << 3U,
|
||||
|
||||
/** 左后声道 */
|
||||
CH_SET_BACK_LEFT = 1ULL << 4U,
|
||||
|
||||
/** 右后声道 */
|
||||
CH_SET_BACK_RIGHT = 1ULL << 5U,
|
||||
|
||||
/** 左前中置声道 */
|
||||
CH_SET_FRONT_LEFT_OF_CENTER = 1ULL << 6U,
|
||||
|
||||
/** 右前中置声道 */
|
||||
CH_SET_FRONT_RIGHT_OF_CENTER = 1ULL << 7U,
|
||||
|
||||
/** 后方中置声道 */
|
||||
CH_SET_BACK_CENTER = 1ULL << 8U,
|
||||
|
||||
/** 左侧声道 */
|
||||
CH_SET_SIDE_LEFT = 1ULL << 9U,
|
||||
|
||||
/** 右侧声道 */
|
||||
CH_SET_SIDE_RIGHT = 1ULL << 10U,
|
||||
|
||||
/** 上方中置声道 */
|
||||
CH_SET_TOP_CENTER = 1ULL << 11U,
|
||||
|
||||
/** 上方左前声道 */
|
||||
CH_SET_TOP_FRONT_LEFT = 1ULL << 12U,
|
||||
|
||||
/** 上方中前声道 */
|
||||
CH_SET_TOP_FRONT_CENTER = 1ULL << 13U,
|
||||
|
||||
/** 上方右前声道 */
|
||||
CH_SET_TOP_FRONT_RIGHT = 1ULL << 14U,
|
||||
|
||||
/** 上方左后声道 */
|
||||
CH_SET_TOP_BACK_LEFT = 1ULL << 15U,
|
||||
|
||||
/** 上方中后声道 */
|
||||
CH_SET_TOP_BACK_CENTER = 1ULL << 16U,
|
||||
|
||||
/** 上方右后声道 */
|
||||
CH_SET_TOP_BACK_RIGHT = 1ULL << 17U,
|
||||
|
||||
/** 立体声左声道 */
|
||||
CH_SET_STEREO_LEFT = 1ULL << 29U,
|
||||
|
||||
/** 立体声右声道 */
|
||||
CH_SET_STEREO_RIGHT = 1ULL << 30U,
|
||||
|
||||
/** 宽左声道 */
|
||||
CH_SET_WIDE_LEFT = 1ULL << 31U,
|
||||
|
||||
/** 宽右声道 */
|
||||
CH_SET_WIDE_RIGHT = 1ULL << 32U,
|
||||
|
||||
/** 左环绕声道 */
|
||||
CH_SET_SURROUND_DIRECT_LEFT = 1ULL << 33U,
|
||||
|
||||
/** 右环绕声道 */
|
||||
CH_SET_SURROUND_DIRECT_RIGHT = 1ULL << 34U,
|
||||
|
||||
/** 低频声道2 */
|
||||
CH_SET_LOW_FREQUENCY_2 = 1ULL << 35U,
|
||||
|
||||
/** 上方左侧声道 */
|
||||
CH_SET_TOP_SIDE_LEFT = 1ULL << 36U,
|
||||
|
||||
/** 上方右侧声道 */
|
||||
CH_SET_TOP_SIDE_RIGHT = 1ULL << 37U,
|
||||
|
||||
/** 下方中前声道 */
|
||||
CH_SET_BOTTOM_FRONT_CENTER = 1ULL << 38U,
|
||||
|
||||
/** 下方左前声道 */
|
||||
CH_SET_BOTTOM_FRONT_LEFT = 1ULL << 39U,
|
||||
|
||||
/** 下方右前声道 */
|
||||
CH_SET_BOTTOM_FRONT_RIGHT = 1ULL << 40U
|
||||
} OH_AudioChannelSet;
|
||||
|
||||
/**
|
||||
* @brief 高保真立体声混响设置。\n
|
||||
*
|
||||
* 用int64整数来表示高保真立体声混响属性。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @since 11
|
||||
*/
|
||||
typedef enum OH_AmbAttributeSet {
|
||||
/** 一阶高保真立体声混响 */
|
||||
AMB_ORD_1 = 1ULL << 0U,
|
||||
|
||||
/** 二阶高保真立体声混响 */
|
||||
AMB_ORD_2 = 2ULL << 0U,
|
||||
|
||||
/** 三阶高保真立体声混响 */
|
||||
AMB_ORD_3 = 3ULL << 0U,
|
||||
|
||||
/** ACN通道排序的高保真立体声混响 */
|
||||
AMB_COM_ACN = 0ULL << 8U,
|
||||
|
||||
/** FUMA通道排序的高保真立体声混响 */
|
||||
AMB_COM_FUMA = 1ULL << 8U,
|
||||
|
||||
/** N3D归一化的高保真立体声混响 */
|
||||
AMB_NOR_N3D = 0ULL << 12U,
|
||||
|
||||
/** SN3D归一化的高保真立体声混响 */
|
||||
AMB_NOR_SN3D = 1ULL << 12U,
|
||||
|
||||
/** 高保真立体声混响的声道布局 */
|
||||
AMB_MODE = 1ULL << 44U
|
||||
} OH_AmbAttributeSet;
|
||||
|
||||
/**
|
||||
* @brief 音频声道布局。\n
|
||||
*
|
||||
* 用int64整数来表示在录制或播放时扬声器的外观和顺序。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @since 11
|
||||
*/
|
||||
typedef enum OH_AudioChannelLayout {
|
||||
/** 未知声道布局 */
|
||||
CH_LAYOUT_UNKNOWN = 0ULL,
|
||||
|
||||
/** 单声道布局,共1个声道。 */
|
||||
CH_LAYOUT_MONO = CH_SET_FRONT_CENTER,
|
||||
|
||||
/** 立体声布局,共2个声道。 */
|
||||
CH_LAYOUT_STEREO = CH_SET_FRONT_LEFT | CH_SET_FRONT_RIGHT,
|
||||
|
||||
/** 立体声下混布局,共2个声道。 */
|
||||
CH_LAYOUT_STEREO_DOWNMIX = CH_SET_STEREO_LEFT | CH_SET_STEREO_RIGHT,
|
||||
|
||||
/** 2.1布局,共3个声道。 */
|
||||
CH_LAYOUT_2POINT1 = CH_LAYOUT_STEREO | CH_SET_LOW_FREQUENCY,
|
||||
|
||||
/** 3.0布局,共3个声道。 */
|
||||
CH_LAYOUT_3POINT0 = CH_LAYOUT_STEREO | CH_SET_BACK_CENTER,
|
||||
|
||||
/** 环绕布局,共3个声道。 */
|
||||
CH_LAYOUT_SURROUND = CH_LAYOUT_STEREO | CH_SET_FRONT_CENTER,
|
||||
|
||||
/** 3.1布局,共4个声道。 */
|
||||
CH_LAYOUT_3POINT1 = CH_LAYOUT_SURROUND | CH_SET_LOW_FREQUENCY,
|
||||
|
||||
/** 4.0布局,共4个声道。 */
|
||||
CH_LAYOUT_4POINT0 = CH_LAYOUT_SURROUND | CH_SET_BACK_CENTER,
|
||||
|
||||
/** QUAD_SIDE布局,共4个声道。 */
|
||||
CH_LAYOUT_QUAD_SIDE = CH_LAYOUT_STEREO | CH_SET_SIDE_LEFT | CH_SET_SIDE_RIGHT,
|
||||
|
||||
/** QUAD布局,共4个声道。 */
|
||||
CH_LAYOUT_QUAD = CH_LAYOUT_STEREO | CH_SET_BACK_LEFT | CH_SET_BACK_RIGHT,
|
||||
|
||||
/** 2.0.2布局,共4个声道。 */
|
||||
CH_LAYOUT_2POINT0POINT2 = CH_LAYOUT_STEREO | CH_SET_TOP_SIDE_LEFT | CH_SET_TOP_SIDE_RIGHT,
|
||||
|
||||
/** ACN_N3D(根据ITU标准)的一阶FOA布局,共4个声道。 */
|
||||
CH_LAYOUT_AMB_ORDER1_ACN_N3D = AMB_MODE | AMB_ORD_1 | AMB_COM_ACN | AMB_NOR_N3D,
|
||||
|
||||
/** ACN_SN3D(根据ITU标准)的一阶FOA布局,共4个声道。 */
|
||||
CH_LAYOUT_AMB_ORDER1_ACN_SN3D = AMB_MODE | AMB_ORD_1 | AMB_COM_ACN | AMB_NOR_SN3D,
|
||||
|
||||
/** FUMA(根据ITU标准)的一阶FOA布局,共4个声道。 */
|
||||
CH_LAYOUT_AMB_ORDER1_FUMA = AMB_MODE | AMB_ORD_1 | AMB_COM_FUMA,
|
||||
|
||||
/** 4.1布局,共5个声道。 */
|
||||
CH_LAYOUT_4POINT1 = CH_LAYOUT_4POINT0 | CH_SET_LOW_FREQUENCY,
|
||||
|
||||
/** 5.0布局,共5个声道。 */
|
||||
CH_LAYOUT_5POINT0 = CH_LAYOUT_SURROUND | CH_SET_SIDE_LEFT | CH_SET_SIDE_RIGHT,
|
||||
|
||||
/** 5.0-后置布局,共5个声道。 */
|
||||
CH_LAYOUT_5POINT0_BACK = CH_LAYOUT_SURROUND | CH_SET_BACK_LEFT | CH_SET_BACK_RIGHT,
|
||||
|
||||
/** 2.1.2布局,共5个声道。 */
|
||||
CH_LAYOUT_2POINT1POINT2 = CH_LAYOUT_2POINT0POINT2 | CH_SET_LOW_FREQUENCY,
|
||||
|
||||
/** 3.0.2布局,共5个声道。 */
|
||||
CH_LAYOUT_3POINT0POINT2 = CH_LAYOUT_2POINT0POINT2 | CH_SET_FRONT_CENTER,
|
||||
|
||||
/** 5.1布局,共6个声道。 */
|
||||
CH_LAYOUT_5POINT1 = CH_LAYOUT_5POINT0 | CH_SET_LOW_FREQUENCY,
|
||||
|
||||
/** 5.1-后置布局,共6个声道。 */
|
||||
CH_LAYOUT_5POINT1_BACK = CH_LAYOUT_5POINT0_BACK | CH_SET_LOW_FREQUENCY,
|
||||
|
||||
/** 6.0布局,共6个声道。 */
|
||||
CH_LAYOUT_6POINT0 = CH_LAYOUT_5POINT0 | CH_SET_BACK_CENTER,
|
||||
|
||||
/** 3.1.2布局,共6个声道。 */
|
||||
CH_LAYOUT_3POINT1POINT2 = CH_LAYOUT_3POINT1 | CH_SET_TOP_FRONT_LEFT | CH_SET_TOP_FRONT_RIGHT,
|
||||
|
||||
/** 6.0-Front布局,共6个声道。 */
|
||||
CH_LAYOUT_6POINT0_FRONT = CH_LAYOUT_QUAD_SIDE | CH_SET_FRONT_LEFT_OF_CENTER | CH_SET_FRONT_RIGHT_OF_CENTER,
|
||||
|
||||
/** HEXAGONAL布局,共6个声道。 */
|
||||
CH_LAYOUT_HEXAGONAL = CH_LAYOUT_5POINT0_BACK | CH_SET_BACK_CENTER,
|
||||
|
||||
/** 6.1布局,共7个声道。 */
|
||||
CH_LAYOUT_6POINT1 = CH_LAYOUT_5POINT1 | CH_SET_BACK_CENTER,
|
||||
|
||||
/** 6.1-后置布局,共7个声道。 */
|
||||
CH_LAYOUT_6POINT1_BACK = CH_LAYOUT_5POINT1_BACK | CH_SET_BACK_CENTER,
|
||||
|
||||
/** 6.1-前置布局,共7个声道。 */
|
||||
CH_LAYOUT_6POINT1_FRONT = CH_LAYOUT_6POINT0_FRONT | CH_SET_LOW_FREQUENCY,
|
||||
|
||||
/** 7.0布局,共7个声道。 */
|
||||
CH_LAYOUT_7POINT0 = CH_LAYOUT_5POINT0 | CH_SET_BACK_LEFT | CH_SET_BACK_RIGHT,
|
||||
|
||||
/** 7.0-前置布局,共7个声道。 */
|
||||
CH_LAYOUT_7POINT0_FRONT = CH_LAYOUT_5POINT0 | CH_SET_FRONT_LEFT_OF_CENTER | CH_SET_FRONT_RIGHT_OF_CENTER,
|
||||
|
||||
/** 7.1布局,共8个声道。 */
|
||||
CH_LAYOUT_7POINT1 = CH_LAYOUT_5POINT1 | CH_SET_BACK_LEFT | CH_SET_BACK_RIGHT,
|
||||
|
||||
/** OCTAGONAL布局,共8个声道。 */
|
||||
CH_LAYOUT_OCTAGONAL = CH_LAYOUT_5POINT0 | CH_SET_BACK_LEFT | CH_SET_BACK_CENTER | CH_SET_BACK_RIGHT,
|
||||
|
||||
/** 5.1.2布局,共8个声道。 */
|
||||
CH_LAYOUT_5POINT1POINT2 = CH_LAYOUT_5POINT1 | CH_SET_TOP_SIDE_LEFT | CH_SET_TOP_SIDE_RIGHT,
|
||||
|
||||
/** 7.1-宽布局,共8个声道。 */
|
||||
CH_LAYOUT_7POINT1_WIDE = CH_LAYOUT_5POINT1 | CH_SET_FRONT_LEFT_OF_CENTER | CH_SET_FRONT_RIGHT_OF_CENTER,
|
||||
|
||||
/** 7.1-后置宽布局,共8个声道。 */
|
||||
CH_LAYOUT_7POINT1_WIDE_BACK = CH_LAYOUT_5POINT1_BACK | CH_SET_FRONT_LEFT_OF_CENTER | CH_SET_FRONT_RIGHT_OF_CENTER,
|
||||
|
||||
/** ACN_N3D(根据ITU标准)的二阶HOA布局,共9个声道。 */
|
||||
CH_LAYOUT_AMB_ORDER2_ACN_N3D = AMB_MODE | AMB_ORD_2 | AMB_COM_ACN | AMB_NOR_N3D,
|
||||
|
||||
/** ACN_SN3D(根据ITU标准)的二阶HOA布局,共9个声道。 */
|
||||
CH_LAYOUT_AMB_ORDER2_ACN_SN3D = AMB_MODE | AMB_ORD_2 | AMB_COM_ACN | AMB_NOR_SN3D,
|
||||
|
||||
/** FUMA(根据ITU标准)的二阶HOA布局,共9个声道。 */
|
||||
CH_LAYOUT_AMB_ORDER2_FUMA = AMB_MODE | AMB_ORD_2 | AMB_COM_FUMA,
|
||||
|
||||
/** 5.1.4布局,共10个声道。 */
|
||||
CH_LAYOUT_5POINT1POINT4 = CH_LAYOUT_5POINT1 | CH_SET_TOP_FRONT_LEFT | CH_SET_TOP_FRONT_RIGHT |
|
||||
CH_SET_TOP_BACK_LEFT | CH_SET_TOP_BACK_RIGHT,
|
||||
|
||||
/** 7.1.2布局,共10个声道。 */
|
||||
CH_LAYOUT_7POINT1POINT2 = CH_LAYOUT_7POINT1 | CH_SET_TOP_SIDE_LEFT | CH_SET_TOP_SIDE_RIGHT,
|
||||
|
||||
/** 7.1.4布局,共12个声道。 */
|
||||
CH_LAYOUT_7POINT1POINT4 = CH_LAYOUT_7POINT1 | CH_SET_TOP_FRONT_LEFT | CH_SET_TOP_FRONT_RIGHT |
|
||||
CH_SET_TOP_BACK_LEFT | CH_SET_TOP_BACK_RIGHT,
|
||||
|
||||
/** 10.2布局,共12个声道。 */
|
||||
CH_LAYOUT_10POINT2 = CH_SET_FRONT_LEFT | CH_SET_FRONT_RIGHT | CH_SET_FRONT_CENTER | CH_SET_TOP_FRONT_LEFT |
|
||||
CH_SET_TOP_FRONT_RIGHT | CH_SET_BACK_LEFT | CH_SET_BACK_RIGHT | CH_SET_BACK_CENTER |
|
||||
CH_SET_SIDE_LEFT | CH_SET_SIDE_RIGHT | CH_SET_WIDE_LEFT | CH_SET_WIDE_RIGHT,
|
||||
|
||||
/** 9.1.4布局,共14个声道。 */
|
||||
CH_LAYOUT_9POINT1POINT4 = CH_LAYOUT_7POINT1POINT4 | CH_SET_WIDE_LEFT | CH_SET_WIDE_RIGHT,
|
||||
|
||||
/** 9.1.6布局,共16个声道。 */
|
||||
CH_LAYOUT_9POINT1POINT6 = CH_LAYOUT_9POINT1POINT4 | CH_SET_TOP_SIDE_LEFT | CH_SET_TOP_SIDE_RIGHT,
|
||||
|
||||
/** HEXADECAGONAL布局,共16个声道。 */
|
||||
CH_LAYOUT_HEXADECAGONAL = CH_LAYOUT_OCTAGONAL | CH_SET_WIDE_LEFT | CH_SET_WIDE_RIGHT | CH_SET_TOP_BACK_LEFT |
|
||||
CH_SET_TOP_BACK_RIGHT | CH_SET_TOP_BACK_CENTER | CH_SET_TOP_FRONT_CENTER |
|
||||
CH_SET_TOP_FRONT_LEFT | CH_SET_TOP_FRONT_RIGHT,
|
||||
|
||||
/** ACN_N3D(根据ITU标准)的三阶HOA布局,共16个声道。 */
|
||||
CH_LAYOUT_AMB_ORDER3_ACN_N3D = AMB_MODE | AMB_ORD_3 | AMB_COM_ACN | AMB_NOR_N3D,
|
||||
|
||||
/** ACN_SN3D(根据ITU标准)的三阶HOA布局,共16个声道。 */
|
||||
CH_LAYOUT_AMB_ORDER3_ACN_SN3D = AMB_MODE | AMB_ORD_3 | AMB_COM_ACN | AMB_NOR_SN3D,
|
||||
|
||||
/** FUMA(根据ITU标准)的三阶HOA布局,共16个声道。 */
|
||||
CH_LAYOUT_AMB_ORDER3_FUMA = AMB_MODE | AMB_ORD_3 | AMB_COM_FUMA,
|
||||
|
||||
/** 22.2布局,共24个声道。 */
|
||||
CH_LAYOUT_22POINT2 = CH_LAYOUT_7POINT1POINT4 | CH_SET_FRONT_LEFT_OF_CENTER | CH_SET_FRONT_RIGHT_OF_CENTER |
|
||||
CH_SET_BACK_CENTER | CH_SET_TOP_CENTER | CH_SET_TOP_FRONT_CENTER | CH_SET_TOP_BACK_CENTER |
|
||||
CH_SET_TOP_SIDE_LEFT | CH_SET_TOP_SIDE_RIGHT | CH_SET_BOTTOM_FRONT_LEFT |
|
||||
CH_SET_BOTTOM_FRONT_RIGHT | CH_SET_BOTTOM_FRONT_CENTER | CH_SET_LOW_FREQUENCY_2
|
||||
} OH_AudioChannelLayout;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // NATIVE_AUDIO_CHANNEL_LAYOUT_H
|
||||
|
||||
/** @} */
|
||||
@@ -0,0 +1,327 @@
|
||||
/*
|
||||
* Copyright (C) 2026 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 Core
|
||||
* @{
|
||||
*
|
||||
* @brief Core模块提供的Audio Vivid元数据构建器。
|
||||
*
|
||||
* @since 26.0.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file native_audio_vivid.h
|
||||
*
|
||||
* @brief 声明Audio Vivid相关的函数和枚举。
|
||||
*
|
||||
* @kit AVCodecKit
|
||||
* @library libnative_media_core.so
|
||||
* @include <multimedia/player_framework/native_audio_vivid.h>
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @since 26.0.0
|
||||
*/
|
||||
|
||||
#ifndef NATIVE_AUDIO_VIVID_H
|
||||
#define NATIVE_AUDIO_VIVID_H
|
||||
|
||||
#include "native_avformat.h"
|
||||
#include "native_averrors.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Audio Vivid编码器信号格式枚举。
|
||||
*
|
||||
* @since 26.0.0
|
||||
*/
|
||||
typedef enum OH_AudioVividSignalFormat {
|
||||
/**
|
||||
* @brief Audio Vivid信号格式为单声道,编码器接收单声道数据,内部标记声道布局为{@link OH_AudioChannelLayout}.CH_LAYOUT_MONO。
|
||||
*/
|
||||
OH_AUDIO_VIVID_SIGNAL_FORMAT_MONO = 0,
|
||||
/**
|
||||
* @brief Audio Vivid信号格式为立体声,编码器接收双声道数据,内部标记声道布局为{@link OH_AudioChannelLayout}.CH_LAYOUT_STEREO。
|
||||
*/
|
||||
OH_AUDIO_VIVID_SIGNAL_FORMAT_STEREO = 1,
|
||||
/**
|
||||
* @brief Audio Vivid信号格式为多声道,编码器支持声道布局{@link OH_AudioChannelLayout}.CH_LAYOUT_5POINT1、
|
||||
* {@link OH_AudioChannelLayout}.CH_LAYOUT_5POINT1POINT2、{@link OH_AudioChannelLayout}.CH_LAYOUT_5POINT1POINT4、
|
||||
* {@link OH_AudioChannelLayout}.CH_LAYOUT_7POINT1、{@link OH_AudioChannelLayout}.CH_LAYOUT_7POINT1POINT2、
|
||||
* {@link OH_AudioChannelLayout}.CH_LAYOUT_7POINT1POINT4。
|
||||
*/
|
||||
OH_AUDIO_VIVID_SIGNAL_FORMAT_MC = 2,
|
||||
/**
|
||||
* @brief Audio Vivid信号格式为混合模式,包含声床(Bed)和对象(object)。声床的声道布局支持{@link OH_AudioChannelLayout}.CH_LAYOUT_STEREO、
|
||||
* {@link OH_AudioChannelLayout}.CH_LAYOUT_5POINT1、{@link OH_AudioChannelLayout}.CH_LAYOUT_5POINT1POINT2、
|
||||
* {@link OH_AudioChannelLayout}.CH_LAYOUT_5POINT1POINT4、{@link OH_AudioChannelLayout}.CH_LAYOUT_7POINT1、
|
||||
* {@link OH_AudioChannelLayout}.CH_LAYOUT_7POINT1POINT2、{@link OH_AudioChannelLayout}.CH_LAYOUT_7POINT1POINT4。
|
||||
*/
|
||||
OH_AUDIO_VIVID_SIGNAL_FORMAT_MIX = 4,
|
||||
} OH_AudioVividSignalFormat;
|
||||
|
||||
/**
|
||||
* @brief 表示对象声源在笛卡尔坐标系(Cartesian coordinate system)中的位置。
|
||||
*
|
||||
* 笛卡尔坐标系使用x、y、z轴定义三维空间中的位置。
|
||||
*
|
||||
* @since 26.0.0
|
||||
*/
|
||||
typedef struct OH_CartesianPosition {
|
||||
/**
|
||||
* @brief 对象声源在笛卡尔坐标系中的归一化(Normalization,将数值按比例转换到指定范围内)X坐标,表示左/右维度。\n
|
||||
* 取值范围为[-1.0, 1.0]。
|
||||
*/
|
||||
float x;
|
||||
/**
|
||||
* @brief 对象声源在笛卡尔坐标系中的归一化Y坐标,表示前/后维度。\n
|
||||
* 取值范围为[-1.0, 1.0]。
|
||||
*/
|
||||
float y;
|
||||
/**
|
||||
* @brief 对象声源在笛卡尔坐标系中的归一化Z坐标,表示上/下维度。\n
|
||||
* 取值范围为[-1.0, 1.0]。
|
||||
*/
|
||||
float z;
|
||||
} OH_CartesianPosition;
|
||||
|
||||
/**
|
||||
* @brief 表示极坐标系(polar coordinate system,也叫球坐标系)中的位置。
|
||||
*
|
||||
* 极坐标系使用方位角、俯仰角和距离定义对象声源在三维空间中的位置。
|
||||
* @since 26.0.0
|
||||
*/
|
||||
typedef struct OH_PolarPosition {
|
||||
/**
|
||||
* @brief 极坐标系下对象声源所在位置的方位角。\n
|
||||
* 取值范围为[-180.0, 180.0],其中0.0表示正前方,90.0表示左侧,-90.0表示右侧,-180.0或180.0表示正后方。
|
||||
*/
|
||||
float azimuth;
|
||||
/**
|
||||
* @brief 极坐标系下对象声源所在位置的俯仰角。\n
|
||||
* 取值范围为[-90.0, 90.0],其中0.0表示水平,90.0表示正上方,-90.0表示正下方。
|
||||
*/
|
||||
float elevation;
|
||||
/**
|
||||
* @brief 极坐标系下对象声源所在位置的归一化距离。\n
|
||||
* 取值范围为[0.0, 1.0]。
|
||||
*/
|
||||
float distance;
|
||||
} OH_PolarPosition;
|
||||
|
||||
/**
|
||||
* @brief 表示音频对象声源在三维空间中的位置。
|
||||
*
|
||||
* 该位置可以用笛卡尔坐标或极坐标表示。
|
||||
*
|
||||
* @since 26.0.0
|
||||
*/
|
||||
typedef struct OH_AudioObjectPosition {
|
||||
/**
|
||||
* @brief 对象声源是否使用笛卡尔坐标表示。\n
|
||||
* true表示使用笛卡尔坐标,false表示不使用笛卡尔坐标系,使用极坐标系。
|
||||
*/
|
||||
bool isCartesian;
|
||||
/**
|
||||
* @brief 包含笛卡尔坐标或极坐标位置数据的联合体。
|
||||
*/
|
||||
union {
|
||||
/**
|
||||
* @brief 笛卡尔坐标表示的位置。
|
||||
*/
|
||||
OH_CartesianPosition cartesian;
|
||||
/**
|
||||
* @brief 极坐标表示的位置。
|
||||
*/
|
||||
OH_PolarPosition polar;
|
||||
} pos;
|
||||
} OH_AudioObjectPosition;
|
||||
|
||||
/**
|
||||
* @brief OH_AudioVividMetaBuilder的前向声明。
|
||||
*
|
||||
* @since 26.0.0
|
||||
*/
|
||||
typedef struct OH_AudioVividMetaBuilderStruct OH_AudioVividMetaBuilder;
|
||||
|
||||
/**
|
||||
* @brief 创建Audio Vivid元数据构建器。
|
||||
*
|
||||
* @note **生命周期管理:**\n
|
||||
* 通过本函数创建的实例不再使用时,必须调用{@link OH_AudioVividMetaBuilder_Destroy}手动释放,以避免内存泄漏。
|
||||
* @param builder 输出参数,用于获取OH_AudioVividMetaBuilder实例指针的指针。
|
||||
* @param format 指向包含音频格式信息的OH_AVFormat指针。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:参数builder或format为空指针或无效。\n
|
||||
* AV_ERR_UNSUPPORT:当前设备不支持此功能。\n
|
||||
* AV_ERR_UNKNOWN:创建构建器失败,属于未知错误,请查看日志获取详细信息。
|
||||
* @since 26.0.0
|
||||
*/
|
||||
OH_AVErrCode OH_AudioVividMetaBuilder_Create(OH_AudioVividMetaBuilder **builder, const OH_AVFormat *format);
|
||||
|
||||
/**
|
||||
* @brief 更新Audio Vivid信号格式为{@link OH_AudioVividSignalFormat}.OH_AUDIO_VIVID_SIGNAL_FORMAT_MIX时的音频对象位置。
|
||||
*
|
||||
* 在此信号格式下,输入编码的PCM(Pulse Code Modulation)数据中,声道排列顺序为:声床声道在前,对象声道在后。\n
|
||||
* 对象声道按顺序与objectIndex对应,从0开始编号。
|
||||
*
|
||||
* @param builder 指向OH_AudioVividMetaBuilder的指针。
|
||||
* @param objectIndex 要更新的音频对象索引,从0开始,不超过在{@link OH_AudioVividMetaBuilder_Create}创建builder时入参format
|
||||
* 设置的{@link OH_MD_KEY_AUDIO_OBJECT_NUMBER}对应的值。
|
||||
* @param pos 音频对象声源的新位置。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:参数builder为空指针或无效,objectIndex或pos无效。
|
||||
* @since 26.0.0
|
||||
*/
|
||||
OH_AVErrCode OH_AudioVividMetaBuilder_UpdateObjectPos(OH_AudioVividMetaBuilder *builder,
|
||||
int32_t objectIndex, OH_AudioObjectPosition pos);
|
||||
|
||||
/**
|
||||
* @brief 更新Audio Vivid信号格式为{@link OH_AudioVividSignalFormat}.OH_AUDIO_VIVID_SIGNAL_FORMAT_MIX时的音频对象渲染的线性增益。
|
||||
*
|
||||
* @param builder 指向OH_AudioVividMetaBuilder的指针。
|
||||
* @param objectIndex 要更新的音频对象索引,从0开始,不超过在{@link OH_AudioVividMetaBuilder_Create}创建builder时入参format
|
||||
* 设置的{@link OH_MD_KEY_AUDIO_OBJECT_NUMBER}对应的值。
|
||||
* @param gain 对象渲染时应用的线性增益值,范围为[0.0, 6.0],线性增益0.0为静音,1.0为不变。此参数可选,如未设置则不应用增益。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:参数builder为空指针或无效,objectIndex或gain无效。
|
||||
* @since 26.0.0
|
||||
*/
|
||||
OH_AVErrCode OH_AudioVividMetaBuilder_UpdateObjectGain(OH_AudioVividMetaBuilder *builder,
|
||||
int32_t objectIndex, float gain);
|
||||
|
||||
/**
|
||||
* @brief 获取元数据长度。
|
||||
*
|
||||
* @param builder 指向OH_AudioVividMetaBuilder的指针。
|
||||
* @param withStaticMeta 设置输出的长度是否包含静态元数据。true表示输出长度包含静态元数据;false表示输出长度仅包含动态元数据。
|
||||
* @param len 用于接收元数据长度的指针。单位为字节。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:参数builder为空指针或无效,len为空指针。
|
||||
* @since 26.0.0
|
||||
*/
|
||||
OH_AVErrCode OH_AudioVividMetaBuilder_GetMetaLen(const OH_AudioVividMetaBuilder *builder, bool withStaticMeta,
|
||||
int32_t *len);
|
||||
|
||||
/**
|
||||
* @brief 获取元数据缓冲区。
|
||||
*
|
||||
* @param builder 指向OH_AudioVividMetaBuilder的指针。
|
||||
* @param withStaticMeta 设置输出的长度是否包含静态元数据。true表示输出缓冲区包含静态元数据;false表示输出缓冲区仅包含动态元数据。
|
||||
* @param buffer 用于接收元数据内容的缓冲区指针。
|
||||
* @param len 缓冲区长度。单位为字节。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:builder为空指针或无效,buffer为空指针或len不足。
|
||||
* @since 26.0.0
|
||||
*/
|
||||
OH_AVErrCode OH_AudioVividMetaBuilder_GetMeta(const OH_AudioVividMetaBuilder *builder, bool withStaticMeta,
|
||||
uint8_t *buffer, int32_t len);
|
||||
|
||||
/**
|
||||
* @brief 销毁Audio Vivid元数据构建器并释放资源。
|
||||
*
|
||||
* @param builder 指向待销毁的OH_AudioVividMetaBuilder的指针。
|
||||
* @return AV_ERR_OK:执行成功。\n
|
||||
* AV_ERR_INVALID_VAL:参数builder为空指针。
|
||||
* @since 26.0.0
|
||||
*/
|
||||
OH_AVErrCode OH_AudioVividMetaBuilder_Destroy(OH_AudioVividMetaBuilder *builder);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief 创建一个空的Audio Vivid元数据构建器。
|
||||
*
|
||||
* 该函数用于合并Audio Vivid元数据的场景。在创建一个空的元数据构造器后,
|
||||
* 用户可以通过调用{@link OH_AudioVividMetaBuilder_UpdateBaseMeta}接口来增加、修改或者删除音频对象。
|
||||
*
|
||||
* @note 生命周期管理:
|
||||
* 通过本函数创建的实例不再使用时,必须调用{@link OH_AudioVividMetaBuilder_Destroy}手动释放,以避免内存泄漏。
|
||||
* @param builder 输出参数,用于获取OH_AudioVividMetaBuilder实例指针的指针。
|
||||
* @return <ul>
|
||||
* <li>AV_ERR_OK:执行成功。</li>
|
||||
* <li>AV_ERR_INVALID_VAL:参数builder为空指针或无效。</li>
|
||||
* <li>AV_ERR_UNSUPPORT:当前设备不支持此功能。</li>
|
||||
* <li>AV_ERR_UNKNOWN:创建构建器失败,属于未知错误,请查看日志获取详细信息。</li>
|
||||
* </ul>
|
||||
* @since 26.0.0
|
||||
*/
|
||||
OH_AVErrCode OH_AudioVividMetaBuilder_CreateEmptyBuilder(OH_AudioVividMetaBuilder **builder);
|
||||
|
||||
/**
|
||||
* @brief 更新Audio Vivid元数据构造器的基础元数据。
|
||||
*
|
||||
* buffer需要包含完整的Audio Vivid元数据。
|
||||
* 构造器会将元数据里的音频声床和音频对象信息保留下来。
|
||||
*
|
||||
* @note 约束条件:
|
||||
* 基础元数据内音频的声床声道数 + 对象数必须小于等于16个。
|
||||
* @param builder 指向OH_AudioVividMetaBuilder的指针。
|
||||
* @param buffer 指向包含基础元数据的指针。
|
||||
* @param len 缓冲区长度。单位为字节(Byte)。
|
||||
* @return <ul>
|
||||
* <li>AV_ERR_OK:执行成功。</li>
|
||||
* <li>AV_ERR_INVALID_VAL:参数builder、format为空指针或无效。</li>
|
||||
* </ul>
|
||||
* @since 26.0.0
|
||||
*/
|
||||
OH_AVErrCode OH_AudioVividMetaBuilder_UpdateBaseMeta(OH_AudioVividMetaBuilder *builder, const uint8_t *buffer,
|
||||
int32_t len);
|
||||
|
||||
/**
|
||||
* @brief Audio Vivid元数据构造器内添加一个音频对象。
|
||||
*
|
||||
* 添加音频对象后,可以通过{@link OH_AudioVividMetaBuilder_UpdateObjectPos}和{@link OH_AudioVividMetaBuilder_UpdateObjectGain}接口,
|
||||
* 更新该对象的位置和对象渲染的线性增益。
|
||||
*
|
||||
* @note 约束条件:
|
||||
* 音频的声床声道数 + 对象数必须小于等于16个。
|
||||
* @param builder 指向OH_AudioVividMetaBuilder的指针。
|
||||
* @param objectIndex 输出参数,用于输出新增对象的索引。
|
||||
* @return <ul>
|
||||
* <li>AV_ERR_OK:执行成功。</li>
|
||||
* <li>AV_ERR_INVALID_VAL:参数builder、objectIndex为空指针或无效。</li>
|
||||
* <li>AV_ERR_UNKNOWN:添加对象失败,属于未知错误,请查看日志获取详细信息。</li>
|
||||
* </ul>
|
||||
* @since 26.0.0
|
||||
*/
|
||||
OH_AVErrCode OH_AudioVividMetaBuilder_AddObject(OH_AudioVividMetaBuilder *builder, int32_t *objectIndex);
|
||||
|
||||
/**
|
||||
* @brief 从Audio Vivid元数据构造器内删除一个音频对象。
|
||||
*
|
||||
* 只有通过{@link OH_AudioVividMetaBuilder_AddObject}函数创建的音频对象可以被删除。
|
||||
* 通过{@link OH_AudioVividMetaBuilder_Destroy}函数新增的音频对象无法删除。
|
||||
* 删除音频对象后,其他音频对象的索引保持不变。
|
||||
*
|
||||
* @param builder 指向OH_AudioVividMetaBuilder的指针。
|
||||
* @param objectIndex 要移除的音频对象的索引。
|
||||
* @return <ul>
|
||||
* <li>AV_ERR_OK:执行成功。</li>
|
||||
* <li>AV_ERR_INVALID_VAL:</li>
|
||||
* <li> 1. 参数builder为空指针或无效;</li>
|
||||
* <li> 2. 参数objectIndex无效。</li>
|
||||
* </ul>
|
||||
* @since 26.0.0
|
||||
*/
|
||||
OH_AVErrCode OH_AudioVividMetaBuilder_RemoveObject(OH_AudioVividMetaBuilder *builder, int32_t objectIndex);
|
||||
|
||||
#endif // NATIVE_AUDIO_VIVID_H
|
||||
|
||||
/** @} */
|
||||
@@ -0,0 +1,188 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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 Core
|
||||
* @{
|
||||
*
|
||||
* @brief Core模块提供用于媒体系统的基础骨干能力,包含内存、错误码、媒体数据结构等相关函数。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @since 9
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @file native_avbuffer.h
|
||||
*
|
||||
* @brief 声明了媒体数据结构AVBuffer的函数接口。
|
||||
* @sample [AVCodec](https://gitcode.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Media/AVCodec)
|
||||
*
|
||||
* @kit AVCodecKit
|
||||
* @include <multimedia/player_framework/native_avbuffer.h>
|
||||
* @library libnative_media_core.so
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @since 11
|
||||
*/
|
||||
|
||||
#ifndef NATIVE_AVBUFFER_H
|
||||
#define NATIVE_AVBUFFER_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include "native_averrors.h"
|
||||
#include "native_avformat.h"
|
||||
#include "native_avbuffer_info.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/**
|
||||
* @brief 为媒体内存接口定义native层对象。
|
||||
* @since 11
|
||||
*/
|
||||
typedef struct OH_AVBuffer OH_AVBuffer;
|
||||
/**
|
||||
* @brief 为图形内存接口定义native层对象。
|
||||
* @since 11
|
||||
*/
|
||||
typedef struct OH_NativeBuffer OH_NativeBuffer;
|
||||
|
||||
/**
|
||||
* @brief 创建OH_AVBuffer实例。
|
||||
* 需要注意的是,返回值指向的创建OH_AVBuffer的实例需要开发者主动调用接口释放,请参阅{@link OH_AVBuffer_Destroy}。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param capacity 创建内存的大小,单位字节。
|
||||
* @return 如果创建成功,则返回OH_AVBuffer实例的指针,如果失败,则返回NULL。\n
|
||||
* 可能的失败原因:\n
|
||||
* 1.capacity <= 0。\n
|
||||
* 2.出现内部错误,系统没有资源等。
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVBuffer *OH_AVBuffer_Create(int32_t capacity);
|
||||
|
||||
/**
|
||||
* @brief 释放OH_AVBuffer实例指针的资源,同一个buffer不允许重复销毁。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param buffer 指向OH_AVBuffer实例的指针。
|
||||
* @return AV_ERR_OK:操作成功。\n
|
||||
* AV_ERR_INVALID_VAL:输入的buffer为空指针或者buffer格式校验失败。\n
|
||||
* AV_ERR_OPERATE_NOT_PERMIT:输入的buffer不是用户创建的。
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVErrCode OH_AVBuffer_Destroy(OH_AVBuffer *buffer);
|
||||
|
||||
/**
|
||||
* @brief 获取数据缓冲区的pts、size、offset、flags高频属性参数。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param buffer 指向OH_AVBuffer实例的指针。
|
||||
* @param attr 指向OH_AVCodecBufferAttr实例的指针。
|
||||
* @return AV_ERR_OK:操作成功。\n
|
||||
* AV_ERR_INVALID_VAL:可能的原因:\n
|
||||
* 1. 输入的buffer或attr为空指针。\n
|
||||
* 2. buffer结构校验失败。
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVErrCode OH_AVBuffer_GetBufferAttr(OH_AVBuffer *buffer, OH_AVCodecBufferAttr *attr);
|
||||
|
||||
/**
|
||||
* @brief 设置数据缓冲区的pts、size、offset、flags高频属性参数。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param buffer 指向OH_AVBuffer实例的指针。
|
||||
* @param attr 指向OH_AVCodecBufferAttr实例的指针。
|
||||
* @return AV_ERR_OK:操作成功。\n
|
||||
* AV_ERR_INVALID_VAL:可能的原因:\n
|
||||
* 1. 输入的buffer或attr为空指针。\n
|
||||
* 2. buffer结构校验失败。\n
|
||||
* 3. 输入buffer中内存的size或offset是无效值。
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVErrCode OH_AVBuffer_SetBufferAttr(OH_AVBuffer *buffer, const OH_AVCodecBufferAttr *attr);
|
||||
|
||||
/**
|
||||
* @brief 获取除基础属性外的其他参数,信息在OH_AVFormat中承载。
|
||||
* 需要注意的是,返回值指向的创建OH_AVFormat的实例需要开发者主动释放,请参阅{@link OH_AVFormat_Destroy}。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param buffer 指向OH_AVBuffer实例的指针。
|
||||
* @return AV_ERR_OK:操作成功。\n
|
||||
* AV_ERR_INVALID_VAL:可能的原因:\n
|
||||
* 1. 输入的buffer为空指针。\n
|
||||
* 2. 输入buffer的meta为空指针。\n
|
||||
* 3. buffer结构校验失败。
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVFormat *OH_AVBuffer_GetParameter(OH_AVBuffer *buffer);
|
||||
|
||||
/**
|
||||
* @brief 设置除基础属性外的其他参数,信息在OH_AVFormat中承载。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param buffer 指向OH_AVBuffer实例的指针。
|
||||
* @param format 指向OH_AVFormat实例的指针。
|
||||
* @return AV_ERR_OK:操作成功。\n
|
||||
* AV_ERR_INVALID_VAL:可能的原因:\n
|
||||
* 1. 输入的buffer或format为空指针。\n
|
||||
* 2. 输入buffer的meta为空指针。\n
|
||||
* 3. buffer结构校验失败。
|
||||
* @since 11
|
||||
*/
|
||||
OH_AVErrCode OH_AVBuffer_SetParameter(OH_AVBuffer *buffer, const OH_AVFormat *format);
|
||||
|
||||
/**
|
||||
* @brief 获取数据缓冲区的虚拟地址。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param buffer 指向OH_AVBuffer实例的指针。
|
||||
* @return 如果成功,则返回数据缓冲区的虚拟地址,如果失败,则返回NULL。\n
|
||||
* 可能的失败原因:\n
|
||||
* 1.输入的buffer为空指针。\n
|
||||
* 2.OH_AVBuffer结构校验失败。\n
|
||||
* 3.出现内部错误。
|
||||
* @since 11
|
||||
*/
|
||||
uint8_t *OH_AVBuffer_GetAddr(OH_AVBuffer *buffer);
|
||||
|
||||
/**
|
||||
* @brief 获取数据缓冲区的容量(字节数)。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param buffer 指向OH_AVBuffer实例的指针。
|
||||
* @return 如果成功,则返回数据缓冲区的容量,如果失败,则返回-1。\n
|
||||
* 可能的失败原因:\n
|
||||
* 1.输入的buffer为空指针。\n
|
||||
* 2.OH_AVBuffer结构校验失败。\n
|
||||
* 3.出现内部错误。
|
||||
* @since 11
|
||||
*/
|
||||
int32_t OH_AVBuffer_GetCapacity(OH_AVBuffer *buffer);
|
||||
|
||||
/**
|
||||
* @brief 获取OH_NativeBuffer实例的指针。
|
||||
* 需要注意的是,返回值指向的创建OH_NativeBuffer的实例需要开发者主动调用接口释放,请参阅{@link OH_NativeBuffer_Unreference}。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param buffer 指向OH_AVBuffer实例的指针。
|
||||
* @return 如果成功,则返回OH_NativeBuffer实例的指针,如果失败,则返回NULL。\n
|
||||
* 可能的失败原因:\n
|
||||
* 1.输入的buffer为空指针。\n
|
||||
* 2.OH_AVBuffer结构校验失败。\n
|
||||
* 3.出现内部错误。
|
||||
* @since 11
|
||||
*/
|
||||
OH_NativeBuffer *OH_AVBuffer_GetNativeBuffer(OH_AVBuffer *buffer);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // NATIVE_AVBUFFER_H
|
||||
|
||||
/** @} */
|
||||
@@ -0,0 +1,101 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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 Core
|
||||
* @{
|
||||
*
|
||||
* @brief Core模块提供用于媒体系统的基础骨干能力,包含内存、错误码、媒体数据结构等相关函数。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @since 9
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @file native_avbuffer_info.h
|
||||
*
|
||||
* @brief 声明了媒体数据结构AVBuffer属性的定义。
|
||||
* @sample [AVCodec](https://gitcode.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Media/AVCodec)
|
||||
*
|
||||
* @kit AVCodecKit
|
||||
* @include <multimedia/player_framework/native_avbuffer_info.h>
|
||||
* @library libnative_media_core.so
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @since 9
|
||||
*/
|
||||
|
||||
#ifndef NATIVE_AVBUFFER_INFO_H
|
||||
#define NATIVE_AVBUFFER_INFO_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/**
|
||||
* @brief 枚举OH_AVCodec缓冲区标记的类别。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @since 9
|
||||
*/
|
||||
typedef enum OH_AVCodecBufferFlags {
|
||||
/** 表示为普通帧。 */
|
||||
AVCODEC_BUFFER_FLAGS_NONE = 0,
|
||||
/** 表示缓冲区是流结束帧。 */
|
||||
AVCODEC_BUFFER_FLAGS_EOS = 1 << 0,
|
||||
/** 表示缓冲区包含关键帧。 */
|
||||
AVCODEC_BUFFER_FLAGS_SYNC_FRAME = 1 << 1,
|
||||
/** 表示缓冲区中的数据只是帧的一部分。 */
|
||||
AVCODEC_BUFFER_FLAGS_INCOMPLETE_FRAME = 1 << 2,
|
||||
/** 表示缓冲区包含编解码特定数据。 */
|
||||
AVCODEC_BUFFER_FLAGS_CODEC_DATA = 1 << 3,
|
||||
/**
|
||||
* @brief 表示缓冲区被解码依赖,解码之后的数据可丢弃。
|
||||
* @since 12
|
||||
*/
|
||||
AVCODEC_BUFFER_FLAGS_DISCARD = 1 << 4,
|
||||
/**
|
||||
* @brief 表示缓冲区不被参考可直接丢弃。
|
||||
* @since 12
|
||||
*/
|
||||
AVCODEC_BUFFER_FLAGS_DISPOSABLE = 1 << 5,
|
||||
} OH_AVCodecBufferFlags;
|
||||
|
||||
/**
|
||||
* @brief 定义OH_AVCodec的缓冲区描述信息。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @since 9
|
||||
*/
|
||||
typedef struct OH_AVCodecBufferAttr {
|
||||
/** 此缓冲区的显示时间戳(以微秒为单位)。 */
|
||||
int64_t pts;
|
||||
/** 缓冲区中包含的数据的大小(以字节为单位)。 */
|
||||
int32_t size;
|
||||
/** 此缓冲区中有效数据的起始偏移量。 */
|
||||
int32_t offset;
|
||||
/** 此缓冲区具有的标志,请参阅{@link OH_AVCodecBufferFlags}。 */
|
||||
uint32_t flags;
|
||||
} OH_AVCodecBufferAttr;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // NATIVE_AVBUFFER_INFO_H
|
||||
|
||||
/** @} */
|
||||
@@ -0,0 +1,215 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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 Core
|
||||
* @{
|
||||
*
|
||||
* @brief Core模块提供用于媒体系统的基础骨干能力,包含内存、错误码、媒体数据结构等相关函数。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @since 9
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file native_averrors.h
|
||||
*
|
||||
* @brief 媒体框架错误码。
|
||||
*
|
||||
* @kit AVCodecKit
|
||||
* @include <multimedia/player_framework/native_averrors.h>
|
||||
* @library libnative_media_core.so
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @since 9
|
||||
*/
|
||||
|
||||
#ifndef NATIVE_AVERRORS_H
|
||||
#define NATIVE_AVERRORS_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief 媒体框架错误码。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
typedef enum OH_AVErrCode {
|
||||
/**
|
||||
* 操作成功。
|
||||
*/
|
||||
AV_ERR_OK = 0,
|
||||
/**
|
||||
* 无内存。
|
||||
*/
|
||||
AV_ERR_NO_MEMORY = 1,
|
||||
/**
|
||||
* 操作不允许。
|
||||
*/
|
||||
AV_ERR_OPERATE_NOT_PERMIT = 2,
|
||||
/**
|
||||
* 无效值。
|
||||
*/
|
||||
AV_ERR_INVALID_VAL = 3,
|
||||
/**
|
||||
* IO错误。
|
||||
*/
|
||||
AV_ERR_IO = 4,
|
||||
/**
|
||||
* 超时错误。
|
||||
*/
|
||||
AV_ERR_TIMEOUT = 5,
|
||||
/**
|
||||
* 未知错误。
|
||||
*/
|
||||
AV_ERR_UNKNOWN = 6,
|
||||
/**
|
||||
* 服务死亡。
|
||||
*/
|
||||
AV_ERR_SERVICE_DIED = 7,
|
||||
/**
|
||||
* 当前状态不支持此操作。
|
||||
*/
|
||||
AV_ERR_INVALID_STATE = 8,
|
||||
/**
|
||||
* 未支持的接口。
|
||||
*/
|
||||
AV_ERR_UNSUPPORT = 9,
|
||||
/**
|
||||
* @error 输入数据错误。
|
||||
* @since 12
|
||||
*/
|
||||
AV_ERR_INPUT_DATA_ERROR = 10,
|
||||
/**
|
||||
* @error 不支持的格式。
|
||||
* @since 18
|
||||
*/
|
||||
AV_ERR_UNSUPPORTED_FORMAT = 11,
|
||||
/**
|
||||
* 扩展错误码初始值。
|
||||
*/
|
||||
AV_ERR_EXTEND_START = 100,
|
||||
/**
|
||||
* @error DRM起始错误码。
|
||||
* @since 12
|
||||
*/
|
||||
AV_ERR_DRM_BASE = 200,
|
||||
/**
|
||||
* @error DRM解密失败。
|
||||
* @since 12
|
||||
*/
|
||||
AV_ERR_DRM_DECRYPT_FAILED = 201,
|
||||
/**
|
||||
* @error 视频起始错误码。
|
||||
* @since 12
|
||||
*/
|
||||
AV_ERR_VIDEO_BASE = 300,
|
||||
/**
|
||||
* @error 视频不支持色彩空间转换。
|
||||
* @since 12
|
||||
*/
|
||||
AV_ERR_VIDEO_UNSUPPORTED_COLOR_SPACE_CONVERSION = 301,
|
||||
/**
|
||||
* @error 无法找到主机,可能服务器地址错误。
|
||||
* @since 14
|
||||
*/
|
||||
AV_ERR_IO_CANNOT_FIND_HOST = 5411001,
|
||||
/**
|
||||
* @error 网络连接超时。
|
||||
* @since 14
|
||||
*/
|
||||
AV_ERR_IO_CONNECTION_TIMEOUT = 5411002,
|
||||
/**
|
||||
* @error 网络异常导致连接失败。
|
||||
* @since 14
|
||||
*/
|
||||
AV_ERR_IO_NETWORK_ABNORMAL = 5411003,
|
||||
/**
|
||||
* @error 网络不可用导致连接失败。
|
||||
* @since 14
|
||||
*/
|
||||
AV_ERR_IO_NETWORK_UNAVAILABLE = 5411004,
|
||||
/**
|
||||
* @error 无网络访问权限。
|
||||
* @since 14
|
||||
*/
|
||||
AV_ERR_IO_NO_PERMISSION = 5411005,
|
||||
/**
|
||||
* @error 客户端请求参数错误或超出处理能力。
|
||||
* @since 14
|
||||
*/
|
||||
AV_ERR_IO_NETWORK_ACCESS_DENIED = 5411006,
|
||||
/**
|
||||
* @error 无法找到可用网络资源。
|
||||
* @since 14
|
||||
*/
|
||||
AV_ERR_IO_RESOURCE_NOT_FOUND = 5411007,
|
||||
/**
|
||||
* @error 由于未携带客户端证书、证书无效或过期导致服务器验证失败。
|
||||
* @since 14
|
||||
*/
|
||||
AV_ERR_IO_SSL_CLIENT_CERT_NEEDED = 5411008,
|
||||
/**
|
||||
* @error 由于未携带服务器证书、证书无效或过期导致客户端验证失败。
|
||||
* @since 14
|
||||
*/
|
||||
AV_ERR_IO_SSL_CONNECT_FAIL = 5411009,
|
||||
/**
|
||||
* @error SSL服务器证书不受信任。
|
||||
* @since 14
|
||||
*/
|
||||
AV_ERR_IO_SSL_SERVER_CERT_UNTRUSTED = 5411010,
|
||||
/**
|
||||
* @error 网络协议不支持该请求。
|
||||
* @since 14
|
||||
*/
|
||||
AV_ERR_IO_UNSUPPORTED_REQUEST = 5411011,
|
||||
/**
|
||||
* @error 不允许HTTP明文访问。
|
||||
* @since 23
|
||||
*/
|
||||
AV_ERR_IO_CLEARTEXT_NOT_PERMITTED = 5411012,
|
||||
/**
|
||||
* @error 同步模式下流格式发生变更。
|
||||
* 可以通过调用接口{@link OH_VideoEncoder_GetOutputDescription}(视频编码)、{@link OH_VideoDecoder_GetOutputDescription}(视频解码)、
|
||||
* {@link OH_AudioCodec_GetOutputDescription}音频编解码来获取更新后流的配置信息。
|
||||
* @since 20
|
||||
*/
|
||||
AV_ERR_STREAM_CHANGED = 5410005,
|
||||
/**
|
||||
* @error 同步模式下临时缓冲区查询失败,建议等待短暂间隔后重试操作。
|
||||
* @since 20
|
||||
*/
|
||||
AV_ERR_TRY_AGAIN_LATER = 5410006,
|
||||
/**
|
||||
* @error 该媒体源或者当前设备不支持超分。
|
||||
* @since 23
|
||||
*/
|
||||
AV_ERR_SUPER_RESOLUTION_UNSUPPORTED = 5410003,
|
||||
/**
|
||||
* @error 未使能超分。
|
||||
* @since 23
|
||||
*/
|
||||
AV_ERR_SUPER_RESOLUTION_NOT_ENABLED = 5410004,
|
||||
} OH_AVErrCode;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // NATIVE_AVERRORS_H
|
||||
/** @} */
|
||||
@@ -0,0 +1,495 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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 Core
|
||||
* @{
|
||||
*
|
||||
* @brief Core模块提供用于媒体系统的基础骨干能力,包含内存、错误码、媒体数据结构等相关函数。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @since 9
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file native_avformat.h
|
||||
*
|
||||
* @brief 声明了OH_AVFormat相关的函数和枚举。
|
||||
* @sample [AVCodec](https://gitcode.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Media/AVCodec)
|
||||
*
|
||||
* @kit AVCodecKit
|
||||
* @include <multimedia/player_framework/native_avformat.h>
|
||||
* @library libnative_media_core.so
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @since 9
|
||||
*/
|
||||
|
||||
#ifndef NATIVE_AVFORMAT_H
|
||||
#define NATIVE_AVFORMAT_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/**
|
||||
* @brief 为OH_AVFormat接口定义native层对象。
|
||||
* @since 9
|
||||
*/
|
||||
typedef struct OH_AVFormat OH_AVFormat;
|
||||
|
||||
/**
|
||||
* @brief 视频像素格式的枚举类。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
typedef enum OH_AVPixelFormat {
|
||||
/**
|
||||
* yuv 420 planar。
|
||||
*/
|
||||
AV_PIXEL_FORMAT_YUVI420 = 1,
|
||||
/**
|
||||
* NV12. yuv 420 semiplanar。
|
||||
*/
|
||||
AV_PIXEL_FORMAT_NV12 = 2,
|
||||
/**
|
||||
* NV21. yvu 420 semiplanar。
|
||||
*/
|
||||
AV_PIXEL_FORMAT_NV21 = 3,
|
||||
/**
|
||||
* 像素格式从surface获取。只作用于Surface模式,Buffer模式不生效。
|
||||
*/
|
||||
AV_PIXEL_FORMAT_SURFACE_FORMAT = 4,
|
||||
/**
|
||||
* RGBA8888。
|
||||
*/
|
||||
AV_PIXEL_FORMAT_RGBA = 5,
|
||||
/**
|
||||
* @brief RGBA1010102。
|
||||
* @since 20
|
||||
*/
|
||||
AV_PIXEL_FORMAT_RGBA1010102 = 6,
|
||||
} OH_AVPixelFormat;
|
||||
|
||||
/**
|
||||
* @brief 创建OH_AVFormat实例,用于读取数据。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @return 返回指向OH_AVFormat实例的指针。系统资源不足时返回NULL。
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
struct OH_AVFormat *OH_AVFormat_Create(void);
|
||||
|
||||
/**
|
||||
* @brief 创建音频OH_AVFormat实例指针并预设置指定参数,用于读写数据。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param mimeType MIME类型描述字符串,请参阅{@link AVCODEC_MIMETYPE}。
|
||||
* @param sampleRate 采样率,单位Hz。
|
||||
* @param channelCount 声道个数,如1为单声道,2为双声道。
|
||||
* @return 如果创建成功,返回指向OH_AVFormat实例的指针,如果失败,则返回NULL。\n
|
||||
* 可能的失败原因:\n
|
||||
* 1. 传入的mimeType为NULL。\n
|
||||
* 2. 系统资源不足。
|
||||
* @since 10
|
||||
* @version 1.0
|
||||
*/
|
||||
struct OH_AVFormat *OH_AVFormat_CreateAudioFormat(const char *mimeType,
|
||||
int32_t sampleRate,
|
||||
int32_t channelCount);
|
||||
|
||||
/**
|
||||
* @brief 创建视频OH_AVFormat实例指针并预设置指定参数,用于读写数据。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param mimeType MIME类型描述字符串,请参阅{@link AVCODEC_MIMETYPE}。
|
||||
* @param width 图像的宽度,单位为pixel。
|
||||
* @param height 图像的高度,单位为pixel。
|
||||
* @return 如果创建成功,返回指向OH_AVFormat实例的指针,如果失败,则返回NULL。\n
|
||||
* 可能的失败原因:\n
|
||||
* 1. 传入的mimeType为NULL。\n
|
||||
* 2. 系统资源不足。
|
||||
* @since 10
|
||||
* @version 1.0
|
||||
*/
|
||||
struct OH_AVFormat *OH_AVFormat_CreateVideoFormat(const char *mimeType,
|
||||
int32_t width,
|
||||
int32_t height);
|
||||
|
||||
/**
|
||||
* @brief 销毁OH_AVFormat实例,不允许重复销毁。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param format 指向OH_AVFormat实例的指针。
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
void OH_AVFormat_Destroy(struct OH_AVFormat *format);
|
||||
|
||||
/**
|
||||
* @brief 复制OH_AVFormat实例。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param to OH_AVFormat实例,用于接收数据。
|
||||
* @param from 指向复制数据的OH_AVFormat实例的指针。
|
||||
* @return 返回值为true表示成功,为false表示失败。\n
|
||||
* 可能的失败原因:\n
|
||||
* 1. 输入参数为空指针。\n
|
||||
* 2. 输入的OH_AVFormat参数结构校验失败。
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
bool OH_AVFormat_Copy(struct OH_AVFormat *to, struct OH_AVFormat *from);
|
||||
|
||||
/**
|
||||
* @brief 对OH_AVFormat的[key](capi-codecbase.md#媒体数据键值对)赋int类型的值。
|
||||
* 该接口仅能设置int类型的参数,参数类型定义详见{@link native_avcodec_base.h}。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param format 指向OH_AVFormat实例的指针。
|
||||
* @param key 写入数据的键。
|
||||
* @param value 写入数据的值。
|
||||
* @return 返回值为true表示成功,为false表示失败。\n
|
||||
* 可能的失败原因:\n
|
||||
* 1. 输入format为空指针。\n
|
||||
* 2. 输入format参数结构校验失败。\n
|
||||
* 3. 输入key为空指针。\n
|
||||
* 4. 设置的key对应的value类型错误。
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
bool OH_AVFormat_SetIntValue(struct OH_AVFormat *format, const char *key, int32_t value);
|
||||
|
||||
/**
|
||||
* @brief 对OH_AVFormat的key赋unsigned int类型的值。
|
||||
*
|
||||
* 该接口仅能设置unsigned int类型的参数,具体参数类型定义请参考{@link native_avcodec_base.h}。
|
||||
* @param format 指向OH_AVFormat实例的指针。
|
||||
* @param key 写入数据的键。
|
||||
* @param value 写入数据的值。
|
||||
* @return 返回值为true表示成功,为false表示失败。\n
|
||||
* 可能的失败原因:\n
|
||||
* 1. 输入format为空指针。\n
|
||||
* 2. 输入format参数结构校验失败。\n
|
||||
* 3. 输入key为空指针。
|
||||
* @since 23
|
||||
*/
|
||||
bool OH_AVFormat_SetUintValue(struct OH_AVFormat *format, const char *key, uint32_t value);
|
||||
|
||||
/**
|
||||
* @brief 对OH_AVFormat的[key](capi-codecbase.md#媒体数据键值对)赋long类型的值。
|
||||
* 该接口仅能设置long类型的参数,参数类型定义详见{@link native_avcodec_base.h}。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param format 指向OH_AVFormat实例的指针。
|
||||
* @param key 写入数据的键。
|
||||
* @param value 写入数据的值。
|
||||
* @return 返回值为true表示成功,为false表示失败。\n
|
||||
* 可能的失败原因:\n
|
||||
* 1. 输入format为空指针。\n
|
||||
* 2. 输入format参数结构校验失败。\n
|
||||
* 3. 输入key为空指针。\n
|
||||
* 4. 设置的key对应的value类型错误。
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
bool OH_AVFormat_SetLongValue(struct OH_AVFormat *format, const char *key, int64_t value);
|
||||
|
||||
/**
|
||||
* @brief 对OH_AVFormat的[key](capi-codecbase.md#媒体数据键值对)赋float类型的值。
|
||||
* 该接口仅能设置float类型的参数,参数类型定义详见{@link native_avcodec_base.h}。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param format 指向OH_AVFormat实例的指针。
|
||||
* @param key 写入数据的键。
|
||||
* @param value 写入数据的值。
|
||||
* @return 返回值为true表示成功,为false表示失败。\n
|
||||
* 可能的失败原因:\n
|
||||
* 1. 输入format为空指针。\n
|
||||
* 2. 输入format参数结构校验失败。\n
|
||||
* 3. 输入key为空指针。\n
|
||||
* 4. 设置的key对应的value类型错误。
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
bool OH_AVFormat_SetFloatValue(struct OH_AVFormat *format, const char *key, float value);
|
||||
|
||||
/**
|
||||
* @brief 对OH_AVFormat的[key](capi-codecbase.md#媒体数据键值对)赋double类型的值。
|
||||
* 该接口仅能设置double类型的参数,参数类型定义详见{@link native_avcodec_base.h}。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param format 指向OH_AVFormat实例的指针。
|
||||
* @param key 写入数据的键。
|
||||
* @param value 写入数据的值。
|
||||
* @return 返回值为true表示成功,为false表示失败。\n
|
||||
* 可能的失败原因:\n
|
||||
* 1. 输入format为空指针。\n
|
||||
* 2. 输入format参数结构校验失败。\n
|
||||
* 3. 输入key为空指针。\n
|
||||
* 4. 设置的key对应的value类型错误。
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
bool OH_AVFormat_SetDoubleValue(struct OH_AVFormat *format, const char *key, double value);
|
||||
|
||||
/**
|
||||
* @brief 对OH_AVFormat的[key](capi-codecbase.md#媒体数据键值对)赋string类型的值。
|
||||
* 该接口仅能设置string类型的参数,参数类型定义详见{@link native_avcodec_base.h}。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param format 指向OH_AVFormat实例的指针。
|
||||
* @param key 写入数据的键。
|
||||
* @param value 写入字符串数据(使用建议:设置字符长度不超过256字节)。
|
||||
* @return 返回值为true表示成功,为false表示失败。\n
|
||||
* 可能的失败原因:\n
|
||||
* 1. 输入format为空指针。\n
|
||||
* 2. 输入format参数结构校验失败。\n
|
||||
* 3. 输入key为空指针。\n
|
||||
* 4. 输入value为空指针。\n
|
||||
* 5. 设置的key对应的value类型错误。
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
bool OH_AVFormat_SetStringValue(struct OH_AVFormat *format, const char *key, const char *value);
|
||||
|
||||
/**
|
||||
* @brief 将指定长度的数据块写入OH_AVFormat。
|
||||
* 该接口仅能设置buffer类型的参数,参数类型定义详见{@link native_avcodec_base.h}。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param format 指向OH_AVFormat实例的指针。
|
||||
* @param key 写入数据的键。
|
||||
* @param addr 写入数据的地址,生命周期由开发者管理。
|
||||
* @param size 写入数据的长度,范围为(0, 1]MB。
|
||||
* @return 返回值为true表示成功,为false表示失败。\n
|
||||
* 可能的失败原因:\n
|
||||
* 1. 输入format为空指针。\n
|
||||
* 2. 输入format参数结构校验失败。\n
|
||||
* 3. 输入key为空指针。\n
|
||||
* 4. 输入addr为空指针。\n
|
||||
* 5. size为0或超过限制1MB。\n
|
||||
* 6. 设置的key对应的value类型错误。
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
bool OH_AVFormat_SetBuffer(struct OH_AVFormat *format, const char *key, const uint8_t *addr, size_t size);
|
||||
|
||||
/**
|
||||
* @brief 从OH_AVFormat的[key](capi-codecbase.md#媒体数据键值对)获取int类型的值。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param format 指向OH_AVFormat实例的指针。
|
||||
* @param key 读取数据的键。
|
||||
* @param out 读取数据的值。
|
||||
* @return 返回值为true表示成功,为false表示失败。\n
|
||||
* 可能的失败原因:\n
|
||||
* 1. 输入format为空指针。\n
|
||||
* 2. 输入format参数结构校验失败。\n
|
||||
* 3. 输入key为空指针。\n
|
||||
* 4. 输入out为空指针。\n
|
||||
* 5. 获取的key不存在或者未设置。
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
bool OH_AVFormat_GetIntValue(struct OH_AVFormat *format, const char *key, int32_t *out);
|
||||
|
||||
/**
|
||||
* @brief 使用key从OH_AVFormat中获取unsigned int类型的值。
|
||||
* @param format 指向OH_AVFormat实例的指针。
|
||||
* @param key 读取数据的键。
|
||||
* @param out 读取数据的值。
|
||||
* @return 返回值为true表示成功,为false表示失败。\n
|
||||
* 可能的失败原因:\n
|
||||
* 1. 输入format为空指针。\n
|
||||
* 2. 输入format参数结构校验失败。\n
|
||||
* 3. 输入key为空指针。\n
|
||||
* 4. 输入out为空指针。
|
||||
* @since 23
|
||||
*/
|
||||
bool OH_AVFormat_GetUintValue(struct OH_AVFormat *format, const char *key, uint32_t *out);
|
||||
|
||||
/**
|
||||
* @brief 从OH_AVFormat的[key](capi-codecbase.md#媒体数据键值对)获取long类型的值。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param format 指向OH_AVFormat实例的指针。
|
||||
* @param key 读取数据的键。
|
||||
* @param out 读取数据的值。
|
||||
* @return 返回值为true表示成功,为false表示失败。\n
|
||||
* 可能的失败原因:\n
|
||||
* 1. 输入format为空指针。\n
|
||||
* 2. 输入format参数结构校验失败。\n
|
||||
* 3. 输入key为空指针。\n
|
||||
* 4. 输入out为空指针。\n
|
||||
* 5. 获取的key不存在或者未设置。
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
bool OH_AVFormat_GetLongValue(struct OH_AVFormat *format, const char *key, int64_t *out);
|
||||
|
||||
/**
|
||||
* @brief 从OH_AVFormat的[key](capi-codecbase.md#媒体数据键值对)获取float类型的值。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param format 指向OH_AVFormat实例的指针。
|
||||
* @param key 读取数据的键。
|
||||
* @param out 读取数据的值。
|
||||
* @return 返回值为true表示成功,为false表示失败。\n
|
||||
* 可能的失败原因:\n
|
||||
* 1. 输入format为空指针。\n
|
||||
* 2. 输入format参数结构校验失败。\n
|
||||
* 3. 输入key为空指针。\n
|
||||
* 4. 输入out为空指针。\n
|
||||
* 5. 获取的key不存在或者未设置。
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
bool OH_AVFormat_GetFloatValue(struct OH_AVFormat *format, const char *key, float *out);
|
||||
|
||||
/**
|
||||
* @brief 从OH_AVFormat的[key](capi-codecbase.md#媒体数据键值对)获取double类型的值。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param format 指向OH_AVFormat实例的指针。
|
||||
* @param key 读取数据的键。
|
||||
* @param out 读取数据的值。
|
||||
* @return 返回值为true表示成功,为false表示失败。\n
|
||||
* 可能的失败原因:\n
|
||||
* 1. 输入format为空指针。\n
|
||||
* 2. 输入format参数结构校验失败。\n
|
||||
* 3. 输入key为空指针。\n
|
||||
* 4. 输入out为空指针。\n
|
||||
* 5. 获取的key不存在或者未设置。
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
bool OH_AVFormat_GetDoubleValue(struct OH_AVFormat *format, const char *key, double *out);
|
||||
|
||||
/**
|
||||
* @brief 从OH_AVFormat的[key](capi-codecbase.md#媒体数据键值对)获取string类型的值。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param format 指向OH_AVFormat实例的指针。
|
||||
* @param key 读取数据的键。
|
||||
* @param out 读取string指针,out数据的生命周期与format内string对应,如果开发者需要长时间保持它,必须进行拷贝内存。out最大输出字符串长度为256字节,如果长度超过256字节,会报false。
|
||||
* @return 返回值为true表示成功,为false表示失败。\n
|
||||
* 可能的失败原因:\n
|
||||
* 1. 输入format为空指针。\n
|
||||
* 2. 输入format参数结构校验失败。\n
|
||||
* 3. 输入key为空指针。\n
|
||||
* 4. 输入out为空指针。\n
|
||||
* 5. malloc出的out字符串资源不足。\n
|
||||
* 6. 获取的key不存在或者未设置。\n
|
||||
* 7. 输出out的长度超过256字节。
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
bool OH_AVFormat_GetStringValue(struct OH_AVFormat *format, const char *key, const char **out);
|
||||
|
||||
/**
|
||||
* @brief 从OH_AVFormat中读取指定长度的数据块。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param format 指向OH_AVFormat实例的指针。
|
||||
* @param key 要读取数据的键。
|
||||
* @param addr 生命周期与format相同,与format一同销毁。如果开发者需要长时间保持它,必须进行内存拷贝。
|
||||
* @param size 读到数据的长度。
|
||||
* @return 返回值为true表示成功,为false表示失败。
|
||||
* 可能的失败原因:\n
|
||||
* 1. 输入format为空指针。\n
|
||||
* 2. 输入format参数结构校验失败。\n
|
||||
* 3. 输入key为空指针。\n
|
||||
* 4. 输入addr为空指针。\n
|
||||
* 5. 输入size为空指针。\n
|
||||
* 6. 获取的key不存在或者未设置。
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
bool OH_AVFormat_GetBuffer(struct OH_AVFormat *format, const char *key, uint8_t **addr, size_t *size);
|
||||
|
||||
/**
|
||||
* @brief 从OH_AVFormat中读取一个int32_t数据的数组。\n
|
||||
*
|
||||
* 需要注意的是,获取的buffer生命周期与OH_AVFormat对象绑定,当format销毁时自动失效。\n
|
||||
* 如果开发者需要长时间保持绑定,应用程序必须将数据显式复制到新分配的内存。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param format 指向OH_AVFormat实例的指针。
|
||||
* @param key 要读取数据的键。
|
||||
* @param addr 保存数据内存的指针。
|
||||
* @param size 读到数据的元素数量。
|
||||
* @return 返回值为true表示成功,为false表示失败。\n
|
||||
* 可能的失败原因:
|
||||
* 1. 输入format为空指针。\n
|
||||
* 2. 输入format参数结构校验失败。\n
|
||||
* 3. 输入key为空指针。\n
|
||||
* 4. 输入addr为空指针。\n
|
||||
* 5. 输入size为空指针。
|
||||
* @since 20
|
||||
*/
|
||||
bool OH_AVFormat_GetIntBuffer(struct OH_AVFormat *format, const char *key, int32_t **addr, size_t *size);
|
||||
|
||||
/**
|
||||
* @brief 返回OH_AVFormat中包含的key-value组成的字符串。最大可返回1024字节的字符串,销毁format时释放字符串指针。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param format 指向OH_AVFormat实例的指针。
|
||||
* @return 如果创建成功,返回一个由key-value组成的字符串,如果失败,则返回NULL。
|
||||
* 可能的失败原因:\n
|
||||
* 1. 传入的format为NULL。\n
|
||||
* 2. 系统资源不足。
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
const char *OH_AVFormat_DumpInfo(struct OH_AVFormat *format);
|
||||
|
||||
/**
|
||||
* @brief 将指定长度int32_t类型的数据块写入OH_AVFormat。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param format 指向OH_AVFormat实例的指针。
|
||||
* @param key 写入数据的键。
|
||||
* @param addr 写入数据的地址,生命周期由开发者管理。
|
||||
* @param size 写入数据的长度(以元素为单位,不是字节数)。
|
||||
* @return 返回true表示成功,返回false表示失败。\n
|
||||
* 可能的失败原因:\n
|
||||
* 1. 输入format为空指针。\n
|
||||
* 2. 输入format参数结构校验失败。\n
|
||||
* 3. 输入key为空指针。\n
|
||||
* 4. 输入addr为空指针。\n
|
||||
* 5. 输入size为0。
|
||||
* @since 20
|
||||
*/
|
||||
bool OH_AVFormat_SetIntBuffer(struct OH_AVFormat *format, const char *key, const int32_t *addr, size_t size);
|
||||
|
||||
/**
|
||||
* @brief 获取OH_AVFormat中包含的键总数。
|
||||
* @param format 指向一个OH_AVFormat实例的指针。
|
||||
* @return 成功时返回键的数量;失败时返回 0。
|
||||
* @details 可能的失败原因:\n
|
||||
* 1. 输入的format为空指针;\n
|
||||
* 2. 系统资源不足。
|
||||
* @since 23
|
||||
*/
|
||||
uint32_t OH_AVFormat_GetKeyCount(OH_AVFormat *format);
|
||||
|
||||
/**
|
||||
* @brief 通过索引从OH_AVFormat中获取键名字符串。
|
||||
* @param format 指向一个OH_AVFormat实例的指针。
|
||||
* @param index 要查询键的索引值,取值范围为[0, OH_AVFormat_GetKeyCount(format))。
|
||||
* @param key 用于接收键名字符串的输出指针;该字符串的生命周期与format绑定。
|
||||
* @return 成功时返回true,失败时返回false。
|
||||
* @details 可能的失败原因:\n
|
||||
* 1. 输入的format为空指针;\n
|
||||
* 2. index超出有效范围;\n
|
||||
* 3. key为空指针;\n
|
||||
* 4. 系统资源不足。
|
||||
* @since 23
|
||||
*/
|
||||
bool OH_AVFormat_GetKey(OH_AVFormat *format, uint32_t index, const char **key);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // NATIVE_AVFORMAT_H
|
||||
|
||||
/** @} */
|
||||
|
||||
@@ -0,0 +1,123 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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 Core
|
||||
* @{
|
||||
*
|
||||
* @brief Core模块提供用于媒体系统的基础骨干能力,包含内存、错误码、媒体数据结构等相关函数。
|
||||
*
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @since 9
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @file native_avmemory.h
|
||||
*
|
||||
* @brief 声明了媒体数据结构AVMemory的定义。
|
||||
*
|
||||
* @kit AVCodecKit
|
||||
* @include <multimedia/player_framework/native_avmemory.h>
|
||||
* @library libnative_media_core.so
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @since 9
|
||||
*/
|
||||
|
||||
#ifndef NATIVE_AVMEMORY_H
|
||||
#define NATIVE_AVMEMORY_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include "native_averrors.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/**
|
||||
* @brief 为音视频内存接口定义native层对象。
|
||||
* @since 9
|
||||
*/
|
||||
typedef struct OH_AVMemory OH_AVMemory;
|
||||
|
||||
/**
|
||||
* @brief 创建OH_AVMemory实例的指针。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param size 创建内存的大小,单位字节。
|
||||
* @return 如果创建成功,返回OH_AVMemory实例的指针,如果失败,返回NULL。
|
||||
* 使用结束后需要通过OH_AVMemory_Destroy释放内存。\n
|
||||
* 可能的失败原因:\n
|
||||
* 1. size <= 0。\n
|
||||
* 2. 创建OH_AVMemory失败。\n
|
||||
* 3.OH_AVMemory内存分配失败。
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AVBuffer_Create}
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVMemory *OH_AVMemory_Create(int32_t size);
|
||||
|
||||
/**
|
||||
* @brief 获取内存虚拟地址。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param mem 指向OH_AVMemory实例的指针。
|
||||
* @return 如果内存有效,返回内存的虚拟地址,如果内存无效,返回NULL。\n
|
||||
* 可能的失败原因:\n
|
||||
* 1. 输入mem为空指针。\n
|
||||
* 2. 输入mem参数结构校验失败。\n
|
||||
* 3. 输入mem中内存为空指针。
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AVBuffer_GetAddr}
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
uint8_t *OH_AVMemory_GetAddr(struct OH_AVMemory *mem);
|
||||
|
||||
/**
|
||||
* @brief 获取内存长度。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param mem 指向OH_AVMemory实例的指针。
|
||||
* @return 如果内存有效,返回内存长度,如果内存无效,返回-1。\n
|
||||
* 可能的失败原因:\n
|
||||
* 1. 输入mem为空指针。\n
|
||||
* 2. 输入mem参数结构校验失败。\n
|
||||
* 3.输入mem中内存为空指针。
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AVBuffer_GetCapacity}
|
||||
* @since 9
|
||||
* @version 1.0
|
||||
*/
|
||||
int32_t OH_AVMemory_GetSize(struct OH_AVMemory *mem);
|
||||
|
||||
/**
|
||||
* @brief 释放OH_AVMemory实例指针的资源。
|
||||
* @syscap SystemCapability.Multimedia.Media.Core
|
||||
* @param mem 指向OH_AVMemory实例的指针。
|
||||
* @return AV_ERR_OK:释放成功。\n
|
||||
* AV_ERR_INVALID_VAL:\n
|
||||
* 1. 输入mem为空指针。\n
|
||||
* 2. 输入mem参数结构校验失败。\n
|
||||
* 3. 输入mem不是开发者创建的。
|
||||
* @deprecated since 11
|
||||
* @useinstead {@link OH_AVBuffer_Destroy}
|
||||
* @since 10
|
||||
*/
|
||||
OH_AVErrCode OH_AVMemory_Destroy(struct OH_AVMemory *mem);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // NATIVE_AVMEMORY_H
|
||||
|
||||
/** @} */
|
||||
Reference in New Issue
Block a user