RawLogger: downscale qcamera before encoding (#23607)

old-commit-hash: a4fefdcb94
commatwo_master
Dean Lee 3 years ago committed by GitHub
parent 43ec802122
commit 5752972827
  1. 30
      selfdrive/loggerd/raw_logger.cc
  2. 1
      selfdrive/loggerd/raw_logger.h

@ -11,6 +11,8 @@
#define __STDC_CONSTANT_MACROS
#include "libyuv.h"
extern "C" {
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
@ -55,6 +57,10 @@ RawLogger::RawLogger(const char* filename, int width, int height, int fps,
frame->linesize[0] = width;
frame->linesize[1] = width/2;
frame->linesize[2] = width/2;
if (downscale) {
downscale_buf.resize(width * height * 3 / 2);
}
}
RawLogger::~RawLogger() {
@ -124,9 +130,27 @@ int RawLogger::encode_frame(const uint8_t *y_ptr, const uint8_t *u_ptr, const ui
pkt.data = NULL;
pkt.size = 0;
frame->data[0] = (uint8_t*)y_ptr;
frame->data[1] = (uint8_t*)u_ptr;
frame->data[2] = (uint8_t*)v_ptr;
if (downscale_buf.size() > 0) {
uint8_t *out_y = downscale_buf.data();
uint8_t *out_u = out_y + codec_ctx->width * codec_ctx->height;
uint8_t *out_v = out_u + (codec_ctx->width / 2) * (codec_ctx->height / 2);
libyuv::I420Scale(y_ptr, in_width,
u_ptr, in_width/2,
v_ptr, in_width/2,
in_width, in_height,
out_y, codec_ctx->width,
out_u, codec_ctx->width/2,
out_v, codec_ctx->width/2,
codec_ctx->width, codec_ctx->height,
libyuv::kFilterNone);
frame->data[0] = out_y;
frame->data[1] = out_u;
frame->data[2] = out_v;
} else {
frame->data[0] = (uint8_t*)y_ptr;
frame->data[1] = (uint8_t*)u_ptr;
frame->data[2] = (uint8_t*)v_ptr;
}
frame->pts = counter;
int ret = counter;

@ -39,4 +39,5 @@ private:
AVFormatContext *format_ctx = NULL;
AVFrame *frame = NULL;
std::vector<uint8_t> downscale_buf;
};

Loading…
Cancel
Save