1 /* 2 * copyright (c) 2001 Fabrice Bellard 3 * 4 * This file is part of FFmpeg. 5 * 6 * FFmpeg is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * FFmpeg is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with FFmpeg; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21 #ifndef AVFORMAT_INTERNAL_H 22 #define AVFORMAT_INTERNAL_H 23 24 #include <stdint.h> 25 26 #include "libavutil/bprint.h" 27 #include "avformat.h" 28 #include "os_support.h" 29 30 #define MAX_URL_SIZE 4096 31 32 /** size of probe buffer, for guessing file type from file contents */ 33 #define PROBE_BUF_MIN 2048 34 #define PROBE_BUF_MAX (1 << 20) 35 36 #ifdef DEBUG 37 # define hex_dump_debug(class, buf, size) av_hex_dump_log(class, AV_LOG_DEBUG, buf, size) 38 #else 39 # define hex_dump_debug(class, buf, size) do { if (0) av_hex_dump_log(class, AV_LOG_DEBUG, buf, size); } while(0) 40 #endif 41 42 typedef struct AVCodecTag { 43 enum AVCodecID id; 44 unsigned int tag; 45 } AVCodecTag; 46 47 typedef struct CodecMime{ 48 char str[32]; 49 enum AVCodecID id; 50 } CodecMime; 51 52 /*************************************************/ 53 /* fractional numbers for exact pts handling */ 54 55 /** 56 * The exact value of the fractional number is: 'val + num / den'. 57 * num is assumed to be 0 <= num < den. 58 */ 59 typedef struct FFFrac { 60 int64_t val, num, den; 61 } FFFrac; 62 63 64 struct AVFormatInternal { 65 /** 66 * Number of streams relevant for interleaving. 67 * Muxing only. 68 */ 69 int nb_interleaved_streams; 70 71 /** 72 * This buffer is only needed when packets were already buffered but 73 * not decoded, for example to get the codec parameters in MPEG 74 * streams. 75 */ 76 struct AVPacketList *packet_buffer; 77 struct AVPacketList *packet_buffer_end; 78 79 /* av_seek_frame() support */ 80 int64_t data_offset; /**< offset of the first packet */ 81 82 /** 83 * Raw packets from the demuxer, prior to parsing and decoding. 84 * This buffer is used for buffering packets until the codec can 85 * be identified, as parsing cannot be done without knowing the 86 * codec. 87 */ 88 struct AVPacketList *raw_packet_buffer; 89 struct AVPacketList *raw_packet_buffer_end; 90 /** 91 * Packets split by the parser get queued here. 92 */ 93 struct AVPacketList *parse_queue; 94 struct AVPacketList *parse_queue_end; 95 /** 96 * Remaining size available for raw_packet_buffer, in bytes. 97 */ 98 #define RAW_PACKET_BUFFER_SIZE 2500000 99 int raw_packet_buffer_remaining_size; 100 101 /** 102 * Offset to remap timestamps to be non-negative. 103 * Expressed in timebase units. 104 * @see AVStream.mux_ts_offset 105 */ 106 int64_t offset; 107 108 /** 109 * Timebase for the timestamp offset. 110 */ 111 AVRational offset_timebase; 112 113 #if FF_API_COMPUTE_PKT_FIELDS2 114 int missing_ts_warning; 115 #endif 116 117 int inject_global_side_data; 118 119 int avoid_negative_ts_use_pts; 120 121 /** 122 * Timestamp of the end of the shortest stream. 123 */ 124 int64_t shortest_end; 125 126 /** 127 * Whether or not avformat_init_output has already been called 128 */ 129 int initialized; 130 131 /** 132 * Whether or not avformat_init_output fully initialized streams 133 */ 134 int streams_initialized; 135 136 /** 137 * ID3v2 tag useful for MP3 demuxing 138 */ 139 AVDictionary *id3v2_meta; 140 141 /* 142 * Prefer the codec framerate for avg_frame_rate computation. 143 */ 144 int prefer_codec_framerate; 145 }; 146 147 struct AVStreamInternal { 148 /** 149 * Set to 1 if the codec allows reordering, so pts can be different 150 * from dts. 151 */ 152 int reorder; 153 154 /** 155 * bitstream filter to run on stream 156 * - encoding: Set by muxer using ff_stream_add_bitstream_filter 157 * - decoding: unused 158 */ 159 AVBSFContext *bsfc; 160 161 /** 162 * Whether or not check_bitstream should still be run on each packet 163 */ 164 int bitstream_checked; 165 166 /** 167 * The codec context used by avformat_find_stream_info, the parser, etc. 168 */ 169 AVCodecContext *avctx; 170 /** 171 * 1 if avctx has been initialized with the values from the codec parameters 172 */ 173 int avctx_inited; 174 175 enum AVCodecID orig_codec_id; 176 177 /* the context for extracting extradata in find_stream_info() 178 * inited=1/bsf=NULL signals that extracting is not possible (codec not 179 * supported) */ 180 struct { 181 AVBSFContext *bsf; 182 AVPacket *pkt; 183 int inited; 184 } extract_extradata; 185 186 /** 187 * Whether the internal avctx needs to be updated from codecpar (after a late change to codecpar) 188 */ 189 int need_context_update; 190 191 int is_intra_only; 192 193 FFFrac *priv_pts; 194 }; 195 196 #ifdef __GNUC__ 197 #define dynarray_add(tab, nb_ptr, elem)\ 198 do {\ 199 __typeof__(tab) _tab = (tab);\ 200 __typeof__(elem) _elem = (elem);\ 201 (void)sizeof(**_tab == _elem); /* check that types are compatible */\ 202 av_dynarray_add(_tab, nb_ptr, _elem);\ 203 } while(0) 204 #else 205 #define dynarray_add(tab, nb_ptr, elem)\ 206 do {\ 207 av_dynarray_add((tab), nb_ptr, (elem));\ 208 } while(0) 209 #endif 210 211 struct tm *ff_brktimegm(time_t secs, struct tm *tm); 212 213 /** 214 * Automatically create sub-directories 215 * 216 * @param path will create sub-directories by path 217 * @return 0, or < 0 on error 218 */ 219 int ff_mkdir_p(const char *path); 220 221 char *ff_data_to_hex(char *buf, const uint8_t *src, int size, int lowercase); 222 223 /** 224 * Parse a string of hexadecimal strings. Any space between the hexadecimal 225 * digits is ignored. 226 * 227 * @param data if non-null, the parsed data is written to this pointer 228 * @param p the string to parse 229 * @return the number of bytes written (or to be written, if data is null) 230 */ 231 int ff_hex_to_data(uint8_t *data, const char *p); 232 233 /** 234 * Add packet to an AVFormatContext's packet_buffer list, determining its 235 * interleaved position using compare() function argument. 236 * @return 0 on success, < 0 on error. pkt will always be blank on return. 237 */ 238 int ff_interleave_add_packet(AVFormatContext *s, AVPacket *pkt, 239 int (*compare)(AVFormatContext *, const AVPacket *, const AVPacket *)); 240 241 void ff_read_frame_flush(AVFormatContext *s); 242 243 #define NTP_OFFSET 2208988800ULL 244 #define NTP_OFFSET_US (NTP_OFFSET * 1000000ULL) 245 246 /** Get the current time since NTP epoch in microseconds. */ 247 uint64_t ff_ntp_time(void); 248 249 /** 250 * Get the NTP time stamp formatted as per the RFC-5905. 251 * 252 * @param ntp_time NTP time in micro seconds (since NTP epoch) 253 * @return the formatted NTP time stamp 254 */ 255 uint64_t ff_get_formatted_ntp_time(uint64_t ntp_time_us); 256 257 /** 258 * Append the media-specific SDP fragment for the media stream c 259 * to the buffer buff. 260 * 261 * Note, the buffer needs to be initialized, since it is appended to 262 * existing content. 263 * 264 * @param buff the buffer to append the SDP fragment to 265 * @param size the size of the buff buffer 266 * @param st the AVStream of the media to describe 267 * @param idx the global stream index 268 * @param dest_addr the destination address of the media stream, may be NULL 269 * @param dest_type the destination address type, may be NULL 270 * @param port the destination port of the media stream, 0 if unknown 271 * @param ttl the time to live of the stream, 0 if not multicast 272 * @param fmt the AVFormatContext, which might contain options modifying 273 * the generated SDP 274 */ 275 void ff_sdp_write_media(char *buff, int size, AVStream *st, int idx, 276 const char *dest_addr, const char *dest_type, 277 int port, int ttl, AVFormatContext *fmt); 278 279 /** 280 * Write a packet to another muxer than the one the user originally 281 * intended. Useful when chaining muxers, where one muxer internally 282 * writes a received packet to another muxer. 283 * 284 * @param dst the muxer to write the packet to 285 * @param dst_stream the stream index within dst to write the packet to 286 * @param pkt the packet to be written 287 * @param src the muxer the packet originally was intended for 288 * @param interleave 0->use av_write_frame, 1->av_interleaved_write_frame 289 * @return the value av_write_frame returned 290 */ 291 int ff_write_chained(AVFormatContext *dst, int dst_stream, AVPacket *pkt, 292 AVFormatContext *src, int interleave); 293 294 /** 295 * Read a whole line of text from AVIOContext. Stop reading after reaching 296 * either a \\n, a \\0 or EOF. The returned string is always \\0-terminated, 297 * and may be truncated if the buffer is too small. 298 * 299 * @param s the read-only AVIOContext 300 * @param buf buffer to store the read line 301 * @param maxlen size of the buffer 302 * @return the length of the string written in the buffer, not including the 303 * final \\0 304 */ 305 int ff_get_line(AVIOContext *s, char *buf, int maxlen); 306 307 /** 308 * Same as ff_get_line but strip the white-space characters in the text tail 309 * 310 * @param s the read-only AVIOContext 311 * @param buf buffer to store the read line 312 * @param maxlen size of the buffer 313 * @return the length of the string written in the buffer 314 */ 315 int ff_get_chomp_line(AVIOContext *s, char *buf, int maxlen); 316 317 /** 318 * Read a whole line of text from AVIOContext to an AVBPrint buffer. Stop 319 * reading after reaching a \\r, a \\n, a \\r\\n, a \\0 or EOF. The line 320 * ending characters are NOT included in the buffer, but they are skipped on 321 * the input. 322 * 323 * @param s the read-only AVIOContext 324 * @param bp the AVBPrint buffer 325 * @return the length of the read line, not including the line endings, 326 * negative on error. 327 */ 328 int64_t ff_read_line_to_bprint(AVIOContext *s, AVBPrint *bp); 329 330 /** 331 * Read a whole line of text from AVIOContext to an AVBPrint buffer overwriting 332 * its contents. Stop reading after reaching a \\r, a \\n, a \\r\\n, a \\0 or 333 * EOF. The line ending characters are NOT included in the buffer, but they 334 * are skipped on the input. 335 * 336 * @param s the read-only AVIOContext 337 * @param bp the AVBPrint buffer 338 * @return the length of the read line not including the line endings, 339 * negative on error, or if the buffer becomes truncated. 340 */ 341 int64_t ff_read_line_to_bprint_overwrite(AVIOContext *s, AVBPrint *bp); 342 343 #define SPACE_CHARS " \t\r\n" 344 345 /** 346 * Callback function type for ff_parse_key_value. 347 * 348 * @param key a pointer to the key 349 * @param key_len the number of bytes that belong to the key, including the '=' 350 * char 351 * @param dest return the destination pointer for the value in *dest, may 352 * be null to ignore the value 353 * @param dest_len the length of the *dest buffer 354 */ 355 typedef void (*ff_parse_key_val_cb)(void *context, const char *key, 356 int key_len, char **dest, int *dest_len); 357 /** 358 * Parse a string with comma-separated key=value pairs. The value strings 359 * may be quoted and may contain escaped characters within quoted strings. 360 * 361 * @param str the string to parse 362 * @param callback_get_buf function that returns where to store the 363 * unescaped value string. 364 * @param context the opaque context pointer to pass to callback_get_buf 365 */ 366 void ff_parse_key_value(const char *str, ff_parse_key_val_cb callback_get_buf, 367 void *context); 368 369 /** 370 * Find stream index based on format-specific stream ID 371 * @return stream index, or < 0 on error 372 */ 373 int ff_find_stream_index(AVFormatContext *s, int id); 374 375 /** 376 * Internal version of av_index_search_timestamp 377 */ 378 int ff_index_search_timestamp(const AVIndexEntry *entries, int nb_entries, 379 int64_t wanted_timestamp, int flags); 380 381 /** 382 * Internal version of av_add_index_entry 383 */ 384 int ff_add_index_entry(AVIndexEntry **index_entries, 385 int *nb_index_entries, 386 unsigned int *index_entries_allocated_size, 387 int64_t pos, int64_t timestamp, int size, int distance, int flags); 388 389 void ff_configure_buffers_for_index(AVFormatContext *s, int64_t time_tolerance); 390 391 /** 392 * Add a new chapter. 393 * 394 * @param s media file handle 395 * @param id unique ID for this chapter 396 * @param start chapter start time in time_base units 397 * @param end chapter end time in time_base units 398 * @param title chapter title 399 * 400 * @return AVChapter or NULL on error 401 */ 402 AVChapter *avpriv_new_chapter(AVFormatContext *s, int id, AVRational time_base, 403 int64_t start, int64_t end, const char *title); 404 405 /** 406 * Ensure the index uses less memory than the maximum specified in 407 * AVFormatContext.max_index_size by discarding entries if it grows 408 * too large. 409 */ 410 void ff_reduce_index(AVFormatContext *s, int stream_index); 411 412 enum AVCodecID ff_guess_image2_codec(const char *filename); 413 414 /** 415 * Perform a binary search using av_index_search_timestamp() and 416 * AVInputFormat.read_timestamp(). 417 * 418 * @param target_ts target timestamp in the time base of the given stream 419 * @param stream_index stream number 420 */ 421 int ff_seek_frame_binary(AVFormatContext *s, int stream_index, 422 int64_t target_ts, int flags); 423 424 /** 425 * Update cur_dts of all streams based on the given timestamp and AVStream. 426 * 427 * Stream ref_st unchanged, others set cur_dts in their native time base. 428 * Only needed for timestamp wrapping or if (dts not set and pts!=dts). 429 * @param timestamp new dts expressed in time_base of param ref_st 430 * @param ref_st reference stream giving time_base of param timestamp 431 */ 432 void ff_update_cur_dts(AVFormatContext *s, AVStream *ref_st, int64_t timestamp); 433 434 int ff_find_last_ts(AVFormatContext *s, int stream_index, int64_t *ts, int64_t *pos, 435 int64_t (*read_timestamp)(struct AVFormatContext *, int , int64_t *, int64_t )); 436 437 /** 438 * Perform a binary search using read_timestamp(). 439 * 440 * @param target_ts target timestamp in the time base of the given stream 441 * @param stream_index stream number 442 */ 443 int64_t ff_gen_search(AVFormatContext *s, int stream_index, 444 int64_t target_ts, int64_t pos_min, 445 int64_t pos_max, int64_t pos_limit, 446 int64_t ts_min, int64_t ts_max, 447 int flags, int64_t *ts_ret, 448 int64_t (*read_timestamp)(struct AVFormatContext *, int , int64_t *, int64_t )); 449 450 /** 451 * Set the time base and wrapping info for a given stream. This will be used 452 * to interpret the stream's timestamps. If the new time base is invalid 453 * (numerator or denominator are non-positive), it leaves the stream 454 * unchanged. 455 * 456 * @param s stream 457 * @param pts_wrap_bits number of bits effectively used by the pts 458 * (used for wrap control) 459 * @param pts_num time base numerator 460 * @param pts_den time base denominator 461 */ 462 void avpriv_set_pts_info(AVStream *s, int pts_wrap_bits, 463 unsigned int pts_num, unsigned int pts_den); 464 465 /** 466 * Add side data to a packet for changing parameters to the given values. 467 * Parameters set to 0 aren't included in the change. 468 */ 469 int ff_add_param_change(AVPacket *pkt, int32_t channels, 470 uint64_t channel_layout, int32_t sample_rate, 471 int32_t width, int32_t height); 472 473 /** 474 * Set the timebase for each stream from the corresponding codec timebase and 475 * print it. 476 */ 477 int ff_framehash_write_header(AVFormatContext *s); 478 479 /** 480 * Read a transport packet from a media file. 481 * 482 * @param s media file handle 483 * @param pkt is filled 484 * @return 0 if OK, AVERROR_xxx on error 485 */ 486 int ff_read_packet(AVFormatContext *s, AVPacket *pkt); 487 488 /** 489 * Interleave an AVPacket per dts so it can be muxed. 490 * 491 * @param s an AVFormatContext for output. pkt resp. out will be added to 492 * resp. taken from its packet buffer. 493 * @param out the interleaved packet will be output here 494 * @param pkt the input packet; will be blank on return if not NULL 495 * @param flush 1 if no further packets are available as input and all 496 * remaining packets should be output 497 * @return 1 if a packet was output, 0 if no packet could be output 498 * (in which case out may be uninitialized), < 0 if an error occurred 499 */ 500 int ff_interleave_packet_per_dts(AVFormatContext *s, AVPacket *out, 501 AVPacket *pkt, int flush); 502 503 void ff_free_stream(AVFormatContext *s, AVStream *st); 504 505 /** 506 * Return the frame duration in seconds. Return 0 if not available. 507 */ 508 void ff_compute_frame_duration(AVFormatContext *s, int *pnum, int *pden, AVStream *st, 509 AVCodecParserContext *pc, AVPacket *pkt); 510 511 unsigned int ff_codec_get_tag(const AVCodecTag *tags, enum AVCodecID id); 512 513 enum AVCodecID ff_codec_get_id(const AVCodecTag *tags, unsigned int tag); 514 515 int ff_is_intra_only(enum AVCodecID id); 516 517 /** 518 * Select a PCM codec based on the given parameters. 519 * 520 * @param bps bits-per-sample 521 * @param flt floating-point 522 * @param be big-endian 523 * @param sflags signed flags. each bit corresponds to one byte of bit depth. 524 * e.g. the 1st bit indicates if 8-bit should be signed or 525 * unsigned, the 2nd bit indicates if 16-bit should be signed or 526 * unsigned, etc... This is useful for formats such as WAVE where 527 * only 8-bit is unsigned and all other bit depths are signed. 528 * @return a PCM codec id or AV_CODEC_ID_NONE 529 */ 530 enum AVCodecID ff_get_pcm_codec_id(int bps, int flt, int be, int sflags); 531 532 /** 533 * Chooses a timebase for muxing the specified stream. 534 * 535 * The chosen timebase allows sample accurate timestamps based 536 * on the framerate or sample rate for audio streams. It also is 537 * at least as precise as 1/min_precision would be. 538 */ 539 AVRational ff_choose_timebase(AVFormatContext *s, AVStream *st, int min_precision); 540 541 /** 542 * Chooses a timebase for muxing the specified stream. 543 */ 544 enum AVChromaLocation ff_choose_chroma_location(AVFormatContext *s, AVStream *st); 545 546 /** 547 * Generate standard extradata for AVC-Intra based on width/height and field 548 * order. 549 */ 550 int ff_generate_avci_extradata(AVStream *st); 551 552 /** 553 * Add a bitstream filter to a stream. 554 * 555 * @param st output stream to add a filter to 556 * @param name the name of the filter to add 557 * @param args filter-specific argument string 558 * @return >0 on success; 559 * AVERROR code on failure 560 */ 561 int ff_stream_add_bitstream_filter(AVStream *st, const char *name, const char *args); 562 563 /** 564 * Copy encoding parameters from source to destination stream 565 * 566 * @param dst pointer to destination AVStream 567 * @param src pointer to source AVStream 568 * @return >=0 on success, AVERROR code on error 569 */ 570 int ff_stream_encode_params_copy(AVStream *dst, const AVStream *src); 571 572 /** 573 * Wrap avpriv_io_move and log if error happens. 574 * 575 * @param url_src source path 576 * @param url_dst destination path 577 * @return 0 or AVERROR on failure 578 */ 579 int ff_rename(const char *url_src, const char *url_dst, void *logctx); 580 581 /** 582 * Allocate extradata with additional AV_INPUT_BUFFER_PADDING_SIZE at end 583 * which is always set to 0. 584 * 585 * Previously allocated extradata in par will be freed. 586 * 587 * @param size size of extradata 588 * @return 0 if OK, AVERROR_xxx on error 589 */ 590 int ff_alloc_extradata(AVCodecParameters *par, int size); 591 592 /** 593 * Allocate extradata with additional AV_INPUT_BUFFER_PADDING_SIZE at end 594 * which is always set to 0 and fill it from pb. 595 * 596 * @param size size of extradata 597 * @return >= 0 if OK, AVERROR_xxx on error 598 */ 599 int ff_get_extradata(AVFormatContext *s, AVCodecParameters *par, AVIOContext *pb, int size); 600 601 /** 602 * add frame for rfps calculation. 603 * 604 * @param dts timestamp of the i-th frame 605 * @return 0 if OK, AVERROR_xxx on error 606 */ 607 int ff_rfps_add_frame(AVFormatContext *ic, AVStream *st, int64_t dts); 608 609 void ff_rfps_calculate(AVFormatContext *ic); 610 611 /** 612 * Flags for AVFormatContext.write_uncoded_frame() 613 */ 614 enum AVWriteUncodedFrameFlags { 615 616 /** 617 * Query whether the feature is possible on this stream. 618 * The frame argument is ignored. 619 */ 620 AV_WRITE_UNCODED_FRAME_QUERY = 0x0001, 621 622 }; 623 624 /** 625 * Copies the whilelists from one context to the other 626 */ 627 int ff_copy_whiteblacklists(AVFormatContext *dst, const AVFormatContext *src); 628 629 /** 630 * Returned by demuxers to indicate that data was consumed but discarded 631 * (ignored streams or junk data). The framework will re-call the demuxer. 632 */ 633 #define FFERROR_REDO FFERRTAG('R','E','D','O') 634 635 /** 636 * Utility function to open IO stream of output format. 637 * 638 * @param s AVFormatContext 639 * @param url URL or file name to open for writing 640 * @options optional options which will be passed to io_open callback 641 * @return >=0 on success, negative AVERROR in case of failure 642 */ 643 int ff_format_output_open(AVFormatContext *s, const char *url, AVDictionary **options); 644 645 /* 646 * A wrapper around AVFormatContext.io_close that should be used 647 * instead of calling the pointer directly. 648 */ 649 void ff_format_io_close(AVFormatContext *s, AVIOContext **pb); 650 651 /** 652 * Utility function to check if the file uses http or https protocol 653 * 654 * @param s AVFormatContext 655 * @param filename URL or file name to open for writing 656 */ 657 int ff_is_http_proto(char *filename); 658 659 /** 660 * Parse creation_time in AVFormatContext metadata if exists and warn if the 661 * parsing fails. 662 * 663 * @param s AVFormatContext 664 * @param timestamp parsed timestamp in microseconds, only set on successful parsing 665 * @param return_seconds set this to get the number of seconds in timestamp instead of microseconds 666 * @return 1 if OK, 0 if the metadata was not present, AVERROR(EINVAL) on parse error 667 */ 668 int ff_parse_creation_time_metadata(AVFormatContext *s, int64_t *timestamp, int return_seconds); 669 670 /** 671 * Standardize creation_time metadata in AVFormatContext to an ISO-8601 672 * timestamp string. 673 * 674 * @param s AVFormatContext 675 * @return <0 on error 676 */ 677 int ff_standardize_creation_time(AVFormatContext *s); 678 679 #define CONTAINS_PAL 2 680 /** 681 * Reshuffles the lines to use the user specified stride. 682 * 683 * @param ppkt input and output packet 684 * @return negative error code or 685 * 0 if no new packet was allocated 686 * non-zero if a new packet was allocated and ppkt has to be freed 687 * CONTAINS_PAL if in addition to a new packet the old contained a palette 688 */ 689 int ff_reshuffle_raw_rgb(AVFormatContext *s, AVPacket **ppkt, AVCodecParameters *par, int expected_stride); 690 691 /** 692 * Retrieves the palette from a packet, either from side data, or 693 * appended to the video data in the packet itself (raw video only). 694 * It is commonly used after a call to ff_reshuffle_raw_rgb(). 695 * 696 * Use 0 for the ret parameter to check for side data only. 697 * 698 * @param pkt pointer to packet before calling ff_reshuffle_raw_rgb() 699 * @param ret return value from ff_reshuffle_raw_rgb(), or 0 700 * @param palette pointer to palette buffer 701 * @return negative error code or 702 * 1 if the packet has a palette, else 0 703 */ 704 int ff_get_packet_palette(AVFormatContext *s, AVPacket *pkt, int ret, uint32_t *palette); 705 706 /** 707 * Finalize buf into extradata and set its size appropriately. 708 */ 709 int ff_bprint_to_codecpar_extradata(AVCodecParameters *par, struct AVBPrint *buf); 710 711 /** 712 * Find the next packet in the interleaving queue for the given stream. 713 * The pkt parameter is filled in with the queued packet, including 714 * references to the data (which the caller is not allowed to keep or 715 * modify). 716 * 717 * @return 0 if a packet was found, a negative value if no packet was found 718 */ 719 int ff_interleaved_peek(AVFormatContext *s, int stream, 720 AVPacket *pkt, int add_offset); 721 722 723 int ff_lock_avformat(void); 724 int ff_unlock_avformat(void); 725 726 /** 727 * Set AVFormatContext url field to the provided pointer. The pointer must 728 * point to a valid string. The existing url field is freed if necessary. Also 729 * set the legacy filename field to the same string which was provided in url. 730 */ 731 void ff_format_set_url(AVFormatContext *s, char *url); 732 733 #define FF_PACKETLIST_FLAG_REF_PACKET (1 << 0) /**< Create a new reference for the packet instead of 734 transferring the ownership of the existing one to the 735 list. */ 736 737 /** 738 * Append an AVPacket to the list. 739 * 740 * @param head List head element 741 * @param tail List tail element 742 * @param pkt The packet being appended. The data described in it will 743 * be made reference counted if it isn't already. 744 * @param flags Any combination of FF_PACKETLIST_FLAG_* flags 745 * @return 0 on success, negative AVERROR value on failure. On failure, 746 the list is unchanged 747 */ 748 int ff_packet_list_put(AVPacketList **head, AVPacketList **tail, 749 AVPacket *pkt, int flags); 750 751 /** 752 * Remove the oldest AVPacket in the list and return it. 753 * The behaviour is undefined if the packet list is empty. 754 * 755 * @note The pkt will be overwritten completely. The caller owns the 756 * packet and must unref it by itself. 757 * 758 * @param head List head element 759 * @param tail List tail element 760 * @param pkt Pointer to an AVPacket struct 761 * @return 0 on success. Success is guaranteed 762 * if the packet list is not empty. 763 */ 764 int ff_packet_list_get(AVPacketList **head, AVPacketList **tail, 765 AVPacket *pkt); 766 767 /** 768 * Wipe the list and unref all the packets in it. 769 * 770 * @param head List head element 771 * @param tail List tail element 772 */ 773 void ff_packet_list_free(AVPacketList **head, AVPacketList **tail); 774 775 void avpriv_register_devices(const AVOutputFormat * const o[], const AVInputFormat * const i[]); 776 777 #endif /* AVFORMAT_INTERNAL_H */ 778