60 "Unable to initialize hinting of stream %d\n", src_index);
86 for (
i = 0;
i < queue->
len;
i++)
128 for (
i = 0;
i < queue->
len; ) {
164 const uint8_t *needle,
int n_pos,
int n_len,
165 int *match_h_offset_ptr,
int *match_n_offset_ptr,
169 for (h_pos = 0; h_pos < h_len; h_pos++) {
171 int match_h_pos, match_n_pos;
174 while (h_pos + match_len < h_len && n_pos + match_len < n_len &&
175 needle[n_pos + match_len] == haystack[h_pos + match_len])
184 while (match_n_pos > 0 && match_h_pos > 0 &&
185 needle[match_n_pos - 1] == haystack[match_h_pos - 1]) {
192 *match_h_offset_ptr = match_h_pos;
193 *match_n_offset_ptr = match_n_pos;
194 *match_len_ptr = match_len;
217 int *match_sample,
int *match_offset,
220 while (queue->
len > 0) {
228 sample->size,
pos, match_offset, match_len) == 0) {
229 *match_sample =
sample->sample_number;
232 sample->offset = *match_offset + *match_len + 5;
271 int match_offset,
int match_len,
int *entries)
289 int match_sample, match_offset, match_len,
pos;
291 &match_offset, &match_len) < 0)
319 int64_t count_pos, entries_pos;
320 int count = 0, entries;
335 if (packet_len >
size || packet_len <= 12)
403 uint8_t *sample_data,
int sample_size)
446 hint_pkt->
data = buf;
447 hint_pkt->
pts = hint_pkt->
dts;
int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
fseek() equivalent for AVIOContext.
void avio_w8(AVIOContext *s, int b)
void avio_wb32(AVIOContext *s, unsigned int val)
void avio_wb16(AVIOContext *s, unsigned int val)
static av_always_inline int64_t avio_tell(AVIOContext *s)
ftell() equivalent for AVIOContext.
int avio_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer)
Return the written size and a pointer to the buffer.
void avio_write(AVIOContext *s, const unsigned char *buf, int size)
int avio_open_dyn_buf(AVIOContext **s)
Open a write only memory stream.
void ffio_free_dyn_buf(AVIOContext **s)
Free a dynamic buffer.
int ffio_open_dyn_packet_buf(AVIOContext **s, int max_packet_size)
Open a write only packetized memory stream with a maximum packet size of 'max_packet_size'.
AVCodecParameters * avcodec_parameters_alloc(void)
Allocate a new AVCodecParameters and set its fields to default values (unknown/invalid/0).
void avcodec_parameters_free(AVCodecParameters **ppar)
Free an AVCodecParameters instance and everything associated with it and write NULL to the supplied p...
#define MKTAG(a, b, c, d)
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
void avformat_free_context(AVFormatContext *s)
Free an AVFormatContext and all its streams.
int av_write_trailer(AVFormatContext *s)
Write the stream trailer to an output media file and free the file private data.
#define AV_LOG_WARNING
Something somehow does not look correct.
void * av_realloc_array(void *ptr, size_t nmemb, size_t size)
Allocate, reallocate, or free an array.
@ AVMEDIA_TYPE_DATA
Opaque data information usually continuous.
#define AV_NOPTS_VALUE
Undefined timestamp value.
common internal API header
int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt)
#define RTP_MAX_PACKET_SIZE
int ff_mov_add_hinted_packet(AVFormatContext *s, AVPacket *pkt, int track_index, int sample, uint8_t *sample_data, int sample_size)
static int find_sample_match(const uint8_t *data, int len, HintSampleQueue *queue, int *pos, int *match_sample, int *match_offset, int *match_len)
Look for segments in samples in the sample queue matching the data in ptr.
int ff_mov_init_hinting(AVFormatContext *s, int index, int src_index)
static int match_segments(const uint8_t *haystack, int h_len, const uint8_t *needle, int n_pos, int n_len, int *match_h_offset_ptr, int *match_n_offset_ptr, int *match_len_ptr)
Find matches of needle[n_pos ->] within haystack.
static void sample_queue_free(HintSampleQueue *queue)
Empty the sample queue, releasing all memory.
void ff_mov_close_hinting(MOVTrack *track)
static void output_match(AVIOContext *out, int match_sample, int match_offset, int match_len, int *entries)
static void sample_queue_push(HintSampleQueue *queue, uint8_t *data, int size, int sample)
Add a reference to the sample data to the sample queue.
static void output_immediate(const uint8_t *data, int size, AVIOContext *out, int *entries)
static void sample_queue_pop(HintSampleQueue *queue)
Remove the first sample from the sample queue.
static void describe_payload(const uint8_t *data, int size, AVIOContext *out, int *entries, HintSampleQueue *queue)
static void sample_queue_retain(HintSampleQueue *queue)
Make local copies of all referenced sample data in the queue.
static int write_hint_packets(AVIOContext *out, const uint8_t *data, int size, MOVTrack *trk, int64_t *dts)
Write an RTP hint (that may contain one or more RTP packets) for the packets in data.
#define RTP_PT_IS_RTCP(x)
int ff_rtp_chain_mux_open(AVFormatContext **out, AVFormatContext *s, AVStream *st, URLContext *handle, int packet_size, int idx)
enum AVMediaType codec_type
General type of the encoded data.
uint32_t codec_tag
Additional information about the codec (corresponds to the AVI FOURCC).
AVIOContext * pb
I/O context.
AVStream ** streams
A list of all streams in the file.
This structure stores compressed data.
int flags
A combination of AV_PKT_FLAG values.
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed.
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
int src_track
the track that this hint (or tmcd) track describes
int64_t cur_rtp_ts_unwrapped
int hint_track
the track that hints this track, -1 if no hint track is set
AVFormatContext * rtp_ctx
the format context for the hinting rtp muxer
HintSampleQueue sample_queue
static int track_index(VividasDemuxContext *viv, AVFormatContext *s, uint8_t *buf, unsigned size)