1f933441648ef6a71dee783d733aac17b9508b452Andreas Huber/* 2f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * Copyright (C) 2010 The Android Open Source Project 3f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * 4f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * you may not use this file except in compliance with the License. 6f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * You may obtain a copy of the License at 7f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * 8f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * 10f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * Unless required by applicable law or agreed to in writing, software 11f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * See the License for the specific language governing permissions and 14f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * limitations under the License. 15f933441648ef6a71dee783d733aac17b9508b452Andreas Huber */ 16f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 17f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#ifndef NUPLAYER_STREAM_LISTENER_H_ 18f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 19f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#define NUPLAYER_STREAM_LISTENER_H_ 20f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 21f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#include "NuPlayer.h" 22f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 23f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#include <media/IStreamSource.h> 24f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 25f933441648ef6a71dee783d733aac17b9508b452Andreas Hubernamespace android { 26f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 27f59c0bafebcd795b20141bf928a5cab8ac46e882Andy Hungclass MemoryDealer; 28f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 29f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstruct NuPlayer::NuPlayerStreamListener : public BnStreamListener { 30f933441648ef6a71dee783d733aac17b9508b452Andreas Huber NuPlayerStreamListener( 31f933441648ef6a71dee783d733aac17b9508b452Andreas Huber const sp<IStreamSource> &source, 321d15ab58bf8239069ef343de6cb21aabf3ef7d78Lajos Molnar const sp<AHandler> &targetHandler); 33f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 34f933441648ef6a71dee783d733aac17b9508b452Andreas Huber virtual void queueBuffer(size_t index, size_t size); 35f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 36f933441648ef6a71dee783d733aac17b9508b452Andreas Huber virtual void issueCommand( 37f933441648ef6a71dee783d733aac17b9508b452Andreas Huber Command cmd, bool synchronous, const sp<AMessage> &extra); 38f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 39f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void start(); 4032f3cefa373cd55e63deda36ca9d07c7fe22eaafAndreas Huber ssize_t read(void *data, size_t size, sp<AMessage> *extra); 41f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 42f933441648ef6a71dee783d733aac17b9508b452Andreas Huberprivate: 43f933441648ef6a71dee783d733aac17b9508b452Andreas Huber enum { 44dc7747d7da61a72b6d26dacf7569de9455d77474Glenn Kasten kNumBuffers = 8, 45dc7747d7da61a72b6d26dacf7569de9455d77474Glenn Kasten kBufferSize = 188 * 10 46f933441648ef6a71dee783d733aac17b9508b452Andreas Huber }; 47f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 48f933441648ef6a71dee783d733aac17b9508b452Andreas Huber struct QueueEntry { 49f933441648ef6a71dee783d733aac17b9508b452Andreas Huber bool mIsCommand; 50f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 51f933441648ef6a71dee783d733aac17b9508b452Andreas Huber size_t mIndex; 52f933441648ef6a71dee783d733aac17b9508b452Andreas Huber size_t mSize; 53f933441648ef6a71dee783d733aac17b9508b452Andreas Huber size_t mOffset; 54f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 55f933441648ef6a71dee783d733aac17b9508b452Andreas Huber Command mCommand; 56f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<AMessage> mExtra; 57f933441648ef6a71dee783d733aac17b9508b452Andreas Huber }; 58f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 59f933441648ef6a71dee783d733aac17b9508b452Andreas Huber Mutex mLock; 60f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 61f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<IStreamSource> mSource; 621d15ab58bf8239069ef343de6cb21aabf3ef7d78Lajos Molnar sp<AHandler> mTargetHandler; 63f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<MemoryDealer> mMemoryDealer; 64f933441648ef6a71dee783d733aac17b9508b452Andreas Huber Vector<sp<IMemory> > mBuffers; 65f933441648ef6a71dee783d733aac17b9508b452Andreas Huber List<QueueEntry> mQueue; 66f933441648ef6a71dee783d733aac17b9508b452Andreas Huber bool mEOS; 67f933441648ef6a71dee783d733aac17b9508b452Andreas Huber bool mSendDataNotification; 68f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 69f933441648ef6a71dee783d733aac17b9508b452Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(NuPlayerStreamListener); 70f933441648ef6a71dee783d733aac17b9508b452Andreas Huber}; 71f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 72f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} // namespace android 73f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 74f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#endif // NUPLAYER_STREAM_LISTENER_H_ 75