Commit 7784f477 authored by Anton Khirnov's avatar Anton Khirnov

lavf: stop using avpriv_flac_parse_streaminfo()

The only parameters needed by the demuxers are the sample rate and sample
count, which can be trivially extracted manually, without resorting to
an avpriv function.
parent 56dc46a1
...@@ -567,8 +567,6 @@ OBJS-$(CONFIG_VC1_VDPAU_HWACCEL) += vdpau_vc1.o ...@@ -567,8 +567,6 @@ OBJS-$(CONFIG_VC1_VDPAU_HWACCEL) += vdpau_vc1.o
OBJS-$(CONFIG_ADTS_MUXER) += mpeg4audio.o OBJS-$(CONFIG_ADTS_MUXER) += mpeg4audio.o
OBJS-$(CONFIG_CAF_DEMUXER) += mpeg4audio.o mpegaudiodata.o \ OBJS-$(CONFIG_CAF_DEMUXER) += mpeg4audio.o mpegaudiodata.o \
ac3tab.o ac3tab.o
OBJS-$(CONFIG_FLAC_DEMUXER) += flac.o flacdata.o \
xiph.o
OBJS-$(CONFIG_FLAC_MUXER) += flac.o flacdata.o OBJS-$(CONFIG_FLAC_MUXER) += flac.o flacdata.o
OBJS-$(CONFIG_FLV_DEMUXER) += mpeg4audio.o OBJS-$(CONFIG_FLV_DEMUXER) += mpeg4audio.o
OBJS-$(CONFIG_GXF_DEMUXER) += mpeg12data.o OBJS-$(CONFIG_GXF_DEMUXER) += mpeg12data.o
...@@ -588,7 +586,7 @@ OBJS-$(CONFIG_MOV_MUXER) += mpeg4audio.o mpegaudiodata.o ...@@ -588,7 +586,7 @@ OBJS-$(CONFIG_MOV_MUXER) += mpeg4audio.o mpegaudiodata.o
OBJS-$(CONFIG_MPEGTS_MUXER) += mpeg4audio.o OBJS-$(CONFIG_MPEGTS_MUXER) += mpeg4audio.o
OBJS-$(CONFIG_MPEGTS_DEMUXER) += mpeg4audio.o mpegaudiodata.o OBJS-$(CONFIG_MPEGTS_DEMUXER) += mpeg4audio.o mpegaudiodata.o
OBJS-$(CONFIG_NUT_MUXER) += mpegaudiodata.o OBJS-$(CONFIG_NUT_MUXER) += mpegaudiodata.o
OBJS-$(CONFIG_OGG_DEMUXER) += xiph.o flac.o flacdata.o \ OBJS-$(CONFIG_OGG_DEMUXER) += xiph.o \
mpeg12data.o \ mpeg12data.o \
dirac.o dirac.o
OBJS-$(CONFIG_OGG_MUXER) += xiph.o flac.o flacdata.o OBJS-$(CONFIG_OGG_MUXER) += xiph.o flac.o flacdata.o
......
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
#include "oggdec.h" #include "oggdec.h"
#include "vorbiscomment.h" #include "vorbiscomment.h"
#include "replaygain.h" #include "replaygain.h"
#include "libavcodec/bytestream.h"
static int flac_read_header(AVFormatContext *s) static int flac_read_header(AVFormatContext *s)
{ {
...@@ -76,7 +75,9 @@ static int flac_read_header(AVFormatContext *s) ...@@ -76,7 +75,9 @@ static int flac_read_header(AVFormatContext *s)
} }
if (metadata_type == FLAC_METADATA_TYPE_STREAMINFO) { if (metadata_type == FLAC_METADATA_TYPE_STREAMINFO) {
FLACStreaminfo si; uint32_t samplerate;
uint64_t samples;
/* STREAMINFO can only occur once */ /* STREAMINFO can only occur once */
if (found_streaminfo) { if (found_streaminfo) {
av_freep(&buffer); av_freep(&buffer);
...@@ -91,14 +92,16 @@ static int flac_read_header(AVFormatContext *s) ...@@ -91,14 +92,16 @@ static int flac_read_header(AVFormatContext *s)
st->codec->extradata_size = metadata_size; st->codec->extradata_size = metadata_size;
buffer = NULL; buffer = NULL;
/* get codec params from STREAMINFO header */ /* get sample rate and sample count from STREAMINFO header;
avpriv_flac_parse_streaminfo(st->codec, &si, st->codec->extradata); * other parameters will be extracted by the parser */
samplerate = AV_RB24(st->codec->extradata + 10) >> 4;
samples = (AV_RB64(st->codec->extradata + 13) >> 24) & ((1ULL << 36) - 1);
/* set time base and duration */ /* set time base and duration */
if (si.samplerate > 0) { if (samplerate > 0) {
avpriv_set_pts_info(st, 64, 1, si.samplerate); avpriv_set_pts_info(st, 64, 1, samplerate);
if (si.samples > 0) if (samples > 0)
st->duration = si.samples; st->duration = samples;
} }
} else if (metadata_type == FLAC_METADATA_TYPE_CUESHEET) { } else if (metadata_type == FLAC_METADATA_TYPE_CUESHEET) {
uint8_t isrc[13]; uint8_t isrc[13];
......
...@@ -34,7 +34,6 @@ flac_header (AVFormatContext * s, int idx) ...@@ -34,7 +34,6 @@ flac_header (AVFormatContext * s, int idx)
struct ogg_stream *os = ogg->streams + idx; struct ogg_stream *os = ogg->streams + idx;
AVStream *st = s->streams[idx]; AVStream *st = s->streams[idx];
GetBitContext gb; GetBitContext gb;
FLACStreaminfo si;
int mdt; int mdt;
if (os->buf[os->pstart] == 0xff) if (os->buf[os->pstart] == 0xff)
...@@ -46,6 +45,8 @@ flac_header (AVFormatContext * s, int idx) ...@@ -46,6 +45,8 @@ flac_header (AVFormatContext * s, int idx)
if (mdt == OGG_FLAC_METADATA_TYPE_STREAMINFO) { if (mdt == OGG_FLAC_METADATA_TYPE_STREAMINFO) {
uint8_t *streaminfo_start = os->buf + os->pstart + 5 + 4 + 4 + 4; uint8_t *streaminfo_start = os->buf + os->pstart + 5 + 4 + 4 + 4;
uint32_t samplerate;
skip_bits_long(&gb, 4*8); /* "FLAC" */ skip_bits_long(&gb, 4*8); /* "FLAC" */
if(get_bits(&gb, 8) != 1) /* unsupported major version */ if(get_bits(&gb, 8) != 1) /* unsupported major version */
return -1; return -1;
...@@ -56,8 +57,6 @@ flac_header (AVFormatContext * s, int idx) ...@@ -56,8 +57,6 @@ flac_header (AVFormatContext * s, int idx)
if (get_bits_long(&gb, 32) != FLAC_STREAMINFO_SIZE) if (get_bits_long(&gb, 32) != FLAC_STREAMINFO_SIZE)
return -1; return -1;
avpriv_flac_parse_streaminfo(st->codec, &si, streaminfo_start);
st->codec->codec_type = AVMEDIA_TYPE_AUDIO; st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
st->codec->codec_id = AV_CODEC_ID_FLAC; st->codec->codec_id = AV_CODEC_ID_FLAC;
st->need_parsing = AVSTREAM_PARSE_HEADERS; st->need_parsing = AVSTREAM_PARSE_HEADERS;
...@@ -67,7 +66,11 @@ flac_header (AVFormatContext * s, int idx) ...@@ -67,7 +66,11 @@ flac_header (AVFormatContext * s, int idx)
memcpy(st->codec->extradata, streaminfo_start, FLAC_STREAMINFO_SIZE); memcpy(st->codec->extradata, streaminfo_start, FLAC_STREAMINFO_SIZE);
st->codec->extradata_size = FLAC_STREAMINFO_SIZE; st->codec->extradata_size = FLAC_STREAMINFO_SIZE;
avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate); samplerate = AV_RB24(st->codec->extradata + 10) >> 4;
if (!samplerate)
return AVERROR_INVALIDDATA;
avpriv_set_pts_info(st, 64, 1, samplerate);
} else if (mdt == FLAC_METADATA_TYPE_VORBIS_COMMENT) { } else if (mdt == FLAC_METADATA_TYPE_VORBIS_COMMENT) {
ff_vorbis_stream_comment(s, st, os->buf + os->pstart + 4, os->psize - 4); ff_vorbis_stream_comment(s, st, os->buf + os->pstart + 4, os->psize - 4);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment