This fixes a number of flac-related build dependencies.tags/n1.0
| @@ -566,19 +566,18 @@ OBJS-$(CONFIG_CAF_DEMUXER) += mpeg4audio.o mpegaudiodata.o \ | |||
| ac3tab.o | |||
| OBJS-$(CONFIG_DV_DEMUXER) += dv_profile.o | |||
| OBJS-$(CONFIG_DV_MUXER) += dv_profile.o | |||
| OBJS-$(CONFIG_FLAC_DEMUXER) += flacdec.o flacdata.o flac.o | |||
| OBJS-$(CONFIG_FLAC_MUXER) += flacdec.o flacdata.o flac.o | |||
| OBJS-$(CONFIG_FLAC_DEMUXER) += flac.o flacdata.o | |||
| OBJS-$(CONFIG_FLAC_MUXER) += flac.o flacdata.o | |||
| OBJS-$(CONFIG_FLV_DEMUXER) += mpeg4audio.o | |||
| OBJS-$(CONFIG_GXF_DEMUXER) += mpeg12data.o | |||
| OBJS-$(CONFIG_IFF_DEMUXER) += iff.o | |||
| OBJS-$(CONFIG_ISMV_MUXER) += mpeg4audio.o mpegaudiodata.o | |||
| OBJS-$(CONFIG_LATM_MUXER) += mpeg4audio.o | |||
| OBJS-$(CONFIG_MATROSKA_AUDIO_MUXER) += xiph.o mpeg4audio.o \ | |||
| flacdec.o flacdata.o flac.o | |||
| OBJS-$(CONFIG_MATROSKA_AUDIO_MUXER) += xiph.o mpeg4audio.o \ | |||
| flac.o flacdata.o | |||
| OBJS-$(CONFIG_MATROSKA_DEMUXER) += mpeg4audio.o mpegaudiodata.o | |||
| OBJS-$(CONFIG_MATROSKA_MUXER) += xiph.o mpeg4audio.o \ | |||
| flacdec.o flacdata.o flac.o \ | |||
| mpegaudiodata.o | |||
| OBJS-$(CONFIG_MATROSKA_MUXER) += mpeg4audio.o mpegaudiodata.o \ | |||
| flac.o flacdata.o xiph.o | |||
| OBJS-$(CONFIG_MP2_MUXER) += mpegaudiodata.o mpegaudiodecheader.o | |||
| OBJS-$(CONFIG_MP3_MUXER) += mpegaudiodata.o mpegaudiodecheader.o | |||
| OBJS-$(CONFIG_MOV_DEMUXER) += mpeg4audio.o mpegaudiodata.o ac3tab.o | |||
| @@ -586,14 +585,13 @@ OBJS-$(CONFIG_MOV_MUXER) += mpeg4audio.o mpegaudiodata.o | |||
| OBJS-$(CONFIG_MPEGTS_MUXER) += mpegvideo.o mpeg4audio.o | |||
| OBJS-$(CONFIG_MPEGTS_DEMUXER) += mpeg4audio.o mpegaudiodata.o | |||
| OBJS-$(CONFIG_NUT_MUXER) += mpegaudiodata.o | |||
| OBJS-$(CONFIG_OGG_DEMUXER) += flacdec.o flacdata.o flac.o \ | |||
| dirac.o mpeg12data.o vorbis_parser.o | |||
| OBJS-$(CONFIG_OGG_MUXER) += xiph.o flacdec.o flacdata.o flac.o | |||
| OBJS-$(CONFIG_OGG_DEMUXER) += flac.o flacdata.o dirac.o \ | |||
| mpeg12data.o vorbis_parser.o | |||
| OBJS-$(CONFIG_OGG_MUXER) += xiph.o flac.o flacdata.o | |||
| OBJS-$(CONFIG_RTP_MUXER) += mpeg4audio.o mpegvideo.o xiph.o | |||
| OBJS-$(CONFIG_SPDIF_DEMUXER) += aacadtsdec.o mpeg4audio.o | |||
| OBJS-$(CONFIG_WEBM_MUXER) += xiph.o mpeg4audio.o \ | |||
| flacdec.o flacdata.o flac.o \ | |||
| mpegaudiodata.o | |||
| OBJS-$(CONFIG_WEBM_MUXER) += mpeg4audio.o mpegaudiodata.o \ | |||
| xiph.o flac.o flacdata.o | |||
| OBJS-$(CONFIG_WTV_DEMUXER) += mpeg4audio.o mpegaudiodata.o | |||
| # external codec libraries | |||
| @@ -20,6 +20,9 @@ | |||
| */ | |||
| #include "libavutil/crc.h" | |||
| #include "libavutil/log.h" | |||
| #include "bytestream.h" | |||
| #include "get_bits.h" | |||
| #include "flac.h" | |||
| #include "flacdata.h" | |||
| @@ -150,3 +153,74 @@ int ff_flac_get_max_frame_size(int blocksize, int ch, int bps) | |||
| return count; | |||
| } | |||
| int avpriv_flac_is_extradata_valid(AVCodecContext *avctx, | |||
| enum FLACExtradataFormat *format, | |||
| uint8_t **streaminfo_start) | |||
| { | |||
| if (!avctx->extradata || avctx->extradata_size < FLAC_STREAMINFO_SIZE) { | |||
| av_log(avctx, AV_LOG_ERROR, "extradata NULL or too small.\n"); | |||
| return 0; | |||
| } | |||
| if (AV_RL32(avctx->extradata) != MKTAG('f','L','a','C')) { | |||
| /* extradata contains STREAMINFO only */ | |||
| if (avctx->extradata_size != FLAC_STREAMINFO_SIZE) { | |||
| av_log(avctx, AV_LOG_WARNING, "extradata contains %d bytes too many.\n", | |||
| FLAC_STREAMINFO_SIZE-avctx->extradata_size); | |||
| } | |||
| *format = FLAC_EXTRADATA_FORMAT_STREAMINFO; | |||
| *streaminfo_start = avctx->extradata; | |||
| } else { | |||
| if (avctx->extradata_size < 8+FLAC_STREAMINFO_SIZE) { | |||
| av_log(avctx, AV_LOG_ERROR, "extradata too small.\n"); | |||
| return 0; | |||
| } | |||
| *format = FLAC_EXTRADATA_FORMAT_FULL_HEADER; | |||
| *streaminfo_start = &avctx->extradata[8]; | |||
| } | |||
| return 1; | |||
| } | |||
| void avpriv_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s, | |||
| const uint8_t *buffer) | |||
| { | |||
| GetBitContext gb; | |||
| init_get_bits(&gb, buffer, FLAC_STREAMINFO_SIZE*8); | |||
| skip_bits(&gb, 16); /* skip min blocksize */ | |||
| s->max_blocksize = get_bits(&gb, 16); | |||
| if (s->max_blocksize < FLAC_MIN_BLOCKSIZE) { | |||
| av_log(avctx, AV_LOG_WARNING, "invalid max blocksize: %d\n", | |||
| s->max_blocksize); | |||
| s->max_blocksize = 16; | |||
| } | |||
| skip_bits(&gb, 24); /* skip min frame size */ | |||
| s->max_framesize = get_bits_long(&gb, 24); | |||
| s->samplerate = get_bits_long(&gb, 20); | |||
| s->channels = get_bits(&gb, 3) + 1; | |||
| s->bps = get_bits(&gb, 5) + 1; | |||
| avctx->channels = s->channels; | |||
| avctx->sample_rate = s->samplerate; | |||
| avctx->bits_per_raw_sample = s->bps; | |||
| s->samples = get_bits_long(&gb, 32) << 4; | |||
| s->samples |= get_bits(&gb, 4); | |||
| skip_bits_long(&gb, 64); /* md5 sum */ | |||
| skip_bits_long(&gb, 64); /* md5 sum */ | |||
| } | |||
| 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); | |||
| } | |||
| @@ -75,33 +75,6 @@ static const int64_t flac_channel_layouts[6] = { | |||
| static void allocate_buffers(FLACContext *s); | |||
| int avpriv_flac_is_extradata_valid(AVCodecContext *avctx, | |||
| enum FLACExtradataFormat *format, | |||
| uint8_t **streaminfo_start) | |||
| { | |||
| if (!avctx->extradata || avctx->extradata_size < FLAC_STREAMINFO_SIZE) { | |||
| av_log(avctx, AV_LOG_ERROR, "extradata NULL or too small.\n"); | |||
| return 0; | |||
| } | |||
| if (AV_RL32(avctx->extradata) != MKTAG('f','L','a','C')) { | |||
| /* extradata contains STREAMINFO only */ | |||
| if (avctx->extradata_size != FLAC_STREAMINFO_SIZE) { | |||
| av_log(avctx, AV_LOG_WARNING, "extradata contains %d bytes too many.\n", | |||
| FLAC_STREAMINFO_SIZE-avctx->extradata_size); | |||
| } | |||
| *format = FLAC_EXTRADATA_FORMAT_STREAMINFO; | |||
| *streaminfo_start = avctx->extradata; | |||
| } else { | |||
| if (avctx->extradata_size < 8+FLAC_STREAMINFO_SIZE) { | |||
| av_log(avctx, AV_LOG_ERROR, "extradata too small.\n"); | |||
| return 0; | |||
| } | |||
| *format = FLAC_EXTRADATA_FORMAT_FULL_HEADER; | |||
| *streaminfo_start = &avctx->extradata[8]; | |||
| } | |||
| return 1; | |||
| } | |||
| static void flac_set_bps(FLACContext *s) | |||
| { | |||
| enum AVSampleFormat req = s->avctx->request_sample_fmt; | |||
| @@ -175,52 +148,6 @@ static void allocate_buffers(FLACContext *s) | |||
| } | |||
| } | |||
| void avpriv_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s, | |||
| const uint8_t *buffer) | |||
| { | |||
| GetBitContext gb; | |||
| init_get_bits(&gb, buffer, FLAC_STREAMINFO_SIZE*8); | |||
| skip_bits(&gb, 16); /* skip min blocksize */ | |||
| s->max_blocksize = get_bits(&gb, 16); | |||
| if (s->max_blocksize < FLAC_MIN_BLOCKSIZE) { | |||
| av_log(avctx, AV_LOG_WARNING, "invalid max blocksize: %d\n", | |||
| s->max_blocksize); | |||
| s->max_blocksize = 16; | |||
| } | |||
| skip_bits(&gb, 24); /* skip min frame size */ | |||
| s->max_framesize = get_bits_long(&gb, 24); | |||
| s->samplerate = get_bits_long(&gb, 20); | |||
| s->channels = get_bits(&gb, 3) + 1; | |||
| s->bps = get_bits(&gb, 5) + 1; | |||
| avctx->channels = s->channels; | |||
| avctx->sample_rate = s->samplerate; | |||
| avctx->bits_per_raw_sample = s->bps; | |||
| s->samples = get_bits_long(&gb, 32) << 4; | |||
| s->samples |= get_bits(&gb, 4); | |||
| skip_bits_long(&gb, 64); /* md5 sum */ | |||
| skip_bits_long(&gb, 64); /* md5 sum */ | |||
| dump_headers(avctx, s); | |||
| } | |||
| 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); | |||
| } | |||
| /** | |||
| * Parse the STREAMINFO from an inline header. | |||
| * @param s the flac decoding context | |||