parse-tfhd.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. var tfhd = function tfhd(data) {
  2. var view = new DataView(data.buffer, data.byteOffset, data.byteLength),
  3. result = {
  4. version: data[0],
  5. flags: new Uint8Array(data.subarray(1, 4)),
  6. trackId: view.getUint32(4)
  7. },
  8. baseDataOffsetPresent = result.flags[2] & 0x01,
  9. sampleDescriptionIndexPresent = result.flags[2] & 0x02,
  10. defaultSampleDurationPresent = result.flags[2] & 0x08,
  11. defaultSampleSizePresent = result.flags[2] & 0x10,
  12. defaultSampleFlagsPresent = result.flags[2] & 0x20,
  13. durationIsEmpty = result.flags[0] & 0x010000,
  14. defaultBaseIsMoof = result.flags[0] & 0x020000,
  15. i;
  16. i = 8;
  17. if (baseDataOffsetPresent) {
  18. i += 4; // truncate top 4 bytes
  19. // FIXME: should we read the full 64 bits?
  20. result.baseDataOffset = view.getUint32(12);
  21. i += 4;
  22. }
  23. if (sampleDescriptionIndexPresent) {
  24. result.sampleDescriptionIndex = view.getUint32(i);
  25. i += 4;
  26. }
  27. if (defaultSampleDurationPresent) {
  28. result.defaultSampleDuration = view.getUint32(i);
  29. i += 4;
  30. }
  31. if (defaultSampleSizePresent) {
  32. result.defaultSampleSize = view.getUint32(i);
  33. i += 4;
  34. }
  35. if (defaultSampleFlagsPresent) {
  36. result.defaultSampleFlags = view.getUint32(i);
  37. }
  38. if (durationIsEmpty) {
  39. result.durationIsEmpty = true;
  40. }
  41. if (!baseDataOffsetPresent && defaultBaseIsMoof) {
  42. result.baseDataOffsetIsMoof = true;
  43. }
  44. return result;
  45. };
  46. module.exports = tfhd;