-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
added callback methods for binary add-ons to get codec id information…
… from XBMC, so the dep on avcodec.h can be removed. only IDs used by pvr.hts and pvr.vdr.vnsi have been included
- Loading branch information
Showing
25 changed files
with
1,031 additions
and
23 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,124 @@ | ||
#pragma once | ||
/* | ||
* Copyright (C) 2005-2013 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, see | ||
* <http://www.gnu.org/licenses/>. | ||
* | ||
*/ | ||
|
||
#include <string> | ||
#include <vector> | ||
#include <string.h> | ||
#include <stdlib.h> | ||
#include <stdio.h> | ||
#include "xbmc_codec_types.h" | ||
#include "../library.xbmc.addon/libXBMC_addon.h" | ||
|
||
#ifdef _WIN32 | ||
#define CODEC_HELPER_DLL "\\library.xbmc.codec\\libXBMC_codec" ADDON_HELPER_EXT | ||
#else | ||
#define CODEC_HELPER_DLL_NAME "libXBMC_codec-" ADDON_HELPER_ARCH ADDON_HELPER_EXT | ||
#define CODEC_HELPER_DLL "/library.xbmc.codec/" CODEC_HELPER_DLL_NAME | ||
#endif | ||
|
||
class CHelper_libXBMC_codec | ||
{ | ||
public: | ||
CHelper_libXBMC_codec(void) | ||
{ | ||
m_libXBMC_codec = NULL; | ||
m_Handle = NULL; | ||
} | ||
|
||
~CHelper_libXBMC_codec(void) | ||
{ | ||
if (m_libXBMC_codec) | ||
{ | ||
CODEC_unregister_me(m_Handle, m_Callbacks); | ||
dlclose(m_libXBMC_codec); | ||
} | ||
} | ||
|
||
/*! | ||
* @brief Resolve all callback methods | ||
* @param handle Pointer to the add-on | ||
* @return True when all methods were resolved, false otherwise. | ||
*/ | ||
bool RegisterMe(void* handle) | ||
{ | ||
m_Handle = handle; | ||
|
||
std::string libBasePath; | ||
libBasePath = ((cb_array*)m_Handle)->libPath; | ||
libBasePath += CODEC_HELPER_DLL; | ||
|
||
#if defined(ANDROID) | ||
struct stat st; | ||
if(stat(libBasePath.c_str(),&st) != 0) | ||
{ | ||
std::string tempbin = getenv("XBMC_ANDROID_LIBS"); | ||
libBasePath = tempbin + "/" + CODEC_HELPER_DLL_NAME; | ||
} | ||
#endif | ||
|
||
m_libXBMC_codec = dlopen(libBasePath.c_str(), RTLD_LAZY); | ||
if (m_libXBMC_codec == NULL) | ||
{ | ||
fprintf(stderr, "Unable to load %s\n", dlerror()); | ||
return false; | ||
} | ||
|
||
CODEC_register_me = (void* (*)(void *HANDLE)) | ||
dlsym(m_libXBMC_codec, "CODEC_register_me"); | ||
if (CODEC_register_me == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } | ||
|
||
CODEC_unregister_me = (void (*)(void* HANDLE, void* CB)) | ||
dlsym(m_libXBMC_codec, "CODEC_unregister_me"); | ||
if (CODEC_unregister_me == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } | ||
|
||
CODEC_get_codec_by_name = (xbmc_codec_t (*)(void* HANDLE, void* CB, const char* strCodecName)) | ||
dlsym(m_libXBMC_codec, "CODEC_get_codec_by_name"); | ||
if (CODEC_get_codec_by_name == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; } | ||
|
||
m_Callbacks = CODEC_register_me(m_Handle); | ||
return m_Callbacks != NULL; | ||
} | ||
|
||
/*! | ||
* @brief Get the codec id used by XBMC | ||
* @param strCodecName The name of the codec | ||
* @return The codec_id, or a codec_id with 0 values when not supported | ||
*/ | ||
xbmc_codec_t GetCodecByName(const char* strCodecName) | ||
{ | ||
return CODEC_get_codec_by_name(m_Handle, m_Callbacks, strCodecName); | ||
} | ||
|
||
protected: | ||
void* (*CODEC_register_me)(void*); | ||
void (*CODEC_unregister_me)(void*, void*); | ||
xbmc_codec_t (*CODEC_get_codec_by_name)(void *HANDLE, void* CB, const char* strCodecName); | ||
|
||
private: | ||
void* m_libXBMC_codec; | ||
void* m_Handle; | ||
void* m_Callbacks; | ||
struct cb_array | ||
{ | ||
const char* libPath; | ||
}; | ||
}; | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<addon id="xbmc.codec" version="1.0.0" provider-name="Team XBMC"> | ||
<requires> | ||
<import addon="xbmc.core" version="0.1.0"/> | ||
</requires> | ||
</addon> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
ARCH=@ARCH@ | ||
INCLUDES=-I. -I../../../xbmc/addons/include | ||
DEFINES+= | ||
CXXFLAGS=-fPIC | ||
LIBNAME=libXBMC_codec | ||
OBJS=$(LIBNAME).o | ||
|
||
LIB_SHARED=../../../addons/library.xbmc.codec/$(LIBNAME)-$(ARCH).so | ||
|
||
all: $(LIB_SHARED) | ||
|
||
$(LIB_SHARED): $(OBJS) | ||
ifeq ($(findstring osx,$(ARCH)), osx) | ||
$(CXX) $(LDFLAGS) -Wl,-alias_list,@abs_top_srcdir@/xbmc/cores/DllLoader/exports/wrapper_mach_alias \ | ||
-bundle -undefined dynamic_lookup -o $@ \ | ||
@abs_top_srcdir@/xbmc/cores/DllLoader/exports/wrapper.o $(OBJS) | ||
else | ||
$(CXX) $(CFLAGS) $(LDFLAGS) -shared -g -o $(LIB_SHARED) $(OBJS) | ||
endif | ||
|
||
CLEAN_FILES = \ | ||
$(LIB_SHARED) \ | ||
|
||
DISTCLEAN_FILES= \ | ||
Makefile \ | ||
|
||
include ../../../Makefile.include |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
/* | ||
* Copyright (C) 2012-2013 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 <stdio.h> | ||
#include <stdlib.h> | ||
#include <stdarg.h> | ||
#include <string> | ||
#include "../../../addons/library.xbmc.codec/libXBMC_codec.h" | ||
#include "addons/AddonCallbacks.h" | ||
|
||
#ifdef _WIN32 | ||
#include <windows.h> | ||
#define DLLEXPORT __declspec(dllexport) | ||
#else | ||
#define DLLEXPORT | ||
#endif | ||
|
||
using namespace std; | ||
|
||
extern "C" | ||
{ | ||
|
||
DLLEXPORT void* CODEC_register_me(void *hdl) | ||
{ | ||
CB_CODECLib *cb = NULL; | ||
if (!hdl) | ||
fprintf(stderr, "libXBMC_codec-ERROR: %s is called with NULL handle\n", __FUNCTION__); | ||
else | ||
{ | ||
cb = ((AddonCB*)hdl)->CODECLib_RegisterMe(((AddonCB*)hdl)->addonData); | ||
if (!cb) | ||
fprintf(stderr, "libXBMC_codec-ERROR: %s can't get callback table from XBMC\n", __FUNCTION__); | ||
} | ||
return cb; | ||
} | ||
|
||
DLLEXPORT void CODEC_unregister_me(void *hdl, void* cb) | ||
{ | ||
if (hdl && cb) | ||
((AddonCB*)hdl)->CODECLib_UnRegisterMe(((AddonCB*)hdl)->addonData, (CB_CODECLib*)cb); | ||
} | ||
|
||
DLLEXPORT xbmc_codec_t CODEC_get_codec_by_name(void *hdl, void* cb, const char* strCodecName) | ||
{ | ||
xbmc_codec_t retVal; | ||
retVal.codec_id = XBMC_INVALID_CODEC_ID; | ||
retVal.codec_type = XBMC_CODEC_TYPE_UNKNOWN; | ||
|
||
if (cb != NULL) | ||
retVal = ((CB_CODECLib*)cb)->GetCodecByName(((AddonCB*)hdl)->addonData, strCodecName); | ||
|
||
return retVal; | ||
} | ||
|
||
}; |
Oops, something went wrong.