From 79e8bb9f17bd3496def79855fdf297bbb466db4e Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Thu, 2 Apr 2015 15:23:18 +0200 Subject: [PATCH 1/4] Travis: use matrix to build with ffmpeg/libav Fix #138 --- .travis.yml | 9 +++++++-- tools/travis.linux.install.deps.sh | 22 ++++++++++++++++------ tools/travis.osx.install.deps.sh | 8 +++++++- 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9d565e17..f1dab5cb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,14 @@ +env: + matrix: + - DEPENDENCY_MODE=libav + - DEPENDENCY_MODE=ffmpeg + +language: cpp + os: - linux - osx -language: cpp - compiler: - gcc - clang diff --git a/tools/travis.linux.install.deps.sh b/tools/travis.linux.install.deps.sh index 534f08e2..c3af0376 100644 --- a/tools/travis.linux.install.deps.sh +++ b/tools/travis.linux.install.deps.sh @@ -10,9 +10,19 @@ sudo apt-get install -qq python-dev doxygen sudo apt-get install -qq freeglut3-dev libxmu-dev sudo apt-get install -qq python-nose -# Build FFmpeg 2.2.9 -sudo wget https://www.ffmpeg.org/releases/ffmpeg-2.2.9.tar.bz2 -sudo bunzip2 ffmpeg-2.2.9.tar.bz2 -sudo tar -xvf ffmpeg-2.2.9.tar -cd ffmpeg-2.2.9 -./configure --disable-yasm --enable-shared --disable-static && make && sudo make install +if [[ ${DEPENDENCY_MODE} == "ffmpeg" ]]; then + export FFMPEG_VERSION=2.2.9 + sudo wget https://www.ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2 + sudo bunzip2 ffmpeg-${FFMPEG_VERSION}.tar.bz2 + sudo tar -xvf ffmpeg-${FFMPEG_VERSION}.tar + cd ffmpeg-${FFMPEG_VERSION} + sudo ./configure --disable-yasm --enable-shared --disable-static && sudo make && sudo make install + +elif [[ ${DEPENDENCY_MODE} == "libav" ]]; then + export LIBAV_VERSION=11.3 + sudo wget https://libav.org/releases/libav-${LIBAV_VERSION}.tar.gz + sudo tar -xvf libav-${LIBAV_VERSION}.tar.gz + cd libav-${LIBAV_VERSION} + sudo ./configure --disable-yasm --enable-shared --disable-static && sudo make && sudo make install + +fi diff --git a/tools/travis.osx.install.deps.sh b/tools/travis.osx.install.deps.sh index 1896b401..3c168552 100644 --- a/tools/travis.osx.install.deps.sh +++ b/tools/travis.osx.install.deps.sh @@ -3,4 +3,10 @@ brew update brew install gcc cmake swig -brew install ffmpeg freeglut doxygen +brew install freeglut doxygen + +if [[ ${DEPENDENCY_MODE} == "ffmpeg" ]]; then + brew install ffmpeg + +elif [[ ${DEPENDENCY_MODE} == "libav" ]]; then + brew install libav From bede28c593a77b4177f03c9cafadf91cc10842eb Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Tue, 7 Apr 2015 11:27:03 +0200 Subject: [PATCH 2/4] VideoProperties: get size from AVPacket if not available in AVFrame --- src/AvTranscoder/mediaProperty/VideoProperties.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/AvTranscoder/mediaProperty/VideoProperties.cpp b/src/AvTranscoder/mediaProperty/VideoProperties.cpp index 7e522ce4..0e3a4ec7 100644 --- a/src/AvTranscoder/mediaProperty/VideoProperties.cpp +++ b/src/AvTranscoder/mediaProperty/VideoProperties.cpp @@ -405,7 +405,7 @@ size_t VideoProperties::getBitRate() const if( ! _codecContext->width || ! _codecContext->height ) throw std::runtime_error( "cannot compute bit rate: invalid frame size" ); - + // discard no frame type when decode _codecContext->skip_frame = AVDISCARD_NONE; @@ -429,7 +429,11 @@ size_t VideoProperties::getBitRate() const avcodec_decode_video2( _codecContext, frame, &gotFrame, &pkt ); if( gotFrame ) { +#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT( 54, 7, 100 ) gopFramesSize += frame->pkt_size; +#else + gopFramesSize += pkt.size; +#endif ++count; } } From 606e04387390831948054bff6b68aabd164a84be Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Tue, 7 Apr 2015 11:28:45 +0200 Subject: [PATCH 3/4] VideoProperties: get pkt_size with function when getBitRate According to the documentation, "It [AVFrame::pkt_size] must be accessed using av_frame_get_pkt_size() and av_frame_set_pkt_size()" --- src/AvTranscoder/mediaProperty/VideoProperties.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/AvTranscoder/mediaProperty/VideoProperties.cpp b/src/AvTranscoder/mediaProperty/VideoProperties.cpp index 0e3a4ec7..926ab050 100644 --- a/src/AvTranscoder/mediaProperty/VideoProperties.cpp +++ b/src/AvTranscoder/mediaProperty/VideoProperties.cpp @@ -430,7 +430,7 @@ size_t VideoProperties::getBitRate() const if( gotFrame ) { #if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT( 54, 7, 100 ) - gopFramesSize += frame->pkt_size; + gopFramesSize += av_frame_get_pkt_size( frame ); #else gopFramesSize += pkt.size; #endif From a262d51925cca880f9b7b0b99a73e1f65489a089 Mon Sep 17 00:00:00 2001 From: Clement Champetier Date: Thu, 9 Apr 2015 11:33:18 +0200 Subject: [PATCH 4/4] Travis: launch tests only when build with ffmpeg AvTranscoder with libav works on opensuse 12.1. Need to test on ubuntu (Travis distrib) to understand why pyTests crash. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index f1dab5cb..08f7ca96 100644 --- a/.travis.yml +++ b/.travis.yml @@ -33,4 +33,4 @@ script: # Launch tests - cd .. - chmod +x tools/travis.python.nosetests.sh - - if [ "${TRAVIS_OS_NAME}" = "linux" ]; then ./tools/travis.python.nosetests.sh; fi + - if [ "${TRAVIS_OS_NAME}" = "linux" && "${DEPENDENCY_MODE}" = "ffmpeg" ]; then ./tools/travis.python.nosetests.sh; fi