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; ) {
139 memcpy(ptr, sample->
data, sample->
size);
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) {
232 sample->
offset = *match_offset + *match_len + 5;
238 if (sample->
offset < 10 && sample->
size > 20) {
263 for (; len < 14; len++)
271 int match_offset,
int match_len,
int *entries)
289 int match_sample, match_offset, match_len, pos;
291 &match_offset, &match_len) < 0)
296 output_match(out, match_sample, match_offset, match_len, entries);
319 int64_t count_pos, entries_pos;
320 int count = 0, entries;
328 uint32_t packet_len =
AV_RB32(data);
335 if (packet_len > size || packet_len <= 12)
402 int track_index,
int sample,
403 uint8_t *sample_data,
int sample_size)
447 hint_pkt.
pts = hint_pkt.
dts;
static void output_match(AVIOContext *out, int match_sample, int match_offset, int match_len, int *entries)
int avio_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer)
Return the written size and a pointer to the buffer.
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.
#define AV_LOG_WARNING
Something somehow does not look correct.
static void output_immediate(const uint8_t *data, int size, AVIOContext *out, int *entries)
int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
fseek() equivalent for AVIOContext.
#define RTP_MAX_PACKET_SIZE
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.
int avio_open_dyn_buf(AVIOContext **s)
Open a write only memory stream.
HintSampleQueue sample_queue
Opaque data information usually continuous.
AVCodecParameters * avcodec_parameters_alloc(void)
Allocate a new AVCodecParameters and set its fields to default values (unknown/invalid/0).
AVStream ** streams
A list of all streams in the file.
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.
static av_always_inline int64_t avio_tell(AVIOContext *s)
ftell() equivalent for AVIOContext.
void avio_write(AVIOContext *s, const unsigned char *buf, int size)
void * av_realloc_array(void *ptr, size_t nmemb, size_t size)
Allocate, reallocate, or free an array.
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
enum AVMediaType codec_type
General type of the encoded data.
void avcodec_parameters_free(AVCodecParameters **par)
Free an AVCodecParameters instance and everything associated with it and write NULL to the supplied p...
int flags
A combination of AV_PKT_FLAG values.
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'.
void ffio_free_dyn_buf(AVIOContext **s)
Free a dynamic buffer.
static void describe_payload(const uint8_t *data, int size, AVIOContext *out, int *entries, HintSampleQueue *queue)
static void sample_queue_free(HintSampleQueue *queue)
Empty the sample queue, releasing all memory.
AVIOContext * pb
I/O context.
void avio_w8(AVIOContext *s, int b)
int hint_track
the track that hints this track, -1 if no hint track is set
int ff_mov_init_hinting(AVFormatContext *s, int index, int src_index)
static void sample_queue_pop(HintSampleQueue *queue)
Remove the first sample from the sample queue.
void avformat_free_context(AVFormatContext *s)
Free an AVFormatContext and all its streams.
#define RTP_PT_IS_RTCP(x)
void avio_wb16(AVIOContext *s, unsigned int val)
AVFormatContext * rtp_ctx
the format context for the hinting rtp muxer
int ff_rtp_chain_mux_open(AVFormatContext **out, AVFormatContext *s, AVStream *st, URLContext *handle, int packet_size, int idx)
static void sample_queue_retain(HintSampleQueue *queue)
Make local copies of all referenced sample data in the queue.
int src_track
the track that this hint (or tmcd) track describes
void av_init_packet(AVPacket *pkt)
Initialize optional fields of a packet with default values.
void * priv_data
Format private data.
void ff_mov_close_hinting(MOVTrack *track)
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed...
int av_write_trailer(AVFormatContext *s)
Write the stream trailer to an output media file and free the file private data.
void avio_wb32(AVIOContext *s, unsigned int val)
uint32_t codec_tag
Additional information about the codec (corresponds to the AVI FOURCC).
int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt)
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
#define MKTAG(a, b, c, d)
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.
This structure stores compressed data.
int ff_mov_add_hinted_packet(AVFormatContext *s, AVPacket *pkt, int track_index, int sample, uint8_t *sample_data, int sample_size)
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
int64_t cur_rtp_ts_unwrapped
#define AV_NOPTS_VALUE
Undefined timestamp value.