30 #define RPL_SIGNATURE "ARMovie\x0A"
31 #define RPL_SIGNATURE_SIZE 8
34 #define RPL_LINE_LENGTH 256
57 for (
i = 0;
i < bufsize - 1;
i++) {
73 unsigned long result = 0;
75 if (result > (0x7FFFFFFF - 9) / 10)
77 result = 10 * result + *
line -
'0';
104 if (num > (INT64_MAX - 9) / 10ULL || den > INT64_MAX / 10ULL)
106 num = 10 * num + (*
line -
'0');
127 int32_t video_format, audio_format, chunk_catalog_offset, number_of_chunks;
179 for (
i = 0;
i < 3;
i++)
198 ast->codecpar->codec_tag = audio_format;
206 if (ast->codecpar->bits_per_coded_sample == 0)
207 ast->codecpar->bits_per_coded_sample = 4;
209 ast->codecpar->bit_rate = ast->codecpar->sample_rate *
210 (
int64_t)ast->codecpar->channels;
211 if (ast->codecpar->bit_rate > INT64_MAX / ast->codecpar->bits_per_coded_sample)
213 ast->codecpar->bit_rate *= ast->codecpar->bits_per_coded_sample;
216 switch (audio_format) {
218 if (ast->codecpar->bits_per_coded_sample == 16) {
222 }
else if (ast->codecpar->bits_per_coded_sample == 8) {
238 if (ast->codecpar->bits_per_coded_sample == 8) {
243 }
else if (ast->codecpar->bits_per_coded_sample == 4) {
254 for (
i = 0;
i < 3;
i++)
258 if (
s->nb_streams == 0)
264 "Don't know how to split frames for video format %s. "
268 if (number_of_chunks == INT_MAX)
276 chunk_catalog_offset =
286 avio_seek(pb, chunk_catalog_offset, SEEK_SET);
287 total_audio_size = 0;
288 for (
i = 0; !
error &&
i < number_of_chunks;
i++) {
291 if (3 != sscanf(
line,
"%"SCNd64
" , %"SCNd64
" ; %"SCNd64,
292 &
offset, &video_size, &audio_size)) {
301 audio_size, audio_size * 8, 0);
302 if (total_audio_size/8 + (uint64_t)audio_size >= INT64_MAX/8)
304 total_audio_size += audio_size * 8;
366 if (ret != index_entry->
size) {
int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
fseek() equivalent for AVIOContext.
int avio_feof(AVIOContext *s)
Similar to feof() but also returns nonzero on read errors.
int64_t avio_skip(AVIOContext *s, int64_t offset)
Skip given number of bytes forward.
unsigned int avio_rl32(AVIOContext *s)
int avio_r8(AVIOContext *s)
static int read_packet(void *opaque, uint8_t *buf, int buf_size)
static int read_header(FFV1Context *f)
@ AV_CODEC_ID_ADPCM_IMA_EA_SEAD
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
AVStream * avformat_new_stream(AVFormatContext *s, const AVCodec *c)
Add a new stream to a media file.
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.
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define AVERROR_EOF
End of file.
#define AV_LOG_WARNING
Something somehow does not look correct.
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
#define av_fourcc2str(fourcc)
char * av_stristr(const char *s1, const char *s2)
Locate the first case-independent occurrence in the string haystack of the string needle.
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.
common internal API header
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
void avpriv_report_missing_feature(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
#define RPL_LINE_LENGTH
256 is arbitrary, but should be big enough for any reasonable file.
static int read_line(AVIOContext *pb, char *line, int bufsize)
static int rpl_read_header(AVFormatContext *s)
static int rpl_read_packet(AVFormatContext *s, AVPacket *pkt)
static int32_t read_int(const char *line, const char **endptr, int *error)
#define RPL_SIGNATURE_SIZE
static int32_t read_line_and_int(AVIOContext *pb, int *error)
static int rpl_probe(const AVProbeData *p)
AVInputFormat ff_rpl_demuxer
static AVRational read_fps(const char *line, int *error)
Parsing for fps, which can be a fraction.
int bits_per_coded_sample
The number of bits per sample in the codedwords.
enum AVMediaType codec_type
General type of the encoded data.
uint32_t codec_tag
Additional information about the codec (corresponds to the AVI FOURCC).
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
int64_t timestamp
Timestamp in AVStream.time_base units, preferably the time from which on correctly decoded frames are...
This structure stores compressed data.
int flags
A combination of AV_PKT_FLAG values.
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
This structure contains the data a format has to probe a file.
unsigned char * buf
Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero.
Rational number (pair of numerator and denominator).
AVCodecParameters * codecpar
Codec parameters associated with this stream.
int64_t duration
Decoding: duration of the stream, in stream time base.
AVIndexEntry * index_entries
Only used if the format does not support seeking natively.
#define avpriv_request_sample(...)
static void error(const char *err)
static const uint8_t offset[127][2]