diff --git a/OBS.vcxproj b/OBS.vcxproj
index ddb204b60..0fa0066a9 100644
--- a/OBS.vcxproj
+++ b/OBS.vcxproj
@@ -320,6 +320,7 @@
+
@@ -357,4 +358,4 @@
-
\ No newline at end of file
+
diff --git a/OBS.vcxproj.filters b/OBS.vcxproj.filters
index 97e43b437..a436b2bb1 100644
--- a/OBS.vcxproj.filters
+++ b/OBS.vcxproj.filters
@@ -210,6 +210,9 @@
Headers
+
+ Headers
+
@@ -287,4 +290,4 @@
Resources
-
\ No newline at end of file
+
diff --git a/Source/DataPacketHelpers.h b/Source/DataPacketHelpers.h
new file mode 100644
index 000000000..31fe4e392
--- /dev/null
+++ b/Source/DataPacketHelpers.h
@@ -0,0 +1,72 @@
+/********************************************************************************
+ Copyright (C) 2014 Ruwen Hahn
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+********************************************************************************/
+
+#pragma once
+
+#include "Main.h"
+#include
+#include
+
+struct BufferedDataPacket : DataPacket
+{
+ template
+ BufferedDataPacket(Func &&func) : DataPacket(), func(std::forward(func)) {}
+ std::function func;
+
+ void InitBuffer()
+ {
+ if (size || !func)
+ return;
+
+ func(*this);
+ if (!size)
+ return;
+
+ buffer.assign(lpPacket, lpPacket + size);
+ lpPacket = buffer.data();
+ }
+
+private:
+ std::vector buffer;
+};
+
+inline BufferedDataPacket GetBufferedSEIPacket()
+{
+ return [](DataPacket &p)
+ {
+ VideoEncoder *encoder = App->GetVideoEncoder();
+ assert(encoder);
+ encoder->GetSEI(p);
+ };
+};
+
+inline BufferedDataPacket GetBufferedAudioHeadersPacket()
+{
+ return [](DataPacket &p)
+ {
+ App->GetAudioHeaders(p);
+ };
+};
+
+inline BufferedDataPacket GetBufferedVideoHeadersPacket()
+{
+ return [](DataPacket &p)
+ {
+ App->GetVideoHeaders(p);
+ };
+};