summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2015-03-21 13:35:34 +0100
committerMichael Niedermayer <michaelni@gmx.at>2015-03-21 13:35:38 +0100
commita2740a060b36f6612043fa3128f4eb6197d0ce13 (patch)
treef8420993f59d3f5e6fc1a3284862aea4ae6cac3d
parentc07b7e483af6a0bee49c0ac46030d9b10be4913b (diff)
parent4bd5ac200d15b4f458a50f66006549825f9fc865 (diff)
downloadffmpeg-a2740a060b36f6612043fa3128f4eb6197d0ce13.tar.gz
Merge commit '4bd5ac200d15b4f458a50f66006549825f9fc865'
* commit '4bd5ac200d15b4f458a50f66006549825f9fc865': h264: move {chroma,intra16x16}_pred_mode into the per-slice context Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--libavcodec/h264.h6
-rw-r--r--libavcodec/h264_cabac.c10
-rw-r--r--libavcodec/h264_cavlc.c10
-rw-r--r--libavcodec/h264_mb.c8
-rw-r--r--libavcodec/h264_mb_template.c12
-rw-r--r--libavcodec/svq3.c6
6 files changed, 26 insertions, 26 deletions
diff --git a/libavcodec/h264.h b/libavcodec/h264.h
index 53dc477f92..b120cec3f3 100644
--- a/libavcodec/h264.h
+++ b/libavcodec/h264.h
@@ -354,6 +354,9 @@ typedef struct H264SliceContext {
int prev_mb_skipped;
int next_mb_skipped;
+
+ int chroma_pred_mode;
+ int intra16x16_pred_mode;
} H264SliceContext;
/**
@@ -393,9 +396,6 @@ typedef struct H264Context {
int workaround_bugs;
// prediction stuff
- int chroma_pred_mode;
- int intra16x16_pred_mode;
-
int topleft_mb_xy;
int top_mb_xy;
int topright_mb_xy;
diff --git a/libavcodec/h264_cabac.c b/libavcodec/h264_cabac.c
index 35ae3fde54..8a85912a9f 100644
--- a/libavcodec/h264_cabac.c
+++ b/libavcodec/h264_cabac.c
@@ -1992,7 +1992,7 @@ int ff_h264_decode_mb_cabac(H264Context *h, H264SliceContext *sl)
decode_intra_mb:
partition_count = 0;
cbp= i_mb_type_info[mb_type].cbp;
- h->intra16x16_pred_mode= i_mb_type_info[mb_type].pred_mode;
+ sl->intra16x16_pred_mode = i_mb_type_info[mb_type].pred_mode;
mb_type= i_mb_type_info[mb_type].type;
}
if(MB_FIELD(h))
@@ -2061,8 +2061,8 @@ decode_intra_mb:
write_back_intra_pred_mode(h);
if( ff_h264_check_intra4x4_pred_mode(h) < 0 ) return -1;
} else {
- h->intra16x16_pred_mode= ff_h264_check_intra_pred_mode( h, h->intra16x16_pred_mode, 0 );
- if( h->intra16x16_pred_mode < 0 ) return -1;
+ sl->intra16x16_pred_mode = ff_h264_check_intra_pred_mode(h, sl->intra16x16_pred_mode, 0);
+ if (sl->intra16x16_pred_mode < 0) return -1;
}
if(decode_chroma){
h->chroma_pred_mode_table[mb_xy] =
@@ -2070,9 +2070,9 @@ decode_intra_mb:
pred_mode= ff_h264_check_intra_pred_mode( h, pred_mode, 1 );
if( pred_mode < 0 ) return -1;
- h->chroma_pred_mode= pred_mode;
+ sl->chroma_pred_mode = pred_mode;
} else {
- h->chroma_pred_mode= DC_128_PRED8x8;
+ sl->chroma_pred_mode = DC_128_PRED8x8;
}
} else if( partition_count == 4 ) {
int i, j, sub_partition_count[4], list, ref[2][4];
diff --git a/libavcodec/h264_cavlc.c b/libavcodec/h264_cavlc.c
index dd98b759f0..bb02a43b3f 100644
--- a/libavcodec/h264_cavlc.c
+++ b/libavcodec/h264_cavlc.c
@@ -759,7 +759,7 @@ decode_intra_mb:
}
partition_count=0;
cbp= i_mb_type_info[mb_type].cbp;
- h->intra16x16_pred_mode= i_mb_type_info[mb_type].pred_mode;
+ sl->intra16x16_pred_mode = i_mb_type_info[mb_type].pred_mode;
mb_type= i_mb_type_info[mb_type].type;
}
@@ -825,17 +825,17 @@ decode_intra_mb:
if( ff_h264_check_intra4x4_pred_mode(h) < 0)
return -1;
}else{
- h->intra16x16_pred_mode= ff_h264_check_intra_pred_mode(h, h->intra16x16_pred_mode, 0);
- if(h->intra16x16_pred_mode < 0)
+ sl->intra16x16_pred_mode = ff_h264_check_intra_pred_mode(h, sl->intra16x16_pred_mode, 0);
+ if (sl->intra16x16_pred_mode < 0)
return -1;
}
if(decode_chroma){
pred_mode= ff_h264_check_intra_pred_mode(h, get_ue_golomb_31(&h->gb), 1);
if(pred_mode < 0)
return -1;
- h->chroma_pred_mode= pred_mode;
+ sl->chroma_pred_mode = pred_mode;
} else {
- h->chroma_pred_mode = DC_128_PRED8x8;
+ sl->chroma_pred_mode = DC_128_PRED8x8;
}
}else if(partition_count==4){
int i, j, sub_partition_count[4], list, ref[2][4];
diff --git a/libavcodec/h264_mb.c b/libavcodec/h264_mb.c
index 2a6bd8a485..db529ec4b8 100644
--- a/libavcodec/h264_mb.c
+++ b/libavcodec/h264_mb.c
@@ -699,7 +699,7 @@ static av_always_inline void hl_decode_mb_predict_luma(H264Context *h,
}
}
} else {
- h->hpc.pred16x16[h->intra16x16_pred_mode](dest_y, linesize);
+ h->hpc.pred16x16[sl->intra16x16_pred_mode](dest_y, linesize);
if (is_h264) {
if (h->non_zero_count_cache[scan8[LUMA_DC_BLOCK_INDEX + p]]) {
if (!transform_bypass)
@@ -743,9 +743,9 @@ static av_always_inline void hl_decode_mb_idct_luma(H264Context *h, H264SliceCon
if (IS_INTRA16x16(mb_type)) {
if (transform_bypass) {
if (h->sps.profile_idc == 244 &&
- (h->intra16x16_pred_mode == VERT_PRED8x8 ||
- h->intra16x16_pred_mode == HOR_PRED8x8)) {
- h->hpc.pred16x16_add[h->intra16x16_pred_mode](dest_y, block_offset,
+ (sl->intra16x16_pred_mode == VERT_PRED8x8 ||
+ sl->intra16x16_pred_mode == HOR_PRED8x8)) {
+ h->hpc.pred16x16_add[sl->intra16x16_pred_mode](dest_y, block_offset,
h->mb + (p * 256 << pixel_shift),
linesize);
} else {
diff --git a/libavcodec/h264_mb_template.c b/libavcodec/h264_mb_template.c
index 26af1c6bc3..52e06c8aab 100644
--- a/libavcodec/h264_mb_template.c
+++ b/libavcodec/h264_mb_template.c
@@ -160,8 +160,8 @@ static av_noinline void FUNC(hl_decode_mb)(H264Context *h, H264SliceContext *sl)
uvlinesize, 1, 0, SIMPLE, PIXEL_SHIFT);
if (SIMPLE || !CONFIG_GRAY || !(h->flags & CODEC_FLAG_GRAY)) {
- h->hpc.pred8x8[h->chroma_pred_mode](dest_cb, uvlinesize);
- h->hpc.pred8x8[h->chroma_pred_mode](dest_cr, uvlinesize);
+ h->hpc.pred8x8[sl->chroma_pred_mode](dest_cb, uvlinesize);
+ h->hpc.pred8x8[sl->chroma_pred_mode](dest_cr, uvlinesize);
}
hl_decode_mb_predict_luma(h, sl, mb_type, is_h264, SIMPLE,
@@ -195,13 +195,13 @@ static av_noinline void FUNC(hl_decode_mb)(H264Context *h, H264SliceContext *sl)
uint8_t *dest[2] = { dest_cb, dest_cr };
if (transform_bypass) {
if (IS_INTRA(mb_type) && h->sps.profile_idc == 244 &&
- (h->chroma_pred_mode == VERT_PRED8x8 ||
- h->chroma_pred_mode == HOR_PRED8x8)) {
- h->hpc.pred8x8_add[h->chroma_pred_mode](dest[0],
+ (sl->chroma_pred_mode == VERT_PRED8x8 ||
+ sl->chroma_pred_mode == HOR_PRED8x8)) {
+ h->hpc.pred8x8_add[sl->chroma_pred_mode](dest[0],
block_offset + 16,
h->mb + (16 * 16 * 1 << PIXEL_SHIFT),
uvlinesize);
- h->hpc.pred8x8_add[h->chroma_pred_mode](dest[1],
+ h->hpc.pred8x8_add[sl->chroma_pred_mode](dest[1],
block_offset + 32,
h->mb + (16 * 16 * 2 << PIXEL_SHIFT),
uvlinesize);
diff --git a/libavcodec/svq3.c b/libavcodec/svq3.c
index cd3d28f184..410c4f63ae 100644
--- a/libavcodec/svq3.c
+++ b/libavcodec/svq3.c
@@ -667,9 +667,9 @@ static int svq3_decode_mb(SVQ3Context *s, unsigned int mb_type)
dir = i_mb_type_info[mb_type - 8].pred_mode;
dir = (dir >> 1) ^ 3 * (dir & 1) ^ 1;
- if ((h->intra16x16_pred_mode = ff_h264_check_intra_pred_mode(h, dir, 0)) < 0) {
+ if ((sl->intra16x16_pred_mode = ff_h264_check_intra_pred_mode(h, dir, 0)) < 0) {
av_log(h->avctx, AV_LOG_ERROR, "ff_h264_check_intra_pred_mode < 0\n");
- return h->intra16x16_pred_mode;
+ return sl->intra16x16_pred_mode;
}
cbp = i_mb_type_info[mb_type - 8].cbp;
@@ -771,7 +771,7 @@ static int svq3_decode_mb(SVQ3Context *s, unsigned int mb_type)
h->cur_pic.mb_type[mb_xy] = mb_type;
if (IS_INTRA(mb_type))
- h->chroma_pred_mode = ff_h264_check_intra_pred_mode(h, DC_PRED8x8, 1);
+ sl->chroma_pred_mode = ff_h264_check_intra_pred_mode(h, DC_PRED8x8, 1);
return 0;
}