generated from zhangwei/Matrixai
88 lines
2.2 KiB
C
88 lines
2.2 KiB
C
|
|
#ifndef _JPEG_DECODE_H__
|
||
|
|
#define _JPEG_DECODE_H__
|
||
|
|
|
||
|
|
#include <fstream>
|
||
|
|
#include <queue>
|
||
|
|
#include <pthread.h>
|
||
|
|
|
||
|
|
#include "NvJpegDecoder.h"
|
||
|
|
#include "NvVideoConverter.h"
|
||
|
|
|
||
|
|
#include "FF_CircleQueue.h"
|
||
|
|
#include "VCCommon.h"
|
||
|
|
|
||
|
|
#define NUM_FILE_DECODE 10
|
||
|
|
|
||
|
|
typedef struct
|
||
|
|
{
|
||
|
|
NvVideoConverter *conv;
|
||
|
|
NvJPEGDecoder *jpegdec;
|
||
|
|
|
||
|
|
char *in_file_path[NUM_FILE_DECODE];
|
||
|
|
std::ifstream * in_file[NUM_FILE_DECODE];
|
||
|
|
uint64_t in_file_size;
|
||
|
|
unsigned char *in_buffer;
|
||
|
|
|
||
|
|
char *out_file_path[NUM_FILE_DECODE];
|
||
|
|
std::ofstream * out_file[NUM_FILE_DECODE];
|
||
|
|
|
||
|
|
int out_fd;
|
||
|
|
bool got_error;
|
||
|
|
bool use_fd;
|
||
|
|
bool perf;
|
||
|
|
int stress_test;
|
||
|
|
int num_files;
|
||
|
|
int current_file;
|
||
|
|
|
||
|
|
void* g_this;
|
||
|
|
pthread_t decode_thread; // Current thread, decoding stream.
|
||
|
|
uint32_t video_height;
|
||
|
|
uint32_t video_width;
|
||
|
|
uint32_t thread_num;
|
||
|
|
}jepg_context_t;
|
||
|
|
|
||
|
|
|
||
|
|
class JpegDecode
|
||
|
|
{
|
||
|
|
public:
|
||
|
|
JpegDecode(FF_CircleQueue<VideoQBuffer*>* _InBufQueue, FF_CircleQueue<VideoQBuffer*>* _outBufQueue);
|
||
|
|
~JpegDecode();
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief 初始化通道
|
||
|
|
*/
|
||
|
|
int InitJpegDecode(int chn, uint32_t inWidth = 1920, uint32_t inHeight = 1080);
|
||
|
|
|
||
|
|
/** @brief 启动解码通道idx */
|
||
|
|
int RunJpegDecoderChn(int chn);
|
||
|
|
|
||
|
|
private:
|
||
|
|
void abort(jepg_context_t * ctx);
|
||
|
|
static bool conv_capture_dqbuf_thread_callback(struct v4l2_buffer *v4l2_buf,
|
||
|
|
NvBuffer * buffer, NvBuffer * shared_buffer, void *arg);
|
||
|
|
uint64_t get_file_size(ifstream * stream);
|
||
|
|
static void* jpeg_decode_proc(void *pctx);
|
||
|
|
int set_defaults(int chn, uint32_t inWidth, uint32_t inHeight);
|
||
|
|
int read_input_data_from_queue(uint32_t ch_num, unsigned char* inbuffer);
|
||
|
|
int write_video_frame_to_queue(int chn, NvBuffer &buffer);
|
||
|
|
private:
|
||
|
|
|
||
|
|
FF_CircleQueue<VideoQBuffer*>* ff_InBufQueue;
|
||
|
|
FF_CircleQueue<VideoQBuffer*>* ff_outBufQueue;
|
||
|
|
|
||
|
|
bool m_StopProcBlocking;
|
||
|
|
|
||
|
|
jepg_context_t m_JpegDec_Ctx;
|
||
|
|
|
||
|
|
FILE *pfile = NULL;
|
||
|
|
|
||
|
|
#define JPEG_TEST_ERROR(cond, str, label) if(cond) { \
|
||
|
|
cerr << str << endl; \
|
||
|
|
error = 1; \
|
||
|
|
goto label; }
|
||
|
|
|
||
|
|
};
|
||
|
|
|
||
|
|
|
||
|
|
#endif //_JPEG_DECODE_H__
|