The interaudiosrc might take buffers of different sizes from the audio adapter,
so keeping metas consistency would be an issue. So the sink now strips the audio
metas away and the src adds them back (for non-interleaved layouts only) when
taking buffers from the adapter.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5416>
validate.test.h264.x264enc_youtube_bitrate.fullhd_lowframerate
validate.test.h265parse.alternate
validate.test.h265parse.trickmode_predicted.seek_trickmode_predicted
validate.test.h264.x264enc_youtube_bitrate.fullhd_lowframerate
validate.test.h265parse.alternate
validate.test.h265parse.trickmode_predicted.seek_trickmode_predicted
+validate.test.inter.audio-planar
validate.test.interlace.interlace_deinterlace
validate.test.interlace.interlace_deinterlace_alternate
validate.test.matroska.demux_flush_within_cluster.default
validate.test.interlace.interlace_deinterlace
validate.test.interlace.interlace_deinterlace_alternate
validate.test.matroska.demux_flush_within_cluster.default
--- /dev/null
+meta,
+ args = {
+ "audiotestsrc num-buffers=10 ! audio/x-raw,format=S16LE,channels=2,layout=non-interleaved ! interaudiosink interaudiosrc num-buffers=10 ! audioconvert ! audio/x-raw,layout=interleaved,format=S16LE,channels=2 ! queue ! fakeaudiosink",
+ }
guint n, bpf;
guint64 period_time, buffer_time;
guint64 period_samples, buffer_samples;
guint n, bpf;
guint64 period_time, buffer_time;
guint64 period_samples, buffer_samples;
GST_DEBUG_OBJECT (interaudiosink, "render %" G_GSIZE_FORMAT,
gst_buffer_get_size (buffer));
GST_DEBUG_OBJECT (interaudiosink, "render %" G_GSIZE_FORMAT,
gst_buffer_get_size (buffer));
n = gst_adapter_available (interaudiosink->input_adapter);
if (period_samples * bpf > gst_buffer_get_size (buffer) + n) {
n = gst_adapter_available (interaudiosink->input_adapter);
if (period_samples * bpf > gst_buffer_get_size (buffer) + n) {
- gst_adapter_push (interaudiosink->input_adapter, gst_buffer_ref (buffer));
+ GstAudioMeta *audio_meta = NULL;
+
+ tmp = gst_buffer_copy_deep (buffer);
+ audio_meta = gst_buffer_get_audio_meta (tmp);
+ if (audio_meta != NULL)
+ gst_buffer_remove_meta (tmp, GST_META_CAST (audio_meta));
+
+ gst_adapter_push (interaudiosink->input_adapter, tmp);
+ GstAudioMeta *audio_meta = NULL;
if (n > 0) {
tmp = gst_adapter_take_buffer (interaudiosink->input_adapter, n);
gst_adapter_push (interaudiosink->surface->audio_adapter, tmp);
}
if (n > 0) {
tmp = gst_adapter_take_buffer (interaudiosink->input_adapter, n);
gst_adapter_push (interaudiosink->surface->audio_adapter, tmp);
}
- gst_adapter_push (interaudiosink->surface->audio_adapter,
- gst_buffer_ref (buffer));
+ tmp = gst_buffer_copy_deep (buffer);
+ audio_meta = gst_buffer_get_audio_meta (tmp);
+ if (audio_meta != NULL)
+ gst_buffer_remove_meta (tmp, GST_META_CAST (audio_meta));
+ gst_adapter_push (interaudiosink->surface->audio_adapter, tmp);
}
g_mutex_unlock (&interaudiosink->surface->mutex);
}
g_mutex_unlock (&interaudiosink->surface->mutex);