NuPlayer.h revision 3831a066bcf1019864a94d2bc7b4c9241efc5c22
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 NU_PLAYER_H_
18f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
19f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#define NU_PLAYER_H_
20f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
21f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#include <media/MediaPlayerInterface.h>
22f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#include <media/stagefright/foundation/AHandler.h>
23f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
24f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#include "ATSParser.h"
25f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#include "AnotherPacketSource.h"
26f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
27f933441648ef6a71dee783d733aac17b9508b452Andreas Hubernamespace android {
28f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
29f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstruct ACodec;
30f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstruct MetaData;
31f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
32f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstruct NuPlayer : public AHandler {
33f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    NuPlayer();
34f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
35f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    void setListener(const wp<MediaPlayerBase> &listener);
36f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
37f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    void setDataSource(const sp<IStreamSource> &source);
38f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    void setVideoSurface(const sp<Surface> &surface);
39f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    void setAudioSink(const sp<MediaPlayerBase::AudioSink> &sink);
40f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    void start();
41f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
42f933441648ef6a71dee783d733aac17b9508b452Andreas Huberprotected:
43f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    virtual ~NuPlayer();
44f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
45f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    virtual void onMessageReceived(const sp<AMessage> &msg);
46f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
47f933441648ef6a71dee783d733aac17b9508b452Andreas Huberprivate:
48f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    struct Renderer;
49f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    struct Decoder;
50f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    struct NuPlayerStreamListener;
51f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
52f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    enum {
53f933441648ef6a71dee783d733aac17b9508b452Andreas Huber        kWhatSetDataSource,
54f933441648ef6a71dee783d733aac17b9508b452Andreas Huber        kWhatSetVideoSurface,
55f933441648ef6a71dee783d733aac17b9508b452Andreas Huber        kWhatSetAudioSink,
56f933441648ef6a71dee783d733aac17b9508b452Andreas Huber        kWhatMoreDataQueued,
57f933441648ef6a71dee783d733aac17b9508b452Andreas Huber        kWhatStart,
58f933441648ef6a71dee783d733aac17b9508b452Andreas Huber        kWhatScanSources,
59f933441648ef6a71dee783d733aac17b9508b452Andreas Huber        kWhatVideoNotify,
60f933441648ef6a71dee783d733aac17b9508b452Andreas Huber        kWhatAudioNotify,
61f933441648ef6a71dee783d733aac17b9508b452Andreas Huber        kWhatRendererNotify,
62f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    };
63f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
64f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    wp<MediaPlayerBase> mListener;
65f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    sp<IStreamSource> mSource;
66f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    sp<Surface> mSurface;
67f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    sp<MediaPlayerBase::AudioSink> mAudioSink;
68f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    sp<NuPlayerStreamListener> mStreamListener;
69f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    sp<ATSParser> mTSParser;
70f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    sp<Decoder> mVideoDecoder;
71f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    sp<Decoder> mAudioDecoder;
72f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    sp<Renderer> mRenderer;
73f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
74f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    bool mEOS;
75f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    bool mAudioEOS;
76f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    bool mVideoEOS;
77f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
78f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    enum FlushStatus {
79f933441648ef6a71dee783d733aac17b9508b452Andreas Huber        NONE,
80f933441648ef6a71dee783d733aac17b9508b452Andreas Huber        AWAITING_DISCONTINUITY,
81f933441648ef6a71dee783d733aac17b9508b452Andreas Huber        FLUSHING_DECODER,
823831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber        SHUTTING_DOWN_DECODER,
833831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber        FLUSHED,
843831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber        SHUT_DOWN,
85f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    };
86f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
87f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    FlushStatus mFlushingAudio;
88f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    FlushStatus mFlushingVideo;
89f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
90f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    status_t instantiateDecoder(
913831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber            bool audio, sp<Decoder> *decoder, bool ignoreCodecSpecificData);
92f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
93f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    status_t feedDecoderInputData(bool audio, const sp<AMessage> &msg);
94f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    void renderBuffer(bool audio, const sp<AMessage> &msg);
95f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
96f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    status_t dequeueNextAccessUnit(
97f933441648ef6a71dee783d733aac17b9508b452Andreas Huber            ATSParser::SourceType *type, sp<ABuffer> *accessUnit);
98f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
99f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    status_t dequeueAccessUnit(
100f933441648ef6a71dee783d733aac17b9508b452Andreas Huber            ATSParser::SourceType type, sp<ABuffer> *accessUnit);
101f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
102f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    void feedMoreTSData();
103f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    void notifyListener(int msg, int ext1, int ext2);
104f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
1053831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber    void finishFlushIfPossible();
1063831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber
107f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    DISALLOW_EVIL_CONSTRUCTORS(NuPlayer);
108f933441648ef6a71dee783d733aac17b9508b452Andreas Huber};
109f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
110f933441648ef6a71dee783d733aac17b9508b452Andreas Huber}  // namespace android
111f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
112f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#endif  // NU_PLAYER_H_
113