|
- #include "mov-internal.h"
- #include <assert.h>
-
- // 8.4.2 Media Header Box (p35)
- // Box Type: 'mdhd'
- // Container: Media Box ('mdia')
- // Mandatory: Yes
- // Quantity: Exactly one
-
- /*
- aligned(8) class MediaHeaderBox extends FullBox('mdhd', version, 0) {
- if (version==1) {
- unsigned int(64) creation_time;
- unsigned int(64) modification_time;
- unsigned int(32) timescale;
- unsigned int(64) duration;
- } else { // version==0
- unsigned int(32) creation_time;
- unsigned int(32) modification_time;
- unsigned int(32) timescale;
- unsigned int(32) duration;
- }
- bit(1) pad = 0;
- unsigned int(5)[3] language; // ISO-639-2/T language code
- unsigned int(16) pre_defined = 0;
- }
- */
- int mov_read_mdhd(struct mov_t* mov, const struct mov_box_t* box)
- {
- uint32_t val;
- struct mov_mdhd_t* mdhd = &mov->track->mdhd;
-
- mdhd->version = mov_buffer_r8(&mov->io);
- mdhd->flags = mov_buffer_r24(&mov->io);
-
- if (1 == mdhd->version)
- {
- mdhd->creation_time = mov_buffer_r64(&mov->io);
- mdhd->modification_time = mov_buffer_r64(&mov->io);
- mdhd->timescale = mov_buffer_r32(&mov->io);
- mdhd->duration = mov_buffer_r64(&mov->io);
- }
- else
- {
- assert(0 == mdhd->version);
- mdhd->creation_time = mov_buffer_r32(&mov->io);
- mdhd->modification_time = mov_buffer_r32(&mov->io);
- mdhd->timescale = mov_buffer_r32(&mov->io);
- mdhd->duration = mov_buffer_r32(&mov->io);
- }
-
- val = mov_buffer_r32(&mov->io);
- mdhd->language = (val >> 16) & 0x7FFF;
- mdhd->pre_defined = val & 0xFFFF;
-
- (void)box;
- return mov_buffer_error(&mov->io);
- }
-
- size_t mov_write_mdhd(const struct mov_t* mov)
- {
- const struct mov_mdhd_t* mdhd = &mov->track->mdhd;
-
- mov_buffer_w32(&mov->io, 32); /* size */
- mov_buffer_write(&mov->io, "mdhd", 4);
- mov_buffer_w32(&mov->io, 0); /* version 1 & flags */
-
- mov_buffer_w32(&mov->io, (uint32_t)mdhd->creation_time); /* creation_time */
- mov_buffer_w32(&mov->io, (uint32_t)mdhd->modification_time); /* modification_time */
- mov_buffer_w32(&mov->io, mdhd->timescale); /* timescale */
- mov_buffer_w32(&mov->io, (uint32_t)mdhd->duration); /* duration */
-
- mov_buffer_w16(&mov->io, (uint16_t)mdhd->language); /* ISO-639-2/T language code */
- mov_buffer_w16(&mov->io, 0); /* pre_defined (quality) */
- return 32;
- }
|