video analysis2.0拆分,ffmpeg封装go接口库
chenshijun
2019-07-23 5e85a7e80764e1a1eae39c8ce9bafed29d8773a9
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#ifndef _FFMPEG_FORMAT_CONTEXT_IN_H_
#define _FFMPEG_FORMAT_CONTEXT_IN_H_
 
#include <stdint.h>
#include <memory>
#include "PsToEs.hpp"
 
struct AVFormatContext;
struct AVDictionary;
struct AVStream;
struct AVCodecContext;
struct AVPacket;
struct AVFrame;
struct AVCodec;
struct AVIOContext;
 
typedef int(* read_packet)(void *opaque,uint8_t *buf, int buf_size);
 
namespace ffwrapper{
 
    class VideoProp;
    class CodedData;
    class FrameData;
 
    class FormatIn
    {
    public:
        explicit FormatIn(bool hw=true);
        ~FormatIn();
        
    public:
        int openWithCustomIO(void *opaque, read_packet fn, AVDictionary **options=NULL);
        int openGb28181(const char *filename, AVDictionary **options);
 
        int open(const char *filename, AVDictionary **options);
        bool findStreamInfo(AVDictionary **options);
 
        bool openCodec(const int type, AVDictionary **options);
        
        bool readPacket(AVPacket &pkt_out, int stream_index = 0);
        bool readPacket(std::shared_ptr<CodedData> &data, int stream_index = 0);
 
        int decode(AVFrame* &frame, AVPacket &pkt);
        int decode(std::shared_ptr<FrameData> &frame_data,
                    std::shared_ptr<CodedData> &data);
        
        int readFrame(AVFrame* &frame);
        int readFrame(std::shared_ptr<FrameData> &frame_data);
 
    private:
        bool allocCodec(AVCodec *dec, AVStream *s, AVDictionary **options);
    public:
        AVStream *getStream(int type = 0);
        AVCodecContext *getCodecContext(int type = 0);
    private:
         AVFormatContext     *ctx_;
         AVCodecContext         *dec_ctx_;
         int                 vs_idx_;
 
         bool                 hw_accl_;
 
    private:
        AVIOContext            *io_ctx_;
        uint8_t             *read_io_buff_;
        const int             read_io_buff_size_;
        GB28181API            handle_gb28181;
    };
}
 
#endif