mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
h264: move last_qscale_diff into the per-slice context
This commit is contained in:
parent
e7226984ac
commit
5c8280c307
@ -307,6 +307,7 @@ typedef struct H264SliceContext {
|
|||||||
int qscale;
|
int qscale;
|
||||||
int chroma_qp[2]; // QPc
|
int chroma_qp[2]; // QPc
|
||||||
int qp_thresh; ///< QP threshold to skip loopfilter
|
int qp_thresh; ///< QP threshold to skip loopfilter
|
||||||
|
int last_qscale_diff;
|
||||||
|
|
||||||
// Weighted pred stuff
|
// Weighted pred stuff
|
||||||
int use_weight;
|
int use_weight;
|
||||||
@ -491,7 +492,6 @@ typedef struct H264Context {
|
|||||||
|
|
||||||
/* chroma_pred_mode for i4x4 or i16x16, else 0 */
|
/* chroma_pred_mode for i4x4 or i16x16, else 0 */
|
||||||
uint8_t *chroma_pred_mode_table;
|
uint8_t *chroma_pred_mode_table;
|
||||||
int last_qscale_diff;
|
|
||||||
uint8_t (*mvd_table[2])[2];
|
uint8_t (*mvd_table[2])[2];
|
||||||
DECLARE_ALIGNED(16, uint8_t, mvd_cache)[2][5 * 8][2];
|
DECLARE_ALIGNED(16, uint8_t, mvd_cache)[2][5 * 8][2];
|
||||||
uint8_t *direct_table;
|
uint8_t *direct_table;
|
||||||
|
@ -1937,7 +1937,7 @@ int ff_h264_decode_mb_cabac(H264Context *h, H264SliceContext *sl)
|
|||||||
|
|
||||||
h->cbp_table[mb_xy] = 0;
|
h->cbp_table[mb_xy] = 0;
|
||||||
h->chroma_pred_mode_table[mb_xy] = 0;
|
h->chroma_pred_mode_table[mb_xy] = 0;
|
||||||
h->last_qscale_diff = 0;
|
sl->last_qscale_diff = 0;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -2050,7 +2050,7 @@ decode_intra_mb:
|
|||||||
// All coeffs are present
|
// All coeffs are present
|
||||||
memset(h->non_zero_count[mb_xy], 16, 48);
|
memset(h->non_zero_count[mb_xy], 16, 48);
|
||||||
h->cur_pic.mb_type[mb_xy] = mb_type;
|
h->cur_pic.mb_type[mb_xy] = mb_type;
|
||||||
h->last_qscale_diff = 0;
|
sl->last_qscale_diff = 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2358,7 +2358,7 @@ decode_intra_mb:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// decode_cabac_mb_dqp
|
// decode_cabac_mb_dqp
|
||||||
if(get_cabac_noinline( &sl->cabac, &sl->cabac_state[60 + (h->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;
|
||||||
int ctx= 2;
|
int ctx= 2;
|
||||||
const int max_qp = 51 + 6*(h->sps.bit_depth_luma-8);
|
const int max_qp = 51 + 6*(h->sps.bit_depth_luma-8);
|
||||||
@ -2376,7 +2376,7 @@ decode_intra_mb:
|
|||||||
val= (val + 1)>>1 ;
|
val= (val + 1)>>1 ;
|
||||||
else
|
else
|
||||||
val= -((val + 1)>>1);
|
val= -((val + 1)>>1);
|
||||||
h->last_qscale_diff = val;
|
sl->last_qscale_diff = val;
|
||||||
sl->qscale += val;
|
sl->qscale += val;
|
||||||
if (((unsigned)sl->qscale) > max_qp){
|
if (((unsigned)sl->qscale) > max_qp){
|
||||||
if (sl->qscale < 0) sl->qscale += max_qp + 1;
|
if (sl->qscale < 0) sl->qscale += max_qp + 1;
|
||||||
@ -2385,7 +2385,7 @@ decode_intra_mb:
|
|||||||
sl->chroma_qp[0] = get_chroma_qp(h, 0, sl->qscale);
|
sl->chroma_qp[0] = get_chroma_qp(h, 0, sl->qscale);
|
||||||
sl->chroma_qp[1] = get_chroma_qp(h, 1, sl->qscale);
|
sl->chroma_qp[1] = get_chroma_qp(h, 1, sl->qscale);
|
||||||
}else
|
}else
|
||||||
h->last_qscale_diff=0;
|
sl->last_qscale_diff=0;
|
||||||
|
|
||||||
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)) {
|
||||||
@ -2442,7 +2442,7 @@ decode_intra_mb:
|
|||||||
fill_rectangle(&sl->non_zero_count_cache[scan8[ 0]], 4, 4, 8, 0, 1);
|
fill_rectangle(&sl->non_zero_count_cache[scan8[ 0]], 4, 4, 8, 0, 1);
|
||||||
fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
|
fill_rectangle(&sl->non_zero_count_cache[scan8[16]], 4, 4, 8, 0, 1);
|
||||||
fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
|
fill_rectangle(&sl->non_zero_count_cache[scan8[32]], 4, 4, 8, 0, 1);
|
||||||
h->last_qscale_diff = 0;
|
sl->last_qscale_diff = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
h->cur_pic.qscale_table[mb_xy] = sl->qscale;
|
h->cur_pic.qscale_table[mb_xy] = sl->qscale;
|
||||||
|
@ -1660,7 +1660,7 @@ int ff_h264_decode_slice_header(H264Context *h, H264SliceContext *sl, H264Contex
|
|||||||
h->cabac_init_idc = tmp;
|
h->cabac_init_idc = tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
h->last_qscale_diff = 0;
|
sl->last_qscale_diff = 0;
|
||||||
tmp = h->pps.init_qp + get_se_golomb(&h->gb);
|
tmp = h->pps.init_qp + get_se_golomb(&h->gb);
|
||||||
if (tmp > 51 + 6 * (h->sps.bit_depth_luma - 8)) {
|
if (tmp > 51 + 6 * (h->sps.bit_depth_luma - 8)) {
|
||||||
av_log(h->avctx, AV_LOG_ERROR, "QP %u out of range\n", tmp);
|
av_log(h->avctx, AV_LOG_ERROR, "QP %u out of range\n", tmp);
|
||||||
|
Loading…
Reference in New Issue
Block a user