Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 4 Nov 2016 10:47:58 +0000 (UTC)
From:      Jan Beich <jbeich@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-branches@freebsd.org
Subject:   svn commit: r425312 - in branches/2016Q4/multimedia/bombono: . files
Message-ID:  <201611041047.uA4AlwvL083246@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jbeich
Date: Fri Nov  4 10:47:58 2016
New Revision: 425312
URL: https://svnweb.freebsd.org/changeset/ports/425312

Log:
  MFH: r425311
  
  multimedia/bombono: unbreak build with ffmpeg 3.x
  
  src/mgui/ffviewer.cpp:642:22: error: 'SWS_CPU_CAPS_MMX' was not declared in this scope
           sws_flags |= SWS_CPU_CAPS_MMX|SWS_CPU_CAPS_MMX2;
                        ^
  src/mgui/ffviewer.cpp:642:39: error: 'SWS_CPU_CAPS_MMX2' was not declared in this scope
           sws_flags |= SWS_CPU_CAPS_MMX|SWS_CPU_CAPS_MMX2;
                                         ^
  src/mgui/ffviewer.cpp:650:9: error: 'PixelFormat' was not declared in this scope
           PixelFormat dst_pf = PIX_FMT_BGR24; // PIX_FMT_RGB24;
           ^
  src/mgui/ffviewer.cpp:650:21: error: expected ';' before 'dst_pf'
           PixelFormat dst_pf = PIX_FMT_BGR24; // PIX_FMT_RGB24;
                       ^
  src/mgui/ffviewer.cpp:652:13: error: 'dst_pf' was not declared in this scope
               dst_pf, sws_flags, 0, 0, 0);
               ^
  src/mgui/ffviewer.cpp:657:45: error: 'avcodec_get_frame_defaults' was not declared in this scope
           avcodec_get_frame_defaults(&rgbFrame); // не помешает
                                               ^
  
  PR:		207547
  Obtained from:	upstream
  Approved by:	ports-secteam blanket

Modified:
  branches/2016Q4/multimedia/bombono/Makefile
  branches/2016Q4/multimedia/bombono/files/patch-src_mgui_ffviewer.cpp
Directory Properties:
  branches/2016Q4/   (props changed)

Modified: branches/2016Q4/multimedia/bombono/Makefile
==============================================================================
--- branches/2016Q4/multimedia/bombono/Makefile	Fri Nov  4 10:45:19 2016	(r425311)
+++ branches/2016Q4/multimedia/bombono/Makefile	Fri Nov  4 10:47:58 2016	(r425312)
@@ -3,7 +3,7 @@
 
 PORTNAME=	bombono
 PORTVERSION=	1.2.2
-PORTREVISION=	7
+PORTREVISION=	8
 CATEGORIES=	multimedia
 MASTER_SITES=	SF/${PORTNAME}/${PORTNAME}-dvd/${PORTVERSION:R}
 DISTNAME=	${PORTNAME}-dvd-${PORTVERSION}

Modified: branches/2016Q4/multimedia/bombono/files/patch-src_mgui_ffviewer.cpp
==============================================================================
--- branches/2016Q4/multimedia/bombono/files/patch-src_mgui_ffviewer.cpp	Fri Nov  4 10:45:19 2016	(r425311)
+++ branches/2016Q4/multimedia/bombono/files/patch-src_mgui_ffviewer.cpp	Fri Nov  4 10:47:58 2016	(r425312)
@@ -1,24 +1,134 @@
+https://github.com/muravjov/bombono-dvd/commit/282273b8a581
+https://github.com/muravjov/bombono-dvd/commit/2d72b907a81a
+https://github.com/muravjov/bombono-dvd/commit/11f8b5a9cb2f
+
 --- src/mgui/ffviewer.cpp.orig	2013-03-07 21:20:45 UTC
 +++ src/mgui/ffviewer.cpp
-@@ -406,7 +406,7 @@ static std::string CodecID2Str(CodecID c
+@@ -48,6 +48,18 @@ C_LINKAGE_BEGIN
+ C_LINKAGE_END
+ #endif
+ 
++#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57,05,00)
++C_LINKAGE_BEGIN
++#include <libavutil/imgutils.h>
++C_LINKAGE_END
++static int bmd_avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height)
++{
++    return av_image_get_buffer_size(pix_fmt, width, height, 1);
++}
++#else
++#define bmd_avpicture_get_size avpicture_get_size
++#endif
++
+ // Прямой доступ к ff_codec_bmp_tags, в частности, закрыл, некий
+ // Anton Khirnov, см. libavformat/libavformat.v (из него генерится скрипт
+ // для опции --version-script=<script_file> линковщика ld)
+@@ -406,7 +418,11 @@ static std::string CodecID2Str(CodecID codec_id)
  
  #else // CALC_FF_TAG
  
 -static std::string CodecID2Str(CodecID codec_id)
++#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,00,00)
++//#define CodecID AVCodecID
++#endif
++
 +static std::string CodecID2Str(AVCodecID codec_id)
  {
      return Int2Str(codec_id);
  }
-@@ -1119,8 +1119,10 @@ static bool SeekSetTime(FFViewer& ffv, d
+@@ -617,6 +633,17 @@ FFInfo::~FFInfo()
+     CloseInfo(*this);
+ }
+ 
++static int bmd_avpicture_fill(AVFrame *picture, const uint8_t *ptr,
++                              AVPixelFormat pix_fmt, int width, int height)
++{
++#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57,5,00)
++    return av_image_fill_arrays(picture->data, picture->linesize,
++                                ptr, pix_fmt, width, height, 1);
++#else
++    return avpicture_fill((AVPicture*)picture, ptr, pix_fmt, width, height);
++#endif
++}
++
+ bool FFViewer::Open(const char* fname, std::string& err_str)
+ {
+     // * закрываем открытое ранее
+@@ -635,11 +662,14 @@ bool FFViewer::Open(const char* fname, std::string& err_str)
+         //     opt_default(); // обновление sws_opts по -sws_flags
+         //     sws_flags = av_get_int(sws_opts, "sws_flags", NULL); // = sws_opts.flags    
+         int sws_flags = SWS_BICUBIC;
++
++#if !(LIBSWSCALE_VERSION_INT >= AV_VERSION_INT(3,0,0))
+         // при сборке с --enable-runtime-cpudetect (появилось после 0.5), который полюбили пакетировщики,
+         // лучшая оптимизация выбирается на этапе выполнения, а не сборке; однако для 0.6 времени
+         // maverick оно еще не доделано, см. http://ffmpeg.arrozcru.org/forum/viewtopic.php?f=1&t=1185
+         // :KLUDGE: потому добавляем явно
+         sws_flags |= SWS_CPU_CAPS_MMX|SWS_CPU_CAPS_MMX2;
++#endif
+ 
+         // :TRICKY: почему-то ffmpeg'у "нравится" BGR24 и не нравиться RGB24 в плане использования
+         // MMX (ускорения); цена по времени неизвестна,- используем только ради того, чтобы не было 
+@@ -647,15 +677,27 @@ bool FFViewer::Open(const char* fname, std::string& err_str)
+         // Другой вариант - PIX_FMT_RGB32, но там зависимый порядок байтов (в GdkPixbuf - нет) и
+         // мы нацелены на RGB24
+         // :TODO: с версии LIBSWSCALE_VERSION_INT >= 0.8.11 появился прямой yuv -> rgb24, поправить
++#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(54,17,00)
++        AVPixelFormat dst_pf = AV_PIX_FMT_BGR24; // AV_PIX_FMT_RGB24;
++#else
+         PixelFormat dst_pf = PIX_FMT_BGR24; // PIX_FMT_RGB24;
++#endif
++
+         rgbCnvCtx = sws_getContext(sz.x, sz.y, GetVideoCtx(*this)->pix_fmt, sz.x, sz.y,
+             dst_pf, sws_flags, 0, 0, 0);
+         ASSERT( rgbCnvCtx );
+     
+         Point dst_sz(sz);
+-        rgbBuf = (uint8_t*)av_malloc(avpicture_get_size(dst_pf, dst_sz.x, dst_sz.y) * sizeof(uint8_t));
+-        avcodec_get_frame_defaults(&rgbFrame); // не помешает
+-        avpicture_fill((AVPicture*)&rgbFrame, rgbBuf, dst_pf, dst_sz.x, dst_sz.y);
++        rgbBuf = (uint8_t*)av_malloc(bmd_avpicture_get_size(dst_pf, dst_sz.x, dst_sz.y) * sizeof(uint8_t));
++
++        // не помешает
++#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(56,35,01)
++        av_frame_unref(&rgbFrame);
++#else
++        avcodec_get_frame_defaults(&rgbFrame);
++#endif
++
++        bmd_avpicture_fill(&rgbFrame, rgbBuf, dst_pf, dst_sz.x, dst_sz.y);
+     }
+     else
+         // защита от неполных открытий
+@@ -841,7 +883,11 @@ static bool DoDecode(FFViewer& ffv)
+             
+             DoVideoDecode(ffv, got_picture, &pkt);
+         }
++#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57,8,00)
++        av_packet_unref(&pkt);
++#else
+         av_free_packet(&pkt);
++#endif
+     }
+     else if( av_res == (int)AVERROR_EOF ) // для mpegts также -EIO приходит
+     {
+@@ -1119,8 +1165,18 @@ static bool SeekSetTime(FFViewer& ffv, double time)
      {
          bool seek_ok = TimeSeek(ffv, start_time, time);
          if( !seek_ok && CanByteSeek(ffv.iCtx) )
--            // тогда переходим в начало файла
++        {
+             // тогда переходим в начало файла
 -            seek_ok = DoSeek(ffv, ffv.iCtx->data_offset, true);
-+            // then seek to the file's start; since data_offset is private
-+            // now, if we seek to 0 and there is a data_offset our seek will
-+            // be rounded to the minimum possible, i.e. data_offset.
-+            seek_ok = DoSeek(ffv, /* ffv.iCtx->data_offset */ 0, true);
++#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(56,11,00)
++            // автор 9deaec782810d098bca11c9332fab2d2f4c5fb78 уверяет, что
++            // сокрытие AVFormatContext.internal в internal.h - это нормально
++            //int64_t data_offset = ffv.iCtx->internal->data_offset;
++            int64_t data_offset = 0;
++#else
++            int64_t data_offset = ffv.iCtx->data_offset;
++#endif
++            seek_ok = DoSeek(ffv, data_offset, true);
++        }
  
          // некоторое видео глючит в начале (Hellboy), из-за чего
          // последовательный доступ выполняется с перескоками -



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201611041047.uA4AlwvL083246>