FFmpeg
Loading...
Searching...
No Matches
rmdec.c File Reference
#include <inttypes.h>
#include "libavutil/avassert.h"
#include "libavutil/channel_layout.h"
#include "libavutil/internal.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/dict.h"
#include "libavutil/mem.h"
#include "avformat.h"
#include "avio_internal.h"
#include "demux.h"
#include "internal.h"
#include "rmsipr.h"
#include "rm.h"

Go to the source code of this file.

Data Structures

struct  RMStream
 
struct  RMDemuxContext
 

Macros

#define DEINT_ID_GENR   MKTAG('g', 'e', 'n', 'r')
 interleaving for Cooker/ATRAC
 
#define DEINT_ID_INT0   MKTAG('I', 'n', 't', '0')
 no interleaving needed
 
#define DEINT_ID_INT4   MKTAG('I', 'n', 't', '4')
 interleaving for 28.8
 
#define DEINT_ID_SIPR   MKTAG('s', 'i', 'p', 'r')
 interleaving for Sipro
 
#define DEINT_ID_VBRF   MKTAG('v', 'b', 'r', 'f')
 VBR case for AAC.
 
#define DEINT_ID_VBRS   MKTAG('v', 'b', 'r', 's')
 VBR case for AAC.
 
#define RAW_PACKET_SIZE   1000
 

Functions

static void get_strl (AVIOContext *pb, char *buf, int buf_size, int len)
 
static void get_str8 (AVIOContext *pb, char *buf, int buf_size)
 
static int rm_read_extradata (AVFormatContext *s, AVIOContext *pb, AVCodecParameters *par, unsigned size)
 
static void rm_read_metadata (AVFormatContext *s, AVIOContext *pb, int wide)
 
RMStreamff_rm_alloc_rmstream (void)
 
void ff_rm_free_rmstream (RMStream *rms)
 
static int rm_read_audio_stream_info (AVFormatContext *s, AVIOContext *pb, AVStream *st, RMStream *ast, int read_all)
 
int ff_rm_read_mdpr_codecdata (AVFormatContext *s, AVIOContext *pb, AVStream *st, RMStream *rst, unsigned int codec_data_size, const uint8_t *mime)
 Read the MDPR chunk, which contains stream-specific codec initialization parameters.
 
static int rm_read_index (AVFormatContext *s)
 this function assumes that the demuxer has already seeked to the start of the INDX chunk, and will bail out if not.
 
static int rm_read_header_old (AVFormatContext *s)
 
static int rm_read_multi (AVFormatContext *s, AVIOContext *pb, AVStream *st, char *mime)
 
static int rm_read_header (AVFormatContext *s)
 
static int get_num (AVIOContext *pb, int *len)
 
static int rm_sync (AVFormatContext *s, int64_t *timestamp, int *flags, int *stream_index, int64_t *pos)
 
static int rm_assemble_video_frame (AVFormatContext *s, AVIOContext *pb, RMDemuxContext *rm, RMStream *vst, AVPacket *pkt, int len, int *pseq, int64_t *timestamp)
 
static void rm_ac3_swap_bytes (AVStream *st, AVPacket *pkt)
 
static int readfull (AVFormatContext *s, AVIOContext *pb, uint8_t *dst, int n)
 
int ff_rm_parse_packet (AVFormatContext *s, AVIOContext *pb, AVStream *st, RMStream *ast, int len, AVPacket *pkt, int *seq, int flags, int64_t timestamp)
 Parse one rm-stream packet from the input bytestream.
 
int ff_rm_retrieve_cache (AVFormatContext *s, AVIOContext *pb, AVStream *st, RMStream *ast, AVPacket *pkt)
 Retrieve one cached packet from the rm-context.
 
static int rm_read_packet (AVFormatContext *s, AVPacket *pkt)
 
static int rm_read_close (AVFormatContext *s)
 
static int rm_probe (const AVProbeData *p)
 
static int64_t rm_read_dts (AVFormatContext *s, int stream_index, int64_t *ppos, int64_t pos_limit)
 
static int rm_read_seek (AVFormatContext *s, int stream_index, int64_t pts, int flags)
 
static int ivr_probe (const AVProbeData *p)
 
static int ivr_read_header (AVFormatContext *s)
 
static int ivr_read_packet (AVFormatContext *s, AVPacket *pkt)
 

Variables

const FFInputFormat ff_rm_demuxer
 
const FFInputFormat ff_rdt_demuxer
 
const FFInputFormat ff_ivr_demuxer
 

Macro Definition Documentation

◆ DEINT_ID_GENR

#define DEINT_ID_GENR   MKTAG('g', 'e', 'n', 'r')

interleaving for Cooker/ATRAC

Definition at line 37 of file rmdec.c.

Referenced by ff_rm_parse_packet(), and rm_read_audio_stream_info().

◆ DEINT_ID_INT0

#define DEINT_ID_INT0   MKTAG('I', 'n', 't', '0')

no interleaving needed

Definition at line 38 of file rmdec.c.

Referenced by rm_read_audio_stream_info().

◆ DEINT_ID_INT4

#define DEINT_ID_INT4   MKTAG('I', 'n', 't', '4')

interleaving for 28.8

Definition at line 39 of file rmdec.c.

Referenced by ff_rm_parse_packet(), and rm_read_audio_stream_info().

◆ DEINT_ID_SIPR

#define DEINT_ID_SIPR   MKTAG('s', 'i', 'p', 'r')

interleaving for Sipro

Definition at line 40 of file rmdec.c.

Referenced by ff_rm_parse_packet(), and rm_read_audio_stream_info().

◆ DEINT_ID_VBRF

#define DEINT_ID_VBRF   MKTAG('v', 'b', 'r', 'f')

VBR case for AAC.

Definition at line 41 of file rmdec.c.

Referenced by ff_rm_parse_packet(), ff_rm_retrieve_cache(), and rm_read_audio_stream_info().

◆ DEINT_ID_VBRS

#define DEINT_ID_VBRS   MKTAG('v', 'b', 'r', 's')

VBR case for AAC.

Definition at line 42 of file rmdec.c.

Referenced by ff_rm_parse_packet(), ff_rm_retrieve_cache(), and rm_read_audio_stream_info().

◆ RAW_PACKET_SIZE

#define RAW_PACKET_SIZE   1000

Definition at line 698 of file rmdec.c.

Function Documentation

◆ get_strl()

static void get_strl ( AVIOContext * pb,
char * buf,
int buf_size,
int len )
inlinestatic

Definition at line 70 of file rmdec.c.

Referenced by ff_rm_read_mdpr_codecdata(), get_str8(), and rm_read_metadata().

◆ get_str8()

static void get_str8 ( AVIOContext * pb,
char * buf,
int buf_size )
static

Definition at line 78 of file rmdec.c.

Referenced by ff_rm_read_mdpr_codecdata(), rm_read_audio_stream_info(), and rm_read_header().

◆ rm_read_extradata()

static int rm_read_extradata ( AVFormatContext * s,
AVIOContext * pb,
AVCodecParameters * par,
unsigned size )
static

Definition at line 83 of file rmdec.c.

Referenced by ff_rm_read_mdpr_codecdata(), and rm_read_audio_stream_info().

◆ rm_read_metadata()

static void rm_read_metadata ( AVFormatContext * s,
AVIOContext * pb,
int wide )
static

Definition at line 92 of file rmdec.c.

Referenced by rm_read_audio_stream_info(), and rm_read_header().

◆ ff_rm_alloc_rmstream()

RMStream * ff_rm_alloc_rmstream ( void )

◆ ff_rm_free_rmstream()

void ff_rm_free_rmstream ( RMStream * rms)

Definition at line 115 of file rmdec.c.

Referenced by rdt_close_context(), and rm_read_close().

◆ rm_read_audio_stream_info()

static int rm_read_audio_stream_info ( AVFormatContext * s,
AVIOContext * pb,
AVStream * st,
RMStream * ast,
int read_all )
static

Definition at line 123 of file rmdec.c.

Referenced by ff_rm_read_mdpr_codecdata(), and rm_read_header_old().

◆ ff_rm_read_mdpr_codecdata()

int ff_rm_read_mdpr_codecdata ( AVFormatContext * s,
AVIOContext * pb,
AVStream * st,
RMStream * rst,
unsigned int codec_data_size,
const uint8_t * mime )

Read the MDPR chunk, which contains stream-specific codec initialization parameters.

Parameters
scontext containing RMContext and AVIOContext for stream reading
pbcontext to read the data from
stthe stream that the MDPR chunk belongs to and where to store the parameters read from the chunk into
rstreal-specific stream information
codec_data_sizesize of the MDPR chunk
Returns
0 on success, errno codes on error

Definition at line 318 of file rmdec.c.

Referenced by ivr_read_header(), rdt_load_mdpr(), rm_read_header(), and rm_read_multi().

◆ rm_read_index()

static int rm_read_index ( AVFormatContext * s)
static

this function assumes that the demuxer has already seeked to the start of the INDX chunk, and will bail out if not.

Definition at line 432 of file rmdec.c.

Referenced by rm_read_header().

◆ rm_read_header_old()

static int rm_read_header_old ( AVFormatContext * s)
static

Definition at line 495 of file rmdec.c.

Referenced by rm_read_header().

◆ rm_read_multi()

static int rm_read_multi ( AVFormatContext * s,
AVIOContext * pb,
AVStream * st,
char * mime )
static

Definition at line 510 of file rmdec.c.

Referenced by ivr_read_header(), and rm_read_header().

◆ rm_read_header()

static int rm_read_header ( AVFormatContext * s)
static

Definition at line 551 of file rmdec.c.

◆ get_num()

static int get_num ( AVIOContext * pb,
int * len )
static

Definition at line 681 of file rmdec.c.

Referenced by rm_assemble_video_frame().

◆ rm_sync()

static int rm_sync ( AVFormatContext * s,
int64_t * timestamp,
int * flags,
int * stream_index,
int64_t * pos )
static

Definition at line 700 of file rmdec.c.

Referenced by rm_read_dts(), and rm_read_packet().

◆ rm_assemble_video_frame()

static int rm_assemble_video_frame ( AVFormatContext * s,
AVIOContext * pb,
RMDemuxContext * rm,
RMStream * vst,
AVPacket * pkt,
int len,
int * pseq,
int64_t * timestamp )
static

Definition at line 780 of file rmdec.c.

Referenced by ff_rm_parse_packet().

◆ rm_ac3_swap_bytes()

static void rm_ac3_swap_bytes ( AVStream * st,
AVPacket * pkt )
inlinestatic

Definition at line 885 of file rmdec.c.

Referenced by ff_rm_parse_packet().

◆ readfull()

static int readfull ( AVFormatContext * s,
AVIOContext * pb,
uint8_t * dst,
int n )
static

Definition at line 899 of file rmdec.c.

Referenced by ff_rm_parse_packet().

◆ ff_rm_parse_packet()

int ff_rm_parse_packet ( AVFormatContext * s,
AVIOContext * pb,
AVStream * st,
RMStream * rst,
int len,
AVPacket * pkt,
int * seq,
int flags,
int64_t ts )

Parse one rm-stream packet from the input bytestream.

Parameters
scontext containing RMContext and AVIOContext for stream reading
pbcontext to read the data from
ststream to which the packet to be read belongs
rstReal-specific stream information
lenpacket length to read from the input
pktpacket location to store the parsed packet data
seqpointer to an integer containing the sequence number, may be updated
flagsthe packet flags
tstimestamp of the current packet
Returns
<0 on error, 0 if a packet was placed in the pkt pointer. A value >0 means that no data was placed in pkt, but that cached data is available by calling ff_rm_retrieve_cache().

Definition at line 910 of file rmdec.c.

Referenced by ivr_read_packet(), rdt_parse_packet(), and rm_read_packet().

◆ ff_rm_retrieve_cache()

int ff_rm_retrieve_cache ( AVFormatContext * s,
AVIOContext * pb,
AVStream * st,
RMStream * rst,
AVPacket * pkt )

Retrieve one cached packet from the rm-context.

The real container can store several packets (as interpreted by the codec) in a single container packet, which means the demuxer holds some back when the first container packet is parsed and returned. The result is that rm->audio_pkt_cnt is a positive number, the amount of cached packets. Using this function, each of those packets can be retrieved sequentially.

Parameters
scontext containing RMContext and AVIOContext for stream reading
pbcontext to read the data from
ststream that this packet belongs to
rstReal-specific stream information
pktlocation to store the packet data
Returns
the number of samples left for subsequent calls to this same function, or 0 if all samples have been retrieved.

Definition at line 998 of file rmdec.c.

Referenced by ivr_read_packet(), rdt_parse_packet(), and rm_read_packet().

◆ rm_read_packet()

static int rm_read_packet ( AVFormatContext * s,
AVPacket * pkt )
static

Definition at line 1030 of file rmdec.c.

◆ rm_read_close()

static int rm_read_close ( AVFormatContext * s)
static

Definition at line 1090 of file rmdec.c.

◆ rm_probe()

static int rm_probe ( const AVProbeData * p)
static

Definition at line 1100 of file rmdec.c.

◆ rm_read_dts()

static int64_t rm_read_dts ( AVFormatContext * s,
int stream_index,
int64_t * ppos,
int64_t pos_limit )
static

Definition at line 1113 of file rmdec.c.

◆ rm_read_seek()

static int rm_read_seek ( AVFormatContext * s,
int stream_index,
int64_t pts,
int flags )
static

Definition at line 1159 of file rmdec.c.

◆ ivr_probe()

static int ivr_probe ( const AVProbeData * p)
static

Definition at line 1192 of file rmdec.c.

◆ ivr_read_header()

static int ivr_read_header ( AVFormatContext * s)
static

Definition at line 1201 of file rmdec.c.

◆ ivr_read_packet()

static int ivr_read_packet ( AVFormatContext * s,
AVPacket * pkt )
static

Definition at line 1341 of file rmdec.c.

Variable Documentation

◆ ff_rm_demuxer

const FFInputFormat ff_rm_demuxer
Initial value:
= {
.p.name = "rm",
.p.long_name = NULL_IF_CONFIG_SMALL("RealMedia"),
.priv_data_size = sizeof(RMDemuxContext),
.flags_internal = FF_INFMT_FLAG_INIT_CLEANUP,
}
static int read_packet(void *opaque, uint8_t *buf, int buf_size)
static int read_probe(const AVProbeData *p)
Definition cdg.c:30
#define FF_INFMT_FLAG_INIT_CLEANUP
For an FFInputFormat with this flag set read_close() needs to be called by the caller upon read_heade...
Definition demux.h:35
static int read_header(FFV1Context *f, RangeCoder *c)
Definition ffv1dec.c:578
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition internal.h:88
static av_cold int read_close(AVFormatContext *ctx)
Definition libcdio.c:143
static int read_seek(AVFormatContext *ctx, int stream_index, int64_t timestamp, int flags)
Definition libcdio.c:151
static int rm_read_header(AVFormatContext *s)
Definition rmdec.c:551
static int rm_probe(const AVProbeData *p)
Definition rmdec.c:1100
static int rm_read_close(AVFormatContext *s)
Definition rmdec.c:1090
static int64_t rm_read_dts(AVFormatContext *s, int stream_index, int64_t *ppos, int64_t pos_limit)
Definition rmdec.c:1113
static int rm_read_seek(AVFormatContext *s, int stream_index, int64_t pts, int flags)
Definition rmdec.c:1159
static int rm_read_packet(AVFormatContext *s, AVPacket *pkt)
Definition rmdec.c:1030
static int64_t read_timestamp(AVFormatContext *s, int stream_index, int64_t *ppos, int64_t pos_limit, int64_t(*read_timestamp)(struct AVFormatContext *, int, int64_t *, int64_t))
Definition seek.c:281

Definition at line 1171 of file rmdec.c.

◆ ff_rdt_demuxer

const FFInputFormat ff_rdt_demuxer
Initial value:
= {
.p.name = "rdt",
.p.long_name = NULL_IF_CONFIG_SMALL("RDT demuxer"),
.p.flags = AVFMT_NOFILE,
.priv_data_size = sizeof(RMDemuxContext),
}
#define AVFMT_NOFILE
Demuxer will use avio_open, no opened file should be provided by the caller.
Definition avformat.h:488

Definition at line 1184 of file rmdec.c.

Referenced by rdt_init().

◆ ff_ivr_demuxer

const FFInputFormat ff_ivr_demuxer
Initial value:
= {
.p.name = "ivr",
.p.long_name = NULL_IF_CONFIG_SMALL("IVR (Internet Video Recording)"),
.p.extensions = "ivr",
.priv_data_size = sizeof(RMDemuxContext),
.flags_internal = FF_INFMT_FLAG_INIT_CLEANUP,
}
static int ivr_probe(const AVProbeData *p)
Definition rmdec.c:1192
static int ivr_read_header(AVFormatContext *s)
Definition rmdec.c:1201
static int ivr_read_packet(AVFormatContext *s, AVPacket *pkt)
Definition rmdec.c:1341

Definition at line 1422 of file rmdec.c.