diff --git a/source/blender/blenkernel/BKE_writeffmpeg.h b/source/blender/blenkernel/BKE_writeffmpeg.h index 299f8e185cf..c35105f7b8b 100644 --- a/source/blender/blenkernel/BKE_writeffmpeg.h +++ b/source/blender/blenkernel/BKE_writeffmpeg.h @@ -75,6 +75,7 @@ void filepath_ffmpeg(char* string, struct RenderData* rd); extern void ffmpeg_set_preset(struct RenderData *rd, int preset); extern void ffmpeg_verify_image_type(struct RenderData *rd, struct ImageFormatData *imf); extern void ffmpeg_verify_codec_settings(struct RenderData *rd); +extern int ffmpeg_alpha_channel_supported(struct RenderData *rd); extern struct IDProperty *ffmpeg_property_add(struct RenderData *Rd, const char *type, int opt_index, int parent_index); extern int ffmpeg_property_add_string(struct RenderData *rd, const char *type, const char *str); diff --git a/source/blender/blenkernel/intern/writeffmpeg.c b/source/blender/blenkernel/intern/writeffmpeg.c index e9f7823dfe8..2291ea5a249 100644 --- a/source/blender/blenkernel/intern/writeffmpeg.c +++ b/source/blender/blenkernel/intern/writeffmpeg.c @@ -506,12 +506,21 @@ static AVStream* alloc_video_stream(RenderData *rd, int codec_id, AVFormatContex } // Keep lossless encodes in the RGB domain. - if (codec_id == CODEC_ID_HUFFYUV || codec_id == CODEC_ID_FFV1) { + if (codec_id == CODEC_ID_HUFFYUV) { /* HUFFYUV was PIX_FMT_YUV422P before */ c->pix_fmt = PIX_FMT_RGB32; } - if ( codec_id == CODEC_ID_QTRLE ) { + if (codec_id == CODEC_ID_FFV1) { + if (rd->im_format.planes == R_IMF_PLANES_RGBA) { + c->pix_fmt = PIX_FMT_RGB32; + } + else { + c->pix_fmt = PIX_FMT_BGR0; + } + } + + if (codec_id == CODEC_ID_QTRLE ) { if (rd->im_format.planes == R_IMF_PLANES_RGBA) { c->pix_fmt = PIX_FMT_ARGB; } @@ -1422,4 +1431,11 @@ void ffmpeg_verify_codec_settings(RenderData *rd) ffmpeg_set_expert_options(rd); } +int ffmpeg_alpha_channel_supported(RenderData *rd) +{ + int codec = rd->ffcodecdata.codec; + + return ELEM(codec, CODEC_ID_QTRLE, CODEC_ID_FFV1); +} + #endif diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index 8483478838d..cd20f4fceed 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -722,7 +722,7 @@ static EnumPropertyItem *rna_ImageFormatSettings_color_mode_itemf(bContext *C, P Scene *scene = ptr->id.data; RenderData *rd = &scene->r; - if (rd->ffcodecdata.codec == CODEC_ID_QTRLE) + if (ffmpeg_alpha_channel_supported(rd)) chan_flag |= IMA_CHAN_FLAG_ALPHA; } #endif