summaryrefslogtreecommitdiffstats
path: root/src/plugins/avfoundation/camera/avfmediaassetwriter.mm
diff options
context:
space:
mode:
authorYoann Lopes <yoann.lopes@theqtcompany.com>2016-02-10 14:52:44 +0100
committerYoann Lopes <yoann.lopes@qt.io>2016-06-03 09:43:10 +0000
commit4fa23e08a116b4d9bb67e25771c511838104999f (patch)
tree533c4057ddc353774a2c8a34c0d8c74f32c2ebf3 /src/plugins/avfoundation/camera/avfmediaassetwriter.mm
parentc0319d1cfb056c2e26f436357cdfdb3bdecd10f0 (diff)
AVFoundation: implement QVideoEncoderSettingsControl.
Task-number: QTBUG-40338 Change-Id: Ic23dabaad94d7b293019460710ae1a097002e227 Reviewed-by: Christian Stromme <christian.stromme@qt.io>
Diffstat (limited to 'src/plugins/avfoundation/camera/avfmediaassetwriter.mm')
-rw-r--r--src/plugins/avfoundation/camera/avfmediaassetwriter.mm27
1 files changed, 6 insertions, 21 deletions
diff --git a/src/plugins/avfoundation/camera/avfmediaassetwriter.mm b/src/plugins/avfoundation/camera/avfmediaassetwriter.mm
index a541956a8..b5e2bbc94 100644
--- a/src/plugins/avfoundation/camera/avfmediaassetwriter.mm
+++ b/src/plugins/avfoundation/camera/avfmediaassetwriter.mm
@@ -73,7 +73,6 @@ bool qt_camera_service_isValid(AVFCameraService *service)
- (bool)addAudioCapture;
- (bool)addWriterInputs;
- (void)setQueues;
-- (NSDictionary *)videoSettings;
- (NSDictionary *)audioSettings;
- (void)updateDuration:(CMTime)newTimeStamp;
@end
@@ -98,6 +97,7 @@ bool qt_camera_service_isValid(AVFCameraService *service)
m_startTime = kCMTimeInvalid;
m_lastTimeStamp = kCMTimeInvalid;
m_durationInMs.store(0);
+ m_videoSettings = nil;
}
return self;
@@ -105,6 +105,7 @@ bool qt_camera_service_isValid(AVFCameraService *service)
- (bool)setupWithFileURL:(NSURL *)fileURL
cameraService:(AVFCameraService *)service
+ videoSettings:(NSDictionary *)videoSettings
{
Q_ASSERT(fileURL);
@@ -114,6 +115,7 @@ bool qt_camera_service_isValid(AVFCameraService *service)
}
m_service = service;
+ m_videoSettings = videoSettings;
m_videoQueue.reset(dispatch_queue_create("video-output-queue", DISPATCH_QUEUE_SERIAL));
if (!m_videoQueue) {
@@ -364,7 +366,9 @@ bool qt_camera_service_isValid(AVFCameraService *service)
&& m_service->videoOutput()->videoDataOutput());
Q_ASSERT(m_assetWriter);
- m_cameraWriterInput.reset([[AVAssetWriterInput alloc] initWithMediaType:AVMediaTypeVideo outputSettings:[self videoSettings]]);
+ m_cameraWriterInput.reset([[AVAssetWriterInput alloc] initWithMediaType:AVMediaTypeVideo
+ outputSettings:m_videoSettings
+ sourceFormatHint:m_service->session()->videoCaptureDevice().activeFormat.formatDescription]);
if (!m_cameraWriterInput) {
qDebugCamera() << Q_FUNC_INFO << "failed to create camera writer input";
return false;
@@ -411,25 +415,6 @@ bool qt_camera_service_isValid(AVFCameraService *service)
}
}
-
-- (NSDictionary *)videoSettings
-{
- // TODO: these settings should be taken from
- // the video encoding settings control.
- // For now we either take recommended (iOS >= 7.0)
- // or some hardcoded values - they are still better than nothing (nil).
-#if QT_IOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__IPHONE_7_0)
- AVCaptureVideoDataOutput *videoOutput = m_service->videoOutput()->videoDataOutput();
- if (QSysInfo::MacintoshVersion >= QSysInfo::MV_IOS_7_0 && videoOutput)
- return [videoOutput recommendedVideoSettingsForAssetWriterWithOutputFileType:AVFileTypeQuickTimeMovie];
-#endif
- NSDictionary *videoSettings = [NSDictionary dictionaryWithObjectsAndKeys:AVVideoCodecH264, AVVideoCodecKey,
- [NSNumber numberWithInt:1280], AVVideoWidthKey,
- [NSNumber numberWithInt:720], AVVideoHeightKey, nil];
-
- return videoSettings;
-}
-
- (NSDictionary *)audioSettings
{
// TODO: these settings should be taken from