You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-04 22:03:09 +02: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 <stdint.h>
|
||||||
|
|
||||||
#include "ffmpeg.h"
|
#include "ffmpeg.h"
|
||||||
|
#include "ffmpeg_filter.h"
|
||||||
|
|
||||||
#include "libavfilter/avfilter.h"
|
#include "libavfilter/avfilter.h"
|
||||||
#include "libavfilter/buffersink.h"
|
#include "libavfilter/buffersink.h"
|
||||||
@ -42,44 +43,6 @@
|
|||||||
// FIXME private header, used for mid_pred()
|
// FIXME private header, used for mid_pred()
|
||||||
#include "libavcodec/mathops.h"
|
#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
|
// data that is local to the filter thread and not visible outside of it
|
||||||
typedef struct FilterGraphThread {
|
typedef struct FilterGraphThread {
|
||||||
@ -102,157 +65,6 @@ typedef struct FilterGraphThread {
|
|||||||
uint8_t *eof_out;
|
uint8_t *eof_out;
|
||||||
} FilterGraphThread;
|
} 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 {
|
typedef struct FilterCommand {
|
||||||
char *target;
|
char *target;
|
||||||
char *command;
|
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