diff --git a/multimedia/av_codec/avsource/libnative_media_avsource.ndk.json b/multimedia/av_codec/avsource/libnative_media_avsource.ndk.json index 759d6231b53d524399f267a0c0eb8ed218710359..ab7e2240d01653c78cb9ad545860cd8e08870372 100644 --- a/multimedia/av_codec/avsource/libnative_media_avsource.ndk.json +++ b/multimedia/av_codec/avsource/libnative_media_avsource.ndk.json @@ -3,6 +3,10 @@ "first_introduced": "12", "name": "OH_AVSource_CreateWithDataSource" }, + { + "first_introduced": "20", + "name": "OH_AVSource_CreateWithDataSourceExt" + }, { "first_introduced": "10", "name": "OH_AVSource_CreateWithURI" diff --git a/multimedia/av_codec/native_avcodec_base.h b/multimedia/av_codec/native_avcodec_base.h index 67075d05f5650463704f7c7db7ff32423dcc0490..47f71c6a4b5db8dbf9d57564a7ca099a7862cbdd 100644 --- a/multimedia/av_codec/native_avcodec_base.h +++ b/multimedia/av_codec/native_avcodec_base.h @@ -212,6 +212,34 @@ typedef struct OH_AVDataSource { OH_AVDataSourceReadAt readAt; } OH_AVDataSource; +/** + * @brief the function pointer will be called to get sequence media data. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param data OH_AVBuffer buffer to fill + * @param length expected to read size; + * @param pos current read offset + * @param userData user-defined data + * @return Actual size of data read to the buffer. + * @since 20 + */ +typedef int32_t (*OH_AVDataSourceReadAtExt)(OH_AVBuffer *data, int32_t length, int64_t pos, void *userData); + +/** + * @brief User customized data source. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 20 + */ +typedef struct OH_AVDataSourceExt { + /** + * Total size of the data source. + */ + int64_t size; + /** + * Callback interface for reading data from datasource. + */ + OH_AVDataSourceReadAtExt readAt; +} OH_AVDataSourceExt; + /** * @brief Enumerates the mime types of video avc codec. * diff --git a/multimedia/av_codec/native_avsource.h b/multimedia/av_codec/native_avsource.h index f59fe1f2f4ff76e19c4901808f01da9841e8470b..b31f6fa0ee6607607934b5c4b82504821652621d 100644 --- a/multimedia/av_codec/native_avsource.h +++ b/multimedia/av_codec/native_avsource.h @@ -68,6 +68,22 @@ typedef struct OH_AVSource OH_AVSource; */ OH_AVSource *OH_AVSource_CreateWithDataSource(OH_AVDataSource *dataSource); +/** + * @brief Creates an OH_AVSource instance with dataSource and userData. + * @syscap SystemCapability.Multimedia.Media.Spliter + * @param dataSource A pointer to the data source structure, which can obtain the input data. + * @param userData A pointer to user-defined data. + * @return Returns a pointer to an OH_AVSource instance if the execution is successful, otherwise returns nullptr. + * Possible failure causes: + * 1. dataSource is nullptr. + * 2. dataSource->size == 0. + * 3. set data source failed. + * 4. out of memory. + * 5. demuxer engine is nullptr. + * @since 20 + */ +OH_AVSource *OH_AVSource_CreateWithDataSourceExt(OH_AVDataSourceExt *dataSource, void *userData); + /** * @brief Creates an OH_AVSource instance that models the media at the URI. * @syscap SystemCapability.Multimedia.Media.Spliter