Android的MediaCodec编码,默认要求输入是原始视频图像格式,一般为YUV420,例如NV12, NV21。但算法库输出默认的颜色为RGB或者BGR,需要进行转化。而如果使用循环单纯用CPU转换是比较慢的,这里使用OpenCV来进行转换,OpenCV虽然也是用了CPU,但是他内部做了并行计算的优化是比较快的,例如NEON/SSE等。
头文件:
#include "Flow.h"
#include <thread>
#include "DmSyncQueue.h"
#include "InputData.h"
#include <atomic>
using namespace std;
class Rgb2YuvCv : public Flow {
public:
Rgb2YuvCv();
~Rgb2YuvCv();
void Init(int width, int height, int buffNumber=10);
void PushData(const unsigned char *data, int size, int copy, int flag=0);
void ReleaseOuputData(); //当外部使用完缓冲工区时释放
void UnInit();
private:
void Loop();
int imageW;
int imageH;
int mMaxBufferNumber;
int mBufferHead;
int mBufferTail;
atomic<int> mBufferSize;
unsigned char **mOutputBuffer;
};