]> git.sesse.net Git - nageru/blobdiff - nageru/mjpeg_encoder.h
Fix MJPEG white balance information when VA-API is in use.
[nageru] / nageru / mjpeg_encoder.h
index eff361ea4e4cb1ebada2236daef46321e690a942..87bf3b5836509429b67195733d567c77ae0550e4 100644 (file)
@@ -154,6 +154,22 @@ private:
        std::unique_ptr<VADisplayWithCleanup> 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<uint8_t> jpeg_header;
                VAEncPictureParameterBufferJPEG pic_param;
@@ -161,8 +177,8 @@ private:
                VAHuffmanTableBufferJPEGBaseline huff;
                VAEncSliceParameterBufferJPEG parms;
        };
-       std::map<std::pair<unsigned, unsigned>, VAData> va_data_for_resolution;
-       VAData get_va_data_for_resolution(unsigned width, unsigned height, const movit::RGBTriplet &white_balance);
+       std::map<VAKey, VAData> va_data_for_parameters;
+       VAData get_va_data_for_parameters(unsigned width, unsigned height, const movit::RGBTriplet &white_balance);
 
        std::list<VAResources> va_resources_freelist;
        std::mutex va_resources_mutex;