summaryrefslogtreecommitdiffstats
path: root/bindings/_common/ProxyConsumer.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'bindings/_common/ProxyConsumer.cxx')
-rwxr-xr-xbindings/_common/ProxyConsumer.cxx1003
1 files changed, 499 insertions, 504 deletions
diff --git a/bindings/_common/ProxyConsumer.cxx b/bindings/_common/ProxyConsumer.cxx
index 2150654..9aa4b2f 100755
--- a/bindings/_common/ProxyConsumer.cxx
+++ b/bindings/_common/ProxyConsumer.cxx
@@ -2,19 +2,19 @@
* Copyright (C) 2010-2011 Mamadou Diop.
*
* Contact: Mamadou Diop <diopmamadou(at)doubango.org>
-*
+*
* This file is part of Open Source Doubango Framework.
*
* DOUBANGO 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 3 of the License, or
* (at your option) any later version.
-*
+*
* DOUBANGO 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 DOUBANGO.
*
@@ -40,120 +40,119 @@
/* ============ Audio Consumer Interface ================= */
-typedef struct twrap_consumer_proxy_audio_s
-{
- TDAV_DECLARE_CONSUMER_AUDIO;
+typedef struct twrap_consumer_proxy_audio_s {
+ TDAV_DECLARE_CONSUMER_AUDIO;
- uint64_t id;
- tsk_bool_t started;
- const ProxyAudioConsumer* pcConsumer; // thread-safe and will be destroyed at the time as the "struct"
+ uint64_t id;
+ tsk_bool_t started;
+ const ProxyAudioConsumer* pcConsumer; // thread-safe and will be destroyed at the time as the "struct"
}
twrap_consumer_proxy_audio_t;
#define TWRAP_CONSUMER_PROXY_AUDIO(self) ((twrap_consumer_proxy_audio_t*)(self))
int twrap_consumer_proxy_audio_set(tmedia_consumer_t* _self, const tmedia_param_t* param)
{
- twrap_consumer_proxy_audio_t* self = (twrap_consumer_proxy_audio_t*)_self;
- if(param->plugin_type == tmedia_ppt_consumer){
- // specific proxy consumer
- }
- return tdav_consumer_audio_set(TDAV_CONSUMER_AUDIO(self), param);
+ twrap_consumer_proxy_audio_t* self = (twrap_consumer_proxy_audio_t*)_self;
+ if(param->plugin_type == tmedia_ppt_consumer) {
+ // specific proxy consumer
+ }
+ return tdav_consumer_audio_set(TDAV_CONSUMER_AUDIO(self), param);
}
int twrap_consumer_proxy_audio_prepare(tmedia_consumer_t* self, const tmedia_codec_t* codec)
{
- twrap_consumer_proxy_audio_t* audio = TWRAP_CONSUMER_PROXY_AUDIO(self);
- ProxyPluginMgr* manager = NULL;
- int ret = -1;
- if(codec && (manager = ProxyPluginMgr::getInstance())){
- if((audio->pcConsumer = manager->findAudioConsumer(audio->id)) && audio->pcConsumer->getCallback()){
- self->audio.ptime = TMEDIA_CODEC_PTIME_AUDIO_DECODING(codec);
- self->audio.in.channels = TMEDIA_CODEC_CHANNELS_AUDIO_DECODING(codec);
- self->audio.in.rate = TMEDIA_CODEC_RATE_DECODING(codec);
-
- ret = audio->pcConsumer->getCallback()->prepare((int)self->audio.ptime, self->audio.in.rate, self->audio.in.channels);
- if(ret == 0 && !audio->pcConsumer->getCallback()->isPivotSettings()){
- // say consumer can output these params
- // Out "rate" and "channels" must be defined regardless previous values (already the case in other back-ends) to avoid issues on reINVITE with rate change (e.g. Opus -> PCMA).
- /*if(!self->audio.out.rate)*/ self->audio.out.rate = self->audio.in.rate;
- /*if(!self->audio.out.channels)*/ self->audio.out.channels = self->audio.in.channels;
- }
- }
- }
- else {
- TSK_DEBUG_ERROR("Invalid parameter/state: codec=%d, manager=%s", codec, manager ? "no-null" : "null");
- }
-
- return ret;
+ twrap_consumer_proxy_audio_t* audio = TWRAP_CONSUMER_PROXY_AUDIO(self);
+ ProxyPluginMgr* manager = NULL;
+ int ret = -1;
+ if(codec && (manager = ProxyPluginMgr::getInstance())) {
+ if((audio->pcConsumer = manager->findAudioConsumer(audio->id)) && audio->pcConsumer->getCallback()) {
+ self->audio.ptime = TMEDIA_CODEC_PTIME_AUDIO_DECODING(codec);
+ self->audio.in.channels = TMEDIA_CODEC_CHANNELS_AUDIO_DECODING(codec);
+ self->audio.in.rate = TMEDIA_CODEC_RATE_DECODING(codec);
+
+ ret = audio->pcConsumer->getCallback()->prepare((int)self->audio.ptime, self->audio.in.rate, self->audio.in.channels);
+ if(ret == 0 && !audio->pcConsumer->getCallback()->isPivotSettings()) {
+ // say consumer can output these params
+ // Out "rate" and "channels" must be defined regardless previous values (already the case in other back-ends) to avoid issues on reINVITE with rate change (e.g. Opus -> PCMA).
+ /*if(!self->audio.out.rate)*/ self->audio.out.rate = self->audio.in.rate;
+ /*if(!self->audio.out.channels)*/ self->audio.out.channels = self->audio.in.channels;
+ }
+ }
+ }
+ else {
+ TSK_DEBUG_ERROR("Invalid parameter/state: codec=%d, manager=%s", codec, manager ? "no-null" : "null");
+ }
+
+ return ret;
}
int twrap_consumer_proxy_audio_start(tmedia_consumer_t* self)
{
- ProxyPluginMgr* manager;
- int ret = -1;
- if((manager = ProxyPluginMgr::getInstance())){
- const ProxyAudioConsumer* audioConsumer;
- if((audioConsumer = manager->findAudioConsumer(TWRAP_CONSUMER_PROXY_AUDIO(self)->id)) && audioConsumer->getCallback()){
- ret = audioConsumer->getCallback()->start();
- }
- }
-
- TWRAP_CONSUMER_PROXY_AUDIO(self)->started = (ret == 0);
- return ret;
+ ProxyPluginMgr* manager;
+ int ret = -1;
+ if((manager = ProxyPluginMgr::getInstance())) {
+ const ProxyAudioConsumer* audioConsumer;
+ if((audioConsumer = manager->findAudioConsumer(TWRAP_CONSUMER_PROXY_AUDIO(self)->id)) && audioConsumer->getCallback()) {
+ ret = audioConsumer->getCallback()->start();
+ }
+ }
+
+ TWRAP_CONSUMER_PROXY_AUDIO(self)->started = (ret == 0);
+ return ret;
}
int twrap_consumer_proxy_audio_consume(tmedia_consumer_t* self, const void* buffer, tsk_size_t size, const tsk_object_t* proto_hdr)
{
- twrap_consumer_proxy_audio_t* audio = TWRAP_CONSUMER_PROXY_AUDIO(self);
-
- if(!audio->pcConsumer){
- ProxyPluginMgr* manager;
- if((manager = ProxyPluginMgr::getInstance())){
- audio->pcConsumer = manager->findAudioConsumer(audio->id);
- }
- }
-
- ProxyAudioConsumerCallback* callback;
- int ret = -1;
- if(audio->pcConsumer && (callback = audio->pcConsumer->getCallback())){
- if(callback->putInJitterBuffer()){
- ret = tdav_consumer_audio_put(TDAV_CONSUMER_AUDIO(self), buffer, size, proto_hdr);
- }
- else{
- ret = callback->consume(buffer, size, proto_hdr);
- }
- }
-
- return ret;
+ twrap_consumer_proxy_audio_t* audio = TWRAP_CONSUMER_PROXY_AUDIO(self);
+
+ if(!audio->pcConsumer) {
+ ProxyPluginMgr* manager;
+ if((manager = ProxyPluginMgr::getInstance())) {
+ audio->pcConsumer = manager->findAudioConsumer(audio->id);
+ }
+ }
+
+ ProxyAudioConsumerCallback* callback;
+ int ret = -1;
+ if(audio->pcConsumer && (callback = audio->pcConsumer->getCallback())) {
+ if(callback->putInJitterBuffer()) {
+ ret = tdav_consumer_audio_put(TDAV_CONSUMER_AUDIO(self), buffer, size, proto_hdr);
+ }
+ else {
+ ret = callback->consume(buffer, size, proto_hdr);
+ }
+ }
+
+ return ret;
}
int twrap_consumer_proxy_audio_pause(tmedia_consumer_t* self)
{
- ProxyPluginMgr* manager;
- int ret = -1;
- if((manager = ProxyPluginMgr::getInstance())){
- const ProxyAudioConsumer* audioConsumer;
- if((audioConsumer = manager->findAudioConsumer(TWRAP_CONSUMER_PROXY_AUDIO(self)->id)) && audioConsumer->getCallback()){
- ret = audioConsumer->getCallback()->pause();
- }
- }
-
- return ret;
+ ProxyPluginMgr* manager;
+ int ret = -1;
+ if((manager = ProxyPluginMgr::getInstance())) {
+ const ProxyAudioConsumer* audioConsumer;
+ if((audioConsumer = manager->findAudioConsumer(TWRAP_CONSUMER_PROXY_AUDIO(self)->id)) && audioConsumer->getCallback()) {
+ ret = audioConsumer->getCallback()->pause();
+ }
+ }
+
+ return ret;
}
int twrap_consumer_proxy_audio_stop(tmedia_consumer_t* self)
{
- ProxyPluginMgr* manager;
- int ret = -1;
- if((manager = ProxyPluginMgr::getInstance())){
- const ProxyAudioConsumer* audioConsumer;
- if((audioConsumer = manager->findAudioConsumer(TWRAP_CONSUMER_PROXY_AUDIO(self)->id)) && audioConsumer->getCallback()){
- ret = audioConsumer->getCallback()->stop();
- }
- }
-
- TWRAP_CONSUMER_PROXY_AUDIO(self)->started = (ret == 0) ? tsk_false : tsk_true;
- return ret;
+ ProxyPluginMgr* manager;
+ int ret = -1;
+ if((manager = ProxyPluginMgr::getInstance())) {
+ const ProxyAudioConsumer* audioConsumer;
+ if((audioConsumer = manager->findAudioConsumer(TWRAP_CONSUMER_PROXY_AUDIO(self)->id)) && audioConsumer->getCallback()) {
+ ret = audioConsumer->getCallback()->stop();
+ }
+ }
+
+ TWRAP_CONSUMER_PROXY_AUDIO(self)->started = (ret == 0) ? tsk_false : tsk_true;
+ return ret;
}
@@ -163,70 +162,68 @@ int twrap_consumer_proxy_audio_stop(tmedia_consumer_t* self)
/* constructor */
static tsk_object_t* twrap_consumer_proxy_audio_ctor(tsk_object_t * self, va_list * app)
{
- twrap_consumer_proxy_audio_t *consumer = (twrap_consumer_proxy_audio_t *)self;
- if(consumer){
- /* init base */
- tdav_consumer_audio_init(TDAV_CONSUMER_AUDIO(consumer));
- /* init self */
-
- /* Add the plugin to the manager */
- ProxyPluginMgr* manager = ProxyPluginMgr::getInstance();
- if(manager){
- ProxyPlugin* proxyConsumer = new ProxyAudioConsumer(consumer);
- uint64_t id = proxyConsumer->getId();
- manager->addPlugin(&proxyConsumer);
- manager->getCallback()->OnPluginCreated(id, twrap_proxy_plugin_audio_consumer);
- }
- }
- return self;
+ twrap_consumer_proxy_audio_t *consumer = (twrap_consumer_proxy_audio_t *)self;
+ if(consumer) {
+ /* init base */
+ tdav_consumer_audio_init(TDAV_CONSUMER_AUDIO(consumer));
+ /* init self */
+
+ /* Add the plugin to the manager */
+ ProxyPluginMgr* manager = ProxyPluginMgr::getInstance();
+ if(manager) {
+ ProxyPlugin* proxyConsumer = new ProxyAudioConsumer(consumer);
+ uint64_t id = proxyConsumer->getId();
+ manager->addPlugin(&proxyConsumer);
+ manager->getCallback()->OnPluginCreated(id, twrap_proxy_plugin_audio_consumer);
+ }
+ }
+ return self;
}
/* destructor */
static tsk_object_t* twrap_consumer_proxy_audio_dtor(tsk_object_t * self)
-{
- twrap_consumer_proxy_audio_t *consumer = (twrap_consumer_proxy_audio_t *)self;
- if(consumer){
- /* stop */
- if(consumer->started){
- twrap_consumer_proxy_audio_stop(TMEDIA_CONSUMER(consumer));
- }
+{
+ twrap_consumer_proxy_audio_t *consumer = (twrap_consumer_proxy_audio_t *)self;
+ if(consumer) {
+ /* stop */
+ if(consumer->started) {
+ twrap_consumer_proxy_audio_stop(TMEDIA_CONSUMER(consumer));
+ }
- /* deinit base */
- tdav_consumer_audio_deinit(TDAV_CONSUMER_AUDIO(consumer));
- /* deinit self */
+ /* deinit base */
+ tdav_consumer_audio_deinit(TDAV_CONSUMER_AUDIO(consumer));
+ /* deinit self */
- /* Remove plugin from the manager */
- ProxyPluginMgr* manager = ProxyPluginMgr::getInstance();
- if(manager){
- manager->getCallback()->OnPluginDestroyed(consumer->id, twrap_proxy_plugin_audio_consumer);
- manager->removePlugin(consumer->id);
- }
- }
+ /* Remove plugin from the manager */
+ ProxyPluginMgr* manager = ProxyPluginMgr::getInstance();
+ if(manager) {
+ manager->getCallback()->OnPluginDestroyed(consumer->id, twrap_proxy_plugin_audio_consumer);
+ manager->removePlugin(consumer->id);
+ }
+ }
- return self;
+ return self;
}
/* object definition */
-static const tsk_object_def_t twrap_consumer_proxy_audio_def_s =
-{
- sizeof(twrap_consumer_proxy_audio_t),
- twrap_consumer_proxy_audio_ctor,
- twrap_consumer_proxy_audio_dtor,
- tdav_consumer_audio_cmp,
+static const tsk_object_def_t twrap_consumer_proxy_audio_def_s = {
+ sizeof(twrap_consumer_proxy_audio_t),
+ twrap_consumer_proxy_audio_ctor,
+ twrap_consumer_proxy_audio_dtor,
+ tdav_consumer_audio_cmp,
};
/* plugin definition*/
-static const tmedia_consumer_plugin_def_t twrap_consumer_proxy_audio_plugin_def_s =
-{
- &twrap_consumer_proxy_audio_def_s,
-
- tmedia_audio,
- "Audio Proxy Consumer",
-
- twrap_consumer_proxy_audio_set,
- twrap_consumer_proxy_audio_prepare,
- twrap_consumer_proxy_audio_start,
- twrap_consumer_proxy_audio_consume,
- twrap_consumer_proxy_audio_pause,
- twrap_consumer_proxy_audio_stop
+static const tmedia_consumer_plugin_def_t twrap_consumer_proxy_audio_plugin_def_s = {
+ &twrap_consumer_proxy_audio_def_s,
+
+ tmedia_audio,
+ "Audio Proxy Consumer",
+
+ twrap_consumer_proxy_audio_set,
+ twrap_consumer_proxy_audio_prepare,
+ twrap_consumer_proxy_audio_start,
+ twrap_consumer_proxy_audio_consume,
+ twrap_consumer_proxy_audio_pause,
+ twrap_consumer_proxy_audio_stop
};
/*TINYWRAP_GEXTERN*/ const tmedia_consumer_plugin_def_t *twrap_consumer_proxy_audio_plugin_def_t = &twrap_consumer_proxy_audio_plugin_def_s;
@@ -235,144 +232,144 @@ static const tmedia_consumer_plugin_def_t twrap_consumer_proxy_audio_plugin_def_
/* ============ ProxyAudioConsumer Class ================= */
ProxyAudioConsumer::ProxyAudioConsumer(twrap_consumer_proxy_audio_t* pConsumer)
-:ProxyPlugin(twrap_proxy_plugin_audio_consumer),
-m_pWrappedPlugin(pConsumer),
-m_pCallback(tsk_null)
+ :ProxyPlugin(twrap_proxy_plugin_audio_consumer),
+ m_pWrappedPlugin(pConsumer),
+ m_pCallback(tsk_null)
{
- memset(&m_PullBuffer, 0, sizeof(m_PullBuffer));
- memset(&m_Resampler, 0, sizeof(m_Resampler));
+ memset(&m_PullBuffer, 0, sizeof(m_PullBuffer));
+ memset(&m_Resampler, 0, sizeof(m_Resampler));
- if(m_pWrappedPlugin){
- m_pWrappedPlugin->id = this->getId();
- }
+ if(m_pWrappedPlugin) {
+ m_pWrappedPlugin->id = this->getId();
+ }
}
ProxyAudioConsumer::~ProxyAudioConsumer()
{
- TSK_FREE(m_Resampler.pInBufferPtr);
- m_Resampler.nInBufferSizeInByte = 0;
- if(m_Resampler.pResampler){
- delete m_Resampler.pResampler, m_Resampler.pResampler = tsk_null;
- }
+ TSK_FREE(m_Resampler.pInBufferPtr);
+ m_Resampler.nInBufferSizeInByte = 0;
+ if(m_Resampler.pResampler) {
+ delete m_Resampler.pResampler, m_Resampler.pResampler = tsk_null;
+ }
}
// Use this function to request resampling when your sound card can't honor negotaited record parameters
bool ProxyAudioConsumer::setActualSndCardPlaybackParams(int nPtime, int nRate, int nChannels)
{
- if(m_pWrappedPlugin){
- TSK_DEBUG_INFO("ProxyAudioConsumer::setActualSndCardRecordParams(ptime=%d, rate=%d, channels=%d)", nPtime, nRate, nChannels);
- TMEDIA_CONSUMER(m_pWrappedPlugin)->audio.ptime = nPtime;
- TMEDIA_CONSUMER(m_pWrappedPlugin)->audio.out.rate = nRate;
- TMEDIA_CONSUMER(m_pWrappedPlugin)->audio.out.channels = nChannels;
- return true;
- }
- else{
- TSK_DEBUG_ERROR("Invalid state");
- return false;
- }
+ if(m_pWrappedPlugin) {
+ TSK_DEBUG_INFO("ProxyAudioConsumer::setActualSndCardRecordParams(ptime=%d, rate=%d, channels=%d)", nPtime, nRate, nChannels);
+ TMEDIA_CONSUMER(m_pWrappedPlugin)->audio.ptime = nPtime;
+ TMEDIA_CONSUMER(m_pWrappedPlugin)->audio.out.rate = nRate;
+ TMEDIA_CONSUMER(m_pWrappedPlugin)->audio.out.channels = nChannels;
+ return true;
+ }
+ else {
+ TSK_DEBUG_ERROR("Invalid state");
+ return false;
+ }
}
bool ProxyAudioConsumer::queryForResampler(uint16_t nInFreq, uint16_t nOutFreq, uint16_t nFrameDuration, uint16_t nChannels, uint16_t nResamplerQuality)
{
- TSK_DEBUG_INFO("queryForResampler(%hu,%hu,%hu,%hu,%hu)", nInFreq, nOutFreq, nFrameDuration, nChannels, nResamplerQuality);
- if(nResamplerQuality > 10){
- TSK_DEBUG_WARN("%d is invalid value for quality", nResamplerQuality);
- }
- m_Resampler.pResampler = new AudioResampler(nInFreq, nOutFreq, nFrameDuration, nChannels, nResamplerQuality);
- if(!m_Resampler.pResampler){
- TSK_DEBUG_ERROR("Failed to create new 'AudioResampler' object");
- return false;
- }
- bool bOK = m_Resampler.pResampler->isValid();
- if(!bOK){
- goto bail;
- }
- m_Resampler.nInBufferSizeInByte = m_Resampler.pResampler->getInputRequiredSizeInShort() * 2;
- m_Resampler.pInBufferPtr = tsk_calloc(m_Resampler.nInBufferSizeInByte, 1);
- bOK = (m_Resampler.pInBufferPtr != tsk_null);
+ TSK_DEBUG_INFO("queryForResampler(%hu,%hu,%hu,%hu,%hu)", nInFreq, nOutFreq, nFrameDuration, nChannels, nResamplerQuality);
+ if(nResamplerQuality > 10) {
+ TSK_DEBUG_WARN("%d is invalid value for quality", nResamplerQuality);
+ }
+ m_Resampler.pResampler = new AudioResampler(nInFreq, nOutFreq, nFrameDuration, nChannels, nResamplerQuality);
+ if(!m_Resampler.pResampler) {
+ TSK_DEBUG_ERROR("Failed to create new 'AudioResampler' object");
+ return false;
+ }
+ bool bOK = m_Resampler.pResampler->isValid();
+ if(!bOK) {
+ goto bail;
+ }
+ m_Resampler.nInBufferSizeInByte = m_Resampler.pResampler->getInputRequiredSizeInShort() * 2;
+ m_Resampler.pInBufferPtr = tsk_calloc(m_Resampler.nInBufferSizeInByte, 1);
+ bOK = (m_Resampler.pInBufferPtr != tsk_null);
bail:
- if(!bOK){
- if(m_Resampler.pResampler){
- delete m_Resampler.pResampler, m_Resampler.pResampler = tsk_null;
- }
- TSK_FREE(m_Resampler.pInBufferPtr);
- m_Resampler.nInBufferSizeInByte = 0;
- }
- return bOK;
+ if(!bOK) {
+ if(m_Resampler.pResampler) {
+ delete m_Resampler.pResampler, m_Resampler.pResampler = tsk_null;
+ }
+ TSK_FREE(m_Resampler.pInBufferPtr);
+ m_Resampler.nInBufferSizeInByte = 0;
+ }
+ return bOK;
}
bool ProxyAudioConsumer::setPullBuffer(const void* pPullBufferPtr, unsigned nPullBufferSize)
{
- m_PullBuffer.pPullBufferPtr = pPullBufferPtr;
- m_PullBuffer.nPullBufferSize = nPullBufferSize;
- return true;
+ m_PullBuffer.pPullBufferPtr = pPullBufferPtr;
+ m_PullBuffer.nPullBufferSize = nPullBufferSize;
+ return true;
}
unsigned ProxyAudioConsumer::pull(void* _pOutput/*=tsk_null*/, unsigned _nSize/*=0*/)
{
- if((m_pWrappedPlugin = (twrap_consumer_proxy_audio_t*)tsk_object_ref(m_pWrappedPlugin))){
- void* pOutput;
- unsigned nSize;
- if(_pOutput && _nSize){
- pOutput = _pOutput, nSize = _nSize;
- }
- else{
- pOutput = (void*)m_PullBuffer.pPullBufferPtr, nSize = m_PullBuffer.nPullBufferSize;
- }
+ if((m_pWrappedPlugin = (twrap_consumer_proxy_audio_t*)tsk_object_ref(m_pWrappedPlugin))) {
+ void* pOutput;
+ unsigned nSize;
+ if(_pOutput && _nSize) {
+ pOutput = _pOutput, nSize = _nSize;
+ }
+ else {
+ pOutput = (void*)m_PullBuffer.pPullBufferPtr, nSize = m_PullBuffer.nPullBufferSize;
+ }
- tsk_size_t nRetSize = 0;
+ tsk_size_t nRetSize = 0;
- if(m_Resampler.pResampler && m_Resampler.pInBufferPtr){
- nRetSize = tdav_consumer_audio_get(TDAV_CONSUMER_AUDIO(m_pWrappedPlugin), m_Resampler.pInBufferPtr, m_Resampler.nInBufferSizeInByte);
- if(nRetSize){
- nRetSize = m_Resampler.pResampler->process(m_Resampler.pInBufferPtr, nRetSize, pOutput, nSize);
- }
- }
- else{
- nRetSize = tdav_consumer_audio_get(TDAV_CONSUMER_AUDIO(m_pWrappedPlugin), pOutput, nSize);
- }
+ if(m_Resampler.pResampler && m_Resampler.pInBufferPtr) {
+ nRetSize = tdav_consumer_audio_get(TDAV_CONSUMER_AUDIO(m_pWrappedPlugin), m_Resampler.pInBufferPtr, m_Resampler.nInBufferSizeInByte);
+ if(nRetSize) {
+ nRetSize = m_Resampler.pResampler->process(m_Resampler.pInBufferPtr, nRetSize, pOutput, nSize);
+ }
+ }
+ else {
+ nRetSize = tdav_consumer_audio_get(TDAV_CONSUMER_AUDIO(m_pWrappedPlugin), pOutput, nSize);
+ }
- tdav_consumer_audio_tick(TDAV_CONSUMER_AUDIO(m_pWrappedPlugin));
+ tdav_consumer_audio_tick(TDAV_CONSUMER_AUDIO(m_pWrappedPlugin));
- m_pWrappedPlugin = (twrap_consumer_proxy_audio_t*)tsk_object_unref(m_pWrappedPlugin);
- return nRetSize;
- }
- return 0;
+ m_pWrappedPlugin = (twrap_consumer_proxy_audio_t*)tsk_object_unref(m_pWrappedPlugin);
+ return nRetSize;
+ }
+ return 0;
}
bool ProxyAudioConsumer::setGain(unsigned nGain)
{
- if(m_pWrappedPlugin){
- // see also: MediaSessionMgr.consumerSetInt32(org.doubango.tinyWRAP.twrap_media_type_t.twrap_media_audio, "gain", nGain);
- TMEDIA_CONSUMER(m_pWrappedPlugin)->audio.gain = TSK_MIN(nGain,14);
- return true;
- }
- return false;
+ if(m_pWrappedPlugin) {
+ // see also: MediaSessionMgr.consumerSetInt32(org.doubango.tinyWRAP.twrap_media_type_t.twrap_media_audio, "gain", nGain);
+ TMEDIA_CONSUMER(m_pWrappedPlugin)->audio.gain = TSK_MIN(nGain,14);
+ return true;
+ }
+ return false;
}
unsigned ProxyAudioConsumer::getGain()
{
- if(m_pWrappedPlugin){
- return TMEDIA_CONSUMER(m_pWrappedPlugin)->audio.gain;
- }
- return 0;
+ if(m_pWrappedPlugin) {
+ return TMEDIA_CONSUMER(m_pWrappedPlugin)->audio.gain;
+ }
+ return 0;
}
bool ProxyAudioConsumer::reset()
{
- if(m_pWrappedPlugin){
- return (tdav_consumer_audio_reset(TDAV_CONSUMER_AUDIO(m_pWrappedPlugin)) == 0);
- }
- return false;
+ if(m_pWrappedPlugin) {
+ return (tdav_consumer_audio_reset(TDAV_CONSUMER_AUDIO(m_pWrappedPlugin)) == 0);
+ }
+ return false;
}
bool ProxyAudioConsumer::registerPlugin()
{
- /* HACK: Unregister all other audio plugins */
- tmedia_consumer_plugin_unregister_by_type(tmedia_audio);
- /* Register our proxy plugin */
- return (tmedia_consumer_plugin_register(twrap_consumer_proxy_audio_plugin_def_t) == 0);
+ /* HACK: Unregister all other audio plugins */
+ tmedia_consumer_plugin_unregister_by_type(tmedia_audio);
+ /* Register our proxy plugin */
+ return (tmedia_consumer_plugin_register(twrap_consumer_proxy_audio_plugin_def_t) == 0);
}
@@ -408,135 +405,134 @@ bool ProxyAudioConsumer::registerPlugin()
/* ============ Video Consumer Interface ================= */
-typedef struct twrap_consumer_proxy_video_s
-{
- TDAV_DECLARE_CONSUMER_VIDEO;
+typedef struct twrap_consumer_proxy_video_s {
+ TDAV_DECLARE_CONSUMER_VIDEO;
- uint64_t id;
- tsk_bool_t started;
- const ProxyVideoConsumer* pcConsumer; // thread-safe and will be destroyed at the time as the "struct"
+ uint64_t id;
+ tsk_bool_t started;
+ const ProxyVideoConsumer* pcConsumer; // thread-safe and will be destroyed at the time as the "struct"
}
twrap_consumer_proxy_video_t;
#define TWRAP_CONSUMER_PROXY_VIDEO(self) ((twrap_consumer_proxy_video_t*)(self))
int twrap_consumer_proxy_video_set(tmedia_consumer_t* self, const tmedia_param_t* params)
{
- return 0;
+ return 0;
}
int twrap_consumer_proxy_video_prepare(tmedia_consumer_t* self, const tmedia_codec_t* codec)
{
- ProxyPluginMgr* manager;
- twrap_consumer_proxy_video_t* video = TWRAP_CONSUMER_PROXY_VIDEO(self);
- int ret = -1;
- if(codec && (manager = ProxyPluginMgr::getInstance())){
- if((video->pcConsumer = manager->findVideoConsumer(video->id)) && video->pcConsumer->getCallback()){
- self->video.fps = TMEDIA_CODEC_VIDEO(codec)->in.fps;
- // in
- self->video.in.chroma = tmedia_chroma_yuv420p;
- self->video.in.width = TMEDIA_CODEC_VIDEO(codec)->in.width;
- self->video.in.height = TMEDIA_CODEC_VIDEO(codec)->in.height;
- // display (out)
- self->video.display.chroma = video->pcConsumer->getChroma();
- self->video.display.auto_resize = video->pcConsumer->getAutoResizeDisplay();
- if(!self->video.display.width){
- self->video.display.width = self->video.in.width;
- }
- if(!self->video.display.height){
- self->video.display.height = self->video.in.height;
- }
- ret = video->pcConsumer->getCallback()->prepare(TMEDIA_CODEC_VIDEO(codec)->in.width, TMEDIA_CODEC_VIDEO(codec)->in.height, TMEDIA_CODEC_VIDEO(codec)->in.fps);
- }
- }
-
- return ret;
+ ProxyPluginMgr* manager;
+ twrap_consumer_proxy_video_t* video = TWRAP_CONSUMER_PROXY_VIDEO(self);
+ int ret = -1;
+ if(codec && (manager = ProxyPluginMgr::getInstance())) {
+ if((video->pcConsumer = manager->findVideoConsumer(video->id)) && video->pcConsumer->getCallback()) {
+ self->video.fps = TMEDIA_CODEC_VIDEO(codec)->in.fps;
+ // in
+ self->video.in.chroma = tmedia_chroma_yuv420p;
+ self->video.in.width = TMEDIA_CODEC_VIDEO(codec)->in.width;
+ self->video.in.height = TMEDIA_CODEC_VIDEO(codec)->in.height;
+ // display (out)
+ self->video.display.chroma = video->pcConsumer->getChroma();
+ self->video.display.auto_resize = video->pcConsumer->getAutoResizeDisplay();
+ if(!self->video.display.width) {
+ self->video.display.width = self->video.in.width;
+ }
+ if(!self->video.display.height) {
+ self->video.display.height = self->video.in.height;
+ }
+ ret = video->pcConsumer->getCallback()->prepare(TMEDIA_CODEC_VIDEO(codec)->in.width, TMEDIA_CODEC_VIDEO(codec)->in.height, TMEDIA_CODEC_VIDEO(codec)->in.fps);
+ }
+ }
+
+ return ret;
}
int twrap_consumer_proxy_video_start(tmedia_consumer_t* self)
{
- ProxyPluginMgr* manager;
- int ret = -1;
- if((manager = ProxyPluginMgr::getInstance())){
- const ProxyVideoConsumer* videoConsumer;
- if((videoConsumer = manager->findVideoConsumer(TWRAP_CONSUMER_PROXY_VIDEO(self)->id)) && videoConsumer->getCallback()){
- ret = videoConsumer->getCallback()->start();
- }
- }
-
- TWRAP_CONSUMER_PROXY_VIDEO(self)->started = (ret == 0);
- return ret;
+ ProxyPluginMgr* manager;
+ int ret = -1;
+ if((manager = ProxyPluginMgr::getInstance())) {
+ const ProxyVideoConsumer* videoConsumer;
+ if((videoConsumer = manager->findVideoConsumer(TWRAP_CONSUMER_PROXY_VIDEO(self)->id)) && videoConsumer->getCallback()) {
+ ret = videoConsumer->getCallback()->start();
+ }
+ }
+
+ TWRAP_CONSUMER_PROXY_VIDEO(self)->started = (ret == 0);
+ return ret;
}
int twrap_consumer_proxy_video_consume(tmedia_consumer_t* self, const void* buffer, tsk_size_t size, const tsk_object_t* proto_hdr)
{
- if(!self || !buffer || !size){
- TSK_DEBUG_ERROR("Invalid parameter");
- return -1;
- }
-
- twrap_consumer_proxy_video_t* video = TWRAP_CONSUMER_PROXY_VIDEO(self);
-
- if(!video->pcConsumer){
- ProxyPluginMgr* manager;
- if((manager = ProxyPluginMgr::getInstance())){
- video->pcConsumer = manager->findVideoConsumer(video->id);
- }
- }
-
- int ret = -1;
- ProxyVideoConsumerCallback* callback;
-
- if(video->pcConsumer && (callback = video->pcConsumer->getCallback())){
- if(tdav_consumer_video_has_jb(TDAV_CONSUMER_VIDEO(self))){
- ret = tdav_consumer_video_put(TDAV_CONSUMER_VIDEO(self), buffer, size, proto_hdr);
- }
- else{
- if(video->pcConsumer->hasConsumeBuffer()){
- unsigned nCopiedSize = video->pcConsumer->copyBuffer(buffer, size);
- ret = callback->bufferCopied(nCopiedSize, size);
- }
- else{
- ProxyVideoFrame* frame = new ProxyVideoFrame(buffer, size, const_cast<ProxyVideoConsumer*>(video->pcConsumer)->getDecodedWidth(), const_cast<ProxyVideoConsumer*>(video->pcConsumer)->getDecodedHeight(), proto_hdr);
- ret = callback->consume(frame);
- delete frame, frame = tsk_null;
- }
- }
- }
- else if(!video->pcConsumer){
- TSK_DEBUG_ERROR("Cannot find consumer with id=%lld", TWRAP_CONSUMER_PROXY_VIDEO(self)->id);
- }
-
-
- return ret;
+ if(!self || !buffer || !size) {
+ TSK_DEBUG_ERROR("Invalid parameter");
+ return -1;
+ }
+
+ twrap_consumer_proxy_video_t* video = TWRAP_CONSUMER_PROXY_VIDEO(self);
+
+ if(!video->pcConsumer) {
+ ProxyPluginMgr* manager;
+ if((manager = ProxyPluginMgr::getInstance())) {
+ video->pcConsumer = manager->findVideoConsumer(video->id);
+ }
+ }
+
+ int ret = -1;
+ ProxyVideoConsumerCallback* callback;
+
+ if(video->pcConsumer && (callback = video->pcConsumer->getCallback())) {
+ if(tdav_consumer_video_has_jb(TDAV_CONSUMER_VIDEO(self))) {
+ ret = tdav_consumer_video_put(TDAV_CONSUMER_VIDEO(self), buffer, size, proto_hdr);
+ }
+ else {
+ if(video->pcConsumer->hasConsumeBuffer()) {
+ unsigned nCopiedSize = video->pcConsumer->copyBuffer(buffer, size);
+ ret = callback->bufferCopied(nCopiedSize, size);
+ }
+ else {
+ ProxyVideoFrame* frame = new ProxyVideoFrame(buffer, size, const_cast<ProxyVideoConsumer*>(video->pcConsumer)->getDecodedWidth(), const_cast<ProxyVideoConsumer*>(video->pcConsumer)->getDecodedHeight(), proto_hdr);
+ ret = callback->consume(frame);
+ delete frame, frame = tsk_null;
+ }
+ }
+ }
+ else if(!video->pcConsumer) {
+ TSK_DEBUG_ERROR("Cannot find consumer with id=%lld", TWRAP_CONSUMER_PROXY_VIDEO(self)->id);
+ }
+
+
+ return ret;
}
int twrap_consumer_proxy_video_pause(tmedia_consumer_t* self)
{
- ProxyPluginMgr* manager;
- int ret = -1;
- if((manager = ProxyPluginMgr::getInstance())){
- const ProxyVideoConsumer* videoConsumer;
- if((videoConsumer = manager->findVideoConsumer(TWRAP_CONSUMER_PROXY_VIDEO(self)->id)) && videoConsumer->getCallback()){
- ret = videoConsumer->getCallback()->pause();
- }
- }
-
- return ret;
+ ProxyPluginMgr* manager;
+ int ret = -1;
+ if((manager = ProxyPluginMgr::getInstance())) {
+ const ProxyVideoConsumer* videoConsumer;
+ if((videoConsumer = manager->findVideoConsumer(TWRAP_CONSUMER_PROXY_VIDEO(self)->id)) && videoConsumer->getCallback()) {
+ ret = videoConsumer->getCallback()->pause();
+ }
+ }
+
+ return ret;
}
int twrap_consumer_proxy_video_stop(tmedia_consumer_t* self)
{
- ProxyPluginMgr* manager;
- int ret = -1;
- if((manager = ProxyPluginMgr::getInstance())){
- const ProxyVideoConsumer* videoConsumer;
- if((videoConsumer = manager->findVideoConsumer(TWRAP_CONSUMER_PROXY_VIDEO(self)->id)) && videoConsumer->getCallback()){
- ret = videoConsumer->getCallback()->stop();
- }
- }
-
- TWRAP_CONSUMER_PROXY_VIDEO(self)->started = (ret == 0) ? tsk_false : tsk_true;
- return ret;
+ ProxyPluginMgr* manager;
+ int ret = -1;
+ if((manager = ProxyPluginMgr::getInstance())) {
+ const ProxyVideoConsumer* videoConsumer;
+ if((videoConsumer = manager->findVideoConsumer(TWRAP_CONSUMER_PROXY_VIDEO(self)->id)) && videoConsumer->getCallback()) {
+ ret = videoConsumer->getCallback()->stop();
+ }
+ }
+
+ TWRAP_CONSUMER_PROXY_VIDEO(self)->started = (ret == 0) ? tsk_false : tsk_true;
+ return ret;
}
@@ -546,70 +542,68 @@ int twrap_consumer_proxy_video_stop(tmedia_consumer_t* self)
/* constructor */
static tsk_object_t* twrap_consumer_proxy_video_ctor(tsk_object_t * self, va_list * app)
{
- twrap_consumer_proxy_video_t *consumer = (twrap_consumer_proxy_video_t *)self;
- if(consumer){
- /* init base */
- tdav_consumer_video_init(TDAV_CONSUMER_VIDEO(consumer));
- /* init self */
-
- /* Add the plugin to the manager */
- ProxyPluginMgr* manager = ProxyPluginMgr::getInstance();
- if(manager){
- ProxyPlugin* proxyConsumer = new ProxyVideoConsumer(ProxyVideoConsumer::getDefaultChroma(), consumer);
- uint64_t id = proxyConsumer->getId();
- manager->addPlugin(&proxyConsumer);
- manager->getCallback()->OnPluginCreated(id, twrap_proxy_plugin_video_consumer);
- }
- }
- return self;
+ twrap_consumer_proxy_video_t *consumer = (twrap_consumer_proxy_video_t *)self;
+ if(consumer) {
+ /* init base */
+ tdav_consumer_video_init(TDAV_CONSUMER_VIDEO(consumer));
+ /* init self */
+
+ /* Add the plugin to the manager */
+ ProxyPluginMgr* manager = ProxyPluginMgr::getInstance();
+ if(manager) {
+ ProxyPlugin* proxyConsumer = new ProxyVideoConsumer(ProxyVideoConsumer::getDefaultChroma(), consumer);
+ uint64_t id = proxyConsumer->getId();
+ manager->addPlugin(&proxyConsumer);
+ manager->getCallback()->OnPluginCreated(id, twrap_proxy_plugin_video_consumer);
+ }
+ }
+ return self;
}
/* destructor */
static tsk_object_t* twrap_consumer_proxy_video_dtor(tsk_object_t * self)
-{
- twrap_consumer_proxy_video_t *consumer = (twrap_consumer_proxy_video_t *)self;
- if(consumer){
+{
+ twrap_consumer_proxy_video_t *consumer = (twrap_consumer_proxy_video_t *)self;
+ if(consumer) {
- /* stop */
- if(consumer->started){
- twrap_consumer_proxy_video_stop(TMEDIA_CONSUMER(consumer));
- }
+ /* stop */
+ if(consumer->started) {
+ twrap_consumer_proxy_video_stop(TMEDIA_CONSUMER(consumer));
+ }
- /* deinit base */
- tdav_consumer_video_deinit(TDAV_CONSUMER_VIDEO(consumer));
- /* deinit self */
+ /* deinit base */
+ tdav_consumer_video_deinit(TDAV_CONSUMER_VIDEO(consumer));
+ /* deinit self */
- /* Remove plugin from the manager */
- ProxyPluginMgr* manager = ProxyPluginMgr::getInstance();
- if(manager){
- manager->getCallback()->OnPluginDestroyed(consumer->id, twrap_proxy_plugin_video_consumer);
- manager->removePlugin(consumer->id);
- }
- }
+ /* Remove plugin from the manager */
+ ProxyPluginMgr* manager = ProxyPluginMgr::getInstance();
+ if(manager) {
+ manager->getCallback()->OnPluginDestroyed(consumer->id, twrap_proxy_plugin_video_consumer);
+ manager->removePlugin(consumer->id);
+ }
+ }
- return self;
+ return self;
}
/* object definition */
-static const tsk_object_def_t twrap_consumer_proxy_video_def_s =
-{
- sizeof(twrap_consumer_proxy_video_t),
- twrap_consumer_proxy_video_ctor,
- twrap_consumer_proxy_video_dtor,
- tsk_null,
+static const tsk_object_def_t twrap_consumer_proxy_video_def_s = {
+ sizeof(twrap_consumer_proxy_video_t),
+ twrap_consumer_proxy_video_ctor,
+ twrap_consumer_proxy_video_dtor,
+ tsk_null,
};
/* plugin definition*/
-static const tmedia_consumer_plugin_def_t twrap_consumer_proxy_video_plugin_def_s =
-{
- &twrap_consumer_proxy_video_def_s,
-
- tmedia_video,
- "Video Proxy Consumer",
-
- twrap_consumer_proxy_video_set,
- twrap_consumer_proxy_video_prepare,
- twrap_consumer_proxy_video_start,
- twrap_consumer_proxy_video_consume,
- twrap_consumer_proxy_video_pause,
- twrap_consumer_proxy_video_stop
+static const tmedia_consumer_plugin_def_t twrap_consumer_proxy_video_plugin_def_s = {
+ &twrap_consumer_proxy_video_def_s,
+
+ tmedia_video,
+ "Video Proxy Consumer",
+
+ twrap_consumer_proxy_video_set,
+ twrap_consumer_proxy_video_prepare,
+ twrap_consumer_proxy_video_start,
+ twrap_consumer_proxy_video_consume,
+ twrap_consumer_proxy_video_pause,
+ twrap_consumer_proxy_video_stop
};
/*TINYWRAP_GEXTERN*/ const tmedia_consumer_plugin_def_t *twrap_consumer_proxy_video_plugin_def_t = &twrap_consumer_proxy_video_plugin_def_s;
@@ -621,15 +615,15 @@ tmedia_chroma_t ProxyVideoConsumer::s_eDefaultChroma = tmedia_chroma_rgb565le;
bool ProxyVideoConsumer::s_bAutoResizeDisplay = false;
ProxyVideoConsumer::ProxyVideoConsumer(tmedia_chroma_t eChroma, struct twrap_consumer_proxy_video_s* pConsumer)
-: m_eChroma(eChroma),
-m_bAutoResizeDisplay(ProxyVideoConsumer::getDefaultAutoResizeDisplay()),
-m_pWrappedPlugin(pConsumer),
-m_pCallback(tsk_null),
-ProxyPlugin(twrap_proxy_plugin_video_consumer)
+ : m_eChroma(eChroma),
+ m_bAutoResizeDisplay(ProxyVideoConsumer::getDefaultAutoResizeDisplay()),
+ m_pWrappedPlugin(pConsumer),
+ m_pCallback(tsk_null),
+ ProxyPlugin(twrap_proxy_plugin_video_consumer)
{
- m_pWrappedPlugin->id = this->getId();
- m_ConsumeBuffer.pConsumeBufferPtr = tsk_null;
- m_ConsumeBuffer.nConsumeBufferSize = 0;
+ m_pWrappedPlugin->id = this->getId();
+ m_ConsumeBuffer.pConsumeBufferPtr = tsk_null;
+ m_ConsumeBuffer.nConsumeBufferSize = 0;
}
ProxyVideoConsumer::~ProxyVideoConsumer()
@@ -638,161 +632,162 @@ ProxyVideoConsumer::~ProxyVideoConsumer()
bool ProxyVideoConsumer::setDisplaySize(unsigned nWidth, unsigned nHeight)
{
- if((m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_ref(m_pWrappedPlugin))){
- TMEDIA_CONSUMER(m_pWrappedPlugin)->video.display.width = nWidth;
- TMEDIA_CONSUMER(m_pWrappedPlugin)->video.display.height = nHeight;
- m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_unref(m_pWrappedPlugin);
- return true;
- }
- TSK_DEBUG_ERROR("This consumer doesn't wrap any plugin");
- return false;
+ if((m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_ref(m_pWrappedPlugin))) {
+ TMEDIA_CONSUMER(m_pWrappedPlugin)->video.display.width = nWidth;
+ TMEDIA_CONSUMER(m_pWrappedPlugin)->video.display.height = nHeight;
+ m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_unref(m_pWrappedPlugin);
+ return true;
+ }
+ TSK_DEBUG_ERROR("This consumer doesn't wrap any plugin");
+ return false;
}
unsigned ProxyVideoConsumer::getDisplayWidth()
{
- unsigned displayWidth = 0;
- if((m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_ref(m_pWrappedPlugin))){
- displayWidth = TMEDIA_CONSUMER(m_pWrappedPlugin)->video.display.width;
- m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_unref(m_pWrappedPlugin);
- }
- else{
- TSK_DEBUG_ERROR("This consumer doesn't wrap any plugin");
- }
- return displayWidth;
+ unsigned displayWidth = 0;
+ if((m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_ref(m_pWrappedPlugin))) {
+ displayWidth = TMEDIA_CONSUMER(m_pWrappedPlugin)->video.display.width;
+ m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_unref(m_pWrappedPlugin);
+ }
+ else {
+ TSK_DEBUG_ERROR("This consumer doesn't wrap any plugin");
+ }
+ return displayWidth;
}
unsigned ProxyVideoConsumer::getDisplayHeight()
{
- unsigned displayHeight = 0;
- if((m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_ref(m_pWrappedPlugin))){
- displayHeight = TMEDIA_CONSUMER(m_pWrappedPlugin)->video.display.height;
- m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_unref(m_pWrappedPlugin);
- }
- else{
- TSK_DEBUG_ERROR("This consumer doesn't wrap any plugin");
- }
- return displayHeight;
+ unsigned displayHeight = 0;
+ if((m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_ref(m_pWrappedPlugin))) {
+ displayHeight = TMEDIA_CONSUMER(m_pWrappedPlugin)->video.display.height;
+ m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_unref(m_pWrappedPlugin);
+ }
+ else {
+ TSK_DEBUG_ERROR("This consumer doesn't wrap any plugin");
+ }
+ return displayHeight;
}
unsigned ProxyVideoConsumer::getDecodedWidth()
{
- unsigned width = 0;
- if((m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_ref(m_pWrappedPlugin))){
- width = TMEDIA_CONSUMER(m_pWrappedPlugin)->video.in.width;
- m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_unref(m_pWrappedPlugin);
- }
- else{
- TSK_DEBUG_ERROR("This consumer doesn't wrap any plugin");
- }
- return width;
+ unsigned width = 0;
+ if((m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_ref(m_pWrappedPlugin))) {
+ width = TMEDIA_CONSUMER(m_pWrappedPlugin)->video.in.width;
+ m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_unref(m_pWrappedPlugin);
+ }
+ else {
+ TSK_DEBUG_ERROR("This consumer doesn't wrap any plugin");
+ }
+ return width;
}
unsigned ProxyVideoConsumer::getDecodedHeight()
{
- unsigned height = 0;
- if((m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_ref(m_pWrappedPlugin))){
- height = TMEDIA_CONSUMER(m_pWrappedPlugin)->video.in.height;
- m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_unref(m_pWrappedPlugin);
- }
- else{
- TSK_DEBUG_ERROR("This consumer doesn't wrap any plugin");
- }
- return height;
+ unsigned height = 0;
+ if((m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_ref(m_pWrappedPlugin))) {
+ height = TMEDIA_CONSUMER(m_pWrappedPlugin)->video.in.height;
+ m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_unref(m_pWrappedPlugin);
+ }
+ else {
+ TSK_DEBUG_ERROR("This consumer doesn't wrap any plugin");
+ }
+ return height;
}
tmedia_chroma_t ProxyVideoConsumer::getChroma()const
{
- return m_eChroma;
+ return m_eChroma;
}
-bool ProxyVideoConsumer::setAutoResizeDisplay(bool bAutoResizeDisplay){
- if((m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_ref(m_pWrappedPlugin))){
- TMEDIA_CONSUMER(m_pWrappedPlugin)->video.display.auto_resize = bAutoResizeDisplay ? tsk_true : tsk_false;
- m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_unref(m_pWrappedPlugin);
- m_bAutoResizeDisplay = bAutoResizeDisplay;
- return true;
- }
- TSK_DEBUG_ERROR("This consumer doesn't wrap any plugin");
- return false;
+bool ProxyVideoConsumer::setAutoResizeDisplay(bool bAutoResizeDisplay)
+{
+ if((m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_ref(m_pWrappedPlugin))) {
+ TMEDIA_CONSUMER(m_pWrappedPlugin)->video.display.auto_resize = bAutoResizeDisplay ? tsk_true : tsk_false;
+ m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_unref(m_pWrappedPlugin);
+ m_bAutoResizeDisplay = bAutoResizeDisplay;
+ return true;
+ }
+ TSK_DEBUG_ERROR("This consumer doesn't wrap any plugin");
+ return false;
}
bool ProxyVideoConsumer::getAutoResizeDisplay()const
{
- return m_bAutoResizeDisplay;
+ return m_bAutoResizeDisplay;
}
bool ProxyVideoConsumer::setConsumeBuffer(const void* pConsumeBufferPtr, unsigned nConsumeBufferSize)
{
- m_ConsumeBuffer.pConsumeBufferPtr = pConsumeBufferPtr;
- m_ConsumeBuffer.nConsumeBufferSize = nConsumeBufferSize;
- return true;
+ m_ConsumeBuffer.pConsumeBufferPtr = pConsumeBufferPtr;
+ m_ConsumeBuffer.nConsumeBufferSize = nConsumeBufferSize;
+ return true;
}
unsigned ProxyVideoConsumer::copyBuffer(const void* pBuffer, unsigned nSize)const
{
- unsigned nRetsize = 0;
- if(pBuffer && nSize && m_ConsumeBuffer.pConsumeBufferPtr && m_ConsumeBuffer.nConsumeBufferSize){
- nRetsize = (nSize > m_ConsumeBuffer.nConsumeBufferSize) ? m_ConsumeBuffer.nConsumeBufferSize : nSize;
- memcpy((void*)m_ConsumeBuffer.pConsumeBufferPtr, pBuffer, nRetsize);
- }
- return nRetsize;
+ unsigned nRetsize = 0;
+ if(pBuffer && nSize && m_ConsumeBuffer.pConsumeBufferPtr && m_ConsumeBuffer.nConsumeBufferSize) {
+ nRetsize = (nSize > m_ConsumeBuffer.nConsumeBufferSize) ? m_ConsumeBuffer.nConsumeBufferSize : nSize;
+ memcpy((void*)m_ConsumeBuffer.pConsumeBufferPtr, pBuffer, nRetsize);
+ }
+ return nRetsize;
}
unsigned ProxyVideoConsumer::pull(void* pOutput, unsigned nSize)
{
- if(pOutput && nSize && (m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_ref(m_pWrappedPlugin))){
- tsk_size_t nRetSize = 0;
+ if(pOutput && nSize && (m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_ref(m_pWrappedPlugin))) {
+ tsk_size_t nRetSize = 0;
+
+ if(!tdav_consumer_video_has_jb(TDAV_CONSUMER_VIDEO(m_pWrappedPlugin))) {
+ TSK_DEBUG_ERROR("This consumer doesn't hold any jitter buffer.\n\nTo pull a buffer you must register a callback ('class ProxyVideoConsumerCallback') and listen for either 'consume' or 'bufferCopied' functions");
+ goto done;
+ }
- if(!tdav_consumer_video_has_jb(TDAV_CONSUMER_VIDEO(m_pWrappedPlugin))){
- TSK_DEBUG_ERROR("This consumer doesn't hold any jitter buffer.\n\nTo pull a buffer you must register a callback ('class ProxyVideoConsumerCallback') and listen for either 'consume' or 'bufferCopied' functions");
- goto done;
- }
-
- nRetSize = tdav_consumer_video_get(TDAV_CONSUMER_VIDEO(m_pWrappedPlugin), pOutput, nSize);
+ nRetSize = tdav_consumer_video_get(TDAV_CONSUMER_VIDEO(m_pWrappedPlugin), pOutput, nSize);
- tdav_consumer_video_tick(TDAV_CONSUMER_VIDEO(m_pWrappedPlugin));
+ tdav_consumer_video_tick(TDAV_CONSUMER_VIDEO(m_pWrappedPlugin));
done:
- m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_unref(m_pWrappedPlugin);
- return nRetSize;
- }
- return 0;
+ m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_unref(m_pWrappedPlugin);
+ return nRetSize;
+ }
+ return 0;
}
bool ProxyVideoConsumer::reset()
{
- bool ret = false;
- if((m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_ref(m_pWrappedPlugin))){
- if(tdav_consumer_video_has_jb(TDAV_CONSUMER_VIDEO(m_pWrappedPlugin))){
- ret = (tdav_consumer_video_reset(TDAV_CONSUMER_VIDEO(m_pWrappedPlugin)) == 0);
- }
- else{
- TSK_DEBUG_ERROR("This consumer doesn't hold any jitter buffer");
- }
- m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_unref(m_pWrappedPlugin);
- }
+ bool ret = false;
+ if((m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_ref(m_pWrappedPlugin))) {
+ if(tdav_consumer_video_has_jb(TDAV_CONSUMER_VIDEO(m_pWrappedPlugin))) {
+ ret = (tdav_consumer_video_reset(TDAV_CONSUMER_VIDEO(m_pWrappedPlugin)) == 0);
+ }
+ else {
+ TSK_DEBUG_ERROR("This consumer doesn't hold any jitter buffer");
+ }
+ m_pWrappedPlugin = (twrap_consumer_proxy_video_t*)tsk_object_unref(m_pWrappedPlugin);
+ }
- TSK_DEBUG_ERROR("This consumer doesn't wrap any plugin");
- return ret;
+ TSK_DEBUG_ERROR("This consumer doesn't wrap any plugin");
+ return ret;
}
bool ProxyVideoConsumer::registerPlugin()
{
- /* HACK: Unregister all other video plugins */
- tmedia_consumer_plugin_unregister_by_type(tmedia_video);
- /* Register our proxy plugin */
- return (tmedia_consumer_plugin_register(twrap_consumer_proxy_video_plugin_def_t) == 0);
+ /* HACK: Unregister all other video plugins */
+ tmedia_consumer_plugin_unregister_by_type(tmedia_video);
+ /* Register our proxy plugin */
+ return (tmedia_consumer_plugin_register(twrap_consumer_proxy_video_plugin_def_t) == 0);
}
ProxyVideoFrame::ProxyVideoFrame(const void* pBufferPtr, unsigned nSize, unsigned nFrameWidth, unsigned nFrameHeight, const tsk_object_t* pProtoHdr)
{
- m_pBufferPtr = pBufferPtr;
- m_nBufferSize = nSize;
- m_nFrameWidth = nFrameWidth;
- m_nFrameHeight = nFrameHeight;
- m_pProtoHdr = pProtoHdr;
+ m_pBufferPtr = pBufferPtr;
+ m_nBufferSize = nSize;
+ m_nFrameWidth = nFrameWidth;
+ m_nFrameHeight = nFrameHeight;
+ m_pProtoHdr = pProtoHdr;
}
ProxyVideoFrame::~ProxyVideoFrame()
@@ -801,15 +796,15 @@ ProxyVideoFrame::~ProxyVideoFrame()
unsigned ProxyVideoFrame::getSize()
{
- return m_nBufferSize;
+ return m_nBufferSize;
}
unsigned ProxyVideoFrame::getContent(void* pOutput, unsigned nMaxsize)
{
- unsigned nRetsize = 0;
- if(pOutput && nMaxsize && m_pBufferPtr){
- nRetsize = (m_nBufferSize > nMaxsize) ? nMaxsize : m_nBufferSize;
- memcpy(pOutput, m_pBufferPtr, nRetsize);
- }
- return nRetsize;
+ unsigned nRetsize = 0;
+ if(pOutput && nMaxsize && m_pBufferPtr) {
+ nRetsize = (m_nBufferSize > nMaxsize) ? nMaxsize : m_nBufferSize;
+ memcpy(pOutput, m_pBufferPtr, nRetsize);
+ }
+ return nRetsize;
}
OpenPOWER on IntegriCloud