1/*
2 **
3 ** Copyright 2008, The Android Open Source Project
4 **
5 ** Licensed under the Apache License, Version 2.0 (the "License");
6 ** you may not use this file except in compliance with the License.
7 ** You may obtain a copy of the License at
8 **
9 **     http://www.apache.org/licenses/LICENSE-2.0
10 **
11 ** Unless required by applicable law or agreed to in writing, software
12 ** distributed under the License is distributed on an "AS IS" BASIS,
13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 ** See the License for the specific language governing permissions and
15 ** limitations under the License.
16 */
17
18#ifndef ANDROID_MEDIARECORDERCLIENT_H
19#define ANDROID_MEDIARECORDERCLIENT_H
20
21#include <media/IMediaRecorder.h>
22
23namespace android {
24
25class MediaRecorderBase;
26class MediaPlayerService;
27class ICameraRecordingProxy;
28class IGraphicBufferProducer;
29
30class MediaRecorderClient : public BnMediaRecorder
31{
32    class ServiceDeathNotifier: public IBinder::DeathRecipient
33    {
34    public:
35        ServiceDeathNotifier(
36                const sp<IBinder>& service,
37                const sp<IMediaRecorderClient>& listener,
38                int which);
39        virtual ~ServiceDeathNotifier();
40        virtual void binderDied(const wp<IBinder>& who);
41
42    private:
43        int mWhich;
44        sp<IBinder> mService;
45        wp<IMediaRecorderClient> mListener;
46    };
47
48public:
49    virtual     status_t   setCamera(const sp<hardware::ICamera>& camera,
50                                    const sp<ICameraRecordingProxy>& proxy);
51    virtual     status_t   setPreviewSurface(const sp<IGraphicBufferProducer>& surface);
52    virtual     status_t   setVideoSource(int vs);
53    virtual     status_t   setAudioSource(int as);
54    virtual     status_t   setOutputFormat(int of);
55    virtual     status_t   setVideoEncoder(int ve);
56    virtual     status_t   setAudioEncoder(int ae);
57    virtual     status_t   setOutputFile(int fd, int64_t offset,
58                                                  int64_t length);
59    virtual     status_t   setVideoSize(int width, int height);
60    virtual     status_t   setVideoFrameRate(int frames_per_second);
61    virtual     status_t   setParameters(const String8& params);
62    virtual     status_t   setListener(
63                              const sp<IMediaRecorderClient>& listener);
64    virtual     status_t   setClientName(const String16& clientName);
65    virtual     status_t   prepare();
66    virtual     status_t   getMaxAmplitude(int* max);
67    virtual     status_t   start();
68    virtual     status_t   stop();
69    virtual     status_t   reset();
70    virtual     status_t   pause();
71    virtual     status_t   resume();
72    virtual     status_t   init();
73    virtual     status_t   close();
74    virtual     status_t   release();
75    virtual     status_t   dump(int fd, const Vector<String16>& args);
76    virtual     status_t   setInputSurface(const sp<IGraphicBufferConsumer>& surface);
77    virtual     sp<IGraphicBufferProducer> querySurfaceMediaSource();
78
79private:
80    friend class           MediaPlayerService;  // for accessing private constructor
81
82                           MediaRecorderClient(
83                                   const sp<MediaPlayerService>& service,
84                                                               pid_t pid,
85                                                               const String16& opPackageName);
86    virtual                ~MediaRecorderClient();
87
88    sp<IBinder::DeathRecipient> mCameraDeathListener;
89    sp<IBinder::DeathRecipient> mCodecDeathListener;
90
91    pid_t                  mPid;
92    Mutex                  mLock;
93    MediaRecorderBase      *mRecorder;
94    sp<MediaPlayerService> mMediaPlayerService;
95};
96
97}; // namespace android
98
99#endif // ANDROID_MEDIARECORDERCLIENT_H
100