aboutsummaryrefslogtreecommitdiff
path: root/tuner/src/com/android/tv/tuner/tvinput/TunerDebug.java
diff options
context:
space:
mode:
Diffstat (limited to 'tuner/src/com/android/tv/tuner/tvinput/TunerDebug.java')
-rw-r--r--tuner/src/com/android/tv/tuner/tvinput/TunerDebug.java147
1 files changed, 147 insertions, 0 deletions
diff --git a/tuner/src/com/android/tv/tuner/tvinput/TunerDebug.java b/tuner/src/com/android/tv/tuner/tvinput/TunerDebug.java
new file mode 100644
index 00000000..1df0b5c3
--- /dev/null
+++ b/tuner/src/com/android/tv/tuner/tvinput/TunerDebug.java
@@ -0,0 +1,147 @@
+/*
+ * 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.tv.tuner.tvinput;
+
+import android.os.SystemClock;
+import android.util.Log;
+
+/** A class to maintain various debugging information. */
+public class TunerDebug {
+ private static final String TAG = "TunerDebug";
+ 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 TunerDebug() {
+ mVideoFrameDrop = 0;
+ mLastCheckTimestampMs = SystemClock.elapsedRealtime();
+ }
+
+ private static class LazyHolder {
+ private static final TunerDebug INSTANCE = new TunerDebug();
+ }
+
+ public static TunerDebug getInstance() {
+ return LazyHolder.INSTANCE;
+ }
+
+ public static void notifyVideoFrameDrop(int count, long delta) {
+ // TODO: provide timestamp mismatch information using delta
+ TunerDebug sTunerDebug = getInstance();
+ sTunerDebug.mVideoFrameDrop += count;
+ }
+
+ public static int getVideoFrameDrop() {
+ TunerDebug sTunerDebug = getInstance();
+ int videoFrameDrop = sTunerDebug.mVideoFrameDrop;
+ if (videoFrameDrop > 0) {
+ Log.d(TAG, "Dropped video frame: " + videoFrameDrop);
+ }
+ sTunerDebug.mVideoFrameDrop = 0;
+ return videoFrameDrop;
+ }
+
+ public static void setBytesInQueue(int bytesInQueue) {
+ TunerDebug sTunerDebug = getInstance();
+ sTunerDebug.mBytesInQueue = bytesInQueue;
+ }
+
+ public static int getBytesInQueue() {
+ TunerDebug sTunerDebug = getInstance();
+ return sTunerDebug.mBytesInQueue;
+ }
+
+ public static void setAudioPositionUs(long audioPositionUs) {
+ TunerDebug sTunerDebug = getInstance();
+ sTunerDebug.mAudioPositionUs = audioPositionUs;
+ }
+
+ public static long getAudioPositionUs() {
+ TunerDebug sTunerDebug = getInstance();
+ return sTunerDebug.mAudioPositionUs;
+ }
+
+ public static void setAudioPtsUs(long audioPtsUs) {
+ TunerDebug sTunerDebug = getInstance();
+ sTunerDebug.mAudioPtsUs = audioPtsUs;
+ }
+
+ public static long getAudioPtsUs() {
+ TunerDebug sTunerDebug = getInstance();
+ return sTunerDebug.mAudioPtsUs;
+ }
+
+ public static void setVideoPtsUs(long videoPtsUs) {
+ TunerDebug sTunerDebug = getInstance();
+ sTunerDebug.mVideoPtsUs = videoPtsUs;
+ }
+
+ public static long getVideoPtsUs() {
+ TunerDebug sTunerDebug = getInstance();
+ return sTunerDebug.mVideoPtsUs;
+ }
+
+ public static void calculateDiff() {
+ TunerDebug sTunerDebug = getInstance();
+ long currentTime = SystemClock.elapsedRealtime();
+ long duration = currentTime - sTunerDebug.mLastCheckTimestampMs;
+ if (duration != 0) {
+ sTunerDebug.mAudioPositionUsRate =
+ (sTunerDebug.mAudioPositionUs - sTunerDebug.mLastAudioPositionUs)
+ * 1000
+ / duration;
+ sTunerDebug.mAudioPtsUsRate =
+ (sTunerDebug.mAudioPtsUs - sTunerDebug.mLastAudioPtsUs) * 1000 / duration;
+ sTunerDebug.mVideoPtsUsRate =
+ (sTunerDebug.mVideoPtsUs - sTunerDebug.mLastVideoPtsUs) * 1000 / duration;
+ }
+
+ sTunerDebug.mLastAudioPositionUs = sTunerDebug.mAudioPositionUs;
+ sTunerDebug.mLastAudioPtsUs = sTunerDebug.mAudioPtsUs;
+ sTunerDebug.mLastVideoPtsUs = sTunerDebug.mVideoPtsUs;
+ sTunerDebug.mLastCheckTimestampMs = currentTime;
+ }
+
+ public static long getAudioPositionUsRate() {
+ TunerDebug sTunerDebug = getInstance();
+ return sTunerDebug.mAudioPositionUsRate;
+ }
+
+ public static long getAudioPtsUsRate() {
+ TunerDebug sTunerDebug = getInstance();
+ return sTunerDebug.mAudioPtsUsRate;
+ }
+
+ public static long getVideoPtsUsRate() {
+ TunerDebug sTunerDebug = getInstance();
+ return sTunerDebug.mVideoPtsUsRate;
+ }
+}