Commit 594090c6 authored by Michael Niedermayer's avatar Michael Niedermayer

ffmpeg: select best pixel format for the encoder if no exact match.

Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent f88d5df3
...@@ -764,6 +764,8 @@ static void choose_pixel_fmt(AVStream *st, AVCodec *codec) ...@@ -764,6 +764,8 @@ static void choose_pixel_fmt(AVStream *st, AVCodec *codec)
{ {
if(codec && codec->pix_fmts){ if(codec && codec->pix_fmts){
const enum PixelFormat *p= codec->pix_fmts; const enum PixelFormat *p= codec->pix_fmts;
int has_alpha= av_pix_fmt_descriptors[st->codec->pix_fmt].nb_components % 2 == 0;
enum PixelFormat best= PIX_FMT_NONE;
if(st->codec->strict_std_compliance <= FF_COMPLIANCE_UNOFFICIAL){ if(st->codec->strict_std_compliance <= FF_COMPLIANCE_UNOFFICIAL){
if(st->codec->codec_id==CODEC_ID_MJPEG){ if(st->codec->codec_id==CODEC_ID_MJPEG){
p= (const enum PixelFormat[]){PIX_FMT_YUVJ420P, PIX_FMT_YUVJ422P, PIX_FMT_YUV420P, PIX_FMT_YUV422P, PIX_FMT_NONE}; p= (const enum PixelFormat[]){PIX_FMT_YUVJ420P, PIX_FMT_YUVJ422P, PIX_FMT_YUV420P, PIX_FMT_YUV422P, PIX_FMT_NONE};
...@@ -772,6 +774,7 @@ static void choose_pixel_fmt(AVStream *st, AVCodec *codec) ...@@ -772,6 +774,7 @@ static void choose_pixel_fmt(AVStream *st, AVCodec *codec)
} }
} }
for (; *p != PIX_FMT_NONE; p++) { for (; *p != PIX_FMT_NONE; p++) {
best= avcodec_find_best_pix_fmt2(best, *p, st->codec->pix_fmt, has_alpha, NULL);
if(*p == st->codec->pix_fmt) if(*p == st->codec->pix_fmt)
break; break;
} }
...@@ -781,8 +784,8 @@ static void choose_pixel_fmt(AVStream *st, AVCodec *codec) ...@@ -781,8 +784,8 @@ static void choose_pixel_fmt(AVStream *st, AVCodec *codec)
"Incompatible pixel format '%s' for codec '%s', auto-selecting format '%s'\n", "Incompatible pixel format '%s' for codec '%s', auto-selecting format '%s'\n",
av_pix_fmt_descriptors[st->codec->pix_fmt].name, av_pix_fmt_descriptors[st->codec->pix_fmt].name,
codec->name, codec->name,
av_pix_fmt_descriptors[codec->pix_fmts[0]].name); av_pix_fmt_descriptors[best].name);
st->codec->pix_fmt = codec->pix_fmts[0]; st->codec->pix_fmt = best;
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment