Coverage Report

Created: 2025-08-29 07:30

/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