summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ffmpeg.c14
-rw-r--r--libavcodec/avcodec.h1
-rw-r--r--libavcodec/svq1.c2
3 files changed, 16 insertions, 1 deletions
diff --git a/ffmpeg.c b/ffmpeg.c
index b6fa3e7041..6297587ea6 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -2744,6 +2744,7 @@ static void opt_output_file(const char *filename)
} else {
char *p;
int i;
+ AVCodec *codec;
codec_id = file_oformat->video_codec;
if (video_codec_id != CODEC_ID_NONE)
@@ -2759,7 +2760,18 @@ static void opt_output_file(const char *filename)
video_enc->width = frame_width + frame_padright + frame_padleft;
video_enc->height = frame_height + frame_padtop + frame_padbottom;
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)
video_enc->gop_size = gop_size;
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index d7781dc9a3..fe4aeb2c8b 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -1658,6 +1658,7 @@ typedef struct AVCodec {
struct AVCodec *next;
void (*flush)(AVCodecContext *);
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;
/**
diff --git a/libavcodec/svq1.c b/libavcodec/svq1.c
index 97b6db70e3..7c5c59d793 100644
--- a/libavcodec/svq1.c
+++ b/libavcodec/svq1.c
@@ -1933,6 +1933,7 @@ AVCodec svq1_decoder = {
svq1_decode_frame,
CODEC_CAP_DR1,
.flush= ff_mpeg_flush,
+ .pix_fmts= (enum PixelFormat[]){PIX_FMT_YUV410P, -1},
};
#ifdef CONFIG_ENCODERS
@@ -1945,6 +1946,7 @@ AVCodec svq1_encoder = {
svq1_encode_init,
svq1_encode_frame,
svq1_encode_end,
+ .pix_fmts= (enum PixelFormat[]){PIX_FMT_YUV410P, -1},
};
#endif //CONFIG_ENCODERS