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 {
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)
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);