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)
403 uint8_t *sample_data,
int sample_size)
446 hint_pkt->
data = buf;
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.
ptrdiff_t const GLvoid * data
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
void avcodec_parameters_free(AVCodecParameters **ppar)
Free an AVCodecParameters instance and everything associated with it and write NULL to the supplied p...
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_WB24 unsigned int_TMPL AV_RB16
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.
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 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)
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
enum AVMediaType codec_type
General type of the encoded data.
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)
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
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.
AVCodecParameters * avcodec_parameters_alloc(void)
Allocate a new AVCodecParameters and set its fields to default values (unknown/invalid/0).
#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 * 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)
Filter the word “frame” indicates either a video frame or a group of audio samples
static int track_index(VividasDemuxContext *viv, AVFormatContext *s, uint8_t *buf, unsigned size)
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...
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later.That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another.Frame references ownership and permissions
#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.