|
Packit |
5e46da |
/*
|
|
Packit |
5e46da |
* This file is part of libbluray
|
|
Packit |
5e46da |
* Copyright (C) 2010 VideoLAN
|
|
Packit |
5e46da |
*
|
|
Packit |
5e46da |
* This library is free software; you can redistribute it and/or
|
|
Packit |
5e46da |
* modify it under the terms of the GNU Lesser General Public
|
|
Packit |
5e46da |
* License as published by the Free Software Foundation; either
|
|
Packit |
5e46da |
* version 2.1 of the License, or (at your option) any later version.
|
|
Packit |
5e46da |
*
|
|
Packit |
5e46da |
* This library is distributed in the hope that it will be useful,
|
|
Packit |
5e46da |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
5e46da |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
5e46da |
* Lesser General Public License for more details.
|
|
Packit |
5e46da |
*
|
|
Packit |
5e46da |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
5e46da |
* License along with this library. If not, see
|
|
Packit |
5e46da |
* <http://www.gnu.org/licenses/>.
|
|
Packit |
5e46da |
*/
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
#if HAVE_CONFIG_H
|
|
Packit |
5e46da |
#include "config.h"
|
|
Packit |
5e46da |
#endif
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
#include "time.h"
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
#include <stdint.h>
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
#if defined(_WIN32)
|
|
Packit |
5e46da |
# include <windows.h>
|
|
Packit |
5e46da |
#elif defined(HAVE_SYS_TIME_H)
|
|
Packit |
5e46da |
# include <sys/time.h>
|
|
Packit |
5e46da |
#else
|
|
Packit |
5e46da |
# error no time support found
|
|
Packit |
5e46da |
#endif
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
#if defined(_WIN32)
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
static uint64_t _bd_get_scr_impl(void)
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
HANDLE thread;
|
|
Packit |
5e46da |
DWORD_PTR mask;
|
|
Packit |
5e46da |
LARGE_INTEGER frequency, counter;
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
thread = GetCurrentThread();
|
|
Packit |
5e46da |
mask = SetThreadAffinityMask(thread, 1);
|
|
Packit |
5e46da |
QueryPerformanceFrequency(&frequency);
|
|
Packit |
5e46da |
QueryPerformanceCounter(&counter);
|
|
Packit |
5e46da |
SetThreadAffinityMask(thread, mask);
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
return (uint64_t)(counter.QuadPart * 1000.0 / frequency.QuadPart) * 90;
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
#elif defined(HAVE_SYS_TIME_H)
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
static uint64_t _bd_get_scr_impl(void)
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
struct timeval tv;
|
|
Packit |
5e46da |
gettimeofday(&tv, 0);
|
|
Packit |
5e46da |
return ((uint64_t)tv.tv_sec * 1000 + tv.tv_usec / 1000) * 90;
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
#endif
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
uint64_t bd_get_scr(void)
|
|
Packit |
5e46da |
{
|
|
Packit |
5e46da |
static uint64_t t0 = (uint64_t)-1;
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
uint64_t now = _bd_get_scr_impl();
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
if (t0 > now) {
|
|
Packit |
5e46da |
t0 = now;
|
|
Packit |
5e46da |
}
|
|
Packit |
5e46da |
|
|
Packit |
5e46da |
return now - t0;
|
|
Packit |
5e46da |
}
|