diff --git a/branches/2.0/doubango/bindings/_common/ProxyProducer.cxx b/branches/2.0/doubango/bindings/_common/ProxyProducer.cxx
index f29f565b..d371cac5 100644
--- a/branches/2.0/doubango/bindings/_common/ProxyProducer.cxx
+++ b/branches/2.0/doubango/bindings/_common/ProxyProducer.cxx
@@ -361,7 +361,12 @@ typedef struct twrap_producer_proxy_video_s
int rotation;
uint64_t id;
tsk_bool_t started;
+#if 0
+ // https://code.google.com/p/doubango/issues/detail?id=416
+ // The lock on the producer is useless because all tinyDAV proxied functions (push(), stop(), prepare()...) are already thread safe.
+ // Locking the the push method while tinDAV locks the stop() function produce a deadlock on Android devices with slow video producer implementaions (e.g. Hovis Box v1)
TSK_DECLARE_SAFEOBJ;
+#endif
}
twrap_producer_proxy_video_t;
#define TWRAP_PRODUCER_PROXY_VIDEO(self) ((twrap_producer_proxy_video_t*)(self))
@@ -394,10 +399,8 @@ int twrap_producer_proxy_video_start(tmedia_producer_t* self)
if((manager = ProxyPluginMgr::getInstance())){
const ProxyVideoProducer* videoProducer;
if((videoProducer = manager->findVideoProducer(TWRAP_PRODUCER_PROXY_VIDEO(self)->id)) && videoProducer->getCallback()){
- tsk_safeobj_lock(TWRAP_PRODUCER_PROXY_VIDEO(self));
ret = videoProducer->getCallback()->start();
TWRAP_PRODUCER_PROXY_VIDEO(self)->started = (ret == 0);
- tsk_safeobj_unlock(TWRAP_PRODUCER_PROXY_VIDEO(self));
}
}
@@ -411,9 +414,7 @@ int twrap_producer_proxy_video_pause(tmedia_producer_t* self)
if((manager = ProxyPluginMgr::getInstance())){
const ProxyVideoProducer* videoProducer;
if((videoProducer = manager->findVideoProducer(TWRAP_PRODUCER_PROXY_VIDEO(self)->id)) && videoProducer->getCallback()){
- tsk_safeobj_lock(TWRAP_PRODUCER_PROXY_VIDEO(self));
ret = videoProducer->getCallback()->pause();
- tsk_safeobj_unlock(TWRAP_PRODUCER_PROXY_VIDEO(self));
}
}
@@ -427,10 +428,8 @@ int twrap_producer_proxy_video_stop(tmedia_producer_t* self)
if((manager = ProxyPluginMgr::getInstance())){
const ProxyVideoProducer* videoProducer;
if((videoProducer = manager->findVideoProducer(TWRAP_PRODUCER_PROXY_VIDEO(self)->id)) && videoProducer->getCallback()){
- tsk_safeobj_lock(TWRAP_PRODUCER_PROXY_VIDEO(self));
ret = videoProducer->getCallback()->stop();
TWRAP_PRODUCER_PROXY_VIDEO(self)->started = ((ret == 0) ? tsk_false : tsk_true);
- tsk_safeobj_unlock(TWRAP_PRODUCER_PROXY_VIDEO(self));
}
}
@@ -449,7 +448,6 @@ static tsk_object_t* twrap_producer_proxy_video_ctor(tsk_object_t * self, va_lis
/* init base */
tmedia_producer_init(TMEDIA_PRODUCER(producer));
/* init self */
- tsk_safeobj_init(producer);
/* Add the plugin to the manager */
ProxyPluginMgr* manager = ProxyPluginMgr::getInstance();
@@ -483,7 +481,6 @@ static tsk_object_t* twrap_producer_proxy_video_dtor(tsk_object_t * self)
manager->getCallback()->OnPluginDestroyed(producer->id, twrap_proxy_plugin_video_producer);
manager->removePlugin(producer->id);
}
- tsk_safeobj_deinit(producer);
}
return self;
@@ -561,13 +558,11 @@ bool ProxyVideoProducer::setActualCameraOutputSize(unsigned nWidth, unsigned nHe
// encode() then send()
int ProxyVideoProducer::push(const void* pBuffer, unsigned nSize)
{
- if(m_pWrappedPlugin && TMEDIA_PRODUCER(m_pWrappedPlugin)->enc_cb.callback){
+ if (m_pWrappedPlugin && TMEDIA_PRODUCER(m_pWrappedPlugin)->enc_cb.callback) {
int ret = -1;
- tsk_safeobj_lock(m_pWrappedPlugin);
- if(m_pWrappedPlugin->started){
+ if (m_pWrappedPlugin->started) {
ret = TMEDIA_PRODUCER(m_pWrappedPlugin)->enc_cb.callback(TMEDIA_PRODUCER(m_pWrappedPlugin)->enc_cb.callback_data, pBuffer, nSize);
}
- tsk_safeobj_unlock(m_pWrappedPlugin);
return ret;
}
return 0;
diff --git a/branches/2.0/doubango/tinyHTTP/tinyHTTP.vcproj b/branches/2.0/doubango/tinyHTTP/tinyHTTP.vcproj
index 30e55718..08674652 100644
--- a/branches/2.0/doubango/tinyHTTP/tinyHTTP.vcproj
+++ b/branches/2.0/doubango/tinyHTTP/tinyHTTP.vcproj
@@ -1,7 +1,7 @@