MediaRecorderClient.h revision fe44e4f74fe2582cbf012687059278dbcbdaa6f7
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
2561c2351da89cb281b2dfd56c6c6779ccb4bc1172Dan Willemsenstruct MediaRecorderBase;
26dac6a31a33ba53fb93850670cdddd1e6515dadceGloria Wangclass MediaPlayerService;
274ca2c7c913f8bd4ada13aca56d36045d42d1e00fWu-cheng Liclass ICameraRecordingProxy;
2889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
2989fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass MediaRecorderClient : public BnMediaRecorder
3089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
316dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen    class ServiceDeathNotifier: public IBinder::DeathRecipient
326dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen    {
336dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen    public:
346dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen        ServiceDeathNotifier(
356dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen                const sp<IBinder>& service,
366dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen                const sp<IMediaRecorderClient>& listener,
376dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen                int which);
386dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen        virtual ~ServiceDeathNotifier();
396dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen        virtual void binderDied(const wp<IBinder>& who);
406dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen
416dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen    private:
426dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen        int mWhich;
436dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen        sp<IBinder> mService;
446dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen        wp<IMediaRecorderClient> mListener;
456dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen    };
466dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen
4789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic:
48d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    virtual     status_t   setCamera(const sp<hardware::ICamera>& camera,
49b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi                                    const sp<ICameraRecordingProxy>& proxy);
5099617adda9bc46c43f511f0940bc735c73de61deMathias Agopian    virtual     status_t   setPreviewSurface(const sp<IGraphicBufferProducer>& surface);
51b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   setVideoSource(int vs);
52b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   setAudioSource(int as);
53b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   setOutputFormat(int of);
54b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   setVideoEncoder(int ve);
55b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   setAudioEncoder(int ae);
56fe44e4f74fe2582cbf012687059278dbcbdaa6f7Hangyu Kuang    virtual     status_t   setOutputFile(int fd);
57fe44e4f74fe2582cbf012687059278dbcbdaa6f7Hangyu Kuang    virtual     status_t   setNextOutputFile(int fd);
58b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   setVideoSize(int width, int height);
59b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   setVideoFrameRate(int frames_per_second);
60b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   setParameters(const String8& params);
61b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   setListener(
62b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi                              const sp<IMediaRecorderClient>& listener);
63ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala    virtual     status_t   setClientName(const String16& clientName);
64b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   prepare();
65b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   getMaxAmplitude(int* max);
66b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   start();
67b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   stop();
68b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   reset();
69d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim    virtual     status_t   pause();
70d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim    virtual     status_t   resume();
71b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   init();
72b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   close();
73b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   release();
746d339f1f764bbd32e3381dae7bfa7c6c575bb493Lajos Molnar    virtual     status_t   dump(int fd, const Vector<String16>& args);
75addf2cbb120346ae42e78fa739245a353db5edadChong Zhang    virtual     status_t   setInputSurface(const sp<PersistentSurface>& surface);
768ba01021b573889802e67e029225a96f0dfa471aAndy McFadden    virtual     sp<IGraphicBufferProducer> querySurfaceMediaSource();
7789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
7889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectprivate:
79b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    friend class           MediaPlayerService;  // for accessing private constructor
8089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
81b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi                           MediaRecorderClient(
82b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi                                   const sp<MediaPlayerService>& service,
83be71aa29a3c86d2e01cd17839d2a72ab09a1bce5Svet Ganov                                                               pid_t pid,
84be71aa29a3c86d2e01cd17839d2a72ab09a1bce5Svet Ganov                                                               const String16& opPackageName);
85b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual                ~MediaRecorderClient();
8689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
876dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen    sp<IBinder::DeathRecipient> mCameraDeathListener;
886dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen    sp<IBinder::DeathRecipient> mCodecDeathListener;
896dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen
90b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    pid_t                  mPid;
91b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    Mutex                  mLock;
92b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    MediaRecorderBase      *mRecorder;
93b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    sp<MediaPlayerService> mMediaPlayerService;
9489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
9589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
9689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android
9789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
9889fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#endif // ANDROID_MEDIARECORDERCLIENT_H
99