From b410bee3a45052cdf118a00939fd161279c415a8 Mon Sep 17 00:00:00 2001 From: Andreas Brachold Date: Sun, 10 Jun 2007 19:02:38 +0000 Subject: - for build now 'pkg-config' needed - Use swscale to converting image --- liboutput/Makefile | 9 +++++++-- liboutput/encode.c | 36 ++++++++++++++++++++++++++++++++---- liboutput/encode.h | 2 ++ 3 files changed, 41 insertions(+), 6 deletions(-) (limited to 'liboutput') diff --git a/liboutput/Makefile b/liboutput/Makefile index 126cfc8..7300393 100644 --- a/liboutput/Makefile +++ b/liboutput/Makefile @@ -9,6 +9,7 @@ VDRDIR = ../../../.. CXX ?= g++ CXXFLAGS ?= -O0 -g -Wall -Woverloaded-virtual +PKG-CONFIG ?= pkg-config -include $(VDRDIR)/Make.config @@ -18,12 +19,16 @@ CXXFLAGS ?= -O0 -g -Wall -Woverloaded-virtual INCLUDES += -I$(VDRDIR)/include -I. ifdef FFMDIR INCLUDES += -I$(FFMDIR)/libavcodec -I$(FFMDIR)/libavutil +DEFINES += -DFFMDIR +else + INCLUDES += $(shell $(PKG-CONFIG) --cflags libavcodec) endif DEFINES += -D_GNU_SOURCE -ifdef FFMDIR -DEFINES += -DFFMDIR +ifndef WITHOUT_SWSCALER + DEFINES += -DHAVE_SWSCALER + INCLUDES += $(shell $(PKG-CONFIG) --cflags libswscale) endif ### The object files (add further files here): diff --git a/liboutput/encode.c b/liboutput/encode.c index 67d78f7..ae8bff6 100644 --- a/liboutput/encode.c +++ b/liboutput/encode.c @@ -1,7 +1,7 @@ /*************************************************************************** * encode.c * - * (C) Copyright 2004-2006 Andreas Brachold + * (C) Copyright 2004-2007 Andreas Brachold * Created: Thu Aug 5 2004 * ****************************************************************************/ @@ -26,6 +26,16 @@ #include #include +extern "C" { +#ifdef HAVE_SWSCALER +#ifdef FFMDIR +#include +#else +#include +#endif +#endif +} + #include "encode.h" #include #include @@ -190,11 +200,29 @@ bool cEncode::ConvertImageToFrame(AVFrame *frame) } else { - if(img_convert((AVPicture*)frame->data, PIX_FMT_YUV420P, + int result; +#ifndef HAVE_SWSCALER + result=img_convert((AVPicture*)frame->data, PIX_FMT_YUV420P, (AVPicture*)m_pImageFilled, PIX_FMT_RGB24, - m_nWidth, m_nHeight)) + m_nWidth, m_nHeight); +#else + SwsContext* convert_ctx = sws_getContext(m_nWidth, m_nHeight, + PIX_FMT_RGB24, m_nWidth, m_nHeight, + PIX_FMT_YUV420P, SWS_BICUBIC, NULL, NULL, NULL); + + if(!convert_ctx) { + esyslog("imageplugin: failed to initialize swscaler context"); + return false; + } + + result=sws_scale(convert_ctx, ((AVPicture*)m_pImageFilled)->data, + ((AVPicture*)m_pImageFilled)->linesize, + 0, m_nHeight, frame->data, frame->linesize); + sws_freeContext(convert_ctx); +#endif + if(result < 0) { - esyslog("imageplugin: failed convert RGB to YUV"); + esyslog("imageplugin: failed convert RGB to YUV: %X", result); return false; } } diff --git a/liboutput/encode.h b/liboutput/encode.h index 805e279..77437fe 100644 --- a/liboutput/encode.h +++ b/liboutput/encode.h @@ -25,11 +25,13 @@ #ifndef _ENCODE_H #define _ENCODE_H +extern "C" { #ifdef FFMDIR #include #else #include #endif +} #include "../setup-image.h" //#define TESTCODE -- cgit v1.2.3