mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-09-08 13:18:52 +00:00
gst_buffer_take_memory -> gst_buffer_insert_memory because insert is what the method does. Make all methods deal with ranges so that we can replace, merge, remove and map a certain subset of the memory in a buffer. With the new methods we can make some code nicer and reuse more code. Being able to deal with a subset of the buffer memory allows us to optimize more cases later (most notably RTP headers and payload that could be in different memory objects). Make some more convenient macros that call the more generic range methods.
123 lines
3.6 KiB
C
123 lines
3.6 KiB
C
/* GStreamer
|
|
*
|
|
* unit test for typefind helper
|
|
*
|
|
* Copyright (C) 2006 Tim-Philipp Müller <tim centricular net>
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Library General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Library General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Library General Public
|
|
* License along with this library; if not, write to the
|
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
* Boston, MA 02111-1307, USA.
|
|
*/
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include "config.h"
|
|
#endif
|
|
|
|
#include <gst/check/gstcheck.h>
|
|
|
|
#include <gst/base/gsttypefindhelper.h>
|
|
|
|
static const guint8 vorbisid[30] = { 0x01, 0x76, 0x6f, 0x72, 0x62, 0x69, 0x73,
|
|
0x00, 0x00, 0x00, 0x00, 0x02, 0x44, 0xac, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
0x00, 0x03, 0xf4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x01
|
|
};
|
|
|
|
static void foobar_typefind (GstTypeFind * tf, gpointer unused);
|
|
|
|
static GstStaticCaps foobar_caps = GST_STATIC_CAPS ("foo/x-bar");
|
|
|
|
#define FOOBAR_CAPS (gst_static_caps_get (&foobar_caps))
|
|
|
|
/* make sure the entire data in the buffer is available for peeking */
|
|
GST_START_TEST (test_buffer_range)
|
|
{
|
|
GstStructure *s;
|
|
GstBuffer *buf;
|
|
GstCaps *caps;
|
|
|
|
fail_unless (gst_type_find_register (NULL, "foo/x-bar",
|
|
GST_RANK_PRIMARY + 50, foobar_typefind, "foobar",
|
|
FOOBAR_CAPS, NULL, NULL));
|
|
|
|
buf = gst_buffer_new ();
|
|
fail_unless (buf != NULL);
|
|
|
|
gst_buffer_insert_memory (buf, -1,
|
|
gst_memory_new_wrapped (GST_MEMORY_FLAG_READONLY,
|
|
(gpointer) vorbisid, 30, 0, 30, NULL, NULL));
|
|
|
|
caps = gst_type_find_helper_for_buffer (NULL, buf, NULL);
|
|
fail_unless (caps != NULL);
|
|
fail_unless (GST_CAPS_IS_SIMPLE (caps));
|
|
fail_unless (gst_caps_is_fixed (caps));
|
|
|
|
s = gst_caps_get_structure (caps, 0);
|
|
fail_unless (s != NULL);
|
|
fail_unless (gst_structure_has_name (s, "foo/x-bar"));
|
|
|
|
gst_caps_unref (caps);
|
|
gst_buffer_unref (buf);
|
|
}
|
|
|
|
GST_END_TEST;
|
|
|
|
static Suite *
|
|
gst_typefindhelper_suite (void)
|
|
{
|
|
Suite *s = suite_create ("typefindhelper");
|
|
TCase *tc_chain = tcase_create ("general");
|
|
|
|
suite_add_tcase (s, tc_chain);
|
|
tcase_add_test (tc_chain, test_buffer_range);
|
|
|
|
return s;
|
|
}
|
|
|
|
GST_CHECK_MAIN (gst_typefindhelper);
|
|
|
|
static void
|
|
foobar_typefind (GstTypeFind * tf, gpointer unused)
|
|
{
|
|
const guint8 *data;
|
|
|
|
data = gst_type_find_peek (tf, 0, 10);
|
|
fail_unless (data != NULL);
|
|
fail_unless (memcmp (data, vorbisid, 10) == 0);
|
|
|
|
data = gst_type_find_peek (tf, 0, 20);
|
|
fail_unless (data != NULL);
|
|
fail_unless (memcmp (data, vorbisid, 20) == 0);
|
|
|
|
data = gst_type_find_peek (tf, 0, 30);
|
|
fail_unless (data != NULL);
|
|
fail_unless (memcmp (data, vorbisid, 30) == 0);
|
|
|
|
fail_unless (gst_type_find_peek (tf, 0, 31) == NULL);
|
|
fail_unless (gst_type_find_peek (tf, 1, 30) == NULL);
|
|
fail_unless (gst_type_find_peek (tf, 25, 6) == NULL);
|
|
|
|
data = gst_type_find_peek (tf, 1, 29);
|
|
fail_unless (data != NULL);
|
|
fail_unless (memcmp (data, vorbisid + 1, 29) == 0);
|
|
|
|
data = gst_type_find_peek (tf, 25, 4);
|
|
fail_unless (data != NULL);
|
|
fail_unless (memcmp (data, vorbisid + 25, 4) == 0);
|
|
|
|
fail_unless (gst_type_find_peek (tf, -1, 29) == NULL);
|
|
fail_unless (gst_type_find_peek (tf, -1, 1) == NULL);
|
|
fail_unless (gst_type_find_peek (tf, -1, 0) == NULL);
|
|
|
|
gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, FOOBAR_CAPS);
|
|
}
|