[FFmpeg-cvslog] ffmpeg: select best pixel format for the encoder if no exact match.
Michael Niedermayer
git at videolan.org
Sun Dec 4 15:45:41 CET 2011
ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Sun Dec 4 15:26:52 2011 +0100| [594090c6c20a796ddfb04d54e2df98dca3fc653a] | committer: Michael Niedermayer
ffmpeg: select best pixel format for the encoder if no exact match.
Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=594090c6c20a796ddfb04d54e2df98dca3fc653a
---
ffmpeg.c | 7 +++++--
1 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/ffmpeg.c b/ffmpeg.c
index f013531..90f05ce 100644
--- a/ffmpeg.c
+++ b/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;
}
}
}
More information about the ffmpeg-cvslog
mailing list