Commit graph

5787 commits

Author SHA1 Message Date
Thiago Santos
e909e6a071 gdppay: push the stream-start event
instead of just swallowing upstream's stream-start into its
payload, push it as elements expect a stream-start before data
2014-01-30 18:18:18 -03:00
Sebastian Dröge
9682e44db6 tsdemux: We do not support the SKIP seek flag but that is not a problem 2014-01-30 20:29:58 +01:00
Amaury Medeiros
44a87d2109 tsdemux: Fix flags comparison operator precedence
Fix operator precedence, so the whole operation is
negated instead of only flags variable.

https://bugzilla.gnome.org/show_bug.cgi?id=722096
2014-01-28 13:56:44 +01:00
Sjoerd Simons
f6da7ea8bb mxfdemux: Don't go into pull mode when the sequential flag is set
When the scheduling query results has GST_SCHEDULING_FLAG_SEQUENTIAL set
in its flags don't go into pull mode to prevent over-eager seeking.

https://bugzilla.gnome.org/show_bug.cgi?id=722934
2014-01-24 22:14:47 +01:00
Aurélien Zanelli
af78b45979 h264parse: Fix multiple SEI messages in one SEI RBSP parsing.
An SEI RBSP could contains more than one SEI message as specified in
7.4.2.3.1.

This commit change the parser API: the gst_h264_parser_parse_sei()
function now create and fill a GArray containing GstH264SEIMessage.

https://bugzilla.gnome.org/show_bug.cgi?id=721715
2014-01-23 20:18:53 +01:00
Justin Joy
99c2aa14c3 mpegtsmux: don't leak pad name when treating events
https://bugzilla.gnome.org/show_bug.cgi?id=722699
2014-01-22 10:07:11 +01:00
Wim Taymans
0bb2e2f74f mpegpsmux: update last_ts to mux correctly
We use last_ts to decide what buffer to mux next so make sure that it
always contains the last known valid timestamp.
2014-01-21 11:19:13 +01:00
Wim Taymans
e58a00b2a2 mpegpsmux: fix timestamp handling
If the first buffer that we handle for a stream has no timestamp, we
would never consider this pad again for muxing which causes queues to
fill up and pipelines to stall. Instead, try to mux pads with -1
timestamps as soon as possible.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=722330
2014-01-20 16:25:51 +01:00
Wim Taymans
4e10667aad mpegpsmux: return GST_FLOW_EOS when we pushed EOS
Return GST_FLOW_EOS from the collected function when we pushed EOS or
else it simply keeps on calling our collected function.
2014-01-20 16:23:49 +01:00
duhui.lee
cd8c0227c8 h265parse: Update caps when receive VPS/SPS/PPS
https://bugzilla.gnome.org/show_bug.cgi?id=722240
2014-01-20 10:05:18 +01:00
Andrey Utkin
0caa4cdfd8 tsdemux: Fix leak of PCROffsetGroup
https://bugzilla.gnome.org/show_bug.cgi?id=722462
2014-01-17 23:08:49 -03:00
Sebastian Dröge
dfd23a3182 audiomixer: Remove some useless assignments and skip the current part of the buffer if the pad is muted 2014-01-16 12:19:57 +01:00
Jan Schmidt
d52b0f922b mpegdemux: Merge some changes from the resindvd copy
One bug fix, some debug changes and other inconsequential changes
just to reduce the diff between the 2 copies a bit.
2014-01-16 20:16:27 +11:00
Sebastian Dröge
aa3eb10cee audiomixer: Fix and simplify overlap calculation 2014-01-15 23:30:57 +01:00
Andrey Utkin
4d957e53e4 tsdemux: fix memleak of PCROffsetCurrent
https://bugzilla.gnome.org/show_bug.cgi?id=722145
2014-01-14 10:33:44 +01:00
Stefan Sauer
dc2778734b aiffparse: misc code cleanups
Fix the launch examples for 1.0. Turn more logging into _OBJECT variants.
2014-01-09 15:14:19 +01:00
Thiago Santos
4e283dbb62 mpeg4videoparse: do not lose DISCONT flag if buffer isn't pushed
mpeg4videoparse might not push buffers while parsing. If those buffers
contain the DISCONT flag, it gets lost and downstream won't get any
buffer with the flag.

Fix it by adding the DISCONT to the next pushed buffer.
This makes backwards playback work.
2014-01-08 16:50:38 -03:00
Sebastian Dröge
63fee31a3f h265parse: Allows hvc1 version 0 and fix reading of NAL count in codec_data 2014-01-06 14:52:54 +01:00
Sebastian Dröge
57c195eed8 h265parse: Fix some more debug output
And don't access invalid memory
2014-01-06 14:48:26 +01:00
Sebastian Dröge
84bd65b9bd tsdemux: Add HEVC / h265 support 2014-01-06 13:54:40 +01:00
Stefan Sauer
f12705b2f5 aiffparse: typo fix in comment 2014-01-05 23:45:34 +01:00
Jan Schmidt
14a56b6964 mpegtsmux: Don't disrupt buffer state in the clip function
Collectpads assumes that it can pass any buffer to the clip function
for adjustment, some of which are artificially injected - so don't
adjust global timestamp tracking there. Instead, only adjust the
buffer timestamps and use them directly in the collection function.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=698748
2013-12-31 23:23:18 +11:00
Edward Hervey
46cb19404d jpegparse: Remove unneeded call
'parse' is already provided by the parent variable
2013-12-30 13:28:52 +01:00
Sebastian Dröge
2d17cd62ef adpcmenc: Properly set output format
Otherwise this will just error out if we only set caps on the srcpad.
2013-12-23 15:33:42 +01:00
Sebastian Dröge
30c93d504c audiomixer: Also resync timestamps on the RESYNC flag 2013-12-19 21:59:09 +01:00
Todd Agulnick
ccd9a9cb89 vc1parse: Some compiler warning fixes to satisfy XCode compiler
https://bugzilla.gnome.org/show_bug.cgi?id=720513
2013-12-16 16:53:25 +01:00
Sebastian Dröge
a27d8d00a6 id3tag: Read image-description from the info structure, not the caps 2013-12-16 16:07:44 +01:00
Sebastian Dröge
2ce2017650 id3tag: Write image-type into the APIC tag 2013-12-16 11:51:00 +01:00
Sebastian Dröge
b3f198b67d vc1parse: Post VIDEO_CODEC tag 2013-12-16 10:25:22 +01:00
Sebastian Dröge
3faa8920ce pngparse: Post VIDEO_CODEC tag 2013-12-16 10:24:28 +01:00
Sebastian Dröge
6fbc101d19 mpegvideoparse: Use pbutils API to create the VIDEO_CODEC tag string 2013-12-16 10:22:24 +01:00
Sebastian Dröge
188b445fdd mpeg4videoparse: Post VIDEO_CODEC tag 2013-12-16 10:21:00 +01:00
Sebastian Dröge
843de8ddf4 h265parse: Post VIDEO_CODEC tag 2013-12-16 10:19:36 +01:00
Sebastian Dröge
6934c7e2fc h264parse: Post VIDEO_CODEC tag 2013-12-16 10:18:23 +01:00
Sebastian Dröge
bdfaf62a4a h263parse: Post VIDEO_CODEC tag 2013-12-16 10:16:14 +01:00
Sebastian Dröge
e65b9b974a diracparse: Post VIDEO_CODEC tag 2013-12-16 10:13:56 +01:00
Thiago Santos
821c3edca8 asfparse: add timestamps to packets
re-enable the code that adds timestamps to packets after baseparse's
port
2013-12-14 03:56:44 -03:00
Thiago Santos
04134671c9 asfparse: port to baseparse
asfparse was not really functional after the port to 1.0

Now porting it to baseparse to get it working again
2013-12-14 03:56:44 -03:00
Benjamin Gaignard
6cf1f629a3 dvbsuboverlay: fix reading of display window in display definition segment
From ETSI EN 300 743 V1.3.1 (2006-11) 7.2.1 Display definition segment specifictations
the parameters of display window are in this order: Xmin, Xmax, Ymin, Ymax.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>
Signed-off-by: Pierre-Yves Mordret <pierre-yves.mordret@st.com>

https://bugzilla.gnome.org/show_bug.cgi?id=720382
2013-12-13 23:51:12 +00:00
Olivier Crête
4a5a1e568e vmcndec: Add missing header file
Forgot to add header file to previou commit
2013-12-06 21:11:32 -05:00
Olivier Crête
60d3af6fbd vmncdec: Port to GStreamer 1.0 API 2013-12-06 20:58:48 -05:00
Olivier Crête
5733a04766 stereo: Port to GStreamer 1.0 API 2013-12-06 17:58:13 -05:00
Olivier Crête
06ed17674e jp2kdecimator: Port to GStreamer 1.0 API 2013-12-06 17:10:59 -05:00
Olivier Crête
0a970f1cd1 rtpasfpay: Use GstRTPBasePayload method to push buffer
This way the event is also pushed.

https://bugzilla.gnome.org/show_bug.cgi?id=719553
2013-12-05 16:51:00 -05:00
Sebastian Dröge
e83a9b62e7 adpcmdec: Require caps to be set before any data processing 2013-12-05 12:05:21 +01:00
Sebastian Dröge
08852721cb sirendec: Require caps to be set before any data processing 2013-12-05 12:05:09 +01:00
Wim Taymans
9ac2cee2db videoparsers: use ACCEPT_INTERSECT
We can also accept caps with missing fields.
2013-12-04 09:49:20 +01:00
Wim Taymans
e9dd2df3f4 videoparsers: remove fields from filter
Don't filter out the caps properties we can convert between when
proxying the getcaps query to the downstream peer pad.
2013-12-04 09:49:20 +01:00
Wim Taymans
d5a16bccac videoparsers: refactor remove_fields in getcaps 2013-12-04 09:49:20 +01:00
Sebastian Dröge
9945e2bee6 geometrictransform: G_DEFINE_TYPE() already calls g_type_class_peek_parent() for us 2013-12-02 10:28:28 +01:00
Sebastian Dröge
426c26f708 geometrictransform: Remove empty GObject::finalize() implementations
Also don't use GST_DEBUG_FUNCPTR for GObject vfuncs
2013-12-02 10:26:32 +01:00
Antonio Ospite
8de96a2fbb geometrictransform: Add a 2D perspective transform plugin
The perspective plugin applies a 2D perspective (also called projective)
transform to the frame buffer.

A perspective transform can be used for instance to perform keystone
correction when playing the content with a video projector.

https://bugzilla.gnome.org/show_bug.cgi?id=710810
2013-12-02 10:20:45 +01:00
Tim-Philipp Müller
c58dd9df73 asfmux: microoptimisation: avoid unnecessary gst_buffer_get_size() calls 2013-12-01 22:32:09 +00:00
Tim-Philipp Müller
a27b79cbe4 rtpasfpay: init rtp buffer fixing rtp packet creation
https://bugzilla.gnome.org/show_bug.cgi?id=719553
2013-11-29 13:23:40 +00:00
Tim-Philipp Müller
bc7989071f asfmux: don't use buffer after giving away ownership
https://bugzilla.gnome.org/show_bug.cgi?id=719553
2013-11-29 13:22:56 +00:00
Lubosz Sarnecki
ef9d363dfe pngparse: Don't try to set framerate if not from upstream
https://bugzilla.gnome.org/show_bug.cgi?id=715166
2013-11-28 17:54:35 -05:00
Sebastian Dröge
1b747bfecb h264parse: Fix splitting of multiple NALU per buffer
Conversion to byte-stream/nal crashes without that because the
baseparse frame of all NALUs is finished for the first NALU, then
used again for parsing the second NALU. Just that now the buffer
of the frame is already gone. Instead we create temporary frames
for every NALU.
2013-11-28 15:10:16 +01:00
Jan Schmidt
d92b6f7995 dvdspu: Don't unmap an unreffed buffer
gst_dvd_spu_finish_spu_buf drops the reference to the current
buffer, so make sure to call gst_buffer_unmap before it.
2013-11-25 15:17:33 +11:00
Mark Nauwelaerts
db915754c1 dvdspu: pop new packet when invalid next command block
... to prevent staying stuck on current command block and busy looping.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=712219
2013-11-23 14:35:06 +01:00
Mark Nauwelaerts
fac0f1f668 mpeg4videoparse: accept VideoObjectLayer as start of frame and config
... which it deserves as much as VideoObject.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=667564
2013-11-23 11:29:23 +01:00
Jan Schmidt
c336f7642c dvdspu: Handle vobsub packets smaller than 4 bytes
In particular, handle the case of an empty packet with size 0 bytes.

Partially fixes: #712643
2013-11-21 02:21:01 +11:00
Thibault Saunier
da4f9c18ec mpegtsmux: Fix compilation when debug is disabled 2013-11-14 09:02:35 -03:00
Thibault Saunier
07ba033943 pngparse: Proxy upstream framerate on srcpad if avalaible
If the user sets it himself with capsfilter, the information should be
kept and transmitted downstream.
2013-11-13 17:56:09 -03:00
Thibault Saunier
b148c22cec mpegtsmux: Properly add subtitle descriptor for DVb subpicture subtitles
We were adding an empty descriptor for them and it was not possible to
actually use them on muxed streams.
2013-11-13 17:56:07 -03:00
Mark Nauwelaerts
830a4aa7f4 mpegvideoparse: look beyond start code before leaping
In case more data than a start code alone is needed to decide whether
it ends a frame, arrange for more input data and decide when available.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=711627
2013-11-11 16:34:46 +01:00
Mark Nauwelaerts
a3d658915b mpegvideoparse: tweak extension handling 2013-11-11 13:36:02 +01:00
Mark Nauwelaerts
b57981d15b mpgegdemux: do not use pushed buffer in debug message 2013-11-11 13:36:02 +01:00
Matej Knopp
4930dc40cd mpegvideoparse: check for same TSN only for interlaced streams (fixes unit test)
https://bugzilla.gnome.org/show_bug.cgi?id=711721
2013-11-09 15:34:51 +01:00
Sebastian Dröge
ed295e83c2 Revert "mpegvparse: Fix last start code position when input buffer is empty"
This reverts commit 7c23a6f23c.

The fix was not complete, see discussion in
https://bugzilla.gnome.org/show_bug.cgi?id=711627
2013-11-09 09:43:56 +01:00
Greg Rutz
7c23a6f23c mpegvparse: Fix last start code position when input buffer is empty
When the input buffer is empty and we need more data to determine
whether or not to terminate the previous frame, the last start code
location needs to be set to 4 bytes before the the current position
(size of start_code is 32-bits)

https://bugzilla.gnome.org/show_bug.cgi?id=711627
2013-11-07 19:10:39 +01:00
Sebastian Dröge
24ba7af5fa audiomixer: Fix EOS handling if we have some pending data 2013-11-07 14:12:00 +01:00
Thiago Santos
e7e7417523 camerabin: Make sure video-done is post only when file is closed
Force filesink to null before posting video-done to make sure the
file was closed.

Had to do it from a separate thread to avoid calling state_change from
a sync message handler.

https://bugzilla.gnome.org/show_bug.cgi?id=709373
2013-11-06 22:13:54 -03:00
Sreerenj Balachandran
d844832ec3 videoparsers: add H.265 HEVC video parser element
https://bugzilla.gnome.org/show_bug.cgi?id=708438
2013-11-06 23:14:22 +00:00
Wim Taymans
c7e705dd13 aiffparse: fix seeking in push mode 2013-11-06 17:32:33 +01:00
Sebastian Dröge
fefda44161 audiomixer: Don't take channel mask in consideration in mono or stereo
This could cause negotiation to fail.

https://bugzilla.gnome.org/show_bug.cgi?id=708633
2013-11-06 15:50:08 +01:00
Sebastian Dröge
caeaade700 audiomixer: Add new element based on adder that does synchronized audio mixing 2013-11-06 15:35:38 +01:00
Sebastian Dröge
010fd8a471 yadif: Fix compiler warning caused by specifying const twice
yadif.c:49:24: warning: duplicate 'const' declaration specifier [-Wduplicate-decl-specifier]
  DECLARE_ASM_CONST (16, const xmm_reg, pb_1) = {
                       ^
  yadif.c:33:50: note: expanded from macro 'DECLARE_ASM_CONST'
  #define DECLARE_ASM_CONST(n,t,v)    static const t __attribute__((used)) __attribute__ ((aligned (n))) v
                                                 ^
  yadif.c:52:24: warning: duplicate 'const' declaration specifier [-Wduplicate-decl-specifier]
  DECLARE_ASM_CONST (16, const xmm_reg, pw_1) = {
                       ^
  yadif.c:33:50: note: expanded from macro 'DECLARE_ASM_CONST'
  #define DECLARE_ASM_CONST(n,t,v)    static const t __attribute__((used)) __attribute__ ((aligned (n)))
2013-11-01 10:41:16 +01:00
Sebastian Dröge
411cf48db7 yadif: Fix build with XCode
https://bugzilla.gnome.org/show_bug.cgi?id=710451
2013-11-01 10:40:06 +01:00
Sreerenj Balachandran
ab3f7d6096 h264parse: Remove the explicit PAR calculation based on VUI headers
The PAR calculation based on VUI headers is already doing by the
h264 codecparser and we does't need to duplicate those code.

https://bugzilla.gnome.org//show_bug.cgi?id=711009
2013-10-31 23:00:58 +01:00
Antonio Ospite
fa12af3d01 rotate: Fix angle property help text
The help text of the angle property was probably copied from the circle
plugin, fix it to mention the rotation determined by the angle.

https://bugzilla.gnome.org/show_bug.cgi?id=710391
2013-10-31 22:35:58 +01:00
Antonio Ospite
ae2231624c geometrictransform: Fix setting black background for AYUV buffers
When the frame buffer is AYUV writing all zeros does not set it to
black, in YUV colorspace 0x10 is the black level for luminance and 0x80
is the black level for chrominance.

Fix setting the background to black when the out_frame format is AYUV;
in all the other supported formats zeroing the data with memset is still
the right thing to do.

https://bugzilla.gnome.org/show_bug.cgi?id=710392
2013-10-31 15:03:30 +01:00
Edward Hervey
0baac2ffb9 h264parse: Unify value setting
the initial par_n = par_d = 0; was always overwritten since the switch/case
handles all values

And remove the 0 case (it's the same handling as default)
2013-10-28 09:35:20 +01:00
Edward Hervey
77f254abb3 h264parse: Avoid ending up with undefined values
If caps aren't fixed, we'd end up with undefined values for format
and align.
2013-10-28 09:33:16 +01:00
Edward Hervey
64592da3e9 tsdemux: Demote GST_ERROR to GST_WARNING
discontinuities are not errors per-se and we handle them correctly.
2013-10-28 09:15:20 +01:00
Matthieu Bouron
e7687dbaa2 mpegtsmux: fix uninitialized variable warning
https://bugzilla.gnome.org/show_bug.cgi?id=710759
2013-10-25 12:26:23 +01:00
Matthieu Bouron
84fbc08c25 mpegtsdemux: fix uninitialized variable warning
https://bugzilla.gnome.org/show_bug.cgi?id=710759
2013-10-25 12:26:23 +01:00
Edward Hervey
70d83b323b mpegtspacketizer: Skip packets with corrupted length
This is similar to what we do for packets with payload
2013-10-11 10:34:17 +02:00
Edward Hervey
5e50cd507c tsdemux: Refactor language tag extraction
subtitling descriptor needs to be used with a different method to extract
language codes.
2013-10-11 10:29:20 +02:00
Sebastian Dröge
f0b5d84c54 speed: Fix some bytes-per-frame vs. bytes-per-sample mixups
Otherwise we will crash when handling multiple channels and
miscalculate timestamps.

https://bugzilla.gnome.org/show_bug.cgi?id=709734
2013-10-09 17:18:41 +02:00
Stefan Sauer
0d54e5857f mpegpsdemux: log time format as name instead of the number 2013-10-08 09:05:36 +02:00
Jesper Larsen
b6d33e5ce4 tsdemux: Use mpegts-lib for ISO 639 language tags
https://bugzilla.gnome.org/show_bug.cgi?id=709180
2013-10-07 10:23:22 +02:00
Jesper Larsen
279bdef4ea tsdemux: Return descriptor in get_descriptor
https://bugzilla.gnome.org/show_bug.cgi?id=709180
2013-10-07 10:23:22 +02:00
Matej Knopp
f489ae5d55 dvdspu: handle sticky dvd events
palette-changed events are now sticky.

https://bugzilla.gnome.org/show_bug.cgi?id=709454
2013-10-05 10:50:15 +01:00
Sebastian Dröge
4b5d560092 h264parse: Fix conversion to AVC if a SPS/PPS not from the first indizes is used
https://bugzilla.gnome.org/show_bug.cgi?id=707974
2013-10-03 13:26:06 +02:00
Michael Olbrich
93ec45a6df liveadder: round when calculation length from duration
liveadder sometimes calculates the offsets incorrectly before adding. The
resulting errors can easily be heard when mixing silence with a sine.
I'm not sure what the exact conditions are to trigger this, but it definitively
happens when the buffers of two streams have a different duration and buffer
length and duration don't match exactly for one stream because of rounding
errors (e.g.  duration=0:00:00.021333333)

I have to admit, I got lost in the math somewhere but it seems that not
rounding in gst_live_adder_length_from_duration() causes 1 sample overlaps in
consecutive buffers from the same stream.
When using gst_util_uint64_scale_int_round() instead of just truncating the
sine sound correctly again.

https://bugzilla.gnome.org/show_bug.cgi?id=708345
2013-09-28 13:31:13 +02:00
Steve Maynard
17ed696faa mpegts: Add SCTE/EISS sections and table types
https://bugzilla.gnome.org/show_bug.cgi?id=708688
2013-09-28 13:15:44 +02:00
Edward Hervey
0e9ce593bf tsdemux: Wait for valid PCR/offset obvervations
It is quite possible that we might get PTS/DTS before the first
PCR/Offset observation.

In order to end up with valid timestamp we wait until at least one
stream was able to get a proper running-time for any PTS/DTS.
Until then, we queue up the pending buffers to push out.

Once we see a first valid timestamp, we re-evaluate the amount of
running-time elapsed (based on returned inital running-time and amount
of data/DTS queued up) for any given stream.

Taking the biggest amount of elapsed time, we set that on the packetizer
as the initial offset and recalculate all pending buffers running-time
PTS/DTS.

Note: The buffer queueing system can also be used later on for the
dvb fast start proposal (where we queue up all stream packets before
seeing PAT/PMT and then push them once we know if they belong to the
chosen program).
2013-09-28 13:15:43 +02:00
Edward Hervey
2762ead5ef mpegtsdemux: New PCR<=>Offset estimation code
This allows:
* Better duration estimation
* More accurate PCR location
* Overall more accurate running-time location and calculation

Location and values of PCR are recorded in groups (PCROffsetGroup)
with notable PCR/Offset observations in them (when bitrate changed
for example). PCR and offset are stored as 32bit values to
reduce memory usage (they are differences against that group's
first_{pcr|offset}.

Those groups each contain a global PCR offset (pcr_offset) which
indicates how far in the stream that group is.

Whenever new PCR values are observed, we store them in a sliding
window estimator (PCROffsetGroupCurrent).

When a reset/wrapover/gap is detected, we close the current group with
current values and start a new one (the pcr_offset of that new group
is also calculated).

When a notable change in bitrate is observed (+/- 10%), we record
new values in the current group. This is a compromise between
storing all PCR/offset observations and none, while at the same time
providing better information for running-time<=>offset calculation
in VBR streams.

Whenever a new non-contiguous group is start (due to seeking for example)
we re-evaluate the pcr_offset of each groups. This allows detecting as
quickly as possible PCR wrapover/reset.

When wanting to find the offset of a certain running-time, one can
iterate the groups by looking at the pcr_offset (which in essence *is*
the running-time of that group in the overall stream).
Once a group (or neighbouring groups if the running-time is between two
groups) is found, once can use the recorded values to find the most
accurate offset.

Right now this code is only used in pull-mode , but could also
be activated later on for any seekable stream, like live timeshift
with queue2.

Future improvements:
* some heuristics to "compress" the stored values in groups so as to keep
  the memory usage down while still keeping a decent amount of notable
  points.
* After a seek compare expected and obtained PCR/Offset and if the
  difference is too big, re-calculate position with newly observed
  values and seek to that more accurate position.

Note that this code will *not* provide keyframe-accurate seeking, but
will allow a much more accurate PCR/running-time/offset location on
any random stream.
For past (observed) values it will be as accurate as can be.
For future values it will be better than the current situation.
Finally the more you seek, the more accurate your positioning will be.
2013-09-28 13:15:43 +02:00
Edward Hervey
5017ba84a7 mpegtspacketizer: No longer use a private struct
These are not public headers, it just adds complexity for no reason
2013-09-28 13:15:43 +02:00
Sebastian Dröge
d7c7f54734 mpegtsparse: Queue buffers until we have enough to know the caps
https://bugzilla.gnome.org/show_bug.cgi?id=708222
2013-09-27 16:10:54 +02:00
Arnaud Vrac
467e0151d3 mpegtspacketizer: rework TS packet sync and extraction
The previous code could enter an infinite loop because the adapter state
could get out of sync with its mapped data state after sync was lost.
The code was pretty confusing so it's been rewritten to be clearer.

The easiest way to reproduce the infinite loop is to use the breakmydata
element before tsdemux to trigger a resync.

https://bugzilla.gnome.org/show_bug.cgi?id=708161
2013-09-27 15:17:24 +02:00
Arnaud Vrac
85ad4f3ad6 tsdemux: fix buffer overflow
This can happen with a corrupt TS file, found with breakmydata element
plugged before tsdemux.

https://bugzilla.gnome.org/show_bug.cgi?id=708161
2013-09-27 15:10:23 +02:00
Sebastian Dröge
f33a73b359 sdpdemux: Change rank to NONE until it can be autoplugged properly
https://bugzilla.gnome.org/show_bug.cgi?id=702495
2013-09-23 16:19:05 +02:00
Sebastian Dröge
92c696b22a audiofxbad: Change plugin name to audiofxbad from audiochannelmix 2013-09-19 20:17:01 +02:00
Sudip Jain
27739e8bb6 mpegtspacketizer: Correct condition check for current next indicator
https://bugzilla.gnome.org/show_bug.cgi?id=708106
2013-09-16 11:00:16 +02:00
Wim Taymans
b15177645b rawparse: fix event order
Delay forwarding the segment event until we pushed caps.
Send STREAM_START in pull mode.
2013-09-12 14:14:03 +02:00
Thiago Santos
efb27f19ec tsdemux: respect seqnums on seeks
Pass the seqnum to other events that are consequence of the
original seek event
2013-09-10 19:44:24 -03:00
Matej Knopp
a41e8698b1 h264parse: don't update src caps if only codec_data differs
https://bugzilla.gnome.org/show_bug.cgi?id=705333
2013-09-09 15:09:10 +02:00
Alex Ashley
31d1c05871 h264parse: Add support for stream-format=avc3
When outputting in AVC3 stream format, the codec_data should not
contain any SPS or PPS, because they are embedded inside the stream.

In case of avc->bytestream h264parse will push the SPS and PPS from
codec_data downstream at the start of the stream, at intervals
controlled by "config-interval" and when there is a codec_data change.

In the case of avc3->bytstream h264parse detects that there is
already SPS/PPS in the stream and sets h264parse->push_codec to FALSE.
Therefore avc3->bytstream was already supported, except for the stream
type.

In the case of bystream->avc h264parse will generate codec_data caps
from the parsed SPS/PPS in the stream. However it does not remove these
SPS/PPS from the stream. bytestream->avc3 is the same as bytestream->avc
except that the codec_data must not have any SPS/PPS in it.

|--------------+-------------+-------------------|
|stream-format | SPS in-band | SPS in codec_data |
|--------------+-------------+-------------------|
| avc          | maybe       | always            |
|--------------+-------------+-------------------|
| avc3         | always      | never             |
|--------------+-------------+-------------------|

Amendment 2 of ISO/IEC 14496-15 (AVC file format) is defining a new
structure for fragmented MP4 called "avc3". The principal difference
between AVC1 and AVC3 is the location of the codec initialisation
data (e.g. SPS, PPS). In AVC1 this data is placed in the initial MOOV box
(moov.trak.mdia.minf.stbl.stsd.avc1) but in AVC3 this data goes in the
first sample of every fragment.

https://bugzilla.gnome.org/show_bug.cgi?id=702004
2013-09-04 13:32:36 +02:00
Tim-Philipp Müller
310a633afb mpegpsdemux: minor clean-up 2013-09-02 23:28:38 +01:00
Matej Knopp
e43d1959a8 mpegdemux: send events on pads that are not linked
Someone might be waiting for certain events with a probe.

https://bugzilla.gnome.org/show_bug.cgi?id=707317
2013-09-02 23:24:08 +01:00
Edward Hervey
865ad4cdad h264parse: Use codecparsers macros
note: I/SI also covers the S_I/S_SI variants
2013-08-30 09:05:43 +02:00
Sebastian Dröge
03420d1e2a Release 1.1.4 2013-08-28 13:07:27 +02:00
Tim-Philipp Müller
cf791f6cb0 mpegtsdemux: fix possible read beyond end of buffer when resyncing 2013-08-27 17:05:44 +01:00
Matthieu Bouron
4b10f278b6 h264parse: only update src CAPS when it's necessary
https://bugzilla.gnome.org/show_bug.cgi?id=705452
2013-08-27 15:00:45 +02:00
Matthieu Bouron
43dcebe2a0 h264parse: do not set CAPS and passthrough mode if SPS/PPS have not been parsed
https://bugzilla.gnome.org/show_bug.cgi?id=705452
2013-08-27 15:00:35 +02:00
Edward Hervey
fd4fd13dc8 tsdemux: Refuse negative rates which we don't support yet
And remove a check which was done before
2013-08-21 14:44:38 +02:00
Jesper Larsen
e4a0c4d509 mpegtsmux: Set the program number from prog-map
The prog-map property of mpegtsmux only allows you to group pids together in a program.
The program number set in the PAT/PMT tables cannot be set explicitly.

This patch will set the program number according to the prog-map.
If a program id of 0 is given, the first vacant program number starting from 1 will be used.

https://bugzilla.gnome.org/show_bug.cgi?id=697239
2013-08-21 13:02:02 +02:00
Edward Hervey
d6b55b8a66 mpegtsbase: Adapt for latest mpegts lib changes 2013-08-21 08:59:42 +02:00
Edward Hervey
7667b79205 ivtc: Use input framerate when possible
if input is 30000/1001 ... use 24000/1001 as the output fixated framerate
2013-08-20 16:02:59 +02:00
Matthieu Bouron
f0eda4b54c id3mux: handle publisher, interpreted-by and musical-key tags
https://bugzilla.gnome.org/show_bug.cgi?id=705999
2013-08-20 14:45:22 +02:00
Sebastian Dröge
32a65dc5f3 mpegvideoparse: Fix switch statement in level detection code
Properly fall through the cases without re-assigning the level to
the wrong value.

https://bugzilla.gnome.org/show_bug.cgi?id=706369
2013-08-20 13:30:15 +02:00
Edward Hervey
ce81c4eb48 jpegparse: Forward segment event after caps
Store it until we know what our caps are.
2013-08-20 10:16:00 +02:00
Tim-Philipp Müller
63d629aba5 aiffparse: don't leak adapter 2013-08-17 00:25:49 +01:00
Matthieu Bouron
ddcfe3ddf3 aiffparse: s/newsegment/segment/
https://bugzilla.gnome.org/show_bug.cgi?id=705993
2013-08-17 00:25:49 +01:00
Matthieu Bouron
d69b6e53e4 aiffparse: fix push mode
Fix push mode by handling sink events (CAPS, SEGMENT) properly.

https://bugzilla.gnome.org/show_bug.cgi?id=705993
2013-08-17 00:25:49 +01:00
Olivier Crête
27bceba4ad mpeg4videoparse: Reparse the config if the size changed
Also only re-issue the caps update if the part of the config that
changed is one we care about.
2013-08-16 15:46:18 -04:00
Tim-Philipp Müller
e861c72efc interaudiosrc: make silence memory actually contain silence
instead of random data. Reported by Marco Micheletti on
gstreamer-devel.
2013-08-14 18:19:21 +01:00
Edward Hervey
21ebc7708d pesparse: Refactory secondary PES extension handling
Some streams had wrong values for the stream_id_extension, make sure
we only remember the valid ones.

For streams with PES_extension_field_length == 0, assume there's nothing
else.

For streams that state they have a TREF extension but don't have enough
data to store it, just assume it was produced by a non-compliant muxer
and skip the remaining data.

Only store remaining data in stream_id_extension_data instead of storing
data we already parse.
2013-08-14 13:41:37 +02:00
Zaheer Abbas Merali
131c263248 pcapparse: Remove unneeded unref and only set pad caps if we have caps
Fixes crashes due to invalid unrefs.

https://bugzilla.gnome.org/show_bug.cgi?id=705957
2013-08-14 10:48:26 +02:00
Edward Hervey
ddee83ef0b pesparse: Fix pes extension data length check
And remove length/data updates (we use the header size just below to
properly set them).

Based on feedback from Stas Sergeev <stsp@list.ru>

https://bugzilla.gnome.org/show_bug.cgi?id=657343
2013-08-14 10:39:46 +02:00
Edward Hervey
5208b8a050 pesparse: Remove unused argument
We always provided 0 as the offset and never used the returned value.

Based on feedback from Stas Sergeev <stsp@list.ru>

https://bugzilla.gnome.org/show_bug.cgi?id=657343
2013-08-14 10:33:14 +02:00
Matej Knopp
e5ebd7d846 mpegvideoparse: support field encoding for interlaced video
https://bugzilla.gnome.org/show_bug.cgi?id=705144
2013-08-13 14:00:57 +02:00
Sreerenj Balachandran
b4c52425f2 vc1parse: Fix the SequenceLayer handling for advanced profile.
The Sequence Header Data Structure STRUCT_C for Advanced Profile
has only a one valid field which is the profile indicator. Don't
use the reserved fields for fps update like Simple/Main profile.

https://bugzilla.gnome.org/show_bug.cgi?id=705667
2013-08-12 16:12:52 +01:00
Sreerenj Balachandran
ea213f826c vc1parse: Fix seq hdr STRUCT_A handling for advanced profile.
The Sequence Header Data Structure STRUCT_A for advanced profile
may be eight consecutive zero bytes.Don't try to override the
width and height values in this case.

https://bugzilla.gnome.org/show_bug.cgi?id=705667
2013-08-12 16:12:52 +01:00
Matthieu Bouron
0d4c2f42e9 aiffparse: fix SSND data size
AIFF chunk size does not include the chunk header size (8 bytes), so the
SSND data size is equal to the chunk size minus the SSND header size (8
bytes).

https://bugzilla.gnome.org/show_bug.cgi?id=705675
2013-08-12 16:12:51 +01:00
Arnaud Vrac
c4140f9c25 mpegdemux: send codec tag for each stream 2013-08-12 14:32:09 +02:00
Tim-Philipp Müller
ed69b2896f aiffparse: fix CAPS query
Was causing criticals in decodebin/playbin because the caps
query done when exposing pads would return ANY caps.
2013-08-10 19:44:15 +01:00
Tim-Philipp Müller
48734bd522 aiffparse: don't unref NULL buffer 2013-08-10 19:43:41 +01:00
Matthieu Bouron
8c4241e546 aiffparse: set missing layout field in srcpad caps
https://bugzilla.gnome.org/show_bug.cgi?id=705674
2013-08-09 23:41:30 +01:00
Matthieu Bouron
5a066fd6dd aiffparse: send start stream event
https://bugzilla.gnome.org/show_bug.cgi?id=705674
2013-08-09 23:40:08 +01:00
Matthieu Bouron
86edc51333 aiffparse: fix buffers initialisation
https://bugzilla.gnome.org/show_bug.cgi?id=705674
2013-08-09 23:36:33 +01:00
Edward Hervey
8074a48594 h264parse: Use slice type to determine if frame is keyframe
This is the same behaviour as pre-baseparse-refactoring

https://bugzilla.gnome.org/show_bug.cgi?id=705598
2013-08-09 08:42:43 +02:00
Edward Hervey
b17676a1d5 h264parse: Do not trigger caps update if we only have PPS updates
Updating caps results in downstream elements potentially reconfiguring themselves
(such as decoders). If we do this in the middle of keyframes, we would result
in those elements being reconfigured and handling garbage until the next keyframe.

Instead of this only send (potentially) new codec_data when we have *both* SPS and
PPS.

https://bugzilla.gnome.org/show_bug.cgi?id=705333
2013-08-04 12:08:57 +02:00
David Schleef
5b63a7c8e0 ivtc: quiet FIXME when it's not relevant 2013-08-03 23:29:10 -07:00
David Schleef
d5f1ddad85 ivtc: implement new edge-directed upsampling 2013-08-03 23:29:10 -07:00
Edward Hervey
3b60f88437 mpegtspacketizer: Look harder for next sync position
If ever we lose sync, we were just checking for the next 0x47 marker ...
which might actually happen within a mpeg-ts packet.

Instead check for 3 repeating 0x47 at the expected packet size interval,
which the same logic we use when we initially look for the packet size.
2013-08-02 10:41:25 +02:00
Edward Hervey
c28acaa3c5 mpegtspacketizer: Fix PCR LUT table
We were only resetting the first 512 values of the lookup table instead
of the whole 8192.
This resulted in any PCR PID over 0x0200 ... ending up taking the first PCR
table around :(
2013-08-02 10:41:25 +02:00
Tim-Philipp Müller
646ba6b3df mpegts: private/teletext -> application/x-teletext 2013-07-30 16:08:17 +01:00
Sebastian Dröge
f2b14c68d5 midi: Fix handling of the SEGMENT query 2013-07-29 12:17:57 +02:00
Sebastian Dröge
6812f96de4 gst: Don't swap start/stop for negative rates in the SEGMENT query 2013-07-29 12:14:08 +02:00
Sebastian Dröge
38e832cdef mpegdemux: Implement SEGMENT query 2013-07-29 11:02:55 +02:00
Sebastian Dröge
12981a5d82 tsdemux: Implement SEGMENT query 2013-07-29 11:02:55 +02:00
Sebastian Dröge
6b78fa336d mxfdemux: Implement SEGMENT query 2013-07-29 11:02:54 +02:00
Edward Hervey
97426a1caa all: Fix for GST_DISABLE_GST_DEBUG
Where applicable, remove methods that don't do anything different than
the default implementation.
2013-07-29 09:42:12 +02:00
Edward Hervey
3ee8aa2c2d h264parse: Show NALU string type in debug messages
If you know the NALU type by heart I tip my hat to you, for the rest of
us mere mortals this is a bit more helpful
2013-07-29 09:42:12 +02:00
Edward Hervey
a45aa8fe48 tsdemux: Remove unused macros 2013-07-29 09:42:12 +02:00
Edward Hervey
edd69b2989 tsdemux: Add more AC3 detection cases
ATSC ac3 streams are always guaranteed to be AC3 if EAC3 descriptor
is not present
If stream registration id is 'AC-3' then it's also guaranteed to be AC3.
Finally if AC3 descriptor is present it's guaranteed to be AC3.

Only silences a warning, but still.
2013-07-29 09:42:11 +02:00
Edward Hervey
a76c658e8d tsdemux: Flush out pending data on EOS
Ensures downstream elements (like decoders) really get all the data
2013-07-29 09:42:11 +02:00
Edward Hervey
ca77865bce mpegtspacketizer: More AFC flags
I should have put those in a previous commit. sorry :(
2013-07-29 09:42:11 +02:00
Edward Hervey
cea403eaa5 mpegdefs: Simplify PCR/PTS/DTS => GST conversion macros
We know we will not overflow 64 bits, therefore just use direct
multiplication/division instead of the scale method (trims usage from
50 instruction calls to 2/3).
2013-07-29 09:42:11 +02:00
Matej Knopp
f42176b877 dvdspu: artifacts when rendering clipped spu
https://bugzilla.gnome.org/show_bug.cgi?id=705039
2013-07-29 08:43:25 +02:00
Matej Knopp
bcff370c43 mpegvideoparse: do not update caps when bitrate changes
https://bugzilla.gnome.org/show_bug.cgi?id=705035
2013-07-29 08:41:50 +02:00
Edward Hervey
e6ebd9024e tsdemux: HDV only has mpeg 1 audio layer 2
Set that accordingly on the caps
2013-07-27 12:18:36 +02:00
Edward Hervey
2c4f994db4 asfmux: Various debug argument fixes
mainly G_GUINT16_FORMAT to ... the right type (guint32 or guint8)
2013-07-27 06:39:16 +02:00
Edward Hervey
8c60e42070 mpegtsdemux: Add more flag debugging for PES and TS packets
Helps with debugging issues. And also remove unused variable (opcr)

This will also allow us in the future to properly detect:
* random-access location (to enable keyframe observation and
  potentially seeking
* discont location (to properly handle resets)
* splice location (to properly handle new stream changes)
2013-07-26 08:17:17 +02:00
Edward Hervey
dbe350d380 pesparse: Demote a Warning
We actually now know what to do ... have a log message :)
2013-07-26 06:46:41 +02:00
Vincent Penquerc'h
5c82a510d9 mpegtsmux: avoid using clipped out buffers
If a buffer was entirely clipped out (ie, it's out of the segment
entirely), we'll end up with a NULL buffer, which we don't want
to process/dereference.
2013-07-25 15:06:12 +01:00
Edward Hervey
1f7fa9be1d tsdemux: Remember requested seek rate and use it
The new seek handling re-creates the segment time information once it
has enough information after a seek.

The problem was that we'd completely ignore the requested rate. So store
that and use it in the newly created segment.

https://bugzilla.gnome.org/show_bug.cgi?id=694369
2013-07-24 15:51:46 +02:00
Edward Hervey
06717150bf mpegvideoparse: Fix codec_data handling
Set to sequence_offset so that _process_config accepts it.

(btw: seq_offset usage throughout this plugin is really dodgy)

https://bugzilla.gnome.org/show_bug.cgi?id=702806
2013-07-23 18:16:32 +02:00
Edward Hervey
069a497d19 tsdemux: Create and send codec tag
Helps with applications that rely on presence of that tag for user-facing
information.

https://bugzilla.gnome.org/show_bug.cgi?id=702216
2013-07-23 15:11:51 +02:00
Sebastian Dröge
46e85b4a6c mxfdemux: Add support for group-id in the stream-start event 2013-07-23 10:33:31 +02:00
Sebastian Dröge
44e404fe41 tsdemux: Add support for group-id in the stream-start event 2013-07-23 10:33:31 +02:00
Sebastian Dröge
2a1877909f tsparse: Add support for group-id in the stream-start event 2013-07-23 10:33:31 +02:00
Sebastian Dröge
4ec7baa61a mpegdemux: Add support for group-id in the stream-start event 2013-07-23 10:33:31 +02:00
Sebastian Dröge
a68733ea91 midiparse: Add support for group-id in the stream-start event 2013-07-23 10:33:31 +02:00
Tim-Philipp Müller
580a94d18b interlace: fix negotiation if filter caps are passed to query_caps
Make videotestsrc ! interlace ! $anything work again. Problem
was that upstream filter caps were passed which contained
interlace-mode=progressive, which doesn't intersect too well
with interlace's source pad template caps, leading to
not-negotiated errors.
2013-07-22 17:32:50 +01:00
Olivier Crête
6a1896d805 h264parse: Don't abort on invalid streams
Just return an error
2013-07-22 16:27:16 +02:00
Edward Hervey
1db3d40a4b mpegvideoparse: Only map input buffer once
Instead of constantly map/unmapping it a bit everywhere, we pass along
to all functions the GstMapInfo.

Makes mpeg video frame parsing 6% faster

https://bugzilla.gnome.org/show_bug.cgi?id=702330
2013-07-22 10:46:23 +02:00
Douglas Bagnall
dfb101e0ed tsdemux: disentangle requested program number from active program number
The program_number attribute was overloaded, trying to indicate both
the currently playing program, and the program requested via the
"program-number" property.  The end result was that setting the
property didn't work (see #690934).

I added a new requested_program_number field rather than reviving the
current_program_number field because it seemed this would result in
fewer changes overall and be less confusing.  It breaks symmetry with
the "program-number" property, but it retains parallels with the likes
of program->program_number.

Because gst_ts_demux_reset is called after the properties have been
parsed, requested_program_number is initialised in gst_ts_demux_init.
Whether this is exactly the right place, I don't know.
2013-07-22 09:53:46 +02:00
Jesper Larsen
8e4f966018 tsdemux: fix program-number functionality
Setting the program-number property does not affect which program
is actually being demuxed.

Moving the initialization of the program_number from
gst_ts_demux_reset to gst_ts_demux_init seems to fix this issue.

https://bugzilla.gnome.org/show_bug.cgi?id=690934
2013-07-22 09:53:46 +02:00
Arnaud Vrac
506abb06e2 mpegdemux: do not push discont buffers if they aren't discont
Explicitly unset discont flag when it shouldn't be set.

https://bugzilla.gnome.org/show_bug.cgi?id=682110
2013-07-17 18:36:30 +01:00
Tim-Philipp Müller
ff495342f2 h263parse: fix height extraction for H263p 2013-07-15 23:04:35 +01:00
Tim-Philipp Müller
79249be0aa h263parse: add pixel-aspect-ratio if upstream doesn't provide one 2013-07-15 23:04:35 +01:00
Edward Hervey
1b1b3a40d7 mpegtsdemux: Remember seek sequence number
* Avoids handling twice the same seek (can happen with playbin and files
  with subtitles)
* Set the sequence number of the segment event to the sequence number of
  the seek event that generated it (-1 for the initial one).
2013-07-15 11:20:40 +02:00
Arnaud Vrac
024aa47f64 tsdemux: implement seeking in push mode 2013-07-15 11:20:40 +02:00
Arnaud Vrac
388c28381f tsdemux: recalculate new segment after byte seek
The seeking start time is approximated from the seek offset in bytes
using the accumulated PCR observations, so on a VBR stream there might
be a big difference between the actual PCR and the estimated one after
the seek. This might result in a long wait to skip all out of segments
packets.

Instead we just recalculate the new segment to start at the first PTS
after the seek, so that playback starts immediatly.
2013-07-15 10:51:28 +02:00
Sreerenj Balachandran
654744a03c mpegvideoparse: Use sequence_display_extension values to update the src caps
The caps should always represent what the user is supposed to see.
So if there is a sequence_display_extension associated with the
stream then use the display_horizontal_size/display_vertical_size
to update the src caps (if they are less than the values provided
by sequence header).

https://bugzilla.gnome.org/show_bug.cgi?id=704009
2013-07-12 10:06:05 +02:00
Sebastian Dröge
1e7b3a8c9e Release 1.1.2
Oops... should've been part of 1.1.2 tag already :(
2013-07-12 09:46:11 +02:00
Sebastian Dröge
f83e9405de mpegpsmux: Send stream-start event before any data 2013-07-10 12:28:38 +02:00
Edward Hervey
8ca1751f00 mpegtsdemux: Avoid parsing section without enough data
This is actually a workaround (we'll be skipping the upcoming section)

This will only happen for sections where the beginning is located within
the last 8 bytes of a packet (which is the minimum we need to properly
identify any section beginning).

Later we should figure out a way to store those bytes and mark that
some analysis needs to happen. The probability of this happening is
too low for me to care right now and do that fix. There is a good chance
that section will eventually be repeated and won't end up on such border.
2013-07-09 12:25:11 +02:00
Edward Hervey
2fb7b87140 mpegtsdemux: Avoid vmethod calls
Depending on usage, tsparse and tsdemux might not need to be called
when new section/pes-data is available.
2013-07-09 12:25:11 +02:00
Edward Hervey
61b30175b3 mpegtsdemux: Remove unneeded variables
* packet.origts is no longer used since the PCR refactoring done ages ago
* known_packet_size is a duplicate of packet_size != 0
* caps was never used outside of the packetizer
2013-07-09 12:25:11 +02:00
Gwenole Beauchesne
18984f98dd h264parser: fix size caps to report cropped dimensions.
Restore the original h264parser behaviour to report cropped dimensions
in size caps.

https://bugzilla.gnome.org/show_bug.cgi?id=694068

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-07-09 12:15:07 +02:00
Edward Hervey
f58f13e874 mpegtsdemux: Fix multiple-SI detection/parsing
We had two issues with the previous code:
1) We were badly handling PUSI-flagged packets. We were discarding the
   initial data (if pointer != 0) whereas we should have been accumulating
   it with the previous data (if there was a continuity of course).
   => First series of information loss
2) We were not checking whether there were more sections after the end
   of one (i.e. when the following byte was not a stuff byte).

This fixes those two issues.

Fixes #677443

https://bugzilla.gnome.org/show_bug.cgi?id=677443
2013-07-07 08:29:37 +02:00
Edward Hervey
513417e0ff mpegtbase: Fix switch/case typo
Ended up trying to analyze PMT ... with a PAT :(
2013-07-07 07:21:46 +02:00
Edward Hervey
1c96c79b88 mpegtsdemux: Handle private section streams
Until now we simply ignored those streams (since we couldn't do anything
with it anyway). Now that we have the mpegts library and we offload the
section handling to the application side we can properly identify and
extract them.

By default it is disabled for tsparse and enabled for tsdemux, but there is
a property to change that.

This should open the way to properly handle all private section streams,
including:
* DSM-CC
* MHEG
* Carousel data
* Metadata streams (though I haven't seen any of those in the wild)
* ... And all other specs/protocols making use of those

Partially fixes #560631
2013-07-06 14:50:52 +02:00
Edward Hervey
a3b6b1a951 mpegtsdemux: Handle registration descriptor for programs and streams
* Allows us to simplify some code and prepare for future cleanups.
* Remove useless casts
* Add some FIXME regarding VC1
2013-07-06 10:59:54 +02:00
Brendan Long
f53e66f4c6 webvttenc: Separate cues with two line breaks instead of one.
See http://dev.w3.org/html5/webvtt/#syntax

https://bugzilla.gnome.org/show_bug.cgi?id=703673
2013-07-05 18:32:43 +01:00
Gwenole Beauchesne
d10acd3879 mpegvideoparse: cope with new parser API.
Migrate the code to use the new parser API based on GstMpegVideoPacket.

Also try to optimize gst_mpegv_parse_process_config() by using more of
GstMpegVideoPacket and determining the extension_start_code_identifier
prior to calling the parser function for that extension packet.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-07-05 17:39:28 +02:00
Edward Hervey
9da7551993 mpegtsbase: Remove no-longer needed code
Since we now send all sections to the packetizer, we no longer need to do
anymore in-depth checks for the validity of a section.

The choice boils down to:
1) Is it from a known PES pid ? If so pass it on (which might be just pushing
   downstream in the case of tsparse, or accumulating PES data for tsdemux)
2) Is it from a known SI pid ? If so pass it to the section packetizer
2013-07-05 17:25:17 +02:00
Edward Hervey
b7bba5658a mpegtsdemux: Fix compilation with debugging disabling
We previously weren't using that variable ...
2013-07-05 10:57:34 +02:00
Edward Hervey
7814ed196b mpegtsdemux: Switch to using GstMpegTsStreamType
We still have some other stream types which haven't been ported, but
we will do so once we have defined the enums in the mpegts library.

Also add some FIXMEs regarding items discovered during analysis
2013-07-04 08:45:32 +02:00
Edward Hervey
1f2bb15618 mpegtsdemux: GstMpegTS => GstMpegTs 2013-07-03 14:00:58 +02:00
Edward Hervey
92edd82c86 mpegtsdemux: Switch to MPEG-TS SI library
* Only mpeg-ts section packetization remains.
* Improve code to detect duplicated sections as early as possible
* Add FIXME for various issues that need fixing (but are not regressions)

https://bugzilla.gnome.org/show_bug.cgi?id=702724
2013-07-03 09:17:25 +02:00
Andoni Morales Alastruey
977bf98b44 frei0r: add the build prefix path in the search dirs 2013-06-28 12:40:52 +02:00
Edward Hervey
358a68e65b mpegdesc: Extend list of known descriptors
Add the various ATSC ones
2013-06-24 14:55:28 +02:00
Edward Hervey
26689fc437 mpegtsbase: Only warn for added streams when needed
We use add_stream(stream_type:-1) to ensure a programs' PCR Stream is
also taken into account. For most programs this will re-use an
existing ES stream.

So only warn that we are re-adding a stream if it was already present
AND it is not to ensure the PCR stream is taken into account.
2013-06-24 08:24:58 +02:00
Edward Hervey
f9b3b46ab5 mpegtspacketizer: Speed up section parsing
Only create subtables when needed. It was previously creating one every
single time ... to check if one was present.
And speed up code to detect whether a subtable was already present or not.

Overall makes section pushing 2 times faster.
2013-06-24 07:49:34 +02:00
Edward Hervey
15e3afc099 mpegdesc: Extend list of known descriptors
From ITU-T H222.0 (06/2012). Freely available from itu.int
2013-06-24 07:49:34 +02:00
Edward Hervey
9fd7f1c082 mpegtspacketizer: Speedup packet parsing
Avoid using bitshifting where not needed.

Speeds up packet parsing by 3% (this is *the* hotspot of mpeg-ts elements).
2013-06-24 07:49:34 +02:00
Edward Hervey
0592bcc3c9 mpegtspacketizer: Better detect already seen section
In some cases (NIT on highly-populated DVB-C operator for example), there
will be more than one section emitted for the same subtable and version
number.

In order not to lose those updates for the same version number, we checked
against the CRC of the previous section we parsed.

The problem is that, while it made sure we didn't lose any information, it
also meant that if the same section came back (same version, same CRC) later
on we would re-process it, re-parse it and re-emit it.

This version improves on that by keeping a list of previously observed CRC
for identical PID/subtable/version-number and will only process sections if
they really were never seen in the past (as opposed to just before).

On a 30s clip, this brings down the number of NIT section parsing from 4541
down to 663.

https://bugzilla.gnome.org/show_bug.cgi?id=614479
2013-06-23 09:06:15 +02:00
Edward Hervey
c0ce94dbf2 mpegtspacketizer: Speed up NIT parsing
Avoid duplicating the delivery structure, and instead give it to the
receiving container.
2013-06-19 19:31:12 +02:00
Edward Hervey
40bcf48b0c mpegtbase: simplify code
We don't need generic methods for push/flush since we know all the
subclass that we control
2013-06-19 12:29:47 +02:00
Edward Hervey
79e63e3daf mpegtsdemux: Fix for compiling without GST_DEBUG
Protect debug-only variables/usage, and in one case remove a useless
variable.
2013-06-19 12:29:46 +02:00
Edward Hervey
e66d543f00 tsparse: Ensure initial events are sent in the right order
First send stream-start, then caps, then segment.

The segment we push is from upstream in push-mode. If we work in pull-mode
then we initialize the base segment to BYTES.

https://bugzilla.gnome.org/show_bug.cgi?id=702422
2013-06-19 07:40:28 +02:00
Sebastian Dröge
d50625eeb0 mpegvideoparse: Make sure the buffer is writable before we add the MPEG video meta
https://bugzilla.gnome.org/show_bug.cgi?id=702174
2013-06-14 14:53:52 +02:00
Arnaud Vrac
a5402d6eeb tsdemux: fix M2TS stream resync
Sync byte scan is incorrect for M2TS streams because the timestamp 4
bytes were not included in the flush size. This can result in an
infinite loop.

Rework the scan code to be clearer and work in all cases.
2013-06-12 08:01:24 +02:00
Arnaud Vrac
065d421d34 tsdemux: move some debug prints at the log level 2013-06-12 08:01:20 +02:00
Josep Torra
28a2902a7b tsdemux: fixes seeking in pull mode
Preserve the current segment and observations in pull mode seeks with
flushing.

https://bugzilla.gnome.org/show_bug.cgi?id=698050
2013-06-12 08:01:06 +02:00
Hans de Goede
28e64d1031 wrappercamerabinsrc: Add video-source-filter during construction
By adding the video-source-filter during construction time, rather then
patching it in later (*), we can greatly reduce the amount of caps involved
in negotation, speeding up pipeline creation.

I wrote this while working on speeding up the startup of cheese. My cheese
has been modified to add a capsfilter, filtering for only the configured
resolution, with that cheese patch + this patch, the pipeline creation time
goes from aprox 1.1 seconds to aprox 350ms. This is with a Logitech 9000
pro camera, which supports lots of different resolutions at many different
framerates per resolution, causing a caps "explosion" if not filtered.

*) Note the code for this is left in, as it is still necessary if the
video-source-filter is changed between a stop + re-start.

https://bugzilla.gnome.org/show_bug.cgi?id=701953
2013-06-11 12:47:53 +02:00
Hans de Goede
8dc7fae455 wrappercamerabinsrc: Don't unset the video-source property on pipeline start
check_and_replace_src() was setting self->app_vid_src to NULL, which
means that an app setting the video-source property, and then starting,
stopping and re-starting the pipeline (ie to make changes to the
video-source-filter property) would after the restart no longer have
a video-source.

This patch fixes this by making gst_camerabin_setup_default_element return a
ref to the passed in user_element, rather then returning the user_element as
is, so that that ref can be passed on to the bin, and the app_vid_src ref
stays valid.

https://bugzilla.gnome.org/show_bug.cgi?id=701915
2013-06-10 16:16:29 +02:00
Sebastian Dröge
c383dd6420 rfb: Link with libgstbase for GstPushSrc 2013-06-07 15:18:15 +02:00
Alban Browaeys
44b1bc6081 mpegdemux: accept ID_PRIVATE_STREAM_1 to avoid loosing sync
Current fallback to lost_sync seems to impede a delay to restore
sync. Let the parser parse and skip the private stream.
Here it contains the digital camera brand (in 2010 bytes)
and is repeated twice.

https://bugzilla.gnome.org/show_bug.cgi?id=697283
2013-06-07 12:57:03 +02:00
Ilya Smelykh
ef0e051e7d h264parse: Wait until SPS/PPS before outputting any data
https://bugzilla.gnome.org/show_bug.cgi?id=646327
2013-06-07 12:10:08 +02:00
Sebastian Dröge
37427ccaef Release 1.1.1 2013-06-05 18:29:49 +02:00
Edward Hervey
0809770d26 mpegtspacketizer: Fix leak
Since we were manually setting GValue to the GValueArray, we also need
to specify how many were set, otherwise all values in the array will
be leaked.
2013-06-05 15:23:18 +02:00
Edward Hervey
877019ae00 mpegtspacketizer: Speedup TDT/TOT parsing
Use quarks where needed, makes it 2.5 times faster
2013-06-05 13:39:14 +02:00
Edward Hervey
824f08d1d8 mpegtspacketizer: Fix string leak
The description/text get copied in the structure.
2013-06-05 13:21:29 +02:00
Edward Hervey
f3bf40e2b0 mpegtspacketizer: Speed up descriptor parsing/packing
descriptors are stored as a GValueArray of GString. The downside is
that there is no way to "pass" ownership of a GValue to a GValueArray
which previously resulted in expensive copy/free of the (already expensive)
GString.

Here we estimate first the size of the GValueArray, then create it,
then directly use the GValue of that array.

Speeds up total SI parsing by ~30%
2013-06-05 12:49:09 +02:00
Edward Hervey
e6f0986b9e mpegtspacketizer: Use gst_value_list_append_and_take_value
Avoids doing the expensive copy of structures/arrays/...

Speeds up parsing SI by about 50%
2013-06-05 12:48:05 +02:00
Edward Hervey
b378b7e9d6 mpegtspacketizer: Avoid copying GValueArray
Just give the GValueArray to the container GValue.
2013-06-05 11:27:05 +02:00
Sebastian Dröge
b8cb2b4d79 midiparse: In pull mode drop SEGMENT, CAPS and STREAM_START events
We create and send our own later from another thread.
2013-05-28 15:55:25 +02:00
Sebastian Dröge
357779d3c6 midiparse: Push stream-start event before anything else 2013-05-28 15:55:25 +02:00
Stefan Sauer
116f7c0a77 audiochannelmix: fill in the author template
The copyright header still contained the author template.
2013-05-26 14:29:54 +02:00
Michael Rubinstein
e6c8224609 mpegtsdemux: Free memory behind GString if we don't use it
https://bugzilla.gnome.org/show_bug.cgi?id=700903
2013-05-25 15:49:21 +02:00
Edward Hervey
ce441cbff7 mpegtsbase: Post an error message when EOS'ing without source pads
This ensures we don't "hang" when files can't be decoded, or contain
no valid streams.
2013-05-23 14:59:34 +02:00
Edward Hervey
7837cab44e tsdemux: Demote a warning to debug level
We will get it for virtually every first packets.
2013-05-23 14:59:34 +02:00
David Schleef
35018ae632 audiofx: Add plugin, add audiochannelmix 2013-05-18 14:02:18 -07:00
Tim-Philipp Müller
a204ddd225 videosignal: fix CFLAGS order 2013-05-18 12:21:59 +01:00
Sebastian Dröge
f0a1935119 mpegtsmux: Push stream-start event before anything else 2013-05-15 11:38:35 +02:00
Sebastian Dröge
a5ac2d3aee audiovisualizer: Enable GLib deprecation warnings again 2013-05-15 11:02:29 +02:00
Sebastian Dröge
3d09d0068d audiovisualizer: Negotiate as soon as possible when getting the sinkpad caps 2013-05-15 11:00:46 +02:00
Sebastian Dröge
3de73279df asfmux: Send stream-start event 2013-05-15 10:56:20 +02:00
Tim-Philipp Müller
f0039c6dc3 nsf: remove nsf plugin, replaced by gme plugin
https://bugzilla.gnome.org/show_bug.cgi?id=648021
2013-05-14 00:14:34 +01:00
David Schleef
e5288a2464 intervideosrc: Fix timestamp generation 2013-05-11 12:07:36 -07:00
Tim-Philipp Müller
146e78ffdb rfbsrc: post error messages on errors 2013-05-11 19:42:31 +01:00
David Schleef
e79b977fdb videofilters: Add videodiff element 2013-05-10 17:40:17 -07:00
David Schleef
4b7f0d99f0 y4mdec: set timestamps when restriding buffer 2013-05-10 17:40:17 -07:00
David Schleef
4a88eebe0e videomark/detect: rename to simplevideomark[detect] 2013-05-10 17:31:10 -07:00