summaryrefslogtreecommitdiff
path: root/libavdevice
diff options
context:
space:
mode:
authorMarton Balint <cus@passwd.hu>2018-04-22 22:29:09 +0200
committerMarton Balint <cus@passwd.hu>2018-04-30 22:44:58 +0200
commit75d1529c6e9069b240bf6471d64e5bc81e0b9013 (patch)
treebfd524be58ab103cb372dc56f9ea76805a04381e /libavdevice
parent7033654f7f3c6663c9b5005b87fc06c29075244d (diff)
downloadffmpeg-75d1529c6e9069b240bf6471d64e5bc81e0b9013.tar.gz
avdevice/decklink_dec: do not copy video data
Create a buffer from the data instead and use the buffer destructor to free the DeckLink frame. This avoids a memcpy of the frame data. Signed-off-by: Marton Balint <cus@passwd.hu>
Diffstat (limited to 'libavdevice')
-rw-r--r--libavdevice/decklink_dec.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/libavdevice/decklink_dec.cpp b/libavdevice/decklink_dec.cpp
index e97a4402ea..10535dc388 100644
--- a/libavdevice/decklink_dec.cpp
+++ b/libavdevice/decklink_dec.cpp
@@ -98,6 +98,14 @@ static VANCLineNumber vanc_line_numbers[] = {
{bmdModeUnknown, 0, -1, -1, -1}
};
+extern "C" {
+static void decklink_object_free(void *opaque, uint8_t *data)
+{
+ IUnknown *obj = (class IUnknown *)opaque;
+ obj->Release();
+}
+}
+
static int get_vanc_line_idx(BMDDisplayMode mode)
{
unsigned int i;
@@ -797,6 +805,10 @@ HRESULT decklink_input_callback::VideoInputFrameArrived(
}
}
+ pkt.buf = av_buffer_create(pkt.data, pkt.size, decklink_object_free, videoFrame, 0);
+ if (pkt.buf)
+ videoFrame->AddRef();
+
if (avpacket_queue_put(&ctx->queue, &pkt) < 0) {
++ctx->dropped;
}