diff --git a/libavcodec/ac3dec.c b/libavcodec/ac3dec.c index 9bfbec39b7a2b616a3cbade855fbe68db241de5b..b7941c1623725325b7542c3ab641f43ddbe30342 100644 --- a/libavcodec/ac3dec.c +++ b/libavcodec/ac3dec.c @@ -1175,7 +1175,14 @@ static int ac3_decode_frame(AVCodecContext * avctx, void *data, int *data_size, av_log(avctx, AV_LOG_ERROR, "invalid frame size\n"); break; case AC3_PARSE_ERROR_FRAME_TYPE: + /* skip frame if CRC is ok. otherwise use error concealment. */ + /* TODO: add support for substreams and dependent frames */ + if(s->frame_type == EAC3_FRAME_TYPE_DEPENDENT || s->substreamid) { + av_log(avctx, AV_LOG_ERROR, "unsupported frame type : skipping frame\n"); + return s->frame_size; + } else { av_log(avctx, AV_LOG_ERROR, "invalid frame type\n"); + } break; default: av_log(avctx, AV_LOG_ERROR, "invalid header\n");