Commit graph

108 commits

Author SHA1 Message Date
Stefan Kost
fcc3db73a3 flvdemux: merge flvparse into the demuxer and make function static
No need to hide certain function in the docs. Allows to do more cleanups.
2010-04-08 14:29:59 +03:00
Mark Nauwelaerts
2d6d2a4d95 flvdemux: remove obsolete reverse playback code path 2010-04-01 10:46:16 +02:00
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
Benjamin Otte
3f511ec361 Add -Wwrite-strings to the configure flags
... and fix all warnings
2010-03-21 14:17:47 +01:00
Jan Urbański
7d32f46b7a flvmux: put more information in the metadata
Additional tags are: audiocodecid, videocodecid framerate and (in the
non-live case) filesize.

While at it, fix index rewriting to update duration and filesize
values even if the index is empty.

Fixes #613094.
2010-03-18 10:00:58 +01:00
Jan Urbański
dcb5afd351 flvmux: Put width and height in the metadata
Some players use that info to scale their display.

See #613094.
2010-03-17 09:28:03 +01:00
Jan Urbański
96de71d74b flvmux: don't put timestamps larger than G_MAXINT32 in the FLV tags
For non-live input respond by pushing EOS, for live wrap the
timestamps every G_MAXINT32 miliseconds.

Fixes #613003.
2010-03-17 09:24:49 +01:00
Jan Urbański
a99ee96172 flvmux: Always put a duration tag in the metadata
Some Flash players (for instance JW Player) always expect a duration
tag, otherwise they don't start playback.

If duration can be queried from the sink pads or is provided as a tag,
use it. Otherwise try to determine it from the last seen timestamp of
the sink pads after EOS and rewrite it in the header before writing
the index.
2010-03-16 15:12:46 +01:00
Jan Urbański
ef8f7614ff flvmux: Remove the send_codec_data field from GstFlvPad
That field is not used anymore after the changes in
9fdecbc1c1.
2010-03-16 15:12:46 +01:00
Jan Urbański
c69c5cb0d7 flvmux: Correctly mark buffers as delta units
Mark video interframes, video codec data buffers and audio buffers (if
it's not an audio-only stream) as delta units.
2010-03-15 13:54:39 +01:00
Jan Urbański
9fdecbc1c1 flvmux: Support streamheaders
Put the FLV header, the metadata tag and (if present) codec
information in the streamheader to allow the muxer to be used for
streaming.
2010-03-15 13:53:53 +01:00
Jan Urbański
7deee29d2c flvmux: Preallocate index space and fill it after finishing output
Make the index appear at the beginning of the file, which is what most
players are expecting.

Fixes #601236.
2010-03-15 13:52:03 +01:00
Sebastian Dröge
7c74f7d525 flvmux: Minor coding style fixes and cleanup 2010-03-15 13:47:13 +01:00
Jan Urbański
54a8237d62 flvmux: Add a is-live property
If it is set, the muxer will not write the index. Defaults to false.
2010-03-15 13:46:09 +01:00
Jan Urbański
c9bb3edd6f flvmux: Only put valid seek points in the index
For files containing video only video keyframes are valid points to
which a player can seek. For audio-only files any tag start is a valid
seek point.

See #601236.
2010-03-15 13:45:21 +01:00
Jan Urbański
b21c5c9015 flvmux: Fix index building to make entries point to tag's start offset
Previous coding was wrongly incrementing the total byte count before
adding an index entry.
2010-03-15 13:44:14 +01: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
Edward Hervey
95d087ed77 flvparse: Make script tag parsing more flexible.
* The nb_elements for arrays is just an indication, we can therefore ignore
  it and carry on parsing metadata items until we reach the end marker.
* If type == 3, then the script tag contains a list of object followed
  by the end marker.

Refactor code slightly to handle both cases

https://bugzilla.gnome.org/show_bug.cgi?id=610447
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
f23fb39bc7 flvdemux: avoid indefinite index growth
That is, check for and do not add an index entry that has already
been added.
2010-03-10 11:48:07 +01:00
Mark Nauwelaerts
f79de81bb4 flvdemux: also collect index info on-the-fly in pull mode 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
Mark Nauwelaerts
122daaf6af flvdemux: refactor adding index entry 2010-03-10 11:48:06 +01:00
Mark Nauwelaerts
6aa4d5df2d flvdemux: fix setting DELTA_UNIT flag on outgoing buffers
... which should not depend on having index available or not.
Also refactor resulting collapsed code.
2010-03-10 11:48:06 +01:00
Tim-Philipp Müller
8c46cce875 flvdemux: minor micro-optimisation
We know these values don't change during the loop, but the compiler
doesn't and has to re-check them for every iteration.
2010-02-19 12:13:08 +00:00
Tim-Philipp Müller
ec9add84a8 flvdemux: remove static keyword from variables that shouldn't be static
Multiple flvparse/flvdemux instances should be able to operate without
trampling over each other by accidentally re-using the same (static)
variables. (Spotted by Mark Nauwelaerts)
2010-02-19 12:13:07 +00:00
Edward Hervey
fa0e3184dd flvdemux: Audio tags without any content are valid.
We silently ignore them instead of erroring out.
2010-02-13 18:18:42 +01:00
Edward Hervey
817911664e flvdemux: Fix GST_CLOCK_DIFF usage.
It was previously checking for DIFF(a, b > 6 * GST_SECOND) instead of
the proper DIFF(a,b) > 6 * GST_SECOND
2010-02-13 18:07:50 +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
Edward Hervey
0dd06da5e8 flvdemux: Speedup GstIndex usage
Used the _add_associationv variant of GstIndex since we know how many
associations we're adding. Trims up to 50% from index generation time.

Note : It would be great if the index could be generated on the fly or
on request as opposed to being fully created at startup.
2010-02-13 14:57:59 +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
Wim Taymans
1f9c39da2a flvparse: fix confusing debug messages 2010-02-12 13:53:58 +01:00
Robert Swain
f9bf5970a3 flvmux: index timestamps should be in seconds, not milliseconds 2010-01-27 20:24:41 +01:00
Jan Urbański
dd82612340 flvmux: properly finish the ECMA array
The ECMA array with the file index was missing a mandatory end marker.
Fixes bug #601242.
2009-11-18 08:03:43 +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
Alessandro Decina
195883b30a Fix compile warnings with gcc 4.0.1. 2009-09-22 15:04:36 +02:00
Stefan Kost
272683ff36 flvmux: fully use tagsetter to manage the tags. Fixes #563221
There is no need to manage a separate taglist.
2009-09-03 14:48:14 +03: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
8b9d547c14 flvmux: Fix writing of the index for < 128 buffers
Partially fixes bug #590447.
2009-08-03 20:08:00 +02:00
Sebastian Dröge
cb4eb5714c flvmux: Fix resetting of the element
Reset the have_video/have_audio flags and make sure to
properly release the request pads.

Partially fixes bug #590447.
2009-08-03 20:07:00 +02:00
Tim-Philipp Müller
93690bfdd6 flvmux: fix invalid write caused by using sizeof("string") as length
sizeof("foo") includes the string's NUL-terminator in the size returned,
but we're writing strings here with an explicit size at the beginning
and no NUL-terminator. In most cases using sizeof("foo") as length in
memcpy is not harmful, but it is where the string goes right at the
end of our buffer to write, since we don't allocate space for that
NUL terminator.
2009-07-31 23:54:47 +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
32a3d6e717 flvparse: Add missing break in switch/case. 2009-06-25 08:11:09 +02:00
Edward Hervey
67ca4c57b1 flvdemux: Remove unused variable, hint branch likeliness, add comments. 2009-06-25 08:10:38 +02:00
Sebastian Dröge
cf60de4875 flvmux: Get the max duration from upstream if there's no duration tag 2009-05-22 19:41:58 +02:00
Sebastian Dröge
22d95bfc09 flvmux: Write an index table to the end of the file 2009-05-22 19:41:58 +02:00