#include "libavutil/opt.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/dict.h"
#include "libavutil/mathematics.h"
#include "avformat.h"
#include "internal.h"
#include "avio_internal.h"
#include "demux.h"
#include "id3v2.h"
#include "id3v1.h"
#include "replaygain.h"
#include "libavcodec/codec_id.h"
#include "libavcodec/mpegaudiodecheader.h"
#define XING_FLAG_FRAMES …
#define XING_FLAG_SIZE …
#define XING_FLAG_TOC …
#define XING_FLAC_QSCALE …
#define XING_TOC_COUNT …
MP3DecContext;
enum CheckRet { … };
static int check(AVIOContext *pb, int64_t pos, uint32_t *header);
static int mp3_read_probe(const AVProbeData *p)
{ … }
static void read_xing_toc(AVFormatContext *s, int64_t filesize, int64_t duration)
{ … }
static void mp3_parse_info_tag(AVFormatContext *s, AVStream *st,
MPADecodeHeader *c, uint32_t spf)
{ … }
static void mp3_parse_vbri_tag(AVFormatContext *s, AVStream *st, int64_t base)
{ … }
static int mp3_parse_vbr_tags(AVFormatContext *s, AVStream *st, int64_t base)
{ … }
static int mp3_read_header(AVFormatContext *s)
{ … }
#define MP3_PACKET_SIZE …
static int mp3_read_packet(AVFormatContext *s, AVPacket *pkt)
{ … }
#define SEEK_WINDOW …
static int check(AVIOContext *pb, int64_t pos, uint32_t *ret_header)
{ … }
static int64_t mp3_sync(AVFormatContext *s, int64_t target_pos, int flags)
{ … }
static int mp3_seek(AVFormatContext *s, int stream_index, int64_t timestamp,
int flags)
{ … }
static const AVOption options[] = …;
static const AVClass demuxer_class = …;
const FFInputFormat ff_mp3_demuxer = …;