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
239c47c97ecac581d66b6febafd156618247e86742Pawin Vongmasa#include <android/hardware/media/omx/1.0/IOmx.h>
249c47c97ecac581d66b6febafd156618247e86742Pawin Vongmasa
2589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectnamespace android {
2689fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
2761c2351da89cb281b2dfd56c6c6779ccb4bc1172Dan Willemsenstruct MediaRecorderBase;
28dac6a31a33ba53fb93850670cdddd1e6515dadceGloria Wangclass MediaPlayerService;
294ca2c7c913f8bd4ada13aca56d36045d42d1e00fWu-cheng Liclass ICameraRecordingProxy;
3089fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
3189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectclass MediaRecorderClient : public BnMediaRecorder
3289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project{
339c47c97ecac581d66b6febafd156618247e86742Pawin Vongmasa    typedef ::android::hardware::media::omx::V1_0::IOmx IOmx;
349c47c97ecac581d66b6febafd156618247e86742Pawin Vongmasa
359c47c97ecac581d66b6febafd156618247e86742Pawin Vongmasa    class ServiceDeathNotifier :
369c47c97ecac581d66b6febafd156618247e86742Pawin Vongmasa            public IBinder::DeathRecipient,
379c47c97ecac581d66b6febafd156618247e86742Pawin Vongmasa            public ::android::hardware::hidl_death_recipient
386dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen    {
396dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen    public:
406dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen        ServiceDeathNotifier(
416dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen                const sp<IBinder>& service,
426dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen                const sp<IMediaRecorderClient>& listener,
436dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen                int which);
449c47c97ecac581d66b6febafd156618247e86742Pawin Vongmasa        ServiceDeathNotifier(
459c47c97ecac581d66b6febafd156618247e86742Pawin Vongmasa                const sp<IOmx>& omx,
469c47c97ecac581d66b6febafd156618247e86742Pawin Vongmasa                const sp<IMediaRecorderClient>& listener,
479c47c97ecac581d66b6febafd156618247e86742Pawin Vongmasa                int which);
486dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen        virtual ~ServiceDeathNotifier();
496dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen        virtual void binderDied(const wp<IBinder>& who);
509c47c97ecac581d66b6febafd156618247e86742Pawin Vongmasa        virtual void serviceDied(
519c47c97ecac581d66b6febafd156618247e86742Pawin Vongmasa                uint64_t cookie,
529c47c97ecac581d66b6febafd156618247e86742Pawin Vongmasa                const wp<::android::hidl::base::V1_0::IBase>& who);
539c47c97ecac581d66b6febafd156618247e86742Pawin Vongmasa        void unlinkToDeath();
546dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen    private:
556dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen        int mWhich;
566dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen        sp<IBinder> mService;
579c47c97ecac581d66b6febafd156618247e86742Pawin Vongmasa        sp<IOmx> mOmx;
586dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen        wp<IMediaRecorderClient> mListener;
596dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen    };
606dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen
619c47c97ecac581d66b6febafd156618247e86742Pawin Vongmasa    void clearDeathNotifiers();
629c47c97ecac581d66b6febafd156618247e86742Pawin Vongmasa
6389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectpublic:
64d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala    virtual     status_t   setCamera(const sp<hardware::ICamera>& camera,
65b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi                                    const sp<ICameraRecordingProxy>& proxy);
6699617adda9bc46c43f511f0940bc735c73de61deMathias Agopian    virtual     status_t   setPreviewSurface(const sp<IGraphicBufferProducer>& surface);
67b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   setVideoSource(int vs);
68b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   setAudioSource(int as);
69b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   setOutputFormat(int of);
70b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   setVideoEncoder(int ve);
71b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   setAudioEncoder(int ae);
72fe44e4f74fe2582cbf012687059278dbcbdaa6f7Hangyu Kuang    virtual     status_t   setOutputFile(int fd);
73fe44e4f74fe2582cbf012687059278dbcbdaa6f7Hangyu Kuang    virtual     status_t   setNextOutputFile(int fd);
74b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   setVideoSize(int width, int height);
75b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   setVideoFrameRate(int frames_per_second);
76b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   setParameters(const String8& params);
77b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   setListener(
78b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi                              const sp<IMediaRecorderClient>& listener);
79ceb388d6c03c38b96dc41c0ea4804b749aa077c4Eino-Ville Talvala    virtual     status_t   setClientName(const String16& clientName);
80b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   prepare();
81b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   getMaxAmplitude(int* max);
82ac4e4189db77dc0af7671b162d11be5ccec69339Ray Essick    virtual     status_t   getMetrics(Parcel* reply);
83b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   start();
84b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   stop();
85b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   reset();
86d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim    virtual     status_t   pause();
87d008275796ac4cccf85fefce53cef733a49bc1faWonsik Kim    virtual     status_t   resume();
88b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   init();
89b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   close();
90b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual     status_t   release();
916d339f1f764bbd32e3381dae7bfa7c6c575bb493Lajos Molnar    virtual     status_t   dump(int fd, const Vector<String16>& args);
92addf2cbb120346ae42e78fa739245a353db5edadChong Zhang    virtual     status_t   setInputSurface(const sp<PersistentSurface>& surface);
938ba01021b573889802e67e029225a96f0dfa471aAndy McFadden    virtual     sp<IGraphicBufferProducer> querySurfaceMediaSource();
9489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
9589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Projectprivate:
96b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    friend class           MediaPlayerService;  // for accessing private constructor
9789fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
98b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi                           MediaRecorderClient(
99b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi                                   const sp<MediaPlayerService>& service,
100be71aa29a3c86d2e01cd17839d2a72ab09a1bce5Svet Ganov                                                               pid_t pid,
101be71aa29a3c86d2e01cd17839d2a72ab09a1bce5Svet Ganov                                                               const String16& opPackageName);
102b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    virtual                ~MediaRecorderClient();
10389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
1049c47c97ecac581d66b6febafd156618247e86742Pawin Vongmasa    sp<ServiceDeathNotifier> mCameraDeathListener;
1059c47c97ecac581d66b6febafd156618247e86742Pawin Vongmasa    sp<ServiceDeathNotifier> mCodecDeathListener;
1066dc3a3e2292454f94c015da45f1ebfc6a493e736Marco Nelissen
107b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    pid_t                  mPid;
108b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    Mutex                  mLock;
109b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    MediaRecorderBase      *mRecorder;
110b33f3407bab0970a7f9241680723a1140b177c50Pannag Sanketi    sp<MediaPlayerService> mMediaPlayerService;
11189fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project};
11289fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
11389fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project}; // namespace android
11489fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project
11589fa4ad53f2f4d57adbc97ae1149fc00c9b6f3c5The Android Open Source Project#endif // ANDROID_MEDIARECORDERCLIENT_H
116