From: Sangchul Lee Date: Fri, 5 Mar 2021 01:09:23 +0000 (+0900) Subject: webrtc_source: Allow to push media packet of raw format X-Git-Tag: submit/tizen/20210729.023123~118 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=004376cd2a02f3a0dec0e3662e1e791c1918934d;p=platform%2Fcore%2Fapi%2Fwebrtc.git webrtc_source: Allow to push media packet of raw format 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 --- diff --git a/packaging/capi-media-webrtc.spec b/packaging/capi-media-webrtc.spec index c6363436..007f7ad8 100644 --- a/packaging/capi-media-webrtc.spec +++ b/packaging/capi-media-webrtc.spec @@ -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 diff --git a/src/webrtc_source.c b/src/webrtc_source.c index 25a15780..7fef0c0e 100644 --- a/src/webrtc_source.c +++ b/src/webrtc_source.c @@ -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);