Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

55 wiersze
2.3KB

  1. #ifndef _mov_reader_h_
  2. #define _mov_reader_h_
  3. #include <stddef.h>
  4. #include <stdint.h>
  5. #include "mov-buffer.h"
  6. #ifdef __cplusplus
  7. extern "C" {
  8. #endif
  9. typedef struct mov_reader_t mov_reader_t;
  10. mov_reader_t* mov_reader_create(const struct mov_buffer_t* buffer, void* param);
  11. void mov_reader_destroy(mov_reader_t* mov);
  12. struct mov_reader_trackinfo_t
  13. {
  14. /// @param[in] object: MOV_OBJECT_H264/MOV_OBJECT_AAC, see more @mov-format.h
  15. void (*onvideo)(void* param, uint32_t track, uint8_t object, int width, int height, const void* extra, size_t bytes);
  16. void (*onaudio)(void* param, uint32_t track, uint8_t object, int channel_count, int bit_per_sample, int sample_rate, const void* extra, size_t bytes);
  17. void (*onsubtitle)(void* param, uint32_t track, uint8_t object, const void* extra, size_t bytes);
  18. };
  19. /// @return 0-OK, other-error
  20. int mov_reader_getinfo(mov_reader_t* mov, struct mov_reader_trackinfo_t *ontrack, void* param);
  21. uint64_t mov_reader_getduration(mov_reader_t* mov);
  22. /// audio: AAC raw data, don't include ADTS/AudioSpecificConfig
  23. /// video: 4-byte data length(don't include self length) + H.264 NALU(don't include 0x00000001)
  24. /// @param[in] flags MOV_AV_FLAG_xxx, such as: MOV_AV_FLAG_KEYFREAME
  25. typedef void (*mov_reader_onread)(void* param, uint32_t track, const void* buffer, size_t bytes, int64_t pts, int64_t dts, int flags);
  26. /// @return 1-read one frame, 0-EOF, <0-error
  27. int mov_reader_read(mov_reader_t* mov, void* buffer, size_t bytes, mov_reader_onread onread, void* param);
  28. /// audio: AAC raw data, don't include ADTS/AudioSpecificConfig
  29. /// video: 4-byte data length(don't include self length) + H.264 NALU(don't include 0x00000001)
  30. /// @param[in] flags MOV_AV_FLAG_xxx, such as: MOV_AV_FLAG_KEYFREAME
  31. /// @return NULL-error, other-user alloc buffer
  32. typedef void* (*mov_reader_onread2)(void* param, uint32_t track, size_t bytes, int64_t pts, int64_t dts, int flags);
  33. /// samp as mov_reader_read + user alloc buffer
  34. /// NOTICE: user should free buffer on return error!!!
  35. /// @return 1-read one frame, 0-EOF, <0-error
  36. int mov_reader_read2(mov_reader_t* mov, mov_reader_onread2 onread, void* param);
  37. /// @param[in,out] timestamp input seek timestamp, output seek location timestamp
  38. /// @return 0-ok, other-error
  39. int mov_reader_seek(mov_reader_t* mov, int64_t* timestamp);
  40. #ifdef __cplusplus
  41. }
  42. #endif
  43. #endif /* !_mov_reader_h_*/