aboutsummaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorLars Op den Kamp <lars@opdenkamp.eu>2013-06-21 02:27:10 +0200
committerLars Op den Kamp <lars@opdenkamp.eu>2013-07-09 02:31:19 +0200
commit2e5e448c0c9ad3d01ec72596be79519e01f8456e (patch)
treee1e3b964d36096f69a2f7009632d993858b0601e /addons
parentd8b4503f0be7eae2d8236953aad8e9820a36c86c (diff)
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
Diffstat (limited to 'addons')
-rw-r--r--addons/library.xbmc.codec/libXBMC_codec.h124
-rw-r--r--addons/xbmc.codec/addon.xml6
2 files changed, 130 insertions, 0 deletions
diff --git a/addons/library.xbmc.codec/libXBMC_codec.h b/addons/library.xbmc.codec/libXBMC_codec.h
new file mode 100644
index 0000000000..43159b2769
--- /dev/null
+++ b/addons/library.xbmc.codec/libXBMC_codec.h
@@ -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;
+ };
+};
+
diff --git a/addons/xbmc.codec/addon.xml b/addons/xbmc.codec/addon.xml
new file mode 100644
index 0000000000..28939e914f
--- /dev/null
+++ b/addons/xbmc.codec/addon.xml
@@ -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>