summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier CrĂȘte <olivier.crete@collabora.com>2012-09-11 19:36:24 -0400
committerOlivier CrĂȘte <olivier.crete@collabora.com>2012-09-11 19:36:24 -0400
commit1826c126bf05163446d7da73bfbc4f9e21fd7f1f (patch)
treef6a9191f93fb9073b349352c078d6b6fc533d3e0
parentc2c6ef1697fdfd09d5672ac1ad3a45802727f4fd (diff)
jpegparse: Finish port to 1.0 API
-rw-r--r--configure.ac2
-rw-r--r--gst/jpegformat/gstjifmux.c65
-rw-r--r--gst/jpegformat/gstjpegparse.c79
-rw-r--r--tests/check/elements/jpegparse.c2
4 files changed, 64 insertions, 84 deletions
diff --git a/configure.ac b/configure.ac
index 4b3ab0371..ccadd5d63 100644
--- a/configure.ac
+++ b/configure.ac
@@ -314,7 +314,7 @@ GST_PLUGINS_NONPORTED=" aiff \
cdxaparse \
dccp faceoverlay \
fieldanalysis freeverb freeze frei0r \
- hdvparse inter ivfparse jpegformat jp2kdecimator \
+ hdvparse inter ivfparse jp2kdecimator \
kate liveadder librfb \
mpegpsmux mve mxf mythtv nsf nuvdemux \
patchdetect pnm real \
diff --git a/gst/jpegformat/gstjifmux.c b/gst/jpegformat/gstjifmux.c
index 9329f28ff..4a59388ad 100644
--- a/gst/jpegformat/gstjifmux.c
+++ b/gst/jpegformat/gstjifmux.c
@@ -108,9 +108,11 @@ struct _GstJifMuxPrivate
static void gst_jif_mux_finalize (GObject * object);
static void gst_jif_mux_reset (GstJifMux * self);
-static gboolean gst_jif_mux_sink_setcaps (GstPad * pad, GstCaps * caps);
-static gboolean gst_jif_mux_sink_event (GstPad * pad, GstEvent * event);
-static GstFlowReturn gst_jif_mux_chain (GstPad * pad, GstBuffer * buffer);
+static gboolean gst_jif_mux_sink_setcaps (GstJifMux * self, GstCaps * caps);
+static gboolean gst_jif_mux_sink_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
+static GstFlowReturn gst_jif_mux_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buffer);
static GstStateChangeReturn gst_jif_mux_change_state (GstElement * element,
GstStateChange transition);
@@ -180,15 +182,14 @@ gst_jif_mux_finalize (GObject * object)
}
static gboolean
-gst_jif_mux_sink_setcaps (GstPad * pad, GstCaps * caps)
+gst_jif_mux_sink_setcaps (GstJifMux * self, GstCaps * caps)
{
- GstJifMux *self = GST_JIF_MUX_CAST (GST_PAD_PARENT (pad));
GstStructure *s = gst_caps_get_structure (caps, 0);
const gchar *variant;
/* should be {combined (default), EXIF, JFIF} */
if ((variant = gst_structure_get_string (s, "variant")) != NULL) {
- GST_INFO_OBJECT (pad, "muxing to '%s'", variant);
+ GST_INFO_OBJECT (self, "muxing to '%s'", variant);
/* FIXME: do we want to switch it like this or use a gobject property ? */
}
@@ -196,9 +197,9 @@ gst_jif_mux_sink_setcaps (GstPad * pad, GstCaps * caps)
}
static gboolean
-gst_jif_mux_sink_event (GstPad * pad, GstEvent * event)
+gst_jif_mux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
- GstJifMux *self = GST_JIF_MUX (GST_PAD_PARENT (pad));
+ GstJifMux *self = GST_JIF_MUX (parent);
gboolean ret;
switch (GST_EVENT_TYPE (event)) {
@@ -207,7 +208,7 @@ gst_jif_mux_sink_event (GstPad * pad, GstEvent * event)
GstCaps *caps;
gst_event_parse_caps (event, &caps);
- ret = gst_jif_mux_sink_setcaps (pad, caps);
+ ret = gst_jif_mux_sink_setcaps (self, caps);
gst_event_unref (event);
break;
}
@@ -220,11 +221,11 @@ gst_jif_mux_sink_event (GstPad * pad, GstEvent * event)
gst_tag_setter_merge_tags (setter, list, mode);
- ret = gst_pad_event_default (pad, event);
+ ret = gst_pad_event_default (pad, parent, event);
break;
}
default:
- ret = gst_pad_event_default (pad, event);
+ ret = gst_pad_event_default (pad, parent, event);
break;
}
return ret;
@@ -275,13 +276,12 @@ gst_jif_mux_parse_image (GstJifMux * self, GstBuffer * buf)
guint8 marker = 0;
guint16 size = 0;
const guint8 *data = NULL;
- guint8 *bdata;
- gsize bsize;
+ GstMapInfo map;
- bdata = gst_buffer_map (buf, &bsize, NULL, GST_MAP_READ);
- gst_byte_reader_init (&reader, bdata, bsize);
+ gst_buffer_map (buf, &map, GST_MAP_READ);
+ gst_byte_reader_init (&reader, map.data, map.size);
- GST_LOG_OBJECT (self, "Received buffer of size: %u", bsize);
+ GST_LOG_OBJECT (self, "Received buffer of size: %u", map.size);
if (!gst_byte_reader_peek_uint8 (&reader, &marker))
goto error;
@@ -329,23 +329,19 @@ gst_jif_mux_parse_image (GstJifMux * self, GstBuffer * buf)
if (marker == SOS) {
gint eoi_pos = -1;
gint i;
- guint8 *mdata;
- gsize msize;
/* search the last 5 bytes for the EOI marker */
- mdata = gst_buffer_map (buf, &msize, NULL, GST_MAP_READ);
- g_assert (msize >= 5);
+ g_assert (map.size >= 5);
for (i = 5; i >= 2; i--) {
- if (mdata[msize - i] == 0xFF && mdata[msize - i + 1] == EOI) {
- eoi_pos = msize - i;
+ if (map.data[map.size - i] == 0xFF && map.data[map.size - i + 1] == EOI) {
+ eoi_pos = map.size - i;
break;
}
}
if (eoi_pos == -1) {
GST_WARNING_OBJECT (self, "Couldn't find an EOI marker");
- eoi_pos = msize;
+ eoi_pos = map.size;
}
- gst_buffer_unmap (buf, mdata, msize);
/* remaining size except EOI is scan data */
self->priv->scan_size = eoi_pos - gst_byte_reader_get_pos (&reader);
@@ -360,11 +356,11 @@ gst_jif_mux_parse_image (GstJifMux * self, GstBuffer * buf)
goto error;
}
GST_INFO_OBJECT (self, "done parsing at 0x%x / 0x%x",
- gst_byte_reader_get_pos (&reader), bsize);
+ gst_byte_reader_get_pos (&reader), map.size);
done:
self->priv->markers = g_list_reverse (self->priv->markers);
- gst_buffer_unmap (buf, bdata, bsize);
+ gst_buffer_unmap (buf, &map);
return TRUE;
@@ -374,7 +370,7 @@ error:
GST_WARNING_OBJECT (self,
"Error parsing image header (need more that %u bytes available)",
gst_byte_reader_get_remaining (&reader));
- gst_buffer_unmap (buf, bdata, bsize);
+ gst_buffer_unmap (buf, &map);
return FALSE;
}
}
@@ -523,7 +519,7 @@ gst_jif_mux_mangle_markers (GstJifMux * self)
cleanup_tags = FALSE;
}
if (!tags) {
- tags = gst_tag_list_new ();
+ tags = gst_tag_list_new_empty ();
cleanup_tags = TRUE;
}
@@ -652,8 +648,7 @@ gst_jif_mux_recombine_image (GstJifMux * self, GstBuffer ** new_buf,
GList *node;
guint size = self->priv->scan_size;
gboolean writer_status = TRUE;
- guint8 *bdata;
- gsize bsize;
+ GstMapInfo map;
/* iterate list and collect size */
for (node = self->priv->markers; node; node = g_list_next (node)) {
@@ -677,8 +672,8 @@ gst_jif_mux_recombine_image (GstJifMux * self, GstBuffer ** new_buf,
GST_BUFFER_COPY_FLAGS | GST_BUFFER_COPY_TIMESTAMPS, 0, -1);
/* memcopy markers */
- bdata = gst_buffer_map (buf, &bsize, NULL, GST_MAP_WRITE);
- writer = gst_byte_writer_new_with_data (bdata, bsize, TRUE);
+ gst_buffer_map (buf, &map, GST_MAP_WRITE);
+ writer = gst_byte_writer_new_with_data (map.data, map.size, TRUE);
for (node = self->priv->markers; node && writer_status;
node = g_list_next (node)) {
@@ -701,7 +696,7 @@ gst_jif_mux_recombine_image (GstJifMux * self, GstBuffer ** new_buf,
self->priv->scan_size);
}
}
- gst_buffer_unmap (buf, bdata, bsize);
+ gst_buffer_unmap (buf, &map);
gst_byte_writer_free (writer);
if (!writer_status) {
@@ -715,9 +710,9 @@ gst_jif_mux_recombine_image (GstJifMux * self, GstBuffer ** new_buf,
}
static GstFlowReturn
-gst_jif_mux_chain (GstPad * pad, GstBuffer * buf)
+gst_jif_mux_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
{
- GstJifMux *self = GST_JIF_MUX (GST_PAD_PARENT (pad));
+ GstJifMux *self = GST_JIF_MUX (parent);
GstFlowReturn fret = GST_FLOW_OK;
#if 0
diff --git a/gst/jpegformat/gstjpegparse.c b/gst/jpegformat/gstjpegparse.c
index 5d47e7c09..f984a5242 100644
--- a/gst/jpegformat/gstjpegparse.c
+++ b/gst/jpegformat/gstjpegparse.c
@@ -121,10 +121,12 @@ struct _GstJpegParsePrivate
static void gst_jpeg_parse_dispose (GObject * object);
-static GstFlowReturn gst_jpeg_parse_chain (GstPad * pad, GstBuffer * buffer);
-static gboolean gst_jpeg_parse_sink_setcaps (GstPad * pad, GstCaps * caps);
-static gboolean gst_jpeg_parse_sink_event (GstPad * pad, GstEvent * event);
-static GstCaps *gst_jpeg_parse_src_getcaps (GstPad * pad, GstCaps * filter);
+static GstFlowReturn gst_jpeg_parse_chain (GstPad * pad, GstObject * parent,
+ GstBuffer * buffer);
+static gboolean gst_jpeg_parse_sink_setcaps (GstJpegParse * parse,
+ GstCaps * caps);
+static gboolean gst_jpeg_parse_sink_event (GstPad * pad, GstObject * parent,
+ GstEvent * event);
static GstStateChangeReturn gst_jpeg_parse_change_state (GstElement * element,
GstStateChange transition);
@@ -180,8 +182,7 @@ gst_jpeg_parse_init (GstJpegParse * parse)
parse->priv->srcpad =
gst_pad_new_from_static_template (&gst_jpeg_parse_src_pad_template,
"src");
- gst_pad_set_getcaps_function (parse->priv->srcpad,
- GST_DEBUG_FUNCPTR (gst_jpeg_parse_src_getcaps));
+ gst_pad_use_fixed_caps (parse->priv->srcpad);
gst_element_add_pad (GST_ELEMENT (parse), parse->priv->srcpad);
parse->priv->next_ts = GST_CLOCK_TIME_NONE;
@@ -204,9 +205,8 @@ gst_jpeg_parse_dispose (GObject * object)
static gboolean
-gst_jpeg_parse_sink_setcaps (GstPad * pad, GstCaps * caps)
+gst_jpeg_parse_sink_setcaps (GstJpegParse * parse, GstCaps * caps)
{
- GstJpegParse *parse = GST_JPEG_PARSE (GST_OBJECT_PARENT (pad));
GstStructure *s = gst_caps_get_structure (caps, 0);
const GValue *framerate;
@@ -225,19 +225,6 @@ gst_jpeg_parse_sink_setcaps (GstPad * pad, GstCaps * caps)
return TRUE;
}
-static GstCaps *
-gst_jpeg_parse_src_getcaps (GstPad * pad, GstCaps * filter)
-{
- GstCaps *result;
-
- if ((result = gst_pad_get_current_caps (pad))) {
- GST_DEBUG_OBJECT (pad, "using pad caps %" GST_PTR_FORMAT, result);
- } else {
- result = gst_caps_ref (GST_PAD_TEMPLATE_CAPS (GST_PAD_PAD_TEMPLATE (pad)));
- GST_DEBUG_OBJECT (pad, "using pad template caps %" GST_PTR_FORMAT, result);
- }
- return result;
-}
/*
* gst_jpeg_parse_skip_to_jpeg_header:
@@ -508,8 +495,7 @@ gst_jpeg_parse_remove_marker (GstJpegParse * parse,
{
guint16 size = 0;
guint pos = gst_byte_reader_get_pos (reader);
- guint8 *data;
- gsize bsize;
+ GstMapInfo map;
if (!gst_byte_reader_peek_uint16_be (reader, &size))
return FALSE;
@@ -518,9 +504,10 @@ gst_jpeg_parse_remove_marker (GstJpegParse * parse,
GST_LOG_OBJECT (parse, "unhandled marker %x removing %u bytes", marker, size);
- data = gst_buffer_map (buffer, &bsize, NULL, GST_MAP_READWRITE);
- memmove (&data[pos], &data[pos + size], bsize - (pos + size));
- gst_buffer_unmap (buffer, data, bsize - size);
+ gst_buffer_map (buffer, &map, GST_MAP_READWRITE);
+ memmove (&map.data[pos], &map.data[pos + size], map.size - (pos + size));
+ gst_buffer_unmap (buffer, &map);
+
if (!gst_byte_reader_set_pos (reader, pos - size))
return FALSE;
@@ -565,7 +552,7 @@ static inline GstTagList *
get_tag_list (GstJpegParse * parse)
{
if (!parse->priv->tags)
- parse->priv->tags = gst_tag_list_new ();
+ parse->priv->tags = gst_tag_list_new_empty ();
return parse->priv->tags;
}
@@ -576,7 +563,8 @@ extract_and_queue_tags (GstJpegParse * parse, guint size, guint8 * data,
GstTagList *tags;
GstBuffer *buf;
- buf = gst_buffer_new_wrapped_full (data, NULL, 0, size);
+ buf = gst_buffer_new_wrapped_full (GST_MEMORY_FLAG_READONLY, data, size, 0,
+ size, NULL, NULL);
tags = tag_func (buf);
gst_buffer_unref (buf);
@@ -695,11 +683,10 @@ gst_jpeg_parse_read_header (GstJpegParse * parse, GstBuffer * buffer)
GstByteReader reader;
guint8 marker = 0;
gboolean foundSOF = FALSE;
- guint8 *data;
- gsize size;
+ GstMapInfo map;
- data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
- gst_byte_reader_init (&reader, data, size);
+ gst_buffer_map (buffer, &map, GST_MAP_READ);
+ gst_byte_reader_init (&reader, map.data, map.size);
if (!gst_byte_reader_peek_uint8 (&reader, &marker))
goto error;
@@ -769,7 +756,7 @@ gst_jpeg_parse_read_header (GstJpegParse * parse, GstBuffer * buffer)
goto error;
}
done:
- gst_buffer_unmap (buffer, data, size);
+ gst_buffer_unmap (buffer, &map);
return foundSOF;
@@ -779,7 +766,7 @@ error:
GST_WARNING_OBJECT (parse,
"Error parsing image header (need more than %u bytes available)",
gst_byte_reader_get_remaining (&reader));
- gst_buffer_unmap (buffer, data, size);
+ gst_buffer_unmap (buffer, &map);
return FALSE;
}
unhandled:
@@ -787,7 +774,7 @@ unhandled:
GST_WARNING_OBJECT (parse, "unhandled marker %x, leaving", marker);
/* Not SOF or SOI. Must not be a JPEG file (or file pointer
* is placed wrong). In either case, it's an error. */
- gst_buffer_unmap (buffer, data, size);
+ gst_buffer_unmap (buffer, &map);
return FALSE;
}
}
@@ -876,8 +863,8 @@ gst_jpeg_parse_push_buffer (GstJpegParse * parse, guint len)
if (parse->priv->tags) {
GST_DEBUG_OBJECT (parse, "Pushing tags: %" GST_PTR_FORMAT,
parse->priv->tags);
- gst_element_found_tags_for_pad (GST_ELEMENT_CAST (parse),
- parse->priv->srcpad, parse->priv->tags);
+ gst_pad_push_event (parse->priv->srcpad,
+ gst_event_new_tag (parse->priv->tags));
parse->priv->tags = NULL;
}
@@ -910,16 +897,14 @@ gst_jpeg_parse_push_buffer (GstJpegParse * parse, guint len)
}
static GstFlowReturn
-gst_jpeg_parse_chain (GstPad * pad, GstBuffer * buf)
+gst_jpeg_parse_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
{
- GstJpegParse *parse;
+ GstJpegParse *parse = GST_JPEG_PARSE (parent);
gint len;
GstClockTime timestamp, duration;
GstFlowReturn ret = GST_FLOW_OK;
- parse = GST_JPEG_PARSE (GST_PAD_PARENT (pad));
-
- timestamp = GST_BUFFER_TIMESTAMP (buf);
+ timestamp = GST_BUFFER_PTS (buf);
duration = GST_BUFFER_DURATION (buf);
gst_adapter_push (parse->priv->adapter, buf);
@@ -951,9 +936,9 @@ gst_jpeg_parse_chain (GstPad * pad, GstBuffer * buf)
}
static gboolean
-gst_jpeg_parse_sink_event (GstPad * pad, GstEvent * event)
+gst_jpeg_parse_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
{
- GstJpegParse *parse;
+ GstJpegParse *parse = GST_JPEG_PARSE (parent);
gboolean res = TRUE;
parse = GST_JPEG_PARSE (gst_pad_get_parent (pad));
@@ -966,7 +951,7 @@ gst_jpeg_parse_sink_event (GstPad * pad, GstEvent * event)
GstCaps *caps;
gst_event_parse_caps (event, &caps);
- res = gst_jpeg_parse_sink_setcaps (pad, caps);
+ res = gst_jpeg_parse_sink_setcaps (parse, caps);
gst_event_unref (event);
break;
}
@@ -995,7 +980,7 @@ gst_jpeg_parse_sink_event (GstPad * pad, GstEvent * event)
break;
case GST_EVENT_TAG:{
if (!parse->priv->new_segment)
- res = gst_pad_event_default (pad, event);
+ res = gst_pad_event_default (pad, parent, event);
else {
GstTagList *taglist = NULL;
@@ -1009,7 +994,7 @@ gst_jpeg_parse_sink_event (GstPad * pad, GstEvent * event)
break;
}
default:
- res = gst_pad_event_default (pad, event);
+ res = gst_pad_event_default (pad, parent, event);
break;
}
diff --git a/tests/check/elements/jpegparse.c b/tests/check/elements/jpegparse.c
index fa8c63ac5..991bab90e 100644
--- a/tests/check/elements/jpegparse.c
+++ b/tests/check/elements/jpegparse.c
@@ -308,8 +308,8 @@ make_my_output_buffer (GstBuffer * buffer_in)
GstBuffer *buffer;
GstMapInfo map;
- buffer = gst_buffer_new ();
gst_buffer_map (buffer_in, &map, GST_MAP_READ);
+ buffer = gst_buffer_new_and_alloc (map.size);
gst_buffer_fill (buffer, 0, map.data, map.size);
gst_buffer_unmap (buffer_in, &map);