forked from duiniuluantanqin/mp4
-
Notifications
You must be signed in to change notification settings - Fork 0
/
iods.c
93 lines (72 loc) · 2.57 KB
/
iods.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include "funcprotos.h"
#include "quicktime.h"
int quicktime_iods_init(quicktime_iods_t *iods)
{
iods->version = 0;
iods->flags = 0;
iods->audioProfileId = 0xFF;
iods->videoProfileId = 0xFF;
return 0;
}
int quicktime_iods_set_audio_profile(quicktime_iods_t* iods, int id)
{
iods->audioProfileId = id;
return 0;
}
int quicktime_iods_set_video_profile(quicktime_iods_t* iods, int id)
{
iods->videoProfileId = id;
return 0;
}
int quicktime_iods_delete(quicktime_iods_t *iods)
{
return 0;
}
int quicktime_iods_dump(quicktime_iods_t *iods)
{
printf(" initial object descriptor\n");
printf(" version %d\n", iods->version);
printf(" flags %ld\n", iods->flags);
printf(" audioProfileId %u\n", iods->audioProfileId);
printf(" videoProfileId %u\n", iods->videoProfileId);
return 0;
}
int quicktime_read_iods(quicktime_t *file, quicktime_iods_t *iods)
{
iods->version = quicktime_read_char(file);
iods->flags = quicktime_read_int24(file);
quicktime_read_char(file); /* skip tag */
quicktime_read_mp4_descr_length(file); /* skip length */
/* skip ODID, ODProfile, sceneProfile */
quicktime_set_position(file, quicktime_position(file) + 4);
iods->audioProfileId = quicktime_read_char(file);
iods->videoProfileId = quicktime_read_char(file);
/* will skip the remainder of the atom */
return 0;
}
int quicktime_write_iods(quicktime_t *file, quicktime_iods_t *iods)
{
quicktime_atom_t atom;
int i;
quicktime_atom_write_header(file, &atom, "iods");
quicktime_write_char(file, iods->version);
quicktime_write_int24(file, iods->flags);
quicktime_write_char(file, 0x10); /* MP4_IOD_Tag */
quicktime_write_char(file, 7 + (file->moov.total_tracks * (1+1+4))); /* length */
quicktime_write_int16(file, 0x004F); /* ObjectDescriptorID = 1 */
quicktime_write_char(file, 0xFF); /* ODProfileLevel */
quicktime_write_char(file, 0xFF); /* sceneProfileLevel */
quicktime_write_char(file, iods->audioProfileId); /* audioProfileLevel */
quicktime_write_char(file, iods->videoProfileId); /* videoProfileLevel */
quicktime_write_char(file, 0xFF); /* graphicsProfileLevel */
for (i = 0; i < file->moov.total_tracks; i++) {
quicktime_write_char(file, 0x0E); /* ES_ID_IncTag */
quicktime_write_char(file, 0x04); /* length */
quicktime_write_int32(file, file->moov.trak[i]->tkhd.track_id);
}
/* no OCI_Descriptors */
/* no IPMP_DescriptorPointers */
/* no Extenstion_Descriptors */
quicktime_atom_write_footer(file, &atom);
return 0;
}