Mercurial > libavcodec.hg
comparison ac3dec.c @ 6950:ec4e01cb0089 libavcodec
move header error logging to after CRC check
author | jbr |
---|---|
date | Sat, 31 May 2008 15:30:55 +0000 |
parents | 86e3dce7f723 |
children | 4c1b8b50313c |
comparison
equal
deleted
inserted
replaced
6949:8e907d8094f5 | 6950:ec4e01cb0089 |
---|---|
1142 } else { | 1142 } else { |
1143 init_get_bits(&s->gbc, buf, buf_size * 8); | 1143 init_get_bits(&s->gbc, buf, buf_size * 8); |
1144 } | 1144 } |
1145 | 1145 |
1146 /* parse the syncinfo */ | 1146 /* parse the syncinfo */ |
1147 *data_size = 0; | |
1147 err = ac3_parse_header(s); | 1148 err = ac3_parse_header(s); |
1148 if(err) { | 1149 |
1150 /* check that reported frame size fits in input buffer */ | |
1151 if(s->frame_size > buf_size) { | |
1152 av_log(avctx, AV_LOG_ERROR, "incomplete frame\n"); | |
1153 err = AC3_PARSE_ERROR_FRAME_SIZE; | |
1154 } | |
1155 | |
1156 /* check for crc mismatch */ | |
1157 if(err != AC3_PARSE_ERROR_FRAME_SIZE && avctx->error_resilience >= FF_ER_CAREFUL) { | |
1158 if(av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, &buf[2], s->frame_size-2)) { | |
1159 av_log(avctx, AV_LOG_ERROR, "frame CRC mismatch\n"); | |
1160 err = 1; | |
1161 } | |
1162 } | |
1163 | |
1164 /* parse the syncinfo */ | |
1165 if(err && err != 1) { | |
1149 switch(err) { | 1166 switch(err) { |
1150 case AC3_PARSE_ERROR_SYNC: | 1167 case AC3_PARSE_ERROR_SYNC: |
1151 av_log(avctx, AV_LOG_ERROR, "frame sync error : cannot use error concealment\n"); | 1168 av_log(avctx, AV_LOG_ERROR, "frame sync error\n"); |
1152 return -1; | 1169 break; |
1153 case AC3_PARSE_ERROR_BSID: | 1170 case AC3_PARSE_ERROR_BSID: |
1154 av_log(avctx, AV_LOG_ERROR, "invalid bitstream id\n"); | 1171 av_log(avctx, AV_LOG_ERROR, "invalid bitstream id\n"); |
1155 break; | 1172 break; |
1156 case AC3_PARSE_ERROR_SAMPLE_RATE: | 1173 case AC3_PARSE_ERROR_SAMPLE_RATE: |
1157 av_log(avctx, AV_LOG_ERROR, "invalid sample rate\n"); | 1174 av_log(avctx, AV_LOG_ERROR, "invalid sample rate\n"); |
1166 av_log(avctx, AV_LOG_ERROR, "invalid header\n"); | 1183 av_log(avctx, AV_LOG_ERROR, "invalid header\n"); |
1167 break; | 1184 break; |
1168 } | 1185 } |
1169 } | 1186 } |
1170 | 1187 |
1171 /* check that reported frame size fits in input buffer */ | |
1172 if(s->frame_size > buf_size) { | |
1173 av_log(avctx, AV_LOG_ERROR, "incomplete frame\n"); | |
1174 return -1; | |
1175 } | |
1176 | |
1177 /* check for crc mismatch */ | |
1178 if(!err && avctx->error_resilience >= FF_ER_CAREFUL) { | |
1179 if(av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, &buf[2], s->frame_size-2)) { | |
1180 av_log(avctx, AV_LOG_ERROR, "frame CRC mismatch\n"); | |
1181 err = 1; | |
1182 } | |
1183 } | |
1184 | |
1185 /* if frame is ok, set audio parameters */ | 1188 /* if frame is ok, set audio parameters */ |
1186 if (!err) { | 1189 if (!err) { |
1187 avctx->sample_rate = s->sample_rate; | 1190 avctx->sample_rate = s->sample_rate; |
1188 avctx->bit_rate = s->bit_rate; | 1191 avctx->bit_rate = s->bit_rate; |
1189 | 1192 |