From 8f6db087aa4d1eb766f4557f8eba7bfa30ce1de1 Mon Sep 17 00:00:00 2001 From: Chad Hanna <chad.hanna@ligo.org> Date: Sat, 25 Aug 2018 20:07:12 -0700 Subject: [PATCH] gstlal_interpolator.c: fix caps negotiation bug, add debugging statements and some general cleanup of warnings --- gstlal-ugly/gst/lal/gstlal_interpolator.c | 32 +++++++++++++---------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/gstlal-ugly/gst/lal/gstlal_interpolator.c b/gstlal-ugly/gst/lal/gstlal_interpolator.c index 313ae58b4e..7c46dd2af0 100644 --- a/gstlal-ugly/gst/lal/gstlal_interpolator.c +++ b/gstlal-ugly/gst/lal/gstlal_interpolator.c @@ -514,13 +514,14 @@ static GstCaps* transform_caps (GstBaseTransform *trans, GstPadDirection directi * ratios. */ - GstStructure *capsstruct; gint channels; - capsstruct = gst_caps_get_structure (caps, 0); + GstAudioInfo info; char capsstr[256] = {0}; - if (direction == GST_PAD_SINK && gst_structure_get_int (capsstruct, "channels", &channels)) { - sprintf(capsstr, "audio/x-raw, format= (string) {" GST_AUDIO_NE(F32) ", " GST_AUDIO_NE(F64) "}, rate = (int) {4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768}, channels = (int) %d", channels); + if (direction == GST_PAD_SINK && gst_caps_is_fixed(caps)) { + gst_audio_info_from_caps(&info, caps); + channels = GST_AUDIO_INFO_CHANNELS(&info); + sprintf(capsstr, "audio/x-raw, format= (string) %s, rate = (int) {4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768}, channels = (int) %d", GST_AUDIO_INFO_NAME(&info), channels); return gst_caps_from_string(capsstr); } @@ -544,8 +545,7 @@ static gboolean set_caps (GstBaseTransform * base, GstCaps * incaps, GstCaps * o g_return_val_if_fail(gst_structure_get_int (outstruct, "channels", &outchannels), FALSE); g_return_val_if_fail(gst_structure_get_int (outstruct, "rate", &outrate), FALSE); - GST_CAT_INFO(GST_CAT_DEFAULT, "set caps"); - GST_CAT_INFO(GST_CAT_DEFAULT, "in channels %d in rate %d out channels %d out rate %d", inchannels, inrate, outchannels, outrate); + GST_INFO_OBJECT(element, "in channels %d in rate %d out channels %d out rate %d", inchannels, inrate, outchannels, outrate); g_return_val_if_fail(inchannels == outchannels, FALSE); @@ -566,12 +566,12 @@ static gboolean set_caps (GstBaseTransform * base, GstCaps * incaps, GstCaps * o if (element->kernel32) { gsl_vector_float_free(element->kernel32[0]); - for (guint i = 1; i < element->outrate / element->inrate; i++) + for (int i = 1; i < element->outrate / element->inrate; i++) gsl_vector_float_free(element->kernel32[i]); } if (element->kernel64) { gsl_vector_free(element->kernel64[0]); - for (guint i = 1; i < element->outrate / element->inrate; i++) + for (int i = 1; i < element->outrate / element->inrate; i++) gsl_vector_free(element->kernel64[i]); } // Upsampling @@ -612,7 +612,7 @@ static gboolean set_caps (GstBaseTransform * base, GstCaps * incaps, GstCaps * o element->blocksampsin = element->blockstridein + kernel_length(element) - 1; element->blocksampsout = element->blocksampsin * element->outrate / element->inrate; } - GST_INFO_OBJECT(element, "blocksampsin %d, blocksampsout %d, blockstridein %d, blockstrideout %d", element->blocksampsin, element->blocksampsout, element->blockstridein, element->blockstrideout); + GST_INFO_OBJECT(element, "blocksampsin %d, blocksampsout %d, blockstridein %d, blockstrideout %d unit size %d width %d", element->blocksampsin, element->blocksampsout, element->blockstridein, element->blockstrideout, (int) element->unitsize, element->width); if (element->workspace32) gsl_matrix_float_free(element->workspace32); @@ -859,7 +859,7 @@ static GstFlowReturn transform(GstBaseTransform *trans, GstBuffer *inbuf, GstBuf GST_INFO_OBJECT(element, "%s input_buffer %p spans %" GST_BUFFER_BOUNDARIES_FORMAT, GST_BUFFER_FLAG_IS_SET(inbuf, GST_BUFFER_FLAG_DISCONT) ? "+discont" : "", inbuf, GST_BUFFER_BOUNDARIES_ARGS(inbuf)); /* FIXME- clean up this debug statement */ - /* GST_INFO_OBJECT(element, "pushing %d (bytes) %d (samples) sample buffer into adapter with size %d (samples)", GST_BUFFER_SIZE(inbuf), GST_BUFFER_SIZE(inbuf) / element->unitsize, get_available_samples(element));*/ + GST_INFO_OBJECT(element, "pushing %d (bytes) %d (samples) sample buffer into adapter with size %d (samples) offset %d offset end %d: unitsize %d adapter->unit-size %d", (int) gst_buffer_get_size(inbuf), (int) gst_buffer_get_size(inbuf) / (int) element->unitsize, (int) get_available_samples(element), (int) GST_BUFFER_OFFSET(inbuf), (int) GST_BUFFER_OFFSET_END(inbuf), (int) element->unitsize, (int) element->adapter->unit_size); gst_buffer_ref(inbuf); /* don't let calling code free buffer */ gst_audioadapter_push(element->adapter, inbuf); @@ -911,8 +911,10 @@ static GstFlowReturn transform(GstBaseTransform *trans, GstBuffer *inbuf, GstBuf else gst_audioadapter_flush_samples(element->adapter, element->blockstridein - element->half_length * element->inrate / element->outrate); } - else + else { + GST_INFO_OBJECT(element, "Flushing %d samples : processed %d samples : output length %d samples", element->blockstridein, processed, output_length); gst_audioadapter_flush_samples(element->adapter, element->blockstridein); + } output += element->blockstrideout * element->channels; processed += element->blockstrideout; } @@ -956,8 +958,10 @@ static GstFlowReturn transform(GstBaseTransform *trans, GstBuffer *inbuf, GstBuf else gst_audioadapter_flush_samples(element->adapter, element->blockstridein - element->half_length * element->inrate / element->outrate); } - else + else { + GST_INFO_OBJECT(element, "Flushing %d samples : processed %d samples : output length %d samples", element->blockstridein, processed, output_length); gst_audioadapter_flush_samples(element->adapter, element->blockstridein); + } output += element->blockstrideout * element->channels; processed += element->blockstrideout; } @@ -979,10 +983,10 @@ static void finalize(GObject *object) */ gsl_vector_float_free(element->kernel32[0]); - for (guint i = 1; i < element->outrate / element->inrate; i++) + for (int i = 1; i < element->outrate / element->inrate; i++) gsl_vector_float_free(element->kernel32[i]); gsl_vector_free(element->kernel64[0]); - for (guint i = 1; i < element->outrate / element->inrate; i++) + for (int i = 1; i < element->outrate / element->inrate; i++) gsl_vector_free(element->kernel64[i]); gsl_matrix_float_free(element->workspace32); gsl_matrix_free(element->workspace64); -- GitLab