mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-23 10:11:08 +00:00
audio/video: Copy more metas by default in the codec base classes
For audio we copy metas that have no tags at all, or that only have the "audio" and/or "audio-channels" tag. Audio codecs don't change the audio aspect of the stream and in almost all cases don't change the number of channels. They might however change the sample rate (e.g. Opus). Subclasses that change the number of channels will have to override ::transform_meta() accordingly. For video we copy metas that have no tags at all, or that only have the "video" and/or "video-size" and/or "video-orientation" tag. Video codecs don't change the "video" aspect of the stream and in almost all cases don't change the resolution or orientation. Subclasses that rescale or change the orientation will have to override ::transform_meta() accordingly. See https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/576#note_610581 Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/801>
This commit is contained in:
parent
4f12ce6213
commit
391d09dc24
4 changed files with 54 additions and 12 deletions
|
@ -1208,14 +1208,24 @@ gst_audio_decoder_transform_meta_default (GstAudioDecoder *
|
|||
{
|
||||
const GstMetaInfo *info = meta->info;
|
||||
const gchar *const *tags;
|
||||
const gchar *const supported_tags[] = {
|
||||
GST_META_TAG_AUDIO_STR,
|
||||
GST_META_TAG_AUDIO_CHANNELS_STR,
|
||||
NULL,
|
||||
};
|
||||
|
||||
tags = gst_meta_api_type_get_tags (info->api);
|
||||
|
||||
if (!tags || (g_strv_length ((gchar **) tags) == 1
|
||||
&& gst_meta_api_type_has_tag (info->api, META_TAG_AUDIO)))
|
||||
if (!tags)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
while (*tags) {
|
||||
if (!g_strv_contains (supported_tags, *tags))
|
||||
return FALSE;
|
||||
tags++;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
typedef struct
|
||||
|
|
|
@ -670,14 +670,24 @@ gst_audio_encoder_transform_meta_default (GstAudioEncoder *
|
|||
{
|
||||
const GstMetaInfo *info = meta->info;
|
||||
const gchar *const *tags;
|
||||
const gchar *const supported_tags[] = {
|
||||
GST_META_TAG_AUDIO_STR,
|
||||
GST_META_TAG_AUDIO_CHANNELS_STR,
|
||||
NULL,
|
||||
};
|
||||
|
||||
tags = gst_meta_api_type_get_tags (info->api);
|
||||
|
||||
if (!tags || (g_strv_length ((gchar **) tags) == 1
|
||||
&& gst_meta_api_type_has_tag (info->api, META_TAG_AUDIO)))
|
||||
if (!tags)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
while (*tags) {
|
||||
if (!g_strv_contains (supported_tags, *tags))
|
||||
return FALSE;
|
||||
tags++;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
typedef struct
|
||||
|
|
|
@ -3032,14 +3032,25 @@ gst_video_decoder_transform_meta_default (GstVideoDecoder *
|
|||
{
|
||||
const GstMetaInfo *info = meta->info;
|
||||
const gchar *const *tags;
|
||||
const gchar *const supported_tags[] = {
|
||||
GST_META_TAG_VIDEO_STR,
|
||||
GST_META_TAG_VIDEO_ORIENTATION_STR,
|
||||
GST_META_TAG_VIDEO_SIZE_STR,
|
||||
NULL,
|
||||
};
|
||||
|
||||
tags = gst_meta_api_type_get_tags (info->api);
|
||||
|
||||
if (!tags || (g_strv_length ((gchar **) tags) == 1
|
||||
&& gst_meta_api_type_has_tag (info->api, META_TAG_VIDEO)))
|
||||
if (!tags)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
while (*tags) {
|
||||
if (!g_strv_contains (supported_tags, *tags))
|
||||
return FALSE;
|
||||
tags++;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
typedef struct
|
||||
|
|
|
@ -2139,14 +2139,25 @@ gst_video_encoder_transform_meta_default (GstVideoEncoder *
|
|||
{
|
||||
const GstMetaInfo *info = meta->info;
|
||||
const gchar *const *tags;
|
||||
const gchar *const supported_tags[] = {
|
||||
GST_META_TAG_VIDEO_STR,
|
||||
GST_META_TAG_VIDEO_ORIENTATION_STR,
|
||||
GST_META_TAG_VIDEO_SIZE_STR,
|
||||
NULL,
|
||||
};
|
||||
|
||||
tags = gst_meta_api_type_get_tags (info->api);
|
||||
|
||||
if (!tags || (g_strv_length ((gchar **) tags) == 1
|
||||
&& gst_meta_api_type_has_tag (info->api, META_TAG_VIDEO)))
|
||||
if (!tags)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
while (*tags) {
|
||||
if (!g_strv_contains (supported_tags, *tags))
|
||||
return FALSE;
|
||||
tags++;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
typedef struct
|
||||
|
|
Loading…
Reference in a new issue