blob: 4732eea1231dacca56c9c98997844908cf98342e [file] [log] [blame]
/*
* Copyright (C) 2015 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.usbtuner.tvinput;
import android.os.SystemClock;
import android.util.Log;
/**
* A class to maintain various debugging information.
*/
public class UsbTunerDebug {
private static final String TAG = "UsbTunerDebug";
public static final boolean ENABLED = false;
private int mVideoFrameDrop;
private int mBytesInQueue;
private long mAudioPositionUs;
private long mAudioPtsUs;
private long mVideoPtsUs;
private long mLastAudioPositionUs;
private long mLastAudioPtsUs;
private long mLastVideoPtsUs;
private long mLastCheckTimestampMs;
private long mAudioPositionUsRate;
private long mAudioPtsUsRate;
private long mVideoPtsUsRate;
private UsbTunerDebug() {
mVideoFrameDrop = 0;
mLastCheckTimestampMs = SystemClock.elapsedRealtime();
}
private static class LazyHolder {
private static final UsbTunerDebug INSTANCE = new UsbTunerDebug();
}
public static UsbTunerDebug getInstance() {
return LazyHolder.INSTANCE;
}
public static void notifyVideoFrameDrop(long delta) {
// TODO: provide timestamp mismatch information using delta
UsbTunerDebug sUsbTunerDebug = getInstance();
sUsbTunerDebug.mVideoFrameDrop++;
}
public static int getVideoFrameDrop() {
UsbTunerDebug sUsbTunerDebug = getInstance();
int videoFrameDrop = sUsbTunerDebug.mVideoFrameDrop;
if (videoFrameDrop > 0) {
Log.d(TAG, "Dropped video frame: " + videoFrameDrop);
}
sUsbTunerDebug.mVideoFrameDrop = 0;
return videoFrameDrop;
}
public static void setBytesInQueue(int bytesInQueue) {
UsbTunerDebug sUsbTunerDebug = getInstance();
sUsbTunerDebug.mBytesInQueue = bytesInQueue;
}
public static int getBytesInQueue() {
UsbTunerDebug sUsbTunerDebug = getInstance();
return sUsbTunerDebug.mBytesInQueue;
}
public static void setAudioPositionUs(long audioPositionUs) {
UsbTunerDebug sUsbTunerDebug = getInstance();
sUsbTunerDebug.mAudioPositionUs = audioPositionUs;
}
public static long getAudioPositionUs() {
UsbTunerDebug sUsbTunerDebug = getInstance();
return sUsbTunerDebug.mAudioPositionUs;
}
public static void setAudioPtsUs(long audioPtsUs) {
UsbTunerDebug sUsbTunerDebug = getInstance();
sUsbTunerDebug.mAudioPtsUs = audioPtsUs;
}
public static long getAudioPtsUs() {
UsbTunerDebug sUsbTunerDebug = getInstance();
return sUsbTunerDebug.mAudioPtsUs;
}
public static void setVideoPtsUs(long videoPtsUs) {
UsbTunerDebug sUsbTunerDebug = getInstance();
sUsbTunerDebug.mVideoPtsUs = videoPtsUs;
}
public static long getVideoPtsUs() {
UsbTunerDebug sUsbTunerDebug = getInstance();
return sUsbTunerDebug.mVideoPtsUs;
}
public static void calculateDiff() {
UsbTunerDebug sUsbTunerDebug = getInstance();
long currentTime = SystemClock.elapsedRealtime();
long duration = currentTime - sUsbTunerDebug.mLastCheckTimestampMs;
if (duration != 0) {
sUsbTunerDebug.mAudioPositionUsRate =
(sUsbTunerDebug.mAudioPositionUs - sUsbTunerDebug.mLastAudioPositionUs) * 1000
/ duration;
sUsbTunerDebug.mAudioPtsUsRate =
(sUsbTunerDebug.mAudioPtsUs - sUsbTunerDebug.mLastAudioPtsUs) * 1000
/ duration;
sUsbTunerDebug.mVideoPtsUsRate =
(sUsbTunerDebug.mVideoPtsUs - sUsbTunerDebug.mLastVideoPtsUs) * 1000
/ duration;
}
sUsbTunerDebug.mLastAudioPositionUs = sUsbTunerDebug.mAudioPositionUs;
sUsbTunerDebug.mLastAudioPtsUs = sUsbTunerDebug.mAudioPtsUs;
sUsbTunerDebug.mLastVideoPtsUs = sUsbTunerDebug.mVideoPtsUs;
sUsbTunerDebug.mLastCheckTimestampMs = currentTime;
}
public static long getAudioPositionUsRate() {
UsbTunerDebug sUsbTunerDebug = getInstance();
return sUsbTunerDebug.mAudioPositionUsRate;
}
public static long getAudioPtsUsRate() {
UsbTunerDebug sUsbTunerDebug = getInstance();
return sUsbTunerDebug.mAudioPtsUsRate;
}
public static long getVideoPtsUsRate() {
UsbTunerDebug sUsbTunerDebug = getInstance();
return sUsbTunerDebug.mVideoPtsUsRate;
}
}