37 int64_t pos, avail_size;
59 if (size <= avail_size)
84 int len, fill_size, size1, frame_offset,
id;
85 int64_t last_pos = -1;
126 seekback =
FFMAX(seekback, 0);
163 av_dlog(s,
"seek to %"PRIx64
" -> %"PRIx64
"\n", pos1, pos);
175 av_dlog(s,
"dts=%0.6f\n", dts / 1000000.0);
185 int64_t pos_min, pos_max;
193 pts_start =
get_dts(s, pos_min);
197 if (pts - 100000 > pts_start)
202 pts_start =
get_dts(s, pos_min);
206 if (pts - 100000 <= pts_start) {
213 if (newpos == pos_min)
218 if (newpts - 100000 <= pts) {
271 int f_main = 0, f_cprv = -1, f_stvi = -1, f_stau = -1;
290 ffm->
file_size = (UINT64_C(1) << 63) - 1;
303 case MKBETAG(
'M',
'A',
'I',
'N'):
311 case MKBETAG(
'C',
'O',
'M',
'M'):
312 f_cprv = f_stvi = f_stau = 0;
334 case MKBETAG(
'S',
'T',
'V',
'I'):
357 avio_get_str(pb, INT_MAX, rc_eq_buf,
sizeof(rc_eq_buf));
390 case MKBETAG(
'S',
'T',
'A',
'U'):
399 case MKBETAG(
'C',
'P',
'R',
'V'):
416 case MKBETAG(
'S',
'2',
'V',
'I'):
431 case MKBETAG(
'S',
'2',
'A',
'U'):
478 if (tag ==
MKTAG(
'F',
'F',
'M',
'2'))
480 if (tag !=
MKTAG(
'F',
'F',
'M',
'1'))
492 ffm->
file_size = (UINT64_C(1) << 63) - 1;
535 avio_get_str(pb, INT_MAX, rc_eq_buf,
sizeof(rc_eq_buf));
611 av_dlog(s,
"pos=%08"PRIx64
" spos=%"PRIx64
", write_index=%"PRIx64
" size=%"PRIx64
"\n",
665 int64_t pos_min, pos_max, pos;
666 int64_t pts_min, pts_max,
pts;
669 av_dlog(s,
"wanted_pts=%0.6f\n", wanted_pts / 1000000.0);
684 while (pos_min <= pos_max) {
687 if (pts_min > wanted_pts || pts_max <= wanted_pts) {
688 pos = pts_min > wanted_pts ? pos_min : pos_max;
692 pos1 = (double)(pos_max - pos_min) * (double)(wanted_pts - pts_min) /
693 (double)(pts_max - pts_min);
697 else if (pos >= pos_max)
701 if (pts == wanted_pts) {
703 }
else if (pts > wanted_pts) {
727 p->
buf[0] ==
'F' && p->
buf[1] ==
'F' && p->
buf[2] ==
'M' &&
728 (p->
buf[3] ==
'1' || p->
buf[3] ==
'2'))
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
int64_t avio_size(AVIOContext *s)
Get the filesize.
void av_free_packet(AVPacket *pkt)
Free a packet.
char * recommended_encoder_configuration
String containing paris of key and values describing recommended encoder configuration.
AVCodec * avcodec_find_encoder(enum AVCodecID id)
Find a registered encoder with a matching codec ID.
int mpeg_quant
0-> h263 quant 1-> mpeg quant
int dct_algo
DCT algorithm, see FF_DCT_* below.
float qblur
amount of qscale smoothing over time (0.0-1.0)
int64_t pos
byte position in stream, -1 if unknown
int max_b_frames
maximum number of B-frames between non-B-frames Note: The output will be delayed by max_b_frames+1 re...
static int read_seek(AVFormatContext *ctx, int stream_index, int64_t timestamp, int flags)
int av_set_options_string(void *ctx, const char *opts, const char *key_val_sep, const char *pairs_sep)
Parse the key/value pairs list in opts.
int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
fseek() equivalent for AVIOContext.
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
static int ffm_append_recommended_configuration(AVStream *st, char **conf)
int64_t avio_skip(AVIOContext *s, int64_t offset)
Skip given number of bytes forward.
unsigned int avio_rb16(AVIOContext *s)
int frame_skip_cmp
frame skip comparison function
static int ffm_read_packet(AVFormatContext *s, AVPacket *pkt)
static int ffm_read_data(AVFormatContext *s, uint8_t *buf, int size, int header)
float i_quant_offset
qscale offset between P and I-frames
int scenechange_threshold
scene change detection threshold 0 is default, larger means fewer detected scene changes.
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
static int ffm_resync(AVFormatContext *s, int state)
#define av_assert0(cond)
assert() equivalent, that is always enabled.
int bit_rate_tolerance
number of bits the bitstream is allowed to diverge from the reference.
attribute_deprecated float rc_buffer_aggressivity
static av_always_inline double av_int2double(uint64_t i)
Reinterpret a 64-bit integer as a double.
attribute_deprecated const char * rc_eq
static int64_t get_dts(AVFormatContext *s, int64_t pos)
#define FRAME_HEADER_SIZE
int me_range
maximum motion estimation search range in subpel units If 0 then no limit.
unsigned int avio_rb32(AVIOContext *s)
#define CODEC_FLAG_GLOBAL_HEADER
Place global headers in extradata instead of every keyframe.
static av_cold int end(AVCodecContext *avctx)
float b_quant_factor
qscale factor between IP and B-frames If > 0 then the last P-frame quantizer will be used (q= lastp_q...
AVStream * avformat_new_stream(AVFormatContext *s, const AVCodec *c)
Add a new stream to a media file.
int me_cmp
motion estimation comparison function
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_RB32
AVStream ** streams
A list of all streams in the file.
static int ffm_is_avail_data(AVFormatContext *s, int size)
int av_reallocp(void *ptr, size_t size)
Allocate or reallocate a block of memory.
#define AVERROR_EOF
End of file.
static av_cold int read_close(AVFormatContext *ctx)
uint64_t avio_rb64(AVIOContext *s)
static av_always_inline int64_t avio_tell(AVIOContext *s)
ftell() equivalent for AVIOContext.
static const uint8_t header[24]
int duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
int avio_read(AVIOContext *s, unsigned char *buf, int size)
Read size bytes from AVIOContext into buf.
static int ffm2_read_header(AVFormatContext *s)
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
int av_new_packet(AVPacket *pkt, int size)
Allocate the payload of a packet and initialize its fields with default values.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static void adjust_write_index(AVFormatContext *s)
unsigned int avio_rl32(AVIOContext *s)
int ffio_set_buf_size(AVIOContext *s, int buf_size)
int qmax
maximum quantizer
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
int rc_max_rate
maximum bitrate
simple assert() macros that are a bit more flexible than ISO C assert().
float i_quant_factor
qscale factor between P and I-frames If > 0 then the last p frame quantizer will be used (q= lastp_q*...
static int ffm_probe(AVProbeData *p)
int flags
A combination of AV_PKT_FLAG values.
int avio_r8(AVIOContext *s)
AVCodecContext * codec
Codec context associated with this stream.
int rc_buffer_size
decoder bitstream buffer size
int intra_dc_precision
precision of the intra DC coefficient - 8
unsigned char * buf
Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero.
unsigned int nb_streams
Number of elements in AVFormatContext.streams.
int refs
number of reference frames
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.
uint8_t header[FRAME_HEADER_SIZE+4]
int mb_decision
macroblock decision mode
int max_qdiff
maximum quantizer difference between frames
int buffer_size
Maximum buffer size.
int thread_count
thread count is used to decide how many independent tasks should be passed to execute() ...
static int read_header(FFV1Context *f)
#define av_dlog(pctx,...)
av_dlog macros
static int read_packet(void *opaque, uint8_t *buf, int buf_size)
int frame_size
Number of samples per channel in an audio frame.
static int ffm_close(AVFormatContext *s)
enum AVMediaType codec_type
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_WB32 unsigned int_TMPL AV_RB24
char * av_strdup(const char *s)
Duplicate the string s.
int sample_rate
samples per second
AVIOContext * pb
I/O context.
main external API structure.
int qmin
minimum quantizer
unsigned int codec_tag
fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
static int write_index(NUTContext *nut, AVIOContext *bc)
static int ffm_read_header(AVFormatContext *s)
float b_quant_offset
qscale offset between IP and B-frames
This structure contains the data a format has to probe a file.
float qcompress
amount of qscale change between easy & hard scenes (0.0-1.0)
size_t av_strlcat(char *dst, const char *src, size_t size)
Append the string src to the string dst, but to a total length of no more than size - 1 bytes...
static int64_t pts
Global timestamp for the audio frames.
const AVClass * priv_class
AVClass for the private context.
AVInputFormat ff_ffm_demuxer
static int64_t ffm_seek1(AVFormatContext *s, int64_t pos1)
int gop_size
the number of pictures in a group of pictures, or 0 for intra_only
unsigned int avio_rl16(AVIOContext *s)
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_RB64
uint8_t packet[FFM_PACKET_SIZE]
int64_t pos
position in the file of the current buffer
static int ffm_seek(AVFormatContext *s, int stream_index, int64_t wanted_pts, int flags)
#define MKBETAG(a, b, c, d)
int eof_reached
true if eof reached
int channels
number of audio channels
void * priv_data
Format private data.
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed...
int avio_get_str(AVIOContext *pb, int maxlen, char *buf, int buflen)
Read a string from pb into buf.
int avio_feof(AVIOContext *s)
feof() equivalent for AVIOContext.
int me_method
Motion estimation algorithm used for video coding.
int rc_min_rate
minimum bitrate
#define MKTAG(a, b, c, d)
This structure stores compressed data.
int me_subpel_quality
subpel ME quality
int strict_std_compliance
strictly follow the standard (MPEG4, ...).
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
int keyint_min
minimum GOP size