Commit b47f5d12 authored by Francis Lecavalier's avatar Francis Lecavalier

Merge branch 'develop'

parents 52851aa6 29869596
Nicolas Bouillot
Francis Lecavalier
* Nicolas Bouillot
* Francis Lecavalier
......@@ -8,7 +8,7 @@ cmake_minimum_required(VERSION 3.5.1)
# Project Variables
set(NDI2SHMDATA_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set(NDI2SHMDATA_VERSION_MAJOR 0)
set(NDI2SHMDATA_VERSION_MINOR 3)
set(NDI2SHMDATA_VERSION_MINOR 4)
set(NDI2SHMDATA_VERSION_PATCH 0)
set(NDI2SHMDATA_VERSION_STRING ${NDI2SHMDATA_VERSION_MAJOR}.${NDI2SHMDATA_VERSION_MINOR}.${NDI2SHMDATA_VERSION_PATCH})
set(SHMDATA_REQUIRED_VERSION 1.3)
......
......@@ -8,10 +8,10 @@ First make sure `develop` branch reflects the desired `master`:
* Commit and push, open a code review
Release into the master branch:
* remove release branch: `git branch -d current_release`
* remove release branch: `git checkout develop && git pull origin develop && git branch -d current_release`
* merge into master: `git checkout master && git pull origin master && git merge --no-ff develop`
* tag the version `git tag -a vX.X.X -m"Short message that explains the new version"`
* push to master: `git push origin master --tags`
* rebase develop on master:`git checkout develop && git rebase master`
* rebase develop on master:`git checkout develop && git rebase master && git push origin develop`
You're done.
# NDI2shmdata Changelog
ndi2shmdata [0.3.0] - 2019-04-26
ndi2shmdata [0.4.0] - 2020-06-10
--------------------------------
Documentation:
* 📝 Update release how to
NDI:
* 👽 Update NDI SDK to 4.5.2
ndi2shmdata [0.3.0] - 2020-02-07
--------------------------------
New Feature:
......
......@@ -12,7 +12,7 @@ f. “Third Party Video Products” refers to products of third parties develope
2. License
a. Pursuant to the terms, conditions and requirements of this License and the SDK Documentation, you are hereby granted a nonexclusive royalty-free license to use the sample code, object code and documentation included in the SDK for the sole purpose of developing Products using the Specific SDK, and to distribute, only in accordance with the SDK Documentation requirements, object code included in the SDK solely as used by such Products (your Product and compiled sample code referred to as the “Bundled Product”).
b. If you are making a product release you must use a version of the SDK that is less than ninety (30) days old if there is one.
b. If you are making a product release you must use a version of the SDK that is less than thirty (30) days old if there is one.
c. This is a License only, and no employment, joint venture, partnership, or other business venture is created by this License.
d. Unless otherwise stated in the SDK, no files within the SDK and the Specific SDK may be distributed. Certain files within the SDK or the Specific SDK may be distributed, said files and their respective distribution license are individually identified within the SDK documentation. This is not a license to create revisions or other derivative works of any NewTek software or technology.
e. You agree to comply with the steps outlined in the SDK Documentation, including the SDK manual for the Specific SDK. Different obligations and restrictions may be imposed by NewTek with respect to different Specific SDK’s. NewTek will not agree to sponsor your Product or show affiliation; however NewTek shall have the right to test the Product, and if it does not work or operate to NewTek’s satisfaction, NewTek may terminate this license pursuant to Section 10. Notwithstanding that NewTek may test the Product, it does not warrant the test; it is for NewTek’s benefit, and you agree not to promote in your Product marketing or elsewhere any results or that NewTek has tested the Product.
......@@ -56,8 +56,4 @@ Either party may terminate this License upon thirty (30) days written notice. E
11. General
Notices given hereunder may be sent to either party at the address below by either overnight mail or by email and are deemed effective when sent. This License shall be governed by the laws of the State of Texas, without regard to its choice of law rules and you agree to exclusive jurisdiction therein. This License contains the complete agreement between you and NewTek with respect to the subject matter (SDK) of this License, and supersedes all prior or contemporaneous agreements or understandings, whether oral or written. It does not replace any licenses accompanying NewTek Products. You may not assign this SDK License.
May 2019 NDI® Technology License Agreement
Jan 2020 NDI® Technology License Agreement
......@@ -7,7 +7,7 @@
//
//*************************************************************************************************************************************
//
// Copyright(c) 2014-2019 NewTek, inc
// 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,
......@@ -536,6 +536,31 @@ typedef struct NDIlib_v4
PROCESSINGNDILIB_DEPRECATED int(*NDIlib_routing_get_no_connections)(NDIlib_routing_instance_t p_instance, uint32_t timeout_in_ms);
};
union
{ const NDIlib_source_t* (*routing_get_source_name)(NDIlib_routing_instance_t p_instance);
PROCESSINGNDILIB_DEPRECATED const NDIlib_source_t* (*NDIlib_routing_get_source_name)(NDIlib_routing_instance_t p_instance);
};
union
{ NDIlib_frame_type_e(*recv_capture_v3)(NDIlib_recv_instance_t p_instance, NDIlib_video_frame_v2_t* p_video_data, NDIlib_audio_frame_v3_t* p_audio_data, NDIlib_metadata_frame_t* p_metadata, uint32_t timeout_in_ms); // The amount of time in milliseconds to wait for data.
PROCESSINGNDILIB_DEPRECATED NDIlib_frame_type_e(*NDIlib_recv_capture_v3)(NDIlib_recv_instance_t p_instance, NDIlib_video_frame_v2_t* p_video_data, NDIlib_audio_frame_v3_t* p_audio_data, NDIlib_metadata_frame_t* p_metadata, uint32_t timeout_in_ms); // The amount of time in milliseconds to wait for data.
};
union
{ void(*recv_free_audio_v3)(NDIlib_recv_instance_t p_instance, const NDIlib_audio_frame_v3_t* p_audio_data);
PROCESSINGNDILIB_DEPRECATED void(*NDIlib_recv_free_audio_v3)(NDIlib_recv_instance_t p_instance, const NDIlib_audio_frame_v3_t* p_audio_data);
};
union
{ void(*framesync_capture_audio_v2)(NDIlib_framesync_instance_t p_instance, NDIlib_audio_frame_v3_t* p_audio_data, int sample_rate, int no_channels, int no_samples);
PROCESSINGNDILIB_DEPRECATED void(*NDIlib_framesync_capture_audio_v2)(NDIlib_framesync_instance_t p_instance, NDIlib_audio_frame_v3_t* p_audio_data, int sample_rate, int no_channels, int no_samples);
};
union
{ void(*framesync_free_audio_v2)(NDIlib_framesync_instance_t p_instance, NDIlib_audio_frame_v3_t* p_audio_data);
PROCESSINGNDILIB_DEPRECATED void(*NDIlib_framesync_free_audio_v2)(NDIlib_framesync_instance_t p_instance, NDIlib_audio_frame_v3_t* p_audio_data);
};
} NDIlib_v4;
typedef struct NDIlib_v4 NDIlib_v3;
......
......@@ -7,7 +7,7 @@
//
//*************************************************************************************************************************************
//
// Copyright(c) 2014-2019 NewTek, inc
// 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,
......
......@@ -7,7 +7,7 @@
//
//*************************************************************************************************************************************
//
// Copyright(c) 2014-2019 NewTek, inc
// 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,
......@@ -112,6 +112,13 @@ void NDIlib_framesync_capture_audio(// The frame sync instance data
NDIlib_audio_frame_v2_t* p_audio_data,
// Your desired sample rate, number of channels and the number of desired samples.
int sample_rate, int no_channels, int no_samples);
PROCESSINGNDILIB_API
void NDIlib_framesync_capture_audio_v2(// The frame sync instance data
NDIlib_framesync_instance_t p_instance,
// The destination audio buffer that you wish to have filled in.
NDIlib_audio_frame_v3_t* p_audio_data,
// Your desired sample rate, number of channels and the number of desired samples.
int sample_rate, int no_channels, int no_samples);
// Free audio returned by NDIlib_framesync_capture_audio
PROCESSINGNDILIB_API
......@@ -119,6 +126,11 @@ void NDIlib_framesync_free_audio(// The frame sync instance data
NDIlib_framesync_instance_t p_instance,
// The destination audio buffer that you wish to have filled in.
NDIlib_audio_frame_v2_t* p_audio_data);
PROCESSINGNDILIB_API
void NDIlib_framesync_free_audio_v2(// The frame sync instance data
NDIlib_framesync_instance_t p_instance,
// The destination audio buffer that you wish to have filled in.
NDIlib_audio_frame_v3_t* p_audio_data);
// This function will tell you the approximate current depth of the audio queue to give you an indication
// of the number of audio samples you can request. Note that if you should treat the results of this function
......
......@@ -7,7 +7,7 @@
//
//*************************************************************************************************************************************
//
// Copyright(c) 2014-2019 NewTek, inc
// 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,
......
......@@ -7,7 +7,7 @@
//
//*************************************************************************************************************************************
//
// Copyright(c) 2014-2019 NewTek, inc
// 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,
......
......@@ -7,7 +7,7 @@
//
//*************************************************************************************************************************************
//
// Copyright(c) 2014-2019 NewTek, inc
// 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,
......@@ -40,7 +40,7 @@ bool NDIlib_recv_ptz_is_supported(NDIlib_recv_instance_t p_instance);
// newer support which is more feature rich and supports the recording of all stream types, does not take CPU time to record
// NDI sources (it does not require any type of re-compression since it can just store the data in the file), it will synchronize
// all recorders on a system (and cross systems if NTP clock locking is used).
PROCESSINGNDILIB_DEPRECATED PROCESSINGNDILIB_API
PROCESSINGNDILIB_API PROCESSINGNDILIB_DEPRECATED
bool NDIlib_recv_recording_is_supported(NDIlib_recv_instance_t p_instance);
// PTZ Controls
......@@ -128,13 +128,13 @@ bool NDIlib_recv_ptz_exposure_manual(NDIlib_recv_instance_t p_instance, const fl
// not present, a name will be chosen automatically. If you do not with to provide a filename hint you can simply pass NULL.
//
// See note above on depreciation and why this is, and how to replace this functionality.
PROCESSINGNDILIB_DEPRECATED PROCESSINGNDILIB_API
PROCESSINGNDILIB_API PROCESSINGNDILIB_DEPRECATED
bool NDIlib_recv_recording_start(NDIlib_recv_instance_t p_instance, const char* p_filename_hint);
// Stop recording.
//
// See note above on depreciation and why this is, and how to replace this functionality.
PROCESSINGNDILIB_DEPRECATED PROCESSINGNDILIB_API
PROCESSINGNDILIB_API PROCESSINGNDILIB_DEPRECATED
bool NDIlib_recv_recording_stop(NDIlib_recv_instance_t p_instance);
// This will control the audio level for the recording.dB is specified in decibels relative to the reference level of the source. Not all recording sources support
......@@ -142,28 +142,28 @@ bool NDIlib_recv_recording_stop(NDIlib_recv_instance_t p_instance);
// might not support this message.
//
// See note above on depreciation and why this is, and how to replace this functionality.
PROCESSINGNDILIB_DEPRECATED PROCESSINGNDILIB_API
PROCESSINGNDILIB_API PROCESSINGNDILIB_DEPRECATED
bool NDIlib_recv_recording_set_audio_level(NDIlib_recv_instance_t p_instance, const float level_dB);
// This will determine if the source is currently recording. It will return true while recording is in progress and false when it is not. Because there is
// one recorded and multiple people might be connected to it, there is a chance that it is recording which was initiated by someone else.
//
// See note above on depreciation and why this is, and how to replace this functionality.
PROCESSINGNDILIB_DEPRECATED PROCESSINGNDILIB_API
PROCESSINGNDILIB_API PROCESSINGNDILIB_DEPRECATED
bool NDIlib_recv_recording_is_recording(NDIlib_recv_instance_t p_instance);
// Get the current filename for recording. When this is set it will return a non-NULL value which is owned by you and freed using NDIlib_recv_free_string.
// If a file was already being recorded by another client, the massage will contain the name of that file. The filename contains a UNC path (when one is available)
// to the recorded file, and can be used to access the file on your local machine for playback. If a UNC path is not available, then this will represent the local
// filename. This will remain valid even after the file has stopped being recorded until the next file is started.
PROCESSINGNDILIB_DEPRECATED PROCESSINGNDILIB_API
PROCESSINGNDILIB_API PROCESSINGNDILIB_DEPRECATED
const char* NDIlib_recv_recording_get_filename(NDIlib_recv_instance_t p_instance);
// This will tell you whether there was a recording error and what that string is. When this is set it will return a non-NULL value which is owned by you and
// freed using NDIlib_recv_free_string. When there is no error it will return NULL.
//
// See note above on depreciation and why this is, and how to replace this functionality.
PROCESSINGNDILIB_DEPRECATED PROCESSINGNDILIB_API
PROCESSINGNDILIB_API PROCESSINGNDILIB_DEPRECATED
const char* NDIlib_recv_recording_get_error(NDIlib_recv_instance_t p_instance);
// In order to get the duration
......@@ -184,5 +184,5 @@ typedef struct NDIlib_recv_recording_time_t
// Get the current recording times.
//
// See note above on depreciation and why this is, and how to replace this functionality.
PROCESSINGNDILIB_DEPRECATED PROCESSINGNDILIB_API
PROCESSINGNDILIB_API PROCESSINGNDILIB_DEPRECATED
bool NDIlib_recv_recording_get_times(NDIlib_recv_instance_t p_instance, NDIlib_recv_recording_time_t* p_times);
......@@ -7,7 +7,7 @@
//
//*************************************************************************************************************************************
//
// Copyright(c) 2014-2019 NewTek, inc
// 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,
......@@ -34,7 +34,7 @@ typedef enum NDIlib_recv_bandwidth_e
NDIlib_recv_bandwidth_highest = 100, // Receive metadata, audio, video at full resolution.
// Ensure this is 32bits in size
NDIlib_recv_bandwidth_max = 0xffffffff
NDIlib_recv_bandwidth_max = 0x7fffffff
} NDIlib_recv_bandwidth_e;
typedef enum NDIlib_recv_color_format_e
......@@ -85,8 +85,14 @@ typedef enum NDIlib_recv_color_format_e
NDIlib_recv_color_format_e_RGBX_RGBA = NDIlib_recv_color_format_RGBX_RGBA,
NDIlib_recv_color_format_e_UYVY_RGBA = NDIlib_recv_color_format_UYVY_RGBA,
#ifdef _WIN32
// For Windows we can support flipped images which is unfortunately something that Microsoft decided to do
// back in the old days.
NDIlib_recv_color_format_BGRX_BGRA_flipped = 1000 + NDIlib_recv_color_format_BGRX_BGRA,
#endif
// Force the size to be 32bits
NDIlib_recv_color_format_max = 0xffffffff
NDIlib_recv_color_format_max = 0x7fffffff
} NDIlib_recv_color_format_e;
// The creation structure that is used when you are creating a receiver
......@@ -187,6 +193,21 @@ NDIlib_frame_type_e NDIlib_recv_capture_v2(
NDIlib_metadata_frame_t* p_metadata, // The metadata received (can be NULL)
uint32_t timeout_in_ms); // The amount of time in milliseconds to wait for data.
// This will allow you to receive video, audio and metadata frames.
// Any of the buffers can be NULL, in which case data of that type
// will not be captured in this call. This call can be called simultaneously
// on separate threads, so it is entirely possible to receive audio, video, metadata
// all on separate threads. This function will return NDIlib_frame_type_none if no
// data is received within the specified timeout and NDIlib_frame_type_error if the connection is lost.
// Buffers captured with this must be freed with the appropriate free function below.
PROCESSINGNDILIB_API
NDIlib_frame_type_e NDIlib_recv_capture_v3(
NDIlib_recv_instance_t p_instance, // The library instance
NDIlib_video_frame_v2_t* p_video_data, // The video data received (can be NULL)
NDIlib_audio_frame_v3_t* p_audio_data, // The audio data received (can be NULL)
NDIlib_metadata_frame_t* p_metadata, // The metadata received (can be NULL)
uint32_t timeout_in_ms); // The amount of time in milliseconds to wait for data.
// Free the buffers returned by capture for video
PROCESSINGNDILIB_API
void NDIlib_recv_free_video_v2(NDIlib_recv_instance_t p_instance, const NDIlib_video_frame_v2_t* p_video_data);
......@@ -195,6 +216,10 @@ void NDIlib_recv_free_video_v2(NDIlib_recv_instance_t p_instance, const NDIlib_v
PROCESSINGNDILIB_API
void NDIlib_recv_free_audio_v2(NDIlib_recv_instance_t p_instance, const NDIlib_audio_frame_v2_t* p_audio_data);
// Free the buffers returned by capture for audio
PROCESSINGNDILIB_API
void NDIlib_recv_free_audio_v3(NDIlib_recv_instance_t p_instance, const NDIlib_audio_frame_v3_t* p_audio_data);
// Free the buffers returned by capture for metadata
PROCESSINGNDILIB_API
void NDIlib_recv_free_metadata(NDIlib_recv_instance_t p_instance, const NDIlib_metadata_frame_t* p_metadata);
......
......@@ -7,7 +7,7 @@
//
//*************************************************************************************************************************************
//
// Copyright(c) 2014-2019 NewTek, inc
// 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,
......@@ -62,3 +62,7 @@ bool NDIlib_routing_clear(NDIlib_routing_instance_t p_instance);
// 0 then it will wait until there are connections for this amount of time.
PROCESSINGNDILIB_API
int NDIlib_routing_get_no_connections(NDIlib_routing_instance_t p_instance, uint32_t timeout_in_ms);
// Retrieve the source information for the given router instance. This pointer is valid until NDIlib_routing_destroy is called.
PROCESSINGNDILIB_API
const NDIlib_source_t* NDIlib_routing_get_source_name(NDIlib_routing_instance_t p_instance);
......@@ -7,7 +7,7 @@
//
//*************************************************************************************************************************************
//
// Copyright(c) 2014-2019 NewTek, inc
// 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,
......
......@@ -7,7 +7,7 @@
//
//*************************************************************************************************************************************
//
// Copyright(c) 2014-2019 NewTek, inc
// 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,
......
......@@ -7,7 +7,7 @@
//
//*************************************************************************************************************************************
//
// Copyright(c) 2014-2019 NewTek, inc
// 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,
......
......@@ -7,7 +7,7 @@
//
//*************************************************************************************************************************************
//
// Copyright(c) 2014-2019 NewTek, inc
// 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,
......@@ -44,7 +44,7 @@ typedef enum NDIlib_frame_type_e
NDIlib_frame_type_status_change = 100,
// Ensure that the size is 32bits
NDIlib_frame_type_max = 0xffffffff
NDIlib_frame_type_max = 0x7fffffff
} NDIlib_frame_type_e;
// FourCC values for video frames
......@@ -116,7 +116,7 @@ typedef enum NDIlib_FourCC_video_type_e
NDIlib_FourCC_type_RGBX = NDIlib_FourCC_video_type_RGBX,
// Ensure that the size is 32bits
NDIlib_FourCC_video_type_max = 0xffffffff
NDIlib_FourCC_video_type_max = 0x7fffffff
} NDIlib_FourCC_video_type_e;
// Really for backwards compatibility
......@@ -130,7 +130,7 @@ typedef enum NDIlib_FourCC_audio_type_e
NDIlib_FourCC_type_FLTP = NDIlib_FourCC_audio_type_FLTP,
// Ensure that the size is 32bits
NDIlib_FourCC_audio_type_max = 0xffffffff
NDIlib_FourCC_audio_type_max = 0x7fffffff
} NDIlib_FourCC_audio_type_e;
typedef enum NDIlib_frame_format_type_e
......@@ -146,7 +146,7 @@ typedef enum NDIlib_frame_format_type_e
NDIlib_frame_format_type_field_1 = 3,
// Ensure that the size is 32bits
NDIlib_frame_format_type_max = 0xffffffff
NDIlib_frame_format_type_max = 0x7fffffff
} NDIlib_frame_format_type_e;
// When you specify this as a timecode, the timecode will be synthesized for you. This may
......
......@@ -7,7 +7,7 @@
//
//*************************************************************************************************************************************
//
// Copyright(c) 2014-2019 NewTek, inc
// 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,
......
libndi.so.4.1.3
\ No newline at end of file
libndi.so.4.1.3
\ No newline at end of file
libndi.so.4.1.3
\ No newline at end of file
libndi.so.4.1.3
\ No newline at end of file
libndi.so.4.1.3
\ No newline at end of file
libndi.so.4.1.3
\ No newline at end of file
libndi.so.4.1.3
\ No newline at end of file
libndi.so.4.1.3
\ No newline at end of file
libndi.so.4.1.3
\ No newline at end of file
libndi.so.4.1.3
\ No newline at end of file
......@@ -26,7 +26,7 @@ install(TARGETS shmdatatondi nditoshmdata
install(FILES
${NDI2SHMDATA_DIR}/ndi-sdk/lib/x86_64-linux-gnu/libndi.so
${NDI2SHMDATA_DIR}/ndi-sdk/lib/x86_64-linux-gnu/libndi.so.4
${NDI2SHMDATA_DIR}/ndi-sdk/lib/x86_64-linux-gnu/libndi.so.4.1.3
${NDI2SHMDATA_DIR}/ndi-sdk/lib/x86_64-linux-gnu/libndi.so.4.5.2
DESTINATION nditoshmdata/lib )
install(FILES
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment