mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-24 11:16:51 +00:00
Merge branch 'master' of github.com:OpenELEC/OpenELEC.tv
This commit is contained in:
commit
7cd870af35
110
packages/linux/patches/3.9.6/linux-701-fix-r8169.patch
vendored
Normal file
110
packages/linux/patches/3.9.6/linux-701-fix-r8169.patch
vendored
Normal file
@ -0,0 +1,110 @@
|
||||
From b423e9ae49d78ea3f53b131c8d5a6087aed16fd6 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?fran=C3=A7ois=20romieu?= <romieu@fr.zoreil.com>
|
||||
Date: Sat, 18 May 2013 01:24:46 +0000
|
||||
Subject: [PATCH] r8169: fix offloaded tx checksum for small packets.
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
8168evl offloaded checksums are wrong since commit
|
||||
e5195c1f31f399289347e043d6abf3ffa80f0005 ("r8169: fix 8168evl frame padding.")
|
||||
pads small packets to 60 bytes (without ethernet checksum). Typical symptoms
|
||||
appear as UDP checksums which are wrong by the count of added bytes.
|
||||
|
||||
It isn't worth compensating. Let the driver checksum.
|
||||
|
||||
Due to the skb length changes, TSO code is moved before the Tx descriptor gets
|
||||
written.
|
||||
|
||||
Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
|
||||
Tested-by: Holger Hoffstätte <holger.hoffstaette@googlemail.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
drivers/net/ethernet/realtek/r8169.c | 41 ++++++++++++++++++++++++------------
|
||||
1 file changed, 27 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
|
||||
index 79c520b..393f961 100644
|
||||
--- a/drivers/net/ethernet/realtek/r8169.c
|
||||
+++ b/drivers/net/ethernet/realtek/r8169.c
|
||||
@@ -5856,7 +5856,20 @@ static int rtl8169_xmit_frags(struct rtl8169_private *tp, struct sk_buff *skb,
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
-static inline void rtl8169_tso_csum(struct rtl8169_private *tp,
|
||||
+static bool rtl_skb_pad(struct sk_buff *skb)
|
||||
+{
|
||||
+ if (skb_padto(skb, ETH_ZLEN))
|
||||
+ return false;
|
||||
+ skb_put(skb, ETH_ZLEN - skb->len);
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+static bool rtl_test_hw_pad_bug(struct rtl8169_private *tp, struct sk_buff *skb)
|
||||
+{
|
||||
+ return skb->len < ETH_ZLEN && tp->mac_version == RTL_GIGA_MAC_VER_34;
|
||||
+}
|
||||
+
|
||||
+static inline bool rtl8169_tso_csum(struct rtl8169_private *tp,
|
||||
struct sk_buff *skb, u32 *opts)
|
||||
{
|
||||
const struct rtl_tx_desc_info *info = tx_desc_info + tp->txd_version;
|
||||
@@ -5869,13 +5882,20 @@ static inline void rtl8169_tso_csum(struct rtl8169_private *tp,
|
||||
} else if (skb->ip_summed == CHECKSUM_PARTIAL) {
|
||||
const struct iphdr *ip = ip_hdr(skb);
|
||||
|
||||
+ if (unlikely(rtl_test_hw_pad_bug(tp, skb)))
|
||||
+ return skb_checksum_help(skb) == 0 && rtl_skb_pad(skb);
|
||||
+
|
||||
if (ip->protocol == IPPROTO_TCP)
|
||||
opts[offset] |= info->checksum.tcp;
|
||||
else if (ip->protocol == IPPROTO_UDP)
|
||||
opts[offset] |= info->checksum.udp;
|
||||
else
|
||||
WARN_ON_ONCE(1);
|
||||
+ } else {
|
||||
+ if (unlikely(rtl_test_hw_pad_bug(tp, skb)))
|
||||
+ return rtl_skb_pad(skb);
|
||||
}
|
||||
+ return true;
|
||||
}
|
||||
|
||||
static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
|
||||
@@ -5896,17 +5916,15 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
|
||||
goto err_stop_0;
|
||||
}
|
||||
|
||||
- /* 8168evl does not automatically pad to minimum length. */
|
||||
- if (unlikely(tp->mac_version == RTL_GIGA_MAC_VER_34 &&
|
||||
- skb->len < ETH_ZLEN)) {
|
||||
- if (skb_padto(skb, ETH_ZLEN))
|
||||
- goto err_update_stats;
|
||||
- skb_put(skb, ETH_ZLEN - skb->len);
|
||||
- }
|
||||
-
|
||||
if (unlikely(le32_to_cpu(txd->opts1) & DescOwn))
|
||||
goto err_stop_0;
|
||||
|
||||
+ opts[1] = cpu_to_le32(rtl8169_tx_vlan_tag(skb));
|
||||
+ opts[0] = DescOwn;
|
||||
+
|
||||
+ if (!rtl8169_tso_csum(tp, skb, opts))
|
||||
+ goto err_update_stats;
|
||||
+
|
||||
len = skb_headlen(skb);
|
||||
mapping = dma_map_single(d, skb->data, len, DMA_TO_DEVICE);
|
||||
if (unlikely(dma_mapping_error(d, mapping))) {
|
||||
@@ -5918,11 +5936,6 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
|
||||
tp->tx_skb[entry].len = len;
|
||||
txd->addr = cpu_to_le64(mapping);
|
||||
|
||||
- opts[1] = cpu_to_le32(rtl8169_tx_vlan_tag(skb));
|
||||
- opts[0] = DescOwn;
|
||||
-
|
||||
- rtl8169_tso_csum(tp, skb, opts);
|
||||
-
|
||||
frags = rtl8169_xmit_frags(tp, skb, opts);
|
||||
if (frags < 0)
|
||||
goto err_dma_1;
|
||||
--
|
||||
1.8.1.6
|
@ -19,7 +19,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="service.openelec.settings"
|
||||
PKG_VERSION="0.1.21"
|
||||
PKG_VERSION="0.1.22"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="prop."
|
||||
|
@ -0,0 +1,159 @@
|
||||
From b0dd079bee34969dade531ec33bc933cf5565964 Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Meyerholt <dxm523@gmail.com>
|
||||
Date: Wed, 19 Jun 2013 18:55:54 +0200
|
||||
Subject: [PATCH] Update xbmc addon headers
|
||||
|
||||
---
|
||||
src/xvdr/XBMCAddon.cpp | 2 +-
|
||||
src/xvdr/include/DVDDemuxPacket.h | 2 +-
|
||||
src/xvdr/include/xbmc_addon_dll.h | 2 +-
|
||||
src/xvdr/include/xbmc_epg_types.h | 2 +-
|
||||
src/xvdr/include/xbmc_pvr_dll.h | 3 ++-
|
||||
src/xvdr/include/xbmc_pvr_types.h | 25 ++++++++++++++++++++-----
|
||||
6 files changed, 26 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/src/xvdr/XBMCAddon.cpp b/src/xvdr/XBMCAddon.cpp
|
||||
index 60bfbe8..23c89a0 100644
|
||||
--- a/src/xvdr/XBMCAddon.cpp
|
||||
+++ b/src/xvdr/XBMCAddon.cpp
|
||||
@@ -828,7 +828,7 @@ int GetRecordingLastPlayedPosition(const PVR_RECORDING &recording)
|
||||
return mClient->GetRecordingLastPosition(recording.strRecordingId);
|
||||
}
|
||||
|
||||
-PVR_ERROR CallMenuHook(const PVR_MENUHOOK &menuhook) {
|
||||
+PVR_ERROR CallMenuHook(const PVR_MENUHOOK &menuhook, const PVR_MENUHOOK_DATA &item) {
|
||||
switch(menuhook.iHookId) {
|
||||
case XVDR_HOOK_SETTINGS_CHANNELSCAN:
|
||||
DialogChannelScan();
|
||||
diff --git a/src/xvdr/include/DVDDemuxPacket.h b/src/xvdr/include/DVDDemuxPacket.h
|
||||
index 7d9967e..cf3c1e0 100644
|
||||
--- a/src/xvdr/include/DVDDemuxPacket.h
|
||||
+++ b/src/xvdr/include/DVDDemuxPacket.h
|
||||
@@ -1,7 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
/*
|
||||
- * Copyright (C) 2012 Team XBMC
|
||||
+ * Copyright (C) 2012-2013 Team XBMC
|
||||
* http://www.xbmc.org
|
||||
*
|
||||
* This Program is free software; you can redistribute it and/or modify
|
||||
diff --git a/src/xvdr/include/xbmc_addon_dll.h b/src/xvdr/include/xbmc_addon_dll.h
|
||||
index 9402623..12d3d91 100644
|
||||
--- a/src/xvdr/include/xbmc_addon_dll.h
|
||||
+++ b/src/xvdr/include/xbmc_addon_dll.h
|
||||
@@ -21,7 +21,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
-#ifdef _WIN32
|
||||
+#ifdef TARGET_WINDOWS
|
||||
#include <windows.h>
|
||||
#else
|
||||
#ifndef __cdecl
|
||||
diff --git a/src/xvdr/include/xbmc_epg_types.h b/src/xvdr/include/xbmc_epg_types.h
|
||||
index 2284dda..c486be4 100644
|
||||
--- a/src/xvdr/include/xbmc_epg_types.h
|
||||
+++ b/src/xvdr/include/xbmc_epg_types.h
|
||||
@@ -26,7 +26,7 @@
|
||||
#undef PRAGMA_PACK_BEGIN
|
||||
#undef PRAGMA_PACK_END
|
||||
|
||||
-#if defined(__GNUC__) && !defined(__MINGW32__)
|
||||
+#if defined(__GNUC__)
|
||||
#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
|
||||
#define ATTRIBUTE_PACKED __attribute__ ((packed))
|
||||
#define PRAGMA_PACK 0
|
||||
diff --git a/src/xvdr/include/xbmc_pvr_dll.h b/src/xvdr/include/xbmc_pvr_dll.h
|
||||
index a40022b..5ef7b95 100644
|
||||
--- a/src/xvdr/include/xbmc_pvr_dll.h
|
||||
+++ b/src/xvdr/include/xbmc_pvr_dll.h
|
||||
@@ -108,10 +108,11 @@
|
||||
* Call one of the menu hooks (if supported).
|
||||
* Supported PVR_MENUHOOK instances have to be added in ADDON_Create(), by calling AddMenuHook() on the callback.
|
||||
* @param menuhook The hook to call.
|
||||
+ * @param item The selected item for which the hook was called.
|
||||
* @return PVR_ERROR_NO_ERROR if the hook was called successfully.
|
||||
* @remarks Optional. Return PVR_ERROR_NOT_IMPLEMENTED if this add-on won't provide this function.
|
||||
*/
|
||||
- PVR_ERROR CallMenuHook(const PVR_MENUHOOK& menuhook);
|
||||
+ PVR_ERROR CallMenuHook(const PVR_MENUHOOK& menuhook, const PVR_MENUHOOK_DATA &item);
|
||||
//@}
|
||||
|
||||
/*! @name PVR EPG methods
|
||||
diff --git a/src/xvdr/include/xbmc_pvr_types.h b/src/xvdr/include/xbmc_pvr_types.h
|
||||
index a8193ed..1fb0c6c 100644
|
||||
--- a/src/xvdr/include/xbmc_pvr_types.h
|
||||
+++ b/src/xvdr/include/xbmc_pvr_types.h
|
||||
@@ -22,7 +22,7 @@
|
||||
#ifndef __PVRCLIENT_TYPES_H__
|
||||
#define __PVRCLIENT_TYPES_H__
|
||||
|
||||
-#ifdef _WIN32
|
||||
+#ifdef TARGET_WINDOWS
|
||||
#include <windows.h>
|
||||
#else
|
||||
#ifndef __cdecl
|
||||
@@ -52,7 +52,7 @@
|
||||
#undef PRAGMA_PACK_BEGIN
|
||||
#undef PRAGMA_PACK_END
|
||||
|
||||
-#if defined(__GNUC__) && !defined(__MINGW32__)
|
||||
+#if defined(__GNUC__)
|
||||
#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
|
||||
#define ATTRIBUTE_PACKED __attribute__ ((packed))
|
||||
#define PRAGMA_PACK 0
|
||||
@@ -74,10 +74,10 @@
|
||||
#define PVR_STREAM_MAX_STREAMS 20
|
||||
|
||||
/* current PVR API version */
|
||||
-#define XBMC_PVR_API_VERSION "1.7.0"
|
||||
+#define XBMC_PVR_API_VERSION "1.8.0"
|
||||
|
||||
/* min. PVR API version */
|
||||
-#define XBMC_PVR_MIN_API_VERSION "1.7.0"
|
||||
+#define XBMC_PVR_MIN_API_VERSION "1.8.0"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -121,6 +121,7 @@
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
+ PVR_MENUHOOK_UNKNOWN =-1, /*!< @brief unknown menu hook */
|
||||
PVR_MENUHOOK_ALL = 0, /*!< @brief all categories */
|
||||
PVR_MENUHOOK_CHANNEL = 1, /*!< @brief for channels */
|
||||
PVR_MENUHOOK_TIMER = 2, /*!< @brief for timers */
|
||||
@@ -310,6 +311,20 @@
|
||||
} ATTRIBUTE_PACKED PVR_EDL_ENTRY;
|
||||
|
||||
/*!
|
||||
+ * @brief PVR menu hook data
|
||||
+ */
|
||||
+ typedef struct PVR_MENUHOOK_DATA
|
||||
+ {
|
||||
+ PVR_MENUHOOK_CAT cat;
|
||||
+ union data {
|
||||
+ int iEpgUid;
|
||||
+ PVR_CHANNEL channel;
|
||||
+ PVR_TIMER timer;
|
||||
+ PVR_RECORDING recording;
|
||||
+ } data;
|
||||
+ } ATTRIBUTE_PACKED PVR_MENUHOOK_DATA;
|
||||
+
|
||||
+ /*!
|
||||
* @brief Structure to transfer the methods from xbmc_pvr_dll.h to XBMC
|
||||
*/
|
||||
typedef struct PVRClient
|
||||
@@ -324,7 +339,7 @@
|
||||
const char* (__cdecl* GetBackendVersion)(void);
|
||||
const char* (__cdecl* GetConnectionString)(void);
|
||||
PVR_ERROR (__cdecl* GetDriveSpace)(long long*, long long*);
|
||||
- PVR_ERROR (__cdecl* MenuHook)(const PVR_MENUHOOK&);
|
||||
+ PVR_ERROR (__cdecl* MenuHook)(const PVR_MENUHOOK&, const PVR_MENUHOOK_DATA&);
|
||||
PVR_ERROR (__cdecl* GetEpg)(ADDON_HANDLE, const PVR_CHANNEL&, time_t, time_t);
|
||||
int (__cdecl* GetChannelGroupsAmount)(void);
|
||||
PVR_ERROR (__cdecl* GetChannelGroups)(ADDON_HANDLE, bool);
|
||||
--
|
||||
1.8.1.6
|
||||
|
@ -19,9 +19,9 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="xbmc-pvr-addons"
|
||||
PKG_VERSION="frodo-d37ec1d"
|
||||
PKG_VERSION="frodo-78b0aae"
|
||||
if [ "$XBMC" = "master" ]; then
|
||||
PKG_VERSION="fb8d0d9"
|
||||
PKG_VERSION="b84a88f"
|
||||
fi
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@ -21,7 +21,7 @@
|
||||
PKG_NAME="xbmc-theme-Confluence"
|
||||
PKG_VERSION="12.2.0"
|
||||
if [ "$XBMC" = "master" ]; then
|
||||
PKG_VERSION="57f529b"
|
||||
PKG_VERSION="6aa6247"
|
||||
elif [ "$XBMC" = "xbmc-aml" ]; then
|
||||
PKG_VERSION="aml-frodo-d9119f2"
|
||||
fi
|
||||
|
@ -21,7 +21,7 @@
|
||||
PKG_NAME="xbmc"
|
||||
PKG_VERSION="12.2.0"
|
||||
if [ "$XBMC" = "master" ]; then
|
||||
PKG_VERSION="57f529b"
|
||||
PKG_VERSION="6aa6247"
|
||||
elif [ "$XBMC" = "xbmc-aml" ]; then
|
||||
PKG_VERSION="aml-frodo-d9119f2"
|
||||
fi
|
||||
|
190
packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.24-smbdeinit-and-wait-for-nic-on-wakeup.patch
vendored
Normal file
190
packages/mediacenter/xbmc/patches/12.2.0/xbmc-990.24-smbdeinit-and-wait-for-nic-on-wakeup.patch
vendored
Normal file
@ -0,0 +1,190 @@
|
||||
diff -rupN xbmc-upstream/xbmc/Application.cpp xbmc-vbs/xbmc/Application.cpp
|
||||
--- xbmc-upstream/xbmc/Application.cpp 2013-06-12 00:24:40.486262597 +0200
|
||||
+++ xbmc-vbs/xbmc/Application.cpp 2013-06-12 01:23:11.948400122 +0200
|
||||
@@ -5907,3 +5907,33 @@ CPerformanceStats &CApplication::GetPerf
|
||||
}
|
||||
#endif
|
||||
|
||||
+void CApplication::CloseNetworkShares()
|
||||
+{
|
||||
+ CLog::Log(LOGDEBUG,"CApplication::CloseNetworkShares: Closing all network shares");
|
||||
+
|
||||
+#if defined(HAS_FILESYSTEM_SMB) && !defined(_WIN32)
|
||||
+ smb.Deinit();
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
+void CApplication::StopAddonServices()
|
||||
+{
|
||||
+ CLog::Log(LOGDEBUG,"CApplication::StopAddonServices");
|
||||
+ CAddonMgr::Get().StopServices(false);
|
||||
+}
|
||||
+
|
||||
+void CApplication::StartAddonServices()
|
||||
+{
|
||||
+ CLog::Log(LOGDEBUG,"CApplication::StartAddonServices - before login services");
|
||||
+
|
||||
+ //we start all services that run before login
|
||||
+ CAddonMgr::Get().StartServices(true);
|
||||
+
|
||||
+ //this is meant to find out if we are logged in already
|
||||
+ //so only start after-login services if we are not seeing the login screen
|
||||
+ if (g_windowManager.GetActiveWindow() != WINDOW_LOGIN_SCREEN)
|
||||
+ {
|
||||
+ CLog::Log(LOGDEBUG,"CApplication::StartAddonServices - No login screen? So starting after-login-services also");
|
||||
+ CAddonMgr::Get().StartServices(false);
|
||||
+ }
|
||||
+}
|
||||
diff -rupN xbmc-upstream/xbmc/Application.h xbmc-vbs/xbmc/Application.h
|
||||
--- xbmc-upstream/xbmc/Application.h 2013-06-12 00:24:40.494262695 +0200
|
||||
+++ xbmc-vbs/xbmc/Application.h 2013-06-12 01:15:31.530852337 +0200
|
||||
@@ -204,6 +204,9 @@ public:
|
||||
void CheckPlayingProgress();
|
||||
void CheckAudioScrobblerStatus();
|
||||
void ActivateScreenSaver(bool forceType = false);
|
||||
+ void CloseNetworkShares();
|
||||
+ void StartAddonServices();
|
||||
+ void StopAddonServices();
|
||||
|
||||
virtual void Process();
|
||||
void ProcessSlow();
|
||||
diff -rupN xbmc-upstream/xbmc/filesystem/SmbFile.cpp xbmc-vbs/xbmc/filesystem/SmbFile.cpp
|
||||
--- xbmc-upstream/xbmc/filesystem/SmbFile.cpp 2013-06-12 00:24:40.962268274 +0200
|
||||
+++ xbmc-vbs/xbmc/filesystem/SmbFile.cpp 2013-06-12 01:23:11.948400122 +0200
|
||||
@@ -92,6 +92,7 @@ void CSMB::Deinit()
|
||||
void CSMB::Init()
|
||||
{
|
||||
CSingleLock lock(*this);
|
||||
+
|
||||
if (!m_context)
|
||||
{
|
||||
#ifdef TARGET_POSIX
|
||||
diff -rupN xbmc-upstream/xbmc/powermanagement/PowerManager.cpp xbmc-vbs/xbmc/powermanagement/PowerManager.cpp
|
||||
--- xbmc-upstream/xbmc/powermanagement/PowerManager.cpp 2013-06-12 00:24:41.634276292 +0200
|
||||
+++ xbmc-vbs/xbmc/powermanagement/PowerManager.cpp 2013-06-12 01:15:32.166859998 +0200
|
||||
@@ -23,6 +23,7 @@
|
||||
#include "Application.h"
|
||||
#include "cores/AudioEngine/AEFactory.h"
|
||||
#include "input/KeyboardStat.h"
|
||||
+#include "network/Network.h"
|
||||
#include "settings/GUISettings.h"
|
||||
#include "windowing/WindowingFactory.h"
|
||||
#include "utils/log.h"
|
||||
@@ -32,6 +33,7 @@
|
||||
#include "guilib/LocalizeStrings.h"
|
||||
#include "guilib/GraphicContext.h"
|
||||
#include "dialogs/GUIDialogKaiToast.h"
|
||||
+#include "settings/AdvancedSettings.h"
|
||||
|
||||
#ifdef HAS_LCD
|
||||
#include "utils/LCDFactory.h"
|
||||
@@ -146,12 +148,22 @@ bool CPowerManager::Powerdown()
|
||||
|
||||
bool CPowerManager::Suspend()
|
||||
{
|
||||
- return CanSuspend() ? m_instance->Suspend() : false;
|
||||
+ if (!CanSuspend())
|
||||
+ return false;
|
||||
+
|
||||
+ OnPrepareSleep();
|
||||
+
|
||||
+ return m_instance->Suspend();
|
||||
}
|
||||
|
||||
bool CPowerManager::Hibernate()
|
||||
{
|
||||
- return CanHibernate() ? m_instance->Hibernate() : false;
|
||||
+ if (!CanHibernate())
|
||||
+ return false;
|
||||
+
|
||||
+ OnPrepareSleep();
|
||||
+
|
||||
+ return m_instance->Hibernate();
|
||||
}
|
||||
bool CPowerManager::Reboot()
|
||||
{
|
||||
@@ -188,6 +200,16 @@ void CPowerManager::ProcessEvents()
|
||||
m_instance->PumpPowerEvents(this);
|
||||
}
|
||||
|
||||
+void CPowerManager::OnPrepareSleep()
|
||||
+{
|
||||
+ CLog::Log(LOGNOTICE, "%s: Preparing sleep", __FUNCTION__);
|
||||
+
|
||||
+ //stop all addon services here
|
||||
+ //we do this here instead in OnSleep cause according to DBUS specification we only have 1 second of time in OnSleep
|
||||
+ //so shutdowns that may potentially take longer should be issued in here
|
||||
+ g_application.StopAddonServices();
|
||||
+}
|
||||
+
|
||||
void CPowerManager::OnSleep()
|
||||
{
|
||||
CAnnouncementManager::Announce(System, "xbmc", "OnSleep");
|
||||
@@ -207,13 +229,41 @@ void CPowerManager::OnSleep()
|
||||
g_application.StopPlaying();
|
||||
g_application.StopShutdownTimer();
|
||||
g_application.StopScreenSaverTimer();
|
||||
+ g_application.CloseNetworkShares();
|
||||
CAEFactory::Suspend();
|
||||
}
|
||||
|
||||
+void CPowerManager::WaitForNet()
|
||||
+{
|
||||
+ CLog::Log(LOGDEBUG, "%s: Waithing for first NIC to come up", __FUNCTION__);
|
||||
+
|
||||
+ const unsigned maxLoopCount = 50u;
|
||||
+ const unsigned sleepTimeMs = 200u;
|
||||
+
|
||||
+ for(unsigned i=0; i < 50; ++i)
|
||||
+ {
|
||||
+ CNetworkInterface* pIface = g_application.getNetwork().GetFirstConnectedInterface();
|
||||
+ if (pIface && pIface->IsEnabled() && pIface->IsConnected())
|
||||
+ {
|
||||
+ CLog::Log(LOGDEBUG, "%s: NIC is up after waiting %d ms", __FUNCTION__, i * sleepTimeMs);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ Sleep(sleepTimeMs);
|
||||
+ }
|
||||
+
|
||||
+ CLog::Log(LOGDEBUG, "%s: NIC did not come up within %d ms... Lets give up...", __FUNCTION__, maxLoopCount * sleepTimeMs);
|
||||
+}
|
||||
+
|
||||
void CPowerManager::OnWake()
|
||||
{
|
||||
CLog::Log(LOGNOTICE, "%s: Running resume jobs", __FUNCTION__);
|
||||
|
||||
+ WaitForNet();
|
||||
+
|
||||
+ //re-start addon services
|
||||
+ g_application.StartAddonServices();
|
||||
+
|
||||
// reset out timers
|
||||
g_application.ResetShutdownTimers();
|
||||
|
||||
@@ -248,6 +298,7 @@ void CPowerManager::OnWake()
|
||||
#endif
|
||||
|
||||
CAEFactory::Resume();
|
||||
+
|
||||
g_application.UpdateLibraries();
|
||||
g_weatherManager.Refresh();
|
||||
|
||||
diff -rupN xbmc-upstream/xbmc/powermanagement/PowerManager.h xbmc-vbs/xbmc/powermanagement/PowerManager.h
|
||||
--- xbmc-upstream/xbmc/powermanagement/PowerManager.h 2013-06-12 00:24:41.634276292 +0200
|
||||
+++ xbmc-vbs/xbmc/powermanagement/PowerManager.h 2013-06-12 01:15:32.166859998 +0200
|
||||
@@ -67,11 +67,14 @@ public:
|
||||
|
||||
void ProcessEvents();
|
||||
private:
|
||||
+ void OnPrepareSleep();
|
||||
void OnSleep();
|
||||
void OnWake();
|
||||
|
||||
void OnLowBattery();
|
||||
|
||||
+ void WaitForNet();
|
||||
+
|
||||
IPowerSyscall *m_instance;
|
||||
};
|
||||
|
1405
packages/mediacenter/xbmc/patches/12.2.0/xbmc-995.11-enable-vpp-deinterlacing.patch
vendored
Normal file
1405
packages/mediacenter/xbmc/patches/12.2.0/xbmc-995.11-enable-vpp-deinterlacing.patch
vendored
Normal file
File diff suppressed because it is too large
Load Diff
34
packages/mediacenter/xbmc/patches/12.2.0/xbmc-995.12-enable-vpp-fix-audio-out-of-sync.patch
vendored
Normal file
34
packages/mediacenter/xbmc/patches/12.2.0/xbmc-995.12-enable-vpp-fix-audio-out-of-sync.patch
vendored
Normal file
@ -0,0 +1,34 @@
|
||||
commit 7205cbc5abda0a8571170a132bd30fc54a4aa6b6
|
||||
Author: fritsch <peter.fruehberger@gmail.com>
|
||||
Date: Tue Jun 18 18:59:05 2013 +0200
|
||||
|
||||
VPP: SkipDeint was not only meant for interlaced content (fixes Audio out of sync after pause, ffwd)
|
||||
|
||||
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp
|
||||
index fbe3fd5..0f138aa 100644
|
||||
--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp
|
||||
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp
|
||||
@@ -771,8 +771,8 @@ void CVPPThread::Process()
|
||||
if(currentFrame.valid)
|
||||
{
|
||||
bool isInterlaced = currentFrame.DVDPic.iFlags & DVP_FLAG_INTERLACED;
|
||||
- if(currentFrame.DVDPic.iFlags & DVP_FLAG_DROPDEINT)
|
||||
- isInterlaced = false;
|
||||
+ //if(currentFrame.DVDPic.iFlags & DVP_FLAG_DROPDEINT)
|
||||
+ // isInterlaced = false;
|
||||
|
||||
EDEINTERLACEMODE mode = g_settings.m_currentVideoSettings.m_DeinterlaceMode;
|
||||
EINTERLACEMETHOD method = g_settings.m_currentVideoSettings.m_InterlaceMethod;
|
||||
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.h
|
||||
index 6ccef59..b7b82c9 100644
|
||||
--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.h
|
||||
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.h
|
||||
@@ -181,7 +181,7 @@ public:
|
||||
virtual void Close();
|
||||
virtual const std::string Name() { return "vaapi"; }
|
||||
virtual CCriticalSection* Section() { if(m_display) return m_display.get(); else return NULL; }
|
||||
- virtual bool CanSkipDeint() { return true; }
|
||||
+ virtual bool CanSkipDeint() { return false; }
|
||||
|
||||
int GetBuffer(AVCodecContext *avctx, AVFrame *pic);
|
||||
void RelBuffer(AVCodecContext *avctx, AVFrame *pic);
|
95
packages/mediacenter/xbmc/patches/12.2.0/xbmc-995.13-vpp-fix-skipping.patch
vendored
Normal file
95
packages/mediacenter/xbmc/patches/12.2.0/xbmc-995.13-vpp-fix-skipping.patch
vendored
Normal file
@ -0,0 +1,95 @@
|
||||
commit 6f1d11cf3e44a37b5d90689bda9fc7df11ae8a52
|
||||
Author: fritsch <peter.fruehberger@gmail.com>
|
||||
Date: Wed Jun 19 20:30:44 2013 +0200
|
||||
|
||||
VPP: Implement proper deinterlace skipping
|
||||
|
||||
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp
|
||||
index 0f138aa..fcc9ec9 100644
|
||||
--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp
|
||||
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp
|
||||
@@ -569,10 +569,15 @@ int CDecoder::Check(AVCodecContext* avctx)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+bool CDecoder::CanSkipDeint()
|
||||
+{
|
||||
+ return m_vppth->CanSkipDeint();
|
||||
+}
|
||||
|
||||
CVPPThread::CVPPThread(CDisplayPtr& display, int width, int height)
|
||||
:CThread("VAAPI VPP Thread")
|
||||
,m_stop(false)
|
||||
+ ,m_skipDeinterlace(false)
|
||||
{
|
||||
m_vpp = new CVPP(display, width, height);
|
||||
}
|
||||
@@ -720,6 +725,11 @@ int CVPPThread::GetOutputQueueSize()
|
||||
return m_output_queue.size();
|
||||
}
|
||||
|
||||
+bool CVPPThread::CanSkipDeint()
|
||||
+{
|
||||
+ return m_skipDeinterlace;
|
||||
+}
|
||||
+
|
||||
void CVPPThread::Flush()
|
||||
{
|
||||
CSingleLock lock(m_work_lock);
|
||||
@@ -771,22 +781,22 @@ void CVPPThread::Process()
|
||||
if(currentFrame.valid)
|
||||
{
|
||||
bool isInterlaced = currentFrame.DVDPic.iFlags & DVP_FLAG_INTERLACED;
|
||||
- //if(currentFrame.DVDPic.iFlags & DVP_FLAG_DROPDEINT)
|
||||
- // isInterlaced = false;
|
||||
|
||||
EDEINTERLACEMODE mode = g_settings.m_currentVideoSettings.m_DeinterlaceMode;
|
||||
EINTERLACEMETHOD method = g_settings.m_currentVideoSettings.m_InterlaceMethod;
|
||||
|
||||
- if (m_vpp->DeintBobReady() && (method == VS_INTERLACEMETHOD_VAAPI_AUTO || method == VS_INTERLACEMETHOD_AUTO)
|
||||
- && (mode == VS_DEINTERLACEMODE_FORCE || (mode == VS_DEINTERLACEMODE_AUTO && isInterlaced)))
|
||||
+ if (m_vpp->DeintBobReady() && !(currentFrame.DVDPic.iFlags & DVP_FLAG_DROPDEINT)
|
||||
+ && (method == VS_INTERLACEMETHOD_VAAPI_AUTO || method == VS_INTERLACEMETHOD_AUTO)
|
||||
+ && (mode == VS_DEINTERLACEMODE_FORCE || (mode == VS_DEINTERLACEMODE_AUTO && isInterlaced)))
|
||||
{
|
||||
bool topField = currentFrame.DVDPic.iFlags & DVP_FLAG_TOP_FIELD_FIRST;
|
||||
-
|
||||
+ m_skipDeinterlace = true;
|
||||
DoDeinterlacing(currentFrame, topField);
|
||||
DoDeinterlacing(currentFrame, !topField);
|
||||
}
|
||||
else
|
||||
{
|
||||
+ m_skipDeinterlace = false;
|
||||
CVPPRenderPicture res;
|
||||
res.valid = true;
|
||||
res.DVDPic = currentFrame.DVDPic;
|
||||
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.h
|
||||
index b7b82c9..8361ff0 100644
|
||||
--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.h
|
||||
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.h
|
||||
@@ -134,6 +134,7 @@ public:
|
||||
|
||||
void InsertNewFrame(CVPPDecodedPicture &new_frame);
|
||||
void WaitForOutput(unsigned long msec = 0);
|
||||
+ virtual bool CanSkipDeint();
|
||||
CVPPRenderPicture GetOutputPicture();
|
||||
|
||||
int GetInputQueueSize();
|
||||
@@ -153,6 +154,7 @@ protected:
|
||||
CVPP *m_vpp;
|
||||
|
||||
bool m_stop;
|
||||
+ bool m_skipDeinterlace;
|
||||
|
||||
CCriticalSection m_work_lock;
|
||||
|
||||
@@ -181,7 +183,7 @@ public:
|
||||
virtual void Close();
|
||||
virtual const std::string Name() { return "vaapi"; }
|
||||
virtual CCriticalSection* Section() { if(m_display) return m_display.get(); else return NULL; }
|
||||
- virtual bool CanSkipDeint() { return false; }
|
||||
+ virtual bool CanSkipDeint();
|
||||
|
||||
int GetBuffer(AVCodecContext *avctx, AVFrame *pic);
|
||||
void RelBuffer(AVCodecContext *avctx, AVFrame *pic);
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,22 @@
|
||||
Subject: [libav-devel] [PATCH 1/2] vaapi: return early from ff_vaapi_render_picture() without picture
|
||||
From: Janne Grunau janne-libav at jannau.net
|
||||
|
||||
Fixes an assertion when called on uninitialized frame. Spotted after
|
||||
seeking in vlc. (backported from libav mailing list)
|
||||
|
||||
---
|
||||
|
||||
diff --git a/libavcodec/vaapi.c b/libavcodec/vaapi.c
|
||||
index a220a9d..94959bf 100644
|
||||
--- a/libavcodec/vaapi.c
|
||||
+++ b/libavcodec/vaapi.c
|
||||
@@ -46,6 +46,9 @@ int ff_vaapi_render_picture(struct vaapi_context *vactx, VASurfaceID surface)
|
||||
VABufferID va_buffers[3];
|
||||
unsigned int n_va_buffers = 0;
|
||||
|
||||
+ if (!vactx->pic_param_buf_id)
|
||||
+ return 0;
|
||||
+
|
||||
vaUnmapBuffer(vactx->display, vactx->pic_param_buf_id);
|
||||
va_buffers[n_va_buffers++] = vactx->pic_param_buf_id;
|
||||
|
@ -19,7 +19,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="libva-driver-intel"
|
||||
PKG_VERSION="1.0.20"
|
||||
PKG_VERSION="752da5e"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="i386 x86_64"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -19,7 +19,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="libva"
|
||||
PKG_VERSION="1.1.1"
|
||||
PKG_VERSION="3c15867"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="i386 x86_64"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -1,13 +0,0 @@
|
||||
diff --git a/va/glx/va_glx_impl.c b/va/glx/va_glx_impl.c
|
||||
index 049be09..72ec9a4 100644
|
||||
--- a/va/glx/va_glx_impl.c
|
||||
+++ b/va/glx/va_glx_impl.c
|
||||
@@ -937,6 +937,7 @@ associate_surface(
|
||||
return status;
|
||||
|
||||
x11_trap_errors();
|
||||
+ status = ctx->vtable->vaSyncSurface(ctx, surface);
|
||||
status = ctx->vtable->vaPutSurface(
|
||||
ctx,
|
||||
surface,
|
||||
|
@ -47,6 +47,8 @@ if [ "$RUNLEVEL" = openelec ]; then
|
||||
|
||||
if [ "$DEBUG" = yes ]; then
|
||||
XORG_ARGS="$XORG_ARGS -logverbose 6 -verbose 6"
|
||||
else
|
||||
XORG_ARGS="$XORG_ARGS -logverbose 0 -verbose 0"
|
||||
fi
|
||||
|
||||
# load user defined xorg.conf, if exist
|
||||
|
@ -266,10 +266,12 @@ IMAGE_NAME="$DISTRONAME-$TARGET_VERSION"
|
||||
mkdir -p $TARGET_IMG
|
||||
|
||||
# remove an previous created release tarball
|
||||
rm -rf $TARGET_IMG/$IMAGE_NAME.tar.bz2
|
||||
rm -rf $TARGET_IMG/$IMAGE_NAME.tar
|
||||
rm -rf $TARGET_IMG/$IMAGE_NAME.tar.bz2 # to remove later
|
||||
|
||||
# create release tarball
|
||||
tar cjf $TARGET_IMG/$IMAGE_NAME.tar.bz2 -C target $IMAGE_NAME
|
||||
tar cf $TARGET_IMG/$IMAGE_NAME.tar -C target $IMAGE_NAME
|
||||
tar cjf $TARGET_IMG/$IMAGE_NAME.tar.bz2 -C target $IMAGE_NAME # to remove later
|
||||
|
||||
# cleanup release dir
|
||||
rm -rf $RELEASE_DIR
|
||||
|
Loading…
x
Reference in New Issue
Block a user