plugins: port some plugins to the new memory API

This commit is contained in:
Wim Taymans 2011-03-27 16:35:28 +02:00
parent 3d25a4b470
commit 3b03e23559
22 changed files with 321 additions and 269 deletions

View file

@ -1102,16 +1102,16 @@ gst_adder_collected (GstCollectPads * pads, gpointer user_data)
* are the only one referencing this buffer. If this is the last (and * are the only one referencing this buffer. If this is the last (and
* only) GAP buffer, it will automatically copy the GAP flag. */ * only) GAP buffer, it will automatically copy the GAP flag. */
outbuf = gst_buffer_make_writable (inbuf); outbuf = gst_buffer_make_writable (inbuf);
outdata = GST_BUFFER_DATA (outbuf);
gst_buffer_set_caps (outbuf, GST_PAD_CAPS (adder->srcpad)); gst_buffer_set_caps (outbuf, GST_PAD_CAPS (adder->srcpad));
outdata = gst_buffer_map (outbuf, NULL, NULL, GST_MAP_WRITE);
} else { } else {
if (!is_gap) { if (!is_gap) {
/* we had a previous output buffer, mix this non-GAP buffer */ /* we had a previous output buffer, mix this non-GAP buffer */
guint8 *indata; guint8 *indata;
guint insize; gsize insize;
indata = GST_BUFFER_DATA (inbuf); indata = gst_buffer_map (inbuf, &insize, NULL, GST_MAP_READ);
insize = GST_BUFFER_SIZE (inbuf);
/* all buffers should have outsize, there are no short buffers because we /* all buffers should have outsize, there are no short buffers because we
* asked for the max size above */ * asked for the max size above */
@ -1123,6 +1123,7 @@ gst_adder_collected (GstCollectPads * pads, gpointer user_data)
/* further buffers, need to add them */ /* further buffers, need to add them */
adder->func ((gpointer) outdata, (gpointer) indata, adder->func ((gpointer) outdata, (gpointer) indata,
insize / adder->sample_size); insize / adder->sample_size);
gst_buffer_unmap (inbuf, indata, insize);
} else { } else {
/* skip gap buffer */ /* skip gap buffer */
GST_LOG_OBJECT (adder, "channel %p: skipping GAP buffer", collect_data); GST_LOG_OBJECT (adder, "channel %p: skipping GAP buffer", collect_data);
@ -1130,6 +1131,8 @@ gst_adder_collected (GstCollectPads * pads, gpointer user_data)
gst_buffer_unref (inbuf); gst_buffer_unref (inbuf);
} }
} }
if (outbuf)
gst_buffer_unmap (outbuf, outdata, outsize);
if (outbuf == NULL) { if (outbuf == NULL) {
/* no output buffer, reuse one of the GAP buffers then if we have one */ /* no output buffer, reuse one of the GAP buffers then if we have one */

View file

@ -76,7 +76,7 @@ static void gst_audio_convert_dispose (GObject * obj);
/* gstreamer functions */ /* gstreamer functions */
static gboolean gst_audio_convert_get_unit_size (GstBaseTransform * base, static gboolean gst_audio_convert_get_unit_size (GstBaseTransform * base,
GstCaps * caps, guint * size); GstCaps * caps, gsize * size);
static GstCaps *gst_audio_convert_transform_caps (GstBaseTransform * base, static GstCaps *gst_audio_convert_transform_caps (GstBaseTransform * base,
GstPadDirection direction, GstCaps * caps); GstPadDirection direction, GstCaps * caps);
static void gst_audio_convert_fixate_caps (GstBaseTransform * base, static void gst_audio_convert_fixate_caps (GstBaseTransform * base,
@ -361,7 +361,7 @@ not_allowed:
/* BaseTransform vmethods */ /* BaseTransform vmethods */
static gboolean static gboolean
gst_audio_convert_get_unit_size (GstBaseTransform * base, GstCaps * caps, gst_audio_convert_get_unit_size (GstBaseTransform * base, GstCaps * caps,
guint * size) gsize * size)
{ {
AudioConvertFmt fmt = { 0 }; AudioConvertFmt fmt = { 0 };
@ -1069,7 +1069,9 @@ static GstFlowReturn
gst_audio_convert_transform (GstBaseTransform * base, GstBuffer * inbuf, gst_audio_convert_transform (GstBaseTransform * base, GstBuffer * inbuf,
GstBuffer * outbuf) GstBuffer * outbuf)
{ {
GstFlowReturn ret;
GstAudioConvert *this = GST_AUDIO_CONVERT (base); GstAudioConvert *this = GST_AUDIO_CONVERT (base);
gsize srcsize, dstsize;
gint insize, outsize; gint insize, outsize;
gint samples; gint samples;
gpointer src, dst; gpointer src, dst;
@ -1079,7 +1081,7 @@ gst_audio_convert_transform (GstBaseTransform * base, GstBuffer * inbuf,
GST_BUFFER_CAPS (outbuf)); GST_BUFFER_CAPS (outbuf));
/* get amount of samples to convert. */ /* get amount of samples to convert. */
samples = GST_BUFFER_SIZE (inbuf) / this->ctx.in.unit_size; samples = gst_buffer_get_size (inbuf) / this->ctx.in.unit_size;
/* get in/output sizes, to see if the buffers we got are of correct /* get in/output sizes, to see if the buffers we got are of correct
* sizes */ * sizes */
@ -1089,15 +1091,15 @@ gst_audio_convert_transform (GstBaseTransform * base, GstBuffer * inbuf,
if (insize == 0 || outsize == 0) if (insize == 0 || outsize == 0)
return GST_FLOW_OK; return GST_FLOW_OK;
/* check in and outsize */
if (GST_BUFFER_SIZE (inbuf) < insize)
goto wrong_size;
if (GST_BUFFER_SIZE (outbuf) < outsize)
goto wrong_size;
/* get src and dst data */ /* get src and dst data */
src = GST_BUFFER_DATA (inbuf); src = gst_buffer_map (inbuf, &srcsize, NULL, GST_MAP_READ);
dst = GST_BUFFER_DATA (outbuf); dst = gst_buffer_map (outbuf, &dstsize, NULL, GST_MAP_WRITE);
/* check in and outsize */
if (srcsize < insize)
goto wrong_size;
if (dstsize < outsize)
goto wrong_size;
/* and convert the samples */ /* and convert the samples */
if (!GST_BUFFER_FLAG_IS_SET (inbuf, GST_BUFFER_FLAG_GAP)) { if (!GST_BUFFER_FLAG_IS_SET (inbuf, GST_BUFFER_FLAG_GAP)) {
@ -1108,10 +1110,13 @@ gst_audio_convert_transform (GstBaseTransform * base, GstBuffer * inbuf,
/* Create silence buffer */ /* Create silence buffer */
gst_audio_convert_create_silence_buffer (this, dst, outsize); gst_audio_convert_create_silence_buffer (this, dst, outsize);
} }
ret = GST_FLOW_OK;
GST_BUFFER_SIZE (outbuf) = outsize; done:
gst_buffer_unmap (outbuf, dst, outsize);
gst_buffer_unmap (inbuf, src, srcsize);
return GST_FLOW_OK; return ret;
/* ERRORS */ /* ERRORS */
error: error:
@ -1125,15 +1130,16 @@ wrong_size:
GST_ELEMENT_ERROR (this, STREAM, FORMAT, GST_ELEMENT_ERROR (this, STREAM, FORMAT,
(NULL), (NULL),
("input/output buffers are of wrong size in: %d < %d or out: %d < %d", ("input/output buffers are of wrong size in: %d < %d or out: %d < %d",
GST_BUFFER_SIZE (inbuf), insize, GST_BUFFER_SIZE (outbuf), srcsize, insize, dstsize, outsize));
outsize)); ret = GST_FLOW_ERROR;
return GST_FLOW_ERROR; goto done;
} }
convert_error: convert_error:
{ {
GST_ELEMENT_ERROR (this, STREAM, FORMAT, GST_ELEMENT_ERROR (this, STREAM, FORMAT,
(NULL), ("error while converting")); (NULL), ("error while converting"));
return GST_FLOW_ERROR; ret = GST_FLOW_ERROR;
goto done;
} }
} }

View file

@ -589,7 +589,7 @@ gst_audio_rate_chain (GstPad * pad, GstBuffer * buf)
in_time = audiorate->next_ts; in_time = audiorate->next_ts;
} }
in_size = GST_BUFFER_SIZE (buf); in_size = gst_buffer_get_size (buf);
in_samples = in_size / audiorate->bytes_per_sample; in_samples = in_size / audiorate->bytes_per_sample;
/* calculate the buffer offset */ /* calculate the buffer offset */
@ -633,13 +633,17 @@ gst_audio_rate_chain (GstPad * pad, GstBuffer * buf)
while (fillsamples > 0) { while (fillsamples > 0) {
guint64 cursamples = MIN (fillsamples, audiorate->rate); guint64 cursamples = MIN (fillsamples, audiorate->rate);
guint8 *data;
fillsamples -= cursamples; fillsamples -= cursamples;
fillsize = cursamples * audiorate->bytes_per_sample; fillsize = cursamples * audiorate->bytes_per_sample;
fill = gst_buffer_new_and_alloc (fillsize); fill = gst_buffer_new_and_alloc (fillsize);
data = gst_buffer_map (fill, NULL, NULL, GST_MAP_WRITE);
/* FIXME, 0 might not be the silence byte for the negotiated format. */ /* FIXME, 0 might not be the silence byte for the negotiated format. */
memset (GST_BUFFER_DATA (fill), 0, fillsize); memset (data, 0, fillsize);
gst_buffer_unmap (fill, data, fillsize);
GST_DEBUG_OBJECT (audiorate, "inserting %" G_GUINT64_FORMAT " samples", GST_DEBUG_OBJECT (audiorate, "inserting %" G_GUINT64_FORMAT " samples",
cursamples); cursamples);
@ -722,7 +726,7 @@ gst_audio_rate_chain (GstPad * pad, GstBuffer * buf)
} }
send: send:
if (GST_BUFFER_SIZE (buf) == 0) if (gst_buffer_get_size (buf) == 0)
goto beach; goto beach;
/* Now calculate parameters for whichever buffer (either the original /* Now calculate parameters for whichever buffer (either the original
@ -738,14 +742,14 @@ send:
if (audiorate->discont) { if (audiorate->discont) {
/* we need to output a discont buffer, do so now */ /* we need to output a discont buffer, do so now */
GST_DEBUG_OBJECT (audiorate, "marking DISCONT on output buffer"); GST_DEBUG_OBJECT (audiorate, "marking DISCONT on output buffer");
buf = gst_buffer_make_metadata_writable (buf); buf = gst_buffer_make_writable (buf);
GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT); GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
audiorate->discont = FALSE; audiorate->discont = FALSE;
} else if (GST_BUFFER_IS_DISCONT (buf)) { } else if (GST_BUFFER_IS_DISCONT (buf)) {
/* else we make everything continuous so we can safely remove the DISCONT /* else we make everything continuous so we can safely remove the DISCONT
* flag from the buffer if there was one */ * flag from the buffer if there was one */
GST_DEBUG_OBJECT (audiorate, "removing DISCONT from buffer"); GST_DEBUG_OBJECT (audiorate, "removing DISCONT from buffer");
buf = gst_buffer_make_metadata_writable (buf); buf = gst_buffer_make_writable (buf);
GST_BUFFER_FLAG_UNSET (buf, GST_BUFFER_FLAG_DISCONT); GST_BUFFER_FLAG_UNSET (buf, GST_BUFFER_FLAG_DISCONT);
} }

View file

@ -127,14 +127,14 @@ static void gst_audio_resample_get_property (GObject * object,
/* vmethods */ /* vmethods */
static gboolean gst_audio_resample_get_unit_size (GstBaseTransform * base, static gboolean gst_audio_resample_get_unit_size (GstBaseTransform * base,
GstCaps * caps, guint * size); GstCaps * caps, gsize * size);
static GstCaps *gst_audio_resample_transform_caps (GstBaseTransform * base, static GstCaps *gst_audio_resample_transform_caps (GstBaseTransform * base,
GstPadDirection direction, GstCaps * caps); GstPadDirection direction, GstCaps * caps);
static void gst_audio_resample_fixate_caps (GstBaseTransform * base, static void gst_audio_resample_fixate_caps (GstBaseTransform * base,
GstPadDirection direction, GstCaps * caps, GstCaps * othercaps); GstPadDirection direction, GstCaps * caps, GstCaps * othercaps);
static gboolean gst_audio_resample_transform_size (GstBaseTransform * trans, static gboolean gst_audio_resample_transform_size (GstBaseTransform * trans,
GstPadDirection direction, GstCaps * incaps, guint insize, GstPadDirection direction, GstCaps * incaps, gsize insize,
GstCaps * outcaps, guint * outsize); GstCaps * outcaps, gsize * outsize);
static gboolean gst_audio_resample_set_caps (GstBaseTransform * base, static gboolean gst_audio_resample_set_caps (GstBaseTransform * base,
GstCaps * incaps, GstCaps * outcaps); GstCaps * incaps, GstCaps * outcaps);
static GstFlowReturn gst_audio_resample_transform (GstBaseTransform * base, static GstFlowReturn gst_audio_resample_transform (GstBaseTransform * base,
@ -282,7 +282,7 @@ gst_audio_resample_stop (GstBaseTransform * base)
static gboolean static gboolean
gst_audio_resample_get_unit_size (GstBaseTransform * base, GstCaps * caps, gst_audio_resample_get_unit_size (GstBaseTransform * base, GstCaps * caps,
guint * size) gsize * size)
{ {
gint width, channels; gint width, channels;
GstStructure *structure; GstStructure *structure;
@ -530,8 +530,8 @@ _gcd (gint a, gint b)
static gboolean static gboolean
gst_audio_resample_transform_size (GstBaseTransform * base, gst_audio_resample_transform_size (GstBaseTransform * base,
GstPadDirection direction, GstCaps * caps, guint size, GstCaps * othercaps, GstPadDirection direction, GstCaps * caps, gsize size, GstCaps * othercaps,
guint * othersize) gsize * othersize)
{ {
gboolean ret = TRUE; gboolean ret = TRUE;
guint32 ratio_den, ratio_num; guint32 ratio_den, ratio_num;
@ -824,6 +824,7 @@ gst_audio_resample_push_drain (GstAudioResample * resample, guint history_len)
guint out_len, out_processed; guint out_len, out_processed;
gint err; gint err;
guint num, den; guint num, den;
guint8 *data;
g_assert (resample->state != NULL); g_assert (resample->state != NULL);
@ -851,6 +852,8 @@ gst_audio_resample_push_drain (GstAudioResample * resample, guint history_len)
return; return;
} }
data = gst_buffer_map (outbuf, NULL, NULL, GST_MAP_WRITE);
if (resample->funcs->width != resample->width) { if (resample->funcs->width != resample->width) {
/* need to convert data format; allocate workspace */ /* need to convert data format; allocate workspace */
if (!gst_audio_resample_workspace_realloc (&resample->tmp_out, if (!gst_audio_resample_workspace_realloc (&resample->tmp_out,
@ -866,17 +869,20 @@ gst_audio_resample_push_drain (GstAudioResample * resample, guint history_len)
/* convert output format */ /* convert output format */
gst_audio_resample_convert_buffer (resample, resample->tmp_out, gst_audio_resample_convert_buffer (resample, resample->tmp_out,
GST_BUFFER_DATA (outbuf), out_processed, TRUE); data, out_processed, TRUE);
} else { } else {
/* don't need to convert data format; process */ /* don't need to convert data format; process */
err = resample->funcs->process (resample->state, NULL, &in_processed, err = resample->funcs->process (resample->state, NULL, &in_processed,
GST_BUFFER_DATA (outbuf), &out_processed); data, &out_processed);
} }
/* If we wrote more than allocated something is really wrong now /* If we wrote more than allocated something is really wrong now
* and we should better abort immediately */ * and we should better abort immediately */
g_assert (out_len >= out_processed); g_assert (out_len >= out_processed);
outsize = out_processed * resample->channels * (resample->width / 8);
gst_buffer_unmap (outbuf, data, outsize);
if (G_UNLIKELY (err != RESAMPLER_ERR_SUCCESS)) { if (G_UNLIKELY (err != RESAMPLER_ERR_SUCCESS)) {
GST_WARNING_OBJECT (resample, "Failed to process drain: %s", GST_WARNING_OBJECT (resample, "Failed to process drain: %s",
resample->funcs->strerror (err)); resample->funcs->strerror (err));
@ -914,13 +920,10 @@ gst_audio_resample_push_drain (GstAudioResample * resample, guint history_len)
return; return;
} }
GST_BUFFER_SIZE (outbuf) =
out_processed * resample->channels * (resample->width / 8);
GST_LOG_OBJECT (resample, GST_LOG_OBJECT (resample,
"Pushing drain buffer of %u bytes with timestamp %" GST_TIME_FORMAT "Pushing drain buffer of %u bytes with timestamp %" GST_TIME_FORMAT
" duration %" GST_TIME_FORMAT " offset %" G_GUINT64_FORMAT " offset_end %" " duration %" GST_TIME_FORMAT " offset %" G_GUINT64_FORMAT " offset_end %"
G_GUINT64_FORMAT, GST_BUFFER_SIZE (outbuf), G_GUINT64_FORMAT, outsize,
GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf)), GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf)),
GST_TIME_ARGS (GST_BUFFER_DURATION (outbuf)), GST_BUFFER_OFFSET (outbuf), GST_TIME_ARGS (GST_BUFFER_DURATION (outbuf)), GST_BUFFER_OFFSET (outbuf),
GST_BUFFER_OFFSET_END (outbuf)); GST_BUFFER_OFFSET_END (outbuf));
@ -1025,12 +1028,17 @@ static GstFlowReturn
gst_audio_resample_process (GstAudioResample * resample, GstBuffer * inbuf, gst_audio_resample_process (GstAudioResample * resample, GstBuffer * inbuf,
GstBuffer * outbuf) GstBuffer * outbuf)
{ {
gsize in_size, out_size;
guint8 *in_data, *out_data;
guint32 in_len, in_processed; guint32 in_len, in_processed;
guint32 out_len, out_processed; guint32 out_len, out_processed;
guint filt_len = resample->funcs->get_filt_len (resample->state); guint filt_len = resample->funcs->get_filt_len (resample->state);
in_len = GST_BUFFER_SIZE (inbuf) / resample->channels; in_data = gst_buffer_map (inbuf, &in_size, NULL, GST_MAP_READ);
out_len = GST_BUFFER_SIZE (outbuf) / resample->channels; out_data = gst_buffer_map (outbuf, &out_size, NULL, GST_MAP_WRITE);
in_len = in_size / resample->channels;
out_len = out_size / resample->channels;
in_len /= (resample->width / 8); in_len /= (resample->width / 8);
out_len /= (resample->width / 8); out_len /= (resample->width / 8);
@ -1062,7 +1070,7 @@ gst_audio_resample_process (GstAudioResample * resample, GstBuffer * inbuf,
else else
out_processed = 0; out_processed = 0;
memset (GST_BUFFER_DATA (outbuf), 0, GST_BUFFER_SIZE (outbuf)); memset (out_data, 0, out_size);
GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_GAP); GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_GAP);
resample->num_gap_samples += in_len; resample->num_gap_samples += in_len;
in_processed = in_len; in_processed = in_len;
@ -1095,11 +1103,13 @@ gst_audio_resample_process (GstAudioResample * resample, GstBuffer * inbuf,
&resample->tmp_out_size, out_len * resample->channels * &resample->tmp_out_size, out_len * resample->channels *
(resample->funcs->width / 8))) { (resample->funcs->width / 8))) {
GST_ERROR_OBJECT (resample, "failed to allocate workspace"); GST_ERROR_OBJECT (resample, "failed to allocate workspace");
gst_buffer_unmap (inbuf, in_data, in_size);
gst_buffer_unmap (outbuf, out_data, out_size);
return GST_FLOW_ERROR; return GST_FLOW_ERROR;
} }
/* convert input */ /* convert input */
gst_audio_resample_convert_buffer (resample, GST_BUFFER_DATA (inbuf), gst_audio_resample_convert_buffer (resample, in_data,
resample->tmp_in, in_len, FALSE); resample->tmp_in, in_len, FALSE);
/* process */ /* process */
@ -1108,17 +1118,18 @@ gst_audio_resample_process (GstAudioResample * resample, GstBuffer * inbuf,
/* convert output */ /* convert output */
gst_audio_resample_convert_buffer (resample, resample->tmp_out, gst_audio_resample_convert_buffer (resample, resample->tmp_out,
GST_BUFFER_DATA (outbuf), out_processed, TRUE); out_data, out_processed, TRUE);
} else { } else {
/* no format conversion required; process */ /* no format conversion required; process */
err = resample->funcs->process (resample->state, err = resample->funcs->process (resample->state,
GST_BUFFER_DATA (inbuf), &in_processed, in_data, &in_processed, out_data, &out_processed);
GST_BUFFER_DATA (outbuf), &out_processed);
} }
if (G_UNLIKELY (err != RESAMPLER_ERR_SUCCESS)) { if (G_UNLIKELY (err != RESAMPLER_ERR_SUCCESS)) {
GST_ERROR_OBJECT (resample, "Failed to convert data: %s", GST_ERROR_OBJECT (resample, "Failed to convert data: %s",
resample->funcs->strerror (err)); resample->funcs->strerror (err));
gst_buffer_unmap (inbuf, in_data, in_size);
gst_buffer_unmap (outbuf, out_data, out_size);
return GST_FLOW_ERROR; return GST_FLOW_ERROR;
} }
} }
@ -1156,14 +1167,15 @@ gst_audio_resample_process (GstAudioResample * resample, GstBuffer * inbuf,
resample->samples_out += out_processed; resample->samples_out += out_processed;
resample->samples_in += in_len; resample->samples_in += in_len;
GST_BUFFER_SIZE (outbuf) = out_size = out_processed * resample->channels * (resample->width / 8);
out_processed * resample->channels * (resample->width / 8); gst_buffer_unmap (inbuf, in_data, in_size);
gst_buffer_unmap (outbuf, out_data, out_size);
GST_LOG_OBJECT (resample, GST_LOG_OBJECT (resample,
"Converted to buffer of %" G_GUINT32_FORMAT "Converted to buffer of %" G_GUINT32_FORMAT
" samples (%u bytes) with timestamp %" GST_TIME_FORMAT ", duration %" " samples (%u bytes) with timestamp %" GST_TIME_FORMAT ", duration %"
GST_TIME_FORMAT ", offset %" G_GUINT64_FORMAT ", offset_end %" GST_TIME_FORMAT ", offset %" G_GUINT64_FORMAT ", offset_end %"
G_GUINT64_FORMAT, out_processed, GST_BUFFER_SIZE (outbuf), G_GUINT64_FORMAT, out_processed, out_size,
GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf)), GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf)),
GST_TIME_ARGS (GST_BUFFER_DURATION (outbuf)), GST_TIME_ARGS (GST_BUFFER_DURATION (outbuf)),
GST_BUFFER_OFFSET (outbuf), GST_BUFFER_OFFSET_END (outbuf)); GST_BUFFER_OFFSET (outbuf), GST_BUFFER_OFFSET_END (outbuf));
@ -1180,7 +1192,6 @@ gst_audio_resample_transform (GstBaseTransform * base, GstBuffer * inbuf,
GstBuffer * outbuf) GstBuffer * outbuf)
{ {
GstAudioResample *resample = GST_AUDIO_RESAMPLE (base); GstAudioResample *resample = GST_AUDIO_RESAMPLE (base);
gulong size;
GstFlowReturn ret; GstFlowReturn ret;
if (resample->state == NULL) { if (resample->state == NULL) {
@ -1194,12 +1205,10 @@ gst_audio_resample_transform (GstBaseTransform * base, GstBuffer * inbuf,
gst_audio_resample_get_funcs (resample->width, resample->fp); gst_audio_resample_get_funcs (resample->width, resample->fp);
} }
size = GST_BUFFER_SIZE (inbuf);
GST_LOG_OBJECT (resample, "transforming buffer of %ld bytes, ts %" GST_LOG_OBJECT (resample, "transforming buffer of %ld bytes, ts %"
GST_TIME_FORMAT ", duration %" GST_TIME_FORMAT ", offset %" GST_TIME_FORMAT ", duration %" GST_TIME_FORMAT ", offset %"
G_GINT64_FORMAT ", offset_end %" G_GINT64_FORMAT, G_GINT64_FORMAT ", offset_end %" G_GINT64_FORMAT,
size, GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (inbuf)), gst_buffer_get_size (inbuf), GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (inbuf)),
GST_TIME_ARGS (GST_BUFFER_DURATION (inbuf)), GST_TIME_ARGS (GST_BUFFER_DURATION (inbuf)),
GST_BUFFER_OFFSET (inbuf), GST_BUFFER_OFFSET_END (inbuf)); GST_BUFFER_OFFSET (inbuf), GST_BUFFER_OFFSET_END (inbuf));

View file

@ -1034,6 +1034,7 @@ gst_audio_test_src_create (GstBaseSrc * basesrc, guint64 offset,
gint64 next_sample, next_byte; gint64 next_sample, next_byte;
gint bytes, samples; gint bytes, samples;
GstElementClass *eclass; GstElementClass *eclass;
guint8 *data;
src = GST_AUDIO_TEST_SRC (basesrc); src = GST_AUDIO_TEST_SRC (basesrc);
@ -1130,7 +1131,9 @@ gst_audio_test_src_create (GstBaseSrc * basesrc, guint64 offset,
src->generate_samples_per_buffer, src->generate_samples_per_buffer,
GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf))); GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)));
src->process (src, GST_BUFFER_DATA (buf)); data = gst_buffer_map (buf, NULL, NULL, GST_MAP_WRITE);
src->process (src, data);
gst_buffer_unmap (buf, data, bytes);
if (G_UNLIKELY ((src->wave == GST_AUDIO_TEST_SRC_WAVE_SILENCE) if (G_UNLIKELY ((src->wave == GST_AUDIO_TEST_SRC_WAVE_SILENCE)
|| (src->volume == 0.0))) { || (src->volume == 0.0))) {

View file

@ -43,7 +43,6 @@ gst_ff_vid_caps_new (AVCodecContext * context,
/* /*
* Read a palette from a caps. * Read a palette from a caps.
*/ */
static void static void
gst_ffmpeg_get_palette (const GstCaps * caps, AVCodecContext * context) gst_ffmpeg_get_palette (const GstCaps * caps, AVCodecContext * context)
{ {
@ -52,15 +51,15 @@ gst_ff_vid_caps_new (AVCodecContext * context,
/* do we have a palette? */ /* do we have a palette? */
if ((palette_v = gst_structure_get_value (str, "palette_data")) && context) { if ((palette_v = gst_structure_get_value (str, "palette_data")) && context) {
const GstBuffer *palette; GstBuffer *palette;
palette = gst_value_get_buffer (palette_v); palette = gst_value_get_buffer (palette_v);
if (palette && GST_BUFFER_SIZE (palette) >= 256 * 4) { if (palette && gst_buffer_get_size (palette) >= 256 * 4) {
if (context->palctrl) if (context->palctrl)
av_free (context->palctrl); av_free (context->palctrl);
context->palctrl = av_malloc (sizeof (AVPaletteControl)); context->palctrl = av_malloc (sizeof (AVPaletteControl));
context->palctrl->palette_changed = 1; context->palctrl->palette_changed = 1;
memcpy (context->palctrl->palette, GST_BUFFER_DATA (palette), gst_buffer_extract (palette, 0, context->palctrl->palette,
AVPALETTE_SIZE); AVPALETTE_SIZE);
} }
} }
@ -71,9 +70,13 @@ gst_ffmpeg_set_palette (GstCaps * caps, AVCodecContext * context)
{ {
if (context->palctrl) { if (context->palctrl) {
GstBuffer *palette = gst_buffer_new_and_alloc (256 * 4); GstBuffer *palette = gst_buffer_new_and_alloc (256 * 4);
guint8 *data;
gsize size;
data = gst_buffer_map (palette, &size, NULL, GST_MAP_WRITE);
memcpy (data, context->palctrl->palette, AVPALETTE_SIZE);
gst_buffer_unmap (palette, data, size);
memcpy (GST_BUFFER_DATA (palette), context->palctrl->palette,
AVPALETTE_SIZE);
gst_caps_set_simple (caps, "palette_data", GST_TYPE_BUFFER, palette, NULL); gst_caps_set_simple (caps, "palette_data", GST_TYPE_BUFFER, palette, NULL);
gst_buffer_unref (palette); gst_buffer_unref (palette);
} }

View file

@ -87,7 +87,7 @@ GType gst_ffmpegcsp_get_type (void);
static gboolean gst_ffmpegcsp_set_caps (GstBaseTransform * btrans, static gboolean gst_ffmpegcsp_set_caps (GstBaseTransform * btrans,
GstCaps * incaps, GstCaps * outcaps); GstCaps * incaps, GstCaps * outcaps);
static gboolean gst_ffmpegcsp_get_unit_size (GstBaseTransform * btrans, static gboolean gst_ffmpegcsp_get_unit_size (GstBaseTransform * btrans,
GstCaps * caps, guint * size); GstCaps * caps, gsize * size);
static GstFlowReturn gst_ffmpegcsp_transform (GstBaseTransform * btrans, static GstFlowReturn gst_ffmpegcsp_transform (GstBaseTransform * btrans,
GstBuffer * inbuf, GstBuffer * outbuf); GstBuffer * inbuf, GstBuffer * outbuf);
@ -396,7 +396,7 @@ gst_ffmpegcsp_init (GstFFMpegCsp * space, GstFFMpegCspClass * klass)
static gboolean static gboolean
gst_ffmpegcsp_get_unit_size (GstBaseTransform * btrans, GstCaps * caps, gst_ffmpegcsp_get_unit_size (GstBaseTransform * btrans, GstCaps * caps,
guint * size) gsize * size)
{ {
GstStructure *structure = NULL; GstStructure *structure = NULL;
AVCodecContext *ctx = NULL; AVCodecContext *ctx = NULL;
@ -448,6 +448,8 @@ gst_ffmpegcsp_transform (GstBaseTransform * btrans, GstBuffer * inbuf,
{ {
GstFFMpegCsp *space; GstFFMpegCsp *space;
gint result; gint result;
guint8 *indata, *outdata;
gsize insize, outsize;
space = GST_FFMPEGCSP (btrans); space = GST_FFMPEGCSP (btrans);
@ -458,8 +460,9 @@ gst_ffmpegcsp_transform (GstBaseTransform * btrans, GstBuffer * inbuf,
goto unknown_format; goto unknown_format;
/* fill from with source data */ /* fill from with source data */
indata = gst_buffer_map (inbuf, &insize, NULL, GST_MAP_READ);
gst_ffmpegcsp_avpicture_fill (&space->from_frame, gst_ffmpegcsp_avpicture_fill (&space->from_frame,
GST_BUFFER_DATA (inbuf), space->from_pixfmt, space->width, space->height, indata, space->from_pixfmt, space->width, space->height,
space->interlaced); space->interlaced);
/* fill optional palette */ /* fill optional palette */
@ -467,13 +470,17 @@ gst_ffmpegcsp_transform (GstBaseTransform * btrans, GstBuffer * inbuf,
space->from_frame.data[1] = (uint8_t *) space->palette->palette; space->from_frame.data[1] = (uint8_t *) space->palette->palette;
/* fill target frame */ /* fill target frame */
outdata = gst_buffer_map (outbuf, &outsize, NULL, GST_MAP_WRITE);
gst_ffmpegcsp_avpicture_fill (&space->to_frame, gst_ffmpegcsp_avpicture_fill (&space->to_frame,
GST_BUFFER_DATA (outbuf), space->to_pixfmt, space->width, space->height, outdata, space->to_pixfmt, space->width, space->height,
space->interlaced); space->interlaced);
/* and convert */ /* and convert */
result = img_convert (&space->to_frame, space->to_pixfmt, result = img_convert (&space->to_frame, space->to_pixfmt,
&space->from_frame, space->from_pixfmt, space->width, space->height); &space->from_frame, space->from_pixfmt, space->width, space->height);
gst_buffer_unmap (outbuf, outdata, outsize);
gst_buffer_unmap (inbuf, indata, insize);
if (result == -1) if (result == -1)
goto not_supported; goto not_supported;

View file

@ -285,17 +285,23 @@ gst_gdp_depay_chain (GstPad * pad, GstBuffer * buffer)
goto wrong_type; goto wrong_type;
} }
if (this->payload_length if (this->payload_length) {
&& (!gst_dp_validate_payload (GST_DP_HEADER_LENGTH, this->header, const guint8 *data;
gst_adapter_peek (this->adapter, this->payload_length)))) { gboolean res;
goto payload_validate_error;
data = gst_adapter_map (this->adapter, this->payload_length);
res = gst_dp_validate_payload (GST_DP_HEADER_LENGTH, this->header,
data);
gst_adapter_unmap (this->adapter, 0);
if (!res)
goto payload_validate_error;
} }
break; break;
} }
case GST_GDP_DEPAY_STATE_BUFFER: case GST_GDP_DEPAY_STATE_BUFFER:
{ {
/* if we receive a buffer without caps first, we error out */ /* if we receive a buffer without caps first, we error out */
if (!this->caps) if (!this->caps)
goto no_caps; goto no_caps;
@ -309,9 +315,11 @@ gst_gdp_depay_chain (GstPad * pad, GstBuffer * buffer)
if (this->payload_length > 0) { if (this->payload_length > 0) {
guint8 *payload; guint8 *payload;
payload = gst_adapter_take (this->adapter, this->payload_length); payload = gst_buffer_map (buf, NULL, NULL, GST_MAP_WRITE);
memcpy (GST_BUFFER_DATA (buf), payload, this->payload_length); gst_adapter_copy (this->adapter, payload, 0, this->payload_length);
g_free (payload); gst_buffer_unmap (buf, payload, this->payload_length);
gst_adapter_flush (this->adapter, this->payload_length);
} }
/* set caps and push */ /* set caps and push */
@ -319,12 +327,12 @@ gst_gdp_depay_chain (GstPad * pad, GstBuffer * buffer)
GST_LOG_OBJECT (this, "deserialized buffer %p, pushing, timestamp %" GST_LOG_OBJECT (this, "deserialized buffer %p, pushing, timestamp %"
GST_TIME_FORMAT ", duration %" GST_TIME_FORMAT GST_TIME_FORMAT ", duration %" GST_TIME_FORMAT
", offset %" G_GINT64_FORMAT ", offset_end %" G_GINT64_FORMAT ", offset %" G_GINT64_FORMAT ", offset_end %" G_GINT64_FORMAT
", size %d, flags 0x%x", ", size %" G_GSIZE_FORMAT ", flags 0x%x",
buf, buf,
GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)), GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
GST_TIME_ARGS (GST_BUFFER_DURATION (buf)), GST_TIME_ARGS (GST_BUFFER_DURATION (buf)),
GST_BUFFER_OFFSET (buf), GST_BUFFER_OFFSET_END (buf), GST_BUFFER_OFFSET (buf), GST_BUFFER_OFFSET_END (buf),
GST_BUFFER_SIZE (buf), GST_BUFFER_FLAGS (buf)); gst_buffer_get_size (buf), GST_BUFFER_FLAGS (buf));
ret = gst_pad_push (this->srcpad, buf); ret = gst_pad_push (this->srcpad, buf);
if (ret != GST_FLOW_OK) if (ret != GST_FLOW_OK)
goto push_error; goto push_error;

View file

@ -77,9 +77,7 @@ GST_BOILERPLATE_FULL (GstGDPPay, gst_gdp_pay, GstElement,
static void gst_gdp_pay_reset (GstGDPPay * this); static void gst_gdp_pay_reset (GstGDPPay * this);
static GstFlowReturn gst_gdp_pay_chain (GstPad * pad, GstBuffer * buffer); static GstFlowReturn gst_gdp_pay_chain (GstPad * pad, GstBuffer * buffer);
static gboolean gst_gdp_pay_src_event (GstPad * pad, GstEvent * event); static gboolean gst_gdp_pay_src_event (GstPad * pad, GstEvent * event);
static gboolean gst_gdp_pay_sink_event (GstPad * pad, GstEvent * event); static gboolean gst_gdp_pay_sink_event (GstPad * pad, GstEvent * event);
static GstStateChangeReturn gst_gdp_pay_change_state (GstElement * static GstStateChangeReturn gst_gdp_pay_change_state (GstElement *
@ -112,7 +110,6 @@ static void
gst_gdp_pay_class_init (GstGDPPayClass * klass) gst_gdp_pay_class_init (GstGDPPayClass * klass)
{ {
GObjectClass *gobject_class; GObjectClass *gobject_class;
GstElementClass *gstelement_class; GstElementClass *gstelement_class;
gobject_class = (GObjectClass *) klass; gobject_class = (GObjectClass *) klass;
@ -216,7 +213,7 @@ static void
gst_gdp_stamp_buffer (GstGDPPay * this, GstBuffer * buffer) gst_gdp_stamp_buffer (GstGDPPay * this, GstBuffer * buffer)
{ {
GST_BUFFER_OFFSET (buffer) = this->offset; GST_BUFFER_OFFSET (buffer) = this->offset;
GST_BUFFER_OFFSET_END (buffer) = this->offset + GST_BUFFER_SIZE (buffer); GST_BUFFER_OFFSET_END (buffer) = this->offset + gst_buffer_get_size (buffer);
this->offset = GST_BUFFER_OFFSET_END (buffer); this->offset = GST_BUFFER_OFFSET_END (buffer);
} }
@ -224,12 +221,9 @@ static GstBuffer *
gst_gdp_buffer_from_caps (GstGDPPay * this, GstCaps * caps) gst_gdp_buffer_from_caps (GstGDPPay * this, GstCaps * caps)
{ {
GstBuffer *headerbuf; GstBuffer *headerbuf;
GstBuffer *payloadbuf; GstBuffer *payloadbuf;
guint8 *header, *payload; guint8 *header, *payload;
guint len, plen;
guint len;
if (!this->packetizer->packet_from_caps (caps, this->header_flag, &len, if (!this->packetizer->packet_from_caps (caps, this->header_flag, &len,
&header, &payload)) &header, &payload))
@ -237,13 +231,13 @@ gst_gdp_buffer_from_caps (GstGDPPay * this, GstCaps * caps)
GST_LOG_OBJECT (this, "creating GDP header and payload buffer from caps"); GST_LOG_OBJECT (this, "creating GDP header and payload buffer from caps");
headerbuf = gst_buffer_new (); headerbuf = gst_buffer_new ();
gst_buffer_set_data (headerbuf, header, len); gst_buffer_take_memory (headerbuf,
GST_BUFFER_MALLOCDATA (headerbuf) = header; gst_memory_new_wrapped (0, header, g_free, len, 0, len));
payloadbuf = gst_buffer_new (); payloadbuf = gst_buffer_new ();
gst_buffer_set_data (payloadbuf, payload, plen = gst_dp_header_payload_length (header);
gst_dp_header_payload_length (header)); gst_buffer_take_memory (payloadbuf,
GST_BUFFER_MALLOCDATA (payloadbuf) = payload; gst_memory_new_wrapped (0, payload, g_free, plen, 0, plen));
return gst_buffer_join (headerbuf, payloadbuf); return gst_buffer_join (headerbuf, payloadbuf);
@ -259,9 +253,7 @@ static GstBuffer *
gst_gdp_pay_buffer_from_buffer (GstGDPPay * this, GstBuffer * buffer) gst_gdp_pay_buffer_from_buffer (GstGDPPay * this, GstBuffer * buffer)
{ {
GstBuffer *headerbuf; GstBuffer *headerbuf;
guint8 *header; guint8 *header;
guint len; guint len;
if (!this->packetizer->header_from_buffer (buffer, this->header_flag, &len, if (!this->packetizer->header_from_buffer (buffer, this->header_flag, &len,
@ -270,8 +262,8 @@ gst_gdp_pay_buffer_from_buffer (GstGDPPay * this, GstBuffer * buffer)
GST_LOG_OBJECT (this, "creating GDP header and payload buffer from buffer"); GST_LOG_OBJECT (this, "creating GDP header and payload buffer from buffer");
headerbuf = gst_buffer_new (); headerbuf = gst_buffer_new ();
gst_buffer_set_data (headerbuf, header, len); gst_buffer_take_memory (headerbuf,
GST_BUFFER_MALLOCDATA (headerbuf) = header; gst_memory_new_wrapped (0, header, g_free, len, 0, len));
/* we do not want to lose the ref on the incoming buffer */ /* we do not want to lose the ref on the incoming buffer */
gst_buffer_ref (buffer); gst_buffer_ref (buffer);
@ -290,13 +282,9 @@ static GstBuffer *
gst_gdp_buffer_from_event (GstGDPPay * this, GstEvent * event) gst_gdp_buffer_from_event (GstGDPPay * this, GstEvent * event)
{ {
GstBuffer *headerbuf; GstBuffer *headerbuf;
GstBuffer *payloadbuf; GstBuffer *payloadbuf;
guint8 *header, *payload; guint8 *header, *payload;
guint len, plen;
guint len;
gboolean ret; gboolean ret;
ret = ret =
@ -307,13 +295,13 @@ gst_gdp_buffer_from_event (GstGDPPay * this, GstEvent * event)
GST_LOG_OBJECT (this, "creating GDP header and payload buffer from event"); GST_LOG_OBJECT (this, "creating GDP header and payload buffer from event");
headerbuf = gst_buffer_new (); headerbuf = gst_buffer_new ();
gst_buffer_set_data (headerbuf, header, len); gst_buffer_take_memory (headerbuf,
GST_BUFFER_MALLOCDATA (headerbuf) = header; gst_memory_new_wrapped (0, header, g_free, len, 0, len));
payloadbuf = gst_buffer_new (); payloadbuf = gst_buffer_new ();
gst_buffer_set_data (payloadbuf, payload, plen = gst_dp_header_payload_length (header);
gst_dp_header_payload_length (header)); gst_buffer_take_memory (payloadbuf,
GST_BUFFER_MALLOCDATA (payloadbuf) = payload; gst_memory_new_wrapped (0, payload, g_free, plen, 0, plen));
return gst_buffer_join (headerbuf, payloadbuf); return gst_buffer_join (headerbuf, payloadbuf);
@ -333,14 +321,10 @@ static GstFlowReturn
gst_gdp_pay_reset_streamheader (GstGDPPay * this) gst_gdp_pay_reset_streamheader (GstGDPPay * this)
{ {
GstCaps *caps; GstCaps *caps;
/* We use copies of these to avoid circular refcounts */ /* We use copies of these to avoid circular refcounts */
GstBuffer *new_segment_buf, *caps_buf, *tag_buf; GstBuffer *new_segment_buf, *caps_buf, *tag_buf;
GstStructure *structure; GstStructure *structure;
GstFlowReturn r = GST_FLOW_OK; GstFlowReturn r = GST_FLOW_OK;
gboolean version_one_zero = TRUE; gboolean version_one_zero = TRUE;
GValue array = { 0 }; GValue array = { 0 };
@ -474,10 +458,9 @@ gst_gdp_pay_reset_streamheader (GstGDPPay * this)
GST_DEBUG_OBJECT (this, "Setting caps on src pad %" GST_PTR_FORMAT, caps); GST_DEBUG_OBJECT (this, "Setting caps on src pad %" GST_PTR_FORMAT, caps);
gst_pad_set_caps (this->srcpad, caps); gst_pad_set_caps (this->srcpad, caps);
this->caps_buf = gst_buffer_make_metadata_writable (this->caps_buf); this->caps_buf = gst_buffer_make_writable (this->caps_buf);
gst_buffer_set_caps (this->caps_buf, caps); gst_buffer_set_caps (this->caps_buf, caps);
this->new_segment_buf = this->new_segment_buf = gst_buffer_make_writable (this->new_segment_buf);
gst_buffer_make_metadata_writable (this->new_segment_buf);
gst_buffer_set_caps (this->new_segment_buf, caps); gst_buffer_set_caps (this->new_segment_buf, caps);
/* if these are our first ever buffers, send out new_segment first */ /* if these are our first ever buffers, send out new_segment first */
@ -579,11 +562,8 @@ static GstFlowReturn
gst_gdp_pay_chain (GstPad * pad, GstBuffer * buffer) gst_gdp_pay_chain (GstPad * pad, GstBuffer * buffer)
{ {
GstGDPPay *this; GstGDPPay *this;
GstCaps *caps; GstCaps *caps;
GstBuffer *outbuffer; GstBuffer *outbuffer;
GstFlowReturn ret; GstFlowReturn ret;
this = GST_GDP_PAY (gst_pad_get_parent (pad)); this = GST_GDP_PAY (gst_pad_get_parent (pad));
@ -698,11 +678,8 @@ static gboolean
gst_gdp_pay_sink_event (GstPad * pad, GstEvent * event) gst_gdp_pay_sink_event (GstPad * pad, GstEvent * event)
{ {
GstBuffer *outbuffer; GstBuffer *outbuffer;
GstGDPPay *this = GST_GDP_PAY (gst_pad_get_parent (pad)); GstGDPPay *this = GST_GDP_PAY (gst_pad_get_parent (pad));
GstFlowReturn flowret; GstFlowReturn flowret;
gboolean ret = TRUE; gboolean ret = TRUE;
GST_DEBUG_OBJECT (this, "received event %p of type %s (%d)", GST_DEBUG_OBJECT (this, "received event %p of type %s (%d)",
@ -784,7 +761,6 @@ static gboolean
gst_gdp_pay_src_event (GstPad * pad, GstEvent * event) gst_gdp_pay_src_event (GstPad * pad, GstEvent * event)
{ {
GstGDPPay *this; GstGDPPay *this;
gboolean res = TRUE; gboolean res = TRUE;
this = GST_GDP_PAY (gst_pad_get_parent (pad)); this = GST_GDP_PAY (gst_pad_get_parent (pad));
@ -865,7 +841,6 @@ static GstStateChangeReturn
gst_gdp_pay_change_state (GstElement * element, GstStateChange transition) gst_gdp_pay_change_state (GstElement * element, GstStateChange transition)
{ {
GstStateChangeReturn ret; GstStateChangeReturn ret;
GstGDPPay *this = GST_GDP_PAY (element); GstGDPPay *this = GST_GDP_PAY (element);
switch (transition) { switch (transition) {

View file

@ -592,7 +592,7 @@ gst_stream_synchronizer_sink_chain (GstPad * pad, GstBuffer * buffer)
GST_LOG_OBJECT (pad, "Handling buffer %p: size=%u, timestamp=%" GST_LOG_OBJECT (pad, "Handling buffer %p: size=%u, timestamp=%"
GST_TIME_FORMAT " duration=%" GST_TIME_FORMAT GST_TIME_FORMAT " duration=%" GST_TIME_FORMAT
" offset=%" G_GUINT64_FORMAT " offset_end=%" G_GUINT64_FORMAT, " offset=%" G_GUINT64_FORMAT " offset_end=%" G_GUINT64_FORMAT,
buffer, GST_BUFFER_SIZE (buffer), buffer, gst_buffer_get_size (buffer),
GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)), GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)),
GST_TIME_ARGS (GST_BUFFER_DURATION (buffer)), GST_TIME_ARGS (GST_BUFFER_DURATION (buffer)),
GST_BUFFER_OFFSET (buffer), GST_BUFFER_OFFSET_END (buffer)); GST_BUFFER_OFFSET (buffer), GST_BUFFER_OFFSET_END (buffer));
@ -607,7 +607,7 @@ gst_stream_synchronizer_sink_chain (GstPad * pad, GstBuffer * buffer)
stream->seen_data = TRUE; stream->seen_data = TRUE;
if (stream && stream->drop_discont) { if (stream && stream->drop_discont) {
buffer = gst_buffer_make_metadata_writable (buffer); buffer = gst_buffer_make_writable (buffer);
GST_BUFFER_FLAG_UNSET (buffer, GST_BUFFER_FLAG_DISCONT); GST_BUFFER_FLAG_UNSET (buffer, GST_BUFFER_FLAG_DISCONT);
stream->drop_discont = FALSE; stream->drop_discont = FALSE;
} }

View file

@ -138,8 +138,8 @@ gst_ssa_parse_setcaps (GstPad * sinkpad, GstCaps * caps)
GstStructure *s; GstStructure *s;
const guchar bom_utf8[] = { 0xEF, 0xBB, 0xBF }; const guchar bom_utf8[] = { 0xEF, 0xBB, 0xBF };
GstBuffer *priv; GstBuffer *priv;
gchar *data; gchar *data, *ptr;
guint size; gsize size, left;
s = gst_caps_get_structure (caps, 0); s = gst_caps_get_structure (caps, 0);
val = gst_structure_get_value (s, "codec_data"); val = gst_structure_get_value (s, "codec_data");
@ -157,12 +157,15 @@ gst_ssa_parse_setcaps (GstPad * sinkpad, GstCaps * caps)
gst_buffer_ref (priv); gst_buffer_ref (priv);
data = (gchar *) GST_BUFFER_DATA (priv); data = gst_buffer_map (priv, &size, NULL, GST_MAP_READ);
size = GST_BUFFER_SIZE (priv);
ptr = data;
left = size;
/* skip UTF-8 BOM */ /* skip UTF-8 BOM */
if (size >= 3 && memcmp (data, bom_utf8, 3) == 0) { if (left >= 3 && memcmp (ptr, bom_utf8, 3) == 0) {
data += 3; ptr += 3;
size -= 3; left -= 3;
} }
if (!strstr (data, "[Script Info]")) { if (!strstr (data, "[Script Info]")) {
@ -171,16 +174,17 @@ gst_ssa_parse_setcaps (GstPad * sinkpad, GstCaps * caps)
return FALSE; return FALSE;
} }
if (!g_utf8_validate (data, size, NULL)) { if (!g_utf8_validate (ptr, left, NULL)) {
GST_WARNING_OBJECT (parse, "Init section is not valid UTF-8"); GST_WARNING_OBJECT (parse, "Init section is not valid UTF-8");
gst_buffer_unref (priv); gst_buffer_unref (priv);
return FALSE; return FALSE;
} }
/* FIXME: parse initial section */ /* FIXME: parse initial section */
parse->ini = g_strndup (data, size); parse->ini = g_strndup (ptr, left);
GST_LOG_OBJECT (parse, "Init section:\n%s", parse->ini); GST_LOG_OBJECT (parse, "Init section:\n%s", parse->ini);
gst_buffer_unmap (priv, data, size);
gst_buffer_unref (priv); gst_buffer_unref (priv);
return TRUE; return TRUE;
@ -269,8 +273,8 @@ gst_ssa_parse_push_line (GstSsaParse * parse, gchar * txt,
/* allocate enough for a terminating NUL, but don't include it in buf size */ /* allocate enough for a terminating NUL, but don't include it in buf size */
buf = gst_buffer_new_and_alloc (len + 1); buf = gst_buffer_new_and_alloc (len + 1);
memcpy (GST_BUFFER_DATA (buf), escaped, len + 1); gst_buffer_fill (buf, 0, escaped, len + 1);
GST_BUFFER_SIZE (buf) = len; gst_buffer_set_size (buf, len);
g_free (escaped); g_free (escaped);
GST_BUFFER_TIMESTAMP (buf) = start; GST_BUFFER_TIMESTAMP (buf) = start;
@ -299,6 +303,8 @@ gst_ssa_parse_chain (GstPad * sinkpad, GstBuffer * buf)
GstSsaParse *parse = GST_SSA_PARSE (GST_PAD_PARENT (sinkpad)); GstSsaParse *parse = GST_SSA_PARSE (GST_PAD_PARENT (sinkpad));
GstClockTime ts; GstClockTime ts;
gchar *txt; gchar *txt;
gchar *data;
gsize size;
if (G_UNLIKELY (!parse->framed)) if (G_UNLIKELY (!parse->framed))
goto not_framed; goto not_framed;
@ -314,7 +320,10 @@ gst_ssa_parse_chain (GstPad * sinkpad, GstBuffer * buf)
} }
/* make double-sure it's 0-terminated and all */ /* make double-sure it's 0-terminated and all */
txt = g_strndup ((gchar *) GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf)); data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
txt = g_strndup (data, size);
gst_buffer_unmap (buf, data, size);
if (txt == NULL) if (txt == NULL)
goto empty_text; goto empty_text;

View file

@ -1418,6 +1418,8 @@ feed_textbuf (GstSubParse * self, GstBuffer * buf)
gboolean discont; gboolean discont;
gsize consumed; gsize consumed;
gchar *input = NULL; gchar *input = NULL;
const guint8 *data;
gsize avail;
discont = GST_BUFFER_IS_DISCONT (buf); discont = GST_BUFFER_IS_DISCONT (buf);
@ -1442,19 +1444,20 @@ feed_textbuf (GstSubParse * self, GstBuffer * buf)
* subtitles which are discontinuous by nature. */ * subtitles which are discontinuous by nature. */
} }
self->offset = GST_BUFFER_OFFSET (buf) + GST_BUFFER_SIZE (buf); self->offset = GST_BUFFER_OFFSET (buf) + gst_buffer_get_size (buf);
self->next_offset = self->offset; self->next_offset = self->offset;
gst_adapter_push (self->adapter, buf); gst_adapter_push (self->adapter, buf);
input = avail = gst_adapter_available (self->adapter);
convert_encoding (self, (const gchar *) gst_adapter_peek (self->adapter, data = gst_adapter_map (self->adapter, avail),
gst_adapter_available (self->adapter)), input = convert_encoding (self, (const gchar *) data, avail, &consumed);
(gsize) gst_adapter_available (self->adapter), &consumed);
if (input && consumed > 0) { if (input && consumed > 0) {
self->textbuf = g_string_append (self->textbuf, input); self->textbuf = g_string_append (self->textbuf, input);
gst_adapter_flush (self->adapter, consumed); gst_adapter_unmap (self->adapter, consumed);
} else {
gst_adapter_unmap (self->adapter, 0);
} }
g_free (input); g_free (input);
@ -1465,12 +1468,13 @@ handle_buffer (GstSubParse * self, GstBuffer * buf)
{ {
GstFlowReturn ret = GST_FLOW_OK; GstFlowReturn ret = GST_FLOW_OK;
GstCaps *caps = NULL; GstCaps *caps = NULL;
gchar *line, *subtitle; gchar *line, *subtitle, *data;
gsize size;
if (self->first_buffer) { if (self->first_buffer) {
self->detected_encoding = data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
detect_encoding ((gchar *) GST_BUFFER_DATA (buf), self->detected_encoding = detect_encoding (data, size);
GST_BUFFER_SIZE (buf)); gst_buffer_unmap (buf, data, size);
self->first_buffer = FALSE; self->first_buffer = FALSE;
self->state.fps_n = self->fps_n; self->state.fps_n = self->fps_n;
self->state.fps_d = self->fps_d; self->state.fps_d = self->fps_d;
@ -1520,8 +1524,9 @@ handle_buffer (GstSubParse * self, GstBuffer * buf)
if (ret == GST_FLOW_OK) { if (ret == GST_FLOW_OK) {
/* copy terminating NUL character as well */ /* copy terminating NUL character as well */
memcpy (GST_BUFFER_DATA (buf), subtitle, subtitle_len + 1); gst_buffer_fill (buf, 0, subtitle, subtitle_len + 1);
GST_BUFFER_SIZE (buf) = subtitle_len; gst_buffer_set_size (buf, subtitle_len);
GST_BUFFER_TIMESTAMP (buf) = self->state.start_time; GST_BUFFER_TIMESTAMP (buf) = self->state.start_time;
GST_BUFFER_DURATION (buf) = self->state.duration; GST_BUFFER_DURATION (buf) = self->state.duration;
@ -1602,13 +1607,13 @@ gst_sub_parse_sink_event (GstPad * pad, GstEvent * event)
self->parser_type == GST_SUB_PARSE_FORMAT_TMPLAYER || self->parser_type == GST_SUB_PARSE_FORMAT_TMPLAYER ||
self->parser_type == GST_SUB_PARSE_FORMAT_MPL2 || self->parser_type == GST_SUB_PARSE_FORMAT_MPL2 ||
self->parser_type == GST_SUB_PARSE_FORMAT_QTTEXT) { self->parser_type == GST_SUB_PARSE_FORMAT_QTTEXT) {
gchar term_chars[] = { '\n', '\n', '\0' };
GstBuffer *buf = gst_buffer_new_and_alloc (2 + 1); GstBuffer *buf = gst_buffer_new_and_alloc (2 + 1);
GST_DEBUG ("EOS. Pushing remaining text (if any)"); GST_DEBUG ("EOS. Pushing remaining text (if any)");
GST_BUFFER_DATA (buf)[0] = '\n'; gst_buffer_fill (buf, 0, term_chars, 3);
GST_BUFFER_DATA (buf)[1] = '\n'; gst_buffer_set_size (buf, 2);
GST_BUFFER_DATA (buf)[2] = '\0'; /* play it safe */
GST_BUFFER_SIZE (buf) = 2;
GST_BUFFER_OFFSET (buf) = self->offset; GST_BUFFER_OFFSET (buf) = self->offset;
gst_sub_parse_chain (pad, buf); gst_sub_parse_chain (pad, buf);
} }

View file

@ -1391,7 +1391,7 @@ gst_multi_fd_sink_client_queue_buffer (GstMultiFdSink * sink,
buffer = g_value_peek_pointer (bufval); buffer = g_value_peek_pointer (bufval);
GST_DEBUG_OBJECT (sink, GST_DEBUG_OBJECT (sink,
"[fd %5d] queueing streamheader buffer of length %d", "[fd %5d] queueing streamheader buffer of length %d",
client->fd.fd, GST_BUFFER_SIZE (buffer)); client->fd.fd, gst_buffer_get_size (buffer));
gst_buffer_ref (buffer); gst_buffer_ref (buffer);
client->sending = g_slist_append (client->sending, buffer); client->sending = g_slist_append (client->sending, buffer);
@ -1403,7 +1403,7 @@ gst_multi_fd_sink_client_queue_buffer (GstMultiFdSink * sink,
caps = NULL; caps = NULL;
GST_LOG_OBJECT (sink, "[fd %5d] queueing buffer of length %d", GST_LOG_OBJECT (sink, "[fd %5d] queueing buffer of length %d",
client->fd.fd, GST_BUFFER_SIZE (buffer)); client->fd.fd, gst_buffer_get_size (buffer));
gst_buffer_ref (buffer); gst_buffer_ref (buffer);
client->sending = g_slist_append (client->sending, buffer); client->sending = g_slist_append (client->sending, buffer);
@ -1490,7 +1490,7 @@ get_buffers_max (GstMultiFdSink * sink, gint64 max)
for (i = 0; i < len; i++) { for (i = 0; i < len; i++) {
buf = g_array_index (sink->bufqueue, GstBuffer *, i); buf = g_array_index (sink->bufqueue, GstBuffer *, i);
acc += GST_BUFFER_SIZE (buf); acc += gst_buffer_get_size (buf);
if (acc > max) if (acc > max)
return i + 1; return i + 1;
@ -1573,7 +1573,7 @@ find_limits (GstMultiFdSink * sink,
} }
buf = g_array_index (sink->bufqueue, GstBuffer *, i); buf = g_array_index (sink->bufqueue, GstBuffer *, i);
bytes += GST_BUFFER_SIZE (buf); bytes += gst_buffer_get_size (buf);
/* take timestamp and save for the base first timestamp */ /* take timestamp and save for the base first timestamp */
if ((time = GST_BUFFER_TIMESTAMP (buf)) != -1) { if ((time = GST_BUFFER_TIMESTAMP (buf)) != -1) {
@ -1980,10 +1980,14 @@ gst_multi_fd_sink_handle_client_write (GstMultiFdSink * sink,
if (client->sending) { if (client->sending) {
ssize_t wrote; ssize_t wrote;
GstBuffer *head; GstBuffer *head;
guint8 *data;
gsize size;
/* pick first buffer from list */ /* pick first buffer from list */
head = GST_BUFFER (client->sending->data); head = GST_BUFFER (client->sending->data);
maxsize = GST_BUFFER_SIZE (head) - client->bufoffset;
data = gst_buffer_map (head, &size, NULL, GST_MAP_READ);
maxsize = size - client->bufoffset;
/* try to write the complete buffer */ /* try to write the complete buffer */
#ifdef MSG_NOSIGNAL #ifdef MSG_NOSIGNAL
@ -1992,12 +1996,11 @@ gst_multi_fd_sink_handle_client_write (GstMultiFdSink * sink,
#define FLAGS 0 #define FLAGS 0
#endif #endif
if (client->is_socket) { if (client->is_socket) {
wrote = wrote = send (fd, data + client->bufoffset, maxsize, FLAGS);
send (fd, GST_BUFFER_DATA (head) + client->bufoffset, maxsize,
FLAGS);
} else { } else {
wrote = write (fd, GST_BUFFER_DATA (head) + client->bufoffset, maxsize); wrote = write (fd, data + client->bufoffset, maxsize);
} }
gst_buffer_unmap (head, data, size);
if (wrote < 0) { if (wrote < 0) {
/* hmm error.. */ /* hmm error.. */
@ -2499,14 +2502,14 @@ gst_multi_fd_sink_render (GstBaseSink * bsink, GstBuffer * buf)
/* stamp the buffer with previous caps if no caps set */ /* stamp the buffer with previous caps if no caps set */
if (!bufcaps) { if (!bufcaps) {
if (!gst_buffer_is_metadata_writable (buf)) { if (!gst_buffer_is_writable (buf)) {
/* metadata is not writable, copy will be made and original buffer /* metadata is not writable, copy will be made and original buffer
* will be unreffed so we need to ref so that we don't lose the * will be unreffed so we need to ref so that we don't lose the
* buffer in the render method. */ * buffer in the render method. */
gst_buffer_ref (buf); gst_buffer_ref (buf);
/* the new buffer is ours only, we keep it out of the scope of this /* the new buffer is ours only, we keep it out of the scope of this
* function */ * function */
buf = gst_buffer_make_metadata_writable (buf); buf = gst_buffer_make_writable (buf);
} else { } else {
/* else the metadata is writable, we ref because we keep the buffer /* else the metadata is writable, we ref because we keep the buffer
* out of the scope of this method */ * out of the scope of this method */
@ -2554,13 +2557,13 @@ gst_multi_fd_sink_render (GstBaseSink * bsink, GstBuffer * buf)
if (in_caps) { if (in_caps) {
GST_DEBUG_OBJECT (sink, GST_DEBUG_OBJECT (sink,
"appending IN_CAPS buffer with length %d to streamheader", "appending IN_CAPS buffer with length %d to streamheader",
GST_BUFFER_SIZE (buf)); gst_buffer_get_size (buf));
sink->streamheader = g_slist_append (sink->streamheader, buf); sink->streamheader = g_slist_append (sink->streamheader, buf);
} else { } else {
/* queue the buffer, this is a regular data buffer. */ /* queue the buffer, this is a regular data buffer. */
gst_multi_fd_sink_queue_buffer (sink, buf); gst_multi_fd_sink_queue_buffer (sink, buf);
sink->bytes_to_serve += GST_BUFFER_SIZE (buf); sink->bytes_to_serve += gst_buffer_get_size (buf);
} }
return GST_FLOW_OK; return GST_FLOW_OK;

View file

@ -228,6 +228,7 @@ gst_tcp_read_buffer (GstElement * this, int socket, GstPoll * fdset,
int ret; int ret;
ssize_t bytes_read; ssize_t bytes_read;
int readsize; int readsize;
guint8 *data;
*buf = NULL; *buf = NULL;
@ -251,7 +252,9 @@ gst_tcp_read_buffer (GstElement * this, int socket, GstPoll * fdset,
*buf = gst_buffer_new_and_alloc (readsize); *buf = gst_buffer_new_and_alloc (readsize);
bytes_read = read (socket, GST_BUFFER_DATA (*buf), readsize); data = gst_buffer_map (*buf, NULL, NULL, GST_MAP_WRITE);
bytes_read = read (socket, data, readsize);
gst_buffer_unmap (*buf, data, bytes_read);
if (bytes_read < 0) if (bytes_read < 0)
goto read_error; goto read_error;
@ -260,7 +263,7 @@ gst_tcp_read_buffer (GstElement * this, int socket, GstPoll * fdset,
/* but mom, you promised to give me readsize bytes! */ /* but mom, you promised to give me readsize bytes! */
goto short_read; goto short_read;
GST_LOG_OBJECT (this, "returning buffer of size %d", GST_BUFFER_SIZE (*buf)); GST_LOG_OBJECT (this, "returning buffer of size %d", bytes_read);
return GST_FLOW_OK; return GST_FLOW_OK;
/* ERRORS */ /* ERRORS */
@ -317,6 +320,8 @@ gst_tcp_gdp_read_buffer (GstElement * this, int socket, GstPoll * fdset,
{ {
GstFlowReturn ret; GstFlowReturn ret;
guint8 *header = NULL; guint8 *header = NULL;
guint8 *data;
gsize size;
GST_LOG_OBJECT (this, "Reading %d bytes for buffer packet header", GST_LOG_OBJECT (this, "Reading %d bytes for buffer packet header",
GST_DP_HEADER_LENGTH); GST_DP_HEADER_LENGTH);
@ -341,8 +346,9 @@ gst_tcp_gdp_read_buffer (GstElement * this, int socket, GstPoll * fdset,
g_free (header); g_free (header);
ret = gst_tcp_socket_read (this, socket, GST_BUFFER_DATA (*buf), data = gst_buffer_map (*buf, &size, NULL, GST_MAP_WRITE);
GST_BUFFER_SIZE (*buf), fdset); ret = gst_tcp_socket_read (this, socket, data, size, fdset);
gst_buffer_unmap (*buf, data, size);
if (ret != GST_FLOW_OK) if (ret != GST_FLOW_OK)
goto data_read_error; goto data_read_error;

View file

@ -196,19 +196,21 @@ gst_tcp_client_sink_render (GstBaseSink * bsink, GstBuffer * buf)
{ {
size_t wrote = 0; size_t wrote = 0;
GstTCPClientSink *sink; GstTCPClientSink *sink;
gint size; guint8 *data;
gsize size;
sink = GST_TCP_CLIENT_SINK (bsink); sink = GST_TCP_CLIENT_SINK (bsink);
g_return_val_if_fail (GST_OBJECT_FLAG_IS_SET (sink, GST_TCP_CLIENT_SINK_OPEN), g_return_val_if_fail (GST_OBJECT_FLAG_IS_SET (sink, GST_TCP_CLIENT_SINK_OPEN),
GST_FLOW_WRONG_STATE); GST_FLOW_WRONG_STATE);
size = GST_BUFFER_SIZE (buf); data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
GST_LOG_OBJECT (sink, "writing %" G_GSIZE_FORMAT " bytes for buffer data",
GST_LOG_OBJECT (sink, "writing %d bytes for buffer data", size); size);
/* write buffer data */ /* write buffer data */
wrote = gst_tcp_socket_write (sink->sock_fd.fd, GST_BUFFER_DATA (buf), size); wrote = gst_tcp_socket_write (sink->sock_fd.fd, data, size);
gst_buffer_unmap (buf, data, size);
if (wrote < size) if (wrote < size)
goto write_error; goto write_error;
@ -222,8 +224,8 @@ write_error:
{ {
GST_ELEMENT_ERROR (sink, RESOURCE, WRITE, GST_ELEMENT_ERROR (sink, RESOURCE, WRITE,
(_("Error while sending data to \"%s:%d\"."), sink->host, sink->port), (_("Error while sending data to \"%s:%d\"."), sink->host, sink->port),
("Only %" G_GSIZE_FORMAT " of %u bytes written: %s", ("Only %" G_GSIZE_FORMAT " of %" G_GSIZE_FORMAT " bytes written: %s",
wrote, GST_BUFFER_SIZE (buf), g_strerror (errno))); wrote, size, g_strerror (errno)));
return GST_FLOW_ERROR; return GST_FLOW_ERROR;
} }
} }

View file

@ -199,7 +199,7 @@ gst_tcp_client_src_create (GstPushSrc * psrc, GstBuffer ** outbuf)
"Returning buffer from _get of size %d, ts %" "Returning buffer from _get of size %d, ts %"
GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT
", offset %" G_GINT64_FORMAT ", offset_end %" G_GINT64_FORMAT, ", offset %" G_GINT64_FORMAT ", offset_end %" G_GINT64_FORMAT,
GST_BUFFER_SIZE (*outbuf), gst_buffer_get_size (*outbuf),
GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (*outbuf)), GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (*outbuf)),
GST_TIME_ARGS (GST_BUFFER_DURATION (*outbuf)), GST_TIME_ARGS (GST_BUFFER_DURATION (*outbuf)),
GST_BUFFER_OFFSET (*outbuf), GST_BUFFER_OFFSET_END (*outbuf)); GST_BUFFER_OFFSET (*outbuf), GST_BUFFER_OFFSET_END (*outbuf));

View file

@ -207,7 +207,7 @@ restart:
"Returning buffer from _get of size %d, ts %" "Returning buffer from _get of size %d, ts %"
GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT
", offset %" G_GINT64_FORMAT ", offset_end %" G_GINT64_FORMAT, ", offset %" G_GINT64_FORMAT ", offset_end %" G_GINT64_FORMAT,
GST_BUFFER_SIZE (*outbuf), gst_buffer_get_size (*outbuf),
GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (*outbuf)), GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (*outbuf)),
GST_TIME_ARGS (GST_BUFFER_DURATION (*outbuf)), GST_TIME_ARGS (GST_BUFFER_DURATION (*outbuf)),
GST_BUFFER_OFFSET (*outbuf), GST_BUFFER_OFFSET_END (*outbuf)); GST_BUFFER_OFFSET (*outbuf), GST_BUFFER_OFFSET_END (*outbuf));

View file

@ -130,7 +130,7 @@ static gboolean
utf8_type_find_have_valid_utf8_at_offset (GstTypeFind * tf, guint64 offset, utf8_type_find_have_valid_utf8_at_offset (GstTypeFind * tf, guint64 offset,
GstTypeFindProbability * prob) GstTypeFindProbability * prob)
{ {
guint8 *data; const guint8 *data;
/* randomly decided values */ /* randomly decided values */
guint min_size = 16; /* minimum size */ guint min_size = 16; /* minimum size */
@ -222,7 +222,7 @@ static GstStaticCaps uri_caps = GST_STATIC_CAPS ("text/uri-list");
static void static void
uri_type_find (GstTypeFind * tf, gpointer unused) uri_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint8 *data = gst_type_find_peek (tf, 0, BUFFER_SIZE); const guint8 *data = gst_type_find_peek (tf, 0, BUFFER_SIZE);
guint pos = 0; guint pos = 0;
guint offset = 0; guint offset = 0;
@ -287,7 +287,7 @@ xml_check_first_element (GstTypeFind * tf, const gchar * element, guint elen,
gboolean strict) gboolean strict)
{ {
gboolean got_xmldec; gboolean got_xmldec;
guint8 *data; const guint8 *data;
guint offset = 0; guint offset = 0;
guint pos = 0; guint pos = 0;
@ -351,7 +351,7 @@ static GstStaticCaps sdp_caps = GST_STATIC_CAPS ("application/sdp");
static gboolean static gboolean
sdp_check_header (GstTypeFind * tf) sdp_check_header (GstTypeFind * tf)
{ {
guint8 *data; const guint8 *data;
data = gst_type_find_peek (tf, 0, 5); data = gst_type_find_peek (tf, 0, 5);
if (!data) if (!data)
@ -398,9 +398,9 @@ static GstStaticCaps html_caps = GST_STATIC_CAPS ("text/html");
static void static void
html_type_find (GstTypeFind * tf, gpointer unused) html_type_find (GstTypeFind * tf, gpointer unused)
{ {
gchar *d, *data; const gchar *d, *data;
data = (gchar *) gst_type_find_peek (tf, 0, 16); data = (const gchar *) gst_type_find_peek (tf, 0, 16);
if (!data) if (!data)
return; return;
@ -409,7 +409,7 @@ html_type_find (GstTypeFind * tf, gpointer unused)
} else if (xml_check_first_element (tf, "html", 4, FALSE)) { } else if (xml_check_first_element (tf, "html", 4, FALSE)) {
gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, HTML_CAPS); gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, HTML_CAPS);
} else if ((d = memchr (data, '<', 16))) { } else if ((d = memchr (data, '<', 16))) {
data = (gchar *) gst_type_find_peek (tf, d - data, 6); data = (const gchar *) gst_type_find_peek (tf, d - data, 6);
if (data && g_ascii_strncasecmp (data, "<html>", 6) == 0) { if (data && g_ascii_strncasecmp (data, "<html>", 6) == 0) {
gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, HTML_CAPS); gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, HTML_CAPS);
} }
@ -424,7 +424,7 @@ static GstStaticCaps mid_caps = GST_STATIC_CAPS ("audio/midi");
static void static void
mid_type_find (GstTypeFind * tf, gpointer unused) mid_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 4); const guint8 *data = gst_type_find_peek (tf, 0, 4);
/* http://jedi.ks.uiuc.edu/~johns/links/music/midifile.html */ /* http://jedi.ks.uiuc.edu/~johns/links/music/midifile.html */
if (data && data[0] == 'M' && data[1] == 'T' && data[2] == 'h' if (data && data[0] == 'M' && data[1] == 'T' && data[2] == 'h'
@ -440,7 +440,7 @@ static GstStaticCaps mxmf_caps = GST_STATIC_CAPS ("audio/mobile-xmf");
static void static void
mxmf_type_find (GstTypeFind * tf, gpointer unused) mxmf_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint8 *data = NULL; const guint8 *data = NULL;
/* Search FileId "XMF_" 4 bytes */ /* Search FileId "XMF_" 4 bytes */
data = gst_type_find_peek (tf, 0, 4); data = gst_type_find_peek (tf, 0, 4);
@ -468,7 +468,7 @@ static GstStaticCaps flx_caps = GST_STATIC_CAPS ("video/x-fli");
static void static void
flx_type_find (GstTypeFind * tf, gpointer unused) flx_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 134); const guint8 *data = gst_type_find_peek (tf, 0, 134);
if (data) { if (data) {
/* check magic and the frame type of the first frame */ /* check magic and the frame type of the first frame */
@ -499,7 +499,7 @@ static GstStaticCaps id3_caps = GST_STATIC_CAPS ("application/x-id3");
static void static void
id3v2_type_find (GstTypeFind * tf, gpointer unused) id3v2_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 10); const guint8 *data = gst_type_find_peek (tf, 0, 10);
if (data && memcmp (data, "ID3", 3) == 0 && if (data && memcmp (data, "ID3", 3) == 0 &&
data[3] != 0xFF && data[4] != 0xFF && data[3] != 0xFF && data[4] != 0xFF &&
@ -512,7 +512,7 @@ id3v2_type_find (GstTypeFind * tf, gpointer unused)
static void static void
id3v1_type_find (GstTypeFind * tf, gpointer unused) id3v1_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint8 *data = gst_type_find_peek (tf, -128, 3); const guint8 *data = gst_type_find_peek (tf, -128, 3);
if (data && memcmp (data, "TAG", 3) == 0) { if (data && memcmp (data, "TAG", 3) == 0) {
gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, ID3_CAPS); gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, ID3_CAPS);
@ -527,7 +527,7 @@ static GstStaticCaps apetag_caps = GST_STATIC_CAPS ("application/x-apetag");
static void static void
apetag_type_find (GstTypeFind * tf, gpointer unused) apetag_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint8 *data; const guint8 *data;
/* APEv1/2 at start of file */ /* APEv1/2 at start of file */
data = gst_type_find_peek (tf, 0, 8); data = gst_type_find_peek (tf, 0, 8);
@ -552,7 +552,7 @@ static GstStaticCaps tta_caps = GST_STATIC_CAPS ("audio/x-ttafile");
static void static void
tta_type_find (GstTypeFind * tf, gpointer unused) tta_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 3); const guint8 *data = gst_type_find_peek (tf, 0, 3);
if (data) { if (data) {
if (memcmp (data, "TTA", 3) == 0) { if (memcmp (data, "TTA", 3) == 0) {
@ -950,8 +950,8 @@ static void
mp3_type_find_at_offset (GstTypeFind * tf, guint64 start_off, mp3_type_find_at_offset (GstTypeFind * tf, guint64 start_off,
guint * found_layer, GstTypeFindProbability * found_prob) guint * found_layer, GstTypeFindProbability * found_prob)
{ {
guint8 *data = NULL; const guint8 *data = NULL;
guint8 *data_end = NULL; const guint8 *data_end = NULL;
guint size; guint size;
guint64 skipped; guint64 skipped;
gint last_free_offset = -1; gint last_free_offset = -1;
@ -975,7 +975,7 @@ mp3_type_find_at_offset (GstTypeFind * tf, guint64 start_off,
data_end = data + size; data_end = data + size;
} }
if (*data == 0xFF) { if (*data == 0xFF) {
guint8 *head_data = NULL; const guint8 *head_data = NULL;
guint layer = 0, bitrate, samplerate, channels; guint layer = 0, bitrate, samplerate, channels;
guint found = 0; /* number of valid headers found */ guint found = 0; /* number of valid headers found */
guint64 offset = skipped; guint64 offset = skipped;
@ -1089,7 +1089,7 @@ static void
mp3_type_find (GstTypeFind * tf, gpointer unused) mp3_type_find (GstTypeFind * tf, gpointer unused)
{ {
GstTypeFindProbability prob, mid_prob; GstTypeFindProbability prob, mid_prob;
guint8 *data; const guint8 *data;
guint layer, mid_layer; guint layer, mid_layer;
guint64 length; guint64 length;
@ -1159,7 +1159,7 @@ GST_STATIC_CAPS ("audio/x-musepack, streamversion= (int) { 7, 8 }");
static void static void
musepack_type_find (GstTypeFind * tf, gpointer unused) musepack_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 4); const guint8 *data = gst_type_find_peek (tf, 0, 4);
GstTypeFindProbability prop = GST_TYPE_FIND_MINIMUM; GstTypeFindProbability prop = GST_TYPE_FIND_MINIMUM;
gint streamversion = -1; gint streamversion = -1;
@ -1481,7 +1481,7 @@ wavpack_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint64 offset; guint64 offset;
guint32 blocksize; guint32 blocksize;
guint8 *data; const guint8 *data;
data = gst_type_find_peek (tf, 0, 32); data = gst_type_find_peek (tf, 0, 32);
if (!data) if (!data)
@ -1544,7 +1544,7 @@ GST_STATIC_CAPS ("application/postscript");
static void static void
postscript_type_find (GstTypeFind * tf, gpointer unused) postscript_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 3); const guint8 *data = gst_type_find_peek (tf, 0, 3);
if (!data) if (!data)
return; return;
@ -1594,8 +1594,8 @@ GST_STATIC_CAPS ("multipart/x-mixed-replace");
static void static void
multipart_type_find (GstTypeFind * tf, gpointer unused) multipart_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint8 *data; const guint8 *data;
guint8 *x; const guint8 *x;
#define MULTIPART_MAX_BOUNDARY_OFFSET 16 #define MULTIPART_MAX_BOUNDARY_OFFSET 16
data = gst_type_find_peek (tf, 0, MULTIPART_MAX_BOUNDARY_OFFSET); data = gst_type_find_peek (tf, 0, MULTIPART_MAX_BOUNDARY_OFFSET);
@ -1704,7 +1704,7 @@ mpeg_sys_is_valid_pack (GstTypeFind * tf, const guint8 * data, guint len,
} }
static gboolean static gboolean
mpeg_sys_is_valid_pes (GstTypeFind * tf, guint8 * data, guint len, mpeg_sys_is_valid_pes (GstTypeFind * tf, const guint8 * data, guint len,
guint * pack_size) guint * pack_size)
{ {
guint pes_packet_len; guint pes_packet_len;
@ -1732,7 +1732,7 @@ mpeg_sys_is_valid_pes (GstTypeFind * tf, guint8 * data, guint len,
} }
static gboolean static gboolean
mpeg_sys_is_valid_sys (GstTypeFind * tf, guint8 * data, guint len, mpeg_sys_is_valid_sys (GstTypeFind * tf, const guint8 * data, guint len,
guint * pack_size) guint * pack_size)
{ {
guint sys_hdr_len; guint sys_hdr_len;
@ -1773,7 +1773,7 @@ mpeg_sys_is_valid_sys (GstTypeFind * tf, guint8 * data, guint len,
static void static void
mpeg_sys_type_find (GstTypeFind * tf, gpointer unused) mpeg_sys_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint8 *data, *data0, *first_sync, *end; const guint8 *data, *data0, *first_sync, *end;
gint mpegversion = 0; gint mpegversion = 0;
guint pack_headers = 0; guint pack_headers = 0;
guint pes_headers = 0; guint pes_headers = 0;
@ -1914,7 +1914,7 @@ mpeg_ts_probe_headers (GstTypeFind * tf, guint64 offset, gint packet_size)
{ {
/* We always enter this function having found at least one header already */ /* We always enter this function having found at least one header already */
gint found = 1; gint found = 1;
guint8 *data = NULL; const guint8 *data = NULL;
GST_LOG ("looking for mpeg-ts packets of size %u", packet_size); GST_LOG ("looking for mpeg-ts packets of size %u", packet_size);
while (found < GST_MPEGTS_TYPEFIND_MAX_HEADERS) { while (found < GST_MPEGTS_TYPEFIND_MAX_HEADERS) {
@ -1939,8 +1939,7 @@ mpeg_ts_type_find (GstTypeFind * tf, gpointer unused)
/* TS packet sizes to test: normal, DVHS packet size and /* TS packet sizes to test: normal, DVHS packet size and
* FEC with 16 or 20 byte codes packet size. */ * FEC with 16 or 20 byte codes packet size. */
const gint pack_sizes[] = { 188, 192, 204, 208 }; const gint pack_sizes[] = { 188, 192, 204, 208 };
const guint8 *data = NULL;
guint8 *data = NULL;
guint size = 0; guint size = 0;
guint64 skipped = 0; guint64 skipped = 0;
@ -2375,7 +2374,7 @@ static GstStaticCaps aiff_caps = GST_STATIC_CAPS ("audio/x-aiff");
static void static void
aiff_type_find (GstTypeFind * tf, gpointer unused) aiff_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 4); const guint8 *data = gst_type_find_peek (tf, 0, 4);
if (data && memcmp (data, "FORM", 4) == 0) { if (data && memcmp (data, "FORM", 4) == 0) {
data += 8; data += 8;
@ -2392,7 +2391,7 @@ static GstStaticCaps svx_caps = GST_STATIC_CAPS ("audio/x-svx");
static void static void
svx_type_find (GstTypeFind * tf, gpointer unused) svx_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 4); const guint8 *data = gst_type_find_peek (tf, 0, 4);
if (data && memcmp (data, "FORM", 4) == 0) { if (data && memcmp (data, "FORM", 4) == 0) {
data += 8; data += 8;
@ -2409,7 +2408,7 @@ static GstStaticCaps shn_caps = GST_STATIC_CAPS ("audio/x-shorten");
static void static void
shn_type_find (GstTypeFind * tf, gpointer unused) shn_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 4); const guint8 *data = gst_type_find_peek (tf, 0, 4);
if (data && memcmp (data, "ajkg", 4) == 0) { if (data && memcmp (data, "ajkg", 4) == 0) {
gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, SHN_CAPS); gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, SHN_CAPS);
@ -2428,7 +2427,7 @@ static GstStaticCaps ape_caps = GST_STATIC_CAPS ("application/x-ape");
static void static void
ape_type_find (GstTypeFind * tf, gpointer unused) ape_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 4); const guint8 *data = gst_type_find_peek (tf, 0, 4);
if (data && memcmp (data, "MAC ", 4) == 0) { if (data && memcmp (data, "MAC ", 4) == 0) {
gst_type_find_suggest (tf, GST_TYPE_FIND_LIKELY + 10, APE_CAPS); gst_type_find_suggest (tf, GST_TYPE_FIND_LIKELY + 10, APE_CAPS);
@ -2445,7 +2444,7 @@ static GstStaticCaps m4a_caps = GST_STATIC_CAPS ("audio/x-m4a");
static void static void
m4a_type_find (GstTypeFind * tf, gpointer unused) m4a_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint8 *data = gst_type_find_peek (tf, 4, 8); const guint8 *data = gst_type_find_peek (tf, 4, 8);
if (data && (memcmp (data, "ftypM4A ", 8) == 0)) { if (data && (memcmp (data, "ftypM4A ", 8) == 0)) {
gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, M4A_CAPS); gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, M4A_CAPS);
@ -2482,7 +2481,7 @@ q3gp_type_find (GstTypeFind * tf, gpointer unused)
const gchar *profile; const gchar *profile;
guint32 ftyp_size = 0; guint32 ftyp_size = 0;
gint offset = 0; gint offset = 0;
guint8 *data = NULL; const guint8 *data = NULL;
if ((data = gst_type_find_peek (tf, 0, 12)) == NULL) { if ((data = gst_type_find_peek (tf, 0, 12)) == NULL) {
return; return;
@ -2532,7 +2531,7 @@ static GstStaticCaps jp2_caps = GST_STATIC_CAPS ("image/jp2");
static void static void
jp2_type_find (GstTypeFind * tf, gpointer unused) jp2_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint8 *data; const guint8 *data;
data = gst_type_find_peek (tf, 0, 24); data = gst_type_find_peek (tf, 0, 24);
if (!data) if (!data)
@ -2563,7 +2562,7 @@ static GstStaticCaps qt_caps = GST_STATIC_CAPS ("video/quicktime");
static void static void
qt_type_find (GstTypeFind * tf, gpointer unused) qt_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint8 *data; const guint8 *data;
guint tip = 0; guint tip = 0;
guint64 offset = 0; guint64 offset = 0;
guint64 size; guint64 size;
@ -2630,7 +2629,7 @@ qt_type_find (GstTypeFind * tf, gpointer unused)
} }
} }
if (size == 1) { if (size == 1) {
guint8 *sizedata; const guint8 *sizedata;
sizedata = gst_type_find_peek (tf, offset + 8, 8); sizedata = gst_type_find_peek (tf, offset + 8, 8);
if (sizedata == NULL) if (sizedata == NULL)
@ -2726,7 +2725,7 @@ static GstStaticCaps mod_caps = GST_STATIC_CAPS ("audio/x-mod");
static void static void
mod_type_find (GstTypeFind * tf, gpointer unused) mod_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint8 *data; const guint8 *data;
/* MOD */ /* MOD */
if ((data = gst_type_find_peek (tf, 1080, 4)) != NULL) { if ((data = gst_type_find_peek (tf, 1080, 4)) != NULL) {
@ -2782,7 +2781,7 @@ mod_type_find (GstTypeFind * tf, gpointer unused)
} }
/* DSM */ /* DSM */
if (memcmp (data, "RIFF", 4) == 0) { if (memcmp (data, "RIFF", 4) == 0) {
guint8 *data2 = gst_type_find_peek (tf, 8, 4); const guint8 *data2 = gst_type_find_peek (tf, 8, 4);
if (data2) { if (data2) {
if (memcmp (data2, "DSMF", 4) == 0) { if (memcmp (data2, "DSMF", 4) == 0) {
@ -2793,7 +2792,7 @@ mod_type_find (GstTypeFind * tf, gpointer unused)
} }
/* FAM */ /* FAM */
if (memcmp (data, "FAM\xFE", 4) == 0) { if (memcmp (data, "FAM\xFE", 4) == 0) {
guint8 *data2 = gst_type_find_peek (tf, 44, 3); const guint8 *data2 = gst_type_find_peek (tf, 44, 3);
if (data2) { if (data2) {
if (memcmp (data2, "compare", 3) == 0) { if (memcmp (data2, "compare", 3) == 0) {
@ -2807,7 +2806,7 @@ mod_type_find (GstTypeFind * tf, gpointer unused)
} }
/* GDM */ /* GDM */
if (memcmp (data, "GDM\xFE", 4) == 0) { if (memcmp (data, "GDM\xFE", 4) == 0) {
guint8 *data2 = gst_type_find_peek (tf, 71, 4); const guint8 *data2 = gst_type_find_peek (tf, 71, 4);
if (data2) { if (data2) {
if (memcmp (data2, "GMFS", 4) == 0) { if (memcmp (data2, "GMFS", 4) == 0) {
@ -2838,7 +2837,7 @@ mod_type_find (GstTypeFind * tf, gpointer unused)
if ((data = gst_type_find_peek (tf, 20, 8)) != NULL) { if ((data = gst_type_find_peek (tf, 20, 8)) != NULL) {
if (g_ascii_strncasecmp ((gchar *) data, "!Scream!", 8) == 0 || if (g_ascii_strncasecmp ((gchar *) data, "!Scream!", 8) == 0 ||
g_ascii_strncasecmp ((gchar *) data, "BMOD2STM", 8) == 0) { g_ascii_strncasecmp ((gchar *) data, "BMOD2STM", 8) == 0) {
guint8 *id, *stmtype; const guint8 *id, *stmtype;
if ((id = gst_type_find_peek (tf, 28, 1)) == NULL) if ((id = gst_type_find_peek (tf, 28, 1)) == NULL)
return; return;
@ -2859,7 +2858,7 @@ GST_STATIC_CAPS ("application/x-shockwave-flash");
static void static void
swf_type_find (GstTypeFind * tf, gpointer unused) swf_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 4); const guint8 *data = gst_type_find_peek (tf, 0, 4);
if (data && (data[0] == 'F' || data[0] == 'C') && if (data && (data[0] == 'F' || data[0] == 'C') &&
data[1] == 'W' && data[2] == 'S') { data[1] == 'W' && data[2] == 'S') {
@ -3050,7 +3049,7 @@ static GstStaticCaps tiff_le_caps = GST_STATIC_CAPS ("image/tiff, "
static void static void
tiff_type_find (GstTypeFind * tf, gpointer ununsed) tiff_type_find (GstTypeFind * tf, gpointer ununsed)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 8); const guint8 *data = gst_type_find_peek (tf, 0, 8);
guint8 le_header[4] = { 0x49, 0x49, 0x2A, 0x00 }; guint8 le_header[4] = { 0x49, 0x49, 0x2A, 0x00 };
guint8 be_header[4] = { 0x4D, 0x4D, 0x00, 0x2A }; guint8 be_header[4] = { 0x4D, 0x4D, 0x00, 0x2A };
@ -3167,7 +3166,7 @@ static GstStaticCaps sds_caps = GST_STATIC_CAPS ("audio/x-sds");
static void static void
sds_type_find (GstTypeFind * tf, gpointer ununsed) sds_type_find (GstTypeFind * tf, gpointer ununsed)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 4); const guint8 *data = gst_type_find_peek (tf, 0, 4);
guint8 mask[4] = { 0xFF, 0xFF, 0x80, 0xFF }; guint8 mask[4] = { 0xFF, 0xFF, 0x80, 0xFF };
guint8 match[4] = { 0xF0, 0x7E, 0, 0x01 }; guint8 match[4] = { 0xF0, 0x7E, 0, 0x01 };
gint x; gint x;
@ -3188,7 +3187,7 @@ static GstStaticCaps ircam_caps = GST_STATIC_CAPS ("audio/x-ircam");
static void static void
ircam_type_find (GstTypeFind * tf, gpointer ununsed) ircam_type_find (GstTypeFind * tf, gpointer ununsed)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 4); const guint8 *data = gst_type_find_peek (tf, 0, 4);
guint8 mask[4] = { 0xFF, 0xFF, 0xF8, 0xFF }; guint8 mask[4] = { 0xFF, 0xFF, 0xF8, 0xFF };
guint8 match[4] = { 0x64, 0xA3, 0x00, 0x00 }; guint8 match[4] = { 0x64, 0xA3, 0x00, 0x00 };
gint x; gint x;
@ -3220,7 +3219,7 @@ static gboolean
ebml_check_header (GstTypeFind * tf, const gchar * doctype, int doctype_len) ebml_check_header (GstTypeFind * tf, const gchar * doctype, int doctype_len)
{ {
/* 4 bytes for EBML ID, 1 byte for header length identifier */ /* 4 bytes for EBML ID, 1 byte for header length identifier */
guint8 *data = gst_type_find_peek (tf, 0, 4 + 1); const guint8 *data = gst_type_find_peek (tf, 0, 4 + 1);
gint len_mask = 0x80, size = 1, n = 1, total; gint len_mask = 0x80, size = 1, n = 1, total;
if (!data) if (!data)
@ -3348,7 +3347,7 @@ static GstStaticCaps dv_caps = GST_STATIC_CAPS ("video/x-dv, "
static void static void
dv_type_find (GstTypeFind * tf, gpointer private) dv_type_find (GstTypeFind * tf, gpointer private)
{ {
guint8 *data; const guint8 *data;
data = gst_type_find_peek (tf, 0, 5); data = gst_type_find_peek (tf, 0, 5);
@ -3380,7 +3379,7 @@ static GstStaticCaps ogg_annodex_caps =
static void static void
ogganx_type_find (GstTypeFind * tf, gpointer private) ogganx_type_find (GstTypeFind * tf, gpointer private)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 4); const guint8 *data = gst_type_find_peek (tf, 0, 4);
if ((data != NULL) && (memcmp (data, "OggS", 4) == 0)) { if ((data != NULL) && (memcmp (data, "OggS", 4) == 0)) {
@ -3402,7 +3401,7 @@ static GstStaticCaps vorbis_caps = GST_STATIC_CAPS ("audio/x-vorbis");
static void static void
vorbis_type_find (GstTypeFind * tf, gpointer private) vorbis_type_find (GstTypeFind * tf, gpointer private)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 30); const guint8 *data = gst_type_find_peek (tf, 0, 30);
if (data) { if (data) {
guint blocksize_0; guint blocksize_0;
@ -3447,7 +3446,7 @@ static GstStaticCaps theora_caps = GST_STATIC_CAPS ("video/x-theora");
static void static void
theora_type_find (GstTypeFind * tf, gpointer private) theora_type_find (GstTypeFind * tf, gpointer private)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 7); //42); const guint8 *data = gst_type_find_peek (tf, 0, 7); //42);
if (data) { if (data) {
if (data[0] != 0x80) if (data[0] != 0x80)
@ -3464,7 +3463,7 @@ theora_type_find (GstTypeFind * tf, gpointer private)
static void static void
kate_type_find (GstTypeFind * tf, gpointer private) kate_type_find (GstTypeFind * tf, gpointer private)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 64); const guint8 *data = gst_type_find_peek (tf, 0, 64);
gchar category[16] = { 0, }; gchar category[16] = { 0, };
if (G_UNLIKELY (data == NULL)) if (G_UNLIKELY (data == NULL))
@ -3497,7 +3496,7 @@ GST_STATIC_CAPS ("application/x-ogm-video");
static void static void
ogmvideo_type_find (GstTypeFind * tf, gpointer private) ogmvideo_type_find (GstTypeFind * tf, gpointer private)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 9); const guint8 *data = gst_type_find_peek (tf, 0, 9);
if (data) { if (data) {
if (memcmp (data, "\001video\000\000\000", 9) != 0) if (memcmp (data, "\001video\000\000\000", 9) != 0)
@ -3512,7 +3511,7 @@ GST_STATIC_CAPS ("application/x-ogm-audio");
static void static void
ogmaudio_type_find (GstTypeFind * tf, gpointer private) ogmaudio_type_find (GstTypeFind * tf, gpointer private)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 9); const guint8 *data = gst_type_find_peek (tf, 0, 9);
if (data) { if (data) {
if (memcmp (data, "\001audio\000\000\000", 9) != 0) if (memcmp (data, "\001audio\000\000\000", 9) != 0)
@ -3527,7 +3526,7 @@ static GstStaticCaps ogmtext_caps = GST_STATIC_CAPS ("application/x-ogm-text");
static void static void
ogmtext_type_find (GstTypeFind * tf, gpointer private) ogmtext_type_find (GstTypeFind * tf, gpointer private)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 9); const guint8 *data = gst_type_find_peek (tf, 0, 9);
if (data) { if (data) {
if (memcmp (data, "\001text\000\000\000\000", 9) != 0) if (memcmp (data, "\001text\000\000\000\000", 9) != 0)
@ -3544,7 +3543,7 @@ static GstStaticCaps speex_caps = GST_STATIC_CAPS ("audio/x-speex");
static void static void
speex_type_find (GstTypeFind * tf, gpointer private) speex_type_find (GstTypeFind * tf, gpointer private)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 80); const guint8 *data = gst_type_find_peek (tf, 0, 80);
if (data) { if (data) {
/* 8 byte string "Speex " /* 8 byte string "Speex "
@ -3580,7 +3579,7 @@ static GstStaticCaps celt_caps = GST_STATIC_CAPS ("audio/x-celt");
static void static void
celt_type_find (GstTypeFind * tf, gpointer private) celt_type_find (GstTypeFind * tf, gpointer private)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 8); const guint8 *data = gst_type_find_peek (tf, 0, 8);
if (data) { if (data) {
/* 8 byte string "CELT " */ /* 8 byte string "CELT " */
@ -3599,7 +3598,7 @@ GST_STATIC_CAPS ("application/x-ogg-skeleton, parsed=(boolean)FALSE");
static void static void
oggskel_type_find (GstTypeFind * tf, gpointer private) oggskel_type_find (GstTypeFind * tf, gpointer private)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 12); const guint8 *data = gst_type_find_peek (tf, 0, 12);
if (data) { if (data) {
/* 8 byte string "fishead\0" for the ogg skeleton stream */ /* 8 byte string "fishead\0" for the ogg skeleton stream */
@ -3625,7 +3624,7 @@ static void
cmml_type_find (GstTypeFind * tf, gpointer private) cmml_type_find (GstTypeFind * tf, gpointer private)
{ {
/* Header is 12 bytes minimum (though we don't check the minor version */ /* Header is 12 bytes minimum (though we don't check the minor version */
guint8 *data = gst_type_find_peek (tf, 0, 12); const guint8 *data = gst_type_find_peek (tf, 0, 12);
if (data) { if (data) {
@ -3652,7 +3651,7 @@ static GstStaticCaps tar_caps = GST_STATIC_CAPS ("application/x-tar");
static void static void
tar_type_find (GstTypeFind * tf, gpointer unused) tar_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint8 *data = gst_type_find_peek (tf, 257, 8); const guint8 *data = gst_type_find_peek (tf, 257, 8);
/* of course we are not certain, but we don't want other typefind funcs /* of course we are not certain, but we don't want other typefind funcs
* to detect formats of files within the tar archive, e.g. mp3s */ * to detect formats of files within the tar archive, e.g. mp3s */
@ -3674,7 +3673,7 @@ static GstStaticCaps ar_caps = GST_STATIC_CAPS ("application/x-ar");
static void static void
ar_type_find (GstTypeFind * tf, gpointer unused) ar_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 24); const guint8 *data = gst_type_find_peek (tf, 0, 24);
if (data && memcmp (data, "!<arch>", 7) == 0) { if (data && memcmp (data, "!<arch>", 7) == 0) {
gint i; gint i;
@ -3701,7 +3700,7 @@ static GstStaticCaps au_caps = GST_STATIC_CAPS ("audio/x-au");
static void static void
au_type_find (GstTypeFind * tf, gpointer unused) au_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 4); const guint8 *data = gst_type_find_peek (tf, 0, 4);
if (data) { if (data) {
if (memcmp (data, ".snd", 4) == 0 || memcmp (data, "dns.", 4) == 0) { if (memcmp (data, ".snd", 4) == 0 || memcmp (data, "dns.", 4) == 0) {
@ -3723,7 +3722,7 @@ static GstStaticCaps nuv_caps = GST_STATIC_CAPS ("video/x-nuv");
static void static void
nuv_type_find (GstTypeFind * tf, gpointer unused) nuv_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 11); const guint8 *data = gst_type_find_peek (tf, 0, 11);
if (data) { if (data) {
if (memcmp (data, "MythTVVideo", 11) == 0 if (memcmp (data, "MythTVVideo", 11) == 0
@ -3741,7 +3740,7 @@ static GstStaticCaps paris_caps = GST_STATIC_CAPS ("audio/x-paris");
static void static void
paris_type_find (GstTypeFind * tf, gpointer unused) paris_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 4); const guint8 *data = gst_type_find_peek (tf, 0, 4);
if (data) { if (data) {
if (memcmp (data, " paf", 4) == 0 || memcmp (data, "fap ", 4) == 0) { if (memcmp (data, " paf", 4) == 0 || memcmp (data, "fap ", 4) == 0) {
@ -3758,7 +3757,7 @@ static GstStaticCaps ilbc_caps = GST_STATIC_CAPS ("audio/iLBC-sh");
static void static void
ilbc_type_find (GstTypeFind * tf, gpointer unused) ilbc_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 8); const guint8 *data = gst_type_find_peek (tf, 0, 8);
if (data) { if (data) {
if (memcmp (data, "#!iLBC30", 8) == 0 || memcmp (data, "#!iLBC20", 8) == 0) { if (memcmp (data, "#!iLBC30", 8) == 0 || memcmp (data, "#!iLBC20", 8) == 0) {
@ -3776,7 +3775,7 @@ GST_STATIC_CAPS ("application/x-ms-dos-executable");
static void static void
msdos_type_find (GstTypeFind * tf, gpointer unused) msdos_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 64); const guint8 *data = gst_type_find_peek (tf, 0, 64);
if (data && data[0] == 'M' && data[1] == 'Z' && if (data && data[0] == 'M' && data[1] == 'Z' &&
GST_READ_UINT16_LE (data + 8) == 4) { GST_READ_UINT16_LE (data + 8) == 4) {
@ -3803,7 +3802,7 @@ mmsh_type_find (GstTypeFind * tf, gpointer unused)
0xcf, 0x11, 0xa6, 0xd9, 0x00, 0xaa, 0x00, 0x62, 0xce, 0x6c 0xcf, 0x11, 0xa6, 0xd9, 0x00, 0xaa, 0x00, 0x62, 0xce, 0x6c
}; };
guint8 *data; const guint8 *data;
data = gst_type_find_peek (tf, 0, 2 + 2 + 4 + 2 + 2 + 16); data = gst_type_find_peek (tf, 0, 2 + 2 + 4 + 2 + 2 + 16);
if (data && data[0] == 0x24 && data[1] == 0x48 && if (data && data[0] == 0x24 && data[1] == 0x48 &&
@ -3825,7 +3824,7 @@ static GstStaticCaps dirac_caps = GST_STATIC_CAPS ("video/x-dirac");
static void static void
dirac_type_find (GstTypeFind * tf, gpointer unused) dirac_type_find (GstTypeFind * tf, gpointer unused)
{ {
guint8 *data = gst_type_find_peek (tf, 0, 8); const guint8 *data = gst_type_find_peek (tf, 0, 8);
if (data) { if (data) {
if (memcmp (data, "BBCD", 4) == 0 || memcmp (data, "KW-DIRAC", 8) == 0) { if (memcmp (data, "BBCD", 4) == 0 || memcmp (data, "KW-DIRAC", 8) == 0) {
@ -3846,7 +3845,7 @@ vivo_type_find (GstTypeFind * tf, gpointer unused)
static const guint8 vivo_marker[] = { 'V', 'e', 'r', 's', 'i', 'o', 'n', static const guint8 vivo_marker[] = { 'V', 'e', 'r', 's', 'i', 'o', 'n',
':', 'V', 'i', 'v', 'o', '/' ':', 'V', 'i', 'v', 'o', '/'
}; };
guint8 *data; const guint8 *data;
guint hdr_len, pos; guint hdr_len, pos;
data = gst_type_find_peek (tf, 0, 1024); data = gst_type_find_peek (tf, 0, 1024);
@ -3884,7 +3883,7 @@ xdgmime_typefind (GstTypeFind * find, gpointer user_data)
gchar *mimetype; gchar *mimetype;
gsize length = 16384; gsize length = 16384;
guint64 tf_length; guint64 tf_length;
guint8 *data; const guint8 *data;
gchar *tmp; gchar *tmp;
if ((tf_length = gst_type_find_get_length (find)) > 0) if ((tf_length = gst_type_find_get_length (find)) > 0)
@ -3936,7 +3935,7 @@ xdgmime_typefind (GstTypeFind * find, gpointer user_data)
static void static void
windows_icon_typefind (GstTypeFind * find, gpointer user_data) windows_icon_typefind (GstTypeFind * find, gpointer user_data)
{ {
guint8 *data; const guint8 *data;
gint64 datalen; gint64 datalen;
guint16 type, nimages; guint16 type, nimages;
gint32 size, offset; gint32 size, offset;
@ -4035,7 +4034,7 @@ static void
start_with_type_find (GstTypeFind * tf, gpointer private) start_with_type_find (GstTypeFind * tf, gpointer private)
{ {
GstTypeFindData *start_with = (GstTypeFindData *) private; GstTypeFindData *start_with = (GstTypeFindData *) private;
guint8 *data; const guint8 *data;
GST_LOG ("trying to find mime type %s with the first %u bytes of data", GST_LOG ("trying to find mime type %s with the first %u bytes of data",
gst_structure_get_name (gst_caps_get_structure (start_with->caps, 0)), gst_structure_get_name (gst_caps_get_structure (start_with->caps, 0)),
@ -4075,7 +4074,7 @@ static void
riff_type_find (GstTypeFind * tf, gpointer private) riff_type_find (GstTypeFind * tf, gpointer private)
{ {
GstTypeFindData *riff_data = (GstTypeFindData *) private; GstTypeFindData *riff_data = (GstTypeFindData *) private;
guint8 *data = gst_type_find_peek (tf, 0, 12); const guint8 *data = gst_type_find_peek (tf, 0, 12);
if (data && (memcmp (data, "RIFF", 4) == 0 || memcmp (data, "AVF0", 4) == 0)) { if (data && (memcmp (data, "RIFF", 4) == 0 || memcmp (data, "AVF0", 4) == 0)) {
data += 8; data += 8;

View file

@ -463,8 +463,7 @@ gst_video_rate_flush_prev (GstVideoRate * videorate, gboolean duplicate)
goto eos_before_buffers; goto eos_before_buffers;
/* make sure we can write to the metadata */ /* make sure we can write to the metadata */
outbuf = gst_buffer_make_metadata_writable outbuf = gst_buffer_make_writable (gst_buffer_ref (videorate->prevbuf));
(gst_buffer_ref (videorate->prevbuf));
GST_BUFFER_OFFSET (outbuf) = videorate->out; GST_BUFFER_OFFSET (outbuf) = videorate->out;
GST_BUFFER_OFFSET_END (outbuf) = videorate->out + 1; GST_BUFFER_OFFSET_END (outbuf) = videorate->out + 1;

View file

@ -201,7 +201,7 @@ static GstCaps *gst_video_scale_transform_caps (GstBaseTransform * trans,
static gboolean gst_video_scale_set_caps (GstBaseTransform * trans, static gboolean gst_video_scale_set_caps (GstBaseTransform * trans,
GstCaps * in, GstCaps * out); GstCaps * in, GstCaps * out);
static gboolean gst_video_scale_get_unit_size (GstBaseTransform * trans, static gboolean gst_video_scale_get_unit_size (GstBaseTransform * trans,
GstCaps * caps, guint * size); GstCaps * caps, gsize * size);
static GstFlowReturn gst_video_scale_transform (GstBaseTransform * trans, static GstFlowReturn gst_video_scale_transform (GstBaseTransform * trans,
GstBuffer * in, GstBuffer * out); GstBuffer * in, GstBuffer * out);
static void gst_video_scale_fixate_caps (GstBaseTransform * base, static void gst_video_scale_fixate_caps (GstBaseTransform * base,
@ -443,7 +443,7 @@ done:
static gboolean static gboolean
gst_video_scale_get_unit_size (GstBaseTransform * trans, GstCaps * caps, gst_video_scale_get_unit_size (GstBaseTransform * trans, GstCaps * caps,
guint * size) gsize * size)
{ {
GstVideoFormat format; GstVideoFormat format;
gint width, height; gint width, height;
@ -1016,18 +1016,22 @@ gst_video_scale_transform (GstBaseTransform * trans, GstBuffer * in,
gint method; gint method;
const guint8 *black = _get_black_for_format (videoscale->format); const guint8 *black = _get_black_for_format (videoscale->format);
gboolean add_borders; gboolean add_borders;
guint8 *in_data, *out_data;
gsize in_size, out_size;
GST_OBJECT_LOCK (videoscale); GST_OBJECT_LOCK (videoscale);
method = videoscale->method; method = videoscale->method;
add_borders = videoscale->add_borders; add_borders = videoscale->add_borders;
GST_OBJECT_UNLOCK (videoscale); GST_OBJECT_UNLOCK (videoscale);
in_data = gst_buffer_map (in, &in_size, NULL, GST_MAP_READ);
out_data = gst_buffer_map (out, &out_size, NULL, GST_MAP_WRITE);
gst_video_scale_setup_vs_image (&src, videoscale->format, 0, gst_video_scale_setup_vs_image (&src, videoscale->format, 0,
videoscale->from_width, videoscale->from_height, 0, 0, videoscale->from_width, videoscale->from_height, 0, 0, in_data);
GST_BUFFER_DATA (in));
gst_video_scale_setup_vs_image (&dest, videoscale->format, 0, gst_video_scale_setup_vs_image (&dest, videoscale->format, 0,
videoscale->to_width, videoscale->to_height, videoscale->borders_w, videoscale->to_width, videoscale->to_height, videoscale->borders_w,
videoscale->borders_h, GST_BUFFER_DATA (out)); videoscale->borders_h, out_data);
if (videoscale->format == GST_VIDEO_FORMAT_I420 if (videoscale->format == GST_VIDEO_FORMAT_I420
|| videoscale->format == GST_VIDEO_FORMAT_YV12 || videoscale->format == GST_VIDEO_FORMAT_YV12
@ -1035,17 +1039,15 @@ gst_video_scale_transform (GstBaseTransform * trans, GstBuffer * in,
|| videoscale->format == GST_VIDEO_FORMAT_Y42B || videoscale->format == GST_VIDEO_FORMAT_Y42B
|| videoscale->format == GST_VIDEO_FORMAT_Y41B) { || videoscale->format == GST_VIDEO_FORMAT_Y41B) {
gst_video_scale_setup_vs_image (&src_u, videoscale->format, 1, gst_video_scale_setup_vs_image (&src_u, videoscale->format, 1,
videoscale->from_width, videoscale->from_height, 0, 0, videoscale->from_width, videoscale->from_height, 0, 0, in_data);
GST_BUFFER_DATA (in));
gst_video_scale_setup_vs_image (&src_v, videoscale->format, 2, gst_video_scale_setup_vs_image (&src_v, videoscale->format, 2,
videoscale->from_width, videoscale->from_height, 0, 0, videoscale->from_width, videoscale->from_height, 0, 0, in_data);
GST_BUFFER_DATA (in));
gst_video_scale_setup_vs_image (&dest_u, videoscale->format, 1, gst_video_scale_setup_vs_image (&dest_u, videoscale->format, 1,
videoscale->to_width, videoscale->to_height, videoscale->borders_w, videoscale->to_width, videoscale->to_height, videoscale->borders_w,
videoscale->borders_h, GST_BUFFER_DATA (out)); videoscale->borders_h, out_data);
gst_video_scale_setup_vs_image (&dest_v, videoscale->format, 2, gst_video_scale_setup_vs_image (&dest_v, videoscale->format, 2,
videoscale->to_width, videoscale->to_height, videoscale->borders_w, videoscale->to_width, videoscale->to_height, videoscale->borders_w,
videoscale->borders_h, GST_BUFFER_DATA (out)); videoscale->borders_h, out_data);
} }
switch (videoscale->format) { switch (videoscale->format) {
@ -1252,7 +1254,11 @@ gst_video_scale_transform (GstBaseTransform * trans, GstBuffer * in,
} }
GST_LOG_OBJECT (videoscale, "pushing buffer of %d bytes", GST_LOG_OBJECT (videoscale, "pushing buffer of %d bytes",
GST_BUFFER_SIZE (out)); gst_buffer_get_size (out));
done:
gst_buffer_unmap (in, in_data, in_size);
gst_buffer_unmap (out, out_data, out_size);
return ret; return ret;
@ -1262,13 +1268,15 @@ unsupported:
GST_ELEMENT_ERROR (videoscale, STREAM, NOT_IMPLEMENTED, (NULL), GST_ELEMENT_ERROR (videoscale, STREAM, NOT_IMPLEMENTED, (NULL),
("Unsupported format %d for scaling method %d", ("Unsupported format %d for scaling method %d",
videoscale->format, method)); videoscale->format, method));
return GST_FLOW_ERROR; ret = GST_FLOW_ERROR;
goto done;
} }
unknown_mode: unknown_mode:
{ {
GST_ELEMENT_ERROR (videoscale, STREAM, NOT_IMPLEMENTED, (NULL), GST_ELEMENT_ERROR (videoscale, STREAM, NOT_IMPLEMENTED, (NULL),
("Unknown scaling method %d", videoscale->method)); ("Unknown scaling method %d", videoscale->method));
return GST_FLOW_ERROR; ret = GST_FLOW_ERROR;
goto done;
} }
} }

View file

@ -828,10 +828,11 @@ static GstFlowReturn
gst_video_test_src_create (GstPushSrc * psrc, GstBuffer ** buffer) gst_video_test_src_create (GstPushSrc * psrc, GstBuffer ** buffer)
{ {
GstVideoTestSrc *src; GstVideoTestSrc *src;
gulong newsize, size; gsize newsize, size;
GstBuffer *outbuf = NULL; GstBuffer *outbuf = NULL;
GstFlowReturn res; GstFlowReturn res;
GstClockTime next_time; GstClockTime next_time;
guint8 *data;
src = GST_VIDEO_TEST_SRC (psrc); src = GST_VIDEO_TEST_SRC (psrc);
@ -860,7 +861,7 @@ gst_video_test_src_create (GstPushSrc * psrc, GstBuffer ** buffer)
/* the buffer could have renegotiated, we need to discard any buffers of the /* the buffer could have renegotiated, we need to discard any buffers of the
* wrong size. */ * wrong size. */
size = GST_BUFFER_SIZE (outbuf); size = gst_buffer_get_size (outbuf);
newsize = gst_video_test_src_get_size (src, src->width, src->height); newsize = gst_video_test_src_get_size (src, src->width, src->height);
if (size != newsize) { if (size != newsize) {
@ -874,13 +875,14 @@ gst_video_test_src_create (GstPushSrc * psrc, GstBuffer ** buffer)
gst_buffer_set_caps (outbuf, GST_PAD_CAPS (GST_BASE_SRC_PAD (psrc))); gst_buffer_set_caps (outbuf, GST_PAD_CAPS (GST_BASE_SRC_PAD (psrc)));
} }
memset (GST_BUFFER_DATA (outbuf), 0, GST_BUFFER_SIZE (outbuf)); data = gst_buffer_map (outbuf, &size, NULL, GST_MAP_WRITE);
memset (data, 0, size);
src->tmpline_u8 = g_malloc (src->width + 8); src->tmpline_u8 = g_malloc (src->width + 8);
src->tmpline = g_malloc ((src->width + 8) * 4); src->tmpline = g_malloc ((src->width + 8) * 4);
src->tmpline2 = g_malloc ((src->width + 8) * 4); src->tmpline2 = g_malloc ((src->width + 8) * 4);
src->make_image (src, (void *) GST_BUFFER_DATA (outbuf), src->make_image (src, (void *) data, src->width, src->height);
src->width, src->height); gst_buffer_unmap (outbuf, data, size);
g_free (src->tmpline); g_free (src->tmpline);
g_free (src->tmpline2); g_free (src->tmpline2);

View file

@ -874,7 +874,7 @@ volume_transform_ip (GstBaseTransform * base, GstBuffer * outbuf)
{ {
GstVolume *self = GST_VOLUME (base); GstVolume *self = GST_VOLUME (base);
guint8 *data; guint8 *data;
guint size; gsize size;
GstControlSource *mute_csource, *volume_csource; GstControlSource *mute_csource, *volume_csource;
if (G_UNLIKELY (!self->negotiated)) if (G_UNLIKELY (!self->negotiated))
@ -885,8 +885,7 @@ volume_transform_ip (GstBaseTransform * base, GstBuffer * outbuf)
GST_BUFFER_FLAG_IS_SET (outbuf, GST_BUFFER_FLAG_GAP)) GST_BUFFER_FLAG_IS_SET (outbuf, GST_BUFFER_FLAG_GAP))
return GST_FLOW_OK; return GST_FLOW_OK;
data = GST_BUFFER_DATA (outbuf); data = gst_buffer_map (outbuf, &size, NULL, GST_MAP_READWRITE);
size = GST_BUFFER_SIZE (outbuf);
mute_csource = gst_object_get_control_source (G_OBJECT (self), "mute"); mute_csource = gst_object_get_control_source (G_OBJECT (self), "mute");
volume_csource = gst_object_get_control_source (G_OBJECT (self), "volume"); volume_csource = gst_object_get_control_source (G_OBJECT (self), "volume");
@ -954,6 +953,7 @@ volume_transform_ip (GstBaseTransform * base, GstBuffer * outbuf)
} else if (self->current_volume != 1.0) { } else if (self->current_volume != 1.0) {
self->process (self, data, size); self->process (self, data, size);
} }
gst_buffer_unmap (outbuf, data, size);
return GST_FLOW_OK; return GST_FLOW_OK;
@ -973,6 +973,7 @@ controller_failure:
GST_ELEMENT_ERROR (self, CORE, FAILED, GST_ELEMENT_ERROR (self, CORE, FAILED,
("Failed to get values from controller"), (NULL)); ("Failed to get values from controller"), (NULL));
gst_buffer_unmap (outbuf, data, size);
return GST_FLOW_ERROR; return GST_FLOW_ERROR;
} }
} }