summaryrefslogtreecommitdiff
path: root/libavcodec/mpeg12.c
diff options
context:
space:
mode:
Diffstat (limited to 'libavcodec/mpeg12.c')
-rw-r--r--libavcodec/mpeg12.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c
index 328217a253..e625a72624 100644
--- a/libavcodec/mpeg12.c
+++ b/libavcodec/mpeg12.c
@@ -1421,6 +1421,7 @@ static int mpeg1_decode_picture(AVCodecContext *avctx,
}
s->current_picture.pict_type= s->pict_type;
s->current_picture.key_frame= s->pict_type == I_TYPE;
+
s->y_dc_scale = 8;
s->c_dc_scale = 8;
s->first_slice = 1;
@@ -1895,8 +1896,15 @@ static int mpeg_decode_frame(AVCodecContext *avctx,
s->buffer, input_size);
break;
default:
+ /* skip b frames if we dont have reference frames */
+ if(s2->last_picture.data[0]==NULL && s2->pict_type==B_TYPE) break;
+ /* skip b frames if we are in a hurry */
+ if(avctx->hurry_up && s2->pict_type==B_TYPE) break;
+ /* skip everything if we are in a hurry>=5 */
+ if(avctx->hurry_up>=5) break;
+
if (start_code >= SLICE_MIN_START_CODE &&
- start_code <= SLICE_MAX_START_CODE && avctx->hurry_up<5) {
+ start_code <= SLICE_MAX_START_CODE) {
ret = mpeg_decode_slice(avctx, picture,
start_code, s->buffer, input_size);
if (ret == DECODE_SLICE_EOP) {