summaryrefslogtreecommitdiff
path: root/libavcodec/hevc_mvs.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2015-07-09 14:22:43 +0200
committerAnton Khirnov <anton@khirnov.net>2015-07-12 18:15:39 +0200
commitb11acd57326db6c2cc1475dd0bea2a06fbc85aa2 (patch)
tree64740e507baccb89e4245ba3d2057e8359576ef5 /libavcodec/hevc_mvs.c
parentab05ed4c322ed0488ac9b5d2ef5d4ffa55a946a7 (diff)
hevc: remove HEVCContext usage from hevc_ps
Factor out the parameter sets into a separate struct and use it instead. This will allow us to reuse this code in the parser.
Diffstat (limited to 'libavcodec/hevc_mvs.c')
-rw-r--r--libavcodec/hevc_mvs.c96
1 files changed, 48 insertions, 48 deletions
diff --git a/libavcodec/hevc_mvs.c b/libavcodec/hevc_mvs.c
index 23ea2ec2ee..b99223c07b 100644
--- a/libavcodec/hevc_mvs.c
+++ b/libavcodec/hevc_mvs.c
@@ -42,17 +42,17 @@ void ff_hevc_set_neighbour_available(HEVCContext *s, int x0, int y0,
int nPbW, int nPbH)
{
HEVCLocalContext *lc = &s->HEVClc;
- int x0b = x0 & ((1 << s->sps->log2_ctb_size) - 1);
- int y0b = y0 & ((1 << s->sps->log2_ctb_size) - 1);
+ int x0b = x0 & ((1 << s->ps.sps->log2_ctb_size) - 1);
+ int y0b = y0 & ((1 << s->ps.sps->log2_ctb_size) - 1);
lc->na.cand_up = (lc->ctb_up_flag || y0b);
lc->na.cand_left = (lc->ctb_left_flag || x0b);
lc->na.cand_up_left = (!x0b && !y0b) ? lc->ctb_up_left_flag : lc->na.cand_left && lc->na.cand_up;
lc->na.cand_up_right_sap =
- ((x0b + nPbW) == (1 << s->sps->log2_ctb_size)) ?
+ ((x0b + nPbW) == (1 << s->ps.sps->log2_ctb_size)) ?
lc->ctb_up_right_flag && !y0b : lc->na.cand_up;
lc->na.cand_up_right =
- ((x0b + nPbW) == (1 << s->sps->log2_ctb_size) ?
+ ((x0b + nPbW) == (1 << s->ps.sps->log2_ctb_size) ?
lc->ctb_up_right_flag && !y0b : lc->na.cand_up )
&& (x0 + nPbW) < lc->end_of_tiles_x;
lc->na.cand_bottom_left = ((y0 + nPbH) >= lc->end_of_tiles_y) ? 0 : lc->na.cand_left;
@@ -65,18 +65,18 @@ static int z_scan_block_avail(HEVCContext *s, int xCurr, int yCurr,
int xN, int yN)
{
#define MIN_TB_ADDR_ZS(x, y) \
- s->pps->min_tb_addr_zs[(y) * s->sps->min_tb_width + (x)]
- int Curr = MIN_TB_ADDR_ZS(xCurr >> s->sps->log2_min_tb_size,
- yCurr >> s->sps->log2_min_tb_size);
+ s->ps.pps->min_tb_addr_zs[(y) * s->ps.sps->min_tb_width + (x)]
+ int Curr = MIN_TB_ADDR_ZS(xCurr >> s->ps.sps->log2_min_tb_size,
+ yCurr >> s->ps.sps->log2_min_tb_size);
int N;
if (xN < 0 || yN < 0 ||
- xN >= s->sps->width ||
- yN >= s->sps->height)
+ xN >= s->ps.sps->width ||
+ yN >= s->ps.sps->height)
return 0;
- N = MIN_TB_ADDR_ZS(xN >> s->sps->log2_min_tb_size,
- yN >> s->sps->log2_min_tb_size);
+ N = MIN_TB_ADDR_ZS(xN >> s->ps.sps->log2_min_tb_size,
+ yN >> s->ps.sps->log2_min_tb_size);
return N <= Curr;
}
@@ -112,7 +112,7 @@ static int check_prediction_block_available(HEVCContext *s, int log2_cb_size,
//check if the two luma locations belong to the same mostion estimation region
static int isDiffMER(HEVCContext *s, int xN, int yN, int xP, int yP)
{
- uint8_t plevel = s->pps->log2_parallel_merge_level;
+ uint8_t plevel = s->ps.pps->log2_parallel_merge_level;
return xN >> plevel == xP >> plevel &&
yN >> plevel == yP >> plevel;
@@ -251,7 +251,7 @@ static int temporal_luma_motion_vector(HEVCContext *s, int x0, int y0,
MvField *tab_mvf;
MvField temp_col;
int x, y, x_pu, y_pu;
- int min_pu_width = s->sps->min_pu_width;
+ int min_pu_width = s->ps.sps->min_pu_width;
int availableFlagLXCol = 0;
int colPic;
@@ -270,14 +270,14 @@ static int temporal_luma_motion_vector(HEVCContext *s, int x0, int y0,
y = y0 + nPbH;
if (tab_mvf &&
- (y0 >> s->sps->log2_ctb_size) == (y >> s->sps->log2_ctb_size) &&
- y < s->sps->height &&
- x < s->sps->width) {
+ (y0 >> s->ps.sps->log2_ctb_size) == (y >> s->ps.sps->log2_ctb_size) &&
+ y < s->ps.sps->height &&
+ x < s->ps.sps->width) {
x &= ~15;
y &= ~15;
ff_thread_await_progress(&ref->tf, y, 0);
- x_pu = x >> s->sps->log2_min_pu_size;
- y_pu = y >> s->sps->log2_min_pu_size;
+ x_pu = x >> s->ps.sps->log2_min_pu_size;
+ y_pu = y >> s->ps.sps->log2_min_pu_size;
temp_col = TAB_MVF(x_pu, y_pu);
availableFlagLXCol = DERIVE_TEMPORAL_COLOCATED_MVS;
}
@@ -289,8 +289,8 @@ static int temporal_luma_motion_vector(HEVCContext *s, int x0, int y0,
x &= ~15;
y &= ~15;
ff_thread_await_progress(&ref->tf, y, 0);
- x_pu = x >> s->sps->log2_min_pu_size;
- y_pu = y >> s->sps->log2_min_pu_size;
+ x_pu = x >> s->ps.sps->log2_min_pu_size;
+ y_pu = y >> s->ps.sps->log2_min_pu_size;
temp_col = TAB_MVF(x_pu, y_pu);
availableFlagLXCol = DERIVE_TEMPORAL_COLOCATED_MVS;
}
@@ -322,7 +322,7 @@ static void derive_spatial_merge_candidates(HEVCContext *s, int x0, int y0,
RefPicList *refPicList = s->ref->refPicList;
MvField *tab_mvf = s->ref->tab_mvf;
- const int min_pu_width = s->sps->min_pu_width;
+ const int min_pu_width = s->ps.sps->min_pu_width;
const int cand_bottom_left = lc->na.cand_bottom_left;
const int cand_left = lc->na.cand_left;
@@ -332,28 +332,28 @@ static void derive_spatial_merge_candidates(HEVCContext *s, int x0, int y0,
const int xA1 = x0 - 1;
const int yA1 = y0 + nPbH - 1;
- const int xA1_pu = xA1 >> s->sps->log2_min_pu_size;
- const int yA1_pu = yA1 >> s->sps->log2_min_pu_size;
+ const int xA1_pu = xA1 >> s->ps.sps->log2_min_pu_size;
+ const int yA1_pu = yA1 >> s->ps.sps->log2_min_pu_size;
const int xB1 = x0 + nPbW - 1;
const int yB1 = y0 - 1;
- const int xB1_pu = xB1 >> s->sps->log2_min_pu_size;
- const int yB1_pu = yB1 >> s->sps->log2_min_pu_size;
+ const int xB1_pu = xB1 >> s->ps.sps->log2_min_pu_size;
+ const int yB1_pu = yB1 >> s->ps.sps->log2_min_pu_size;
const int xB0 = x0 + nPbW;
const int yB0 = y0 - 1;
- const int xB0_pu = xB0 >> s->sps->log2_min_pu_size;
- const int yB0_pu = yB0 >> s->sps->log2_min_pu_size;
+ const int xB0_pu = xB0 >> s->ps.sps->log2_min_pu_size;
+ const int yB0_pu = yB0 >> s->ps.sps->log2_min_pu_size;
const int xA0 = x0 - 1;
const int yA0 = y0 + nPbH;
- const int xA0_pu = xA0 >> s->sps->log2_min_pu_size;
- const int yA0_pu = yA0 >> s->sps->log2_min_pu_size;
+ const int xA0_pu = xA0 >> s->ps.sps->log2_min_pu_size;
+ const int yA0_pu = yA0 >> s->ps.sps->log2_min_pu_size;
const int xB2 = x0 - 1;
const int yB2 = y0 - 1;
- const int xB2_pu = xB2 >> s->sps->log2_min_pu_size;
- const int yB2_pu = yB2 >> s->sps->log2_min_pu_size;
+ const int xB2_pu = xB2 >> s->ps.sps->log2_min_pu_size;
+ const int yB2_pu = yB2 >> s->ps.sps->log2_min_pu_size;
const int nb_refs = (s->sh.slice_type == P_SLICE) ?
s->sh.nb_refs[0] : FFMIN(s->sh.nb_refs[0], s->sh.nb_refs[1]);
@@ -554,7 +554,7 @@ void ff_hevc_luma_mv_merge_mode(HEVCContext *s, int x0, int y0, int nPbW,
int nPbH2 = nPbH;
HEVCLocalContext *lc = &s->HEVClc;
- if (s->pps->log2_parallel_merge_level > 2 && nCS == 8) {
+ if (s->ps.pps->log2_parallel_merge_level > 2 && nCS == 8) {
singleMCLFlag = 1;
x0 = lc->cu.x;
y0 = lc->cu.y;
@@ -599,7 +599,7 @@ static int mv_mp_mode_mx(HEVCContext *s, int x, int y, int pred_flag_index,
Mv *mv, int ref_idx_curr, int ref_idx)
{
MvField *tab_mvf = s->ref->tab_mvf;
- int min_pu_width = s->sps->min_pu_width;
+ int min_pu_width = s->ps.sps->min_pu_width;
RefPicList *refPicList = s->ref->refPicList;
@@ -615,7 +615,7 @@ static int mv_mp_mode_mx_lt(HEVCContext *s, int x, int y, int pred_flag_index,
Mv *mv, int ref_idx_curr, int ref_idx)
{
MvField *tab_mvf = s->ref->tab_mvf;
- int min_pu_width = s->sps->min_pu_width;
+ int min_pu_width = s->ps.sps->min_pu_width;
RefPicList *refPicList = s->ref->refPicList;
int currIsLongTerm = refPicList[ref_idx_curr].isLongTerm[ref_idx];
@@ -653,7 +653,7 @@ void ff_hevc_luma_mv_mvp_mode(HEVCContext *s, int x0, int y0, int nPbW,
int availableFlagLXA0 = 0;
int availableFlagLXB0 = 0;
int numMVPCandLX = 0;
- int min_pu_width = s->sps->min_pu_width;
+ int min_pu_width = s->ps.sps->min_pu_width;
int xA0, yA0;
int xA0_pu, yA0_pu;
@@ -681,15 +681,15 @@ void ff_hevc_luma_mv_mvp_mode(HEVCContext *s, int x0, int y0, int nPbW,
int ref_idx = 0;
int pred_flag_index_l0;
int pred_flag_index_l1;
- int x0b = x0 & ((1 << s->sps->log2_ctb_size) - 1);
- int y0b = y0 & ((1 << s->sps->log2_ctb_size) - 1);
+ int x0b = x0 & ((1 << s->ps.sps->log2_ctb_size) - 1);
+ int y0b = y0 & ((1 << s->ps.sps->log2_ctb_size) - 1);
int cand_up = (lc->ctb_up_flag || y0b);
int cand_left = (lc->ctb_left_flag || x0b);
int cand_up_left =
(!x0b && !y0b) ? lc->ctb_up_left_flag : cand_left && cand_up;
int cand_up_right =
- (x0b + nPbW == (1 << s->sps->log2_ctb_size) ||
+ (x0b + nPbW == (1 << s->ps.sps->log2_ctb_size) ||
x0 + nPbW >= lc->end_of_tiles_x) ? lc->ctb_up_right_flag && !y0b
: cand_up;
int cand_bottom_left = (y0 + nPbH >= lc->end_of_tiles_y) ? 0 : cand_left;
@@ -702,16 +702,16 @@ void ff_hevc_luma_mv_mvp_mode(HEVCContext *s, int x0, int y0, int nPbW,
// left bottom spatial candidate
xA0 = x0 - 1;
yA0 = y0 + nPbH;
- xA0_pu = xA0 >> s->sps->log2_min_pu_size;
- yA0_pu = yA0 >> s->sps->log2_min_pu_size;
+ xA0_pu = xA0 >> s->ps.sps->log2_min_pu_size;
+ yA0_pu = yA0 >> s->ps.sps->log2_min_pu_size;
is_available_a0 = PRED_BLOCK_AVAILABLE(A0) && AVAILABLE(cand_bottom_left, A0);
//left spatial merge candidate
xA1 = x0 - 1;
yA1 = y0 + nPbH - 1;
- xA1_pu = xA1 >> s->sps->log2_min_pu_size;
- yA1_pu = yA1 >> s->sps->log2_min_pu_size;
+ xA1_pu = xA1 >> s->ps.sps->log2_min_pu_size;
+ yA1_pu = yA1 >> s->ps.sps->log2_min_pu_size;
is_available_a1 = AVAILABLE(cand_left, A1);
if (is_available_a0 || is_available_a1)
@@ -750,8 +750,8 @@ void ff_hevc_luma_mv_mvp_mode(HEVCContext *s, int x0, int y0, int nPbW,
// above right spatial merge candidate
xB0 = x0 + nPbW;
yB0 = y0 - 1;
- xB0_pu = xB0 >> s->sps->log2_min_pu_size;
- yB0_pu = yB0 >> s->sps->log2_min_pu_size;
+ xB0_pu = xB0 >> s->ps.sps->log2_min_pu_size;
+ yB0_pu = yB0 >> s->ps.sps->log2_min_pu_size;
is_available_b0 = PRED_BLOCK_AVAILABLE(B0) && AVAILABLE(cand_up_right, B0);
@@ -765,8 +765,8 @@ void ff_hevc_luma_mv_mvp_mode(HEVCContext *s, int x0, int y0, int nPbW,
// above spatial merge candidate
xB1 = x0 + nPbW - 1;
yB1 = y0 - 1;
- xB1_pu = xB1 >> s->sps->log2_min_pu_size;
- yB1_pu = yB1 >> s->sps->log2_min_pu_size;
+ xB1_pu = xB1 >> s->ps.sps->log2_min_pu_size;
+ yB1_pu = yB1 >> s->ps.sps->log2_min_pu_size;
is_available_b1 = AVAILABLE(cand_up, B1);
@@ -781,8 +781,8 @@ void ff_hevc_luma_mv_mvp_mode(HEVCContext *s, int x0, int y0, int nPbW,
// above left spatial merge candidate
xB2 = x0 - 1;
yB2 = y0 - 1;
- xB2_pu = xB2 >> s->sps->log2_min_pu_size;
- yB2_pu = yB2 >> s->sps->log2_min_pu_size;
+ xB2_pu = xB2 >> s->ps.sps->log2_min_pu_size;
+ yB2_pu = yB2 >> s->ps.sps->log2_min_pu_size;
is_available_b2 = AVAILABLE(cand_up_left, B2);
if (is_available_b2) {