FFmpeg
ffmpeg_filter.h
Go to the documentation of this file.
1 /*
2  * This file is part of FFmpeg.
3  *
4  * FFmpeg is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * FFmpeg is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with FFmpeg; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18 
19 #ifndef FFTOOLS_FFMPEG_FILTER_H
20 #define FFTOOLS_FFMPEG_FILTER_H
21 
22 #include "ffmpeg.h"
23 
24 #include <stdint.h>
25 
26 #include "ffmpeg_sched.h"
27 #include "sync_queue.h"
28 
29 #include "libavfilter/avfilter.h"
30 
31 #include "libavutil/avutil.h"
32 #include "libavutil/dict.h"
33 #include "libavutil/fifo.h"
34 #include "libavutil/pixfmt.h"
35 #include "libavutil/rational.h"
36 #include "libavutil/bprint.h"
38 #include "libavutil/downmix_info.h"
39 
40 typedef struct FilterGraphPriv {
42 
43  // name used for logging
44  char log_name[32];
45 
46  int is_simple;
47  // true when the filtergraph contains only meta filters
48  // that do not modify the frame data
49  int is_meta;
50  // source filters are present in the graph
53 
54  unsigned nb_outputs_done;
55 
56  const char *graph_desc;
57 
59 
60  // frame for temporarily holding output from the filtergraph
62  // frame for sending output to the encoder
64 
66  unsigned sch_idx;
67 
68  AVBPrint graph_print_buf;
69 
71 
73 {
74  return (FilterGraphPriv*)fg;
75 }
76 
77 static inline const FilterGraphPriv *cfgp_from_cfg(const FilterGraph *fg)
78 {
79  return (const FilterGraphPriv*)fg;
80 }
81 
82 typedef struct InputFilterPriv {
84 
86 
87  int index;
88 
90 
91  // used to hold submitted input
93 
94  /* for filters that are not yet bound to an input stream,
95  * this stores the input linklabel, if any */
96  uint8_t *linklabel;
97 
98  // filter data type
100  // source data type: AVMEDIA_TYPE_SUBTITLE for sub2video,
101  // same as type otherwise
103 
104  int eof;
105  int bound;
107  uint64_t nb_dropped;
108 
109  // parameters configured for this input
110  int format;
111 
112  int width, height;
116 
119 
121 
124 
126 
128 
132 
135 
136  struct {
137  AVFrame *frame;
138 
141 
142  /// marks if sub2video_update should force an initialization
143  unsigned int initialize;
144  } sub2video;
146 
148 {
149  return (InputFilterPriv*)ifilter;
150 }
151 
152 typedef struct FPSConvContext {
154  /* number of frames emitted by the video-encoding sync code */
156  /* history of nb_frames_prev, i.e. the number of times the
157  * previous frame was duplicated by vsync code in recent
158  * do_video_out() calls */
160 
161  uint64_t dup_warning;
162 
165 
167 
173 
174 
175 typedef struct OutputFilterPriv {
177 
178  int index;
179 
180  void *log_parent;
181  char log_name[32];
182 
183  char *name;
184 
186 
187  /* desired output stream properties */
188  int format;
189  int width, height;
194 
197 
198  // time base in which the output is sent to our downstream
199  // does not need to match the filtersink's timebase
201  // at least one frame with the above timebase was sent
202  // to our downstream, so it cannot change anymore
204 
206 
209 
210  // those are only set if no format is specified and the encoder gives us multiple options
211  // They point directly to the relevant lists of the encoder.
212  const int *formats;
214  const int *sample_rates;
217 
221  // offset for output timestamps, in AV_TIME_BASE_Q
225 
226  unsigned flags;
228 
230 {
231  return (OutputFilterPriv*)ofilter;
232 }
233 
234 #endif /* FFTOOLS_FFMPEG_FILTER_H */
InputFilterPriv::nb_dropped
uint64_t nb_dropped
Definition: ffmpeg_filter.h:107
InputFilterPriv::type
enum AVMediaType type
Definition: ffmpeg_filter.h:99
OutputFilterPriv::filter
AVFilterContext * filter
Definition: ffmpeg_filter.h:185
FilterGraphPriv::frame
AVFrame * frame
Definition: ffmpeg_filter.h:61
FilterGraphPriv::sch
Scheduler * sch
Definition: ffmpeg_filter.h:65
InputFilterPriv::ch_layout
AVChannelLayout ch_layout
Definition: ffmpeg_filter.h:118
InputFilterPriv::last_pts
int64_t last_pts
Definition: ffmpeg_filter.h:139
InputFilterPriv::filter
AVFilterContext * filter
Definition: ffmpeg_filter.h:89
rational.h
InputFilterPriv::time_base
AVRational time_base
Definition: ffmpeg_filter.h:120
int64_t
long long int64_t
Definition: coverity.c:34
FPSConvContext::frames_prev_hist
int64_t frames_prev_hist[3]
Definition: ffmpeg_filter.h:159
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:410
FilterGraphPriv::log_name
char log_name[32]
Definition: ffmpeg_filter.h:44
FilterGraphPriv::have_sources
int have_sources
Definition: ffmpeg_filter.h:51
sync_queue.h
InputFilterPriv::sample_rate
int sample_rate
Definition: ffmpeg_filter.h:117
FPSConvContext::last_dropped
int last_dropped
Definition: ffmpeg_filter.h:163
OutputFilterPriv::ts_offset
int64_t ts_offset
Definition: ffmpeg_filter.h:222
ffmpeg.h
AVDictionary
Definition: dict.c:32
FilterGraphPriv
Definition: ffmpeg_filter.h:40
OutputFilterPriv::log_name
char log_name[32]
Definition: ffmpeg_filter.h:181
fifo.h
OutputFilterPriv
Definition: ffmpeg_filter.h:175
OutputFilterPriv::name
char * name
Definition: ffmpeg_filter.h:183
OutputFilterPriv::side_data
AVFrameSideData ** side_data
Definition: ffmpeg_filter.h:195
OutputFilterPriv::index
int index
Definition: ffmpeg_filter.h:178
AVDownmixInfo
This structure describes optional metadata relevant to a downmix procedure.
Definition: downmix_info.h:58
FilterGraphPriv::graph_print_buf
AVBPrint graph_print_buf
Definition: ffmpeg_filter.h:68
OutputFilterPriv::sws_opts
AVDictionary * sws_opts
Definition: ffmpeg_filter.h:207
OutputFilterPriv::sample_rate
int sample_rate
Definition: ffmpeg_filter.h:190
InputFilterPriv::sub2video
struct InputFilterPriv::@8 sub2video
FPSConvContext::dropped_keyframe
int dropped_keyframe
Definition: ffmpeg_filter.h:164
OutputFilterPriv::nb_side_data
int nb_side_data
Definition: ffmpeg_filter.h:196
OutputFilterPriv::trim_start_us
int64_t trim_start_us
Definition: ffmpeg_filter.h:219
InputFilterPriv::nb_side_data
int nb_side_data
Definition: ffmpeg_filter.h:123
InputFilterPriv
Definition: ffmpeg_filter.h:82
FilterGraphPriv::frame_enc
AVFrame * frame_enc
Definition: ffmpeg_filter.h:63
InputFilterPriv::frame
AVFrame * frame
Definition: ffmpeg_filter.h:92
InputFilter
Definition: ffmpeg.h:352
FilterGraphPriv::nb_outputs_done
unsigned nb_outputs_done
Definition: ffmpeg_filter.h:54
OutputFilterPriv::fps
FPSConvContext fps
Definition: ffmpeg_filter.h:224
OutputFilterPriv::ch_layouts
const AVChannelLayout * ch_layouts
Definition: ffmpeg_filter.h:213
OutputFilterPriv::width
int width
Definition: ffmpeg_filter.h:189
OutputFilterPriv::enc_timebase
AVRational enc_timebase
Definition: ffmpeg_filter.h:218
InputFilterPriv::color_space
enum AVColorSpace color_space
Definition: ffmpeg_filter.h:114
OutputFilterPriv::ch_layout
AVChannelLayout ch_layout
Definition: ffmpeg_filter.h:191
FPSConvContext::dup_warning
uint64_t dup_warning
Definition: ffmpeg_filter.h:161
InputFilterPriv::displaymatrix_present
int displaymatrix_present
Definition: ffmpeg_filter.h:129
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
InputFilterPriv::linklabel
uint8_t * linklabel
Definition: ffmpeg_filter.h:96
OutputFilterPriv::sample_aspect_ratio
AVRational sample_aspect_ratio
Definition: ffmpeg_filter.h:205
FilterGraphPriv::sch_idx
unsigned sch_idx
Definition: ffmpeg_filter.h:66
InputFilterPriv::downmixinfo_present
int downmixinfo_present
Definition: ffmpeg_filter.h:133
InputFilterOptions
Definition: ffmpeg.h:269
InputFilterPriv::sample_aspect_ratio
AVRational sample_aspect_ratio
Definition: ffmpeg_filter.h:113
ifp_from_ifilter
static InputFilterPriv * ifp_from_ifilter(InputFilter *ifilter)
Definition: ffmpeg_filter.h:147
OutputFilterPriv::formats
const int * formats
Definition: ffmpeg_filter.h:212
Scheduler
Definition: ffmpeg_sched.c:275
FilterGraphPriv::fg
FilterGraph fg
Definition: ffmpeg_filter.h:41
FilterGraphPriv::nb_threads
int nb_threads
Definition: ffmpeg_filter.h:58
OutputFilterPriv::ofilter
OutputFilter ofilter
Definition: ffmpeg_filter.h:176
FilterGraph
Definition: ffmpeg.h:376
VideoSyncMethod
VideoSyncMethod
Definition: ffmpeg.h:65
AVMediaType
AVMediaType
Definition: avutil.h:198
InputFilterPriv::hw_frames_ctx
AVBufferRef * hw_frames_ctx
Definition: ffmpeg_filter.h:127
AVFifo
Definition: fifo.c:35
InputFilterPriv::displaymatrix
int32_t displaymatrix[9]
Definition: ffmpeg_filter.h:131
AVChannelLayout
An AVChannelLayout holds information about the channel layout of audio data.
Definition: channel_layout.h:319
OutputFilterPriv::color_ranges
enum AVColorRange * color_ranges
Definition: ffmpeg_filter.h:216
ofp_from_ofilter
static OutputFilterPriv * ofp_from_ofilter(OutputFilter *ofilter)
Definition: ffmpeg_filter.h:229
OutputFilterPriv::tb_out_locked
int tb_out_locked
Definition: ffmpeg_filter.h:203
InputFilterPriv::color_range
enum AVColorRange color_range
Definition: ffmpeg_filter.h:115
InputFilterPriv::initialize
unsigned int initialize
marks if sub2video_update should force an initialization
Definition: ffmpeg_filter.h:143
InputFilterPriv::displaymatrix_applied
int displaymatrix_applied
Definition: ffmpeg_filter.h:130
FilterGraphPriv::disable_conversions
int disable_conversions
Definition: ffmpeg_filter.h:52
FilterGraphPriv::graph_desc
const char * graph_desc
Definition: ffmpeg_filter.h:56
FPSConvContext::vsync_method
enum VideoSyncMethod vsync_method
Definition: ffmpeg_filter.h:166
InputFilterPriv::width
int width
Definition: ffmpeg_filter.h:112
OutputFilterPriv::log_parent
void * log_parent
Definition: ffmpeg_filter.h:180
OutputFilterPriv::color_range
enum AVColorRange color_range
Definition: ffmpeg_filter.h:193
FPSConvContext::framerate_clip
int framerate_clip
Definition: ffmpeg_filter.h:171
bprint.h
FPSConvContext::frame_number
int64_t frame_number
Definition: ffmpeg_filter.h:155
FPSConvContext
Definition: ffmpeg_filter.h:152
InputFilterPriv::index
int index
Definition: ffmpeg_filter.h:87
downmix_info.h
FilterGraphPriv::is_simple
int is_simple
Definition: ffmpeg_filter.h:46
AVColorSpace
AVColorSpace
YUV colorspace type.
Definition: pixfmt.h:673
FPSConvContext::framerate_max
AVRational framerate_max
Definition: ffmpeg_filter.h:169
InputFilterPriv::eof
int eof
Definition: ffmpeg_filter.h:104
OutputFilterPriv::color_space
enum AVColorSpace color_space
Definition: ffmpeg_filter.h:192
pixfmt.h
FPSConvContext::last_frame
AVFrame * last_frame
Definition: ffmpeg_filter.h:153
OutputFilterPriv::next_pts
int64_t next_pts
Definition: ffmpeg_filter.h:223
dict.h
OutputFilterPriv::swr_opts
AVDictionary * swr_opts
Definition: ffmpeg_filter.h:208
channel_layout.h
InputFilterPriv::bound
int bound
Definition: ffmpeg_filter.h:105
InputFilterPriv::frame_queue
AVFifo * frame_queue
Definition: ffmpeg_filter.h:125
avfilter.h
InputFilterPriv::type_src
enum AVMediaType type_src
Definition: ffmpeg_filter.h:102
FilterGraphPriv::is_meta
int is_meta
Definition: ffmpeg_filter.h:49
OutputFilterPriv::flags
unsigned flags
Definition: ffmpeg_filter.h:226
OutputFilterPriv::sample_rates
const int * sample_rates
Definition: ffmpeg_filter.h:214
InputFilterPriv::side_data
AVFrameSideData ** side_data
Definition: ffmpeg_filter.h:122
AVFilterContext
An instance of a filter.
Definition: avfilter.h:269
OutputFilter
Definition: ffmpeg.h:357
InputFilterPriv::drop_warned
int drop_warned
Definition: ffmpeg_filter.h:106
InputFilterPriv::ifilter
InputFilter ifilter
Definition: ffmpeg_filter.h:83
avutil.h
OutputFilterPriv::color_spaces
enum AVColorSpace * color_spaces
Definition: ffmpeg_filter.h:215
AVBufferRef
A reference to a data buffer.
Definition: buffer.h:82
fgp_from_fg
static FilterGraphPriv * fgp_from_fg(FilterGraph *fg)
Definition: ffmpeg_filter.h:72
AVFrameSideData
Structure to hold side data for an AVFrame.
Definition: frame.h:265
ffmpeg_sched.h
InputFilterPriv::format
int format
Definition: ffmpeg_filter.h:110
InputFilterPriv::end_pts
int64_t end_pts
Definition: ffmpeg_filter.h:140
int32_t
int32_t
Definition: audioconvert.c:56
OutputFilterPriv::format
int format
Definition: ffmpeg_filter.h:188
InputFilterPriv::opts
InputFilterOptions opts
Definition: ffmpeg_filter.h:85
OutputFilterPriv::trim_duration_us
int64_t trim_duration_us
Definition: ffmpeg_filter.h:220
InputFilterPriv::downmixinfo
AVDownmixInfo downmixinfo
Definition: ffmpeg_filter.h:134
cfgp_from_cfg
static const FilterGraphPriv * cfgp_from_cfg(const FilterGraph *fg)
Definition: ffmpeg_filter.h:77
AVColorRange
AVColorRange
Visual content value range.
Definition: pixfmt.h:715
OutputFilterPriv::tb_out
AVRational tb_out
Definition: ffmpeg_filter.h:200
OutputFilterPriv::height
int height
Definition: ffmpeg_filter.h:189
FPSConvContext::framerate
AVRational framerate
Definition: ffmpeg_filter.h:168
InputFilterPriv::height
int height
Definition: ffmpeg_filter.h:112
FPSConvContext::framerate_supported
const AVRational * framerate_supported
Definition: ffmpeg_filter.h:170