]> source.dussan.org Git - tigervnc.git/commitdiff
H264Libav: Use nearest-neighbour sampling in scaler
authorAndri Yngvason <andri@yngvason.is>
Thu, 22 Aug 2024 21:26:59 +0000 (21:26 +0000)
committerLinn Mattsson <linma@cendio.se>
Tue, 22 Oct 2024 10:41:33 +0000 (12:41 +0200)
sws_getCachedContext will set a default sampling method if 0 is passed
to the flags argument. This means that when it is called again, the
flags argument will not match the flags in the context, so a new one
will be allocated every time.

To get around this problem, we assign an explicit sampling method, one
that also happens to be more efficient and just as good for this
use-case as the default one, which is bicubic interpolation.

(cherry picked from commit c68714aee15f1e6c75d53c398ea9b9178f64fcfb)

common/rfb/H264LibavDecoderContext.cxx

index a7c817bfe3630555da5c03fd3faf47593116559a..789d02280dc15373808e43266710163a222fb737 100644 (file)
@@ -215,7 +215,7 @@ void H264LibavDecoderContext::decode(const uint8_t* h264_in_buffer,
 
   sws = sws_getCachedContext(sws, frame->width, frame->height, avctx->pix_fmt,
                              frame->width, frame->height, AV_PIX_FMT_RGB32,
-                             0, NULL, NULL, NULL);
+                             SWS_POINT, NULL, NULL, NULL);
 
   int inFull, outFull, brightness, contrast, saturation;
   const int* inTable;