1 /* 2 * This file is part of FFmpeg. 3 * 4 * FFmpeg is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * FFmpeg is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with FFmpeg; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 17 */ 18 19 #ifndef AVCODEC_CBS_H 20 #define AVCODEC_CBS_H 21 22 #include <stddef.h> 23 #include <stdint.h> 24 25 #include "libavutil/buffer.h" 26 27 #include "avcodec.h" 28 29 30 /* 31 * This defines a framework for converting between a coded bitstream 32 * and structures defining all individual syntax elements found in 33 * such a stream. 34 * 35 * Conversion in both directions is possible. Given a coded bitstream 36 * (any meaningful fragment), it can be parsed and decomposed into 37 * syntax elements stored in a set of codec-specific structures. 38 * Similarly, given a set of those same codec-specific structures the 39 * syntax elements can be serialised and combined to create a coded 40 * bitstream. 41 */ 42 43 struct CodedBitstreamType; 44 45 /** 46 * The codec-specific type of a bitstream unit. 47 * 48 * AV1: obu_type 49 * H.264 / AVC: nal_unit_type 50 * H.265 / HEVC: nal_unit_type 51 * JPEG: marker value (without 0xff prefix) 52 * MPEG-2: start code value (without prefix) 53 * VP9: unused, set to zero (every unit is a frame) 54 */ 55 typedef uint32_t CodedBitstreamUnitType; 56 57 /** 58 * Coded bitstream unit structure. 59 * 60 * A bitstream unit the smallest element of a bitstream which 61 * is meaningful on its own. For example, an H.264 NAL unit. 62 * 63 * See the codec-specific header for the meaning of this for any 64 * particular codec. 65 */ 66 typedef struct CodedBitstreamUnit { 67 /** 68 * Codec-specific type of this unit. 69 */ 70 CodedBitstreamUnitType type; 71 72 /** 73 * Pointer to the directly-parsable bitstream form of this unit. 74 * 75 * May be NULL if the unit currently only exists in decomposed form. 76 */ 77 uint8_t *data; 78 /** 79 * The number of bytes in the bitstream (including any padding bits 80 * in the final byte). 81 */ 82 size_t data_size; 83 /** 84 * The number of bits which should be ignored in the final byte. 85 * 86 * This supports non-byte-aligned bitstreams. 87 */ 88 size_t data_bit_padding; 89 /** 90 * A reference to the buffer containing data. 91 * 92 * Must be set if data is not NULL. 93 */ 94 AVBufferRef *data_ref; 95 96 /** 97 * Pointer to the decomposed form of this unit. 98 * 99 * The type of this structure depends on both the codec and the 100 * type of this unit. May be NULL if the unit only exists in 101 * bitstream form. 102 */ 103 void *content; 104 /** 105 * If content is reference counted, a reference to the buffer containing 106 * content. Null if content is not reference counted. 107 */ 108 AVBufferRef *content_ref; 109 } CodedBitstreamUnit; 110 111 /** 112 * Coded bitstream fragment structure, combining one or more units. 113 * 114 * This is any sequence of units. It need not form some greater whole, 115 * though in many cases it will. For example, an H.264 access unit, 116 * which is composed of a sequence of H.264 NAL units. 117 */ 118 typedef struct CodedBitstreamFragment { 119 /** 120 * Pointer to the bitstream form of this fragment. 121 * 122 * May be NULL if the fragment only exists as component units. 123 */ 124 uint8_t *data; 125 /** 126 * The number of bytes in the bitstream. 127 * 128 * The number of bytes in the bitstream (including any padding bits 129 * in the final byte). 130 */ 131 size_t data_size; 132 /** 133 * The number of bits which should be ignored in the final byte. 134 */ 135 size_t data_bit_padding; 136 /** 137 * A reference to the buffer containing data. 138 * 139 * Must be set if data is not NULL. 140 */ 141 AVBufferRef *data_ref; 142 143 /** 144 * Number of units in this fragment. 145 * 146 * This may be zero if the fragment only exists in bitstream form 147 * and has not been decomposed. 148 */ 149 int nb_units; 150 151 /** 152 * Number of allocated units. 153 * 154 * Must always be >= nb_units; designed for internal use by cbs. 155 */ 156 int nb_units_allocated; 157 158 /** 159 * Pointer to an array of units of length nb_units_allocated. 160 * Only the first nb_units are valid. 161 * 162 * Must be NULL if nb_units_allocated is zero. 163 */ 164 CodedBitstreamUnit *units; 165 } CodedBitstreamFragment; 166 167 /** 168 * Context structure for coded bitstream operations. 169 */ 170 typedef struct CodedBitstreamContext { 171 /** 172 * Logging context to be passed to all av_log() calls associated 173 * with this context. 174 */ 175 void *log_ctx; 176 177 /** 178 * Internal codec-specific hooks. 179 */ 180 const struct CodedBitstreamType *codec; 181 182 /** 183 * Internal codec-specific data. 184 * 185 * This contains any information needed when reading/writing 186 * bitsteams which will not necessarily be present in a fragment. 187 * For example, for H.264 it contains all currently visible 188 * parameter sets - they are required to determine the bitstream 189 * syntax but need not be present in every access unit. 190 */ 191 void *priv_data; 192 193 /** 194 * Array of unit types which should be decomposed when reading. 195 * 196 * Types not in this list will be available in bitstream form only. 197 * If NULL, all supported types will be decomposed. 198 */ 199 const CodedBitstreamUnitType *decompose_unit_types; 200 /** 201 * Length of the decompose_unit_types array. 202 */ 203 int nb_decompose_unit_types; 204 205 /** 206 * Enable trace output during read/write operations. 207 */ 208 int trace_enable; 209 /** 210 * Log level to use for trace output. 211 * 212 * From AV_LOG_*; defaults to AV_LOG_TRACE. 213 */ 214 int trace_level; 215 216 /** 217 * Write buffer. Used as intermediate buffer when writing units. 218 * For internal use of cbs only. 219 */ 220 uint8_t *write_buffer; 221 size_t write_buffer_size; 222 } CodedBitstreamContext; 223 224 225 /** 226 * Table of all supported codec IDs. 227 * 228 * Terminated by AV_CODEC_ID_NONE. 229 */ 230 extern const enum AVCodecID ff_cbs_all_codec_ids[]; 231 232 233 /** 234 * Create and initialise a new context for the given codec. 235 */ 236 int ff_cbs_init(CodedBitstreamContext **ctx, 237 enum AVCodecID codec_id, void *log_ctx); 238 239 /** 240 * Reset all internal state in a context. 241 */ 242 void ff_cbs_flush(CodedBitstreamContext *ctx); 243 244 /** 245 * Close a context and free all internal state. 246 */ 247 void ff_cbs_close(CodedBitstreamContext **ctx); 248 249 250 /** 251 * Read the extradata bitstream found in codec parameters into a 252 * fragment, then split into units and decompose. 253 * 254 * This also updates the internal state, so will need to be called for 255 * codecs with extradata to read parameter sets necessary for further 256 * parsing even if the fragment itself is not desired. 257 * 258 * The fragment must have been zeroed or reset via ff_cbs_fragment_reset 259 * before use. 260 */ 261 int ff_cbs_read_extradata(CodedBitstreamContext *ctx, 262 CodedBitstreamFragment *frag, 263 const AVCodecParameters *par); 264 265 /** 266 * Read the extradata bitstream found in a codec context into a 267 * fragment, then split into units and decompose. 268 * 269 * This acts identical to ff_cbs_read_extradata() for the case where 270 * you already have a codec context. 271 */ 272 int ff_cbs_read_extradata_from_codec(CodedBitstreamContext *ctx, 273 CodedBitstreamFragment *frag, 274 const AVCodecContext *avctx); 275 276 /** 277 * Read the data bitstream from a packet into a fragment, then 278 * split into units and decompose. 279 * 280 * This also updates the internal state of the coded bitstream context 281 * with any persistent data from the fragment which may be required to 282 * read following fragments (e.g. parameter sets). 283 * 284 * The fragment must have been zeroed or reset via ff_cbs_fragment_reset 285 * before use. 286 */ 287 int ff_cbs_read_packet(CodedBitstreamContext *ctx, 288 CodedBitstreamFragment *frag, 289 const AVPacket *pkt); 290 291 /** 292 * Read a bitstream from a memory region into a fragment, then 293 * split into units and decompose. 294 * 295 * This also updates the internal state of the coded bitstream context 296 * with any persistent data from the fragment which may be required to 297 * read following fragments (e.g. parameter sets). 298 * 299 * The fragment must have been zeroed or reset via ff_cbs_fragment_reset 300 * before use. 301 */ 302 int ff_cbs_read(CodedBitstreamContext *ctx, 303 CodedBitstreamFragment *frag, 304 const uint8_t *data, size_t size); 305 306 307 /** 308 * Write the content of the fragment to its own internal buffer. 309 * 310 * Writes the content of all units and then assembles them into a new 311 * data buffer. When modifying the content of decomposed units, this 312 * can be used to regenerate the bitstream form of units or the whole 313 * fragment so that it can be extracted for other use. 314 * 315 * This also updates the internal state of the coded bitstream context 316 * with any persistent data from the fragment which may be required to 317 * write following fragments (e.g. parameter sets). 318 */ 319 int ff_cbs_write_fragment_data(CodedBitstreamContext *ctx, 320 CodedBitstreamFragment *frag); 321 322 /** 323 * Write the bitstream of a fragment to the extradata in codec parameters. 324 * 325 * Modifies context and fragment as ff_cbs_write_fragment_data does and 326 * replaces any existing extradata in the structure. 327 */ 328 int ff_cbs_write_extradata(CodedBitstreamContext *ctx, 329 AVCodecParameters *par, 330 CodedBitstreamFragment *frag); 331 332 /** 333 * Write the bitstream of a fragment to a packet. 334 * 335 * Modifies context and fragment as ff_cbs_write_fragment_data does. 336 * 337 * On success, the packet's buf is unreferenced and its buf, data and 338 * size fields are set to the corresponding values from the newly updated 339 * fragment; other fields are not touched. On failure, the packet is not 340 * touched at all. 341 */ 342 int ff_cbs_write_packet(CodedBitstreamContext *ctx, 343 AVPacket *pkt, 344 CodedBitstreamFragment *frag); 345 346 347 /** 348 * Free the units contained in a fragment as well as the fragment's 349 * own data buffer, but not the units array itself. 350 */ 351 void ff_cbs_fragment_reset(CodedBitstreamFragment *frag); 352 353 /** 354 * Free the units array of a fragment in addition to what 355 * ff_cbs_fragment_reset does. 356 */ 357 void ff_cbs_fragment_free(CodedBitstreamFragment *frag); 358 359 /** 360 * Allocate a new internal content buffer of the given size in the unit. 361 * 362 * The content will be zeroed. 363 */ 364 int ff_cbs_alloc_unit_content(CodedBitstreamUnit *unit, 365 size_t size, 366 void (*free)(void *opaque, uint8_t *content)); 367 368 /** 369 * Allocate a new internal content buffer matching the type of the unit. 370 * 371 * The content will be zeroed. 372 */ 373 int ff_cbs_alloc_unit_content2(CodedBitstreamContext *ctx, 374 CodedBitstreamUnit *unit); 375 376 377 /** 378 * Allocate a new internal data buffer of the given size in the unit. 379 * 380 * The data buffer will have input padding. 381 */ 382 int ff_cbs_alloc_unit_data(CodedBitstreamUnit *unit, 383 size_t size); 384 385 /** 386 * Insert a new unit into a fragment with the given content. 387 * 388 * The content structure continues to be owned by the caller if 389 * content_buf is not supplied. 390 */ 391 int ff_cbs_insert_unit_content(CodedBitstreamFragment *frag, 392 int position, 393 CodedBitstreamUnitType type, 394 void *content, 395 AVBufferRef *content_buf); 396 397 /** 398 * Insert a new unit into a fragment with the given data bitstream. 399 * 400 * If data_buf is not supplied then data must have been allocated with 401 * av_malloc() and will on success become owned by the unit after this 402 * call or freed on error. 403 */ 404 int ff_cbs_insert_unit_data(CodedBitstreamFragment *frag, 405 int position, 406 CodedBitstreamUnitType type, 407 uint8_t *data, size_t data_size, 408 AVBufferRef *data_buf); 409 410 /** 411 * Delete a unit from a fragment and free all memory it uses. 412 * 413 * Requires position to be >= 0 and < frag->nb_units. 414 */ 415 void ff_cbs_delete_unit(CodedBitstreamFragment *frag, 416 int position); 417 418 419 /** 420 * Make the content of a unit refcounted. 421 * 422 * If the unit is not refcounted, this will do a deep copy of the unit 423 * content to new refcounted buffers. 424 * 425 * It is not valid to call this function on a unit which does not have 426 * decomposed content. 427 */ 428 int ff_cbs_make_unit_refcounted(CodedBitstreamContext *ctx, 429 CodedBitstreamUnit *unit); 430 431 /** 432 * Make the content of a unit writable so that internal fields can be 433 * modified. 434 * 435 * If it is known that there are no other references to the content of 436 * the unit, does nothing and returns success. Otherwise (including the 437 * case where the unit content is not refcounted), it does a full clone 438 * of the content (including any internal buffers) to make a new copy, 439 * and replaces the existing references inside the unit with that. 440 * 441 * It is not valid to call this function on a unit which does not have 442 * decomposed content. 443 */ 444 int ff_cbs_make_unit_writable(CodedBitstreamContext *ctx, 445 CodedBitstreamUnit *unit); 446 447 448 #endif /* AVCODEC_CBS_H */ 449