X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fflac.c;h=cd1a6ab87de83218729c92dab687583f30765ae5;hb=b0de1c766329dd8c9960ad1722e2f653160abc1b;hp=aa322b42f9090c017de273122108b5de23ac9087;hpb=9d083d64172ebf94e343a3a269eabba5bbcdf182;p=ffmpeg diff --git a/libavcodec/flac.c b/libavcodec/flac.c index aa322b42f90..cd1a6ab87de 100644 --- a/libavcodec/flac.c +++ b/libavcodec/flac.c @@ -55,7 +55,7 @@ int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb, /* frame sync code */ if ((get_bits(gb, 15) & 0x7FFF) != 0x7FFC) { av_log(avctx, AV_LOG_ERROR + log_level_offset, "invalid sync code\n"); - return -1; + return AVERROR_INVALIDDATA; } /* variable block size stream code */ @@ -76,7 +76,7 @@ int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb, } else { av_log(avctx, AV_LOG_ERROR + log_level_offset, "invalid channel mode: %d\n", fi->ch_mode); - return -1; + return AVERROR_INVALIDDATA; } /* bits per sample */ @@ -85,7 +85,7 @@ int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb, av_log(avctx, AV_LOG_ERROR + log_level_offset, "invalid sample size code (%d)\n", bps_code); - return -1; + return AVERROR_INVALIDDATA; } fi->bps = sample_size_table[bps_code]; @@ -93,7 +93,7 @@ int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb, if (get_bits1(gb)) { av_log(avctx, AV_LOG_ERROR + log_level_offset, "broken stream, invalid padding\n"); - return -1; + return AVERROR_INVALIDDATA; } /* sample or frame count */ @@ -101,14 +101,14 @@ int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb, if (fi->frame_or_sample_num < 0) { av_log(avctx, AV_LOG_ERROR + log_level_offset, "sample/frame number invalid; utf8 fscked\n"); - return -1; + return AVERROR_INVALIDDATA; } /* blocksize */ if (bs_code == 0) { av_log(avctx, AV_LOG_ERROR + log_level_offset, "reserved blocksize code: 0\n"); - return -1; + return AVERROR_INVALIDDATA; } else if (bs_code == 6) { fi->blocksize = get_bits(gb, 8) + 1; } else if (bs_code == 7) { @@ -130,7 +130,7 @@ int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb, av_log(avctx, AV_LOG_ERROR + log_level_offset, "illegal sample rate code %d\n", sr_code); - return -1; + return AVERROR_INVALIDDATA; } /* header CRC-8 check */ @@ -139,7 +139,7 @@ int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb, get_bits_count(gb)/8)) { av_log(avctx, AV_LOG_ERROR + log_level_offset, "header crc mismatch\n"); - return -1; + return AVERROR_INVALIDDATA; } return 0; @@ -225,7 +225,10 @@ void avpriv_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo * avctx->channels = s->channels; avctx->sample_rate = s->samplerate; avctx->bits_per_raw_sample = s->bps; - ff_flac_set_channel_layout(avctx); + + if (!avctx->channel_layout || + av_get_channel_layout_nb_channels(avctx->channel_layout) != avctx->channels) + ff_flac_set_channel_layout(avctx); s->samples = get_bits_long(&gb, 32) << 4; s->samples |= get_bits(&gb, 4); @@ -234,14 +237,10 @@ void avpriv_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo * skip_bits_long(&gb, 64); /* md5 sum */ } +#if LIBAVCODEC_VERSION_MAJOR < 56 void avpriv_flac_parse_block_header(const uint8_t *block_header, int *last, int *type, int *size) { - int tmp = bytestream_get_byte(&block_header); - if (last) - *last = tmp & 0x80; - if (type) - *type = tmp & 0x7F; - if (size) - *size = bytestream_get_be24(&block_header); + flac_parse_block_header(block_header, last, type, size); } +#endif