summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demux_mkv.c
Commit message (Collapse)AuthorAgeFilesLines
* demux_mkv: fix possible seek crashUoti Urpala2010-05-311-2/+2
| | | | | | | | | Commit fc39d48465 ("demux_mkv: store streams sequentially in demuxer->[avs]_streams") had a copy-paste error causing it to look up a video ID where it should have been an audio one. The most likely visible symptom was a segfault when seeking while playing a high-numbered audio track. Looks like I was careless with that original commit, second bug in the same one...
* demux_mkv: support VP8 video tagUoti Urpala2010-05-301-0/+1
|
* demux_mkv: support WebM filesUoti Urpala2010-05-301-2/+3
| | | | Accept files with doctype "webm" in addition to "matroska".
* cosmetics: "struct vf_instance* vf" -> "struct vf_instance *vf"Uoti Urpala2010-05-291-2/+2
| | | | | | | Change 'struct vf_instance' pointer arguments to more standard style as in the subject. Also some other minor formatting fixes. Patch by Diego Biurrun.
* demux_mkv: fix realvideo extradata handlingUoti Urpala2010-05-261-2/+1
| | | | | | | | | | | | | | The code handling larger-than-minimum realvideo extradata sizes was complete nonsense. It tried to add the additional data to the exported track extradata by reading data from the input stream, which was completely bogus as this code is called long after the original Matroska track extradata information has been read. As a result the data read had nothing to do with correct values, and the read call messed up the stream position which likely broke further parsing of the file and caused complete playback failure. Change the code to instead copy any additional part at the end of input extradata to the end of output extradata. I believe this is the intended semantics, though I haven't verified it from any specs.
* demux_mkv: fix crash bug introduced by recent changeUoti Urpala2010-05-241-2/+2
| | | | | | | Commit fc39d48465 ("demux_mkv: store streams sequentially in demuxer->[avs]_streams") had a simple bug in automatic stream selection causing a crash if no video or audio track was marked as 'default'. Fix.
* demux_mkv: support switching to/from -nosoundUoti Urpala2010-05-221-18/+13
| | | | | | Allow audio stream switching to turn off sound or enable it, and also include nosound as one of the values cycled through when stepping to the next audio stream.
* demux_mkv: store streams sequentially in demuxer->[avs]_streamsUoti Urpala2010-05-221-49/+55
| | | | | | | | | demux_mkv used the Matroska TrackNumber as the array offset in demuxer stream lists. The TrackNumber entry stored in the file can be an arbitrary 64-bit value, and some of the code could try reading from the arrays with that offset, causing a crash if the file had insane values. Fill the arrays sequentially instead. Also add some checks to make the handling of too high stream counts more robust.
* demux_mkv: read tags.Anton Khirnov2010-05-221-1/+17
|
* demux: use bstr arguments for demuxer_add_attachment() and demuxer_add_chapter()Anton Khirnov2010-05-221-8/+4
|
* bstr.[ch]: add new files for struct bstr related functionalityUoti Urpala2010-05-201-2/+2
| | | | | | | | Move "struct bstr" definition from ebml.h to its own header and add some utility functions/macros. Change length field type from int to size_t and adjust using code accordingly. Partially based on a patch from Anton Khirnov.
* demux_mkv: fix verbose output of chapter numberingUoti Urpala2010-04-251-1/+1
| | | | The "Chapter N from..." lines printed with -v used wrong N.
* demux_mkv: Fix problem with compressed subtitle private dataUoti Urpala2010-03-211-10/+12
| | | | | | | Convert demux_mkv_decode() to allocate possible new storage with talloc and fix a talloc/malloc conflict in demux_mkv_open_sub() that broke decoding of files which had a subtitle track with compressed private data.
* Delete things related to old translation systemUoti Urpala2010-03-101-1/+0
| | | | | Remove the help/ subdirectory, configure code to create toplevel help_mp.h, and all the '#include "help_mp.h"' lines from .c files.
* Merge svn changes up to r30643Uoti Urpala2010-03-101-4/+1
|\
| * Add separate header for real_fix_timestamp(); avoids forward declarations.diego2010-02-171-2/+1
| | | | | | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30615 b3059339-0415-0410-9bf9-f77b7e298cf2
| * Remove one more incorrect direct ass.h include.reimar2009-12-271-1/+0
| | | | | | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30127 b3059339-0415-0410-9bf9-f77b7e298cf2
| * Avoid miscompilation issues with the grow_array function more permanentlyreimar2009-12-111-1/+1
| | | | | | | | | | | | | | by marking it noinline. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29992 b3059339-0415-0410-9bf9-f77b7e298cf2
* | demux_mkv: remove incorrect error message about compressionUoti Urpala2010-01-281-1/+1
| | | | | | | | | | | | The demuxer still printed a message about "unknown/unsupported compression algorithm (3)" even though that is now supported and in fact played fine.
* | demux_mkv: improve compression handlingUoti Urpala2010-01-271-26/+34
| | | | | | | | | | | | | | Add support for compression algorithm 3 (header stripping). Rewrite some of the code related to handling manyfold compression, it was just completely broken (I don't have samples to test whether it actually works now).
* | demux_mkv: use new EBML parser to read all track headersUoti Urpala2010-01-271-227/+135
| |
* | demux_mkv: handle compressed text subtitlesUoti Urpala2010-01-271-3/+6
| | | | | | | | | | | | | | The decompression step wasn't run at all for subtitle types other than vobsub. Fix that. Remove a "!mkv_d->v_skip_to_keyframe" test from the subtitle handling - for properly timed subtitles unnecessary packets do little harm, and the subtitles could stay visible.
* | demux_mkv: don't print errors for 0-size zlib decodingUoti Urpala2010-01-271-0/+4
| | | | | | | | | | | | Allow decoding a 0-sized buffer with zlib algorithm to produce 0-sized output. Fixes spurious errors reported with subtitle tracks marked to use compression for track private data without having any such data.
* | demux_mkv: use new EBML parser to read TrackEncodingsUoti Urpala2010-01-271-151/+67
| |
* | demux_mkv: use new EBML parser to read Video elementUoti Urpala2010-01-271-61/+33
| |
* | demux_mkv: use new EBML parser to read Audio elementUoti Urpala2010-01-271-44/+22
| |
* | demux_mkv: use new EBML parser for Info parsingUoti Urpala2010-01-271-51/+29
| |
* | demux_mkv: remove pointless 'long double' useUoti Urpala2010-01-271-3/+3
| | | | | | | | | | There was no remaining reason to use this type. The variables were assigned values with plain double precision anyway.
* | demux_mkv: use new EBML parser for chapter parsingUoti Urpala2010-01-271-198/+101
| |
* | demux_mkv: use new EBML parser for attachment parsingUoti Urpala2010-01-271-80/+21
| |
* | demux: take chapter/attachment name strings without 0-terminationUoti Urpala2010-01-271-2/+3
| | | | | | | | | | | | | | | | | | Change the demuxer_add_attachment() and demuxer_add_chapter() functions to take a length argument for various name strings, so those strings do not need to be 0-terminated. This will make it easier to directly pass demuxed data without first making a copy just to add 0-termination. Also allocate the struct demuxer data structures for attachments and chapters with talloc.
* | demux_mkv: don't stop playback on non-Cluster elementsUoti Urpala2010-01-271-2/+5
| | | | | | | | | | | | | | | | The main demuxing code signaled EOF and stopped playback if it hit a top-level element other than Cluster. There are files with other elements between Cluster ones, at least repeated copies of Track headers. Change the code to skip any non-Cluster element and only stop searching on real file EOF.
* | demux_mkv: improve Cues parsingUoti Urpala2010-01-271-65/+18
| | | | | | | | | | | | | | Rewrite Cues parsing code using the new EBML parser. The new version fixes a hang in some cases of incomplete files and supports a cuepoint specifying multiple tracks per timecode (the previous code added an index entry for the track mentioned last only).
* | demux_mkv: support reading all headers based on SeekHeadUoti Urpala2010-01-271-150/+148
| | | | | | | | | | | | | | | | Restructure the code reading toplevel header elements and rewrite the SeekHead parsing code using the new EBML parser. Now every type of header element is read anywhere in the file if there's a SeekHead entry pointing to it. The new SeekHead parsing code has more diagnostic output in case of errors.
* | demux_mkv: use new EBML parser for file headerUoti Urpala2010-01-271-5/+29
| |
* | matroska: add new parsing codeUoti Urpala2010-01-271-20/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add a new EBML parser implementation that should allow significant improvements to the Matroska demuxer. The new parsing code is not actually used yet by the demuxer. The only changes to existing code in this commit are to generate the MATROSKA_ID_* / EBML_ID_* macro definitions from the new implementation and to rename some of them (the new implementation uses names matching the official Matroska spec). The main parser implementation is added in ebml.c. There are two new generated files, ebml_defs.c and ebml_types.h, that contain definitions of EBML elements. Those are generated by the new script TOOLS/matroska.py. There's a new Makefile target "generated_ebml" that run the script to refresh the content of the generated files.
* | demux_mkv: improve seeking with generated indexUoti Urpala2010-01-011-46/+69
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When using generated index (-idx / -forceidx) the Matroska seeking code first guessed a file position using bitrate-based heuristics, then located the cluster nearest to that file position. Change it to store cluster timestamps in addition to file positions and seek to the cluster with the closest timestamp. This makes seeking with -idx a lot more accurate. This change also fixes a crash when trying to seek with generated index before playing any data from the beginning of the file (could be triggered by -idx together with ordered chapters or -ss for example). I removed the code handling MATROSKA_ID_CUES in the middle of parsing clusters. Such cue entries were not consistently handled if encountered during playback instead of index creation and the seek code was also buggy when they were encountered and parsed; i didn't consider it worth the effort to fix it.
* | demux_mkv: remove useless codeUoti Urpala2009-12-311-16/+2
| | | | | | | | | | Remove leftover code that no longer did anything useful after earlier changes.
* | demux_mkv: respect -forceidxUoti Urpala2009-12-311-1/+1
| | | | | | | | | | Don't use the index included in the file if the -forceidx option was specified.
* | demux_mkv.c, ebml.c: Reformat to K&R styleUoti Urpala2009-12-291-2232/+2037
| |
* | Support for multiple editions in MatroskaDaniel Dawson2009-12-041-27/+65
| | | | | | | | | | | | | | | | Add code to intelligently choose an appropriate Matroska edition when there are several. Will choose, in descending order of preference: the edition chosen by the user through the option "-edition <edition id>" if it exists, the first edition with EditionFlagDefault set to 1 if there is one, or the first edition.
* | demux_mkv: Detect and warn about virtual timeline nestingDaniel Dawson2009-12-041-0/+16
| | | | | | | | | | | | | | | | | | Detect use of ChapterSegmentEditionUID element in a Matroska chapter definition, indicating inclusion of an external virtual timeline, which is not yet supported. Leave the chapter is the chapter list but set segment_uid to zero. This way timeline parsing will skip the chapter and avoid nonsensical output but will still print information about missing content.
* | demux_mkv.c: Make time arithmetic more precise in one more caseUoti Urpala2009-12-021-1/+1
| | | | | | | | | | Use rounding instead of truncation in another case of double division used with integer variables.
* | demux_mkv: Stop moving FLAC extradata into stream packetsUoti Urpala2009-10-171-8/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The Matroska demuxer didn't place FLAC codec extradata in the normal extradata field but instead constructed a fake data packet and inserted that at the start of the demuxer stream. Current FFmpeg FLAC decoder can read the data from the proper extradata field too, so use that mechanism instead. This fixes a problem with files that use ordered chapters to load external segments from other files that have FLAC audio. In that case there can be a seek before the audio decoder is first initialized, and the seek will flush all stream packets so the decoder would never see the inserted extra packet. That particular issue could be fixed by initializing the decoder before any seeks instead (and there could still be other similar problem cases where doing that would be more robust), but this change is still generally right. I think the previous code would also cause problems in case there are multiple audio streams; there's only a single demuxer stream used for data packets, meaning that a packet inserted for the sake of a secondary audio stream could be read by the codec of the default stream (possibly not FLAC at all) and the packet would not be available when switching to the secondary audio stream later.
* | Merge svn changes up to r29752Uoti Urpala2009-10-061-26/+6
|\| | | | | | | | | | | | | | | | | As part of merging subtitle-in-terminal changes make update_subtitles() only clear existing subtitles if called with the reset argument, and not try to set new ones. Later calls should set the needed new subtitles, and this change avoids some problems with trying to set subtitles when mp_property_sub() in command.c gets called from initialization code before full initialization.
| * Avoid void * arithmetic.reimar2009-09-301-1/+1
| | | | | | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29740 b3059339-0415-0410-9bf9-f77b7e298cf2
| * Simplify aac_get_sample_rate_indexreimar2009-09-301-24/+4
| | | | | | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29739 b3059339-0415-0410-9bf9-f77b7e298cf2
| * Check for grow_array allocation failure.reimar2009-09-301-0/+8
| | | | | | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29738 b3059339-0415-0410-9bf9-f77b7e298cf2
| * Avoid a possible crash if num_cluster_pos is 0.reimar2009-09-301-1/+1
| | | | | | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29737 b3059339-0415-0410-9bf9-f77b7e298cf2
| * Check for integer overflow in grow_array.reimar2009-09-301-1/+4
| | | | | | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29736 b3059339-0415-0410-9bf9-f77b7e298cf2
| * Rearrange code of grow_array to make it easier to extend.reimar2009-09-301-2/+3
| | | | | | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29735 b3059339-0415-0410-9bf9-f77b7e298cf2
| * Avoid a memleak if realloc fails in grow_array.reimar2009-09-301-0/+3
| | | | | | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29734 b3059339-0415-0410-9bf9-f77b7e298cf2
| * Change grow_array argument from void ** to void *, this avoids a aliasingreimar2009-09-301-4/+5
| | | | | | | | | | | | | | | | violation (thus making gcc 4.4.x compile the code correctly) and allows to get rid of some casts at the expense of making the code less clear. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29733 b3059339-0415-0410-9bf9-f77b7e298cf2
* | demux_mkv: Fix memory leaks in attachment readingUoti Urpala2009-09-181-2/+10
| | | | | | | | | | | | | | | | When the attachment-reading code was changed to use demuxer_add_attachment it should have been changed to free its internally-allocated objects too, since demuxer_add_attachment creates copies of everything and leaves ownership of original objects to caller.
* | Merge svn changes up to r29532Uoti Urpala2009-08-181-1/+4
|\|
| * Fix incompatible pointer types warning, also seems to fix mis-compilation ↵reimar2009-08-171-2/+2
| | | | | | | | | | | | with gcc-4.4.1 git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29532 b3059339-0415-0410-9bf9-f77b7e298cf2
| * Add Dolby TrueHD support for mkv demuxer.cehoyos2009-08-131-1/+4
| | | | | | | | | | | | | | Patch by Jason Tackaberry, tack urandom ca git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29513 b3059339-0415-0410-9bf9-f77b7e298cf2
| * whitespace cosmetics: Remove all trailing whitespace.diego2009-05-131-17/+17
| | | | | | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29305 b3059339-0415-0410-9bf9-f77b7e298cf2
* | Remove internal libass treeUoti Urpala2009-07-261-2/+1
|