reference-libobs-media-io.rst 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466
  1. Media I/O API Reference (libobs/media-io)
  2. =========================================
  3. .. code:: cpp
  4. #include <obs.h>
  5. Video Handler
  6. -------------
  7. .. type:: video_t
  8. Video output handler object
  9. ---------------------
  10. .. type:: enum video_format
  11. Video format. Can be one of the following values:
  12. - VIDEO_FORMAT_I420
  13. - VIDEO_FORMAT_NV12
  14. - VIDEO_FORMAT_YVYU
  15. - VIDEO_FORMAT_YUY2
  16. - VIDEO_FORMAT_UYVY
  17. - VIDEO_FORMAT_RGBA
  18. - VIDEO_FORMAT_BGRA
  19. - VIDEO_FORMAT_BGRX
  20. - VIDEO_FORMAT_Y800
  21. - VIDEO_FORMAT_I444
  22. ---------------------
  23. .. type:: enum video_colorspace
  24. YUV color space. Can be one of the following values:
  25. - VIDEO_CS_DEFAULT - Equivalent to VIDEO_CS_709
  26. - VIDEO_CS_601 - Rec. 601 color space
  27. - VIDEO_CS_709 - Rec. 709 color space
  28. - VIDEO_CS_SRGB - sRGB color space
  29. - VIDEO_CS_2020_PQ - Rec. 2020 color space, PQ transfer
  30. - VIDEO_CS_2020_HLG - Rec. 2020 color space, HLG transfer
  31. ---------------------
  32. .. type:: enum video_range_type
  33. YUV color range.
  34. - VIDEO_RANGE_DEFAULT - Equivalent to VIDEO_RANGE_PARTIAL
  35. - VIDEO_RANGE_PARTIAL - Partial range
  36. - VIDEO_RANGE_FULL - Full range
  37. ---------------------
  38. .. type:: struct video_data
  39. Video frame structure.
  40. .. member:: uint8_t *video_data.data[MAX_AV_PLANES]
  41. .. member:: uint32_t video_data.linesize[MAX_AV_PLANES]
  42. .. member:: uint64_t video_data.timestamp
  43. ---------------------
  44. .. type:: struct video_output_info
  45. Video output handler information
  46. .. member:: const char *video_output_info.name
  47. .. member:: enum video_format video_output_info.format
  48. .. member:: uint32_t video_output_info.fps_num
  49. .. member:: uint32_t video_output_info.fps_den
  50. .. member:: uint32_t video_output_info.width
  51. .. member:: uint32_t video_output_info.height
  52. .. member:: size_t video_output_info.cache_size
  53. .. member:: enum video_colorspace video_output_info.colorspace
  54. .. member:: enum video_range_type video_output_info.range
  55. ---------------------
  56. .. function:: enum video_format video_format_from_fourcc(uint32_t fourcc)
  57. Converts a fourcc value to a video format.
  58. :param forcecc: Fourcc value
  59. :return: Video format
  60. ---------------------
  61. .. function:: bool video_format_get_parameters(enum video_colorspace color_space, enum video_range_type range, float matrix[16], float min_range[3], float max_range[3])
  62. Converts a color space/range to matrix/min/max values.
  63. :param color_space: Color space to convert
  64. :param range: Color range to convert
  65. :param matrix: Pointer to the matrix
  66. :param min_range: Pointer to get the minimum range value
  67. :param max_range: Pointer to get the maximum range value
  68. ---------------------
  69. .. function:: bool video_output_connect(video_t *video, const struct video_scale_info *conversion, void (*callback)(void *param, struct video_data *frame), void *param)
  70. Connects a raw video callback to the video output handler.
  71. :param video: Video output handler object
  72. :param callback: Callback to receive video data
  73. :param param: Private data to pass to the callback
  74. ---------------------
  75. .. function:: void video_output_disconnect(video_t *video, void (*callback)(void *param, struct video_data *frame), void *param)
  76. Disconnects a raw video callback from the video output handler.
  77. :param video: Video output handler object
  78. :param callback: Callback
  79. :param param: Private data
  80. ---------------------
  81. .. function:: const struct video_output_info *video_output_get_info(const video_t *video)
  82. Gets the full video information of the video output handler.
  83. :param video: Video output handler object
  84. :return: Video output info structure pointer
  85. ---------------------
  86. .. function:: uint64_t video_output_get_frame_time(const video_t *video)
  87. Gets the frame interval of the video output handler.
  88. :param video: Video output handler object
  89. :return: Video frame interval in nanoseconds
  90. ---------------------
  91. .. function:: enum video_format video_output_get_format(const video_t *video)
  92. Gets the video format of the video output handler.
  93. :param video: Video output handler object
  94. :return: Video format
  95. ---------------------
  96. .. function:: uint32_t video_output_get_width(const video_t *video)
  97. .. function:: uint32_t video_output_get_height(const video_t *video)
  98. Gets the width/height of the video output handler.
  99. :param video: Video output handler object
  100. :return: Width/height
  101. ---------------------
  102. .. function:: double video_output_get_frame_rate(const video_t *video)
  103. Gets the frame rate (as a floating point) of the video output
  104. handler.
  105. :param video: Video output handler object
  106. :return: Frame rate
  107. ---------------------
  108. .. function:: uint32_t video_output_get_skipped_frames(const video_t *video)
  109. Gets the skipped frame count of the video output handler.
  110. :param video: Video output handler object
  111. :return: Skipped frame count
  112. ---------------------
  113. .. function:: uint32_t video_output_get_total_frames(const video_t *video)
  114. Gets the total frames processed of the video output handler.
  115. :param video: Video output handler object
  116. :return: Total frames processed
  117. ---------------------
  118. Audio Handler
  119. -------------
  120. .. type:: audio_t
  121. ---------------------
  122. .. type:: enum audio_format
  123. Audio format. Can be one of the following values:
  124. - AUDIO_FORMAT_UNKNOWN
  125. - AUDIO_FORMAT_U8BIT
  126. - AUDIO_FORMAT_16BIT
  127. - AUDIO_FORMAT_32BIT
  128. - AUDIO_FORMAT_FLOAT
  129. - AUDIO_FORMAT_U8BIT_PLANAR
  130. - AUDIO_FORMAT_16BIT_PLANAR
  131. - AUDIO_FORMAT_32BIT_PLANAR
  132. - AUDIO_FORMAT_FLOAT_PLANAR
  133. ---------------------
  134. .. type:: enum speaker_layout
  135. Speaker layout. Can be one of the following values:
  136. - SPEAKERS_UNKNOWN
  137. - SPEAKERS_MONO
  138. - SPEAKERS_STEREO
  139. - SPEAKERS_2POINT1
  140. - SPEAKERS_4POINT0
  141. - SPEAKERS_4POINT1
  142. - SPEAKERS_5POINT1
  143. - SPEAKERS_5POINT1_SURROUND
  144. - SPEAKERS_7POINT1
  145. - SPEAKERS_7POINT1_SURROUND
  146. - SPEAKERS_SURROUND
  147. ---------------------
  148. .. type:: struct audio_data
  149. Audio data structure.
  150. .. member:: uint8_t *audio_data.data[MAX_AV_PLANES]
  151. .. member:: uint32_t audio_data.frames
  152. .. member:: uint64_t audio_data.timestamp
  153. ---------------------
  154. .. type:: struct audio_output_data
  155. .. member:: float *audio_output_data.data[MAX_AUDIO_CHANNELS]
  156. ---------------------
  157. .. type:: struct audio_output_info
  158. .. member:: const char *audio_output_info.name
  159. .. member:: uint32_t audio_output_info.samples_per_sec
  160. .. member:: enum audio_format audio_output_info.format
  161. .. member:: enum speaker_layout audio_output_info.speakers
  162. .. member:: audio_input_callback_t audio_output_info.input_callback
  163. .. member:: void *audio_output_info.input_param
  164. ---------------------
  165. .. type:: struct audio_convert_info
  166. .. member:: uint32_t audio_convert_info.samples_per_sec
  167. .. member:: enum audio_format audio_convert_info.format
  168. .. member:: enum speaker_layout audio_convert_info.speakers
  169. ---------------------
  170. .. type:: typedef bool (*audio_input_callback_t)(void *param, uint64_t start_ts, uint64_t end_ts, uint64_t *new_ts, uint32_t active_mixers, struct audio_output_data *mixes)
  171. Audio input callback (typically used internally).
  172. ---------------------
  173. .. function:: uint32_t get_audio_channels(enum speaker_layout speakers)
  174. Converts a speaker layout to its audio channel count.
  175. :param speakers: Speaker layout enumeration
  176. :return: Channel count
  177. ---------------------
  178. .. function:: size_t get_audio_bytes_per_channel(enum audio_format format)
  179. Gets the audio bytes per channel for a specific audio format.
  180. :param format: Audio format
  181. :return: Bytes per channel
  182. ---------------------
  183. .. function:: bool is_audio_planar(enum audio_format format)
  184. Returns whether the audio format is a planar format.
  185. :param format: Audio format
  186. :return: *true* if audio is planar, *false* otherwise
  187. ---------------------
  188. .. function:: size_t get_audio_planes(enum audio_format format, enum speaker_layout speakers)
  189. Gets the number of audio planes for a specific audio format and
  190. speaker layout.
  191. :param format: Audio format
  192. :param speakers: Speaker layout
  193. :return: Number of audio planes
  194. ---------------------
  195. .. function:: size_t get_audio_size(enum audio_format format, enum speaker_layout speakers, uint32_t frames)
  196. Gets the audio block size for a specific frame out with the given
  197. format and speaker layout.
  198. :param format: Audio format
  199. :param speakers: Speaker layout
  200. :param frames: Audio frame count
  201. :return: Audio block size
  202. ---------------------
  203. .. function:: uint64_t audio_frames_to_ns(size_t sample_rate, uint64_t frames)
  204. Helper function to convert a specific number of audio frames to
  205. nanoseconds based upon its sample rate.
  206. :param sample_rate: Sample rate
  207. :param frames: Frame count
  208. :return: Nanoseconds
  209. ---------------------
  210. .. function:: uint64_t ns_to_audio_frames(size_t sample_rate, uint64_t ns)
  211. Helper function to convert a specific number of nanoseconds to audio
  212. frame count based upon its sample rate.
  213. :param sample_rate: Sample rate
  214. :param ns: Nanoseconds
  215. :return: Frame count
  216. ---------------------
  217. .. type:: typedef void (*audio_output_callback_t)(void *param, size_t mix_idx, struct audio_data *data)
  218. Audio output callback. Typically used internally.
  219. ---------------------
  220. .. function:: bool audio_output_connect(audio_t *audio, size_t mix_idx, const struct audio_convert_info *conversion, audio_output_callback_t callback, void *param)
  221. Connects a raw audio callback to the audio output handler.
  222. Optionally allows audio conversion if necessary.
  223. :param audio: Audio output handler object
  224. :param mix_idx: Mix index to get raw audio from
  225. :param conversion: Audio conversion information, or *NULL* for no
  226. conversion
  227. :param callback: Raw audio callback
  228. :param param: Private data to pass to the callback
  229. ---------------------
  230. .. function:: void audio_output_disconnect(audio_t *audio, size_t mix_idx, audio_output_callback_t callback, void *param)
  231. Disconnects a raw audio callback from the audio output handler.
  232. :param audio: Audio output handler object
  233. :param mix_idx: Mix index to get raw audio from
  234. :param callback: Raw audio callback
  235. :param param: Private data to pass to the callback
  236. ---------------------
  237. .. function:: size_t audio_output_get_block_size(const audio_t *audio)
  238. Gets the audio block size of an audio output handler.
  239. :param audio: Audio output handler object
  240. :return: Audio block size
  241. ---------------------
  242. .. function:: size_t audio_output_get_planes(const audio_t *audio)
  243. Gets the plane count of an audio output handler.
  244. :param audio: Audio output handler object
  245. :return: Audio plane count
  246. ---------------------
  247. .. function:: size_t audio_output_get_channels(const audio_t *audio)
  248. Gets the channel count of an audio output handler.
  249. :param audio: Audio output handler object
  250. :return: Audio channel count
  251. ---------------------
  252. .. function:: uint32_t audio_output_get_sample_rate(const audio_t *audio)
  253. Gets the sample rate of an audio output handler.
  254. :param audio: Audio output handler object
  255. :return: Audio sample rate
  256. ---------------------
  257. .. function:: const struct audio_output_info *audio_output_get_info(const audio_t *audio)
  258. Gets all audio information for an audio output handler.
  259. :param audio: Audio output handler object
  260. :return: Pointer to audio output information structure
  261. ---------------------
  262. Resampler
  263. ---------
  264. FFmpeg wrapper to resample audio.
  265. .. type:: typedef struct audio_resampler audio_resampler_t
  266. ---------------------
  267. .. type:: struct resample_info
  268. .. member:: uint32_t resample_info.samples_per_sec
  269. .. member:: enum audio_format resample_info.format
  270. .. member:: enum speaker_layout resample_info.speakers
  271. ---------------------
  272. .. function:: audio_resampler_t *audio_resampler_create(const struct resample_info *dst, const struct resample_info *src)
  273. Creates an audio resampler.
  274. :param dst: Destination audio information
  275. :param src: Source audio information
  276. :return: Audio resampler object
  277. ---------------------
  278. .. function:: void audio_resampler_destroy(audio_resampler_t *resampler)
  279. Destroys an audio resampler.
  280. :param resampler: Audio resampler object
  281. ---------------------
  282. .. function:: bool audio_resampler_resample(audio_resampler_t *resampler, uint8_t *output[], uint32_t *out_frames, uint64_t *ts_offset, const uint8_t *const input[], uint32_t in_frames)
  283. Resamples audio frames.
  284. :param resampler: Audio resampler object
  285. :param output: Pointer to receive converted audio frames
  286. :param out_frames: Pointer to receive converted audio frame count
  287. :param ts_offset: Pointer to receive timestamp offset (in
  288. nanoseconds)
  289. :param const input: Input frames to convert
  290. :param in_frames: Input frame count