44 lines
1.4 KiB
C
44 lines
1.4 KiB
C
#include "mov-internal.h"
|
|
#include <string.h>
|
|
#include <assert.h>
|
|
|
|
// 8.4.3 Handler Reference Box (p36)
|
|
// Box Type: 'hdlr'
|
|
// Container: Media Box ('mdia') or Meta Box ('meta')
|
|
// Mandatory: Yes
|
|
// Quantity: Exactly one
|
|
int mov_read_hdlr(struct mov_t* mov, const struct mov_box_t* box)
|
|
{
|
|
struct mov_track_t* track = mov->track;
|
|
|
|
mov_buffer_r8(&mov->io); /* version */
|
|
mov_buffer_r24(&mov->io); /* flags */
|
|
//uint32_t pre_defined = mov_buffer_r32(&mov->io);
|
|
mov_buffer_skip(&mov->io, 4);
|
|
track->handler_type = mov_buffer_r32(&mov->io);
|
|
// const unsigned int(32)[3] reserved = 0;
|
|
mov_buffer_skip(&mov->io, 12);
|
|
// string name;
|
|
mov_buffer_skip(&mov->io, box->size - 24); // String name
|
|
return 0;
|
|
}
|
|
|
|
size_t mov_write_hdlr(const struct mov_t* mov)
|
|
{
|
|
const struct mov_track_t* track = mov->track;
|
|
|
|
mov_buffer_w32(&mov->io, 33 + (uint32_t)strlen(track->handler_descr)); /* size */
|
|
mov_buffer_write(&mov->io, "hdlr", 4);
|
|
mov_buffer_w32(&mov->io, 0); /* Version & flags */
|
|
|
|
mov_buffer_w32(&mov->io, 0); /* pre_defined */
|
|
mov_buffer_w32(&mov->io, track->handler_type); /* handler_type */
|
|
|
|
mov_buffer_w32(&mov->io, 0); /* reserved */
|
|
mov_buffer_w32(&mov->io, 0); /* reserved */
|
|
mov_buffer_w32(&mov->io, 0); /* reserved */
|
|
|
|
mov_buffer_write(&mov->io, track->handler_descr, (uint64_t)strlen(track->handler_descr)+1); /* name */
|
|
return 33 + strlen(track->handler_descr);
|
|
}
|