Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind Signed-off-by: Michael Niedermayer <michaelni@gmx.at>tags/n0.11
| @@ -2179,8 +2179,10 @@ static av_always_inline void hl_decode_mb_internal(H264Context *h, int simple, | |||||
| uvlinesize, 1, 0, simple, pixel_shift); | uvlinesize, 1, 0, simple, pixel_shift); | ||||
| if (simple || !CONFIG_GRAY || !(s->flags & CODEC_FLAG_GRAY)) { | if (simple || !CONFIG_GRAY || !(s->flags & CODEC_FLAG_GRAY)) { | ||||
| h->hpc.pred8x8[h->chroma_pred_mode](dest_cb, uvlinesize); | |||||
| h->hpc.pred8x8[h->chroma_pred_mode](dest_cr, uvlinesize); | |||||
| if (CHROMA) { | |||||
| h->hpc.pred8x8[h->chroma_pred_mode](dest_cb, uvlinesize); | |||||
| h->hpc.pred8x8[h->chroma_pred_mode](dest_cr, uvlinesize); | |||||
| } | |||||
| } | } | ||||
| hl_decode_mb_predict_luma(h, mb_type, is_h264, simple, | hl_decode_mb_predict_luma(h, mb_type, is_h264, simple, | ||||
| @@ -87,6 +87,7 @@ | |||||
| #define CABAC h->pps.cabac | #define CABAC h->pps.cabac | ||||
| #endif | #endif | ||||
| #define CHROMA (h->sps.chroma_format_idc) | |||||
| #define CHROMA422 (h->sps.chroma_format_idc == 2) | #define CHROMA422 (h->sps.chroma_format_idc == 2) | ||||
| #define CHROMA444 (h->sps.chroma_format_idc == 3) | #define CHROMA444 (h->sps.chroma_format_idc == 3) | ||||
| @@ -245,7 +245,7 @@ static av_always_inline void h264_filter_mb_fast_internal(H264Context *h, | |||||
| int pixel_shift) | int pixel_shift) | ||||
| { | { | ||||
| MpegEncContext * const s = &h->s; | MpegEncContext * const s = &h->s; | ||||
| int chroma = !(CONFIG_GRAY && (s->flags&CODEC_FLAG_GRAY)); | |||||
| int chroma = CHROMA && !(CONFIG_GRAY && (s->flags&CODEC_FLAG_GRAY)); | |||||
| int chroma444 = CHROMA444; | int chroma444 = CHROMA444; | ||||
| int chroma422 = CHROMA422; | int chroma422 = CHROMA422; | ||||
| @@ -713,7 +713,7 @@ void ff_h264_filter_mb( H264Context *h, int mb_x, int mb_y, uint8_t *img_y, uint | |||||
| const int mvy_limit = IS_INTERLACED(mb_type) ? 2 : 4; | const int mvy_limit = IS_INTERLACED(mb_type) ? 2 : 4; | ||||
| int first_vertical_edge_done = 0; | int first_vertical_edge_done = 0; | ||||
| av_unused int dir; | av_unused int dir; | ||||
| int chroma = !(CONFIG_GRAY && (s->flags&CODEC_FLAG_GRAY)); | |||||
| int chroma = CHROMA && !(CONFIG_GRAY && (s->flags&CODEC_FLAG_GRAY)); | |||||
| int qp_bd_offset = 6 * (h->sps.bit_depth_luma - 8); | int qp_bd_offset = 6 * (h->sps.bit_depth_luma - 8); | ||||
| int a = h->slice_alpha_c0_offset - qp_bd_offset; | int a = h->slice_alpha_c0_offset - qp_bd_offset; | ||||
| int b = h->slice_beta_offset - qp_bd_offset; | int b = h->slice_beta_offset - qp_bd_offset; | ||||
| @@ -823,6 +823,7 @@ static av_cold int svq3_decode_init(AVCodecContext *avctx) | |||||
| s->flags2 = avctx->flags2; | s->flags2 = avctx->flags2; | ||||
| s->unrestricted_mv = 1; | s->unrestricted_mv = 1; | ||||
| h->is_complex=1; | h->is_complex=1; | ||||
| h->sps.chroma_format_idc = 1; | |||||
| avctx->pix_fmt = avctx->codec->pix_fmts[0]; | avctx->pix_fmt = avctx->codec->pix_fmts[0]; | ||||
| if (!s->context_initialized) { | if (!s->context_initialized) { | ||||