From 05e5b78cf3f5df9128941350a18a246e90a3d867 Mon Sep 17 00:00:00 2001 From: dongyu_dy Date: Wed, 20 Mar 2024 11:43:17 +0800 Subject: [PATCH 1/5] add player framework ndk Signed-off-by: dongyu_dy --- multimedia/player_framework/avplayer.h | 70 +++++++++++++++++++++ multimedia/player_framework/avplayer_base.h | 45 +++++++++++++ 2 files changed, 115 insertions(+) diff --git a/multimedia/player_framework/avplayer.h b/multimedia/player_framework/avplayer.h index e8db017f0..368e1a4ba 100644 --- a/multimedia/player_framework/avplayer.h +++ b/multimedia/player_framework/avplayer.h @@ -83,6 +83,32 @@ OH_AVErrCode OH_AVPlayer_SetURLSource(OH_AVPlayer *player, const char *url); */ OH_AVErrCode OH_AVPlayer_SetFDSource(OH_AVPlayer *player, int32_t fd, int64_t offset, int64_t size); +/** + * @brief Adds a subtitle source for the player. + * @syscap SystemCapability.Multimedia.Media.AVPlayer + * @param player Pointer to an OH_AVPlayer instance + * @param url Indicates the subtitle source. + * @return Returns {@link AV_ERR_OK} if the url is set successfully; returns an error code defined + * in {@link native_averrors.h} otherwise. + * @since 12 + * @version 1.0 + */ +OH_AVErrCode OH_AVPlayer_AddSubtitleUrlSource(OH_AVPlayer *player, const char *url); + +/** + * @brief Adds a subtitle file descriptor source for the player. + * @syscap SystemCapability.Multimedia.Media.AVPlayer + * @param player Pointer to an OH_AVPlayer instance + * @param fd Indicates the file descriptor of subtitle source. + * @param offset Indicates the offset of subtitle source in file descriptor. + * @param size Indicates the size of subtitle source. + * @return Returns {@link AV_ERR_OK} if the fd source is set successfully; returns an error code defined + * in {@link native_averrors.h} otherwise. + * @since 12 + * @version 1.0 + */ +OH_AVErrCode OH_AVPlayer_AddSubtitleFdSource(OH_AVPlayer *player, int32_t fd, int64_t offset, int64_t size); + /** * @brief Prepares the playback environment and buffers media data asynchronous. * @@ -97,6 +123,21 @@ OH_AVErrCode OH_AVPlayer_SetFDSource(OH_AVPlayer *player, int32_t fd, int64_t of */ OH_AVErrCode OH_AVPlayer_Prepare(OH_AVPlayer *player); +/** + * @brief Prepares the playback environment and buffers media data asynchronous, at specific timestamp. + * + * This function must be called after {@link SetSource}. + * + * @syscap SystemCapability.Multimedia.Media.AVPlayer + * @param player Pointer to an OH_AVPlayer instance. + * @param mSeconds Timestamp to be prepared at. + * @return Returns {@link AV_ERR_OK} if {@link Prepare} is successfully added to the task queue; + * returns an error code defined in {@link native_averrors.h} otherwise. + * @since 12 + * @version 1.0 + */ +OH_AVErrCode OH_AVPlayer_PrepareAt(OH_AVPlayer *player, int32_t mSeconds); + /** * @brief Start playback. * @@ -427,6 +468,35 @@ OH_AVErrCode OH_AVPlayer_DeselectTrack(OH_AVPlayer *player, int32_t index); */ OH_AVErrCode OH_AVPlayer_GetCurrentTrack(OH_AVPlayer *player, int32_t trackType, int32_t *index); +/** + * @brief Obtain all track descriptions of current playback. Track index can be extracted with + * key {@link OH_MD_KEY_TRACK_ID} from each track description. + * + * Please get it in the prepared/playing/paused/completed state. + * + * @syscap SystemCapability.Multimedia.Media.AVPlayer + * @param player Pointer to an OH_AVPlayer instance. + * @param trackDescriptions A list of track descriptions returned by player server. + * @param trackCount Track count returned by player server. + * @return Returns {@link AV_ERR_OK} if the track index is get; returns an error code defined + * in {@link native_averrors.h} otherwise. + * @since 12 + * @version 1.0 + */ +OH_AVErrCode OH_AVPlayer_GetTrackDescriptions(OH_AVPlayer *player, OH_AVFormat **trackDescriptions, int32_t *trackCount); + +/** + * @brief Method to set subtitle callback. + * @syscap SystemCapability.Multimedia.Media.AVPlayer + * @param player Pointer to an OH_AVPlayer instance + * @param callback Pointer to a subtitle callback function. + * @param userData User specific data. + * @return Returns {@link AV_ERR_OK} if the playercallback is set; returns an error code defined + * in {@link native_averrors.h} otherwise. + * @since 12 + * @version 1.0 + */ +OH_AVErrCode OH_AVPlayer_SetSubtitleCallback(OH_AVPlayer *player, OH_AVPlayerOnSubtitleUpdate callback, void *userData); #ifdef __cplusplus } diff --git a/multimedia/player_framework/avplayer_base.h b/multimedia/player_framework/avplayer_base.h index 1283b9204..3d37d9c84 100644 --- a/multimedia/player_framework/avplayer_base.h +++ b/multimedia/player_framework/avplayer_base.h @@ -45,6 +45,13 @@ extern "C" { typedef struct OH_AVPlayer OH_AVPlayer; +/** + * @brief Provides key to get track ID. + * @syscap SystemCapability.Multimedia.Media.AVPlayer + * @since 12 + */ +extern const char *OH_MD_KEY_TRACK_ID; + /** * @brief Player States * @syscap SystemCapability.Multimedia.Media.AVPlayer @@ -83,6 +90,12 @@ typedef enum AVPlayerSeekMode { AV_SEEK_NEXT_SYNC = 0, /* sync to keyframes before the time point. */ AV_SEEK_PREVIOUS_SYNC, + /** + * @brief Sync to frames closest to the time point. + * @syscap SystemCapability.Multimedia.Media.AVPlayer + * @since 12 + */ + AV_SEEK_CLOSEST = 2, } AVPlayerSeekMode; /** @@ -102,6 +115,24 @@ typedef enum AVPlaybackSpeed { AV_SPEED_FORWARD_1_75_X, /* Video playback at 2.0x normal speed */ AV_SPEED_FORWARD_2_00_X, + /** + * @brief Video playback at 0.5x normal speed. + * @syscap SystemCapability.Multimedia.Media.AVPlayer + * @since 12 + */ + AV_SPEED_FORWARD_0_50_X, + /** + * @brief Video playback at 1.5x normal speed. + * @syscap SystemCapability.Multimedia.Media.AVPlayer + * @since 12 + */ + AV_SPEED_FORWARD_1_50_X, + /** + * @brief Video playback at 3.0x normal speed. + * @syscap SystemCapability.Multimedia.Media.AVPlayer + * @since 12 + */ + AV_SPEED_FORWARD_3_00_X, } AVPlaybackSpeed; /** @@ -175,6 +206,20 @@ typedef void (*OH_AVPlayerOnInfo)(OH_AVPlayer *player, AVPlayerOnInfoType type, */ typedef void (*OH_AVPlayerOnError)(OH_AVPlayer *player, int32_t errorCode, const char *errorMsg); +/** + * @brief Called when subtitle data are updated. + * @syscap SystemCapability.Multimedia.Media.AVPlayer + * @param player The pointer to an OH_AVPlayer instance. + * @param text Current subtitle data. + * @param startTime Start time of current subtitle data. + * @param duration Duration of current subtitle data. + * @param userData User specific data. + * @since 12 + * @version 1.0 + */ +typedef void (*OH_AVPlayerOnSubtitleUpdate)(OH_AVPlayer *player, const char *text, int32_t startTime, + int32_t duration, void *userData); + /** * @brief A collection of all callback function pointers in OH_AVPlayer. Register an instance of this * structure to the OH_AVPlayer instance, and process the information reported through the callback to ensure the -- Gitee From e3e2a98768db5c0690f4d0908d7353f1f54db972 Mon Sep 17 00:00:00 2001 From: dongyu_dy Date: Wed, 20 Mar 2024 14:20:00 +0800 Subject: [PATCH 2/5] update player framework ndk Signed-off-by: dongyu_dy --- multimedia/player_framework/avplayer.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/multimedia/player_framework/avplayer.h b/multimedia/player_framework/avplayer.h index 368e1a4ba..838b4d5fa 100644 --- a/multimedia/player_framework/avplayer.h +++ b/multimedia/player_framework/avplayer.h @@ -476,14 +476,14 @@ OH_AVErrCode OH_AVPlayer_GetCurrentTrack(OH_AVPlayer *player, int32_t trackType, * * @syscap SystemCapability.Multimedia.Media.AVPlayer * @param player Pointer to an OH_AVPlayer instance. - * @param trackDescriptions A list of track descriptions returned by player server. + * @param trackDescriptions Pointer to a list of track descriptions returned by player server. * @param trackCount Track count returned by player server. * @return Returns {@link AV_ERR_OK} if the track index is get; returns an error code defined * in {@link native_averrors.h} otherwise. * @since 12 * @version 1.0 */ -OH_AVErrCode OH_AVPlayer_GetTrackDescriptions(OH_AVPlayer *player, OH_AVFormat **trackDescriptions, int32_t *trackCount); +OH_AVErrCode OH_AVPlayer_GetTrackDescriptions(OH_AVPlayer *player, OH_AVFormat ***trackDescriptions, int32_t *trackCount); /** * @brief Method to set subtitle callback. -- Gitee From fa3a2b407954bc67bd5de6afc347c1f45f142308 Mon Sep 17 00:00:00 2001 From: dongyu_dy Date: Wed, 20 Mar 2024 19:22:35 +0800 Subject: [PATCH 3/5] add data source interface Signed-off-by: dongyu_dy --- multimedia/av_codec/native_avsource.h | 40 +++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/multimedia/av_codec/native_avsource.h b/multimedia/av_codec/native_avsource.h index 5a9e71e0c..490ab045f 100644 --- a/multimedia/av_codec/native_avsource.h +++ b/multimedia/av_codec/native_avsource.h @@ -27,6 +27,46 @@ extern "C" { typedef struct OH_AVSource OH_AVSource; +/** + * @brief The function pointer will be called to get sequenced media data. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param data The buffer to fill. + * @param length Length of data to read. + * @param offset Start offset to read. + * @return Returns actual length of data read to the buffer. + * @since 12 +*/ +typedef int32_t (*OH_AVDataSourceReadAt)(OH_AVBuffer *data, uint32_t length, int64_t offset); + +/** + * @brief User customized data source. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 12 +*/ +typedef struct OH_AVDataSource { + /** + * @brief Total size of the data source. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 12 + */ + int64_t size; + /** + * @brief Data callback of the data source. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 12 + */ + OH_AVDataSourceReadAt readAt; +} OH_AVDataSource; + +/** + * @brief Creates an OH_AVSource instance that models the media with data source. + * @syscap SystemCapability.Multimedia.Media.Spliter + * @param dataSource User customized media resource. + * @return Returns a pointer to an OH_AVSource instance + * @since 12 +*/ +OH_AVSource *OH_AVSource_CreateWithDataSource(OH_AVDataSource *dataSource); + /** * @brief Creates an OH_AVSource instance that models the media at the URI. * @syscap SystemCapability.Multimedia.Media.Spliter -- Gitee From 742d2a385ff64afc94f71ea0a9ec884d9b0f36c3 Mon Sep 17 00:00:00 2001 From: dongyu_dy Date: Wed, 20 Mar 2024 20:32:01 +0800 Subject: [PATCH 4/5] update Signed-off-by: dongyu_dy --- multimedia/av_codec/native_avsource.h | 4 +- multimedia/player_framework/avplayer.h | 55 --------------------- multimedia/player_framework/avplayer_base.h | 21 -------- 3 files changed, 2 insertions(+), 78 deletions(-) diff --git a/multimedia/av_codec/native_avsource.h b/multimedia/av_codec/native_avsource.h index 490ab045f..11dcfd9f9 100644 --- a/multimedia/av_codec/native_avsource.h +++ b/multimedia/av_codec/native_avsource.h @@ -33,10 +33,10 @@ typedef struct OH_AVSource OH_AVSource; * @param data The buffer to fill. * @param length Length of data to read. * @param offset Start offset to read. - * @return Returns actual length of data read to the buffer. + * @return Actual length of data read to the buffer. * @since 12 */ -typedef int32_t (*OH_AVDataSourceReadAt)(OH_AVBuffer *data, uint32_t length, int64_t offset); +typedef int32_t (*OH_AVDataSourceReadAt)(OH_AVBuffer *data, int32_t length, int64_t offset); /** * @brief User customized data source. diff --git a/multimedia/player_framework/avplayer.h b/multimedia/player_framework/avplayer.h index 838b4d5fa..f6da162bd 100644 --- a/multimedia/player_framework/avplayer.h +++ b/multimedia/player_framework/avplayer.h @@ -83,32 +83,6 @@ OH_AVErrCode OH_AVPlayer_SetURLSource(OH_AVPlayer *player, const char *url); */ OH_AVErrCode OH_AVPlayer_SetFDSource(OH_AVPlayer *player, int32_t fd, int64_t offset, int64_t size); -/** - * @brief Adds a subtitle source for the player. - * @syscap SystemCapability.Multimedia.Media.AVPlayer - * @param player Pointer to an OH_AVPlayer instance - * @param url Indicates the subtitle source. - * @return Returns {@link AV_ERR_OK} if the url is set successfully; returns an error code defined - * in {@link native_averrors.h} otherwise. - * @since 12 - * @version 1.0 - */ -OH_AVErrCode OH_AVPlayer_AddSubtitleUrlSource(OH_AVPlayer *player, const char *url); - -/** - * @brief Adds a subtitle file descriptor source for the player. - * @syscap SystemCapability.Multimedia.Media.AVPlayer - * @param player Pointer to an OH_AVPlayer instance - * @param fd Indicates the file descriptor of subtitle source. - * @param offset Indicates the offset of subtitle source in file descriptor. - * @param size Indicates the size of subtitle source. - * @return Returns {@link AV_ERR_OK} if the fd source is set successfully; returns an error code defined - * in {@link native_averrors.h} otherwise. - * @since 12 - * @version 1.0 - */ -OH_AVErrCode OH_AVPlayer_AddSubtitleFdSource(OH_AVPlayer *player, int32_t fd, int64_t offset, int64_t size); - /** * @brief Prepares the playback environment and buffers media data asynchronous. * @@ -468,35 +442,6 @@ OH_AVErrCode OH_AVPlayer_DeselectTrack(OH_AVPlayer *player, int32_t index); */ OH_AVErrCode OH_AVPlayer_GetCurrentTrack(OH_AVPlayer *player, int32_t trackType, int32_t *index); -/** - * @brief Obtain all track descriptions of current playback. Track index can be extracted with - * key {@link OH_MD_KEY_TRACK_ID} from each track description. - * - * Please get it in the prepared/playing/paused/completed state. - * - * @syscap SystemCapability.Multimedia.Media.AVPlayer - * @param player Pointer to an OH_AVPlayer instance. - * @param trackDescriptions Pointer to a list of track descriptions returned by player server. - * @param trackCount Track count returned by player server. - * @return Returns {@link AV_ERR_OK} if the track index is get; returns an error code defined - * in {@link native_averrors.h} otherwise. - * @since 12 - * @version 1.0 - */ -OH_AVErrCode OH_AVPlayer_GetTrackDescriptions(OH_AVPlayer *player, OH_AVFormat ***trackDescriptions, int32_t *trackCount); - -/** - * @brief Method to set subtitle callback. - * @syscap SystemCapability.Multimedia.Media.AVPlayer - * @param player Pointer to an OH_AVPlayer instance - * @param callback Pointer to a subtitle callback function. - * @param userData User specific data. - * @return Returns {@link AV_ERR_OK} if the playercallback is set; returns an error code defined - * in {@link native_averrors.h} otherwise. - * @since 12 - * @version 1.0 - */ -OH_AVErrCode OH_AVPlayer_SetSubtitleCallback(OH_AVPlayer *player, OH_AVPlayerOnSubtitleUpdate callback, void *userData); #ifdef __cplusplus } diff --git a/multimedia/player_framework/avplayer_base.h b/multimedia/player_framework/avplayer_base.h index 3d37d9c84..99490ae9c 100644 --- a/multimedia/player_framework/avplayer_base.h +++ b/multimedia/player_framework/avplayer_base.h @@ -45,13 +45,6 @@ extern "C" { typedef struct OH_AVPlayer OH_AVPlayer; -/** - * @brief Provides key to get track ID. - * @syscap SystemCapability.Multimedia.Media.AVPlayer - * @since 12 - */ -extern const char *OH_MD_KEY_TRACK_ID; - /** * @brief Player States * @syscap SystemCapability.Multimedia.Media.AVPlayer @@ -206,20 +199,6 @@ typedef void (*OH_AVPlayerOnInfo)(OH_AVPlayer *player, AVPlayerOnInfoType type, */ typedef void (*OH_AVPlayerOnError)(OH_AVPlayer *player, int32_t errorCode, const char *errorMsg); -/** - * @brief Called when subtitle data are updated. - * @syscap SystemCapability.Multimedia.Media.AVPlayer - * @param player The pointer to an OH_AVPlayer instance. - * @param text Current subtitle data. - * @param startTime Start time of current subtitle data. - * @param duration Duration of current subtitle data. - * @param userData User specific data. - * @since 12 - * @version 1.0 - */ -typedef void (*OH_AVPlayerOnSubtitleUpdate)(OH_AVPlayer *player, const char *text, int32_t startTime, - int32_t duration, void *userData); - /** * @brief A collection of all callback function pointers in OH_AVPlayer. Register an instance of this * structure to the OH_AVPlayer instance, and process the information reported through the callback to ensure the -- Gitee From 315f3834779f72a313163c624bdbfd92e0fa9b66 Mon Sep 17 00:00:00 2001 From: dongyu_dy Date: Thu, 21 Mar 2024 14:21:13 +0800 Subject: [PATCH 5/5] update data source api position Signed-off-by: dongyu_dy --- multimedia/av_codec/native_avcodec_base.h | 31 +++++++++++++++++++++++ multimedia/av_codec/native_avsource.h | 31 ----------------------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/multimedia/av_codec/native_avcodec_base.h b/multimedia/av_codec/native_avcodec_base.h index b26dc2454..d084e00ba 100644 --- a/multimedia/av_codec/native_avcodec_base.h +++ b/multimedia/av_codec/native_avcodec_base.h @@ -150,6 +150,37 @@ typedef struct OH_AVCodecCallback { OH_AVCodecOnNewOutputBuffer onNewOutputBuffer; } OH_AVCodecCallback; +/** + * @brief The function pointer will be called to get sequenced media data. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @param data The buffer to fill. + * @param length Length of data to read. + * @param offset Start offset to read. + * @return Actual length of data read to the buffer. + * @since 12 +*/ +typedef int32_t (*OH_AVDataSourceReadAt)(OH_AVBuffer *data, int32_t length, int64_t offset); + +/** + * @brief User customized data source. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 12 +*/ +typedef struct OH_AVDataSource { + /** + * @brief Total size of the data source. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 12 + */ + int64_t size; + /** + * @brief Data callback of the data source. + * @syscap SystemCapability.Multimedia.Media.CodecBase + * @since 12 + */ + OH_AVDataSourceReadAt readAt; +} OH_AVDataSource; + /** * @brief Enumerates the MIME types of audio and video codecs * @syscap SystemCapability.Multimedia.Media.CodecBase diff --git a/multimedia/av_codec/native_avsource.h b/multimedia/av_codec/native_avsource.h index 11dcfd9f9..a8dca0837 100644 --- a/multimedia/av_codec/native_avsource.h +++ b/multimedia/av_codec/native_avsource.h @@ -27,37 +27,6 @@ extern "C" { typedef struct OH_AVSource OH_AVSource; -/** - * @brief The function pointer will be called to get sequenced media data. - * @syscap SystemCapability.Multimedia.Media.CodecBase - * @param data The buffer to fill. - * @param length Length of data to read. - * @param offset Start offset to read. - * @return Actual length of data read to the buffer. - * @since 12 -*/ -typedef int32_t (*OH_AVDataSourceReadAt)(OH_AVBuffer *data, int32_t length, int64_t offset); - -/** - * @brief User customized data source. - * @syscap SystemCapability.Multimedia.Media.CodecBase - * @since 12 -*/ -typedef struct OH_AVDataSource { - /** - * @brief Total size of the data source. - * @syscap SystemCapability.Multimedia.Media.CodecBase - * @since 12 - */ - int64_t size; - /** - * @brief Data callback of the data source. - * @syscap SystemCapability.Multimedia.Media.CodecBase - * @since 12 - */ - OH_AVDataSourceReadAt readAt; -} OH_AVDataSource; - /** * @brief Creates an OH_AVSource instance that models the media with data source. * @syscap SystemCapability.Multimedia.Media.Spliter -- Gitee