summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demux_mkv.c
Commit message (Collapse)AuthorAgeFilesLines
* 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
| | | | | | | | | | Remove the libass/ directory and use the newest standalone version of the library instead.
* | Replace libavutil internal header #includes with MPlayer copiesUoti Urpala2009-07-261-1/+1
| | | | | | | | | | | | Change #include lines for libavutil/intreadwrite.h, libavutil/bswap.h and libavutil/x86_cpu.h to use the MPlayer file under ffmpeg_files/ instead.
* | demux_mkv.c: Make some time arithmetic more preciseUoti Urpala2009-07-101-20/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Some calculations in the demuxer that are in principle integer arithmetic use float divisions instead of 64-bit integer ones (as in (int64_t)(x / 1000000.0) ). When compiled with -ffast-math gcc replaces the division with multiplication by inverse. The calculation of the inverse can introduce rounding error even for divisions that would have been exact, and any rounding error down from an exact integer result in the division makes the result after cast one smaller. This caused some inaccuracy in seeking due to timecodes in the index not quite matching those calculated for actual packets. Add 0.5 to such expressions before casting to round instead of truncating, which should be enough to avoid the problem. Also replace some non-performance-critical use of float types by doubles.
* | demux_mkv: Round more seeks to "backwards" keyframesUoti Urpala2009-07-091-1/+1
| | | | | | | | | | | | | | | | Allow more fuzziness in treating timestamps as inaccurate attempts to seek "exactly" to a keyframe. A seek forward can now actually go to a keyframe 5 ms back from the timecode, and correspondingly for seeks backwards. Before only 1 ms was allowed. This helps with some files that have inaccurate chapter boundaries.
* | demux_mkv: Make seeks more precise in some casesUoti Urpala2009-07-091-2/+2
| | | | | | | | | | | | | | When seeking backward, after seeking to the file position specified by an index entry skip packets until the timecode of that index entry. The existence of the entry should guarantee a keyframe there before the seek target time.
* | Remove trailing whitespace from most filesUoti Urpala2009-07-071-13/+13
| |
* | Merge svn changes up to r29304Uoti Urpala2009-07-071-4/+19
|\|
| * Add standard license header to all files in libmpdemux.diego2009-05-081-4/+19
| | | | | | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29280 b3059339-0415-0410-9bf9-f77b7e298cf2
* | Translation system changes part 2: replace macros by stringsAmar Takhar2009-07-071-17/+17
| | | | | | | | | | Replace all MSGTR_ macros in the source by the corresponding English string.
* | Translation system changes part 1: wrap translated stringsAmar Takhar2009-07-071-16/+16
| | | | | | | | | | Replace mp_msg() calls which have a translated string as the format argument with mp_tmsg and add _() around all other translated strings.
* | Support chapter seeking with ordered chaptersUoti Urpala2009-04-021