|
|
@@ -115,6 +115,7 @@ typedef struct SVQ3Context { |
|
|
|
int prev_frame_num; |
|
|
|
|
|
|
|
enum AVPictureType pict_type; |
|
|
|
enum AVPictureType slice_type; |
|
|
|
int low_delay; |
|
|
|
|
|
|
|
int mb_x, mb_y; |
|
|
@@ -1070,7 +1071,7 @@ static int svq3_decode_slice_header(AVCodecContext *avctx) |
|
|
|
return -1; |
|
|
|
} |
|
|
|
|
|
|
|
s->pict_type = ff_h264_golomb_to_pict_type[slice_id]; |
|
|
|
s->slice_type = ff_h264_golomb_to_pict_type[slice_id]; |
|
|
|
|
|
|
|
if ((header & 0x9F) == 2) { |
|
|
|
i = (s->mb_num < 64) ? 6 : (1 + av_log2(s->mb_num - 1)); |
|
|
@@ -1439,6 +1440,8 @@ static int svq3_decode_frame(AVCodecContext *avctx, void *data, |
|
|
|
if (svq3_decode_slice_header(avctx)) |
|
|
|
return -1; |
|
|
|
|
|
|
|
s->pict_type = s->slice_type; |
|
|
|
|
|
|
|
if (s->pict_type != AV_PICTURE_TYPE_B) |
|
|
|
FFSWAP(SVQ3Frame*, s->next_pic, s->last_pic); |
|
|
|
|
|
|
@@ -1552,6 +1555,9 @@ static int svq3_decode_frame(AVCodecContext *avctx, void *data, |
|
|
|
if (svq3_decode_slice_header(avctx)) |
|
|
|
return -1; |
|
|
|
} |
|
|
|
if (s->slice_type != s->pict_type) { |
|
|
|
avpriv_request_sample(avctx, "non constant slice type\n"); |
|
|
|
} |
|
|
|
/* TODO: support s->mb_skip_run */ |
|
|
|
} |
|
|
|
|
|
|
|