IMediaPlayerService.h revision 59451f8ced48874427ff1550391c4f3cd2ba2e35
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (C) 2008 The Android Open Source Project
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Licensed under the Apache License, Version 2.0 (the "License");
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * you may not use this file except in compliance with the License.
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * You may obtain a copy of the License at
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *      http://www.apache.org/licenses/LICENSE-2.0
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Unless required by applicable law or agreed to in writing, software
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * distributed under the License is distributed on an "AS IS" BASIS,
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * See the License for the specific language governing permissions and
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * limitations under the License.
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef ANDROID_IMEDIAPLAYERSERVICE_H
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ANDROID_IMEDIAPLAYERSERVICE_H
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <utils/Errors.h>  // for status_t
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <utils/KeyedVector.h>
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <utils/RefBase.h>
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <utils/String8.h>
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <binder/IInterface.h>
256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include <binder/Parcel.h>
266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include <system/audio.h>
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include <media/IMediaPlayerClient.h>
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <media/IMediaPlayer.h>
306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include <media/IMediaMetadataRetriever.h>
316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace android {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ICrypto;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct IHDCP;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class IMediaRecorder;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class IOMX;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class IRemoteDisplay;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class IRemoteDisplayClient;
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct IStreamSource;
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class IMediaPlayerService: public IInterface
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)public:
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    DECLARE_META_INTERFACE(MediaPlayerService);
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    virtual sp<IMediaRecorder> createMediaRecorder(pid_t pid) = 0;
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    virtual sp<IMediaMetadataRetriever> createMetadataRetriever(pid_t pid) = 0;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual sp<IMediaPlayer> create(pid_t pid, const sp<IMediaPlayerClient>& client, int audioSessionId = 0) = 0;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual sp<IMemory>         decode(const char* url, uint32_t *pSampleRate, int* pNumChannels, audio_format_t* pFormat) = 0;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual sp<IMemory>         decode(int fd, int64_t offset, int64_t length, uint32_t *pSampleRate, int* pNumChannels, audio_format_t* pFormat) = 0;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual sp<IOMX>            getOMX() = 0;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual sp<ICrypto>         makeCrypto() = 0;
556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    virtual sp<IHDCP>           makeHDCP() = 0;
566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    // Connects to a remote display.
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // 'iface' specifies the address of the local interface on which to listen for
596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    // a connection from the remote display as an ip address and port number
606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    // of the form "x.x.x.x:y".  The media server should call back into the provided remote
616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    // display client when display connection, disconnection or errors occur.
626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    // The assumption is that at most one remote display will be connected to the
636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    // provided interface at a time.
646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    virtual sp<IRemoteDisplay> listenForRemoteDisplay(const sp<IRemoteDisplayClient>& client,
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            const String8& iface) = 0;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // If iface == NULL, disable remote display, otherwise
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // iface should be of the form "x.x.x.x:y", i.e. ip address
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // of the local interface to bind to and the port number
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // to listen on.
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual status_t enableRemoteDisplay(const char *iface) = 0;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // codecs and audio devices usage tracking for the battery app
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    enum BatteryDataBits {
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        // tracking audio codec
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        kBatteryDataTrackAudio          = 0x1,
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        // tracking video codec
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        kBatteryDataTrackVideo          = 0x2,
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // codec is started, otherwise codec is paused
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        kBatteryDataCodecStarted        = 0x4,
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // tracking decoder (for media player),
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        // otherwise tracking encoder (for media recorder)
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        kBatteryDataTrackDecoder        = 0x8,
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        // start to play an audio on an audio device
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        kBatteryDataAudioFlingerStart   = 0x10,
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        // stop/pause the audio playback
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        kBatteryDataAudioFlingerStop    = 0x20,
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // audio is rounted to speaker
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        kBatteryDataSpeakerOn           = 0x40,
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // audio is rounted to devices other than speaker
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        kBatteryDataOtherAudioDeviceOn  = 0x80,
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual void addBatteryData(uint32_t params) = 0;
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    virtual status_t pullBatteryData(Parcel* reply) = 0;
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// ----------------------------------------------------------------------------
996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class BnMediaPlayerService: public BnInterface<IMediaPlayerService>
1016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles){
1026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)public:
1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    virtual status_t    onTransact( uint32_t code,
1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                    const Parcel& data,
1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                    Parcel* reply,
1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                    uint32_t flags = 0);
1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci};
1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; // namespace android
1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif // ANDROID_IMEDIAPLAYERSERVICE_H
1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci