*/
#include <gst/check/gstcheck.h>
+#include <gst/audio/audio.h>
#include <math.h>
* then remove references in every test function */
static GstPad *mysrcpad, *mysinkpad;
-#define RG_VOLUME_CAPS_TEMPLATE_STRING \
- "audio/x-raw-float, " \
- "width = (int) 32, " \
- "endianness = (int) BYTE_ORDER, " \
- "channels = (int) [ 1, MAX ], " \
+#define RG_VOLUME_CAPS_TEMPLATE_STRING \
+ "audio/x-raw, " \
+ "format = (string) "GST_AUDIO_NE (F32) ", " \
+ "channels = (int) [ 1, MAX ], " \
"rate = (int) [ 1, MAX ]"
static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE ("sink",
GST_STATIC_CAPS (RG_VOLUME_CAPS_TEMPLATE_STRING)
);
+static GstBuffer *test_buffer_new (gfloat value);
+
/* gstcheck sets up a chain function that appends buffers to a global list.
* This is our equivalent of that for event handling. */
static gboolean
-event_func (GstPad * pad, GstEvent * event)
+event_func (GstPad * pad, GstObject * parent, GstEvent * event)
{
events = g_list_append (events, event);
GST_DEBUG ("setup_rgvolume");
element = gst_check_setup_element ("rgvolume");
- mysrcpad = gst_check_setup_src_pad (element, &srctemplate, NULL);
- mysinkpad = gst_check_setup_sink_pad (element, &sinktemplate, NULL);
+ mysrcpad = gst_check_setup_src_pad (element, &srctemplate);
+ mysinkpad = gst_check_setup_sink_pad (element, &sinktemplate);
/* Capture events, to test tag filtering behavior: */
gst_pad_set_event_function (mysinkpad, event_func);
}
static void
+send_newsegment_and_empty_buffer (void)
+{
+ GstBuffer *buf;
+ GstEvent *ev;
+ GstSegment segment;
+
+ fail_unless (g_list_length (events) == 0);
+
+ gst_segment_init (&segment, GST_FORMAT_TIME);
+ ev = gst_event_new_segment (&segment);
+ fail_unless (gst_pad_push_event (mysrcpad, ev),
+ "Pushing newsegment event failed");
+
+ buf = test_buffer_new (0.0);
+ GST_BUFFER_SIZE (buf) = 0;
+ GST_BUFFER_DURATION (buf) = 0;
+ GST_BUFFER_OFFSET_END (buf) = GST_BUFFER_OFFSET (buf);
+ fail_unless (gst_pad_push (mysrcpad, buf) == GST_FLOW_OK);
+
+ fail_unless (g_list_length (events) == 1);
+ fail_unless (events->data == ev);
+ gst_mini_object_unref ((GstMiniObject *) events->data);
+ events = g_list_remove (events, ev);
+
+ fail_unless (g_list_length (buffers) == 1);
+ fail_unless (buffers->data == buf);
+ gst_mini_object_unref ((GstMiniObject *) buffers->data);
+ buffers = g_list_remove (buffers, buf);
+}
+
+static void
cleanup_rgvolume (GstElement * element)
{
GST_DEBUG ("cleanup_rgvolume");
gint i;
buf = gst_buffer_new_and_alloc (8 * sizeof (gfloat));
- data = (gfloat *) GST_BUFFER_DATA (buf);
+ data = gst_buffer_map (buf, NULL, NULL, GST_MAP_WRITE);
for (i = 0; i < 8; i++)
data[i] = value;
+ gst_buffer_unmap (buf, data, -1);
caps = gst_caps_from_string ("audio/x-raw-float, "
"rate = 8000, channels = 1, endianness = BYTE_ORDER, width = 32");
- gst_buffer_set_caps (buf, caps);
+ gst_pad_set_caps (mysrcpad, caps);
gst_caps_unref (caps);
ASSERT_BUFFER_REFCOUNT (buf, "buf", 1);
fail_unless_result_gain (GstElement * element, gdouble expected_gain)
{
GstBuffer *input_buf, *output_buf;
+ gfloat *data;
gfloat input_sample, output_sample;
gdouble gain, prop_gain;
gboolean is_passthrough, expect_passthrough;
buffers = g_list_remove (buffers, output_buf);
ASSERT_BUFFER_REFCOUNT (output_buf, "output_buf", 1);
- fail_unless_equals_int (GST_BUFFER_SIZE (output_buf), 8 * sizeof (gfloat));
- output_sample = *((gfloat *) GST_BUFFER_DATA (output_buf));
+ fail_unless_equals_int (gst_buffer_get_size (output_buf),
+ 8 * sizeof (gfloat));
+ data = gst_buffer_map (output_buf, NULL, NULL, GST_MAP_READ);
+
+ output_sample = *data;
fail_if (output_sample == 0.0, "First output sample is zero");
for (i = 1; i < 8; i++) {
- gfloat output = ((gfloat *) GST_BUFFER_DATA (output_buf))[i];
-
- fail_unless (output_sample == output, "Output samples not uniform");
+ fail_unless (output_sample == data[i], "Output samples not uniform");
};
+ gst_buffer_unmap (output_buf, data, -1);
gain = 20. * log10 (output_sample / input_sample);
fail_unless (MATCH_GAIN (gain, expected_gain),
set_playing_state (element);
- tag_list = gst_tag_list_new ();
+ send_newsegment_and_empty_buffer ();
+
+ tag_list = gst_tag_list_new_empty ();
gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
GST_TAG_TRACK_GAIN, +4.95, GST_TAG_TRACK_PEAK, 0.59463,
GST_TAG_ALBUM_GAIN, -1.54, GST_TAG_ALBUM_PEAK, 0.693415,
/* Same as above, but with a non-writable event. */
- tag_list = gst_tag_list_new ();
+ tag_list = gst_tag_list_new_empty ();
gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
GST_TAG_TRACK_GAIN, +4.95, GST_TAG_TRACK_PEAK, 0.59463,
GST_TAG_ALBUM_GAIN, -1.54, GST_TAG_ALBUM_PEAK, 0.693415,
"pre-amp", -6.00, "fallback-gain", +1.23, NULL);
set_playing_state (element);
- tag_list = gst_tag_list_new ();
+ send_newsegment_and_empty_buffer ();
+
+ tag_list = gst_tag_list_new_empty ();
gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
GST_TAG_TRACK_GAIN, -3.45, GST_TAG_TRACK_PEAK, 1.0,
GST_TAG_ALBUM_GAIN, +2.09, GST_TAG_ALBUM_PEAK, 1.0, NULL);
g_object_set (element, "album-mode", TRUE, NULL);
- tag_list = gst_tag_list_new ();
+ tag_list = gst_tag_list_new_empty ();
gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
GST_TAG_TRACK_GAIN, -3.45, GST_TAG_TRACK_PEAK, 1.0,
GST_TAG_ALBUM_GAIN, +2.09, GST_TAG_ALBUM_PEAK, 1.0, NULL);
"pre-amp", -6.00, "fallback-gain", -3.00, NULL);
set_playing_state (element);
- tag_list = gst_tag_list_new ();
+ send_newsegment_and_empty_buffer ();
+
+ tag_list = gst_tag_list_new_empty ();
gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
GST_TAG_TRACK_GAIN, +3.5, GST_TAG_TRACK_PEAK, 1.0,
GST_TAG_ALBUM_GAIN, -0.5, GST_TAG_ALBUM_PEAK, 1.0, NULL);
"pre-amp", -6.00, "fallback-gain", +1.23, NULL);
set_playing_state (element);
- tag_list = gst_tag_list_new ();
+ send_newsegment_and_empty_buffer ();
+
+ tag_list = gst_tag_list_new_empty ();
gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
GST_TAG_TRACK_GAIN, +2.11, GST_TAG_TRACK_PEAK, 1.0, NULL);
fail_unless (send_tag_event (element, gst_event_new_tag (tag_list)) == NULL);
"pre-amp", -6.00, "fallback-gain", +1.23, NULL);
set_playing_state (element);
- tag_list = gst_tag_list_new ();
+ send_newsegment_and_empty_buffer ();
+
+ tag_list = gst_tag_list_new_empty ();
gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
GST_TAG_ALBUM_GAIN, +3.73, GST_TAG_ALBUM_PEAK, 1.0, NULL);
fail_unless (send_tag_event (element, gst_event_new_tag (tag_list)) == NULL);
"pre-amp", +0.00, "fallback-gain", +1.23, NULL);
set_playing_state (element);
- tag_list = gst_tag_list_new ();
+ send_newsegment_and_empty_buffer ();
+
+ tag_list = gst_tag_list_new_empty ();
gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
GST_TAG_TRACK_GAIN, +3.50, GST_TAG_TRACK_PEAK, 1.0, NULL);
fail_unless (send_tag_event (element, gst_event_new_tag (tag_list)) == NULL);
send_eos_event (element);
g_object_set (element, "headroom", +2.00, NULL);
- tag_list = gst_tag_list_new ();
+ tag_list = gst_tag_list_new_empty ();
gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
GST_TAG_TRACK_GAIN, +9.18, GST_TAG_TRACK_PEAK, 0.687149, NULL);
fail_unless (send_tag_event (element, gst_event_new_tag (tag_list)) == NULL);
send_eos_event (element);
g_object_set (element, "album-mode", TRUE, NULL);
- tag_list = gst_tag_list_new ();
+ tag_list = gst_tag_list_new_empty ();
gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
GST_TAG_ALBUM_GAIN, +5.50, GST_TAG_ALBUM_PEAK, 1.0, NULL);
fail_unless (send_tag_event (element, gst_event_new_tag (tag_list)) == NULL);
"headroom", +0.00, "pre-amp", +0.00, "fallback-gain", +1.23, NULL);
set_playing_state (element);
- tag_list = gst_tag_list_new ();
+ send_newsegment_and_empty_buffer ();
+
+ tag_list = gst_tag_list_new_empty ();
gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
GST_TAG_TRACK_GAIN, 0.00, GST_TAG_TRACK_PEAK, 0.2,
GST_TAG_REFERENCE_LEVEL, 83., NULL);
/* Same as above, but with album gain. */
- tag_list = gst_tag_list_new ();
+ tag_list = gst_tag_list_new_empty ();
gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
GST_TAG_TRACK_GAIN, 1.23, GST_TAG_TRACK_PEAK, 0.1,
GST_TAG_ALBUM_GAIN, 0.00, GST_TAG_ALBUM_PEAK, 0.2,