1cabdff1aSopenharmony_ci/* 2cabdff1aSopenharmony_ci * copyright (c) 2001 Fabrice Bellard 3cabdff1aSopenharmony_ci * 4cabdff1aSopenharmony_ci * This file is part of FFmpeg. 5cabdff1aSopenharmony_ci * 6cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or 7cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public 8cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either 9cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version. 10cabdff1aSopenharmony_ci * 11cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful, 12cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of 13cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14cabdff1aSopenharmony_ci * Lesser General Public License for more details. 15cabdff1aSopenharmony_ci * 16cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public 17cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software 18cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19cabdff1aSopenharmony_ci */ 20cabdff1aSopenharmony_ci 21cabdff1aSopenharmony_ci#ifndef AVFORMAT_MUX_H 22cabdff1aSopenharmony_ci#define AVFORMAT_MUX_H 23cabdff1aSopenharmony_ci 24cabdff1aSopenharmony_ci#include <stdint.h> 25cabdff1aSopenharmony_ci#include "libavcodec/packet.h" 26cabdff1aSopenharmony_ci#include "avformat.h" 27cabdff1aSopenharmony_ci 28cabdff1aSopenharmony_ci/** 29cabdff1aSopenharmony_ci * Add packet to an AVFormatContext's packet_buffer list, determining its 30cabdff1aSopenharmony_ci * interleaved position using compare() function argument. 31cabdff1aSopenharmony_ci * @return 0 on success, < 0 on error. pkt will always be blank on return. 32cabdff1aSopenharmony_ci */ 33cabdff1aSopenharmony_ciint ff_interleave_add_packet(AVFormatContext *s, AVPacket *pkt, 34cabdff1aSopenharmony_ci int (*compare)(AVFormatContext *, const AVPacket *, const AVPacket *)); 35cabdff1aSopenharmony_ci 36cabdff1aSopenharmony_ci/** 37cabdff1aSopenharmony_ci * Interleave an AVPacket per dts so it can be muxed. 38cabdff1aSopenharmony_ci * See the documentation of AVOutputFormat.interleave_packet for details. 39cabdff1aSopenharmony_ci */ 40cabdff1aSopenharmony_ciint ff_interleave_packet_per_dts(AVFormatContext *s, AVPacket *pkt, 41cabdff1aSopenharmony_ci int flush, int has_packet); 42cabdff1aSopenharmony_ci 43cabdff1aSopenharmony_ci/** 44cabdff1aSopenharmony_ci * Interleave packets directly in the order in which they arrive 45cabdff1aSopenharmony_ci * without any sort of buffering. 46cabdff1aSopenharmony_ci */ 47cabdff1aSopenharmony_ciint ff_interleave_packet_passthrough(AVFormatContext *s, AVPacket *pkt, 48cabdff1aSopenharmony_ci int flush, int has_packet); 49cabdff1aSopenharmony_ci 50cabdff1aSopenharmony_ci/** 51cabdff1aSopenharmony_ci * Find the next packet in the interleaving queue for the given stream. 52cabdff1aSopenharmony_ci * 53cabdff1aSopenharmony_ci * @return a pointer to a packet if one was found, NULL otherwise. 54cabdff1aSopenharmony_ci */ 55cabdff1aSopenharmony_ciconst AVPacket *ff_interleaved_peek(AVFormatContext *s, int stream); 56cabdff1aSopenharmony_ci 57cabdff1aSopenharmony_ciint ff_get_muxer_ts_offset(AVFormatContext *s, int stream_index, int64_t *offset); 58cabdff1aSopenharmony_ci 59cabdff1aSopenharmony_ci/** 60cabdff1aSopenharmony_ci * Add a bitstream filter to a stream. 61cabdff1aSopenharmony_ci * 62cabdff1aSopenharmony_ci * @param st output stream to add a filter to 63cabdff1aSopenharmony_ci * @param name the name of the filter to add 64cabdff1aSopenharmony_ci * @param args filter-specific argument string 65cabdff1aSopenharmony_ci * @return >0 on success; 66cabdff1aSopenharmony_ci * AVERROR code on failure 67cabdff1aSopenharmony_ci */ 68cabdff1aSopenharmony_ciint ff_stream_add_bitstream_filter(AVStream *st, const char *name, const char *args); 69cabdff1aSopenharmony_ci 70cabdff1aSopenharmony_ci/** 71cabdff1aSopenharmony_ci * Write a packet to another muxer than the one the user originally 72cabdff1aSopenharmony_ci * intended. Useful when chaining muxers, where one muxer internally 73cabdff1aSopenharmony_ci * writes a received packet to another muxer. 74cabdff1aSopenharmony_ci * 75cabdff1aSopenharmony_ci * @param dst the muxer to write the packet to 76cabdff1aSopenharmony_ci * @param dst_stream the stream index within dst to write the packet to 77cabdff1aSopenharmony_ci * @param pkt the packet to be written. It will be returned blank when 78cabdff1aSopenharmony_ci * av_interleaved_write_frame() is used, unchanged otherwise. 79cabdff1aSopenharmony_ci * @param src the muxer the packet originally was intended for 80cabdff1aSopenharmony_ci * @param interleave 0->use av_write_frame, 1->av_interleaved_write_frame 81cabdff1aSopenharmony_ci * @return the value av_write_frame returned 82cabdff1aSopenharmony_ci */ 83cabdff1aSopenharmony_ciint ff_write_chained(AVFormatContext *dst, int dst_stream, AVPacket *pkt, 84cabdff1aSopenharmony_ci AVFormatContext *src, int interleave); 85cabdff1aSopenharmony_ci 86cabdff1aSopenharmony_ci/** 87cabdff1aSopenharmony_ci * Flags for AVFormatContext.write_uncoded_frame() 88cabdff1aSopenharmony_ci */ 89cabdff1aSopenharmony_cienum AVWriteUncodedFrameFlags { 90cabdff1aSopenharmony_ci 91cabdff1aSopenharmony_ci /** 92cabdff1aSopenharmony_ci * Query whether the feature is possible on this stream. 93cabdff1aSopenharmony_ci * The frame argument is ignored. 94cabdff1aSopenharmony_ci */ 95cabdff1aSopenharmony_ci AV_WRITE_UNCODED_FRAME_QUERY = 0x0001, 96cabdff1aSopenharmony_ci 97cabdff1aSopenharmony_ci}; 98cabdff1aSopenharmony_ci 99cabdff1aSopenharmony_ci/** 100cabdff1aSopenharmony_ci * Make shift_size amount of space at read_start by shifting data in the output 101cabdff1aSopenharmony_ci * at read_start until the current IO position. The underlying IO context must 102cabdff1aSopenharmony_ci * be seekable. 103cabdff1aSopenharmony_ci */ 104cabdff1aSopenharmony_ciint ff_format_shift_data(AVFormatContext *s, int64_t read_start, int shift_size); 105cabdff1aSopenharmony_ci 106cabdff1aSopenharmony_ci/** 107cabdff1aSopenharmony_ci * Utility function to open IO stream of output format. 108cabdff1aSopenharmony_ci * 109cabdff1aSopenharmony_ci * @param s AVFormatContext 110cabdff1aSopenharmony_ci * @param url URL or file name to open for writing 111cabdff1aSopenharmony_ci * @options optional options which will be passed to io_open callback 112cabdff1aSopenharmony_ci * @return >=0 on success, negative AVERROR in case of failure 113cabdff1aSopenharmony_ci */ 114cabdff1aSopenharmony_ciint ff_format_output_open(AVFormatContext *s, const char *url, AVDictionary **options); 115cabdff1aSopenharmony_ci 116cabdff1aSopenharmony_ci/** 117cabdff1aSopenharmony_ci * Copy encoding parameters from source to destination stream 118cabdff1aSopenharmony_ci * 119cabdff1aSopenharmony_ci * @param dst pointer to destination AVStream 120cabdff1aSopenharmony_ci * @param src pointer to source AVStream 121cabdff1aSopenharmony_ci * @return >=0 on success, AVERROR code on error 122cabdff1aSopenharmony_ci */ 123cabdff1aSopenharmony_ciint ff_stream_encode_params_copy(AVStream *dst, const AVStream *src); 124cabdff1aSopenharmony_ci 125cabdff1aSopenharmony_ci/** 126cabdff1aSopenharmony_ci * Parse creation_time in AVFormatContext metadata if exists and warn if the 127cabdff1aSopenharmony_ci * parsing fails. 128cabdff1aSopenharmony_ci * 129cabdff1aSopenharmony_ci * @param s AVFormatContext 130cabdff1aSopenharmony_ci * @param timestamp parsed timestamp in microseconds, only set on successful parsing 131cabdff1aSopenharmony_ci * @param return_seconds set this to get the number of seconds in timestamp instead of microseconds 132cabdff1aSopenharmony_ci * @return 1 if OK, 0 if the metadata was not present, AVERROR(EINVAL) on parse error 133cabdff1aSopenharmony_ci */ 134cabdff1aSopenharmony_ciint ff_parse_creation_time_metadata(AVFormatContext *s, int64_t *timestamp, int return_seconds); 135cabdff1aSopenharmony_ci 136cabdff1aSopenharmony_ci/** 137cabdff1aSopenharmony_ci * Standardize creation_time metadata in AVFormatContext to an ISO-8601 138cabdff1aSopenharmony_ci * timestamp string. 139cabdff1aSopenharmony_ci * 140cabdff1aSopenharmony_ci * @param s AVFormatContext 141cabdff1aSopenharmony_ci * @return <0 on error 142cabdff1aSopenharmony_ci */ 143cabdff1aSopenharmony_ciint ff_standardize_creation_time(AVFormatContext *s); 144cabdff1aSopenharmony_ci 145cabdff1aSopenharmony_ci#endif /* AVFORMAT_MUX_H */ 146