You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 line
1.3KB

  1. #include "mov-internal.h"
  2. #include <assert.h>
  3. #include <stdlib.h>
  4. #include <errno.h>
  5. // https://www.webmproject.org/vp9/mp4/
  6. // extra data: VPCodecConfigurationBox
  7. int mov_read_vpcc(struct mov_t* mov, const struct mov_box_t* box)
  8. {
  9. struct mov_track_t* track = mov->track;
  10. struct mov_sample_entry_t* entry = track->stsd.current;
  11. if(box->size < 4)
  12. return -1;
  13. if (entry->extra_data_size < box->size-4)
  14. {
  15. void* p = realloc(entry->extra_data, (size_t)box->size-4);
  16. if (NULL == p) return -ENOMEM;
  17. entry->extra_data = p;
  18. }
  19. mov_buffer_r8(&mov->io); /* version */
  20. mov_buffer_r24(&mov->io); /* flags */
  21. mov_buffer_read(&mov->io, entry->extra_data, box->size-4);
  22. entry->extra_data_size = (int)box->size - 4;
  23. return mov_buffer_error(&mov->io);
  24. }
  25. size_t mov_write_vpcc(const struct mov_t* mov)
  26. {
  27. const struct mov_track_t* track = mov->track;
  28. const struct mov_sample_entry_t* entry = track->stsd.current;
  29. mov_buffer_w32(&mov->io, entry->extra_data_size + 12); /* size */
  30. mov_buffer_write(&mov->io, "vpcC", 4);
  31. mov_buffer_w8(&mov->io, 1); /* version */
  32. mov_buffer_w24(&mov->io, 0); /* flags */
  33. if (entry->extra_data_size > 0)
  34. mov_buffer_write(&mov->io, entry->extra_data, entry->extra_data_size);
  35. return entry->extra_data_size + 12;
  36. }