mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-08 13:22:53 +02:00
ffmpeg: select best pixel format for the encoder if no exact match.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
f88d5df383
commit
594090c6c2
7
ffmpeg.c
7
ffmpeg.c
@ -764,6 +764,8 @@ static void choose_pixel_fmt(AVStream *st, AVCodec *codec)
|
||||
{
|
||||
if(codec && 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->codec_id==CODEC_ID_MJPEG){
|
||||
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)
|
||||
}
|
||||
}
|
||||
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)
|
||||
break;
|
||||
}
|
||||
@ -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",
|
||||
av_pix_fmt_descriptors[st->codec->pix_fmt].name,
|
||||
codec->name,
|
||||
av_pix_fmt_descriptors[codec->pix_fmts[0]].name);
|
||||
st->codec->pix_fmt = codec->pix_fmts[0];
|
||||
av_pix_fmt_descriptors[best].name);
|
||||
st->codec->pix_fmt = best;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user