#include "mov-internal.h" #include #include // 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); }