- Fix build with newer ffmpeg

PR:		117173
Submitted by:	soralx@cydem.org
Patched by:	miwi
Tested by:	nox
Reviewed by:	nox
Approved by:	maintainer timeout
This commit is contained in:
Martin Wilke 2008-05-02 11:40:05 +00:00
parent d1096f5f82
commit 6c3173f6e2
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=212475

View file

@ -0,0 +1,85 @@
--- 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");
}
}