* libiec61883 interface
*/
-#include <sys/poll.h>
+#include <poll.h>
#include <libraw1394/raw1394.h>
#include <libavc1394/avc1394.h>
#include <libavc1394/rom1394.h>
goto exit;
}
- packet->buf = av_malloc(length);
+ packet->buf = av_malloc(length + AV_INPUT_BUFFER_PADDING_SIZE);
if (!packet->buf) {
av_free(packet);
ret = -1;
packet->len = length;
memcpy(packet->buf, data, length);
+ memset(packet->buf + length, 0, AV_INPUT_BUFFER_PADDING_SIZE);
if (dv->queue_first) {
dv->queue_last->next = packet;
size = avpriv_dv_produce_packet(dv->dv_demux, pkt,
packet->buf, packet->len, -1);
dv->queue_first = packet->next;
+ if (size < 0)
+ av_free(packet->buf);
av_free(packet);
dv->packets--;
- if (size > 0)
- return size;
+ if (size < 0)
+ 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)
} else {
iec61883_dv_fb_stop(dv->iec61883_dv);
iec61883_dv_fb_close(dv->iec61883_dv);
+ av_freep(&dv->dv_demux);
}
while (dv->queue_first) {
DVPacket *packet = dv->queue_first;