mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-05-17 06:58:45 +08:00
fftools/ffmpeg_filter: Move some declaration to new header file
to allow filtergraph printing to access the information. Signed-off-by: softworkz <softworkz@hotmail.com>
This commit is contained in:
@ -21,6 +21,7 @@
|
||||
#include <stdint.h>
|
||||
|
||||
#include "ffmpeg.h"
|
||||
#include "ffmpeg_filter.h"
|
||||
|
||||
#include "libavfilter/avfilter.h"
|
||||
#include "libavfilter/buffersink.h"
|
||||
@ -42,44 +43,6 @@
|
||||
// FIXME private header, used for mid_pred()
|
||||
#include "libavcodec/mathops.h"
|
||||
|
||||
typedef struct FilterGraphPriv {
|
||||
FilterGraph fg;
|
||||
|
||||
// name used for logging
|
||||
char log_name[32];
|
||||
|
||||
int is_simple;
|
||||
// true when the filtergraph contains only meta filters
|
||||
// that do not modify the frame data
|
||||
int is_meta;
|
||||
// source filters are present in the graph
|
||||
int have_sources;
|
||||
int disable_conversions;
|
||||
|
||||
unsigned nb_outputs_done;
|
||||
|
||||
const char *graph_desc;
|
||||
|
||||
int nb_threads;
|
||||
|
||||
// frame for temporarily holding output from the filtergraph
|
||||
AVFrame *frame;
|
||||
// frame for sending output to the encoder
|
||||
AVFrame *frame_enc;
|
||||
|
||||
Scheduler *sch;
|
||||
unsigned sch_idx;
|
||||
} FilterGraphPriv;
|
||||
|
||||
static FilterGraphPriv *fgp_from_fg(FilterGraph *fg)
|
||||
{
|
||||
return (FilterGraphPriv*)fg;
|
||||
}
|
||||
|
||||
static const FilterGraphPriv *cfgp_from_cfg(const FilterGraph *fg)
|
||||
{
|
||||
return (const FilterGraphPriv*)fg;
|
||||
}
|
||||
|
||||
// data that is local to the filter thread and not visible outside of it
|
||||
typedef struct FilterGraphThread {
|
||||
@ -102,157 +65,6 @@ typedef struct FilterGraphThread {
|
||||
uint8_t *eof_out;
|
||||
} FilterGraphThread;
|
||||
|
||||
typedef struct InputFilterPriv {
|
||||
InputFilter ifilter;
|
||||
|
||||
InputFilterOptions opts;
|
||||
|
||||
int index;
|
||||
|
||||
AVFilterContext *filter;
|
||||
|
||||
// used to hold submitted input
|
||||
AVFrame *frame;
|
||||
|
||||
/* for filters that are not yet bound to an input stream,
|
||||
* this stores the input linklabel, if any */
|
||||
uint8_t *linklabel;
|
||||
|
||||
// filter data type
|
||||
enum AVMediaType type;
|
||||
// source data type: AVMEDIA_TYPE_SUBTITLE for sub2video,
|
||||
// same as type otherwise
|
||||
enum AVMediaType type_src;
|
||||
|
||||
int eof;
|
||||
int bound;
|
||||
int drop_warned;
|
||||
uint64_t nb_dropped;
|
||||
|
||||
// parameters configured for this input
|
||||
int format;
|
||||
|
||||
int width, height;
|
||||
AVRational sample_aspect_ratio;
|
||||
enum AVColorSpace color_space;
|
||||
enum AVColorRange color_range;
|
||||
|
||||
int sample_rate;
|
||||
AVChannelLayout ch_layout;
|
||||
|
||||
AVRational time_base;
|
||||
|
||||
AVFrameSideData **side_data;
|
||||
int nb_side_data;
|
||||
|
||||
AVFifo *frame_queue;
|
||||
|
||||
AVBufferRef *hw_frames_ctx;
|
||||
|
||||
int displaymatrix_present;
|
||||
int displaymatrix_applied;
|
||||
int32_t displaymatrix[9];
|
||||
|
||||
int downmixinfo_present;
|
||||
AVDownmixInfo downmixinfo;
|
||||
|
||||
struct {
|
||||
AVFrame *frame;
|
||||
|
||||
int64_t last_pts;
|
||||
int64_t end_pts;
|
||||
|
||||
/// marks if sub2video_update should force an initialization
|
||||
unsigned int initialize;
|
||||
} sub2video;
|
||||
} InputFilterPriv;
|
||||
|
||||
static InputFilterPriv *ifp_from_ifilter(InputFilter *ifilter)
|
||||
{
|
||||
return (InputFilterPriv*)ifilter;
|
||||
}
|
||||
|
||||
typedef struct FPSConvContext {
|
||||
AVFrame *last_frame;
|
||||
/* number of frames emitted by the video-encoding sync code */
|
||||
int64_t frame_number;
|
||||
/* history of nb_frames_prev, i.e. the number of times the
|
||||
* previous frame was duplicated by vsync code in recent
|
||||
* do_video_out() calls */
|
||||
int64_t frames_prev_hist[3];
|
||||
|
||||
uint64_t dup_warning;
|
||||
|
||||
int last_dropped;
|
||||
int dropped_keyframe;
|
||||
|
||||
enum VideoSyncMethod vsync_method;
|
||||
|
||||
AVRational framerate;
|
||||
AVRational framerate_max;
|
||||
const AVRational *framerate_supported;
|
||||
int framerate_clip;
|
||||
} FPSConvContext;
|
||||
|
||||
typedef struct OutputFilterPriv {
|
||||
OutputFilter ofilter;
|
||||
|
||||
int index;
|
||||
|
||||
void *log_parent;
|
||||
char log_name[32];
|
||||
|
||||
char *name;
|
||||
|
||||
AVFilterContext *filter;
|
||||
|
||||
/* desired output stream properties */
|
||||
int format;
|
||||
int width, height;
|
||||
int sample_rate;
|
||||
AVChannelLayout ch_layout;
|
||||
enum AVColorSpace color_space;
|
||||
enum AVColorRange color_range;
|
||||
|
||||
AVFrameSideData **side_data;
|
||||
int nb_side_data;
|
||||
|
||||
// time base in which the output is sent to our downstream
|
||||
// does not need to match the filtersink's timebase
|
||||
AVRational tb_out;
|
||||
// at least one frame with the above timebase was sent
|
||||
// to our downstream, so it cannot change anymore
|
||||
int tb_out_locked;
|
||||
|
||||
AVRational sample_aspect_ratio;
|
||||
|
||||
AVDictionary *sws_opts;
|
||||
AVDictionary *swr_opts;
|
||||
|
||||
// those are only set if no format is specified and the encoder gives us multiple options
|
||||
// They point directly to the relevant lists of the encoder.
|
||||
const int *formats;
|
||||
const AVChannelLayout *ch_layouts;
|
||||
const int *sample_rates;
|
||||
const enum AVColorSpace *color_spaces;
|
||||
const enum AVColorRange *color_ranges;
|
||||
|
||||
AVRational enc_timebase;
|
||||
int64_t trim_start_us;
|
||||
int64_t trim_duration_us;
|
||||
// offset for output timestamps, in AV_TIME_BASE_Q
|
||||
int64_t ts_offset;
|
||||
int64_t next_pts;
|
||||
FPSConvContext fps;
|
||||
|
||||
unsigned flags;
|
||||
} OutputFilterPriv;
|
||||
|
||||
static OutputFilterPriv *ofp_from_ofilter(OutputFilter *ofilter)
|
||||
{
|
||||
return (OutputFilterPriv*)ofilter;
|
||||
}
|
||||
|
||||
typedef struct FilterCommand {
|
||||
char *target;
|
||||
char *command;
|
||||
|
234
fftools/ffmpeg_filter.h
Normal file
234
fftools/ffmpeg_filter.h
Normal file
@ -0,0 +1,234 @@
|
||||
/*
|
||||
* This file is part of FFmpeg.
|
||||
*
|
||||
* FFmpeg is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* FFmpeg is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with FFmpeg; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef FFTOOLS_FFMPEG_FILTER_H
|
||||
#define FFTOOLS_FFMPEG_FILTER_H
|
||||
|
||||
#include "ffmpeg.h"
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "ffmpeg_sched.h"
|
||||
#include "sync_queue.h"
|
||||
|
||||
#include "libavfilter/avfilter.h"
|
||||
|
||||
#include "libavutil/avutil.h"
|
||||
#include "libavutil/dict.h"
|
||||
#include "libavutil/fifo.h"
|
||||
#include "libavutil/pixfmt.h"
|
||||
#include "libavutil/rational.h"
|
||||
#include "libavutil/bprint.h"
|
||||
#include "libavutil/channel_layout.h"
|
||||
#include "libavutil/downmix_info.h"
|
||||
|
||||
typedef struct FilterGraphPriv {
|
||||
FilterGraph fg;
|
||||
|
||||
// name used for logging
|
||||
char log_name[32];
|
||||
|
||||
int is_simple;
|
||||
// true when the filtergraph contains only meta filters
|
||||
// that do not modify the frame data
|
||||
int is_meta;
|
||||
// source filters are present in the graph
|
||||
int have_sources;
|
||||
int disable_conversions;
|
||||
|
||||
unsigned nb_outputs_done;
|
||||
|
||||
const char *graph_desc;
|
||||
|
||||
int nb_threads;
|
||||
|
||||
// frame for temporarily holding output from the filtergraph
|
||||
AVFrame *frame;
|
||||
// frame for sending output to the encoder
|
||||
AVFrame *frame_enc;
|
||||
|
||||
Scheduler *sch;
|
||||
unsigned sch_idx;
|
||||
|
||||
AVBPrint graph_print_buf;
|
||||
|
||||
} FilterGraphPriv;
|
||||
|
||||
static inline FilterGraphPriv *fgp_from_fg(FilterGraph *fg)
|
||||
{
|
||||
return (FilterGraphPriv*)fg;
|
||||
}
|
||||
|
||||
static inline const FilterGraphPriv *cfgp_from_cfg(const FilterGraph *fg)
|
||||
{
|
||||
return (const FilterGraphPriv*)fg;
|
||||
}
|
||||
|
||||
typedef struct InputFilterPriv {
|
||||
InputFilter ifilter;
|
||||
|
||||
InputFilterOptions opts;
|
||||
|
||||
int index;
|
||||
|
||||
AVFilterContext *filter;
|
||||
|
||||
// used to hold submitted input
|
||||
AVFrame *frame;
|
||||
|
||||
/* for filters that are not yet bound to an input stream,
|
||||
* this stores the input linklabel, if any */
|
||||
uint8_t *linklabel;
|
||||
|
||||
// filter data type
|
||||
enum AVMediaType type;
|
||||
// source data type: AVMEDIA_TYPE_SUBTITLE for sub2video,
|
||||
// same as type otherwise
|
||||
enum AVMediaType type_src;
|
||||
|
||||
int eof;
|
||||
int bound;
|
||||
int drop_warned;
|
||||
uint64_t nb_dropped;
|
||||
|
||||
// parameters configured for this input
|
||||
int format;
|
||||
|
||||
int width, height;
|
||||
AVRational sample_aspect_ratio;
|
||||
enum AVColorSpace color_space;
|
||||
enum AVColorRange color_range;
|
||||
|
||||
int sample_rate;
|
||||
AVChannelLayout ch_layout;
|
||||
|
||||
AVRational time_base;
|
||||
|
||||
AVFrameSideData **side_data;
|
||||
int nb_side_data;
|
||||
|
||||
AVFifo *frame_queue;
|
||||
|
||||
AVBufferRef *hw_frames_ctx;
|
||||
|
||||
int displaymatrix_present;
|
||||
int displaymatrix_applied;
|
||||
int32_t displaymatrix[9];
|
||||
|
||||
int downmixinfo_present;
|
||||
AVDownmixInfo downmixinfo;
|
||||
|
||||
struct {
|
||||
AVFrame *frame;
|
||||
|
||||
int64_t last_pts;
|
||||
int64_t end_pts;
|
||||
|
||||
/// marks if sub2video_update should force an initialization
|
||||
unsigned int initialize;
|
||||
} sub2video;
|
||||
} InputFilterPriv;
|
||||
|
||||
static inline InputFilterPriv *ifp_from_ifilter(InputFilter *ifilter)
|
||||
{
|
||||
return (InputFilterPriv*)ifilter;
|
||||
}
|
||||
|
||||
typedef struct FPSConvContext {
|
||||
AVFrame *last_frame;
|
||||
/* number of frames emitted by the video-encoding sync code */
|
||||
int64_t frame_number;
|
||||
/* history of nb_frames_prev, i.e. the number of times the
|
||||
* previous frame was duplicated by vsync code in recent
|
||||
* do_video_out() calls */
|
||||
int64_t frames_prev_hist[3];
|
||||
|
||||
uint64_t dup_warning;
|
||||
|
||||
int last_dropped;
|
||||
int dropped_keyframe;
|
||||
|
||||
enum VideoSyncMethod vsync_method;
|
||||
|
||||
AVRational framerate;
|
||||
AVRational framerate_max;
|
||||
const AVRational *framerate_supported;
|
||||
int framerate_clip;
|
||||
} FPSConvContext;
|
||||
|
||||
|
||||
typedef struct OutputFilterPriv {
|
||||
OutputFilter ofilter;
|
||||
|
||||
int index;
|
||||
|
||||
void *log_parent;
|
||||
char log_name[32];
|
||||
|
||||
char *name;
|
||||
|
||||
AVFilterContext *filter;
|
||||
|
||||
/* desired output stream properties */
|
||||
int format;
|
||||
int width, height;
|
||||
int sample_rate;
|
||||
AVChannelLayout ch_layout;
|
||||
enum AVColorSpace color_space;
|
||||
enum AVColorRange color_range;
|
||||
|
||||
AVFrameSideData **side_data;
|
||||
int nb_side_data;
|
||||
|
||||
// time base in which the output is sent to our downstream
|
||||
// does not need to match the filtersink's timebase
|
||||
AVRational tb_out;
|
||||
// at least one frame with the above timebase was sent
|
||||
// to our downstream, so it cannot change anymore
|
||||
int tb_out_locked;
|
||||
|
||||
AVRational sample_aspect_ratio;
|
||||
|
||||
AVDictionary *sws_opts;
|
||||
AVDictionary *swr_opts;
|
||||
|
||||
// those are only set if no format is specified and the encoder gives us multiple options
|
||||
// They point directly to the relevant lists of the encoder.
|
||||
const int *formats;
|
||||
const AVChannelLayout *ch_layouts;
|
||||
const int *sample_rates;
|
||||
const enum AVColorSpace *color_spaces;
|
||||
const enum AVColorRange *color_ranges;
|
||||
|
||||
AVRational enc_timebase;
|
||||
int64_t trim_start_us;
|
||||
int64_t trim_duration_us;
|
||||
// offset for output timestamps, in AV_TIME_BASE_Q
|
||||
int64_t ts_offset;
|
||||
int64_t next_pts;
|
||||
FPSConvContext fps;
|
||||
|
||||
unsigned flags;
|
||||
} OutputFilterPriv;
|
||||
|
||||
static inline OutputFilterPriv *ofp_from_ofilter(OutputFilter *ofilter)
|
||||
{
|
||||
return (OutputFilterPriv*)ofilter;
|
||||
}
|
||||
|
||||
#endif /* FFTOOLS_FFMPEG_FILTER_H */
|
Reference in New Issue
Block a user