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 "thread_queue.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 #include "libavutil/thread.h"
36 
37 typedef struct MuxStream {
39 
40  // name used for logging
41  char log_name[32];
42 
43  /* the packets are buffered here until the muxer is ready to be initialized */
45 
47 
49 
50  int64_t max_frames;
51 
52  /*
53  * The size of the AVPackets' buffers in queue.
54  * Updated when a packet is either pushed or pulled from the queue.
55  */
57 
59 
60  /* Threshold after which max_muxing_queue_size will be in effect */
62 
63  /* dts of the last packet sent to the muxer, in the stream timebase
64  * used for making up missing dts values */
65  int64_t last_mux_dts;
66 } MuxStream;
67 
68 typedef struct Muxer {
70 
71  // name used for logging
72  char log_name[32];
73 
75 
78 
80 
82 
83  /* filesize limit expressed in bytes */
84  int64_t limit_filesize;
87 
90 } Muxer;
91 
92 /* whether we want to print an SDP, set in of_open() */
93 extern int want_sdp;
94 
95 int mux_check_init(Muxer *mux);
96 
98 {
99  return (MuxStream*)ost;
100 }
101 
102 #endif /* FFTOOLS_FFMPEG_MUX_H */
MuxStream::ost
OutputStream ost
Definition: ffmpeg_mux.h:38
Muxer::fc
AVFormatContext * fc
Definition: ffmpeg_mux.h:74
ms_from_ost
static MuxStream * ms_from_ost(OutputStream *ost)
Definition: ffmpeg_mux.h:97
want_sdp
int want_sdp
Definition: ffmpeg_mux.c:41
Muxer::thread
pthread_t thread
Definition: ffmpeg_mux.h:76
thread.h
MuxStream::muxing_queue
AVFifo * muxing_queue
Definition: ffmpeg_mux.h:44
MuxStream::max_muxing_queue_size
int max_muxing_queue_size
Definition: ffmpeg_mux.h:58
Muxer::thread_queue_size
int thread_queue_size
Definition: ffmpeg_mux.h:81
MuxStream::muxing_queue_data_threshold
size_t muxing_queue_data_threshold
Definition: ffmpeg_mux.h:61
Muxer::of
OutputFile of
Definition: ffmpeg_mux.h:69
AVDictionary
Definition: dict.c:32
ost
static AVStream * ost
Definition: vaapi_transcode.c:42
AVBSFContext
The bitstream filter state.
Definition: bsf.h:68
mux_check_init
int mux_check_init(Muxer *mux)
Definition: ffmpeg_mux.c:506
Muxer
Definition: ffmpeg_mux.h:68
fifo.h
Muxer::tq
ThreadQueue * tq
Definition: ffmpeg_mux.h:77
Muxer::sq_pkt
AVPacket * sq_pkt
Definition: ffmpeg_mux.h:89
MuxStream::log_name
char log_name[32]
Definition: ffmpeg_mux.h:41
MuxStream::max_frames
int64_t max_frames
Definition: ffmpeg_mux.h:50
Muxer::limit_filesize
int64_t limit_filesize
Definition: ffmpeg_mux.h:84
AVFormatContext
Format I/O context.
Definition: avformat.h:1104
EncStats
Definition: ffmpeg.h:527
MuxStream::bsf_ctx
AVBSFContext * bsf_ctx
Definition: ffmpeg_mux.h:46
Muxer::log_name
char log_name[32]
Definition: ffmpeg_mux.h:72
Muxer::last_filesize
atomic_int_least64_t last_filesize
Definition: ffmpeg_mux.h:85
Muxer::sq_mux
SyncQueue * sq_mux
Definition: ffmpeg_mux.h:88
AVFifo
Definition: fifo.c:35
Muxer::opts
AVDictionary * opts
Definition: ffmpeg_mux.h:79
MuxStream
Definition: ffmpeg_mux.h:37
pthread_t
Definition: os2threads.h:44
MuxStream::muxing_queue_data_size
size_t muxing_queue_data_size
Definition: ffmpeg_mux.h:56
packet.h
MuxStream::stats
EncStats stats
Definition: ffmpeg_mux.h:48
atomic_int_least64_t
intptr_t atomic_int_least64_t
Definition: stdatomic.h:68
Muxer::header_written
int header_written
Definition: ffmpeg_mux.h:86
ThreadQueue
Definition: thread_queue.c:42
avformat.h
dict.h
SyncQueue
Definition: sync_queue.c:45
thread_queue.h
AVPacket
This structure stores compressed data.
Definition: packet.h:351
OutputStream
Definition: mux.c:53
MuxStream::last_mux_dts
int64_t last_mux_dts
Definition: ffmpeg_mux.h:65
OutputFile
Definition: ffmpeg.h:692