defs.h 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. /*
  2. *
  3. * This file is part of FFmpeg.
  4. *
  5. * FFmpeg is free software; you can redistribute it and/or
  6. * modify it under the terms of the GNU Lesser General Public
  7. * License as published by the Free Software Foundation; either
  8. * version 2.1 of the License, or (at your option) any later version.
  9. *
  10. * FFmpeg is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  13. * Lesser General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU Lesser General Public
  16. * License along with FFmpeg; if not, write to the Free Software
  17. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  18. */
  19. #ifndef AVCODEC_DEFS_H
  20. #define AVCODEC_DEFS_H
  21. /**
  22. * @file
  23. * @ingroup libavc
  24. * Misc types and constants that do not belong anywhere else.
  25. */
  26. #include <stdint.h>
  27. #include <stdlib.h>
  28. /**
  29. * @ingroup lavc_decoding
  30. * Required number of additionally allocated bytes at the end of the input bitstream for decoding.
  31. * This is mainly needed because some optimized bitstream readers read
  32. * 32 or 64 bit at once and could read over the end.<br>
  33. * Note: If the first 23 bits of the additional bytes are not 0, then damaged
  34. * MPEG bitstreams could cause overread and segfault.
  35. */
  36. #define AV_INPUT_BUFFER_PADDING_SIZE 64
  37. /**
  38. * @ingroup lavc_decoding
  39. */
  40. enum AVDiscard{
  41. /* We leave some space between them for extensions (drop some
  42. * keyframes for intra-only or drop just some bidir frames). */
  43. AVDISCARD_NONE =-16, ///< discard nothing
  44. AVDISCARD_DEFAULT = 0, ///< discard useless packets like 0 size packets in avi
  45. AVDISCARD_NONREF = 8, ///< discard all non reference
  46. AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames
  47. AVDISCARD_NONINTRA= 24, ///< discard all non intra frames
  48. AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes
  49. AVDISCARD_ALL = 48, ///< discard all
  50. };
  51. enum AVAudioServiceType {
  52. AV_AUDIO_SERVICE_TYPE_MAIN = 0,
  53. AV_AUDIO_SERVICE_TYPE_EFFECTS = 1,
  54. AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED = 2,
  55. AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED = 3,
  56. AV_AUDIO_SERVICE_TYPE_DIALOGUE = 4,
  57. AV_AUDIO_SERVICE_TYPE_COMMENTARY = 5,
  58. AV_AUDIO_SERVICE_TYPE_EMERGENCY = 6,
  59. AV_AUDIO_SERVICE_TYPE_VOICE_OVER = 7,
  60. AV_AUDIO_SERVICE_TYPE_KARAOKE = 8,
  61. AV_AUDIO_SERVICE_TYPE_NB , ///< Not part of ABI
  62. };
  63. /**
  64. * Pan Scan area.
  65. * This specifies the area which should be displayed.
  66. * Note there may be multiple such areas for one frame.
  67. */
  68. typedef struct AVPanScan {
  69. /**
  70. * id
  71. * - encoding: Set by user.
  72. * - decoding: Set by libavcodec.
  73. */
  74. int id;
  75. /**
  76. * width and height in 1/16 pel
  77. * - encoding: Set by user.
  78. * - decoding: Set by libavcodec.
  79. */
  80. int width;
  81. int height;
  82. /**
  83. * position of the top left corner in 1/16 pel for up to 3 fields/frames
  84. * - encoding: Set by user.
  85. * - decoding: Set by libavcodec.
  86. */
  87. int16_t position[3][2];
  88. } AVPanScan;
  89. /**
  90. * This structure describes the bitrate properties of an encoded bitstream. It
  91. * roughly corresponds to a subset the VBV parameters for MPEG-2 or HRD
  92. * parameters for H.264/HEVC.
  93. */
  94. typedef struct AVCPBProperties {
  95. /**
  96. * Maximum bitrate of the stream, in bits per second.
  97. * Zero if unknown or unspecified.
  98. */
  99. int64_t max_bitrate;
  100. /**
  101. * Minimum bitrate of the stream, in bits per second.
  102. * Zero if unknown or unspecified.
  103. */
  104. int64_t min_bitrate;
  105. /**
  106. * Average bitrate of the stream, in bits per second.
  107. * Zero if unknown or unspecified.
  108. */
  109. int64_t avg_bitrate;
  110. /**
  111. * The size of the buffer to which the ratecontrol is applied, in bits.
  112. * Zero if unknown or unspecified.
  113. */
  114. int64_t buffer_size;
  115. /**
  116. * The delay between the time the packet this structure is associated with
  117. * is received and the time when it should be decoded, in periods of a 27MHz
  118. * clock.
  119. *
  120. * UINT64_MAX when unknown or unspecified.
  121. */
  122. uint64_t vbv_delay;
  123. } AVCPBProperties;
  124. /**
  125. * Allocate a CPB properties structure and initialize its fields to default
  126. * values.
  127. *
  128. * @param size if non-NULL, the size of the allocated struct will be written
  129. * here. This is useful for embedding it in side data.
  130. *
  131. * @return the newly allocated struct or NULL on failure
  132. */
  133. AVCPBProperties *av_cpb_properties_alloc(size_t *size);
  134. /**
  135. * This structure supplies correlation between a packet timestamp and a wall clock
  136. * production time. The definition follows the Producer Reference Time ('prft')
  137. * as defined in ISO/IEC 14496-12
  138. */
  139. typedef struct AVProducerReferenceTime {
  140. /**
  141. * A UTC timestamp, in microseconds, since Unix epoch (e.g, av_gettime()).
  142. */
  143. int64_t wallclock;
  144. int flags;
  145. } AVProducerReferenceTime;
  146. /**
  147. * Encode extradata length to a buffer. Used by xiph codecs.
  148. *
  149. * @param s buffer to write to; must be at least (v/255+1) bytes long
  150. * @param v size of extradata in bytes
  151. * @return number of bytes written to the buffer.
  152. */
  153. unsigned int av_xiphlacing(unsigned char *s, unsigned int v);
  154. #endif // AVCODEC_DEFS_H