FFmpeg
ffmpeg_mux.h
Go to the documentation of this file.
1 /*
2  * Muxer internal APIs - should not be included outside of ffmpeg_mux*
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 FFTOOLS_FFMPEG_MUX_H
22 #define FFTOOLS_FFMPEG_MUX_H
23 
24 #include <stdatomic.h>
25 #include <stdint.h>
26 
27 #include "ffmpeg_sched.h"
28 
29 #include "libavformat/avformat.h"
30 
31 #include "libavcodec/packet.h"
32 
33 #include "libavutil/dict.h"
34 #include "libavutil/fifo.h"
35 
36 typedef struct MuxStream {
38 
39  /**
40  * Codec parameters for packets submitted to the muxer (i.e. before
41  * bitstream filtering, if any).
42  */
44 
45  // name used for logging
46  char log_name[32];
47 
50 
52 
54 
55  int sch_idx;
58 
60 
62 
63  // timestamp from which the streamcopied streams should start,
64  // in AV_TIME_BASE_Q;
65  // everything before it should be discarded
67 
68  /* dts of the last packet sent to the muxer, in the stream timebase
69  * used for making up missing dts values */
71 
74 
75  // state for av_rescale_delta() call for audio in write_packet()
77 
78  // combined size of all the packets sent to the muxer
79  uint64_t data_size_mux;
80 
84 #if FFMPEG_OPT_VSYNC_DROP
85  int ts_drop;
86 #endif
87 
90  int force_fps;
91 
92  const char *apad;
93 } MuxStream;
94 
95 typedef struct Muxer {
97 
98  // name used for logging
99  char log_name[32];
100 
102 
104  unsigned sch_idx;
105 
106  // OutputStream indices indexed by scheduler stream indices
109 
111 
112  // used to validate that all encoder avoptions have been actually used
114 
115  /* filesize limit expressed in bytes */
119 
122 } Muxer;
123 
124 int mux_check_init(void *arg);
125 
127 {
128  return (MuxStream*)ost;
129 }
130 
131 #endif /* FFTOOLS_FFMPEG_MUX_H */
MuxStream::ost
OutputStream ost
Definition: ffmpeg_mux.h:37
MuxStream::copy_initial_nonkeyframes
int copy_initial_nonkeyframes
Definition: ffmpeg_mux.h:81
MuxStream::sch_idx_enc
int sch_idx_enc
Definition: ffmpeg_mux.h:56
Muxer::fc
AVFormatContext * fc
Definition: ffmpeg_mux.h:101
ms_from_ost
static MuxStream * ms_from_ost(OutputStream *ost)
Definition: ffmpeg_mux.h:126
MuxStream::sch_idx
int sch_idx
Definition: ffmpeg_mux.h:55
Muxer::sch_stream_idx
int * sch_stream_idx
Definition: ffmpeg_mux.h:107
AVCodecParameters
This struct describes the properties of an encoded stream.
Definition: codec_par.h:47
Muxer::nb_sch_stream_idx
int nb_sch_stream_idx
Definition: ffmpeg_mux.h:108
int64_t
long long int64_t
Definition: coverity.c:34
Muxer::of
OutputFile of
Definition: ffmpeg_mux.h:96
MuxStream::force_fps
int force_fps
Definition: ffmpeg_mux.h:90
MuxStream::ts_rescale_delta_last
int64_t ts_rescale_delta_last
Definition: ffmpeg_mux.h:76
AVDictionary
Definition: dict.c:34
MuxStream::copy_prior_start
int copy_prior_start
Definition: ffmpeg_mux.h:82
ost
static AVStream * ost
Definition: vaapi_transcode.c:42
AVBSFContext
The bitstream filter state.
Definition: bsf.h:68
MuxStream::ts_copy_start
int64_t ts_copy_start
Definition: ffmpeg_mux.h:66
MuxStream::stream_duration_tb
AVRational stream_duration_tb
Definition: ffmpeg_mux.h:73
Muxer
Definition: ffmpeg_mux.h:95
fifo.h
Muxer::sq_pkt
AVPacket * sq_pkt
Definition: ffmpeg_mux.h:121
MuxStream::log_name
char log_name[32]
Definition: ffmpeg_mux.h:46
MuxStream::pkt
AVPacket * pkt
Definition: ffmpeg_mux.h:51
MuxStream::max_frames
int64_t max_frames
Definition: ffmpeg_mux.h:61
Muxer::limit_filesize
int64_t limit_filesize
Definition: ffmpeg_mux.h:116
arg
const char * arg
Definition: jacosubdec.c:67
AVFormatContext
Format I/O context.
Definition: avformat.h:1300
MuxStream::max_frame_rate
AVRational max_frame_rate
Definition: ffmpeg_mux.h:89
MuxStream::frame_rate
AVRational frame_rate
Definition: ffmpeg_mux.h:88
MuxStream::sch_idx_src
int sch_idx_src
Definition: ffmpeg_mux.h:57
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
EncStats
Definition: ffmpeg.h:532
MuxStream::bsf_ctx
AVBSFContext * bsf_ctx
Definition: ffmpeg_mux.h:48
MuxStream::par_in
AVCodecParameters * par_in
Codec parameters for packets submitted to the muxer (i.e.
Definition: ffmpeg_mux.h:43
MuxStream::streamcopy_started
int streamcopy_started
Definition: ffmpeg_mux.h:83
Muxer::log_name
char log_name[32]
Definition: ffmpeg_mux.h:99
Muxer::last_filesize
atomic_int_least64_t last_filesize
Definition: ffmpeg_mux.h:117
Scheduler
Definition: ffmpeg_sched.c:275
MuxStream::data_size_mux
uint64_t data_size_mux
Definition: ffmpeg_mux.h:79
Muxer::sq_mux
SyncQueue * sq_mux
Definition: ffmpeg_mux.h:120
MuxStream::apad
const char * apad
Definition: ffmpeg_mux.h:92
Muxer::sch
Scheduler * sch
Definition: ffmpeg_mux.h:103
Muxer::opts
AVDictionary * opts
Definition: ffmpeg_mux.h:110
MuxStream::bsf_pkt
AVPacket * bsf_pkt
Definition: ffmpeg_mux.h:49
MuxStream
Definition: ffmpeg_mux.h:36
Muxer::sch_idx
unsigned sch_idx
Definition: ffmpeg_mux.h:104
packet.h
MuxStream::stats
EncStats stats
Definition: ffmpeg_mux.h:53
atomic_int_least64_t
intptr_t atomic_int_least64_t
Definition: stdatomic.h:68
Muxer::header_written
int header_written
Definition: ffmpeg_mux.h:118
avformat.h
dict.h
mux_check_init
int mux_check_init(void *arg)
Definition: ffmpeg_mux.c:555
SyncQueue
A sync queue provides timestamp synchronization between multiple streams.
Definition: sync_queue.c:88
MuxStream::sq_idx_mux
int sq_idx_mux
Definition: ffmpeg_mux.h:59
ffmpeg_sched.h
AVPacket
This structure stores compressed data.
Definition: packet.h:516
Muxer::enc_opts_used
AVDictionary * enc_opts_used
Definition: ffmpeg_mux.h:113
OutputStream
Definition: mux.c:53
MuxStream::last_mux_dts
int64_t last_mux_dts
Definition: ffmpeg_mux.h:70
MuxStream::stream_duration
int64_t stream_duration
Definition: ffmpeg_mux.h:72
OutputFile
Definition: ffmpeg.h:638