diff options
author | Anton Khirnov <anton@khirnov.net> | 2016-03-23 09:41:05 +0100 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2016-03-28 09:53:56 +0200 |
commit | ecc31f6b086453ab9811dce2ae5ceb6a7c19e4ad (patch) | |
tree | 464ce2f788c348470d80603de4bcf5365aa750ef /libavcodec/h264.c | |
parent | 1877712c586df2261f2806f45388c77592b89d1e (diff) |
h264: move ff_h264_check_intra[4x4]_pred_mode() to h264_parse
It is shared with svq3.
Diffstat (limited to 'libavcodec/h264.c')
-rw-r--r-- | libavcodec/h264.c | 93 |
1 files changed, 0 insertions, 93 deletions
diff --git a/libavcodec/h264.c b/libavcodec/h264.c index 49b3f93842..a90ef6477d 100644 --- a/libavcodec/h264.c +++ b/libavcodec/h264.c @@ -114,99 +114,6 @@ void ff_h264_draw_horiz_band(const H264Context *h, H264SliceContext *sl, } } -/** - * Check if the top & left blocks are available if needed and - * change the dc mode so it only uses the available blocks. - */ -int ff_h264_check_intra4x4_pred_mode(const H264Context *h, H264SliceContext *sl) -{ - static const int8_t top[12] = { - -1, 0, LEFT_DC_PRED, -1, -1, -1, -1, -1, 0 - }; - static const int8_t left[12] = { - 0, -1, TOP_DC_PRED, 0, -1, -1, -1, 0, -1, DC_128_PRED - }; - int i; - - if (!(sl->top_samples_available & 0x8000)) { - for (i = 0; i < 4; i++) { - int status = top[sl->intra4x4_pred_mode_cache[scan8[0] + i]]; - if (status < 0) { - av_log(h->avctx, AV_LOG_ERROR, - "top block unavailable for requested intra4x4 mode %d at %d %d\n", - status, sl->mb_x, sl->mb_y); - return AVERROR_INVALIDDATA; - } else if (status) { - sl->intra4x4_pred_mode_cache[scan8[0] + i] = status; - } - } - } - - if ((sl->left_samples_available & 0x8888) != 0x8888) { - static const int mask[4] = { 0x8000, 0x2000, 0x80, 0x20 }; - for (i = 0; i < 4; i++) - if (!(sl->left_samples_available & mask[i])) { - int status = left[sl->intra4x4_pred_mode_cache[scan8[0] + 8 * i]]; - if (status < 0) { - av_log(h->avctx, AV_LOG_ERROR, - "left block unavailable for requested intra4x4 mode %d at %d %d\n", - status, sl->mb_x, sl->mb_y); - return AVERROR_INVALIDDATA; - } else if (status) { - sl->intra4x4_pred_mode_cache[scan8[0] + 8 * i] = status; - } - } - } - - return 0; -} // FIXME cleanup like ff_h264_check_intra_pred_mode - -/** - * Check if the top & left blocks are available if needed and - * change the dc mode so it only uses the available blocks. - */ -int ff_h264_check_intra_pred_mode(const H264Context *h, H264SliceContext *sl, - int mode, int is_chroma) -{ - static const int8_t top[4] = { LEFT_DC_PRED8x8, 1, -1, -1 }; - static const int8_t left[5] = { TOP_DC_PRED8x8, -1, 2, -1, DC_128_PRED8x8 }; - - if (mode > 3U) { - av_log(h->avctx, AV_LOG_ERROR, - "out of range intra chroma pred mode at %d %d\n", - sl->mb_x, sl->mb_y); - return AVERROR_INVALIDDATA; - } - - if (!(sl->top_samples_available & 0x8000)) { - mode = top[mode]; - if (mode < 0) { - av_log(h->avctx, AV_LOG_ERROR, - "top block unavailable for requested intra mode at %d %d\n", - sl->mb_x, sl->mb_y); - return AVERROR_INVALIDDATA; - } - } - - if ((sl->left_samples_available & 0x8080) != 0x8080) { - mode = left[mode]; - if (is_chroma && (sl->left_samples_available & 0x8080)) { - // mad cow disease mode, aka MBAFF + constrained_intra_pred - mode = ALZHEIMER_DC_L0T_PRED8x8 + - (!(sl->left_samples_available & 0x8000)) + - 2 * (mode == DC_128_PRED8x8); - } - if (mode < 0) { - av_log(h->avctx, AV_LOG_ERROR, - "left block unavailable for requested intra mode at %d %d\n", - sl->mb_x, sl->mb_y); - return AVERROR_INVALIDDATA; - } - } - - return mode; -} - const uint8_t *ff_h264_decode_nal(H264Context *h, H264SliceContext *sl, const uint8_t *src, int *dst_length, int *consumed, int length) |