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
27f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstruct 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