h264: move qp_thresh into the per-slice context
This commit is contained in:
parent
d231e84b06
commit
06789ad3b7
@ -301,6 +301,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
|
||||||
|
|
||||||
// Weighted pred stuff
|
// Weighted pred stuff
|
||||||
int use_weight;
|
int use_weight;
|
||||||
@ -336,8 +337,6 @@ typedef struct H264Context {
|
|||||||
|
|
||||||
int pixel_shift; ///< 0 for 8-bit H264, 1 for high-bit-depth H264
|
int pixel_shift; ///< 0 for 8-bit H264, 1 for high-bit-depth H264
|
||||||
|
|
||||||
int qp_thresh; ///< QP threshold to skip loopfilter
|
|
||||||
|
|
||||||
/* coded dimensions -- 16 * mb w/h */
|
/* coded dimensions -- 16 * mb w/h */
|
||||||
int width, height;
|
int width, height;
|
||||||
ptrdiff_t linesize, uvlinesize;
|
ptrdiff_t linesize, uvlinesize;
|
||||||
|
@ -1730,7 +1730,7 @@ int ff_h264_decode_slice_header(H264Context *h, H264SliceContext *sl, H264Contex
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
h->qp_thresh = 15 -
|
sl->qp_thresh = 15 -
|
||||||
FFMIN(h->slice_alpha_c0_offset, h->slice_beta_offset) -
|
FFMIN(h->slice_alpha_c0_offset, h->slice_beta_offset) -
|
||||||
FFMAX3(0,
|
FFMAX3(0,
|
||||||
h->pps.chroma_qp_index_offset[0],
|
h->pps.chroma_qp_index_offset[0],
|
||||||
@ -1903,7 +1903,7 @@ static av_always_inline void fill_filter_caches_inter(H264Context *h,
|
|||||||
*
|
*
|
||||||
* @return non zero if the loop filter can be skipped
|
* @return non zero if the loop filter can be skipped
|
||||||
*/
|
*/
|
||||||
static int fill_filter_caches(H264Context *h, int mb_type)
|
static int fill_filter_caches(H264Context *h, H264SliceContext *sl, int mb_type)
|
||||||
{
|
{
|
||||||
const int mb_xy = h->mb_xy;
|
const int mb_xy = h->mb_xy;
|
||||||
int top_xy, left_xy[LEFT_MBS];
|
int top_xy, left_xy[LEFT_MBS];
|
||||||
@ -1939,7 +1939,7 @@ static int fill_filter_caches(H264Context *h, int mb_type)
|
|||||||
/* For sufficiently low qp, filtering wouldn't do anything.
|
/* For sufficiently low qp, filtering wouldn't do anything.
|
||||||
* This is a conservative estimate: could also check beta_offset
|
* This is a conservative estimate: could also check beta_offset
|
||||||
* and more accurate chroma_qp. */
|
* and more accurate chroma_qp. */
|
||||||
int qp_thresh = h->qp_thresh; // FIXME strictly we should store qp_thresh for each mb of a slice
|
int qp_thresh = sl->qp_thresh; // FIXME strictly we should store qp_thresh for each mb of a slice
|
||||||
int qp = h->cur_pic.qscale_table[mb_xy];
|
int qp = h->cur_pic.qscale_table[mb_xy];
|
||||||
if (qp <= qp_thresh &&
|
if (qp <= qp_thresh &&
|
||||||
(left_xy[LTOP] < 0 ||
|
(left_xy[LTOP] < 0 ||
|
||||||
@ -2096,7 +2096,7 @@ static void loop_filter(H264Context *h, H264SliceContext *sl, int start_x, int e
|
|||||||
}
|
}
|
||||||
backup_mb_border(h, dest_y, dest_cb, dest_cr, linesize,
|
backup_mb_border(h, dest_y, dest_cb, dest_cr, linesize,
|
||||||
uvlinesize, 0);
|
uvlinesize, 0);
|
||||||
if (fill_filter_caches(h, mb_type))
|
if (fill_filter_caches(h, sl, mb_type))
|
||||||
continue;
|
continue;
|
||||||
sl->chroma_qp[0] = get_chroma_qp(h, 0, h->cur_pic.qscale_table[mb_xy]);
|
sl->chroma_qp[0] = get_chroma_qp(h, 0, h->cur_pic.qscale_table[mb_xy]);
|
||||||
sl->chroma_qp[1] = get_chroma_qp(h, 1, h->cur_pic.qscale_table[mb_xy]);
|
sl->chroma_qp[1] = get_chroma_qp(h, 1, h->cur_pic.qscale_table[mb_xy]);
|
||||||
|
Loading…
Reference in New Issue
Block a user