android_GenericMediaPlayer.h revision f096e77e6cbfc60263f42b435cb34fbab7be2e45
107ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi/*
2e8af8705a6eb3b8ebd239c379d9143dc69c363d4Jean-Michel Trivi * Copyright (C) 2011 The Android Open Source Project
307ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi *
407ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi * Licensed under the Apache License, Version 2.0 (the "License");
507ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi * you may not use this file except in compliance with the License.
607ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi * You may obtain a copy of the License at
707ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi *
807ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi *      http://www.apache.org/licenses/LICENSE-2.0
907ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi *
1007ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi * Unless required by applicable law or agreed to in writing, software
1107ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi * distributed under the License is distributed on an "AS IS" BASIS,
1207ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1307ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi * See the License for the specific language governing permissions and
1407ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi * limitations under the License.
1507ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi */
1607ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi
17d004feb25e830dd92a8d6e6af0d363e4d11721a2Jean-Michel Trivi#ifndef __ANDROID_GENERICMEDIAPLAYER_H__
18d004feb25e830dd92a8d6e6af0d363e4d11721a2Jean-Michel Trivi#define __ANDROID_GENERICMEDIAPLAYER_H__
1907ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi
208ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi#include "android_GenericMediaPlayer.h"
218ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi
2207ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi#include <binder/IServiceManager.h>
2313a07de046bce3663b905a892dbaf770a54d982dGlenn Kasten#include <surfaceflinger/Surface.h>
2413a07de046bce3663b905a892dbaf770a54d982dGlenn Kasten#include <gui/ISurfaceTexture.h>
2507ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi
2607ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi
2707ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi//--------------------------------------------------------------------------------------------------
2807ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivinamespace android {
2907ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi
30fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Triviclass GenericMediaPlayer;
3107ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Triviclass MediaPlayerNotificationClient : public BnMediaPlayerClient
3207ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi{
3307ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivipublic:
34fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi    MediaPlayerNotificationClient(GenericMediaPlayer* gmp);
3507ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi    virtual ~MediaPlayerNotificationClient();
3607ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi
3707ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi    // IMediaPlayerClient implementation
3807ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi    virtual void notify(int msg, int ext1, int ext2);
3907ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi
4007ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi    void blockUntilPlayerPrepared();
4107ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi
4207ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Triviprivate:
4307ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi    Mutex mLock;
44fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi    GenericMediaPlayer* mGenericMediaPlayer;
4507ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi    Condition mPlayerPreparedCondition;
4607ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi    bool mPlayerPrepared;
4707ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi};
4807ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi
49e8af8705a6eb3b8ebd239c379d9143dc69c363d4Jean-Michel Trivi
5007ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi//--------------------------------------------------------------------------------------------------
51e8af8705a6eb3b8ebd239c379d9143dc69c363d4Jean-Michel Triviclass GenericMediaPlayer : public GenericPlayer
5207ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi{
5307ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivipublic:
5427a8821eb36f002b81f368a0049f511cfa465d16Jean-Michel Trivi
55e8af8705a6eb3b8ebd239c379d9143dc69c363d4Jean-Michel Trivi    GenericMediaPlayer(const AudioPlayback_Parameters* params, bool hasVideo);
56e8af8705a6eb3b8ebd239c379d9143dc69c363d4Jean-Michel Trivi    virtual ~GenericMediaPlayer();
5707ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi
5813a07de046bce3663b905a892dbaf770a54d982dGlenn Kasten    virtual void setVideoSurface(const sp<Surface> &surface);
5913a07de046bce3663b905a892dbaf770a54d982dGlenn Kasten    virtual void setVideoSurfaceTexture(const sp<ISurfaceTexture> &surfaceTexture);
6007ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi
6107ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Triviprotected:
62fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi    friend class MediaPlayerNotificationClient;
6307ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi
64e8af8705a6eb3b8ebd239c379d9143dc69c363d4Jean-Michel Trivi    // Async event handlers (called from GenericPlayer's event loop)
6527a8821eb36f002b81f368a0049f511cfa465d16Jean-Michel Trivi    virtual void onPrepare();
6627a8821eb36f002b81f368a0049f511cfa465d16Jean-Michel Trivi    virtual void onPlay();
6727a8821eb36f002b81f368a0049f511cfa465d16Jean-Michel Trivi    virtual void onPause();
688ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi    virtual void onSeek(const sp<AMessage> &msg);
698ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi    virtual void onLoop(const sp<AMessage> &msg);
70fcc996296bdbf6c3949ad4312991fdde4ae2e157Jean-Michel Trivi    virtual void onVolumeUpdate();
718ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi    virtual void onBufferingUpdate(const sp<AMessage> &msg);
7227a8821eb36f002b81f368a0049f511cfa465d16Jean-Michel Trivi
73e8af8705a6eb3b8ebd239c379d9143dc69c363d4Jean-Michel Trivi    bool mHasVideo;
74f096e77e6cbfc60263f42b435cb34fbab7be2e45Jean-Michel Trivi    int32_t mSeekTimeMsec;
7527a8821eb36f002b81f368a0049f511cfa465d16Jean-Michel Trivi
767f0e925e1a56ab80e60f2381105297184109dbc3Jean-Michel Trivi    sp<Surface> mVideoSurface;
7713a07de046bce3663b905a892dbaf770a54d982dGlenn Kasten    sp<ISurfaceTexture> mVideoSurfaceTexture;
7807ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi
7907ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi    sp<IMediaPlayer> mPlayer;
8027a8821eb36f002b81f368a0049f511cfa465d16Jean-Michel Trivi    // Receives Android MediaPlayer events from mPlayer
8127a8821eb36f002b81f368a0049f511cfa465d16Jean-Michel Trivi    sp<MediaPlayerNotificationClient> mPlayerClient;
8207ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi
8307ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi    sp<IServiceManager> mServiceManager;
8407ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi    sp<IBinder> mBinder;
8507ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi    sp<IMediaPlayerService> mMediaPlayerService;
8607ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi
878ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi    Parcel metadatafilter;
888ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi
89e8af8705a6eb3b8ebd239c379d9143dc69c363d4Jean-Michel Triviprivate:
90e8af8705a6eb3b8ebd239c379d9143dc69c363d4Jean-Michel Trivi    DISALLOW_EVIL_CONSTRUCTORS(GenericMediaPlayer);
918ad101d5bcaca289da3d820e2b87b5da55e560f9Jean-Michel Trivi    void onAfterMediaPlayerPrepared();
9207ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi};
9307ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi
9407ae4e2417fc17301435a72b85ad80bd4253b6b5Jean-Michel Trivi} // namespace android
95d004feb25e830dd92a8d6e6af0d363e4d11721a2Jean-Michel Trivi
96d004feb25e830dd92a8d6e6af0d363e4d11721a2Jean-Michel Trivi#endif /* __ANDROID_GENERICMEDIAPLAYER_H__ */
97