webrtc_ini: Add support for audio/video codec list 85/275785/6
authorSangchul Lee <sc11.lee@samsung.com>
Tue, 31 May 2022 12:54:05 +0000 (21:54 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Thu, 9 Jun 2022 15:43:40 +0000 (00:43 +0900)
'video codec' item is replaced with 'video codecs'.
'audio codec' item is replaced with 'audio codecs'.

[Version] 0.3.123
[Issue Type] New feature

Change-Id: I27f90b44444cd1b9f18c12778708f4637b26d09d
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
include/webrtc_private.h
packaging/capi-media-webrtc.spec
src/webrtc_ini.c
src/webrtc_source.c

index a68716f04c72a76aace72a03131736925b77bb63..b02c6f6c3ae4768bf55557883cbd6fb1b57d4d8a 100644 (file)
@@ -308,7 +308,7 @@ typedef struct _ini_item_media_source_s {
        int v_width;
        int v_height;
        int v_framerate;
-       const char *v_codec;
+       GStrv v_codecs;
        const char *v_hw_encoder_element;
        bool v_drc_support;
        bool v_encoded_fmt_support;
@@ -316,7 +316,7 @@ typedef struct _ini_item_media_source_s {
        const char *a_raw_format;
        int a_samplerate;
        int a_channels;
-       const char *a_codec;
+       GStrv a_codecs;
        const char *a_hw_encoder_element;
        /* Forward Error Correction */
        /* ULPFEC */
index 126d61f34b51dbacca5d7d79244aa25ae808f4b0..94b571b1e68dc187bfb3508ab741db4c42d67c44 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-webrtc
 Summary:    A WebRTC library in Tizen Native API
-Version:    0.3.122
+Version:    0.3.123
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index 00a0ba3315c282a05208e4ef14f235f26039ad4a..6458c9690cbfc8e7c90902f10cdc497ff72a2279 100644 (file)
 #define INI_ITEM_VIDEO_FRAMERATE           "video framerate"
 #define INI_ITEM_VIDEO_DRC_SUPPORT         "video drc support"             /* source element supports dynamic resolution change */
 #define INI_ITEM_VIDEO_ENCODED_FMT_SUPPORT "video encoded format support"  /* source element supports encoded format */
-#define INI_ITEM_VIDEO_CODEC               "video codec"
+#define INI_ITEM_VIDEO_CODECS              "video codecs"
 #define INI_ITEM_VIDEO_HW_ENCODER_ELEMENT  "video hw encoder element"
 #define INI_ITEM_AUDIO_RAW_FORMAT          "audio raw format"
 #define INI_ITEM_AUDIO_SAMPLERATE          "audio samplerate"
 #define INI_ITEM_AUDIO_CHANNELS            "audio channels"
-#define INI_ITEM_AUDIO_CODEC               "audio codec"
+#define INI_ITEM_AUDIO_CODECS              "audio codecs"
 #define INI_ITEM_AUDIO_HW_ENCODER_ELEMENT  "audio hw encoder element"
 #define INI_ITEM_USE_ULPFEC_RED            "use ulpfec red"
 #define INI_ITEM_FEC_PERCENTAGE            "fec percentage"
@@ -194,12 +194,12 @@ static void __dump_items_of_source(ini_item_media_source_s *source)
        __dump_item(INI_ITEM_VIDEO_FRAMERATE, INI_ITEM_TYPE_INT, &source->v_framerate);
        __dump_item(INI_ITEM_VIDEO_DRC_SUPPORT, INI_ITEM_TYPE_BOOL, &source->v_drc_support);
        __dump_item(INI_ITEM_VIDEO_ENCODED_FMT_SUPPORT, INI_ITEM_TYPE_BOOL, &source->v_encoded_fmt_support);
-       __dump_item(INI_ITEM_VIDEO_CODEC, INI_ITEM_TYPE_STRING, (void *)source->v_codec);
+       __dump_item(INI_ITEM_VIDEO_CODECS, INI_ITEM_TYPE_STRINGS, (void *)source->v_codecs);
        __dump_item(INI_ITEM_VIDEO_HW_ENCODER_ELEMENT, INI_ITEM_TYPE_STRING, (void *)source->v_hw_encoder_element);
        __dump_item(INI_ITEM_AUDIO_RAW_FORMAT, INI_ITEM_TYPE_STRING, (void *)source->a_raw_format);
        __dump_item(INI_ITEM_AUDIO_SAMPLERATE, INI_ITEM_TYPE_INT, &source->a_samplerate);
        __dump_item(INI_ITEM_AUDIO_CHANNELS, INI_ITEM_TYPE_INT, &source->a_channels);
-       __dump_item(INI_ITEM_AUDIO_CODEC, INI_ITEM_TYPE_STRING, (void *)source->a_codec);
+       __dump_item(INI_ITEM_AUDIO_CODECS, INI_ITEM_TYPE_STRINGS, (void *)source->a_codecs);
        __dump_item(INI_ITEM_AUDIO_HW_ENCODER_ELEMENT, INI_ITEM_TYPE_STRING, (void *)source->a_hw_encoder_element);
        __dump_item(INI_ITEM_USE_ULPFEC_RED, INI_ITEM_TYPE_BOOL, &source->use_ulpfec_red);
        __dump_item(INI_ITEM_FEC_PERCENTAGE, INI_ITEM_TYPE_INT, &source->fec_percentage);
@@ -207,10 +207,10 @@ static void __dump_items_of_source(ini_item_media_source_s *source)
        __dump_item(INI_ITEM_PACKET_LOSS_PERCENTAGE, INI_ITEM_TYPE_INT, &source->packet_loss_percentage);
 }
 
-static bool __is_vpx(const char *v_codec)
+static bool __is_vpx(const gchar * const* v_codecs)
 {
-       return (!g_strcmp0(v_codec, "vp8") || !g_strcmp0(v_codec, "vp9") ||
-                       !g_strcmp0(v_codec, "VP8") || !g_strcmp0(v_codec, "VP9"));
+       return (g_strv_contains(v_codecs, "vp8") || g_strv_contains(v_codecs, "vp9") ||
+                       g_strv_contains(v_codecs, "VP8") || g_strv_contains(v_codecs, "VP9"));
 }
 
 static void __dump_ini(webrtc_ini_s *ini)
@@ -429,8 +429,7 @@ static void __apply_media_source_setting(webrtc_ini_s *ini, ini_item_media_sourc
                        is_default ? DEFAULT_VIDEO_DRC_SUPPORT : ini->media_source.v_drc_support);
        source->v_encoded_fmt_support = __ini_get_boolean(ini->dict, category, INI_ITEM_VIDEO_ENCODED_FMT_SUPPORT,
                        is_default ? DEFAULT_VIDEO_ENCODED_FMT_SUPPORT : ini->media_source.v_encoded_fmt_support);
-       source->v_codec = __ini_get_string(ini->dict, category, INI_ITEM_VIDEO_CODEC,
-                       is_default ? DEFAULT_VIDEO_CODEC : ini->media_source.v_codec);
+       __ini_read_list(ini->dict, category, INI_ITEM_VIDEO_CODECS, &source->v_codecs, is_default ? NULL : ini->media_source.v_codecs);
        source->v_hw_encoder_element = __ini_get_string(ini->dict, category, INI_ITEM_VIDEO_HW_ENCODER_ELEMENT,
                        is_default ? NULL : ini->media_source.v_hw_encoder_element);
        source->a_raw_format = __ini_get_string(ini->dict, category, INI_ITEM_AUDIO_RAW_FORMAT,
@@ -439,8 +438,7 @@ static void __apply_media_source_setting(webrtc_ini_s *ini, ini_item_media_sourc
                        is_default ? DEFAULT_AUDIO_SAMPLERATE : ini->media_source.a_samplerate);
        source->a_channels = __ini_get_int(ini->dict, category, INI_ITEM_AUDIO_CHANNELS,
                        is_default ? DEFAULT_AUDIO_CHANNELS : ini->media_source.a_channels);
-       source->a_codec = __ini_get_string(ini->dict, category, INI_ITEM_AUDIO_CODEC,
-                       is_default ? DEFAULT_AUDIO_CODEC : ini->media_source.a_codec);
+       __ini_read_list(ini->dict, category, INI_ITEM_AUDIO_CODECS, &source->a_codecs, is_default ? NULL : ini->media_source.a_codecs);
        source->a_hw_encoder_element = __ini_get_string(ini->dict, category, INI_ITEM_AUDIO_HW_ENCODER_ELEMENT,
                        is_default ? NULL : ini->media_source.a_hw_encoder_element);
        source->use_ulpfec_red = __ini_get_boolean(ini->dict, category, INI_ITEM_USE_ULPFEC_RED,
@@ -535,7 +533,7 @@ void _load_ini(webrtc_s *webrtc)
        ini->resource_acquisition.video_overlay = __ini_get_boolean(ini->dict, INI_CATEGORY_RESOURCE_ACQUISITION,
                INI_ITEM_RESOURCE_VIDEO_OVERLAY, DEFAULT_RESOURCE_VIDEO_OVERLAY_REQUIRED);
 
-       if (__is_vpx(ini->media_source.v_codec))
+       if (__is_vpx((const gchar * const*)ini->media_source.v_codecs))
                __apply_vpxenc_params_setting(ini, &ini->vpxenc_params, INI_CATEGORY_VPXENC_PARAMS);
 
        __dump_ini(ini);
index 15add739e955ce8d582c63f01793915cd651cb1b..6fc850d640b1c414d5b64a5f9a4e7045fac514cc 100644 (file)
@@ -507,12 +507,17 @@ static GstCaps *__make_default_encoded_caps(webrtc_gst_slot_s *source, webrtc_in
        if (ini_source == NULL)
                ini_source = &ini->media_source;
 
+       if (source->media_types == MEDIA_TYPE_AUDIO)
+               RET_VAL_IF(ini_source->a_codecs == NULL, NULL, "a_codecs is NULL");
+       else if (source->media_types == MEDIA_TYPE_VIDEO)
+               RET_VAL_IF(ini_source->v_codecs == NULL, NULL, "v_codecs is NULL");
+
        switch (source->type) {
        case WEBRTC_MEDIA_SOURCE_TYPE_VIDEOTEST:
        case WEBRTC_MEDIA_SOURCE_TYPE_CAMERA:
        case WEBRTC_MEDIA_SOURCE_TYPE_SCREEN:
        case WEBRTC_MEDIA_SOURCE_TYPE_CUSTOM_VIDEO:
-               _media_type = __get_video_media_type(ini_source->v_codec);
+               _media_type = __get_video_media_type(ini_source->v_codecs[0]);
                RET_VAL_IF(_media_type == NULL, NULL, "_media_type is NULL");
 
                source->video_info.width = source->video_info.width > 0 ? source->video_info.width : ini_source->v_width;
@@ -525,18 +530,18 @@ static GstCaps *__make_default_encoded_caps(webrtc_gst_slot_s *source, webrtc_in
        case WEBRTC_MEDIA_SOURCE_TYPE_AUDIOTEST:
        case WEBRTC_MEDIA_SOURCE_TYPE_MIC:
        case WEBRTC_MEDIA_SOURCE_TYPE_CUSTOM_AUDIO:
-               _media_type = __get_audio_media_type(ini_source->a_codec);
+               _media_type = __get_audio_media_type(ini_source->a_codecs[0]);
                RET_VAL_IF(_media_type == NULL, NULL, "_media_type is NULL");
                caps = __get_caps_from_encoded_audio_media_type(_media_type, ini_source->a_channels, ini_source->a_samplerate);
                break;
 
        case WEBRTC_MEDIA_SOURCE_TYPE_MEDIA_PACKET:
                if (source->media_types == MEDIA_TYPE_AUDIO) {
-                       _media_type = __get_audio_media_type(ini_source->a_codec);
+                       _media_type = __get_audio_media_type(ini_source->a_codecs[0]);
                        RET_VAL_IF(_media_type == NULL, NULL, "_media_type is NULL");
                        caps = __get_caps_from_encoded_audio_media_type(_media_type, ini_source->a_channels, ini_source->a_samplerate);
                } else if (source->media_types == MEDIA_TYPE_VIDEO) {
-                       _media_type = __get_video_media_type(ini_source->v_codec);
+                       _media_type = __get_video_media_type(ini_source->v_codecs[0]);
                        RET_VAL_IF(_media_type == NULL, NULL, "_media_type is NULL");
                        caps = __get_caps_from_encoded_video_media_type(_media_type, ini_source->v_width, ini_source->v_height);
                } else {