Files
BPI-CM9-Linux/aml-comp/vendor/amlogic/aml_subtitleserver/libsubtitle/utils/AmlogicTime.c
T
2026-08-24 10:03:24 +08:00

105 lines
3.2 KiB
C

/***************************************************************************
* Copyright (C) 2014-2019 Amlogic, Inc. All rights reserved.
*
* All information contained herein is Amlogic confidential.
*
* This software is provided to you pursuant to Software License Agreement
* (SLA) with Amlogic Inc ("Amlogic"). This software may be used
* only in accordance with the terms of this agreement.
*
* Redistribution and use in source and binary forms, with or without
* modification is strictly prohibited without prior written permission from
* Amlogic.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* Description:
* Clock, time related functions
***************************************************************************/
#define LOG_TAG "AM_TIME"
#include "AmlogicTime.h"
#include <assert.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
#include <time.h>
#include <unistd.h>
#include "SubtitleLog.h"
/** Get the time from boot to current system running, in milliseconds
* clock returns the system running time
* - AM_SUCCESS Success
* - other values error code (see AmlogicTime.h)
*/
int AmlogicGetClock(int *clock) {
struct timespec ts;
int ms;
assert(clock);
clock_gettime(CLOCK_MONOTONIC, &ts);
ms = ts.tv_sec * 1000 + ts.tv_nsec / 1000000;
*clock = ms;
return AM_SUCCESS;
}
/** Get the time from boot to current system running, the format is struct timespec
* ts returns the current timespec value
* - AM_SUCCESS Success
* - other values error code (see AmlogicTime.h)
*/
int AmlogicGetTimeSpec(struct timespec *ts) {
assert(ts);
clock_gettime(CLOCK_MONOTONIC, ts);
return AM_SUCCESS;
}
/** Get the timespec value after a number of milliseconds
* This function is mainly used for pthread_cond_timedwait, sem_Functions such as timedwait
* calculate the timeout time. timeout timeout in milliseconds ts returns timespec value
* - AM_SUCCESS Success
* - other values error code (see AmlogicTime.h)
*/
int AmlogicGetTimeSpecTimeout(int timeout, struct timespec *ts) {
struct timespec ots;
int left, diff;
assert(ts);
clock_gettime(CLOCK_MONOTONIC, &ots);
ts->tv_sec = ots.tv_sec + timeout / 1000;
ts->tv_nsec = ots.tv_nsec;
left = timeout % 1000;
left *= 1000000;
diff = 1000000000 - ots.tv_nsec;
if (diff <= left) {
ts->tv_sec++;
ts->tv_nsec = left - diff;
} else {
ts->tv_nsec += left;
}
return AM_SUCCESS;
}