提交 644a9262 编写于 作者: M Michael Niedermayer

PIX_FMT_NONE and related fixes

Originally committed as revision 4161 to svn://svn.ffmpeg.org/ffmpeg/trunk
上级 3ca4b654
...@@ -86,7 +86,7 @@ static AVImageFormat *image_format; ...@@ -86,7 +86,7 @@ static AVImageFormat *image_format;
static int frame_width = 0; static int frame_width = 0;
static int frame_height = 0; static int frame_height = 0;
static float frame_aspect_ratio = 0; static float frame_aspect_ratio = 0;
static enum PixelFormat frame_pix_fmt = PIX_FMT_YUV420P; static enum PixelFormat frame_pix_fmt = PIX_FMT_NONE;
static int frame_padtop = 0; static int frame_padtop = 0;
static int frame_padbottom = 0; static int frame_padbottom = 0;
static int frame_padleft = 0; static int frame_padleft = 0;
......
...@@ -557,6 +557,7 @@ static int decode_init(AVCodecContext *avctx){ ...@@ -557,6 +557,7 @@ static int decode_init(AVCodecContext *avctx){
common_init(avctx); common_init(avctx);
init_vlcs(a); init_vlcs(a);
ff_init_scantable(a->dsp.idct_permutation, &a->scantable, scantab); ff_init_scantable(a->dsp.idct_permutation, &a->scantable, scantab);
avctx->pix_fmt= PIX_FMT_YUV420P;
a->inv_qscale= ((uint8_t*)avctx->extradata)[0]; a->inv_qscale= ((uint8_t*)avctx->extradata)[0];
if(a->inv_qscale == 0){ if(a->inv_qscale == 0){
......
...@@ -17,7 +17,7 @@ extern "C" { ...@@ -17,7 +17,7 @@ extern "C" {
#define FFMPEG_VERSION_INT 0x000409 #define FFMPEG_VERSION_INT 0x000409
#define FFMPEG_VERSION "0.4.9-pre1" #define FFMPEG_VERSION "0.4.9-pre1"
#define LIBAVCODEC_BUILD 4752 #define LIBAVCODEC_BUILD 4753
#define LIBAVCODEC_VERSION_INT FFMPEG_VERSION_INT #define LIBAVCODEC_VERSION_INT FFMPEG_VERSION_INT
#define LIBAVCODEC_VERSION FFMPEG_VERSION #define LIBAVCODEC_VERSION FFMPEG_VERSION
...@@ -206,6 +206,7 @@ enum CodecType { ...@@ -206,6 +206,7 @@ enum CodecType {
* to run on the IBM VGA graphics adapter use 6-bit palette components. * to run on the IBM VGA graphics adapter use 6-bit palette components.
*/ */
enum PixelFormat { enum PixelFormat {
PIX_FMT_NONE= -1,
PIX_FMT_YUV420P, ///< Planar YUV 4:2:0 (1 Cr & Cb sample per 2x2 Y samples) PIX_FMT_YUV420P, ///< Planar YUV 4:2:0 (1 Cr & Cb sample per 2x2 Y samples)
PIX_FMT_YUV422, ///< Packed pixel, Y0 Cb Y1 Cr PIX_FMT_YUV422, ///< Packed pixel, Y0 Cb Y1 Cr
PIX_FMT_RGB24, ///< Packed pixel, 3 bytes per pixel, RGBRGB... PIX_FMT_RGB24, ///< Packed pixel, 3 bytes per pixel, RGBRGB...
......
...@@ -560,7 +560,9 @@ static int rv10_decode_init(AVCodecContext *avctx) ...@@ -560,7 +560,9 @@ static int rv10_decode_init(AVCodecContext *avctx)
if(avctx->debug & FF_DEBUG_PICT_INFO){ if(avctx->debug & FF_DEBUG_PICT_INFO){
av_log(avctx, AV_LOG_DEBUG, "ver:%X ver0:%X\n", avctx->sub_id, avctx->extradata_size >= 4 ? ((uint32_t*)avctx->extradata)[0] : -1); av_log(avctx, AV_LOG_DEBUG, "ver:%X ver0:%X\n", avctx->sub_id, avctx->extradata_size >= 4 ? ((uint32_t*)avctx->extradata)[0] : -1);
} }
avctx->pix_fmt = PIX_FMT_YUV420P;
if (MPV_common_init(s) < 0) if (MPV_common_init(s) < 0)
return -1; return -1;
...@@ -576,8 +578,6 @@ static int rv10_decode_init(AVCodecContext *avctx) ...@@ -576,8 +578,6 @@ static int rv10_decode_init(AVCodecContext *avctx)
rv_chrom_code, 2, 2, 1); rv_chrom_code, 2, 2, 1);
done = 1; done = 1;
} }
avctx->pix_fmt = PIX_FMT_YUV420P;
return 0; return 0;
} }
......
...@@ -3652,6 +3652,8 @@ static int decode_init(AVCodecContext *avctx) ...@@ -3652,6 +3652,8 @@ static int decode_init(AVCodecContext *avctx)
{ {
SnowContext *s = avctx->priv_data; SnowContext *s = avctx->priv_data;
int block_size; int block_size;
avctx->pix_fmt= PIX_FMT_YUV420P;
common_init(avctx); common_init(avctx);
......
...@@ -459,6 +459,7 @@ void avcodec_get_context_defaults(AVCodecContext *s){ ...@@ -459,6 +459,7 @@ void avcodec_get_context_defaults(AVCodecContext *s){
s->profile= FF_PROFILE_UNKNOWN; s->profile= FF_PROFILE_UNKNOWN;
s->level= FF_LEVEL_UNKNOWN; s->level= FF_LEVEL_UNKNOWN;
s->me_penalty_compensation= 256; s->me_penalty_compensation= 256;
s->pix_fmt= PIX_FMT_NONE;
s->intra_quant_bias= FF_DEFAULT_QUANT_BIAS; s->intra_quant_bias= FF_DEFAULT_QUANT_BIAS;
s->inter_quant_bias= FF_DEFAULT_QUANT_BIAS; s->inter_quant_bias= FF_DEFAULT_QUANT_BIAS;
......
...@@ -222,7 +222,7 @@ static int img_read_header(AVFormatContext *s1, AVFormatParameters *ap) ...@@ -222,7 +222,7 @@ static int img_read_header(AVFormatContext *s1, AVFormatParameters *ap)
st->codec.codec_type = CODEC_TYPE_VIDEO; st->codec.codec_type = CODEC_TYPE_VIDEO;
st->codec.codec_id = av_str2id(img_tags, s->path); st->codec.codec_id = av_str2id(img_tags, s->path);
} }
if(st->codec.codec_type == CODEC_TYPE_VIDEO && ap->pix_fmt) if(st->codec.codec_type == CODEC_TYPE_VIDEO && ap->pix_fmt != PIX_FMT_NONE)
st->codec.pix_fmt = ap->pix_fmt; st->codec.pix_fmt = ap->pix_fmt;
return 0; return 0;
......
...@@ -1682,7 +1682,7 @@ static int has_codec_parameters(AVCodecContext *enc) ...@@ -1682,7 +1682,7 @@ static int has_codec_parameters(AVCodecContext *enc)
val = enc->sample_rate; val = enc->sample_rate;
break; break;
case CODEC_TYPE_VIDEO: case CODEC_TYPE_VIDEO:
val = enc->width; val = enc->width && enc->pix_fmt != PIX_FMT_NONE;
break; break;
default: default:
val = 1; val = 1;
...@@ -1704,6 +1704,8 @@ static int try_decode_frame(AVStream *st, const uint8_t *data, int size) ...@@ -1704,6 +1704,8 @@ static int try_decode_frame(AVStream *st, const uint8_t *data, int size)
ret = avcodec_open(&st->codec, codec); ret = avcodec_open(&st->codec, codec);
if (ret < 0) if (ret < 0)
return ret; return ret;
if(!has_codec_parameters(&st->codec)){
switch(st->codec.codec_type) { switch(st->codec.codec_type) {
case CODEC_TYPE_VIDEO: case CODEC_TYPE_VIDEO:
ret = avcodec_decode_video(&st->codec, &picture, ret = avcodec_decode_video(&st->codec, &picture,
...@@ -1720,6 +1722,7 @@ static int try_decode_frame(AVStream *st, const uint8_t *data, int size) ...@@ -1720,6 +1722,7 @@ static int try_decode_frame(AVStream *st, const uint8_t *data, int size)
default: default:
break; break;
} }
}
fail: fail:
avcodec_close(&st->codec); avcodec_close(&st->codec);
return ret; return ret;
...@@ -1739,6 +1742,7 @@ static int try_decode_frame(AVStream *st, const uint8_t *data, int size) ...@@ -1739,6 +1742,7 @@ static int try_decode_frame(AVStream *st, const uint8_t *data, int size)
* *
* @param ic media file handle * @param ic media file handle
* @return >=0 if OK. AVERROR_xxx if error. * @return >=0 if OK. AVERROR_xxx if error.
* @todo let user decide somehow what information is needed so we dont waste time geting stuff the user doesnt need
*/ */
int av_find_stream_info(AVFormatContext *ic) int av_find_stream_info(AVFormatContext *ic)
{ {
...@@ -1841,7 +1845,7 @@ int av_find_stream_info(AVFormatContext *ic) ...@@ -1841,7 +1845,7 @@ int av_find_stream_info(AVFormatContext *ic)
decompress the frame. We try to avoid that in most cases as decompress the frame. We try to avoid that in most cases as
it takes longer and uses more memory. For MPEG4, we need to it takes longer and uses more memory. For MPEG4, we need to
decompress for Quicktime. */ decompress for Quicktime. */
if (!has_codec_parameters(&st->codec) && if (!has_codec_parameters(&st->codec) /*&&
(st->codec.codec_id == CODEC_ID_FLV1 || (st->codec.codec_id == CODEC_ID_FLV1 ||
st->codec.codec_id == CODEC_ID_H264 || st->codec.codec_id == CODEC_ID_H264 ||
st->codec.codec_id == CODEC_ID_H263 || st->codec.codec_id == CODEC_ID_H263 ||
...@@ -1855,7 +1859,7 @@ int av_find_stream_info(AVFormatContext *ic) ...@@ -1855,7 +1859,7 @@ int av_find_stream_info(AVFormatContext *ic)
st->codec.codec_id == CODEC_ID_PBM || st->codec.codec_id == CODEC_ID_PBM ||
st->codec.codec_id == CODEC_ID_PPM || st->codec.codec_id == CODEC_ID_PPM ||
st->codec.codec_id == CODEC_ID_SHORTEN || st->codec.codec_id == CODEC_ID_SHORTEN ||
(st->codec.codec_id == CODEC_ID_MPEG4 && !st->need_parsing))) (st->codec.codec_id == CODEC_ID_MPEG4 && !st->need_parsing))*/)
try_decode_frame(st, pkt->data, pkt->size); try_decode_frame(st, pkt->data, pkt->size);
if (st->codec_info_duration >= MAX_STREAM_DURATION) { if (st->codec_info_duration >= MAX_STREAM_DURATION) {
......
...@@ -290,7 +290,7 @@ file=${outfile}huffyuv.avi ...@@ -290,7 +290,7 @@ file=${outfile}huffyuv.avi
do_ffmpeg $file -y -f pgmyuv -i $raw_src -an -vcodec huffyuv -pix_fmt yuv422p $file do_ffmpeg $file -y -f pgmyuv -i $raw_src -an -vcodec huffyuv -pix_fmt yuv422p $file
# huffyuv decoding # huffyuv decoding
do_ffmpeg $raw_dst -y -i $file -f rawvideo -strict -1 $raw_dst do_ffmpeg $raw_dst -y -i $file -f rawvideo -strict -1 -pix_fmt yuv420p $raw_dst
fi fi
################################### ###################################
...@@ -370,7 +370,7 @@ file=${outfile}mjpeg.avi ...@@ -370,7 +370,7 @@ file=${outfile}mjpeg.avi
do_ffmpeg $file -y -qscale 10 -f pgmyuv -i $raw_src -an -vcodec mjpeg -pix_fmt yuvj420p $file do_ffmpeg $file -y -qscale 10 -f pgmyuv -i $raw_src -an -vcodec mjpeg -pix_fmt yuvj420p $file
# mjpeg decoding # mjpeg decoding
do_ffmpeg $raw_dst -y -i $file -f rawvideo $raw_dst do_ffmpeg $raw_dst -y -i $file -f rawvideo -pix_fmt yuv420p $raw_dst
fi fi
################################### ###################################
...@@ -467,7 +467,7 @@ file=${outfile}svq1.mov ...@@ -467,7 +467,7 @@ file=${outfile}svq1.mov
do_ffmpeg $file -y -f pgmyuv -i $raw_src -an -vcodec svq1 -qscale 3 -pix_fmt yuv410p $file do_ffmpeg $file -y -f pgmyuv -i $raw_src -an -vcodec svq1 -qscale 3 -pix_fmt yuv410p $file
# svq1 decoding # svq1 decoding
do_ffmpeg $raw_dst -y -i $file -f rawvideo $raw_dst do_ffmpeg $raw_dst -y -i $file -f rawvideo -pix_fmt yuv420p $raw_dst
fi fi
################################### ###################################
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册