79 lines
1.9 KiB
C++
79 lines
1.9 KiB
C++
#pragma once
|
|
#ifdef _WIN32
|
|
#include "Debuger.h"
|
|
#include "CameraCapture.h"
|
|
//Windows
|
|
extern "C"
|
|
{
|
|
#include "libavcodec/avcodec.h"
|
|
#include "libavformat/avformat.h"
|
|
#include "libavutil/avutil.h"
|
|
#include "libswscale/swscale.h"
|
|
#include "libavutil/opt.h"
|
|
#include "libavutil/imgutils.h"
|
|
#include <libavfilter/avfilter.h>
|
|
#include <libavfilter/buffersink.h>
|
|
#include <libavfilter/buffersrc.h>
|
|
#include <libavutil/opt.h>
|
|
#include <libavutil/dict.h>
|
|
|
|
}
|
|
#include <iostream>
|
|
#else
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
#include "libavutil/opt.h"
|
|
#include "libavcodec/avcodec.h"
|
|
#include "libavformat/avformat.h"
|
|
#ifdef __cplusplus
|
|
};
|
|
#endif
|
|
#endif
|
|
|
|
class VideoCodeObserver {
|
|
public:
|
|
virtual void OnGetCodeFrame(uint8_t *data, int len) {
|
|
Debuger::Debug(L"get one code %d \r\n", len);
|
|
}
|
|
};
|
|
|
|
class VideoCoder : public Camera::CameraObserver{
|
|
private:
|
|
int mWidth;
|
|
int mHeight;
|
|
unsigned int mDestWidth;
|
|
unsigned int mDestHeight;
|
|
int mBytePerPixel;
|
|
enum AVPixelFormat mInformat;
|
|
AVFormatContext *mFormatCtx;
|
|
AVOutputFormat *mOutputFmt;
|
|
AVStream *mVideoStream;
|
|
AVCodecContext *mCodecCtx;
|
|
AVCodec *mCodec;
|
|
AVPacket mAVPack;
|
|
uint8_t *mPitureBuffer;
|
|
AVFrame *mFrame;
|
|
VideoCodeObserver *mObserver;
|
|
|
|
public:
|
|
int OnBuffer(double dblSampleTime, BYTE * pBuffer, long lBufferSize);
|
|
int OnCameraData(uint8_t *dat, uint32_t size) ;
|
|
int SetDestPix(uint8_t width,uint8_t height);
|
|
VideoCoder(int width,int height,AVPixelFormat formt);
|
|
~VideoCoder();
|
|
void Encode(uint8_t*src,int size, enum AVPixelFormat format);
|
|
void SetOberver(VideoCodeObserver *p) {
|
|
this->mObserver = p;
|
|
}
|
|
int Filter(int width, int height, unsigned char* rgbData, int bitsPerPixel);
|
|
|
|
void SetOutPutPixel(unsigned int width,unsigned int height);
|
|
private:
|
|
int flushCoder(AVFormatContext *fmt_ctx, unsigned int stream_index);
|
|
int forceYUV420P(uint8_t *src, int size, enum AVPixelFormat format, uint8_t ***dst,int *s);
|
|
|
|
};
|
|
|