#define RG_LIMITER_CAPS_TEMPLATE_STRING \
"audio/x-raw, " \
"format = (string) "GST_AUDIO_NE (F32) ", " \
+ "layout = (string) interleaved, " \
"channels = (int) [ 1, MAX ], " \
"rate = (int) [ 1, MAX ]"
caps = gst_caps_new_simple ("audio/x-raw",
"rate", G_TYPE_INT, 44100, "channels", G_TYPE_INT, 1,
- "format", G_TYPE_STRING, GST_AUDIO_NE (F32), NULL);
+ "format", G_TYPE_STRING, GST_AUDIO_NE (F32),
+ "layout", G_TYPE_STRING, "interleaved", NULL);
gst_pad_set_caps (mysrcpad, caps);
gst_caps_unref (caps);
#define RG_VOLUME_CAPS_TEMPLATE_STRING \
"audio/x-raw, " \
"format = (string) "GST_AUDIO_NE (F32) ", " \
+ "layout = (string) interleaved, " \
"channels = (int) [ 1, MAX ], " \
"rate = (int) [ 1, MAX ]"
static gboolean
event_func (GstPad * pad, GstObject * parent, GstEvent * event)
{
+ GST_DEBUG ("received event %p", event);
events = g_list_append (events, event);
return TRUE;
setup_rgvolume (void)
{
GstElement *element;
+ GstCaps *caps;
GST_DEBUG ("setup_rgvolume");
element = gst_check_setup_element ("rgvolume");
gst_pad_set_active (mysrcpad, TRUE);
gst_pad_set_active (mysinkpad, TRUE);
+ caps = gst_caps_from_string ("audio/x-raw, format = F32LE, "
+ "layout = interleaved, rate = 8000, channels = 1");
+ gst_pad_set_caps (mysrcpad, caps);
+ gst_caps_unref (caps);
+
return element;
}
fail_unless (gst_pad_push_event (mysrcpad, ev),
"Pushing newsegment event failed");
+ /* makes caps event */
buf = test_buffer_new (0.0);
gst_buffer_resize (buf, 0, 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 (g_list_length (events) == 2);
fail_unless (events->data == ev);
gst_mini_object_unref ((GstMiniObject *) events->data);
events = g_list_remove (events, ev);
+ ev = events->data;
+ gst_mini_object_unref ((GstMiniObject *) ev);
+ events = g_list_remove (events, ev);
+ fail_unless (g_list_length (events) == 0);
fail_unless (g_list_length (buffers) == 1);
fail_unless (buffers->data == buf);
{
GstEvent *event = gst_event_new_eos ();
+ GST_DEBUG ("events : %d", g_list_length (events));
+
fail_unless (g_list_length (events) == 0);
fail_unless (gst_pad_push_event (mysrcpad, event),
"Pushing EOS event failed");
test_buffer_new (gfloat value)
{
GstBuffer *buf;
- GstCaps *caps;
GstMapInfo map;
gfloat *data;
gint i;
data[i] = value;
gst_buffer_unmap (buf, &map);
- caps = gst_caps_from_string ("audio/x-raw-float, "
- "rate = 8000, channels = 1, endianness = BYTE_ORDER, width = 32");
- gst_pad_set_caps (mysrcpad, caps);
- gst_caps_unref (caps);
ASSERT_BUFFER_REFCOUNT (buf, "buf", 1);
GST_TAG_ARTIST, "Foobar", NULL);
event = gst_event_new_tag (tag_list);
new_event = send_tag_event (element, event);
- /* Expect the element to modify the writable event. */
- fail_unless (event == new_event, "Writable tag event not reused");
gst_event_parse_tag (new_event, &tag_list);
fail_unless (gst_tag_list_get_string (tag_list, GST_TAG_ARTIST, &artist));
fail_unless (g_str_equal (artist, "Foobar"));
GST_TAG_ALBUM_GAIN, -1.54, GST_TAG_ALBUM_PEAK, 0.693415,
GST_TAG_ARTIST, "Foobar", NULL);
event = gst_event_new_tag (tag_list);
- /* Holding an extra ref makes the event unwritable: */
- gst_event_ref (event);
new_event = send_tag_event (element, event);
- fail_unless (event != new_event, "Unwritable tag event reused");
gst_event_parse_tag (new_event, &tag_list);
fail_unless (gst_tag_list_get_string (tag_list, GST_TAG_ARTIST, &artist));
fail_unless (g_str_equal (artist, "Foobar"));
g_free (artist);
- gst_event_unref (event);
gst_event_unref (new_event);
cleanup_rgvolume (element);
"audio/x-raw, " \
" rate = (int) [ 1, MAX ], " \
" channels = (int) [ 1, MAX ], " \
+ " layout = (string) interleaved, " \
" format = (string) { " \
GST_AUDIO_NE(S16) ", " \
GST_AUDIO_NE(S32) ", " \
"audio/x-raw, " \
"rate = (int) 44100, " \
"channels = (int) 1, " \
+ "layout = (string) interleaved, " \
"format = (string) " GST_AUDIO_NE(S16)
#define SPECT_CAPS_STRING_S32 \
"audio/x-raw, " \
"rate = (int) 44100, " \
"channels = (int) 1, " \
+ "layout = (string) interleaved, " \
"format = (string) " GST_AUDIO_NE(S32)
#define SPECT_CAPS_STRING_F32 \
"audio/x-raw, " \
" rate = (int) 44100, " \
" channels = (int) 1, " \
+ " layout = (string) interleaved, " \
" format = (string) " GST_AUDIO_NE(F32)
#define SPECT_CAPS_STRING_F64 \
"audio/x-raw, " \
" rate = (int) 44100, " \
" channels = (int) 1, " \
+ " layout = (string) interleaved, " \
" format = (string) " GST_AUDIO_NE(F64)
#define SPECT_BANDS 256
static GList *
video_crop_get_test_caps (GstElement * videocrop)
{
- const GstCaps *allowed_caps;
+ GstCaps *templ, *allowed_caps;
GstPad *srcpad;
GList *list = NULL;
guint i;
srcpad = gst_element_get_static_pad (videocrop, "src");
fail_unless (srcpad != NULL);
- allowed_caps = gst_pad_get_pad_template_caps (srcpad);
- fail_unless (allowed_caps != NULL);
+ templ = gst_pad_get_pad_template_caps (srcpad);
+ fail_unless (templ != NULL);
+
+ allowed_caps = gst_caps_normalize (templ);
+ gst_caps_unref (templ);
for (i = 0; i < gst_caps_get_size (allowed_caps); ++i) {
GstStructure *new_structure;
gst_structure_remove_field (new_structure, "height");
gst_caps_append_structure (single_caps, new_structure);
+ GST_DEBUG ("have caps %" GST_PTR_FORMAT, single_caps);
/* should be fixed without width/height */
fail_unless (gst_caps_is_fixed (single_caps));
list = g_list_prepend (list, single_caps);
}
+ gst_caps_unref (allowed_caps);
gst_object_unref (srcpad);
return list;
fail_unless (videocrop != NULL, "Failed to create videocrop element");
vcrop_klass = GST_BASE_TRANSFORM_GET_CLASS (videocrop);
- csp = gst_element_factory_make ("ffmpegcolorspace", "csp");
- fail_unless (csp != NULL, "Failed to create ffmpegcolorspace element");
+ csp = gst_element_factory_make ("videoconvert", "csp");
+ fail_unless (csp != NULL, "Failed to create videoconvert element");
csp_klass = GST_BASE_TRANSFORM_GET_CLASS (csp);
caps_list = video_crop_get_test_caps (videocrop);
caps_str = gst_caps_to_string (caps);
GST_INFO ("Testing unit size for %s", caps_str);
- /* skip if ffmpegcolorspace doesn't support these caps
+ /* skip if videoconvert doesn't support these caps
* (only works with gst-plugins-base 0.10.9.1 or later) */
if (!csp_klass->get_unit_size ((GstBaseTransform *) csp, caps, &csp_size)) {
- GST_INFO ("ffmpegcolorspace does not support format %s", caps_str);
+ GST_INFO ("videoconvert does not support format %s", caps_str);
g_free (caps_str);
continue;
}
caps, &vc_size));
fail_unless (vc_size == csp_size,
- "videocrop and ffmpegcolorspace return different unit sizes for "
+ "videocrop and videoconvert return different unit sizes for "
"caps %s: vc_size=%d, csp_size=%d", caps_str, vc_size, csp_size);
g_free (caps_str);
GstVideoInfo info;
GstVideoFrame frame;
/* the exact values we check for come from videotestsrc */
- static const guint yuv_values[] = { 81, 90, 240, 0 };
- static const guint rgb_values[] = { 0xff, 0, 0, 0 };
+ static const guint yuv_values[] = { 81, 90, 240, 255 };
+ static const guint rgb_values[] = { 0xff, 0, 0, 255 };
+ static const guint gray_values[] = { 63, 63, 63, 255 };
const guint *values;
guint i;
+ const GstVideoFormatInfo *finfo;
fail_unless (buf != NULL);
fail_unless (caps != NULL);
fail_unless (gst_video_info_from_caps (&info, caps));
fail_unless (gst_video_frame_map (&frame, &info, buf, GST_MAP_READ));
- if (GST_VIDEO_INFO_IS_YUV (&info))
+ finfo = info.finfo;
+
+
+ if (GST_VIDEO_INFO_FORMAT (&info) == GST_VIDEO_FORMAT_Y800)
+ values = gray_values;
+ else if (GST_VIDEO_INFO_IS_YUV (&info))
values = yuv_values;
+ else if (GST_VIDEO_INFO_IS_GRAY (&info))
+ values = gray_values;
else
values = rgb_values;
+ GST_MEMDUMP ("buffer", GST_VIDEO_FRAME_PLANE_DATA (&frame, 0), 8);
+
for (i = 0; i < GST_VIDEO_FRAME_N_COMPONENTS (&frame); i++) {
guint8 *data = GST_VIDEO_FRAME_COMP_DATA (&frame, i);
- fail_unless_equals_int (data[0], values[i]);
+ GST_DEBUG ("W: %d", GST_VIDEO_FORMAT_INFO_W_SUB (finfo, i));
+ GST_DEBUG ("H: %d", GST_VIDEO_FORMAT_INFO_H_SUB (finfo, i));
+
+ if (GST_VIDEO_FORMAT_INFO_W_SUB (finfo,
+ i) >= GST_VIDEO_FRAME_WIDTH (&frame))
+ continue;
+ if (GST_VIDEO_FORMAT_INFO_H_SUB (finfo,
+ i) >= GST_VIDEO_FRAME_HEIGHT (&frame))
+ continue;
+
+ if (GST_VIDEO_FORMAT_INFO_BITS (finfo) == 8) {
+ fail_unless_equals_int (data[0], values[i]);
+ } else if (GST_VIDEO_FORMAT_INFO_BITS (finfo) == 16) {
+ guint16 pixels, val;
+ gint depth;
+
+ if (GST_VIDEO_FORMAT_INFO_IS_LE (finfo))
+ pixels = GST_READ_UINT16_LE (data);
+ else
+ pixels = GST_READ_UINT16_BE (data);
+
+ depth = GST_VIDEO_FORMAT_INFO_DEPTH (finfo, i);
+ val = pixels >> GST_VIDEO_FORMAT_INFO_SHIFT (finfo, i);
+ val = val & ((1 << depth) - 1);
+
+ GST_DEBUG ("val %08x %d : %d", pixels, i, val);
+ fail_unless_equals_int (val, values[i] >> (8 - depth));
+ } else {
+ }
}
/*
s = gst_caps_get_structure (caps, 0);
fail_unless (s != NULL);
- if (g_strcmp0 (gst_structure_get_name (s), "video/x-raw-gray") == 0) {
- /* videotestsrc does not support this format */
- gst_caps_unref (caps);
- continue;
- }
-
GST_INFO ("testing format: %" GST_PTR_FORMAT, caps);
gst_structure_set (s, "width", G_TYPE_INT, 160,
klass = GST_BASE_TRANSFORM_GET_CLASS (ctx.crop);
fail_unless (klass != NULL);
- caps = gst_caps_new_simple ("video/x-raw-yuv",
+ caps = gst_caps_new_simple ("video/x-raw",
"format", G_TYPE_STRING, "I420",
"framerate", GST_TYPE_FRACTION, 1, 1,
"width", G_TYPE_INT, 200, "height", G_TYPE_INT, 100, NULL);