From f6e218a02d6fa391f3c6b70aedaa2082c62acd95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Raulet?= Date: Fri, 25 Jul 2014 16:37:39 +0200 Subject: [PATCH] hevc: fix RAP_B_Bossen cherry picked from commit 903236292f066bc321080e3e2192b64f8943d960 Signed-off-by: Michael Niedermayer --- libavcodec/hevc.c | 25 ++++------------ tests/fate/hevc.mak | 1 + .../ref/fate/hevc-conformance-RAP_B_Bossen_1 | 29 +++++++++---------- 3 files changed, 20 insertions(+), 35 deletions(-) diff --git a/libavcodec/hevc.c b/libavcodec/hevc.c index 3f1c65b75d..af74034281 100644 --- a/libavcodec/hevc.c +++ b/libavcodec/hevc.c @@ -362,17 +362,6 @@ fail: return ret; } -static int is_sps_exist(HEVCContext *s, const HEVCSPS* last_sps) -{ - int i; - - for( i = 0; i < MAX_SPS_COUNT; i++) - if(s->sps_list[i]) - if (last_sps == (HEVCSPS*)s->sps_list[i]->data) - return 1; - return 0; -} - static int hls_slice_header(HEVCContext *s) { GetBitContext *gb = &s->HEVClc->gb; @@ -390,8 +379,6 @@ static int hls_slice_header(HEVCContext *s) sh->no_output_of_prior_pics_flag = 0; if (IS_IRAP(s)) sh->no_output_of_prior_pics_flag = get_bits1(gb); - if (s->nal_unit_type == NAL_CRA_NUT && s->last_eos == 1) - sh->no_output_of_prior_pics_flag = 1; sh->pps_id = get_ue_golomb_long(gb); if (sh->pps_id >= MAX_PPS_COUNT || !s->pps_list[sh->pps_id]) { @@ -404,16 +391,16 @@ static int hls_slice_header(HEVCContext *s) return AVERROR_INVALIDDATA; } s->pps = (HEVCPPS*)s->pps_list[sh->pps_id]->data; + if (s->nal_unit_type == NAL_CRA_NUT && s->last_eos == 1) + sh->no_output_of_prior_pics_flag = 1; if (s->sps != (HEVCSPS*)s->sps_list[s->pps->sps_id]->data) { const HEVCSPS* last_sps = s->sps; s->sps = (HEVCSPS*)s->sps_list[s->pps->sps_id]->data; - if (last_sps) { - if (is_sps_exist(s, last_sps)) { - if (s->sps->width != last_sps->width || s->sps->height != last_sps->height || - s->sps->temporal_layer[s->sps->max_sub_layers - 1].max_dec_pic_buffering != last_sps->temporal_layer[last_sps->max_sub_layers - 1].max_dec_pic_buffering) - sh->no_output_of_prior_pics_flag = 0; - } else + if (last_sps && IS_IRAP(s) && s->nal_unit_type != NAL_CRA_NUT) { + if (s->sps->width != last_sps->width || s->sps->height != last_sps->height || + s->sps->temporal_layer[s->sps->max_sub_layers - 1].max_dec_pic_buffering != + last_sps->temporal_layer[last_sps->max_sub_layers - 1].max_dec_pic_buffering) sh->no_output_of_prior_pics_flag = 0; } ff_hevc_clear_refs(s); diff --git a/tests/fate/hevc.mak b/tests/fate/hevc.mak index 546a88e9cd..162bd55274 100644 --- a/tests/fate/hevc.mak +++ b/tests/fate/hevc.mak @@ -165,6 +165,7 @@ HEVC_SAMPLES_444_12BIT = \ # AMP_E_Hisilicon_3 -- AMP_E_Hisilicon # MVDL1ZERO_A_docomo_4 -- MVDL1ZERO_A_docomo_3 # RAP_A_docomo_5 -- RAP_A_docomo_4 +# RAP_B_bossen_2 -- RAP_B_bossen_1 # RPS_A_docomo_5 -- RPS_A_docomo_4 # RPS_F_docomo_2 -- RPS_F_docomo_1 diff --git a/tests/ref/fate/hevc-conformance-RAP_B_Bossen_1 b/tests/ref/fate/hevc-conformance-RAP_B_Bossen_1 index 4bea99754f..56f5b441aa 100644 --- a/tests/ref/fate/hevc-conformance-RAP_B_Bossen_1 +++ b/tests/ref/fate/hevc-conformance-RAP_B_Bossen_1 @@ -66,19 +66,16 @@ 0, 64, 64, 1, 149760, 0x3362678b 0, 65, 65, 1, 149760, 0x6e7fc851 0, 66, 66, 1, 149760, 0x33f96449 -0, 67, 67, 1, 149760, 0xd9d05007 -0, 68, 68, 1, 149760, 0x477f2cf2 -0, 69, 69, 1, 149760, 0xe1f9ccd0 -0, 70, 70, 1, 149760, 0xb3ba8cfb -0, 71, 71, 1, 149760, 0x64787995 -0, 72, 72, 1, 149760, 0xc10de4c4 -0, 73, 73, 1, 149760, 0x18dd343f -0, 74, 74, 1, 149760, 0xa1c51358 -0, 75, 75, 1, 149760, 0x91fe6361 -0, 76, 76, 1, 149760, 0xeec85f94 -0, 77, 77, 1, 149760, 0x00a57402 -0, 78, 78, 1, 149760, 0x4e88cc16 -0, 79, 79, 1, 149760, 0xdbd51976 -0, 80, 80, 1, 149760, 0xfebf6b1a -0, 81, 81, 1, 149760, 0x052546d2 -0, 82, 82, 1, 149760, 0x046cd73b +0, 67, 67, 1, 149760, 0xb3ba8cfb +0, 68, 68, 1, 149760, 0x64787995 +0, 69, 69, 1, 149760, 0xc10de4c4 +0, 70, 70, 1, 149760, 0x18dd343f +0, 71, 71, 1, 149760, 0xa1c51358 +0, 72, 72, 1, 149760, 0x91fe6361 +0, 73, 73, 1, 149760, 0xeec85f94 +0, 74, 74, 1, 149760, 0x00a57402 +0, 75, 75, 1, 149760, 0x4e88cc16 +0, 76, 76, 1, 149760, 0xdbd51976 +0, 77, 77, 1, 149760, 0xfebf6b1a +0, 78, 78, 1, 149760, 0x052546d2 +0, 79, 79, 1, 149760, 0x046cd73b