189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project/*
289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project **
301cff464978aa0f749f42650180b45ea56cb17deJean-Baptiste Queru ** Copyright 2008, The Android Open Source Project
489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project **
589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** Licensed under the Apache License, Version 2.0 (the "License");
689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** you may not use this file except in compliance with the License.
789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** You may obtain a copy of the License at
889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project **
989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project **     http://www.apache.org/licenses/LICENSE-2.0
1089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project **
1189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** Unless required by applicable law or agreed to in writing, software
1289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** distributed under the License is distributed on an "AS IS" BASIS,
1389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** See the License for the specific language governing permissions and
1589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project ** limitations under the License.
1689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project */
1789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
1889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#ifndef ANDROID_MEDIARECORDERCLIENT_H
1989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#define ANDROID_MEDIARECORDERCLIENT_H
2089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
2189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#include <media/IMediaRecorder.h>
2289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
2389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android {
2489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
2530ab66297501757d745b9ae10da61adcd891f497Andreas Huberclass MediaRecorderBase;
26dac6a31a33ba53fb93850670cdddd1e6515dadceGloria Wangclass MediaPlayerService;
274ca2c7c913f8bd4ada13aca56d36045d42d1e00fWu-cheng Liclass ICameraRecordingProxy;
288ba01021b573889802e67e029225a96f0dfa471aAndy McFaddenclass IGraphicBufferProducer;
2989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
3089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass MediaRecorderClient : public BnMediaRecorder
3189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
326dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen    class ServiceDeathNotifier: public IBinder::DeathRecipient
336dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen    {
346dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen    public:
356dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen        ServiceDeathNotifier(
366dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen                const sp<IBinder>& service,
376dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen                const sp<IMediaRecorderClient>& listener,
386dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen                int which);
396dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen        virtual ~ServiceDeathNotifier();
406dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen        virtual void binderDied(const wp<IBinder>& who);
416dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen
426dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen    private:
436dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen        int mWhich;
446dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen        sp<IBinder> mService;
456dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen        wp<IMediaRecorderClient> mListener;
466dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen    };
476dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen
4889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic:
49d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    virtual     status_t   setCamera(const sp<hardware::ICamera>& camera,
50b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi                                    const sp<ICameraRecordingProxy>& proxy);
5199617adda9bc46c43f511f0940bc735c73de61deMathias Agopian    virtual     status_t   setPreviewSurface(const sp<IGraphicBufferProducer>& surface);
52b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   setVideoSource(int vs);
53b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   setAudioSource(int as);
54b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   setOutputFormat(int of);
55b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   setVideoEncoder(int ve);
56b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   setAudioEncoder(int ae);
57b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   setOutputFile(int fd, int64_t offset,
58b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi                                                  int64_t length);
59b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   setVideoSize(int width, int height);
60b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   setVideoFrameRate(int frames_per_second);
61b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   setParameters(const String8& params);
62b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   setListener(
63b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi                              const sp<IMediaRecorderClient>& listener);
64ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala    virtual     status_t   setClientName(const String16& clientName);
65b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   prepare();
66b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   getMaxAmplitude(int* max);
67b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   start();
68b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   stop();
69b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   reset();
70d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim    virtual     status_t   pause();
71d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim    virtual     status_t   resume();
72b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   init();
73b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   close();
74b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   release();
756d339f1f764bbd32e3381dae7bfa7c6c575bb493Lajos Molnar    virtual     status_t   dump(int fd, const Vector<String16>& args);
768f469e18c307cb9dc0d16ed9225972aa8be4516fChong Zhang    virtual     status_t   setInputSurface(const sp<IGraphicBufferConsumer>& surface);
778ba01021b573889802e67e029225a96f0dfa471aAndy McFadden    virtual     sp<IGraphicBufferProducer> querySurfaceMediaSource();
7889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
7989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectprivate:
80b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    friend class           MediaPlayerService;  // for accessing private constructor
8189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
82b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi                           MediaRecorderClient(
83b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi                                   const sp<MediaPlayerService>& service,
84be71aa29a3c86d2e01cd17839d2a72ab09a1bce5Svet Ganov                                                               pid_t pid,
85be71aa29a3c86d2e01cd17839d2a72ab09a1bce5Svet Ganov                                                               const String16& opPackageName);
86b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual                ~MediaRecorderClient();
8789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
886dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen    sp<IBinder::DeathRecipient> mCameraDeathListener;
896dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen    sp<IBinder::DeathRecipient> mCodecDeathListener;
906dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen
91b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    pid_t                  mPid;
92b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    Mutex                  mLock;
93b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    MediaRecorderBase      *mRecorder;
94b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    sp<MediaPlayerService> mMediaPlayerService;
9589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
9689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
9789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android
9889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
9989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#endif // ANDROID_MEDIARECORDERCLIENT_H
100