summaryrefslogtreecommitdiff
path: root/liboutput
diff options
context:
space:
mode:
authorAndreas Brachold <vdr07@deltab.de>2007-06-10 19:02:38 +0000
committerAndreas Brachold <vdr07@deltab.de>2007-06-10 19:02:38 +0000
commitb410bee3a45052cdf118a00939fd161279c415a8 (patch)
tree1b04fdc8c8c6048335141fce2cebae5b849ba8d1 /liboutput
parent451d3801964e9ac4a07cbd17ffd9a655fec206aa (diff)
downloadvdr-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/Makefile9
-rw-r--r--liboutput/encode.c36
-rw-r--r--liboutput/encode.h2
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