Skip to content

Commit e8d19ff

Browse files
committed
feat: support mpeg2-video in mp4
1 parent 578b01d commit e8d19ff

3 files changed

Lines changed: 50 additions & 39 deletions

File tree

libmov/include/mov-format.h

Lines changed: 43 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -4,47 +4,52 @@
44
// ISO/IEC 14496-1:2010(E) 7.2.6.6 DecoderConfigDescriptor (p48)
55
// MPEG-4 systems ObjectTypeIndication
66
// http://www.mp4ra.org/object.html
7-
#define MOV_OBJECT_TEXT 0x08 // Text Stream
8-
#define MOV_OBJECT_MP4V 0x20 // Visual ISO/IEC 14496-2 (c)
9-
#define MOV_OBJECT_H264 0x21 // Visual ITU-T Recommendation H.264 | ISO/IEC 14496-10
10-
#define MOV_OBJECT_H265 0x23 // Visual ISO/IEC 23008-2 | ITU-T Recommendation H.265
11-
#define MOV_OBJECT_AAC 0x40 // Audio ISO/IEC 14496-3
12-
#define MOV_OBJECT_MP2V 0x60 // Visual ISO/IEC 13818-2 Simple Profile
13-
#define MOV_OBJECT_AAC_MAIN 0x66 // MPEG-2 AAC Main
14-
#define MOV_OBJECT_AAC_LOW 0x67 // MPEG-2 AAC Low
15-
#define MOV_OBJECT_AAC_SSR 0x68 // MPEG-2 AAC SSR
16-
#define MOV_OBJECT_MP3 0x69 // Audio ISO/IEC 13818-3
17-
#define MOV_OBJECT_MP1V 0x6A // Visual ISO/IEC 11172-2
18-
#define MOV_OBJECT_MP1A 0x6B // Audio ISO/IEC 11172-3
19-
#define MOV_OBJECT_JPEG 0x6C // Visual ISO/IEC 10918-1 (JPEG)
20-
#define MOV_OBJECT_PNG 0x6D // Portable Network Graphics (f)
21-
#define MOV_OBJECT_JPEG2000 0x6E // Visual ISO/IEC 15444-1 (JPEG 2000)
22-
#define MOV_OBJECT_VC1 0xA3 // SMPTE VC-1 Video
23-
#define MOV_OBJECT_DIRAC 0xA4 // Dirac Video Coder
24-
#define MOV_OBJECT_AC3 0xA5 // AC-3
25-
#define MOV_OBJECT_EAC3 0xA6 // Enhanced AC-3
26-
#define MOV_OBJECT_G719 0xA8 // ITU G.719 Audio
27-
#define MOV_OBJECT_DTS 0xA9 // Core Substream
28-
#define MOV_OBJECT_OPUS 0xAD // Opus audio https://opus-codec.org/docs/opus_in_isobmff.html
29-
#define MOV_OBJECT_VP9 0xB1 // VP9 Video
30-
#define MOV_OBJECT_FLAC 0xC1 // nonstandard from FFMPEG
31-
#define MOV_OBJECT_VP8 0xC2 // nonstandard
32-
#define MOV_OBJECT_CHAPTER 0xC3 // chapter https://developer.apple.com/documentation/quicktime-file-format/base_media_information_header_atom
33-
#define MOV_OBJECT_H266 0xFC // ITU-T Recommendation H.266
34-
#define MOV_OBJECT_G711a 0xFD // ITU G.711 alaw
35-
#define MOV_OBJECT_G711u 0xFE // ITU G.711 ulaw
36-
#define MOV_OBJECT_AV1 0xFF // AV1: https://aomediacodec.github.io/av1-isobmff
7+
#define MOV_OBJECT_TEXT 0x08 // Text Stream
8+
#define MOV_OBJECT_MP4V 0x20 // Visual ISO/IEC 14496-2 (c)
9+
#define MOV_OBJECT_H264 0x21 // Visual ITU-T Recommendation H.264 | ISO/IEC 14496-10
10+
#define MOV_OBJECT_H265 0x23 // Visual ISO/IEC 23008-2 | ITU-T Recommendation H.265
11+
#define MOV_OBJECT_AAC 0x40 // Audio ISO/IEC 14496-3
12+
#define MOV_OBJECT_MP2V 0x60 // Visual ISO/IEC 13818-2 Simple Profile
13+
#define MOV_OBJECT_MP2V_MAIN 0x61 // Visual ISO/IEC 13818-2 Main Profile
14+
#define MOV_OBJECT_MP2V_SNR 0x62 // Visual ISO/IEC 13818-2 SNR Profile
15+
#define MOV_OBJECT_MP2V_SPATIAL 0x63 // Visual ISO/IEC 13818-2 Spatial Profile
16+
#define MOV_OBJECT_MP2V_HIGH 0x64 // Visual ISO/IEC 13818-2 High Profile
17+
#define MOV_OBJECT_MP2V_422 0x65 // Visual ISO/IEC 13818-2 422 Profile
18+
#define MOV_OBJECT_AAC_MAIN 0x66 // Audio ISO/IEC 13818-7 Main Profile
19+
#define MOV_OBJECT_AAC_LC 0x67 // Audio ISO/IEC 13818-7 LowComplexity Profile
20+
#define MOV_OBJECT_AAC_SSR 0x68 // Audio ISO/IEC 13818-7 Scaleable Sampling Rate Profile
21+
#define MOV_OBJECT_MP3 0x69 // Audio ISO/IEC 13818-3
22+
#define MOV_OBJECT_MP1V 0x6A // Visual ISO/IEC 11172-2
23+
#define MOV_OBJECT_MP1A 0x6B // Audio ISO/IEC 11172-3
24+
#define MOV_OBJECT_JPEG 0x6C // Visual ISO/IEC 10918-1 (JPEG)
25+
#define MOV_OBJECT_PNG 0x6D // Portable Network Graphics (f)
26+
#define MOV_OBJECT_JPEG2000 0x6E // Visual ISO/IEC 15444-1 (JPEG 2000)
27+
#define MOV_OBJECT_VC1 0xA3 // SMPTE VC-1 Video
28+
#define MOV_OBJECT_DIRAC 0xA4 // Dirac Video Coder
29+
#define MOV_OBJECT_AC3 0xA5 // AC-3
30+
#define MOV_OBJECT_EAC3 0xA6 // Enhanced AC-3
31+
#define MOV_OBJECT_G719 0xA8 // ITU G.719 Audio
32+
#define MOV_OBJECT_DTS 0xA9 // Core Substream
33+
#define MOV_OBJECT_OPUS 0xAD // Opus audio https://opus-codec.org/docs/opus_in_isobmff.html
34+
#define MOV_OBJECT_VP9 0xB1 // VP9 Video
35+
#define MOV_OBJECT_FLAC 0xC1 // nonstandard from FFMPEG
36+
#define MOV_OBJECT_VP8 0xC2 // nonstandard
37+
#define MOV_OBJECT_CHAPTER 0xC3 // chapter https://developer.apple.com/documentation/quicktime-file-format/base_media_information_header_atom
38+
#define MOV_OBJECT_H266 0xFC // ITU-T Recommendation H.266
39+
#define MOV_OBJECT_G711a 0xFD // ITU G.711 alaw
40+
#define MOV_OBJECT_G711u 0xFE // ITU G.711 ulaw
41+
#define MOV_OBJECT_AV1 0xFF // AV1: https://aomediacodec.github.io/av1-isobmff
3742

38-
#define MOV_OBJECT_NONE 0x00 // unknown object id
39-
#define MOV_OBJECT_AVC MOV_OBJECT_H264
40-
#define MOV_OBJECT_HEVC MOV_OBJECT_H265
41-
#define MOV_OBJECT_VVC MOV_OBJECT_H266
42-
#define MOV_OBJECT_ALAW MOV_OBJECT_G711a
43-
#define MOV_OBJECT_ULAW MOV_OBJECT_G711u
43+
#define MOV_OBJECT_NONE 0x00 // unknown object id
44+
#define MOV_OBJECT_AVC MOV_OBJECT_H264
45+
#define MOV_OBJECT_HEVC MOV_OBJECT_H265
46+
#define MOV_OBJECT_VVC MOV_OBJECT_H266
47+
#define MOV_OBJECT_ALAW MOV_OBJECT_G711a
48+
#define MOV_OBJECT_ULAW MOV_OBJECT_G711u
4449

4550
/// MOV flags
46-
#define MOV_FLAG_FASTSTART 0x00000001
47-
#define MOV_FLAG_SEGMENT 0x00000002 // fmp4_writer only
51+
#define MOV_FLAG_FASTSTART 0x00000001
52+
#define MOV_FLAG_SEGMENT 0x00000002 // fmp4_writer only
4853

4954
/// MOV av stream flag
5055
#define MOV_AV_FLAG_KEYFREAME 0x0001

libmov/source/mov-stsd.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,7 @@ static size_t mov_write_video(const struct mov_t* mov, const struct mov_sample_e
448448
size += mov_write_hvcc(mov);
449449
else if (MOV_OBJECT_H266 == entry->object_type_indication)
450450
size += mov_write_vvcc(mov);
451-
else if (MOV_OBJECT_MP4V == entry->object_type_indication || MOV_OBJECT_JPEG == entry->object_type_indication || MOV_OBJECT_PNG == entry->object_type_indication || MOV_OBJECT_JPEG2000 == entry->object_type_indication)
451+
else if (MOV_OBJECT_MP4V == entry->object_type_indication || MOV_OBJECT_JPEG == entry->object_type_indication || MOV_OBJECT_PNG == entry->object_type_indication || MOV_OBJECT_JPEG2000 == entry->object_type_indication || (MOV_OBJECT_MP2V <= entry->object_type_indication && MOV_OBJECT_MP2V_422 >= entry->object_type_indication))
452452
size += mov_write_esds(mov);
453453
else if (MOV_OBJECT_AV1 == entry->object_type_indication)
454454
size += mov_write_av1c(mov);

libmov/source/mov-tag.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ static struct mov_object_tag s_tags[] = {
1818
{ MOV_OBJECT_JPEG, MOV_MP4V },
1919
{ MOV_OBJECT_PNG, MOV_MP4V },
2020
{ MOV_OBJECT_JPEG2000, MOV_MP4V },
21+
{ MOV_OBJECT_MP2V, MOV_MP4V },
22+
{ MOV_OBJECT_MP2V_MAIN, MOV_MP4V },
23+
{ MOV_OBJECT_MP2V_SNR, MOV_MP4V },
24+
{ MOV_OBJECT_MP2V_SPATIAL, MOV_MP4V },
25+
{ MOV_OBJECT_MP2V_HIGH, MOV_MP4V },
26+
{ MOV_OBJECT_MP2V_422, MOV_MP4V },
2127
{ MOV_OBJECT_AAC, MOV_MP4A },
2228
{ MOV_OBJECT_MP3, MOV_MP4A }, // mp4_read_decoder_config_descriptor
2329
{ MOV_OBJECT_MP1A, MOV_MP4A }, // mp4_read_decoder_config_descriptor

0 commit comments

Comments
 (0)