depend_headers.h 1.49 KB
#ifndef __DEPEND_HEADERS_H__
#define __DEPEND_HEADERS_H__

#include <iostream>
#include <utility>
#include <chrono>
#include <thread>
#include <functional>
#include <atomic>
#include <fstream>
#include <signal.h>
#include <time.h>
#include <unistd.h>
#include <set>
#include <mutex>
#include <vector>
#include <condition_variable>

/*
* 依赖模块外部的代码或库
* 不要在此处添加模块内部的头文件
*/

// ffmpeg 是c库 所以编译的时候要加入从 extern导入的C 来声明否则连接失败
extern "C" {
    #include "libavutil/imgutils.h"
    #include "libavutil/samplefmt.h"
    #include "libavformat/avformat.h"
    #include "libavcodec/avcodec.h"
    #include "libavcodec/bsf.h"
	#include "libavutil/opt.h"
	#include "libavutil/timestamp.h"
	#include "libswscale/swscale.h"
}


#include "../interface/logger.hpp"
#include "../interface/DeviceMemory.hpp"
#include "../interface/interface_headers.h"
#include "../interface/utiltools.hpp"


struct DataPacket {
    AVPacket* pkt {nullptr};
    unsigned long long frame_nb{0};
    bool isKeyFrame{false};

    ~DataPacket(){
        if(pkt != nullptr) {
            // LOG_INFO("free frame_nb:{}", frame_nb);
            av_packet_free(&pkt);
            pkt = nullptr;
        }
    }
};

struct DataFrame {
    AVFrame* frame {nullptr};
    unsigned long long frame_nb{0};
    bool isKeyFrame{false};

    ~DataFrame(){
        if(frame != nullptr) {
            av_frame_free(&frame);
            frame = nullptr;
        }
    }
};

#endif