VCarContainer/tools/jetson_multimedia/include/video_codec/JpegEncode.h

62 lines
1.3 KiB
C++

#ifndef _JPEG_ENCODE_H__
#define _JPEG_ENCODE_H__
#include <fstream>
#include <queue>
#include <pthread.h>
#include "NvJpegEncoder.h"
#include "NvVideoConverter.h"
typedef struct
{
NvVideoConverter *conv;
NvJPEGEncoder *jpegenc;
char *in_file_path;
std::ifstream * in_file;
uint32_t in_width;
uint32_t in_height;
uint32_t in_pixfmt;
char *out_file_path;
std::ofstream * out_file;
bool got_error;
bool use_fd;
bool perf;
uint32_t crop_left;
uint32_t crop_top;
uint32_t crop_width;
uint32_t crop_height;
int stress_test;
bool scaled_encode;
uint32_t scale_width;
uint32_t scale_height;
int quality;
} jpeg_encode_context_t;
class JpegEncode
{
public:
JpegEncode();
~JpegEncode();
int JpegEncodeOneFrame(int width, int height, char* frameData, char *path); ///< 输入图片格式必须为yuv420m
private:
void set_defaults(jpeg_encode_context_t * ctx, int width, int height);
int read_video_frame(char* frameData, NvBuffer & buffer);
private:
jpeg_encode_context_t m_ctx;
#define TEST_ERROR(cond, str, label) if(cond) { \
std::cerr << str << std::endl; \
error = 1; \
goto label; }
#define PERF_LOOP 300
};
#endif //_JPEG_ENCODE_H__