
Recherche avancée
Autres articles (49)
-
Gestion générale des documents
13 mai 2011, parMédiaSPIP ne modifie jamais le document original mis en ligne.
Pour chaque document mis en ligne il effectue deux opérations successives : la création d’une version supplémentaire qui peut être facilement consultée en ligne tout en laissant l’original téléchargeable dans le cas où le document original ne peut être lu dans un navigateur Internet ; la récupération des métadonnées du document original pour illustrer textuellement le fichier ;
Les tableaux ci-dessous expliquent ce que peut faire MédiaSPIP (...) -
Emballe Médias : Mettre en ligne simplement des documents
29 octobre 2010, parLe plugin emballe médias a été développé principalement pour la distribution mediaSPIP mais est également utilisé dans d’autres projets proches comme géodiversité par exemple. Plugins nécessaires et compatibles
Pour fonctionner ce plugin nécessite que d’autres plugins soient installés : CFG Saisies SPIP Bonux Diogène swfupload jqueryui
D’autres plugins peuvent être utilisés en complément afin d’améliorer ses capacités : Ancres douces Légendes photo_infos spipmotion (...) -
Prérequis à l’installation
31 janvier 2010, parPréambule
Cet article n’a pas pour but de détailler les installations de ces logiciels mais plutôt de donner des informations sur leur configuration spécifique.
Avant toute chose SPIPMotion tout comme MediaSPIP est fait pour tourner sur des distributions Linux de type Debian ou dérivées (Ubuntu...). Les documentations de ce site se réfèrent donc à ces distributions. Il est également possible de l’utiliser sur d’autres distributions Linux mais aucune garantie de bon fonctionnement n’est possible.
Il (...)
Sur d’autres sites (6479)
-
Can't lock std::mutex again
16 juillet 2017, par user3567631Sorry for poor English.
I referenced this FFMPEG to make ffmpeg decoder.
Theopen
will block, I make it run in detach thread.
I added std::unique_lock to lock mutex in beginning ofopen
.bool FFmpegWrapper::open(std::string strFileName)
{
std::unique_lock lock(g_Mutex, std::try_to_lock);
m_pFormatContext = avformat_alloc_context();
m_pFormatContext->probesize = 4 * 1024 *100;
m_pFormatContext->max_analyze_duration = 0 * AV_TIME_BASE;
if (avformat_open_input(&m_pFormatContext, strFileName.c_str(), nullptr, nullptr) != 0)
return false;
if (avformat_find_stream_info(m_pFormatContext, NULL) < 0)
return false;
m_iVideoStream = m_iAudioStream = -1;
for (unsigned int i = 0; i < m_pFormatContext->nb_streams; i++)
{
if ((m_iVideoStream < 0) && (m_pFormatContext->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO))
{
m_iVideoStream = i;
}
else if ((m_iAudioStream < 0) && (m_pFormatContext->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO))
{
m_iAudioStream = i;
}
}
if (!(hasVideo() || hasAudio()))
return false; // Didn't find video or audio stream
if (hasVideo())
{
if (!openVideoStream())
return false;
}
if (hasAudio())
{
if (!openAudioStream())
return false;
}
retrieveFileInfo();
m_bIsFileOpen = true;
m_strFileName = strFileName;
if (isImage())
{
m_dDurationInMs = 0;
m_dFps = 0;
m_lCurrentFrameNumber = 1;
decodeImage();
}
m_bIsThreadRunning = false;
if (m_bIsFileOpen)
CCLOG("FFmpeg open stream succeed");
else
CCLOG("FFmpeg open stream failed");
m_iState = eOpened;
return m_bIsFileOpen;
}and added unique_lock in
close
beginning like this.void FFmpegWrapper::close()
{
std::unique_lock lock(g_Mutex, std::try_to_lock);
while (!lock.owns_lock())
{
lock.try_lock()
}
stop();
if (m_pVideoBuffer != nullptr)
{
delete m_pVideoBuffer;
m_pVideoBuffer = nullptr;
}
if (m_pVideoFrameRGB != nullptr)
{
av_free(m_pVideoFrameRGB);
m_pVideoFrameRGB = nullptr;
}
if (m_pVideoFrame != nullptr)
{
av_free(m_pVideoFrame);
m_pVideoFrame = nullptr;
}
if (m_pAudioFrame != nullptr)
{
av_free(m_pAudioFrame);
m_pAudioFrame = nullptr;
}
if (m_pSwScalingContext != nullptr)
{
sws_freeContext(m_pSwScalingContext);
m_pSwScalingContext = nullptr;
}
if (m_pVideoCodecContext != nullptr)
{
avcodec_close(m_pVideoCodecContext);
m_pVideoCodecContext = nullptr;
}
if (m_pAudioCodecContext != nullptr)
{
avcodec_close(m_pAudioCodecContext);
m_pAudioCodecContext = nullptr;
}
if (m_pFormatContext != nullptr)
{
avformat_free_context(m_pFormatContext);
m_pFormatContext = nullptr;
}
if(m_pSwr != nullptr)
swr_free(&m_pSwr);
CCLOG("CLOSE DONE");
}When
open
is still running ,I want lock mutex again inclose
in main thread.
it failed to get mutex ownership it is no problem. But even while loop waited the open() done, try_lock still can’t get the mutex ownership.I thought unique_lock out of scope will unlock mutex ,but it didn’t. I want to know how can I lock the mutex correctly.Thank you ! -
Failed to obtain lock for new video threads [closed]
31 août 2023, par taha zahidWe are facing issue with a software which uses ffmpeg for conversion to h264


During a routine test for multiple camera for video loss on the software for more that 2 minutes


We get below message
"Failed to obtain lock for new video thread"


Since i am not into software developement i need to understand how we can optimise this so that this application can minimise cpu usage to 50% and or less but still no compromise on h264 quality during streaming and also recover video without any error during a failover test


Since i am not into software i could not test anything


-
Revision 5671 : Un lock sur les champs readonly +des couleurs différentes
9 août 2011, par kent1 — LogUn lock sur les champs readonly +des couleurs différentes