X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=nageru%2Fmjpeg_encoder.h;h=87bf3b5836509429b67195733d567c77ae0550e4;hb=29f8890fa9150f4077c8a15bd60365f0c5c98a3b;hp=6ba7f0381bad3a1f3f1ec879e07cf44dcaf7260b;hpb=bcd177e1daf5a63d7bf877bc5d30d8803dfd472c;p=nageru diff --git a/nageru/mjpeg_encoder.h b/nageru/mjpeg_encoder.h index 6ba7f03..87bf3b5 100644 --- a/nageru/mjpeg_encoder.h +++ b/nageru/mjpeg_encoder.h @@ -31,7 +31,7 @@ struct VectorDestinationManager; #define CHECK_VASTATUS(va_status, func) \ if (va_status != VA_STATUS_SUCCESS) { \ - fprintf(stderr, "%s:%d (%s) failed with %d\n", __func__, __LINE__, func, va_status); \ + fprintf(stderr, "%s:%d (%s) failed: %s\n", __func__, __LINE__, func, vaErrorStr(va_status)); \ exit(1); \ } @@ -154,6 +154,22 @@ private: std::unique_ptr va_dpy; VAConfigID config_id; + struct VAKey { + unsigned width, height; + movit::RGBTriplet white_balance; + + bool operator< (const VAKey &other) const { + if (width != other.width) + return width < other.width; + if (height != other.height) + return height < other.height; + if (white_balance.r != other.white_balance.r) + return white_balance.r < other.white_balance.r; + if (white_balance.g != other.white_balance.g) + return white_balance.g < other.white_balance.g; + return white_balance.b < other.white_balance.b; + } + }; struct VAData { std::vector jpeg_header; VAEncPictureParameterBufferJPEG pic_param; @@ -161,8 +177,8 @@ private: VAHuffmanTableBufferJPEGBaseline huff; VAEncSliceParameterBufferJPEG parms; }; - std::map, VAData> va_data_for_resolution; - VAData get_va_data_for_resolution(unsigned width, unsigned height, const movit::RGBTriplet &white_balance); + std::map va_data_for_parameters; + VAData get_va_data_for_parameters(unsigned width, unsigned height, const movit::RGBTriplet &white_balance); std::list va_resources_freelist; std::mutex va_resources_mutex;