Commit 86d6fca9 authored by James Almer's avatar James Almer

avdevice/iec61883: return reference counted packets

Fixes part of ticket #7146, dealing with leaks of packet data since
commit 87c88122.
Signed-off-by: 's avatarJames Almer <jamrial@gmail.com>
(cherry picked from commit b8629654)
parent 13deb0c1
...@@ -118,7 +118,7 @@ static int iec61883_callback(unsigned char *data, int length, ...@@ -118,7 +118,7 @@ static int iec61883_callback(unsigned char *data, int length,
goto exit; goto exit;
} }
packet->buf = av_malloc(length); packet->buf = av_malloc(length + AV_INPUT_BUFFER_PADDING_SIZE);
if (!packet->buf) { if (!packet->buf) {
av_free(packet); av_free(packet);
ret = -1; ret = -1;
...@@ -127,6 +127,7 @@ static int iec61883_callback(unsigned char *data, int length, ...@@ -127,6 +127,7 @@ static int iec61883_callback(unsigned char *data, int length,
packet->len = length; packet->len = length;
memcpy(packet->buf, data, length); memcpy(packet->buf, data, length);
memset(packet->buf + length, 0, AV_INPUT_BUFFER_PADDING_SIZE);
if (dv->queue_first) { if (dv->queue_first) {
dv->queue_last->next = packet; dv->queue_last->next = packet;
...@@ -200,13 +201,21 @@ static int iec61883_parse_queue_dv(struct iec61883_data *dv, AVPacket *pkt) ...@@ -200,13 +201,21 @@ static int iec61883_parse_queue_dv(struct iec61883_data *dv, AVPacket *pkt)
size = avpriv_dv_produce_packet(dv->dv_demux, pkt, size = avpriv_dv_produce_packet(dv->dv_demux, pkt,
packet->buf, packet->len, -1); packet->buf, packet->len, -1);
dv->queue_first = packet->next; dv->queue_first = packet->next;
if (size < 0)
av_free(packet->buf);
av_free(packet); av_free(packet);
dv->packets--; dv->packets--;
if (size > 0) if (size < 0)
return size; return -1;
return -1; if (av_packet_from_data(pkt, pkt->data, pkt->size) < 0) {
av_freep(&pkt->data);
av_packet_unref(pkt);
return -1;
}
return size;
} }
static int iec61883_parse_queue_hdv(struct iec61883_data *dv, AVPacket *pkt) static int iec61883_parse_queue_hdv(struct iec61883_data *dv, AVPacket *pkt)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment