X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fmovenchint.c;h=bb55f73053ee46e5f31ff6bce8f020cdc8b0d714;hb=0be8e661743705eb4c4369943867f462df0fa1ca;hp=8e96355abcd8a1b853b9a32614faf2949d64be04;hpb=8e576d58306df95d6373dd0ca2c1f21f1afaeca9;p=ffmpeg diff --git a/libavformat/movenchint.c b/libavformat/movenchint.c index 8e96355abcd..bb55f73053e 100644 --- a/libavformat/movenchint.c +++ b/libavformat/movenchint.c @@ -95,11 +95,12 @@ static void sample_queue_free(HintSampleQueue *queue) * not copied. sample_queue_retain should be called before pkt->data * is reused/freed. */ -static void sample_queue_push(HintSampleQueue *queue, AVPacket *pkt, int sample) +static void sample_queue_push(HintSampleQueue *queue, uint8_t *data, int size, + int sample) { /* No need to keep track of smaller samples, since describing them * with immediates is more efficient. */ - if (pkt->size <= 14) + if (size <= 14) return; if (!queue->samples || queue->len >= queue->size) { HintSample* samples; @@ -109,8 +110,8 @@ static void sample_queue_push(HintSampleQueue *queue, AVPacket *pkt, int sample) return; queue->samples = samples; } - queue->samples[queue->len].data = pkt->data; - queue->samples[queue->len].size = pkt->size; + queue->samples[queue->len].data = data; + queue->samples[queue->len].size = size; queue->samples[queue->len].sample_number = sample; queue->samples[queue->len].offset = 0; queue->samples[queue->len].own_data = 0; @@ -386,7 +387,8 @@ static int write_hint_packets(AVIOContext *out, const uint8_t *data, } int ff_mov_add_hinted_packet(AVFormatContext *s, AVPacket *pkt, - int track_index, int sample) + int track_index, int sample, + uint8_t *sample_data, int sample_size) { MOVMuxContext *mov = s->priv_data; MOVTrack *trk = &mov->tracks[track_index]; @@ -402,7 +404,10 @@ int ff_mov_add_hinted_packet(AVFormatContext *s, AVPacket *pkt, if (!rtp_ctx->pb) return AVERROR(ENOMEM); - sample_queue_push(&trk->sample_queue, pkt, sample); + if (sample_data) + sample_queue_push(&trk->sample_queue, sample_data, sample_size, sample); + else + sample_queue_push(&trk->sample_queue, pkt->data, pkt->size, sample); /* Feed the packet to the RTP muxer */ ff_write_chained(rtp_ctx, 0, pkt, s);