diff options
author | Justin Ruggles <justin.ruggles@gmail.com> | 2008-05-02 21:34:34 +0000 |
---|---|---|
committer | Justin Ruggles <justin.ruggles@gmail.com> | 2008-05-02 21:34:34 +0000 |
commit | 9482171bbd18fec6953e03e20681b08759a9f854 (patch) | |
tree | 7255c642c8bc7e417c6225e223faaa472d439e17 | |
parent | 9d48410f142290dfe6d4823656f2f208f4b06287 (diff) | |
download | ffmpeg-9482171bbd18fec6953e03e20681b08759a9f854.tar.gz |
share streaminfo parsing function
Originally committed as revision 13036 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavcodec/flac.c | 15 | ||||
-rw-r--r-- | libavcodec/flac.h | 13 |
2 files changed, 20 insertions, 8 deletions
diff --git a/libavcodec/flac.c b/libavcodec/flac.c index f3603ce4a8..c370b55992 100644 --- a/libavcodec/flac.c +++ b/libavcodec/flac.c @@ -94,7 +94,6 @@ static int64_t get_utf8(GetBitContext *gb){ return val; } -static void metadata_streaminfo(AVCodecContext *avctx, FLACContext *s, const uint8_t *buffer); static void allocate_buffers(FLACContext *s); static int metadata_parse(FLACContext *s); @@ -107,7 +106,7 @@ static av_cold int flac_decode_init(AVCodecContext * avctx) /* initialize based on the demuxer-supplied streamdata header */ init_get_bits(&s->gb, avctx->extradata, avctx->extradata_size*8); if (avctx->extradata_size == FLAC_STREAMINFO_SIZE) { - metadata_streaminfo(avctx, s, avctx->extradata); + ff_flac_parse_streaminfo(avctx, (FLACStreaminfo *)s, avctx->extradata); allocate_buffers(s); } else { metadata_parse(s); @@ -117,9 +116,9 @@ static av_cold int flac_decode_init(AVCodecContext * avctx) return 0; } -static void dump_headers(AVCodecContext *avctx, FLACContext *s) +static void dump_headers(AVCodecContext *avctx, FLACStreaminfo *s) { - av_log(avctx, AV_LOG_DEBUG, " Blocksize: %d .. %d (%d)\n", s->min_blocksize, s->max_blocksize, s->blocksize); + av_log(avctx, AV_LOG_DEBUG, " Blocksize: %d .. %d\n", s->min_blocksize, s->max_blocksize); av_log(avctx, AV_LOG_DEBUG, " Max Framesize: %d\n", s->max_framesize); av_log(avctx, AV_LOG_DEBUG, " Samplerate: %d\n", s->samplerate); av_log(avctx, AV_LOG_DEBUG, " Channels: %d\n", s->channels); @@ -143,8 +142,8 @@ static void allocate_buffers(FLACContext *s){ s->bitstream= av_fast_realloc(s->bitstream, &s->allocated_bitstream_size, s->max_framesize); } -static void metadata_streaminfo(AVCodecContext *avctx, FLACContext *s, - const uint8_t *buffer) +void ff_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s, + const uint8_t *buffer) { GetBitContext gb; init_get_bits(&gb, buffer, FLAC_STREAMINFO_SIZE*8); @@ -197,7 +196,7 @@ static int metadata_parse(FLACContext *s) if (metadata_size) { switch (metadata_type) { case METADATA_TYPE_STREAMINFO: - metadata_streaminfo(s->avctx, s, s->gb.buffer+get_bits_count(&s->gb)/8); + ff_flac_parse_streaminfo(s->avctx, (FLACStreaminfo *)s, s->gb.buffer+get_bits_count(&s->gb)/8); streaminfo_updated = 1; default: @@ -573,7 +572,7 @@ static int decode_frame(FLACContext *s, int alloc_data_size) s->bps = bps; s->decorrelation= decorrelation; -// dump_headers(s->avctx, s); +// dump_headers(s->avctx, (FLACStreaminfo *)s); /* subframes */ for (i = 0; i < s->channels; i++) diff --git a/libavcodec/flac.h b/libavcodec/flac.h index e7a8440b12..da39456dcf 100644 --- a/libavcodec/flac.h +++ b/libavcodec/flac.h @@ -39,4 +39,17 @@ int channels; /**< number of channels */\ int bps; /**< bits-per-sample */\ +typedef struct FLACStreaminfo { + FLACSTREAMINFO +} FLACStreaminfo; + +/** + * Parse the Streaminfo metadata block + * @param[out] avctx codec context to set basic stream parameters + * @param[out] s where parsed information is stored + * @param[in] buffer pointer to start of 34-byte streaminfo data + */ +void ff_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s, + const uint8_t *buffer); + #endif /* FFMPEG_FLAC_H */ |