mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-06 07:28:53 +00:00
libs: port to new data API
This commit is contained in:
parent
41025681bc
commit
3d25a4b470
21 changed files with 577 additions and 1049 deletions
|
@ -988,7 +988,7 @@ gst_app_src_create (GstBaseSrc * bsrc, guint64 offset, guint size,
|
||||||
guint buf_size;
|
guint buf_size;
|
||||||
|
|
||||||
*buf = g_queue_pop_head (priv->queue);
|
*buf = g_queue_pop_head (priv->queue);
|
||||||
buf_size = GST_BUFFER_SIZE (*buf);
|
buf_size = gst_buffer_get_size (*buf);
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (appsrc, "we have buffer %p of size %u", *buf, buf_size);
|
GST_DEBUG_OBJECT (appsrc, "we have buffer %p of size %u", *buf, buf_size);
|
||||||
|
|
||||||
|
@ -998,7 +998,7 @@ gst_app_src_create (GstBaseSrc * bsrc, guint64 offset, guint size,
|
||||||
if (priv->stream_type == GST_APP_STREAM_TYPE_RANDOM_ACCESS)
|
if (priv->stream_type == GST_APP_STREAM_TYPE_RANDOM_ACCESS)
|
||||||
priv->offset += buf_size;
|
priv->offset += buf_size;
|
||||||
if (caps) {
|
if (caps) {
|
||||||
*buf = gst_buffer_make_metadata_writable (*buf);
|
*buf = gst_buffer_make_writable (*buf);
|
||||||
gst_buffer_set_caps (*buf, caps);
|
gst_buffer_set_caps (*buf, caps);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1492,7 +1492,7 @@ gst_app_src_push_buffer_full (GstAppSrc * appsrc, GstBuffer * buffer,
|
||||||
if (!steal_ref)
|
if (!steal_ref)
|
||||||
gst_buffer_ref (buffer);
|
gst_buffer_ref (buffer);
|
||||||
g_queue_push_tail (priv->queue, buffer);
|
g_queue_push_tail (priv->queue, buffer);
|
||||||
priv->queued_bytes += GST_BUFFER_SIZE (buffer);
|
priv->queued_bytes += gst_buffer_get_size (buffer);
|
||||||
g_cond_broadcast (priv->cond);
|
g_cond_broadcast (priv->cond);
|
||||||
g_mutex_unlock (priv->mutex);
|
g_mutex_unlock (priv->mutex);
|
||||||
|
|
||||||
|
|
|
@ -93,7 +93,7 @@ gst_audio_frame_length (GstPad * pad, GstBuffer * buf)
|
||||||
/* FIXME: this function assumes the buffer size to be a whole multiple
|
/* FIXME: this function assumes the buffer size to be a whole multiple
|
||||||
* of the frame byte size
|
* of the frame byte size
|
||||||
*/
|
*/
|
||||||
return GST_BUFFER_SIZE (buf) / frame_byte_size;
|
return gst_buffer_get_size (buf) / frame_byte_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -129,7 +129,7 @@ gst_audio_duration_from_pad_buffer (GstPad * pad, GstBuffer * buf)
|
||||||
length = GST_CLOCK_TIME_NONE;
|
length = GST_CLOCK_TIME_NONE;
|
||||||
} else {
|
} else {
|
||||||
structure = gst_caps_get_structure (caps, 0);
|
structure = gst_caps_get_structure (caps, 0);
|
||||||
bytes = GST_BUFFER_SIZE (buf);
|
bytes = gst_buffer_get_size (buf);
|
||||||
gst_structure_get_int (structure, "width", &width);
|
gst_structure_get_int (structure, "width", &width);
|
||||||
gst_structure_get_int (structure, "channels", &channels);
|
gst_structure_get_int (structure, "channels", &channels);
|
||||||
gst_structure_get_int (structure, "rate", &rate);
|
gst_structure_get_int (structure, "rate", &rate);
|
||||||
|
@ -155,7 +155,7 @@ gst_audio_duration_from_pad_buffer (GstPad * pad, GstBuffer * buf)
|
||||||
gboolean
|
gboolean
|
||||||
gst_audio_is_buffer_framed (GstPad * pad, GstBuffer * buf)
|
gst_audio_is_buffer_framed (GstPad * pad, GstBuffer * buf)
|
||||||
{
|
{
|
||||||
if (GST_BUFFER_SIZE (buf) % gst_audio_frame_byte_size (pad) == 0)
|
if (gst_buffer_get_size (buf) % gst_audio_frame_byte_size (pad) == 0)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
else
|
else
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -295,9 +295,7 @@ gst_audio_buffer_clip (GstBuffer * buffer, GstSegment * segment, gint rate,
|
||||||
GstBuffer *ret;
|
GstBuffer *ret;
|
||||||
GstClockTime timestamp = GST_CLOCK_TIME_NONE, duration = GST_CLOCK_TIME_NONE;
|
GstClockTime timestamp = GST_CLOCK_TIME_NONE, duration = GST_CLOCK_TIME_NONE;
|
||||||
guint64 offset = GST_BUFFER_OFFSET_NONE, offset_end = GST_BUFFER_OFFSET_NONE;
|
guint64 offset = GST_BUFFER_OFFSET_NONE, offset_end = GST_BUFFER_OFFSET_NONE;
|
||||||
guint8 *data;
|
gsize trim, size;
|
||||||
guint size;
|
|
||||||
|
|
||||||
gboolean change_duration = TRUE, change_offset = TRUE, change_offset_end =
|
gboolean change_duration = TRUE, change_offset = TRUE, change_offset_end =
|
||||||
TRUE;
|
TRUE;
|
||||||
|
|
||||||
|
@ -313,8 +311,8 @@ gst_audio_buffer_clip (GstBuffer * buffer, GstSegment * segment, gint rate,
|
||||||
* Calculate the missing values for the calculations,
|
* Calculate the missing values for the calculations,
|
||||||
* they won't be changed later though. */
|
* they won't be changed later though. */
|
||||||
|
|
||||||
data = GST_BUFFER_DATA (buffer);
|
trim = 0;
|
||||||
size = GST_BUFFER_SIZE (buffer);
|
size = gst_buffer_get_size (buffer);
|
||||||
|
|
||||||
timestamp = GST_BUFFER_TIMESTAMP (buffer);
|
timestamp = GST_BUFFER_TIMESTAMP (buffer);
|
||||||
if (GST_BUFFER_DURATION_IS_VALID (buffer)) {
|
if (GST_BUFFER_DURATION_IS_VALID (buffer)) {
|
||||||
|
@ -359,7 +357,7 @@ gst_audio_buffer_clip (GstBuffer * buffer, GstSegment * segment, gint rate,
|
||||||
diff = gst_util_uint64_scale (diff, rate, GST_SECOND);
|
diff = gst_util_uint64_scale (diff, rate, GST_SECOND);
|
||||||
if (change_offset)
|
if (change_offset)
|
||||||
offset += diff;
|
offset += diff;
|
||||||
data += diff * frame_size;
|
trim += diff * frame_size;
|
||||||
size -= diff * frame_size;
|
size -= diff * frame_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -398,7 +396,7 @@ gst_audio_buffer_clip (GstBuffer * buffer, GstSegment * segment, gint rate,
|
||||||
if (change_duration)
|
if (change_duration)
|
||||||
duration -= gst_util_uint64_scale (diff, GST_SECOND, rate);
|
duration -= gst_util_uint64_scale (diff, GST_SECOND, rate);
|
||||||
|
|
||||||
data += diff * frame_size;
|
trim += diff * frame_size;
|
||||||
size -= diff * frame_size;
|
size -= diff * frame_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -417,12 +415,11 @@ gst_audio_buffer_clip (GstBuffer * buffer, GstSegment * segment, gint rate,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get a metadata writable buffer and apply all changes */
|
/* Get a writable buffer and apply all changes */
|
||||||
ret = gst_buffer_make_metadata_writable (buffer);
|
ret = gst_buffer_create_sub (buffer, offset, size);
|
||||||
|
gst_buffer_unref (buffer);
|
||||||
|
|
||||||
GST_BUFFER_TIMESTAMP (ret) = timestamp;
|
GST_BUFFER_TIMESTAMP (ret) = timestamp;
|
||||||
GST_BUFFER_SIZE (ret) = size;
|
|
||||||
GST_BUFFER_DATA (ret) = data;
|
|
||||||
|
|
||||||
if (change_duration)
|
if (change_duration)
|
||||||
GST_BUFFER_DURATION (ret) = duration;
|
GST_BUFFER_DURATION (ret) = duration;
|
||||||
|
|
|
@ -58,7 +58,7 @@ static GstStateChangeReturn gst_audio_filter_change_state (GstElement * element,
|
||||||
static gboolean gst_audio_filter_set_caps (GstBaseTransform * btrans,
|
static gboolean gst_audio_filter_set_caps (GstBaseTransform * btrans,
|
||||||
GstCaps * incaps, GstCaps * outcaps);
|
GstCaps * incaps, GstCaps * outcaps);
|
||||||
static gboolean gst_audio_filter_get_unit_size (GstBaseTransform * btrans,
|
static gboolean gst_audio_filter_get_unit_size (GstBaseTransform * btrans,
|
||||||
GstCaps * caps, guint * size);
|
GstCaps * caps, gsize * size);
|
||||||
|
|
||||||
#define do_init G_STMT_START { \
|
#define do_init G_STMT_START { \
|
||||||
GST_DEBUG_CATEGORY_INIT (audiofilter_dbg, "audiofilter", 0, "audiofilter"); \
|
GST_DEBUG_CATEGORY_INIT (audiofilter_dbg, "audiofilter", 0, "audiofilter"); \
|
||||||
|
@ -154,7 +154,7 @@ gst_audio_filter_set_caps (GstBaseTransform * btrans, GstCaps * incaps,
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gst_audio_filter_get_unit_size (GstBaseTransform * btrans, GstCaps * caps,
|
gst_audio_filter_get_unit_size (GstBaseTransform * btrans, GstCaps * caps,
|
||||||
guint * size)
|
gsize * size)
|
||||||
{
|
{
|
||||||
GstStructure *structure;
|
GstStructure *structure;
|
||||||
gboolean ret = TRUE;
|
gboolean ret = TRUE;
|
||||||
|
|
|
@ -394,8 +394,8 @@ gst_audioringbuffer_acquire (GstRingBuffer * buf, GstRingBufferSpec * spec)
|
||||||
/* set latency to one more segment as we need some headroom */
|
/* set latency to one more segment as we need some headroom */
|
||||||
spec->seglatency = spec->segtotal + 1;
|
spec->seglatency = spec->segtotal + 1;
|
||||||
|
|
||||||
buf->data = gst_buffer_new_and_alloc (spec->segtotal * spec->segsize);
|
buf->size = spec->segtotal * spec->segsize;
|
||||||
memset (GST_BUFFER_DATA (buf->data), 0, GST_BUFFER_SIZE (buf->data));
|
buf->memory = g_malloc0 (buf->size);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
|
@ -468,8 +468,8 @@ gst_audioringbuffer_release (GstRingBuffer * buf)
|
||||||
csink = GST_AUDIO_SINK_GET_CLASS (sink);
|
csink = GST_AUDIO_SINK_GET_CLASS (sink);
|
||||||
|
|
||||||
/* free the buffer */
|
/* free the buffer */
|
||||||
gst_buffer_unref (buf->data);
|
g_free (buf->memory);
|
||||||
buf->data = NULL;
|
buf->memory = NULL;
|
||||||
|
|
||||||
if (csink->unprepare)
|
if (csink->unprepare)
|
||||||
result = csink->unprepare (sink);
|
result = csink->unprepare (sink);
|
||||||
|
|
|
@ -376,8 +376,8 @@ gst_audioringbuffer_acquire (GstRingBuffer * buf, GstRingBufferSpec * spec)
|
||||||
if (!result)
|
if (!result)
|
||||||
goto could_not_open;
|
goto could_not_open;
|
||||||
|
|
||||||
buf->data = gst_buffer_new_and_alloc (spec->segtotal * spec->segsize);
|
buf->size = spec->segtotal * spec->segsize;
|
||||||
memset (GST_BUFFER_DATA (buf->data), 0, GST_BUFFER_SIZE (buf->data));
|
buf->memory = g_malloc0 (buf->size);
|
||||||
|
|
||||||
abuf = GST_AUDIORING_BUFFER (buf);
|
abuf = GST_AUDIORING_BUFFER (buf);
|
||||||
abuf->running = TRUE;
|
abuf->running = TRUE;
|
||||||
|
@ -418,8 +418,8 @@ gst_audioringbuffer_release (GstRingBuffer * buf)
|
||||||
GST_OBJECT_LOCK (buf);
|
GST_OBJECT_LOCK (buf);
|
||||||
|
|
||||||
/* free the buffer */
|
/* free the buffer */
|
||||||
gst_buffer_unref (buf->data);
|
g_free (buf->memory);
|
||||||
buf->data = NULL;
|
buf->memory = NULL;
|
||||||
|
|
||||||
if (csrc->unprepare)
|
if (csrc->unprepare)
|
||||||
result = csrc->unprepare (src);
|
result = csrc->unprepare (src);
|
||||||
|
|
|
@ -1327,8 +1327,9 @@ gst_base_audio_sink_render (GstBaseSink * bsink, GstBuffer * buf)
|
||||||
GstBaseAudioSink *sink;
|
GstBaseAudioSink *sink;
|
||||||
GstRingBuffer *ringbuf;
|
GstRingBuffer *ringbuf;
|
||||||
gint64 diff, align, ctime, cstop;
|
gint64 diff, align, ctime, cstop;
|
||||||
|
gsize offset;
|
||||||
guint8 *data;
|
guint8 *data;
|
||||||
guint size;
|
gsize size;
|
||||||
guint samples, written;
|
guint samples, written;
|
||||||
gint bps;
|
gint bps;
|
||||||
gint accum;
|
gint accum;
|
||||||
|
@ -1367,7 +1368,7 @@ gst_base_audio_sink_render (GstBaseSink * bsink, GstBuffer * buf)
|
||||||
|
|
||||||
bps = ringbuf->spec.bytes_per_sample;
|
bps = ringbuf->spec.bytes_per_sample;
|
||||||
|
|
||||||
size = GST_BUFFER_SIZE (buf);
|
size = gst_buffer_get_size (buf);
|
||||||
if (G_UNLIKELY (size % bps) != 0)
|
if (G_UNLIKELY (size % bps) != 0)
|
||||||
goto wrong_size;
|
goto wrong_size;
|
||||||
|
|
||||||
|
@ -1382,7 +1383,7 @@ gst_base_audio_sink_render (GstBaseSink * bsink, GstBuffer * buf)
|
||||||
GST_TIME_FORMAT ", samples %u", GST_TIME_ARGS (time), in_offset,
|
GST_TIME_FORMAT ", samples %u", GST_TIME_ARGS (time), in_offset,
|
||||||
GST_TIME_ARGS (bsink->segment.start), samples);
|
GST_TIME_ARGS (bsink->segment.start), samples);
|
||||||
|
|
||||||
data = GST_BUFFER_DATA (buf);
|
offset = 0;
|
||||||
|
|
||||||
/* if not valid timestamp or we can't clip or sync, try to play
|
/* if not valid timestamp or we can't clip or sync, try to play
|
||||||
* sample ASAP */
|
* sample ASAP */
|
||||||
|
@ -1391,7 +1392,7 @@ gst_base_audio_sink_render (GstBaseSink * bsink, GstBuffer * buf)
|
||||||
render_stop = render_start + samples;
|
render_stop = render_start + samples;
|
||||||
GST_DEBUG_OBJECT (sink,
|
GST_DEBUG_OBJECT (sink,
|
||||||
"Buffer of size %u has no time. Using render_start=%" G_GUINT64_FORMAT,
|
"Buffer of size %u has no time. Using render_start=%" G_GUINT64_FORMAT,
|
||||||
GST_BUFFER_SIZE (buf), render_start);
|
size, render_start);
|
||||||
/* we don't have a start so we don't know stop either */
|
/* we don't have a start so we don't know stop either */
|
||||||
stop = -1;
|
stop = -1;
|
||||||
goto no_sync;
|
goto no_sync;
|
||||||
|
@ -1445,7 +1446,7 @@ gst_base_audio_sink_render (GstBaseSink * bsink, GstBuffer * buf)
|
||||||
GST_DEBUG_OBJECT (sink, "clipping start to %" GST_TIME_FORMAT " %"
|
GST_DEBUG_OBJECT (sink, "clipping start to %" GST_TIME_FORMAT " %"
|
||||||
G_GUINT64_FORMAT " samples", GST_TIME_ARGS (ctime), diff);
|
G_GUINT64_FORMAT " samples", GST_TIME_ARGS (ctime), diff);
|
||||||
samples -= diff;
|
samples -= diff;
|
||||||
data += diff * bps;
|
offset += diff * bps;
|
||||||
time = ctime;
|
time = ctime;
|
||||||
}
|
}
|
||||||
diff = stop - cstop;
|
diff = stop - cstop;
|
||||||
|
@ -1625,10 +1626,11 @@ no_sync:
|
||||||
/* we need to accumulate over different runs for when we get interrupted */
|
/* we need to accumulate over different runs for when we get interrupted */
|
||||||
accum = 0;
|
accum = 0;
|
||||||
align_next = TRUE;
|
align_next = TRUE;
|
||||||
|
data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
|
||||||
do {
|
do {
|
||||||
written =
|
written =
|
||||||
gst_ring_buffer_commit_full (ringbuf, &sample_offset, data, samples,
|
gst_ring_buffer_commit_full (ringbuf, &sample_offset, data + offset,
|
||||||
out_samples, &accum);
|
samples, out_samples, &accum);
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (sink, "wrote %u of %u", written, samples);
|
GST_DEBUG_OBJECT (sink, "wrote %u of %u", written, samples);
|
||||||
/* if we wrote all, we're done */
|
/* if we wrote all, we're done */
|
||||||
|
@ -1652,8 +1654,9 @@ no_sync:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
samples -= written;
|
samples -= written;
|
||||||
data += written * bps;
|
offset += written * bps;
|
||||||
} while (TRUE);
|
} while (TRUE);
|
||||||
|
gst_buffer_unmap (buf, data, size);
|
||||||
|
|
||||||
if (align_next)
|
if (align_next)
|
||||||
sink->next_sample = sample_offset;
|
sink->next_sample = sample_offset;
|
||||||
|
@ -1698,6 +1701,7 @@ stopping:
|
||||||
{
|
{
|
||||||
GST_DEBUG_OBJECT (sink, "preroll got interrupted: %d (%s)", ret,
|
GST_DEBUG_OBJECT (sink, "preroll got interrupted: %d (%s)", ret,
|
||||||
gst_flow_get_name (ret));
|
gst_flow_get_name (ret));
|
||||||
|
gst_buffer_unmap (buf, data, size);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
sync_latency_failed:
|
sync_latency_failed:
|
||||||
|
@ -1741,6 +1745,7 @@ gst_base_audio_sink_callback (GstRingBuffer * rbuf, guint8 * data, guint len,
|
||||||
GstBaseAudioSink *sink;
|
GstBaseAudioSink *sink;
|
||||||
GstBuffer *buf;
|
GstBuffer *buf;
|
||||||
GstFlowReturn ret;
|
GstFlowReturn ret;
|
||||||
|
gsize size;
|
||||||
|
|
||||||
basesink = GST_BASE_SINK (user_data);
|
basesink = GST_BASE_SINK (user_data);
|
||||||
sink = GST_BASE_AUDIO_SINK (user_data);
|
sink = GST_BASE_AUDIO_SINK (user_data);
|
||||||
|
@ -1771,16 +1776,17 @@ gst_base_audio_sink_callback (GstRingBuffer * rbuf, guint8 * data, guint len,
|
||||||
if (ret != GST_FLOW_OK)
|
if (ret != GST_FLOW_OK)
|
||||||
goto preroll_error;
|
goto preroll_error;
|
||||||
|
|
||||||
if (len != GST_BUFFER_SIZE (buf)) {
|
size = gst_buffer_get_size (buf);
|
||||||
|
|
||||||
|
if (len != size) {
|
||||||
GST_INFO_OBJECT (basesink,
|
GST_INFO_OBJECT (basesink,
|
||||||
"got different size than requested from sink pad: %u != %u", len,
|
"got different size than requested from sink pad: %u != %u", len, size);
|
||||||
GST_BUFFER_SIZE (buf));
|
len = MIN (size, len);
|
||||||
len = MIN (GST_BUFFER_SIZE (buf), len);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
basesink->segment.last_stop += len;
|
basesink->segment.last_stop += len;
|
||||||
|
|
||||||
memcpy (data, GST_BUFFER_DATA (buf), len);
|
gst_buffer_extract (buf, 0, data, len);
|
||||||
GST_BASE_SINK_PREROLL_UNLOCK (basesink);
|
GST_BASE_SINK_PREROLL_UNLOCK (basesink);
|
||||||
|
|
||||||
GST_PAD_STREAM_UNLOCK (basesink->sinkpad);
|
GST_PAD_STREAM_UNLOCK (basesink->sinkpad);
|
||||||
|
|
|
@ -749,7 +749,7 @@ gst_base_audio_src_create (GstBaseSrc * bsrc, guint64 offset, guint length,
|
||||||
{
|
{
|
||||||
GstBaseAudioSrc *src = GST_BASE_AUDIO_SRC (bsrc);
|
GstBaseAudioSrc *src = GST_BASE_AUDIO_SRC (bsrc);
|
||||||
GstBuffer *buf;
|
GstBuffer *buf;
|
||||||
guchar *data;
|
guchar *data, *ptr;
|
||||||
guint samples, total_samples;
|
guint samples, total_samples;
|
||||||
guint64 sample;
|
guint64 sample;
|
||||||
gint bps;
|
gint bps;
|
||||||
|
@ -794,10 +794,9 @@ gst_base_audio_src_create (GstBaseSrc * bsrc, guint64 offset, guint length,
|
||||||
|
|
||||||
/* FIXME, using a bufferpool would be nice here */
|
/* FIXME, using a bufferpool would be nice here */
|
||||||
buf = gst_buffer_new_and_alloc (length);
|
buf = gst_buffer_new_and_alloc (length);
|
||||||
data = GST_BUFFER_DATA (buf);
|
data = ptr = gst_buffer_map (buf, NULL, NULL, GST_MAP_WRITE);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
read = gst_ring_buffer_read (ringbuffer, sample, data, samples);
|
read = gst_ring_buffer_read (ringbuffer, sample, ptr, samples);
|
||||||
GST_DEBUG_OBJECT (src, "read %u of %u", read, samples);
|
GST_DEBUG_OBJECT (src, "read %u of %u", read, samples);
|
||||||
/* if we read all, we're done */
|
/* if we read all, we're done */
|
||||||
if (read == samples)
|
if (read == samples)
|
||||||
|
@ -813,8 +812,9 @@ gst_base_audio_src_create (GstBaseSrc * bsrc, guint64 offset, guint length,
|
||||||
/* read next samples */
|
/* read next samples */
|
||||||
sample += read;
|
sample += read;
|
||||||
samples -= read;
|
samples -= read;
|
||||||
data += read * bps;
|
ptr += read * bps;
|
||||||
} while (TRUE);
|
} while (TRUE);
|
||||||
|
gst_buffer_unmap (buf, data, length);
|
||||||
|
|
||||||
/* mark discontinuity if needed */
|
/* mark discontinuity if needed */
|
||||||
if (G_UNLIKELY (sample != src->next_sample) && src->next_sample != -1) {
|
if (G_UNLIKELY (sample != src->next_sample) && src->next_sample != -1) {
|
||||||
|
|
|
@ -1601,10 +1601,10 @@ default_commit (GstRingBuffer * buf, guint64 * sample,
|
||||||
gint inr, outr;
|
gint inr, outr;
|
||||||
gboolean reverse;
|
gboolean reverse;
|
||||||
|
|
||||||
g_return_val_if_fail (buf->data != NULL, -1);
|
g_return_val_if_fail (buf->memory != NULL, -1);
|
||||||
g_return_val_if_fail (data != NULL, -1);
|
g_return_val_if_fail (data != NULL, -1);
|
||||||
|
|
||||||
dest = GST_BUFFER_DATA (buf->data);
|
dest = buf->memory;
|
||||||
segsize = buf->spec.segsize;
|
segsize = buf->spec.segsize;
|
||||||
segtotal = buf->spec.segtotal;
|
segtotal = buf->spec.segtotal;
|
||||||
bps = buf->spec.bytes_per_sample;
|
bps = buf->spec.bytes_per_sample;
|
||||||
|
@ -1830,10 +1830,10 @@ gst_ring_buffer_read (GstRingBuffer * buf, guint64 sample, guchar * data,
|
||||||
guint to_read;
|
guint to_read;
|
||||||
|
|
||||||
g_return_val_if_fail (GST_IS_RING_BUFFER (buf), -1);
|
g_return_val_if_fail (GST_IS_RING_BUFFER (buf), -1);
|
||||||
g_return_val_if_fail (buf->data != NULL, -1);
|
g_return_val_if_fail (buf->memory != NULL, -1);
|
||||||
g_return_val_if_fail (data != NULL, -1);
|
g_return_val_if_fail (data != NULL, -1);
|
||||||
|
|
||||||
dest = GST_BUFFER_DATA (buf->data);
|
dest = buf->memory;
|
||||||
segsize = buf->spec.segsize;
|
segsize = buf->spec.segsize;
|
||||||
segtotal = buf->spec.segtotal;
|
segtotal = buf->spec.segtotal;
|
||||||
bps = buf->spec.bytes_per_sample;
|
bps = buf->spec.bytes_per_sample;
|
||||||
|
@ -1940,12 +1940,12 @@ gst_ring_buffer_prepare_read (GstRingBuffer * buf, gint * segment,
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_return_val_if_fail (buf->data != NULL, FALSE);
|
g_return_val_if_fail (buf->memory != NULL, FALSE);
|
||||||
g_return_val_if_fail (segment != NULL, FALSE);
|
g_return_val_if_fail (segment != NULL, FALSE);
|
||||||
g_return_val_if_fail (readptr != NULL, FALSE);
|
g_return_val_if_fail (readptr != NULL, FALSE);
|
||||||
g_return_val_if_fail (len != NULL, FALSE);
|
g_return_val_if_fail (len != NULL, FALSE);
|
||||||
|
|
||||||
data = GST_BUFFER_DATA (buf->data);
|
data = buf->memory;
|
||||||
|
|
||||||
/* get the position of the pointer */
|
/* get the position of the pointer */
|
||||||
segdone = g_atomic_int_get (&buf->segdone);
|
segdone = g_atomic_int_get (&buf->segdone);
|
||||||
|
@ -2012,7 +2012,7 @@ gst_ring_buffer_clear (GstRingBuffer * buf, gint segment)
|
||||||
g_return_if_fail (GST_IS_RING_BUFFER (buf));
|
g_return_if_fail (GST_IS_RING_BUFFER (buf));
|
||||||
|
|
||||||
/* no data means it's already cleared */
|
/* no data means it's already cleared */
|
||||||
if (G_UNLIKELY (buf->data == NULL))
|
if (G_UNLIKELY (buf->memory == NULL))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* no empty_seg means it's not opened */
|
/* no empty_seg means it's not opened */
|
||||||
|
@ -2021,7 +2021,7 @@ gst_ring_buffer_clear (GstRingBuffer * buf, gint segment)
|
||||||
|
|
||||||
segment %= buf->spec.segtotal;
|
segment %= buf->spec.segtotal;
|
||||||
|
|
||||||
data = GST_BUFFER_DATA (buf->data);
|
data = buf->memory;
|
||||||
data += segment * buf->spec.segsize;
|
data += segment * buf->spec.segsize;
|
||||||
|
|
||||||
GST_LOG ("clear segment %d @%p", segment, data);
|
GST_LOG ("clear segment %d @%p", segment, data);
|
||||||
|
|
|
@ -257,7 +257,8 @@ struct _GstRingBuffer {
|
||||||
GCond *cond;
|
GCond *cond;
|
||||||
gboolean open;
|
gboolean open;
|
||||||
gboolean acquired;
|
gboolean acquired;
|
||||||
GstBuffer *data;
|
guint8 *memory;
|
||||||
|
gsize size;
|
||||||
GstRingBufferSpec spec;
|
GstRingBufferSpec spec;
|
||||||
GstRingBufferSegState *segstate;
|
GstRingBufferSegState *segstate;
|
||||||
gint samples_per_seg;
|
gint samples_per_seg;
|
||||||
|
|
|
@ -1647,7 +1647,7 @@ gst_cdda_base_src_create (GstPushSrc * pushsrc, GstBuffer ** buffer)
|
||||||
|
|
||||||
/* fallback duration: 4 bytes per sample, 44100 samples per second */
|
/* fallback duration: 4 bytes per sample, 44100 samples per second */
|
||||||
if (duration == GST_CLOCK_TIME_NONE) {
|
if (duration == GST_CLOCK_TIME_NONE) {
|
||||||
duration = gst_util_uint64_scale_int (GST_BUFFER_SIZE (buf) >> 2,
|
duration = gst_util_uint64_scale_int (gst_buffer_get_size (buf) >> 2,
|
||||||
GST_SECOND, 44100);
|
GST_SECOND, 44100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -908,18 +908,19 @@ gst_riff_create_video_caps (guint32 codec_fcc,
|
||||||
if (palette) {
|
if (palette) {
|
||||||
GstBuffer *copy;
|
GstBuffer *copy;
|
||||||
guint num_colors;
|
guint num_colors;
|
||||||
|
gsize size;
|
||||||
|
|
||||||
if (strf != NULL)
|
if (strf != NULL)
|
||||||
num_colors = strf->num_colors;
|
num_colors = strf->num_colors;
|
||||||
else
|
else
|
||||||
num_colors = 256;
|
num_colors = 256;
|
||||||
|
|
||||||
if (GST_BUFFER_SIZE (palette) >= (num_colors * 4)) {
|
size = gst_buffer_get_size (palette);
|
||||||
|
|
||||||
|
if (size >= (num_colors * 4)) {
|
||||||
/* palette is always at least 256*4 bytes */
|
/* palette is always at least 256*4 bytes */
|
||||||
copy =
|
copy = gst_buffer_new_and_alloc (MAX (size, 256 * 4));
|
||||||
gst_buffer_new_and_alloc (MAX (GST_BUFFER_SIZE (palette), 256 * 4));
|
gst_buffer_copy_into (copy, palette, GST_BUFFER_COPY_MEMORY, 0, size);
|
||||||
memcpy (GST_BUFFER_DATA (copy), GST_BUFFER_DATA (palette),
|
|
||||||
GST_BUFFER_SIZE (palette));
|
|
||||||
|
|
||||||
#if (G_BYTE_ORDER == G_BIG_ENDIAN)
|
#if (G_BYTE_ORDER == G_BIG_ENDIAN)
|
||||||
{
|
{
|
||||||
|
@ -1466,25 +1467,28 @@ gst_riff_create_audio_caps (guint16 codec_id,
|
||||||
guint16 valid_bits_per_sample;
|
guint16 valid_bits_per_sample;
|
||||||
guint32 channel_mask;
|
guint32 channel_mask;
|
||||||
guint32 subformat_guid[4];
|
guint32 subformat_guid[4];
|
||||||
const guint8 *data;
|
guint8 *data;
|
||||||
|
gsize size;
|
||||||
|
|
||||||
channels_max = 8;
|
channels_max = 8;
|
||||||
|
|
||||||
/* should be at least 22 bytes */
|
/* should be at least 22 bytes */
|
||||||
if (strf_data == NULL || GST_BUFFER_SIZE (strf_data) < 22) {
|
size = gst_buffer_get_size (strf_data);
|
||||||
|
|
||||||
|
if (strf_data == NULL || size < 22) {
|
||||||
GST_WARNING ("WAVE_FORMAT_EXTENSIBLE data size is %d (expected: 22)",
|
GST_WARNING ("WAVE_FORMAT_EXTENSIBLE data size is %d (expected: 22)",
|
||||||
(strf_data) ? GST_BUFFER_SIZE (strf_data) : -1);
|
(strf_data) ? size : -1);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
data = GST_BUFFER_DATA (strf_data);
|
data = gst_buffer_map (strf_data, &size, NULL, GST_MAP_READ);
|
||||||
|
|
||||||
valid_bits_per_sample = GST_READ_UINT16_LE (data);
|
valid_bits_per_sample = GST_READ_UINT16_LE (data);
|
||||||
channel_mask = GST_READ_UINT32_LE (data + 2);
|
channel_mask = GST_READ_UINT32_LE (data + 2);
|
||||||
subformat_guid[0] = GST_READ_UINT32_LE (data + 6);
|
subformat_guid[0] = GST_READ_UINT32_LE (data + 6);
|
||||||
subformat_guid[1] = GST_READ_UINT32_LE (data + 10);
|
subformat_guid[1] = GST_READ_UINT32_LE (data + 10);
|
||||||
subformat_guid[2] = GST_READ_UINT32_LE (data + 14);
|
subformat_guid[2] = GST_READ_UINT32_LE (data + 14);
|
||||||
subformat_guid[3] = GST_READ_UINT32_LE (data + 18);
|
subformat_guid[3] = GST_READ_UINT32_LE (data + 18);
|
||||||
|
gst_buffer_unmap (strf_data, data, size);
|
||||||
|
|
||||||
GST_DEBUG ("valid bps = %u", valid_bits_per_sample);
|
GST_DEBUG ("valid bps = %u", valid_bits_per_sample);
|
||||||
GST_DEBUG ("channel mask = 0x%08x", channel_mask);
|
GST_DEBUG ("channel mask = 0x%08x", channel_mask);
|
||||||
|
|
|
@ -52,8 +52,10 @@ gst_riff_read_chunk (GstElement * element,
|
||||||
{
|
{
|
||||||
GstBuffer *buf;
|
GstBuffer *buf;
|
||||||
GstFlowReturn res;
|
GstFlowReturn res;
|
||||||
|
guint8 *data;
|
||||||
guint size;
|
guint size;
|
||||||
guint64 offset = *_offset;
|
guint64 offset = *_offset;
|
||||||
|
gsize bsize;
|
||||||
|
|
||||||
g_return_val_if_fail (element != NULL, GST_FLOW_ERROR);
|
g_return_val_if_fail (element != NULL, GST_FLOW_ERROR);
|
||||||
g_return_val_if_fail (pad != NULL, GST_FLOW_ERROR);
|
g_return_val_if_fail (pad != NULL, GST_FLOW_ERROR);
|
||||||
|
@ -65,11 +67,13 @@ skip_junk:
|
||||||
size = 8;
|
size = 8;
|
||||||
if ((res = gst_pad_pull_range (pad, offset, size, &buf)) != GST_FLOW_OK)
|
if ((res = gst_pad_pull_range (pad, offset, size, &buf)) != GST_FLOW_OK)
|
||||||
return res;
|
return res;
|
||||||
else if (GST_BUFFER_SIZE (buf) < size)
|
else if (gst_buffer_get_size (buf) < size)
|
||||||
goto too_small;
|
goto too_small;
|
||||||
|
|
||||||
*tag = GST_READ_UINT32_LE (GST_BUFFER_DATA (buf));
|
data = gst_buffer_map (buf, &bsize, NULL, GST_MAP_READ);
|
||||||
size = GST_READ_UINT32_LE (GST_BUFFER_DATA (buf) + 4);
|
*tag = GST_READ_UINT32_LE (data);
|
||||||
|
size = GST_READ_UINT32_LE (data + 4);
|
||||||
|
gst_buffer_unmap (buf, data, bsize);
|
||||||
gst_buffer_unref (buf);
|
gst_buffer_unref (buf);
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (element, "fourcc=%" GST_FOURCC_FORMAT ", size=%u",
|
GST_DEBUG_OBJECT (element, "fourcc=%" GST_FOURCC_FORMAT ", size=%u",
|
||||||
|
@ -86,7 +90,7 @@ skip_junk:
|
||||||
|
|
||||||
if ((res = gst_pad_pull_range (pad, offset + 8, size, &buf)) != GST_FLOW_OK)
|
if ((res = gst_pad_pull_range (pad, offset + 8, size, &buf)) != GST_FLOW_OK)
|
||||||
return res;
|
return res;
|
||||||
else if (GST_BUFFER_SIZE (buf) < size)
|
else if (gst_buffer_get_size (buf) < size)
|
||||||
goto too_small;
|
goto too_small;
|
||||||
|
|
||||||
*_chunk_data = buf;
|
*_chunk_data = buf;
|
||||||
|
@ -99,7 +103,7 @@ too_small:
|
||||||
{
|
{
|
||||||
/* short read, we return UNEXPECTED to mark the EOS case */
|
/* short read, we return UNEXPECTED to mark the EOS case */
|
||||||
GST_DEBUG_OBJECT (element, "not enough data (available=%u, needed=%u)",
|
GST_DEBUG_OBJECT (element, "not enough data (available=%u, needed=%u)",
|
||||||
GST_BUFFER_SIZE (buf), size);
|
gst_buffer_get_size (buf), size);
|
||||||
gst_buffer_unref (buf);
|
gst_buffer_unref (buf);
|
||||||
return GST_FLOW_UNEXPECTED;
|
return GST_FLOW_UNEXPECTED;
|
||||||
}
|
}
|
||||||
|
@ -125,7 +129,8 @@ gst_riff_parse_chunk (GstElement * element, GstBuffer * buf,
|
||||||
{
|
{
|
||||||
guint size, bufsize;
|
guint size, bufsize;
|
||||||
guint32 fourcc;
|
guint32 fourcc;
|
||||||
guint8 *data;
|
guint8 *data, *ptr;
|
||||||
|
gsize bsize;
|
||||||
guint offset = *_offset;
|
guint offset = *_offset;
|
||||||
|
|
||||||
g_return_val_if_fail (element != NULL, FALSE);
|
g_return_val_if_fail (element != NULL, FALSE);
|
||||||
|
@ -137,7 +142,7 @@ gst_riff_parse_chunk (GstElement * element, GstBuffer * buf,
|
||||||
*chunk_data = NULL;
|
*chunk_data = NULL;
|
||||||
*_fourcc = 0;
|
*_fourcc = 0;
|
||||||
|
|
||||||
bufsize = GST_BUFFER_SIZE (buf);
|
bufsize = gst_buffer_get_size (buf);
|
||||||
|
|
||||||
if (bufsize == offset)
|
if (bufsize == offset)
|
||||||
goto end_offset;
|
goto end_offset;
|
||||||
|
@ -146,9 +151,11 @@ gst_riff_parse_chunk (GstElement * element, GstBuffer * buf,
|
||||||
goto too_small;
|
goto too_small;
|
||||||
|
|
||||||
/* read header */
|
/* read header */
|
||||||
data = GST_BUFFER_DATA (buf) + offset;
|
data = ptr = gst_buffer_map (buf, &bsize, NULL, GST_MAP_READ);
|
||||||
fourcc = GST_READ_UINT32_LE (data);
|
ptr += offset;
|
||||||
size = GST_READ_UINT32_LE (data + 4);
|
fourcc = GST_READ_UINT32_LE (ptr);
|
||||||
|
size = GST_READ_UINT32_LE (ptr + 4);
|
||||||
|
gst_buffer_unmap (buf, data, bsize);
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (element, "fourcc=%" GST_FOURCC_FORMAT ", size=%u",
|
GST_DEBUG_OBJECT (element, "fourcc=%" GST_FOURCC_FORMAT ", size=%u",
|
||||||
GST_FOURCC_ARGS (fourcc), size);
|
GST_FOURCC_ARGS (fourcc), size);
|
||||||
|
@ -217,19 +224,21 @@ gst_riff_parse_file_header (GstElement * element,
|
||||||
{
|
{
|
||||||
guint8 *data;
|
guint8 *data;
|
||||||
guint32 tag;
|
guint32 tag;
|
||||||
|
gsize size;
|
||||||
|
|
||||||
g_return_val_if_fail (buf != NULL, FALSE);
|
g_return_val_if_fail (buf != NULL, FALSE);
|
||||||
g_return_val_if_fail (doctype != NULL, FALSE);
|
g_return_val_if_fail (doctype != NULL, FALSE);
|
||||||
|
|
||||||
if (GST_BUFFER_SIZE (buf) < 12)
|
data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
|
||||||
|
if (size < 12)
|
||||||
goto too_small;
|
goto too_small;
|
||||||
|
|
||||||
data = GST_BUFFER_DATA (buf);
|
|
||||||
tag = GST_READ_UINT32_LE (data);
|
tag = GST_READ_UINT32_LE (data);
|
||||||
if (tag != GST_RIFF_TAG_RIFF && tag != GST_RIFF_TAG_AVF0)
|
if (tag != GST_RIFF_TAG_RIFF && tag != GST_RIFF_TAG_AVF0)
|
||||||
goto not_riff;
|
goto not_riff;
|
||||||
|
|
||||||
*doctype = GST_READ_UINT32_LE (data + 8);
|
*doctype = GST_READ_UINT32_LE (data + 8);
|
||||||
|
gst_buffer_unmap (buf, data, size);
|
||||||
|
|
||||||
gst_buffer_unref (buf);
|
gst_buffer_unref (buf);
|
||||||
|
|
||||||
|
@ -240,7 +249,8 @@ too_small:
|
||||||
{
|
{
|
||||||
GST_ELEMENT_ERROR (element, STREAM, WRONG_TYPE, (NULL),
|
GST_ELEMENT_ERROR (element, STREAM, WRONG_TYPE, (NULL),
|
||||||
("Not enough data to parse RIFF header (%d available, %d needed)",
|
("Not enough data to parse RIFF header (%d available, %d needed)",
|
||||||
GST_BUFFER_SIZE (buf), 12));
|
size, 12));
|
||||||
|
gst_buffer_unmap (buf, data, size);
|
||||||
gst_buffer_unref (buf);
|
gst_buffer_unref (buf);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -249,6 +259,7 @@ not_riff:
|
||||||
GST_ELEMENT_ERROR (element, STREAM, WRONG_TYPE, (NULL),
|
GST_ELEMENT_ERROR (element, STREAM, WRONG_TYPE, (NULL),
|
||||||
("Stream is no RIFF stream: %" GST_FOURCC_FORMAT,
|
("Stream is no RIFF stream: %" GST_FOURCC_FORMAT,
|
||||||
GST_FOURCC_ARGS (tag)));
|
GST_FOURCC_ARGS (tag)));
|
||||||
|
gst_buffer_unmap (buf, data, size);
|
||||||
gst_buffer_unref (buf);
|
gst_buffer_unref (buf);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -272,14 +283,19 @@ gst_riff_parse_strh (GstElement * element,
|
||||||
GstBuffer * buf, gst_riff_strh ** _strh)
|
GstBuffer * buf, gst_riff_strh ** _strh)
|
||||||
{
|
{
|
||||||
gst_riff_strh *strh;
|
gst_riff_strh *strh;
|
||||||
|
guint8 *data;
|
||||||
|
gsize size;
|
||||||
|
|
||||||
g_return_val_if_fail (buf != NULL, FALSE);
|
g_return_val_if_fail (buf != NULL, FALSE);
|
||||||
g_return_val_if_fail (_strh != NULL, FALSE);
|
g_return_val_if_fail (_strh != NULL, FALSE);
|
||||||
|
|
||||||
if (GST_BUFFER_SIZE (buf) < sizeof (gst_riff_strh))
|
data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
|
||||||
|
if (size < sizeof (gst_riff_strh))
|
||||||
goto too_small;
|
goto too_small;
|
||||||
|
|
||||||
strh = g_memdup (GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf));
|
strh = g_memdup (data, size);
|
||||||
|
gst_buffer_unmap (buf, data, size);
|
||||||
|
|
||||||
gst_buffer_unref (buf);
|
gst_buffer_unref (buf);
|
||||||
|
|
||||||
#if (G_BYTE_ORDER == G_BIG_ENDIAN)
|
#if (G_BYTE_ORDER == G_BIG_ENDIAN)
|
||||||
|
@ -329,7 +345,8 @@ too_small:
|
||||||
{
|
{
|
||||||
GST_ERROR_OBJECT (element,
|
GST_ERROR_OBJECT (element,
|
||||||
"Too small strh (%d available, %d needed)",
|
"Too small strh (%d available, %d needed)",
|
||||||
GST_BUFFER_SIZE (buf), (int) sizeof (gst_riff_strh));
|
size, (int) sizeof (gst_riff_strh));
|
||||||
|
gst_buffer_unmap (buf, data, size);
|
||||||
gst_buffer_unref (buf);
|
gst_buffer_unref (buf);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -357,15 +374,19 @@ gst_riff_parse_strf_vids (GstElement * element,
|
||||||
GstBuffer * buf, gst_riff_strf_vids ** _strf, GstBuffer ** data)
|
GstBuffer * buf, gst_riff_strf_vids ** _strf, GstBuffer ** data)
|
||||||
{
|
{
|
||||||
gst_riff_strf_vids *strf;
|
gst_riff_strf_vids *strf;
|
||||||
|
guint8 *bdata;
|
||||||
|
gsize size;
|
||||||
|
|
||||||
g_return_val_if_fail (buf != NULL, FALSE);
|
g_return_val_if_fail (buf != NULL, FALSE);
|
||||||
g_return_val_if_fail (_strf != NULL, FALSE);
|
g_return_val_if_fail (_strf != NULL, FALSE);
|
||||||
g_return_val_if_fail (data != NULL, FALSE);
|
g_return_val_if_fail (data != NULL, FALSE);
|
||||||
|
|
||||||
if (GST_BUFFER_SIZE (buf) < sizeof (gst_riff_strf_vids))
|
bdata = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
|
||||||
|
if (size < sizeof (gst_riff_strf_vids))
|
||||||
goto too_small;
|
goto too_small;
|
||||||
|
|
||||||
strf = g_memdup (GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf));
|
strf = g_memdup (bdata, size);
|
||||||
|
gst_buffer_unmap (buf, bdata, size);
|
||||||
|
|
||||||
#if (G_BYTE_ORDER == G_BIG_ENDIAN)
|
#if (G_BYTE_ORDER == G_BIG_ENDIAN)
|
||||||
strf->size = GUINT32_FROM_LE (strf->size);
|
strf->size = GUINT32_FROM_LE (strf->size);
|
||||||
|
@ -383,16 +404,17 @@ gst_riff_parse_strf_vids (GstElement * element,
|
||||||
|
|
||||||
/* size checking */
|
/* size checking */
|
||||||
*data = NULL;
|
*data = NULL;
|
||||||
if (strf->size > GST_BUFFER_SIZE (buf)) {
|
if (strf->size > size) {
|
||||||
GST_WARNING_OBJECT (element,
|
GST_WARNING_OBJECT (element,
|
||||||
"strf_vids header gave %d bytes data, only %d available",
|
"strf_vids header gave %d bytes data, only %d available",
|
||||||
strf->size, GST_BUFFER_SIZE (buf));
|
strf->size, size);
|
||||||
strf->size = GST_BUFFER_SIZE (buf);
|
strf->size = size;
|
||||||
}
|
}
|
||||||
if (sizeof (gst_riff_strf_vids) < GST_BUFFER_SIZE (buf)) {
|
if (sizeof (gst_riff_strf_vids) < size) {
|
||||||
*data = gst_buffer_create_sub (buf, sizeof (gst_riff_strf_vids),
|
*data = gst_buffer_create_sub (buf, sizeof (gst_riff_strf_vids),
|
||||||
GST_BUFFER_SIZE (buf) - sizeof (gst_riff_strf_vids));
|
size - sizeof (gst_riff_strf_vids));
|
||||||
}
|
}
|
||||||
|
gst_buffer_unref (buf);
|
||||||
|
|
||||||
/* debug */
|
/* debug */
|
||||||
GST_INFO_OBJECT (element, "strf tag found in context vids:");
|
GST_INFO_OBJECT (element, "strf tag found in context vids:");
|
||||||
|
@ -409,9 +431,8 @@ gst_riff_parse_strf_vids (GstElement * element,
|
||||||
GST_INFO_OBJECT (element, " num_colors %d", strf->num_colors);
|
GST_INFO_OBJECT (element, " num_colors %d", strf->num_colors);
|
||||||
GST_INFO_OBJECT (element, " imp_colors %d", strf->imp_colors);
|
GST_INFO_OBJECT (element, " imp_colors %d", strf->imp_colors);
|
||||||
if (*data)
|
if (*data)
|
||||||
GST_INFO_OBJECT (element, " %d bytes extradata", GST_BUFFER_SIZE (*data));
|
GST_INFO_OBJECT (element, " %d bytes extradata",
|
||||||
|
gst_buffer_get_size (*data));
|
||||||
gst_buffer_unref (buf);
|
|
||||||
|
|
||||||
*_strf = strf;
|
*_strf = strf;
|
||||||
|
|
||||||
|
@ -422,7 +443,8 @@ too_small:
|
||||||
{
|
{
|
||||||
GST_ERROR_OBJECT (element,
|
GST_ERROR_OBJECT (element,
|
||||||
"Too small strf_vids (%d available, %d needed)",
|
"Too small strf_vids (%d available, %d needed)",
|
||||||
GST_BUFFER_SIZE (buf), (int) sizeof (gst_riff_strf_vids));
|
size, (int) sizeof (gst_riff_strf_vids));
|
||||||
|
gst_buffer_unmap (buf, data, size);
|
||||||
gst_buffer_unref (buf);
|
gst_buffer_unref (buf);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -450,18 +472,18 @@ gst_riff_parse_strf_auds (GstElement * element,
|
||||||
GstBuffer * buf, gst_riff_strf_auds ** _strf, GstBuffer ** data)
|
GstBuffer * buf, gst_riff_strf_auds ** _strf, GstBuffer ** data)
|
||||||
{
|
{
|
||||||
gst_riff_strf_auds *strf;
|
gst_riff_strf_auds *strf;
|
||||||
guint bufsize;
|
gsize bsize;
|
||||||
|
guint8 *bdata;
|
||||||
|
|
||||||
g_return_val_if_fail (buf != NULL, FALSE);
|
g_return_val_if_fail (buf != NULL, FALSE);
|
||||||
g_return_val_if_fail (_strf != NULL, FALSE);
|
g_return_val_if_fail (_strf != NULL, FALSE);
|
||||||
g_return_val_if_fail (data != NULL, FALSE);
|
g_return_val_if_fail (data != NULL, FALSE);
|
||||||
|
|
||||||
bufsize = GST_BUFFER_SIZE (buf);
|
bdata = gst_buffer_map (buf, &bsize, NULL, GST_MAP_READ);
|
||||||
|
if (bsize < sizeof (gst_riff_strf_auds))
|
||||||
if (bufsize < sizeof (gst_riff_strf_auds))
|
|
||||||
goto too_small;
|
goto too_small;
|
||||||
|
|
||||||
strf = g_memdup (GST_BUFFER_DATA (buf), bufsize);
|
strf = g_memdup (bdata, bsize);
|
||||||
|
|
||||||
#if (G_BYTE_ORDER == G_BIG_ENDIAN)
|
#if (G_BYTE_ORDER == G_BIG_ENDIAN)
|
||||||
strf->format = GUINT16_FROM_LE (strf->format);
|
strf->format = GUINT16_FROM_LE (strf->format);
|
||||||
|
@ -474,15 +496,15 @@ gst_riff_parse_strf_auds (GstElement * element,
|
||||||
|
|
||||||
/* size checking */
|
/* size checking */
|
||||||
*data = NULL;
|
*data = NULL;
|
||||||
if (bufsize > sizeof (gst_riff_strf_auds) + 2) {
|
if (bsize > sizeof (gst_riff_strf_auds) + 2) {
|
||||||
gint len;
|
gint len;
|
||||||
|
|
||||||
len = GST_READ_UINT16_LE (&GST_BUFFER_DATA (buf)[16]);
|
len = GST_READ_UINT16_LE (&data[16]);
|
||||||
if (len + 2 + sizeof (gst_riff_strf_auds) > bufsize) {
|
if (len + 2 + sizeof (gst_riff_strf_auds) > bsize) {
|
||||||
GST_WARNING_OBJECT (element,
|
GST_WARNING_OBJECT (element,
|
||||||
"Extradata indicated %d bytes, but only %" G_GSSIZE_FORMAT
|
"Extradata indicated %d bytes, but only %" G_GSSIZE_FORMAT
|
||||||
" available", len, bufsize - 2 - sizeof (gst_riff_strf_auds));
|
" available", len, bsize - 2 - sizeof (gst_riff_strf_auds));
|
||||||
len = bufsize - 2 - sizeof (gst_riff_strf_auds);
|
len = bsize - 2 - sizeof (gst_riff_strf_auds);
|
||||||
}
|
}
|
||||||
if (len)
|
if (len)
|
||||||
*data = gst_buffer_create_sub (buf, sizeof (gst_riff_strf_auds) + 2, len);
|
*data = gst_buffer_create_sub (buf, sizeof (gst_riff_strf_auds) + 2, len);
|
||||||
|
@ -497,8 +519,10 @@ gst_riff_parse_strf_auds (GstElement * element,
|
||||||
GST_INFO_OBJECT (element, " blockalign %d", strf->blockalign);
|
GST_INFO_OBJECT (element, " blockalign %d", strf->blockalign);
|
||||||
GST_INFO_OBJECT (element, " size %d", strf->size);
|
GST_INFO_OBJECT (element, " size %d", strf->size);
|
||||||
if (*data)
|
if (*data)
|
||||||
GST_INFO_OBJECT (element, " %d bytes extradata", GST_BUFFER_SIZE (*data));
|
GST_INFO_OBJECT (element, " %d bytes extradata",
|
||||||
|
gst_buffer_get_size (*data));
|
||||||
|
|
||||||
|
gst_buffer_unmap (buf, bdata, bsize);
|
||||||
gst_buffer_unref (buf);
|
gst_buffer_unref (buf);
|
||||||
|
|
||||||
*_strf = strf;
|
*_strf = strf;
|
||||||
|
@ -510,7 +534,8 @@ too_small:
|
||||||
{
|
{
|
||||||
GST_ERROR_OBJECT (element,
|
GST_ERROR_OBJECT (element,
|
||||||
"Too small strf_auds (%d available, %" G_GSSIZE_FORMAT " needed)",
|
"Too small strf_auds (%d available, %" G_GSSIZE_FORMAT " needed)",
|
||||||
bufsize, sizeof (gst_riff_strf_auds));
|
bsize, sizeof (gst_riff_strf_auds));
|
||||||
|
gst_buffer_unmap (buf, bdata, bsize);
|
||||||
gst_buffer_unref (buf);
|
gst_buffer_unref (buf);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -538,15 +563,20 @@ gst_riff_parse_strf_iavs (GstElement * element,
|
||||||
GstBuffer * buf, gst_riff_strf_iavs ** _strf, GstBuffer ** data)
|
GstBuffer * buf, gst_riff_strf_iavs ** _strf, GstBuffer ** data)
|
||||||
{
|
{
|
||||||
gst_riff_strf_iavs *strf;
|
gst_riff_strf_iavs *strf;
|
||||||
|
gsize bsize;
|
||||||
|
guint8 *bdata;
|
||||||
|
|
||||||
g_return_val_if_fail (buf != NULL, FALSE);
|
g_return_val_if_fail (buf != NULL, FALSE);
|
||||||
g_return_val_if_fail (_strf != NULL, FALSE);
|
g_return_val_if_fail (_strf != NULL, FALSE);
|
||||||
g_return_val_if_fail (data != NULL, FALSE);
|
g_return_val_if_fail (data != NULL, FALSE);
|
||||||
|
|
||||||
if (GST_BUFFER_SIZE (buf) < sizeof (gst_riff_strf_iavs))
|
bdata = gst_buffer_map (buf, &bsize, NULL, GST_MAP_READ);
|
||||||
|
if (bsize < sizeof (gst_riff_strf_iavs))
|
||||||
goto too_small;
|
goto too_small;
|
||||||
|
|
||||||
strf = g_memdup (GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf));
|
strf = g_memdup (bdata, bsize);
|
||||||
|
gst_buffer_unmap (buf, bdata, bsize);
|
||||||
|
|
||||||
gst_buffer_unref (buf);
|
gst_buffer_unref (buf);
|
||||||
|
|
||||||
#if (G_BYTE_ORDER == G_BIG_ENDIAN)
|
#if (G_BYTE_ORDER == G_BIG_ENDIAN)
|
||||||
|
@ -581,7 +611,8 @@ too_small:
|
||||||
{
|
{
|
||||||
GST_ERROR_OBJECT (element,
|
GST_ERROR_OBJECT (element,
|
||||||
"Too small strf_iavs (%d available, %" G_GSSIZE_FORMAT " needed)",
|
"Too small strf_iavs (%d available, %" G_GSSIZE_FORMAT " needed)",
|
||||||
GST_BUFFER_SIZE (buf), sizeof (gst_riff_strf_iavs));
|
bsize, sizeof (gst_riff_strf_iavs));
|
||||||
|
gst_buffer_unmap (buf, bdata, bsize);
|
||||||
gst_buffer_unref (buf);
|
gst_buffer_unref (buf);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -601,8 +632,9 @@ void
|
||||||
gst_riff_parse_info (GstElement * element,
|
gst_riff_parse_info (GstElement * element,
|
||||||
GstBuffer * buf, GstTagList ** _taglist)
|
GstBuffer * buf, GstTagList ** _taglist)
|
||||||
{
|
{
|
||||||
guint8 *data;
|
guint8 *data, *ptr;
|
||||||
guint size, tsize;
|
gsize size, left;
|
||||||
|
guint tsize;
|
||||||
guint32 tag;
|
guint32 tag;
|
||||||
const gchar *type;
|
const gchar *type;
|
||||||
GstTagList *taglist;
|
GstTagList *taglist;
|
||||||
|
@ -614,23 +646,26 @@ gst_riff_parse_info (GstElement * element,
|
||||||
*_taglist = NULL;
|
*_taglist = NULL;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
data = GST_BUFFER_DATA (buf);
|
data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
|
||||||
size = GST_BUFFER_SIZE (buf);
|
|
||||||
taglist = gst_tag_list_new ();
|
taglist = gst_tag_list_new ();
|
||||||
|
|
||||||
while (size > 8) {
|
ptr = data;
|
||||||
tag = GST_READ_UINT32_LE (data);
|
left = size;
|
||||||
tsize = GST_READ_UINT32_LE (data + 4);
|
|
||||||
size -= 8;
|
while (left > 8) {
|
||||||
data += 8;
|
tag = GST_READ_UINT32_LE (ptr);
|
||||||
|
tsize = GST_READ_UINT32_LE (ptr + 4);
|
||||||
|
left -= 8;
|
||||||
|
ptr += 8;
|
||||||
|
|
||||||
GST_DEBUG ("tag %" GST_FOURCC_FORMAT ", size %u",
|
GST_DEBUG ("tag %" GST_FOURCC_FORMAT ", size %u",
|
||||||
GST_FOURCC_ARGS (tag), tsize);
|
GST_FOURCC_ARGS (tag), tsize);
|
||||||
|
|
||||||
if (tsize > size) {
|
if (tsize > left) {
|
||||||
GST_WARNING_OBJECT (element,
|
GST_WARNING_OBJECT (element,
|
||||||
"Tagsize %d is larger than available data %d", tsize, size);
|
"Tagsize %d is larger than available data %d", tsize, left);
|
||||||
tsize = size;
|
tsize = left;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* find out the type of metadata */
|
/* find out the type of metadata */
|
||||||
|
@ -712,13 +747,13 @@ gst_riff_parse_info (GstElement * element,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type != NULL && data[0] != '\0') {
|
if (type != NULL && ptr[0] != '\0') {
|
||||||
static const gchar *env_vars[] = { "GST_AVI_TAG_ENCODING",
|
static const gchar *env_vars[] = { "GST_AVI_TAG_ENCODING",
|
||||||
"GST_RIFF_TAG_ENCODING", "GST_TAG_ENCODING", NULL
|
"GST_RIFF_TAG_ENCODING", "GST_TAG_ENCODING", NULL
|
||||||
};
|
};
|
||||||
gchar *val;
|
gchar *val;
|
||||||
|
|
||||||
val = gst_tag_freeform_string_to_utf8 ((gchar *) data, tsize, env_vars);
|
val = gst_tag_freeform_string_to_utf8 ((gchar *) ptr, tsize, env_vars);
|
||||||
|
|
||||||
if (val) {
|
if (val) {
|
||||||
gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND, type, val, NULL);
|
gst_tag_list_add (taglist, GST_TAG_MERGE_APPEND, type, val, NULL);
|
||||||
|
@ -730,12 +765,12 @@ gst_riff_parse_info (GstElement * element,
|
||||||
|
|
||||||
if (tsize & 1) {
|
if (tsize & 1) {
|
||||||
tsize++;
|
tsize++;
|
||||||
if (tsize > size)
|
if (tsize > left)
|
||||||
tsize = size;
|
tsize = left;
|
||||||
}
|
}
|
||||||
|
|
||||||
data += tsize;
|
ptr += tsize;
|
||||||
size -= tsize;
|
left -= tsize;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gst_tag_list_is_empty (taglist)) {
|
if (!gst_tag_list_is_empty (taglist)) {
|
||||||
|
@ -744,6 +779,7 @@ gst_riff_parse_info (GstElement * element,
|
||||||
*_taglist = NULL;
|
*_taglist = NULL;
|
||||||
gst_tag_list_free (taglist);
|
gst_tag_list_free (taglist);
|
||||||
}
|
}
|
||||||
|
gst_buffer_unmap (buf, data, size);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -406,19 +406,23 @@ gst_base_rtp_audio_payload_set_meta (GstBaseRTPAudioPayload * payload,
|
||||||
{
|
{
|
||||||
GstBaseRTPPayload *basepayload;
|
GstBaseRTPPayload *basepayload;
|
||||||
GstBaseRTPAudioPayloadPrivate *priv;
|
GstBaseRTPAudioPayloadPrivate *priv;
|
||||||
|
GstRTPBuffer rtp;
|
||||||
|
|
||||||
basepayload = GST_BASE_RTP_PAYLOAD_CAST (payload);
|
basepayload = GST_BASE_RTP_PAYLOAD_CAST (payload);
|
||||||
priv = payload->priv;
|
priv = payload->priv;
|
||||||
|
|
||||||
/* set payload type */
|
/* set payload type */
|
||||||
gst_rtp_buffer_set_payload_type (buffer, basepayload->pt);
|
gst_rtp_buffer_map (buffer, GST_MAP_WRITE, &rtp);
|
||||||
|
gst_rtp_buffer_set_payload_type (&rtp, basepayload->pt);
|
||||||
/* set marker bit for disconts */
|
/* set marker bit for disconts */
|
||||||
if (priv->discont) {
|
if (priv->discont) {
|
||||||
GST_DEBUG_OBJECT (payload, "Setting marker and DISCONT");
|
GST_DEBUG_OBJECT (payload, "Setting marker and DISCONT");
|
||||||
gst_rtp_buffer_set_marker (buffer, TRUE);
|
gst_rtp_buffer_set_marker (&rtp, TRUE);
|
||||||
GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
|
GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
|
||||||
priv->discont = FALSE;
|
priv->discont = FALSE;
|
||||||
}
|
}
|
||||||
|
gst_rtp_buffer_unmap (&rtp);
|
||||||
|
|
||||||
GST_BUFFER_TIMESTAMP (buffer) = timestamp;
|
GST_BUFFER_TIMESTAMP (buffer) = timestamp;
|
||||||
|
|
||||||
/* get the offset in RTP time */
|
/* get the offset in RTP time */
|
||||||
|
@ -458,6 +462,7 @@ gst_base_rtp_audio_payload_push (GstBaseRTPAudioPayload * baseaudiopayload,
|
||||||
GstBuffer *outbuf;
|
GstBuffer *outbuf;
|
||||||
guint8 *payload;
|
guint8 *payload;
|
||||||
GstFlowReturn ret;
|
GstFlowReturn ret;
|
||||||
|
GstRTPBuffer rtp;
|
||||||
|
|
||||||
basepayload = GST_BASE_RTP_PAYLOAD (baseaudiopayload);
|
basepayload = GST_BASE_RTP_PAYLOAD (baseaudiopayload);
|
||||||
|
|
||||||
|
@ -468,8 +473,10 @@ gst_base_rtp_audio_payload_push (GstBaseRTPAudioPayload * baseaudiopayload,
|
||||||
outbuf = gst_rtp_buffer_new_allocate (payload_len, 0, 0);
|
outbuf = gst_rtp_buffer_new_allocate (payload_len, 0, 0);
|
||||||
|
|
||||||
/* copy payload */
|
/* copy payload */
|
||||||
payload = gst_rtp_buffer_get_payload (outbuf);
|
gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp);
|
||||||
|
payload = gst_rtp_buffer_get_payload (&rtp);
|
||||||
memcpy (payload, data, payload_len);
|
memcpy (payload, data, payload_len);
|
||||||
|
gst_rtp_buffer_unmap (&rtp);
|
||||||
|
|
||||||
/* set metadata */
|
/* set metadata */
|
||||||
gst_base_rtp_audio_payload_set_meta (baseaudiopayload, outbuf, payload_len,
|
gst_base_rtp_audio_payload_set_meta (baseaudiopayload, outbuf, payload_len,
|
||||||
|
@ -494,7 +501,7 @@ gst_base_rtp_audio_payload_push_buffer (GstBaseRTPAudioPayload *
|
||||||
priv = baseaudiopayload->priv;
|
priv = baseaudiopayload->priv;
|
||||||
basepayload = GST_BASE_RTP_PAYLOAD (baseaudiopayload);
|
basepayload = GST_BASE_RTP_PAYLOAD (baseaudiopayload);
|
||||||
|
|
||||||
payload_len = GST_BUFFER_SIZE (buffer);
|
payload_len = gst_buffer_get_size (buffer);
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (baseaudiopayload, "Pushing %d bytes ts %" GST_TIME_FORMAT,
|
GST_DEBUG_OBJECT (baseaudiopayload, "Pushing %d bytes ts %" GST_TIME_FORMAT,
|
||||||
payload_len, GST_TIME_ARGS (timestamp));
|
payload_len, GST_TIME_ARGS (timestamp));
|
||||||
|
@ -528,9 +535,14 @@ gst_base_rtp_audio_payload_push_buffer (GstBaseRTPAudioPayload *
|
||||||
GST_DEBUG_OBJECT (baseaudiopayload, "Pushing list %p", list);
|
GST_DEBUG_OBJECT (baseaudiopayload, "Pushing list %p", list);
|
||||||
ret = gst_basertppayload_push_list (basepayload, list);
|
ret = gst_basertppayload_push_list (basepayload, list);
|
||||||
} else {
|
} else {
|
||||||
|
GstRTPBuffer rtp;
|
||||||
|
|
||||||
/* copy payload */
|
/* copy payload */
|
||||||
payload = gst_rtp_buffer_get_payload (outbuf);
|
gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp);
|
||||||
memcpy (payload, GST_BUFFER_DATA (buffer), payload_len);
|
payload = gst_rtp_buffer_get_payload (&rtp);
|
||||||
|
gst_buffer_extract (buffer, 0, payload, payload_len);
|
||||||
|
gst_rtp_buffer_unmap (&rtp);
|
||||||
|
|
||||||
gst_buffer_unref (buffer);
|
gst_buffer_unref (buffer);
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (baseaudiopayload, "Pushing buffer %p", outbuf);
|
GST_DEBUG_OBJECT (baseaudiopayload, "Pushing buffer %p", outbuf);
|
||||||
|
@ -609,13 +621,17 @@ gst_base_rtp_audio_payload_flush (GstBaseRTPAudioPayload * baseaudiopayload,
|
||||||
gst_base_rtp_audio_payload_push_buffer (baseaudiopayload, buffer,
|
gst_base_rtp_audio_payload_push_buffer (baseaudiopayload, buffer,
|
||||||
timestamp);
|
timestamp);
|
||||||
} else {
|
} else {
|
||||||
|
GstRTPBuffer rtp;
|
||||||
|
|
||||||
/* create buffer to hold the payload */
|
/* create buffer to hold the payload */
|
||||||
outbuf = gst_rtp_buffer_new_allocate (payload_len, 0, 0);
|
outbuf = gst_rtp_buffer_new_allocate (payload_len, 0, 0);
|
||||||
|
|
||||||
/* copy payload */
|
/* copy payload */
|
||||||
payload = gst_rtp_buffer_get_payload (outbuf);
|
gst_rtp_buffer_map (outbuf, GST_MAP_WRITE, &rtp);
|
||||||
|
payload = gst_rtp_buffer_get_payload (&rtp);
|
||||||
gst_adapter_copy (adapter, payload, 0, payload_len);
|
gst_adapter_copy (adapter, payload, 0, payload_len);
|
||||||
gst_adapter_flush (adapter, payload_len);
|
gst_adapter_flush (adapter, payload_len);
|
||||||
|
gst_rtp_buffer_unmap (&rtp);
|
||||||
|
|
||||||
/* set metadata */
|
/* set metadata */
|
||||||
gst_base_rtp_audio_payload_set_meta (baseaudiopayload, outbuf, payload_len,
|
gst_base_rtp_audio_payload_set_meta (baseaudiopayload, outbuf, payload_len,
|
||||||
|
@ -863,7 +879,7 @@ gst_base_rtp_audio_payload_handle_buffer (GstBaseRTPPayload *
|
||||||
"Calculated min_payload_len %u and max_payload_len %u",
|
"Calculated min_payload_len %u and max_payload_len %u",
|
||||||
min_payload_len, max_payload_len);
|
min_payload_len, max_payload_len);
|
||||||
|
|
||||||
size = GST_BUFFER_SIZE (buffer);
|
size = gst_buffer_get_size (buffer);
|
||||||
|
|
||||||
/* shortcut, we don't need to use the adapter when the packet can be pushed
|
/* shortcut, we don't need to use the adapter when the packet can be pushed
|
||||||
* through directly. */
|
* through directly. */
|
||||||
|
|
|
@ -273,6 +273,7 @@ gst_base_rtp_depayload_chain (GstPad * pad, GstBuffer * in)
|
||||||
guint32 rtptime;
|
guint32 rtptime;
|
||||||
gboolean reset_seq, discont;
|
gboolean reset_seq, discont;
|
||||||
gint gap;
|
gint gap;
|
||||||
|
GstRTPBuffer rtp;
|
||||||
|
|
||||||
filter = GST_BASE_RTP_DEPAYLOAD (GST_OBJECT_PARENT (pad));
|
filter = GST_BASE_RTP_DEPAYLOAD (GST_OBJECT_PARENT (pad));
|
||||||
priv = filter->priv;
|
priv = filter->priv;
|
||||||
|
@ -297,8 +298,11 @@ gst_base_rtp_depayload_chain (GstPad * pad, GstBuffer * in)
|
||||||
priv->timestamp = timestamp;
|
priv->timestamp = timestamp;
|
||||||
priv->duration = GST_BUFFER_DURATION (in);
|
priv->duration = GST_BUFFER_DURATION (in);
|
||||||
|
|
||||||
seqnum = gst_rtp_buffer_get_seq (in);
|
gst_rtp_buffer_map (in, GST_MAP_READ, &rtp);
|
||||||
rtptime = gst_rtp_buffer_get_timestamp (in);
|
seqnum = gst_rtp_buffer_get_seq (&rtp);
|
||||||
|
rtptime = gst_rtp_buffer_get_timestamp (&rtp);
|
||||||
|
gst_rtp_buffer_unmap (&rtp);
|
||||||
|
|
||||||
reset_seq = TRUE;
|
reset_seq = TRUE;
|
||||||
discont = FALSE;
|
discont = FALSE;
|
||||||
|
|
||||||
|
@ -342,7 +346,7 @@ gst_base_rtp_depayload_chain (GstPad * pad, GstBuffer * in)
|
||||||
/* we detected a seqnum discont but the buffer was not flagged with a discont,
|
/* we detected a seqnum discont but the buffer was not flagged with a discont,
|
||||||
* set the discont flag so that the subclass can throw away old data. */
|
* set the discont flag so that the subclass can throw away old data. */
|
||||||
priv->discont = TRUE;
|
priv->discont = TRUE;
|
||||||
in = gst_buffer_make_metadata_writable (in);
|
in = gst_buffer_make_writable (in);
|
||||||
GST_BUFFER_FLAG_SET (in, GST_BUFFER_FLAG_DISCONT);
|
GST_BUFFER_FLAG_SET (in, GST_BUFFER_FLAG_DISCONT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -527,7 +531,7 @@ set_headers (GstBuffer ** buffer, guint group, guint idx, HeaderData * data)
|
||||||
{
|
{
|
||||||
GstBaseRTPDepayload *depayload = data->depayload;
|
GstBaseRTPDepayload *depayload = data->depayload;
|
||||||
|
|
||||||
*buffer = gst_buffer_make_metadata_writable (*buffer);
|
*buffer = gst_buffer_make_writable (*buffer);
|
||||||
gst_buffer_set_caps (*buffer, data->caps);
|
gst_buffer_set_caps (*buffer, data->caps);
|
||||||
|
|
||||||
/* set the timestamp if we must and can */
|
/* set the timestamp if we must and can */
|
||||||
|
|
|
@ -727,10 +727,15 @@ find_timestamp (GstBuffer ** buffer, guint group, guint idx, HeaderData * data)
|
||||||
static GstBufferListItem
|
static GstBufferListItem
|
||||||
set_headers (GstBuffer ** buffer, guint group, guint idx, HeaderData * data)
|
set_headers (GstBuffer ** buffer, guint group, guint idx, HeaderData * data)
|
||||||
{
|
{
|
||||||
gst_rtp_buffer_set_ssrc (*buffer, data->ssrc);
|
GstRTPBuffer rtp;
|
||||||
gst_rtp_buffer_set_payload_type (*buffer, data->pt);
|
|
||||||
gst_rtp_buffer_set_seq (*buffer, data->seqnum);
|
gst_rtp_buffer_map (*buffer, GST_MAP_WRITE, &rtp);
|
||||||
gst_rtp_buffer_set_timestamp (*buffer, data->rtptime);
|
gst_rtp_buffer_set_ssrc (&rtp, data->ssrc);
|
||||||
|
gst_rtp_buffer_set_payload_type (&rtp, data->pt);
|
||||||
|
gst_rtp_buffer_set_seq (&rtp, data->seqnum);
|
||||||
|
gst_rtp_buffer_set_timestamp (&rtp, data->rtptime);
|
||||||
|
gst_rtp_buffer_unmap (&rtp);
|
||||||
|
|
||||||
gst_buffer_set_caps (*buffer, data->caps);
|
gst_buffer_set_caps (*buffer, data->caps);
|
||||||
/* increment the seqnum for each buffer */
|
/* increment the seqnum for each buffer */
|
||||||
data->seqnum++;
|
data->seqnum++;
|
||||||
|
@ -821,7 +826,7 @@ gst_basertppayload_prepare_push (GstBaseRTPPayload * payload,
|
||||||
GST_LOG_OBJECT (payload,
|
GST_LOG_OBJECT (payload,
|
||||||
"Preparing to push packet with size %d, seq=%d, rtptime=%u, timestamp %"
|
"Preparing to push packet with size %d, seq=%d, rtptime=%u, timestamp %"
|
||||||
GST_TIME_FORMAT, (is_list) ? -1 :
|
GST_TIME_FORMAT, (is_list) ? -1 :
|
||||||
GST_BUFFER_SIZE (GST_BUFFER (obj)), payload->seqnum, data.rtptime,
|
gst_buffer_get_size (GST_BUFFER (obj)), payload->seqnum, data.rtptime,
|
||||||
GST_TIME_ARGS (data.timestamp));
|
GST_TIME_ARGS (data.timestamp));
|
||||||
|
|
||||||
if (g_atomic_int_compare_and_exchange (&payload->
|
if (g_atomic_int_compare_and_exchange (&payload->
|
||||||
|
|
|
@ -70,10 +70,8 @@ gst_rtcp_buffer_new_take_data (gpointer data, guint len)
|
||||||
g_return_val_if_fail (len > 0, NULL);
|
g_return_val_if_fail (len > 0, NULL);
|
||||||
|
|
||||||
result = gst_buffer_new ();
|
result = gst_buffer_new ();
|
||||||
|
gst_buffer_take_memory (result,
|
||||||
GST_BUFFER_MALLOCDATA (result) = data;
|
gst_memory_new_wrapped (0, data, g_free, len, 0, len));
|
||||||
GST_BUFFER_DATA (result) = data;
|
|
||||||
GST_BUFFER_SIZE (result) = len;
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -205,15 +203,17 @@ wrong_padding:
|
||||||
gboolean
|
gboolean
|
||||||
gst_rtcp_buffer_validate (GstBuffer * buffer)
|
gst_rtcp_buffer_validate (GstBuffer * buffer)
|
||||||
{
|
{
|
||||||
|
gboolean res;
|
||||||
guint8 *data;
|
guint8 *data;
|
||||||
guint len;
|
gsize len;
|
||||||
|
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (buffer), FALSE);
|
g_return_val_if_fail (GST_IS_BUFFER (buffer), FALSE);
|
||||||
|
|
||||||
data = GST_BUFFER_DATA (buffer);
|
data = gst_buffer_map (buffer, &len, NULL, GST_MAP_READ);
|
||||||
len = GST_BUFFER_SIZE (buffer);
|
res = gst_rtcp_buffer_validate_data (data, len);
|
||||||
|
gst_buffer_unmap (buffer, data, len);
|
||||||
|
|
||||||
return gst_rtcp_buffer_validate_data (data, len);
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -233,36 +233,66 @@ gst_rtcp_buffer_new (guint mtu)
|
||||||
g_return_val_if_fail (mtu > 0, NULL);
|
g_return_val_if_fail (mtu > 0, NULL);
|
||||||
|
|
||||||
result = gst_buffer_new ();
|
result = gst_buffer_new ();
|
||||||
GST_BUFFER_MALLOCDATA (result) = g_malloc0 (mtu);
|
gst_buffer_take_memory (result,
|
||||||
GST_BUFFER_DATA (result) = GST_BUFFER_MALLOCDATA (result);
|
gst_memory_new_wrapped (0, g_malloc0 (mtu), g_free, mtu, 0, mtu));
|
||||||
GST_BUFFER_SIZE (result) = mtu;
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_rtcp_buffer_end:
|
* gst_rtcp_buffer_map:
|
||||||
|
* @buffer: a buffer with an RTCP packet
|
||||||
|
* @flags: flags for the mapping
|
||||||
|
* @rtcp: resulting #GstRTCPBuffer
|
||||||
|
*
|
||||||
|
* Open @buffer for reading or writing, depending on @flags. The resulting RTCP
|
||||||
|
* buffer state is stored in @rtcp.
|
||||||
|
*/
|
||||||
|
gboolean
|
||||||
|
gst_rtcp_buffer_map (GstBuffer * buffer, GstMapFlags flags,
|
||||||
|
GstRTCPBuffer * rtcp)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (rtcp != NULL, FALSE);
|
||||||
|
g_return_val_if_fail (rtcp->buffer == NULL, FALSE);
|
||||||
|
g_return_val_if_fail (GST_IS_BUFFER (buffer), FALSE);
|
||||||
|
|
||||||
|
rtcp->buffer = buffer;
|
||||||
|
rtcp->flags = flags;
|
||||||
|
rtcp->data = gst_buffer_map (buffer, &rtcp->size, &rtcp->maxsize, flags);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_rtcp_buffer_unmap:
|
||||||
* @buffer: a buffer with an RTCP packet
|
* @buffer: a buffer with an RTCP packet
|
||||||
*
|
*
|
||||||
* Finish @buffer after being constructured. This function is usually called
|
* Finish @rtcp after being constructured. This function is usually called
|
||||||
* after gst_rtcp_buffer_new() and after adding the RTCP items to the new buffer.
|
* after gst_rtcp_buffer_map() and after adding the RTCP items to the new buffer.
|
||||||
*
|
*
|
||||||
* The function adjusts the size of @buffer with the total length of all the
|
* The function adjusts the size of @buffer with the total length of all the
|
||||||
* added packets.
|
* added packets.
|
||||||
*/
|
*/
|
||||||
void
|
gboolean
|
||||||
gst_rtcp_buffer_end (GstBuffer * buffer)
|
gst_rtcp_buffer_unmap (GstRTCPBuffer * rtcp)
|
||||||
{
|
{
|
||||||
|
gboolean res;
|
||||||
GstRTCPPacket packet;
|
GstRTCPPacket packet;
|
||||||
|
|
||||||
g_return_if_fail (GST_IS_BUFFER (buffer));
|
g_return_val_if_fail (rtcp != NULL, FALSE);
|
||||||
|
g_return_val_if_fail (GST_IS_BUFFER (rtcp->buffer), FALSE);
|
||||||
|
|
||||||
/* move to the first free space */
|
/* move to the first free space */
|
||||||
if (gst_rtcp_buffer_get_first_packet (buffer, &packet))
|
if (gst_rtcp_buffer_get_first_packet (rtcp, &packet))
|
||||||
while (gst_rtcp_packet_move_to_next (&packet));
|
while (gst_rtcp_packet_move_to_next (&packet));
|
||||||
|
|
||||||
/* shrink size */
|
/* shrink size */
|
||||||
GST_BUFFER_SIZE (buffer) = packet.offset;
|
gst_buffer_set_size (rtcp->buffer, packet.offset);
|
||||||
|
|
||||||
|
res = gst_buffer_unmap (rtcp->buffer, rtcp->data, rtcp->size);
|
||||||
|
rtcp->buffer = NULL;
|
||||||
|
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -274,15 +304,16 @@ gst_rtcp_buffer_end (GstBuffer * buffer)
|
||||||
* Returns: the number of RTCP packets in @buffer.
|
* Returns: the number of RTCP packets in @buffer.
|
||||||
*/
|
*/
|
||||||
guint
|
guint
|
||||||
gst_rtcp_buffer_get_packet_count (GstBuffer * buffer)
|
gst_rtcp_buffer_get_packet_count (GstRTCPBuffer * rtcp)
|
||||||
{
|
{
|
||||||
GstRTCPPacket packet;
|
GstRTCPPacket packet;
|
||||||
guint count;
|
guint count;
|
||||||
|
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (buffer), 0);
|
g_return_val_if_fail (rtcp != NULL, 0);
|
||||||
|
g_return_val_if_fail (GST_IS_BUFFER (rtcp->buffer), 0);
|
||||||
|
|
||||||
count = 0;
|
count = 0;
|
||||||
if (gst_rtcp_buffer_get_first_packet (buffer, &packet)) {
|
if (gst_rtcp_buffer_get_first_packet (rtcp, &packet)) {
|
||||||
do {
|
do {
|
||||||
count++;
|
count++;
|
||||||
} while (gst_rtcp_packet_move_to_next (&packet));
|
} while (gst_rtcp_packet_move_to_next (&packet));
|
||||||
|
@ -307,10 +338,9 @@ read_packet_header (GstRTCPPacket * packet)
|
||||||
guint offset;
|
guint offset;
|
||||||
|
|
||||||
g_return_val_if_fail (packet != NULL, FALSE);
|
g_return_val_if_fail (packet != NULL, FALSE);
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), FALSE);
|
|
||||||
|
|
||||||
data = GST_BUFFER_DATA (packet->buffer);
|
data = packet->rtcp->data;
|
||||||
size = GST_BUFFER_SIZE (packet->buffer);
|
size = packet->rtcp->size;
|
||||||
|
|
||||||
offset = packet->offset;
|
offset = packet->offset;
|
||||||
|
|
||||||
|
@ -345,13 +375,14 @@ read_packet_header (GstRTCPPacket * packet)
|
||||||
* Returns: TRUE if the packet existed in @buffer.
|
* Returns: TRUE if the packet existed in @buffer.
|
||||||
*/
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
gst_rtcp_buffer_get_first_packet (GstBuffer * buffer, GstRTCPPacket * packet)
|
gst_rtcp_buffer_get_first_packet (GstRTCPBuffer * rtcp, GstRTCPPacket * packet)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (buffer), FALSE);
|
g_return_val_if_fail (rtcp != NULL, FALSE);
|
||||||
|
g_return_val_if_fail (GST_IS_BUFFER (rtcp->buffer), FALSE);
|
||||||
g_return_val_if_fail (packet != NULL, FALSE);
|
g_return_val_if_fail (packet != NULL, FALSE);
|
||||||
|
|
||||||
/* init to 0 */
|
/* init to 0 */
|
||||||
packet->buffer = buffer;
|
packet->rtcp = rtcp;
|
||||||
packet->offset = 0;
|
packet->offset = 0;
|
||||||
packet->type = GST_RTCP_TYPE_INVALID;
|
packet->type = GST_RTCP_TYPE_INVALID;
|
||||||
|
|
||||||
|
@ -376,7 +407,6 @@ gst_rtcp_packet_move_to_next (GstRTCPPacket * packet)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (packet != NULL, FALSE);
|
g_return_val_if_fail (packet != NULL, FALSE);
|
||||||
g_return_val_if_fail (packet->type != GST_RTCP_TYPE_INVALID, FALSE);
|
g_return_val_if_fail (packet->type != GST_RTCP_TYPE_INVALID, FALSE);
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), FALSE);
|
|
||||||
|
|
||||||
/* if we have a padding or invalid packet, it must be the last,
|
/* if we have a padding or invalid packet, it must be the last,
|
||||||
* return FALSE */
|
* return FALSE */
|
||||||
|
@ -413,22 +443,23 @@ end:
|
||||||
* if the max mtu is exceeded for the buffer.
|
* if the max mtu is exceeded for the buffer.
|
||||||
*/
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
gst_rtcp_buffer_add_packet (GstBuffer * buffer, GstRTCPType type,
|
gst_rtcp_buffer_add_packet (GstRTCPBuffer * rtcp, GstRTCPType type,
|
||||||
GstRTCPPacket * packet)
|
GstRTCPPacket * packet)
|
||||||
{
|
{
|
||||||
guint len, size;
|
guint len, size;
|
||||||
guint8 *data;
|
guint8 *data;
|
||||||
gboolean result;
|
gboolean result;
|
||||||
|
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (buffer), FALSE);
|
g_return_val_if_fail (rtcp != NULL, FALSE);
|
||||||
|
g_return_val_if_fail (GST_IS_BUFFER (rtcp->buffer), FALSE);
|
||||||
g_return_val_if_fail (type != GST_RTCP_TYPE_INVALID, FALSE);
|
g_return_val_if_fail (type != GST_RTCP_TYPE_INVALID, FALSE);
|
||||||
g_return_val_if_fail (packet != NULL, FALSE);
|
g_return_val_if_fail (packet != NULL, FALSE);
|
||||||
|
|
||||||
/* find free space */
|
/* find free space */
|
||||||
if (gst_rtcp_buffer_get_first_packet (buffer, packet))
|
if (gst_rtcp_buffer_get_first_packet (rtcp, packet))
|
||||||
while (gst_rtcp_packet_move_to_next (packet));
|
while (gst_rtcp_packet_move_to_next (packet));
|
||||||
|
|
||||||
size = GST_BUFFER_SIZE (buffer);
|
size = rtcp->size;
|
||||||
|
|
||||||
/* packet->offset is now pointing to the next free offset in the buffer to
|
/* packet->offset is now pointing to the next free offset in the buffer to
|
||||||
* start a compount packet. Next we figure out if we have enough free space in
|
* start a compount packet. Next we figure out if we have enough free space in
|
||||||
|
@ -461,7 +492,7 @@ gst_rtcp_buffer_add_packet (GstBuffer * buffer, GstRTCPType type,
|
||||||
if (packet->offset + len >= size)
|
if (packet->offset + len >= size)
|
||||||
goto no_space;
|
goto no_space;
|
||||||
|
|
||||||
data = GST_BUFFER_DATA (buffer) + packet->offset;
|
data = rtcp->data + packet->offset;
|
||||||
|
|
||||||
data[0] = (GST_RTCP_VERSION << 6);
|
data[0] = (GST_RTCP_VERSION << 6);
|
||||||
data[1] = type;
|
data[1] = type;
|
||||||
|
@ -510,9 +541,8 @@ gst_rtcp_packet_remove (GstRTCPPacket * packet)
|
||||||
offset = packet->offset + (packet->length << 2) + 4;
|
offset = packet->offset + (packet->length << 2) + 4;
|
||||||
|
|
||||||
/* Overwrite this packet with the rest of the data */
|
/* Overwrite this packet with the rest of the data */
|
||||||
memmove (GST_BUFFER_DATA (packet->buffer) + packet->offset,
|
memmove (packet->rtcp->data + packet->offset,
|
||||||
GST_BUFFER_DATA (packet->buffer) + offset,
|
packet->rtcp->data + offset, packet->rtcp->size - offset);
|
||||||
GST_BUFFER_SIZE (packet->buffer) - offset);
|
|
||||||
|
|
||||||
/* try to read next header */
|
/* try to read next header */
|
||||||
ret = read_packet_header (packet);
|
ret = read_packet_header (packet);
|
||||||
|
@ -612,9 +642,8 @@ gst_rtcp_packet_sr_get_sender_info (GstRTCPPacket * packet, guint32 * ssrc,
|
||||||
|
|
||||||
g_return_if_fail (packet != NULL);
|
g_return_if_fail (packet != NULL);
|
||||||
g_return_if_fail (packet->type == GST_RTCP_TYPE_SR);
|
g_return_if_fail (packet->type == GST_RTCP_TYPE_SR);
|
||||||
g_return_if_fail (GST_IS_BUFFER (packet->buffer));
|
|
||||||
|
|
||||||
data = GST_BUFFER_DATA (packet->buffer);
|
data = packet->rtcp->data;
|
||||||
|
|
||||||
/* skip header */
|
/* skip header */
|
||||||
data += packet->offset + 4;
|
data += packet->offset + 4;
|
||||||
|
@ -653,9 +682,8 @@ gst_rtcp_packet_sr_set_sender_info (GstRTCPPacket * packet, guint32 ssrc,
|
||||||
|
|
||||||
g_return_if_fail (packet != NULL);
|
g_return_if_fail (packet != NULL);
|
||||||
g_return_if_fail (packet->type == GST_RTCP_TYPE_SR);
|
g_return_if_fail (packet->type == GST_RTCP_TYPE_SR);
|
||||||
g_return_if_fail (GST_IS_BUFFER (packet->buffer));
|
|
||||||
|
|
||||||
data = GST_BUFFER_DATA (packet->buffer);
|
data = packet->rtcp->data;
|
||||||
|
|
||||||
/* skip header */
|
/* skip header */
|
||||||
data += packet->offset + 4;
|
data += packet->offset + 4;
|
||||||
|
@ -686,9 +714,8 @@ gst_rtcp_packet_rr_get_ssrc (GstRTCPPacket * packet)
|
||||||
|
|
||||||
g_return_val_if_fail (packet != NULL, 0);
|
g_return_val_if_fail (packet != NULL, 0);
|
||||||
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_RR, 0);
|
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_RR, 0);
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), 0);
|
|
||||||
|
|
||||||
data = GST_BUFFER_DATA (packet->buffer);
|
data = packet->rtcp->data;
|
||||||
|
|
||||||
/* skip header */
|
/* skip header */
|
||||||
data += packet->offset + 4;
|
data += packet->offset + 4;
|
||||||
|
@ -711,9 +738,8 @@ gst_rtcp_packet_rr_set_ssrc (GstRTCPPacket * packet, guint32 ssrc)
|
||||||
|
|
||||||
g_return_if_fail (packet != NULL);
|
g_return_if_fail (packet != NULL);
|
||||||
g_return_if_fail (packet->type == GST_RTCP_TYPE_RR);
|
g_return_if_fail (packet->type == GST_RTCP_TYPE_RR);
|
||||||
g_return_if_fail (GST_IS_BUFFER (packet->buffer));
|
|
||||||
|
|
||||||
data = GST_BUFFER_DATA (packet->buffer);
|
data = packet->rtcp->data;
|
||||||
|
|
||||||
/* skip header */
|
/* skip header */
|
||||||
data += packet->offset + 4;
|
data += packet->offset + 4;
|
||||||
|
@ -734,7 +760,6 @@ gst_rtcp_packet_get_rb_count (GstRTCPPacket * packet)
|
||||||
g_return_val_if_fail (packet != NULL, 0);
|
g_return_val_if_fail (packet != NULL, 0);
|
||||||
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_RR ||
|
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_RR ||
|
||||||
packet->type == GST_RTCP_TYPE_SR, 0);
|
packet->type == GST_RTCP_TYPE_SR, 0);
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), 0);
|
|
||||||
|
|
||||||
return packet->count;
|
return packet->count;
|
||||||
}
|
}
|
||||||
|
@ -765,9 +790,8 @@ gst_rtcp_packet_get_rb (GstRTCPPacket * packet, guint nth, guint32 * ssrc,
|
||||||
g_return_if_fail (packet != NULL);
|
g_return_if_fail (packet != NULL);
|
||||||
g_return_if_fail (packet->type == GST_RTCP_TYPE_RR ||
|
g_return_if_fail (packet->type == GST_RTCP_TYPE_RR ||
|
||||||
packet->type == GST_RTCP_TYPE_SR);
|
packet->type == GST_RTCP_TYPE_SR);
|
||||||
g_return_if_fail (GST_IS_BUFFER (packet->buffer));
|
|
||||||
|
|
||||||
data = GST_BUFFER_DATA (packet->buffer);
|
data = packet->rtcp->data;
|
||||||
|
|
||||||
/* skip header */
|
/* skip header */
|
||||||
data += packet->offset + 4;
|
data += packet->offset + 4;
|
||||||
|
@ -835,13 +859,12 @@ gst_rtcp_packet_add_rb (GstRTCPPacket * packet, guint32 ssrc,
|
||||||
g_return_val_if_fail (packet != NULL, FALSE);
|
g_return_val_if_fail (packet != NULL, FALSE);
|
||||||
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_RR ||
|
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_RR ||
|
||||||
packet->type == GST_RTCP_TYPE_SR, FALSE);
|
packet->type == GST_RTCP_TYPE_SR, FALSE);
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), FALSE);
|
|
||||||
|
|
||||||
if (packet->count >= GST_RTCP_MAX_RB_COUNT)
|
if (packet->count >= GST_RTCP_MAX_RB_COUNT)
|
||||||
goto no_space;
|
goto no_space;
|
||||||
|
|
||||||
data = GST_BUFFER_DATA (packet->buffer);
|
data = packet->rtcp->data;
|
||||||
size = GST_BUFFER_SIZE (packet->buffer);
|
size = packet->rtcp->size;
|
||||||
|
|
||||||
/* skip header */
|
/* skip header */
|
||||||
offset = packet->offset + 4;
|
offset = packet->offset + 4;
|
||||||
|
@ -911,7 +934,6 @@ gst_rtcp_packet_set_rb (GstRTCPPacket * packet, guint nth, guint32 ssrc,
|
||||||
g_return_if_fail (packet != NULL);
|
g_return_if_fail (packet != NULL);
|
||||||
g_return_if_fail (packet->type == GST_RTCP_TYPE_RR ||
|
g_return_if_fail (packet->type == GST_RTCP_TYPE_RR ||
|
||||||
packet->type == GST_RTCP_TYPE_SR);
|
packet->type == GST_RTCP_TYPE_SR);
|
||||||
g_return_if_fail (GST_IS_BUFFER (packet->buffer));
|
|
||||||
|
|
||||||
g_warning ("not implemented");
|
g_warning ("not implemented");
|
||||||
}
|
}
|
||||||
|
@ -930,7 +952,6 @@ gst_rtcp_packet_sdes_get_item_count (GstRTCPPacket * packet)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (packet != NULL, 0);
|
g_return_val_if_fail (packet != NULL, 0);
|
||||||
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, 0);
|
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, 0);
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), 0);
|
|
||||||
|
|
||||||
return packet->count;
|
return packet->count;
|
||||||
}
|
}
|
||||||
|
@ -948,7 +969,6 @@ gst_rtcp_packet_sdes_first_item (GstRTCPPacket * packet)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (packet != NULL, FALSE);
|
g_return_val_if_fail (packet != NULL, FALSE);
|
||||||
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, FALSE);
|
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, FALSE);
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), FALSE);
|
|
||||||
|
|
||||||
packet->item_offset = 4;
|
packet->item_offset = 4;
|
||||||
packet->item_count = 0;
|
packet->item_count = 0;
|
||||||
|
@ -977,14 +997,13 @@ gst_rtcp_packet_sdes_next_item (GstRTCPPacket * packet)
|
||||||
|
|
||||||
g_return_val_if_fail (packet != NULL, FALSE);
|
g_return_val_if_fail (packet != NULL, FALSE);
|
||||||
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, FALSE);
|
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, FALSE);
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), FALSE);
|
|
||||||
|
|
||||||
/* if we are at the last item, we are done */
|
/* if we are at the last item, we are done */
|
||||||
if (packet->item_count == packet->count)
|
if (packet->item_count == packet->count)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
/* move to SDES */
|
/* move to SDES */
|
||||||
data = GST_BUFFER_DATA (packet->buffer);
|
data = packet->rtcp->data;
|
||||||
data += packet->offset;
|
data += packet->offset;
|
||||||
/* move to item */
|
/* move to item */
|
||||||
offset = packet->item_offset;
|
offset = packet->item_offset;
|
||||||
|
@ -1028,10 +1047,9 @@ gst_rtcp_packet_sdes_get_ssrc (GstRTCPPacket * packet)
|
||||||
|
|
||||||
g_return_val_if_fail (packet != NULL, 0);
|
g_return_val_if_fail (packet != NULL, 0);
|
||||||
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, 0);
|
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, 0);
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), 0);
|
|
||||||
|
|
||||||
/* move to SDES */
|
/* move to SDES */
|
||||||
data = GST_BUFFER_DATA (packet->buffer);
|
data = packet->rtcp->data;
|
||||||
data += packet->offset;
|
data += packet->offset;
|
||||||
/* move to item */
|
/* move to item */
|
||||||
data += packet->item_offset;
|
data += packet->item_offset;
|
||||||
|
@ -1057,10 +1075,9 @@ gst_rtcp_packet_sdes_first_entry (GstRTCPPacket * packet)
|
||||||
|
|
||||||
g_return_val_if_fail (packet != NULL, FALSE);
|
g_return_val_if_fail (packet != NULL, FALSE);
|
||||||
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, FALSE);
|
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, FALSE);
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), FALSE);
|
|
||||||
|
|
||||||
/* move to SDES */
|
/* move to SDES */
|
||||||
data = GST_BUFFER_DATA (packet->buffer);
|
data = packet->rtcp->data;
|
||||||
data += packet->offset;
|
data += packet->offset;
|
||||||
/* move to item */
|
/* move to item */
|
||||||
offset = packet->item_offset;
|
offset = packet->item_offset;
|
||||||
|
@ -1096,10 +1113,9 @@ gst_rtcp_packet_sdes_next_entry (GstRTCPPacket * packet)
|
||||||
|
|
||||||
g_return_val_if_fail (packet != NULL, FALSE);
|
g_return_val_if_fail (packet != NULL, FALSE);
|
||||||
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, FALSE);
|
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, FALSE);
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), FALSE);
|
|
||||||
|
|
||||||
/* move to SDES */
|
/* move to SDES */
|
||||||
data = GST_BUFFER_DATA (packet->buffer);
|
data = packet->rtcp->data;
|
||||||
data += packet->offset;
|
data += packet->offset;
|
||||||
/* move to item */
|
/* move to item */
|
||||||
offset = packet->item_offset;
|
offset = packet->item_offset;
|
||||||
|
@ -1150,10 +1166,9 @@ gst_rtcp_packet_sdes_get_entry (GstRTCPPacket * packet,
|
||||||
|
|
||||||
g_return_val_if_fail (packet != NULL, FALSE);
|
g_return_val_if_fail (packet != NULL, FALSE);
|
||||||
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, FALSE);
|
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, FALSE);
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), FALSE);
|
|
||||||
|
|
||||||
/* move to SDES */
|
/* move to SDES */
|
||||||
bdata = GST_BUFFER_DATA (packet->buffer);
|
bdata = packet->rtcp->data;
|
||||||
bdata += packet->offset;
|
bdata += packet->offset;
|
||||||
/* move to item */
|
/* move to item */
|
||||||
offset = packet->item_offset;
|
offset = packet->item_offset;
|
||||||
|
@ -1194,7 +1209,6 @@ gst_rtcp_packet_sdes_copy_entry (GstRTCPPacket * packet,
|
||||||
|
|
||||||
g_return_val_if_fail (packet != NULL, FALSE);
|
g_return_val_if_fail (packet != NULL, FALSE);
|
||||||
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, FALSE);
|
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, FALSE);
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), FALSE);
|
|
||||||
|
|
||||||
if (!gst_rtcp_packet_sdes_get_entry (packet, type, &tlen, &tdata))
|
if (!gst_rtcp_packet_sdes_get_entry (packet, type, &tlen, &tdata))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -1225,7 +1239,6 @@ gst_rtcp_packet_sdes_add_item (GstRTCPPacket * packet, guint32 ssrc)
|
||||||
|
|
||||||
g_return_val_if_fail (packet != NULL, FALSE);
|
g_return_val_if_fail (packet != NULL, FALSE);
|
||||||
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, FALSE);
|
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, FALSE);
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), FALSE);
|
|
||||||
|
|
||||||
/* increment item count when possible */
|
/* increment item count when possible */
|
||||||
if (packet->count >= GST_RTCP_MAX_SDES_ITEM_COUNT)
|
if (packet->count >= GST_RTCP_MAX_SDES_ITEM_COUNT)
|
||||||
|
@ -1238,8 +1251,8 @@ gst_rtcp_packet_sdes_add_item (GstRTCPPacket * packet, guint32 ssrc)
|
||||||
gst_rtcp_packet_sdes_next_item (packet);
|
gst_rtcp_packet_sdes_next_item (packet);
|
||||||
|
|
||||||
/* move to SDES */
|
/* move to SDES */
|
||||||
data = GST_BUFFER_DATA (packet->buffer);
|
data = packet->rtcp->data;
|
||||||
size = GST_BUFFER_SIZE (packet->buffer);
|
size = packet->rtcp->size;
|
||||||
data += packet->offset;
|
data += packet->offset;
|
||||||
/* move to current item */
|
/* move to current item */
|
||||||
offset = packet->item_offset;
|
offset = packet->item_offset;
|
||||||
|
@ -1295,11 +1308,10 @@ gst_rtcp_packet_sdes_add_entry (GstRTCPPacket * packet, GstRTCPSDESType type,
|
||||||
|
|
||||||
g_return_val_if_fail (packet != NULL, FALSE);
|
g_return_val_if_fail (packet != NULL, FALSE);
|
||||||
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, FALSE);
|
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_SDES, FALSE);
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), FALSE);
|
|
||||||
|
|
||||||
/* move to SDES */
|
/* move to SDES */
|
||||||
bdata = GST_BUFFER_DATA (packet->buffer);
|
bdata = packet->rtcp->data;
|
||||||
size = GST_BUFFER_SIZE (packet->buffer);
|
size = packet->rtcp->size;
|
||||||
bdata += packet->offset;
|
bdata += packet->offset;
|
||||||
/* move to item */
|
/* move to item */
|
||||||
offset = packet->item_offset;
|
offset = packet->item_offset;
|
||||||
|
@ -1371,7 +1383,6 @@ gst_rtcp_packet_bye_get_nth_ssrc (GstRTCPPacket * packet, guint nth)
|
||||||
|
|
||||||
g_return_val_if_fail (packet != NULL, 0);
|
g_return_val_if_fail (packet != NULL, 0);
|
||||||
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_BYE, 0);
|
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_BYE, 0);
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), 0);
|
|
||||||
|
|
||||||
/* get amount of sources and check that we don't read too much */
|
/* get amount of sources and check that we don't read too much */
|
||||||
sc = packet->count;
|
sc = packet->count;
|
||||||
|
@ -1389,10 +1400,10 @@ gst_rtcp_packet_bye_get_nth_ssrc (GstRTCPPacket * packet, guint nth)
|
||||||
offset += packet->offset;
|
offset += packet->offset;
|
||||||
|
|
||||||
/* check if the packet is valid */
|
/* check if the packet is valid */
|
||||||
if (offset + 4 > GST_BUFFER_SIZE (packet->buffer))
|
if (offset + 4 > packet->rtcp->size)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
data = GST_BUFFER_DATA (packet->buffer);
|
data = packet->rtcp->data;
|
||||||
data += offset;
|
data += offset;
|
||||||
|
|
||||||
ssrc = GST_READ_UINT32_BE (data);
|
ssrc = GST_READ_UINT32_BE (data);
|
||||||
|
@ -1419,13 +1430,12 @@ gst_rtcp_packet_bye_add_ssrc (GstRTCPPacket * packet, guint32 ssrc)
|
||||||
|
|
||||||
g_return_val_if_fail (packet != NULL, FALSE);
|
g_return_val_if_fail (packet != NULL, FALSE);
|
||||||
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_BYE, FALSE);
|
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_BYE, FALSE);
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), FALSE);
|
|
||||||
|
|
||||||
if (packet->count >= GST_RTCP_MAX_BYE_SSRC_COUNT)
|
if (packet->count >= GST_RTCP_MAX_BYE_SSRC_COUNT)
|
||||||
goto no_space;
|
goto no_space;
|
||||||
|
|
||||||
data = GST_BUFFER_DATA (packet->buffer);
|
data = packet->rtcp->data;
|
||||||
size = GST_BUFFER_SIZE (packet->buffer);
|
size = packet->rtcp->size;
|
||||||
|
|
||||||
/* skip header */
|
/* skip header */
|
||||||
offset = packet->offset + 4;
|
offset = packet->offset + 4;
|
||||||
|
@ -1477,7 +1487,6 @@ gst_rtcp_packet_bye_add_ssrcs (GstRTCPPacket * packet, guint32 * ssrc,
|
||||||
|
|
||||||
g_return_val_if_fail (packet != NULL, FALSE);
|
g_return_val_if_fail (packet != NULL, FALSE);
|
||||||
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_BYE, FALSE);
|
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_BYE, FALSE);
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), FALSE);
|
|
||||||
|
|
||||||
res = TRUE;
|
res = TRUE;
|
||||||
for (i = 0; i < len && res; i++) {
|
for (i = 0; i < len && res; i++) {
|
||||||
|
@ -1504,7 +1513,7 @@ get_reason_offset (GstRTCPPacket * packet)
|
||||||
offset += packet->offset;
|
offset += packet->offset;
|
||||||
|
|
||||||
/* check if the packet is valid */
|
/* check if the packet is valid */
|
||||||
if (offset + 1 > GST_BUFFER_SIZE (packet->buffer))
|
if (offset + 1 > packet->rtcp->size)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return offset;
|
return offset;
|
||||||
|
@ -1527,13 +1536,12 @@ gst_rtcp_packet_bye_get_reason_len (GstRTCPPacket * packet)
|
||||||
|
|
||||||
g_return_val_if_fail (packet != NULL, 0);
|
g_return_val_if_fail (packet != NULL, 0);
|
||||||
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_BYE, 0);
|
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_BYE, 0);
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), 0);
|
|
||||||
|
|
||||||
roffset = get_reason_offset (packet);
|
roffset = get_reason_offset (packet);
|
||||||
if (roffset == 0)
|
if (roffset == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
data = GST_BUFFER_DATA (packet->buffer);
|
data = packet->rtcp->data;
|
||||||
|
|
||||||
return data[roffset];
|
return data[roffset];
|
||||||
}
|
}
|
||||||
|
@ -1556,13 +1564,12 @@ gst_rtcp_packet_bye_get_reason (GstRTCPPacket * packet)
|
||||||
|
|
||||||
g_return_val_if_fail (packet != NULL, NULL);
|
g_return_val_if_fail (packet != NULL, NULL);
|
||||||
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_BYE, NULL);
|
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_BYE, NULL);
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), NULL);
|
|
||||||
|
|
||||||
roffset = get_reason_offset (packet);
|
roffset = get_reason_offset (packet);
|
||||||
if (roffset == 0)
|
if (roffset == 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
data = GST_BUFFER_DATA (packet->buffer);
|
data = packet->rtcp->data;
|
||||||
|
|
||||||
/* get length of reason string */
|
/* get length of reason string */
|
||||||
len = data[roffset];
|
len = data[roffset];
|
||||||
|
@ -1573,7 +1580,7 @@ gst_rtcp_packet_bye_get_reason (GstRTCPPacket * packet)
|
||||||
roffset += 1;
|
roffset += 1;
|
||||||
|
|
||||||
/* check if enough data to copy */
|
/* check if enough data to copy */
|
||||||
if (roffset + len > GST_BUFFER_SIZE (packet->buffer))
|
if (roffset + len > packet->rtcp->size)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return g_strndup ((gconstpointer) (data + roffset), len);
|
return g_strndup ((gconstpointer) (data + roffset), len);
|
||||||
|
@ -1597,7 +1604,6 @@ gst_rtcp_packet_bye_set_reason (GstRTCPPacket * packet, const gchar * reason)
|
||||||
|
|
||||||
g_return_val_if_fail (packet != NULL, FALSE);
|
g_return_val_if_fail (packet != NULL, FALSE);
|
||||||
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_BYE, FALSE);
|
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_BYE, FALSE);
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), FALSE);
|
|
||||||
|
|
||||||
if (reason == NULL)
|
if (reason == NULL)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -1613,8 +1619,8 @@ gst_rtcp_packet_bye_set_reason (GstRTCPPacket * packet, const gchar * reason)
|
||||||
if (roffset == 0)
|
if (roffset == 0)
|
||||||
goto no_space;
|
goto no_space;
|
||||||
|
|
||||||
data = GST_BUFFER_DATA (packet->buffer);
|
data = packet->rtcp->data;
|
||||||
size = GST_BUFFER_SIZE (packet->buffer);
|
size = packet->rtcp->size;
|
||||||
|
|
||||||
/* we have 1 byte length and we need to pad to 4 bytes */
|
/* we have 1 byte length and we need to pad to 4 bytes */
|
||||||
padded = ((len + 1) + 3) & ~3;
|
padded = ((len + 1) + 3) & ~3;
|
||||||
|
@ -1660,9 +1666,8 @@ gst_rtcp_packet_fb_get_sender_ssrc (GstRTCPPacket * packet)
|
||||||
g_return_val_if_fail (packet != NULL, 0);
|
g_return_val_if_fail (packet != NULL, 0);
|
||||||
g_return_val_if_fail ((packet->type == GST_RTCP_TYPE_RTPFB ||
|
g_return_val_if_fail ((packet->type == GST_RTCP_TYPE_RTPFB ||
|
||||||
packet->type == GST_RTCP_TYPE_PSFB), 0);
|
packet->type == GST_RTCP_TYPE_PSFB), 0);
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), 0);
|
|
||||||
|
|
||||||
data = GST_BUFFER_DATA (packet->buffer);
|
data = packet->rtcp->data;
|
||||||
|
|
||||||
/* skip header */
|
/* skip header */
|
||||||
data += packet->offset + 4;
|
data += packet->offset + 4;
|
||||||
|
@ -1688,9 +1693,8 @@ gst_rtcp_packet_fb_set_sender_ssrc (GstRTCPPacket * packet, guint32 ssrc)
|
||||||
g_return_if_fail (packet != NULL);
|
g_return_if_fail (packet != NULL);
|
||||||
g_return_if_fail (packet->type == GST_RTCP_TYPE_RTPFB ||
|
g_return_if_fail (packet->type == GST_RTCP_TYPE_RTPFB ||
|
||||||
packet->type == GST_RTCP_TYPE_PSFB);
|
packet->type == GST_RTCP_TYPE_PSFB);
|
||||||
g_return_if_fail (GST_IS_BUFFER (packet->buffer));
|
|
||||||
|
|
||||||
data = GST_BUFFER_DATA (packet->buffer);
|
data = packet->rtcp->data;
|
||||||
|
|
||||||
/* skip header */
|
/* skip header */
|
||||||
data += packet->offset + 4;
|
data += packet->offset + 4;
|
||||||
|
@ -1716,9 +1720,8 @@ gst_rtcp_packet_fb_get_media_ssrc (GstRTCPPacket * packet)
|
||||||
g_return_val_if_fail (packet != NULL, 0);
|
g_return_val_if_fail (packet != NULL, 0);
|
||||||
g_return_val_if_fail ((packet->type == GST_RTCP_TYPE_RTPFB ||
|
g_return_val_if_fail ((packet->type == GST_RTCP_TYPE_RTPFB ||
|
||||||
packet->type == GST_RTCP_TYPE_PSFB), 0);
|
packet->type == GST_RTCP_TYPE_PSFB), 0);
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), 0);
|
|
||||||
|
|
||||||
data = GST_BUFFER_DATA (packet->buffer);
|
data = packet->rtcp->data;
|
||||||
|
|
||||||
/* skip header and sender ssrc */
|
/* skip header and sender ssrc */
|
||||||
data += packet->offset + 8;
|
data += packet->offset + 8;
|
||||||
|
@ -1744,9 +1747,8 @@ gst_rtcp_packet_fb_set_media_ssrc (GstRTCPPacket * packet, guint32 ssrc)
|
||||||
g_return_if_fail (packet != NULL);
|
g_return_if_fail (packet != NULL);
|
||||||
g_return_if_fail (packet->type == GST_RTCP_TYPE_RTPFB ||
|
g_return_if_fail (packet->type == GST_RTCP_TYPE_RTPFB ||
|
||||||
packet->type == GST_RTCP_TYPE_PSFB);
|
packet->type == GST_RTCP_TYPE_PSFB);
|
||||||
g_return_if_fail (GST_IS_BUFFER (packet->buffer));
|
|
||||||
|
|
||||||
data = GST_BUFFER_DATA (packet->buffer);
|
data = packet->rtcp->data;
|
||||||
|
|
||||||
/* skip header and sender ssrc */
|
/* skip header and sender ssrc */
|
||||||
data += packet->offset + 8;
|
data += packet->offset + 8;
|
||||||
|
@ -1790,9 +1792,8 @@ gst_rtcp_packet_fb_set_type (GstRTCPPacket * packet, GstRTCPFBType type)
|
||||||
g_return_if_fail (packet != NULL);
|
g_return_if_fail (packet != NULL);
|
||||||
g_return_if_fail (packet->type == GST_RTCP_TYPE_RTPFB ||
|
g_return_if_fail (packet->type == GST_RTCP_TYPE_RTPFB ||
|
||||||
packet->type == GST_RTCP_TYPE_PSFB);
|
packet->type == GST_RTCP_TYPE_PSFB);
|
||||||
g_return_if_fail (GST_IS_BUFFER (packet->buffer));
|
|
||||||
|
|
||||||
data = GST_BUFFER_DATA (packet->buffer);
|
data = packet->rtcp->data;
|
||||||
|
|
||||||
data[packet->offset] = (data[packet->offset] & 0xe0) | type;
|
data[packet->offset] = (data[packet->offset] & 0xe0) | type;
|
||||||
packet->count = type;
|
packet->count = type;
|
||||||
|
@ -1963,9 +1964,8 @@ gst_rtcp_packet_fb_get_fci_length (GstRTCPPacket * packet)
|
||||||
g_return_val_if_fail (packet != NULL, 0);
|
g_return_val_if_fail (packet != NULL, 0);
|
||||||
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_RTPFB ||
|
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_RTPFB ||
|
||||||
packet->type == GST_RTCP_TYPE_PSFB, 0);
|
packet->type == GST_RTCP_TYPE_PSFB, 0);
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), 0);
|
|
||||||
|
|
||||||
data = GST_BUFFER_DATA (packet->buffer) + packet->offset + 2;
|
data = packet->rtcp->data + packet->offset + 2;
|
||||||
|
|
||||||
return GST_READ_UINT16_BE (data) - 2;
|
return GST_READ_UINT16_BE (data) - 2;
|
||||||
}
|
}
|
||||||
|
@ -1990,12 +1990,11 @@ gst_rtcp_packet_fb_set_fci_length (GstRTCPPacket * packet, guint16 wordlen)
|
||||||
g_return_val_if_fail (packet != NULL, FALSE);
|
g_return_val_if_fail (packet != NULL, FALSE);
|
||||||
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_RTPFB ||
|
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_RTPFB ||
|
||||||
packet->type == GST_RTCP_TYPE_PSFB, FALSE);
|
packet->type == GST_RTCP_TYPE_PSFB, FALSE);
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), FALSE);
|
|
||||||
|
|
||||||
if (GST_BUFFER_SIZE (packet->buffer) < packet->offset + ((wordlen + 3) * 4))
|
if (packet->rtcp->size < packet->offset + ((wordlen + 3) * 4))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
data = GST_BUFFER_DATA (packet->buffer) + packet->offset + 2;
|
data = packet->rtcp->data + packet->offset + 2;
|
||||||
wordlen += 2;
|
wordlen += 2;
|
||||||
GST_WRITE_UINT16_BE (data, wordlen);
|
GST_WRITE_UINT16_BE (data, wordlen);
|
||||||
|
|
||||||
|
@ -2020,9 +2019,8 @@ gst_rtcp_packet_fb_get_fci (GstRTCPPacket * packet)
|
||||||
g_return_val_if_fail (packet != NULL, NULL);
|
g_return_val_if_fail (packet != NULL, NULL);
|
||||||
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_RTPFB ||
|
g_return_val_if_fail (packet->type == GST_RTCP_TYPE_RTPFB ||
|
||||||
packet->type == GST_RTCP_TYPE_PSFB, NULL);
|
packet->type == GST_RTCP_TYPE_PSFB, NULL);
|
||||||
g_return_val_if_fail (GST_IS_BUFFER (packet->buffer), NULL);
|
|
||||||
|
|
||||||
data = GST_BUFFER_DATA (packet->buffer) + packet->offset;
|
data = packet->rtcp->data + packet->offset;
|
||||||
|
|
||||||
if (GST_READ_UINT16_BE (data + 2) <= 2)
|
if (GST_READ_UINT16_BE (data + 2) <= 2)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -156,8 +156,19 @@ typedef enum
|
||||||
*/
|
*/
|
||||||
#define GST_RTCP_VALID_VALUE ((GST_RTCP_VERSION << 14) | GST_RTCP_TYPE_SR)
|
#define GST_RTCP_VALID_VALUE ((GST_RTCP_VERSION << 14) | GST_RTCP_TYPE_SR)
|
||||||
|
|
||||||
|
typedef struct _GstRTCPBuffer GstRTCPBuffer;
|
||||||
typedef struct _GstRTCPPacket GstRTCPPacket;
|
typedef struct _GstRTCPPacket GstRTCPPacket;
|
||||||
|
|
||||||
|
struct _GstRTCPBuffer
|
||||||
|
{
|
||||||
|
GstBuffer *buffer;
|
||||||
|
|
||||||
|
GstMapFlags flags;
|
||||||
|
guint8 *data;
|
||||||
|
gsize size;
|
||||||
|
gsize maxsize;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GstRTCPPacket:
|
* GstRTCPPacket:
|
||||||
* @buffer: pointer to RTCP buffer
|
* @buffer: pointer to RTCP buffer
|
||||||
|
@ -168,8 +179,8 @@ typedef struct _GstRTCPPacket GstRTCPPacket;
|
||||||
*/
|
*/
|
||||||
struct _GstRTCPPacket
|
struct _GstRTCPPacket
|
||||||
{
|
{
|
||||||
GstBuffer *buffer;
|
GstRTCPBuffer *rtcp;
|
||||||
guint offset;
|
guint offset;
|
||||||
|
|
||||||
/*< private >*/
|
/*< private >*/
|
||||||
gboolean padding; /* padding field of current packet */
|
gboolean padding; /* padding field of current packet */
|
||||||
|
@ -190,14 +201,16 @@ gboolean gst_rtcp_buffer_validate_data (guint8 *data, guint len);
|
||||||
gboolean gst_rtcp_buffer_validate (GstBuffer *buffer);
|
gboolean gst_rtcp_buffer_validate (GstBuffer *buffer);
|
||||||
|
|
||||||
GstBuffer* gst_rtcp_buffer_new (guint mtu);
|
GstBuffer* gst_rtcp_buffer_new (guint mtu);
|
||||||
void gst_rtcp_buffer_end (GstBuffer *buffer);
|
|
||||||
|
gboolean gst_rtcp_buffer_map (GstBuffer *buffer, GstMapFlags flags, GstRTCPBuffer *rtcp);
|
||||||
|
gboolean gst_rtcp_buffer_unmap (GstRTCPBuffer *rtcp);
|
||||||
|
|
||||||
/* adding/retrieving packets */
|
/* adding/retrieving packets */
|
||||||
guint gst_rtcp_buffer_get_packet_count (GstBuffer *buffer);
|
guint gst_rtcp_buffer_get_packet_count (GstRTCPBuffer *rtcp);
|
||||||
gboolean gst_rtcp_buffer_get_first_packet (GstBuffer *buffer, GstRTCPPacket *packet);
|
gboolean gst_rtcp_buffer_get_first_packet (GstRTCPBuffer *rtcp, GstRTCPPacket *packet);
|
||||||
gboolean gst_rtcp_packet_move_to_next (GstRTCPPacket *packet);
|
gboolean gst_rtcp_packet_move_to_next (GstRTCPPacket *packet);
|
||||||
|
|
||||||
gboolean gst_rtcp_buffer_add_packet (GstBuffer *buffer, GstRTCPType type,
|
gboolean gst_rtcp_buffer_add_packet (GstRTCPBuffer *rtcp, GstRTCPType type,
|
||||||
GstRTCPPacket *packet);
|
GstRTCPPacket *packet);
|
||||||
gboolean gst_rtcp_packet_remove (GstRTCPPacket *packet);
|
gboolean gst_rtcp_packet_remove (GstRTCPPacket *packet);
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -36,129 +36,119 @@ G_BEGIN_DECLS
|
||||||
*/
|
*/
|
||||||
#define GST_RTP_VERSION 2
|
#define GST_RTP_VERSION 2
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct _GstRTPBuffer GstRTPBuffer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GstRTPBuffer:
|
||||||
|
* @buffer: pointer to RTP buffer
|
||||||
|
*
|
||||||
|
* Data structure that points to an RTP packet.
|
||||||
|
* The size of the structure is made public to allow stack allocations.
|
||||||
|
*/
|
||||||
|
struct _GstRTPBuffer
|
||||||
|
{
|
||||||
|
GstBuffer *buffer;
|
||||||
|
GstMapFlags flags;
|
||||||
|
gsize size;
|
||||||
|
gsize maxsize;
|
||||||
|
|
||||||
|
guint8 *data;
|
||||||
|
gsize data_size;
|
||||||
|
guint8 *payload;
|
||||||
|
gsize payload_size;
|
||||||
|
};
|
||||||
|
|
||||||
/* creating buffers */
|
/* creating buffers */
|
||||||
void gst_rtp_buffer_allocate_data (GstBuffer *buffer, guint payload_len,
|
void gst_rtp_buffer_allocate_data (GstBuffer *buffer, guint payload_len,
|
||||||
guint8 pad_len, guint8 csrc_count);
|
guint8 pad_len, guint8 csrc_count);
|
||||||
|
|
||||||
GstBuffer* gst_rtp_buffer_new_take_data (gpointer data, guint len);
|
GstBuffer* gst_rtp_buffer_new_take_data (gpointer data, gsize len);
|
||||||
GstBuffer* gst_rtp_buffer_new_copy_data (gpointer data, guint len);
|
GstBuffer* gst_rtp_buffer_new_copy_data (gpointer data, gsize len);
|
||||||
GstBuffer* gst_rtp_buffer_new_allocate (guint payload_len, guint8 pad_len, guint8 csrc_count);
|
GstBuffer* gst_rtp_buffer_new_allocate (guint payload_len, guint8 pad_len, guint8 csrc_count);
|
||||||
GstBuffer* gst_rtp_buffer_new_allocate_len (guint packet_len, guint8 pad_len, guint8 csrc_count);
|
GstBuffer* gst_rtp_buffer_new_allocate_len (guint packet_len, guint8 pad_len, guint8 csrc_count);
|
||||||
|
|
||||||
GstBufferList* gst_rtp_buffer_list_from_buffer (GstBuffer * buffer);
|
|
||||||
|
|
||||||
|
|
||||||
guint gst_rtp_buffer_calc_header_len (guint8 csrc_count);
|
guint gst_rtp_buffer_calc_header_len (guint8 csrc_count);
|
||||||
guint gst_rtp_buffer_calc_packet_len (guint payload_len, guint8 pad_len, guint8 csrc_count);
|
guint gst_rtp_buffer_calc_packet_len (guint payload_len, guint8 pad_len, guint8 csrc_count);
|
||||||
guint gst_rtp_buffer_calc_payload_len (guint packet_len, guint8 pad_len, guint8 csrc_count);
|
guint gst_rtp_buffer_calc_payload_len (guint packet_len, guint8 pad_len, guint8 csrc_count);
|
||||||
|
|
||||||
gboolean gst_rtp_buffer_validate_data (guint8 *data, guint len);
|
gboolean gst_rtp_buffer_validate_data (guint8 *data, gsize len);
|
||||||
gboolean gst_rtp_buffer_validate (GstBuffer *buffer);
|
gboolean gst_rtp_buffer_validate (GstBuffer *buffer);
|
||||||
gboolean gst_rtp_buffer_list_validate (GstBufferList *list);
|
|
||||||
|
|
||||||
void gst_rtp_buffer_set_packet_len (GstBuffer *buffer, guint len);
|
|
||||||
guint gst_rtp_buffer_get_packet_len (GstBuffer *buffer);
|
|
||||||
|
|
||||||
guint gst_rtp_buffer_get_header_len (GstBuffer *buffer);
|
gboolean gst_rtp_buffer_map (GstBuffer *buffer, GstMapFlags flags, GstRTPBuffer *rtp);
|
||||||
|
gboolean gst_rtp_buffer_unmap (GstRTPBuffer *rtp);
|
||||||
|
|
||||||
guint8 gst_rtp_buffer_get_version (GstBuffer *buffer);
|
void gst_rtp_buffer_set_packet_len (GstRTPBuffer *rtp, guint len);
|
||||||
void gst_rtp_buffer_set_version (GstBuffer *buffer, guint8 version);
|
guint gst_rtp_buffer_get_packet_len (GstRTPBuffer *rtp);
|
||||||
|
|
||||||
gboolean gst_rtp_buffer_get_padding (GstBuffer *buffer);
|
guint gst_rtp_buffer_get_header_len (GstRTPBuffer *rtp);
|
||||||
void gst_rtp_buffer_set_padding (GstBuffer *buffer, gboolean padding);
|
|
||||||
void gst_rtp_buffer_pad_to (GstBuffer *buffer, guint len);
|
|
||||||
|
|
||||||
gboolean gst_rtp_buffer_get_extension (GstBuffer *buffer);
|
guint8 gst_rtp_buffer_get_version (GstRTPBuffer *rtp);
|
||||||
void gst_rtp_buffer_set_extension (GstBuffer *buffer, gboolean extension);
|
void gst_rtp_buffer_set_version (GstRTPBuffer *rtp, guint8 version);
|
||||||
gboolean gst_rtp_buffer_get_extension_data (GstBuffer *buffer, guint16 *bits,
|
|
||||||
|
gboolean gst_rtp_buffer_get_padding (GstRTPBuffer *rtp);
|
||||||
|
void gst_rtp_buffer_set_padding (GstRTPBuffer *rtp, gboolean padding);
|
||||||
|
void gst_rtp_buffer_pad_to (GstRTPBuffer *rtp, guint len);
|
||||||
|
|
||||||
|
gboolean gst_rtp_buffer_get_extension (GstRTPBuffer *rtp);
|
||||||
|
void gst_rtp_buffer_set_extension (GstRTPBuffer *rtp, gboolean extension);
|
||||||
|
gboolean gst_rtp_buffer_get_extension_data (GstRTPBuffer *rtp, guint16 *bits,
|
||||||
gpointer *data, guint *wordlen);
|
gpointer *data, guint *wordlen);
|
||||||
gboolean gst_rtp_buffer_set_extension_data (GstBuffer *buffer, guint16 bits, guint16 length);
|
gboolean gst_rtp_buffer_set_extension_data (GstRTPBuffer *rtp, guint16 bits, guint16 length);
|
||||||
|
|
||||||
guint32 gst_rtp_buffer_get_ssrc (GstBuffer *buffer);
|
guint32 gst_rtp_buffer_get_ssrc (GstRTPBuffer *rtp);
|
||||||
guint32 gst_rtp_buffer_list_get_ssrc (GstBufferList *list);
|
void gst_rtp_buffer_set_ssrc (GstRTPBuffer *rtp, guint32 ssrc);
|
||||||
void gst_rtp_buffer_set_ssrc (GstBuffer *buffer, guint32 ssrc);
|
|
||||||
void gst_rtp_buffer_list_set_ssrc (GstBufferList *list, guint32 ssrc);
|
|
||||||
|
|
||||||
guint8 gst_rtp_buffer_get_csrc_count (GstBuffer *buffer);
|
guint8 gst_rtp_buffer_get_csrc_count (GstRTPBuffer *rtp);
|
||||||
guint32 gst_rtp_buffer_get_csrc (GstBuffer *buffer, guint8 idx);
|
guint32 gst_rtp_buffer_get_csrc (GstRTPBuffer *rtp, guint8 idx);
|
||||||
void gst_rtp_buffer_set_csrc (GstBuffer *buffer, guint8 idx, guint32 csrc);
|
void gst_rtp_buffer_set_csrc (GstRTPBuffer *rtp, guint8 idx, guint32 csrc);
|
||||||
|
|
||||||
gboolean gst_rtp_buffer_get_marker (GstBuffer *buffer);
|
gboolean gst_rtp_buffer_get_marker (GstRTPBuffer *rtp);
|
||||||
void gst_rtp_buffer_set_marker (GstBuffer *buffer, gboolean marker);
|
void gst_rtp_buffer_set_marker (GstRTPBuffer *rtp, gboolean marker);
|
||||||
|
|
||||||
guint8 gst_rtp_buffer_get_payload_type (GstBuffer *buffer);
|
guint8 gst_rtp_buffer_get_payload_type (GstRTPBuffer *rtp);
|
||||||
guint8 gst_rtp_buffer_list_get_payload_type (GstBufferList *list);
|
void gst_rtp_buffer_set_payload_type (GstRTPBuffer *rtp, guint8 payload_type);
|
||||||
void gst_rtp_buffer_set_payload_type (GstBuffer *buffer, guint8 payload_type);
|
|
||||||
void gst_rtp_buffer_list_set_payload_type (GstBufferList *list, guint8 payload_type);
|
|
||||||
|
|
||||||
guint16 gst_rtp_buffer_get_seq (GstBuffer *buffer);
|
guint16 gst_rtp_buffer_get_seq (GstRTPBuffer *rtp);
|
||||||
guint16 gst_rtp_buffer_list_get_seq (GstBufferList *list);
|
void gst_rtp_buffer_set_seq (GstRTPBuffer *rtp, guint16 seq);
|
||||||
void gst_rtp_buffer_set_seq (GstBuffer *buffer, guint16 seq);
|
|
||||||
guint16 gst_rtp_buffer_list_set_seq (GstBufferList *list, guint16 seq);
|
|
||||||
|
|
||||||
guint32 gst_rtp_buffer_get_timestamp (GstBuffer *buffer);
|
guint32 gst_rtp_buffer_get_timestamp (GstRTPBuffer *rtp);
|
||||||
guint32 gst_rtp_buffer_list_get_timestamp (GstBufferList *list);
|
void gst_rtp_buffer_set_timestamp (GstRTPBuffer *rtp, guint32 timestamp);
|
||||||
void gst_rtp_buffer_set_timestamp (GstBuffer *buffer, guint32 timestamp);
|
|
||||||
void gst_rtp_buffer_list_set_timestamp (GstBufferList *list, guint32 timestamp);
|
|
||||||
|
|
||||||
GstBuffer* gst_rtp_buffer_get_payload_buffer (GstBuffer *buffer);
|
GstBuffer* gst_rtp_buffer_get_payload_buffer (GstRTPBuffer *rtp);
|
||||||
GstBuffer* gst_rtp_buffer_get_payload_subbuffer (GstBuffer *buffer, guint offset, guint len);
|
GstBuffer* gst_rtp_buffer_get_payload_subbuffer (GstRTPBuffer *rtp, guint offset, guint len);
|
||||||
|
|
||||||
guint gst_rtp_buffer_get_payload_len (GstBuffer *buffer);
|
guint gst_rtp_buffer_get_payload_len (GstRTPBuffer *rtp);
|
||||||
guint gst_rtp_buffer_list_get_payload_len (GstBufferList *list);
|
gpointer gst_rtp_buffer_get_payload (GstRTPBuffer *rtp);
|
||||||
gpointer gst_rtp_buffer_get_payload (GstBuffer *buffer);
|
|
||||||
|
|
||||||
/* some helpers */
|
/* some helpers */
|
||||||
guint32 gst_rtp_buffer_default_clock_rate (guint8 payload_type);
|
guint32 gst_rtp_buffer_default_clock_rate (guint8 payload_type);
|
||||||
gint gst_rtp_buffer_compare_seqnum (guint16 seqnum1, guint16 seqnum2);
|
gint gst_rtp_buffer_compare_seqnum (guint16 seqnum1, guint16 seqnum2);
|
||||||
guint64 gst_rtp_buffer_ext_timestamp (guint64 *exttimestamp, guint32 timestamp);
|
guint64 gst_rtp_buffer_ext_timestamp (guint64 *exttimestamp, guint32 timestamp);
|
||||||
|
|
||||||
gboolean gst_rtp_buffer_get_extension_onebyte_header (GstBuffer * buffer,
|
gboolean gst_rtp_buffer_get_extension_onebyte_header (GstRTPBuffer *rtp,
|
||||||
guint8 id,
|
guint8 id,
|
||||||
guint nth,
|
guint nth,
|
||||||
gpointer * data,
|
gpointer * data,
|
||||||
guint * size);
|
guint * size);
|
||||||
gboolean gst_rtp_buffer_get_extension_twobytes_header (GstBuffer * buffer,
|
gboolean gst_rtp_buffer_get_extension_twobytes_header (GstRTPBuffer *rtp,
|
||||||
guint8 * appbits,
|
guint8 * appbits,
|
||||||
guint8 id,
|
guint8 id,
|
||||||
guint nth,
|
guint nth,
|
||||||
gpointer * data,
|
gpointer * data,
|
||||||
guint * size);
|
guint * size);
|
||||||
|
|
||||||
gboolean gst_rtp_buffer_add_extension_onebyte_header (GstBuffer * buffer,
|
gboolean gst_rtp_buffer_add_extension_onebyte_header (GstRTPBuffer *rtp,
|
||||||
guint8 id,
|
guint8 id,
|
||||||
gpointer data,
|
gpointer data,
|
||||||
guint size);
|
guint size);
|
||||||
gboolean gst_rtp_buffer_add_extension_twobytes_header (GstBuffer * buffer,
|
gboolean gst_rtp_buffer_add_extension_twobytes_header (GstRTPBuffer *rtp,
|
||||||
guint8 appbits,
|
guint8 appbits,
|
||||||
guint8 id,
|
guint8 id,
|
||||||
gpointer data,
|
gpointer data,
|
||||||
guint size);
|
guint size);
|
||||||
|
|
||||||
gboolean gst_rtp_buffer_list_get_extension_onebyte_header (GstBufferList * bufferlist,
|
|
||||||
guint group_idx,
|
|
||||||
guint8 id,
|
|
||||||
guint nth,
|
|
||||||
gpointer * data,
|
|
||||||
guint * size);
|
|
||||||
gboolean gst_rtp_buffer_list_get_extension_twobytes_header (GstBufferList * bufferlist,
|
|
||||||
guint group_idx,
|
|
||||||
guint8 * appbits,
|
|
||||||
guint8 id,
|
|
||||||
guint nth,
|
|
||||||
gpointer * data,
|
|
||||||
guint * size);
|
|
||||||
|
|
||||||
gboolean gst_rtp_buffer_list_add_extension_onebyte_header (GstBufferListIterator * it,
|
|
||||||
guint8 id,
|
|
||||||
gpointer data,
|
|
||||||
guint size);
|
|
||||||
gboolean gst_rtp_buffer_list_add_extension_twobytes_header (GstBufferListIterator * it,
|
|
||||||
guint8 appbits,
|
|
||||||
guint8 id,
|
|
||||||
gpointer data,
|
|
||||||
guint size);
|
|
||||||
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
|
|
@ -292,7 +292,7 @@ gst_video_convert_frame (GstBuffer * buf, const GstCaps * to_caps,
|
||||||
|
|
||||||
/* feed buffer in appsrc */
|
/* feed buffer in appsrc */
|
||||||
GST_DEBUG ("feeding buffer %p, size %u, caps %" GST_PTR_FORMAT,
|
GST_DEBUG ("feeding buffer %p, size %u, caps %" GST_PTR_FORMAT,
|
||||||
buf, GST_BUFFER_SIZE (buf), from_caps);
|
buf, gst_buffer_get_size (buf), from_caps);
|
||||||
g_signal_emit_by_name (src, "push-buffer", buf, &ret);
|
g_signal_emit_by_name (src, "push-buffer", buf, &ret);
|
||||||
|
|
||||||
/* now see what happens. We either got an error somewhere or the pipeline
|
/* now see what happens. We either got an error somewhere or the pipeline
|
||||||
|
|
|
@ -75,7 +75,7 @@ gst_video_filter_get_type (void)
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gst_video_filter_get_unit_size (GstBaseTransform * btrans, GstCaps * caps,
|
gst_video_filter_get_unit_size (GstBaseTransform * btrans, GstCaps * caps,
|
||||||
guint * size)
|
gsize * size)
|
||||||
{
|
{
|
||||||
GstVideoFormat fmt;
|
GstVideoFormat fmt;
|
||||||
gint width, height;
|
gint width, height;
|
||||||
|
|
Loading…
Reference in a new issue