"README.md" did not exist on "0d7fbc1b591e71286f8fd642269b9ec708527281"
Select Git revision
make-client.py
-
Ming Rui Zhang authored
GitLab: #352 Change-Id: Ib373811c9d47164954a19633fd0da389eff5aac6
Ming Rui Zhang authoredGitLab: #352 Change-Id: Ib373811c9d47164954a19633fd0da389eff5aac6
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
libav_utils.cpp 4.08 KiB
/*
* Copyright (C) 2004-2017 Savoir-faire Linux Inc.
*
* Author: Tristan Matthews <tristan.matthews@savoirfairelinux.com>
* Author: Luca Barbato <lu_zero@gentoo.org>
* Author: Guillaume Roguez <Guillaume.Roguez@savoirfairelinux.com>
*
* 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 3 of the License, 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 this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "libav_deps.h" // MUST BE INCLUDED FIRST
#include "config.h"
#include "video/video_base.h"
#include "logger.h"
#include <vector>
#include <algorithm>
#include <string>
#include <iostream>
#include <thread>
#include <mutex>
#include <exception>
#include <ciso646> // fix windows compiler bug
namespace ring { namespace libav_utils {
// protect libav/ffmpeg access
static int
avcodecManageMutex(void **data, enum AVLockOp op)
{
auto mutex = reinterpret_cast<std::mutex**>(data);
int ret = 0;
switch (op) {
case AV_LOCK_CREATE:
try {
*mutex = new std::mutex;
} catch (const std::bad_alloc& e) {
return AVERROR(ENOMEM);
}
break;
case AV_LOCK_OBTAIN:
(*mutex)->lock();
break;
case AV_LOCK_RELEASE:
(*mutex)->unlock();
break;
case AV_LOCK_DESTROY:
delete *mutex;
*mutex = nullptr;
break;
default:
#ifdef AVERROR_BUG
return AVERROR_BUG;
#else
break;
#endif
}