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