1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-11-21 10:55:51 +02:00

rtpdec: Forward the memory failure

And avoid a memory leak.

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
This commit is contained in:
Luca Barbato 2015-09-16 12:07:00 +02:00
parent 1ec611a102
commit 22cc57da64

View File

@ -684,7 +684,7 @@ void ff_rtp_reset_packet_queue(RTPDemuxContext *s)
s->prev_ret = 0;
}
static void enqueue_packet(RTPDemuxContext *s, uint8_t *buf, int len)
static int enqueue_packet(RTPDemuxContext *s, uint8_t *buf, int len)
{
uint16_t seq = AV_RB16(buf + 2);
RTPPacket **cur = &s->queue, *packet;
@ -699,7 +699,7 @@ static void enqueue_packet(RTPDemuxContext *s, uint8_t *buf, int len)
packet = av_mallocz(sizeof(*packet));
if (!packet)
return;
return AVERROR(ENOMEM);
packet->recvtime = av_gettime_relative();
packet->seq = seq;
packet->len = len;
@ -707,6 +707,8 @@ static void enqueue_packet(RTPDemuxContext *s, uint8_t *buf, int len)
packet->next = *cur;
*cur = packet;
s->queue_len++;
return 0;
}
static int has_next_packet(RTPDemuxContext *s)
@ -804,7 +806,9 @@ static int rtp_parse_one_packet(RTPDemuxContext *s, AVPacket *pkt,
return rv;
} else {
/* Still missing some packet, enqueue this one. */
enqueue_packet(s, buf, len);
rv = enqueue_packet(s, buf, len);
if (rv < 0)
return rv;
*bufptr = NULL;
/* Return the first enqueued packet if the queue is full,
* even if we're missing something */