From 2c81a1063d956cbe49b3460076b1ce3ef6505518 Mon Sep 17 00:00:00 2001 From: Lars Op den Kamp Date: Sat, 16 Oct 2010 15:07:20 +0200 Subject: merge pvr-testing2 svn rev 32591 into trunk --- addons/library.xbmc.pvr/libXBMC_pvr.h | 165 ++++++++++++++++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 addons/library.xbmc.pvr/libXBMC_pvr.h (limited to 'addons/library.xbmc.pvr') diff --git a/addons/library.xbmc.pvr/libXBMC_pvr.h b/addons/library.xbmc.pvr/libXBMC_pvr.h new file mode 100644 index 0000000000..69c531bf6a --- /dev/null +++ b/addons/library.xbmc.pvr/libXBMC_pvr.h @@ -0,0 +1,165 @@ +#pragma once +/* + * Copyright (C) 2005-2010 Team XBMC + * http://www.xbmc.org + * + * This Program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This Program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XBMC; see the file COPYING. If not, write to + * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + * http://www.gnu.org/copyleft/gpl.html + * + */ + +#include +#include +#include +#include +#include +#include "xbmc_pvr_types.h" + +#ifndef _LINUX +#include "../library.xbmc.addon/dlfcn-win32.h" +#define PVR_HELPER_DLL "\\library.xbmc.pvr\\libXBMC_pvr.dll" +#else +#include +#if defined(__APPLE__) +#if defined(__POWERPC__) +#define PVR_HELPER_DLL "/library.xbmc.pvr/libXBMC_pvr-powerpc-osx.so" +#else +#define PVR_HELPER_DLL "/library.xbmc.pvr/libXBMC_pvr-x86-osx.so" +#endif +#elif defined(__x86_64__) +#define PVR_HELPER_DLL "/library.xbmc.pvr/libXBMC_pvr-x86_64-linux.so" +#elif defined(_POWERPC) +#define PVR_HELPER_DLL "/library.xbmc.pvr/libXBMC_pvr-powerpc-linux.so" +#elif defined(_POWERPC64) +#define PVR_HELPER_DLL "/library.xbmc.pvr/libXBMC_pvr-powerpc64-linux.so" +#else /* !__x86_64__ && !__powerpc__ */ +#define PVR_HELPER_DLL "/library.xbmc.pvr/libXBMC_pvr-i486-linux.so" +#endif /* __x86_64__ */ +#endif /* _LINUX */ + +#define DVD_TIME_BASE 1000000 +#define DVD_NOPTS_VALUE (-1LL<<52) // should be possible to represent in both double and __int64 + +class cHelper_libXBMC_pvr +{ +public: + cHelper_libXBMC_pvr() + { + m_libXBMC_pvr = NULL; + m_Handle = NULL; + } + + ~cHelper_libXBMC_pvr() + { + if (m_libXBMC_pvr) + { + PVR_unregister_me(); + dlclose(m_libXBMC_pvr); + } + } + + bool RegisterMe(void *Handle) + { + m_Handle = Handle; + + std::string libBasePath; + libBasePath = ((cb_array*)m_Handle)->libPath; + libBasePath += PVR_HELPER_DLL; + + m_libXBMC_pvr = dlopen(libBasePath.c_str(), RTLD_LAZY); + if (m_libXBMC_pvr == NULL) + { + fprintf(stderr, "Unable to load %s\n", dlerror()); + return false; + } + + PVR_register_me = (int (*)(void *HANDLE)) + dlsym(m_libXBMC_pvr, "PVR_register_me"); + if (PVR_register_me == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + + PVR_unregister_me = (void (*)()) + dlsym(m_libXBMC_pvr, "PVR_unregister_me"); + if (PVR_unregister_me == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + + TransferEpgEntry = (void (*)(const PVRHANDLE handle, const PVR_PROGINFO *epgentry)) + dlsym(m_libXBMC_pvr, "PVR_transfer_epg_entry"); + if (TransferEpgEntry == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + + TransferChannelEntry = (void (*)(const PVRHANDLE handle, const PVR_CHANNEL *chan)) + dlsym(m_libXBMC_pvr, "PVR_transfer_channel_entry"); + if (TransferChannelEntry == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + + TransferTimerEntry = (void (*)(const PVRHANDLE handle, const PVR_TIMERINFO *timer)) + dlsym(m_libXBMC_pvr, "PVR_transfer_timer_entry"); + if (TransferTimerEntry == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + + TransferRecordingEntry = (void (*)(const PVRHANDLE handle, const PVR_RECORDINGINFO *recording)) + dlsym(m_libXBMC_pvr, "PVR_transfer_recording_entry"); + if (TransferRecordingEntry == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + + AddMenuHook = (void (*)(PVR_MENUHOOK *hook)) + dlsym(m_libXBMC_pvr, "PVR_add_menu_hook"); + if (AddMenuHook == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + + Recording = (void (*)(const char *Name, const char *FileName, bool On)) + dlsym(m_libXBMC_pvr, "PVR_recording"); + if (Recording == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + + TriggerTimerUpdate = (void (*)()) + dlsym(m_libXBMC_pvr, "PVR_trigger_timer_update"); + if (TriggerTimerUpdate == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + + TriggerRecordingUpdate = (void (*)()) + dlsym(m_libXBMC_pvr, "PVR_trigger_recording_update"); + if (TriggerRecordingUpdate == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + +#ifdef USE_DEMUX + FreeDemuxPacket = (void (*)(DemuxPacket* pPacket)) + dlsym(m_libXBMC_pvr, "PVR_free_demux_packet"); + if (FreeDemuxPacket == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } + + AllocateDemuxPacket = (DemuxPacket* (*)(int iDataSize)) + dlsym(m_libXBMC_pvr, "PVR_allocate_demux_packet"); + if (AllocateDemuxPacket == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } +#endif + + return PVR_register_me(m_Handle) > 0; + } + + void (*TransferEpgEntry)(const PVRHANDLE handle, const PVR_PROGINFO *epgentry); + void (*TransferChannelEntry)(const PVRHANDLE handle, const PVR_CHANNEL *chan); + void (*TransferTimerEntry)(const PVRHANDLE handle, const PVR_TIMERINFO *timer); + void (*TransferRecordingEntry)(const PVRHANDLE handle, const PVR_RECORDINGINFO *recording); + void (*AddMenuHook)(PVR_MENUHOOK *hook); + void (*Recording)(const char *Name, const char *FileName, bool On); + void (*TriggerTimerUpdate)(); + void (*TriggerRecordingUpdate)(); +#ifdef USE_DEMUX + void (*FreeDemuxPacket)(DemuxPacket* pPacket); + DemuxPacket* (*AllocateDemuxPacket)(int iDataSize); +#endif + +protected: + int (*PVR_register_me)(void *HANDLE); + void (*PVR_unregister_me)(); + +private: + void *m_libXBMC_pvr; + void *m_Handle; + struct cb_array + { + const char* libPath; + }; +}; -- cgit v1.2.3