From 0ddfb0c9f845e9d8b049a0a71866231518ec649d Mon Sep 17 00:00:00 2001 From: Mario Guggenberger Date: Sat, 18 Nov 2023 14:35:39 +0100 Subject: [PATCH] feat: Linux support --- Dockerfile.libaurioffmpegproxytest | 15 + README.md | 31 +- install-deps.sh | 10 + libs/ffmpeg/.gitignore | 1 + nativesrc/CMakeLists.txt | 2 +- nativesrc/CMakePresets.json | 17 +- nativesrc/aurioffmpegproxy/CMakeLists.txt | 72 ++++- nativesrc/aurioffmpegproxy/main.c | 22 +- nativesrc/aurioffmpegproxy/proxy.c | 44 +-- nativesrc/aurioffmpegproxy/proxy.h | 20 +- nativesrc/aurioffmpegproxy/seekindex.c | 5 +- src/Aurio.FFmpeg/Aurio.FFmpeg.csproj | 37 ++- src/Aurio.FFmpeg/Interop64.cs | 2 +- src/Aurio.Test.NetCore/Program.cs | 1 - src/Aurio.UnitTest/Aurio.UnitTest.csproj | 1 - src/Aurio.UnitTest/CommonStreamTest.cs | 2 +- src/Aurio.UnitTest/MockResamplerFactory.cs | 74 +++++ src/Aurio.UnitTest/ResamplingStreamTest.cs | 2 +- src/Aurio.UnitTest/TimeWarpCollectionTest.cs | 7 + src/Aurio.UnitTest/TimeWarpStreamTest.cs | 7 + src/Aurio.sln | 310 +++++++++++++++++++ src/Aurio/Aurio.csproj | 2 +- src/Directory.Build.props | 2 + 23 files changed, 603 insertions(+), 83 deletions(-) create mode 100644 Dockerfile.libaurioffmpegproxytest create mode 100644 install-deps.sh create mode 100644 src/Aurio.UnitTest/MockResamplerFactory.cs diff --git a/Dockerfile.libaurioffmpegproxytest b/Dockerfile.libaurioffmpegproxytest new file mode 100644 index 00000000..68cad13f --- /dev/null +++ b/Dockerfile.libaurioffmpegproxytest @@ -0,0 +1,15 @@ +# A simple image to test the Linux build of the aurioffmpegproxy library. +# +# Usage: +# 1. build native library (with cmake) +# 2. build image: docker build -f Dockerfile.libaurioffmpegproxytest --tag aurioffmpegproxy nativesrc/out/build/linux-debug/aurioffmpegproxy +# 3. run container: docker run -it --rm aurioffmpegproxy [mediafile] +# +# Expected output is "No source file specified" when no mediafile is specified. + +FROM ubuntu:22.04 + +WORKDIR /aurioffmpegproxy +COPY . . + +ENTRYPOINT [ "/aurioffmpegproxy/aurioffmpegproxy" ] diff --git a/README.md b/README.md index f7f30526..5ee62a1e 100644 --- a/README.md +++ b/README.md @@ -122,21 +122,38 @@ Requirements ------------ * Windows -* Visual Studio 2022 + - Visual Studio 2022 (with CMake tools) +* Linux + - Ubuntu 22.04 + - CMake + - Ninja * .NET SDK 6.0 Build Instructions ------------------ -1. Install dependencies +### Windows +1. Install build environment (see requirements above) +2. Install dependencies - Run `install-deps.ps1` in PowerShell -2. Build native code in `cmd` (or open `.\nativesrc` project in VS 2022) +3. Build native code in `cmd` (or open `.\nativesrc` project in VS 2022) - `"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x64` - - `cmake .\nativesrc --preset x64-debug` - - `cmake --build .\nativesrc\out\build\x64-debug` -3. Build managed code (or open `.\src` in VS 2022) - - `dotnet build .\src -c Debug` + - `cmake nativesrc --preset x64-debug` + - `cmake --build nativesrc\out\build\x64-debug` +4. Build managed code (or open `.\src` in VS 2022) + - `dotnet build src -c Debug` + +### Linux +1. Install build environment + - `apt install cmake ninja-build dotnet-sdk-6.0` +2. Install dependencies + - Run `install-deps.sh` +3. Build native code + - `cmake nativesrc --preset linux-debug` + - `cmake --build nativesrc/out/build/linux-debug` +4. Build managed code + - `dotnet build src -c LinuxDebug` Documentation diff --git a/install-deps.sh b/install-deps.sh new file mode 100644 index 00000000..b6e05d97 --- /dev/null +++ b/install-deps.sh @@ -0,0 +1,10 @@ +#!/bin/bash +VERSION=ffmpeg-n6.0-latest-linux64-lgpl-shared-6.0 +LOCALNAME=linux64 +ARCHIVE=$VERSION.tar.xz +DEST=./libs/ffmpeg + +wget -O $ARCHIVE https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/$ARCHIVE && \ + tar xf $ARCHIVE -C $DEST && \ + rm $ARCHIVE && \ + mv $DEST/$VERSION $DEST/$LOCALNAME \ No newline at end of file diff --git a/libs/ffmpeg/.gitignore b/libs/ffmpeg/.gitignore index 9bb3fd87..6a2eaf06 100644 --- a/libs/ffmpeg/.gitignore +++ b/libs/ffmpeg/.gitignore @@ -1 +1,2 @@ /win64 +/linux64 \ No newline at end of file diff --git a/nativesrc/CMakeLists.txt b/nativesrc/CMakeLists.txt index 92f3789c..0230bc81 100644 --- a/nativesrc/CMakeLists.txt +++ b/nativesrc/CMakeLists.txt @@ -9,7 +9,7 @@ if (POLICY CMP0141) set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$,$>,$<$:EditAndContinue>,$<$:ProgramDatabase>>") endif() -project ("aurio") +project ("aurio" C) # Include sub-projects. add_subdirectory ("aurioffmpegproxy") diff --git a/nativesrc/CMakePresets.json b/nativesrc/CMakePresets.json index 989cbbd7..4f0d8376 100644 --- a/nativesrc/CMakePresets.json +++ b/nativesrc/CMakePresets.json @@ -58,14 +58,11 @@ } }, { - "name": "linux-debug", - "displayName": "Linux Debug", + "name": "linux-base", + "hidden": true, "generator": "Ninja", "binaryDir": "${sourceDir}/out/build/${presetName}", "installDir": "${sourceDir}/out/install/${presetName}", - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Debug" - }, "condition": { "type": "equals", "lhs": "${hostSystemName}", @@ -77,10 +74,18 @@ } } }, + { + "name": "linux-debug", + "displayName": "Linux Debug", + "inherits": "linux-base", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug" + } + }, { "name": "linux-release", "displayName": "Linux Release", - "inherits": "linux-debug", + "inherits": "linux-base", "cacheVariables": { "CMAKE_BUILD_TYPE": "Release" } diff --git a/nativesrc/aurioffmpegproxy/CMakeLists.txt b/nativesrc/aurioffmpegproxy/CMakeLists.txt index 9b4e184d..370d6080 100644 --- a/nativesrc/aurioffmpegproxy/CMakeLists.txt +++ b/nativesrc/aurioffmpegproxy/CMakeLists.txt @@ -1,4 +1,8 @@ -add_library (aurioffmpegproxy SHARED "proxy.c" "proxy.h" "seekindex.c" "seekindex.h") +# Force library to scan local directory for FFmpeg libs. Without it, `LD_LIBRARY_PATH=.` is needed. +# This must come before add_library/add_executable +set(CMAKE_BUILD_RPATH "$ORIGIN") + +add_library (aurioffmpegproxy SHARED "proxy.c" "proxy.h" "seekindex.c" "seekindex.h") add_executable (aurioffmpegproxy_exe "main.c") set_property(TARGET aurioffmpegproxy_exe PROPERTY OUTPUT_NAME aurioffmpegproxy) target_link_libraries(aurioffmpegproxy_exe aurioffmpegproxy) @@ -7,23 +11,57 @@ if (CMAKE_VERSION VERSION_GREATER 3.12) set_property(TARGET ${TARGET_NAME} PROPERTY CXX_STANDARD 20) endif() -# FFmpeg -set(FFMPEG_PLATFORM win64) +if (WIN32) + set(FFMPEG_PLATFORM win64) + set(LIB_PREFIX "") + set(LIB_EXT .lib) +else() + set(FFMPEG_PLATFORM linux64) + set(LIB_PREFIX "lib") + set(LIB_EXT .so) +endif() + +# No PkgConfig on Windows, and the hacky workaround works on Windows and Linux. +#find_package(PkgConfig REQUIRED) +#set(CMAKE_PREFIX_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../libs/ffmpeg/${FFMPEG_PLATFORM}/") +#pkg_check_modules(LIBAV REQUIRED IMPORTED_TARGET +# libavcodec +# libavformat +# libavutil +# libswresample +# libswscale +#) +#target_link_libraries(aurioffmpegproxy PkgConfig::LIBAV) + set(FFMPEG_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../libs/ffmpeg/${FFMPEG_PLATFORM}/) target_include_directories(aurioffmpegproxy PUBLIC ${FFMPEG_DIR}/include/) target_link_libraries(aurioffmpegproxy PRIVATE - ${FFMPEG_DIR}/lib/avcodec.lib - ${FFMPEG_DIR}/lib/avformat.lib - ${FFMPEG_DIR}/lib/avutil.lib - ${FFMPEG_DIR}/lib/swresample.lib - ${FFMPEG_DIR}/lib/swscale.lib -) -add_custom_command(TARGET aurioffmpegproxy POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_if_different - ${FFMPEG_DIR}/bin/avcodec-60.dll - ${FFMPEG_DIR}/bin/avformat-60.dll - ${FFMPEG_DIR}/bin/avutil-58.dll - ${FFMPEG_DIR}/bin/swresample-4.dll - ${FFMPEG_DIR}/bin/swscale-7.dll - $ + ${FFMPEG_DIR}/lib/${LIB_PREFIX}avcodec${LIB_EXT} + ${FFMPEG_DIR}/lib/${LIB_PREFIX}avformat${LIB_EXT} + ${FFMPEG_DIR}/lib/${LIB_PREFIX}avutil${LIB_EXT} + ${FFMPEG_DIR}/lib/${LIB_PREFIX}swresample${LIB_EXT} + ${FFMPEG_DIR}/lib/${LIB_PREFIX}swscale${LIB_EXT} ) + +# Copy libraries to build output directory +if (WIN32) + add_custom_command(TARGET aurioffmpegproxy POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${FFMPEG_DIR}/bin/avcodec-60.dll + ${FFMPEG_DIR}/bin/avformat-60.dll + ${FFMPEG_DIR}/bin/avutil-58.dll + ${FFMPEG_DIR}/bin/swresample-4.dll + ${FFMPEG_DIR}/bin/swscale-7.dll + $ + ) +else() + add_custom_command(TARGET aurioffmpegproxy POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${FFMPEG_DIR}/lib/${LIB_PREFIX}avcodec${LIB_EXT}.60 + ${FFMPEG_DIR}/lib/${LIB_PREFIX}avformat${LIB_EXT}.60 + ${FFMPEG_DIR}/lib/${LIB_PREFIX}avutil${LIB_EXT}.58 + ${FFMPEG_DIR}/lib/${LIB_PREFIX}swresample${LIB_EXT}.4 + ${FFMPEG_DIR}/lib/${LIB_PREFIX}swscale${LIB_EXT}.7 + $ + ) +endif() diff --git a/nativesrc/aurioffmpegproxy/main.c b/nativesrc/aurioffmpegproxy/main.c index c42a816d..588014aa 100644 --- a/nativesrc/aurioffmpegproxy/main.c +++ b/nativesrc/aurioffmpegproxy/main.c @@ -17,6 +17,10 @@ // #include "proxy.h" +#ifndef max +#define max(a,b) (((a) > (b)) ? (a) : (b)) +#endif + FILE* file_open(const char* filename) { return fopen(filename, "rb"); } @@ -29,11 +33,11 @@ int file_close(FILE* f) { return fclose(f); } -int file_read_packet(FILE* f, uint8_t* buf, int buf_size) { +int file_read_packet(void* f, uint8_t* buf, int buf_size) { return (int)fread(buf, 1, buf_size, f); } -int64_t file_seek(FILE* f, int64_t offset, int whence) { +int64_t file_seek(void* f, int64_t offset, int whence) { if (whence == AVSEEK_SIZE) { long current_pos = ftell(f); // temporarily save current position fseek(f, 0, SEEK_END); // seek to end @@ -84,14 +88,14 @@ int main(int argc, char* argv[]) //info(pi->fmt_ctx); if (mode & TYPE_AUDIO) { - printf("audio length: %lld, frame size: %d\n", pi->audio_output.length, pi->audio_output.frame_size); + printf("audio length: %"PRId64", frame size: %d\n", pi->audio_output.length, pi->audio_output.frame_size); printf("audio format (samplerate/samplesize/channels): %d/%d/%d\n", pi->audio_output.format.sample_rate, pi->audio_output.format.sample_size, pi->audio_output.format.channels); audio_output_buffer_size = pi->audio_output.frame_size * pi->audio_output.format.channels * pi->audio_output.format.sample_size; } if (mode & TYPE_VIDEO) { - printf("video length: %lld, frame size: %d\n", pi->video_output.length, pi->video_output.frame_size); + printf("video length: %"PRId64", frame size: %d\n", pi->video_output.length, pi->video_output.frame_size); printf("video format (width/height/fps/aspect): %d/%d/%f/%f\n", pi->video_output.format.width, pi->video_output.format.height, pi->video_output.format.frame_rate, pi->video_output.format.aspect_ratio); @@ -103,7 +107,7 @@ int main(int argc, char* argv[]) // read full stream int64_t count1 = 0, last_ts1 = -1; while ((ret = stream_read_frame(pi, ×tamp, output_buffer, output_buffer_size, &frame_type)) >= 0) { - printf("read %d @ %lld type %d\n", ret, timestamp, frame_type); + printf("read %d @ %"PRId64" type %d\n", ret, timestamp, frame_type); if (frame_type == TYPE_VIDEO) { printf("keyframe %d, pict_type %d, interlaced %d, top_field_first %d\n", pi->video_output.current_frame.keyframe, pi->video_output.current_frame.pict_type, @@ -125,7 +129,7 @@ int main(int argc, char* argv[]) int64_t accumulated_frame_length = 0; int last_ret = 0; while ((ret = stream_read_frame(pi, ×tamp, output_buffer, output_buffer_size, &frame_type)) >= 0) { - printf("read %d @ %lld type %d\n", ret, timestamp, frame_type); + printf("read %d @ %"PRId64" type %d\n", ret, timestamp, frame_type); count2++; last_ts2 = timestamp; if (frame_type == TYPE_AUDIO) { @@ -135,8 +139,8 @@ int main(int argc, char* argv[]) } int64_t length_from_last_ts = last_ts2 + last_ret; // last timestamp + frame length - printf("read1 count: %lld, timestamp: %lld\n", count1, last_ts1); - printf("read2 count: %lld, timestamp: %lld\n", count2, last_ts2); + printf("read1 count: %"PRId64", timestamp: %"PRId64"\n", count1, last_ts1); + printf("read2 count: %"PRId64", timestamp: %"PRId64"\n", count2, last_ts2); if (mode & TYPE_AUDIO) { // Print lengths from @@ -144,7 +148,7 @@ int main(int argc, char* argv[]) // - summed over all frames, // - and from the last timestamp + frame length // to compare for inconsistencies. - printf("audio length header/accumulated/last_ts: %lld/%lld/%lld\n", + printf("audio length header/accumulated/last_ts: %"PRId64"/%"PRId64"/%"PRId64"\n", pi->audio_output.length, accumulated_frame_length, length_from_last_ts); } diff --git a/nativesrc/aurioffmpegproxy/proxy.c b/nativesrc/aurioffmpegproxy/proxy.c index b022f789..9409e9f1 100644 --- a/nativesrc/aurioffmpegproxy/proxy.c +++ b/nativesrc/aurioffmpegproxy/proxy.c @@ -165,12 +165,8 @@ ProxyInstance *stream_open(ProxyInstance *pi) /* initialize sample format converter */ // http://stackoverflow.com/a/15372417 pi->swr = swr_alloc(); - if (!pi->audio_codec_ctx->channel_layout) { - // when no channel layout is set, set default layout - //pi->audio_codec_ctx->channel_layout = av_get_default_channel_layout(pi->audio_codec_ctx->channels); // TODO FIX - } - av_opt_set_int(pi->swr, "in_channel_layout", pi->audio_codec_ctx->channel_layout, 0); - av_opt_set_int(pi->swr, "out_channel_layout", pi->audio_codec_ctx->channel_layout, 0); + av_opt_set_chlayout(pi->swr, "in_chlayout", &pi->audio_codec_ctx->ch_layout, 0); + av_opt_set_chlayout(pi->swr, "out_chlayout", &pi->audio_codec_ctx->ch_layout, 0); av_opt_set_int(pi->swr, "in_sample_rate", pi->audio_codec_ctx->sample_rate, 0); av_opt_set_int(pi->swr, "out_sample_rate", pi->audio_codec_ctx->sample_rate, 0); av_opt_set_sample_fmt(pi->swr, "in_sample_fmt", pi->audio_codec_ctx->sample_fmt, 0); @@ -182,7 +178,7 @@ ProxyInstance *stream_open(ProxyInstance *pi) pi->audio_output.format.sample_rate = pi->audio_codec_ctx->sample_rate; pi->audio_output.format.sample_size = av_get_bytes_per_sample(determine_target_format(pi->audio_codec_ctx)); - pi->audio_output.format.channels = pi->audio_codec_ctx->channels; + pi->audio_output.format.channels = pi->audio_codec_ctx->ch_layout.nb_channels; if (DEBUG) { printf("audio_output.format: %d sample_rate, %d sample_size, %d channels\n", @@ -210,7 +206,7 @@ ProxyInstance *stream_open(ProxyInstance *pi) pi->audio_output.frame_size = pi->audio_output.format.sample_rate; // 1 sec default frame size if (DEBUG) { - printf("output: %lld length, %d frame_size\n", pi->audio_output.length, pi->audio_output.frame_size); + printf("output: %"PRId64" length, %d frame_size\n", pi->audio_output.length, pi->audio_output.frame_size); } if (pi->audio_codec_ctx->codec->capabilities & AV_CODEC_CAP_DELAY) { @@ -258,7 +254,7 @@ ProxyInstance *stream_open(ProxyInstance *pi) pi->video_output.frame_size = pi->video_output.format.width * pi->video_output.format.height * 4; // TODO determine real size if (DEBUG) { - printf("output: %lld length, %d frame_size\n", pi->video_output.length, pi->video_output.frame_size); + printf("output: %"PRId64" length, %d frame_size\n", pi->video_output.length, pi->video_output.frame_size); } if (pi->video_codec_ctx->codec->capabilities & AV_CODEC_CAP_DELAY) { @@ -501,7 +497,7 @@ void stream_seek(ProxyInstance *pi, int64_t timestamp, int type) if (seekindex != NULL) { int64_t index_timestamp; if (seekindex_find(seekindex, timestamp, &index_timestamp) == 0) { - printf("adjusting seek timestamp by index: %lld -> %lld\n", timestamp, index_timestamp); + printf("adjusting seek timestamp by index: %"PRId64" -> %"PRId64"\n", timestamp, index_timestamp); timestamp = index_timestamp; } } @@ -696,9 +692,9 @@ static void info(AVFormatContext *fmt_ctx) printf("STREAM INDEX %d\n", stream->index); printf(" frame rate: .......... %d/%d (real base frame rate)\n", stream->r_frame_rate.num, stream->r_frame_rate.den); printf(" time base: ........... %d/%d\n", stream->time_base.num, stream->time_base.den); - printf(" start time: .......... %lld\n", stream->start_time); - printf(" duration: ............ %lld\n", stream->duration); - printf(" number of frames: .... %lld\n", stream->nb_frames); + printf(" start time: .......... %"PRId64"\n", stream->start_time); + printf(" duration: ............ %"PRId64"\n", stream->duration); + printf(" number of frames: .... %"PRId64"\n", stream->nb_frames); printf(" sample aspect ratio: . %d:%d\n", stream->sample_aspect_ratio.num, stream->sample_aspect_ratio.den); printf(" calculated length: ... %s\n", av_ts2timestr(stream->duration, &stream->time_base)); @@ -707,7 +703,7 @@ static void info(AVFormatContext *fmt_ctx) AVCodecParameters* codecpar = fmt_ctx->streams[i]->codecpar; printf(" CODEC CONTEXT:\n"); - printf(" average bit rate: .. %lld\n", codecpar->bit_rate); + printf(" average bit rate: .. %"PRId64"\n", codecpar->bit_rate); printf(" width: ............. %d\n", codecpar->width); printf(" height: ............ %d\n", codecpar->height); printf(" sample rate: ....... %d\n", codecpar->sample_rate); @@ -784,7 +780,7 @@ static int open_codec_context(AVFormatContext *fmt_ctx, AVCodecContext **codec_c printf("audio sampleformat: %s, planar: %d, channels: %d, raw bitdepth: %d, bitdepth: %d\n", av_get_sample_fmt_name(context->sample_fmt), av_sample_fmt_is_planar(context->sample_fmt), - context->channels, + context->ch_layout.nb_channels, context->bits_per_raw_sample, av_get_bytes_per_sample(context->sample_fmt) * 8); } @@ -884,9 +880,9 @@ static int decode_video_packet(ProxyInstance *pi, int *got_video_frame, int cach av_ts2timestr(pi->pkt->pts, &pi->video_stream->time_base), av_ts2timestr(pi->pkt->duration, &pi->video_stream->time_base)); - printf("video_frame%s n:%d coded_n:%d pts:%s\n", + printf("video_frame%s n:%d pts:%s\n", cached ? "(cached)" : "", - video_frame_count++, pi->frame->coded_picture_number, + video_frame_count++, av_ts2timestr(pi->frame->pts, &pi->video_stream->time_base)); } @@ -895,13 +891,19 @@ static int decode_video_packet(ProxyInstance *pi, int *got_video_frame, int cach static int convert_audio_samples(ProxyInstance *pi) { /* prepare/update sample format conversion buffer */ - int output_buffer_size_needed = pi->frame->nb_samples * pi->frame->channels * av_get_bytes_per_sample(pi->audio_codec_ctx->sample_fmt); + int output_buffer_size_needed = pi->frame->nb_samples * pi->frame->ch_layout.nb_channels * av_get_bytes_per_sample(pi->audio_codec_ctx->sample_fmt); if (pi->output_buffer_size < output_buffer_size_needed) { fprintf(stderr, "output buffer too small (%d < %d)\n", pi->output_buffer_size, output_buffer_size_needed); } /* convert samples to target format */ +#ifdef __GNUC__ +#pragma GCC diagnostic ignored "-Wincompatible-pointer-types" +#endif int ret = swr_convert(pi->swr, &pi->output_buffer, pi->frame->nb_samples, pi->frame->extended_data, pi->frame->nb_samples); +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif if (ret < 0) { fprintf(stderr, "Could not convert input samples\n"); } @@ -921,7 +923,13 @@ static int convert_video_frame(ProxyInstance *pi) { * with e.g. rgbstride = 960 for a 320px wide picture. */ uint8_t *output_buffer_workaround = pi->output_buffer; int rgbstride[1] = { pi->frame->linesize[0] * 3 }; +#ifdef __GNUC__ +#pragma GCC diagnostic ignored "-Wincompatible-pointer-types" +#endif int ret = sws_scale(pi->sws, pi->frame->data, pi->frame->linesize, 0, pi->video_codec_ctx->height, &output_buffer_workaround, rgbstride); +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif if (ret < 0) { fprintf(stderr, "Could not convert frame\n"); } diff --git a/nativesrc/aurioffmpegproxy/proxy.h b/nativesrc/aurioffmpegproxy/proxy.h index 62e9d185..a5a1b20b 100644 --- a/nativesrc/aurioffmpegproxy/proxy.h +++ b/nativesrc/aurioffmpegproxy/proxy.h @@ -20,12 +20,12 @@ #include // FFmpeg includes -#include "libavcodec\avcodec.h" -#include "libavformat\avformat.h" -#include "libavutil\timestamp.h" -#include "libswresample\swresample.h" -#include "libavutil\opt.h" -#include "libswscale\swscale.h" +#include "libavcodec/avcodec.h" +#include "libavformat/avformat.h" +#include "libavutil/timestamp.h" +#include "libswresample/swresample.h" +#include "libavutil/opt.h" +#include "libswscale/swscale.h" #include "seekindex.h" @@ -82,7 +82,13 @@ typedef struct ProxyInstance { } video_output; } ProxyInstance; -#define EXPORT __declspec(dllexport) +#if defined(_MSC_VER) + #define EXPORT __declspec(dllexport) +#else + // https://gcc.gnu.org/wiki/Visibility + #define EXPORT __attribute__ ((visibility ("default"))) +#endif + #define DEBUG 0 #define TYPE_NONE 0x00 diff --git a/nativesrc/aurioffmpegproxy/seekindex.c b/nativesrc/aurioffmpegproxy/seekindex.c index 95f83448..0e68bad3 100644 --- a/nativesrc/aurioffmpegproxy/seekindex.c +++ b/nativesrc/aurioffmpegproxy/seekindex.c @@ -21,6 +21,7 @@ #include #include #include +#include #include "seekindex.h" @@ -220,7 +221,7 @@ void seekindex_test() { for (int64_t x = 0; x < interval; x += increment) { seekindex_build_add(si, x); - printf("adding %lld\n", x); + printf("adding %"PRId64"\n", x); } seekindex_build_finalize(si); @@ -228,7 +229,7 @@ void seekindex_test() { int64_t output = 0; for (int64_t x = -5; x < interval + 5; x++) { int status = seekindex_find(si, x, &output); - printf("lookup of %lld resulted in %lld (status %d)\n", x, output, status); + printf("lookup of %"PRId64" resulted in %"PRId64" (status %d)\n", x, output, status); } seekindex_free(si); diff --git a/src/Aurio.FFmpeg/Aurio.FFmpeg.csproj b/src/Aurio.FFmpeg/Aurio.FFmpeg.csproj index 6c80dc7d..19689ee9 100644 --- a/src/Aurio.FFmpeg/Aurio.FFmpeg.csproj +++ b/src/Aurio.FFmpeg/Aurio.FFmpeg.csproj @@ -1,37 +1,54 @@  - net6.0-windows + net6.0 Aurio FFmpeg Interface - x64-debug - x64-release + Debug;Release;LinuxDebug;LinuxRelease + x64-debug + x64-release + linux-debug + linux-release ..\..\nativesrc\out\build\$(FFmpegProxyConfiguration)\aurioffmpegproxy - + - ffmpeg\aurioffmpegproxy.dll PreserveNewest - ffmpeg\avcodec-60.dll PreserveNewest - ffmpeg\avformat-60.dll PreserveNewest - ffmpeg\avutil-58.dll PreserveNewest - ffmpeg\swresample-4.dll PreserveNewest - ffmpeg\swscale-7.dll + PreserveNewest + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + PreserveNewest diff --git a/src/Aurio.FFmpeg/Interop64.cs b/src/Aurio.FFmpeg/Interop64.cs index 033596fa..c70cf67a 100644 --- a/src/Aurio.FFmpeg/Interop64.cs +++ b/src/Aurio.FFmpeg/Interop64.cs @@ -26,7 +26,7 @@ namespace Aurio.FFmpeg { internal class Interop64 { - private const string FFMPEGPROXYLIB = "ffmpeg\\aurioffmpegproxy.dll"; + private const string FFMPEGPROXYLIB = "aurioffmpegproxy"; [DllImport(FFMPEGPROXYLIB, CallingConvention = InteropWrapper.CC)] public static extern IntPtr stream_open_file(Type mode, string filename); diff --git a/src/Aurio.Test.NetCore/Program.cs b/src/Aurio.Test.NetCore/Program.cs index c4c95ec2..e6db6292 100644 --- a/src/Aurio.Test.NetCore/Program.cs +++ b/src/Aurio.Test.NetCore/Program.cs @@ -9,7 +9,6 @@ class Program static void Main(string[] args) { FFTFactory.Factory = new Exocortex.FFTFactory(); - ResamplerFactory.Factory = new NAudioWdlResamplerFactory(); Console.WriteLine("Hello World!"); } diff --git a/src/Aurio.UnitTest/Aurio.UnitTest.csproj b/src/Aurio.UnitTest/Aurio.UnitTest.csproj index f1e0472d..be7b517d 100644 --- a/src/Aurio.UnitTest/Aurio.UnitTest.csproj +++ b/src/Aurio.UnitTest/Aurio.UnitTest.csproj @@ -6,7 +6,6 @@ - diff --git a/src/Aurio.UnitTest/CommonStreamTest.cs b/src/Aurio.UnitTest/CommonStreamTest.cs index 06ee5d5f..5a50eeb4 100644 --- a/src/Aurio.UnitTest/CommonStreamTest.cs +++ b/src/Aurio.UnitTest/CommonStreamTest.cs @@ -12,7 +12,7 @@ public class CommonStreamTest [ClassInitialize()] public static void MyClassInitialize(TestContext testContext) { - ResamplerFactory.Factory = new Soxr.ResamplerFactory(); + ResamplerFactory.Factory = new MockResamplerFactory(); } [TestMethod] diff --git a/src/Aurio.UnitTest/MockResamplerFactory.cs b/src/Aurio.UnitTest/MockResamplerFactory.cs new file mode 100644 index 00000000..d92ee229 --- /dev/null +++ b/src/Aurio.UnitTest/MockResamplerFactory.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Aurio.Resampler; + +namespace Aurio.UnitTest +{ + internal class MockResamplerFactory : IResamplerFactory + { + public bool CheckRatio(double sampleRateRatio) + { + return true; + } + + public IResampler CreateInstance( + ResamplingQuality quality, + int channels, + double sampleRateRatio + ) + { + return new MockResampler(quality, channels, sampleRateRatio); + } + } + + internal class MockResampler : IResampler + { + public MockResampler(ResamplingQuality quality, int channels, double sampleRateRatio) + { + Quality = quality; + Channels = channels; + Ratio = sampleRateRatio; + } + + public ResamplingQuality Quality { get; set; } + + public int Channels { get; set; } + + public double Ratio { get; set; } + + public bool VariableRate => false; + + public void Clear() { } + + public void Dispose() { } + + public double GetOutputDelay() + { + return 0; + } + + public void Process( + byte[] input, + int inputOffset, + int inputLength, + byte[] output, + int outputOffset, + int outputLength, + bool endOfInput, + out int inputLengthUsed, + out int outputLengthGenerated + ) + { + Array.Copy(input, inputOffset, output, outputOffset, inputLength); + inputLengthUsed = outputLengthGenerated = inputLength; + } + + public void SetRatio(double ratio, int transitionLength) + { + Ratio = ratio; + } + } +} diff --git a/src/Aurio.UnitTest/ResamplingStreamTest.cs b/src/Aurio.UnitTest/ResamplingStreamTest.cs index 96033296..dc36f90a 100644 --- a/src/Aurio.UnitTest/ResamplingStreamTest.cs +++ b/src/Aurio.UnitTest/ResamplingStreamTest.cs @@ -28,7 +28,7 @@ public TestContext TestContext [ClassInitialize()] public static void MyClassInitialize(TestContext testContext) { - ResamplerFactory.Factory = new Soxr.ResamplerFactory(); + ResamplerFactory.Factory = new MockResamplerFactory(); } [TestInitialize()] diff --git a/src/Aurio.UnitTest/TimeWarpCollectionTest.cs b/src/Aurio.UnitTest/TimeWarpCollectionTest.cs index 9e95caac..3c300587 100644 --- a/src/Aurio.UnitTest/TimeWarpCollectionTest.cs +++ b/src/Aurio.UnitTest/TimeWarpCollectionTest.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Collections.Specialized; +using Aurio.Resampler; using Aurio.Streams; using Microsoft.VisualStudio.TestTools.UnitTesting; @@ -54,6 +55,12 @@ public TestContext TestContext // #endregion + [ClassInitialize()] + public static void MyClassInitialize(TestContext testContext) + { + ResamplerFactory.Factory = new MockResamplerFactory(); + } + [TestMethod()] public void TWC1() { diff --git a/src/Aurio.UnitTest/TimeWarpStreamTest.cs b/src/Aurio.UnitTest/TimeWarpStreamTest.cs index 98e4726b..78df8590 100644 --- a/src/Aurio.UnitTest/TimeWarpStreamTest.cs +++ b/src/Aurio.UnitTest/TimeWarpStreamTest.cs @@ -1,4 +1,5 @@ using System; +using Aurio.Resampler; using Aurio.Streams; using Microsoft.VisualStudio.TestTools.UnitTesting; @@ -63,6 +64,12 @@ public TestContext TestContext #endregion + [ClassInitialize()] + public static void MyClassInitialize(TestContext testContext) + { + ResamplerFactory.Factory = new MockResamplerFactory(); + } + //[TestMethod()] //public void Mapping01() { // Assert.AreEqual(7, stream.CalculateWarpedPosition(5)); diff --git a/src/Aurio.sln b/src/Aurio.sln index 21326943..a176945d 100644 --- a/src/Aurio.sln +++ b/src/Aurio.sln @@ -80,6 +80,12 @@ Global Debug|Any CPU = Debug|Any CPU Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 + LinuxDebug|Any CPU = LinuxDebug|Any CPU + LinuxDebug|x64 = LinuxDebug|x64 + LinuxDebug|x86 = LinuxDebug|x86 + LinuxRelease|Any CPU = LinuxRelease|Any CPU + LinuxRelease|x64 = LinuxRelease|x64 + LinuxRelease|x86 = LinuxRelease|x86 Release|Any CPU = Release|Any CPU Release|x64 = Release|x64 Release|x86 = Release|x86 @@ -91,6 +97,16 @@ Global {FD0C6CC5-B509-4441-9AA2-E8B34BAD9F95}.Debug|x64.Build.0 = Debug|Any CPU {FD0C6CC5-B509-4441-9AA2-E8B34BAD9F95}.Debug|x86.ActiveCfg = Debug|Any CPU {FD0C6CC5-B509-4441-9AA2-E8B34BAD9F95}.Debug|x86.Build.0 = Debug|Any CPU + {FD0C6CC5-B509-4441-9AA2-E8B34BAD9F95}.LinuxDebug|Any CPU.ActiveCfg = Debug|Any CPU + {FD0C6CC5-B509-4441-9AA2-E8B34BAD9F95}.LinuxDebug|x64.ActiveCfg = Debug|Any CPU + {FD0C6CC5-B509-4441-9AA2-E8B34BAD9F95}.LinuxDebug|x64.Build.0 = Debug|Any CPU + {FD0C6CC5-B509-4441-9AA2-E8B34BAD9F95}.LinuxDebug|x86.ActiveCfg = Debug|Any CPU + {FD0C6CC5-B509-4441-9AA2-E8B34BAD9F95}.LinuxDebug|x86.Build.0 = Debug|Any CPU + {FD0C6CC5-B509-4441-9AA2-E8B34BAD9F95}.LinuxRelease|Any CPU.ActiveCfg = Release|Any CPU + {FD0C6CC5-B509-4441-9AA2-E8B34BAD9F95}.LinuxRelease|x64.ActiveCfg = Release|Any CPU + {FD0C6CC5-B509-4441-9AA2-E8B34BAD9F95}.LinuxRelease|x64.Build.0 = Release|Any CPU + {FD0C6CC5-B509-4441-9AA2-E8B34BAD9F95}.LinuxRelease|x86.ActiveCfg = Release|Any CPU + {FD0C6CC5-B509-4441-9AA2-E8B34BAD9F95}.LinuxRelease|x86.Build.0 = Release|Any CPU {FD0C6CC5-B509-4441-9AA2-E8B34BAD9F95}.Release|Any CPU.ActiveCfg = Release|Any CPU {FD0C6CC5-B509-4441-9AA2-E8B34BAD9F95}.Release|Any CPU.Build.0 = Release|Any CPU {FD0C6CC5-B509-4441-9AA2-E8B34BAD9F95}.Release|x64.ActiveCfg = Release|Any CPU @@ -103,6 +119,18 @@ Global {E868D91E-C5CF-46E4-BE2F-F95353ACB5E2}.Debug|x64.Build.0 = Debug|Any CPU {E868D91E-C5CF-46E4-BE2F-F95353ACB5E2}.Debug|x86.ActiveCfg = Debug|Any CPU {E868D91E-C5CF-46E4-BE2F-F95353ACB5E2}.Debug|x86.Build.0 = Debug|Any CPU + {E868D91E-C5CF-46E4-BE2F-F95353ACB5E2}.LinuxDebug|Any CPU.ActiveCfg = Debug|Any CPU + {E868D91E-C5CF-46E4-BE2F-F95353ACB5E2}.LinuxDebug|Any CPU.Build.0 = Debug|Any CPU + {E868D91E-C5CF-46E4-BE2F-F95353ACB5E2}.LinuxDebug|x64.ActiveCfg = Debug|Any CPU + {E868D91E-C5CF-46E4-BE2F-F95353ACB5E2}.LinuxDebug|x64.Build.0 = Debug|Any CPU + {E868D91E-C5CF-46E4-BE2F-F95353ACB5E2}.LinuxDebug|x86.ActiveCfg = Debug|Any CPU + {E868D91E-C5CF-46E4-BE2F-F95353ACB5E2}.LinuxDebug|x86.Build.0 = Debug|Any CPU + {E868D91E-C5CF-46E4-BE2F-F95353ACB5E2}.LinuxRelease|Any CPU.ActiveCfg = Release|Any CPU + {E868D91E-C5CF-46E4-BE2F-F95353ACB5E2}.LinuxRelease|Any CPU.Build.0 = Release|Any CPU + {E868D91E-C5CF-46E4-BE2F-F95353ACB5E2}.LinuxRelease|x64.ActiveCfg = Release|Any CPU + {E868D91E-C5CF-46E4-BE2F-F95353ACB5E2}.LinuxRelease|x64.Build.0 = Release|Any CPU + {E868D91E-C5CF-46E4-BE2F-F95353ACB5E2}.LinuxRelease|x86.ActiveCfg = Release|Any CPU + {E868D91E-C5CF-46E4-BE2F-F95353ACB5E2}.LinuxRelease|x86.Build.0 = Release|Any CPU {E868D91E-C5CF-46E4-BE2F-F95353ACB5E2}.Release|Any CPU.ActiveCfg = Release|Any CPU {E868D91E-C5CF-46E4-BE2F-F95353ACB5E2}.Release|Any CPU.Build.0 = Release|Any CPU {E868D91E-C5CF-46E4-BE2F-F95353ACB5E2}.Release|x64.ActiveCfg = Release|Any CPU @@ -115,6 +143,16 @@ Global {EDD59524-641D-4EB3-BF96-7138BBA8D009}.Debug|x64.Build.0 = Debug|Any CPU {EDD59524-641D-4EB3-BF96-7138BBA8D009}.Debug|x86.ActiveCfg = Debug|Any CPU {EDD59524-641D-4EB3-BF96-7138BBA8D009}.Debug|x86.Build.0 = Debug|Any CPU + {EDD59524-641D-4EB3-BF96-7138BBA8D009}.LinuxDebug|Any CPU.ActiveCfg = Debug|Any CPU + {EDD59524-641D-4EB3-BF96-7138BBA8D009}.LinuxDebug|x64.ActiveCfg = Debug|Any CPU + {EDD59524-641D-4EB3-BF96-7138BBA8D009}.LinuxDebug|x64.Build.0 = Debug|Any CPU + {EDD59524-641D-4EB3-BF96-7138BBA8D009}.LinuxDebug|x86.ActiveCfg = Debug|Any CPU + {EDD59524-641D-4EB3-BF96-7138BBA8D009}.LinuxDebug|x86.Build.0 = Debug|Any CPU + {EDD59524-641D-4EB3-BF96-7138BBA8D009}.LinuxRelease|Any CPU.ActiveCfg = Release|Any CPU + {EDD59524-641D-4EB3-BF96-7138BBA8D009}.LinuxRelease|x64.ActiveCfg = Release|Any CPU + {EDD59524-641D-4EB3-BF96-7138BBA8D009}.LinuxRelease|x64.Build.0 = Release|Any CPU + {EDD59524-641D-4EB3-BF96-7138BBA8D009}.LinuxRelease|x86.ActiveCfg = Release|Any CPU + {EDD59524-641D-4EB3-BF96-7138BBA8D009}.LinuxRelease|x86.Build.0 = Release|Any CPU {EDD59524-641D-4EB3-BF96-7138BBA8D009}.Release|Any CPU.ActiveCfg = Release|Any CPU {EDD59524-641D-4EB3-BF96-7138BBA8D009}.Release|Any CPU.Build.0 = Release|Any CPU {EDD59524-641D-4EB3-BF96-7138BBA8D009}.Release|x64.ActiveCfg = Release|Any CPU @@ -127,6 +165,16 @@ Global {43D48477-7227-4F75-B1DF-DBB584C53FC0}.Debug|x64.Build.0 = Debug|Any CPU {43D48477-7227-4F75-B1DF-DBB584C53FC0}.Debug|x86.ActiveCfg = Debug|Any CPU {43D48477-7227-4F75-B1DF-DBB584C53FC0}.Debug|x86.Build.0 = Debug|Any CPU + {43D48477-7227-4F75-B1DF-DBB584C53FC0}.LinuxDebug|Any CPU.ActiveCfg = Debug|Any CPU + {43D48477-7227-4F75-B1DF-DBB584C53FC0}.LinuxDebug|x64.ActiveCfg = Debug|Any CPU + {43D48477-7227-4F75-B1DF-DBB584C53FC0}.LinuxDebug|x64.Build.0 = Debug|Any CPU + {43D48477-7227-4F75-B1DF-DBB584C53FC0}.LinuxDebug|x86.ActiveCfg = Debug|Any CPU + {43D48477-7227-4F75-B1DF-DBB584C53FC0}.LinuxDebug|x86.Build.0 = Debug|Any CPU + {43D48477-7227-4F75-B1DF-DBB584C53FC0}.LinuxRelease|Any CPU.ActiveCfg = Release|Any CPU + {43D48477-7227-4F75-B1DF-DBB584C53FC0}.LinuxRelease|x64.ActiveCfg = Release|Any CPU + {43D48477-7227-4F75-B1DF-DBB584C53FC0}.LinuxRelease|x64.Build.0 = Release|Any CPU + {43D48477-7227-4F75-B1DF-DBB584C53FC0}.LinuxRelease|x86.ActiveCfg = Release|Any CPU + {43D48477-7227-4F75-B1DF-DBB584C53FC0}.LinuxRelease|x86.Build.0 = Release|Any CPU {43D48477-7227-4F75-B1DF-DBB584C53FC0}.Release|Any CPU.ActiveCfg = Release|Any CPU {43D48477-7227-4F75-B1DF-DBB584C53FC0}.Release|Any CPU.Build.0 = Release|Any CPU {43D48477-7227-4F75-B1DF-DBB584C53FC0}.Release|x64.ActiveCfg = Release|Any CPU @@ -139,6 +187,16 @@ Global {53EF9934-4B85-40E4-8846-1D2ACDA6A9E7}.Debug|x64.Build.0 = Debug|Any CPU {53EF9934-4B85-40E4-8846-1D2ACDA6A9E7}.Debug|x86.ActiveCfg = Debug|Any CPU {53EF9934-4B85-40E4-8846-1D2ACDA6A9E7}.Debug|x86.Build.0 = Debug|Any CPU + {53EF9934-4B85-40E4-8846-1D2ACDA6A9E7}.LinuxDebug|Any CPU.ActiveCfg = Debug|Any CPU + {53EF9934-4B85-40E4-8846-1D2ACDA6A9E7}.LinuxDebug|x64.ActiveCfg = Debug|Any CPU + {53EF9934-4B85-40E4-8846-1D2ACDA6A9E7}.LinuxDebug|x64.Build.0 = Debug|Any CPU + {53EF9934-4B85-40E4-8846-1D2ACDA6A9E7}.LinuxDebug|x86.ActiveCfg = Debug|Any CPU + {53EF9934-4B85-40E4-8846-1D2ACDA6A9E7}.LinuxDebug|x86.Build.0 = Debug|Any CPU + {53EF9934-4B85-40E4-8846-1D2ACDA6A9E7}.LinuxRelease|Any CPU.ActiveCfg = Release|Any CPU + {53EF9934-4B85-40E4-8846-1D2ACDA6A9E7}.LinuxRelease|x64.ActiveCfg = Release|Any CPU + {53EF9934-4B85-40E4-8846-1D2ACDA6A9E7}.LinuxRelease|x64.Build.0 = Release|Any CPU + {53EF9934-4B85-40E4-8846-1D2ACDA6A9E7}.LinuxRelease|x86.ActiveCfg = Release|Any CPU + {53EF9934-4B85-40E4-8846-1D2ACDA6A9E7}.LinuxRelease|x86.Build.0 = Release|Any CPU {53EF9934-4B85-40E4-8846-1D2ACDA6A9E7}.Release|Any CPU.ActiveCfg = Release|Any CPU {53EF9934-4B85-40E4-8846-1D2ACDA6A9E7}.Release|Any CPU.Build.0 = Release|Any CPU {53EF9934-4B85-40E4-8846-1D2ACDA6A9E7}.Release|x64.ActiveCfg = Release|Any CPU @@ -151,6 +209,16 @@ Global {7B4A521E-043B-4077-9C01-6DD36CFADE10}.Debug|x64.Build.0 = Debug|Any CPU {7B4A521E-043B-4077-9C01-6DD36CFADE10}.Debug|x86.ActiveCfg = Debug|Any CPU {7B4A521E-043B-4077-9C01-6DD36CFADE10}.Debug|x86.Build.0 = Debug|Any CPU + {7B4A521E-043B-4077-9C01-6DD36CFADE10}.LinuxDebug|Any CPU.ActiveCfg = Debug|Any CPU + {7B4A521E-043B-4077-9C01-6DD36CFADE10}.LinuxDebug|x64.ActiveCfg = Debug|Any CPU + {7B4A521E-043B-4077-9C01-6DD36CFADE10}.LinuxDebug|x64.Build.0 = Debug|Any CPU + {7B4A521E-043B-4077-9C01-6DD36CFADE10}.LinuxDebug|x86.ActiveCfg = Debug|Any CPU + {7B4A521E-043B-4077-9C01-6DD36CFADE10}.LinuxDebug|x86.Build.0 = Debug|Any CPU + {7B4A521E-043B-4077-9C01-6DD36CFADE10}.LinuxRelease|Any CPU.ActiveCfg = Release|Any CPU + {7B4A521E-043B-4077-9C01-6DD36CFADE10}.LinuxRelease|x64.ActiveCfg = Release|Any CPU + {7B4A521E-043B-4077-9C01-6DD36CFADE10}.LinuxRelease|x64.Build.0 = Release|Any CPU + {7B4A521E-043B-4077-9C01-6DD36CFADE10}.LinuxRelease|x86.ActiveCfg = Release|Any CPU + {7B4A521E-043B-4077-9C01-6DD36CFADE10}.LinuxRelease|x86.Build.0 = Release|Any CPU {7B4A521E-043B-4077-9C01-6DD36CFADE10}.Release|Any CPU.ActiveCfg = Release|Any CPU {7B4A521E-043B-4077-9C01-6DD36CFADE10}.Release|Any CPU.Build.0 = Release|Any CPU {7B4A521E-043B-4077-9C01-6DD36CFADE10}.Release|x64.ActiveCfg = Release|Any CPU @@ -163,6 +231,16 @@ Global {CC813B15-06BB-4334-96C6-DD252BE37D1B}.Debug|x64.Build.0 = Debug|Any CPU {CC813B15-06BB-4334-96C6-DD252BE37D1B}.Debug|x86.ActiveCfg = Debug|Any CPU {CC813B15-06BB-4334-96C6-DD252BE37D1B}.Debug|x86.Build.0 = Debug|Any CPU + {CC813B15-06BB-4334-96C6-DD252BE37D1B}.LinuxDebug|Any CPU.ActiveCfg = Debug|Any CPU + {CC813B15-06BB-4334-96C6-DD252BE37D1B}.LinuxDebug|x64.ActiveCfg = Debug|Any CPU + {CC813B15-06BB-4334-96C6-DD252BE37D1B}.LinuxDebug|x64.Build.0 = Debug|Any CPU + {CC813B15-06BB-4334-96C6-DD252BE37D1B}.LinuxDebug|x86.ActiveCfg = Debug|Any CPU + {CC813B15-06BB-4334-96C6-DD252BE37D1B}.LinuxDebug|x86.Build.0 = Debug|Any CPU + {CC813B15-06BB-4334-96C6-DD252BE37D1B}.LinuxRelease|Any CPU.ActiveCfg = Release|Any CPU + {CC813B15-06BB-4334-96C6-DD252BE37D1B}.LinuxRelease|x64.ActiveCfg = Release|Any CPU + {CC813B15-06BB-4334-96C6-DD252BE37D1B}.LinuxRelease|x64.Build.0 = Release|Any CPU + {CC813B15-06BB-4334-96C6-DD252BE37D1B}.LinuxRelease|x86.ActiveCfg = Release|Any CPU + {CC813B15-06BB-4334-96C6-DD252BE37D1B}.LinuxRelease|x86.Build.0 = Release|Any CPU {CC813B15-06BB-4334-96C6-DD252BE37D1B}.Release|Any CPU.ActiveCfg = Release|Any CPU {CC813B15-06BB-4334-96C6-DD252BE37D1B}.Release|Any CPU.Build.0 = Release|Any CPU {CC813B15-06BB-4334-96C6-DD252BE37D1B}.Release|x64.ActiveCfg = Release|Any CPU @@ -175,6 +253,16 @@ Global {06905325-4F46-44BC-BE60-C61526073998}.Debug|x64.Build.0 = Debug|Any CPU {06905325-4F46-44BC-BE60-C61526073998}.Debug|x86.ActiveCfg = Debug|Any CPU {06905325-4F46-44BC-BE60-C61526073998}.Debug|x86.Build.0 = Debug|Any CPU + {06905325-4F46-44BC-BE60-C61526073998}.LinuxDebug|Any CPU.ActiveCfg = Debug|Any CPU + {06905325-4F46-44BC-BE60-C61526073998}.LinuxDebug|x64.ActiveCfg = Debug|Any CPU + {06905325-4F46-44BC-BE60-C61526073998}.LinuxDebug|x64.Build.0 = Debug|Any CPU + {06905325-4F46-44BC-BE60-C61526073998}.LinuxDebug|x86.ActiveCfg = Debug|Any CPU + {06905325-4F46-44BC-BE60-C61526073998}.LinuxDebug|x86.Build.0 = Debug|Any CPU + {06905325-4F46-44BC-BE60-C61526073998}.LinuxRelease|Any CPU.ActiveCfg = Release|Any CPU + {06905325-4F46-44BC-BE60-C61526073998}.LinuxRelease|x64.ActiveCfg = Release|Any CPU + {06905325-4F46-44BC-BE60-C61526073998}.LinuxRelease|x64.Build.0 = Release|Any CPU + {06905325-4F46-44BC-BE60-C61526073998}.LinuxRelease|x86.ActiveCfg = Release|Any CPU + {06905325-4F46-44BC-BE60-C61526073998}.LinuxRelease|x86.Build.0 = Release|Any CPU {06905325-4F46-44BC-BE60-C61526073998}.Release|Any CPU.ActiveCfg = Release|Any CPU {06905325-4F46-44BC-BE60-C61526073998}.Release|Any CPU.Build.0 = Release|Any CPU {06905325-4F46-44BC-BE60-C61526073998}.Release|x64.ActiveCfg = Release|Any CPU @@ -187,6 +275,16 @@ Global {38F3B4F3-9739-4FE2-A6F3-41436D6297D0}.Debug|x64.Build.0 = Debug|Any CPU {38F3B4F3-9739-4FE2-A6F3-41436D6297D0}.Debug|x86.ActiveCfg = Debug|Any CPU {38F3B4F3-9739-4FE2-A6F3-41436D6297D0}.Debug|x86.Build.0 = Debug|Any CPU + {38F3B4F3-9739-4FE2-A6F3-41436D6297D0}.LinuxDebug|Any CPU.ActiveCfg = Debug|Any CPU + {38F3B4F3-9739-4FE2-A6F3-41436D6297D0}.LinuxDebug|x64.ActiveCfg = Debug|Any CPU + {38F3B4F3-9739-4FE2-A6F3-41436D6297D0}.LinuxDebug|x64.Build.0 = Debug|Any CPU + {38F3B4F3-9739-4FE2-A6F3-41436D6297D0}.LinuxDebug|x86.ActiveCfg = Debug|Any CPU + {38F3B4F3-9739-4FE2-A6F3-41436D6297D0}.LinuxDebug|x86.Build.0 = Debug|Any CPU + {38F3B4F3-9739-4FE2-A6F3-41436D6297D0}.LinuxRelease|Any CPU.ActiveCfg = Release|Any CPU + {38F3B4F3-9739-4FE2-A6F3-41436D6297D0}.LinuxRelease|x64.ActiveCfg = Release|Any CPU + {38F3B4F3-9739-4FE2-A6F3-41436D6297D0}.LinuxRelease|x64.Build.0 = Release|Any CPU + {38F3B4F3-9739-4FE2-A6F3-41436D6297D0}.LinuxRelease|x86.ActiveCfg = Release|Any CPU + {38F3B4F3-9739-4FE2-A6F3-41436D6297D0}.LinuxRelease|x86.Build.0 = Release|Any CPU {38F3B4F3-9739-4FE2-A6F3-41436D6297D0}.Release|Any CPU.ActiveCfg = Release|Any CPU {38F3B4F3-9739-4FE2-A6F3-41436D6297D0}.Release|Any CPU.Build.0 = Release|Any CPU {38F3B4F3-9739-4FE2-A6F3-41436D6297D0}.Release|x64.ActiveCfg = Release|Any CPU @@ -199,6 +297,16 @@ Global {C7062944-F8C0-4FF6-8B3A-E30588F39612}.Debug|x64.Build.0 = Debug|Any CPU {C7062944-F8C0-4FF6-8B3A-E30588F39612}.Debug|x86.ActiveCfg = Debug|Any CPU {C7062944-F8C0-4FF6-8B3A-E30588F39612}.Debug|x86.Build.0 = Debug|Any CPU + {C7062944-F8C0-4FF6-8B3A-E30588F39612}.LinuxDebug|Any CPU.ActiveCfg = Debug|Any CPU + {C7062944-F8C0-4FF6-8B3A-E30588F39612}.LinuxDebug|x64.ActiveCfg = Debug|Any CPU + {C7062944-F8C0-4FF6-8B3A-E30588F39612}.LinuxDebug|x64.Build.0 = Debug|Any CPU + {C7062944-F8C0-4FF6-8B3A-E30588F39612}.LinuxDebug|x86.ActiveCfg = Debug|Any CPU + {C7062944-F8C0-4FF6-8B3A-E30588F39612}.LinuxDebug|x86.Build.0 = Debug|Any CPU + {C7062944-F8C0-4FF6-8B3A-E30588F39612}.LinuxRelease|Any CPU.ActiveCfg = Release|Any CPU + {C7062944-F8C0-4FF6-8B3A-E30588F39612}.LinuxRelease|x64.ActiveCfg = Release|Any CPU + {C7062944-F8C0-4FF6-8B3A-E30588F39612}.LinuxRelease|x64.Build.0 = Release|Any CPU + {C7062944-F8C0-4FF6-8B3A-E30588F39612}.LinuxRelease|x86.ActiveCfg = Release|Any CPU + {C7062944-F8C0-4FF6-8B3A-E30588F39612}.LinuxRelease|x86.Build.0 = Release|Any CPU {C7062944-F8C0-4FF6-8B3A-E30588F39612}.Release|Any CPU.ActiveCfg = Release|Any CPU {C7062944-F8C0-4FF6-8B3A-E30588F39612}.Release|Any CPU.Build.0 = Release|Any CPU {C7062944-F8C0-4FF6-8B3A-E30588F39612}.Release|x64.ActiveCfg = Release|Any CPU @@ -211,6 +319,18 @@ Global {26C6CD2C-D5B6-4905-B586-1FB27D699BB8}.Debug|x64.Build.0 = Debug|Any CPU {26C6CD2C-D5B6-4905-B586-1FB27D699BB8}.Debug|x86.ActiveCfg = Debug|Any CPU {26C6CD2C-D5B6-4905-B586-1FB27D699BB8}.Debug|x86.Build.0 = Debug|Any CPU + {26C6CD2C-D5B6-4905-B586-1FB27D699BB8}.LinuxDebug|Any CPU.ActiveCfg = Debug|Any CPU + {26C6CD2C-D5B6-4905-B586-1FB27D699BB8}.LinuxDebug|Any CPU.Build.0 = Debug|Any CPU + {26C6CD2C-D5B6-4905-B586-1FB27D699BB8}.LinuxDebug|x64.ActiveCfg = Debug|Any CPU + {26C6CD2C-D5B6-4905-B586-1FB27D699BB8}.LinuxDebug|x64.Build.0 = Debug|Any CPU + {26C6CD2C-D5B6-4905-B586-1FB27D699BB8}.LinuxDebug|x86.ActiveCfg = Debug|Any CPU + {26C6CD2C-D5B6-4905-B586-1FB27D699BB8}.LinuxDebug|x86.Build.0 = Debug|Any CPU + {26C6CD2C-D5B6-4905-B586-1FB27D699BB8}.LinuxRelease|Any CPU.ActiveCfg = Release|Any CPU + {26C6CD2C-D5B6-4905-B586-1FB27D699BB8}.LinuxRelease|Any CPU.Build.0 = Release|Any CPU + {26C6CD2C-D5B6-4905-B586-1FB27D699BB8}.LinuxRelease|x64.ActiveCfg = Release|Any CPU + {26C6CD2C-D5B6-4905-B586-1FB27D699BB8}.LinuxRelease|x64.Build.0 = Release|Any CPU + {26C6CD2C-D5B6-4905-B586-1FB27D699BB8}.LinuxRelease|x86.ActiveCfg = Release|Any CPU + {26C6CD2C-D5B6-4905-B586-1FB27D699BB8}.LinuxRelease|x86.Build.0 = Release|Any CPU {26C6CD2C-D5B6-4905-B586-1FB27D699BB8}.Release|Any CPU.ActiveCfg = Release|Any CPU {26C6CD2C-D5B6-4905-B586-1FB27D699BB8}.Release|Any CPU.Build.0 = Release|Any CPU {26C6CD2C-D5B6-4905-B586-1FB27D699BB8}.Release|x64.ActiveCfg = Release|Any CPU @@ -223,6 +343,18 @@ Global {1904A41B-D1B8-40E5-ADBB-728DDCF7C816}.Debug|x64.Build.0 = Debug|Any CPU {1904A41B-D1B8-40E5-ADBB-728DDCF7C816}.Debug|x86.ActiveCfg = Debug|Any CPU {1904A41B-D1B8-40E5-ADBB-728DDCF7C816}.Debug|x86.Build.0 = Debug|Any CPU + {1904A41B-D1B8-40E5-ADBB-728DDCF7C816}.LinuxDebug|Any CPU.ActiveCfg = Debug|Any CPU + {1904A41B-D1B8-40E5-ADBB-728DDCF7C816}.LinuxDebug|Any CPU.Build.0 = Debug|Any CPU + {1904A41B-D1B8-40E5-ADBB-728DDCF7C816}.LinuxDebug|x64.ActiveCfg = Debug|Any CPU + {1904A41B-D1B8-40E5-ADBB-728DDCF7C816}.LinuxDebug|x64.Build.0 = Debug|Any CPU + {1904A41B-D1B8-40E5-ADBB-728DDCF7C816}.LinuxDebug|x86.ActiveCfg = Debug|Any CPU + {1904A41B-D1B8-40E5-ADBB-728DDCF7C816}.LinuxDebug|x86.Build.0 = Debug|Any CPU + {1904A41B-D1B8-40E5-ADBB-728DDCF7C816}.LinuxRelease|Any CPU.ActiveCfg = Release|Any CPU + {1904A41B-D1B8-40E5-ADBB-728DDCF7C816}.LinuxRelease|Any CPU.Build.0 = Release|Any CPU + {1904A41B-D1B8-40E5-ADBB-728DDCF7C816}.LinuxRelease|x64.ActiveCfg = Release|Any CPU + {1904A41B-D1B8-40E5-ADBB-728DDCF7C816}.LinuxRelease|x64.Build.0 = Release|Any CPU + {1904A41B-D1B8-40E5-ADBB-728DDCF7C816}.LinuxRelease|x86.ActiveCfg = Release|Any CPU + {1904A41B-D1B8-40E5-ADBB-728DDCF7C816}.LinuxRelease|x86.Build.0 = Release|Any CPU {1904A41B-D1B8-40E5-ADBB-728DDCF7C816}.Release|Any CPU.ActiveCfg = Release|Any CPU {1904A41B-D1B8-40E5-ADBB-728DDCF7C816}.Release|Any CPU.Build.0 = Release|Any CPU {1904A41B-D1B8-40E5-ADBB-728DDCF7C816}.Release|x64.ActiveCfg = Release|Any CPU @@ -235,6 +367,16 @@ Global {880B333B-3ADA-469A-A333-A9023B4D8F6F}.Debug|x64.Build.0 = Debug|Any CPU {880B333B-3ADA-469A-A333-A9023B4D8F6F}.Debug|x86.ActiveCfg = Debug|Any CPU {880B333B-3ADA-469A-A333-A9023B4D8F6F}.Debug|x86.Build.0 = Debug|Any CPU + {880B333B-3ADA-469A-A333-A9023B4D8F6F}.LinuxDebug|Any CPU.ActiveCfg = Debug|Any CPU + {880B333B-3ADA-469A-A333-A9023B4D8F6F}.LinuxDebug|x64.ActiveCfg = Debug|Any CPU + {880B333B-3ADA-469A-A333-A9023B4D8F6F}.LinuxDebug|x64.Build.0 = Debug|Any CPU + {880B333B-3ADA-469A-A333-A9023B4D8F6F}.LinuxDebug|x86.ActiveCfg = Debug|Any CPU + {880B333B-3ADA-469A-A333-A9023B4D8F6F}.LinuxDebug|x86.Build.0 = Debug|Any CPU + {880B333B-3ADA-469A-A333-A9023B4D8F6F}.LinuxRelease|Any CPU.ActiveCfg = Release|Any CPU + {880B333B-3ADA-469A-A333-A9023B4D8F6F}.LinuxRelease|x64.ActiveCfg = Release|Any CPU + {880B333B-3ADA-469A-A333-A9023B4D8F6F}.LinuxRelease|x64.Build.0 = Release|Any CPU + {880B333B-3ADA-469A-A333-A9023B4D8F6F}.LinuxRelease|x86.ActiveCfg = Release|Any CPU + {880B333B-3ADA-469A-A333-A9023B4D8F6F}.LinuxRelease|x86.Build.0 = Release|Any CPU {880B333B-3ADA-469A-A333-A9023B4D8F6F}.Release|Any CPU.ActiveCfg = Release|Any CPU {880B333B-3ADA-469A-A333-A9023B4D8F6F}.Release|Any CPU.Build.0 = Release|Any CPU {880B333B-3ADA-469A-A333-A9023B4D8F6F}.Release|x64.ActiveCfg = Release|Any CPU @@ -247,6 +389,16 @@ Global {880F644B-5370-47D6-A4B6-F98338073631}.Debug|x64.Build.0 = Debug|Any CPU {880F644B-5370-47D6-A4B6-F98338073631}.Debug|x86.ActiveCfg = Debug|Any CPU {880F644B-5370-47D6-A4B6-F98338073631}.Debug|x86.Build.0 = Debug|Any CPU + {880F644B-5370-47D6-A4B6-F98338073631}.LinuxDebug|Any CPU.ActiveCfg = Debug|Any CPU + {880F644B-5370-47D6-A4B6-F98338073631}.LinuxDebug|x64.ActiveCfg = Debug|Any CPU + {880F644B-5370-47D6-A4B6-F98338073631}.LinuxDebug|x64.Build.0 = Debug|Any CPU + {880F644B-5370-47D6-A4B6-F98338073631}.LinuxDebug|x86.ActiveCfg = Debug|Any CPU + {880F644B-5370-47D6-A4B6-F98338073631}.LinuxDebug|x86.Build.0 = Debug|Any CPU + {880F644B-5370-47D6-A4B6-F98338073631}.LinuxRelease|Any CPU.ActiveCfg = Release|Any CPU + {880F644B-5370-47D6-A4B6-F98338073631}.LinuxRelease|x64.ActiveCfg = Release|Any CPU + {880F644B-5370-47D6-A4B6-F98338073631}.LinuxRelease|x64.Build.0 = Release|Any CPU + {880F644B-5370-47D6-A4B6-F98338073631}.LinuxRelease|x86.ActiveCfg = Release|Any CPU + {880F644B-5370-47D6-A4B6-F98338073631}.LinuxRelease|x86.Build.0 = Release|Any CPU {880F644B-5370-47D6-A4B6-F98338073631}.Release|Any CPU.ActiveCfg = Release|Any CPU {880F644B-5370-47D6-A4B6-F98338073631}.Release|Any CPU.Build.0 = Release|Any CPU {880F644B-5370-47D6-A4B6-F98338073631}.Release|x64.ActiveCfg = Release|Any CPU @@ -259,6 +411,16 @@ Global {ECC7AB0C-7DB9-439F-95E1-95C206759DFE}.Debug|x64.Build.0 = Debug|Any CPU {ECC7AB0C-7DB9-439F-95E1-95C206759DFE}.Debug|x86.ActiveCfg = Debug|Any CPU {ECC7AB0C-7DB9-439F-95E1-95C206759DFE}.Debug|x86.Build.0 = Debug|Any CPU + {ECC7AB0C-7DB9-439F-95E1-95C206759DFE}.LinuxDebug|Any CPU.ActiveCfg = Debug|Any CPU + {ECC7AB0C-7DB9-439F-95E1-95C206759DFE}.LinuxDebug|x64.ActiveCfg = Debug|Any CPU + {ECC7AB0C-7DB9-439F-95E1-95C206759DFE}.LinuxDebug|x64.Build.0 = Debug|Any CPU + {ECC7AB0C-7DB9-439F-95E1-95C206759DFE}.LinuxDebug|x86.ActiveCfg = Debug|Any CPU + {ECC7AB0C-7DB9-439F-95E1-95C206759DFE}.LinuxDebug|x86.Build.0 = Debug|Any CPU + {ECC7AB0C-7DB9-439F-95E1-95C206759DFE}.LinuxRelease|Any CPU.ActiveCfg = Release|Any CPU + {ECC7AB0C-7DB9-439F-95E1-95C206759DFE}.LinuxRelease|x64.ActiveCfg = Release|Any CPU + {ECC7AB0C-7DB9-439F-95E1-95C206759DFE}.LinuxRelease|x64.Build.0 = Release|Any CPU + {ECC7AB0C-7DB9-439F-95E1-95C206759DFE}.LinuxRelease|x86.ActiveCfg = Release|Any CPU + {ECC7AB0C-7DB9-439F-95E1-95C206759DFE}.LinuxRelease|x86.Build.0 = Release|Any CPU {ECC7AB0C-7DB9-439F-95E1-95C206759DFE}.Release|Any CPU.ActiveCfg = Release|Any CPU {ECC7AB0C-7DB9-439F-95E1-95C206759DFE}.Release|Any CPU.Build.0 = Release|Any CPU {ECC7AB0C-7DB9-439F-95E1-95C206759DFE}.Release|x64.ActiveCfg = Release|Any CPU @@ -271,6 +433,16 @@ Global {937AA772-00F3-45B8-A9FE-8504F3D12909}.Debug|x64.Build.0 = Debug|Any CPU {937AA772-00F3-45B8-A9FE-8504F3D12909}.Debug|x86.ActiveCfg = Debug|Any CPU {937AA772-00F3-45B8-A9FE-8504F3D12909}.Debug|x86.Build.0 = Debug|Any CPU + {937AA772-00F3-45B8-A9FE-8504F3D12909}.LinuxDebug|Any CPU.ActiveCfg = Debug|Any CPU + {937AA772-00F3-45B8-A9FE-8504F3D12909}.LinuxDebug|x64.ActiveCfg = Debug|Any CPU + {937AA772-00F3-45B8-A9FE-8504F3D12909}.LinuxDebug|x64.Build.0 = Debug|Any CPU + {937AA772-00F3-45B8-A9FE-8504F3D12909}.LinuxDebug|x86.ActiveCfg = Debug|Any CPU + {937AA772-00F3-45B8-A9FE-8504F3D12909}.LinuxDebug|x86.Build.0 = Debug|Any CPU + {937AA772-00F3-45B8-A9FE-8504F3D12909}.LinuxRelease|Any CPU.ActiveCfg = Release|Any CPU + {937AA772-00F3-45B8-A9FE-8504F3D12909}.LinuxRelease|x64.ActiveCfg = Release|Any CPU + {937AA772-00F3-45B8-A9FE-8504F3D12909}.LinuxRelease|x64.Build.0 = Release|Any CPU + {937AA772-00F3-45B8-A9FE-8504F3D12909}.LinuxRelease|x86.ActiveCfg = Release|Any CPU + {937AA772-00F3-45B8-A9FE-8504F3D12909}.LinuxRelease|x86.Build.0 = Release|Any CPU {937AA772-00F3-45B8-A9FE-8504F3D12909}.Release|Any CPU.ActiveCfg = Release|Any CPU {937AA772-00F3-45B8-A9FE-8504F3D12909}.Release|Any CPU.Build.0 = Release|Any CPU {937AA772-00F3-45B8-A9FE-8504F3D12909}.Release|x64.ActiveCfg = Release|Any CPU @@ -283,6 +455,18 @@ Global {8A1A603C-7005-4CC0-9AB7-E6FD3F58F621}.Debug|x64.Build.0 = Debug|Any CPU {8A1A603C-7005-4CC0-9AB7-E6FD3F58F621}.Debug|x86.ActiveCfg = Debug|Any CPU {8A1A603C-7005-4CC0-9AB7-E6FD3F58F621}.Debug|x86.Build.0 = Debug|Any CPU + {8A1A603C-7005-4CC0-9AB7-E6FD3F58F621}.LinuxDebug|Any CPU.ActiveCfg = LinuxDebug|Any CPU + {8A1A603C-7005-4CC0-9AB7-E6FD3F58F621}.LinuxDebug|Any CPU.Build.0 = LinuxDebug|Any CPU + {8A1A603C-7005-4CC0-9AB7-E6FD3F58F621}.LinuxDebug|x64.ActiveCfg = Debug|Any CPU + {8A1A603C-7005-4CC0-9AB7-E6FD3F58F621}.LinuxDebug|x64.Build.0 = Debug|Any CPU + {8A1A603C-7005-4CC0-9AB7-E6FD3F58F621}.LinuxDebug|x86.ActiveCfg = Debug|Any CPU + {8A1A603C-7005-4CC0-9AB7-E6FD3F58F621}.LinuxDebug|x86.Build.0 = Debug|Any CPU + {8A1A603C-7005-4CC0-9AB7-E6FD3F58F621}.LinuxRelease|Any CPU.ActiveCfg = LinuxRelease|Any CPU + {8A1A603C-7005-4CC0-9AB7-E6FD3F58F621}.LinuxRelease|Any CPU.Build.0 = LinuxRelease|Any CPU + {8A1A603C-7005-4CC0-9AB7-E6FD3F58F621}.LinuxRelease|x64.ActiveCfg = Release|Any CPU + {8A1A603C-7005-4CC0-9AB7-E6FD3F58F621}.LinuxRelease|x64.Build.0 = Release|Any CPU + {8A1A603C-7005-4CC0-9AB7-E6FD3F58F621}.LinuxRelease|x86.ActiveCfg = Release|Any CPU + {8A1A603C-7005-4CC0-9AB7-E6FD3F58F621}.LinuxRelease|x86.Build.0 = Release|Any CPU {8A1A603C-7005-4CC0-9AB7-E6FD3F58F621}.Release|Any CPU.ActiveCfg = Release|Any CPU {8A1A603C-7005-4CC0-9AB7-E6FD3F58F621}.Release|Any CPU.Build.0 = Release|Any CPU {8A1A603C-7005-4CC0-9AB7-E6FD3F58F621}.Release|x64.ActiveCfg = Release|Any CPU @@ -295,6 +479,16 @@ Global {616330A6-6386-40F1-907D-CD46884FA86F}.Debug|x64.Build.0 = Debug|Any CPU {616330A6-6386-40F1-907D-CD46884FA86F}.Debug|x86.ActiveCfg = Debug|Any CPU {616330A6-6386-40F1-907D-CD46884FA86F}.Debug|x86.Build.0 = Debug|Any CPU + {616330A6-6386-40F1-907D-CD46884FA86F}.LinuxDebug|Any CPU.ActiveCfg = Debug|Any CPU + {616330A6-6386-40F1-907D-CD46884FA86F}.LinuxDebug|x64.ActiveCfg = Debug|Any CPU + {616330A6-6386-40F1-907D-CD46884FA86F}.LinuxDebug|x64.Build.0 = Debug|Any CPU + {616330A6-6386-40F1-907D-CD46884FA86F}.LinuxDebug|x86.ActiveCfg = Debug|Any CPU + {616330A6-6386-40F1-907D-CD46884FA86F}.LinuxDebug|x86.Build.0 = Debug|Any CPU + {616330A6-6386-40F1-907D-CD46884FA86F}.LinuxRelease|Any CPU.ActiveCfg = Release|Any CPU + {616330A6-6386-40F1-907D-CD46884FA86F}.LinuxRelease|x64.ActiveCfg = Release|Any CPU + {616330A6-6386-40F1-907D-CD46884FA86F}.LinuxRelease|x64.Build.0 = Release|Any CPU + {616330A6-6386-40F1-907D-CD46884FA86F}.LinuxRelease|x86.ActiveCfg = Release|Any CPU + {616330A6-6386-40F1-907D-CD46884FA86F}.LinuxRelease|x86.Build.0 = Release|Any CPU {616330A6-6386-40F1-907D-CD46884FA86F}.Release|Any CPU.ActiveCfg = Release|Any CPU {616330A6-6386-40F1-907D-CD46884FA86F}.Release|Any CPU.Build.0 = Release|Any CPU {616330A6-6386-40F1-907D-CD46884FA86F}.Release|x64.ActiveCfg = Release|Any CPU @@ -307,6 +501,16 @@ Global {24228071-5E72-4BA8-90E3-89DE331A718C}.Debug|x64.Build.0 = Debug|Any CPU {24228071-5E72-4BA8-90E3-89DE331A718C}.Debug|x86.ActiveCfg = Debug|Any CPU {24228071-5E72-4BA8-90E3-89DE331A718C}.Debug|x86.Build.0 = Debug|Any CPU + {24228071-5E72-4BA8-90E3-89DE331A718C}.LinuxDebug|Any CPU.ActiveCfg = Debug|Any CPU + {24228071-5E72-4BA8-90E3-89DE331A718C}.LinuxDebug|x64.ActiveCfg = Debug|Any CPU + {24228071-5E72-4BA8-90E3-89DE331A718C}.LinuxDebug|x64.Build.0 = Debug|Any CPU + {24228071-5E72-4BA8-90E3-89DE331A718C}.LinuxDebug|x86.ActiveCfg = Debug|Any CPU + {24228071-5E72-4BA8-90E3-89DE331A718C}.LinuxDebug|x86.Build.0 = Debug|Any CPU + {24228071-5E72-4BA8-90E3-89DE331A718C}.LinuxRelease|Any CPU.ActiveCfg = Release|Any CPU + {24228071-5E72-4BA8-90E3-89DE331A718C}.LinuxRelease|x64.ActiveCfg = Release|Any CPU + {24228071-5E72-4BA8-90E3-89DE331A718C}.LinuxRelease|x64.Build.0 = Release|Any CPU + {24228071-5E72-4BA8-90E3-89DE331A718C}.LinuxRelease|x86.ActiveCfg = Release|Any CPU + {24228071-5E72-4BA8-90E3-89DE331A718C}.LinuxRelease|x86.Build.0 = Release|Any CPU {24228071-5E72-4BA8-90E3-89DE331A718C}.Release|Any CPU.ActiveCfg = Release|Any CPU {24228071-5E72-4BA8-90E3-89DE331A718C}.Release|Any CPU.Build.0 = Release|Any CPU {24228071-5E72-4BA8-90E3-89DE331A718C}.Release|x64.ActiveCfg = Release|Any CPU @@ -319,6 +523,16 @@ Global {22B3D2D1-D139-4AC6-B72A-1A96F1CCBBBE}.Debug|x64.Build.0 = Debug|Any CPU {22B3D2D1-D139-4AC6-B72A-1A96F1CCBBBE}.Debug|x86.ActiveCfg = Debug|Any CPU {22B3D2D1-D139-4AC6-B72A-1A96F1CCBBBE}.Debug|x86.Build.0 = Debug|Any CPU + {22B3D2D1-D139-4AC6-B72A-1A96F1CCBBBE}.LinuxDebug|Any CPU.ActiveCfg = Debug|Any CPU + {22B3D2D1-D139-4AC6-B72A-1A96F1CCBBBE}.LinuxDebug|x64.ActiveCfg = Debug|Any CPU + {22B3D2D1-D139-4AC6-B72A-1A96F1CCBBBE}.LinuxDebug|x64.Build.0 = Debug|Any CPU + {22B3D2D1-D139-4AC6-B72A-1A96F1CCBBBE}.LinuxDebug|x86.ActiveCfg = Debug|Any CPU + {22B3D2D1-D139-4AC6-B72A-1A96F1CCBBBE}.LinuxDebug|x86.Build.0 = Debug|Any CPU + {22B3D2D1-D139-4AC6-B72A-1A96F1CCBBBE}.LinuxRelease|Any CPU.ActiveCfg = Release|Any CPU + {22B3D2D1-D139-4AC6-B72A-1A96F1CCBBBE}.LinuxRelease|x64.ActiveCfg = Release|Any CPU + {22B3D2D1-D139-4AC6-B72A-1A96F1CCBBBE}.LinuxRelease|x64.Build.0 = Release|Any CPU + {22B3D2D1-D139-4AC6-B72A-1A96F1CCBBBE}.LinuxRelease|x86.ActiveCfg = Release|Any CPU + {22B3D2D1-D139-4AC6-B72A-1A96F1CCBBBE}.LinuxRelease|x86.Build.0 = Release|Any CPU {22B3D2D1-D139-4AC6-B72A-1A96F1CCBBBE}.Release|Any CPU.ActiveCfg = Release|Any CPU {22B3D2D1-D139-4AC6-B72A-1A96F1CCBBBE}.Release|Any CPU.Build.0 = Release|Any CPU {22B3D2D1-D139-4AC6-B72A-1A96F1CCBBBE}.Release|x64.ActiveCfg = Release|Any CPU @@ -331,6 +545,16 @@ Global {3960F81D-5AEA-4F36-A26C-F295DFF3FCB6}.Debug|x64.Build.0 = Debug|Any CPU {3960F81D-5AEA-4F36-A26C-F295DFF3FCB6}.Debug|x86.ActiveCfg = Debug|Any CPU {3960F81D-5AEA-4F36-A26C-F295DFF3FCB6}.Debug|x86.Build.0 = Debug|Any CPU + {3960F81D-5AEA-4F36-A26C-F295DFF3FCB6}.LinuxDebug|Any CPU.ActiveCfg = Debug|Any CPU + {3960F81D-5AEA-4F36-A26C-F295DFF3FCB6}.LinuxDebug|x64.ActiveCfg = Debug|Any CPU + {3960F81D-5AEA-4F36-A26C-F295DFF3FCB6}.LinuxDebug|x64.Build.0 = Debug|Any CPU + {3960F81D-5AEA-4F36-A26C-F295DFF3FCB6}.LinuxDebug|x86.ActiveCfg = Debug|Any CPU + {3960F81D-5AEA-4F36-A26C-F295DFF3FCB6}.LinuxDebug|x86.Build.0 = Debug|Any CPU + {3960F81D-5AEA-4F36-A26C-F295DFF3FCB6}.LinuxRelease|Any CPU.ActiveCfg = Release|Any CPU + {3960F81D-5AEA-4F36-A26C-F295DFF3FCB6}.LinuxRelease|x64.ActiveCfg = Release|Any CPU + {3960F81D-5AEA-4F36-A26C-F295DFF3FCB6}.LinuxRelease|x64.Build.0 = Release|Any CPU + {3960F81D-5AEA-4F36-A26C-F295DFF3FCB6}.LinuxRelease|x86.ActiveCfg = Release|Any CPU + {3960F81D-5AEA-4F36-A26C-F295DFF3FCB6}.LinuxRelease|x86.Build.0 = Release|Any CPU {3960F81D-5AEA-4F36-A26C-F295DFF3FCB6}.Release|Any CPU.ActiveCfg = Release|Any CPU {3960F81D-5AEA-4F36-A26C-F295DFF3FCB6}.Release|Any CPU.Build.0 = Release|Any CPU {3960F81D-5AEA-4F36-A26C-F295DFF3FCB6}.Release|x64.ActiveCfg = Release|Any CPU @@ -343,6 +567,16 @@ Global {726D85B6-A389-417B-A85B-4ACACDEE4640}.Debug|x64.Build.0 = Debug|Any CPU {726D85B6-A389-417B-A85B-4ACACDEE4640}.Debug|x86.ActiveCfg = Debug|Any CPU {726D85B6-A389-417B-A85B-4ACACDEE4640}.Debug|x86.Build.0 = Debug|Any CPU + {726D85B6-A389-417B-A85B-4ACACDEE4640}.LinuxDebug|Any CPU.ActiveCfg = Debug|Any CPU + {726D85B6-A389-417B-A85B-4ACACDEE4640}.LinuxDebug|x64.ActiveCfg = Debug|Any CPU + {726D85B6-A389-417B-A85B-4ACACDEE4640}.LinuxDebug|x64.Build.0 = Debug|Any CPU + {726D85B6-A389-417B-A85B-4ACACDEE4640}.LinuxDebug|x86.ActiveCfg = Debug|Any CPU + {726D85B6-A389-417B-A85B-4ACACDEE4640}.LinuxDebug|x86.Build.0 = Debug|Any CPU + {726D85B6-A389-417B-A85B-4ACACDEE4640}.LinuxRelease|Any CPU.ActiveCfg = Release|Any CPU + {726D85B6-A389-417B-A85B-4ACACDEE4640}.LinuxRelease|x64.ActiveCfg = Release|Any CPU + {726D85B6-A389-417B-A85B-4ACACDEE4640}.LinuxRelease|x64.Build.0 = Release|Any CPU + {726D85B6-A389-417B-A85B-4ACACDEE4640}.LinuxRelease|x86.ActiveCfg = Release|Any CPU + {726D85B6-A389-417B-A85B-4ACACDEE4640}.LinuxRelease|x86.Build.0 = Release|Any CPU {726D85B6-A389-417B-A85B-4ACACDEE4640}.Release|Any CPU.ActiveCfg = Release|Any CPU {726D85B6-A389-417B-A85B-4ACACDEE4640}.Release|Any CPU.Build.0 = Release|Any CPU {726D85B6-A389-417B-A85B-4ACACDEE4640}.Release|x64.ActiveCfg = Release|Any CPU @@ -355,6 +589,16 @@ Global {FF2B695C-7567-4DDD-A8F4-E16BE2E49A65}.Debug|x64.Build.0 = Debug|Any CPU {FF2B695C-7567-4DDD-A8F4-E16BE2E49A65}.Debug|x86.ActiveCfg = Debug|Any CPU {FF2B695C-7567-4DDD-A8F4-E16BE2E49A65}.Debug|x86.Build.0 = Debug|Any CPU + {FF2B695C-7567-4DDD-A8F4-E16BE2E49A65}.LinuxDebug|Any CPU.ActiveCfg = Debug|Any CPU + {FF2B695C-7567-4DDD-A8F4-E16BE2E49A65}.LinuxDebug|x64.ActiveCfg = Debug|Any CPU + {FF2B695C-7567-4DDD-A8F4-E16BE2E49A65}.LinuxDebug|x64.Build.0 = Debug|Any CPU + {FF2B695C-7567-4DDD-A8F4-E16BE2E49A65}.LinuxDebug|x86.ActiveCfg = Debug|Any CPU + {FF2B695C-7567-4DDD-A8F4-E16BE2E49A65}.LinuxDebug|x86.Build.0 = Debug|Any CPU + {FF2B695C-7567-4DDD-A8F4-E16BE2E49A65}.LinuxRelease|Any CPU.ActiveCfg = Release|Any CPU + {FF2B695C-7567-4DDD-A8F4-E16BE2E49A65}.LinuxRelease|x64.ActiveCfg = Release|Any CPU + {FF2B695C-7567-4DDD-A8F4-E16BE2E49A65}.LinuxRelease|x64.Build.0 = Release|Any CPU + {FF2B695C-7567-4DDD-A8F4-E16BE2E49A65}.LinuxRelease|x86.ActiveCfg = Release|Any CPU + {FF2B695C-7567-4DDD-A8F4-E16BE2E49A65}.LinuxRelease|x86.Build.0 = Release|Any CPU {FF2B695C-7567-4DDD-A8F4-E16BE2E49A65}.Release|Any CPU.ActiveCfg = Release|Any CPU {FF2B695C-7567-4DDD-A8F4-E16BE2E49A65}.Release|Any CPU.Build.0 = Release|Any CPU {FF2B695C-7567-4DDD-A8F4-E16BE2E49A65}.Release|x64.ActiveCfg = Release|Any CPU @@ -367,6 +611,16 @@ Global {84A2C4C9-874C-47E7-8397-47D5ED8C00D4}.Debug|x64.Build.0 = Debug|Any CPU {84A2C4C9-874C-47E7-8397-47D5ED8C00D4}.Debug|x86.ActiveCfg = Debug|Any CPU {84A2C4C9-874C-47E7-8397-47D5ED8C00D4}.Debug|x86.Build.0 = Debug|Any CPU + {84A2C4C9-874C-47E7-8397-47D5ED8C00D4}.LinuxDebug|Any CPU.ActiveCfg = Debug|Any CPU + {84A2C4C9-874C-47E7-8397-47D5ED8C00D4}.LinuxDebug|x64.ActiveCfg = Debug|Any CPU + {84A2C4C9-874C-47E7-8397-47D5ED8C00D4}.LinuxDebug|x64.Build.0 = Debug|Any CPU + {84A2C4C9-874C-47E7-8397-47D5ED8C00D4}.LinuxDebug|x86.ActiveCfg = Debug|Any CPU + {84A2C4C9-874C-47E7-8397-47D5ED8C00D4}.LinuxDebug|x86.Build.0 = Debug|Any CPU + {84A2C4C9-874C-47E7-8397-47D5ED8C00D4}.LinuxRelease|Any CPU.ActiveCfg = Release|Any CPU + {84A2C4C9-874C-47E7-8397-47D5ED8C00D4}.LinuxRelease|x64.ActiveCfg = Release|Any CPU + {84A2C4C9-874C-47E7-8397-47D5ED8C00D4}.LinuxRelease|x64.Build.0 = Release|Any CPU + {84A2C4C9-874C-47E7-8397-47D5ED8C00D4}.LinuxRelease|x86.ActiveCfg = Release|Any CPU + {84A2C4C9-874C-47E7-8397-47D5ED8C00D4}.LinuxRelease|x86.Build.0 = Release|Any CPU {84A2C4C9-874C-47E7-8397-47D5ED8C00D4}.Release|Any CPU.ActiveCfg = Release|Any CPU {84A2C4C9-874C-47E7-8397-47D5ED8C00D4}.Release|Any CPU.Build.0 = Release|Any CPU {84A2C4C9-874C-47E7-8397-47D5ED8C00D4}.Release|x64.ActiveCfg = Release|Any CPU @@ -379,6 +633,18 @@ Global {07E29736-D056-4F4A-BCDA-FC12709AFAFA}.Debug|x64.Build.0 = Debug|Any CPU {07E29736-D056-4F4A-BCDA-FC12709AFAFA}.Debug|x86.ActiveCfg = Debug|Any CPU {07E29736-D056-4F4A-BCDA-FC12709AFAFA}.Debug|x86.Build.0 = Debug|Any CPU + {07E29736-D056-4F4A-BCDA-FC12709AFAFA}.LinuxDebug|Any CPU.ActiveCfg = Debug|Any CPU + {07E29736-D056-4F4A-BCDA-FC12709AFAFA}.LinuxDebug|Any CPU.Build.0 = Debug|Any CPU + {07E29736-D056-4F4A-BCDA-FC12709AFAFA}.LinuxDebug|x64.ActiveCfg = Debug|Any CPU + {07E29736-D056-4F4A-BCDA-FC12709AFAFA}.LinuxDebug|x64.Build.0 = Debug|Any CPU + {07E29736-D056-4F4A-BCDA-FC12709AFAFA}.LinuxDebug|x86.ActiveCfg = Debug|Any CPU + {07E29736-D056-4F4A-BCDA-FC12709AFAFA}.LinuxDebug|x86.Build.0 = Debug|Any CPU + {07E29736-D056-4F4A-BCDA-FC12709AFAFA}.LinuxRelease|Any CPU.ActiveCfg = Release|Any CPU + {07E29736-D056-4F4A-BCDA-FC12709AFAFA}.LinuxRelease|Any CPU.Build.0 = Release|Any CPU + {07E29736-D056-4F4A-BCDA-FC12709AFAFA}.LinuxRelease|x64.ActiveCfg = Release|Any CPU + {07E29736-D056-4F4A-BCDA-FC12709AFAFA}.LinuxRelease|x64.Build.0 = Release|Any CPU + {07E29736-D056-4F4A-BCDA-FC12709AFAFA}.LinuxRelease|x86.ActiveCfg = Release|Any CPU + {07E29736-D056-4F4A-BCDA-FC12709AFAFA}.LinuxRelease|x86.Build.0 = Release|Any CPU {07E29736-D056-4F4A-BCDA-FC12709AFAFA}.Release|Any CPU.ActiveCfg = Release|Any CPU {07E29736-D056-4F4A-BCDA-FC12709AFAFA}.Release|Any CPU.Build.0 = Release|Any CPU {07E29736-D056-4F4A-BCDA-FC12709AFAFA}.Release|x64.ActiveCfg = Release|Any CPU @@ -391,6 +657,18 @@ Global {9608092D-D9B7-4109-B1F0-DC597D879000}.Debug|x64.Build.0 = Debug|Any CPU {9608092D-D9B7-4109-B1F0-DC597D879000}.Debug|x86.ActiveCfg = Debug|Any CPU {9608092D-D9B7-4109-B1F0-DC597D879000}.Debug|x86.Build.0 = Debug|Any CPU + {9608092D-D9B7-4109-B1F0-DC597D879000}.LinuxDebug|Any CPU.ActiveCfg = Debug|Any CPU + {9608092D-D9B7-4109-B1F0-DC597D879000}.LinuxDebug|Any CPU.Build.0 = Debug|Any CPU + {9608092D-D9B7-4109-B1F0-DC597D879000}.LinuxDebug|x64.ActiveCfg = Debug|Any CPU + {9608092D-D9B7-4109-B1F0-DC597D879000}.LinuxDebug|x64.Build.0 = Debug|Any CPU + {9608092D-D9B7-4109-B1F0-DC597D879000}.LinuxDebug|x86.ActiveCfg = Debug|Any CPU + {9608092D-D9B7-4109-B1F0-DC597D879000}.LinuxDebug|x86.Build.0 = Debug|Any CPU + {9608092D-D9B7-4109-B1F0-DC597D879000}.LinuxRelease|Any CPU.ActiveCfg = Release|Any CPU + {9608092D-D9B7-4109-B1F0-DC597D879000}.LinuxRelease|Any CPU.Build.0 = Release|Any CPU + {9608092D-D9B7-4109-B1F0-DC597D879000}.LinuxRelease|x64.ActiveCfg = Release|Any CPU + {9608092D-D9B7-4109-B1F0-DC597D879000}.LinuxRelease|x64.Build.0 = Release|Any CPU + {9608092D-D9B7-4109-B1F0-DC597D879000}.LinuxRelease|x86.ActiveCfg = Release|Any CPU + {9608092D-D9B7-4109-B1F0-DC597D879000}.LinuxRelease|x86.Build.0 = Release|Any CPU {9608092D-D9B7-4109-B1F0-DC597D879000}.Release|Any CPU.ActiveCfg = Release|Any CPU {9608092D-D9B7-4109-B1F0-DC597D879000}.Release|Any CPU.Build.0 = Release|Any CPU {9608092D-D9B7-4109-B1F0-DC597D879000}.Release|x64.ActiveCfg = Release|Any CPU @@ -403,6 +681,16 @@ Global {9E5A86DE-6CE3-4D6F-BD98-B5A299999EAA}.Debug|x64.Build.0 = Debug|Any CPU {9E5A86DE-6CE3-4D6F-BD98-B5A299999EAA}.Debug|x86.ActiveCfg = Debug|Any CPU {9E5A86DE-6CE3-4D6F-BD98-B5A299999EAA}.Debug|x86.Build.0 = Debug|Any CPU + {9E5A86DE-6CE3-4D6F-BD98-B5A299999EAA}.LinuxDebug|Any CPU.ActiveCfg = Debug|Any CPU + {9E5A86DE-6CE3-4D6F-BD98-B5A299999EAA}.LinuxDebug|x64.ActiveCfg = Debug|Any CPU + {9E5A86DE-6CE3-4D6F-BD98-B5A299999EAA}.LinuxDebug|x64.Build.0 = Debug|Any CPU + {9E5A86DE-6CE3-4D6F-BD98-B5A299999EAA}.LinuxDebug|x86.ActiveCfg = Debug|Any CPU + {9E5A86DE-6CE3-4D6F-BD98-B5A299999EAA}.LinuxDebug|x86.Build.0 = Debug|Any CPU + {9E5A86DE-6CE3-4D6F-BD98-B5A299999EAA}.LinuxRelease|Any CPU.ActiveCfg = Release|Any CPU + {9E5A86DE-6CE3-4D6F-BD98-B5A299999EAA}.LinuxRelease|x64.ActiveCfg = Release|Any CPU + {9E5A86DE-6CE3-4D6F-BD98-B5A299999EAA}.LinuxRelease|x64.Build.0 = Release|Any CPU + {9E5A86DE-6CE3-4D6F-BD98-B5A299999EAA}.LinuxRelease|x86.ActiveCfg = Release|Any CPU + {9E5A86DE-6CE3-4D6F-BD98-B5A299999EAA}.LinuxRelease|x86.Build.0 = Release|Any CPU {9E5A86DE-6CE3-4D6F-BD98-B5A299999EAA}.Release|Any CPU.ActiveCfg = Release|Any CPU {9E5A86DE-6CE3-4D6F-BD98-B5A299999EAA}.Release|Any CPU.Build.0 = Release|Any CPU {9E5A86DE-6CE3-4D6F-BD98-B5A299999EAA}.Release|x64.ActiveCfg = Release|Any CPU @@ -415,6 +703,18 @@ Global {01A4838A-FCF8-454F-A92D-1854177CF162}.Debug|x64.Build.0 = Debug|Any CPU {01A4838A-FCF8-454F-A92D-1854177CF162}.Debug|x86.ActiveCfg = Debug|Any CPU {01A4838A-FCF8-454F-A92D-1854177CF162}.Debug|x86.Build.0 = Debug|Any CPU + {01A4838A-FCF8-454F-A92D-1854177CF162}.LinuxDebug|Any CPU.ActiveCfg = Debug|Any CPU + {01A4838A-FCF8-454F-A92D-1854177CF162}.LinuxDebug|Any CPU.Build.0 = Debug|Any CPU + {01A4838A-FCF8-454F-A92D-1854177CF162}.LinuxDebug|x64.ActiveCfg = Debug|Any CPU + {01A4838A-FCF8-454F-A92D-1854177CF162}.LinuxDebug|x64.Build.0 = Debug|Any CPU + {01A4838A-FCF8-454F-A92D-1854177CF162}.LinuxDebug|x86.ActiveCfg = Debug|Any CPU + {01A4838A-FCF8-454F-A92D-1854177CF162}.LinuxDebug|x86.Build.0 = Debug|Any CPU + {01A4838A-FCF8-454F-A92D-1854177CF162}.LinuxRelease|Any CPU.ActiveCfg = Release|Any CPU + {01A4838A-FCF8-454F-A92D-1854177CF162}.LinuxRelease|Any CPU.Build.0 = Release|Any CPU + {01A4838A-FCF8-454F-A92D-1854177CF162}.LinuxRelease|x64.ActiveCfg = Release|Any CPU + {01A4838A-FCF8-454F-A92D-1854177CF162}.LinuxRelease|x64.Build.0 = Release|Any CPU + {01A4838A-FCF8-454F-A92D-1854177CF162}.LinuxRelease|x86.ActiveCfg = Release|Any CPU + {01A4838A-FCF8-454F-A92D-1854177CF162}.LinuxRelease|x86.Build.0 = Release|Any CPU {01A4838A-FCF8-454F-A92D-1854177CF162}.Release|Any CPU.ActiveCfg = Release|Any CPU {01A4838A-FCF8-454F-A92D-1854177CF162}.Release|Any CPU.Build.0 = Release|Any CPU {01A4838A-FCF8-454F-A92D-1854177CF162}.Release|x64.ActiveCfg = Release|Any CPU @@ -427,6 +727,16 @@ Global {7DFA8BE7-1FC6-4749-AE7F-3C54A895E219}.Debug|x64.Build.0 = Debug|Any CPU {7DFA8BE7-1FC6-4749-AE7F-3C54A895E219}.Debug|x86.ActiveCfg = Debug|Any CPU {7DFA8BE7-1FC6-4749-AE7F-3C54A895E219}.Debug|x86.Build.0 = Debug|Any CPU + {7DFA8BE7-1FC6-4749-AE7F-3C54A895E219}.LinuxDebug|Any CPU.ActiveCfg = Debug|Any CPU + {7DFA8BE7-1FC6-4749-AE7F-3C54A895E219}.LinuxDebug|x64.ActiveCfg = Debug|Any CPU + {7DFA8BE7-1FC6-4749-AE7F-3C54A895E219}.LinuxDebug|x64.Build.0 = Debug|Any CPU + {7DFA8BE7-1FC6-4749-AE7F-3C54A895E219}.LinuxDebug|x86.ActiveCfg = Debug|Any CPU + {7DFA8BE7-1FC6-4749-AE7F-3C54A895E219}.LinuxDebug|x86.Build.0 = Debug|Any CPU + {7DFA8BE7-1FC6-4749-AE7F-3C54A895E219}.LinuxRelease|Any CPU.ActiveCfg = Release|Any CPU + {7DFA8BE7-1FC6-4749-AE7F-3C54A895E219}.LinuxRelease|x64.ActiveCfg = Release|Any CPU + {7DFA8BE7-1FC6-4749-AE7F-3C54A895E219}.LinuxRelease|x64.Build.0 = Release|Any CPU + {7DFA8BE7-1FC6-4749-AE7F-3C54A895E219}.LinuxRelease|x86.ActiveCfg = Release|Any CPU + {7DFA8BE7-1FC6-4749-AE7F-3C54A895E219}.LinuxRelease|x86.Build.0 = Release|Any CPU {7DFA8BE7-1FC6-4749-AE7F-3C54A895E219}.Release|Any CPU.ActiveCfg = Release|Any CPU {7DFA8BE7-1FC6-4749-AE7F-3C54A895E219}.Release|Any CPU.Build.0 = Release|Any CPU {7DFA8BE7-1FC6-4749-AE7F-3C54A895E219}.Release|x64.ActiveCfg = Release|Any CPU diff --git a/src/Aurio/Aurio.csproj b/src/Aurio/Aurio.csproj index 7ee5f539..828a766a 100644 --- a/src/Aurio/Aurio.csproj +++ b/src/Aurio/Aurio.csproj @@ -14,6 +14,6 @@ - + \ No newline at end of file diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 0c15128e..52dfacf2 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -5,6 +5,8 @@ Aurio Audio Processing, Analysis and Retrieval Library Copyright © 2010-2023 Mario Guggenberger 1.0.0 + + net6.0