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>
24fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten#include <system/audio.h>
2589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
26c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman// Fwd decl to make sure everyone agrees that the scope of struct sockaddr_in is
27c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman// global, and not in android::
28c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossmanstruct sockaddr_in;
29c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman
3089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android {
3189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
321d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Cataniaclass Parcel;
335daeb129a2c2ba3d14ccd94af283b5f561c783eaAndreas Huberclass Surface;
34d681bbb1767bed09415e050ba78975df214bcd68Dave Burkeclass IStreamSource;
351173118eace0e9e347cb007f0da817cee87579edGlenn Kastenclass ISurfaceTexture;
3689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
3789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass IMediaPlayer: public IInterface
3889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
3989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic:
4089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    DECLARE_META_INTERFACE(MediaPlayer);
4189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
4289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual void            disconnect() = 0;
4389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
44d681bbb1767bed09415e050ba78975df214bcd68Dave Burke    virtual status_t        setDataSource(const char *url,
45d681bbb1767bed09415e050ba78975df214bcd68Dave Burke                                    const KeyedVector<String8, String8>* headers) = 0;
46d681bbb1767bed09415e050ba78975df214bcd68Dave Burke    virtual status_t        setDataSource(int fd, int64_t offset, int64_t length) = 0;
47d681bbb1767bed09415e050ba78975df214bcd68Dave Burke    virtual status_t        setDataSource(const sp<IStreamSource>& source) = 0;
481173118eace0e9e347cb007f0da817cee87579edGlenn Kasten    virtual status_t        setVideoSurfaceTexture(
491173118eace0e9e347cb007f0da817cee87579edGlenn Kasten                                    const sp<ISurfaceTexture>& surfaceTexture) = 0;
5089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual status_t        prepareAsync() = 0;
5189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual status_t        start() = 0;
5289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual status_t        stop() = 0;
5389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual status_t        pause() = 0;
5489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual status_t        isPlaying(bool* state) = 0;
5589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual status_t        seekTo(int msec) = 0;
5689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual status_t        getCurrentPosition(int* msec) = 0;
5789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual status_t        getDuration(int* msec) = 0;
5889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual status_t        reset() = 0;
59fff6d715a8db0daf08a50634f242c40268de3d49Glenn Kasten    virtual status_t        setAudioStreamType(audio_stream_type_t type) = 0;
6089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual status_t        setLooping(int loop) = 0;
6189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual status_t        setVolume(float leftVolume, float rightVolume) = 0;
622beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent    virtual status_t        setAuxEffectSendLevel(float level) = 0;
632beeb50b1bba9e92f6cacfeca37fe9fa9d36ead1Eric Laurent    virtual status_t        attachAuxEffect(int effectId) = 0;
644f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang    virtual status_t        setParameter(int key, const Parcel& request) = 0;
654f9e47f2c03ce36261c4717cd7e131d7940bb068Gloria Wang    virtual status_t        getParameter(int key, Parcel* reply) = 0;
66c795b64060c3af9d7961fc1371e4ccfa8ee3e450John Grossman    virtual status_t        setRetransmitEndpoint(const struct sockaddr_in* endpoint) = 0;
6744a7e42f0310831e6a846d1b6bb40bf3a399bf6dJohn Grossman    virtual status_t        getRetransmitEndpoint(struct sockaddr_in* endpoint) = 0;
686b74d671a1321a6ecc4a40b6c87beedfecc1ec44Marco Nelissen    virtual status_t        setNextPlayer(const sp<IMediaPlayer>& next) = 0;
691d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania
701d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania    // Invoke a generic method on the player by using opaque parcels
711d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania    // for the request and reply.
721d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania    // @param request Parcel that must start with the media player
731d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania    // interface token.
741d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania    // @param[out] reply Parcel to hold the reply data. Cannot be null.
75a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania    // @return OK if the invocation was made successfully.
761d187f1a86855f5f0694d7ec30efc9833bf7c589Nicolas Catania    virtual status_t        invoke(const Parcel& request, Parcel *reply) = 0;
77a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania
78a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania    // Set a new metadata filter.
79a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania    // @param filter A set of allow and drop rules serialized in a Parcel.
80a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania    // @return OK if the invocation was made successfully.
81a7e0e8b4c429fc68eb1bd5b5a30f5b91352288f9Nicolas Catania    virtual status_t        setMetadataFilter(const Parcel& filter) = 0;
828e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania
838e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    // Retrieve a set of metadata.
848e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    // @param update_only Include only the metadata that have changed
858e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    //                    since the last invocation of getMetadata.
868e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    //                    The set is built using the unfiltered
878e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    //                    notifications the native player sent to the
888e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    //                    MediaPlayerService during that period of
898e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    //                    time. If false, all the metadatas are considered.
908e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    // @param apply_filter If true, once the metadata set has been built based
918e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    //                     on the value update_only, the current filter is
928e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    //                     applied.
938e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    // @param[out] metadata On exit contains a set (possibly empty) of metadata.
948e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    //                      Valid only if the call returned OK.
958e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    // @return OK if the invocation was made successfully.
968e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania    virtual status_t        getMetadata(bool update_only,
978e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania                                        bool apply_filter,
988e1b6cce24574b9ecd5b0300155776bd0b4ef756Nicolas Catania                                        Parcel *metadata) = 0;
9989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
10089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
10189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project// ----------------------------------------------------------------------------
10289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
10389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass BnMediaPlayer: public BnInterface<IMediaPlayer>
10489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
10589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic:
10689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project    virtual status_t    onTransact( uint32_t code,
10789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project                                    const Parcel& data,
10889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project                                    Parcel* reply,
10989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project                                    uint32_t flags = 0);
11089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
11189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
11289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android
11389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
11489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#endif // ANDROID_IMEDIAPLAYER_H
115