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
This commit is contained in:
parent
81366b7d2c
commit
0ea0ccc4ff
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue