FFmpeg
matroska.c
Go to the documentation of this file.
1 /*
2  * Matroska common data
3  * Copyright (c) 2003-2004 The FFmpeg project
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 #include "libavutil/stereo3d.h"
23 
24 #include "matroska.h"
25 
26 /* If you add a tag here that is not in ff_codec_bmp_tags[]
27  or ff_codec_wav_tags[], add it also to additional_audio_tags[]
28  or additional_video_tags[] in matroskaenc.c */
30  {"A_AAC" , AV_CODEC_ID_AAC},
31  {"A_AC3" , AV_CODEC_ID_AC3},
32  {"A_ALAC" , AV_CODEC_ID_ALAC},
33  {"A_DTS" , AV_CODEC_ID_DTS},
34  {"A_EAC3" , AV_CODEC_ID_EAC3},
35  {"A_FLAC" , AV_CODEC_ID_FLAC},
36  {"A_MLP" , AV_CODEC_ID_MLP},
37  {"A_MPEG/L2" , AV_CODEC_ID_MP2},
38  {"A_MPEG/L1" , AV_CODEC_ID_MP1},
39  {"A_MPEG/L3" , AV_CODEC_ID_MP3},
40  {"A_OPUS" , AV_CODEC_ID_OPUS},
41  {"A_OPUS/EXPERIMENTAL",AV_CODEC_ID_OPUS},
42  {"A_PCM/FLOAT/IEEE" , AV_CODEC_ID_PCM_F32LE},
43  {"A_PCM/FLOAT/IEEE" , AV_CODEC_ID_PCM_F64LE},
44  {"A_PCM/INT/BIG" , AV_CODEC_ID_PCM_S16BE},
45  {"A_PCM/INT/BIG" , AV_CODEC_ID_PCM_S24BE},
46  {"A_PCM/INT/BIG" , AV_CODEC_ID_PCM_S32BE},
47  {"A_PCM/INT/LIT" , AV_CODEC_ID_PCM_S16LE},
48  {"A_PCM/INT/LIT" , AV_CODEC_ID_PCM_S24LE},
49  {"A_PCM/INT/LIT" , AV_CODEC_ID_PCM_S32LE},
50  {"A_PCM/INT/LIT" , AV_CODEC_ID_PCM_U8},
51  {"A_QUICKTIME/QDMC" , AV_CODEC_ID_QDMC},
52  {"A_QUICKTIME/QDM2" , AV_CODEC_ID_QDM2},
53  {"A_REAL/14_4" , AV_CODEC_ID_RA_144},
54  {"A_REAL/28_8" , AV_CODEC_ID_RA_288},
55  {"A_REAL/ATRC" , AV_CODEC_ID_ATRAC3},
56  {"A_REAL/COOK" , AV_CODEC_ID_COOK},
57  {"A_REAL/SIPR" , AV_CODEC_ID_SIPR},
58  {"A_TRUEHD" , AV_CODEC_ID_TRUEHD},
59  {"A_TTA1" , AV_CODEC_ID_TTA},
60  {"A_VORBIS" , AV_CODEC_ID_VORBIS},
61  {"A_WAVPACK4" , AV_CODEC_ID_WAVPACK},
62 
63  {"D_WEBVTT/SUBTITLES" , AV_CODEC_ID_WEBVTT},
64  {"D_WEBVTT/CAPTIONS" , AV_CODEC_ID_WEBVTT},
65  {"D_WEBVTT/DESCRIPTIONS", AV_CODEC_ID_WEBVTT},
66  {"D_WEBVTT/METADATA" , AV_CODEC_ID_WEBVTT},
67 
68  {"S_TEXT/UTF8" , AV_CODEC_ID_SUBRIP},
69  {"S_TEXT/UTF8" , AV_CODEC_ID_TEXT},
70  {"S_TEXT/ASCII" , AV_CODEC_ID_TEXT},
71  {"S_TEXT/ASS" , AV_CODEC_ID_ASS},
72  {"S_TEXT/SSA" , AV_CODEC_ID_ASS},
73  {"S_ASS" , AV_CODEC_ID_ASS},
74  {"S_SSA" , AV_CODEC_ID_ASS},
75  {"S_VOBSUB" , AV_CODEC_ID_DVD_SUBTITLE},
76  {"S_DVBSUB" , AV_CODEC_ID_DVB_SUBTITLE},
77  {"S_HDMV/PGS" , AV_CODEC_ID_HDMV_PGS_SUBTITLE},
78  {"S_HDMV/TEXTST" , AV_CODEC_ID_HDMV_TEXT_SUBTITLE},
79 
80  {"V_AV1" , AV_CODEC_ID_AV1},
81  {"V_DIRAC" , AV_CODEC_ID_DIRAC},
82  {"V_FFV1" , AV_CODEC_ID_FFV1},
83  {"V_MJPEG" , AV_CODEC_ID_MJPEG},
84  {"V_MPEG1" , AV_CODEC_ID_MPEG1VIDEO},
85  {"V_MPEG2" , AV_CODEC_ID_MPEG2VIDEO},
86  {"V_MPEG4/ISO/ASP" , AV_CODEC_ID_MPEG4},
87  {"V_MPEG4/ISO/AP" , AV_CODEC_ID_MPEG4},
88  {"V_MPEG4/ISO/SP" , AV_CODEC_ID_MPEG4},
89  {"V_MPEG4/ISO/AVC" , AV_CODEC_ID_H264},
90  {"V_MPEGH/ISO/HEVC" , AV_CODEC_ID_HEVC},
91  {"V_MPEG4/MS/V3" , AV_CODEC_ID_MSMPEG4V3},
92  {"V_PRORES" , AV_CODEC_ID_PRORES},
93  {"V_REAL/RV10" , AV_CODEC_ID_RV10},
94  {"V_REAL/RV20" , AV_CODEC_ID_RV20},
95  {"V_REAL/RV30" , AV_CODEC_ID_RV30},
96  {"V_REAL/RV40" , AV_CODEC_ID_RV40},
97  {"V_SNOW" , AV_CODEC_ID_SNOW},
98  {"V_THEORA" , AV_CODEC_ID_THEORA},
99  {"V_UNCOMPRESSED" , AV_CODEC_ID_RAWVIDEO},
100  {"V_VP8" , AV_CODEC_ID_VP8},
101  {"V_VP9" , AV_CODEC_ID_VP9},
102 
103  {"" , AV_CODEC_ID_NONE}
104 };
105 
107  {"V_VP8" , AV_CODEC_ID_VP8},
108  {"V_VP9" , AV_CODEC_ID_VP9},
109  {"V_AV1" , AV_CODEC_ID_AV1},
110 
111  {"A_VORBIS" , AV_CODEC_ID_VORBIS},
112  {"A_OPUS" , AV_CODEC_ID_OPUS},
113 
114  {"D_WEBVTT/SUBTITLES" , AV_CODEC_ID_WEBVTT},
115  {"D_WEBVTT/CAPTIONS" , AV_CODEC_ID_WEBVTT},
116  {"D_WEBVTT/DESCRIPTIONS", AV_CODEC_ID_WEBVTT},
117  {"D_WEBVTT/METADATA" , AV_CODEC_ID_WEBVTT},
118 
119  {"" , AV_CODEC_ID_NONE}
120 };
121 
123  { "LEAD_PERFORMER", "performer" },
124  { "PART_NUMBER" , "track" },
125  { 0 }
126 };
127 
129  "mono",
130  "left_right",
131  "bottom_top",
132  "top_bottom",
133  "checkerboard_rl",
134  "checkerboard_lr",
135  "row_interleaved_rl",
136  "row_interleaved_lr",
137  "col_interleaved_rl",
138  "col_interleaved_lr",
139  "anaglyph_cyan_red",
140  "right_left",
141  "anaglyph_green_magenta",
142  "block_lr",
143  "block_rl",
144 };
145 
147  "left",
148  "right",
149  "background",
150 };
151 
153 {
154  AVStereo3D *stereo;
155  int ret;
156 
157  stereo = av_stereo3d_alloc();
158  if (!stereo)
159  return AVERROR(ENOMEM);
160 
161  // note: the missing breaks are intentional
162  switch (stereo_mode) {
164  stereo->type = AV_STEREO3D_2D;
165  break;
167  stereo->flags |= AV_STEREO3D_FLAG_INVERT;
169  stereo->type = AV_STEREO3D_SIDEBYSIDE;
170  break;
172  stereo->flags |= AV_STEREO3D_FLAG_INVERT;
174  stereo->type = AV_STEREO3D_TOPBOTTOM;
175  break;
177  stereo->flags |= AV_STEREO3D_FLAG_INVERT;
179  stereo->type = AV_STEREO3D_CHECKERBOARD;
180  break;
182  stereo->flags |= AV_STEREO3D_FLAG_INVERT;
184  stereo->type = AV_STEREO3D_LINES;
185  break;
187  stereo->flags |= AV_STEREO3D_FLAG_INVERT;
189  stereo->type = AV_STEREO3D_COLUMNS;
190  break;
192  stereo->flags |= AV_STEREO3D_FLAG_INVERT;
195  break;
196  }
197 
199  sizeof(*stereo));
200  if (ret < 0) {
201  av_freep(&stereo);
202  return ret;
203  }
204 
205  return 0;
206 }
AV_CODEC_ID_PCM_S16LE
@ AV_CODEC_ID_PCM_S16LE
Definition: codec_id.h:301
MATROSKA_VIDEO_STEREOMODE_TYPE_ROW_INTERLEAVED_RL
@ MATROSKA_VIDEO_STEREOMODE_TYPE_ROW_INTERLEAVED_RL
Definition: matroska.h:308
AV_CODEC_ID_AC3
@ AV_CODEC_ID_AC3
Definition: codec_id.h:413
AVERROR
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_LR
@ MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_LR
Definition: matroska.h:307
AV_CODEC_ID_DIRAC
@ AV_CODEC_ID_DIRAC
Definition: codec_id.h:165
AV_CODEC_ID_RAWVIDEO
@ AV_CODEC_ID_RAWVIDEO
Definition: codec_id.h:62
AV_CODEC_ID_MPEG4
@ AV_CODEC_ID_MPEG4
Definition: codec_id.h:61
AV_CODEC_ID_RA_144
@ AV_CODEC_ID_RA_144
Definition: codec_id.h:396
AV_CODEC_ID_ALAC
@ AV_CODEC_ID_ALAC
Definition: codec_id.h:426
MATROSKA_VIDEO_STEREOMODE_TYPE_BOTH_EYES_BLOCK_LR
@ MATROSKA_VIDEO_STEREOMODE_TYPE_BOTH_EYES_BLOCK_LR
Definition: matroska.h:315
matroska.h
AVMetadataConv
Definition: metadata.h:34
AV_CODEC_ID_FLAC
@ AV_CODEC_ID_FLAC
Definition: codec_id.h:422
AV_CODEC_ID_HDMV_PGS_SUBTITLE
@ AV_CODEC_ID_HDMV_PGS_SUBTITLE
Definition: codec_id.h:514
AV_CODEC_ID_TRUEHD
@ AV_CODEC_ID_TRUEHD
Definition: codec_id.h:454
MATROSKA_VIDEO_STEREOMODE_TYPE_ROW_INTERLEAVED_LR
@ MATROSKA_VIDEO_STEREOMODE_TYPE_ROW_INTERLEAVED_LR
Definition: matroska.h:309
AV_STEREO3D_SIDEBYSIDE
@ AV_STEREO3D_SIDEBYSIDE
Views are next to each other.
Definition: stereo3d.h:67
AV_CODEC_ID_ASS
@ AV_CODEC_ID_ASS
Definition: codec_id.h:531
AV_CODEC_ID_PCM_S16BE
@ AV_CODEC_ID_PCM_S16BE
Definition: codec_id.h:302
MATROSKA_VIDEO_STEREOMODE_TYPE_MONO
@ MATROSKA_VIDEO_STEREOMODE_TYPE_MONO
Definition: matroska.h:302
AV_STEREO3D_2D
@ AV_STEREO3D_2D
Video is not stereoscopic (and metadata has to be there).
Definition: stereo3d.h:55
ff_matroska_video_stereo_mode
const char *const ff_matroska_video_stereo_mode[MATROSKA_VIDEO_STEREOMODE_TYPE_NB]
Definition: matroska.c:128
MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_RL
@ MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_RL
Definition: matroska.h:306
AV_CODEC_ID_MP3
@ AV_CODEC_ID_MP3
preferred ID for decoding MPEG audio layer 1, 2 or 3
Definition: codec_id.h:411
AV_CODEC_ID_ATRAC3
@ AV_CODEC_ID_ATRAC3
Definition: codec_id.h:441
AV_CODEC_ID_DVB_SUBTITLE
@ AV_CODEC_ID_DVB_SUBTITLE
Definition: codec_id.h:509
MatroskaVideoStereoModeType
MatroskaVideoStereoModeType
Definition: matroska.h:301
AV_CODEC_ID_SIPR
@ AV_CODEC_ID_SIPR
Definition: codec_id.h:451
AV_STEREO3D_FRAMESEQUENCE
@ AV_STEREO3D_FRAMESEQUENCE
Views are alternated temporally.
Definition: stereo3d.h:92
AV_CODEC_ID_TTA
@ AV_CODEC_ID_TTA
Definition: codec_id.h:432
AV_STEREO3D_LINES
@ AV_STEREO3D_LINES
Views are packed per line, as if interlaced.
Definition: stereo3d.h:129
stereo3d.h
AV_PKT_DATA_STEREO3D
@ AV_PKT_DATA_STEREO3D
This side data should be associated with a video stream and contains Stereoscopic 3D information in f...
Definition: packet.h:114
AV_CODEC_ID_VP9
@ AV_CODEC_ID_VP9
Definition: codec_id.h:217
AV_CODEC_ID_MP2
@ AV_CODEC_ID_MP2
Definition: codec_id.h:410
MATROSKA_VIDEO_STEREOMODE_TYPE_COL_INTERLEAVED_LR
@ MATROSKA_VIDEO_STEREOMODE_TYPE_COL_INTERLEAVED_LR
Definition: matroska.h:311
AV_CODEC_ID_H264
@ AV_CODEC_ID_H264
Definition: codec_id.h:76
ff_webm_codec_tags
const CodecTags ff_webm_codec_tags[]
Definition: matroska.c:106
AVStereo3D::flags
int flags
Additional information about the frame packing.
Definition: stereo3d.h:185
AV_CODEC_ID_WEBVTT
@ AV_CODEC_ID_WEBVTT
Definition: codec_id.h:527
MATROSKA_VIDEO_STEREOMODE_TYPE_TOP_BOTTOM
@ MATROSKA_VIDEO_STEREOMODE_TYPE_TOP_BOTTOM
Definition: matroska.h:305
AV_CODEC_ID_AV1
@ AV_CODEC_ID_AV1
Definition: codec_id.h:274
av_stream_add_side_data
int av_stream_add_side_data(AVStream *st, enum AVPacketSideDataType type, uint8_t *data, size_t size)
Wrap an existing array as stream side data.
Definition: utils.c:5525
MATROSKA_VIDEO_STEREOMODE_TYPE_BOTTOM_TOP
@ MATROSKA_VIDEO_STEREOMODE_TYPE_BOTTOM_TOP
Definition: matroska.h:304
AV_CODEC_ID_DVD_SUBTITLE
@ AV_CODEC_ID_DVD_SUBTITLE
Definition: codec_id.h:508
ff_matroska_video_stereo_plane
const char *const ff_matroska_video_stereo_plane[MATROSKA_VIDEO_STEREO_PLANE_COUNT]
Definition: matroska.c:146
AV_CODEC_ID_QDM2
@ AV_CODEC_ID_QDM2
Definition: codec_id.h:429
AV_CODEC_ID_MPEG1VIDEO
@ AV_CODEC_ID_MPEG1VIDEO
Definition: codec_id.h:50
AV_CODEC_ID_EAC3
@ AV_CODEC_ID_EAC3
Definition: codec_id.h:450
AV_CODEC_ID_AAC
@ AV_CODEC_ID_AAC
Definition: codec_id.h:412
AV_CODEC_ID_FFV1
@ AV_CODEC_ID_FFV1
Definition: codec_id.h:82
MATROSKA_VIDEO_STEREOMODE_TYPE_LEFT_RIGHT
@ MATROSKA_VIDEO_STEREOMODE_TYPE_LEFT_RIGHT
Definition: matroska.h:303
AV_CODEC_ID_PCM_S24LE
@ AV_CODEC_ID_PCM_S24LE
Definition: codec_id.h:313
AV_STEREO3D_CHECKERBOARD
@ AV_STEREO3D_CHECKERBOARD
Views are packed in a checkerboard-like structure per pixel.
Definition: stereo3d.h:104
AV_CODEC_ID_DTS
@ AV_CODEC_ID_DTS
Definition: codec_id.h:414
AV_CODEC_ID_QDMC
@ AV_CODEC_ID_QDMC
Definition: codec_id.h:460
AV_CODEC_ID_OPUS
@ AV_CODEC_ID_OPUS
Definition: codec_id.h:470
AV_CODEC_ID_RV30
@ AV_CODEC_ID_RV30
Definition: codec_id.h:117
AV_STEREO3D_FLAG_INVERT
#define AV_STEREO3D_FLAG_INVERT
Inverted views, Right/Bottom represents the left view.
Definition: stereo3d.h:167
AV_CODEC_ID_MJPEG
@ AV_CODEC_ID_MJPEG
Definition: codec_id.h:56
AV_CODEC_ID_RA_288
@ AV_CODEC_ID_RA_288
Definition: codec_id.h:397
AV_CODEC_ID_RV40
@ AV_CODEC_ID_RV40
Definition: codec_id.h:118
AV_CODEC_ID_RV10
@ AV_CODEC_ID_RV10
Definition: codec_id.h:54
AV_CODEC_ID_NONE
@ AV_CODEC_ID_NONE
Definition: codec_id.h:47
CodecTags
Definition: matroska.h:353
AV_CODEC_ID_THEORA
@ AV_CODEC_ID_THEORA
Definition: codec_id.h:79
AV_CODEC_ID_SUBRIP
@ AV_CODEC_ID_SUBRIP
Definition: codec_id.h:526
AV_STEREO3D_TOPBOTTOM
@ AV_STEREO3D_TOPBOTTOM
Views are on top of each other.
Definition: stereo3d.h:79
AV_CODEC_ID_RV20
@ AV_CODEC_ID_RV20
Definition: codec_id.h:55
AV_CODEC_ID_HEVC
@ AV_CODEC_ID_HEVC
Definition: codec_id.h:223
AV_CODEC_ID_PCM_S32BE
@ AV_CODEC_ID_PCM_S32BE
Definition: codec_id.h:310
uint8_t
uint8_t
Definition: audio_convert.c:194
ff_mkv_metadata_conv
const AVMetadataConv ff_mkv_metadata_conv[]
Definition: matroska.c:122
MATROSKA_VIDEO_STEREOMODE_TYPE_RIGHT_LEFT
@ MATROSKA_VIDEO_STEREOMODE_TYPE_RIGHT_LEFT
Definition: matroska.h:313
ret
ret
Definition: filter_design.txt:187
AVStream
Stream structure.
Definition: avformat.h:865
av_stereo3d_alloc
AVStereo3D * av_stereo3d_alloc(void)
Allocate an AVStereo3D structure and set its fields to default values.
Definition: stereo3d.c:28
AV_STEREO3D_COLUMNS
@ AV_STEREO3D_COLUMNS
Views are packed per column.
Definition: stereo3d.h:141
AVStereo3D::type
enum AVStereo3DType type
How views are packed within the video.
Definition: stereo3d.h:180
AV_CODEC_ID_TEXT
@ AV_CODEC_ID_TEXT
raw UTF-8 text
Definition: codec_id.h:510
MATROSKA_VIDEO_STEREOMODE_TYPE_COL_INTERLEAVED_RL
@ MATROSKA_VIDEO_STEREOMODE_TYPE_COL_INTERLEAVED_RL
Definition: matroska.h:310
AV_CODEC_ID_SNOW
@ AV_CODEC_ID_SNOW
Definition: codec_id.h:257
MATROSKA_VIDEO_STEREO_PLANE_COUNT
#define MATROSKA_VIDEO_STEREO_PLANE_COUNT
Definition: matroska.h:361
AV_CODEC_ID_PCM_S32LE
@ AV_CODEC_ID_PCM_S32LE
Definition: codec_id.h:309
AV_CODEC_ID_PCM_U8
@ AV_CODEC_ID_PCM_U8
Definition: codec_id.h:306
ff_mkv_stereo3d_conv
int ff_mkv_stereo3d_conv(AVStream *st, MatroskaVideoStereoModeType stereo_mode)
Definition: matroska.c:152
MATROSKA_VIDEO_STEREOMODE_TYPE_BOTH_EYES_BLOCK_RL
@ MATROSKA_VIDEO_STEREOMODE_TYPE_BOTH_EYES_BLOCK_RL
Definition: matroska.h:316
ff_mkv_codec_tags
const CodecTags ff_mkv_codec_tags[]
Definition: matroska.c:29
AV_CODEC_ID_PCM_F64LE
@ AV_CODEC_ID_PCM_F64LE
Definition: codec_id.h:324
MATROSKA_VIDEO_STEREOMODE_TYPE_NB
@ MATROSKA_VIDEO_STEREOMODE_TYPE_NB
Definition: matroska.h:317
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:35
AV_CODEC_ID_VP8
@ AV_CODEC_ID_VP8
Definition: codec_id.h:189
AV_CODEC_ID_PCM_F32LE
@ AV_CODEC_ID_PCM_F32LE
Definition: codec_id.h:322
AV_CODEC_ID_WAVPACK
@ AV_CODEC_ID_WAVPACK
Definition: codec_id.h:435
AV_CODEC_ID_COOK
@ AV_CODEC_ID_COOK
Definition: codec_id.h:430
AV_CODEC_ID_MSMPEG4V3
@ AV_CODEC_ID_MSMPEG4V3
Definition: codec_id.h:65
AV_CODEC_ID_HDMV_TEXT_SUBTITLE
@ AV_CODEC_ID_HDMV_TEXT_SUBTITLE
Definition: codec_id.h:532
AV_CODEC_ID_VORBIS
@ AV_CODEC_ID_VORBIS
Definition: codec_id.h:415
AVStereo3D
Stereo 3D type: this structure describes how two videos are packed within a single video surface,...
Definition: stereo3d.h:176
AV_CODEC_ID_MPEG2VIDEO
@ AV_CODEC_ID_MPEG2VIDEO
preferred ID for MPEG-1/2 video decoding
Definition: codec_id.h:51
AV_CODEC_ID_MP1
@ AV_CODEC_ID_MP1
Definition: codec_id.h:452
AV_CODEC_ID_PCM_S24BE
@ AV_CODEC_ID_PCM_S24BE
Definition: codec_id.h:314
AV_CODEC_ID_MLP
@ AV_CODEC_ID_MLP
Definition: codec_id.h:439
AV_CODEC_ID_PRORES
@ AV_CODEC_ID_PRORES
Definition: codec_id.h:197