22 #include "libavutil/intreadwrite.h"
23 #include "libavutil/intfloat.h"
32 int64_t pos, avail_size;
54 if (size <= avail_size)
79 int len, fill_size, size1, frame_offset,
id;
151 av_dlog(s,
"seek to %"PRIx64
" -> %"PRIx64
"\n", pos1, pos);
163 av_dlog(s,
"dts=%0.6f\n", dts / 1000000.0);
173 int64_t pos_min, pos_max;
181 pts_start =
get_dts(s, pos_min);
185 if (pts - 100000 > pts_start)
190 pts_start =
get_dts(s, pos_min);
194 if (pts - 100000 <= pts_start) {
201 if (newpos == pos_min)
206 if (newpts - 100000 <= pts) {
248 ffm->
file_size = (UINT64_C(1) << 63) - 1;
261 case MKBETAG(
'M',
'A',
'I',
'N'):
265 case MKBETAG(
'C',
'O',
'M',
'M'):
290 case MKBETAG(
'S',
'T',
'V',
'I'):
303 avio_get_str(pb, INT_MAX, rc_eq_buf,
sizeof(rc_eq_buf));
336 case MKBETAG(
'S',
'T',
'A',
'U'):
375 if (tag ==
MKTAG(
'F',
'F',
'M',
'2'))
377 if (tag !=
MKTAG(
'F',
'F',
'M',
'1'))
389 ffm->
file_size = (UINT64_C(1) << 63) - 1;
395 for(i=0;i<nb_streams;i++) {
427 avio_get_str(pb, INT_MAX, rc_eq_buf,
sizeof(rc_eq_buf));
504 av_dlog(s,
"pos=%08"PRIx64
" spos=%"PRIx64
", write_index=%"PRIx64
" size=%"PRIx64
"\n",
558 int64_t pos_min, pos_max, pos;
559 int64_t pts_min, pts_max, pts;
562 av_dlog(s,
"wanted_pts=%0.6f\n", wanted_pts / 1000000.0);
577 while (pos_min <= pos_max) {
580 if (pts_min > wanted_pts || pts_max <= wanted_pts) {
581 pos = pts_min > wanted_pts ? pos_min : pos_max;
585 pos1 = (double)(pos_max - pos_min) * (double)(wanted_pts - pts_min) /
586 (double)(pts_max - pts_min);
590 else if (pos >= pos_max)
594 if (pts == wanted_pts) {
596 }
else if (pts > wanted_pts) {
620 p->
buf[0] ==
'F' && p->
buf[1] ==
'F' && p->
buf[2] ==
'M' &&
621 (p->
buf[3] ==
'1' || p->
buf[3] ==
'2'))
void av_free_packet(AVPacket *pkt)
Free a packet.
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
char * av_strdup(const char *s) av_malloc_attrib
Duplicate the string s.
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)
AVCodecContext * codec
Codec context associated with this stream.
void av_log(void *avcl, int level, const char *fmt,...) av_printf_format(3
Send the specified message to the log if the level is less than or equal to the current av_log_level...
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
av_dlog(ac->avr,"%d samples - audio_convert: %s to %s (%s)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt), use_generic?ac->func_descr_generic:ac->func_descr)
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
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
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...
void av_freep(void *ptr)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer ...
static int ffm_resync(AVFormatContext *s, int state)
int bit_rate_tolerance
number of bits the bitstream is allowed to diverge from the reference.
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.
#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...
unsigned char * buf
Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero.
int me_cmp
motion estimation comparison function
static int ffm_is_avail_data(AVFormatContext *s, int size)
static av_cold int read_close(AVFormatContext *ctx)
AVStream * avformat_new_stream(AVFormatContext *s, const AVCodec *c)
Add a new stream to a media file.
int duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
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)
void * priv_data
Format private data.
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
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 rc_buffer_size
decoder bitstream buffer size
int intra_dc_precision
precision of the intra DC coefficient - 8
unsigned int nb_streams
A list of all streams in the file.
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.
const char * rc_eq
rate control equation
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)
int frame_size
Number of samples per channel in an audio frame.
static int ffm_close(AVFormatContext *s)
enum AVMediaType codec_type
int sample_rate
samples per second
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)
AVIOContext * pb
I/O context.
static int read_packet(AVFormatContext *ctx, AVPacket *pkt)
#define MKTAG(a, b, c, d)
float rc_buffer_aggressivity
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.
#define MKBETAG(a, b, c, d)
float qcompress
amount of qscale change between easy & hard scenes (0.0-1.0)
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
uint8_t packet[FFM_PACKET_SIZE]
static av_always_inline double av_int2double(uint64_t i)
Reinterpret a 64-bit integer as a double.
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)
int channels
number of audio channels
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed...
int me_method
Motion estimation algorithm used for video coding.
int rc_min_rate
minimum bitrate
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