annotate matroska.c @ 5747:551765b1772b libavformat

Ensure that we write clusters and blocks with known size when streaming Too many demuxers can't cope with clusters of unknown size.
author conrad
date Thu, 04 Mar 2010 08:53:14 +0000
parents 27fd77f20a89
children cf9f77508e9c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
380
9416dc106e06 matroska demuxer by ("Ronald S. Bultje" <R dot S dot Bultje at students dot uu dot nl>)
michael
parents:
diff changeset
1 /*
2142
3aa1f0f698de split some common code from the mkv demuxer that will be useful to the muxer
aurel
parents: 2023
diff changeset
2 * Matroska common data
380
9416dc106e06 matroska demuxer by ("Ronald S. Bultje" <R dot S dot Bultje at students dot uu dot nl>)
michael
parents:
diff changeset
3 * Copyright (c) 2003-2004 The ffmpeg Project
9416dc106e06 matroska demuxer by ("Ronald S. Bultje" <R dot S dot Bultje at students dot uu dot nl>)
michael
parents:
diff changeset
4 *
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1332
diff changeset
5 * This file is part of FFmpeg.
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1332
diff changeset
6 *
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1332
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
380
9416dc106e06 matroska demuxer by ("Ronald S. Bultje" <R dot S dot Bultje at students dot uu dot nl>)
michael
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
9416dc106e06 matroska demuxer by ("Ronald S. Bultje" <R dot S dot Bultje at students dot uu dot nl>)
michael
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1332
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
380
9416dc106e06 matroska demuxer by ("Ronald S. Bultje" <R dot S dot Bultje at students dot uu dot nl>)
michael
parents:
diff changeset
11 *
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1332
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
380
9416dc106e06 matroska demuxer by ("Ronald S. Bultje" <R dot S dot Bultje at students dot uu dot nl>)
michael
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9416dc106e06 matroska demuxer by ("Ronald S. Bultje" <R dot S dot Bultje at students dot uu dot nl>)
michael
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
9416dc106e06 matroska demuxer by ("Ronald S. Bultje" <R dot S dot Bultje at students dot uu dot nl>)
michael
parents:
diff changeset
15 * Lesser General Public License for more details.
9416dc106e06 matroska demuxer by ("Ronald S. Bultje" <R dot S dot Bultje at students dot uu dot nl>)
michael
parents:
diff changeset
16 *
9416dc106e06 matroska demuxer by ("Ronald S. Bultje" <R dot S dot Bultje at students dot uu dot nl>)
michael
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1332
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
896
edbe5c3717f9 Update licensing information: The FSF changed postal address.
diego
parents: 887
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
380
9416dc106e06 matroska demuxer by ("Ronald S. Bultje" <R dot S dot Bultje at students dot uu dot nl>)
michael
parents:
diff changeset
20 */
9416dc106e06 matroska demuxer by ("Ronald S. Bultje" <R dot S dot Bultje at students dot uu dot nl>)
michael
parents:
diff changeset
21
2142
3aa1f0f698de split some common code from the mkv demuxer that will be useful to the muxer
aurel
parents: 2023
diff changeset
22 #include "matroska.h"
380
9416dc106e06 matroska demuxer by ("Ronald S. Bultje" <R dot S dot Bultje at students dot uu dot nl>)
michael
parents:
diff changeset
23
2793
d5842afe8539 Make ff_mkv_codec_tags array const, it is never written.
reimar
parents: 2533
diff changeset
24 const CodecTags ff_mkv_codec_tags[]={
4086
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
25 {"A_AAC" , CODEC_ID_AAC},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
26 {"A_AC3" , CODEC_ID_AC3},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
27 {"A_DTS" , CODEC_ID_DTS},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
28 {"A_EAC3" , CODEC_ID_EAC3},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
29 {"A_FLAC" , CODEC_ID_FLAC},
4801
75909b3e57c2 matroska: add support for MLP and TRUEHD codec tags
aurel
parents: 4618
diff changeset
30 {"A_MLP" , CODEC_ID_MLP},
2279
3c02e08e7b5a use the most appropriate codec id for A_MPEG/L1 and L2
aurel
parents: 2278
diff changeset
31 {"A_MPEG/L2" , CODEC_ID_MP2},
3c02e08e7b5a use the most appropriate codec id for A_MPEG/L1 and L2
aurel
parents: 2278
diff changeset
32 {"A_MPEG/L1" , CODEC_ID_MP2},
4086
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
33 {"A_MPEG/L3" , CODEC_ID_MP3},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
34 {"A_PCM/FLOAT/IEEE" , CODEC_ID_PCM_F32LE},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
35 {"A_PCM/FLOAT/IEEE" , CODEC_ID_PCM_F64LE},
3746
d9d8ee457c22 matroska: add support for most variants of PCM
aurel
parents: 3686
diff changeset
36 {"A_PCM/INT/BIG" , CODEC_ID_PCM_S16BE},
d9d8ee457c22 matroska: add support for most variants of PCM
aurel
parents: 3686
diff changeset
37 {"A_PCM/INT/BIG" , CODEC_ID_PCM_S24BE},
d9d8ee457c22 matroska: add support for most variants of PCM
aurel
parents: 3686
diff changeset
38 {"A_PCM/INT/BIG" , CODEC_ID_PCM_S32BE},
d9d8ee457c22 matroska: add support for most variants of PCM
aurel
parents: 3686
diff changeset
39 {"A_PCM/INT/LIT" , CODEC_ID_PCM_S16LE},
d9d8ee457c22 matroska: add support for most variants of PCM
aurel
parents: 3686
diff changeset
40 {"A_PCM/INT/LIT" , CODEC_ID_PCM_S24LE},
d9d8ee457c22 matroska: add support for most variants of PCM
aurel
parents: 3686
diff changeset
41 {"A_PCM/INT/LIT" , CODEC_ID_PCM_S32LE},
d9d8ee457c22 matroska: add support for most variants of PCM
aurel
parents: 3686
diff changeset
42 {"A_PCM/INT/LIT" , CODEC_ID_PCM_U8},
4086
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
43 {"A_QUICKTIME/QDM2" , CODEC_ID_QDM2},
2144
7fe203e939e5 add support for real audio in matroska
aurel
parents: 2142
diff changeset
44 {"A_REAL/14_4" , CODEC_ID_RA_144},
7fe203e939e5 add support for real audio in matroska
aurel
parents: 2142
diff changeset
45 {"A_REAL/28_8" , CODEC_ID_RA_288},
7fe203e939e5 add support for real audio in matroska
aurel
parents: 2142
diff changeset
46 {"A_REAL/ATRC" , CODEC_ID_ATRAC3},
7fe203e939e5 add support for real audio in matroska
aurel
parents: 2142
diff changeset
47 {"A_REAL/COOK" , CODEC_ID_COOK},
7fe203e939e5 add support for real audio in matroska
aurel
parents: 2142
diff changeset
48 // {"A_REAL/SIPR" , CODEC_ID_SIPRO},
4801
75909b3e57c2 matroska: add support for MLP and TRUEHD codec tags
aurel
parents: 4618
diff changeset
49 {"A_TRUEHD" , CODEC_ID_TRUEHD},
4086
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
50 {"A_TTA1" , CODEC_ID_TTA},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
51 {"A_VORBIS" , CODEC_ID_VORBIS},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
52 {"A_WAVPACK4" , CODEC_ID_WAVPACK},
2244
93ffcd9d826f add support for Matroska subtitle tracks
aurel
parents: 2144
diff changeset
53
2278
5e5e2df75af3 reorder matroska codec tags so that the encoder picks up the appropriate tag
aurel
parents: 2264
diff changeset
54 {"S_TEXT/UTF8" , CODEC_ID_TEXT},
2244
93ffcd9d826f add support for Matroska subtitle tracks
aurel
parents: 2144
diff changeset
55 {"S_TEXT/ASCII" , CODEC_ID_TEXT},
2873
3fad6c2f343a export raw SSA tracks with their own codec ID (patch by Evgeniy Stepanov)
aurel
parents: 2793
diff changeset
56 {"S_TEXT/ASS" , CODEC_ID_SSA},
3fad6c2f343a export raw SSA tracks with their own codec ID (patch by Evgeniy Stepanov)
aurel
parents: 2793
diff changeset
57 {"S_TEXT/SSA" , CODEC_ID_SSA},
3fad6c2f343a export raw SSA tracks with their own codec ID (patch by Evgeniy Stepanov)
aurel
parents: 2793
diff changeset
58 {"S_ASS" , CODEC_ID_SSA},
3fad6c2f343a export raw SSA tracks with their own codec ID (patch by Evgeniy Stepanov)
aurel
parents: 2793
diff changeset
59 {"S_SSA" , CODEC_ID_SSA},
2244
93ffcd9d826f add support for Matroska subtitle tracks
aurel
parents: 2144
diff changeset
60 {"S_VOBSUB" , CODEC_ID_DVD_SUBTITLE},
5596
952c315e58b5 Support demuxing Blu-ray subtitles in matroska files.
cehoyos
parents: 4801
diff changeset
61 {"S_HDMV/PGS" , CODEC_ID_HDMV_PGS_SUBTITLE},
2244
93ffcd9d826f add support for Matroska subtitle tracks
aurel
parents: 2144
diff changeset
62
4086
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
63 {"V_DIRAC" , CODEC_ID_DIRAC},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
64 {"V_MJPEG" , CODEC_ID_MJPEG},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
65 {"V_MPEG1" , CODEC_ID_MPEG1VIDEO},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
66 {"V_MPEG2" , CODEC_ID_MPEG2VIDEO},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
67 {"V_MPEG4/ISO/ASP" , CODEC_ID_MPEG4},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
68 {"V_MPEG4/ISO/AP" , CODEC_ID_MPEG4},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
69 {"V_MPEG4/ISO/SP" , CODEC_ID_MPEG4},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
70 {"V_MPEG4/ISO/AVC" , CODEC_ID_H264},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
71 {"V_MPEG4/MS/V3" , CODEC_ID_MSMPEG4V3},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
72 {"V_REAL/RV10" , CODEC_ID_RV10},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
73 {"V_REAL/RV20" , CODEC_ID_RV20},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
74 {"V_REAL/RV30" , CODEC_ID_RV30},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
75 {"V_REAL/RV40" , CODEC_ID_RV40},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
76 {"V_SNOW" , CODEC_ID_SNOW},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
77 {"V_THEORA" , CODEC_ID_THEORA},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
78 {"V_UNCOMPRESSED" , CODEC_ID_RAWVIDEO},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
79
2905
616fb87724b5 Make ff_mkv_codec_tags lie entirely in .rodata section.
aurel
parents: 2873
diff changeset
80 {"" , CODEC_ID_NONE}
1024
144729fd2d6c cleanup codec_id mapping (untested)
michael
parents: 1021
diff changeset
81 };
2973
910ac68ab3b5 Add support for Matroska attachments.
aurel
parents: 2905
diff changeset
82
910ac68ab3b5 Add support for Matroska attachments.
aurel
parents: 2905
diff changeset
83 const CodecMime ff_mkv_mime_tags[] = {
910ac68ab3b5 Add support for Matroska attachments.
aurel
parents: 2905
diff changeset
84 {"text/plain" , CODEC_ID_TEXT},
910ac68ab3b5 Add support for Matroska attachments.
aurel
parents: 2905
diff changeset
85 {"image/gif" , CODEC_ID_GIF},
910ac68ab3b5 Add support for Matroska attachments.
aurel
parents: 2905
diff changeset
86 {"image/jpeg" , CODEC_ID_MJPEG},
910ac68ab3b5 Add support for Matroska attachments.
aurel
parents: 2905
diff changeset
87 {"image/png" , CODEC_ID_PNG},
910ac68ab3b5 Add support for Matroska attachments.
aurel
parents: 2905
diff changeset
88 {"image/tiff" , CODEC_ID_TIFF},
910ac68ab3b5 Add support for Matroska attachments.
aurel
parents: 2905
diff changeset
89 {"application/x-truetype-font", CODEC_ID_TTF},
910ac68ab3b5 Add support for Matroska attachments.
aurel
parents: 2905
diff changeset
90 {"application/x-font" , CODEC_ID_TTF},
910ac68ab3b5 Add support for Matroska attachments.
aurel
parents: 2905
diff changeset
91
910ac68ab3b5 Add support for Matroska attachments.
aurel
parents: 2905
diff changeset
92 {"" , CODEC_ID_NONE}
910ac68ab3b5 Add support for Matroska attachments.
aurel
parents: 2905
diff changeset
93 };
4618
5b9eddbee9c4 Add some basic metadata conversion tables for matroska and asf.
aurel
parents: 4086
diff changeset
94
5b9eddbee9c4 Add some basic metadata conversion tables for matroska and asf.
aurel
parents: 4086
diff changeset
95 const AVMetadataConv ff_mkv_metadata_conv[] = {
5618
27fd77f20a89 Add a list of generic tags and change demuxers to follow it.
pross
parents: 5596
diff changeset
96 { "LEAD_PERFORMER", "performer" },
4618
5b9eddbee9c4 Add some basic metadata conversion tables for matroska and asf.
aurel
parents: 4086
diff changeset
97 { "PART_NUMBER" , "track" },
5b9eddbee9c4 Add some basic metadata conversion tables for matroska and asf.
aurel
parents: 4086
diff changeset
98 { 0 }
5b9eddbee9c4 Add some basic metadata conversion tables for matroska and asf.
aurel
parents: 4086
diff changeset
99 };