30 #define DEINT_ID_GENR MKTAG('g', 'e', 'n', 'r')
31 #define DEINT_ID_INT0 MKTAG('I', 'n', 't', '0')
32 #define DEINT_ID_INT4 MKTAG('I', 'n', 't', '4')
33 #define DEINT_ID_SIPR MKTAG('s', 'i', 'p', 'r')
34 #define DEINT_ID_VBRF MKTAG('v', 'b', 'r', 'f')
35 #define DEINT_ID_VBRS MKTAG('v', 'b', 'r', 's')
63 { 0, 63 }, { 1, 22 }, { 2, 44 }, { 3, 90 },
64 { 5, 81 }, { 7, 31 }, { 8, 86 }, { 9, 58 },
65 { 10, 36 }, { 12, 68 }, { 13, 39 }, { 14, 73 },
66 { 15, 53 }, { 16, 69 }, { 17, 57 }, { 19, 88 },
67 { 20, 34 }, { 21, 71 }, { 24, 46 }, { 25, 94 },
68 { 26, 54 }, { 28, 75 }, { 29, 50 }, { 32, 70 },
69 { 33, 92 }, { 35, 74 }, { 38, 85 }, { 40, 56 },
70 { 42, 87 }, { 43, 65 }, { 45, 59 }, { 48, 79 },
71 { 49, 93 }, { 51, 89 }, { 55, 95 }, { 61, 76 },
72 { 67, 83 }, { 77, 80 }
88 if (buf_size > 0) *q =
'\0';
116 get_strl(pb, buf,
sizeof(buf), len);
147 if ((startpos + header_size) >=
avio_tell(pb) + 2) {
153 if ((startpos + header_size) >
avio_tell(pb))
161 int flavor, sub_packet_h, coded_framesize, sub_packet_size;
162 int codecdata_length;
228 if(sub_packet_size <= 0){
246 if (codecdata_length >= 1) {
309 if (v ==
MKTAG(0xfd,
'a',
'r',
'.')) {
339 0x10000, fps, (1 << 30) - 1);
360 unsigned int size, n_pkts, str_id, next_off, n, pos, pts;
380 "Invalid stream index %d for index at pos %"PRId64
"\n",
385 "Nr. of packets in packet index for stream index %d "
386 "exceeds filesize (%"PRId64
" at %"PRId64
" = %d)\n",
392 for (n = 0; n < n_pkts; n++) {
402 if (next_off &&
avio_tell(pb) < next_off &&
405 "Non-linear index detected, not supported\n");
434 unsigned int data_off = 0, indx_off = 0;
439 if (tag ==
MKTAG(
'.',
'r',
'a', 0xfd)) {
442 }
else if (tag !=
MKTAG(
'.',
'R',
'M',
'F')) {
457 av_dlog(s,
"tag=%c%c%c%c (%08x) size=%d\n",
464 if (tag_size < 10 && tag !=
MKTAG(
'D',
'A',
'T',
'A'))
467 case MKTAG(
'P',
'R',
'O',
'P'):
481 case MKTAG(
'C',
'O',
'N',
'T'):
484 case MKTAG(
'M',
'D',
'P',
'R'):
506 case MKTAG(
'D',
'A',
'T',
'A'):
523 avio_seek(pb, indx_off, SEEK_SET) >= 0) {
543 return (n << 16) | n1;
548 #define RAW_PACKET_SIZE 1000
554 uint32_t
state=0xFFFFFFFF;
565 state= (state<<8) +
avio_r8(pb);
567 if(state ==
MKBETAG(
'I',
'N',
'D',
'X')){
568 int n_pkts, expected_len;
572 expected_len = 20 + n_pkts * 14;
576 else if (len != expected_len)
578 "Index size %d (%d pkts) is wrong, should be %d.\n",
579 len, n_pkts, expected_len);
584 }
else if (state ==
MKBETAG(
'D',
'A',
'T',
'A')) {
586 "DATA tag in middle of chunk, file may be broken.\n");
589 if(state > (
unsigned)0xFFFF || state <= 12)
623 int hdr, seq, pic_num, len2, pos;
659 if((seq & 0x7F) == 1 || vst->
curpic_num != pic_num){
660 vst->
slices = ((hdr & 0x3F) << 1) + 1;
671 len =
FFMIN(len, pos);
710 for (j=0;j<pkt->
size;j+=2) {
711 FFSWAP(
int, ptr[0], ptr[1]);
723 int n, bs = sub_packet_h * framesize * 2 / 96;
725 for (n = 0; n < 38; n++) {
728 int o = bs * sipr_swaps[n][1];
731 for (j = 0; j < bs; j++, i++, o++) {
732 int x = (buf[i >> 1] >> (4 * (i & 1))) & 0xF,
733 y = (buf[o >> 1] >> (4 * (o & 1))) & 0xF;
735 buf[o >> 1] = (x << (4 * (o & 1))) |
736 (buf[o >> 1] & (0xF << (4 * !(o & 1))));
737 buf[i >> 1] = (y << (4 * (i & 1))) |
738 (buf[i >> 1] & (0xF << (4 * !(i & 1))));
746 int *seq,
int flags, int64_t timestamp)
772 for (x = 0; x < h/2; x++)
776 for (x = 0; x < w/sps; x++)
816 int seq= 128*(pkt->
data[2]&0x7F) + (pkt->
data[3]>>1);
819 seq |= (timestamp&~0x3FFF);
820 if(seq - timestamp > 0x2000) seq -= 0x4000;
821 if(seq - timestamp < -0x2000) seq += 0x4000;
826 pkt->
pts = timestamp;
865 int i,
len, res, seq = 1;
866 int64_t timestamp, pos;
884 flags = (seq++ == 1) ? 2 : 0;
887 len=
sync(s, ×tamp, &flags, &i, &pos);
892 if(len<0 || s->pb->eof_reached)
896 &seq, flags, timestamp);
897 if((flags&2) && (seq&0x7F) == 1)
926 if ((p->
buf[0] ==
'.' && p->
buf[1] ==
'R' &&
927 p->
buf[2] ==
'M' && p->
buf[3] ==
'F' &&
928 p->
buf[4] == 0 && p->
buf[5] == 0) ||
929 (p->
buf[0] ==
'.' && p->
buf[1] ==
'r' &&
930 p->
buf[2] ==
'a' && p->
buf[3] == 0xfd))
937 int64_t *ppos, int64_t pos_limit)
954 len=
sync(s, &dts, &flags, &stream_index2, &pos);
958 st = s->
streams[stream_index2];
966 if((flags&2) && (seq&0x7F) == 1){
969 if(stream_index2 == stream_index)
static int get_num(AVIOContext *pb, int *len)
void * av_mallocz(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
int64_t avio_size(AVIOContext *s)
Get the filesize.
#define DEINT_ID_INT0
no interleaving needed
int av_add_index_entry(AVStream *st, int64_t pos, int64_t timestamp, int size, int distance, int flags)
Add an index entry into a sorted list.
static void get_strl(AVIOContext *pb, char *buf, int buf_size, int len)
static int64_t rm_read_dts(AVFormatContext *s, int stream_index, int64_t *ppos, int64_t pos_limit)
int64_t pos
byte position in stream, -1 if unknown
int av_new_packet(AVPacket *pkt, int size)
Allocate the payload of a packet and initialize its fields with default values.
#define AV_LOG_WARNING
Something somehow does not look correct.
int index
stream index in AVFormatContext
int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
fseek() equivalent for AVIOContext.
#define FF_ARRAY_ELEMS(a)
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
unsigned int avio_rb16(AVIOContext *s)
int block_align
number of bytes per packet if constant and known or 0 Used by some WAV based audio codecs...
#define DEINT_ID_VBRS
VBR case for AAC.
static int rm_read_header(AVFormatContext *s, AVFormatParameters *ap)
int videobufpos
position for the next slice in the video buffer
int audio_stream_num
Stream number for audio packets.
Opaque data information usually continuous.
unsigned int avio_rb32(AVIOContext *s)
int id
format-specific stream ID
enum AVStreamParseType need_parsing
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
static int read_header(FFV1Context *f)
void av_free_packet(AVPacket *pkt)
Free a packet.
int curpic_num
picture number of current frame
static av_cold int read_close(AVFormatContext *ctx)
static int rm_read_index(AVFormatContext *s)
this function assumes that the demuxer has already seeked to the start of the INDX chunk...
static av_always_inline int64_t avio_tell(AVIOContext *s)
ftell() equivalent for AVIOContext.
#define DEINT_ID_GENR
interleaving for Cooker/Atrac
enum CodecID ff_codec_get_id(const AVCodecTag *tags, unsigned int tag)
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 get_str8(AVIOContext *pb, char *buf, int buf_size)
int avio_read(AVIOContext *s, unsigned char *buf, int size)
Read size bytes from AVIOContext into buf.
static int64_t start_time
static int rm_read_close(AVFormatContext *s)
unsigned int avio_rl32(AVIOContext *s)
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
int ff_rm_read_mdpr_codecdata(AVFormatContext *s, AVIOContext *pb, AVStream *st, RMStream *rst, int codec_data_size)
Read the MDPR chunk, which contains stream-specific codec initialization parameters.
#define DEINT_ID_VBRF
VBR case for AAC.
void av_log(void *avcl, int level, const char *fmt,...)
AVStream * avformat_new_stream(AVFormatContext *s, AVCodec *c)
Add a new stream to a media file.
static const unsigned char sipr_swaps[38][2]
int64_t pktpos
first slice position in file
AVRational avg_frame_rate
Average framerate.
RMStream * ff_rm_alloc_rmstream(void)
size_t av_strlcpy(char *dst, const char *src, size_t size)
Copy the string src to dst, but no more than size - 1 bytes, and null-terminate dst.
int flags
A combination of AV_PKT_FLAG values.
int avio_r8(AVIOContext *s)
AVCodecContext * codec
codec context
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
unsigned char * buf
Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero.
unsigned int nb_streams
A list of all streams in the file.
AVPacket pkt
place to store merged video frame / reordered audio data
int seekable
A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable.
int bit_rate
the average bitrate
int width
picture width / height.
AVInputFormat ff_rm_demuxer
static av_always_inline int64_t avio_skip(AVIOContext *s, int64_t offset)
Skip given number of bytes forward.
internal header for RIFF based (de)muxers do NOT include this in end user applications ...
static int read_probe(AVProbeData *p)
#define DEINT_ID_INT4
interleaving for 28.8
#define av_dlog(pctx,...)
av_dlog macros Useful to print debug messages that shouldn't get compiled in normally.
int coded_framesize
Descrambling parameters from container.
static void rm_ac3_swap_bytes(AVStream *st, AVPacket *pkt)
const AVCodecTag ff_rm_codec_tags[]
enum AVMediaType codec_type
#define DEINT_ID_SIPR
interleaving for Sipro
int sample_rate
samples per second
void ff_rm_reorder_sipr_data(uint8_t *buf, int sub_packet_h, int framesize)
Perform 4-bit block reordering for SIPR data.
main external API structure.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
unsigned int codec_tag
fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
static int rm_probe(AVProbeData *p)
static int read_packet(AVFormatContext *ctx, AVPacket *pkt)
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 av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
void * av_malloc(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
#define FF_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
This structure contains the data a format has to probe a file.
int audio_pkt_cnt
Output packet counter.
static int sync(AVFormatContext *s, int64_t *timestamp, int *flags, int *stream_index, int64_t *pos)
const char *const ff_rm_metadata[4]
AVInputFormat ff_rdt_demuxer
void ff_rm_free_rmstream(RMStream *rms)
int64_t duration
Decoding: duration of the stream, in stream time base.
int32_t deint_id
Length of each subpacket.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
const unsigned char ff_sipr_subpk_size[4]
int64_t start_time
Decoding: pts of the first frame of the stream, in stream time base.
int error_recognition
Error recognition; higher values will detect more errors but may misdetect some more or less valid pa...
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_header_old(AVFormatContext *s)
#define MKBETAG(a, b, c, d)
int eof_reached
true if eof reached
int channels
number of audio channels
static int rm_read_packet(AVFormatContext *s, AVPacket *pkt)
static int rm_read_audio_stream_info(AVFormatContext *s, AVIOContext *pb, AVStream *st, RMStream *ast, int read_all)
void * priv_data
Format private data.
static int rm_read_extradata(AVIOContext *pb, AVCodecContext *avctx, unsigned size)
int64_t audiotimestamp
Audio descrambling matrix parameters.
#define FFSWAP(type, a, b)
discard all frames except keyframes
int videobufsize
current assembled frame size
#define MKTAG(a, b, c, d)
enum AVDiscard discard
Selects which packets can be discarded at will and do not need to be demuxed.
AVRational r_frame_rate
Real base framerate of the stream.
int sub_packet_lengths[16]
Audio frame size from container.
static void rm_read_metadata(AVFormatContext *s, AVIOContext *pb, int wide)
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
#define AV_NOPTS_VALUE
Undefined timestamp value.