Commit acd6b407 authored by Michael Niedermayer's avatar Michael Niedermayer

Merge commit '06789ad3'

* commit '06789ad3':
  h264: move qp_thresh into the per-slice context
Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents c27f53b9 06789ad3
...@@ -338,6 +338,7 @@ typedef struct H264SliceContext { ...@@ -338,6 +338,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;
...@@ -375,8 +376,6 @@ typedef struct H264Context { ...@@ -375,8 +376,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;
......
...@@ -1940,7 +1940,7 @@ int ff_h264_decode_slice_header(H264Context *h, H264SliceContext *sl, H264Contex ...@@ -1940,7 +1940,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],
...@@ -2124,7 +2124,7 @@ static av_always_inline void fill_filter_caches_inter(H264Context *h, ...@@ -2124,7 +2124,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];
...@@ -2160,7 +2160,7 @@ static int fill_filter_caches(H264Context *h, int mb_type) ...@@ -2160,7 +2160,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 ||
...@@ -2317,7 +2317,7 @@ static void loop_filter(H264Context *h, H264SliceContext *sl, int start_x, int e ...@@ -2317,7 +2317,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]);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment