EngineParameters.java revision 0bd6ec5bc06b869131ee0facf38ff02f81f65c10
1b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson/* 2b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * Copyright (C) 2011 The Android Open Source Project 3b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * 4b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * Licensed under the Apache License, Version 2.0 (the "License"); 5b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * you may not use this file except in compliance with the License. 6b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * You may obtain a copy of the License at 7b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * 8b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * http://www.apache.org/licenses/LICENSE-2.0 9b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * 10b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * Unless required by applicable law or agreed to in writing, software 11b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * distributed under the License is distributed on an "AS IS" BASIS, 12b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * See the License for the specific language governing permissions and 14b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * limitations under the License. 15b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson */ 16b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 17b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudsonpackage com.android.ex.variablespeed; 18b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 19b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudsonimport javax.annotation.concurrent.Immutable; 20b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudsonimport javax.annotation.concurrent.NotThreadSafe; 21b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 22b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson/** 23b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * Encapsulates the parameters required to configure the audio engine. 24b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * <p> 25b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * You should not need to use this class directly, it exists for the benefit of 26b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * this package and the classes contained therein. 27b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson */ 28b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson@Immutable 29b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson/*package*/ final class EngineParameters { 30b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson private final int mTargetFrames; 31b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson private final int mMaxPlayBufferCount; 32b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson private final float mWindowDuration; 33b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson private final float mWindowOverlapDuration; 34b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson private final float mInitialRate; 35b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson private final int mDecodeBufferInitialSize; 36b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson private final int mDecodeBufferMaxSize; 37b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson private final int mStartPositionMillis; 38b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 39b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public int getTargetFrames() { 40b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson return mTargetFrames; 41b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 42b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 43b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public int getMaxPlayBufferCount() { 44b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson return mMaxPlayBufferCount; 45b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 46b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 47b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public float getWindowDuration() { 48b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson return mWindowDuration; 49b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 50b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 51b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public float getWindowOverlapDuration() { 52b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson return mWindowOverlapDuration; 53b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 54b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 55b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public float getInitialRate() { 56b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson return mInitialRate; 57b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 58b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 59b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public int getDecodeBufferInitialSize() { 60b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson return mDecodeBufferInitialSize; 61b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 62b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 63b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public int getDecodeBufferMaxSize() { 64b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson return mDecodeBufferMaxSize; 65b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 66b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 67b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public int getStartPositionMillis() { 68b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson return mStartPositionMillis; 69b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 70b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 710bd6ec5bc06b869131ee0facf38ff02f81f65c10Hugo Hudson private EngineParameters(int targetFrames, int maxPlayBufferCount, float windowDuration, 720bd6ec5bc06b869131ee0facf38ff02f81f65c10Hugo Hudson float windowOverlapDuration, float initialRate, int decodeBufferInitialSize, 730bd6ec5bc06b869131ee0facf38ff02f81f65c10Hugo Hudson int decodeBufferMaxSize, int startPositionMillis) { 74b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson mTargetFrames = targetFrames; 75b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson mMaxPlayBufferCount = maxPlayBufferCount; 76b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson mWindowDuration = windowDuration; 77b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson mWindowOverlapDuration = windowOverlapDuration; 78b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson mInitialRate = initialRate; 79b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson mDecodeBufferInitialSize = decodeBufferInitialSize; 80b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson mDecodeBufferMaxSize = decodeBufferMaxSize; 81b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson mStartPositionMillis = startPositionMillis; 82b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 83b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 84b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson /** 85b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * We use the builder pattern to construct an {@link EngineParameters} 86b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * object. 87b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * <p> 88b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * This class is not thread safe, you should confine its use to one thread 89b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson * or provide your own synchronization. 90b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson */ 91b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson @NotThreadSafe 92b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public static class Builder { 93b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson private int mTargetFrames = 1000; 94b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson private int mMaxPlayBufferCount = 2; 95b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson private float mWindowDuration = 0.08f; 96b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson private float mWindowOverlapDuration = 0.008f; 97b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson private float mInitialRate = 1.0f; 98b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson private int mDecodeBufferInitialSize = 5 * 1024; 99b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson private int mDecodeBufferMaxSize = 20 * 1024; 100b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson private int mStartPositionMillis = 0; 101b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 102b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public EngineParameters build() { 1030bd6ec5bc06b869131ee0facf38ff02f81f65c10Hugo Hudson return new EngineParameters(mTargetFrames, mMaxPlayBufferCount, 104b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson mWindowDuration, mWindowOverlapDuration, mInitialRate, 105b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson mDecodeBufferInitialSize, mDecodeBufferMaxSize, mStartPositionMillis); 106b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 107b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 108b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public Builder maxPlayBufferCount(int maxPlayBufferCount) { 109b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson mMaxPlayBufferCount = maxPlayBufferCount; 110b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson return this; 111b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 112b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 113b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public Builder windowDuration(int windowDuration) { 114b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson mWindowDuration = windowDuration; 115b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson return this; 116b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 117b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 118b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public Builder windowOverlapDuration(int windowOverlapDuration) { 119b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson mWindowOverlapDuration = windowOverlapDuration; 120b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson return this; 121b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 122b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 123b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public Builder initialRate(float initialRate) { 124b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson mInitialRate = initialRate; 125b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson return this; 126b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 127b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 128b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public Builder decodeBufferInitialSize(int decodeBufferInitialSize) { 129b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson mDecodeBufferInitialSize = decodeBufferInitialSize; 130b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson return this; 131b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 132b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 133b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public Builder decodeBufferMaxSize(int decodeBufferMaxSize) { 134b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson mDecodeBufferMaxSize = decodeBufferMaxSize; 135b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson return this; 136b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 137b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson 138b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson public Builder startPositionMillis(int startPositionMillis) { 139b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson mStartPositionMillis = startPositionMillis; 140b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson return this; 141b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 142b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson } 143b83ad73794088498d6d38cd3b4fc9311f505d051Hugo Hudson} 144