video analysis2.0拆分,ffmpeg封装go接口库
zhangmeng
2020-09-01 e62936fa4a4b626a359bce8981ebbbaddcd4aada
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#ifndef _FFMPEG_FILTER_VIDEO_H_
#define _FFMPEG_FILTER_VIDEO_H_
 
#include <functional>
 
struct AVFilterContext;
struct AVFilterGraph;
struct AVCodecContext;
struct AVFrame;
 
namespace ffwrapper{
 
typedef std::function<bool(AVFrame*)> FUNC_OUT_FILTERED_FRAME;
 
class FilterVideo
{
public:
    FilterVideo();
    ~FilterVideo();
    
    FilterVideo(const AVCodecContext *dec, const AVCodecContext *enc, 
                const char *filter_spec, FUNC_OUT_FILTERED_FRAME cb);
public:
    void setCallbackFunc(FUNC_OUT_FILTERED_FRAME cb){func_out_filtered_frame_ = cb;}
 
    bool initFilterGraph(const AVCodecContext *dec_ctx, const AVCodecContext *enc_ctx);
    bool configureFilterGraph(const char *filter_spec);
 
    bool filterFrame(AVFrame *frame);
public:
    AVFilterContext *in(){return src_;}
    AVFilterContext *out(){return out_;}
private:
    AVFilterGraph          *graph_;
    AVFilterContext     *src_;
    AVFilterContext     *out_;
 
    FUNC_OUT_FILTERED_FRAME     func_out_filtered_frame_;
};
 
}
 
#endif