summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demux_mkv.c
Commit message (Collapse)AuthorAgeFilesLines
* build: switch to libavutil bswap.h and intreadwrite.hUoti Urpala2012-02-011-11/+11
| | | | | | | | | | | | Remove the private bswap and intreadwrite.h implementations and use libavutil headers instead. Originally these headers weren't publicly installed by libavutil at all. That already changed in 2010, but the pure C bswap version in installed headers was very inefficient. That was recently (2011-12) improved and now using the public bswap version probably shouldn't cause noticeable performance problems, at least if using a new enough compiler.
* demux_mkv: avoid hang with some broken filesUoti Urpala2011-09-251-0/+4
| | | | | Return failure to open file in one case that could lead to an infinite loop with broken Matroska files before.
* demux_mkv: fix failure to open some files from 0ece360eeaf95Uoti Urpala2011-08-201-32/+23
| | | | | | | | After 0ece360eeaf95 ("demux_mkv: skip files faster in ordered chapter file search") some Matroska files failed to open. The problem was that demux_mkv_read_info() returned 0 on success, but the opening code interpreted this as a value to stop parsing further headers. Fix this and also modify some of the other return value handling.
* demux_mkv: support extradata for wavpack audio tracksUoti Urpala2011-08-201-12/+11
| | | | | | | | Export the codec private data field for WavPack and TrueHD audio tracks. At least for WavPack this is necessary to make some samples work. Also change some other cases to use the same data-copying code.
* demux_mkv: clean up audio codec handling somewhatUoti Urpala2011-08-201-91/+78
|
* demux_mkv: check for valid track in video/audio switchingUoti Urpala2011-08-201-6/+20
| | | | | | | | | | | | When switching audio or video tracks, demux_mkv only checked that the new index fell in the range corresponding to tracks existing in the file being played. However, if the demuxer can not recognize the format of a track or detects an error, some of those tracks in the file may not be exported from the demuxer and are not visible to the rest of the player. Selecting such a track would cause a crash. Add checks skip such tracks when cycling to next track and switch to nosound instead if given an explicit track number corresponding to such a track.
* demux_mkv: remove bad mkv_free() from 0ece360eeaf9Uoti Urpala2011-08-191-1/+0
| | | | | | | | demuxer.c calls demuxer->close() even if opening failed. Thus the mkv_free() call added in 0ece360eeaf95f ("demux_mkv: skip files faster in ordered chapter file search") was wrong, and could cause a crash from a double free if some data structures were allocated before the opening attempt was aborted.
* demux_mkv: skip files faster in ordered chapter file searchUoti Urpala2011-08-041-32/+50
| | | | | | | | | | | | Ordered chapter code tries opening files to find those matching the SegmentUID values specified in the timeline. Previously this scan did a full initialization of the Matroska demuxer for each file, then checked whether the UID value in the demuxer was a match. Make the scan code instead provide a list of searched-for UIDs to the demuxer open code, and make that do a comparison against the list as soon as it sees the UID in the file, aborting if there is no match. Also fix units used in "Merging timeline part" verbose message.
* bstr: rename BSTR() -> bstr()Uoti Urpala2011-07-271-2/+2
| | | | | | Rename the BSTR() function to bstr(). The former caused a conflict with some Windows OS name, and it's no longer a macro so uppercase naming is less appropriate.
* OSD: when switching sub/audio tracks show title of new trackUoti Urpala2011-07-031-0/+3
| | | | | | If the played file has per-track titles for audio and subtitles show those on the OSD when switching tracks. This changes the OSD message from 'Audio: (2) eng' to 'Audio: (2) eng ("Director's commentary")'.
* demux: use talloc for sh_* structs and "lang" fieldUoti Urpala2011-07-031-2/+2
|
* demux_mkv: support runtime video track switchingUoti Urpala2011-04-081-0/+17
| | | | | | | Add code identical to the audio case to also support switching video tracks at runtime. Patch by "Hermi".
* demux_mkv, demux_lavf: don't select initial audio trackUoti Urpala2011-04-021-28/+1
| | | | | | | | | | | | | Remove code that tries to select audio track during demuxer initialization from demux_mkv and demux_lavf. Just leave audio disabled at that point; the higher-level select_audio() function will call the demuxer to switch track later anyway. Removing this unneeded code also fixes use of these demuxers as the main demuxer with -audiofile. Before the automatic track selection would have enabled an audio track (if the file had any); as the main demuxer was not used for audio the unused packets from this enabled track would accumulate until they reached queue size limits.
* demux_mkv: fix uninitialized variableUoti Urpala2011-04-021-1/+1
| | | | | | Commit de42015a97cf296aad6307 ("demux_mkv: read tags") added code that failed to initialize a loop variable. Fix. No visible problems caused by the bug have been reported.
* demux_mkv: support Blu-ray subtitlesUoti Urpala2011-03-311-0/+2
| | | | Recognize "S_HDMV/PGS" CodecID.
* demux_mkv: simplify subtitle type recognitionUoti Urpala2011-03-311-14/+8
| | | | | Remove indirection through MATROSKA_SUBTYPE_* and instead set the per-track type field to the letter identifier used in public sh_sub.
* demux_mkv: use generic packet handling code for subtitlesUoti Urpala2011-03-311-27/+5
| | | | | | | | Duration may now be set for packet types other than subtitles; as far as I can tell nothing should care. A check requiring valid duration values for subtitles is removed, because duration may not be properly set for all bitmap subtitle types; hopefully this doesn't make the behavior with (already broken) subtitles without duration worse.
* demux_mkv: support E-AC-3 audioUoti Urpala2011-03-311-0/+3
| | | | Recognize "A_EAC3" CodecID.
* sub/OSD: move some related files to sub/Uoti Urpala2011-01-261-5/+1
|
* demux_mkv, chapters: change millisecond arithmetic to nsUoti Urpala2011-01-261-31/+27
| | | | | | | | | | | | demux_mkv kept various integer timestamps in millisecond units. Matroska timestamp arithmetic is however specified in nanoseconds (even though files typically use 1 ms precision), and using ms units instead of that only made things more complex. Based on the demux_mkv example the general demuxer-level chapter structure also used ms units. Change the demux_mkv arithmetic and demuxer chapter structures to use nanoseconds instead. This also fixes a seeking problem in demux_mkv with files using a TimecodeScale other than the usual 1000000 (confusion between ms and TimecodeScale*ns units).
* subtitles/demux: store duration instead of endpts in demux packetsUoti Urpala2011-01-181-1/+1
|
* demux_mkv: remove old code for -nocorrect-pts supportUoti Urpala2010-12-201-131/+0
| | | | | There should be no reason for anyone to use demux_mkv in -nocorrect-pts mode any more, so delete the code used for that.
* demux_mkv: fix seeks to before the first index entryUoti Urpala2010-12-201-19/+16
| | | | | | | Make seeks backward from a time before the first index entry go to the first entry instead of failing completely. This change doesn't affect behavior for most files, because seeks are clamped to 0 from below and normally files have the first index entry at 0.
* demux_mkv, ad_ffmpeg: use Matroska OutputSamplingFrequency if availableUoti Urpala2010-11-211-0/+8
| | | | | | | | | | | | | | | | | | Use the value of the OutputSamplingFrequency element instead of the SamplingFrequency element as the "container samplerate". In most cases this only removes a warning, as those typically differ for SBR AAC files and there was already a special case detecting this in ad_ffmpeg. The implementation adds a new "container_out_samplerate" field to the sh_audio struct. Reusing the existing "samplerate" field and the equivalent inside the 'wf' struct and just setting those to the new value instead would probably work (at least I'm not aware of any codec that would need the original SamplingFrequency for initialization). However using a separate field also avoids some ugliness: the 'wf' struct may not exist (though most demuxers create it), and the 'samplerate' field is overwritten to reflect the final value decided by codec when decoding is first initialized.
* demux_mkv: seek: fix bogus audio packet from earlier positionUoti Urpala2010-11-151-1/+2
| | | | | | | | | | Due to a bug created back in 2006 when SimpleBlock support was added, demux_mkv demuxed one audio packet from the initial file position after a seek, then skipped the following ones until a video keyframe was found. This wasn't very noticeable earlier, but it had bad effects after the recently added -initial-audio-sync code as the extra packet with an earlier timestamp confused timing calculations and resulted in desync after seeking. Fix.
* demux_mkv: fix minor seek problemUoti Urpala2010-11-151-1/+1
| | | | | | | | Commit fc66c94360 ("demux_mkv: seek: with no track-specific index entries use any") used uint64_t for a variable that should have been int64_t. Fix. The practical effects of this error were minor; mainly it made the player unnecessarily read the file contents between the previous index entry and the correct one when seeking.
* demux_mkv: seek: with no track-specific index entries use anyUoti Urpala2010-11-081-38/+46
| | | | | | | | | The Cue entries in typical Matroska files have information for the video track only. This caused seeks to fail when playing with -novideo, as demux_mkv tried to use audio track index entries then. Add a fallback case that uses any index entries without caring what track they're for if there are no entries specific to the track we're interested in.
* demux_mkv: fix relative seeks without indexUoti Urpala2010-11-081-3/+3
| | | | | | | | Relative seeks didn't add the current position as they should. Fix. Note that this had no effect in normal playback case even if the file had no index, because the "accurate_seek" logic at higher level would convert all commands to absolute seeks before calling demuxer level.
* demux_mkv: fix seek hang when going past end of file without indexUoti Urpala2010-11-081-0/+2
|
* demux_mkv: cleanup: separate index creation part of seekingUoti Urpala2010-11-081-59/+69
| | | | | Move the code to build an index and seek without using cue information from the file to a separate function.
* demux_mkv: fix decoded length calculation of LZO decompressionreimar2010-11-021-2/+4
| | | | git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32305 b3059339-0415-0410-9bf9-f77b7e298cf2
* demux_mkv: add some sanity checksUoti Urpala2010-11-021-16/+31
| | | | | | | | Add some checks to prevent bad files from creating arbitrarily large buffer blocks (which could result in integer overflows and memory corruption). Remove a test with little use from demux_mkv_decode(); it compared an int with size_t, and was useless on 64-bit platforms at least.
* cleanup: malloc+memset->calloc, sizeof(TYPE)->sizeof(*ptr)reimar2010-11-021-19/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Replace malloc+memset by calloc git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32181 b3059339-0415-0410-9bf9-f77b7e298cf2 Replace malloc+memset by calloc. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32182 b3059339-0415-0410-9bf9-f77b7e298cf2 Replace malloc+memset by calloc. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32183 b3059339-0415-0410-9bf9-f77b7e298cf2 Replace some sizeof(type) by sizeof(*pointer) git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32184 b3059339-0415-0410-9bf9-f77b7e298cf2 Replace malloc+memset by calloc. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32186 b3059339-0415-0410-9bf9-f77b7e298cf2 Replace malloc+memset by calloc. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32187 b3059339-0415-0410-9bf9-f77b7e298cf2 Replace malloc+memset by calloc git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32188 b3059339-0415-0410-9bf9-f77b7e298cf2 Replace sizoef(type) by sizeof(*ptrvar). Besides being consistent with FFmpeg style, this reduces the size of a patch to rename these types to not conflict with the windows.h definitions. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32189 b3059339-0415-0410-9bf9-f77b7e298cf2 Replace malloc+memset by calloc. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32191 b3059339-0415-0410-9bf9-f77b7e298cf2 Replace malloc+memset by calloc. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32192 b3059339-0415-0410-9bf9-f77b7e298cf2 Replace sizeof(type) by sizeof(*ptrvar) git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32193 b3059339-0415-0410-9bf9-f77b7e298cf2 Remove a useless cast. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32194 b3059339-0415-0410-9bf9-f77b7e298cf2 Replace sizeof(type) git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32195 b3059339-0415-0410-9bf9-f77b7e298cf2 Remove a useless cast. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32196 b3059339-0415-0410-9bf9-f77b7e298cf2 Replace several sizeof(WAVEFORMATEX) git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32197 b3059339-0415-0410-9bf9-f77b7e298cf2 Replace one more instance of sizeof(WAVEFORMATEX); fix compilation. patch by Clément Bœsch, ubitux gmail com git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32199 b3059339-0415-0410-9bf9-f77b7e298cf2 Avoid some pointless uses of sizeof() and one related cast. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32200 b3059339-0415-0410-9bf9-f77b7e298cf2 Merge one malloc() + memset() invocation into calloc(). git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32202 b3059339-0415-0410-9bf9-f77b7e298cf2 Replace malloc+memset by calloc git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32203 b3059339-0415-0410-9bf9-f77b7e298cf2 Replace sizeof(WAVEFORMATEX) occurrences. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32205 b3059339-0415-0410-9bf9-f77b7e298cf2 Replace malloc+memset by calloc. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32206 b3059339-0415-0410-9bf9-f77b7e298cf2 Replace sizeof(BITMAPINFOHEADER) git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32207 b3059339-0415-0410-9bf9-f77b7e298cf2
* demux_mkv: support V_MJPEG video tagUoti Urpala2010-10-271-0/+1
|
* demux_mkv: accept files with no doctype in EBML headerUoti Urpala2010-10-211-1/+4
| | | | | | Assume files which start with an EBML header but have no DocType element in that header have type "matroska", and attempt to play them. Reportedly some mkvmerge versions create such files.
* demux_mkv: enable automatic index generation by defaultUoti Urpala2010-06-021-1/+1
| | | | | | | | | Change demux_mkv to behave by default as it did with -idx before. The index generation code in demux_mkv linearly scans the file up to the seek timestamp (it doesn't read the whole file up front like some other demuxers do). Doing that is probably a better default for files with no index than rejecting the seek request and asking user to specify -idx.
* 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 al