Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 15 Aug 2009 21:26:30 GMT
From:      Alberto Villa <villa.alberto@gmail.com>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   ports/137805: [patch] graphics/opencv - fix build against multimedia/ffmpeg-devel
Message-ID:  <200908152126.n7FLQUDn077316@www.freebsd.org>
Resent-Message-ID: <200908152130.n7FLU7sJ051985@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         137805
>Category:       ports
>Synopsis:       [patch] graphics/opencv - fix build against multimedia/ffmpeg-devel
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          update
>Submitter-Id:   current-users
>Arrival-Date:   Sat Aug 15 21:30:07 UTC 2009
>Closed-Date:
>Last-Modified:
>Originator:     Alberto Villa
>Release:        FreeBSD 8-STABLE
>Organization:
>Environment:
FreeBSD echo.hoth 8.0-BETA2 FreeBSD 8.0-BETA2 #11: Sat Aug 15 17:55:03 CEST 2009     root@echo.hoth:/usr/obj/usr/src/sys/TPR60  i386
>Description:
graphics/opencv fails to build against multimedia/ffmpeg-devel due to API changes
>How-To-Repeat:
- install multimedia/ffmpeg-devel in place of multimedia/ffmpeg
- try to install graphics/opencv
>Fix:
here's the recursive patch (PORTREVISION not bumped as written in the handbook)

deleted files:
- files/patch-otherlibs-highgui.cpp (merged with files/patch-otherlibs-highgui-cvcap_ffmpeg.cpp: they were patching the same file!)

Patch attached with submission follows:

diff -ruN opencv/files/patch-otherlibs-highgui-cvcap_ffmpeg.cpp /usr/ports/graphics/opencv/files/patch-otherlibs-highgui-cvcap_ffmpeg.cpp
--- opencv/files/patch-otherlibs-highgui-cvcap_ffmpeg.cpp	2009-08-15 22:36:37.944465751 +0200
+++ /usr/ports/graphics/opencv/files/patch-otherlibs-highgui-cvcap_ffmpeg.cpp	2009-08-15 23:05:47.824247549 +0200
@@ -1,6 +1,113 @@
---- otherlibs/highgui/cvcap_ffmpeg.cpp.bak	2009-07-25 15:45:10.000000000 +0200
-+++ otherlibs/highgui/cvcap_ffmpeg.cpp	2009-07-25 15:48:41.000000000 +0200
-@@ -801,7 +801,11 @@
+--- otherlibs/highgui/cvcap_ffmpeg.cpp.orig	2006-07-25 00:27:39.000000000 +0200
++++ otherlibs/highgui/cvcap_ffmpeg.cpp	2009-08-15 23:05:18.343750709 +0200
+@@ -41,9 +41,14 @@
+ 
+ #include "_highgui.h"
+ 
++#define __STDC_CONSTANT_MACROS
+ 
+ extern "C" {
+ #include <ffmpeg/avformat.h>
++#include <ffmpeg/avcodec.h>
++#include <ffmpeg/swscale.h>
++#include <sys/types.h> /* size_t */
++#include <sys/errno.h>
+ }
+ 
+ #ifdef NDEBUG
+@@ -52,6 +57,8 @@
+ #define CV_WARN(message) fprintf(stderr, "warning: %s (%s:%d)\n", message, __FILE__, __LINE__)
+ #endif
+ 
++static struct SwsContext *img_convert_ctx;
++
+ typedef struct CvCaptureAVI_FFMPEG
+ {
+     CvCaptureVTable   * vtable;
+@@ -214,19 +221,21 @@
+ {
+     if( !capture || !capture->video_st || !capture->picture->data[0] )
+     return 0;
+-#if LIBAVFORMAT_BUILD > 4628
+-    img_convert( (AVPicture*)&capture->rgb_picture, PIX_FMT_BGR24,
+-                 (AVPicture*)capture->picture,
+-                 capture->video_st->codec->pix_fmt,
+-                 capture->video_st->codec->width,
+-                 capture->video_st->codec->height );
+-#else
+-    img_convert( (AVPicture*)&capture->rgb_picture, PIX_FMT_BGR24,
+-                 (AVPicture*)capture->picture,
+-                 capture->video_st->codec.pix_fmt,
+-                 capture->video_st->codec.width,
+-                 capture->video_st->codec.height );
+-#endif
++
++    img_convert_ctx = sws_getContext(capture->video_st->codec->width,
++				     capture->video_st->codec->height,
++				     capture->video_st->codec->pix_fmt,
++				     capture->video_st->codec->width,
++				     capture->video_st->codec->height,
++				     PIX_FMT_BGR24,
++				     SWS_BICUBIC,
++				     NULL, NULL, NULL);
++    
++    sws_scale(img_convert_ctx, capture->picture->data, 
++	      capture->picture->linesize, 0,
++	      capture->video_st->codec->height, 
++	      capture->rgb_picture.data, capture->rgb_picture.linesize);
++    
+     return &capture->frame;
+ }
+ 
+@@ -389,7 +398,11 @@
+ 	picture = avcodec_alloc_frame();
+ 	if (!picture)
+ 		return NULL;
++#if LIBAVCODEC_BUILD < 3416064
+ 	size = avpicture_get_size(pix_fmt, width, height);
++#else
++	size = avpicture_get_size((PixelFormat)pix_fmt, width, height);
++#endif
+ 	if(alloc){
+ 		picture_buf = (uint8_t *) cvAlloc(size);
+ 		if (!picture_buf) 
+@@ -398,7 +411,11 @@
+ 			return NULL;
+ 		}
+ 		avpicture_fill((AVPicture *)picture, picture_buf, 
++#if LIBAVCODEC_BUILD < 3416064
+ 				pix_fmt, width, height);
++#else
++				(PixelFormat)pix_fmt, width, height);
++#endif
+ 	}
+ 	else {
+ 	}
+@@ -713,9 +730,20 @@
+ 				PIX_FMT_BGR24, image->width, image->height);
+ 
+ 		// convert to the color format needed by the codec
+-		if( img_convert((AVPicture *)mywriter->picture, c->pix_fmt,
+-					(AVPicture *)mywriter->rgb_picture, PIX_FMT_BGR24, 
+-					image->width, image->height) < 0){
++		img_convert_ctx = sws_getContext(image->width,
++						 image->height,
++						 PIX_FMT_BGR24,
++						 c->width,
++						 c->height,
++						 c->pix_fmt,
++						 SWS_BICUBIC,
++						 NULL, NULL, NULL);
++		
++		if ( sws_scale(img_convert_ctx, mywriter->rgb_picture->data, 
++			       mywriter->rgb_picture->linesize, 0,
++			       image->height, 
++			       mywriter->picture->data, mywriter->picture->linesize) < 0 )
++		{
+ 			CV_ERROR(CV_StsUnsupportedFormat, "FFMPEG::img_convert pixel format conversion from BGR24 not handled");
+ 		}
+ 	}
+@@ -781,7 +809,11 @@
  
  	if (!(mywriter->fmt->flags & AVFMT_NOFILE)) {
  		/* close the output file */
diff -ruN opencv/files/patch-otherlibs-highgui.cpp /usr/ports/graphics/opencv/files/patch-otherlibs-highgui.cpp
--- opencv/files/patch-otherlibs-highgui.cpp	2009-08-15 22:36:37.944465751 +0200
+++ /usr/ports/graphics/opencv/files/patch-otherlibs-highgui.cpp	1970-01-01 01:00:00.000000000 +0100
@@ -1,85 +0,0 @@
---- otherlibs/highgui/cvcap_ffmpeg.cpp.orgi	2008-04-28 20:29:51.000000000 +0200
-+++ otherlibs/highgui/cvcap_ffmpeg.cpp	2008-04-28 20:32:58.000000000 +0200
-@@ -41,9 +41,14 @@
- 
- #include "_highgui.h"
- 
-+#define __STDC_CONSTANT_MACROS
- 
- extern "C" {
- #include <ffmpeg/avformat.h>
-+#include <ffmpeg/avcodec.h>
-+#include <ffmpeg/swscale.h>
-+#include <sys/types.h> /* size_t */
-+#include <sys/errno.h>
- }
- 
- #ifdef NDEBUG
-@@ -52,6 +57,8 @@
- #define CV_WARN(message) fprintf(stderr, "warning: %s (%s:%d)\n", message, __FILE__, __LINE__)
- #endif
- 
-+static struct SwsContext *img_convert_ctx;
-+
- typedef struct CvCaptureAVI_FFMPEG
- {
-     CvCaptureVTable   * vtable;
-@@ -214,19 +221,21 @@
- {
-     if( !capture || !capture->video_st || !capture->picture->data[0] )
-     return 0;
--#if LIBAVFORMAT_BUILD > 4628
--    img_convert( (AVPicture*)&capture->rgb_picture, PIX_FMT_BGR24,
--                 (AVPicture*)capture->picture,
--                 capture->video_st->codec->pix_fmt,
--                 capture->video_st->codec->width,
--                 capture->video_st->codec->height );
--#else
--    img_convert( (AVPicture*)&capture->rgb_picture, PIX_FMT_BGR24,
--                 (AVPicture*)capture->picture,
--                 capture->video_st->codec.pix_fmt,
--                 capture->video_st->codec.width,
--                 capture->video_st->codec.height );
--#endif
-+
-+    img_convert_ctx = sws_getContext(capture->video_st->codec->width,
-+				     capture->video_st->codec->height,
-+				     capture->video_st->codec->pix_fmt,
-+				     capture->video_st->codec->width,
-+				     capture->video_st->codec->height,
-+				     PIX_FMT_BGR24,
-+				     SWS_BICUBIC,
-+				     NULL, NULL, NULL);
-+    
-+    sws_scale(img_convert_ctx, capture->picture->data, 
-+	      capture->picture->linesize, 0,
-+	      capture->video_st->codec->height, 
-+	      capture->rgb_picture.data, capture->rgb_picture.linesize);
-+    
-     return &capture->frame;
- }
- 
-@@ -713,9 +722,20 @@
- 				PIX_FMT_BGR24, image->width, image->height);
- 
- 		// convert to the color format needed by the codec
--		if( img_convert((AVPicture *)mywriter->picture, c->pix_fmt,
--					(AVPicture *)mywriter->rgb_picture, PIX_FMT_BGR24, 
--					image->width, image->height) < 0){
-+		img_convert_ctx = sws_getContext(image->width,
-+						 image->height,
-+						 PIX_FMT_BGR24,
-+						 c->width,
-+						 c->height,
-+						 c->pix_fmt,
-+						 SWS_BICUBIC,
-+						 NULL, NULL, NULL);
-+		
-+		if ( sws_scale(img_convert_ctx, mywriter->rgb_picture->data, 
-+			       mywriter->rgb_picture->linesize, 0,
-+			       image->height, 
-+			       mywriter->picture->data, mywriter->picture->linesize) < 0 )
-+		{
- 			CV_ERROR(CV_StsUnsupportedFormat, "FFMPEG::img_convert pixel format conversion from BGR24 not handled");
- 		}
- 	}


>Release-Note:
>Audit-Trail:
>Unformatted:



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