mirror of https://git.ffmpeg.org/ffmpeg.git
avcodec/h264: Fix mix of lossless and lossy MBs decoding
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
This commit is contained in:
parent
06dda70f1e
commit
cf231b68da
|
@ -2389,14 +2389,6 @@ decode_intra_mb:
|
||||||
const uint8_t *scan, *scan8x8;
|
const uint8_t *scan, *scan8x8;
|
||||||
const uint32_t *qmul;
|
const uint32_t *qmul;
|
||||||
|
|
||||||
if(IS_INTERLACED(mb_type)){
|
|
||||||
scan8x8 = sl->qscale ? h->field_scan8x8 : h->field_scan8x8_q0;
|
|
||||||
scan = sl->qscale ? h->field_scan : h->field_scan_q0;
|
|
||||||
}else{
|
|
||||||
scan8x8 = sl->qscale ? h->zigzag_scan8x8 : h->zigzag_scan8x8_q0;
|
|
||||||
scan = sl->qscale ? h->zigzag_scan : h->zigzag_scan_q0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// decode_cabac_mb_dqp
|
// decode_cabac_mb_dqp
|
||||||
if(get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + (sl->last_qscale_diff != 0)])){
|
if(get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + (sl->last_qscale_diff != 0)])){
|
||||||
int val = 1;
|
int val = 1;
|
||||||
|
@ -2427,6 +2419,14 @@ decode_intra_mb:
|
||||||
}else
|
}else
|
||||||
sl->last_qscale_diff=0;
|
sl->last_qscale_diff=0;
|
||||||
|
|
||||||
|
if(IS_INTERLACED(mb_type)){
|
||||||
|
scan8x8 = sl->qscale ? h->field_scan8x8 : h->field_scan8x8_q0;
|
||||||
|
scan = sl->qscale ? h->field_scan : h->field_scan_q0;
|
||||||
|
}else{
|
||||||
|
scan8x8 = sl->qscale ? h->zigzag_scan8x8 : h->zigzag_scan8x8_q0;
|
||||||
|
scan = sl->qscale ? h->zigzag_scan : h->zigzag_scan_q0;
|
||||||
|
}
|
||||||
|
|
||||||
decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 0);
|
decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 0);
|
||||||
if (CHROMA444(h)) {
|
if (CHROMA444(h)) {
|
||||||
decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 1);
|
decode_cabac_luma_residual(h, sl, scan, scan8x8, pixel_shift, mb_type, cbp, 1);
|
||||||
|
|
|
@ -1102,14 +1102,6 @@ decode_intra_mb:
|
||||||
const uint8_t *scan, *scan8x8;
|
const uint8_t *scan, *scan8x8;
|
||||||
const int max_qp = 51 + 6 * (h->ps.sps->bit_depth_luma - 8);
|
const int max_qp = 51 + 6 * (h->ps.sps->bit_depth_luma - 8);
|
||||||
|
|
||||||
if(IS_INTERLACED(mb_type)){
|
|
||||||
scan8x8 = sl->qscale ? h->field_scan8x8_cavlc : h->field_scan8x8_cavlc_q0;
|
|
||||||
scan = sl->qscale ? h->field_scan : h->field_scan_q0;
|
|
||||||
}else{
|
|
||||||
scan8x8 = sl->qscale ? h->zigzag_scan8x8_cavlc : h->zigzag_scan8x8_cavlc_q0;
|
|
||||||
scan = sl->qscale ? h->zigzag_scan : h->zigzag_scan_q0;
|
|
||||||
}
|
|
||||||
|
|
||||||
dquant= get_se_golomb(&sl->gb);
|
dquant= get_se_golomb(&sl->gb);
|
||||||
|
|
||||||
sl->qscale += (unsigned)dquant;
|
sl->qscale += (unsigned)dquant;
|
||||||
|
@ -1126,6 +1118,14 @@ decode_intra_mb:
|
||||||
sl->chroma_qp[0] = get_chroma_qp(h->ps.pps, 0, sl->qscale);
|
sl->chroma_qp[0] = get_chroma_qp(h->ps.pps, 0, sl->qscale);
|
||||||
sl->chroma_qp[1] = get_chroma_qp(h->ps.pps, 1, sl->qscale);
|
sl->chroma_qp[1] = get_chroma_qp(h->ps.pps, 1, sl->qscale);
|
||||||
|
|
||||||
|
if(IS_INTERLACED(mb_type)){
|
||||||
|
scan8x8 = sl->qscale ? h->field_scan8x8_cavlc : h->field_scan8x8_cavlc_q0;
|
||||||
|
scan = sl->qscale ? h->field_scan : h->field_scan_q0;
|
||||||
|
}else{
|
||||||
|
scan8x8 = sl->qscale ? h->zigzag_scan8x8_cavlc : h->zigzag_scan8x8_cavlc_q0;
|
||||||
|
scan = sl->qscale ? h->zigzag_scan : h->zigzag_scan_q0;
|
||||||
|
}
|
||||||
|
|
||||||
if ((ret = decode_luma_residual(h, sl, gb, scan, scan8x8, pixel_shift, mb_type, cbp, 0)) < 0 ) {
|
if ((ret = decode_luma_residual(h, sl, gb, scan, scan8x8, pixel_shift, mb_type, cbp, 0)) < 0 ) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue