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.

пре 10 месеци
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #include "mov-internal.h"
  2. #include <assert.h>
  3. #include <stdlib.h>
  4. #include <errno.h>
  5. // 3GPP TS 26.245 Release 14 12 V14.0.0 (2017-03)
  6. /*
  7. aligned(8) class StyleRecord {
  8. unsigned int(16) startChar;
  9. unsigned int(16) endChar;
  10. unsigned int(16) font-ID;
  11. unsigned int(8) face-style-flags;
  12. unsigned int(8) font-size;
  13. unsigned int(8) text-color-rgba[4];
  14. }
  15. class FontRecord {
  16. unsigned int(16) font-ID;
  17. unsigned int(8) font-name-length;
  18. unsigned int(8) font[font-name-length];
  19. }
  20. class FontTableBox() extends Box('ftab') {
  21. unsigned int(16) entry-count;
  22. FontRecord font-entry[entry-count];
  23. }
  24. class DisparityBox() extends TextSampleModifierBox ('disp') {
  25. signed int(16) disparity-shift-in-16th-pel;
  26. }
  27. class BoxRecord {
  28. signed int(16) top;
  29. signed int(16) left;
  30. signed int(16) bottom;
  31. signed int(16) right;
  32. }
  33. class TextSampleEntry() extends SampleEntry ('tx3g') {
  34. unsigned int(32) displayFlags;
  35. signed int(8) horizontal-justification;
  36. signed int(8) vertical-justification;
  37. unsigned int(8) background-color-rgba[4];
  38. BoxRecord default-text-box;
  39. StyleRecord default-style;
  40. FontTableBox font-table;
  41. DisparityBox default-disparity;
  42. }
  43. */
  44. int mov_read_tx3g(struct mov_t* mov, const struct mov_box_t* box)
  45. {
  46. struct mov_box_t extra;
  47. //struct mov_track_t* track = mov->track;
  48. //struct mov_sample_entry_t* entry = track->stsd.current;
  49. mov_buffer_r32(&mov->io); // displayFlags
  50. mov_buffer_r8(&mov->io); // horizontal-justification
  51. mov_buffer_r8(&mov->io); // vertical-justification
  52. mov_buffer_r8(&mov->io); // background-color-rgba[4]
  53. mov_buffer_r8(&mov->io);
  54. mov_buffer_r8(&mov->io);
  55. mov_buffer_r8(&mov->io);
  56. mov_buffer_r16(&mov->io); // BoxRecord.top
  57. mov_buffer_r16(&mov->io); // BoxRecord.left
  58. mov_buffer_r16(&mov->io); // BoxRecord.bottom
  59. mov_buffer_r16(&mov->io); // BoxRecord.right
  60. mov_buffer_r16(&mov->io); // StyleRecord.startChar
  61. mov_buffer_r16(&mov->io); // StyleRecord.endChar
  62. mov_buffer_r16(&mov->io); // StyleRecord.font-ID
  63. mov_buffer_r8(&mov->io); // StyleRecord.face-style-flags
  64. mov_buffer_r8(&mov->io); // StyleRecord.font-size
  65. mov_buffer_r8(&mov->io); // StyleRecord.text-color-rgba[4]
  66. mov_buffer_r8(&mov->io);
  67. mov_buffer_r8(&mov->io);
  68. mov_buffer_r8(&mov->io);
  69. // FontTableBox
  70. extra.type = box->type;
  71. extra.size = box->size - 30;
  72. return mp4_read_extra(mov, &extra);
  73. }
  74. size_t mov_write_tx3g(const struct mov_t* mov)
  75. {
  76. //const struct mov_track_t* track = mov->track;
  77. //const struct mov_sample_entry_t* entry = track->stsd.current;
  78. mov_buffer_w32(&mov->io, 0); // displayFlags
  79. mov_buffer_w8(&mov->io, 0x01); // horizontal-justification
  80. mov_buffer_w8(&mov->io, 0xFF); // vertical-justification
  81. mov_buffer_w8(&mov->io, 0x00); // background-color-rgba[4]
  82. mov_buffer_w8(&mov->io, 0x00);
  83. mov_buffer_w8(&mov->io, 0x00);
  84. mov_buffer_w8(&mov->io, 0x00);
  85. mov_buffer_w16(&mov->io, 0x0000); // BoxRecord.top
  86. mov_buffer_w16(&mov->io, 0x0000); // BoxRecord.left
  87. mov_buffer_w16(&mov->io, 0x0000); // BoxRecord.bottom
  88. mov_buffer_w16(&mov->io, 0x0000); // BoxRecord.right
  89. mov_buffer_w16(&mov->io, 0x0000); // StyleRecord.startChar
  90. mov_buffer_w16(&mov->io, 0x0000); // StyleRecord.endChar
  91. mov_buffer_w16(&mov->io, 0x0001); // StyleRecord.font-ID
  92. mov_buffer_w8(&mov->io, 0x00); // StyleRecord.face-style-flags
  93. mov_buffer_w8(&mov->io, 0x12); // StyleRecord.font-size
  94. mov_buffer_w8(&mov->io, 0xFF); // StyleRecord.text-color-rgba[4]
  95. mov_buffer_w8(&mov->io, 0xFF);
  96. mov_buffer_w8(&mov->io, 0xFF);
  97. mov_buffer_w8(&mov->io, 0xFF);
  98. // FontTableBox
  99. mov_buffer_w32(&mov->io, 18); /* size */
  100. mov_buffer_write(&mov->io, "ftab", 4);
  101. mov_buffer_w16(&mov->io, 1); /* entry-count */
  102. mov_buffer_w16(&mov->io, 0x0001); /* FontRecord.font-ID */
  103. mov_buffer_w8(&mov->io, 5); /* FontRecord.font-name-length */
  104. mov_buffer_write(&mov->io, "Serif", 5); /* FontRecord.font[font-name-length] */
  105. return 30 + 18;
  106. }