# HG changeset patch # User michael # Date 1221755779 0 # Node ID 59e42f624d4da01d503ad86b1ef58c2954857cdc # Parent 13ee9bb8572174d045764869f94f0c9195a172fa Make pps/sps scaling_matrix initialization closer to the spec. This does not affect any of the conformance streams. diff -r 13ee9bb85721 -r 59e42f624d4d h264.c --- a/h264.c Thu Sep 18 16:02:51 2008 +0000 +++ b/h264.c Thu Sep 18 16:36:19 2008 +0000 @@ -6963,9 +6963,6 @@ decode_scaling_list(h,scaling_matrix8[0],64,default_scaling8[0],fallback[2]); // Intra, Y decode_scaling_list(h,scaling_matrix8[1],64,default_scaling8[1],fallback[3]); // Inter, Y } - } else if(fallback_sps) { - memcpy(scaling_matrix4, sps->scaling_matrix4, 6*16*sizeof(uint8_t)); - memcpy(scaling_matrix8, sps->scaling_matrix8, 2*64*sizeof(uint8_t)); } } @@ -7012,6 +7009,10 @@ sps->profile_idc= profile_idc; sps->level_idc= level_idc; + memset(sps->scaling_matrix4, 16, sizeof(sps->scaling_matrix4)); + memset(sps->scaling_matrix8, 16, sizeof(sps->scaling_matrix8)); + sps->scaling_matrix_present = 0; + if(sps->profile_idc >= 100){ //high profile sps->chroma_format_idc= get_ue_golomb(&s->gb); if(sps->chroma_format_idc == 3) @@ -7021,7 +7022,6 @@ sps->transform_bypass = get_bits1(&s->gb); decode_scaling_matrices(h, sps, NULL, 1, sps->scaling_matrix4, sps->scaling_matrix8); }else{ - sps->scaling_matrix_present = 0; sps->chroma_format_idc= 1; } @@ -7204,8 +7204,8 @@ pps->transform_8x8_mode= 0; h->dequant_coeff_pps= -1; //contents of sps/pps can change even if id doesn't, so reinit - memset(pps->scaling_matrix4, 16, 6*16*sizeof(uint8_t)); - memset(pps->scaling_matrix8, 16, 2*64*sizeof(uint8_t)); + memcpy(pps->scaling_matrix4, h->sps_buffers[pps->sps_id]->scaling_matrix4, sizeof(pps->scaling_matrix4)); + memcpy(pps->scaling_matrix8, h->sps_buffers[pps->sps_id]->scaling_matrix8, sizeof(pps->scaling_matrix8)); if(get_bits_count(&s->gb) < bit_length){ pps->transform_8x8_mode= get_bits1(&s->gb);