Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

pirms 10 mēnešiem
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #ifndef _mov_ioutil_h_
  2. #define _mov_ioutil_h_
  3. #include "mov-buffer.h"
  4. struct mov_ioutil_t
  5. {
  6. struct mov_buffer_t io;
  7. void* param;
  8. int error;
  9. };
  10. static inline int mov_buffer_error(const struct mov_ioutil_t* io)
  11. {
  12. return io->error;
  13. }
  14. static inline uint64_t mov_buffer_tell(const struct mov_ioutil_t* io)
  15. {
  16. int64_t v;
  17. v = io->io.tell(io->param);
  18. if (v < 0)
  19. ((struct mov_ioutil_t*)io)->error = -1;
  20. return v;
  21. }
  22. static inline void mov_buffer_seek(const struct mov_ioutil_t* io, int64_t offset)
  23. {
  24. // if (0 == io->error)
  25. ((struct mov_ioutil_t*)io)->error = io->io.seek(io->param, offset);
  26. }
  27. static inline void mov_buffer_skip(struct mov_ioutil_t* io, uint64_t bytes)
  28. {
  29. uint64_t offset;
  30. if (0 == io->error)
  31. {
  32. offset = io->io.tell(io->param);
  33. io->error = io->io.seek(io->param, offset + bytes);
  34. }
  35. }
  36. static inline void mov_buffer_read(struct mov_ioutil_t* io, void* data, uint64_t bytes)
  37. {
  38. if (0 == io->error)
  39. io->error = io->io.read(io->param, data, bytes);
  40. }
  41. static inline void mov_buffer_write(const struct mov_ioutil_t* io, const void* data, uint64_t bytes)
  42. {
  43. if (0 == io->error)
  44. ((struct mov_ioutil_t*)io)->error = io->io.write(io->param, data, bytes);
  45. }
  46. static inline uint8_t mov_buffer_r8(struct mov_ioutil_t* io)
  47. {
  48. uint8_t v = 0;
  49. mov_buffer_read(io, &v, 1);
  50. return v;
  51. }
  52. static inline uint16_t mov_buffer_r16(struct mov_ioutil_t* io)
  53. {
  54. uint16_t v;
  55. v = mov_buffer_r8(io);
  56. v = (v << 8) | mov_buffer_r8(io);
  57. return v;
  58. }
  59. static inline uint32_t mov_buffer_r24(struct mov_ioutil_t* io)
  60. {
  61. uint32_t v;
  62. v = mov_buffer_r8(io);
  63. v = (v << 16) | mov_buffer_r16(io);
  64. return v;
  65. }
  66. static inline uint32_t mov_buffer_r32(struct mov_ioutil_t* io)
  67. {
  68. uint32_t v;
  69. v = mov_buffer_r16(io);
  70. v = (v << 16) | mov_buffer_r16(io);
  71. return v;
  72. }
  73. static inline uint64_t mov_buffer_r64(struct mov_ioutil_t* io)
  74. {
  75. uint64_t v;
  76. v = mov_buffer_r32(io);
  77. v = (v << 32) | mov_buffer_r32(io);
  78. return v;
  79. }
  80. static inline void mov_buffer_w8(const struct mov_ioutil_t* io, uint8_t v)
  81. {
  82. mov_buffer_write(io, &v, 1);
  83. }
  84. static inline void mov_buffer_w16(const struct mov_ioutil_t* io, uint16_t v)
  85. {
  86. mov_buffer_w8(io, (uint8_t)(v >> 8));
  87. mov_buffer_w8(io, (uint8_t)v);
  88. }
  89. static inline void mov_buffer_w24(const struct mov_ioutil_t* io, uint32_t v)
  90. {
  91. mov_buffer_w16(io, (uint16_t)(v >> 8));
  92. mov_buffer_w8(io, (uint8_t)v);
  93. }
  94. static inline void mov_buffer_w32(const struct mov_ioutil_t* io, uint32_t v)
  95. {
  96. mov_buffer_w16(io, (uint16_t)(v >> 16));
  97. mov_buffer_w16(io, (uint16_t)v);
  98. }
  99. static inline void mov_buffer_w64(const struct mov_ioutil_t* io, uint64_t v)
  100. {
  101. mov_buffer_w32(io, (uint32_t)(v >> 32));
  102. mov_buffer_w32(io, (uint32_t)v);
  103. }
  104. #endif /* !_mov_ioutil_h_ */