diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2002-04-27 13:12:57 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2002-04-27 13:12:57 +0000 |
commit | 2417652e9fbb2a4282909217fd53693bd7b7e11c (patch) | |
tree | ca0c08ed7a1db11cfa9d35225fd61946c53292ca | |
parent | d7e9533aa06f4073a27812349b35ba5fede11ca1 (diff) | |
download | ffmpeg-2417652e9fbb2a4282909217fd53693bd7b7e11c.tar.gz |
export mbskip_table for direct rendering
add hurry_up support
Originally committed as revision 424 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavcodec/avcodec.h | 9 | ||||
-rw-r--r-- | libavcodec/h263dec.c | 5 | ||||
-rw-r--r-- | libavcodec/mpeg12.c | 1 | ||||
-rw-r--r-- | libavcodec/mpegvideo.c | 3 | ||||
-rw-r--r-- | libavcodec/mpegvideo.h | 3 |
5 files changed, 19 insertions, 2 deletions
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 8cb62ce706..67a663ed36 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -5,8 +5,8 @@ #define LIBAVCODEC_VERSION_INT 0x000406 #define LIBAVCODEC_VERSION "0.4.6" -#define LIBAVCODEC_BUILD 4603 -#define LIBAVCODEC_BUILD_STR "4603" +#define LIBAVCODEC_BUILD 4604 +#define LIBAVCODEC_BUILD_STR "4604" enum CodecID { CODEC_ID_NONE, @@ -141,6 +141,8 @@ typedef struct AVCodecContext { int key_frame; /* true if the previous compressed frame was a key frame (intra, or seekable) */ int delay; /* number of frames the decoded output will be delayed relative to the encoded input */ + uint8_t *mbskip_table; /* =1 if MB didnt change, is only valid for I/P frames + stride= mb_width = (width+15)>>4 */ /* encoding parameters */ int quality; /* quality of the previous encoded frame @@ -157,6 +159,9 @@ typedef struct AVCodecContext { int rc_strategy; int b_frame_strategy; + int hurry_up; /* when set to 1 during decoding, b frames will be skiped + when set to 2 idct/dequant will be skipped too */ + struct AVCodec *codec; void *priv_data; diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c index 796e5ea615..ebd8ff279c 100644 --- a/libavcodec/h263dec.c +++ b/libavcodec/h263dec.c @@ -74,6 +74,7 @@ static int h263_decode_init(AVCodecContext *avctx) return -1; } s->codec_id= avctx->codec->id; + avctx->mbskip_table= s->mbskip_table; /* for h263, we allocate the images after having read the header */ if (avctx->codec->id != CODEC_ID_H263 && avctx->codec->id != CODEC_ID_MPEG4) @@ -108,6 +109,8 @@ static int h263_decode_frame(AVCodecContext *avctx, printf("*****frame %d size=%d\n", avctx->frame_number, buf_size); printf("bytes=%x %x %x %x\n", buf[0], buf[1], buf[2], buf[3]); #endif + + s->hurry_up= avctx->hurry_up; /* no supplementary picture */ if (buf_size == 0) { @@ -154,6 +157,8 @@ static int h263_decode_frame(AVCodecContext *avctx, return -1; /* skip b frames if we dont have reference frames */ if(s->num_available_buffers<2 && s->pict_type==B_TYPE) return 0; + /* skip b frames if we are in a hurry */ + if(s->hurry_up && s->pict_type==B_TYPE) return 0; MPV_frame_start(s); diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c index 18e0a53d39..4ba235cca0 100644 --- a/libavcodec/mpeg12.c +++ b/libavcodec/mpeg12.c @@ -1187,6 +1187,7 @@ static int mpeg_decode_init(AVCodecContext *avctx) s->mpeg_enc_ctx.picture_number = 0; s->repeat_field = 0; s->mpeg_enc_ctx.codec_id= avctx->codec->id; + avctx->mbskip_table= s->mpeg_enc_ctx.mbskip_table; return 0; } diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c index b216113c41..37fb97e68a 100644 --- a/libavcodec/mpegvideo.c +++ b/libavcodec/mpegvideo.c @@ -1145,6 +1145,9 @@ static inline void put_dct(MpegEncContext *s, static inline void add_dct(MpegEncContext *s, DCTELEM *block, int i, UINT8 *dest, int line_size) { + /* skip dequant / idct if we are really late ;) */ + if(s->hurry_up>1) return; + if (s->block_last_index[i] >= 0) { if (!s->mpeg2) if(s->encoding || (!s->h263_msmpeg4)) diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 22c878963f..962e0c54ca 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -196,6 +196,9 @@ typedef struct MpegEncContext { int no_rounding; /* apply no rounding to motion compensation (MPEG4, msmpeg4, ...) for b-frames rounding mode is allways 0 */ + int hurry_up; /* when set to 1 during decoding, b frames will be skiped + when set to 2 idct/dequant will be skipped too */ + /* macroblock layer */ int mb_x, mb_y; int mb_incr; |