annotate matroska.c @ 5332:ff45ef768724 libavformat

compute codec bitrate in mov demuxer, patch by haim alon, haim dot alter at gmail dot com
author bcoudurier
date Sat, 24 Oct 2009 20:40:00 +0000
parents 75909b3e57c2
children 952c315e58b5
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},
93ffcd9d826f add support for Matroska subtitle tracks
aurel
parents: 2144
diff changeset
61
4086
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
62 {"V_DIRAC" , CODEC_ID_DIRAC},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
63 {"V_MJPEG" , CODEC_ID_MJPEG},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
64 {"V_MPEG1" , CODEC_ID_MPEG1VIDEO},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
65 {"V_MPEG2" , CODEC_ID_MPEG2VIDEO},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
66 {"V_MPEG4/ISO/ASP" , CODEC_ID_MPEG4},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
67 {"V_MPEG4/ISO/AP" , CODEC_ID_MPEG4},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
68 {"V_MPEG4/ISO/SP" , CODEC_ID_MPEG4},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
69 {"V_MPEG4/ISO/AVC" , CODEC_ID_H264},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
70 {"V_MPEG4/MS/V3" , CODEC_ID_MSMPEG4V3},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
71 {"V_REAL/RV10" , CODEC_ID_RV10},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
72 {"V_REAL/RV20" , CODEC_ID_RV20},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
73 {"V_REAL/RV30" , CODEC_ID_RV30},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
74 {"V_REAL/RV40" , CODEC_ID_RV40},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
75 {"V_SNOW" , CODEC_ID_SNOW},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
76 {"V_THEORA" , CODEC_ID_THEORA},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
77 {"V_UNCOMPRESSED" , CODEC_ID_RAWVIDEO},
722d6aed4828 matroska: sort codec tags list
aurel
parents: 4085
diff changeset
78
2905
616fb87724b5 Make ff_mkv_codec_tags lie entirely in .rodata section.
aurel
parents: 2873
diff changeset
79 {"" , CODEC_ID_NONE}
1024
144729fd2d6c cleanup codec_id mapping (untested)
michael
parents: 1021
diff changeset
80 };
2973
910ac68ab3b5 Add support for Matroska attachments.
aurel
parents: 2905
diff changeset
81
910ac68ab3b5 Add support for Matroska attachments.
aurel
parents: 2905
diff changeset
82 const CodecMime ff_mkv_mime_tags[] = {
910ac68ab3b5 Add support for Matroska attachments.
aurel
parents: 2905
diff changeset
83 {"text/plain" , CODEC_ID_TEXT},
910ac68ab3b5 Add support for Matroska attachments.
aurel
parents: 2905
diff changeset
84 {"image/gif" , CODEC_ID_GIF},
910ac68ab3b5 Add support for Matroska attachments.
aurel
parents: 2905
diff changeset
85 {"image/jpeg" , CODEC_ID_MJPEG},
910ac68ab3b5 Add support for Matroska attachments.
aurel
parents: 2905
diff changeset
86 {"image/png" , CODEC_ID_PNG},
910ac68ab3b5 Add support for Matroska attachments.
aurel
parents: 2905
diff changeset
87 {"image/tiff" , CODEC_ID_TIFF},
910ac68ab3b5 Add support for Matroska attachments.
aurel
parents: 2905
diff changeset
88 {"application/x-truetype-font", CODEC_ID_TTF},
910ac68ab3b5 Add support for Matroska attachments.
aurel
parents: 2905
diff changeset
89 {"application/x-font" , CODEC_ID_TTF},
910ac68ab3b5 Add support for Matroska attachments.
aurel
parents: 2905
diff changeset
90
910ac68ab3b5 Add support for Matroska attachments.
aurel
parents: 2905
diff changeset
91 {"" , CODEC_ID_NONE}
910ac68ab3b5 Add support for Matroska attachments.
aurel
parents: 2905
diff changeset
92 };
4618
5b9eddbee9c4 Add some basic metadata conversion tables for matroska and asf.
aurel
parents: 4086
diff changeset
93
5b9eddbee9c4 Add some basic metadata conversion tables for matroska and asf.
aurel
parents: 4086
diff changeset
94 const AVMetadataConv ff_mkv_metadata_conv[] = {
5b9eddbee9c4 Add some basic metadata conversion tables for matroska and asf.
aurel
parents: 4086
diff changeset
95 { "ARTIST" , "artist" },
5b9eddbee9c4 Add some basic metadata conversion tables for matroska and asf.
aurel
parents: 4086
diff changeset
96 { "LEAD_PERFORMER", "artist" },
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 };