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.

mov-ftyp.c 1.6KB

10 months ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include "mov-internal.h"
  2. #include <assert.h>
  3. // 4.3 File Type Box (p17)
  4. int mov_read_ftyp(struct mov_t* mov, const struct mov_box_t* box)
  5. {
  6. if(box->size < 8) return -1;
  7. mov->ftyp.major_brand = mov_buffer_r32(&mov->io);
  8. mov->ftyp.minor_version = mov_buffer_r32(&mov->io);
  9. for(mov->ftyp.brands_count = 0; mov->ftyp.brands_count < N_BRAND && (uint64_t)mov->ftyp.brands_count * 4 < box->size - 8; ++mov->ftyp.brands_count)
  10. {
  11. mov->ftyp.compatible_brands[mov->ftyp.brands_count] = mov_buffer_r32(&mov->io);
  12. }
  13. assert(box->size == 4 * (uint64_t)mov->ftyp.brands_count + 8);
  14. mov_buffer_skip(&mov->io, box->size - 4 * (uint64_t)mov->ftyp.brands_count - 8 ); // skip compatible_brands
  15. return 0;
  16. }
  17. size_t mov_write_ftyp(const struct mov_t* mov)
  18. {
  19. int size, i;
  20. size = 8/* box */ + 8/* item */ + mov->ftyp.brands_count * 4 /* compatible brands */;
  21. mov_buffer_w32(&mov->io, size); /* size */
  22. mov_buffer_write(&mov->io, "ftyp", 4);
  23. mov_buffer_w32(&mov->io, mov->ftyp.major_brand);
  24. mov_buffer_w32(&mov->io, mov->ftyp.minor_version);
  25. for (i = 0; i < mov->ftyp.brands_count; i++)
  26. mov_buffer_w32(&mov->io, mov->ftyp.compatible_brands[i]);
  27. return size;
  28. }
  29. size_t mov_write_styp(const struct mov_t* mov)
  30. {
  31. int size, i;
  32. size = 8/* box */ + 8/* item */ + mov->ftyp.brands_count * 4 /* compatible brands */;
  33. mov_buffer_w32(&mov->io, size); /* size */
  34. mov_buffer_write(&mov->io, "styp", 4);
  35. mov_buffer_w32(&mov->io, mov->ftyp.major_brand);
  36. mov_buffer_w32(&mov->io, mov->ftyp.minor_version);
  37. for (i = 0; i < mov->ftyp.brands_count; i++)
  38. mov_buffer_w32(&mov->io, mov->ftyp.compatible_brands[i]);
  39. return size;
  40. }