/src/vlc/modules/packetizer/mpeg4systems.h
Line | Count | Source (jump to first uncovered line) |
1 | | /***************************************************************************** |
2 | | * mpeg4systems.h: MPEG4 ISO-14496-1 definitions |
3 | | ***************************************************************************** |
4 | | * Copyright (C) 2001-2024 VLC authors, VideoLAN and VideoLabs |
5 | | * |
6 | | * This program is free software; you can redistribute it and/or modify it |
7 | | * under the terms of the GNU Lesser General Public License as published by |
8 | | * the Free Software Foundation; either version 2.1 of the License, or |
9 | | * (at your option) any later version. |
10 | | * |
11 | | * This program is distributed in the hope that it will be useful, |
12 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
14 | | * GNU Lesser General Public License for more details. |
15 | | * |
16 | | * You should have received a copy of the GNU Lesser General Public License |
17 | | * along with this program; if not, write to the Free Software Foundation, |
18 | | * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. |
19 | | *****************************************************************************/ |
20 | | #ifndef MP4_MPEG4SYSTEMS_H |
21 | | #define MP4_MPEG4SYSTEMS_H |
22 | | |
23 | | #include <vlc_codec.h> |
24 | | #include "dts_header.h" |
25 | | |
26 | | /* See 14496-1 and http://mp4ra.org/#/object_types */ |
27 | | |
28 | | enum MPEG4_objectTypeIndication |
29 | | { |
30 | | MPEG4_OT_FORBIDDEN = 0x00, |
31 | | MPEG4_OT_SYSTEMS_14496_1 = 0x01, |
32 | | MPEG4_OT_SYSTEMS_14496_1_BIFS_V2 = 0x02, |
33 | | MPEG4_OT_INTERACTION_STREAM = 0x03, |
34 | | MPEG4_OT_EXTENDED_BIFS_CONFIGURATION = 0x04, |
35 | | MPEG4_OT_AFX = 0x05, |
36 | | MPEG4_OT_FONT_DATA_STREAM = 0x06, |
37 | | MPEG4_OT_SYNTHESIZED_TEXTURE_STREAM = 0x07, |
38 | | MPEG4_OT_STREAMING_TEXT_STREAM = 0x08, |
39 | | MPEG4_OT_LASER_STREAM = 0x09, |
40 | | MPEG4_OT_SAF_STREAM = 0x0A, |
41 | | // RESERVED_FOR_ISO 0x0B-0x1F |
42 | | MPEG4_OT_VISUAL_ISO_IEC_14496_2 = 0x20, |
43 | | MPEG4_OT_VISUAL_ISO_IEC_14496_10_H264 = 0x21, |
44 | | MPEG4_OT_ISO_IEC_14496_10_H264_PARAMETER_SETS = 0x22, |
45 | | MPEG4_OT_VISUAL_ISO_IEC_23008_2_H265 = 0x23, |
46 | | // RESERVED_FOR_ISO 0x24-0x3F |
47 | | MPEG4_OT_AUDIO_ISO_IEC_14496_3 = 0x40, |
48 | | // RESERVED_FOR_ISO 0x41-0x5F |
49 | | MPEG4_OT_VISUAL_ISO_IEC_13818_2_SIMPLE_PROFILE = 0x60, |
50 | | MPEG4_OT_VISUAL_ISO_IEC_13818_2_MAIN_PROFILE = 0x61, |
51 | | MPEG4_OT_VISUAL_ISO_IEC_13818_2_SNR_PROFILE = 0x62, |
52 | | MPEG4_OT_VISUAL_ISO_IEC_13818_2_SPATIAL_PROFILE = 0x63, |
53 | | MPEG4_OT_VISUAL_ISO_IEC_13818_2_HIGH_PROFILE = 0x64, |
54 | | MPEG4_OT_VISUAL_ISO_IEC_13818_2_422_PROFILE = 0x65, |
55 | | MPEG4_OT_AUDIO_ISO_IEC_13818_7_MAIN_PROFILE = 0x66, |
56 | | MPEG4_OT_AUDIO_ISO_IEC_13818_7_LC_PROFILE = 0x67, |
57 | | MPEG4_OT_AUDIO_ISO_IEC_13818_7_SSR_PROFILE = 0x68, |
58 | | MPEG4_OT_AUDIO_ISO_IEC_13818_3 = 0x69, |
59 | | MPEG4_OT_VISUAL_ISO_IEC_11172_2 = 0x6A, |
60 | | MPEG4_OT_AUDIO_ISO_IEC_11172_3 = 0x6B, |
61 | | MPEG4_OT_VISUAL_ISO_IEC_10918_1_JPEG = 0x6C, |
62 | | MPEG4_OT_PORTABLE_NETWORK_GRAPHICS = 0x6D, |
63 | | MPEG4_OT_VISUAL_ISO_IEC_15444_1_JPEG2000 = 0x6E, |
64 | | // RESERVED_FOR_ISO 0x6F-0x9F |
65 | | MPEG4_OT_3GPP2_EVRC_VOICE = 0xA0, |
66 | | MPEG4_OT_3GPP2_SMV_VOICE = 0xA1, |
67 | | MPEG4_OT_3GPP2_COMPACT_MULTIMEDIA_FORMAT = 0xA2, |
68 | | MPEG4_OT_SMPTE_VC1_VIDEO = 0xA3, |
69 | | MPEG4_OT_DIRAC_VIDEO_CODER = 0xA4, |
70 | | MPEG4_OT_DEPRECATED_AC3 = 0xA5, |
71 | | MPEG4_OT_DEPRECATED_EAC3 = 0xA6, |
72 | | MPEG4_OT_DRA_AUDIO = 0xA7, |
73 | | MPEG4_OT_ITU_G719_AUDIO = 0xA8, |
74 | | MPEG4_OT_DTSHD_CORE_SUBSTREAM = 0xA9, |
75 | | MPEG4_OT_DTSHD_CORE_SUBSTREAM_PLUS_EXTENSION = 0xAA, |
76 | | MPEG4_OT_DTSHD_EXTENSION_SUBSTREAM_ONLY_XLL = 0xAB, |
77 | | MPEG4_OT_DTSHD_EXTENSION_SUBSTREAM_ONLY_LBR = 0xAC, |
78 | | MPEG4_OT_OPUS_AUDIO = 0xAD, |
79 | | MPEG4_OT_DEPRECATED_AC4 = 0xAE, |
80 | | MPEG4_OT_AURO_CX_D3_AUDIO = 0xAF, |
81 | | MPEG4_OT_REALVIDEO_CODEC_11 = 0xB0, |
82 | | MPEG4_OT_VP9_VIDEO = 0xB1, |
83 | | MPEG4_OT_DTSUHD_PROFILE_2 = 0xB2, |
84 | | MPEG4_OT_DTSUHD_PROFILE_3_OR_HIGHER = 0xB3, |
85 | | // RESERVED_FOR_REGISTRATION 0xB4-0xBF |
86 | | // USER_PRIVATE 0xC0-0xE0 |
87 | | MPEG4_OT_3GPP2_13K_VOICE = 0xE1, |
88 | | // USER_PRIVATE 0xE2-0xFE |
89 | | MPEG4_OT_NO_OBJECT_TYPE_SPECIFIED = 0xFF, |
90 | | }; |
91 | | |
92 | | enum MPEG4_streamType |
93 | | { |
94 | | MPEG4_ST_FORBIDDEN = 0x00, |
95 | | MPEG4_ST_OBJECT_DESCRIPTOR_STREAM = 0X01, |
96 | | MPEG4_ST_CLOCK_REFERENCE_STREAM = 0X02, |
97 | | MPEG4_ST_SCENE_DESCRIPTION_STREAM = 0X03, |
98 | | MPEG4_ST_VISUAL_STREAM = 0X04, |
99 | | MPEG4_ST_AUDIO_STREAM = 0X05, |
100 | | MPEG4_ST_MPEG7_STREAM = 0X06, |
101 | | MPEG4_ST_IPMP_STREAM = 0X07, |
102 | | MPEG4_ST_OBJECT_CONTENT_INFO_STREAM = 0X08, |
103 | | MPEG4_ST_MPEG_J_STREAM = 0X09, |
104 | | MPEG4_ST_INTERACTION_STREAM = 0X0A, |
105 | | MPEG4_ST_IPMP_TOOL_STREAM = 0X0B, |
106 | | MPEG4_ST_FONT_DATA_STREAM = 0X0C, |
107 | | MPEG4_ST_STREAMING_TEXT = 0X0D, |
108 | | // USER_PRIVATE 0x20-0x3F |
109 | | }; |
110 | | |
111 | | static inline bool MPEG4_get_codec_by_ObjectType(uint8_t oti, |
112 | | const uint8_t *p_dsi, |
113 | | size_t i_dsi, |
114 | | vlc_fourcc_t *pi_codec, |
115 | | int *pi_profile) |
116 | 261 | { |
117 | 261 | switch(oti) |
118 | 261 | { |
119 | 2 | case MPEG4_OT_VISUAL_ISO_IEC_14496_2: /* MPEG4 VIDEO */ |
120 | 2 | *pi_codec = VLC_CODEC_MP4V; |
121 | 2 | break; |
122 | 8 | case MPEG4_OT_VISUAL_ISO_IEC_14496_10_H264: /* H.264 */ |
123 | 8 | *pi_codec = VLC_CODEC_H264; |
124 | 8 | break; |
125 | 5 | case MPEG4_OT_VISUAL_ISO_IEC_23008_2_H265: /* H.265 */ |
126 | 5 | *pi_codec = VLC_CODEC_HEVC; |
127 | 5 | break; |
128 | 0 | case 0x33: /* H.266 */ |
129 | 0 | *pi_codec = VLC_CODEC_VVC; |
130 | 0 | break; |
131 | 206 | case MPEG4_OT_AUDIO_ISO_IEC_14496_3: |
132 | 210 | case 0x41: |
133 | 210 | *pi_codec = VLC_CODEC_MP4A; |
134 | 210 | if(i_dsi >= 2 && p_dsi[0] == 0xF8 && (p_dsi[1]&0xE0)== 0x80) |
135 | 1 | *pi_codec = VLC_CODEC_ALS; |
136 | 210 | break; |
137 | | /* MPEG2 video */ |
138 | 1 | case MPEG4_OT_VISUAL_ISO_IEC_13818_2_SIMPLE_PROFILE: |
139 | 2 | case MPEG4_OT_VISUAL_ISO_IEC_13818_2_MAIN_PROFILE: |
140 | 2 | case MPEG4_OT_VISUAL_ISO_IEC_13818_2_SNR_PROFILE: |
141 | 3 | case MPEG4_OT_VISUAL_ISO_IEC_13818_2_SPATIAL_PROFILE: |
142 | 4 | case MPEG4_OT_VISUAL_ISO_IEC_13818_2_HIGH_PROFILE: |
143 | 5 | case MPEG4_OT_VISUAL_ISO_IEC_13818_2_422_PROFILE: |
144 | 5 | *pi_codec = VLC_CODEC_MPGV; |
145 | 5 | break; |
146 | | /* Theses are MPEG2-AAC */ |
147 | 1 | case MPEG4_OT_AUDIO_ISO_IEC_13818_7_MAIN_PROFILE: /* main profile */ |
148 | 2 | case MPEG4_OT_AUDIO_ISO_IEC_13818_7_LC_PROFILE: /* Low complexity profile */ |
149 | 4 | case MPEG4_OT_AUDIO_ISO_IEC_13818_7_SSR_PROFILE: /* Scalable Sampling rate profile */ |
150 | 4 | *pi_codec = VLC_CODEC_MP4A; |
151 | 4 | break; |
152 | | /* True MPEG 2 audio */ |
153 | 2 | case MPEG4_OT_AUDIO_ISO_IEC_13818_3: |
154 | 2 | *pi_codec = VLC_CODEC_MPGA; |
155 | 2 | break; |
156 | 0 | case MPEG4_OT_VISUAL_ISO_IEC_11172_2: /* MPEG1 video */ |
157 | 0 | *pi_codec = VLC_CODEC_MPGV; |
158 | 0 | break; |
159 | 4 | case MPEG4_OT_AUDIO_ISO_IEC_11172_3: /* MPEG1 audio */ |
160 | 4 | *pi_codec = VLC_CODEC_MPGA; |
161 | 4 | break; |
162 | 3 | case MPEG4_OT_VISUAL_ISO_IEC_10918_1_JPEG: /* jpeg */ |
163 | 3 | *pi_codec = VLC_CODEC_JPEG; |
164 | 3 | break; |
165 | 1 | case MPEG4_OT_PORTABLE_NETWORK_GRAPHICS: /* png */ |
166 | 1 | *pi_codec = VLC_CODEC_PNG; |
167 | 1 | break; |
168 | 3 | case MPEG4_OT_VISUAL_ISO_IEC_15444_1_JPEG2000: /* jpeg2000 */ |
169 | 3 | *pi_codec = VLC_FOURCC('M','J','2','C'); |
170 | 3 | break; |
171 | 2 | case MPEG4_OT_SMPTE_VC1_VIDEO: /* vc-1 */ |
172 | 2 | *pi_codec = VLC_CODEC_VC1; |
173 | 2 | break; |
174 | 1 | case MPEG4_OT_DIRAC_VIDEO_CODER: |
175 | 1 | *pi_codec = VLC_CODEC_DIRAC; |
176 | 1 | break; |
177 | 1 | case MPEG4_OT_DEPRECATED_AC3: |
178 | 1 | *pi_codec = VLC_CODEC_A52; |
179 | 1 | break; |
180 | 1 | case MPEG4_OT_DEPRECATED_EAC3: |
181 | 1 | *pi_codec = VLC_CODEC_EAC3; |
182 | 1 | break; |
183 | 1 | case MPEG4_OT_DTSHD_CORE_SUBSTREAM: /* DTS */ |
184 | 1 | *pi_codec = VLC_CODEC_DTS; |
185 | 1 | break; |
186 | 1 | case MPEG4_OT_DTSHD_CORE_SUBSTREAM_PLUS_EXTENSION: /* DTS-HD HRA */ |
187 | 2 | case MPEG4_OT_DTSHD_EXTENSION_SUBSTREAM_ONLY_XLL: /* DTS-HD Master Audio */ |
188 | 2 | *pi_profile = PROFILE_DTS_HD; |
189 | 2 | *pi_codec = VLC_CODEC_DTS; |
190 | 2 | break; |
191 | 1 | case MPEG4_OT_DTSHD_EXTENSION_SUBSTREAM_ONLY_LBR: |
192 | 1 | *pi_profile = PROFILE_DTS_EXPRESS; |
193 | 1 | *pi_codec = VLC_CODEC_DTS; |
194 | 1 | break; |
195 | 1 | case MPEG4_OT_OPUS_AUDIO: |
196 | 1 | *pi_codec = VLC_CODEC_OPUS; |
197 | 1 | break; |
198 | 0 | case MPEG4_OT_VP9_VIDEO: |
199 | 0 | *pi_codec = VLC_CODEC_VP9; |
200 | 0 | break; |
201 | 0 | case 0xDD: |
202 | 0 | *pi_codec = VLC_CODEC_VORBIS; |
203 | 0 | break; |
204 | 0 | case MPEG4_OT_3GPP2_13K_VOICE: |
205 | 0 | *pi_codec = VLC_CODEC_QCELP; |
206 | 0 | break; |
207 | 4 | default: |
208 | 4 | return false; |
209 | 261 | } |
210 | 257 | return true; |
211 | 261 | } |
212 | | |
213 | | #endif |