From ffca21f2743a7b367fa212799c6e2fea6190dd5d Mon Sep 17 00:00:00 2001 From: manuel Date: Tue, 3 Mar 2015 16:53:59 +0100 Subject: initial commit for kodi master --- xbmc/addons/AddonCallbacksCodec.cpp | 116 ++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 xbmc/addons/AddonCallbacksCodec.cpp (limited to 'xbmc/addons/AddonCallbacksCodec.cpp') diff --git a/xbmc/addons/AddonCallbacksCodec.cpp b/xbmc/addons/AddonCallbacksCodec.cpp new file mode 100644 index 0000000..9c7be30 --- /dev/null +++ b/xbmc/addons/AddonCallbacksCodec.cpp @@ -0,0 +1,116 @@ +/* + * Copyright (C) 2012-2013 Team XBMC + * http://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 + * . + * + */ + +#include "Application.h" +#include "Addon.h" +#include "AddonCallbacksCodec.h" +#include "utils/StringUtils.h" + +extern "C" { +#include "libavcodec/avcodec.h" +#include "libavformat/avformat.h" +} + +namespace ADDON +{ +class CCodecIds +{ +public: + virtual ~CCodecIds(void) {} + + static CCodecIds& Get(void) + { + static CCodecIds _instance; + return _instance; + } + + xbmc_codec_t GetCodecByName(const char* strCodecName) + { + xbmc_codec_t retVal = XBMC_INVALID_CODEC; + if (strlen(strCodecName) == 0) + return retVal; + + std::string strUpperCodecName = strCodecName; + StringUtils::ToUpper(strUpperCodecName); + + std::map::const_iterator it = m_lookup.find(strUpperCodecName); + if (it != m_lookup.end()) + retVal = it->second; + + return retVal; + } + +private: + CCodecIds(void) + { + // get ids and names + AVCodec* codec = NULL; + xbmc_codec_t tmp; + while ((codec = av_codec_next(codec))) + { + if (av_codec_is_decoder(codec)) + { + tmp.codec_type = (xbmc_codec_type_t)codec->type; + tmp.codec_id = codec->id; + + std::string strUpperCodecName = codec->name; + StringUtils::ToUpper(strUpperCodecName); + + m_lookup.insert(std::make_pair(strUpperCodecName, tmp)); + } + } + + // teletext is not returned by av_codec_next. we got our own decoder + tmp.codec_type = XBMC_CODEC_TYPE_SUBTITLE; + tmp.codec_id = AV_CODEC_ID_DVB_TELETEXT; + m_lookup.insert(std::make_pair("TELETEXT", tmp)); + + // rds is not returned by av_codec_next. we got our own decoder + tmp.codec_type = XBMC_CODEC_TYPE_RDS; + tmp.codec_id = AV_CODEC_ID_NONE; + m_lookup.insert(std::make_pair("RDS", tmp)); + } + + std::map m_lookup; +}; + +CAddonCallbacksCodec::CAddonCallbacksCodec(CAddon* addon) +{ + m_addon = addon; + m_callbacks = new CB_CODECLib; + + /* write XBMC addon-on specific add-on function addresses to the callback table */ + m_callbacks->GetCodecByName = GetCodecByName; +} + +CAddonCallbacksCodec::~CAddonCallbacksCodec() +{ + /* delete the callback table */ + delete m_callbacks; +} + +xbmc_codec_t CAddonCallbacksCodec::GetCodecByName(const void* addonData, const char* strCodecName) +{ + (void)addonData; + return CCodecIds::Get().GetCodecByName(strCodecName); +} + +}; /* namespace ADDON */ + -- cgit v1.2.3