From 72768049d5b930c6b07d46c1fdbf1d166d4b5203 Mon Sep 17 00:00:00 2001 From: Guillaume Roguez <guillaume.roguez@savoirfairelinux.com> Date: Mon, 24 Nov 2014 11:52:23 -0500 Subject: [PATCH] video: require SDP custom_io support Refs #61482 Change-Id: I5dbde5b6f423ec535a27e6451112993aaa4d61e7 --- daemon/configure.ac | 2 +- daemon/contrib/src/libav/rules.mak | 3 ++- daemon/src/video/libav_deps.h | 6 ++++-- daemon/src/video/socket_pair.cpp | 9 --------- daemon/src/video/video_decoder.cpp | 2 -- daemon/src/video/video_receive_thread.cpp | 11 ++--------- 6 files changed, 9 insertions(+), 24 deletions(-) diff --git a/daemon/configure.ac b/daemon/configure.ac index f6eeb1c8dc..6f6ef4a9a7 100644 --- a/daemon/configure.ac +++ b/daemon/configure.ac @@ -354,7 +354,7 @@ AS_IF([test "x$enable_video" != "xno"], PKG_CHECK_MODULES(LIBAVCODEC, libavcodec >= 53.5.0,, AC_MSG_ERROR([Missing libavcodec development files])) LIBAVCODEC_CFLAGS="${LIBAVCODEC_CFLAGS} -D__STDC_CONSTANT_MACROS" - PKG_CHECK_MODULES(LIBAVFORMAT, libavformat >= 53.2.0,, AC_MSG_ERROR([Missing libavformat development files])) + PKG_CHECK_MODULES(LIBAVFORMAT, libavformat >= 54.20.3,, AC_MSG_ERROR([Missing libavformat development files])) PKG_CHECK_MODULES(LIBSWSCALE, libswscale >= 1.1.0,, AC_MSG_ERROR([Missing libswscale development files])) diff --git a/daemon/contrib/src/libav/rules.mak b/daemon/contrib/src/libav/rules.mak index 0d594b6979..db962b6748 100644 --- a/daemon/contrib/src/libav/rules.mak +++ b/daemon/contrib/src/libav/rules.mak @@ -110,7 +110,8 @@ ifndef HAVE_ANDROID PKGS += libav endif endif -ifeq ($(call need_pkg,"libavcodec >= 53.5.0 libavformat >= 53.2.0 libswscale libavdevice >= 53.0.0 libavutil >= 51.0.0"),) + +ifeq ($(call need_pkg,"libavcodec >= 53.5.0 libavformat >= 54.20.3 libswscale libavdevice >= 53.0.0 libavutil >= 51.0.0"),) PKGS_FOUND += libav endif diff --git a/daemon/src/video/libav_deps.h b/daemon/src/video/libav_deps.h index dd938a2944..2f9e9af8ab 100644 --- a/daemon/src/video/libav_deps.h +++ b/daemon/src/video/libav_deps.h @@ -55,8 +55,6 @@ ( (LIBAVUTIL_VERSION_MICRO < 100 && LIBAVUTIL_VERSION_INT >= AV_VERSION_INT( a, b, c ) ) || \ (LIBAVUTIL_VERSION_MICRO >= 100 && LIBAVUTIL_VERSION_INT >= AV_VERSION_INT( a, d, e ) ) ) -#define HAVE_SDP_CUSTOM_IO LIBAVFORMAT_VERSION_CHECK(54,20,3,59,103) - extern "C" { #include <libavcodec/avcodec.h> #include <libavformat/avformat.h> @@ -75,6 +73,10 @@ extern "C" { #include "libav_utils.h" +#if !LIBAVFORMAT_VERSION_CHECK(54,20,3,59,103) +#error "Used libavformat doesn't support sdp custom_io" +#endif + #if !LIBAVUTIL_VERSION_CHECK(51, 42, 0, 74, 100) && !defined(FF_API_PIX_FMT) #define AVPixelFormat PixelFormat #define PIXEL_FORMAT(FMT) PIX_FMT_ ## FMT diff --git a/daemon/src/video/socket_pair.cpp b/daemon/src/video/socket_pair.cpp index 6c50ff5466..2371630bb7 100644 --- a/daemon/src/video/socket_pair.cpp +++ b/daemon/src/video/socket_pair.cpp @@ -118,7 +118,6 @@ udp_socket_create(sockaddr_storage *addr, socklen_t *addr_len, int local_port) memcpy(addr, res->ai_addr, res->ai_addrlen); *addr_len = res->ai_addrlen; -#if HAVE_SDP_CUSTOM_IO // bind socket so that we send from and receive // on local port if (bind(udp_fd, reinterpret_cast<sockaddr*>(addr), *addr_len) < 0) { @@ -127,7 +126,6 @@ udp_socket_create(sockaddr_storage *addr, socklen_t *addr_len, int local_port) close(udp_fd); udp_fd = -1; } -#endif freeaddrinfo(res0); @@ -180,14 +178,7 @@ void SocketPair::openSockets(const char *uri, int local_rtp_port) sizeof(path)); const int rtcp_port = rtp_port + 1; - -#if HAVE_SDP_CUSTOM_IO const int local_rtcp_port = local_rtp_port + 1; -#else - SFL_WARN("libavformat too old for socket reuse, using random source ports"); - local_rtp_port = 0; - const int local_rtcp_port = 0; -#endif sockaddr_storage rtp_addr, rtcp_addr; socklen_t rtp_len, rtcp_len; diff --git a/daemon/src/video/video_decoder.cpp b/daemon/src/video/video_decoder.cpp index bb67e29b87..faa29befbc 100644 --- a/daemon/src/video/video_decoder.cpp +++ b/daemon/src/video/video_decoder.cpp @@ -78,9 +78,7 @@ VideoDecoder::setOptions(const std::map<std::string, std::string>& options) extract(options, "video_size"); extract(options, "channel"); extract(options, "loop"); -#if HAVE_SDP_CUSTOM_IO extract(options, "sdp_flags"); -#endif } int VideoDecoder::openInput(const std::string &source_str, diff --git a/daemon/src/video/video_receive_thread.cpp b/daemon/src/video/video_receive_thread.cpp index fac2c2fb99..01229a12cd 100644 --- a/daemon/src/video/video_receive_thread.cpp +++ b/daemon/src/video/video_receive_thread.cpp @@ -102,12 +102,9 @@ bool VideoReceiveThread::setup() videoDecoder_->setInterruptCallback(interruptCb, this); if (input == SDP_FILENAME) { -#if HAVE_SDP_CUSTOM_IO - // custom_io so the SDP demuxer will not open any UDP connections + // Force custom_io so the SDP demuxer will not open any UDP connections + // We need it to use ICE transport. args_["sdp_flags"] = "custom_io"; -#else - SFL_WARN("libavformat too old for custom SDP demuxing"); -#endif EXIT_IF_FAIL(not stream_.str().empty(), "No SDP loaded"); videoDecoder_->setIOContext(&sdpContext_); @@ -119,10 +116,8 @@ bool VideoReceiveThread::setup() "Could not open input \"%s\"", input.c_str()); if (input == SDP_FILENAME) { -#if HAVE_SDP_CUSTOM_IO // Now replace our custom AVIOContext with one that will read packets videoDecoder_->setIOContext(demuxContext_); -#endif } // FIXME: this is a hack because our peer sends us RTP before @@ -182,9 +177,7 @@ int VideoReceiveThread::readFunction(void *opaque, uint8_t *buf, int buf_size) void VideoReceiveThread::addIOContext(SocketPair &socketPair) { -#if HAVE_SDP_CUSTOM_IO demuxContext_ = socketPair.createIOContext(); -#endif } bool VideoReceiveThread::decodeFrame() -- GitLab