m2m jpeg quality

This commit is contained in:
Maxim Devaev
2021-11-26 02:35:22 +03:00
parent 016ee1c554
commit 459060532a
2 changed files with 37 additions and 9 deletions

View File

@@ -118,15 +118,26 @@ workers_pool_s *encoder_workers_pool_init(encoder_s *enc, device_s *dev) {
if (ER(m2ms) == NULL) {
A_CALLOC(ER(m2ms), n_workers);
}
// Начинаем с нуля и доинициализируем на следующих заходах при необходимости
for (; ER(n_m2ms) < n_workers; ++ER(n_m2ms)) {
char name[32];
snprintf(name, 32, "JPEG-%u", ER(n_m2ms));
m2m_option_s options[] = {
{"COMPRESSION_QUALITY", false, V4L2_CID_JPEG_COMPRESSION_QUALITY, quality},
{NULL, false, 0, 0},
};
ER(m2ms[ER(n_m2ms)]) = m2m_encoder_init(name, "/dev/video11", V4L2_PIX_FMT_MJPEG, 0, options);
if (ER(n_m2ms) < n_workers) {
double b_min = ENCODER_M2M_BITRATE_MIN;
double b_max = ENCODER_M2M_BITRATE_MAX;
double step = ENCODER_M2M_BITRATE_STEP;
double bitrate = log10(quality) * (b_max - b_min) / 2 + b_min;
bitrate = step * round(bitrate / step);
LOG_VERBOSE("Using JPEG M2M bitrate: %u%% -> %u Kbps", quality, (unsigned)bitrate);
// Начинаем с нуля и доинициализируем на следующих заходах при необходимости
for (; ER(n_m2ms) < n_workers; ++ER(n_m2ms)) {
assert(bitrate > 0);
char name[32];
snprintf(name, 32, "JPEG-%u", ER(n_m2ms));
m2m_option_s options[] = {
{"BITRATE", true, V4L2_CID_MPEG_VIDEO_BITRATE, bitrate * 1000},
{NULL, false, 0, 0},
};
ER(m2ms[ER(n_m2ms)]) = m2m_encoder_init(name, "/dev/video11", V4L2_PIX_FMT_MJPEG, 0, options);
}
}
} else if (type == ENCODER_TYPE_NOOP) {

View File

@@ -25,6 +25,7 @@
#include <stdlib.h>
#include <stdbool.h>
#include <strings.h>
#include <math.h>
#include <assert.h>
#include <pthread.h>
@@ -43,6 +44,22 @@
#include "encoders/hw/encoder.h"
#ifndef CFG_ENCODER_M2M_BITRATE_MIN
# define CFG_ENCODER_M2M_BITRATE_MIN 25
#endif
#define ENCODER_M2M_BITRATE_MIN ((unsigned)CFG_ENCODER_M2M_BITRATE_MIN)
#ifndef CFG_ENCODER_M2M_BITRATE_MAX
# define CFG_ENCODER_M2M_BITRATE_MAX 25000
#endif
#define ENCODER_M2M_BITRATE_MAX ((unsigned)CFG_ENCODER_M2M_BITRATE_MAX)
#ifndef CFG_ENCODER_M2M_BITRATE_STEP
# define CFG_ENCODER_M2M_BITRATE_STEP 25
#endif
#define ENCODER_M2M_BITRATE_STEP ((unsigned)CFG_ENCODER_M2M_BITRATE_STEP)
#define ENCODER_TYPES_STR "CPU, HW, M2M, NOOP"
typedef enum {