aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDiego Biurrun <diego@biurrun.de>2012-07-10 18:32:41 +0200
committerDiego Biurrun <diego@biurrun.de>2012-07-12 11:11:23 +0200
commit8eea8fdcebfa4ceaeba8aa6d3e68d56268c5bdf9 (patch)
tree160b7141fa94203b31a9c2a830ac0c9f69a87bd3
parenta519463366238a7ec05d2bb76c4a67f42cf60ece (diff)
downloadffmpeg-8eea8fdcebfa4ceaeba8aa6d3e68d56268c5bdf9.tar.gz
flac: Move flac functions shared between libraries to flac common code
This fixes a number of flac-related build dependencies.
-rw-r--r--libavcodec/Makefile24
-rw-r--r--libavcodec/flac.c74
-rw-r--r--libavcodec/flacdec.c73
3 files changed, 85 insertions, 86 deletions
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index 01159f6a8b..ee4ac7532c 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -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
diff --git a/libavcodec/flac.c b/libavcodec/flac.c
index ac36376cdc..d624beb61f 100644
--- a/libavcodec/flac.c
+++ b/libavcodec/flac.c
@@ -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);
+}
diff --git a/libavcodec/flacdec.c b/libavcodec/flacdec.c
index 89819e31fb..53070a348c 100644
--- a/libavcodec/flacdec.c
+++ b/libavcodec/flacdec.c
@@ -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