diff options
Diffstat (limited to 'media')
-rw-r--r-- | media/libmedia/IMediaRecorder.cpp | 17 | ||||
-rw-r--r-- | media/libmedia/mediarecorder.cpp | 27 | ||||
-rw-r--r-- | media/libmediaplayerservice/MediaRecorderClient.cpp | 11 | ||||
-rw-r--r-- | media/libmediaplayerservice/MediaRecorderClient.h | 1 |
4 files changed, 56 insertions, 0 deletions
diff --git a/media/libmedia/IMediaRecorder.cpp b/media/libmedia/IMediaRecorder.cpp index f55a01e..59cd1b7 100644 --- a/media/libmedia/IMediaRecorder.cpp +++ b/media/libmedia/IMediaRecorder.cpp @@ -43,6 +43,7 @@ enum { SET_AUDIO_ENCODER, SET_OUTPUT_FILE_PATH, SET_OUTPUT_FILE_FD, + SET_OUTPUT_FILE_AUXILIARY_FD, SET_VIDEO_SIZE, SET_VIDEO_FRAMERATE, SET_PARAMETERS, @@ -159,6 +160,15 @@ public: return reply.readInt32(); } + status_t setOutputFileAuxiliary(int fd) { + LOGV("setOutputFileAuxiliary(%d)", fd); + Parcel data, reply; + data.writeInterfaceToken(IMediaRecorder::getInterfaceDescriptor()); + data.writeFileDescriptor(fd); + remote()->transact(SET_OUTPUT_FILE_AUXILIARY_FD, data, &reply); + return reply.readInt32(); + } + status_t setVideoSize(int width, int height) { LOGV("setVideoSize(%dx%d)", width, height); @@ -377,6 +387,13 @@ status_t BnMediaRecorder::onTransact( ::close(fd); return NO_ERROR; } break; + case SET_OUTPUT_FILE_AUXILIARY_FD: { + LOGV("SET_OUTPUT_FILE_AUXILIARY_FD"); + CHECK_INTERFACE(IMediaRecorder, data, reply); + int fd = dup(data.readFileDescriptor()); + reply->writeInt32(setOutputFileAuxiliary(fd)); + return NO_ERROR; + } break; case SET_VIDEO_SIZE: { LOGV("SET_VIDEO_SIZE"); CHECK_INTERFACE(IMediaRecorder, data, reply); diff --git a/media/libmedia/mediarecorder.cpp b/media/libmedia/mediarecorder.cpp index 7f25359..51d91fe 100644 --- a/media/libmedia/mediarecorder.cpp +++ b/media/libmedia/mediarecorder.cpp @@ -308,6 +308,32 @@ status_t MediaRecorder::setOutputFile(int fd, int64_t offset, int64_t length) return ret; } +status_t MediaRecorder::setOutputFileAuxiliary(int fd) +{ + LOGV("setOutputFileAuxiliary(%d)", fd); + if(mMediaRecorder == NULL) { + LOGE("media recorder is not initialized yet"); + return INVALID_OPERATION; + } + if (mIsAuxiliaryOutputFileSet) { + LOGE("output file has already been set"); + return INVALID_OPERATION; + } + if (!(mCurrentState & MEDIA_RECORDER_DATASOURCE_CONFIGURED)) { + LOGE("setOutputFile called in an invalid state(%d)", mCurrentState); + return INVALID_OPERATION; + } + + status_t ret = mMediaRecorder->setOutputFileAuxiliary(fd); + if (OK != ret) { + LOGV("setOutputFileAuxiliary failed: %d", ret); + mCurrentState = MEDIA_RECORDER_ERROR; + return ret; + } + mIsAuxiliaryOutputFileSet = true; + return ret; +} + status_t MediaRecorder::setVideoSize(int width, int height) { LOGV("setVideoSize(%d, %d)", width, height); @@ -571,6 +597,7 @@ void MediaRecorder::doCleanUp() mIsAudioEncoderSet = false; mIsVideoEncoderSet = false; mIsOutputFileSet = false; + mIsAuxiliaryOutputFileSet = false; } // Release should be OK in any state diff --git a/media/libmediaplayerservice/MediaRecorderClient.cpp b/media/libmediaplayerservice/MediaRecorderClient.cpp index 96519e6..be6a8be 100644 --- a/media/libmediaplayerservice/MediaRecorderClient.cpp +++ b/media/libmediaplayerservice/MediaRecorderClient.cpp @@ -164,6 +164,17 @@ status_t MediaRecorderClient::setOutputFile(int fd, int64_t offset, int64_t leng return mRecorder->setOutputFile(fd, offset, length); } +status_t MediaRecorderClient::setOutputFileAuxiliary(int fd) +{ + LOGV("setOutputFileAuxiliary(%d)", fd); + Mutex::Autolock lock(mLock); + if (mRecorder == NULL) { + LOGE("recorder is not initialized"); + return NO_INIT; + } + return mRecorder->setOutputFileAuxiliary(fd); +} + status_t MediaRecorderClient::setVideoSize(int width, int height) { LOGV("setVideoSize(%dx%d)", width, height); diff --git a/media/libmediaplayerservice/MediaRecorderClient.h b/media/libmediaplayerservice/MediaRecorderClient.h index 6c17217..fded98e 100644 --- a/media/libmediaplayerservice/MediaRecorderClient.h +++ b/media/libmediaplayerservice/MediaRecorderClient.h @@ -37,6 +37,7 @@ public: virtual status_t setAudioEncoder(int ae); virtual status_t setOutputFile(const char* path); virtual status_t setOutputFile(int fd, int64_t offset, int64_t length); + virtual status_t setOutputFileAuxiliary(int fd); virtual status_t setVideoSize(int width, int height); virtual status_t setVideoFrameRate(int frames_per_second); virtual status_t setParameters(const String8& params); |