Control: tags -1 patch

Hello Colin, Hello Debian vdr team,

please find attached a patch to build the xine plugin with newer
versions of vdr. The patch is based on the git repository. Here is the
head of the changelog:

vdr-plugin-xine (0.9.4-12) UNRELEASED; urgency=low

 * debian/patches/vdr-1.7.33.patch: Use APIVERSUM to determine vdr
   version to fix FTBFS: 'class cPatPmtParser' has no member named 'PmtPid'
   (Closes: #709031) (LP: #1198020)
 * debian/patches/vdr-1.7.40.patch: Apply patch from
   Lucian Muresan lucianm.AT.users.sourceforge.net to build with newer
   vdr versions to fix: error: 'vidWin' was not declared in this scope

-- Andreas Moog <am...@ubuntu.com>  Thu, 28 Nov 2013 23:12:16 +0100

Thanks for considering the patch.

-- 
Andreas Moog, Berliner Str. 29, 36205 Sontra/Germany
Ubuntu Developer
PGP-encrypted mails preferred (Key-ID: 74DE6624)
PGP Fingerprint: 74CD D9FE 5BCB FE0D 13EE 8EEA 61F3 4426 74DE 6624
From ff7538c92e63f44a0c94d45e244f9ef014b0d2f1 Mon Sep 17 00:00:00 2001
From: Andreas Moog <Andreas Moog>
Date: Thu, 28 Nov 2013 23:16:42 +0100
Subject: [PATCH 1/2] debian/patches/vdr-1.7.33.patch: Use APIVERSUM to
 determine vdr version to fix FTBFS: 'class cPatPmtParser' has no member named
 'PmtPid' (Closes: #709031) (LP: #1198020)

* debian/patches/vdr-1.7.33.patch: Use APIVERSUM to determine vdr
  version to fix FTBFS: 'class cPatPmtParser' has no member named 'PmtPid'
  (Closes: #709031) (LP: #1198020)
* debian/patches/vdr-1.7.40.patch: Apply patch from
  Lucian Muresan lucianm.AT.users.sourceforge.net to build with newer
  vdr versions to fix: error: 'vidWin' was not declared in this scope
---
 debian/changelog                |  11 +++
 debian/patches/series           |   1 +
 debian/patches/vdr-1.7.40.patch | 165 ++++++++++++++++++++++++++++++++++++++++
 3 files changed, 177 insertions(+)
 create mode 100644 debian/patches/vdr-1.7.40.patch

diff --git a/debian/changelog b/debian/changelog
index f6f59e3..9c2318d 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,14 @@
+vdr-plugin-xine (0.9.4-12) UNRELEASED; urgency=low
+
+  * debian/patches/vdr-1.7.33.patch: Use APIVERSUM to determine vdr
+    version to fix FTBFS: 'class cPatPmtParser' has no member named 'PmtPid'
+    (Closes: #709031) (LP: #1198020)
+  * debian/patches/vdr-1.7.40.patch: Apply patch from
+    Lucian Muresan lucianm.AT.users.sourceforge.net to build with newer
+    vdr versions to fix: error: 'vidWin' was not declared in this scope
+
+ -- Andreas Moog <am...@ubuntu.com>  Thu, 28 Nov 2013 23:12:16 +0100
+
 vdr-plugin-xine (0.9.4-11) unstable; urgency=low
 
   * Build-depend on vdr-dev (>= 2.0.0)
diff --git a/debian/patches/series b/debian/patches/series
index 98e63ed..306b74e 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -2,3 +2,4 @@ enable-yaepg-support.patch
 format-strings.patch
 vdr-1.7.27.patch
 vdr-1.7.33.patch
+vdr-1.7.40.patch
diff --git a/debian/patches/vdr-1.7.40.patch b/debian/patches/vdr-1.7.40.patch
new file mode 100644
index 0000000..e5d6795
--- /dev/null
+++ b/debian/patches/vdr-1.7.40.patch
@@ -0,0 +1,165 @@
+Author: Lucian Muresan <luci...@users.sourceforge.net>
+Origin: https://patchwork.linuxtv.org/patch/16100/
+
+Index: vdr-plugin-xine-0.9.4/xineDevice.c
+===================================================================
+--- vdr-plugin-xine-0.9.4.orig/xineDevice.c	2013-11-28 23:06:14.746527860 +0100
++++ vdr-plugin-xine-0.9.4/xineDevice.c	2013-11-28 23:06:14.742527860 +0100
+@@ -4409,5 +4409,83 @@
+   {
+     return theXineDevice;
+   }
++#if APIVERSNUM >= 10733
++  ///< Asks the output device whether it can scale the currently shown video in
++  ///< such a way that it fits into the given Rect, while retaining its proper
++  ///< aspect ratio. If the scaled video doesn't exactly fit into Rect, Alignment
++  ///< is used to determine how to align the actual rectangle with the requested
++  ///< one. The actual rectangle can be smaller, larger or the same size as the
++  ///< given Rect, and its location may differ, depending on the capabilities of
++  ///< the output device, which may not be able to display a scaled video at
++  ///< arbitrary sizes and locations. The device shall, however, do its best to
++  ///< match the requested Rect as closely as possible, preferring a size and
++  ///< location that fits completely into the requested Rect if possible.
++  ///< Returns the rectangle that can actually be used when scaling the video.
++  ///< A skin plugin using this function should rearrange its content according
++  ///< to the rectangle returned from calling this function, and should especially
++  ///< be prepared for cases where the returned rectangle is way off the requested
++  ///< Rect, or even Null. In such cases, the skin may want to fall back to
++  ///< working with full screen video.
++  ///< If this device can't scale the video, a Null rectangle is returned (this
++  ///< is also the default implementation).
++  cRect cXineDevice::CanScaleVideo(const cRect &Rect, int Alignment/* = taCenter*/)
++  {
++    // first implementation: we can always scale, we're a soft device ;-), ignore alignment for now
++
++    // we need to store the value for the case we have to call ScaleVideo ourselves in vdr-xine
++    vidWinRect = Rect;
++    return vidWinRect;
++  }
++
++  ///< Scales the currently shown video in such a way that it fits into the given
++  ///< Rect. Rect should be one retrieved through a previous call to
++  ///< CanScaleVideo() (otherwise results may be undefined).
++  ///< Even if video output is scaled, the functions GetVideoSize() and
++  ///< GetOsdSize() must still return the same values as if in full screen mode!
++  ///< If this device can't scale the video, nothing happens.
++  ///< To restore full screen video, call this function with a Null rectangle.
++  void cXineDevice::ScaleVideo(const cRect &Rect/* = cRect::Null*/)
++  {
++    // refresh stored value
++    vidWinRect = Rect;
++    // let our specialized code do the actual resizing / repositioning, get accurate parameters first
++    int videoLeft, videoTop, videoWidth, videoHeight, videoZoomX, videoZoomY, osdWidth, osdHeight;
++    double videoAspect, pixelAspect;
++    m_xineLib.execFuncVideoSize(videoLeft, videoTop, videoWidth, videoHeight, videoZoomX, videoZoomY, &videoAspect);
++    GetOsdSize(osdWidth, osdHeight, pixelAspect);
++    tArea vidWinArea;
++    vidWinArea.x1 = vidWinRect.X();
++    vidWinArea.y1 = vidWinRect.Y();
++    vidWinArea.x2 = vidWinRect.X() + vidWinRect.Width();
++    vidWinArea.y2 = vidWinRect.Y() + vidWinRect.Height();
++    if (vidWinRect == cRect::Null) {
++        // will just resize to full size
++        vidWinArea.bpp = 0;
++    } else {
++        vidWinArea.bpp = 12;
++        // make corrections
++        double aspectFactor = (double(osdWidth) / double(osdHeight)) / videoAspect;
++        int output_width = vidWinRect.Height() * (videoAspect * aspectFactor);
++        int output_height = vidWinRect.Width() / (videoAspect * aspectFactor);
++        if (double(vidWinRect.Width())/double(vidWinRect.Height()) > videoAspect * aspectFactor) {
++            output_height = vidWinRect.Height();
++            vidWinArea.x1 += (vidWinRect.Width() - output_width) / 2;
++        }
++        else if (double(vidWinRect.Width())/double(vidWinRect.Height()) < videoAspect * aspectFactor) {
++            output_width = vidWinRect.Width();
++            vidWinArea.y1 += (vidWinRect.Height() - output_height) / 2;
++        }
++        vidWinArea.x2 = vidWinArea.x1 + output_width;
++        vidWinArea.y2 = vidWinArea.y1 + output_height;
++    }
++    m_xineLib.SetVideoWindow(videoWidth, videoHeight, vidWinArea);
++  }
++
++  const cRect & cXineDevice::GetScaleRect()
++  {
++    // just return the stored value
++    return vidWinRect;
++  }
+ 
++#endif // APIVERSNUM >= 10733
+ };
+Index: vdr-plugin-xine-0.9.4/xineDevice.h
+===================================================================
+--- vdr-plugin-xine-0.9.4.orig/xineDevice.h	2013-11-28 23:06:14.746527860 +0100
++++ vdr-plugin-xine-0.9.4/xineDevice.h	2013-11-28 23:06:14.742527860 +0100
+@@ -162,7 +162,14 @@
+ #else    
+     void OnFreeOsd(cOsd *const osd);
+ #endif
+-
++#if APIVERSNUM >= 10733
++    virtual cRect CanScaleVideo(const cRect &Rect, int Alignment = taCenter);
++    virtual void ScaleVideo(const cRect &Rect = cRect::Null);
++    const cRect & GetScaleRect();
++  private:
++    cRect vidWinRect;
++  public:
++#endif // APIVERSNUM >= 10733
+     cXineLib m_xineLib;
+     cMutex m_osdMutex;
+ 
+Index: vdr-plugin-xine-0.9.4/xineOsd.c
+===================================================================
+--- vdr-plugin-xine-0.9.4.orig/xineOsd.c	2013-11-28 23:06:14.746527860 +0100
++++ vdr-plugin-xine-0.9.4/xineOsd.c	2013-11-28 23:08:24.570528259 +0100
+@@ -105,11 +105,20 @@
+ 
+ #else
+ 
++#if APIVERSNUM >= 10733
++
++    // scale to the size and position stored by the last call to cDevice::CanScaleVideo
++    m_xineDevice.ScaleVideo(m_xineDevice.GetScaleRect());
++
++#else
++
+ #ifdef SET_VIDEO_WINDOW
+     
+     m_xineLib.SetVideoWindow(maxOsdWidth, maxOsdHeight, vidWin, dontOptimize);
+     
+ #endif    
++
++#endif // APIVERSNUM >= 10733
+     
+     int videoLeft   = frameLeft;
+     int videoTop    = frameTop;
+@@ -175,6 +184,7 @@
+ 
+   cXineOsd::~cXineOsd()
+   {
++
+ #if APIVERSNUM < 10509
+     HideOsd();
+ #else
+@@ -410,12 +420,20 @@
+     int maxOsdWidth, maxOsdHeight;
+     GetMaxOsdSize(maxOsdWidth, maxOsdHeight);
+ 
++#if APIVERSNUM >= 10733
++
++    // scale to the size and position stored by the last call to cDevice::CanScaleVideo
++    m_xineDevice.ScaleVideo(m_xineDevice.GetScaleRect());
++
++#else
+ #ifdef SET_VIDEO_WINDOW
+     
+     m_xineLib.SetVideoWindow(maxOsdWidth, maxOsdHeight, vidWin);
+ 
+ #endif    
+     
++#endif // APIVERSUM >= 10733
++
+     int videoLeft   = -1;
+     int videoTop    = -1;
+     int videoWidth  = -1;
-- 
1.8.4.4

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to