18-05-26 result

This commit is contained in:
Johanness
2026-05-18 01:26:21 +03:00
parent ea7e73d6a4
commit ad215f32bc
34 changed files with 1616 additions and 395 deletions
+670 -24
View File
@@ -1,14 +1,313 @@
#include "AppConfig.hpp" #include "AppConfig.hpp"
#include <cctype>
#include <fstream>
#include <iostream> #include <iostream>
#include <iterator>
#include <map>
#include <optional> #include <optional>
#include <cstdint> #include <cstdint>
#include <string> #include <string>
#include <string_view> #include <string_view>
#include <variant>
#include <vector> #include <vector>
std::optional<PresentModeConfig> parsePresentMode(
std::string_view text);
namespace namespace
{ {
struct JsonValue
{
using Object = std::map<std::string, JsonValue>;
using Array = std::vector<JsonValue>;
std::variant<
std::nullptr_t,
bool,
double,
std::string,
Object,
Array> value;
};
class JsonParser
{
public:
explicit JsonParser(std::string_view text)
: mText(text)
{
}
std::optional<JsonValue> parse()
{
JsonValue result;
if (!parseValue(result))
{
return std::nullopt;
}
skipWhitespace();
if (mPos != mText.size())
{
return std::nullopt;
}
return result;
}
private:
void skipWhitespace()
{
while (mPos < mText.size() &&
std::isspace(
static_cast<unsigned char>(mText[mPos])))
{
++mPos;
}
}
bool consume(char expected)
{
skipWhitespace();
if (mPos >= mText.size() ||
mText[mPos] != expected)
{
return false;
}
++mPos;
return true;
}
bool parseValue(JsonValue& out)
{
skipWhitespace();
if (mPos >= mText.size())
{
return false;
}
const char c = mText[mPos];
if (c == '{')
{
return parseObject(out);
}
if (c == '[')
{
return parseArray(out);
}
if (c == '"')
{
std::string s;
if (!parseString(s))
{
return false;
}
out.value = std::move(s);
return true;
}
if (c == '-' || (c >= '0' && c <= '9'))
{
return parseNumber(out);
}
if (mText.substr(mPos, 4) == "true")
{
mPos += 4;
out.value = true;
return true;
}
if (mText.substr(mPos, 5) == "false")
{
mPos += 5;
out.value = false;
return true;
}
if (mText.substr(mPos, 4) == "null")
{
mPos += 4;
out.value = nullptr;
return true;
}
return false;
}
bool parseObject(JsonValue& out)
{
if (!consume('{'))
{
return false;
}
JsonValue::Object object;
skipWhitespace();
if (mPos < mText.size() && mText[mPos] == '}')
{
++mPos;
out.value = std::move(object);
return true;
}
while (true)
{
std::string key;
if (!parseString(key) || !consume(':'))
{
return false;
}
JsonValue value;
if (!parseValue(value))
{
return false;
}
object[std::move(key)] = std::move(value);
skipWhitespace();
if (mPos < mText.size() && mText[mPos] == '}')
{
++mPos;
out.value = std::move(object);
return true;
}
if (!consume(','))
{
return false;
}
}
}
bool parseArray(JsonValue& out)
{
if (!consume('['))
{
return false;
}
JsonValue::Array array;
skipWhitespace();
if (mPos < mText.size() && mText[mPos] == ']')
{
++mPos;
out.value = std::move(array);
return true;
}
while (true)
{
JsonValue value;
if (!parseValue(value))
{
return false;
}
array.push_back(std::move(value));
skipWhitespace();
if (mPos < mText.size() && mText[mPos] == ']')
{
++mPos;
out.value = std::move(array);
return true;
}
if (!consume(','))
{
return false;
}
}
}
bool parseString(std::string& out)
{
skipWhitespace();
if (mPos >= mText.size() || mText[mPos] != '"')
{
return false;
}
++mPos;
out.clear();
while (mPos < mText.size())
{
const char c = mText[mPos++];
if (c == '"')
{
return true;
}
if (c != '\\')
{
out.push_back(c);
continue;
}
if (mPos >= mText.size())
{
return false;
}
const char esc = mText[mPos++];
switch (esc)
{
case '"': out.push_back('"'); break;
case '\\': out.push_back('\\'); break;
case '/': out.push_back('/'); break;
case 'b': out.push_back('\b'); break;
case 'f': out.push_back('\f'); break;
case 'n': out.push_back('\n'); break;
case 'r': out.push_back('\r'); break;
case 't': out.push_back('\t'); break;
default:
return false;
}
}
return false;
}
bool parseNumber(JsonValue& out)
{
skipWhitespace();
const size_t start = mPos;
if (mPos < mText.size() && mText[mPos] == '-')
{
++mPos;
}
while (mPos < mText.size() &&
mText[mPos] >= '0' && mText[mPos] <= '9')
{
++mPos;
}
if (mPos < mText.size() && mText[mPos] == '.')
{
++mPos;
while (mPos < mText.size() &&
mText[mPos] >= '0' && mText[mPos] <= '9')
{
++mPos;
}
}
try
{
out.value = std::stod(
std::string(mText.substr(start, mPos - start))
);
}
catch (...)
{
return false;
}
return true;
}
std::string_view mText;
size_t mPos = 0;
};
bool parseUint32( bool parseUint32(
const char* text, const char* text,
uint32_t& value) uint32_t& value)
@@ -94,6 +393,278 @@ void applyDefaultFeeds(AppConfig& config)
{ {
config.feeds.assign(feedCount(config), FeedConfig{}); config.feeds.assign(feedCount(config), FeedConfig{});
} }
void resizeFeedsForGrid(AppConfig& config)
{
config.feeds.resize(feedCount(config));
}
const JsonValue* objectField(
const JsonValue::Object& object,
const char* key)
{
const auto it = object.find(key);
if (it == object.end())
{
return nullptr;
}
return &it->second;
}
const std::string* jsonString(const JsonValue* value)
{
if (value == nullptr)
{
return nullptr;
}
return std::get_if<std::string>(&value->value);
}
const JsonValue::Array* jsonArray(const JsonValue* value)
{
if (value == nullptr)
{
return nullptr;
}
return std::get_if<JsonValue::Array>(&value->value);
}
bool jsonBool(const JsonValue* value, bool& out)
{
if (value == nullptr)
{
return false;
}
const bool* parsed = std::get_if<bool>(&value->value);
if (parsed == nullptr)
{
return false;
}
out = *parsed;
return true;
}
bool jsonUint32(const JsonValue* value, uint32_t& out)
{
if (value == nullptr)
{
return false;
}
const double* parsed = std::get_if<double>(&value->value);
if (parsed == nullptr ||
*parsed < 0.0 ||
*parsed > 4294967295.0 ||
*parsed != static_cast<uint32_t>(*parsed))
{
return false;
}
out = static_cast<uint32_t>(*parsed);
return true;
}
bool applyConfigFile(
AppConfig& config,
const char* path,
std::string& error)
{
std::ifstream file(path);
if (!file)
{
error = "failed to open config file";
return false;
}
const std::string text(
(std::istreambuf_iterator<char>(file)),
std::istreambuf_iterator<char>());
std::optional<JsonValue> rootValue =
JsonParser(text).parse();
if (!rootValue.has_value())
{
error = "invalid JSON";
return false;
}
const auto* root =
std::get_if<JsonValue::Object>(&rootValue->value);
if (root == nullptr)
{
error = "config root must be an object";
return false;
}
if (const std::string* grid =
jsonString(objectField(*root, "grid")))
{
if (!parseGrid(
*grid,
config.gridCols,
config.gridRows))
{
error = "grid must be <cols>x<rows> with 1-16 total feeds";
return false;
}
resizeFeedsForGrid(config);
}
uint32_t cols = 0;
uint32_t rows = 0;
const bool hasCols =
jsonUint32(objectField(*root, "cols"), cols);
const bool hasRows =
jsonUint32(objectField(*root, "rows"), rows);
if (hasCols || hasRows)
{
if (!hasCols || !hasRows ||
cols == 0 || rows == 0 ||
cols > MaxFeedCount / rows)
{
error = "cols and rows must describe 1-16 total feeds";
return false;
}
config.gridCols = cols;
config.gridRows = rows;
resizeFeedsForGrid(config);
}
uint32_t fpsCap = 0;
if (jsonUint32(objectField(*root, "fpsCap"), fpsCap))
{
if (fpsCap == 0 || fpsCap > 240)
{
error = "fpsCap must be 1-240";
return false;
}
config.fpsCap = fpsCap;
}
uint32_t maxV210UploadsPerFrame = 0;
if (jsonUint32(
objectField(*root, "maxV210UploadsPerFrame"),
maxV210UploadsPerFrame))
{
if (maxV210UploadsPerFrame > MaxFeedCount)
{
error = "maxV210UploadsPerFrame must be 0-16";
return false;
}
config.maxV210UploadsPerFrame = maxV210UploadsPerFrame;
}
bool boolValue = false;
if (jsonBool(objectField(*root, "noFps"), boolValue))
{
config.logFps = !boolValue;
}
if (jsonBool(objectField(*root, "perf"), boolValue))
{
config.logPerf = boolValue;
}
if (jsonBool(objectField(*root, "verbose"), boolValue))
{
config.verbose = boolValue;
}
if (jsonBool(objectField(*root, "paceUploads"), boolValue))
{
config.paceUploads = boolValue;
}
if (const std::string* present =
jsonString(objectField(*root, "present")))
{
const std::optional<PresentModeConfig> mode =
parsePresentMode(*present);
if (!mode.has_value())
{
error = "present must be fifo, mailbox, or immediate";
return false;
}
config.presentMode = mode.value();
}
const JsonValue::Array* feeds =
jsonArray(objectField(*root, "feeds"));
if (feeds == nullptr)
{
return true;
}
if (feeds->size() > MaxFeedCount)
{
error = "feeds array exceeds 16 entries";
return false;
}
if (feeds->size() > config.feeds.size())
{
uint32_t side = 1;
while (side * side < feeds->size())
{
++side;
}
config.gridCols = side;
config.gridRows =
static_cast<uint32_t>(
(feeds->size() + side - 1) / side);
resizeFeedsForGrid(config);
}
for (size_t i = 0; i < feeds->size(); ++i)
{
const auto* feedObject =
std::get_if<JsonValue::Object>(
&(*feeds)[i].value);
if (feedObject == nullptr)
{
error = "each feed must be an object";
return false;
}
FeedConfig feed;
if (const std::string* kind =
jsonString(objectField(*feedObject, "kind")))
{
const std::optional<FeedKind> parsed =
parseFeedKind(*kind);
if (!parsed.has_value())
{
error = "unknown feed kind: " + *kind;
return false;
}
feed.kind = parsed.value();
}
if (const std::string* domain =
jsonString(objectField(*feedObject, "domain")))
{
feed.mxlDomain = *domain;
}
const std::string* flow =
jsonString(objectField(*feedObject, "flow"));
if (flow == nullptr)
{
flow = jsonString(objectField(*feedObject, "flowId"));
}
if (flow != nullptr)
{
feed.mxlFlowId = *flow;
feed.kind = FeedKind::MxlSdk;
}
config.feeds[i] = std::move(feed);
}
return true;
}
} }
std::optional<FeedKind> parseFeedKind(std::string_view text) std::optional<FeedKind> parseFeedKind(std::string_view text)
@@ -172,8 +743,11 @@ void printUsage(const char* executableName)
<< " --no-fps Disable FPS logging\n" << " --no-fps Disable FPS logging\n"
<< " --perf Log per-frame CPU timing breakdown\n" << " --perf Log per-frame CPU timing breakdown\n"
<< " --verbose Enable detailed startup and SDK logs\n" << " --verbose Enable detailed startup and SDK logs\n"
<< " --pace-uploads Pace v210 uploads by feed frame rate\n"
<< " --config <path> Load JSON feed configuration\n"
<< " --grid <cols>x<rows> Set multiview grid (default 2x2, max 16 feeds)\n" << " --grid <cols>x<rows> Set multiview grid (default 2x2, max 16 feeds)\n"
<< " --fps-cap <fps> Limit render loop FPS (default 60)\n" << " --fps-cap <fps> Limit render loop FPS (default 60)\n"
<< " --max-v210-uploads <n> Limit v210 uploads per frame (0 = unlimited)\n"
<< " --present <mode> Present mode: fifo, mailbox, immediate (default mailbox)\n" << " --present <mode> Present mode: fifo, mailbox, immediate (default mailbox)\n"
<< " --feed <idx> <kind> Set feed slot kind explicitly\n" << " --feed <idx> <kind> Set feed slot kind explicitly\n"
<< " --domain <idx> <path> Set MXL domain for feed slot\n" << " --domain <idx> <path> Set MXL domain for feed slot\n"
@@ -191,30 +765,6 @@ ConfigParseResult parseAppConfig(
{ {
ConfigParseResult result; ConfigParseResult result;
for (int i = 1; i < argc; ++i)
{
if (std::string_view(argv[i]) != "--grid")
{
continue;
}
if (i + 1 >= argc ||
!parseGrid(
argv[i + 1],
result.config.gridCols,
result.config.gridRows))
{
std::cerr << "--grid must be <cols>x<rows> with 1-"
<< MaxFeedCount << " total feeds"
<< std::endl;
result.shouldExit = true;
result.exitCode = 1;
return result;
}
++i;
}
applyDefaultFeeds(result.config); applyDefaultFeeds(result.config);
for (int i = 1; i < argc; ++i) for (int i = 1; i < argc; ++i)
@@ -252,6 +802,63 @@ ConfigParseResult parseAppConfig(
} }
} }
for (int i = 1; i < argc; ++i)
{
if (std::string_view(argv[i]) != "--config")
{
continue;
}
if (i + 1 >= argc)
{
std::cerr << "--config requires <path>"
<< std::endl;
result.shouldExit = true;
result.exitCode = 1;
return result;
}
std::string error;
if (!applyConfigFile(
result.config,
argv[i + 1],
error))
{
std::cerr << "--config " << argv[i + 1]
<< ": " << error << std::endl;
result.shouldExit = true;
result.exitCode = 1;
return result;
}
++i;
}
for (int i = 1; i < argc; ++i)
{
if (std::string_view(argv[i]) != "--grid")
{
continue;
}
if (i + 1 >= argc ||
!parseGrid(
argv[i + 1],
result.config.gridCols,
result.config.gridRows))
{
std::cerr << "--grid must be <cols>x<rows> with 1-"
<< MaxFeedCount << " total feeds"
<< std::endl;
result.shouldExit = true;
result.exitCode = 1;
return result;
}
++i;
resizeFeedsForGrid(result.config);
}
std::vector<std::string_view> feedArgs; std::vector<std::string_view> feedArgs;
for (int i = 1; i < argc; ++i) for (int i = 1; i < argc; ++i)
@@ -276,12 +883,24 @@ ConfigParseResult parseAppConfig(
continue; continue;
} }
if (arg == "--pace-uploads")
{
result.config.paceUploads = true;
continue;
}
if (arg == "--grid") if (arg == "--grid")
{ {
++i; ++i;
continue; continue;
} }
if (arg == "--config")
{
++i;
continue;
}
if (arg == "--fps-cap") if (arg == "--fps-cap")
{ {
if (i + 1 >= argc) if (i + 1 >= argc)
@@ -310,6 +929,33 @@ ConfigParseResult parseAppConfig(
continue; continue;
} }
if (arg == "--max-v210-uploads")
{
if (i + 1 >= argc)
{
std::cerr << "--max-v210-uploads requires <count>"
<< std::endl;
result.shouldExit = true;
result.exitCode = 1;
return result;
}
uint32_t maxUploads = 0;
if (!parseUint32(argv[i + 1], maxUploads) ||
maxUploads > MaxFeedCount)
{
std::cerr << "--max-v210-uploads must be 0-"
<< MaxFeedCount << std::endl;
result.shouldExit = true;
result.exitCode = 1;
return result;
}
result.config.maxV210UploadsPerFrame = maxUploads;
++i;
continue;
}
if (arg == "--present") if (arg == "--present")
{ {
if (i + 1 >= argc) if (i + 1 >= argc)
+2
View File
@@ -41,7 +41,9 @@ struct AppConfig
bool logFps = true; bool logFps = true;
bool logPerf = false; bool logPerf = false;
bool verbose = false; bool verbose = false;
bool paceUploads = false;
uint32_t fpsCap = 60; uint32_t fpsCap = 60;
uint32_t maxV210UploadsPerFrame = 0;
uint32_t gridCols = DefaultGridCols; uint32_t gridCols = DefaultGridCols;
uint32_t gridRows = DefaultGridRows; uint32_t gridRows = DefaultGridRows;
PresentModeConfig presentMode = PresentModeConfig::Mailbox; PresentModeConfig presentMode = PresentModeConfig::Mailbox;
+2
View File
@@ -41,6 +41,8 @@ public:
virtual uint64_t frameVersion() const { return 0; } virtual uint64_t frameVersion() const { return 0; }
virtual bool hasGrainIndex() const { return false; } virtual bool hasGrainIndex() const { return false; }
virtual uint64_t grainIndex() const { return 0; } virtual uint64_t grainIndex() const { return 0; }
virtual bool hasFrameRate() const { return false; }
virtual double frameRate() const { return 0.0; }
virtual float srcAspectRatio() const virtual float srcAspectRatio() const
{ {
+17
View File
@@ -576,6 +576,21 @@ std::string MxlSdkFeed::sourceInfo() const
uint64_t MxlSdkFeed::frameVersion() const { return mFrameVersion; } uint64_t MxlSdkFeed::frameVersion() const { return mFrameVersion; }
bool MxlSdkFeed::hasGrainIndex() const { return mFlowOpened; } bool MxlSdkFeed::hasGrainIndex() const { return mFlowOpened; }
uint64_t MxlSdkFeed::grainIndex() const { return mLastDisplayedIndex; } uint64_t MxlSdkFeed::grainIndex() const { return mLastDisplayedIndex; }
bool MxlSdkFeed::hasFrameRate() const
{
return mGrainRate.denominator > 0 &&
mGrainRate.numerator > 0;
}
double MxlSdkFeed::frameRate() const
{
if (!hasFrameRate())
{
return 0.0;
}
return static_cast<double>(mGrainRate.numerator) /
static_cast<double>(mGrainRate.denominator);
}
float MxlSdkFeed::srcAspectRatio() const float MxlSdkFeed::srcAspectRatio() const
{ {
@@ -604,6 +619,8 @@ std::string MxlSdkFeed::sourceInfo() const { return ""; }
uint64_t MxlSdkFeed::frameVersion() const { return 0; } uint64_t MxlSdkFeed::frameVersion() const { return 0; }
bool MxlSdkFeed::hasGrainIndex() const { return false; } bool MxlSdkFeed::hasGrainIndex() const { return false; }
uint64_t MxlSdkFeed::grainIndex() const { return 0; } uint64_t MxlSdkFeed::grainIndex() const { return 0; }
bool MxlSdkFeed::hasFrameRate() const { return false; }
double MxlSdkFeed::frameRate() const { return 0.0; }
float MxlSdkFeed::srcAspectRatio() const { return 16.0f / 9.0f; } float MxlSdkFeed::srcAspectRatio() const { return 16.0f / 9.0f; }
bool MxlSdkFeed::hasV210() const { return false; } bool MxlSdkFeed::hasV210() const { return false; }
const uint8_t* MxlSdkFeed::v210Data() const { return nullptr; } const uint8_t* MxlSdkFeed::v210Data() const { return nullptr; }
+2
View File
@@ -38,6 +38,8 @@ public:
uint64_t frameVersion() const override; uint64_t frameVersion() const override;
bool hasGrainIndex() const override; bool hasGrainIndex() const override;
uint64_t grainIndex() const override; uint64_t grainIndex() const override;
bool hasFrameRate() const override;
double frameRate() const override;
float srcAspectRatio() const override; float srcAspectRatio() const override;
+98
View File
@@ -26,6 +26,60 @@ uint32_t findMemoryType(
throw std::runtime_error("Failed to find suitable memory type"); throw std::runtime_error("Failed to find suitable memory type");
} }
uint32_t findMemoryTypeWithPreferred(
VkPhysicalDevice physicalDevice,
uint32_t typeFilter,
VkMemoryPropertyFlags requiredProperties,
VkMemoryPropertyFlags preferredProperties,
VkMemoryPropertyFlags& selectedProperties)
{
VkPhysicalDeviceMemoryProperties memProperties;
vkGetPhysicalDeviceMemoryProperties(
physicalDevice,
&memProperties
);
uint32_t fallbackIndex = UINT32_MAX;
VkMemoryPropertyFlags fallbackProperties = 0;
for (uint32_t i = 0; i < memProperties.memoryTypeCount; ++i)
{
if ((typeFilter & (1 << i)) == 0)
{
continue;
}
const VkMemoryPropertyFlags flags =
memProperties.memoryTypes[i].propertyFlags;
if ((flags & requiredProperties) != requiredProperties)
{
continue;
}
if ((flags & preferredProperties) == preferredProperties)
{
selectedProperties = flags;
return i;
}
if (fallbackIndex == UINT32_MAX)
{
fallbackIndex = i;
fallbackProperties = flags;
}
}
if (fallbackIndex != UINT32_MAX)
{
selectedProperties = fallbackProperties;
return fallbackIndex;
}
throw std::runtime_error("Failed to find suitable memory type");
}
void createBuffer( void createBuffer(
VkDevice device, VkDevice device,
VkPhysicalDevice physicalDevice, VkPhysicalDevice physicalDevice,
@@ -66,6 +120,50 @@ void createBuffer(
vkBindBufferMemory(device, buffer, bufferMemory, 0); vkBindBufferMemory(device, buffer, bufferMemory, 0);
} }
void createBufferWithPreferredMemory(
VkDevice device,
VkPhysicalDevice physicalDevice,
VkDeviceSize size,
VkBufferUsageFlags usage,
VkMemoryPropertyFlags requiredProperties,
VkMemoryPropertyFlags preferredProperties,
VkBuffer& buffer,
VkDeviceMemory& bufferMemory,
VkMemoryPropertyFlags& selectedProperties)
{
VkBufferCreateInfo bufferInfo{};
bufferInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
bufferInfo.size = size;
bufferInfo.usage = usage;
bufferInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
if (vkCreateBuffer(device, &bufferInfo, nullptr, &buffer) != VK_SUCCESS)
{
throw std::runtime_error("Failed to create buffer");
}
VkMemoryRequirements memRequirements;
vkGetBufferMemoryRequirements(device, buffer, &memRequirements);
VkMemoryAllocateInfo allocInfo{};
allocInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
allocInfo.allocationSize = memRequirements.size;
allocInfo.memoryTypeIndex = findMemoryTypeWithPreferred(
physicalDevice,
memRequirements.memoryTypeBits,
requiredProperties,
preferredProperties,
selectedProperties
);
if (vkAllocateMemory(device, &allocInfo, nullptr, &bufferMemory) != VK_SUCCESS)
{
throw std::runtime_error("Failed to allocate buffer memory");
}
vkBindBufferMemory(device, buffer, bufferMemory, 0);
}
VkCommandBuffer beginSingleTimeCommands( VkCommandBuffer beginSingleTimeCommands(
VkDevice device, VkDevice device,
VkCommandPool commandPool) VkCommandPool commandPool)
+18
View File
@@ -9,6 +9,13 @@ uint32_t findMemoryType(
uint32_t typeFilter, uint32_t typeFilter,
VkMemoryPropertyFlags properties); VkMemoryPropertyFlags properties);
uint32_t findMemoryTypeWithPreferred(
VkPhysicalDevice physicalDevice,
uint32_t typeFilter,
VkMemoryPropertyFlags requiredProperties,
VkMemoryPropertyFlags preferredProperties,
VkMemoryPropertyFlags& selectedProperties);
void createBuffer( void createBuffer(
VkDevice device, VkDevice device,
VkPhysicalDevice physicalDevice, VkPhysicalDevice physicalDevice,
@@ -18,6 +25,17 @@ void createBuffer(
VkBuffer& buffer, VkBuffer& buffer,
VkDeviceMemory& bufferMemory); VkDeviceMemory& bufferMemory);
void createBufferWithPreferredMemory(
VkDevice device,
VkPhysicalDevice physicalDevice,
VkDeviceSize size,
VkBufferUsageFlags usage,
VkMemoryPropertyFlags requiredProperties,
VkMemoryPropertyFlags preferredProperties,
VkBuffer& buffer,
VkDeviceMemory& bufferMemory,
VkMemoryPropertyFlags& selectedProperties);
VkCommandBuffer beginSingleTimeCommands( VkCommandBuffer beginSingleTimeCommands(
VkDevice device, VkDevice device,
VkCommandPool commandPool); VkCommandPool commandPool);
@@ -132,10 +132,9 @@ CMakeFiles/mxl_multiviewer.dir/AppConfig.cpp.o: \
/usr/include/c++/15/bits/stl_uninitialized.h \ /usr/include/c++/15/bits/stl_uninitialized.h \
/usr/include/c++/15/bits/stl_vector.h \ /usr/include/c++/15/bits/stl_vector.h \
/usr/include/c++/15/bits/stl_bvector.h \ /usr/include/c++/15/bits/stl_bvector.h \
/usr/include/c++/15/bits/vector.tcc /usr/include/c++/15/iostream \ /usr/include/c++/15/bits/vector.tcc /usr/include/c++/15/fstream \
/usr/include/c++/15/ostream /usr/include/c++/15/bits/ostream.h \ /usr/include/c++/15/istream /usr/include/c++/15/ios \
/usr/include/c++/15/ios /usr/include/c++/15/bits/ios_base.h \ /usr/include/c++/15/bits/ios_base.h /usr/include/c++/15/ext/atomicity.h \
/usr/include/c++/15/ext/atomicity.h \
/usr/include/x86_64-linux-gnu/c++/15/bits/gthr.h \ /usr/include/x86_64-linux-gnu/c++/15/bits/gthr.h \
/usr/include/x86_64-linux-gnu/c++/15/bits/gthr-default.h \ /usr/include/x86_64-linux-gnu/c++/15/bits/gthr-default.h \
/usr/include/pthread.h /usr/include/sched.h \ /usr/include/pthread.h /usr/include/sched.h \
@@ -173,6 +172,18 @@ CMakeFiles/mxl_multiviewer.dir/AppConfig.cpp.o: \
/usr/include/c++/15/bits/streambuf_iterator.h \ /usr/include/c++/15/bits/streambuf_iterator.h \
/usr/include/x86_64-linux-gnu/c++/15/bits/ctype_inline.h \ /usr/include/x86_64-linux-gnu/c++/15/bits/ctype_inline.h \
/usr/include/c++/15/bits/locale_facets.tcc \ /usr/include/c++/15/bits/locale_facets.tcc \
/usr/include/c++/15/bits/basic_ios.tcc \ /usr/include/c++/15/bits/basic_ios.tcc /usr/include/c++/15/ostream \
/usr/include/c++/15/bits/ostream.tcc /usr/include/c++/15/istream \ /usr/include/c++/15/bits/ostream.h /usr/include/c++/15/bits/ostream.tcc \
/usr/include/c++/15/bits/istream.tcc /usr/include/c++/15/bits/istream.tcc /usr/include/c++/15/bits/codecvt.h \
/usr/include/x86_64-linux-gnu/c++/15/bits/basic_file.h \
/usr/include/x86_64-linux-gnu/c++/15/bits/c++io.h \
/usr/include/c++/15/bits/fstream.tcc /usr/include/c++/15/iostream \
/usr/include/c++/15/iterator /usr/include/c++/15/bits/stream_iterator.h \
/usr/include/c++/15/map /usr/include/c++/15/bits/stl_tree.h \
/usr/include/c++/15/ext/aligned_buffer.h \
/usr/include/c++/15/bits/node_handle.h \
/usr/include/c++/15/bits/stl_map.h \
/usr/include/c++/15/bits/stl_multimap.h \
/usr/include/c++/15/bits/erase_if.h /usr/include/c++/15/variant \
/usr/include/c++/15/bits/monostate.h \
/usr/include/c++/15/bits/parse_numbers.h
@@ -21,14 +21,17 @@ CMakeFiles/mxl_multiviewer.dir/AppConfig.cpp.o
/usr/include/c++/15/bits/basic_string.tcc /usr/include/c++/15/bits/basic_string.tcc
/usr/include/c++/15/bits/char_traits.h /usr/include/c++/15/bits/char_traits.h
/usr/include/c++/15/bits/charconv.h /usr/include/c++/15/bits/charconv.h
/usr/include/c++/15/bits/codecvt.h
/usr/include/c++/15/bits/concept_check.h /usr/include/c++/15/bits/concept_check.h
/usr/include/c++/15/bits/cpp_type_traits.h /usr/include/c++/15/bits/cpp_type_traits.h
/usr/include/c++/15/bits/cxxabi_forced.h /usr/include/c++/15/bits/cxxabi_forced.h
/usr/include/c++/15/bits/cxxabi_init_exception.h /usr/include/c++/15/bits/cxxabi_init_exception.h
/usr/include/c++/15/bits/enable_special_members.h /usr/include/c++/15/bits/enable_special_members.h
/usr/include/c++/15/bits/erase_if.h
/usr/include/c++/15/bits/exception.h /usr/include/c++/15/bits/exception.h
/usr/include/c++/15/bits/exception_defines.h /usr/include/c++/15/bits/exception_defines.h
/usr/include/c++/15/bits/exception_ptr.h /usr/include/c++/15/bits/exception_ptr.h
/usr/include/c++/15/bits/fstream.tcc
/usr/include/c++/15/bits/functexcept.h /usr/include/c++/15/bits/functexcept.h
/usr/include/c++/15/bits/functional_hash.h /usr/include/c++/15/bits/functional_hash.h
/usr/include/c++/15/bits/hash_bytes.h /usr/include/c++/15/bits/hash_bytes.h
@@ -44,12 +47,15 @@ CMakeFiles/mxl_multiviewer.dir/AppConfig.cpp.o
/usr/include/c++/15/bits/max_size_type.h /usr/include/c++/15/bits/max_size_type.h
/usr/include/c++/15/bits/memory_resource.h /usr/include/c++/15/bits/memory_resource.h
/usr/include/c++/15/bits/memoryfwd.h /usr/include/c++/15/bits/memoryfwd.h
/usr/include/c++/15/bits/monostate.h
/usr/include/c++/15/bits/move.h /usr/include/c++/15/bits/move.h
/usr/include/c++/15/bits/nested_exception.h /usr/include/c++/15/bits/nested_exception.h
/usr/include/c++/15/bits/new_allocator.h /usr/include/c++/15/bits/new_allocator.h
/usr/include/c++/15/bits/node_handle.h
/usr/include/c++/15/bits/ostream.h /usr/include/c++/15/bits/ostream.h
/usr/include/c++/15/bits/ostream.tcc /usr/include/c++/15/bits/ostream.tcc
/usr/include/c++/15/bits/ostream_insert.h /usr/include/c++/15/bits/ostream_insert.h
/usr/include/c++/15/bits/parse_numbers.h
/usr/include/c++/15/bits/postypes.h /usr/include/c++/15/bits/postypes.h
/usr/include/c++/15/bits/predefined_ops.h /usr/include/c++/15/bits/predefined_ops.h
/usr/include/c++/15/bits/ptr_traits.h /usr/include/c++/15/bits/ptr_traits.h
@@ -67,9 +73,13 @@ CMakeFiles/mxl_multiviewer.dir/AppConfig.cpp.o
/usr/include/c++/15/bits/stl_iterator.h /usr/include/c++/15/bits/stl_iterator.h
/usr/include/c++/15/bits/stl_iterator_base_funcs.h /usr/include/c++/15/bits/stl_iterator_base_funcs.h
/usr/include/c++/15/bits/stl_iterator_base_types.h /usr/include/c++/15/bits/stl_iterator_base_types.h
/usr/include/c++/15/bits/stl_map.h
/usr/include/c++/15/bits/stl_multimap.h
/usr/include/c++/15/bits/stl_pair.h /usr/include/c++/15/bits/stl_pair.h
/usr/include/c++/15/bits/stl_tree.h
/usr/include/c++/15/bits/stl_uninitialized.h /usr/include/c++/15/bits/stl_uninitialized.h
/usr/include/c++/15/bits/stl_vector.h /usr/include/c++/15/bits/stl_vector.h
/usr/include/c++/15/bits/stream_iterator.h
/usr/include/c++/15/bits/streambuf.tcc /usr/include/c++/15/bits/streambuf.tcc
/usr/include/c++/15/bits/streambuf_iterator.h /usr/include/c++/15/bits/streambuf_iterator.h
/usr/include/c++/15/bits/string_view.tcc /usr/include/c++/15/bits/string_view.tcc
@@ -93,16 +103,20 @@ CMakeFiles/mxl_multiviewer.dir/AppConfig.cpp.o
/usr/include/c++/15/debug/assertions.h /usr/include/c++/15/debug/assertions.h
/usr/include/c++/15/debug/debug.h /usr/include/c++/15/debug/debug.h
/usr/include/c++/15/exception /usr/include/c++/15/exception
/usr/include/c++/15/ext/aligned_buffer.h
/usr/include/c++/15/ext/alloc_traits.h /usr/include/c++/15/ext/alloc_traits.h
/usr/include/c++/15/ext/atomicity.h /usr/include/c++/15/ext/atomicity.h
/usr/include/c++/15/ext/numeric_traits.h /usr/include/c++/15/ext/numeric_traits.h
/usr/include/c++/15/ext/string_conversions.h /usr/include/c++/15/ext/string_conversions.h
/usr/include/c++/15/ext/type_traits.h /usr/include/c++/15/ext/type_traits.h
/usr/include/c++/15/fstream
/usr/include/c++/15/initializer_list /usr/include/c++/15/initializer_list
/usr/include/c++/15/ios /usr/include/c++/15/ios
/usr/include/c++/15/iosfwd /usr/include/c++/15/iosfwd
/usr/include/c++/15/iostream /usr/include/c++/15/iostream
/usr/include/c++/15/istream /usr/include/c++/15/istream
/usr/include/c++/15/iterator
/usr/include/c++/15/map
/usr/include/c++/15/new /usr/include/c++/15/new
/usr/include/c++/15/numbers /usr/include/c++/15/numbers
/usr/include/c++/15/optional /usr/include/c++/15/optional
@@ -116,6 +130,7 @@ CMakeFiles/mxl_multiviewer.dir/AppConfig.cpp.o
/usr/include/c++/15/tuple /usr/include/c++/15/tuple
/usr/include/c++/15/type_traits /usr/include/c++/15/type_traits
/usr/include/c++/15/typeinfo /usr/include/c++/15/typeinfo
/usr/include/c++/15/variant
/usr/include/c++/15/vector /usr/include/c++/15/vector
/usr/include/ctype.h /usr/include/ctype.h
/usr/include/endian.h /usr/include/endian.h
@@ -204,8 +219,10 @@ CMakeFiles/mxl_multiviewer.dir/AppConfig.cpp.o
/usr/include/x86_64-linux-gnu/bits/wctype-wchar.h /usr/include/x86_64-linux-gnu/bits/wctype-wchar.h
/usr/include/x86_64-linux-gnu/bits/wordsize.h /usr/include/x86_64-linux-gnu/bits/wordsize.h
/usr/include/x86_64-linux-gnu/c++/15/bits/atomic_word.h /usr/include/x86_64-linux-gnu/c++/15/bits/atomic_word.h
/usr/include/x86_64-linux-gnu/c++/15/bits/basic_file.h
/usr/include/x86_64-linux-gnu/c++/15/bits/c++allocator.h /usr/include/x86_64-linux-gnu/c++/15/bits/c++allocator.h
/usr/include/x86_64-linux-gnu/c++/15/bits/c++config.h /usr/include/x86_64-linux-gnu/c++/15/bits/c++config.h
/usr/include/x86_64-linux-gnu/c++/15/bits/c++io.h
/usr/include/x86_64-linux-gnu/c++/15/bits/c++locale.h /usr/include/x86_64-linux-gnu/c++/15/bits/c++locale.h
/usr/include/x86_64-linux-gnu/c++/15/bits/cpu_defines.h /usr/include/x86_64-linux-gnu/c++/15/bits/cpu_defines.h
/usr/include/x86_64-linux-gnu/c++/15/bits/ctype_base.h /usr/include/x86_64-linux-gnu/c++/15/bits/ctype_base.h
@@ -20,14 +20,17 @@ CMakeFiles/mxl_multiviewer.dir/AppConfig.cpp.o: /home/itten/mxl-multiviewer/AppC
/usr/include/c++/15/bits/basic_string.tcc \ /usr/include/c++/15/bits/basic_string.tcc \
/usr/include/c++/15/bits/char_traits.h \ /usr/include/c++/15/bits/char_traits.h \
/usr/include/c++/15/bits/charconv.h \ /usr/include/c++/15/bits/charconv.h \
/usr/include/c++/15/bits/codecvt.h \
/usr/include/c++/15/bits/concept_check.h \ /usr/include/c++/15/bits/concept_check.h \
/usr/include/c++/15/bits/cpp_type_traits.h \ /usr/include/c++/15/bits/cpp_type_traits.h \
/usr/include/c++/15/bits/cxxabi_forced.h \ /usr/include/c++/15/bits/cxxabi_forced.h \
/usr/include/c++/15/bits/cxxabi_init_exception.h \ /usr/include/c++/15/bits/cxxabi_init_exception.h \
/usr/include/c++/15/bits/enable_special_members.h \ /usr/include/c++/15/bits/enable_special_members.h \
/usr/include/c++/15/bits/erase_if.h \
/usr/include/c++/15/bits/exception.h \ /usr/include/c++/15/bits/exception.h \
/usr/include/c++/15/bits/exception_defines.h \ /usr/include/c++/15/bits/exception_defines.h \
/usr/include/c++/15/bits/exception_ptr.h \ /usr/include/c++/15/bits/exception_ptr.h \
/usr/include/c++/15/bits/fstream.tcc \
/usr/include/c++/15/bits/functexcept.h \ /usr/include/c++/15/bits/functexcept.h \
/usr/include/c++/15/bits/functional_hash.h \ /usr/include/c++/15/bits/functional_hash.h \
/usr/include/c++/15/bits/hash_bytes.h \ /usr/include/c++/15/bits/hash_bytes.h \
@@ -43,12 +46,15 @@ CMakeFiles/mxl_multiviewer.dir/AppConfig.cpp.o: /home/itten/mxl-multiviewer/AppC
/usr/include/c++/15/bits/max_size_type.h \ /usr/include/c++/15/bits/max_size_type.h \
/usr/include/c++/15/bits/memory_resource.h \ /usr/include/c++/15/bits/memory_resource.h \
/usr/include/c++/15/bits/memoryfwd.h \ /usr/include/c++/15/bits/memoryfwd.h \
/usr/include/c++/15/bits/monostate.h \
/usr/include/c++/15/bits/move.h \ /usr/include/c++/15/bits/move.h \
/usr/include/c++/15/bits/nested_exception.h \ /usr/include/c++/15/bits/nested_exception.h \
/usr/include/c++/15/bits/new_allocator.h \ /usr/include/c++/15/bits/new_allocator.h \
/usr/include/c++/15/bits/node_handle.h \
/usr/include/c++/15/bits/ostream.h \ /usr/include/c++/15/bits/ostream.h \
/usr/include/c++/15/bits/ostream.tcc \ /usr/include/c++/15/bits/ostream.tcc \
/usr/include/c++/15/bits/ostream_insert.h \ /usr/include/c++/15/bits/ostream_insert.h \
/usr/include/c++/15/bits/parse_numbers.h \
/usr/include/c++/15/bits/postypes.h \ /usr/include/c++/15/bits/postypes.h \
/usr/include/c++/15/bits/predefined_ops.h \ /usr/include/c++/15/bits/predefined_ops.h \
/usr/include/c++/15/bits/ptr_traits.h \ /usr/include/c++/15/bits/ptr_traits.h \
@@ -66,9 +72,13 @@ CMakeFiles/mxl_multiviewer.dir/AppConfig.cpp.o: /home/itten/mxl-multiviewer/AppC
/usr/include/c++/15/bits/stl_iterator.h \ /usr/include/c++/15/bits/stl_iterator.h \
/usr/include/c++/15/bits/stl_iterator_base_funcs.h \ /usr/include/c++/15/bits/stl_iterator_base_funcs.h \
/usr/include/c++/15/bits/stl_iterator_base_types.h \ /usr/include/c++/15/bits/stl_iterator_base_types.h \
/usr/include/c++/15/bits/stl_map.h \
/usr/include/c++/15/bits/stl_multimap.h \
/usr/include/c++/15/bits/stl_pair.h \ /usr/include/c++/15/bits/stl_pair.h \
/usr/include/c++/15/bits/stl_tree.h \
/usr/include/c++/15/bits/stl_uninitialized.h \ /usr/include/c++/15/bits/stl_uninitialized.h \
/usr/include/c++/15/bits/stl_vector.h \ /usr/include/c++/15/bits/stl_vector.h \
/usr/include/c++/15/bits/stream_iterator.h \
/usr/include/c++/15/bits/streambuf.tcc \ /usr/include/c++/15/bits/streambuf.tcc \
/usr/include/c++/15/bits/streambuf_iterator.h \ /usr/include/c++/15/bits/streambuf_iterator.h \
/usr/include/c++/15/bits/string_view.tcc \ /usr/include/c++/15/bits/string_view.tcc \
@@ -92,16 +102,20 @@ CMakeFiles/mxl_multiviewer.dir/AppConfig.cpp.o: /home/itten/mxl-multiviewer/AppC
/usr/include/c++/15/debug/assertions.h \ /usr/include/c++/15/debug/assertions.h \
/usr/include/c++/15/debug/debug.h \ /usr/include/c++/15/debug/debug.h \
/usr/include/c++/15/exception \ /usr/include/c++/15/exception \
/usr/include/c++/15/ext/aligned_buffer.h \
/usr/include/c++/15/ext/alloc_traits.h \ /usr/include/c++/15/ext/alloc_traits.h \
/usr/include/c++/15/ext/atomicity.h \ /usr/include/c++/15/ext/atomicity.h \
/usr/include/c++/15/ext/numeric_traits.h \ /usr/include/c++/15/ext/numeric_traits.h \
/usr/include/c++/15/ext/string_conversions.h \ /usr/include/c++/15/ext/string_conversions.h \
/usr/include/c++/15/ext/type_traits.h \ /usr/include/c++/15/ext/type_traits.h \
/usr/include/c++/15/fstream \
/usr/include/c++/15/initializer_list \ /usr/include/c++/15/initializer_list \
/usr/include/c++/15/ios \ /usr/include/c++/15/ios \
/usr/include/c++/15/iosfwd \ /usr/include/c++/15/iosfwd \
/usr/include/c++/15/iostream \ /usr/include/c++/15/iostream \
/usr/include/c++/15/istream \ /usr/include/c++/15/istream \
/usr/include/c++/15/iterator \
/usr/include/c++/15/map \
/usr/include/c++/15/new \ /usr/include/c++/15/new \
/usr/include/c++/15/numbers \ /usr/include/c++/15/numbers \
/usr/include/c++/15/optional \ /usr/include/c++/15/optional \
@@ -115,6 +129,7 @@ CMakeFiles/mxl_multiviewer.dir/AppConfig.cpp.o: /home/itten/mxl-multiviewer/AppC
/usr/include/c++/15/tuple \ /usr/include/c++/15/tuple \
/usr/include/c++/15/type_traits \ /usr/include/c++/15/type_traits \
/usr/include/c++/15/typeinfo \ /usr/include/c++/15/typeinfo \
/usr/include/c++/15/variant \
/usr/include/c++/15/vector \ /usr/include/c++/15/vector \
/usr/include/ctype.h \ /usr/include/ctype.h \
/usr/include/endian.h \ /usr/include/endian.h \
@@ -203,8 +218,10 @@ CMakeFiles/mxl_multiviewer.dir/AppConfig.cpp.o: /home/itten/mxl-multiviewer/AppC
/usr/include/x86_64-linux-gnu/bits/wctype-wchar.h \ /usr/include/x86_64-linux-gnu/bits/wctype-wchar.h \
/usr/include/x86_64-linux-gnu/bits/wordsize.h \ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
/usr/include/x86_64-linux-gnu/c++/15/bits/atomic_word.h \ /usr/include/x86_64-linux-gnu/c++/15/bits/atomic_word.h \
/usr/include/x86_64-linux-gnu/c++/15/bits/basic_file.h \
/usr/include/x86_64-linux-gnu/c++/15/bits/c++allocator.h \ /usr/include/x86_64-linux-gnu/c++/15/bits/c++allocator.h \
/usr/include/x86_64-linux-gnu/c++/15/bits/c++config.h \ /usr/include/x86_64-linux-gnu/c++/15/bits/c++config.h \
/usr/include/x86_64-linux-gnu/c++/15/bits/c++io.h \
/usr/include/x86_64-linux-gnu/c++/15/bits/c++locale.h \ /usr/include/x86_64-linux-gnu/c++/15/bits/c++locale.h \
/usr/include/x86_64-linux-gnu/c++/15/bits/cpu_defines.h \ /usr/include/x86_64-linux-gnu/c++/15/bits/cpu_defines.h \
/usr/include/x86_64-linux-gnu/c++/15/bits/ctype_base.h \ /usr/include/x86_64-linux-gnu/c++/15/bits/ctype_base.h \
@@ -4918,8 +4935,6 @@ CMakeFiles/mxl_multiviewer.dir/TileLayout.cpp.o:
/usr/include/c++/15/filesystem: /usr/include/c++/15/filesystem:
/usr/include/c++/15/bits/node_handle.h:
/usr/include/c++/15/bits/fs_path.h: /usr/include/c++/15/bits/fs_path.h:
/usr/include/c++/15/bits/fs_fwd.h: /usr/include/c++/15/bits/fs_fwd.h:
@@ -5010,42 +5025,28 @@ CMakeFiles/mxl_multiviewer.dir/VulkanUtils.cpp.o:
/usr/lib/gcc/x86_64-linux-gnu/15/include/bmi2intrin.h: /usr/lib/gcc/x86_64-linux-gnu/15/include/bmi2intrin.h:
/usr/include/c++/15/pstl/glue_memory_defs.h: /usr/lib/gcc/x86_64-linux-gnu/15/include/fxsrintrin.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/avxvnniintrin.h: /usr/lib/gcc/x86_64-linux-gnu/15/include/avxvnniint16intrin.h:
/usr/include/x86_64-linux-gnu/c++/15/bits/c++locale.h: /usr/lib/gcc/x86_64-linux-gnu/15/include/avxintrin.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/movdirintrin.h: /usr/lib/gcc/x86_64-linux-gnu/15/include/avx512vpopcntdqvlintrin.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/mm_malloc.h: /usr/lib/gcc/x86_64-linux-gnu/15/include/avx512vpopcntdqintrin.h:
/usr/include/SDL3/SDL_power.h: /usr/lib/gcc/x86_64-linux-gnu/15/include/avx512vnnivlintrin.h:
/usr/include/c++/15/bits/ranges_util.h: /usr/lib/gcc/x86_64-linux-gnu/15/include/avx512vp2intersectintrin.h:
/usr/include/x86_64-linux-gnu/asm/unistd_64.h: /usr/include/c++/15/backward/auto_ptr.h:
/usr/include/c++/15/bits/shared_ptr_base.h:
/usr/include/c++/15/bits/stl_uninitialized.h:
/usr/include/SDL3/SDL_endian.h:
/usr/include/c++/15/bits/shared_ptr_atomic.h:
/usr/include/c++/15/bits/exception_defines.h: /usr/include/c++/15/bits/exception_defines.h:
/usr/include/c++/15/bits/stl_heap.h: /usr/include/c++/15/bits/stl_heap.h:
/usr/include/c++/15/bits/stl_construct.h:
/home/itten/mxl-multiviewer/NoSignalFeed.hpp: /home/itten/mxl-multiviewer/NoSignalFeed.hpp:
/usr/include/c++/15/bits/ptr_traits.h:
/home/itten/mxl-multiviewer/TileLayout.cpp:
/usr/lib/x86_64-linux-gnu/libXtst.so.6: /usr/lib/x86_64-linux-gnu/libXtst.so.6:
/usr/include/c++/15/ext/numeric_traits.h: /usr/include/c++/15/ext/numeric_traits.h:
@@ -5066,20 +5067,28 @@ CMakeFiles/mxl_multiviewer.dir/VulkanUtils.cpp.o:
/usr/include/x86_64-linux-gnu/c++/15/bits/error_constants.h: /usr/include/x86_64-linux-gnu/c++/15/bits/error_constants.h:
/home/itten/mxl-multiviewer/IVideoFeed.hpp: /usr/lib/gcc/x86_64-linux-gnu/15/include/avxvnniintrin.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/stddef.h: /usr/include/x86_64-linux-gnu/c++/15/bits/c++locale.h:
/usr/include/vk_video/vulkan_video_codec_vp9std.h: /usr/include/c++/15/pstl/glue_memory_defs.h:
/usr/lib/x86_64-linux-gnu/libdecor-0.so.0: /usr/lib/gcc/x86_64-linux-gnu/15/include/movdirintrin.h:
/usr/include/c++/15/pstl/execution_defs.h: /usr/lib/gcc/x86_64-linux-gnu/15/include/mm_malloc.h:
/usr/include/x86_64-linux-gnu/bits/uio_lim.h: /usr/include/SDL3/SDL_power.h:
/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h:
/home/itten/mxl-multiviewer/Swapchain.cpp:
/usr/include/x86_64-linux-gnu/bits/waitflags.h: /usr/include/x86_64-linux-gnu/bits/waitflags.h:
/usr/include/vk_video/vulkan_video_codec_h264std_decode.h:
/usr/include/x86_64-linux-gnu/bits/siginfo-consts.h:
/usr/include/x86_64-linux-gnu/bits/types/timer_t.h: /usr/include/x86_64-linux-gnu/bits/types/timer_t.h:
/usr/include/x86_64-linux-gnu/bits/types/struct_tm.h: /usr/include/x86_64-linux-gnu/bits/types/struct_tm.h:
@@ -5092,6 +5101,12 @@ CMakeFiles/mxl_multiviewer.dir/VulkanUtils.cpp.o:
/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h: /usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h:
CMakeFiles/mxl_multiviewer.dir/imgui/imgui_widgets.cpp.o:
/usr/include/x86_64-linux-gnu/c++/15/bits/c++io.h:
/usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h:
/usr/include/x86_64-linux-gnu/bits/wctype-wchar.h: /usr/include/x86_64-linux-gnu/bits/wctype-wchar.h:
/usr/include/c++/15/bits/functexcept.h: /usr/include/c++/15/bits/functexcept.h:
@@ -5106,14 +5121,6 @@ CMakeFiles/mxl_multiviewer.dir/VulkanUtils.cpp.o:
/usr/include/x86_64-linux-gnu/bits/types/clock_t.h: /usr/include/x86_64-linux-gnu/bits/types/clock_t.h:
/usr/include/c++/15/bits/erase_if.h:
/usr/include/c++/15/bits/std_mutex.h:
/usr/include/c++/15/charconv:
/usr/include/x86_64-linux-gnu/c++/15/bits/cpu_defines.h:
/usr/include/c++/15/tr1/special_function_util.h: /usr/include/c++/15/tr1/special_function_util.h:
/usr/include/c++/15/bits/stl_iterator_base_funcs.h: /usr/include/c++/15/bits/stl_iterator_base_funcs.h:
@@ -5138,14 +5145,12 @@ CMakeFiles/mxl_multiviewer.dir/VulkanUtils.cpp.o:
/usr/include/x86_64-linux-gnu/sys/select.h: /usr/include/x86_64-linux-gnu/sys/select.h:
/usr/include/c++/15/bits/stream_iterator.h:
/usr/include/x86_64-linux-gnu/bits/stdint-uintn.h: /usr/include/x86_64-linux-gnu/bits/stdint-uintn.h:
/usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h: /usr/include/x86_64-linux-gnu/bits/types/struct_timespec.h:
/usr/include/x86_64-linux-gnu/bits/types/mbstate_t.h:
/home/itten/mxl-multiviewer/Swapchain.cpp:
CMakeFiles/mxl_multiviewer.dir/main.cpp.o: CMakeFiles/mxl_multiviewer.dir/main.cpp.o:
/usr/include/x86_64-linux-gnu/bits/stdint-least.h: /usr/include/x86_64-linux-gnu/bits/stdint-least.h:
@@ -5176,12 +5181,6 @@ CMakeFiles/mxl_multiviewer.dir/main.cpp.o:
/usr/include/x86_64-linux-gnu/c++/15/bits/ctype_inline.h: /usr/include/x86_64-linux-gnu/c++/15/bits/ctype_inline.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/hresetintrin.h:
/usr/include/c++/15/bits/unique_ptr.h:
/usr/include/c++/15/bits/move.h:
/home/itten/mxl-multiviewer/MxlFeed.hpp: /home/itten/mxl-multiviewer/MxlFeed.hpp:
/usr/include/SDL3/SDL_messagebox.h: /usr/include/SDL3/SDL_messagebox.h:
@@ -5200,47 +5199,47 @@ CMakeFiles/mxl_multiviewer.dir/main.cpp.o:
/usr/include/x86_64-linux-gnu/bits/cpu-set.h: /usr/include/x86_64-linux-gnu/bits/cpu-set.h:
/usr/include/SDL3/SDL_mutex.h:
/usr/include/x86_64-linux-gnu/asm/posix_types_64.h:
/usr/include/c++/15/bits/this_thread_sleep.h: /usr/include/c++/15/bits/this_thread_sleep.h:
/usr/include/x86_64-linux-gnu/bits/byteswap.h: /usr/include/x86_64-linux-gnu/bits/byteswap.h:
/usr/include/x86_64-linux-gnu/bits/time64.h:
/usr/include/c++/15/ext/aligned_buffer.h:
/usr/include/x86_64-linux-gnu/asm/types.h:
/usr/include/SDL3/SDL_log.h: /usr/include/SDL3/SDL_log.h:
/usr/include/stdio.h:
/usr/include/sched.h: /usr/include/sched.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/ia32intrin.h: /usr/lib/gcc/x86_64-linux-gnu/15/include/ia32intrin.h:
/usr/include/wctype.h: /usr/include/wctype.h:
/usr/include/c++/15/bits/exception.h: /usr/include/x86_64-linux-gnu/bits/setjmp.h:
/usr/include/strings.h: /usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h:
/usr/include/asm-generic/bitsperlong.h:
/usr/include/x86_64-linux-gnu/bits/types/sigset_t.h:
/usr/include/c++/15/debug/assertions.h: /usr/include/c++/15/debug/assertions.h:
/usr/include/x86_64-linux-gnu/c++/15/bits/c++config.h: /usr/include/linux/stddef.h:
/usr/include/x86_64-linux-gnu/asm/bitsperlong.h: /usr/include/SDL3/SDL_dlopennote.h:
/usr/include/SDL3/SDL_surface.h: /usr/include/x86_64-linux-gnu/c++/15/bits/gthr-default.h:
/usr/include/c++/15/typeinfo: /usr/include/linux/posix_types.h:
/usr/include/features.h:
/usr/include/x86_64-linux-gnu/bits/types/locale_t.h:
/usr/include/features-time64.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/mwaitxintrin.h:
/usr/include/errno.h:
/usr/include/c++/15/cstddef:
/usr/include/endian.h:
/usr/include/stdint.h:
/usr/include/c++/15/bits/ranges_algo.h: /usr/include/c++/15/bits/ranges_algo.h:
@@ -5252,12 +5251,6 @@ CMakeFiles/mxl_multiviewer.dir/main.cpp.o:
/home/itten/mxl-multiviewer/NoSignalFeed.cpp: /home/itten/mxl-multiviewer/NoSignalFeed.cpp:
/usr/include/c++/15/bits/stl_raw_storage_iter.h:
/usr/include/c++/15/bits/ostream.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/avx512ifmavlintrin.h:
/usr/lib/gcc/x86_64-linux-gnu/15/libgcc_s.so: /usr/lib/gcc/x86_64-linux-gnu/15/libgcc_s.so:
/usr/include/x86_64-linux-gnu/bits/long-double.h: /usr/include/x86_64-linux-gnu/bits/long-double.h:
@@ -5276,6 +5269,12 @@ CMakeFiles/mxl_multiviewer.dir/main.cpp.o:
/usr/lib/gcc/x86_64-linux-gnu/15/include/avx512cdintrin.h: /usr/lib/gcc/x86_64-linux-gnu/15/include/avx512cdintrin.h:
/usr/include/c++/15/bits/monostate.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/waitpkgintrin.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/limits.h:
/home/itten/mxl-multiviewer/imgui/imgui_tables.cpp: /home/itten/mxl-multiviewer/imgui/imgui_tables.cpp:
/home/itten/mxl-multiviewer/SmpteBarsFeed.hpp: /home/itten/mxl-multiviewer/SmpteBarsFeed.hpp:
@@ -5284,6 +5283,10 @@ CMakeFiles/mxl_multiviewer.dir/main.cpp.o:
/usr/lib/gcc/x86_64-linux-gnu/15/include/avx512vbmiintrin.h: /usr/lib/gcc/x86_64-linux-gnu/15/include/avx512vbmiintrin.h:
/usr/include/SDL3/SDL_oldnames.h:
/usr/include/c++/15/bits/parse_numbers.h:
/usr/include/c++/15/bits/max_size_type.h: /usr/include/c++/15/bits/max_size_type.h:
/usr/include/c++/15/bits/localefwd.h: /usr/include/c++/15/bits/localefwd.h:
@@ -5292,6 +5295,8 @@ CMakeFiles/mxl_multiviewer.dir/main.cpp.o:
/usr/include/vk_video/vulkan_video_codec_av1std_decode.h: /usr/include/vk_video/vulkan_video_codec_av1std_decode.h:
/usr/include/x86_64-linux-gnu/bits/uio_lim.h:
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h: /usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
/usr/include/wchar.h: /usr/include/wchar.h:
@@ -5308,6 +5313,20 @@ CMakeFiles/mxl_multiviewer.dir/main.cpp.o:
/usr/include/c++/15/bits/alloc_traits.h: /usr/include/c++/15/bits/alloc_traits.h:
/usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h:
/usr/include/linux/errno.h:
/usr/include/c++/15/bits/invoke.h:
/usr/include/SDL3/SDL_thread.h:
/usr/include/c++/15/bits/fstream.tcc:
/usr/include/c++/15/bits/nested_exception.h:
/usr/include/c++/15/bits/memoryfwd.h:
/home/itten/mxl-multiviewer/MxlSdkFeed.hpp: /home/itten/mxl-multiviewer/MxlSdkFeed.hpp:
/usr/include/linux/close_range.h: /usr/include/linux/close_range.h:
@@ -5320,59 +5339,31 @@ CMakeFiles/mxl_multiviewer.dir/main.cpp.o:
/home/itten/mxl-multiviewer/imgui/backends/imgui_impl_vulkan.cpp: /home/itten/mxl-multiviewer/imgui/backends/imgui_impl_vulkan.cpp:
/home/itten/dmf-mxl/mxl-1.0.1/lib/include/mxl/platform.h: /usr/include/locale.h:
/usr/include/c++/15/bits/range_access.h: /usr/include/c++/15/bits/allocated_ptr.h:
/home/itten/dmf-mxl/mxl-1.0.1/lib/include/mxl/rational.h: /lib64/ld-linux-x86-64.so.2:
/usr/include/c++/15/bits/cxxabi_init_exception.h: /usr/include/c++/15/bits/istream.tcc:
/usr/include/x86_64-linux-gnu/bits/syscall.h: /usr/include/x86_64-linux-gnu/bits/types/sigset_t.h:
/usr/include/asm-generic/bitsperlong.h:
CMakeFiles/mxl_multiviewer.dir/imgui/imgui_tables.cpp.o: CMakeFiles/mxl_multiviewer.dir/imgui/imgui_tables.cpp.o:
/usr/include/c++/15/iostream: /usr/include/c++/15/iostream:
/usr/include/c++/15/climits: /home/itten/dmf-mxl/mxl-1.0.1/lib/include/mxl/platform.h:
/usr/include/c++/15/bits/vector.tcc: /usr/include/c++/15/bits/range_access.h:
/usr/include/c++/15/bits/cxxabi_forced.h: CMakeFiles/mxl_multiviewer.dir/AppConfig.cpp.o:
/usr/include/c++/15/compare: /usr/lib/gcc/x86_64-linux-gnu/15/include/avxvnniint8intrin.h:
/usr/include/SDL3/SDL_rect.h: /usr/include/pthread.h:
/usr/include/c++/15/bits/specfun.h:
/usr/include/c++/15/cstddef:
/usr/lib/gcc/x86_64-linux-gnu/15/include/mwaitxintrin.h:
/usr/include/errno.h:
/usr/include/c++/15/ostream:
/usr/include/c++/15/bits/basic_string.h:
/usr/include/c++/15/bits/cpp_type_traits.h:
/usr/include/c++/15/bits/ranges_cmp.h:
/usr/include/SDL3/SDL_thread.h:
/usr/include/c++/15/bits/fstream.tcc:
/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h:
/usr/include/math.h:
/usr/include/x86_64-linux-gnu/bits/types/__FILE.h:
/usr/include/c++/15/bits/locale_classes.h:
/usr/include/linux/stddef.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/wmmintrin.h: /usr/lib/gcc/x86_64-linux-gnu/15/include/wmmintrin.h:
@@ -5382,20 +5373,152 @@ CMakeFiles/mxl_multiviewer.dir/imgui/imgui_tables.cpp.o:
/usr/include/asm-generic/posix_types.h: /usr/include/asm-generic/posix_types.h:
CMakeFiles/mxl_multiviewer.dir/AppConfig.cpp.o: /home/itten/dmf-mxl/mxl-1.0.1/lib/include/mxl/rational.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/avxvnniint8intrin.h: /home/itten/mxl-multiviewer/IVideoFeed.hpp:
/usr/include/pthread.h: /usr/lib/gcc/x86_64-linux-gnu/15/include/stddef.h:
/usr/include/x86_64-linux-gnu/asm/bitsperlong.h:
/usr/include/x86_64-linux-gnu/c++/15/bits/c++config.h:
/usr/include/vk_video/vulkan_video_codec_vp9std.h:
CMakeFiles/mxl_multiviewer.dir/V210ComputeDecoder.cpp.o:
/home/itten/mxl-multiviewer/Swapchain.hpp:
/usr/include/c++/15/bits/cxxabi_init_exception.h:
/usr/include/x86_64-linux-gnu/bits/syscall.h:
/usr/include/c++/15/bits/enable_special_members.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/avx512ifmavlintrin.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/sgxintrin.h:
/usr/include/c++/15/fstream:
/usr/include/c++/15/bits/postypes.h:
/home/itten/mxl-multiviewer/PixelFormat.hpp:
/home/itten/mxl-multiviewer/VulkanContext.cpp:
/usr/include/assert.h:
/usr/include/x86_64-linux-gnu/bits/types/FILE.h:
/usr/include/x86_64-linux-gnu/bits/types/time_t.h:
/usr/include/c++/15/bits/ranges_base.h:
/usr/lib/x86_64-linux-gnu/libX11.so.6:
/usr/include/x86_64-linux-gnu/sys/single_threaded.h:
/usr/include/c++/15/bits/specfun.h:
/usr/include/x86_64-linux-gnu/c++/15/bits/cpu_defines.h:
/usr/include/c++/15/bits/cpp_type_traits.h:
/usr/include/c++/15/bits/locale_classes.h:
/usr/include/x86_64-linux-gnu/bits/types/__FILE.h:
/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h:
/usr/include/math.h:
/usr/include/x86_64-linux-gnu/bits/waitstatus.h: /usr/include/x86_64-linux-gnu/bits/waitstatus.h:
/usr/include/asm-generic/errno-base.h: /usr/include/asm-generic/errno-base.h:
/usr/include/c++/15/bits/codecvt.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/avxneconvertintrin.h:
/usr/include/x86_64-linux-gnu/bits/local_lim.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/avx512vbmi2vlintrin.h:
CMakeFiles/mxl_multiviewer.dir/imgui/backends/imgui_impl_sdl3.cpp.o:
/usr/lib/x86_64-linux-gnu/libXext.so.6:
/home/itten/mxl-multiviewer/VulkanUtils.hpp:
/usr/include/c++/15/initializer_list:
/usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h: /usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/adxintrin.h: /usr/lib/gcc/x86_64-linux-gnu/15/include/adxintrin.h:
/usr/include/c++/15/bits/exception.h:
/usr/include/c++/15/bits/basic_string.h:
/usr/include/c++/15/ostream:
/usr/include/strings.h:
/usr/include/c++/15/typeinfo:
/usr/include/SDL3/SDL_surface.h:
/home/itten/mxl-multiviewer/AppConfig.cpp:
/usr/include/c++/15/bits/stl_iterator_base_types.h:
/usr/include/ctype.h:
/usr/include/vk_video/vulkan_video_codec_h265std_encode.h:
/usr/include/stdlib.h:
/usr/include/c++/15/bits/locale_facets.tcc:
/usr/include/SDL3/SDL_dialog.h:
/usr/include/c++/15/bits/locale_facets_nonio.h:
/usr/include/c++/15/bits/ranges_util.h:
/usr/include/c++/15/bits/ostream.h:
/usr/include/c++/15/bits/stl_raw_storage_iter.h:
/usr/include/c++/15/bits/concept_check.h:
/usr/include/c++/15/bits/version.h:
/usr/include/c++/15/bits/node_handle.h:
/usr/include/c++/15/bits/fs_ops.h:
/home/itten/dmf-mxl/mxl-1.0.1/lib/include/mxl/flowinfo.h:
/usr/include/c++/15/bits/charconv.h:
/usr/include/c++/15/pstl/glue_algorithm_defs.h:
/usr/include/c++/15/tr1/poly_laguerre.tcc:
/usr/include/SDL3/SDL_begin_code.h:
/home/itten/mxl-multiviewer/TileLayout.cpp:
/usr/include/c++/15/bits/ptr_traits.h:
/usr/include/c++/15/bits/stl_construct.h:
/usr/include/x86_64-linux-gnu/asm/posix_types_64.h:
/usr/include/SDL3/SDL_mutex.h:
/home/itten/mxl-multiviewer/FeedCreate.cpp: /home/itten/mxl-multiviewer/FeedCreate.cpp:
/usr/include/c++/15/bits/predefined_ops.h: /usr/include/c++/15/bits/predefined_ops.h:
@@ -5408,81 +5531,39 @@ CMakeFiles/mxl_multiviewer.dir/AppConfig.cpp.o:
/home/itten/mxl-multiviewer/V210ComputeDecoder.cpp: /home/itten/mxl-multiviewer/V210ComputeDecoder.cpp:
/home/itten/mxl-multiviewer/AppConfig.cpp:
/usr/lib/x86_64-linux-gnu/libX11.so.6:
/usr/include/x86_64-linux-gnu/sys/single_threaded.h:
/usr/include/c++/15/bits/ranges_base.h:
/usr/include/c++/15/bits/shared_ptr.h:
/usr/include/c++/15/iomanip:
/usr/include/c++/15/bits/stl_iterator_base_types.h:
/usr/include/ctype.h:
/usr/include/vk_video/vulkan_video_codec_h265std_encode.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/avxintrin.h:
/usr/include/stdlib.h:
/usr/include/c++/15/bits/locale_facets.tcc:
/usr/include/features.h:
/usr/include/alloca.h:
/usr/include/stdint.h:
/usr/include/endian.h:
/usr/lib/x86_64-linux-gnu/libmpg123.so.0: /usr/lib/x86_64-linux-gnu/libmpg123.so.0:
/usr/include/x86_64-linux-gnu/c++/15/bits/gthr.h: /usr/include/x86_64-linux-gnu/c++/15/bits/gthr.h:
/usr/include/c++/15/bits/uses_allocator.h: /usr/include/c++/15/bits/uses_allocator.h:
/usr/include/c++/15/bits/concept_check.h: /usr/include/alloca.h:
/usr/include/c++/15/bits/version.h: /usr/include/c++/15/vector:
/usr/include/c++/15/bits/fs_ops.h: /usr/include/c++/15/bits/stl_bvector.h:
/home/itten/dmf-mxl/mxl-1.0.1/lib/include/mxl/flowinfo.h: /usr/include/x86_64-linux-gnu/bits/fp-fast.h:
/lib64/ld-linux-x86-64.so.2: /usr/include/x86_64-linux-gnu/asm/types.h:
/usr/include/c++/15/bits/istream.tcc: /usr/include/x86_64-linux-gnu/bits/time64.h:
/usr/include/c++/15/bits/charconv.h: /usr/include/c++/15/ext/aligned_buffer.h:
/usr/include/c++/15/pstl/glue_algorithm_defs.h: /usr/include/c++/15/bits/ranges_cmp.h:
/usr/include/c++/15/tr1/poly_laguerre.tcc:
/usr/include/SDL3/SDL_begin_code.h:
/usr/include/x86_64-linux-gnu/sys/wait.h: /usr/include/x86_64-linux-gnu/sys/wait.h:
/usr/include/c++/15/type_traits: /usr/include/c++/15/type_traits:
/usr/include/c++/15/map: /usr/include/stdio.h:
/usr/include/c++/15/bits/refwrap.h: /usr/include/c++/15/bits/stl_uninitialized.h:
/usr/include/x86_64-linux-gnu/bits/types/FILE.h: /usr/include/c++/15/bits/shared_ptr_base.h:
/usr/include/x86_64-linux-gnu/bits/types/time_t.h: /usr/include/SDL3/SDL_endian.h:
/usr/include/c++/15/bits/memoryfwd.h:
/usr/include/c++/15/bits/nested_exception.h:
/usr/include/SDL3/SDL_dlopennote.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/pconfigintrin.h: /usr/lib/gcc/x86_64-linux-gnu/15/include/pconfigintrin.h:
@@ -5512,12 +5593,6 @@ CMakeFiles/mxl_multiviewer.dir/AppConfig.cpp.o:
/home/itten/mxl-multiviewer/imgui/imgui.h: /home/itten/mxl-multiviewer/imgui/imgui.h:
/usr/include/c++/15/bits/ranges_uninitialized.h:
/usr/include/c++/15/bits/stl_bvector.h:
/usr/include/x86_64-linux-gnu/bits/fp-fast.h:
/usr/include/c++/15/bits/char_traits.h: /usr/include/c++/15/bits/char_traits.h:
/usr/include/c++/15/cctype: /usr/include/c++/15/cctype:
@@ -5528,6 +5603,12 @@ CMakeFiles/mxl_multiviewer.dir/AppConfig.cpp.o:
/usr/include/SDL3/SDL_sensor.h: /usr/include/SDL3/SDL_sensor.h:
/usr/include/c++/15/compare:
/usr/include/c++/15/bits/cxxabi_forced.h:
/usr/include/SDL3/SDL_rect.h:
/usr/include/x86_64-linux-gnu/bits/stdint-intn.h: /usr/include/x86_64-linux-gnu/bits/stdint-intn.h:
/home/itten/dmf-mxl/mxl-1.0.1/lib/include/mxl/dataformat.h: /home/itten/dmf-mxl/mxl-1.0.1/lib/include/mxl/dataformat.h:
@@ -5578,15 +5659,17 @@ CMakeFiles/mxl_multiviewer.dir/AppConfig.cpp.o:
/usr/include/c++/15/exception: /usr/include/c++/15/exception:
/usr/include/c++/15/bits/enable_special_members.h: /usr/lib/x86_64-linux-gnu/libc.so.6:
CMakeFiles/mxl_multiviewer.dir/imgui/backends/imgui_impl_sdl3.cpp.o: /usr/include/linux/types.h:
/usr/lib/x86_64-linux-gnu/libXext.so.6: /usr/lib/gcc/x86_64-linux-gnu/15/include/amxbf16intrin.h:
/usr/include/c++/15/initializer_list: /home/itten/dmf-mxl/mxl-1.0.1/lib/include/mxl/mxl.h:
/home/itten/mxl-multiviewer/VulkanUtils.hpp: /usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h:
/usr/include/c++/15/ext/alloc_traits.h:
/usr/include/c++/15/ext/concurrence.h: /usr/include/c++/15/ext/concurrence.h:
@@ -5598,11 +5681,9 @@ CMakeFiles/mxl_multiviewer.dir/imgui/backends/imgui_impl_sdl3.cpp.o:
/usr/include/x86_64-linux-gnu/bits/sigevent-consts.h: /usr/include/x86_64-linux-gnu/bits/sigevent-consts.h:
/usr/include/linux/errno.h: /usr/include/c++/15/bits/refwrap.h:
/usr/include/x86_64-linux-gnu/bits/pthread_stack_min-dynamic.h: /usr/include/c++/15/map:
/usr/include/c++/15/bits/invoke.h:
/usr/include/c++/15/bits/basic_ios.tcc: /usr/include/c++/15/bits/basic_ios.tcc:
@@ -5622,48 +5703,48 @@ CMakeFiles/mxl_multiviewer.dir/FeedCreate.cpp.o:
/usr/include/c++/15/string: /usr/include/c++/15/string:
/usr/include/c++/15/bits/stl_tempbuf.h: /usr/include/c++/15/bits/ranges_uninitialized.h:
/usr/include/c++/15/iomanip:
/usr/include/c++/15/bits/shared_ptr.h:
/usr/include/c++/15/bits/shared_ptr_atomic.h:
/usr/include/c++/15/charconv:
/usr/include/c++/15/bits/erase_if.h:
/usr/include/c++/15/bits/std_mutex.h:
/usr/include/x86_64-linux-gnu/asm/unistd_64.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/avx512dqintrin.h: /usr/lib/gcc/x86_64-linux-gnu/15/include/avx512dqintrin.h:
/usr/include/c++/15/bits/stl_tempbuf.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/hresetintrin.h:
/usr/include/c++/15/bits/move.h:
/usr/include/c++/15/bits/unique_ptr.h:
/usr/include/c++/15/bits/vector.tcc:
/usr/include/c++/15/climits:
/usr/include/c++/15/memory: /usr/include/c++/15/memory:
/usr/include/x86_64-linux-gnu/bits/types/sigval_t.h: /usr/include/x86_64-linux-gnu/bits/types/sigval_t.h:
/usr/include/c++/15/vector: /usr/lib/x86_64-linux-gnu/libdecor-0.so.0:
/usr/include/x86_64-linux-gnu/bits/types/locale_t.h: /usr/include/c++/15/pstl/execution_defs.h:
/usr/include/features-time64.h:
/usr/include/x86_64-linux-gnu/c++/15/bits/gthr-default.h:
/usr/include/linux/posix_types.h:
/home/itten/dmf-mxl/mxl-1.0.1/lib/include/mxl/mxl.h:
/usr/include/x86_64-linux-gnu/bits/types/__sigset_t.h:
/usr/include/c++/15/ext/alloc_traits.h:
/usr/lib/x86_64-linux-gnu/libc.so.6:
/usr/include/linux/types.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/amxbf16intrin.h:
/usr/include/x86_64-linux-gnu/bits/setjmp.h:
/usr/include/x86_64-linux-gnu/bits/pthreadtypes-arch.h:
/usr/include/c++/15/bits/allocated_ptr.h:
/usr/include/locale.h:
/usr/include/c++/15/bits/semaphore_base.h:
/usr/include/x86_64-linux-gnu/c++/15/bits/basic_file.h: /usr/include/x86_64-linux-gnu/c++/15/bits/basic_file.h:
/usr/include/c++/15/bits/semaphore_base.h:
/usr/include/linux/limits.h: /usr/include/linux/limits.h:
/usr/lib/x86_64-linux-gnu/libopus.so.0: /usr/lib/x86_64-linux-gnu/libopus.so.0:
@@ -5686,10 +5767,6 @@ CMakeFiles/mxl_multiviewer.dir/FeedCreate.cpp.o:
/usr/include/SDL3/SDL_keyboard.h: /usr/include/SDL3/SDL_keyboard.h:
/usr/include/c++/15/bits/codecvt.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/avx512vbmi2vlintrin.h:
/usr/include/x86_64-linux-gnu/bits/locale.h: /usr/include/x86_64-linux-gnu/bits/locale.h:
/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: /usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
@@ -5704,20 +5781,14 @@ CMakeFiles/mxl_multiviewer.dir/FeedCreate.cpp.o:
/usr/include/x86_64-linux-gnu/bits/posix_opt.h: /usr/include/x86_64-linux-gnu/bits/posix_opt.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/waitpkgintrin.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/limits.h:
/usr/include/c++/15/bits/monostate.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/syslimits.h: /usr/lib/gcc/x86_64-linux-gnu/15/include/syslimits.h:
/home/itten/mxl-multiviewer/FeedTexture.cpp: /home/itten/mxl-multiviewer/FeedTexture.cpp:
/usr/include/c++/15/cwctype:
/usr/include/SDL3/SDL_hints.h: /usr/include/SDL3/SDL_hints.h:
/usr/include/c++/15/cwctype:
/home/itten/mxl-multiviewer/FeedTexture.hpp: /home/itten/mxl-multiviewer/FeedTexture.hpp:
/usr/include/vk_video/vulkan_video_codec_av1std.h: /usr/include/vk_video/vulkan_video_codec_av1std.h:
@@ -5732,22 +5803,12 @@ CMakeFiles/mxl_multiviewer.dir/FeedCreate.cpp.o:
/usr/include/vk_video/vulkan_video_codec_h264std.h: /usr/include/vk_video/vulkan_video_codec_h264std.h:
/usr/include/vk_video/vulkan_video_codec_h264std_decode.h:
CMakeFiles/mxl_multiviewer.dir/imgui/imgui_widgets.cpp.o:
/usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h:
/usr/include/x86_64-linux-gnu/c++/15/bits/c++io.h:
/usr/include/x86_64-linux-gnu/bits/siginfo-consts.h:
/usr/include/vk_video/vulkan_video_codec_h264std_encode.h: /usr/include/vk_video/vulkan_video_codec_h264std_encode.h:
/usr/include/c++/15/bits/exception_ptr.h:
/usr/include/SDL3/SDL_storage.h: /usr/include/SDL3/SDL_storage.h:
/usr/include/c++/15/bits/exception_ptr.h:
/usr/include/vk_video/vulkan_video_codec_h265std.h: /usr/include/vk_video/vulkan_video_codec_h265std.h:
CMakeFiles/mxl_multiviewer.dir/MxlInstanceCache.cpp.o: CMakeFiles/mxl_multiviewer.dir/MxlInstanceCache.cpp.o:
@@ -5766,18 +5827,6 @@ CMakeFiles/mxl_multiviewer.dir/MxlInstanceCache.cpp.o:
/usr/include/SDL3/SDL_pen.h: /usr/include/SDL3/SDL_pen.h:
/usr/include/c++/15/bits/postypes.h:
/home/itten/mxl-multiviewer/PixelFormat.hpp:
/usr/lib/gcc/x86_64-linux-gnu/15/include/sgxintrin.h:
/usr/include/c++/15/fstream:
/home/itten/mxl-multiviewer/VulkanContext.cpp:
/usr/include/assert.h:
/home/itten/mxl-multiviewer/MxlInstanceCache.cpp: /home/itten/mxl-multiviewer/MxlInstanceCache.cpp:
/usr/include/SDL3/SDL_loadso.h: /usr/include/SDL3/SDL_loadso.h:
@@ -5822,14 +5871,6 @@ CMakeFiles/mxl_multiviewer.dir/MxlInstanceCache.cpp.o:
/usr/include/c++/15/bits/locale_facets_nonio.tcc: /usr/include/c++/15/bits/locale_facets_nonio.tcc:
/usr/include/SDL3/SDL_oldnames.h:
/usr/include/c++/15/bits/parse_numbers.h:
/usr/include/c++/15/bits/locale_facets_nonio.h:
/usr/include/SDL3/SDL_dialog.h:
/usr/include/c++/15/bits/quoted_string.h: /usr/include/c++/15/bits/quoted_string.h:
/usr/include/x86_64-linux-gnu/bits/sigstack.h: /usr/include/x86_64-linux-gnu/bits/sigstack.h:
@@ -5860,8 +5901,6 @@ CMakeFiles/mxl_multiviewer.dir/MxlInstanceCache.cpp.o:
/usr/include/x86_64-linux-gnu/bits/sigstksz.h: /usr/include/x86_64-linux-gnu/bits/sigstksz.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/avx512vpopcntdqintrin.h:
/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h: /usr/include/x86_64-linux-gnu/bits/thread-shared-types.h:
/usr/include/c++/15/thread: /usr/include/c++/15/thread:
@@ -5886,8 +5925,6 @@ CMakeFiles/mxl_multiviewer.dir/MxlInstanceCache.cpp.o:
/usr/include/x86_64-linux-gnu/sys/time.h: /usr/include/x86_64-linux-gnu/sys/time.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/avx512vnnivlintrin.h:
/home/itten/mxl-multiviewer/RenderPipeline.cpp: /home/itten/mxl-multiviewer/RenderPipeline.cpp:
/home/itten/mxl-multiviewer/RenderPipeline.hpp: /home/itten/mxl-multiviewer/RenderPipeline.hpp:
@@ -5898,10 +5935,6 @@ CMakeFiles/mxl_multiviewer.dir/MxlInstanceCache.cpp.o:
/usr/include/SDL3/SDL_platform.h: /usr/include/SDL3/SDL_platform.h:
CMakeFiles/mxl_multiviewer.dir/V210ComputeDecoder.cpp.o:
/home/itten/mxl-multiviewer/Swapchain.hpp:
/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: /usr/include/x86_64-linux-gnu/bits/xopen_lim.h:
/usr/include/c++/15/bits/atomic_wait.h: /usr/include/c++/15/bits/atomic_wait.h:
@@ -5998,6 +6031,8 @@ CMakeFiles/mxl_multiviewer.dir/V210ComputeDecoder.cpp.o:
/usr/include/c++/15/bits/basic_ios.h: /usr/include/c++/15/bits/basic_ios.h:
/usr/include/c++/15/variant:
/usr/lib/gcc/x86_64-linux-gnu/15/include/amxtransposeintrin.h: /usr/lib/gcc/x86_64-linux-gnu/15/include/amxtransposeintrin.h:
/usr/include/SDL3/SDL_misc.h: /usr/include/SDL3/SDL_misc.h:
@@ -6064,10 +6099,6 @@ CMakeFiles/mxl_multiviewer.dir/V210ComputeDecoder.cpp.o:
/usr/include/SDL3/SDL_version.h: /usr/include/SDL3/SDL_version.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/fxsrintrin.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/avxvnniint16intrin.h:
/usr/lib/x86_64-linux-gnu/libmvec.so.1: /usr/lib/x86_64-linux-gnu/libmvec.so.1:
/usr/include/x86_64-linux-gnu/sys/types.h: /usr/include/x86_64-linux-gnu/sys/types.h:
@@ -6132,6 +6163,8 @@ CMakeFiles/mxl_multiviewer.dir/V210ComputeDecoder.cpp.o:
/usr/include/x86_64-linux-gnu/bits/types/siginfo_t.h: /usr/include/x86_64-linux-gnu/bits/types/siginfo_t.h:
/usr/include/c++/15/iterator:
/usr/include/x86_64-linux-gnu/bits/types/stack_t.h: /usr/include/x86_64-linux-gnu/bits/types/stack_t.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/amxavx512intrin.h: /usr/lib/gcc/x86_64-linux-gnu/15/include/amxavx512intrin.h:
@@ -6211,13 +6244,3 @@ CMakeFiles/mxl_multiviewer.dir/V210ComputeDecoder.cpp.o:
/usr/include/c++/15/bits/unicode-data.h: /usr/include/c++/15/bits/unicode-data.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/avx512vldqintrin.h: /usr/lib/gcc/x86_64-linux-gnu/15/include/avx512vldqintrin.h:
/usr/include/c++/15/backward/auto_ptr.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/avx512vp2intersectintrin.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/avx512vpopcntdqvlintrin.h:
/usr/include/x86_64-linux-gnu/bits/local_lim.h:
/usr/lib/gcc/x86_64-linux-gnu/15/include/avxneconvertintrin.h:
Binary file not shown.
+27
View File
@@ -0,0 +1,27 @@
{
"grid": "2x2",
"fpsCap": 60,
"present": "mailbox",
"feeds": [
{
"domain": "/tmp/mxl",
"flow": "aac7b492-fc2f-4869-a8a7-711ba10ee4bf"
},
{
"domain": "/tmp/mxl",
"flow": "511f7ea0-9a48-45df-b258-f403e4deb810"
},
{
"domain": "/tmp/mxl",
"flow": "fe28bb88-b503-4e16-9c51-894504fe7df8"
},
{
"domain": "/tmp/mxl",
"flow": "fdd8346e-216d-4992-9586-31f4a916a951"
},
{
"domain": "/tmp/mxl",
"flow": "64a8fe9a-8a89-441a-94b5-637c23fd6964"
}
]
}
Binary file not shown.
BIN
View File
Binary file not shown.
+46 -64
View File
@@ -6,75 +6,57 @@
2 1397 1778927333260233960 CMakeFiles/multiview_test.dir/imgui/imgui_widgets.cpp.o fd62c43f9b0da4fb 2 1397 1778927333260233960 CMakeFiles/multiview_test.dir/imgui/imgui_widgets.cpp.o fd62c43f9b0da4fb
1 1509 1778927333259086969 CMakeFiles/multiview_test.dir/imgui/imgui.cpp.o 184c54d1d7f8da34 1 1509 1778927333259086969 CMakeFiles/multiview_test.dir/imgui/imgui.cpp.o 184c54d1d7f8da34
3 593 1778927572649246506 CMakeFiles/multiview_test.dir/main.cpp.o b6b27a2b15f1d256 3 593 1778927572649246506 CMakeFiles/multiview_test.dir/main.cpp.o b6b27a2b15f1d256
3 1753 1779007423070775331 CMakeFiles/mxl_multiviewer.dir/main.cpp.o 74ec6e8ad51ac778 9 3997 1779054776007096538 CMakeFiles/mxl_multiviewer.dir/main.cpp.o cfdc8d343a283e56
1753 1929 1779007424820737076 mxl_multiviewer cdec97a9a3fabbaf 3998 4649 1779054779996013156 mxl_multiviewer 205aad974c69f886
1 76 1779007718320780480 build.ninja 6c533b4704507e25
1 76 1779007718319320950 /home/itten/mxl-multiviewer/build/cmake_install.cmake 6c533b4704507e25
4 301 1778983233967716048 CMakeFiles/mxl_multiviewer.dir/FakeFeed.cpp.o 5e0b3d1cb566d05a
4 529 1779007423072713130 CMakeFiles/mxl_multiviewer.dir/MxlFeed.cpp.o 93407c7ad5167d54
4 718 1779007423073204668 CMakeFiles/mxl_multiviewer.dir/SmpteBarsFeed.cpp.o 69d711f0c48f92ec
2 697 1778977198978521832 CMakeFiles/mxl_multiviewer.dir/FeedFactory.cpp.o 6eef4c3632622be1
10 702 1779007013771260189 CMakeFiles/mxl_multiviewer.dir/AppConfig.cpp.o 970034ac264b5657
2 555 1778979545142358597 CMakeFiles/mxl_multiviewer.dir/TileLayout.cpp.o a2065395257d96dd
3 416 1778981452702032549 CMakeFiles/mxl_multiviewer.dir/VulkanUtils.cpp.o c4af20d1203eab69
4 556 1778981355664862320 CMakeFiles/mxl_multiviewer.dir/FeedTexture.cpp.o 37993e8dd95f73ed
4 684 1779007189118962700 CMakeFiles/mxl_multiviewer.dir/RenderPipeline.cpp.o f6bae6695ad450e3
2 843 1778977328847325588 CMakeFiles/mxl_multiviewer.dir/VulkanContext.cpp.o e40207fe55f6123f
4 886 1778983008534577859 CMakeFiles/mxl_multiviewer.dir/Swapchain.cpp.o 9b30fbbe9a04c9f3
4 1664 1779007423072928867 CMakeFiles/mxl_multiviewer.dir/MxlSdkFeed.cpp.o d76d11a126fb2fc3
11 452 1779007013771846780 CMakeFiles/mxl_multiviewer.dir/MxlInstanceCache.cpp.o 9ea093f5f6628b8f
3 844 1779007423072250645 CMakeFiles/mxl_multiviewer.dir/FeedCreate.cpp.o 40e954a9c2dbd11f
1 445 1778980407712453965 CMakeFiles/v210_test.dir/v210_test.cpp.o 682a0bc85afb62d1
445 523 1778980408156444438 v210_test 4225e54a48d1d5e7
4 789 1778981355665094260 CMakeFiles/mxl_multiviewer.dir/V210ComputeDecoder.cpp.o f17de5555db36a7c
4 533 1779007423072479652 CMakeFiles/mxl_multiviewer.dir/NoSignalFeed.cpp.o 54ed93bfc21c9ce4
1 73 1779007718320780480 build.ninja 6c533b4704507e25 1 73 1779007718320780480 build.ninja 6c533b4704507e25
1 73 1779007718320780480 /home/itten/mxl-multiviewer/build/cmake_install.cmake 6c533b4704507e25 1 73 1779007718320780480 /home/itten/mxl-multiviewer/build/cmake_install.cmake 6c533b4704507e25
4 301 1778983233967716048 CMakeFiles/mxl_multiviewer.dir/FakeFeed.cpp.o 5e0b3d1cb566d05a
12 905 1779007718338349519 CMakeFiles/mxl_multiviewer.dir/MxlFeed.cpp.o cd8f13ea68566562
330 1484 1779007718656313583 CMakeFiles/mxl_multiviewer.dir/SmpteBarsFeed.cpp.o 9f5909ef338d6f84
2 697 1778977198978521832 CMakeFiles/mxl_multiviewer.dir/FeedFactory.cpp.o 6eef4c3632622be1
12 2727 1779054312183791887 CMakeFiles/mxl_multiviewer.dir/AppConfig.cpp.o 8761582270eea4c9
5 774 1779009114556786973 CMakeFiles/mxl_multiviewer.dir/TileLayout.cpp.o 92548a3beaf6cc2a
10 1100 1779054776009391713 CMakeFiles/mxl_multiviewer.dir/VulkanUtils.cpp.o 94922b0abaec7af0
10 1303 1779054776008096517 CMakeFiles/mxl_multiviewer.dir/FeedTexture.cpp.o 465574e8abbc9d5d
5 803 1779009114557038260 CMakeFiles/mxl_multiviewer.dir/RenderPipeline.cpp.o 25f2e2a829e624ca
809 2567 1779007719135303112 CMakeFiles/mxl_multiviewer.dir/VulkanContext.cpp.o 24d381eb6627ff86
1447 3074 1779007719773289165 CMakeFiles/mxl_multiviewer.dir/Swapchain.cpp.o 836fd7034af2b687
13 3795 1779054312186396526 CMakeFiles/mxl_multiviewer.dir/MxlSdkFeed.cpp.o 351bcf65838bfc2a
13 809 1779007718339320513 CMakeFiles/mxl_multiviewer.dir/MxlInstanceCache.cpp.o 57a3a622c77e76d2
13 1859 1779054312184791866 CMakeFiles/mxl_multiviewer.dir/FeedCreate.cpp.o 4db48c69f1f95087
1 445 1778980407712453965 CMakeFiles/v210_test.dir/v210_test.cpp.o 682a0bc85afb62d1
445 523 1778980408156444438 v210_test 4225e54a48d1d5e7
12 1679 1779054776010096476 CMakeFiles/mxl_multiviewer.dir/V210ComputeDecoder.cpp.o e19e2ad84bfeb27f
5 466 1779009941332887356 CMakeFiles/mxl_multiviewer.dir/NoSignalFeed.cpp.o 60fdc117eb712bfb
5 330 1779007718331633644 CMakeFiles/mxl_multiviewer.dir/imgui/backends/imgui_impl_sdl3.cpp.o 2c9f9be8bffd084e 5 330 1779007718331633644 CMakeFiles/mxl_multiviewer.dir/imgui/backends/imgui_impl_sdl3.cpp.o 2c9f9be8bffd084e
5 741 1779007718331977818 CMakeFiles/mxl_multiviewer.dir/imgui/backends/imgui_impl_vulkan.cpp.o 8c0e4a436c69f5e7 5 741 1779007718331977818 CMakeFiles/mxl_multiviewer.dir/imgui/backends/imgui_impl_vulkan.cpp.o 8c0e4a436c69f5e7
13 809 1779007718339320513 CMakeFiles/mxl_multiviewer.dir/MxlInstanceCache.cpp.o 57a3a622c77e76d2
12 905 1779007718338349519 CMakeFiles/mxl_multiviewer.dir/MxlFeed.cpp.o cd8f13ea68566562
7 1447 1779007718333978263 CMakeFiles/mxl_multiviewer.dir/FeedTexture.cpp.o 465574e8abbc9d5d
330 1484 1779007718656313583 CMakeFiles/mxl_multiviewer.dir/SmpteBarsFeed.cpp.o 9f5909ef338d6f84
6 1501 1779007718332320666 CMakeFiles/mxl_multiviewer.dir/AppConfig.cpp.o 8761582270eea4c9
7 1503 1779007718333320644 CMakeFiles/mxl_multiviewer.dir/FeedCreate.cpp.o 4db48c69f1f95087
10 1623 1779007718336320578 CMakeFiles/mxl_multiviewer.dir/NoSignalFeed.cpp.o 60fdc117eb712bfb
905 1869 1779007719231301013 CMakeFiles/mxl_multiviewer.dir/VulkanUtils.cpp.o 94922b0abaec7af0
741 2467 1779007719067304598 CMakeFiles/mxl_multiviewer.dir/TileLayout.cpp.o 92548a3beaf6cc2a
809 2567 1779007719135303112 CMakeFiles/mxl_multiviewer.dir/VulkanContext.cpp.o 24d381eb6627ff86
4 2605 1779007718331033084 CMakeFiles/mxl_multiviewer.dir/imgui/imgui_tables.cpp.o a09d10ce44cb3e25 4 2605 1779007718331033084 CMakeFiles/mxl_multiviewer.dir/imgui/imgui_tables.cpp.o a09d10ce44cb3e25
1484 2927 1779007719810288356 CMakeFiles/mxl_multiviewer.dir/RenderPipeline.cpp.o 25f2e2a829e624ca
1447 3074 1779007719773289165 CMakeFiles/mxl_multiviewer.dir/Swapchain.cpp.o 836fd7034af2b687
3 3125 1779007718330030033 CMakeFiles/mxl_multiviewer.dir/main.cpp.o cfdc8d343a283e56
1501 3139 1779007719827287985 CMakeFiles/mxl_multiviewer.dir/V210ComputeDecoder.cpp.o e19e2ad84bfeb27f
4 3229 1779007718330752185 CMakeFiles/mxl_multiviewer.dir/imgui/imgui_draw.cpp.o 1a20a9661d6284ca 4 3229 1779007718330752185 CMakeFiles/mxl_multiviewer.dir/imgui/imgui_draw.cpp.o 1a20a9661d6284ca
14 3290 1779007718341320469 CMakeFiles/mxl_multiviewer.dir/MxlSdkFeed.cpp.o 351bcf65838bfc2a
4 3443 1779007718331330396 CMakeFiles/mxl_multiviewer.dir/imgui/imgui_widgets.cpp.o bdac470fb57774d5 4 3443 1779007718331330396 CMakeFiles/mxl_multiviewer.dir/imgui/imgui_widgets.cpp.o bdac470fb57774d5
3 3611 1779007718330343966 CMakeFiles/mxl_multiviewer.dir/imgui/imgui.cpp.o f1eaf5c81331737a 3 3611 1779007718330343966 CMakeFiles/mxl_multiviewer.dir/imgui/imgui.cpp.o f1eaf5c81331737a
3611 3867 1779007721937241859 mxl_multiviewer 205aad974c69f886 6 1567 1779054848235586712 CMakeFiles/mxl_multiviewer.dir/V210ComputeDecoder.cpp.o e19e2ad84bfeb27f
5 1543 1779008117816579924 CMakeFiles/mxl_multiviewer.dir/main.cpp.o cfdc8d343a283e56 5 3876 1779054848233586753 CMakeFiles/mxl_multiviewer.dir/main.cpp.o cfdc8d343a283e56
5 1582 1779008117818216500 CMakeFiles/mxl_multiviewer.dir/MxlSdkFeed.cpp.o 351bcf65838bfc2a 3876 4531 1779054852104505838 mxl_multiviewer 205aad974c69f886
1582 1829 1779008119393545416 mxl_multiviewer 205aad974c69f886 14 1616 1779055038103617809 CMakeFiles/mxl_multiviewer.dir/FeedCreate.cpp.o 4db48c69f1f95087
4 730 1779008283108962935 CMakeFiles/mxl_multiviewer.dir/FeedCreate.cpp.o 4db48c69f1f95087 12 2722 1779055038101617851 CMakeFiles/mxl_multiviewer.dir/AppConfig.cpp.o 8761582270eea4c9
5 1517 1779008283109962913 CMakeFiles/mxl_multiviewer.dir/MxlSdkFeed.cpp.o 351bcf65838bfc2a 11 3707 1779055055333257650 CMakeFiles/mxl_multiviewer.dir/main.cpp.o cfdc8d343a283e56
1517 1756 1779008284621929827 mxl_multiviewer 205aad974c69f886 3708 4394 1779055059030180371 mxl_multiviewer 205aad974c69f886
4 699 1779008561069442869 CMakeFiles/mxl_multiviewer.dir/RenderPipeline.cpp.o 25f2e2a829e624ca 8 3819 1779055227410660634 CMakeFiles/mxl_multiviewer.dir/main.cpp.o cfdc8d343a283e56
4 1494 1779008561067880534 CMakeFiles/mxl_multiviewer.dir/main.cpp.o cfdc8d343a283e56 3820 4512 1779055231222580951 mxl_multiviewer 205aad974c69f886
1494 1736 1779008562557847930 mxl_multiviewer 205aad974c69f886 13 1066 1779055934426291311 CMakeFiles/mxl_multiviewer.dir/MxlFeed.cpp.o cd8f13ea68566562
4 555 1779008749414207666 CMakeFiles/mxl_multiviewer.dir/TileLayout.cpp.o 92548a3beaf6cc2a 13 1203 1779055934424881577 CMakeFiles/mxl_multiviewer.dir/NoSignalFeed.cpp.o 60fdc117eb712bfb
4 729 1779008749414419772 CMakeFiles/mxl_multiviewer.dir/RenderPipeline.cpp.o 25f2e2a829e624ca 16 1233 1779055934427881514 CMakeFiles/mxl_multiviewer.dir/SmpteBarsFeed.cpp.o 9f5909ef338d6f84
4 1523 1779008749412759102 CMakeFiles/mxl_multiviewer.dir/main.cpp.o cfdc8d343a283e56 12 1900 1779055934423881598 CMakeFiles/mxl_multiviewer.dir/FeedCreate.cpp.o 4db48c69f1f95087
1523 1764 1779008750931725863 mxl_multiviewer 205aad974c69f886 14 3929 1779055934426881535 CMakeFiles/mxl_multiviewer.dir/MxlSdkFeed.cpp.o 351bcf65838bfc2a
5 774 1779009114556786973 CMakeFiles/mxl_multiviewer.dir/TileLayout.cpp.o 92548a3beaf6cc2a 10 4326 1779055934421881640 CMakeFiles/mxl_multiviewer.dir/main.cpp.o cfdc8d343a283e56
5 803 1779009114557038260 CMakeFiles/mxl_multiviewer.dir/RenderPipeline.cpp.o 25f2e2a829e624ca 4326 5010 1779055938737791422 mxl_multiviewer 205aad974c69f886
5 840 1779009114556529890 CMakeFiles/mxl_multiviewer.dir/FeedCreate.cpp.o 4db48c69f1f95087 12 1766 1779056220053910937 CMakeFiles/mxl_multiviewer.dir/FeedCreate.cpp.o 4db48c69f1f95087
4 900 1779009114556313105 CMakeFiles/mxl_multiviewer.dir/AppConfig.cpp.o 8761582270eea4c9 10 2486 1779056220051910978 CMakeFiles/mxl_multiviewer.dir/AppConfig.cpp.o 8761582270eea4c9
4 1724 1779009114554768928 CMakeFiles/mxl_multiviewer.dir/main.cpp.o cfdc8d343a283e56 6 3931 1779056220047911062 CMakeFiles/mxl_multiviewer.dir/main.cpp.o cfdc8d343a283e56
1724 1975 1779009116274731292 mxl_multiviewer 205aad974c69f886 3932 4606 1779056223973828997 mxl_multiviewer 205aad974c69f886
4 622 1779009150878974069 CMakeFiles/mxl_multiviewer.dir/AppConfig.cpp.o 8761582270eea4c9 10 3933 1779056371682741367 CMakeFiles/mxl_multiviewer.dir/main.cpp.o cfdc8d343a283e56
622 872 1779009151496960546 mxl_multiviewer 205aad974c69f886 3934 4592 1779056375606659343 mxl_multiviewer 205aad974c69f886
4 1574 1779009183315264286 CMakeFiles/mxl_multiviewer.dir/main.cpp.o cfdc8d343a283e56 10 3775 1779056501994010048 CMakeFiles/mxl_multiviewer.dir/main.cpp.o cfdc8d343a283e56
1574 1833 1779009184885229931 mxl_multiviewer 205aad974c69f886 3775 4452 1779056505758931079 mxl_multiviewer 205aad974c69f886
5 466 1779009941332887356 CMakeFiles/mxl_multiviewer.dir/NoSignalFeed.cpp.o 60fdc117eb712bfb 13 3972 1779056635253214966 CMakeFiles/mxl_multiviewer.dir/main.cpp.o cfdc8d343a283e56
5 662 1779009941331679183 CMakeFiles/mxl_multiviewer.dir/AppConfig.cpp.o 8761582270eea4c9 3972 4674 1779056639212131929 mxl_multiviewer 205aad974c69f886
662 919 1779009941988664817 mxl_multiviewer 205aad974c69f886
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+23
View File
@@ -0,0 +1,23 @@
{
"grid": "2x2",
"fpsCap": 60,
"paceUploads": false,
"maxV210UploadsPerFrame": 0,
"present": "mailbox",
"feeds": [
{
"domain": "/tmp/mxl",
"flow": "853a9cda-0f7a-4b48-b2df-b3f628440150"
},
{
"domain": "/tmp/mxl",
"flow": "fab60e17-f721-4e12-a7dd-312f5f6e502d"
},
{
"kind": "nosignal"
},
{
"kind": "smpte"
}
]
}
+368 -15
View File
@@ -45,17 +45,46 @@ struct PerfStats
uint64_t frames = 0; uint64_t frames = 0;
uint64_t feedReadTicks = 0; uint64_t feedReadTicks = 0;
uint64_t uploadDecodeTicks = 0; uint64_t uploadDecodeTicks = 0;
uint64_t stageCopyTicks = 0;
uint64_t uploadRecordTicks = 0;
uint64_t submitPresentTicks = 0; uint64_t submitPresentTicks = 0;
uint64_t idleDelayTicks = 0; uint64_t idleDelayTicks = 0;
uint64_t frameTicks = 0; uint64_t frameTicks = 0;
}; };
struct FramePerfStats
{
uint64_t eventTicks = 0;
uint64_t fenceWaitTicks = 0;
uint64_t feedReadTicks = 0;
uint64_t stageCopyTicks = 0;
uint64_t maxStageCopyTicks = 0;
uint64_t maxStageCopyBytes = 0;
uint32_t maxStageCopyFeed = 0;
uint32_t stageCopies = 0;
uint32_t v210StageCopies = 0;
uint64_t uploadRecordTicks = 0;
uint64_t layoutTicks = 0;
uint64_t imguiTicks = 0;
uint64_t drawRecordTicks = 0;
uint64_t acquireTicks = 0;
uint64_t submitPresentTicks = 0;
uint64_t idleDelayTicks = 0;
};
struct FeedPerfStats struct FeedPerfStats
{ {
uint64_t updates = 0; uint64_t updates = 0;
uint64_t uploads = 0;
uint64_t deferredUploads = 0;
uint64_t repeats = 0; uint64_t repeats = 0;
uint64_t skippedGrains = 0; uint64_t skippedGrains = 0;
uint64_t lastGrain = 0; uint64_t lastGrain = 0;
uint64_t lastUploadTicks = 0;
uint64_t uploadIntervalTicks = 0;
uint64_t minUploadIntervalTicks = UINT64_MAX;
uint64_t maxUploadIntervalTicks = 0;
uint64_t uploadIntervals = 0;
bool hasLastGrain = false; bool hasLastGrain = false;
}; };
@@ -721,6 +750,11 @@ int main(int argc, char* argv[])
std::vector<bool> v210FeedReady(feedCount); std::vector<bool> v210FeedReady(feedCount);
std::vector<uint64_t> uploadedVersions(feedCount); std::vector<uint64_t> uploadedVersions(feedCount);
std::vector<bool> feedUploadNeeded(feedCount); std::vector<bool> feedUploadNeeded(feedCount);
std::vector<const VideoFrame*> pendingFrames(feedCount);
std::vector<uint64_t> pendingVersions(feedCount);
std::vector<bool> pendingUploadNeeded(feedCount);
std::vector<double> feedUploadCredits(feedCount, 1.0);
uint64_t lastUploadPaceTicks = SDL_GetPerformanceCounter();
std::fill( std::fill(
uploadedVersions.begin(), uploadedVersions.begin(),
@@ -1026,9 +1060,14 @@ int main(int argc, char* argv[])
const Uint64 frameStartTicks = SDL_GetTicks(); const Uint64 frameStartTicks = SDL_GetTicks();
const uint64_t perfFrameStartTicks = const uint64_t perfFrameStartTicks =
SDL_GetPerformanceCounter(); SDL_GetPerformanceCounter();
FramePerfStats framePerf;
uint64_t perfSectionStartTicks = 0;
SDL_Event event; SDL_Event event;
perfSectionStartTicks =
SDL_GetPerformanceCounter();
while (SDL_PollEvent(&event)) while (SDL_PollEvent(&event))
{ {
ImGui_ImplSDL3_ProcessEvent(&event); ImGui_ImplSDL3_ProcessEvent(&event);
@@ -1048,11 +1087,18 @@ int main(int argc, char* argv[])
if (event.key.key == SDLK_ESCAPE) if (event.key.key == SDLK_ESCAPE)
{ {
g_running = false; g_running = false;
} }
break; break;
} }
} }
if (config.logPerf)
{
framePerf.eventTicks +=
SDL_GetPerformanceCounter() -
perfSectionStartTicks;
}
// ---- resize handling ---- // ---- resize handling ----
if (framebufferResized) if (framebufferResized)
@@ -1124,7 +1170,7 @@ int main(int argc, char* argv[])
// ---- frame timing ---- // ---- frame timing ----
uint64_t perfSectionStartTicks = perfSectionStartTicks =
SDL_GetPerformanceCounter(); SDL_GetPerformanceCounter();
vkWaitForFences( vkWaitForFences(
@@ -1142,9 +1188,12 @@ int main(int argc, char* argv[])
if (config.logPerf) if (config.logPerf)
{ {
perfStats.submitPresentTicks += const uint64_t elapsed =
SDL_GetPerformanceCounter() - SDL_GetPerformanceCounter() -
perfSectionStartTicks; perfSectionStartTicks;
perfStats.submitPresentTicks += elapsed;
framePerf.fenceWaitTicks += elapsed;
framePerf.submitPresentTicks += elapsed;
} }
++frameCounter; ++frameCounter;
@@ -1178,6 +1227,47 @@ int main(int argc, char* argv[])
feedUploadNeeded.end(), feedUploadNeeded.end(),
false false
); );
std::fill(
pendingFrames.begin(),
pendingFrames.end(),
nullptr
);
std::fill(
pendingUploadNeeded.begin(),
pendingUploadNeeded.end(),
false
);
const uint64_t uploadPaceTicks =
SDL_GetPerformanceCounter();
const double uploadPaceDeltaSeconds =
static_cast<double>(
uploadPaceTicks - lastUploadPaceTicks) /
static_cast<double>(perfFrequency);
lastUploadPaceTicks = uploadPaceTicks;
if (config.paceUploads)
{
for (uint32_t i = 0; i < feedCount; ++i)
{
if (!feeds[i]->hasFrameRate())
{
continue;
}
const double rate =
std::min(
feeds[i]->frameRate(),
static_cast<double>(config.fpsCap)
);
feedUploadCredits[i] =
std::min(
2.0,
feedUploadCredits[i] +
rate * uploadPaceDeltaSeconds
);
}
}
for (uint32_t i = 0; i < feedCount; ++i) for (uint32_t i = 0; i < feedCount; ++i)
{ {
@@ -1193,9 +1283,11 @@ int main(int argc, char* argv[])
if (config.logPerf) if (config.logPerf)
{ {
perfStats.feedReadTicks += const uint64_t elapsed =
SDL_GetPerformanceCounter() - SDL_GetPerformanceCounter() -
perfSectionStartTicks; perfSectionStartTicks;
perfStats.feedReadTicks += elapsed;
framePerf.feedReadTicks += elapsed;
if (uploadNeeded) if (uploadNeeded)
{ {
@@ -1231,10 +1323,55 @@ int main(int argc, char* argv[])
continue; continue;
} }
pendingFrames[i] = &frame;
pendingVersions[i] = version;
pendingUploadNeeded[i] = true;
}
const uint32_t maxV210Uploads =
config.maxV210UploadsPerFrame == 0
? feedCount
: config.maxV210UploadsPerFrame;
uint32_t v210UploadsThisFrame = 0;
const uint32_t uploadStart =
feedCount == 0 ? 0 : frameCounter % feedCount;
for (uint32_t offset = 0; offset < feedCount; ++offset)
{
const uint32_t i =
(uploadStart + offset) % feedCount;
if (!pendingUploadNeeded[i])
{
continue;
}
const bool isV210 = feeds[i]->hasV210();
if (config.paceUploads &&
isV210 &&
feeds[i]->hasFrameRate() &&
feedUploadCredits[i] < 1.0)
{
if (config.logPerf)
{
++feedPerfStats[i].deferredUploads;
}
continue;
}
if (isV210 && v210UploadsThisFrame >= maxV210Uploads)
{
if (config.logPerf)
{
++feedPerfStats[i].deferredUploads;
}
continue;
}
perfSectionStartTicks = perfSectionStartTicks =
SDL_GetPerformanceCounter(); SDL_GetPerformanceCounter();
if (feeds[i]->hasV210()) if (isV210)
{ {
if (!v210FeedReady[i]) if (!v210FeedReady[i])
{ {
@@ -1284,7 +1421,7 @@ int main(int argc, char* argv[])
else else
{ {
copyFrameToFeedTextureStaging( copyFrameToFeedTextureStaging(
frame, *pendingFrames[i],
imageSize, imageSize,
feedTextures[i] feedTextures[i]
); );
@@ -1292,17 +1429,79 @@ int main(int argc, char* argv[])
if (config.logPerf) if (config.logPerf)
{ {
perfStats.uploadDecodeTicks += const uint64_t elapsed =
SDL_GetPerformanceCounter() - SDL_GetPerformanceCounter() -
perfSectionStartTicks; perfSectionStartTicks;
perfStats.stageCopyTicks += elapsed;
perfStats.uploadDecodeTicks += elapsed;
framePerf.stageCopyTicks += elapsed;
++framePerf.stageCopies;
if (isV210)
{
++framePerf.v210StageCopies;
}
if (elapsed > framePerf.maxStageCopyTicks)
{
framePerf.maxStageCopyTicks = elapsed;
framePerf.maxStageCopyFeed = i + 1;
framePerf.maxStageCopyBytes =
isV210
? static_cast<uint64_t>(
feeds[i]->v210Stride()) *
feeds[i]->v210Height()
: static_cast<uint64_t>(imageSize);
}
} }
uploadedVersions[i] = version; uploadedVersions[i] = pendingVersions[i];
if (isV210)
{
++v210UploadsThisFrame;
if (config.paceUploads &&
feeds[i]->hasFrameRate())
{
feedUploadCredits[i] =
std::max(
0.0,
feedUploadCredits[i] - 1.0
);
}
}
if (config.logPerf)
{
++feedPerfStats[i].uploads;
const uint64_t uploadTicks =
SDL_GetPerformanceCounter();
if (feedPerfStats[i].lastUploadTicks != 0)
{
const uint64_t interval =
uploadTicks -
feedPerfStats[i].lastUploadTicks;
feedPerfStats[i].uploadIntervalTicks +=
interval;
feedPerfStats[i].minUploadIntervalTicks =
std::min(
feedPerfStats[i].minUploadIntervalTicks,
interval
);
feedPerfStats[i].maxUploadIntervalTicks =
std::max(
feedPerfStats[i].maxUploadIntervalTicks,
interval
);
++feedPerfStats[i].uploadIntervals;
}
feedPerfStats[i].lastUploadTicks = uploadTicks;
}
feedUploadNeeded[i] = true; feedUploadNeeded[i] = true;
} }
// ---- update vertex UVs for aspect ratio ---- // ---- update vertex UVs for aspect ratio ----
perfSectionStartTicks =
SDL_GetPerformanceCounter();
VkExtent2D swapExtent = swapchain.extent(); VkExtent2D swapExtent = swapchain.extent();
const float gapX = const float gapX =
2.0f * TILE_GAP_PIXELS / 2.0f * TILE_GAP_PIXELS /
@@ -1349,8 +1548,18 @@ int main(int argc, char* argv[])
static_cast<size_t>(vbSize) static_cast<size_t>(vbSize)
); );
if (config.logPerf)
{
framePerf.layoutTicks +=
SDL_GetPerformanceCounter() -
perfSectionStartTicks;
}
// ---- ImGui frame ---- // ---- ImGui frame ----
perfSectionStartTicks =
SDL_GetPerformanceCounter();
ImGui_ImplVulkan_NewFrame(); ImGui_ImplVulkan_NewFrame();
ImGui_ImplSDL3_NewFrame(); ImGui_ImplSDL3_NewFrame();
ImGui::NewFrame(); ImGui::NewFrame();
@@ -1364,6 +1573,13 @@ int main(int argc, char* argv[])
ImGui::Render(); ImGui::Render();
ImDrawData* imguiDrawData = ImGui::GetDrawData(); ImDrawData* imguiDrawData = ImGui::GetDrawData();
if (config.logPerf)
{
framePerf.imguiTicks +=
SDL_GetPerformanceCounter() -
perfSectionStartTicks;
}
// ---- record upload commands ---- // ---- record upload commands ----
perfSectionStartTicks = perfSectionStartTicks =
@@ -1431,9 +1647,12 @@ int main(int argc, char* argv[])
if (config.logPerf) if (config.logPerf)
{ {
perfStats.uploadDecodeTicks += const uint64_t elapsed =
SDL_GetPerformanceCounter() - SDL_GetPerformanceCounter() -
perfSectionStartTicks; perfSectionStartTicks;
perfStats.uploadRecordTicks += elapsed;
perfStats.uploadDecodeTicks += elapsed;
framePerf.uploadRecordTicks += elapsed;
} }
// ---- acquire swapchain image ---- // ---- acquire swapchain image ----
@@ -1453,6 +1672,13 @@ int main(int argc, char* argv[])
&imageIndex &imageIndex
); );
if (config.logPerf)
{
framePerf.acquireTicks +=
SDL_GetPerformanceCounter() -
perfSectionStartTicks;
}
if (acquireResult == VK_ERROR_OUT_OF_DATE_KHR) if (acquireResult == VK_ERROR_OUT_OF_DATE_KHR)
{ {
std::cout std::cout
@@ -1471,14 +1697,27 @@ int main(int argc, char* argv[])
); );
} }
perfSectionStartTicks =
SDL_GetPerformanceCounter();
recordDrawCmdBuf( recordDrawCmdBuf(
drawCmdBufs[imageIndex], drawCmdBufs[imageIndex],
imageIndex, imageIndex,
imguiDrawData imguiDrawData
); );
if (config.logPerf)
{
framePerf.drawRecordTicks +=
SDL_GetPerformanceCounter() -
perfSectionStartTicks;
}
// ---- submit ---- // ---- submit ----
perfSectionStartTicks =
SDL_GetPerformanceCounter();
VkPipelineStageFlags waitStage = VkPipelineStageFlags waitStage =
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
@@ -1554,9 +1793,11 @@ int main(int argc, char* argv[])
if (config.logPerf) if (config.logPerf)
{ {
perfStats.submitPresentTicks += const uint64_t elapsed =
SDL_GetPerformanceCounter() - SDL_GetPerformanceCounter() -
perfSectionStartTicks; perfSectionStartTicks;
perfStats.submitPresentTicks += elapsed;
framePerf.submitPresentTicks += elapsed;
} }
const Uint64 frameElapsedTicks = const Uint64 frameElapsedTicks =
@@ -1575,9 +1816,11 @@ int main(int argc, char* argv[])
if (config.logPerf) if (config.logPerf)
{ {
perfStats.idleDelayTicks += const uint64_t elapsed =
SDL_GetPerformanceCounter() - SDL_GetPerformanceCounter() -
perfSectionStartTicks; perfSectionStartTicks;
perfStats.idleDelayTicks += elapsed;
framePerf.idleDelayTicks += elapsed;
} }
} }
@@ -1586,7 +1829,76 @@ int main(int argc, char* argv[])
++perfStats.frames; ++perfStats.frames;
const uint64_t now = SDL_GetPerformanceCounter(); const uint64_t now = SDL_GetPerformanceCounter();
perfStats.frameTicks += now - perfFrameStartTicks; const uint64_t currentFrameTicks =
now - perfFrameStartTicks;
perfStats.frameTicks += currentFrameTicks;
const double invMs =
1000.0 /
static_cast<double>(perfFrequency);
if (currentFrameTicks * invMs > 25.0)
{
const uint64_t accountedTicks =
framePerf.eventTicks +
framePerf.fenceWaitTicks +
framePerf.feedReadTicks +
framePerf.stageCopyTicks +
framePerf.uploadRecordTicks +
framePerf.layoutTicks +
framePerf.imguiTicks +
framePerf.drawRecordTicks +
framePerf.acquireTicks +
framePerf.submitPresentTicks +
framePerf.idleDelayTicks;
const uint64_t otherTicks =
currentFrameTicks > accountedTicks
? currentFrameTicks - accountedTicks
: 0;
std::cout
<< "SPIKE frame="
<< (currentFrameTicks * invMs)
<< "ms event="
<< (framePerf.eventTicks * invMs)
<< "ms fence="
<< (framePerf.fenceWaitTicks * invMs)
<< "ms feedRead="
<< (framePerf.feedReadTicks * invMs)
<< "ms stageCopy="
<< (framePerf.stageCopyTicks * invMs)
<< "ms stageCopies="
<< framePerf.stageCopies
<< " v210Copies="
<< framePerf.v210StageCopies
<< " maxCopy=f"
<< framePerf.maxStageCopyFeed
<< ":"
<< (framePerf.maxStageCopyTicks * invMs)
<< "ms/"
<< (static_cast<double>(
framePerf.maxStageCopyBytes) /
(1024.0 * 1024.0))
<< "MiB"
<< " uploadRecord="
<< (framePerf.uploadRecordTicks * invMs)
<< "ms layout="
<< (framePerf.layoutTicks * invMs)
<< "ms imgui="
<< (framePerf.imguiTicks * invMs)
<< "ms drawRecord="
<< (framePerf.drawRecordTicks * invMs)
<< "ms acquire="
<< (framePerf.acquireTicks * invMs)
<< "ms submitPresent="
<< (framePerf.submitPresentTicks * invMs)
<< "ms idleDelay="
<< (framePerf.idleDelayTicks * invMs)
<< "ms other="
<< (otherTicks * invMs)
<< "ms"
<< std::endl;
}
const uint64_t elapsedTicks = now - lastPerfLogTicks; const uint64_t elapsedTicks = now - lastPerfLogTicks;
@@ -1595,9 +1907,6 @@ int main(int argc, char* argv[])
const double elapsedSeconds = const double elapsedSeconds =
static_cast<double>(elapsedTicks) / static_cast<double>(elapsedTicks) /
static_cast<double>(perfFrequency); static_cast<double>(perfFrequency);
const double invMs =
1000.0 /
static_cast<double>(perfFrequency);
const double frames = const double frames =
static_cast<double>(perfStats.frames); static_cast<double>(perfStats.frames);
@@ -1607,6 +1916,10 @@ int main(int argc, char* argv[])
<< (perfStats.feedReadTicks * invMs / frames) << (perfStats.feedReadTicks * invMs / frames)
<< "ms uploadDecode=" << "ms uploadDecode="
<< (perfStats.uploadDecodeTicks * invMs / frames) << (perfStats.uploadDecodeTicks * invMs / frames)
<< "ms stageCopy="
<< (perfStats.stageCopyTicks * invMs / frames)
<< "ms uploadRecord="
<< (perfStats.uploadRecordTicks * invMs / frames)
<< "ms submitPresent=" << "ms submitPresent="
<< (perfStats.submitPresentTicks * invMs / frames) << (perfStats.submitPresentTicks * invMs / frames)
<< "ms idleDelay=" << "ms idleDelay="
@@ -1625,6 +1938,8 @@ int main(int argc, char* argv[])
<< feedRuntimeStatusName( << feedRuntimeStatusName(
feeds[i]->status()) feeds[i]->status())
<< ":upd=" << feedPerfStats[i].updates << ":upd=" << feedPerfStats[i].updates
<< ",upl=" << feedPerfStats[i].uploads
<< ",def=" << feedPerfStats[i].deferredUploads
<< ",rep=" << feedPerfStats[i].repeats; << ",rep=" << feedPerfStats[i].repeats;
if (feedPerfStats[i].hasLastGrain) if (feedPerfStats[i].hasLastGrain)
@@ -1638,6 +1953,44 @@ int main(int argc, char* argv[])
} }
std::cout << std::endl; std::cout << std::endl;
std::cout << "JITTER";
for (uint32_t i = 0; i < feedCount; ++i)
{
std::cout << " f" << (i + 1)
<< ":upl=" << feedPerfStats[i].uploads;
if (feedPerfStats[i].uploadIntervals > 0)
{
const double avgMs =
feedPerfStats[i].uploadIntervalTicks *
invMs /
static_cast<double>(
feedPerfStats[i].uploadIntervals);
const double minMs =
feedPerfStats[i].minUploadIntervalTicks *
invMs;
const double maxMs =
feedPerfStats[i].maxUploadIntervalTicks *
invMs;
std::cout
<< ",avg=" << avgMs
<< "ms,min=" << minMs
<< "ms,max=" << maxMs
<< "ms";
}
if (feeds[i]->hasFrameRate() &&
feeds[i]->frameRate() > 0.0)
{
std::cout
<< ",exp="
<< (1000.0 / feeds[i]->frameRate())
<< "ms";
}
}
std::cout << std::endl;
ThreadCpuSamples currentThreadCpuSamples = ThreadCpuSamples currentThreadCpuSamples =
collectThreadCpuSamples(); collectThreadCpuSamples();
printThreadCpuPerf( printThreadCpuPerf(