middleware文件夹下services文件夹下media文件夹
authorluozheng <1732036298@qq.com>
Wed, 23 Jul 2025 06:50:21 +0000 (14:50 +0800)
committerluozheng <1732036298@qq.com>
Wed, 23 Jul 2025 06:50:21 +0000 (14:50 +0800)
38 files changed:
code/sdk/middleware/services/media/CMakeLists.txt
code/sdk/middleware/services/media/foundation/audio_capturer/interfaces/kits/audio_capturer_lite/recording_module.cpp
code/sdk/middleware/services/media/foundation/audio_capturer/interfaces/kits/audio_capturer_lite/recording_module.h
code/sdk/middleware/services/media/foundation/audiomanager/frameworks/audiomanager/cpp/audio_callback_dispatcher.cpp
code/sdk/middleware/services/media/foundation/audiomanager/frameworks/audioservice/src/policymanager/brandy/policy_default_config.h
code/sdk/middleware/services/media/foundation/audiomanager/frameworks/audioservice/src/policymanager/src/policy_manager.c
code/sdk/middleware/services/media/foundation/audiomanager/frameworks/audioservice/src/streammanager/src/track_handle.c
code/sdk/middleware/services/media/foundation/player/frameworks/player_impl.cpp
code/sdk/middleware/services/media/foundation/player/interfaces/kits/player_lite/js/builtin/include/audio_module.h
code/sdk/middleware/services/media/foundation/player/interfaces/kits/player_lite/js/builtin/include/audio_player.h
code/sdk/middleware/services/media/foundation/player/interfaces/kits/player_lite/js/builtin/src/audio_module.cpp
code/sdk/middleware/services/media/foundation/player/interfaces/kits/player_lite/js/builtin/src/audio_player.cpp
code/sdk/middleware/services/media/foundation/sample/wrapper/CMakeLists.txt
code/sdk/middleware/services/media/foundation/sample/wrapper/audio_capture_wrapper.cpp
code/sdk/middleware/services/media/foundation/sample/wrapper/audio_player_service.cpp
code/sdk/middleware/services/media/foundation/sample/wrapper/audio_player_service.h
code/sdk/middleware/services/media/foundation/sample/wrapper/player_sample_wrapper.cpp
code/sdk/middleware/services/media/foundation/utils/include/format.h
code/sdk/middleware/services/media/foundation/utils/src/format.cpp
code/sdk/middleware/services/media/hal/format/CMakeLists.txt
code/sdk/middleware/services/media/hal/format/plugins/raw_demuxer/raw_format.c
code/sdk/middleware/services/media/hal_release/CMakeLists.txt
code/sdk/middleware/services/media/hal_release/freertos/format/libs/normal/libhmf_demuxer.a
code/sdk/middleware/services/media/hal_release/freertos/format/libs/normal/libplugin_demuxer_hmf.a
code/sdk/middleware/services/media/hal_release/freertos/format/libs/normal/libplugin_demuxer_mjpeg.a
code/sdk/middleware/services/media/hal_release/freertos/format/libs/normal/libplugin_protocol_https.a
code/sdk/middleware/services/media/hal_release/liteos/format/libs/js/libhmf_demuxer.a [new file with mode: 0644]
code/sdk/middleware/services/media/hal_release/liteos/format/libs/js/libplugin_demuxer_hmf.a [new file with mode: 0644]
code/sdk/middleware/services/media/hal_release/liteos/format/libs/js/libplugin_demuxer_mjpeg.a [new file with mode: 0644]
code/sdk/middleware/services/media/hal_release/liteos/format/libs/js/libplugin_protocol_https.a [new file with mode: 0644]
code/sdk/middleware/services/media/hal_release/liteos/format/libs/mini/libhmf_demuxer.a
code/sdk/middleware/services/media/hal_release/liteos/format/libs/mini/libplugin_demuxer_hmf.a
code/sdk/middleware/services/media/hal_release/liteos/format/libs/mini/libplugin_demuxer_mjpeg.a
code/sdk/middleware/services/media/hal_release/liteos/format/libs/mini/libplugin_protocol_https.a
code/sdk/middleware/services/media/hal_release/liteos/format/libs/normal/libhmf_demuxer.a
code/sdk/middleware/services/media/hal_release/liteos/format/libs/normal/libplugin_demuxer_hmf.a
code/sdk/middleware/services/media/hal_release/liteos/format/libs/normal/libplugin_demuxer_mjpeg.a
code/sdk/middleware/services/media/hal_release/liteos/format/libs/normal/libplugin_protocol_https.a

index dc1e48a..c16d6a7 100644 (file)
@@ -20,7 +20,7 @@ if (RAM_COMPONENT_SET MATCHES "media")
     set(MODULE_NAME "media")
     set(AUTO_DEF_FILE_ID TRUE)
     add_subdirectory(foundation)
-    set(COMPONENT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/component)
+    set(COMPONENT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/component/hmf_demuxer)
     if (EXISTS ${COMPONENT_DIR})
         add_subdirectory(${COMPONENT_DIR})
     endif()
index cbe2111..d53c132 100644 (file)
@@ -428,7 +428,7 @@ JSIValue AudioCapturerModule::Start(const JSIValue thisVal, const JSIValue *args
     MEDIA_UNUSED(thisVal);\r
     MEDIA_UNUSED(args);\r
     MEDIA_UNUSED(argsSize);\r
-    const char *pars[6] = { "", "", "16000", "1", "16", "/user/log/xiaodu/xiaodu.pcm" };\r
+    const char *pars[6] = { "", "opus", "16000", "1", "16", "/user/log/xiaodu/xiaodu.opus" };\r
     return JSI::CreateBoolean(AudioCaptureStartSample(PARAM_NUMBER, pars));\r
 }\r
 \r
@@ -442,6 +442,15 @@ JSIValue AudioCapturerModule::Stop(const JSIValue thisVal, const JSIValue *args,
     return JSI::CreateBoolean(0);\r
 }\r
 \r
+JSIValue AudioCapturerModule::Cancel(const JSIValue thisVal, const JSIValue *args, uint8_t argsSize)\r
+{\r
+    MEDIA_UNUSED(thisVal);\r
+    MEDIA_UNUSED(args);\r
+    MEDIA_UNUSED(argsSize);\r
+    msg_center_xiaodu_audio_pcm_clear_res();\r
+    return JSI::CreateBoolean(0);\r
+}\r
+\r
 void AudioCapturerModule::ExceptionStop(void)\r
 {\r
     if (g_sample.needStop == false) {\r
@@ -453,6 +462,7 @@ void InitAudioCapturerModule(JSIValue exports)
 {\r
     JSI::SetModuleAPI(exports, "Start", AudioCapturerModule::Start);\r
     JSI::SetModuleAPI(exports, "Stop", AudioCapturerModule::Stop);\r
+    JSI::SetModuleAPI(exports, "cancel", AudioCapturerModule::Cancel);\r
 }\r
 \r
 }\r
index 6d1c917..1389938 100644 (file)
@@ -49,6 +49,11 @@ public:
      handle exception\r
      */\r
     static void ExceptionStop(void);\r
+\r
+    /**\r
+     * Cancel\r
+     */\r
+    static JSIValue Cancel(const JSIValue thisVal, const JSIValue *args, uint8_t argsSize);\r
 };\r
 \r
 void InitAudioCapturerModule(JSIValue exports);\r
index fc1a656..3c8e4a1 100644 (file)
@@ -161,7 +161,7 @@ bool AudioCallbackDispatcher::AudioCallbackDispatcherThread::Run()
 {
     (void)(DISPATCHER_THREAD_PRIORITY); // Dependent chip
     // stack size 0xC00: obtained from construct function deepest path scene, and upward adjust 512 bytes
-    MediaThreadattr attr = { "DispatcherThread", 0xC00u, THREAD_SCHED_RR, 0, false };
+    MediaThreadattr attr = { "DispatcherThread", 0x1000u, THREAD_SCHED_RR, 0, false };
     thread_ = MediaThreadCreate(ThreadLoop, dispatcher_, &attr);
     if (thread_ == nullptr) {
         ALOGE("thread create failed");
index 5d72dfa..a730f86 100644 (file)
 #define PRIORITY_8 8
 #define PRIORITY_9 9
 #define PRIORITY_10 10
+#define PRIORITY_11 11
 
-#define INPUT_STRATEGY_MAP_COLUMN_SIZE 5
-#define OUTPUT_STRATEGY_MAP_COLUMN_SIZE 11
+#define INPUT_STRATEGY_MAP_COLUMN_SIZE 6
+#define OUTPUT_STRATEGY_MAP_COLUMN_SIZE 12
 
 static AudioDeviceType g_ringSupportDevices[] = {
     OUT_BUILTIN_SPEAKER
@@ -85,7 +86,7 @@ static StrategyConfig g_defaultStrategies[] = {
     {
         .streamType = AUDIO_STREAM_VOICE_CALL_VOLTE,
         .streamDir = AUDIO_STREAM_OUT_IN,
-        .priority = PRIORITY_1,
+        .priority = PRIORITY_2,
         .routeAllDevices = false,
         .needResume = false,
         .supportDeviceCount = sizeof(g_voiceCallVolteOutputSupportDevices) / sizeof(AudioDeviceType),
@@ -94,7 +95,7 @@ static StrategyConfig g_defaultStrategies[] = {
     {
         .streamType = AUDIO_STREAM_RING,
         .streamDir = AUDIO_STREAM_OUT,
-        .priority = PRIORITY_2,
+        .priority = PRIORITY_3,
         .routeAllDevices = false,
         .needResume = false,
         .supportDeviceCount = sizeof(g_ringSupportDevices) / sizeof(AudioDeviceType),
@@ -103,7 +104,7 @@ static StrategyConfig g_defaultStrategies[] = {
     {
         .streamType = AUDIO_STREAM_TTS,
         .streamDir = AUDIO_STREAM_OUT,
-        .priority = PRIORITY_3,
+        .priority = PRIORITY_4,
         .routeAllDevices = false,
         .needResume = false,
         .supportDeviceCount = sizeof(g_commonOutputSupportDevices) / sizeof(AudioDeviceType),
@@ -112,7 +113,7 @@ static StrategyConfig g_defaultStrategies[] = {
     {
         .streamType = AUDIO_STREAM_VOICE_ASSISTANT,
         .streamDir = AUDIO_STREAM_OUT_IN,
-        .priority = PRIORITY_4,
+        .priority = PRIORITY_5,
         .routeAllDevices = false,
         .needResume = false,
         .supportDeviceCount = sizeof(g_commonOutputSupportDevices) / sizeof(AudioDeviceType),
@@ -121,7 +122,7 @@ static StrategyConfig g_defaultStrategies[] = {
     {
         .streamType = AUDIO_STREAM_ALARM_CLOCK,
         .streamDir = AUDIO_STREAM_OUT,
-        .priority = PRIORITY_5,
+        .priority = PRIORITY_6,
         .routeAllDevices = false,
         .needResume = false,
         .supportDeviceCount = sizeof(g_commonOutputSupportDevices) / sizeof(AudioDeviceType),
@@ -130,7 +131,7 @@ static StrategyConfig g_defaultStrategies[] = {
     {
         .streamType = AUDIO_STREAM_FITNESS_VIDEO,
         .streamDir = AUDIO_STREAM_OUT,
-        .priority = PRIORITY_6,
+        .priority = PRIORITY_7,
         .routeAllDevices = false,
         .needResume = false,
         .supportDeviceCount = sizeof(g_fitnessVideoSupportDevices) / sizeof(AudioDeviceType),
@@ -139,7 +140,7 @@ static StrategyConfig g_defaultStrategies[] = {
     {
         .streamType = AUDIO_STREAM_NOTIFICATION_SYSTEM,
         .streamDir = AUDIO_STREAM_OUT,
-        .priority = PRIORITY_7,
+        .priority = PRIORITY_8,
         .routeAllDevices = false,
         .needResume = false,
         .supportDeviceCount = sizeof(g_commonOutputSupportDevices) / sizeof(AudioDeviceType),
@@ -148,7 +149,7 @@ static StrategyConfig g_defaultStrategies[] = {
     {
         .streamType = AUDIO_STREAM_NOTIFICATION_PROMPT,
         .streamDir = AUDIO_STREAM_OUT,
-        .priority = PRIORITY_8,
+        .priority = PRIORITY_9,
         .routeAllDevices = false,
         .needResume = false,
         .supportDeviceCount = sizeof(g_commonOutputSupportDevices) / sizeof(AudioDeviceType),
@@ -157,7 +158,7 @@ static StrategyConfig g_defaultStrategies[] = {
     {
         .streamType = AUDIO_STREAM_MUSIC,
         .streamDir = AUDIO_STREAM_OUT,
-        .priority = PRIORITY_9,
+        .priority = PRIORITY_10,
         .routeAllDevices = false,
         .needResume = true,
         .supportDeviceCount = sizeof(g_commonOutputSupportDevices) / sizeof(AudioDeviceType),
@@ -166,7 +167,7 @@ static StrategyConfig g_defaultStrategies[] = {
     {
         .streamType = AUDIO_STREAM_A2DP_MUSIC,
         .streamDir = AUDIO_STREAM_OUT_IN,
-        .priority = PRIORITY_10,
+        .priority = PRIORITY_11,
         .routeAllDevices = false,
         .needResume = true,
         .supportDeviceCount = sizeof(g_commonOutputSupportDevices) / sizeof(AudioDeviceType),
@@ -187,7 +188,7 @@ static StrategyConfig g_defaultInputStrategies[] = {
     {
         .streamType = AUDIO_STREAM_VOICE_CALL_VOLTE,
         .streamDir = AUDIO_STREAM_OUT_IN,
-        .priority = PRIORITY_0,
+        .priority = PRIORITY_1,
         .routeAllDevices = false,
         .needResume = false,
         .supportDeviceCount = sizeof(g_voiceCallVolteInputSupportDevices) / sizeof(AudioDeviceType),
@@ -196,7 +197,7 @@ static StrategyConfig g_defaultInputStrategies[] = {
     {
         .streamType = AUDIO_STREAM_VOICE_ASSISTANT,
         .streamDir = AUDIO_STREAM_OUT_IN,
-        .priority = PRIORITY_1,
+        .priority = PRIORITY_2,
         .routeAllDevices = false,
         .needResume = false,
         .supportDeviceCount = sizeof(g_commonInputSupportDevices) / sizeof(AudioDeviceType),
@@ -205,7 +206,7 @@ static StrategyConfig g_defaultInputStrategies[] = {
     {
         .streamType = AUDIO_STREAM_VOICE_RECORD,
         .streamDir = AUDIO_STREAM_IN,
-        .priority = PRIORITY_2,
+        .priority = PRIORITY_3,
         .routeAllDevices = false,
         .needResume = false,
         .supportDeviceCount = sizeof(g_commonInputSupportDevices) / sizeof(AudioDeviceType),
@@ -214,7 +215,7 @@ static StrategyConfig g_defaultInputStrategies[] = {
     {
         .streamType = AUDIO_STREAM_VOICE_RECOGNITION,
         .streamDir = AUDIO_STREAM_IN,
-        .priority = PRIORITY_3,
+        .priority = PRIORITY_4,
         .routeAllDevices = false,
         .needResume = true,
         .supportDeviceCount = sizeof(g_commonInputSupportDevices) / sizeof(AudioDeviceType),
@@ -223,7 +224,7 @@ static StrategyConfig g_defaultInputStrategies[] = {
     {
         .streamType = AUDIO_STREAM_A2DP_MUSIC,
         .streamDir = AUDIO_STREAM_OUT_IN,
-        .priority = PRIORITY_4,
+        .priority = PRIORITY_5,
         .routeAllDevices = false,
         .needResume = true,
         .supportDeviceCount = sizeof(g_musicInputSupportDevices) / sizeof(AudioDeviceType),
@@ -232,36 +233,39 @@ static StrategyConfig g_defaultInputStrategies[] = {
 };
 
 static AudioStrategy g_defaultPriorityToStrategies[][OUTPUT_STRATEGY_MAP_COLUMN_SIZE] = {
-    {STRATEGY_NONE,         STRATEGY_REJECT,    STRATEGY_MIX,       STRATEGY_REJECT,    STRATEGY_REJECT,
+    {STRATEGY_NONE,         STRATEGY_REJECT,    STRATEGY_EXCLUSIVE, STRATEGY_MIX,       STRATEGY_REJECT,    STRATEGY_REJECT,
         STRATEGY_REJECT,    STRATEGY_REJECT,    STRATEGY_REJECT,    STRATEGY_REJECT,    STRATEGY_DELAY, STRATEGY_DELAY},
-    {STRATEGY_EXCLUSIVE,    STRATEGY_NONE,      STRATEGY_MIX,       STRATEGY_REJECT,    STRATEGY_REJECT,
+    {STRATEGY_EXCLUSIVE,    STRATEGY_NONE,      STRATEGY_EXCLUSIVE, STRATEGY_MIX,       STRATEGY_REJECT,    STRATEGY_REJECT,
         STRATEGY_REJECT,    STRATEGY_REJECT,    STRATEGY_MIX,       STRATEGY_MIX,       STRATEGY_DELAY, STRATEGY_DELAY},
-    {STRATEGY_EXCLUSIVE,    STRATEGY_MIX,       STRATEGY_NONE,      STRATEGY_REJECT,    STRATEGY_REJECT,
+    {STRATEGY_EXCLUSIVE,    STRATEGY_REJECT,    STRATEGY_NONE,      STRATEGY_REJECT,    STRATEGY_REJECT,    STRATEGY_REJECT,
+        STRATEGY_REJECT,    STRATEGY_REJECT,    STRATEGY_REJECT,       STRATEGY_REJECT, STRATEGY_DELAY, STRATEGY_DELAY},
+    {STRATEGY_EXCLUSIVE,    STRATEGY_MIX,       STRATEGY_EXCLUSIVE, STRATEGY_NONE,      STRATEGY_REJECT,    STRATEGY_REJECT,
         STRATEGY_MIX,       STRATEGY_REJECT,    STRATEGY_MIX,       STRATEGY_MIX,       STRATEGY_DELAY, STRATEGY_DELAY},
-    {STRATEGY_EXCLUSIVE,    STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_NONE,      STRATEGY_REJECT,
+    {STRATEGY_EXCLUSIVE,    STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_NONE,      STRATEGY_REJECT,
         STRATEGY_MIX,       STRATEGY_REJECT,    STRATEGY_MIX,       STRATEGY_MIX,       STRATEGY_DELAY, STRATEGY_DELAY},
-    {STRATEGY_EXCLUSIVE,    STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_NONE,
+    {STRATEGY_EXCLUSIVE,    STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_NONE,
         STRATEGY_MIX,       STRATEGY_REJECT,    STRATEGY_MIX,       STRATEGY_MIX,       STRATEGY_MIX,   STRATEGY_MIX},
-    {STRATEGY_EXCLUSIVE,    STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE,
+    {STRATEGY_EXCLUSIVE,    STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE,
         STRATEGY_NONE,      STRATEGY_REJECT,    STRATEGY_MIX,       STRATEGY_MIX,    STRATEGY_REJECT, STRATEGY_DELAY},
-    {STRATEGY_EXCLUSIVE,    STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE,
+    {STRATEGY_EXCLUSIVE,    STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE,
         STRATEGY_EXCLUSIVE, STRATEGY_NONE,      STRATEGY_MIX,       STRATEGY_MIX,    STRATEGY_REJECT, STRATEGY_DELAY},
-    {STRATEGY_EXCLUSIVE,    STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE,
+    {STRATEGY_EXCLUSIVE,    STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE,
         STRATEGY_EXCLUSIVE, STRATEGY_MIX,       STRATEGY_NONE,      STRATEGY_MIX,       STRATEGY_MIX,   STRATEGY_MIX},
-    {STRATEGY_EXCLUSIVE,    STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE,
+    {STRATEGY_EXCLUSIVE,    STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE,
         STRATEGY_EXCLUSIVE, STRATEGY_MIX,       STRATEGY_MIX,       STRATEGY_NONE,      STRATEGY_MIX,   STRATEGY_MIX},
-    {STRATEGY_EXCLUSIVE,    STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE,
+    {STRATEGY_EXCLUSIVE,    STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE,
      STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_MIX,       STRATEGY_MIX,       STRATEGY_NONE, STRATEGY_EXCLUSIVE},
-    {STRATEGY_EXCLUSIVE,    STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE,
+    {STRATEGY_EXCLUSIVE,    STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE,
         STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_MIX,       STRATEGY_MIX,       STRATEGY_REJECT, STRATEGY_NONE},
 };
 
 static AudioStrategy g_defaultInputPriorityToStrategies[][INPUT_STRATEGY_MAP_COLUMN_SIZE] = {
-    {STRATEGY_NONE,         STRATEGY_REJECT,    STRATEGY_REJECT,    STRATEGY_REJECT,     STRATEGY_DELAY},
-    {STRATEGY_EXCLUSIVE,    STRATEGY_NONE,      STRATEGY_REJECT,    STRATEGY_REJECT,     STRATEGY_DELAY},
-    {STRATEGY_EXCLUSIVE,    STRATEGY_EXCLUSIVE, STRATEGY_NONE,      STRATEGY_REJECT,     STRATEGY_MIX},
-    {STRATEGY_EXCLUSIVE,    STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_NONE,       STRATEGY_DELAY},
-    {STRATEGY_EXCLUSIVE,    STRATEGY_EXCLUSIVE, STRATEGY_MIX,       STRATEGY_EXCLUSIVE,  STRATEGY_NONE},
+    {STRATEGY_NONE,         STRATEGY_EXCLUSIVE, STRATEGY_REJECT,    STRATEGY_REJECT,    STRATEGY_REJECT,     STRATEGY_DELAY},
+    {STRATEGY_EXCLUSIVE,    STRATEGY_NONE,      STRATEGY_REJECT,    STRATEGY_REJECT,    STRATEGY_REJECT,     STRATEGY_DELAY},
+    {STRATEGY_EXCLUSIVE,    STRATEGY_EXCLUSIVE, STRATEGY_NONE,      STRATEGY_REJECT,    STRATEGY_REJECT,     STRATEGY_DELAY},
+    {STRATEGY_EXCLUSIVE,    STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_NONE,      STRATEGY_REJECT,     STRATEGY_MIX},
+    {STRATEGY_EXCLUSIVE,    STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_NONE,       STRATEGY_DELAY},
+    {STRATEGY_EXCLUSIVE,    STRATEGY_EXCLUSIVE, STRATEGY_EXCLUSIVE, STRATEGY_MIX,       STRATEGY_EXCLUSIVE,  STRATEGY_NONE},
 };
 
 #endif  // AUDIO_BASE_H
index 9d07901..a6c9332 100644 (file)
@@ -386,6 +386,7 @@ static AudioStreamStrategy *GetStrategyForStreamCreate(AudioSession sessionID, c
 
 static AudioStreamStrategy *GetStrategyForStreamResume(const AudioStreamDescriptor *streamDesc, bool isOutput)
 {
+    CHK_NULL_RETURN(streamDesc, NULL, "streamDesc is NULL");
     ResetActiveStreams();
     /* 获取流和对应的混音权重 */
     if (!InterruptMgrGetActiveStream(&g_policyMgrCtx.streamStrategy, streamDesc->streamType, isOutput)) {
index 3208660..ce6e3b9 100644 (file)
@@ -405,8 +405,10 @@ int32_t GetHandleId(uintptr_t handle, int32_t *streamId, AudioSession *sessionId
 
 static int32_t UpdateMixWeigthWhenResume(TrackHandleContext *context)
 {
+    AudioStreamDescriptor newStreamDesc = {context->streamId, context->streamInfo.streamType,
+                                           context->typeVolume, context->streamInfo.linkDir};
     AudioStreamStrategy *strategy = PolicyMgrGetStrategyForStream(context->streamInfo.sessionID,
-                                                                  NULL, STREAM_OUT_RESUME);
+                                                                  &newStreamDesc, STREAM_OUT_RESUME);
     CHK_NULL_RETURN(strategy, false, "strategy is NULL");
     // 检查
     bool find = false;
index a9bf045..5d42f96 100644 (file)
@@ -915,18 +915,20 @@ int32_t Player::PlayerImpl::SetUriSource(const Source &source)
         MEDIA_ERR_LOG("SetUriSource failed, uri source do not set uri parameter");
         return -1;
     }
-    char filePath[PATH_MAX];
+    if (uri.find("http") != 0) {
+        char filePath[PATH_MAX];
 #if !defined(_WIN32)
-    if (realpath(uri.c_str(), filePath) == nullptr) {
+        if (realpath(uri.c_str(), filePath) == nullptr) {
 #else
-    if (_fullpath(filePath, uri.c_str(), PATH_MAX) == nullptr) {
+        if (_fullpath(filePath, uri.c_str(), PATH_MAX) == nullptr) {
 #endif
-        MEDIA_ERR_LOG("Realpath input file failed");
-        return -1;
-    }
-    if (access(filePath, R_OK) == -1) {
-        MEDIA_ERR_LOG("No permission to read the file");
-        return -1;
+            MEDIA_ERR_LOG("Realpath input file failed");
+            return -1;
+        }
+        if (access(filePath, R_OK) == -1) {
+            MEDIA_ERR_LOG("No permission to read the file");
+            return -1;
+        }
     }
     int32_t ret = player_->SetDataSource(uri.c_str());
     if (ret != 0) {
@@ -1255,7 +1257,7 @@ int32_t Player::PlayerImpl::GetParameter(Format &params)
     if (!params.GetStringValue(FORMAT_KEY, value)) {
         MEDIA_ERR_LOG("get  GetParameter key fail");
     }
-    if (value.compare(FORMAT_GET_ABLUM_INFO) == 0) {
+    if (value.compare(FORMAT_GET_ALBUM_INFO) == 0) {
         if (formatFileInfo_.albumInfoCnt == 0 || formatFileInfo_.albumInfo == nullptr) {
             goto EXIT;
         }
index 78874c9..32b52b9 100644 (file)
@@ -410,10 +410,25 @@ public:
      */
     static JSIValue BackgroundPlayGetter(const JSIValue thisVal, const JSIValue *args, uint8_t argsSize);
 
+    /**
+     *the GetAlbumInfo method of audio.
+     *
+     * @param thisVal Indicates function execute context
+     * @param args Indicates the function arguments
+     * @param argsSize Indicates the size of function arguments
+     */
+    static JSIValue GetAlbumInfo(const JSIValue thisVal, const JSIValue *args, uint8_t argsSize);
+
 private:
+    static void SuccessCallBack(const JSIValue thisVal, const JSIValue args, JSIValue outputValue);
+
+    static void FailCallBack(const JSIValue thisVal, const JSIValue args, const char *errStr);
+
     static JSIValue GetEventCallback(const AudioEventListener *listener);
 
     static AudioEventListener *CreateAudioEventListener(const JSIValue *args, uint8_t argsSize);
+
+    static bool CheckInputParam(const JSIValue thisVal, const JSIValue *args, uint8_t argsSize);
 };
 
 /*
index b1bd861..ac74721 100644 (file)
 namespace OHOS {
 namespace ACELite {
 constexpr char PROP_SUCCESS[] = "success";
+constexpr char PROP_FAIL[] = "fail";
 constexpr char PROP_COMPLETE[] = "complete";
+constexpr char ALBUMINFO_SOURCE[] = "src";
+constexpr char ALBUMINFO_TITLE[] = "title";
+constexpr char ALBUMINFO_ARTIST[] = "artist";
 constexpr char DECRYPT_FILE_PATH[] = "/user/app/user/ace/data/%s/rawfile/lib/audio_decode.bin";
 constexpr uint32_t MAX_PATH_LEN = 256;
 constexpr char PATH_PREFIX[] = "internal://";
@@ -33,6 +37,36 @@ static Audio::AudioManager& g_amInstance = Audio::AudioManager::GetInstance();
 
 static AudioStreamType g_streamType = AUDIO_STREAM_MUSIC;
 
+void AudioModule::SuccessCallBack(const JSIValue thisVal, const JSIValue args, JSIValue outputValue)
+{
+    if (JSI::ValueIsUndefined(args)) {
+        return;
+    }
+    JSIValue successCB = JSI::GetNamedProperty(args, PROP_SUCCESS);
+    if (!JSI::ValueIsUndefined(successCB)) {
+        if (!JSI::ValueIsUndefined(outputValue)) {
+            JSI::CallFunction(successCB, thisVal, &outputValue, 1);
+        } else {
+            JSI::CallFunction(successCB, thisVal, nullptr, 1);
+        }
+    }
+    JSI::ReleaseValue(successCB);
+}
+
+void AudioModule::FailCallBack(const JSIValue thisVal, const JSIValue args, const char *errStr)
+{
+    if (JSI::ValueIsUndefined(args)) {
+        return;
+    }
+    JSIValue failCB = JSI::GetNamedProperty(args, PROP_FAIL);
+    if (!JSI::ValueIsUndefined(failCB)) {
+        JSIValue errLog = JSI::CreateString(errStr);
+        JSI::CallFunction(failCB, thisVal, &errLog, 1);
+        JSI::ReleaseValue(errLog);
+    }
+    JSI::ReleaseValue(failCB);
+}
+
 void AudioModule::OnTerminate()
 {
     AudioPlayer *audioPlayer = AudioPlayer::GetInstance();
@@ -233,6 +267,55 @@ JSIValue AudioModule::SetSrcList(const JSIValue thisVal, const JSIValue *args, u
     return JSI::CreateBoolean(ret);
 }
 
+bool AudioModule::CheckInputParam(const JSIValue thisVal, const JSIValue *args, uint8_t argsSize)
+{
+    if (argsSize < 1 || args == nullptr) {
+        MEDIA_ERR_LOG("invalid input parameter.");
+        return false;
+    }
+    if (!JSI::ValueIsObject(args[0])) {
+        MEDIA_ERR_LOG("invalid input parameter.");
+        return false;
+    }
+    return true;
+}
+
+JSIValue AudioModule::GetAlbumInfo(const JSIValue thisVal, const JSIValue *args, uint8_t argsSize)
+{
+    if (!CheckInputParam(thisVal, args, argsSize)) {
+         return JSI::CreateBoolean(false);
+    }
+    JSIValue srcListArray = JSI::AcquireValue(args[1]);
+    if (!JSI::ValueIsArray(srcListArray)) {
+        FailCallBack(thisVal, args[0], "src List is required.");
+        JSI::ReleaseValue(srcListArray);
+        return JSI::CreateBoolean(false);
+    }
+    uint32_t srcListLen = JSI::GetArrayLength(srcListArray);
+    JSIValue params = JSI::CreateArray(srcListLen);
+    if (!JSI::ValueIsArray(params)) {
+        FailCallBack(thisVal, args[0], "get output params failed.");
+        JSI::ReleaseValue(params);
+        return JSI::CreateBoolean(false);
+    }
+    for (uint32_t index = 0; index < srcListLen; ++index) {
+        AudioPlayerAlbumInfo albumInfo = {"", "", ""};
+        JSIValue src = JSI::GetPropertyByIndex(srcListArray, index);
+        char *strValue = JSI::JSIValueToString(src);
+        JSIValue data = JSI::CreateObject();
+        AudioPlayer::GetInstance()->GetAlbumInfo(albumInfo, strValue);
+        JSI::SetStringProperty(data, ALBUMINFO_SOURCE, albumInfo.src.c_str());
+        JSI::SetStringProperty(data, ALBUMINFO_TITLE, albumInfo.title.c_str());
+        JSI::SetStringProperty(data, ALBUMINFO_ARTIST, albumInfo.artist.c_str());
+        JSI::SetPropertyByIndex(params, index, data);
+        JSI::ReleaseValue(data);
+        JSI::ReleaseString(strValue);
+    }
+    SuccessCallBack(thisVal, args[0], params);
+    JSI::ReleaseValueList(params);
+    return JSI::CreateBoolean(true);
+}
+
 JSIValue AudioModule::CurrentTimeGetter(const JSIValue thisVal, const JSIValue *args, uint8_t argsSize)
 {
     MEDIA_UNUSED(thisVal);
index 7755d1c..7078f82 100644 (file)
@@ -679,5 +679,10 @@ bool AudioPlayer::IsSysSrc()
     return isSysSrc_;
 }
 
+void AudioPlayer::GetAlbumInfo(AudioPlayerAlbumInfo &albumInfo, const char *src)
+{
+    AudioPlayerService::GetInstance()->GetAlbumInfo(albumInfo, src);
+}
+
 }  // namespace ACELite
 }  // namespace OHOS
index 5b1e3e7..a8ad2a9 100644 (file)
@@ -41,7 +41,7 @@ set(PUBLIC_HEADER
 )
 
 set(OPENMG_DIR ${ROOT_DIR}/open_source/openharmony)
-
+set(OGG_INCLUDE ${OPENMG_DIR}/../libogg/libogg-1.3.5/include)
 set(PRIVATE_HEADER
     ${CMAKE_CURRENT_SOURCE_DIR}/../../audiomanager/interfaces/kits/audiomanager
     ${CMAKE_CURRENT_SOURCE_DIR}/../../audiomanager/frameworks/audiostream/include
@@ -56,6 +56,8 @@ if ("${CHIP}" STREQUAL "brandy")
         ${OPENMG_DIR}/drivers/peripheral/display/interfaces/include
         ${ROOT_DIR}/include/middleware/services/bts/br
         ${ROOT_DIR}/include/middleware/services/bts/common
+        ${OGG_INCLUDE}
+        ${OGG_INCLUDE}/ogg/
     )
     if ("ENABLE_LVGL" IN_LIST DEFINES)
         set(LVGL_DIR ${ROOT_DIR}/middleware/services/gui/lvgl)
index 38bf8f6..5bb8a81 100644 (file)
@@ -9,7 +9,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <climits>
-#include <stdlib.h>
+#include <cstdlib>
 #include <unistd.h>
 #include <sys/select.h>
 #include <sys/time.h>
@@ -27,6 +27,7 @@
 #include "audio_manager.h"
 #include "media_log.h"
 #include "media_thread_adapt.h"
+#include "ogg.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -35,7 +36,7 @@ extern "C" {
 
 using namespace OHOS::Media;
 using namespace OHOS::Audio;
-using namespace::Audio;
+using namespace Audio;
 using Audio::InterruptListener;
 using Audio::AudioInterrupt;
 using Audio::AudioManager;
@@ -45,6 +46,30 @@ using Audio::AudioManager;
 #define READ_COUNT_MAX 17000*2 //改过的 20分钟
 #define GET_AUDIO_TIME_INTERVAL_TIMES 100
 #define MAX_ARGC 5
+#define CHK_NULL_RETURN(ptr, printfString) \
+do { \
+    if ((ptr) == nullptr) { \
+        MEDIA_ERR_LOG("%s", printfString); \
+        return MEDIA_ERR; \
+    } \
+} while (0)
+#define CHK_OK_RETURN(ret, printfString) \
+do { \
+    if ((ret) != MEDIA_OK || (ret) != 0) { \
+        MEDIA_ERR_LOG("%s", printfString); \
+        return MEDIA_ERR; \
+    } \
+} while (0)
+const uint32_t MILLSECOND_TO_SECOND = 1000;
+const uint32_t HEADER_STRLEN = 8;
+const uint32_t OPUS_DELAY_TIME_DIVISOR = 0;
+const uint32_t OPUS_DELAY_TIME_DIVIDED = 100;
+const uint32_t OPUS_ID_HEADER_LEN = 19;
+const uint32_t OPUS_COMMENT_HEADER_LEN = 25;
+const uint32_t OPUS_COMMENT_TAIL_LEN = 4;
+const uint32_t OPUS_ENCODE_HEADER_SIZE = 8;
+const uint32_t OPUS_OPUSTAGS_LEN = 12;
+const uint32_t OPUS_SAMPLERATE = 48000;
 
 typedef struct {
     size_t framesize;
@@ -86,6 +111,21 @@ struct SampleAudioCapturerInfo {
     AudioSession sessionID = AUDIO_SESSION_ID_NONE;
 };
 
+typedef struct CaptureOggContext{
+    ogg_stream_state oggStream;
+    int64_t sampleRate;
+    int64_t channels;
+    int64_t granulepos;
+    int64_t packetCount;
+    int32_t serialno; 
+    bool isEnd;
+    ogg_page *page;
+    ogg_packet *packet;
+    unsigned char *idHeader;
+    unsigned char *commentHeader;
+} CaptureOggContext;
+
+static CaptureOggContext g_oggCtx = {};
 static bool g_interruptHintStop = false;
 static std::shared_ptr<AudioCapturer> g_audioCap;
 static NameAudioFormat g_audioCodecFormat[] = {
@@ -120,6 +160,7 @@ public:
             MEDIA_INFO_LOG("OnInterrupt resume not supported");
         }
         if (type == INTERRUPT_TYPE_BEGIN && hint == INTERRUPT_HINT_STOP) {
+            MEDIA_INFO_LOG("OnInterrupt stop");
             g_interruptHintStop = true;
         }
         if (type == INTERRUPT_TYPE_END && hint == INTERRUPT_HINT_STOP) {
@@ -133,6 +174,136 @@ static AudioManager& g_amInstance = AudioManager::GetInstance();
 static TestSample g_sample;
 static std::shared_ptr<CaptureInterruptListener> g_captureInterruptListener;
 
+static void MediaMemFree(void **src)
+{
+    if (src == nullptr || *src == nullptr) {
+        MEDIA_ERR_LOG("%s", "don't need to free!");
+        return;
+    }
+    free(*src);
+    *src = nullptr;
+}
+
+static void *MediaMemCalloc(const size_t bytesNum)
+{
+    void *tmp = malloc(bytesNum);
+
+    if (tmp == nullptr) {
+        MEDIA_ERR_LOG("%s", "malloc failed!");
+        return nullptr;
+    }
+
+    if (memset_s(tmp, bytesNum, 0, bytesNum) != EOK) {
+        MEDIA_ERR_LOG("%s", "memset_s failed!");
+        MediaMemFree(&tmp);
+        return nullptr;
+    }
+    return tmp;
+}
+
+static int32_t AudioCapturerOggHeaderInit(SampleAudioCapturerInfo &info)
+{
+    g_oggCtx.idHeader = static_cast<unsigned char*>(MediaMemCalloc(OPUS_ID_HEADER_LEN));
+    CHK_NULL_RETURN(g_oggCtx.idHeader, "malloc failed!");
+    if (memcpy_s(g_oggCtx.idHeader, HEADER_STRLEN, "OpusHead", HEADER_STRLEN) != 0) {
+        MEDIA_ERR_LOG("memcpy failed!");
+        return MEDIA_ERR;
+    }  
+    g_oggCtx.idHeader[0x8] = 0x01;
+    g_oggCtx.idHeader[0x9] = info.channelCount;
+    uint32_t preSkip = g_oggCtx.sampleRate * OPUS_DELAY_TIME_DIVISOR / OPUS_DELAY_TIME_DIVIDED;
+    g_oggCtx.idHeader[0xA] = preSkip & 0xFF;
+    g_oggCtx.idHeader[0xB] = (preSkip >> 0x8); // 8 for Little-endian byte order
+    g_oggCtx.idHeader[0xC] = g_oggCtx.sampleRate & 0xFF;
+    g_oggCtx.idHeader[0xD] = (g_oggCtx.sampleRate >> 0x8) & 0xFF; // 8 for Little-endian byte order
+    g_oggCtx.idHeader[0xE] = (g_oggCtx.sampleRate >> 0x10) & 0xFF; // 16 for Little-endian byte order
+    g_oggCtx.idHeader[0xF] = (g_oggCtx.sampleRate >> 0x18) & 0xFF; // 24 for Little-endian byte order
+
+    g_oggCtx.commentHeader = static_cast<unsigned char*>(MediaMemCalloc(OPUS_COMMENT_HEADER_LEN));
+    CHK_NULL_RETURN(g_oggCtx.commentHeader, "malloc failed!");
+    if (memcpy_s(g_oggCtx.commentHeader, HEADER_STRLEN, "OpusTags", HEADER_STRLEN) != 0) {
+        MEDIA_ERR_LOG("Opus idHeader memcpy failed!");
+        return MEDIA_ERR;
+    }
+    const char *vendor = "libogg-1.3.5";
+    uint32_t vendorLen = std::strlen(vendor);
+    g_oggCtx.commentHeader[0x8] = vendorLen & 0xFF;
+    g_oggCtx.commentHeader[0x9] = (vendorLen >> 0x8) & 0xFF; // 8 for Little-endian byte order
+    g_oggCtx.commentHeader[0xA] = (vendorLen >> 0x10) & 0xFF; // 16 for Little-endian byte order
+    g_oggCtx.commentHeader[0xB] = (vendorLen >> 0x18) & 0xFF; // 24 for Little-endian byte order
+
+    if (memcpy_s(g_oggCtx.commentHeader + OPUS_OPUSTAGS_LEN, vendorLen, vendor, vendorLen) != 0) {
+        MEDIA_ERR_LOG("Opus commentHeader memcpy failed!");
+        return MEDIA_ERR;
+    }
+    return MEDIA_OK;
+}
+
+static int32_t AudioCaptureOggStreamFlush(FILE *pfd)
+{
+    while (ogg_stream_flush(&g_oggCtx.oggStream, g_oggCtx.page)) {
+        int32_t ret = fwrite(g_oggCtx.page->header, 1, g_oggCtx.page->header_len, pfd);
+        if (ret != g_oggCtx.page->header_len) {
+            MEDIA_ERR_LOG("errno:%d, errmsg:%s", errno, strerror(errno));
+            return MEDIA_ERR;
+        }
+        ret = fwrite(g_oggCtx.page->body, 1, g_oggCtx.page->body_len, pfd);
+        if (ret != g_oggCtx.page->body_len) {
+            MEDIA_ERR_LOG("errno:%d, errmsg:%s", errno, strerror(errno));
+            return MEDIA_ERR;
+        }
+    }
+    return MEDIA_OK;
+}
+
+static int32_t AudioCapturerOggCtxInit(FILE *pfd, SampleAudioCapturerInfo &info)
+{
+    g_oggCtx.packet = (ogg_packet *)MediaMemCalloc(sizeof(ogg_packet));
+    CHK_NULL_RETURN(g_oggCtx.packet, "malloc failed!");
+    g_oggCtx.page = (ogg_page *)MediaMemCalloc(sizeof(ogg_page));
+    CHK_NULL_RETURN(g_oggCtx.page, "malloc failed!");
+    g_oggCtx.sampleRate = info.sampleRate;
+    g_oggCtx.channels = info.channelCount;
+    g_oggCtx.granulepos = -1; // -1 means start page
+    g_oggCtx.packetCount = 0;
+    g_oggCtx.isEnd = false;
+    g_oggCtx.serialno = 0x1; // unique serialno
+    CHK_OK_RETURN(ogg_stream_init(&g_oggCtx.oggStream, g_oggCtx.serialno), "ogg stream init failed");
+    CHK_OK_RETURN(AudioCapturerOggHeaderInit(info), "Header init failed!");
+    g_oggCtx.packet->packet = g_oggCtx.idHeader;
+    g_oggCtx.packet->bytes = OPUS_ID_HEADER_LEN;
+    g_oggCtx.packet->b_o_s = 1; // 1 means begining of ogg stream
+    g_oggCtx.packet->e_o_s = 0;
+    g_oggCtx.packet->granulepos = g_oggCtx.granulepos;
+    g_oggCtx.packetCount = g_oggCtx.packetCount;
+    g_oggCtx.packet->packetno = g_oggCtx.packetCount++;
+    g_oggCtx.granulepos = 0;
+    ogg_stream_packetin(&g_oggCtx.oggStream, g_oggCtx.packet);
+    CHK_OK_RETURN(AudioCaptureOggStreamFlush(pfd), "flush failed!");
+    g_oggCtx.packet->packet = g_oggCtx.commentHeader;
+    g_oggCtx.packet->bytes = OPUS_COMMENT_HEADER_LEN;
+    g_oggCtx.packet->b_o_s = 0;
+    g_oggCtx.packet->e_o_s = 0;
+    g_oggCtx.packet->granulepos = 0;
+    g_oggCtx.packet->packetno = g_oggCtx.packetCount++;
+    ogg_stream_packetin(&g_oggCtx.oggStream, g_oggCtx.packet);
+    CHK_OK_RETURN(AudioCaptureOggStreamFlush(pfd), "flush failed!");
+    return MEDIA_OK;
+}
+
+static void AudioCapturerOggCtxDeInit()
+{
+    g_oggCtx.sampleRate = 0;
+    g_oggCtx.channels = 0;
+    g_oggCtx.granulepos = 0;
+    g_oggCtx.packetCount = 0;
+    MediaMemFree((void **)&g_oggCtx.packet);
+    MediaMemFree((void **)&g_oggCtx.page);
+    MediaMemFree((void **)&g_oggCtx.idHeader);
+    MediaMemFree((void **)&g_oggCtx.commentHeader);
+    ogg_stream_clear(&g_oggCtx.oggStream);
+}
+
 static void AudioCaptureStop()
 {
     MediaMutexLock(g_sample.mutex);
@@ -156,28 +327,80 @@ static void AudioCaptureStop()
     (void)MediaMutexDestroy(&g_sample.mutex);
 }
 
+static int32_t AudioCaptureWritePage(FILE *pfd)
+{
+    if (ogg_stream_pageout(&g_oggCtx.oggStream, g_oggCtx.page)) {
+        int32_t ret = fwrite(g_oggCtx.page->header, 1, g_oggCtx.page->header_len, pfd);
+        if (ret != g_oggCtx.page->header_len) {
+            MEDIA_ERR_LOG("errno:%d, errmsg:%s", errno, strerror(errno));
+            return MEDIA_ERR;
+        }
+        ret = fwrite(g_oggCtx.page->body, 1, g_oggCtx.page->body_len, pfd);
+        if (ret != g_oggCtx.page->body_len) {
+            MEDIA_ERR_LOG("errno:%d, errmsg:%s", errno, strerror(errno));
+            return MEDIA_ERR;
+        }
+    }
+    return MEDIA_OK;
+}
+
+static int32_t AudioCapturerWriteInOGG(uint8_t *buffer, int64_t bufferLen, FILE *pfd, bool isEos)
+{
+    if (bufferLen < 0) {
+        MEDIA_ERR_LOG("input buffer invalid");
+        return MEDIA_ERR;
+    }
+    g_oggCtx.packet->packet = (unsigned char *)(buffer + OPUS_ENCODE_HEADER_SIZE);
+    g_oggCtx.packet->bytes = bufferLen - OPUS_ENCODE_HEADER_SIZE;
+    g_oggCtx.packet->b_o_s = 0;
+    g_oggCtx.packet->e_o_s = isEos ? 1 : 0;
+    g_oggCtx.packet->granulepos = g_oggCtx.granulepos;
+    g_oggCtx.packet->packetno = g_oggCtx.packetCount++;
+    g_oggCtx.granulepos += OPUS_SAMPLERATE * 10 / MILLSECOND_TO_SECOND; //capture frequency is 10ms for each frame
+    ogg_stream_packetin(&g_oggCtx.oggStream, g_oggCtx.packet);
+    if (!isEos) {
+        return AudioCaptureWritePage(pfd);
+    } else {
+        return AudioCaptureOggStreamFlush(pfd);
+    }
+}
+
 static void* AudioCaptureProcess(void* arg)
 {
     FILE *pfd = (FILE *)arg;
     int32_t readCnt = 0;
     Timestamp timeStamp;
     g_audioSourceProcessInput.bThreadRun = true;
-    while (!g_sample.needStop && !g_interruptHintStop) {
+    bool isEos = false;
+    while (true) {
         int32_t ret = g_audioCap->Read(g_audioSourceProcessInput.buffer, g_audioSourceProcessInput.framesize, false);
-        if (ret == -1) {
-            MEDIA_ERR_LOG("audioCap Read failed:0x%x", ret);
+        if (ret <= 0) {
+            MEDIA_INFO_LOG("audioCap Read failed:0x%x", ret);
             continue;
         }
         if (ret == ERR_RETRY_READ) {
             usleep(READ_RETRY_TIME_US);
             continue;
         }
-        int32_t writeLen = fwrite(g_audioSourceProcessInput.buffer, 1, ret, pfd);
-        if (writeLen != ret) {
-            MEDIA_ERR_LOG("errno:%d, errmsg:%s", errno, strerror(errno));
-            break;
+
+        if (g_sample.needStop || g_interruptHintStop || readCnt++ > READ_COUNT_MAX ) {
+            isEos = true;
         }
-        if (readCnt++ > READ_COUNT_MAX) {
+
+        if (g_audioSourceProcessInput.audioFormat == OPUS) {
+            if(AudioCapturerWriteInOGG(g_audioSourceProcessInput.buffer, ret, pfd, isEos) != MEDIA_OK) {
+                MEDIA_ERR_LOG("Write file failed!");
+                break;
+            }    
+        } else {
+            int32_t writeLen = fwrite(g_audioSourceProcessInput.buffer, 1, ret, pfd);
+            if (writeLen != ret) {
+                MEDIA_ERR_LOG("errno:%d, errmsg:%s", errno, strerror(errno));
+                break;
+            }
+        }
+        if (isEos) {
+            MEDIA_ERR_LOG("quit capture process");
             break;
         }
         if (readCnt % GET_AUDIO_TIME_INTERVAL_TIMES == 0) {
@@ -188,10 +411,13 @@ static void* AudioCaptureProcess(void* arg)
         }
         MEDIA_INFO_LOG("audioCap Read readCnt = %d, size = %d", readCnt, ret);
     }
+    if (g_audioSourceProcessInput.audioFormat == OPUS) {
+        AudioCapturerOggCtxDeInit();
+    }
     fclose(pfd);
     AudioCaptureStop();
     MEDIA_INFO_LOG("AudioCaptureProcess end");
-    return NULL;
+    return nullptr;
 }
 
 static void AudioCaptureGetFormat(const char **argv, AudioCodecFormat &audioFormat)
@@ -293,7 +519,6 @@ static int32_t AudioCaptureSetInfo(SampleAudioCapturerInfo audioCapturerInfo)
 {
     AudioCapturerInfo info = {};
     ConvertCaptureInfo(info, audioCapturerInfo);
-    printf("info.audioFormat = %d\n",info.audioFormat);
     if (g_audioCap->SetCapturerInfo(info) != 0) {
         MEDIA_ERR_LOG("Can't SetCapturerInfo");
         return -1;
@@ -305,7 +530,8 @@ static int32_t AudioCaptureSetInfo(SampleAudioCapturerInfo audioCapturerInfo)
         return -1;
     }
     MEDIA_INFO_LOG("GetFrameCount:%d", frameCount);
-    g_audioSourceProcessInput.framesize = frameCount * info.channelCount * info.bitWidth / sizeof(uint8_t);
+    g_audioSourceProcessInput.audioFormat = info.audioFormat;
+    g_audioSourceProcessInput.framesize = frameCount * info.channelCount;
     g_audioSourceProcessInput.buffer = new uint8_t[g_audioSourceProcessInput.framesize];
     if (g_audioSourceProcessInput.buffer == nullptr) {
         (void)g_audioCap->Release();
@@ -344,6 +570,7 @@ static int32_t ActivateAudioInterrupt(AudioSession &sessionId)
 
 static int32_t CheckInputParam(int32_t argc, const char **argv)
 {
+    MEDIA_UNUSED(argv);
     if (argc != 0x6) { // must be 6 parameters
         MEDIA_ERR_LOG("argc:%d is invalid, record start must be 6 parameters", argc);
         return -1;
@@ -400,17 +627,27 @@ int32_t AudioCaptureSample(int32_t argc, const char **argv)
     audioCapturerInfo.streamType = AUDIO_STREAM_VOICE_RECORD;
     ret = AudioCaptureSetInfo(audioCapturerInfo);
     if (ret != 0) {
-        fclose(pfd);
-        g_audioCap.reset();
-        (void)g_amInstance.DeactivateAudioInterrupt(g_sample.interrupt);
-        goto EXIT;
+        MEDIA_ERR_LOG("AudioCapture set failed");
+        goto FCLOSE_EXIT;
+    }
+    if (audioCapturerInfo.audioFormat == OPUS) {
+        ret = AudioCapturerOggCtxInit(pfd, audioCapturerInfo);
+        if (ret != 0) {
+            MEDIA_ERR_LOG("OggCtx init failed");
+            goto FCLOSE_EXIT;
+        }
     }
     g_sample.audioCaptureProcess = MediaThreadCreate(AudioCaptureProcess, pfd, &attr);
     if (g_sample.audioCaptureProcess == nullptr) {
         MEDIA_ERR_LOG("thread create failed");
-        goto EXIT;
+        goto FCLOSE_EXIT;
     }
     return 0;
+
+FCLOSE_EXIT:
+    fclose(pfd);
+    g_audioCap.reset();
+    (void)g_amInstance.DeactivateAudioInterrupt(g_sample.interrupt);
 EXIT:
     g_audioSourceProcessInput.bThreadRun = false;
     return -1;
index c68e63b..3e99cd0 100644 (file)
@@ -379,11 +379,17 @@ AudioPlayerService::AudioPlayerService() : PlayerCallback(), InterruptListener()
 AudioPlayerService::~AudioPlayerService()\r
 {\r
     Reset();\r
+#ifdef HMF_DECRYPT_DATA_ENABLE\r
     if (loadDecryptPath_ != nullptr) {\r
         delete[] loadDecryptPath_;\r
         loadDecryptPath_ = nullptr;\r
         loadDecryptPathLen_ = 0;\r
     }\r
+#endif\r
+    if (albumInfoPlayer_ != nullptr) {\r
+        albumInfoPlayer_.reset();\r
+        albumInfoPlayer_ = nullptr;\r
+    }\r
 }\r
 \r
 std::shared_ptr<AudioPlayerService> AudioPlayerService::GetInstance()\r
@@ -857,4 +863,35 @@ void AudioPlayerService::OnStop()
     callBack_->OnStop();\r
 }\r
 \r
-}
\ No newline at end of file
+void AudioPlayerService::GetAlbumInfo(AudioPlayerAlbumInfo &albumInfo, const char *src)\r
+{\r
+    if (src == nullptr) {\r
+        MEDIA_ERR_LOG("src is nullptr!");\r
+        return;\r
+    }\r
+    if (albumInfoPlayer_ == nullptr) {\r
+        albumInfoPlayer_= std::make_shared<Player>();\r
+    }\r
+    albumInfo.src = src;\r
+    Source source = Source(src);\r
+    Format fmtAlbumInfo;\r
+    fmtAlbumInfo.PutStringValue(FORMAT_KEY, FORMAT_GET_ALBUM_INFO);\r
+    (void)albumInfoPlayer_->SetSource(source);\r
+    (void)albumInfoPlayer_->Prepare();\r
+    int32_t ret = albumInfoPlayer_->GetParameter(fmtAlbumInfo);\r
+    if (ret != MEDIA_OK) {\r
+        MEDIA_ERR_LOG("albumInfoPlayer_ GetfmtAlbumInfo failed:%d", ret);\r
+        albumInfo.title = "";\r
+        albumInfo.artist = "";\r
+        albumInfoPlayer_->Reset();\r
+        return;\r
+    }\r
+    std::string value;\r
+    fmtAlbumInfo.GetStringValue(FORMAT_KEY_TITLE, value);\r
+    albumInfo.title = value;\r
+    fmtAlbumInfo.GetStringValue(FORMAT_KEY_ARTIST, value);\r
+    albumInfo.artist = value;\r
+    albumInfoPlayer_->Reset();\r
+    return;\r
+}\r
+} // namespace OHOS
\ No newline at end of file
index 33ae10a..05e3693 100644 (file)
@@ -20,6 +20,12 @@ using namespace::Audio;
 using namespace OHOS::Media;\r
 using OHOS::Media::Player;\r
 \r
+typedef struct AudioPlayerAlbumInfo {\r
+    std::string src;\r
+    std::string title;\r
+    std::string artist;\r
+} AudioPlayerAlbumInfo;\r
+\r
 enum class AudioPlayerStates : int32_t {\r
     AUDIO_PLAYER_IDLE,\r
     AUDIO_PLAYER_ENTERED,\r
@@ -79,6 +85,7 @@ public:
     bool IsPlaying(void);\r
     std::string GetCurrentPlaySource(void);\r
     int32_t GetDuration(int64_t &durationMs);\r
+    void GetAlbumInfo(AudioPlayerAlbumInfo &albumInfo, const char *src);\r
 protected:\r
     void OnPlaybackComplete() override;\r
     void OnError(int32_t errorType, int32_t errorCode) override;\r
@@ -133,6 +140,7 @@ private:
     AudioStreamType streamType_ = AUDIO_STREAM_MUSIC;\r
     static std::shared_ptr<AudioPlayerService> instance_;\r
     shared_ptr<AudioPlayerServiceCallback> callBack_ = nullptr;\r
+    shared_ptr<Player> albumInfoPlayer_ = nullptr;\r
 };\r
 }\r
 #endif
\ No newline at end of file
index 428b8fa..b59e458 100644 (file)
@@ -62,7 +62,11 @@ const uint32_t STREAM_FLAG_EOS = 4;
 const uint32_t STREAM_FLAG_PARTIAL_FRAME = 8;\r
 const uint32_t MAX_ARGC = 5;\r
 #define MEDIA_PATH_MAX 260\r
+#define MEDIA_PATH_KEY_LEN 20\r
 #define MEDIA_MAX_PLAYER_TASK 6\r
+#define DEFAULE_HTTP_1 "http://openaudio.cos.tx.xmcdn.com/group64/M0B/02/30/wKgMaV1whaLAcRGQAE_0uZWMCp8270.mp3"\r
+#define DEFAULE_HTTP_2 "http://cdn.gohudong.com/Public/Hudong/Games/GameShake2019/assets/audio/game_running.mp3"\r
+\r
 #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))\r
 \r
 #define IS_OK(ret) \\r
@@ -184,11 +188,21 @@ typedef enum {
     MEDIA_AUDIO_MAX_PLAY_ID,\r
 } PlaySampleCmd;\r
 \r
+typedef struct {\r
+    char key[MEDIA_PATH_KEY_LEN];\r
+    char value[MEDIA_PATH_MAX];\r
+} PlaySampleHttpPath;\r
+\r
 typedef struct {\r
     PlaySampleCmd cmdId;\r
     char cmd[64];\r
 } PlaySampleType;\r
 \r
+static PlaySampleHttpPath g_httpPathlist[] = {\r
+    { "http1://", DEFAULE_HTTP_1 },\r
+    { "http2://", DEFAULE_HTTP_2 },\r
+};\r
+\r
 PlaySampleType g_funlist[] = {\r
     { MEDIA_AUDIO_PLAY_PAUSE, "pause" },\r
     { MEDIA_AUDIO_PLAY_RESUME, "resume" },\r
@@ -854,7 +868,7 @@ static int32_t PlaySampleAlbuminfo(SampleParam *sampleParam)
     }\r
 \r
     Format albumInfo;\r
-    albumInfo.PutStringValue(FORMAT_KEY, FORMAT_GET_ABLUM_INFO);\r
+    albumInfo.PutStringValue(FORMAT_KEY, FORMAT_GET_ALBUM_INFO);\r
     int32_t ret = sampleParam->player->GetParameter(albumInfo);\r
     if (ret != 0) {\r
         MEDIA_ERR_LOG("GetAlbuminfo failed:%d", ret);\r
@@ -1313,6 +1327,27 @@ static void StorePlayerTaskInfo(SampleParam *sampleParam)
     MediaMutexUnLock(g_playerTaskMutex);\r
 }\r
 \r
+static void GetRealPath(SampleParam *sampleParam, int32_t argc, const char **argv)\r
+{\r
+    bool isFound = false;\r
+    for (uint32_t i = 0; i < ARRAY_SIZE(g_httpPathlist); i++) {\r
+        bool matchCmd = (strncasecmp(argv[1], g_httpPathlist[i].key, strlen(g_httpPathlist[i].key)) == 0);\r
+        if (matchCmd) {\r
+            if (memcpy_s(sampleParam->filePath, MEDIA_PATH_MAX, g_httpPathlist[i].value,\r
+                strlen(g_httpPathlist[i].value) + 1) != EOK) {\r
+                MEDIA_ERR_LOG("memcpy_s failed");\r
+            }\r
+            isFound = true;\r
+            break;\r
+        }\r
+    }\r
+    if (!isFound) {\r
+        if (memcpy_s(sampleParam->filePath, MEDIA_PATH_MAX, argv[0x1], strlen(argv[0x1]) + 1) != EOK) {\r
+            MEDIA_ERR_LOG("memcpy_s failed");\r
+        }\r
+    }\r
+}\r
+\r
 int32_t PlayerSample(int32_t argc, const char** argv)\r
 {\r
     SourceType sourceType = SourceType::SOURCE_TYPE_URI;\r
@@ -1343,9 +1378,7 @@ int32_t PlayerSample(int32_t argc, const char** argv)
         }\r
 \r
         if (strlen(argv[0x1]) < PATH_MAX) {\r
-            if (memcpy_s(g_sampleParam->filePath, MEDIA_PATH_MAX, argv[0x1], strlen(argv[0x1]) + 1) != EOK) {\r
-                MEDIA_ERR_LOG("memcpy_s failed");\r
-            }\r
+            GetRealPath(g_sampleParam, argc, argv);\r
         } else {\r
             MEDIA_ERR_LOG("input path too long");\r
             goto FREE;\r
@@ -1403,9 +1436,7 @@ int32_t TonePlayerSampleTest(int32_t argc, const char *argv[])
         }\r
 \r
         if (strlen(argv[0x1]) < PATH_MAX) {\r
-            if (memcpy_s(g_tonePlayersampleParam->filePath, MEDIA_PATH_MAX, argv[0x1], strlen(argv[0x1]) + 1) != EOK) {\r
-                MEDIA_ERR_LOG("memcpy_s failed");\r
-            }\r
+            GetRealPath(g_tonePlayersampleParam, argc, argv);\r
         } else {\r
             MEDIA_ERR_LOG("input path too long");\r
             goto FREE;\r
index 192e448..58129e6 100644 (file)
@@ -60,7 +60,7 @@ extern const char *PAUSE_AFTER_PLAY;
 \r
 /** Indicates the albumInfo, which is the type key. */\r
 extern const char *FORMAT_KEY;\r
-extern const char *FORMAT_GET_ABLUM_INFO;\r
+extern const char *FORMAT_GET_ALBUM_INFO;\r
 extern const char *FORMAT_KEY_ALBUM;\r
 extern const char *FORMAT_KEY_TITLE;\r
 extern const char *FORMAT_KEY_ARTIST;\r
index afbe677..e4a2928 100644 (file)
@@ -31,7 +31,7 @@ const char *MIME_AUDIO_PCM = "audio/pcm";
 const char *MIME_AUDIO_RAW = "audio/raw";
 const char *PAUSE_AFTER_PLAY = "pause_after_play";
 const char *FORMAT_KEY = "key";
-const char *FORMAT_GET_ABLUM_INFO = "albuminfo";
+const char *FORMAT_GET_ALBUM_INFO = "albuminfo";
 const char *FORMAT_KEY_ALBUM = "album";
 const char *FORMAT_KEY_TITLE = "title";
 const char *FORMAT_KEY_ARTIST = "artist";
index 39c13db..0b86053 100644 (file)
@@ -4,7 +4,7 @@
 #===============================================================================\r
 set(COMPONENT_NAME "format_hw")\r
 \r
-set(COMPONENT_DIR ${ROOT_DIR}/middleware/services/media/component)\r
+set(COMPONENT_DIR ${ROOT_DIR}/middleware/services/media/component/hmf_demuxer)\r
 if (EXISTS ${COMPONENT_DIR})\r
     add_subdirectory(plugins/hmf_demuxer)\r
     add_subdirectory(plugins/protocol_https)\r
index ce9d5b6..a28da4a 100644 (file)
@@ -84,6 +84,10 @@ static int32_t RawFormatGetDemuxer(RawFormatMember *member, int32_t *score)
     HalHandle demuxer = NULL;
     bool found = false;
     int32_t probeScore = 0;
+    if (strncmp(member->url, "http", strlen("http")) == 0) {
+        MEDIA_HAL_LOGI(MODULE_NAME, "http demuxer not suitable");
+        return MEDIA_HAL_ERR;
+    }
     RawDemuxerManagerInit();
     for (uint32_t i = 0; i < g_rawDemuxerManager.count; i++) {
         if (g_rawDemuxerManager.intf[i] == NULL) {
index 768fcf5..e5ece0a 100644 (file)
@@ -7,7 +7,7 @@ Create: 2022-05-10
 
 set(PROJECT_NAME hal_release)
 
-set(COMPONENT_DIR ${ROOT_DIR}/middleware/services/media/component)
+set(COMPONENT_DIR ${ROOT_DIR}/middleware/services/media/component/hmf_demuxer)
 
 if (EXISTS ${COMPONENT_DIR})
     set(DEPEND_LIBS plugin_demuxer_hmf plugin_protocol_https plugin_demuxer_mjpeg hmf_demuxer)
@@ -15,6 +15,8 @@ endif()
 
 if("MEMORY_MINI" IN_LIST DEFINES)
     set(LIBRARY_OUTPUT_PATH ${BIN_DIR}/${CHIP}/libs/media/${BOARD}_${APPLICATION}/${OS}/mini)
+elseif("SUPPORT_OHOSFWK" IN_LIST DEFINES)
+    set(LIBRARY_OUTPUT_PATH ${BIN_DIR}/${CHIP}/libs/media/${BOARD}_${APPLICATION}/${OS}/js)
 else()
     set(LIBRARY_OUTPUT_PATH ${BIN_DIR}/${CHIP}/libs/media/${BOARD}_${APPLICATION}/${OS}/normal)
 endif()
@@ -25,6 +27,8 @@ endif()
 
 if("MEMORY_MINI" IN_LIST DEFINES)
     set(FORMAT_LIBS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${OS}/format/libs/mini)
+elseif("SUPPORT_OHOSFWK" IN_LIST DEFINES)
+    set(FORMAT_LIBS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${OS}/format/libs/js)
 else()
     set(FORMAT_LIBS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${OS}/format/libs/normal)
 endif()
index 2c1be8b..3ac4924 100644 (file)
Binary files a/code/sdk/middleware/services/media/hal_release/freertos/format/libs/normal/libhmf_demuxer.a and b/code/sdk/middleware/services/media/hal_release/freertos/format/libs/normal/libhmf_demuxer.a differ
index c65149f..64914bc 100644 (file)
Binary files a/code/sdk/middleware/services/media/hal_release/freertos/format/libs/normal/libplugin_demuxer_hmf.a and b/code/sdk/middleware/services/media/hal_release/freertos/format/libs/normal/libplugin_demuxer_hmf.a differ
index c20b183..7702011 100644 (file)
Binary files a/code/sdk/middleware/services/media/hal_release/freertos/format/libs/normal/libplugin_demuxer_mjpeg.a and b/code/sdk/middleware/services/media/hal_release/freertos/format/libs/normal/libplugin_demuxer_mjpeg.a differ
index 62e569f..9430d31 100644 (file)
Binary files a/code/sdk/middleware/services/media/hal_release/freertos/format/libs/normal/libplugin_protocol_https.a and b/code/sdk/middleware/services/media/hal_release/freertos/format/libs/normal/libplugin_protocol_https.a differ
diff --git a/code/sdk/middleware/services/media/hal_release/liteos/format/libs/js/libhmf_demuxer.a b/code/sdk/middleware/services/media/hal_release/liteos/format/libs/js/libhmf_demuxer.a
new file mode 100644 (file)
index 0000000..d86ed97
Binary files /dev/null and b/code/sdk/middleware/services/media/hal_release/liteos/format/libs/js/libhmf_demuxer.a differ
diff --git a/code/sdk/middleware/services/media/hal_release/liteos/format/libs/js/libplugin_demuxer_hmf.a b/code/sdk/middleware/services/media/hal_release/liteos/format/libs/js/libplugin_demuxer_hmf.a
new file mode 100644 (file)
index 0000000..04eaa67
Binary files /dev/null and b/code/sdk/middleware/services/media/hal_release/liteos/format/libs/js/libplugin_demuxer_hmf.a differ
diff --git a/code/sdk/middleware/services/media/hal_release/liteos/format/libs/js/libplugin_demuxer_mjpeg.a b/code/sdk/middleware/services/media/hal_release/liteos/format/libs/js/libplugin_demuxer_mjpeg.a
new file mode 100644 (file)
index 0000000..d2056ed
Binary files /dev/null and b/code/sdk/middleware/services/media/hal_release/liteos/format/libs/js/libplugin_demuxer_mjpeg.a differ
diff --git a/code/sdk/middleware/services/media/hal_release/liteos/format/libs/js/libplugin_protocol_https.a b/code/sdk/middleware/services/media/hal_release/liteos/format/libs/js/libplugin_protocol_https.a
new file mode 100644 (file)
index 0000000..6627224
Binary files /dev/null and b/code/sdk/middleware/services/media/hal_release/liteos/format/libs/js/libplugin_protocol_https.a differ
index 2d37081..690d296 100644 (file)
Binary files a/code/sdk/middleware/services/media/hal_release/liteos/format/libs/mini/libhmf_demuxer.a and b/code/sdk/middleware/services/media/hal_release/liteos/format/libs/mini/libhmf_demuxer.a differ
index 0fcbd5e..8788083 100644 (file)
Binary files a/code/sdk/middleware/services/media/hal_release/liteos/format/libs/mini/libplugin_demuxer_hmf.a and b/code/sdk/middleware/services/media/hal_release/liteos/format/libs/mini/libplugin_demuxer_hmf.a differ
index de69255..c502afa 100644 (file)
Binary files a/code/sdk/middleware/services/media/hal_release/liteos/format/libs/mini/libplugin_demuxer_mjpeg.a and b/code/sdk/middleware/services/media/hal_release/liteos/format/libs/mini/libplugin_demuxer_mjpeg.a differ
index ebb4e70..1dceff9 100644 (file)
Binary files a/code/sdk/middleware/services/media/hal_release/liteos/format/libs/mini/libplugin_protocol_https.a and b/code/sdk/middleware/services/media/hal_release/liteos/format/libs/mini/libplugin_protocol_https.a differ
index e6139b2..e03276f 100644 (file)
Binary files a/code/sdk/middleware/services/media/hal_release/liteos/format/libs/normal/libhmf_demuxer.a and b/code/sdk/middleware/services/media/hal_release/liteos/format/libs/normal/libhmf_demuxer.a differ
index 617e922..206ebc0 100644 (file)
Binary files a/code/sdk/middleware/services/media/hal_release/liteos/format/libs/normal/libplugin_demuxer_hmf.a and b/code/sdk/middleware/services/media/hal_release/liteos/format/libs/normal/libplugin_demuxer_hmf.a differ
index c46ac8c..ab811e9 100644 (file)
Binary files a/code/sdk/middleware/services/media/hal_release/liteos/format/libs/normal/libplugin_demuxer_mjpeg.a and b/code/sdk/middleware/services/media/hal_release/liteos/format/libs/normal/libplugin_demuxer_mjpeg.a differ
index cb4bbb0..bacf646 100644 (file)
Binary files a/code/sdk/middleware/services/media/hal_release/liteos/format/libs/normal/libplugin_protocol_https.a and b/code/sdk/middleware/services/media/hal_release/liteos/format/libs/normal/libplugin_protocol_https.a differ