11abddd9f6225298066094e20a6c29061b6af4590Nick Chalko/* 21abddd9f6225298066094e20a6c29061b6af4590Nick Chalko * Copyright (C) 2015 The Android Open Source Project 31abddd9f6225298066094e20a6c29061b6af4590Nick Chalko * 41abddd9f6225298066094e20a6c29061b6af4590Nick Chalko * Licensed under the Apache License, Version 2.0 (the "License"); 51abddd9f6225298066094e20a6c29061b6af4590Nick Chalko * you may not use this file except in compliance with the License. 61abddd9f6225298066094e20a6c29061b6af4590Nick Chalko * You may obtain a copy of the License at 71abddd9f6225298066094e20a6c29061b6af4590Nick Chalko * 81abddd9f6225298066094e20a6c29061b6af4590Nick Chalko * http://www.apache.org/licenses/LICENSE-2.0 91abddd9f6225298066094e20a6c29061b6af4590Nick Chalko * 101abddd9f6225298066094e20a6c29061b6af4590Nick Chalko * Unless required by applicable law or agreed to in writing, software 111abddd9f6225298066094e20a6c29061b6af4590Nick Chalko * distributed under the License is distributed on an "AS IS" BASIS, 121abddd9f6225298066094e20a6c29061b6af4590Nick Chalko * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131abddd9f6225298066094e20a6c29061b6af4590Nick Chalko * See the License for the specific language governing permissions and 141abddd9f6225298066094e20a6c29061b6af4590Nick Chalko * limitations under the License. 151abddd9f6225298066094e20a6c29061b6af4590Nick Chalko */ 161abddd9f6225298066094e20a6c29061b6af4590Nick Chalko 1748dadb49248271b01997862e1335912a4f2e189fYoungsang Chopackage com.android.usbtuner.exoplayer.cache; 181abddd9f6225298066094e20a6c29061b6af4590Nick Chalko 191abddd9f6225298066094e20a6c29061b6af4590Nick Chalkoimport com.google.android.exoplayer.SampleHolder; 201abddd9f6225298066094e20a6c29061b6af4590Nick Chalkoimport com.google.android.exoplayer.SampleSource; 211abddd9f6225298066094e20a6c29061b6af4590Nick Chalko 221abddd9f6225298066094e20a6c29061b6af4590Nick Chalkoimport java.util.LinkedList; 231abddd9f6225298066094e20a6c29061b6af4590Nick Chalko 241abddd9f6225298066094e20a6c29061b6af4590Nick Chalko/** 251abddd9f6225298066094e20a6c29061b6af4590Nick Chalko * A sample queue which reads from the cache and passes to player pipeline. 261abddd9f6225298066094e20a6c29061b6af4590Nick Chalko */ 271abddd9f6225298066094e20a6c29061b6af4590Nick Chalkopublic class SampleQueue { 281abddd9f6225298066094e20a6c29061b6af4590Nick Chalko private final LinkedList<SampleHolder> mQueue = new LinkedList<>(); 291abddd9f6225298066094e20a6c29061b6af4590Nick Chalko private final SamplePool mSamplePool; 301abddd9f6225298066094e20a6c29061b6af4590Nick Chalko 311abddd9f6225298066094e20a6c29061b6af4590Nick Chalko public SampleQueue(SamplePool samplePool) { 321abddd9f6225298066094e20a6c29061b6af4590Nick Chalko mSamplePool = samplePool; 331abddd9f6225298066094e20a6c29061b6af4590Nick Chalko } 341abddd9f6225298066094e20a6c29061b6af4590Nick Chalko 351abddd9f6225298066094e20a6c29061b6af4590Nick Chalko public void queueSample(SampleHolder sample) { 361abddd9f6225298066094e20a6c29061b6af4590Nick Chalko mQueue.offer(sample); 371abddd9f6225298066094e20a6c29061b6af4590Nick Chalko } 381abddd9f6225298066094e20a6c29061b6af4590Nick Chalko 391abddd9f6225298066094e20a6c29061b6af4590Nick Chalko public int dequeueSample(SampleHolder sample) { 401abddd9f6225298066094e20a6c29061b6af4590Nick Chalko SampleHolder sampleFromQueue = mQueue.poll(); 411abddd9f6225298066094e20a6c29061b6af4590Nick Chalko if (sampleFromQueue == null) { 421abddd9f6225298066094e20a6c29061b6af4590Nick Chalko return SampleSource.NOTHING_READ; 431abddd9f6225298066094e20a6c29061b6af4590Nick Chalko } 441abddd9f6225298066094e20a6c29061b6af4590Nick Chalko sample.size = sampleFromQueue.size; 451abddd9f6225298066094e20a6c29061b6af4590Nick Chalko sample.flags = sampleFromQueue.flags; 461abddd9f6225298066094e20a6c29061b6af4590Nick Chalko sample.timeUs = sampleFromQueue.timeUs; 471abddd9f6225298066094e20a6c29061b6af4590Nick Chalko sample.clearData(); 481abddd9f6225298066094e20a6c29061b6af4590Nick Chalko sampleFromQueue.data.position(0).limit(sample.size); 491abddd9f6225298066094e20a6c29061b6af4590Nick Chalko sample.data.put(sampleFromQueue.data); 501abddd9f6225298066094e20a6c29061b6af4590Nick Chalko mSamplePool.releaseSample(sampleFromQueue); 511abddd9f6225298066094e20a6c29061b6af4590Nick Chalko return SampleSource.SAMPLE_READ; 521abddd9f6225298066094e20a6c29061b6af4590Nick Chalko } 531abddd9f6225298066094e20a6c29061b6af4590Nick Chalko 541abddd9f6225298066094e20a6c29061b6af4590Nick Chalko public void clear() { 551abddd9f6225298066094e20a6c29061b6af4590Nick Chalko while (!mQueue.isEmpty()) { 561abddd9f6225298066094e20a6c29061b6af4590Nick Chalko mSamplePool.releaseSample(mQueue.poll()); 571abddd9f6225298066094e20a6c29061b6af4590Nick Chalko } 581abddd9f6225298066094e20a6c29061b6af4590Nick Chalko } 591abddd9f6225298066094e20a6c29061b6af4590Nick Chalko 60ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko public Long getEndPositionUs() { 611abddd9f6225298066094e20a6c29061b6af4590Nick Chalko if (mQueue.isEmpty()) { 621abddd9f6225298066094e20a6c29061b6af4590Nick Chalko return null; 631abddd9f6225298066094e20a6c29061b6af4590Nick Chalko } 64ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko return mQueue.getLast().timeUs; 651abddd9f6225298066094e20a6c29061b6af4590Nick Chalko } 661abddd9f6225298066094e20a6c29061b6af4590Nick Chalko 67ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko public boolean isDurationGreaterThan(long durationUs) { 681abddd9f6225298066094e20a6c29061b6af4590Nick Chalko if (mQueue.isEmpty()) { 69ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko return false; 701abddd9f6225298066094e20a6c29061b6af4590Nick Chalko } 71ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko return mQueue.getLast().timeUs - mQueue.getFirst().timeUs > durationUs; 721abddd9f6225298066094e20a6c29061b6af4590Nick Chalko } 731abddd9f6225298066094e20a6c29061b6af4590Nick Chalko 741abddd9f6225298066094e20a6c29061b6af4590Nick Chalko public boolean isEmpty() { 751abddd9f6225298066094e20a6c29061b6af4590Nick Chalko return mQueue.isEmpty(); 761abddd9f6225298066094e20a6c29061b6af4590Nick Chalko } 771abddd9f6225298066094e20a6c29061b6af4590Nick Chalko} 78