diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index b7a8e03fd103520792f1200941f5cf4ba42bd760..59c42a39420116824cc30d90ad36bdd6e04eba3a 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 4636 -#define LIBAVCODEC_BUILD_STR "4636" +#define LIBAVCODEC_BUILD 4637 +#define LIBAVCODEC_BUILD_STR "4637" enum CodecID { CODEC_ID_NONE, @@ -356,7 +356,7 @@ typedef struct AVCodecContext { /** * encoding: unused - * decoding: set by user. 1-> skip b frames, 2-> skip idct/dequant too + * decoding: set by user. 1-> skip b frames, 2-> skip idct/dequant too, 5-> skip everything except header */ int hurry_up; diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c index 8386fcf5998a390b867cce835e1147dbcee18937..5f80a72d8ccfab8c81acf2378609bf93073f21a3 100644 --- a/libavcodec/h263dec.c +++ b/libavcodec/h263dec.c @@ -525,10 +525,16 @@ retry: fprintf(stderr, "header damaged\n"); return -1; } + + s->avctx->key_frame = (s->pict_type == I_TYPE); + s->avctx->pict_type = s->pict_type; + /* skip b frames if we dont have reference frames */ if(s->num_available_buffers<2 && s->pict_type==B_TYPE) return get_consumed_bytes(s, buf_size); /* skip b frames if we are in a hurry */ if(s->hurry_up && s->pict_type==B_TYPE) return get_consumed_bytes(s, buf_size); + /* skip everything if we are in a hurry>=5 */ + if(s->hurry_up>=5) return get_consumed_bytes(s, buf_size); if(s->next_p_frame_damaged){ if(s->pict_type==B_TYPE)