parse-tfhd.js 1.4 KB

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