You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
839 B
32 lines
839 B
#pragma once
|
|
|
|
#include <cstdio>
|
|
#include <cstdlib>
|
|
#include <cstddef>
|
|
#include <cstdint>
|
|
#include <jpeglib.h>
|
|
#include <vector>
|
|
#include <memory>
|
|
#include "cereal/messaging/messaging.h"
|
|
#include "msgq/visionipc/visionbuf.h"
|
|
|
|
class JpegEncoder {
|
|
public:
|
|
JpegEncoder(const std::string &pusblish_name, int width, int height);
|
|
~JpegEncoder();
|
|
void pushThumbnail(VisionBuf *buf, const VisionIpcBufExtra &extra);
|
|
|
|
private:
|
|
void generateThumbnail(const uint8_t *y, const uint8_t *uv, int width, int height, int stride);
|
|
void compressToJpeg(uint8_t *y_plane, uint8_t *u_plane, uint8_t *v_plane);
|
|
|
|
int thumbnail_width;
|
|
int thumbnail_height;
|
|
std::string publish_name;
|
|
std::vector<uint8_t> yuv_buffer;
|
|
std::unique_ptr<PubMaster> pm;
|
|
|
|
// JPEG output buffer
|
|
unsigned char* out_buffer = nullptr;
|
|
unsigned long out_size = 0;
|
|
};
|
|
|