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); + }; +};