Commit graph

5191 commits

Author SHA1 Message Date
Debarshi Ray
51c7e6d252 matroska: move GstMatroska{Demux,Parse}::state to GstMatroskaReadCommon
https://bugzilla.gnome.org/show_bug.cgi?id=650877
2011-05-24 09:52:50 +02:00
Jonas Larsson
090e3a6f41 qtdemux: Fix buffer leak with corrupted files
Fixes bug #650912.
2011-05-24 09:48:56 +02:00
Miguel Angel Cabrera Moya
16d71c7d96 deinterlace: fix parameter type in trace
https://bugzilla.gnome.org/show_bug.cgi?id=650937
2011-05-24 09:45:31 +02:00
Debarshi Ray
15ce1142ca matroska: refactor code common to matroskademux and matroskaparse
Replace the following functions with their gst_matroska_read_common_*
counterparts:
    - gst_matroska_{demux,parse}_parse_index
    - gst_matroska_{demux,parse}_parse_skip
    - gst_matroska_{demux,parse}_stream_from_num

Introduce GstMatroskaReadCommon to contain those members of
GstMatroskaDemux and GstMatroskaParse that were used by the above
functions.

https://bugzilla.gnome.org/show_bug.cgi?id=650877
2011-05-23 17:21:52 +02:00
Tim-Philipp Müller
a53540346a flacparse: tell baseparse the duration in samples for better accuracy
Tell GstBaseParse the duration in samples instead of time, so that
a duration query in DEFAULT format will return the correct number
of samples without rounding errors. Baseparse will convert this
into time itself when needed.

https://bugzilla.gnome.org/show_bug.cgi?id=650785
2011-05-23 13:50:46 +01:00
Tim-Philipp Müller
1183d0c1ab flacparse: make conversion from TIME to DEFAULT format (samples) work
Fix copy'n'paste error in the previous commit.
2011-05-23 13:23:21 +01:00
Sebastian Dröge
8823ae251a flacparse: Implement conversions between TIME and DEFAULT format
Fixes bug #650785.
2011-05-23 11:43:02 +02:00
Tim-Philipp Müller
e0cadab5c2 flacparse: don't error out on invalid minimum_blocksize value in streaminfo header
We don't use it, so may just as well accept an invalid value
of 0 here, which is likely inconsequential anyway.

https://bugzilla.gnome.org/show_bug.cgi?id=650691
2011-05-22 18:54:18 +01:00
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
Tim-Philipp Müller
c2bc6327cd deinterlace, matroska: fix two variable-may-be-used-uninitialized compiler warnings
We use -DG_DISABLE_ASSERT for the pre-releases, which makes these
warnings pop up in cases that were previously covered by g_assert_not_reached()
and the like:
tvtime/greedyh.c:801:14: warning: 'scanline' may be used uninitialized in this function
matroska-mux.c:501:19: warning: 'context' may be used uninitialized in this function
2011-04-16 16:51:32 +01:00
Robert Swain
b5c8c7708b y4mencode: shapewipe: Address unused but set variables
GCC 4.6.x complains about such usage.
2011-04-16 13:12:50 +01:00
Robert Swain
e757793b21 videomixer: Fix argb/rgba overlay orc code
Remove some redundant operations (convubw) and use the correct variable,
t2, in the orc_overlay_bgra function.
2011-04-16 13:00:49 +01:00
Robert Swain
fd6ac6aa8a videomixer: address unused but set variables
GCC 4.6.x spits warnings about variables that are set but unused. Such
variables have been removed in blend, collectpads2 and videomixer2.
2011-04-16 12:52:49 +01:00
Robert Swain
5b18c652fb rtp, rtpmanager: Address unused but set variables
GCC 4.6.x spits warnings about variables that are unused but set. Such
variables have been removed where trivial but with comments left behind
for informational purposes in some cases.

gst_rtp_session_chain_recv_rtcp () was changed in commit 490113d4
to always return GST_FLOW_OK instead of the return value of
rtp_session_process_rtcp (), so we'll keep it that way.
2011-04-16 12:49:16 +01:00
Robert Swain
1c6e8682ec quicktime: Remove unused but set variables
GCC 4.6.x spits warnings about such variable usage. Note that some
calculations are left as comments for informative purposes.
2011-04-16 12:46:12 +01:00
Robert Swain
d596c2e926 matroska: Remove unused but set variables
GCC 4.6.x spits warnings about such variable usage.
2011-04-16 12:40:53 +01:00
Robert Swain
101087a23a imagefreeze: Remove unused but set duration variable
GCC 4.6.x spits warnings about such variable usage.
2011-04-16 12:40:40 +01:00
Robert Swain
383e99c224 flxdemux: Remove unused but set keyframe variables
The FIXMEs about the keyframe flag never being used are left for later
fixing, at which point the keyframe variables could be added back.
2011-04-16 12:40:30 +01:00
Robert Swain
358fa0bc7a edgetv: Remove unused but set height variable
GCC 4.6.x spits warnings about such variables.
2011-04-16 12:40:17 +01:00
Tim-Philipp Müller
a0205ecd51 flacparse: update for gst_base_parse_frame_init() API change 2011-04-15 18:51:20 +01:00
Olivier Crête
9d9257916b rtpsession: Use existing functions to parse RTCP FB packets
Use existing functions to get the FCI from FB packets.

https://bugzilla.gnome.org/show_bug.cgi?id=622553
2011-04-15 12:48:04 +01:00
Olivier Crête
5ccd964d86 rtpsession: marshal GstBuffer as a MiniObject instead of a pointer
https://bugzilla.gnome.org/show_bug.cgi?id=622553
2011-04-15 12:47:40 +01:00
David Schleef
41f3b30010 matroskademux: Better calculation of framerate
https://bugzilla.gnome.org/show_bug.cgi?id=647833
2011-04-15 12:27:57 +01:00
Tim-Philipp Müller
c8b5014892 qtmux: default to dts-method=reorder and presentation-time=true
https://bugzilla.gnome.org/show_bug.cgi?id=636699
2011-04-15 12:19:34 +01:00
Mark Nauwelaerts
4df05e76ed qtmux: fix corner case buffer handling for reorder method 2011-04-15 12:49:02 +02:00
Sebastian Dröge
283b30e312 flvdemux: Don't leak the SEEKING query 2011-04-14 13:47:05 +02:00
Sebastian Dröge
bf046e0430 qtmoovrecover: Don't leak the static recursive mutex 2011-04-14 13:43:06 +02:00
Sebastian Dröge
54349be39f matroskaparse: Allow webm and matroska caps and don't leak caps 2011-04-14 13:27:27 +02:00
Tim-Philipp Müller
eb15dcb473 capsdebug: fix unused-but-set-variable warnings with gcc 4.6 2011-04-13 17:22:19 +01:00
Tim-Philipp Müller
b6b59ab1c1 avidemux: fix unused-but-set-variable warning with gcc 4.6
Most likely a leftover from when the index parsing code was rewritten.
2011-04-13 17:22:19 +01:00
Tim-Philipp Müller
063b3d9dcd ac3parse: fix unused-but-set-variable warning with gcc 4.6 2011-04-13 17:22:19 +01:00
Tim-Philipp Müller
c8a15a097a videobalance: fix handling of YUV images with 'odd' widths
Fixes unused-but-set-variable warnings with gcc 4.6.
2011-04-13 17:22:19 +01:00
Tim-Philipp Müller
d1d3e3ea02 videoflip: fix unused-but-set-variable warnings with gcc 4.6 2011-04-13 17:22:19 +01:00
Sebastian Dröge
6f480ad0ed audiowsinc{band,limit}: Fix check for divison by zero 2011-04-13 18:11:34 +02:00
Sebastian Dröge
de7a976531 audiowsincband: Fix range of kernel elements (lim -> lim-1) 2011-04-13 18:01:01 +02:00
Sebastian Dröge
4fd5fea2b2 audiowsinclimit: Add some more braces to make the code more readable 2011-04-13 18:00:44 +02:00
Jordi Burguet-Castell
766e437af1 audiowsinclimit: Fix range of kernel elements (lim -> lim-1) in high/low-pass filters 2011-04-13 17:57:06 +02:00
Sebastian Dröge
2575cfc4a6 audiowsincband: Add new windowing functions: gaussian, cos and hann 2011-04-13 17:52:30 +02:00
Jordi Burguet-Castell
782d6af83d audiowsinclimimt: Add new windows to high/low-pass filters: gaussian, cosine, hann 2011-04-13 17:52:30 +02:00
Tim-Philipp Müller
d3a24dc842 matroskademux: set stream-format=byte-stream on h264 caps if there's no codec data
https://bugzilla.gnome.org/show_bug.cgi?id=606662
2011-04-13 16:47:05 +01:00
Thiago Santos
c385a46438 qtmux: restrict h264 some more to only accept AU-aligned AVC
https://bugzilla.gnome.org/show_bug.cgi?id=606662
2011-04-13 16:38:33 +01:00
Sebastian Dröge
4250ff5994 mpegaudioparse: The VBRI header is always at offset 0x20, independent of MPEG version
Also clean up advancing of the data pointer a bit.

Fixes bug #647659.
2011-04-13 17:12:47 +02:00
Tim-Philipp Müller
025417f124 qtmux: add variant-less video/quicktime to source pad template caps
This is needed for automatic transcoding using encodebin. Our typefinder
does not always add a variant to the found caps, and encodebin needs
an *exact* match to the caps on the source pad template, so we need
to add the variant-less video/quicktime caps to the template as well
for encodebin to be able to find it. Add unit test for this as well.

https://bugzilla.gnome.org/show_bug.cgi?id=642879
2011-04-13 15:21:59 +01:00
Tim-Philipp Müller
4d780297d8 quicktime: move qtmux plugin from -bad to -good
https://bugzilla.gnome.org/show_bug.cgi?id=636699
2011-04-13 11:55:59 +01:00
Mark Nauwelaerts
6630f7def2 qtmux: more helpful debug error message when no needed duration on input buffers
Fixes #646256.
2011-04-12 20:32:21 +01:00
Thiago Santos
aba8000188 qtmux: Adding GstTagXmpWriter interface
Adds GstTagXmpWriter interface support to qtmux
2011-04-12 20:32:21 +01:00
Mark Nauwelaerts
d178329eb0 qtmux: use running time for synchronization
See also #432612.
2011-04-12 20:32:21 +01:00
Mark Nauwelaerts
a4fad64141 qtmux: provide for PTS metadata when so configured
... and not only when sort-of feeling like it.
In any case, if it turns out all really is in order,
and presumably DTS == PTS, then no ctts will be produced anyway.
2011-04-12 20:32:21 +01:00
Mark Nauwelaerts
31c26a4551 qtmux: also track original PTS buffer timestamp in reorder dts-method 2011-04-12 20:32:21 +01:00
Edward Hervey
0a884e5620 Revert "Check that collectpads exists before removing pad"
This reverts commit 6d8740476c.

Depends on a core commit that was reverted
2011-04-12 20:32:21 +01:00
David Schleef
fe3a5c3f08 Check that collectpads exists before removing pad
The core now calls release pad from finalize, at which point
the collectpads might have already been freed.
2011-04-12 20:32:21 +01:00
Mark Nauwelaerts
20e4bdee32 qtmux: set src pads when starting file
... rather than at _init time, so they are also available following a
pad (de)activation cycle.

https://bugzilla.gnome.org/show_bug.cgi?id=639338
2011-04-12 20:32:20 +01:00
Mark Nauwelaerts
ae644937fc qtmux: adjust nasty case timestamp tracking
That is, all sorts of problems arise with re-ordered input timestamps that
tend to defy automagic handling for every case, so allow for a few variations
that can be tried depending on circumstances.

Also try to document accordingly.

Also fixes #638288.
2011-04-12 20:32:20 +01:00
Felipe Contreras
62c728464e qtmux: get rid of timestamp overprotectiveness
Signed-off-by: Felipe Contreras <felipe.contreras@nokia.com>
2011-04-12 20:32:20 +01:00
Mark Nauwelaerts
b6945d4afe qtmux: simplify and fix pts_offset storing
In particular, only write a ctts atom if and only if ever a non-zero offset.
2011-04-12 20:32:20 +01:00
Mark Nauwelaerts
b852dde2db qtmux: add some more documentation 2011-04-12 20:32:20 +01:00
Mark Nauwelaerts
60c8ed21d5 qtmux: remove large-file property
Rather, auto-determine if 64-bits fields are needed for a valid result, and
stick to plain 32-bits if not needed.

API: GstQTMux:large-file (removed)
2011-04-12 20:32:20 +01:00
Sebastian Dröge
d8a690e64c qtmux: Free AtomInfo structs 2011-04-12 20:32:20 +01:00
Sebastian Dröge
6e350ec961 qtmux: Free tag string after use 2011-04-12 20:32:20 +01:00
Lasse Laukkanen
02bdefd9ba qtmux: allow zero duration tracks 2011-04-12 20:32:20 +01:00
Mark Nauwelaerts
07be810e0e qtmux: add documentation 2011-04-12 20:32:20 +01:00
David Hoyt
62484ac805 qtmux: handle msvc ftruncate incompatibility
Fixes #636185.
2011-04-12 20:32:20 +01:00
Alejandro Gonzalez
04b0a37f87 qtmux: gst_qtmux_check_difference verify before subtract
Avoid negative overflow by checking the order of operands
on subtraction of unsigned integers.

https://bugzilla.gnome.org/show_bug.cgi?id=635878
2011-04-12 20:32:20 +01:00
Mark Nauwelaerts
9c198ffeed qtmux: remove remnant of obsolete property 2011-04-12 20:32:20 +01:00
Marc-André Lureau
bee00aa70f qtmux: allow specifying trak timescale
This is mainly because Smoothstreaming client are broken and don't
take the TimeScale property into account.
2011-04-12 20:32:19 +01:00
Mark Nauwelaerts
92b8a00ac8 qtmux: include sdtp atoms for ismv fragmented files
Based on patch by Marc-André Lureau <mlureau@flumotion.com>
2011-04-12 20:32:19 +01:00
Mark Nauwelaerts
f490e3a868 qtmux: enable default fragmented file for ismlmux 2011-04-12 20:32:19 +01:00
Marc-André Lureau
7a447b4372 qtmux: add ismlmux, for fragmented isml major brand 2011-04-12 20:32:19 +01:00
Mark Nauwelaerts
50464d5f93 qtmux: finalize sinkpads list 2011-04-12 20:32:19 +01:00
Marc-André Lureau
bd0d320d6c qtmux: add moov in streamheader 2011-04-12 20:32:19 +01:00
Marc-André Lureau
61964eb109 qtmux: add streamable property to avoid building fragmented mfra index 2011-04-12 20:32:19 +01:00
Mark Nauwelaerts
26a281bdab qtmux: add mfra to fragmented file
Based on patch by Marc-André Lureau <mlureau@flumotion.com>
2011-04-12 20:32:19 +01:00
Mark Nauwelaerts
4b64dc2f3e qtmux: optionally create fragmented file
In this mode, an initial empty moov (containing only stream metadata) is written,
followed by fragments containing actual data (along with required metadata).
New fragments are started either at keyframe (if such are sparse) or when
property configured duration exceeded.

Based on patch by Marc-André Lureau <mlureau@flumotion.com>

Fixes #632911.
2011-04-12 20:32:19 +01:00
Mark Nauwelaerts
c61dc2ec4a qtmux: use helper to set atom flags from given uint 2011-04-12 20:32:19 +01:00
Mark Nauwelaerts
69d07466e0 qtmux: refactor configuring and sending of moov
Based on patch by Marc-André Lureau <mlureau@flumotion.com>
2011-04-12 20:32:19 +01:00
Mark Nauwelaerts
35e028f33b qtmux: refactor extra top-level atom handling
Also check a bit more for possible errors, and free proper items in such case.
2011-04-12 20:32:19 +01:00
Mark Nauwelaerts
79f565f962 qtmux: refactor slightly using buffer helper 2011-04-12 20:32:19 +01:00
Mark Nauwelaerts
1e3da91bd1 qtmux: fix misinforming comment 2011-04-12 20:32:19 +01:00
Mark Nauwelaerts
ce865cc374 qtmux: delegate mvex handling to atoms
... which keeps qtmux simpler.
2011-04-12 20:32:19 +01:00
Marc-André Lureau
2618cb03af qtmux: add mvex/trex in header if fragmented
One "trex" is added per "trak". We don't support default values,
but the "trex" box is mandatory.
2011-04-12 20:32:18 +01:00
Marc-André Lureau
9100168eae qtmux: add a couple of fourcc for fragmented mp4 2011-04-12 20:32:18 +01:00
Mark Nauwelaerts
c35074499a qtmux: avoid removing temp file when error occurred 2011-04-12 20:32:18 +01:00
Marc-André Lureau
c2718fdd5f qtmux: truncate buffer file after each send 2011-04-12 20:32:18 +01:00
Marc-André Lureau
3e6a415e52 qtmux: remove temp file when reset/finalize 2011-04-12 20:32:18 +01:00
Stefan Kost
1d1ffe234f various (gst): add missing G_PARAM_STATIC_STRINGS flags
Canonicalize property names as needed.
2011-04-12 20:32:18 +01:00
Mark Nauwelaerts
a5edbe38a0 qtmux: prevent infinite loop when adjusting framerate
Fixes #632070.
2011-04-12 20:32:18 +01:00
Thiago Santos
5ccc066c98 qtmux: Add G_PARAM_STATIC_STRINGS
Add G_PARAM_STATIC_STRINGS to qtmux properties
2011-04-12 20:32:18 +01:00
Thiago Santos
7065a65ec8 qtmux: Follow xmp serialization guidelines closer
qt and isom variants have different ways of serializing
xmp, follow these guidelines.

Those can be found in Adobe's xmp docs.
2011-04-12 20:32:18 +01:00
Mark Nauwelaerts
365b419216 qtmux: autodetect out-of-order input timestamps and determine DTS accordingly
Favour using input buffer timestamps for DTS, but fallback to using buffer
duration (accumulation) if input ts detected out-of-order.

Fixes #624212.
2011-04-12 20:32:18 +01:00
Marc-André Lureau
9e79307431 qtmux: use caps bitrate at last chance
If we didn't get the stream's bitrate from one of the atoms,
try getting it from the caps as a last resort.

https://bugzilla.gnome.org/show_bug.cgi?id=625496
2011-04-12 20:32:18 +01:00
Marc-André Lureau
da6bfa460d qtmux: btrt - max bitrate before average
According to iso base media file format, the max bitrate
is before the avg

https://bugzilla.gnome.org/show_bug.cgi?id=625496
2011-04-12 20:32:18 +01:00
Arun Raghavan
9e5c575b49 qtmux: Write 'btrt' atom for H.264 media if possible
This writes out the optional 'btrt' atom (MPEG4BitrateBox) for H.264
media if either or both of average and maximum bitrate are available for
the stream.

https://bugzilla.gnome.org/show_bug.cgi?id=623678
2011-04-12 20:32:18 +01:00
Arun Raghavan
4b4398c9dd qtmux: Write avg/max bitrate to ESDS if available
This collects the 'bitrate' and 'maximum-bitrate' tags on the
corresponding pad and uses these to populate these fields in the ESDS
where applicable.

https://bugzilla.gnome.org/show_bug.cgi?id=623678
2011-04-12 20:32:18 +01:00
Edward Hervey
099ad6380f qtmux: Don't use bogus codec/format tags
https://bugzilla.gnome.org/show_bug.cgi?id=623365
2011-04-12 20:32:17 +01:00
Thiago Santos
ac7f4cba67 qtmux: Write uint tags that don't have a complement
Write uint tags that have complements (e.g. track-number/
track-count) even when we only have one of them available
and set the other one to 0.

Fixes #622484
2011-04-12 20:32:17 +01:00
Edward Hervey
0fa380b199 qtmux: Remove the pad from our internal list before calling collectpads
Previously we would end up with the collectpaddata structure already freed.
This would result in a bogus iteration of mux->sinkpads (all the
GstQTPad being freed) and it wouldn't be removed from that list.

Finally, due to it not being removed from that list, we would end up
calling a bogus gst_qt_mux_pad_reset on those structures => SEGFAULT
2011-04-12 20:32:17 +01:00
David Schleef
4bb9ffa8fb qtmux: Add VP8 2011-04-12 20:32:17 +01:00
Tim-Philipp Müller
48880abb5b qtmux: use GStreamer package name and origin in the plugin info 2011-04-12 20:32:17 +01:00
Tim-Philipp Müller
1663c51243 qtmux: init debug category before using it 2011-04-12 20:32:17 +01:00
Benjamin Otte
6f27e4e488 Add -Wold-style-definition
and fix the warnings
2011-04-12 20:32:17 +01:00
Benjamin Otte
c4161b3c33 Add -Wwrite-strings
and fix its warnings
2011-04-12 20:32:17 +01:00
Benjamin Otte
62be91708f Add -Wmissing-declarations -Wmissing-prototypes to configure flags
And fix all warnings
2011-04-12 20:32:17 +01:00
Benjamin Otte
af347a9545 gst_element_class_set_details => gst_element_class_set_details_simple 2011-04-12 20:32:17 +01:00
Thiago Santos
281ef57d2b qtmux: Use xmp on mp4mux and gppmux too
Do not restrict xmp to qtmux, but use it too
on mp4mux and gppmux
2011-04-12 20:32:17 +01:00
Thiago Santos
a740adc137 qtmux: add xmp support
Adds xmp metatags adding to qtmux.

Fixes #609539
2011-04-12 20:32:16 +01:00
Tim-Philipp Müller
f9bba010fa qtmux: fix GST_ELEMENT_ERROR usage
We need to pass (NULL) rather than NULL for empty arguments.
2011-04-12 20:32:16 +01:00
Rob Clark
ae0d32843e qtmux: fix compile error
gst/quicktime/gstqtmoovrecover.c:268: warning: format not a string literal and no format arguments

https://bugzilla.gnome.org/show_bug.cgi?id=612454
2011-04-12 20:32:16 +01:00
Thiago Santos
8d86f34871 qtmux: Rename 'avc-sample' to 'avc' in caps
Fixes #606662
2011-04-12 20:32:16 +01:00
Michael Smith
8b3aca9070 qtmux: Take lock around use of (non-threadsafe) tagsetter interface. 2011-04-12 20:32:16 +01:00
Thiago Santos
953aa983bb qtmux: write all udta children atoms
UDTA might have META and other children atoms
together, write them all.
2011-04-12 20:32:16 +01:00
Thiago Santos
c92785e1c2 qtmux: Use internal sink pads list
Due to GstCollectPads sink pads list being not reliably
iteratable (when not inside the collected function) this
patch adds a sink pads list to qtmux to be used when iterating
sink pads on reset function.

Fixes #609055
2011-04-12 20:32:16 +01:00
Mark Nauwelaerts
589f70955c qtmux: prevent leaking hdlr name 2011-04-12 20:32:16 +01:00
Mark Nauwelaerts
bcc9fe0463 qtmux: support for ALAC
Fixes #580731.
2011-04-12 20:32:16 +01:00
Mark Nauwelaerts
76b6997b55 qtmux: refactor building stsd entry 'wave' extension 2011-04-12 20:32:16 +01:00
Thiago Santos
528846c5a1 qtmux: atomsrecovery: Fix compilation problem
Fixes a compilation error due to unused function result.
2011-04-12 20:32:16 +01:00
Thiago Santos
b692f9ffb0 qtmux: Adds moov recovery feature
Adds a new property to qtmux that sets a path to a file to write
and update data about the moov atom (that is not writen till the
end of the file). If the pipeline/app crashes during execution it
might be possible to recover the movie using the qtmoovrecover element.

qtmoovrecover is an element that is also a pipeline. It is not
meant to be used with other elements (it has no pads). It is merely
a tool/utilitary to recover unfinished qtmux files.

Fixes #601576
2011-04-12 20:32:16 +01:00
Michael Smith
3c0e4d8267 qtmux: for fixed-sample size streams (PCM audio, etc) don't allocate an enormous
buffer that we then won't use at all.
2011-04-12 20:32:15 +01:00
Michael Smith
d784a8da6a qtmux: handle muxing adpcm correctly. 2011-04-12 20:32:15 +01:00
Michael Smith
5f1941a000 qtmux: Set the mdia hdlr name field to what quicktime uses. Fix writing it
since it's not null-terminated. Improves compatibility with some hardware
players.
2011-04-12 20:32:15 +01:00
Michael Smith
2d3dc1653b qtmux: endianness in gstreamer is an int, not boolean. 2011-04-12 20:32:15 +01:00
Mark Nauwelaerts
150f9ad64d qtmux: streamline moov data memory storage
In particular, use arrays rather than (double) linked lists.
2011-04-12 20:32:15 +01:00
Thiago Santos
6dc515bfa7 qtmux: g_free is NULL safe 2011-04-12 20:32:15 +01:00
Benjamin Otte
6569e9587c [cleanup] Various style and cleanups
Various fixes for gtk-doc warnings and making functions without
arguments take void as parameter.
2011-04-12 20:32:15 +01:00
Thiago Santos
33bf180eaa qtmux: Actually use new caps info on renegotiation
Following the previous qtmux commit, this patch tries
to use the new info added to the caps to fill the 'trak'
atom's fields and children atoms. This way qtmux will
use the late added 'codec_data' when h264parse adds
it in the following pipeline:

videotestsrc num-buffers=200 ! x264enc byte-stream=true ! \
h264parse output-format=0 ! qtmux ! \
filesink location=test.mov
2011-04-12 20:32:15 +01:00
Thiago Santos
a5f22f03aa qtmux: Do caps renegotiation when it only adds fields
Qtmux can accept caps renegotiation if the new caps is a
superset of the old one, meaning upstream added new info to
the caps. This patch still doesn't make qtmux update any
atoms info from the new info, but at least it doesn't
reject the new caps anymore.

A pipeline that reproduces this use case is:

videotestsrc num-buffers=200 ! x264enc byte-stream=true ! \
h264parse output-format=0 ! qtmux ! \
filesink location=test.mov
2011-04-12 20:32:15 +01:00
Mark Nauwelaerts
6beda8aae0 qtmux: provide request pads under wider conditions
Fixes #606859.
2011-04-12 20:32:15 +01:00
Thiago Santos
45458c44a4 qtmux: Only accept avc-sample h264
qtmux and mp4mux should only accept h264 in avc-sample
format
2011-04-12 20:32:15 +01:00
Thiago Santos
87450c1b6e Rename aac's stream-format 'none' to 'raw'
Renames aac's stream-format from previous commits from none to
raw
2011-04-12 20:32:15 +01:00
Thiago Santos
cbc0b053ee qtmux: Only accept stream-format='none' aac
Only accept raw aac streams (stream-format=none) to avoid
generating invalid files.

Fixes #604925
2011-04-12 20:32:15 +01:00
Stefan Kost
02d1035571 qtmux: also add .h file changes to unbreak the build 2011-04-12 20:32:14 +01:00
Stefan Kost
05257feb87 qtmux: use correct names from template for request pads
The pads where names pad0, pad1, ...
2011-04-12 20:32:14 +01:00
Stefan Kost
7d9ed16bbe qtmux: move errors _new_pad to the end 2011-04-12 20:32:14 +01:00
Thiago Santos
592171b9b5 qtmux: Accept non-paired uint tags
Adds support for unpaired unsigned interger tags
2011-04-12 20:32:14 +01:00
Thiago Santos
9a6514e4a7 qtmux: Adds new tags
Maps more tags that are already posted by qtdemux

Fixes #599759
2011-04-12 20:32:14 +01:00
Thiago Santos
c5f6e74db9 qtmux: support more of j2k
Reads the new caps added to qtdemux by commit
c917d65e6d
and adds its corresponding atoms.

Also adds support for image/x-jpc as it is the same
as image/x-jp2, except that the buffers need to be
boxed inside a jp2c isom box before muxing. To solve
this the QTPads now have a function that (if
not NULL) is called when a buffer is collected. This
function returns a replacement to the current collected
buffer.

Fixes #598916
2011-04-12 20:32:14 +01:00
Thiago Santos
083f825c43 qtmux: Maps 'classification' tag for 3gpp files
Adds the mapping of 'classification' tags to writing of
'clsf' atoms for gppmux.

Based on a patch by: Lasse Laukkanen <ext-lasse.2.laukkanen@nokia.com>
2011-04-12 20:32:14 +01:00
Michael Smith
a597bd7273 qtmux: remove c++ comments and add some more comments. 2011-04-12 20:32:14 +01:00
Michael Smith
d74567ca94 qtmux: add ima adpcm support 2011-04-12 20:32:14 +01:00
Thiago Santos
79a9031c16 qtmux: replace _scale with _scale_round
Use the rounding version for improved sync between streams.
Small variations in the duration when muxing might lead to
cumullative wrong timestamping when demuxing.

Fixes #602936
2011-04-12 20:32:14 +01:00
Thiago Santos
259c204f42 qtmux: use timestamps for muxing
Try to use timestamps even when the stream has out of order
timestamps, only fall back to durations when we detect an
out of order buffer. Improves sync between streams.
2011-04-12 20:32:14 +01:00
Thiago Santos
e62be695a1 qtmux: fix missing debug argument
Adds a missing debug argument
2011-04-12 20:32:14 +01:00
Mark Nauwelaerts
7bf67a6e3d qtmux: fix misinforming debug statement 2011-04-12 20:32:13 +01:00
Mark Nauwelaerts
a64873e15a qtmux: ensure writable buffer metadata before setting caps 2011-04-12 20:32:13 +01:00
Thiago Santos
496bd01a0f qtmux: support for SVQ3
Adds support for muxing SVQ3 content. Usually this format
has decoder info that must be passed in the 'seqh' field
in the caps. It is also good to add the gama atom to make
quicktime not crash.

Fixes #587922
2011-04-12 20:32:13 +01:00
Thiago Sousa Santos
d24d1e40ea qtmux: do not leak a string
Frees a string after use. Also does some code organization
2011-04-12 20:32:13 +01:00
Thiago Sousa Santos
2f90d33509 qtmux: do not add size to the pointer variable
Do not wrongly add the result of the function to the
pointer to the buffer size. Instead, check the result
to see if the serialization was ok.

Based on a patch by: "Carsten Kroll <car@ximidi.com>"

Fixes #602106
2011-04-12 20:32:13 +01:00
Thiago Santos
8d80e93512 qtmux: handle 'late' streams
When muxing streams, some can start later than others. qtmux
now handle this by adding an empty edts entry with the
duration of the 'lateness' to the stream's trak.
It tolerates a stream to be up to 0.1s late.

Fixes #586848
2011-04-12 20:32:13 +01:00
Thiago Santos
22e4fb92a9 qtmux: adds the EDTS and ELTS atoms to atoms.c
These atoms will be useful for signaling streams
that start later in the file. As well for adding
edit lists if needed sometime later.
2011-04-12 20:32:13 +01:00
Thiago Santos
009d104a34 qtmux: Adding some ifs for protection
Adding somes ifs to protect against warning conditions
that might happen when upstream element is not sane

Fixes #600895
2011-04-12 20:32:13 +01:00
Thiago Santos
4ff2fad6a0 gppmux: Add support for 3gr6
Keep track of the chunk durations to be able to add 3gr6
brand if it is a faststart file and the longest chunk is
smaller than a sec. Implemented according to 3gpp
TS 26.244 v6.4.0 (2005-09)

Fixes #584361
2011-04-12 20:32:13 +01:00
Thiago Santos
e8c21f14cc qtmux: Only push ftyp later (in faststart mode)
In faststart mode, there is no need to send the ftyp
right at the beginning of the stream. Waiting and sending it
only later (when the moov atom is ready to be sent) provides
us with more information about the stream and we can better
select the compatible brands.
2011-04-12 20:32:13 +01:00