Skip to content

Commit

Permalink
Merge branch 'v2.3.x-lts' into tv2-2.3
Browse files Browse the repository at this point in the history
  • Loading branch information
Julusian committed Aug 20, 2020
2 parents 9b90d21 + a4a7c05 commit 526d18a
Show file tree
Hide file tree
Showing 17 changed files with 2,490 additions and 1,733 deletions.
32 changes: 32 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,35 @@
CasparCG 2.3.0 Stable
==========================================

### Producers
##### Features
* FFmpeg: Add more common file extensions to the supported list
* NDI: Require minimum of NDI v4.0
##### Fixes
* HTML: Minimise performance impact on other producers


CasparCG 2.3.0 RC
==========================================

### Producers
##### Features
* Flash: Disable by default, requires enabling in the config file
* FFmpeg: Remove fixed thread limit to better auto select a number
##### Fixes
* Decklink: Downgrade severity of video-format not supported
* FFmpeg: Correctly handle error codes. Ignore exit errors during initialisation
* Route: Detect circular routes and break the loop

### Consumers
##### Features
* Bluefish: Various improvmements including support for Kronos K8

### General
##### Fixes
* Diag not reflecting channel videoformat changes


CasparCG 2.3.0 Beta 1
==========================================

Expand Down
5 changes: 1 addition & 4 deletions src/modules/decklink/consumer/decklink_consumer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -602,10 +602,7 @@ struct decklink_consumer : public IDeckLinkVideoOutputCallback
}
}

if (!frame) {
return !abort_request_;
}

if (frame)
{
std::unique_lock<std::mutex> lock(buffer_mutex_);
buffer_cond_.wait(lock, [&] { return buffer_.size() < buffer_capacity_ || abort_request_; });
Expand Down
18 changes: 3 additions & 15 deletions src/modules/ffmpeg/producer/ffmpeg_producer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -210,21 +210,9 @@ boost::tribool has_valid_extension(const std::wstring& filename)
L".ct",
L".html",
L".htm"};
static const auto valid_exts = {L".m2t",
L".mov",
L".mp4",
L".dv",
L".flv",
L".mpg",
L".dnxhd",
L".h264",
L".prores",
L".mkv",
L".mxf",
L".ts",
L".mp3",
L".wav",
L".wma"};
static const auto valid_exts = {L".m2t", L".m2ts", L".mov", L".mp4", L".dv", L".flv", L".mpg", L".dnxhd",
L".h264", L".prores", L".mkv", L".mxf", L".ts", L".mp3", L".wav", L".wma",
L".nut", L".flac", L".opus", L".ogg", L".ogv", L".oga", L".webm", L".webp"};

auto ext = boost::to_lower_copy(boost::filesystem::path(filename).extension().wstring());

Expand Down
3 changes: 0 additions & 3 deletions src/modules/html/producer/html_producer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -141,9 +141,6 @@ class html_client

loaded_ = false;
executor_.begin_invoke([&] {
#ifdef WIN32
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST);
#endif
for (auto n = 0; n < 4; ++n) {
update();
}
Expand Down
717 changes: 578 additions & 139 deletions src/modules/newtek/interop/Processing.NDI.DynamicLoad.h

Large diffs are not rendered by default.

146 changes: 73 additions & 73 deletions src/modules/newtek/interop/Processing.NDI.Find.h
Original file line number Diff line number Diff line change
@@ -1,73 +1,73 @@
#pragma once

// NOTE : The following MIT license applies to this file ONLY and not to the SDK as a whole. Please review the SDK documentation
// for the description of the full license terms, which are also provided in the file "NDI License Agreement.pdf" within the SDK or
// online at http://new.tk/ndisdk_license/. Your use of any part of this SDK is acknowledgment that you agree to the SDK license
// terms. The full NDI SDK may be downloaded at https://www.newtek.com/ndi/sdk/
//
//***********************************************************************************************************************************************
//
// Copyright(c) 2014-2018 NewTek, inc
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation
// files(the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify,
// merge, publish, distribute, sublicense, and / or sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions :
//
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//***********************************************************************************************************************************************

// Structures and type definitions required by NDI finding
// The reference to an instance of the finder
typedef void* NDIlib_find_instance_t;

// The creation structure that is used when you are creating a finder
typedef struct NDIlib_find_create_t
{ // Do we want to incluide the list of NDI sources that are running
// on the local machine ?
// If TRUE then local sources will be visible, if FALSE then they
// will not.
bool show_local_sources;

// Which groups do you want to search in for sources
const char* p_groups;

// The list of additional IP addresses that exist that we should query for
// sources on. For instance, if you want to find the sources on a remote machine
// that is not on your local sub-net then you can put a comma seperated list of
// those IP addresses here and those sources will be available locally even though
// they are not mDNS discoverable. An example might be "12.0.0.8,13.0.12.8".
// When none is specified the registry is used.
// Default = NULL;
const char* p_extra_ips;

#if NDILIB_CPP_DEFAULT_CONSTRUCTORS
NDIlib_find_create_t(bool show_local_sources_ = true, const char* p_groups_ = NULL, const char* p_extra_ips_ = NULL);
#endif // NDILIB_CPP_DEFAULT_CONSTRUCTORS

} NDIlib_find_create_t;

//**************************************************************************************************************************
// Create a new finder instance. This will return NULL if it fails.
PROCESSINGNDILIB_API
NDIlib_find_instance_t NDIlib_find_create_v2(const NDIlib_find_create_t* p_create_settings NDILIB_CPP_DEFAULT_VALUE(NULL));

// This will destroy an existing finder instance.
PROCESSINGNDILIB_API
void NDIlib_find_destroy(NDIlib_find_instance_t p_instance);

// This function will recover the current set of sources (i.e. the ones that exist right this second).
// The char* memory buffers returned in NDIlib_source_t are valid until the next call to NDIlib_find_get_current_sources or a call to NDIlib_find_destroy.
// For a given NDIlib_find_instance_t, do not call NDIlib_find_get_current_sources asynchronously.
PROCESSINGNDILIB_API
const NDIlib_source_t* NDIlib_find_get_current_sources(NDIlib_find_instance_t p_instance, uint32_t* p_no_sources);

// This will allow you to wait until the number of online sources have changed.
PROCESSINGNDILIB_API
bool NDIlib_find_wait_for_sources(NDIlib_find_instance_t p_instance, uint32_t timeout_in_ms);
#pragma once

// NOTE : The following MIT license applies to this file ONLY and not to the SDK as a whole. Please review the SDK documentation
// for the description of the full license terms, which are also provided in the file "NDI License Agreement.pdf" within the SDK or
// online at http://new.tk/ndisdk_license/. Your use of any part of this SDK is acknowledgment that you agree to the SDK license
// terms. The full NDI SDK may be downloaded at http://ndi.tv/
//
//*************************************************************************************************************************************
//
// Copyright(c) 2014-2020, NewTek, inc.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation
// files(the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify,
// merge, publish, distribute, sublicense, and / or sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions :
//
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//*************************************************************************************************************************************

// Structures and type definitions required by NDI finding
// The reference to an instance of the finder
typedef void* NDIlib_find_instance_t;

// The creation structure that is used when you are creating a finder
typedef struct NDIlib_find_create_t
{ // Do we want to include the list of NDI sources that are running
// on the local machine ?
// If TRUE then local sources will be visible, if FALSE then they
// will not.
bool show_local_sources;

// Which groups do you want to search in for sources
const char* p_groups;

// The list of additional IP addresses that exist that we should query for
// sources on. For instance, if you want to find the sources on a remote machine
// that is not on your local sub-net then you can put a comma separated list of
// those IP addresses here and those sources will be available locally even though
// they are not mDNS discoverable. An example might be "12.0.0.8,13.0.12.8".
// When none is specified the registry is used.
// Default = NULL;
const char* p_extra_ips;

#if NDILIB_CPP_DEFAULT_CONSTRUCTORS
NDIlib_find_create_t(bool show_local_sources_ = true, const char* p_groups_ = NULL, const char* p_extra_ips_ = NULL);
#endif // NDILIB_CPP_DEFAULT_CONSTRUCTORS

} NDIlib_find_create_t;

//**************************************************************************************************************************
// Create a new finder instance. This will return NULL if it fails.
PROCESSINGNDILIB_API
NDIlib_find_instance_t NDIlib_find_create_v2(const NDIlib_find_create_t* p_create_settings NDILIB_CPP_DEFAULT_VALUE(NULL));

// This will destroy an existing finder instance.
PROCESSINGNDILIB_API
void NDIlib_find_destroy(NDIlib_find_instance_t p_instance);

// This function will recover the current set of sources (i.e. the ones that exist right this second).
// The char* memory buffers returned in NDIlib_source_t are valid until the next call to NDIlib_find_get_current_sources or a call to NDIlib_find_destroy.
// For a given NDIlib_find_instance_t, do not call NDIlib_find_get_current_sources asynchronously.
PROCESSINGNDILIB_API
const NDIlib_source_t* NDIlib_find_get_current_sources(NDIlib_find_instance_t p_instance, uint32_t* p_no_sources);

// This will allow you to wait until the number of online sources have changed.
PROCESSINGNDILIB_API
bool NDIlib_find_wait_for_sources(NDIlib_find_instance_t p_instance, uint32_t timeout_in_ms);
Loading

0 comments on commit 526d18a

Please sign in to comment.