Commit graph

95 commits

Author SHA1 Message Date
Mark Nauwelaerts
1c7b1d110b flvdemux: support (pull mode) negative seek rate 2010-04-01 10:46:12 +02:00
Mark Nauwelaerts
d3ae0ef71f flvdemux: also check for segment stop for non-segment-seek 2010-04-01 10:46:10 +02:00
Edward Hervey
6dfcee8fdb flvdemux: Fix printf formatting for macosx 2010-03-11 17:04:41 +01:00
Edward Hervey
8e0a8b30b8 flvdemux: Fix unitialized variables 2010-03-11 17:04:41 +01:00
Mark Nauwelaerts
1dfcc3227c flvdemux: conduct index scan in task thread
... rather than in seeking thread, which might then occupy mainloop
for some time with possible unresponsive side-effects.
2010-03-10 11:48:07 +01:00
Mark Nauwelaerts
86a1aec2c0 flvdemux: incrementally build index in pull mode
Scan for needed part upon a seek as opposed to doing a complete scan
at startup, which may take some time depending on file and/or platform.
Also accept index metadata in pull mode and peek for some metadata
at the end of the file when deemed appropriate.
2010-03-10 11:48:06 +01:00
Mark Nauwelaerts
66fabd8bfd flvdemux: some more variable cleanup 2010-03-10 11:48:06 +01:00
Edward Hervey
d263119589 flvdemux: Don't forget to reset the indexed variable when cleaning up 2010-02-13 16:27:07 +01:00
Robert Swain
bf9d8dbbdc flvdemux: Obtain the index from the end of an flv file in push mode
Allows for better support of seeking in flv files when in push mode
2010-02-12 16:25:44 +01:00
Sebastian Dröge
48b784e715 flvdemux: If there's no audio stream after 6 seconds of video signal no-more-pads
...and the other way around. Also ignore any audio/video streams that appear
after no-more-pads.

Fixes bug #597091.
2009-10-03 12:21:34 +02:00
Sebastian Dröge
f84bc538b5 flvdemux: Make sure to only signal no-more-pads a single time 2009-10-03 12:21:34 +02:00
Jan Schmidt
3f69f8d3ee flvdemux: Fix tests warning from setting a NULL index
Setting a null index in the tests was causing warnings by unreffing
NULL pointers. This is a bug exposed by a recent change in core, it
seems.
2009-08-31 12:10:05 +01:00
Sebastian Dröge
aa02444768 flvdemux: Implement SEEKING query
Also add some more query types to the answer of the query type function.

Fixes bug #589424.
2009-07-23 11:51:07 +02:00
Edward Hervey
67ca4c57b1 flvdemux: Remove unused variable, hint branch likeliness, add comments. 2009-06-25 08:10:38 +02:00
Christian Schaller
121443eba7 [MOVED FROM BAD 57/57] Add ranks to various muxers and encoders in -bad 2009-05-12 21:21:03 +02:00
Sebastian Dröge
046311d3ea [MOVED FROM BAD 50/57] flv: Add documentation to flvmux and flvdemux
Partially fixes bug #573737.
2009-05-12 21:21:01 +02:00
Julien Moutte
d759265a51 [MOVED FROM BAD 47/57] gst/flv/gstflvdemux.c: Fix non key unit seeking by always going to the previous keyframe. Mark the discont flag when ...
Original commit message from CVS:
2008-11-24  Julien Moutte  <julien@fluendo.com>

* gst/flv/gstflvdemux.c: (gst_flv_demux_find_offset),
(gst_flv_demux_handle_seek_push),
(gst_flv_demux_handle_seek_pull):
Fix non key unit seeking by always going to the previous
keyframe. Mark
the discont flag when we've moved in the file.
* gst/flv/gstflvparse.c: (gst_flv_parse_audio_negotiate): MP3
streams
are parsed already, makes autoplugged pipelines shorter.
2009-05-12 21:21:00 +02:00
Sebastian Dröge
ee53e44fd1 [MOVED FROM BAD 45/57] gst/flv/gstflvdemux.c: Implement position query in time format.
Original commit message from CVS:
* gst/flv/gstflvdemux.c: (gst_flv_demux_query):
Implement position query in time format.
2009-05-12 21:21:00 +02:00
Sebastian Dröge
b7f0ba61e4 [MOVED FROM BAD 44/57] gst/flv/: Put the GstSegment directly into the instance struct instead of allocating and free'ing it again.
Original commit message from CVS:
* gst/flv/gstflvdemux.c: (gst_flv_demux_cleanup),
(gst_flv_demux_loop), (gst_flv_demux_handle_seek_push),
(gst_flv_demux_handle_seek_pull), (gst_flv_demux_sink_event),
(gst_flv_demux_dispose), (gst_flv_demux_init):
* gst/flv/gstflvdemux.h:
* gst/flv/gstflvparse.c: (gst_flv_parse_tag_audio),
(gst_flv_parse_tag_video), (gst_flv_parse_tag_timestamp):
Put the GstSegment directly into the instance struct instead of
allocating and free'ing it again.
Push tags already if only one pad was added, no need to wait for
the second one.
When generating our index set has_video and has_audio if we find
video or audio in case the FLV header has incorrect data.
2009-05-12 21:21:00 +02:00
Sebastian Dröge
029dfc56d4 [MOVED FROM BAD 43/57] gst/flv/: Don't memcpy() all data we want to push downstream, instead just create subbuffers and push them downstream.
Original commit message from CVS:
* gst/flv/gstflvdemux.c: (gst_flv_demux_chain),
(gst_flv_demux_pull_tag), (gst_flv_demux_pull_header),
(gst_flv_demux_create_index):
* gst/flv/gstflvparse.c: (gst_flv_parse_tag_script),
(gst_flv_parse_tag_audio), (gst_flv_parse_tag_video),
(gst_flv_parse_tag_timestamp), (gst_flv_parse_tag_type),
(gst_flv_parse_header):
* gst/flv/gstflvparse.h:
Don't memcpy() all data we want to push downstream, instead just
create subbuffers and push them downstream.
Fix some minor memory leaks.
2009-05-12 21:20:59 +02:00
Sebastian Dröge
5b0cab9700 [MOVED FROM BAD 38/57] gst/flv/gstflvdemux.c: Don't post an error message on the bus if sending EOS downstream didn't work. Fixes bug #550454.
Original commit message from CVS:
* gst/flv/gstflvdemux.c: (gst_flv_demux_loop),
(gst_flv_demux_find_offset), (gst_flv_demux_handle_seek_push),
(gst_flv_demux_handle_seek_pull):
Don't post an error message on the bus if sending EOS downstream
didn't work. Fixes bug #550454.
Fix seek event handling to look at the flags of the seek event
instead of assuming some random flags, don't send segment-start
messages when operating in push mode and push seek events upstream
if we couldn't handle them.
2009-05-12 21:20:58 +02:00
Sebastian Dröge
c61d041aca [MOVED FROM BAD 37/57] gst/flv/gstflvdemux.c: Error out early if pulling a tag failed.
Original commit message from CVS:
* gst/flv/gstflvdemux.c: (gst_flv_demux_pull_tag):
Error out early if pulling a tag failed.
2009-05-12 21:20:58 +02:00
Sebastian Dröge
f945537a8a [MOVED FROM BAD 36/57] gst/flv/: In pull mode we create our own index before doing anything else and don't use the index provided by some fi...
Original commit message from CVS:
* gst/flv/gstflvdemux.c: (gst_flv_demux_create_index),
(gst_flv_demux_loop):
* gst/flv/gstflvparse.c: (gst_flv_parse_tag_script),
(gst_flv_parse_tag_audio), (gst_flv_parse_tag_video),
(gst_flv_parse_tag_timestamp):
* gst/flv/gstflvparse.h:
In pull mode we create our own index before doing anything else
and don't use the index provided by some files (which are more than
often incorrect and cause failed seeks).
For push mode we still use the index provided by the file and extend it
while doing the playback.
2009-05-12 21:20:58 +02:00
Sebastian Dröge
78c8ad8cf2 [MOVED FROM BAD 35/57] gst/flv/gstflvdemux.c: Instead of using gst_pad_event_default() use a small gst_pad_push_event() wrapper that only do...
Original commit message from CVS:
* gst/flv/gstflvdemux.c: (gst_flv_demux_push_src_event),
(gst_flv_demux_loop), (gst_flv_demux_handle_seek_pull),
(gst_flv_demux_sink_event):
Instead of using gst_pad_event_default() use a small
gst_pad_push_event() wrapper that only does what we want and is much
more simple.
2009-05-12 21:20:57 +02:00
Sebastian Dröge
5dd573262d [MOVED FROM BAD 34/57] gst/flv/gstflvdemux.*: If our index was created by the element and not provided from the outside we should destroy it...
Original commit message from CVS:
* gst/flv/gstflvdemux.c: (gst_flv_demux_change_state),
(gst_flv_demux_set_index), (gst_flv_demux_init):
* gst/flv/gstflvdemux.h:
If our index was created by the element and not provided from the
outside we should destroy it when starting a new stream to get
all old entries removed.
2009-05-12 21:20:57 +02:00
Sebastian Dröge
1b235bb8b0 [MOVED FROM BAD 33/57] gst/flv/gstflvdemux.c: Improve debugging a bit when pulling a buffer from upstream fails.
Original commit message from CVS:
* gst/flv/gstflvdemux.c: (gst_flv_demux_pull_range):
Improve debugging a bit when pulling a buffer from upstream fails.
2009-05-12 21:20:57 +02:00
Sebastian Dröge
f55a5aa024 [MOVED FROM BAD 32/57] gst/flv/: Close the currently playing segment from the streaming thread instead of the thread where the seek event is...
Original commit message from CVS:
* gst/flv/gstflvdemux.c: (gst_flv_demux_cleanup),
(gst_flv_demux_handle_seek_pull), (gst_flv_demux_dispose):
* gst/flv/gstflvdemux.h:
* gst/flv/gstflvparse.c: (gst_flv_parse_tag_audio),
(gst_flv_parse_tag_video):
Close the currently playing segment from the streaming thread
instead of the thread where the seek event is handled.
2009-05-12 21:20:57 +02:00
Sebastian Dröge
9611ec851d [MOVED FROM BAD 30/57] gst/flv/gstflvdemux.c: Fix regression of handling flow returns in pull mode.
Original commit message from CVS:
* gst/flv/gstflvdemux.c: (gst_flv_demux_pull_tag),
(gst_flv_demux_pull_header):
Fix regression of handling flow returns in pull mode.
Fixes bug #556003.
2009-05-12 21:20:56 +02:00
Sebastian Dröge
023e5ba09a [MOVED FROM BAD 27/57] gst/flv/: Get an approximate duration of the file by looking at the timestamp of the last tag in pull mode. If we get...
Original commit message from CVS:
* gst/flv/gstflvdemux.c: (gst_flv_demux_loop):
* gst/flv/gstflvparse.c: (gst_flv_parse_tag_timestamp):
* gst/flv/gstflvparse.h:
Get an approximate duration of the file by looking at the timestamp
of the last tag in pull mode. If we get (maybe better) duration from
metadata later we'll use that instead.
2009-05-12 21:20:55 +02:00
Sebastian Dröge
7f924cec59 [MOVED FROM BAD 26/57] gst/flv/gstflvdemux.c: Refactor _pull_range() logic with checks into a seperate function to make things a bit more re...
Original commit message from CVS:
* gst/flv/gstflvdemux.c: (gst_flv_demux_pull_range),
(gst_flv_demux_pull_tag), (gst_flv_demux_pull_header):
Refactor _pull_range() logic with checks into a seperate function
to make things a bit more readable.
2009-05-12 21:20:55 +02:00
Sebastian Dröge
fe312ae650 [MOVED FROM BAD 25/57] gst/flv/gstflvdemux.c: Use gst_element_class_set_details_simple().
Original commit message from CVS:
* gst/flv/gstflvdemux.c: (gst_flv_demux_chain),
(gst_flv_demux_base_init):
Use gst_element_class_set_details_simple().
If we get GST_FLOW_NOT_LINKED in the parse loop but at least
one of the pads is linked continue the loop.
2009-05-12 21:20:55 +02:00
Sebastian Dröge
1905b18a65 [MOVED FROM BAD 23/57] gst/flv/gstflvdemux.c: Go out of the parse loop as soon as we get an error instead of parsing until the GstAdapter is...
Original commit message from CVS:
* gst/flv/gstflvdemux.c: (gst_flv_demux_chain):
Go out of the parse loop as soon as we get an error instead
of parsing until the GstAdapter is empty.
Add some explanations about the header and tag size.
Don't print synchronizing message if everything is fine.
2009-05-12 21:20:54 +02:00
Sebastian Dröge
fc2adbb9a8 [MOVED FROM BAD 22/57] gst/flv/: Add first version of a FLV muxer. The only missing feature is writing of stream metadata.
Original commit message from CVS:
* gst/flv/Makefile.am:
* gst/flv/gstflvdemux.c: (plugin_init):
* gst/flv/gstflvmux.c: (gst_flv_mux_base_init),
(gst_flv_mux_class_init), (gst_flv_mux_init),
(gst_flv_mux_finalize), (gst_flv_mux_reset),
(gst_flv_mux_handle_src_event), (gst_flv_mux_handle_sink_event),
(gst_flv_mux_video_pad_setcaps), (gst_flv_mux_audio_pad_setcaps),
(gst_flv_mux_request_new_pad), (gst_flv_mux_release_pad),
(gst_flv_mux_write_header), (gst_flv_mux_write_buffer),
(gst_flv_mux_collected), (gst_flv_mux_change_state):
* gst/flv/gstflvmux.h:
Add first version of a FLV muxer. The only missing feature is writing
of stream metadata.
2009-05-12 21:20:54 +02:00
Julien Moutte
f58f138c55 [MOVED FROM BAD 21/57] gst/flv/: Introduce demuxing support for AAC and
Original commit message from CVS:
2008-06-14  Julien Moutte  <julien@fluendo.com>

* gst/flv/gstflvdemux.c: (gst_flv_demux_cleanup),
(gst_flv_demux_dispose):
* gst/flv/gstflvdemux.h:
* gst/flv/gstflvparse.c: (gst_flv_parse_audio_negotiate),
(gst_flv_parse_tag_audio), (gst_flv_parse_video_negotiate),
(gst_flv_parse_tag_video): Introduce demuxing support for AAC
and
H.264/AVC inside FLV.
* sys/dshowdecwrapper/gstdshowaudiodec.c:
(gst_dshowaudiodec_init),
(gst_dshowaudiodec_chain), (gst_dshowaudiodec_push_buffer),
(gst_dshowaudiodec_sink_event), (gst_dshowaudiodec_setup_graph):
* sys/dshowdecwrapper/gstdshowaudiodec.h:
* sys/dshowdecwrapper/gstdshowvideodec.c:
(gst_dshowvideodec_init),
(gst_dshowvideodec_sink_event), (gst_dshowvideodec_chain),
(gst_dshowvideodec_push_buffer),
(gst_dshowvideodec_src_getcaps):
* sys/dshowdecwrapper/gstdshowvideodec.h: Lot of random fixes
to improve stability (ref counting, safety checks...)
2009-05-12 21:20:54 +02:00
Wim Taymans
00be5791fe [MOVED FROM BAD 20/57] gst/flv/gstflvdemux.c: Forward unknown queries upstream instead of returning FALSE on them.
Original commit message from CVS:
* gst/flv/gstflvdemux.c: (gst_flv_demux_query):
Forward unknown queries upstream instead of returning FALSE on them.
2009-05-12 21:20:54 +02:00
Peter Kjellerstedt
ab63c48e82 [MOVED FROM BAD 10/57] gst/: Printf format fixes (#476128).
Original commit message from CVS:
Patch by: Peter Kjellerstedt  <pkj at axis com>
* gst-libs/gst/app/gstappsink.c:
* gst/flv/gstflvdemux.c:
* gst/flv/gstflvparse.c:
* gst/interleave/deinterleave.c:
* gst/switch/gstswitch.c:
Printf format fixes (#476128).
2009-05-12 21:20:51 +02:00
Julien Moutte
5a5bbae173 [MOVED FROM BAD 09/57] gst/flv/gstflvdemux.c: Make sure we initialize the seek result.
Original commit message from CVS:
2007-08-27  Julien MOUTTE  <julien@moutte.net>

* gst/flv/gstflvdemux.c: (gst_flv_demux_handle_seek_pull):
Make sure we initialize the seek result.
2009-05-12 21:20:51 +02:00
Julien Moutte
e457c4fe2a [MOVED FROM BAD 08/57] gst/flv/gstflvdemux.c: Remove some useless ifdef.
Original commit message from CVS:
2007-08-24  Julien MOUTTE  <julien@moutte.net>

* gst/flv/gstflvdemux.c: (gst_flv_demux_flush),
(gst_flv_demux_chain), (gst_flv_demux_pull_tag),
(gst_flv_demux_find_offset), (gst_flv_demux_handle_seek_push),
(gst_flv_demux_handle_seek_pull), (gst_flv_demux_sink_event),
(gst_flv_demux_src_event): Remove some useless ifdef.
2009-05-12 21:20:51 +02:00
Julien Moutte
00746d9037 [MOVED FROM BAD 07/57] gst/flv/gstflvdemux.c: Implement seeking in push mode.
Original commit message from CVS:
2007-08-24  Julien MOUTTE  <julien@moutte.net>

* gst/flv/gstflvdemux.c: (gst_flv_demux_flush),
(gst_flv_demux_cleanup), (gst_flv_demux_chain),
(gst_flv_demux_pull_tag), (gst_flv_demux_find_offset),
(gst_flv_demux_handle_seek_push),
(gst_flv_demux_handle_seek_pull),
(gst_flv_demux_sink_event), (gst_flv_demux_src_event): Implement
seeking in push mode.
* gst/flv/gstflvdemux.h:
2009-05-12 21:20:51 +02:00
Julien Moutte
5d7f2cf4fa [MOVED FROM BAD 06/57] gst/flv/: Handle pixel aspect ratio through metadata tags like ASF does. Fluendo muxer supports this and
Original commit message from CVS:
2007-08-22  Julien MOUTTE  <julien@moutte.net>

* gst/flv/gstflvdemux.c: (gst_flv_demux_cleanup),
(gst_flv_demux_pull_tag):
* gst/flv/gstflvdemux.h:
* gst/flv/gstflvparse.c: (gst_flv_parse_metadata_item),
(gst_flv_parse_tag_script), (gst_flv_parse_tag_audio),
(gst_flv_parse_tag_video): Handle pixel aspect ratio through
metadata tags like ASF does. Fluendo muxer supports this and
Flash players can support it as well this way.
2009-05-12 21:20:50 +02:00
Julien Moutte
8f0627ea08 [MOVED FROM BAD 05/57] gst/flv/: Make sure we don't try filling up the index if no times object was parsed. Fix the way we decide to push ta...
Original commit message from CVS:
2007-08-22  Julien MOUTTE  <julien@moutte.net>

* gst/flv/gstflvdemux.c: (gst_flv_demux_pull_tag):
* gst/flv/gstflvparse.c: (gst_flv_parse_metadata_item),
(gst_flv_parse_tag_script), (gst_flv_parse_tag_audio),
(gst_flv_parse_tag_video): Make sure we don't try filling up the
index if no times object was parsed. Fix the way we decide to
push
tags and emit no-more-pads. Fix some printf typing in debugging.
2009-05-12 21:20:50 +02:00
Wim Taymans
d83e2e9292 [MOVED FROM BAD 04/57] gst/flv/gstflvdemux.c: Fix locking and refcounting on the index.
Original commit message from CVS:
* gst/flv/gstflvdemux.c: (gst_flv_demux_set_index),
(gst_flv_demux_get_index):
Fix locking and refcounting on the index.
2009-05-12 21:20:50 +02:00
Julien Moutte
c3228fbb67 [MOVED FROM BAD 03/57] gst/flv/gstflvdemux.c: First method for seeking in pull mode using the index built step by step or coming from metadata.
Original commit message from CVS:
2007-08-14  Julien MOUTTE  <julien@moutte.net>

* gst/flv/gstflvdemux.c: (gst_flv_demux_cleanup),
(gst_flv_demux_adapter_flush), (gst_flv_demux_chain),
(gst_flv_demux_pull_tag), (gst_flv_demux_do_seek),
(gst_flv_demux_handle_seek), (gst_flv_demux_sink_event),
(gst_flv_demux_src_event), (gst_flv_demux_query),
(gst_flv_demux_change_state), (gst_flv_demux_set_index),
(gst_flv_demux_get_index), (gst_flv_demux_dispose),
(gst_flv_demux_class_init): First method for seeking in pull
mode using the index built step by step or coming from metadata.
* gst/flv/gstflvdemux.h:
* gst/flv/gstflvparse.c: (FLV_GET_STRING),
(gst_flv_parse_metadata_item), (gst_flv_parse_tag_script),
(gst_flv_parse_tag_audio), (gst_flv_parse_tag_video): Parse
more metadata types and keyframes index.
2009-05-12 21:20:50 +02:00
Julien Moutte
11e27e7856 [MOVED FROM BAD 02/57] gst/flv/: Handle not linked pads, try to make it reusable, more safety checks.
Original commit message from CVS:
2007-07-25  Julien MOUTTE  <julien@moutte.net>

(gst_flv_demux_chain), (gst_flv_demux_pull_tag),
(gst_flv_demux_change_state), (gst_flv_demux_dispose),
(gst_flv_demux_init):
* gst/flv/gstflvdemux.h:
* gst/flv/gstflvparse.c: (FLV_GET_STRING),
(gst_flv_parse_metadata_item), (gst_flv_parse_tag_script),
(gst_flv_parse_tag_audio), (gst_flv_parse_tag_video),
(gst_flv_parse_header):
* gst/flv/gstflvparse.h: Handle not linked pads, try to make it
reusable, more safety checks.
2009-05-12 21:20:49 +02:00
Julien Moutte
7a0d2df294 [MOVED FROM BAD 01/57] Adds a first draft of an FLV demuxer.
Original commit message from CVS:
2007-07-19  Julien MOUTTE  <julien@moutte.net>

* configure.ac:
* gst/flv/Makefile.am:
* gst/flv/gstflvdemux.c: (gst_flv_demux_flush),
(gst_flv_demux_cleanup), (gst_flv_demux_chain),
(gst_flv_demux_pull_tag), (gst_flv_demux_pull_header),
(gst_flv_demux_seek_to_prev_keyframe), (gst_flv_demux_loop),
(gst_flv_demux_sink_activate),
(gst_flv_demux_sink_activate_push),
(gst_flv_demux_sink_activate_pull), (gst_flv_demux_sink_event),
(gst_flv_demux_change_state), (gst_flv_demux_dispose),
(gst_flv_demux_base_init), (gst_flv_demux_class_init),
(gst_flv_demux_init), (plugin_init):
* gst/flv/gstflvdemux.h:
* gst/flv/gstflvparse.c: (FLV_GET_BEUI24), (FLV_GET_STRING),
(gst_flv_demux_query_types), (gst_flv_demux_query),
(gst_flv_parse_metadata_item), (gst_flv_parse_tag_script),
(gst_flv_parse_tag_audio), (gst_flv_parse_tag_video),
(gst_flv_parse_tag_type), (gst_flv_parse_header):
* gst/flv/gstflvparse.h: Adds a first draft of an FLV demuxer.
It does not do seeking yet, it supports pull and push mode so
YES
you can use it to play youtube videos directly from an HTTP uri.
Not so much testing done yet but it parses metadata, reply to
duration queries, etc...
2009-05-12 21:20:49 +02:00