NuPlayerStreamListener.h revision 32f3cefa373cd55e63deda36ca9d07c7fe22eaaf
10469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy/*
20469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy * Copyright (C) 2010 The Android Open Source Project
30469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy *
40469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy * Licensed under the Apache License, Version 2.0 (the "License");
50469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy * you may not use this file except in compliance with the License.
60469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy * You may obtain a copy of the License at
70469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy *
80469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy *      http://www.apache.org/licenses/LICENSE-2.0
90469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy *
100469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy * Unless required by applicable law or agreed to in writing, software
110469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy * distributed under the License is distributed on an "AS IS" BASIS,
120469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy * See the License for the specific language governing permissions and
140469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy * limitations under the License.
150469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy */
160469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy
170469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy#ifndef NUPLAYER_STREAM_LISTENER_H_
180469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy
190469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy#define NUPLAYER_STREAM_LISTENER_H_
200469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy
210469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy#include "NuPlayer.h"
220469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy
230469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy#include <media/IStreamSource.h>
240469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy
250469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamynamespace android {
260469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy
270469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamystruct MemoryDealer;
280469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy
290469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamystruct NuPlayer::NuPlayerStreamListener : public BnStreamListener {
300469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy    NuPlayerStreamListener(
310469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy            const sp<IStreamSource> &source,
320469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy            ALooper::handler_id targetID);
330469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy
340469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy    virtual void queueBuffer(size_t index, size_t size);
350469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy
360469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy    virtual void issueCommand(
370469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy            Command cmd, bool synchronous, const sp<AMessage> &extra);
380469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy
390469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy    void start();
400469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy    ssize_t read(void *data, size_t size, sp<AMessage> *extra);
410469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy
420469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamyprivate:
430469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy    enum {
440469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy        kNumBuffers = 16,
450469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy        kBufferSize = 188 * 20
460469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy    };
470469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy
480469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy    struct QueueEntry {
490469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy        bool mIsCommand;
500469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy
510469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy        size_t mIndex;
520469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy        size_t mSize;
530469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy        size_t mOffset;
540469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy
550469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy        Command mCommand;
560469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy        sp<AMessage> mExtra;
570469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy    };
580469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy
590469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy    Mutex mLock;
600469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy
610469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy    sp<IStreamSource> mSource;
620469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy    ALooper::handler_id mTargetID;
630469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy    sp<MemoryDealer> mMemoryDealer;
640469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy    Vector<sp<IMemory> > mBuffers;
650469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy    List<QueueEntry> mQueue;
660469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy    bool mEOS;
670469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy    bool mSendDataNotification;
680469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy
690469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy    DISALLOW_EVIL_CONSTRUCTORS(NuPlayerStreamListener);
700469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy};
710469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy
720469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy}  // namespace android
730469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy
740469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy#endif // NUPLAYER_STREAM_LISTENER_H_
750469dd6d55fa331bfd7de9431da98b6340d82271Siva Velusamy