Purpose: Made minor changes to get the decklink avdevice code to build using Visual C++. Notes: Made changes to configure per Hendrik Leppkes's review of first and second versions of patch. Also made slight alterations per Marton Balint's reviews. Comments: -- configure: Added if enabled decklink section and setting decklink_indev_extralibs and decklink_outdev_extralibs here for both mingw and Windows. Also eliminated the setting of these variables in the mingw section earlier in the file. -- libavdevice/decklink_common.cpp: Switched the order of the include of libavformat/internal.h to workaround build issues with Visual C++. See comment in file for more details. -- libavdevice/decklink_dec.cpp: a) Rearranged the include of libavformat/internal.h (for reasons as described above). b) Made slight alteration to an argument for call to av_rescale_q() to workaround a compiler error with Visual C++. This appears to only be an issue when building C++ files with Visual C++. See comment in code for more details. -- libavdevice/decklink_enc.cpp: Rearranged the include of libavformat/internal.h (for reasons as described above). Signed-off-by: Aaron Levinson <alevinsn@aracnet.com> Signed-off-by: Marton Balint <cus@passwd.hu>tags/n3.4
| @@ -4853,8 +4853,6 @@ case $target_os in | |||||
| else | else | ||||
| target_os=mingw32 | target_os=mingw32 | ||||
| fi | fi | ||||
| decklink_outdev_extralibs="$decklink_outdev_extralibs -lole32 -loleaut32" | |||||
| decklink_indev_extralibs="$decklink_indev_extralibs -lole32 -loleaut32" | |||||
| LIBTARGET=i386 | LIBTARGET=i386 | ||||
| if enabled x86_64; then | if enabled x86_64; then | ||||
| LIBTARGET="i386:x86-64" | LIBTARGET="i386:x86-64" | ||||
| @@ -5959,6 +5957,15 @@ if ! disabled sdl2; then | |||||
| fi | fi | ||||
| enabled sdl2 && enable sdl && add_cflags $sdl2_cflags && add_extralibs $sdl2_extralibs | enabled sdl2 && enable sdl && add_cflags $sdl2_cflags && add_extralibs $sdl2_extralibs | ||||
| if enabled decklink; then | |||||
| case $target_os in | |||||
| mingw32*|mingw64*|win32|win64) | |||||
| decklink_outdev_extralibs="$decklink_outdev_extralibs -lole32 -loleaut32" | |||||
| decklink_indev_extralibs="$decklink_indev_extralibs -lole32 -loleaut32" | |||||
| ;; | |||||
| esac | |||||
| fi | |||||
| disabled securetransport || { check_func SecIdentityCreate "-Wl,-framework,CoreFoundation -Wl,-framework,Security" && | disabled securetransport || { check_func SecIdentityCreate "-Wl,-framework,CoreFoundation -Wl,-framework,Security" && | ||||
| check_lib securetransport "Security/SecureTransport.h Security/Security.h" "SSLCreateContext SecItemImport" "-Wl,-framework,CoreFoundation -Wl,-framework,Security"; } | check_lib securetransport "Security/SecureTransport.h Security/Security.h" "SSLCreateContext SecItemImport" "-Wl,-framework,CoreFoundation -Wl,-framework,Security"; } | ||||
| @@ -19,6 +19,12 @@ | |||||
| * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | ||||
| */ | */ | ||||
| /* Include internal.h first to avoid conflict between winsock.h (used by | |||||
| * DeckLink headers) and winsock2.h (used by libavformat) in MSVC++ builds */ | |||||
| extern "C" { | |||||
| #include "libavformat/internal.h" | |||||
| } | |||||
| #include <DeckLinkAPI.h> | #include <DeckLinkAPI.h> | ||||
| #ifdef _WIN32 | #ifdef _WIN32 | ||||
| #include <DeckLinkAPI_i.c> | #include <DeckLinkAPI_i.c> | ||||
| @@ -28,7 +34,6 @@ | |||||
| extern "C" { | extern "C" { | ||||
| #include "libavformat/avformat.h" | #include "libavformat/avformat.h" | ||||
| #include "libavformat/internal.h" | |||||
| #include "libavutil/imgutils.h" | #include "libavutil/imgutils.h" | ||||
| #include "libavutil/intreadwrite.h" | #include "libavutil/intreadwrite.h" | ||||
| #include "libavutil/bswap.h" | #include "libavutil/bswap.h" | ||||
| @@ -19,12 +19,17 @@ | |||||
| * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | ||||
| */ | */ | ||||
| /* Include internal.h first to avoid conflict between winsock.h (used by | |||||
| * DeckLink headers) and winsock2.h (used by libavformat) in MSVC++ builds */ | |||||
| extern "C" { | |||||
| #include "libavformat/internal.h" | |||||
| } | |||||
| #include <DeckLinkAPI.h> | #include <DeckLinkAPI.h> | ||||
| extern "C" { | extern "C" { | ||||
| #include "config.h" | #include "config.h" | ||||
| #include "libavformat/avformat.h" | #include "libavformat/avformat.h" | ||||
| #include "libavformat/internal.h" | |||||
| #include "libavutil/avutil.h" | #include "libavutil/avutil.h" | ||||
| #include "libavutil/common.h" | #include "libavutil/common.h" | ||||
| #include "libavutil/imgutils.h" | #include "libavutil/imgutils.h" | ||||
| @@ -262,8 +267,15 @@ static int64_t get_pkt_pts(IDeckLinkVideoInputFrame *videoFrame, | |||||
| res = videoFrame->GetHardwareReferenceTimestamp(time_base.den, &bmd_pts, &bmd_duration); | res = videoFrame->GetHardwareReferenceTimestamp(time_base.den, &bmd_pts, &bmd_duration); | ||||
| break; | break; | ||||
| case PTS_SRC_WALLCLOCK: | case PTS_SRC_WALLCLOCK: | ||||
| pts = av_rescale_q(wallclock, AV_TIME_BASE_Q, time_base); | |||||
| { | |||||
| /* MSVC does not support compound literals like AV_TIME_BASE_Q | |||||
| * in C++ code (compiler error C4576) */ | |||||
| AVRational timebase; | |||||
| timebase.num = 1; | |||||
| timebase.den = AV_TIME_BASE; | |||||
| pts = av_rescale_q(wallclock, timebase, time_base); | |||||
| break; | break; | ||||
| } | |||||
| } | } | ||||
| if (res == S_OK) | if (res == S_OK) | ||||
| pts = bmd_pts / time_base.num; | pts = bmd_pts / time_base.num; | ||||
| @@ -22,11 +22,16 @@ | |||||
| #include <atomic> | #include <atomic> | ||||
| using std::atomic; | using std::atomic; | ||||
| /* Include internal.h first to avoid conflict between winsock.h (used by | |||||
| * DeckLink headers) and winsock2.h (used by libavformat) in MSVC++ builds */ | |||||
| extern "C" { | |||||
| #include "libavformat/internal.h" | |||||
| } | |||||
| #include <DeckLinkAPI.h> | #include <DeckLinkAPI.h> | ||||
| extern "C" { | extern "C" { | ||||
| #include "libavformat/avformat.h" | #include "libavformat/avformat.h" | ||||
| #include "libavformat/internal.h" | |||||
| #include "libavutil/imgutils.h" | #include "libavutil/imgutils.h" | ||||
| } | } | ||||