Skip to content

Commit

Permalink
audio/video: Copy more metas by default in the codec base classes
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
sdroege authored and GStreamer Merge Bot committed Aug 30, 2020
1 parent 4f12ce6 commit 391d09d
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 12 deletions.
16 changes: 13 additions & 3 deletions gst-libs/gst/audio/gstaudiodecoder.c
Expand Up @@ -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
Expand Down
16 changes: 13 additions & 3 deletions gst-libs/gst/audio/gstaudioencoder.c
Expand Up @@ -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
Expand Down
17 changes: 14 additions & 3 deletions gst-libs/gst/video/gstvideodecoder.c
Expand Up @@ -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
Expand Down
17 changes: 14 additions & 3 deletions gst-libs/gst/video/gstvideoencoder.c
Expand Up @@ -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
Expand Down

0 comments on commit 391d09d

Please sign in to comment.