aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2015-01-17 22:28:46 +0100
committerAnton Khirnov <anton@khirnov.net>2015-03-21 11:27:12 +0100
commit06789ad3b71296a9e2fbd0278632d97a5d9af8d7 (patch)
treec602c3d3b69a9549e9c13ca751e7f1e769609e42 /libavcodec
parentd231e84b06a9964c840cff4e228509f706165fb6 (diff)
downloadffmpeg-06789ad3b71296a9e2fbd0278632d97a5d9af8d7.tar.gz
h264: move qp_thresh into the per-slice context
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/h264.h3
-rw-r--r--libavcodec/h264_slice.c8
2 files changed, 5 insertions, 6 deletions
diff --git a/libavcodec/h264.h b/libavcodec/h264.h
index 1820ca5990..5e65db3347 100644
--- a/libavcodec/h264.h
+++ b/libavcodec/h264.h
@@ -301,6 +301,7 @@ typedef struct H264SliceContext {
int qscale;
int chroma_qp[2]; // QPc
+ int qp_thresh; ///< QP threshold to skip loopfilter
// Weighted pred stuff
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 qp_thresh; ///< QP threshold to skip loopfilter
-
/* coded dimensions -- 16 * mb w/h */
int width, height;
ptrdiff_t linesize, uvlinesize;
diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c
index 4e0384b3c6..c69dac9068 100644
--- a/libavcodec/h264_slice.c
+++ b/libavcodec/h264_slice.c
@@ -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) -
FFMAX3(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
*/
-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;
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.
* This is a conservative estimate: could also check beta_offset
* 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];
if (qp <= qp_thresh &&
(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,
uvlinesize, 0);
- if (fill_filter_caches(h, mb_type))
+ if (fill_filter_caches(h, sl, mb_type))
continue;
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]);