xine-lib 1.2.13-20230125hg15249
Data Structures | Macros | Functions
demux_mpgaudio.c File Reference
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <xine/xine_internal.h>
#include <xine/xineutils.h>
#include <xine/demux.h>
#include <xine/compat.h>
#include "bswap.h"
#include "group_audio.h"
#include "id3.h"

Data Structures

struct  mpg_audio_frame_t
 
struct  xing_header_t
 
struct  vbri_header_t
 
struct  demux_mpgaudio_t
 

Macros

#define LOG_MODULE   "demux_mpgaudio"
 
#define LOG_VERBOSE
 
#define NUM_PREVIEW_BUFFERS   2
 
#define NUM_VALID_FRAMES   3
 
#define FOURCC_TAG   BE_FOURCC
 
#define RIFF_CHECK_BYTES   1024
 
#define RIFF_TAG   FOURCC_TAG('R', 'I', 'F', 'F')
 
#define AVI_TAG   FOURCC_TAG('A', 'V', 'I', ' ')
 
#define CDXA_TAG   FOURCC_TAG('C', 'D', 'X', 'A')
 
#define MPEG_MARKER   ME_FOURCC( 0x00, 0x00, 0x01, 0xBA )
 
#define XING_TAG   FOURCC_TAG('X', 'i', 'n', 'g')
 
#define INFO_TAG   FOURCC_TAG('I', 'n', 'f', 'o')
 
#define LAME_TAG   FOURCC_TAG('L', 'A', 'M', 'E')
 
#define XING_FRAMES_FLAG   0x0001
 
#define XING_BYTES_FLAG   0x0002
 
#define XING_TOC_FLAG   0x0004
 
#define XING_VBR_SCALE_FLAG   0x0008
 
#define XING_TOC_LENGTH   100
 
#define LAME_HEADER_LENGTH   0xC0
 
#define VBRI_TAG   FOURCC_TAG('V', 'B', 'R', 'I')
 

Functions

static int parse_frame_header (mpg_audio_frame_t *const frame, const uint8_t *const buf)
 
static xing_header_tparse_xing_header (mpg_audio_frame_t *frame, uint8_t *buf, int bufsize)
 
static void _free_vbri_header (vbri_header_t **pp)
 
static vbri_header_tparse_vbri_header (mpg_audio_frame_t *frame, uint8_t *buf, int bufsize)
 
static int parse_frame_payload (demux_mpgaudio_t *this, uint8_t *frame_header, int decoder_flags)
 
static int sniff_buffer_looks_like_mp3 (uint8_t *buf, int buflen, int *version, int *layer)
 
static int read_frame_header (demux_mpgaudio_t *this, uint8_t *header_buf, int bytes)
 
static int demux_mpgaudio_next (demux_mpgaudio_t *this, int decoder_flags, int send_header)
 
static int demux_mpgaudio_send_chunk (demux_plugin_t *this_gen)
 
static int demux_mpgaudio_get_status (demux_plugin_t *this_gen)
 
static int detect_mpgaudio_file (xine_stream_t *stream, input_plugin_t *input, int *version, int *layer)
 
static void demux_mpgaudio_send_headers (demux_plugin_t *this_gen)
 
static off_t xing_get_seek_point (xing_header_t *xing, int time, int stream_length)
 
static off_t vbri_get_seek_point (vbri_header_t *vbri, int time, int stream_length)
 
static int demux_mpgaudio_seek (demux_plugin_t *this_gen, off_t start_pos, int start_time, int playing)
 
static int demux_mpgaudio_get_stream_length (demux_plugin_t *this_gen)
 
static uint32_t demux_mpgaudio_get_capabilities (demux_plugin_t *this_gen)
 
static int demux_mpgaudio_get_optional_data (demux_plugin_t *this_gen, void *data, int data_type)
 
static void demux_mpgaudio_dispose (demux_plugin_t *this_gen)
 
static demux_plugin_topen_plugin (demux_class_t *class_gen, xine_stream_t *stream, input_plugin_t *input)
 
void * demux_mpgaudio_init_class (xine_t *xine, const void *data)
 

Macro Definition Documentation

◆ AVI_TAG

#define AVI_TAG   FOURCC_TAG('A', 'V', 'I', ' ')

◆ CDXA_TAG

#define CDXA_TAG   FOURCC_TAG('C', 'D', 'X', 'A')

◆ FOURCC_TAG

#define FOURCC_TAG   BE_FOURCC

◆ INFO_TAG

#define INFO_TAG   FOURCC_TAG('I', 'n', 'f', 'o')

◆ LAME_HEADER_LENGTH

#define LAME_HEADER_LENGTH   0xC0

Referenced by parse_xing_header().

◆ LAME_TAG

#define LAME_TAG   FOURCC_TAG('L', 'A', 'M', 'E')

Referenced by parse_xing_header().

◆ LOG_MODULE

#define LOG_MODULE   "demux_mpgaudio"

◆ LOG_VERBOSE

#define LOG_VERBOSE

◆ MPEG_MARKER

#define MPEG_MARKER   ME_FOURCC( 0x00, 0x00, 0x01, 0xBA )

Referenced by detect_mpgaudio_file().

◆ NUM_PREVIEW_BUFFERS

#define NUM_PREVIEW_BUFFERS   2

◆ NUM_VALID_FRAMES

#define NUM_VALID_FRAMES   3

◆ RIFF_CHECK_BYTES

#define RIFF_CHECK_BYTES   1024

◆ RIFF_TAG

#define RIFF_TAG   FOURCC_TAG('R', 'I', 'F', 'F')

◆ VBRI_TAG

#define VBRI_TAG   FOURCC_TAG('V', 'B', 'R', 'I')

Referenced by parse_vbri_header().

◆ XING_BYTES_FLAG

#define XING_BYTES_FLAG   0x0002

Referenced by parse_xing_header().

◆ XING_FRAMES_FLAG

#define XING_FRAMES_FLAG   0x0001

Referenced by parse_xing_header().

◆ XING_TAG

#define XING_TAG   FOURCC_TAG('X', 'i', 'n', 'g')

Referenced by parse_xing_header().

◆ XING_TOC_FLAG

#define XING_TOC_FLAG   0x0004

◆ XING_TOC_LENGTH

#define XING_TOC_LENGTH   100

Referenced by parse_xing_header().

◆ XING_VBR_SCALE_FLAG

#define XING_VBR_SCALE_FLAG   0x0008

Referenced by parse_xing_header().

Function Documentation

◆ _free_vbri_header()

static void _free_vbri_header ( vbri_header_t ** pp)
static

◆ demux_mpgaudio_dispose()

static void demux_mpgaudio_dispose ( demux_plugin_t * this_gen)
static

References _free_vbri_header(), and _x_freep().

Referenced by open_plugin().

◆ demux_mpgaudio_get_capabilities()

static uint32_t demux_mpgaudio_get_capabilities ( demux_plugin_t * this_gen)
static

References DEMUX_CAP_NOCAP.

Referenced by open_plugin().

◆ demux_mpgaudio_get_optional_data()

static int demux_mpgaudio_get_optional_data ( demux_plugin_t * this_gen,
void * data,
int data_type )
static

References DEMUX_OPTIONAL_UNSUPPORTED.

Referenced by open_plugin().

◆ demux_mpgaudio_get_status()

static int demux_mpgaudio_get_status ( demux_plugin_t * this_gen)
static

Referenced by open_plugin().

◆ demux_mpgaudio_get_stream_length()

static int demux_mpgaudio_get_stream_length ( demux_plugin_t * this_gen)
static

Referenced by open_plugin().

◆ demux_mpgaudio_init_class()

void * demux_mpgaudio_init_class ( xine_t * xine,
const void * data )

◆ demux_mpgaudio_next()

static int demux_mpgaudio_next ( demux_mpgaudio_t * this,
int decoder_flags,
int send_header )
static

◆ demux_mpgaudio_seek()

static int demux_mpgaudio_seek ( demux_plugin_t * this_gen,
off_t start_pos,
int start_time,
int playing )
static

◆ demux_mpgaudio_send_chunk()

static int demux_mpgaudio_send_chunk ( demux_plugin_t * this_gen)
static

◆ demux_mpgaudio_send_headers()

static void demux_mpgaudio_send_headers ( demux_plugin_t * this_gen)
static

◆ detect_mpgaudio_file()

static int detect_mpgaudio_file ( xine_stream_t * stream,
input_plugin_t * input,
int * version,
int * layer )
static

◆ open_plugin()

static demux_plugin_t * open_plugin ( demux_class_t * class_gen,
xine_stream_t * stream,
input_plugin_t * input )
static

◆ parse_frame_header()

static int parse_frame_header ( mpg_audio_frame_t *const frame,
const uint8_t *const buf )
static

◆ parse_frame_payload()

static int parse_frame_payload ( demux_mpgaudio_t * this,
uint8_t * frame_header,
int decoder_flags )
static

◆ parse_vbri_header()

static vbri_header_t * parse_vbri_header ( mpg_audio_frame_t * frame,
uint8_t * buf,
int bufsize )
static

◆ parse_xing_header()

static xing_header_t * parse_xing_header ( mpg_audio_frame_t * frame,
uint8_t * buf,
int bufsize )
static

◆ read_frame_header()

static int read_frame_header ( demux_mpgaudio_t * this,
uint8_t * header_buf,
int bytes )
static

References input().

Referenced by demux_mpgaudio_next().

◆ sniff_buffer_looks_like_mp3()

static int sniff_buffer_looks_like_mp3 ( uint8_t * buf,
int buflen,
int * version,
int * layer )
static

◆ vbri_get_seek_point()

static off_t vbri_get_seek_point ( vbri_header_t * vbri,
int time,
int stream_length )
static

◆ xing_get_seek_point()

static off_t xing_get_seek_point ( xing_header_t * xing,
int time,
int stream_length )
static