diff options
| author | Andreas Brachold <vdr07@deltab.de> | 2007-06-10 19:02:38 +0000 |
|---|---|---|
| committer | Andreas Brachold <vdr07@deltab.de> | 2007-06-10 19:02:38 +0000 |
| commit | b410bee3a45052cdf118a00939fd161279c415a8 (patch) | |
| tree | 1b04fdc8c8c6048335141fce2cebae5b849ba8d1 /liboutput | |
| parent | 451d3801964e9ac4a07cbd17ffd9a655fec206aa (diff) | |
| download | vdr-plugin-image-b410bee3a45052cdf118a00939fd161279c415a8.tar.gz vdr-plugin-image-b410bee3a45052cdf118a00939fd161279c415a8.tar.bz2 | |
- for build now 'pkg-config' needed
- Use swscale to converting image
Diffstat (limited to 'liboutput')
| -rw-r--r-- | liboutput/Makefile | 9 | ||||
| -rw-r--r-- | liboutput/encode.c | 36 | ||||
| -rw-r--r-- | liboutput/encode.h | 2 |
3 files changed, 41 insertions, 6 deletions
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 <anbr at users.berlios.de> + * (C) Copyright 2004-2007 Andreas Brachold <anbr at users.berlios.de> * Created: Thu Aug 5 2004 * ****************************************************************************/ @@ -26,6 +26,16 @@ #include <string.h> #include <stdlib.h> +extern "C" { +#ifdef HAVE_SWSCALER +#ifdef FFMDIR +#include <swscale.h> +#else +#include <ffmpeg/swscale.h> +#endif +#endif +} + #include "encode.h" #include <vdr/device.h> #include <vdr/tools.h> @@ -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 <avcodec.h> #else #include <ffmpeg/avcodec.h> #endif +} #include "../setup-image.h" //#define TESTCODE |
