IMediaPlayer.h revision d681bbb1767bed09415e050ba78975df214bcd68
189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project/*
289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *
489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * you may not use this file except in compliance with the License.
689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * You may obtain a copy of the License at
789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *
889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project *
1089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * See the License for the specific language governing permissions and
1489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project * limitations under the License.
1589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */
1689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
1789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#ifndef ANDROID_IMEDIAPLAYER_H
1889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define ANDROID_IMEDIAPLAYER_H
1989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
2089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <utils/RefBase.h>
217562408b2261d38415453378b6188f74fda99d88Mathias Agopian#include <binder/IInterface.h>
227562408b2261d38415453378b6188f74fda99d88Mathias Agopian#include <binder/Parcel.h>
23d681bbb1767bed09415e050ba78975df214bcd68Dave Burke#include <utils/KeyedVector.h>
2489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
2589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android {
2689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
271d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Cataniaclass Parcel;
285daeb129a2c2ba3d14ccd94af283b5f561c783eaAndreas Huberclass Surface;
29d681bbb1767bed09415e050ba78975df214bcd68Dave Burkeclass IStreamSource;
301173118eace0e9e347cb007f0da817cee87579edGlenn Kastenclass ISurfaceTexture;
3189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
3289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass IMediaPlayer: public IInterface
3389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
3489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic:
3589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    DECLARE_META_INTERFACE(MediaPlayer);
3689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual void            disconnect() = 0;
3889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
39d681bbb1767bed09415e050ba78975df214bcd68Dave Burke    virtual status_t        setDataSource(const char *url,
40d681bbb1767bed09415e050ba78975df214bcd68Dave Burke                                    const KeyedVector<String8, String8>* headers) = 0;
41d681bbb1767bed09415e050ba78975df214bcd68Dave Burke    virtual status_t        setDataSource(int fd, int64_t offset, int64_t length) = 0;
42d681bbb1767bed09415e050ba78975df214bcd68Dave Burke    virtual status_t        setDataSource(const sp<IStreamSource>& source) = 0;
435daeb129a2c2ba3d14ccd94af283b5f561c783eaAndreas Huber    virtual status_t        setVideoSurface(const sp<Surface>& surface) = 0;
441173118eace0e9e347cb007f0da817cee87579edGlenn Kasten    virtual status_t        setVideoSurfaceTexture(
451173118eace0e9e347cb007f0da817cee87579edGlenn Kasten                                    const sp<ISurfaceTexture>& surfaceTexture) = 0;
4689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual status_t        prepareAsync() = 0;
4789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual status_t        start() = 0;
4889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual status_t        stop() = 0;
4989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual status_t        pause() = 0;
5089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual status_t        isPlaying(bool* state) = 0;
5189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual status_t        seekTo(int msec) = 0;
5289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual status_t        getCurrentPosition(int* msec) = 0;
5389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual status_t        getDuration(int* msec) = 0;
5489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual status_t        reset() = 0;
5589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual status_t        setAudioStreamType(int type) = 0;
5689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual status_t        setLooping(int loop) = 0;
5789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual status_t        setVolume(float leftVolume, float rightVolume) = 0;
582beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent    virtual status_t        setAuxEffectSendLevel(float level) = 0;
592beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent    virtual status_t        attachAuxEffect(int effectId) = 0;
604f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang    virtual status_t        setParameter(int key, const Parcel& request) = 0;
614f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang    virtual status_t        getParameter(int key, Parcel* reply) = 0;
621d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania
631d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania    // Invoke a generic method on the player by using opaque parcels
641d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania    // for the request and reply.
651d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania    // @param request Parcel that must start with the media player
661d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania    // interface token.
671d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania    // @param[out] reply Parcel to hold the reply data. Cannot be null.
68a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania    // @return OK if the invocation was made successfully.
691d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania    virtual status_t        invoke(const Parcel& request, Parcel *reply) = 0;
70a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania
71a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania    // Set a new metadata filter.
72a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania    // @param filter A set of allow and drop rules serialized in a Parcel.
73a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania    // @return OK if the invocation was made successfully.
74a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania    virtual status_t        setMetadataFilter(const Parcel& filter) = 0;
758e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania
768e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    // Retrieve a set of metadata.
778e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    // @param update_only Include only the metadata that have changed
788e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    //                    since the last invocation of getMetadata.
798e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    //                    The set is built using the unfiltered
808e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    //                    notifications the native player sent to the
818e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    //                    MediaPlayerService during that period of
828e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    //                    time. If false, all the metadatas are considered.
838e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    // @param apply_filter If true, once the metadata set has been built based
848e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    //                     on the value update_only, the current filter is
858e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    //                     applied.
868e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    // @param[out] metadata On exit contains a set (possibly empty) of metadata.
878e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    //                      Valid only if the call returned OK.
888e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    // @return OK if the invocation was made successfully.
898e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    virtual status_t        getMetadata(bool update_only,
908e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania                                        bool apply_filter,
918e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania                                        Parcel *metadata) = 0;
9289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
9389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
9489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ----------------------------------------------------------------------------
9589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
9689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass BnMediaPlayer: public BnInterface<IMediaPlayer>
9789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
9889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic:
9989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual status_t    onTransact( uint32_t code,
10089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project                                    const Parcel& data,
10189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project                                    Parcel* reply,
10289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project                                    uint32_t flags = 0);
10389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
10489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
10589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android
10689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
10789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#endif // ANDROID_IMEDIAPLAYER_H
108