webrtc_source: Allow to push media packet of raw format 74/254574/3
authorSangchul Lee <sc11.lee@samsung.com>
Fri, 5 Mar 2021 01:09:23 +0000 (10:09 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Wed, 10 Mar 2021 04:43:55 +0000 (13:43 +0900)
It is added to check to match the format of pushing packet
with the configured format.

[Version] 0.1.123
[Issue Type] Improvement

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

index c63634367e08ad87fac2372dd585a42bd8d97d0f..007f7ad846b14631f1d1f9e59251c444725ba4d3 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-webrtc
 Summary:    A WebRTC library in Tizen Native API
-Version:    0.1.122
+Version:    0.1.123
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index 25a157804555ebccd1741796c785389962763bf1..7fef0c0ebdc6381caec5e12a0b7178cd644b0bce 100644 (file)
@@ -1393,19 +1393,23 @@ static int __fill_gst_buffer_mapped_data_from_packet(GstBuffer *buffer, media_pa
        return WEBRTC_ERROR_NONE;
 }
 
-static bool __is_valid_encoded_format(media_type_e type, media_format_h format)
+static bool __is_valid_format(media_type_e type, media_format_h conf_format, media_format_h push_format)
 {
-       int ret;
-       media_format_mimetype_e mime_type;
+       int ret = MEDIA_PACKET_ERROR_NONE;
+       media_format_mimetype_e mime_type1;
+       media_format_mimetype_e mime_type2;
 
-       RET_VAL_IF(format == NULL, false, "format is NULL");
+       RET_VAL_IF(conf_format == NULL, false, "conf_format is NULL");
+       RET_VAL_IF(push_format == NULL, false, "push_format is NULL");
 
        if (type == MEDIA_TYPE_AUDIO) {
-               ret = media_format_get_audio_info(format, &mime_type, NULL, NULL, NULL, NULL);
+               ret |= media_format_get_audio_info(conf_format, &mime_type1, NULL, NULL, NULL, NULL);
+               ret |= media_format_get_audio_info(push_format, &mime_type2, NULL, NULL, NULL, NULL);
                RET_VAL_IF(ret != MEDIA_PACKET_ERROR_NONE, false, "failed to media_format_get_audio_info()");
 
        } else if (type == MEDIA_TYPE_VIDEO) {
-               ret = media_format_get_video_info(format, &mime_type, NULL, NULL, NULL, NULL);
+               ret |= media_format_get_video_info(conf_format, &mime_type1, NULL, NULL, NULL, NULL);
+               ret |= media_format_get_video_info(push_format, &mime_type2, NULL, NULL, NULL, NULL);
                RET_VAL_IF(ret != MEDIA_PACKET_ERROR_NONE, false, "failed to media_format_get_video_info()");
 
        } else {
@@ -1413,7 +1417,9 @@ static bool __is_valid_encoded_format(media_type_e type, media_format_h format)
                return false;
        }
 
-       return (mime_type & MEDIA_FORMAT_ENCODED);
+       RET_VAL_IF(mime_type1 != mime_type2, false, "invalid format(0x%x, 0x%x)", mime_type1, mime_type2);
+
+       return true;
 }
 
 int _push_media_packet(webrtc_s *webrtc, unsigned int source_id, media_packet_h packet)
@@ -1452,18 +1458,14 @@ int _push_media_packet(webrtc_s *webrtc, unsigned int source_id, media_packet_h
        RET_VAL_IF(ret != MEDIA_PACKET_ERROR_NONE, WEBRTC_ERROR_INVALID_OPERATION, "failed to media_packet_get_extra()");
        if (buffer) {
                media_format_h format;
-               /* allow only when both media packet and appsrc are for encoded data */
-               if (!__is_valid_encoded_format(source->media_types, source->media_format)) {
-                       LOG_ERROR("media packet source is not for encoded format");
-                       return WEBRTC_ERROR_INVALID_OPERATION;
-               }
+
                ret = media_packet_get_format(packet, &format);
                RET_VAL_IF(ret != MEDIA_PACKET_ERROR_NONE, WEBRTC_ERROR_INVALID_OPERATION, "failed to media_packet_get_format()");
-               media_format_unref(format);
-               if (!__is_valid_encoded_format(source->media_types, format)) {
-                       LOG_ERROR("invalid format of packet");
+               if (!__is_valid_format(source->media_types, source->media_format, format)) {
+                       media_format_unref(format);
                        return WEBRTC_ERROR_INVALID_OPERATION;
                }
+               media_format_unref(format);
 
                /* FIXME: need more API to check if it is valid gstreamer buffer. */
                LOG_DEBUG("external gst buffer[%p]", buffer);