[FFmpeg-cvslog] avdevice/decklink_dec: do not copy video data
Marton Balint
git at videolan.org
Tue May 1 00:16:13 EEST 2018
ffmpeg | branch: master | Marton Balint <cus at passwd.hu> | Sun Apr 22 22:29:09 2018 +0200| [75d1529c6e9069b240bf6471d64e5bc81e0b9013] | committer: Marton Balint
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 at passwd.hu>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=75d1529c6e9069b240bf6471d64e5bc81e0b9013
---
libavdevice/decklink_dec.cpp | 12 ++++++++++++
1 file changed, 12 insertions(+)
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;
}
More information about the ffmpeg-cvslog
mailing list