Commit graph

11566 commits

Author SHA1 Message Date
Mark Nauwelaerts
60a8533d48 baseparse: post duration message if average bitrates is updated 2011-04-08 15:44:51 +01:00
Mark Nauwelaerts
7ba1b6e4d7 baseparse: remove is_seekable vmethod and use a set_seek instead
Seekability, like duration, etc is unlikely to change (frequently), and
the default assumption covers most cases, so let subclass set when needed.
At the same time, allow subclass to indicate if it has seek-metadata (table)
available, and possibly have it provide an average bitrate.
2011-04-08 15:44:51 +01:00
Mark Nauwelaerts
4b0f92db79 baseparse: add another hook for subclass prior to pushing buffer
... and allow subclass to perform custom segment clipping, or to
emit tags or messages at this time.
2011-04-08 15:44:50 +01:00
Mark Nauwelaerts
b51b5d4b29 baseparse: 0 converts to 0 by default 2011-04-08 15:44:50 +01:00
Mark Nauwelaerts
3c656232eb baseparse: refactor conversion using helper function and export default convert 2011-04-08 15:44:50 +01:00
Mark Nauwelaerts
12cc228d84 baseparse: streamline query handling 2011-04-08 15:44:50 +01:00
Mark Nauwelaerts
e274ebb292 baseparse: cleanup struct and remove unused member 2011-04-08 15:44:50 +01:00
Arun Raghavan
03164ad8ab baseparse: Allow chaining of subclass event handlers
This allows the child class to chain its event handler with
GstBaseParse, so that subclasses don't have to duplicate all the default
event handling logic.

https://bugzilla.gnome.org/show_bug.cgi?id=622276
2011-04-08 15:44:50 +01:00
Sebastian Dröge
f3f338f14a baseparse: Don't use GST_FLOW_IS_FATAL()
Also don't post an error message for UNEXPECTED and do it
for NOT_LINKED.
2011-04-08 15:44:49 +01:00
Mark Nauwelaerts
08e8dbf027 baseparse: non-TIME seek event is simply not handled 2011-04-08 15:44:49 +01:00
Mark Nauwelaerts
dc80b52372 baseparse: fix seek event ref handling 2011-04-08 15:44:49 +01:00
Mark Nauwelaerts
b4f1778a7d baseparse: prevent arithmetic overflows in pull mode buffer cache handling 2011-04-08 15:44:49 +01:00
Mark Nauwelaerts
1b8a96e999 baseparse: fix seek handling
Allow a few more seek event type combinations, and really use the result
of gst_segment_set_seek to perform the seek.  Also add some debug.
2011-04-08 15:44:49 +01:00
Arun Raghavan
eb73b3e933 baseparse: Don't emit bitrate tags too early
We wait to parse a minimum number of frames (10, arbitrarily) before
emiting bitrate tags so that our early estimates are not wildly
inaccurate for streams that start with a silence. If the stream ends
before that, we just emit the tags anyway.

While it _would_ be nicer to be specify the threshold to start pushing
the tags in terms of duration, this would introduce more complexity than
this merits.

https://bugzilla.gnome.org/show_bug.cgi?id=614991
2011-04-08 15:44:49 +01:00
Sebastian Dröge
a6b20b62bd baseparse: Set the last stop to the buffer starttime if the duration is invalid
...instead of not setting it at all.
2011-04-08 15:44:49 +01:00
Joshua M. Doe
e85f8c8ab6 baseparse: Send NEWSEGMENT event with correct start and position
Instead of taking the last stop (which could be buffer endtime instead
of starttime) always take the buffer starttime.

Fixes bug #614016.
2011-04-08 15:44:49 +01:00
Tim-Philipp Müller
b0b9163125 audioparsers: remove unused GstBaseParseClassPrivate structure 2011-04-08 15:44:49 +01:00
Arun Raghavan
102ee0cf41 audioparsers: Add bitrate calculation to baseparse
This makes baseparse keep a running average of the stream bitrate, as
well as the minimum and maximum bitrates. Subclasses can override a
vfunc to make sure that per-frame overhead from the container is not
accounted for in the bitrate calculation.

We take care not to override the bitrate, minimum-bitrate, and
maximum-bitrate tags if they have been posted upstream. We also
rate-limit the emission of bitrate so that it is only triggered by a
change of >10 kbps.
2011-04-08 15:44:49 +01:00
Mark Nauwelaerts
8a2141f001 audioparsers: rename baseparse GType name to avoid possible conflicts 2011-04-08 15:44:49 +01:00
Mark Nauwelaerts
cbc6dcc04b audioparsers: documentation fixes 2011-04-08 15:44:49 +01:00
Mark Nauwelaerts
d249e34fb4 baseparse: adjust seek handling and newsegment sending
Perform sanity check on type of seek, and only perform one that is
appropriately supported.  Adjust downstream newsegment event
to first buffer timestamp that is sent downstream.
2011-04-08 15:44:48 +01:00
Mark Nauwelaerts
192aa0d41f baseparse: minor refactor cleanup
Also add some debug logging.
2011-04-08 15:44:48 +01:00
Mark Nauwelaerts
abadf63413 baseparse: implement leftover draining in pull mode 2011-04-08 15:44:48 +01:00
Mark Nauwelaerts
b67b86fcdb baseparse: provide default conversion using bps if no fps available
Also store estimated duration as such, rather than pretending otherwise
(e.g. set by subclass).
2011-04-08 15:44:48 +01:00
Mark Nauwelaerts
d0ea041a38 baseparse: check for remaining data when draining in push mode 2011-04-08 15:44:48 +01:00
Mark Nauwelaerts
497105ca1b baseparse: fix pull mode cache size comparison 2011-04-08 15:44:48 +01:00
Michael Smith
ab3bf9fd95 audioparse: fix a format string as reported on irc. 2011-04-08 15:44:48 +01:00
Mark Nauwelaerts
0f85a2b685 baseparse: custom bufferflag indicates not to count frame in stats 2011-04-08 15:44:48 +01:00
Mark Nauwelaerts
f3d49be227 audioparsers: reference GstBaseParse now lives here 2011-04-08 15:44:48 +01:00
Mark Nauwelaerts
3a4e980038 audioparsers: rename 'aacparse' plugin to generic 'audioparsers' plugin 2011-04-08 15:44:48 +01:00
Mark Nauwelaerts
1dd6b12316 baseparse: reset passthrough mode to default (disabled) on activation 2011-04-08 15:44:48 +01:00
Mark Nauwelaerts
a9de98830a baseparse: ensure buffer metadata is writable 2011-04-08 15:44:48 +01:00
Mark Nauwelaerts
1bc8301c79 baseparse: fix/enhance DISCONT marking
In particular, consider DISCONT == !sync, and allow subclass to query
sync state, as it may want to perform additional checks depending
on whether sync was achieved earlier on.
Also arrange for subclass to query whether leftover data is being drained.
2011-04-08 15:44:47 +01:00
Mark Nauwelaerts
48b4912c2e baseparse: add timestamp handling, and default conversion
In particular, (optionally) provide baseparse with a notion of frames per second
(and therefore also frame duration) and have it track frame and byte counts.
This way, subclass can provide baseparse with fps and have it provide default
buffer time metadata and conversions, though subclass can still install
callbacks to handle such itself.
2011-04-08 15:44:47 +01:00
Mark Nauwelaerts
899a6de75b baseparse: documentation fixes 2011-04-08 15:44:47 +01:00
Mark Nauwelaerts
14a3a9f42a baseparse: use_fixed_caps for src pad
After all, stream is as-is, and there is little molding to downstream's
taste that can be done.  If subclass can and wants to do so, it can
still override as such.
2011-04-08 15:44:47 +01:00
Julien Moutte
9f5bb92e74 aacparse: Fix compilation warnings 2011-04-08 15:44:47 +01:00
Josep Torra
3803cc4411 aacparse: fix warnings in macosx snow leopard 2011-04-08 15:44:47 +01:00
Mark Nauwelaerts
deb9e7bb30 aacparse: forego (bogus) parsing of already parsed (raw) input 2011-04-08 15:44:47 +01:00
Mark Nauwelaerts
d6d066892e baseparse: prevent infinite loop when draining 2011-04-08 15:44:47 +01:00
Mark Nauwelaerts
569064282c baseparse: fix minor memory leak 2011-04-08 15:44:47 +01:00
Sebastian Dröge
bd50c29658 aacparse: Add function for the baseparse subclass to push buffers downstream
Also handle the case gracefully where the subclass decides to drop
the first buffers and has no caps set yet. It's still required to
have valid caps set when the first buffer should be passed downstream.
2011-04-08 15:44:47 +01:00
Sebastian Dröge
2e4ed802a7 baseparse: Fix seek event leaking 2011-04-08 15:44:47 +01:00
Tim-Philipp Müller
d49e8731c0 baseparse: propagate return value of GstBaseParse::set_sink_caps()
gst_base_parse_sink_setcaps() presumably should fail if the subclass
returns FALSE from its ::set_sink_caps() function.
2011-04-08 15:44:47 +01:00
Tim-Philipp Müller
09243a12bd baseparse: don't try to GST_LOG an already-freed caps string
The proper way to log caps is via GST_PTR_FORMAT anyway.
2011-04-08 15:44:46 +01:00
Mark Nauwelaerts
56605e51a7 baseparse: fix debug category 2011-04-08 15:44:46 +01:00
Mark Nauwelaerts
ae1956092f baseparse: fix (regression in) newsegment handling
(aacparse, amrparse, flacparse).  Fixes #580133.
2011-04-08 15:44:46 +01:00
René Stadler
922c644bf3 baseparse: Fix slightly broken buffer-in-segment check (aacparse, amrparse, flacparse) 2011-04-08 15:44:46 +01:00
René Stadler
da8fb9be91 baseparse: Fix push mode seeking (aacparse, amrparse)
Sending the flush-start event forward before taking the stream lock actually
works, in contrast to deadlocking in downstream preroll_wait (hunk 1).

After that we get the chain function being stuck in a busy loop. This is fixed
by updating the minimum frame size inside the synchronization loop because the
subclass asks for more data in this way (hunk 2).

Finally, this leads to a very probable crash because the subclass can find a
valid frame with a size greater than the currently available data in the
adapter. This makes the subsequent gst_adapter_take_buffer call return NULL,
which is not expected (hunk 3).
2011-04-08 15:44:46 +01:00
Mark Nauwelaerts
1b93e8ec03 baseparse: Delay newsegment as long as possible.
If newsegment is sent (too) early, caps may not yet be fixed/set,
and downstream may not have been linked.
2011-04-08 15:44:46 +01:00