diff --git a/daemon/src/video/video_decoder.cpp b/daemon/src/video/video_decoder.cpp
index 4604c77ab15e11b50c0cd1c714a8e5388c1f02a3..d7ea420345d88b96c0de7e323c266ac7689108eb 100644
--- a/daemon/src/video/video_decoder.cpp
+++ b/daemon/src/video/video_decoder.cpp
@@ -194,10 +194,8 @@ int VideoDecoder::setupFromVideoData()
 }
 
 VideoDecoder::Status
-VideoDecoder::decode(VideoFrame& result)
+VideoDecoder::decode(VideoFrame& result, VideoPacket& video_packet)
 {
-    // Guarantee that we free the packet every iteration
-    VideoPacket video_packet;
     AVPacket *inpacket = video_packet.get();
     int ret = av_read_frame(inputCtx_, inpacket);
     if (ret == AVERROR(EAGAIN)) {
diff --git a/daemon/src/video/video_decoder.h b/daemon/src/video/video_decoder.h
index d81f0052ab0eb1949d3d2ef9abf2243f6b79125a..69e092733a7978932e827960ebe0f771d1999d49 100644
--- a/daemon/src/video/video_decoder.h
+++ b/daemon/src/video/video_decoder.h
@@ -65,7 +65,7 @@ namespace sfl_video {
         int openInput(const std::string &source_str,
                       const std::string &format_str);
         int setupFromVideoData();
-        Status decode(VideoFrame&);
+        Status decode(VideoFrame&, VideoPacket&);
         Status flush(VideoFrame&);
 
         int getWidth() const;
diff --git a/daemon/src/video/video_input.cpp b/daemon/src/video/video_input.cpp
index 472634810ba1b996212b963d3e3b94d7da6434c9..42a2c6cd8800dc48aa12b44c6293c8b72135d92b 100644
--- a/daemon/src/video/video_input.cpp
+++ b/daemon/src/video/video_input.cpp
@@ -110,8 +110,8 @@ int VideoInput::interruptCb(void *data)
 
 bool VideoInput::captureFrame()
 {
-    VideoFrame& frame = getNewFrame();
-    const auto ret = decoder_->decode(frame);
+    VideoPacket pkt;
+    const auto ret = decoder_->decode(getNewFrame(), pkt);
 
     switch (ret) {
         case VideoDecoder::Status::FrameFinished:
diff --git a/daemon/src/video/video_receive_thread.cpp b/daemon/src/video/video_receive_thread.cpp
index de5eb9084d8213786afca6e4788f9b199b2d4695..fe7b9c1671a8407e72450c52e8ce391143395065 100644
--- a/daemon/src/video/video_receive_thread.cpp
+++ b/daemon/src/video/video_receive_thread.cpp
@@ -185,7 +185,8 @@ void VideoReceiveThread::addIOContext(SocketPair &socketPair)
 
 bool VideoReceiveThread::decodeFrame()
 {
-    const auto ret = videoDecoder_->decode(getNewFrame());
+    VideoPacket pkt;
+    const auto ret = videoDecoder_->decode(getNewFrame(), pkt);
 
     switch (ret) {
         case VideoDecoder::Status::FrameFinished: