Commit graph

5033 commits

Author SHA1 Message Date
Stefan Kost
d122ea0122 rtp: fix static array overruns in a nicer way
Use G_N_ELEMENTS instead of hard-coding the array size.
2011-05-20 10:34:47 +03:00
Stefan Kost
5792d3b9c0 rtp: fix static array overruns
Yes array[10] has elements from 0...9.
2011-05-20 00:53:44 +03:00
Stefan Kost
9f3ae3244c qtdemux: add missing break 2011-05-19 18:27:33 +03:00
Robert Swain
c1b100cf9c deinterlace: Add support for deinterlacing using buffer caps/flags
When not using the fieldanalysis element immediately upstream of deinterlace,
behaviour should remain unchanged. fieldanalysis will set the caps and flags on
the buffers such that they can be interpreted and acted upon to produce
progressive output.

There are two main modes of operation:

- Passive pattern locking
  Passive pattern locking is a non-blocking, low-latency mode of operation that
  is suitable for close-to-live usage. Initially a telecine stream will be
  output as variable framerate with naïve timestamp adjustment. With each
  incoming buffer, an attempt is made to lock onto a pattern. When a lock is
  obtained, the src pad and output buffer caps will reflect the pattern and
  timestamps will be accurately interpolated between pattern repeats. This
  means that initially and at pattern transitions there will be short periods
  of inaccurate timestamping.

- Active pattern locking
  Active pattern locking is a blocking, high-latency mode of operation that is
  targeted at use-cases where timestamp accuracy is paramount. Buffers will be
  queued until enough are present to make a lock. When locked, timestamps will
  be accurately interpolated between pattern repeats. Orphan fields can be
  dropped or deinterlaced. If no lock can be obtained, a single field might be
  pushed through to be deinterlaced.

Locking can also be disabled or 'auto' chooses between passive and active
locking modes depending on whether upstream is live.
2011-05-19 05:45:57 +02:00
Jose Antonio Santos Cadenas
9d32243671 rtp: Fix segmentation fault processing payload buffers
This commit checks if the value returned by
gst_rtp_buffer_get_payload_buffer and
gst_rtp_buffer_get_payload_subbuffer is NULL before using it.
2011-05-18 15:25:24 +02:00
Mark Nauwelaerts
4cd2dac1da avidemux: ensure 0-padding when correcting dubious list size 2011-05-18 14:51:11 +02:00
Stefan Kost
be413185d0 rtspsrc: use EINVAL for missing url parameter
Fixes gcc warning about using uninitialized variable 'res'.
2011-05-18 10:22:27 +03:00
Stefan Kost
e34ab46420 various: fix author tag in element details 2011-05-18 09:36:58 +03:00
Chris E Jones
a1b7eeceb1 auparse: implement seeking
Implement seeking and seeking query. Fixes #644512
2011-05-18 09:36:58 +03:00
Mark Nauwelaerts
dc2ddea91b rtspsrc: also allow PAUSE to be interrupted
... as it is on the way out to NULL.

See #632504.
2011-05-17 11:56:47 +02:00
Mark Nauwelaerts
283e4e4afd rtspsrc: ensure proper closing and cleanup
... since the TEARDOWN sequence might not have had a chance to even start,
but at least connections should be closed (synchronously) and state cleaned up.

See #632504.
2011-05-17 11:56:38 +02:00
Mark Nauwelaerts
f7ddf811d7 rtspsrc: fix and improve async handling
Simplify the command handling; passing a command to thread means we really
want it to get the message, which means to always flush provided the command
can handle being interrupted.  Command thread indicates whether command
allows interruption and ensure non-flushing connection as it subsequently
needs it.

In particular, this also makes the TEARDOWN sequence interruptable
and also prevents races where _loop_ could miss a command and would
continue receiving (or at least trying to).

See #632504.
2011-05-17 11:56:22 +02:00
Mark Nauwelaerts
e6798ad54c rtspsrc: tweak post-seek loop handling 2011-05-17 11:55:40 +02:00
Wim Taymans
ddfcd8bbfd rtspsrc: open on play and pause when not done yet
With the async state changes, it is possible that we need to open the stream
before play and pause.
Also make sure we remember a previous open failure so that we don't keep trying
again.
2011-05-17 11:55:34 +02:00
Wim Taymans
6fe680934a rtspsrc: improve async handling
Simplify the command handling, only continue looping when we have not received
another command or when the previous loop was successfull.
Avoid looping on a disconnected socket.
2011-05-17 11:55:32 +02:00
Wim Taymans
2513207433 rtspsrc: rework reconnect code
Use the same async code path to implement reconnects.
Make sure we only post progress messages when doing async things.
2011-05-17 11:55:29 +02:00
Wim Taymans
c27c10f8f4 rtspsrc: small cleanups
Make sure we cancel the previous task when queuing a new one.
Move the messages to a central place so we can more easily post them.
2011-05-17 11:55:27 +02:00
Wim Taymans
852c6e11cd rtspsrc: don't post errors when interrupting 2011-05-17 11:55:24 +02:00
Wim Taymans
220e47adcf rtspsrc: implement more async handling
Remove some old locks.
Make sure we never go into the loop function when flushing.
2011-05-17 11:55:20 +02:00
Wim Taymans
2873585238 rtspsrc: first attempt at async implementation 2011-05-17 11:55:18 +02:00
Wim Taymans
dae679e560 rtspsrc: small header cleanups 2011-05-17 11:55:15 +02:00
Sebastian Dröge
b694bfeca3 ssrcdemux: Fix uninitialized variable compiler warning for (pre-) releases too 2011-05-17 10:47:32 +02:00
Sebastian Dröge
0f05d3e5a5 rtpssrcdemux: Fix uninitialized variable compiler warning 2011-05-17 09:24:08 +02:00
Olivier Crête
b6bfc512e8 ssrcdemux: Implement iterate internal links for sink pads
https://bugzilla.gnome.org/show_bug.cgi?id=649617
2011-05-17 09:22:29 +02:00
Olivier Crête
23b6c8febc rtpssrcdemux: iterate pad function is only valid for src pads
The iterate function is only used for src pads, so mark it as such and remove
dead code.

https://bugzilla.gnome.org/show_bug.cgi?id=649617
2011-05-17 09:22:25 +02:00
Olivier Crête
1bf94a92b0 rtpssrcdemux: Release lock before emitting signal
If the lock is not released before emitting a signal, it may cause a deadlock
if any other function in the element is called.

Also removed an unused timestamp parameter

https://bugzilla.gnome.org/show_bug.cgi?id=649617
2011-05-17 09:22:20 +02:00
Debarshi Ray
4df5d896f0 matroskaparse: calculate segment duration after parsing all the IDs
Since the segment duration is given in terms of the
GST_MATROSKA_ID_TIMECODESCALE we should only convert it into
nanoseconds when we are sure that any scale specified in the file has
been read.

https://bugzilla.gnome.org/show_bug.cgi?id=650258
2011-05-17 09:03:50 +02:00
Mark Nauwelaerts
8b910885ec matroskademux: additional lock safety
Fixes #619590.
2011-05-16 13:30:10 +02:00
Mark Nauwelaerts
4db6dce2db qtdemux: also check for bitrate info in caps 2011-05-16 13:30:06 +02:00
Arun Raghavan
f89caeff5c qtdemux: guess bitrate if only one stream's bitrate is unknown
If the bitrates for all but one audio/video streams are known, and the
total stream size and duration can be determined, this calculates the
unkown bitrate as (stream size / duration) - (sum of known bitrates).
While this is not guaranteed to be very accurate, it should be good
enough for most purposes.

For example, this is useful for H.263 + AAC streams where no 'btrt' atom
is available for the video portion.

https://bugzilla.gnome.org/show_bug.cgi?id=619548
2011-05-16 13:29:56 +02:00
Arun Raghavan
6e2774af55 qtdemux: Export max bitrate for AMR-NB/-WB streams
This parses the 'damr' atom if present, and exports the maximum bitrate
of the stream using the mode set field to determine the highest bitrate
frame type that might be present.

https://bugzilla.gnome.org/show_bug.cgi?id=620186
2011-05-16 13:29:50 +02:00
Debarshi Ray
bdc464a778 matroskademux: calculate segment duration after parsing all the IDs
Since the segment duration is given in terms of the
GST_MATROSKA_ID_TIMECODESCALE we should only convert it into
nanoseconds when we are sure that any scale specified in the file has
been read.

https://bugzilla.gnome.org/show_bug.cgi?id=650258
2011-05-16 08:56:06 +02:00
Andoni Morales Alastruey
5b99b910ec flvmux: Add support for mpegversion 2, which is also AAC 2011-05-14 11:52:13 +02:00
Sebastian Dröge
88203989cd wavenc: Set fixedcaps getcaps function on the sinkpad
wavenc does not allow to change the caps during playback
and always returning the template caps is just wrong.
2011-05-14 11:52:12 +02:00
Sebastian Dröge
f8ed8dd613 wavenc: Allow setcaps to be called after a format was negotiated if it's compatible
Otherwise wavenc will fail if upstream decides to set equivalent caps or caps
with additional information later.

Thanks to Alexander Schremmer for finding this bug.
2011-05-14 11:52:12 +02:00
Edward Hervey
cca48a42c6 qtmux: Fix signed floating point values writing
You would end up on some architectures with 0 being written out
instead of the proper value.

https://bugzilla.gnome.org/show_bug.cgi?id=649449
2011-05-05 15:10:09 +02:00
Mark Nauwelaerts
fc94b78fe1 matroskamux: avoid building index when streamable
... as it will not be written anyway.

Fixes #648937 (?).
2011-05-04 13:12:16 +02:00
Tom Janiszewski
b9c2f8b38f flvmux: don't overwrite metadata tag with duration in streaming mode
A duration tag gets inserted only for streamable=false, so only
update/write the duration later if we actually inserted that tag,
otherwise we write garbage into other tags.

https://bugzilla.gnome.org/show_bug.cgi?id=649060
2011-05-01 14:13:50 +01:00
Tim-Philipp Müller
c25bf5dc34 quicktime: rename plugin to isomp4
https://bugzilla.gnome.org/show_bug.cgi?id=648004
2011-04-30 17:58:02 +01:00
Wim Taymans
31ffc671f2 rtpgstpay: fix buffer leak 2011-04-26 16:04:07 +01:00
David Schleef
bddac50961 avimux,matroskamux: Add stream-format to h264 caps
Fixes #606662.
2011-04-24 18:56:02 -07:00
Tim-Philipp Müller
234fd201c9 quicktime: rename plugin filename from *qtdemux* to *quicktime*
https://bugzilla.gnome.org/show_bug.cgi?id=648004
2011-04-24 14:14:27 +01:00
Tim-Philipp Müller
3346a53374 docs: add various qtmux variants to documentation 2011-04-21 23:30:26 +01:00
Tim-Philipp Müller
0671b2325e quicktime: register 3gppmux element in addition to the misnamed gppmux 2011-04-21 22:51:52 +01:00
Olivier Crête
42531337f5 rtpsession: Remove incomplete support for RTCP FIR
Remove bits that were meant to suppport RTCP FIR

https://bugzilla.gnome.org/show_bug.cgi?id=648160
2011-04-20 07:50:43 +01:00
Tim-Philipp Müller
bb23575f6b flvdemux: fix deadlock on setting index on flvdemux 2011-04-19 14:34:48 +01:00
Tim-Philipp Müller
75d5c41f29 avidemux: fix 'variable may be used uninitialized' warnings caused by -DG_DISABLE_ASSERT 2011-04-17 01:29:01 +01:00
Tim-Philipp Müller
9be707d54d gst: update disted orc backup code 2011-04-16 18:49:27 +01:00
Tim-Philipp Müller
cf953fe923 qtmux: refuse incomplete legacy h264 caps
Refuse h264 caps without stream-format and codec_data fields for
now, to avoid creating broken files. This might cause some pipelines
that worked previously to fail. However, the move from -bad to -good
is our only chance to fix this up, so make it strict for now. We can
always change it back to be less strict in future.

https://bugzilla.gnome.org/show_bug.cgi?id=647919
2011-04-16 18:17:01 +01:00
Tim-Philipp Müller
f325935314 pulse, speexenc, rtpgsmpay: don't use g_assert() for error handling
Don't use g_assert() for error handling, even if they're highly unlikely.
Either we *know* that something can't happen, in which case we
should just not handle it, or we think something can happen, but it is
very very unlikely that it will ever happen, in which case we should
handle it like any other error instead of asserting.

g_assert() is best left for conditions we have control of, like checking
internal consistency of our code, not checking return values of external
code.

Fixes a bunch of warnings when compiling with -DG_DISABLE_ASSERT:
gstrtpgsmpay.c: In function 'gst_rtp_gsm_pay_handle_buffer':
gstrtpgsmpay.c:130:17: warning: variable 'rtpgsmpay' set but not used
gstspeexenc.c: In function 'gst_speex_enc_encode':
gstspeexenc.c:904:19: warning: variable 'written' set but not used
pulsesink.c: In function 'gst_pulsesink_change_state':
pulsesink.c:2725:9: warning: variable 'res' set but not used
pulsesrc.c: In function 'gst_pulsesrc_change_state':
pulsesrc.c:1253:7: warning: variable 'e' set but not used
2011-04-16 18:15:43 +01:00