Commit 5ba35c84 authored by michael's avatar michael

automatic pixel format selection


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@3131 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent 14c49e00
...@@ -2744,6 +2744,7 @@ static void opt_output_file(const char *filename) ...@@ -2744,6 +2744,7 @@ static void opt_output_file(const char *filename)
} else { } else {
char *p; char *p;
int i; int i;
AVCodec *codec;
codec_id = file_oformat->video_codec; codec_id = file_oformat->video_codec;
if (video_codec_id != CODEC_ID_NONE) if (video_codec_id != CODEC_ID_NONE)
...@@ -2761,6 +2762,17 @@ static void opt_output_file(const char *filename) ...@@ -2761,6 +2762,17 @@ static void opt_output_file(const char *filename)
video_enc->sample_aspect_ratio = av_d2q(frame_aspect_ratio*frame_height/frame_width, 255); video_enc->sample_aspect_ratio = av_d2q(frame_aspect_ratio*frame_height/frame_width, 255);
video_enc->pix_fmt = frame_pix_fmt; video_enc->pix_fmt = frame_pix_fmt;
codec = avcodec_find_encoder(codec_id);
if(codec && codec->pix_fmts){
const enum PixelFormat *p= codec->pix_fmts;
for(; *p!=-1; p++){
if(*p == video_enc->pix_fmt)
break;
}
if(*p == -1)
video_enc->pix_fmt = codec->pix_fmts[0];
}
if (!intra_only) if (!intra_only)
video_enc->gop_size = gop_size; video_enc->gop_size = gop_size;
else else
......
...@@ -1658,6 +1658,7 @@ typedef struct AVCodec { ...@@ -1658,6 +1658,7 @@ typedef struct AVCodec {
struct AVCodec *next; struct AVCodec *next;
void (*flush)(AVCodecContext *); void (*flush)(AVCodecContext *);
const AVRational *supported_framerates; ///array of supported framerates, or NULL if any, array is terminated by {0,0} const AVRational *supported_framerates; ///array of supported framerates, or NULL if any, array is terminated by {0,0}
const enum PixelFormat *pix_fmts; ///array of supported pixel formats, or NULL if unknown, array is terminanted by -1
} AVCodec; } AVCodec;
/** /**
......
...@@ -1933,6 +1933,7 @@ AVCodec svq1_decoder = { ...@@ -1933,6 +1933,7 @@ AVCodec svq1_decoder = {
svq1_decode_frame, svq1_decode_frame,
CODEC_CAP_DR1, CODEC_CAP_DR1,
.flush= ff_mpeg_flush, .flush= ff_mpeg_flush,
.pix_fmts= (enum PixelFormat[]){PIX_FMT_YUV410P, -1},
}; };
#ifdef CONFIG_ENCODERS #ifdef CONFIG_ENCODERS
...@@ -1945,6 +1946,7 @@ AVCodec svq1_encoder = { ...@@ -1945,6 +1946,7 @@ AVCodec svq1_encoder = {
svq1_encode_init, svq1_encode_init,
svq1_encode_frame, svq1_encode_frame,
svq1_encode_end, svq1_encode_end,
.pix_fmts= (enum PixelFormat[]){PIX_FMT_YUV410P, -1},
}; };
#endif //CONFIG_ENCODERS #endif //CONFIG_ENCODERS
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