From 30ab66297501757d745b9ae10da61adcd891f497 Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Mon, 16 Nov 2009 15:43:38 -0800 Subject: Squashed commit of the following: commit 333057b355f8c260c549553b9a0634755c838b6a Author: Andreas Huber Date: Fri Nov 13 15:35:48 2009 -0800 Some more tweaks to AVC encoding on sholes. commit 9981d0ee52ec5b8b0182aae733d1571e3ebb8390 Author: Andreas Huber Date: Thu Nov 12 16:36:57 2009 -0800 Support for avc encoding, including sholes specific tweaks to pick the right colorspace for the camera to not require transcoding. commit 5ba0ebbbd4efca51f3ae1f60e2ca31e7d2cf136d Author: Andreas Huber Date: Wed Nov 11 09:50:03 2009 -0800 Enable actual (camera) video-only recording using h.263 or mpeg4 encoding. commit 3fd59c3526a37fe7c696f4a978925d1831c09313 Author: Andreas Huber Date: Tue Nov 10 14:57:48 2009 -0800 Allow switching between the PV recorder implementation and one supported by stagefright. This is controlled through the property "media.stagefright.enable-record". --- include/media/MediaRecorderBase.h | 59 ++++++++++++++++++++++++++++++++ include/media/PVMediaRecorder.h | 50 ++++++++++++++------------- include/media/stagefright/CameraSource.h | 5 +++ include/media/stagefright/MPEG4Writer.h | 2 ++ include/media/stagefright/MetaData.h | 3 +- include/media/stagefright/OMXCodec.h | 1 + 6 files changed, 95 insertions(+), 25 deletions(-) create mode 100644 include/media/MediaRecorderBase.h (limited to 'include') diff --git a/include/media/MediaRecorderBase.h b/include/media/MediaRecorderBase.h new file mode 100644 index 0000000..5b787a7 --- /dev/null +++ b/include/media/MediaRecorderBase.h @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MEDIA_RECORDER_BASE_H_ + +#define MEDIA_RECORDER_BASE_H_ + +#include + +namespace android { + +class ISurface; + +struct MediaRecorderBase { + MediaRecorderBase() {} + virtual ~MediaRecorderBase() {} + + virtual status_t init() = 0; + virtual status_t setAudioSource(audio_source as) = 0; + virtual status_t setVideoSource(video_source vs) = 0; + virtual status_t setOutputFormat(output_format of) = 0; + virtual status_t setAudioEncoder(audio_encoder ae) = 0; + virtual status_t setVideoEncoder(video_encoder ve) = 0; + virtual status_t setVideoSize(int width, int height) = 0; + virtual status_t setVideoFrameRate(int frames_per_second) = 0; + virtual status_t setCamera(const sp& camera) = 0; + virtual status_t setPreviewSurface(const sp& surface) = 0; + virtual status_t setOutputFile(const char *path) = 0; + virtual status_t setOutputFile(int fd, int64_t offset, int64_t length) = 0; + virtual status_t setParameters(const String8& params) = 0; + virtual status_t setListener(const sp& listener) = 0; + virtual status_t prepare() = 0; + virtual status_t start() = 0; + virtual status_t stop() = 0; + virtual status_t close() = 0; + virtual status_t reset() = 0; + virtual status_t getMaxAmplitude(int *max) = 0; + +private: + MediaRecorderBase(const MediaRecorderBase &); + MediaRecorderBase &operator=(const MediaRecorderBase &); +}; + +} // namespace android + +#endif // MEDIA_RECORDER_BASE_H_ diff --git a/include/media/PVMediaRecorder.h b/include/media/PVMediaRecorder.h index 0c71932..4f17c1a 100644 --- a/include/media/PVMediaRecorder.h +++ b/include/media/PVMediaRecorder.h @@ -18,8 +18,8 @@ #ifndef ANDROID_PVMEDIARECORDER_H #define ANDROID_PVMEDIARECORDER_H -#include #include +#include namespace android { @@ -27,37 +27,39 @@ class ISurface; class ICamera; class AuthorDriverWrapper; -class PVMediaRecorder -{ +class PVMediaRecorder : public MediaRecorderBase { public: PVMediaRecorder(); - ~PVMediaRecorder(); + virtual ~PVMediaRecorder(); - status_t init(); - status_t setAudioSource(audio_source as); - status_t setVideoSource(video_source vs); - status_t setOutputFormat(output_format of); - status_t setAudioEncoder(audio_encoder ae); - status_t setVideoEncoder(video_encoder ve); - status_t setVideoSize(int width, int height); - status_t setVideoFrameRate(int frames_per_second); - status_t setCamera(const sp& camera); - status_t setPreviewSurface(const sp& surface); - status_t setOutputFile(const char *path); - status_t setOutputFile(int fd, int64_t offset, int64_t length); - status_t setParameters(const String8& params); - status_t setListener(const sp& listener); - status_t prepare(); - status_t start(); - status_t stop(); - status_t close(); - status_t reset(); - status_t getMaxAmplitude(int *max); + virtual status_t init(); + virtual status_t setAudioSource(audio_source as); + virtual status_t setVideoSource(video_source vs); + virtual status_t setOutputFormat(output_format of); + virtual status_t setAudioEncoder(audio_encoder ae); + virtual status_t setVideoEncoder(video_encoder ve); + virtual status_t setVideoSize(int width, int height); + virtual status_t setVideoFrameRate(int frames_per_second); + virtual status_t setCamera(const sp& camera); + virtual status_t setPreviewSurface(const sp& surface); + virtual status_t setOutputFile(const char *path); + virtual status_t setOutputFile(int fd, int64_t offset, int64_t length); + virtual status_t setParameters(const String8& params); + virtual status_t setListener(const sp& listener); + virtual status_t prepare(); + virtual status_t start(); + virtual status_t stop(); + virtual status_t close(); + virtual status_t reset(); + virtual status_t getMaxAmplitude(int *max); private: status_t doStop(); AuthorDriverWrapper* mAuthorDriverWrapper; + + PVMediaRecorder(const PVMediaRecorder &); + PVMediaRecorder &operator=(const PVMediaRecorder &); }; }; // namespace android diff --git a/include/media/stagefright/CameraSource.h b/include/media/stagefright/CameraSource.h index ff3ea05..ea435de 100644 --- a/include/media/stagefright/CameraSource.h +++ b/include/media/stagefright/CameraSource.h @@ -26,6 +26,7 @@ namespace android { +class ICamera; class IMemory; class ISurface; class Camera; @@ -33,9 +34,12 @@ class Camera; class CameraSource : public MediaSource { public: static CameraSource *Create(); + static CameraSource *CreateFromICamera(const sp &icamera); virtual ~CameraSource(); + void setPreviewSurface(const sp &surface); + virtual status_t start(MetaData *params = NULL); virtual status_t stop(); @@ -48,6 +52,7 @@ private: friend class CameraSourceListener; sp mCamera; + sp mPreviewSurface; Mutex mLock; Condition mFrameAvailableCondition; diff --git a/include/media/stagefright/MPEG4Writer.h b/include/media/stagefright/MPEG4Writer.h index 6b0399f..2ca04fa 100644 --- a/include/media/stagefright/MPEG4Writer.h +++ b/include/media/stagefright/MPEG4Writer.h @@ -33,6 +33,7 @@ class MetaData; class MPEG4Writer : public RefBase { public: MPEG4Writer(const char *filename); + MPEG4Writer(int fd); void addSource(const sp &source); status_t start(); @@ -65,6 +66,7 @@ private: List mBoxes; off_t addSample(MediaBuffer *buffer); + off_t addLengthPrefixedSample(MediaBuffer *buffer); MPEG4Writer(const MPEG4Writer &); MPEG4Writer &operator=(const MPEG4Writer &); diff --git a/include/media/stagefright/MetaData.h b/include/media/stagefright/MetaData.h index c2d8f98..583128f 100644 --- a/include/media/stagefright/MetaData.h +++ b/include/media/stagefright/MetaData.h @@ -38,7 +38,8 @@ enum { kKeyESDS = 'esds', // raw data kKeyAVCC = 'avcc', // raw data kKeyWantsNALFragments = 'NALf', - kKeyIsSyncFrame = 'sync', + kKeyIsSyncFrame = 'sync', // int32_t (bool) + kKeyIsCodecConfig = 'conf', // int32_t (bool) kKeyTime = 'time', // int64_t (usecs) kKeyDuration = 'dura', // int64_t (usecs) kKeyColorFormat = 'colf', diff --git a/include/media/stagefright/OMXCodec.h b/include/media/stagefright/OMXCodec.h index 7890883..4c60623 100644 --- a/include/media/stagefright/OMXCodec.h +++ b/include/media/stagefright/OMXCodec.h @@ -159,6 +159,7 @@ private: const char *mime, OMX_U32 width, OMX_U32 height); status_t setupMPEG4EncoderParameters(); + status_t setupAVCEncoderParameters(); void setVideoOutputFormat( const char *mime, OMX_U32 width, OMX_U32 height); -- cgit v1.1