39 int64_t pos, avail_size;
64 if (size <= avail_size)
91 int fill_size, size1, frame_offset;
94 int64_t last_pos = -1;
140 seekback =
FFMAX(seekback, 0);
179 ff_dlog(s,
"seek to %"PRIx64
" -> %"PRIx64
"\n", pos1, pos);
191 ff_dlog(s,
"dts=%0.6f\n", dts / 1000000.0);
201 int64_t pos_min, pos_max;
209 pts_start =
get_dts(s, pos_min);
213 if (pts - 100000 > pts_start)
218 pts_start =
get_dts(s, pos_min);
222 if (pts - 100000 <= pts_start) {
229 if (newpos == pos_min)
234 if (newpts - 100000 <= pts) {
288 int f_main = 0, f_cprv = -1, f_stvi = -1, f_stau = -1;
307 ffm->
file_size = (UINT64_C(1) << 63) - 1;
320 case MKBETAG(
'M',
'A',
'I',
'N'):
328 case MKBETAG(
'C',
'O',
'M',
'M'):
329 f_cprv = f_stvi = f_stau = 0;
368 case MKBETAG(
'S',
'T',
'V',
'I'):
396 avio_get_str(pb, INT_MAX, rc_eq_buf,
sizeof(rc_eq_buf));
429 case MKBETAG(
'S',
'T',
'A',
'U'):
438 case MKBETAG(
'C',
'P',
'R',
'V'):
455 case MKBETAG(
'S',
'2',
'V',
'I'):
456 if (f_stvi++ || !size) {
470 case MKBETAG(
'S',
'2',
'A',
'U'):
471 if (f_stau++ || !size) {
521 if (tag ==
MKTAG(
'F',
'F',
'M',
'2'))
523 if (tag !=
MKTAG(
'F',
'F',
'M',
'1'))
535 ffm->
file_size = (UINT64_C(1) << 63) - 1;
596 avio_get_str(pb, INT_MAX, rc_eq_buf,
sizeof(rc_eq_buf));
678 ff_dlog(s,
"pos=%08"PRIx64
" spos=%"PRIx64
", write_index=%"PRIx64
" size=%"PRIx64
"\n",
732 int64_t pos_min, pos_max, pos;
733 int64_t pts_min, pts_max,
pts;
736 ff_dlog(s,
"wanted_pts=%0.6f\n", wanted_pts / 1000000.0);
751 while (pos_min <= pos_max) {
754 if (pts_min > wanted_pts || pts_max <= wanted_pts) {
755 pos = pts_min > wanted_pts ? pos_min : pos_max;
759 pos1 = (double)(pos_max - pos_min) * (double)(wanted_pts - pts_min) /
760 (double)(pts_max - pts_min);
764 else if (pos >= pos_max)
768 if (pts == wanted_pts) {
770 }
else if (pts > wanted_pts) {
794 p->
buf[0] ==
'F' && p->
buf[1] ==
'F' && p->
buf[2] ==
'M' &&
795 (p->
buf[3] ==
'1' || p->
buf[3] ==
'2'))
822 .priv_class = &ffm_class,
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
int64_t avio_size(AVIOContext *s)
Get the filesize.
static const AVOption options[]
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
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 dct_algo
DCT algorithm, see FF_DCT_* below.
#define AV_OPT_FLAG_EXPORT
The option is intended for exporting values to the caller.
float qblur
amount of qscale smoothing over time (0.0-1.0)
int64_t bit_rate
the average bitrate
#define LIBAVUTIL_VERSION_INT
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)
attribute_deprecated int frame_skip_cmp
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.
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
unsigned int avio_rb16(AVIOContext *s)
static int ffm_resync(AVFormatContext *s, uint32_t state)
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
attribute_deprecated int me_method
This option does nothing.
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
#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)
static av_cold int end(AVCodecContext *avctx)
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
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...
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
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)
#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 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. ...
static const AVClass ffm_class
int flags
AV_CODEC_FLAG_*.
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_...
static int ffm_probe(AVProbeData *p)
int flags
A combination of AV_PKT_FLAG values.
const AVCodecDescriptor * avcodec_descriptor_get(enum AVCodecID id)
int avio_r8(AVIOContext *s)
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.
int64_t rc_min_rate
minimum bitrate
common internal API header
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 width
picture width / height.
uint8_t header[FRAME_HEADER_SIZE+4]
int mb_decision
macroblock decision mode
Usually treated as AVMEDIA_TYPE_DATA.
int max_qdiff
maximum quantizer difference between frames
int buffer_size
Maximum buffer size.
attribute_deprecated int coder_type
int thread_count
thread count is used to decide how many independent tasks should be passed to execute() ...
static int read_header(FFV1Context *f)
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)
int av_reallocp(void *ptr, size_t size)
Allocate, reallocate, or free a block of memory through a pointer to a pointer.
char * av_strdup(const char *s)
Duplicate a string.
enum AVMediaType codec_type
attribute_deprecated int mpeg_quant
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
attribute_deprecated int scenechange_threshold
int sample_rate
samples per second
AVIOContext * pb
I/O context.
attribute_deprecated int b_frame_strategy
main external API structure.
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
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)
Describe the class of an AVClass context structure.
int avcodec_parameters_from_context(AVCodecParameters *par, const AVCodecContext *codec)
Fill the parameters struct based on the values from the supplied codec context.
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...
This struct describes the properties of a single codec described by an AVCodecID. ...
static int64_t pts
Global timestamp for the audio frames.
const AVClass * priv_class
AVClass for the private context.
#define AV_CODEC_FLAG_GLOBAL_HEADER
Place global headers in extradata instead of every keyframe.
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)
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
int eof_reached
true if eof reached
int channels
number of audio channels
void * priv_data
Format private data.
int flags2
AV_CODEC_FLAG2_*.
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed...
AVCodecParameters * codecpar
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.
#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 (MPEG-4, ...).
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
int64_t rc_max_rate
maximum bitrate
int keyint_min
minimum GOP size