Commit graph

5527 commits

Author SHA1 Message Date
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