Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Antalik <richardantalik@gmail.com>2021-06-02 22:24:09 +0300
committerRichard Antalik <richardantalik@gmail.com>2021-06-02 22:24:09 +0300
commit0ea0ccc4ffd573739aeb9e67e83dbfb3604887c7 (patch)
treee6cfaca81c2b4b640418ee7422e8c9c5a3b69f5c /source/blender/blenkernel/intern/writeffmpeg.c
parent81366b7d2c548f40843c7f87842710e3a2019136 (diff)
FFmpeg: Fix H264 lossless render not lossless
While encoder parameters for lossless encoding are set correctly, output is not lossless due to pixel format being set to `AV_PIX_FMT_YUV420P` which is inherently lossy due to chroma subsampling. This was reported in T61569 and was merged to T57397, but there were 2 bugs - one for encoding and one for decoding. Set pixel format to `AV_PIX_FMT_YUV444P` when rendering lossless H264 files. This format isn't available in `codec->pix_fmts[0]` and it looks, that it has to be hard-coded. Reviewed By: sergey Differential Revision: D11458
Diffstat (limited to 'source/blender/blenkernel/intern/writeffmpeg.c')
-rw-r--r--source/blender/blenkernel/intern/writeffmpeg.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/writeffmpeg.c b/source/blender/blenkernel/intern/writeffmpeg.c
index 60c216a8401..218552b0e74 100644
--- a/source/blender/blenkernel/intern/writeffmpeg.c
+++ b/source/blender/blenkernel/intern/writeffmpeg.c
@@ -729,6 +729,12 @@ static AVStream *alloc_video_stream(FFMpegContext *context,
}
}
+ /* Use 4:4:4 instead of 4:2:0 pixel format for lossless rendering. */
+ if ((codec_id == AV_CODEC_ID_H264 || codec_id == AV_CODEC_ID_VP9) &&
+ context->ffmpeg_crf == 0) {
+ c->pix_fmt = AV_PIX_FMT_YUV444P;
+ }
+
if (codec_id == AV_CODEC_ID_PNG) {
if (rd->im_format.planes == R_IMF_PLANES_RGBA) {
c->pix_fmt = AV_PIX_FMT_RGBA;