using the camera with av foundation -...
TRANSCRIPT
![Page 1: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/1.jpg)
Brad FordiPhone Engineering
Overview and best practices
Using the Camera with AV Foundation
2
![Page 2: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/2.jpg)
What You’ll Learn
• Why and when you should use AV Foundation capture• The AV Foundation capture programming model• Performance considerations when working with the camera
3
![Page 3: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/3.jpg)
Sample Code for This Session
• Find My iCone • AVCam Demo• PinchyPreview• Wavy
Materials available at:http://developer.apple.com/wwdc/attendee/
Only on iPhone
4
![Page 4: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/4.jpg)
Technology Framework
CoreAnimationCoreAudio CoreMedia
AVFoundation
UIKit
MediaPlayer
5
![Page 5: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/5.jpg)
Using the Camera in iPhone OS 3.x
UIImagePickerController
Hideable camera controls UI
API for high, medium, or low quality recording
takePhoto API Control overlay for start/stop recordingUser touch to focus, like Camera app
Simple programmatic access
00:00:15
6
![Page 6: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/6.jpg)
Using the Camera in iOS 4UIImagePickerController offers more control
• Movie recording at high, medium, and low quality• High resolution still image capture• Access to the flash• Switching between front and back cameras
Incorporating the Camera and Photo Library in your App PresidioThursday 9:00AM
7
![Page 7: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/7.jpg)
Why Use AV Foundation Capture?
• Independent focus, exposure, and white balance controls■ Independent locking■ Independent points of interest for focus and exposure
• Access to video frame data■ Accurate timestamps■ Per-frame metadata■ Configurable output format (e.g. 420v, BGRA)■ Configurable max frame rate■ Configurable resolution
Full access to the camera
8
![Page 8: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/8.jpg)
Why Use AV Foundation Capture?Flexible output
• Still Image■ YUV and RGB output■ Exif metadata insertion
• QuickTime Movie■ Movie metadata insertion■ Orientation lock
• Video Preview in a CALayer■ Aspect fit, aspect fill, and stretch
• Audio level metering• Access to audio sample data
9
![Page 9: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/9.jpg)
Capture Basics: Inputs and Outputs
Video
Outputs
InputsAudio
10
![Page 10: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/10.jpg)
Capture Basics: Inputs and Outputs
Outputs
InputsVideo
Audio
AVCaptureInputAVCaptureInput
AVCaptureSession
AVCaptureOutputAVCaptureOutputAVCaptureOutputAVCaptureOutput
AVCaptureVideoPreviewLayer
11
![Page 11: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/11.jpg)
Common Capture Use Cases
• Process YUV video frames from the camera
• Control the camera, take photos, and record movies
• Preview video from the camera to a Core Animation layer
• Process PCM audio data from the microphone to draw a waveform
12
![Page 12: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/12.jpg)
Common Capture Use Cases
• Process YUV video frames from the camera
• Control the camera, take photos, and record movies
• Preview video from the camera to a Core Animation layer
• Process PCM audio data from the microphone to draw a waveform
13
![Page 13: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/13.jpg)
Find My iConeDemo
Processing frames using AVCaptureVideoDataOutput
14
![Page 14: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/14.jpg)
Find My iCone
Inputs
OutputsOutputs
Inputs Video
15
![Page 15: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/15.jpg)
Find My iCone
Inputs
OutputsOutputs
Inputs Video
AVCaptureSession
AVCaptureVideoDataOutput
AVCaptureDeviceInput
AVCaptureDevice
CMSampleBuffer
AVCaptureVideoPreviewLayer
16
![Page 16: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/16.jpg)
AVCaptureSession *session = [[AVCaptureSession alloc] init];
session.sessionPreset = AVCaptureSessionPresetHigh;
• Create an AVCaptureSession
Find My iCone (Code Snippet SP16)
• Find a suitable AVCaptureDevice
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
• Create and add an AVCaptureDeviceInput
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];[session addInput:input];
17
![Page 17: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/17.jpg)
AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init];[session addOutput:output];
• Create and add an AVCaptureVideoDataOutput
Find My iCone (Code Snippet SP16)
• Configure your output, and start the session
dispatch_queue_t queue = dispatch_queue_create(“myQueue”, NULL);[output setSampleBufferDelegate:self queue:queue];[session startRunning];
• Implement your delegate callback
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection{// CFShow(sampleBuffer);
}
18
![Page 18: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/18.jpg)
AVCaptureVideoDataOutputWhat is a CMSampleBuffer?
• Defined in <CoreMedia/CMSampleBuffer.h>• Reference-counted Core Foundation object containing:
■ Sample data
CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
// With the pixelBuffer, you can access the buffer’s base address, // row bytes, etc.
// See <CoreVideo/CVPixelBuffer.h>
19
![Page 19: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/19.jpg)
AVCaptureVideoDataOutputWhat is a CMSampleBuffer?
• Defined in <CoreMedia/CMSampleBuffer.h>• Reference-counted Core Foundation object containing:
■ Timing Information
CMTime presentationTime = CMSampleBufferGetPresentationTimeStamp(sampleBuffer);
CMTime decodeTime = CMSampleBufferGetDecodeTimeStamp(sampleBuffer);
20
![Page 20: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/20.jpg)
AVCaptureVideoDataOutputWhat is a CMSampleBuffer?
• Defined in <CoreMedia/CMSampleBuffer.h>• Reference-counted Core Foundation object containing:
■ Format Information
CMFormatDescriptionRef desc = CMSampleBufferGetFormatDescription(sampleBuffer);
int32_t pixelType = CMVideoFormatDescriptionGetCodecType(desc);CMVideoDimensions dimensions = CMVideoFormatDescriptionGetDimensions(desc);
21
![Page 21: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/21.jpg)
AVCaptureVideoDataOutputWhat is a CMSampleBuffer?
• Defined in <CoreMedia/CMSampleBuffer.h>• Reference-counted Core Foundation object containing:
■ Metadata about the sample data
// Metadata are carried as attachmentsCFDictionaryRef metadataDictionary = CMGetAttachment(sampleBuffer, CFSTR("MetadataDictionary"), NULL);
if (metadataDictionary)CFShow(metadataDictionary);
22
![Page 22: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/22.jpg)
AVCaptureVideoDataOutputWhat is a CMSampleBuffer?
• Defined in <CoreMedia/CMSampleBuffer.h>• Reference-counted Core Foundation object containing:
■ Sample Data■ Timing Information■ Format Information■ Metadata about the sample data
• See Code Snippet SP20.• Refer to the CoreMedia framework documentation
23
![Page 23: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/23.jpg)
AVCaptureVideoDataOutputPerformance considerations
• setSampleBufferDelegate:queue: requires a serial dispatch queue to ensure properly ordered buffer callbacks
• Note: Don’t pass dispatch_get_current_queue().• By default, buffers are emitted in the camera’s most efficient format.• Set the videoSettings property to specify a custom output format, such as ‘BGRA’ (see Code Snippet SP16)
• Hint: Both CoreGraphics and OpenGL work well with ‘BGRA’
24
![Page 24: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/24.jpg)
AVCaptureVideoDataOutputPerformance considerations
• Set the minFrameDuration property to cap the max frame rate• Configure the session to output the lowest practical resolution• Set the alwaysDiscardsLateVideoFrames property to YES (the default) for early, efficient dropping of late video frames
• Your sample buffer delegate’s callback must be FAST!• The camera may stop delivering frames if you hold onto buffers for too long
25
![Page 25: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/25.jpg)
AVCaptureSession• The central hub of the AV Foundation capture APIs
• The place for adding inputs and outputs
• Starts the flow of data when you call -startRunning
• Allows quality customization using -sessionPreset
High
Medium
Low
640x480
1280x720
Photo
Highest recording quality
Suitable for WiFi sharing
Suitable for 3G sharing
VGA
720p HD
Full photo resolution
26
![Page 26: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/26.jpg)
AVCaptureVideoDataOutputSupported resolutions and formats
Preset iPhone 3G(2vuy, BGRA)
iPhone 3GS(420v, BGRA)
iPhone 4 (Back)(420v, BGRA)
iPhone 4 (Front)(420v, BGRA)
High
Medium
Low
640x480
1280x720
Photo
400x304 640x480 1280x720 640x480
400x304 480x360 480x360 480x360
400x304 192x144 192x144 192x144
N/A 640x480 640x480 640x480
N/A N/A 1280x720 N/A
N/A N/A N/A N/A
27
![Page 27: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/27.jpg)
Common Capture Use Cases
• Process YUV video frames from the camera
• Control the camera, take photos, and record movies
• Preview video from the camera to a Core Animation layer
• Process PCM audio data from the microphone to draw a waveform
28
![Page 28: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/28.jpg)
AVCamDemo
Controlling the camera, taking still images, and recording video
29
![Page 29: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/29.jpg)
AVCam Demo
Video
Outputs
InputsAudio
30
![Page 30: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/30.jpg)
AVCam Demo
Video
Outputs
InputsAudio
AVCaptureVideoPreviewLayer
AVCaptureDeviceInput
AVCaptureDevice
AVCaptureDeviceInput
AVCaptureDevice
AVCaptureSession
AVCaptureStillImageOutput AVCaptureMovieFileOutput
31
![Page 31: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/31.jpg)
AVCam Demo: Camera ControlsFocus support
• Focus modes:■ AVCaptureFocusModeLocked■ AVCaptureFocusModeAutoFocus■ AVCaptureFocusModeContinuousAutoFocus
• Use isFocusModeSupported: To determine if the AVCaptureDevice supports a given mode
• The adjustingFocus property is key-value observable
32
![Page 32: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/32.jpg)
Focus support
• focusPointOfInterest is a CGPoint from (0, 0) to (1, 1)• Top-left is (0,0), bottom-right is (1,1)• iPhone sensor is mounted portrait, but scans landscape
AVCam Demo: Camera Controls
(0,0)
(1,1)
Direction of scan
33
![Page 33: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/33.jpg)
AVCam Demo: Camera ControlsFocus support
• Setting the focus mode or focus point of interest requires calling lockForConfiguration: On the AVCaptureDevice
if ( [device isFocusModeSupported:AVCaptureFocusModeLocked] ) {if ( YES == [device lockForConfiguration:&error] ) {device.focusMode = AVCaptureFocusModeLocked;[device unlockForConfiguration];
}}
Avoid holding lockForConfiguration: Unnecessarily
34
![Page 34: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/34.jpg)
AVCam Demo: Camera ControlsExposure support
• Exposure modes:■ AVCaptureExposureModeLocked■ AVCaptureExposureModeContinuousAutoExposure
• Use isExposureModeSupported: To determine if the AVCaptureDevice supports a given mode
• The adjustingExposure property is key-value observable• Exposure point of interest and focus point of interest are mutually exclusive, as are focus mode and exposure mode
• You must call lockForConfiguration: To set exposure mode or point of interest
35
![Page 35: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/35.jpg)
AVCam Demo: Camera ControlsWhite balance support
• White balance modes:■ AVCaptureWhiteBalanceModeLocked■ AVCaptureWhiteBalanceModeContinuousAutoWhiteBalance
• Use isWhiteBalanceModeSupported: To determine if the AVCaptureDevice supports a given mode
• The adjustingWhiteBalance property is key-value observable• You must call lockForConfiguration: To set white balance mode
36
![Page 36: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/36.jpg)
AVCam Demo: Camera ControlsFlash support
• Flash modes:■ AVCaptureFlashModeOff■ AVCaptureFlashModeOn■ AVCaptureFlashModeAuto
• Use hasFlash to determine if the AVCaptureDevice has this feature• You must call lockForConfiguration: To set the flash mode
37
![Page 37: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/37.jpg)
AVCam Demo: Camera ControlsTorch supportTorch support
• Torch modes:■ AVCaptureTorchModeOff■ AVCaptureTorchModeOn■ AVCaptureTorchModeAuto
• Use hasTorch to determine if the AVCaptureDevice has this feature• You must call lockForConfiguration: To set the torch mode• *Note* The torch only turns on if the device is associated with an AVCaptureSession instance that is running
38
![Page 38: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/38.jpg)
AVCaptureDeviceSupported camera controls
Feature iPhone 3G iPhone 3GS iPhone 4 (Back) iPhone 4 (Front)
focusMode
focusPointOfInterest
exposureMode
exposurePointOfInterest
whiteBalanceMode
flashMode
torchMode
√ √
√ √
√ √ √ √
√ √ √
√ √ √ √
√
√
39
![Page 39: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/39.jpg)
AVCam Demo: Camera switchingPerformance consideration
• startRunning and stopRunning are synchronous• An AVCaptureSession may be reconfigured while running• Use beginConfiguration and commitConfiguration• Follow along in Code Snippet SP21
// Don’t -stopRunning before reconfiguring.[session beginConfiguration];
[session removeInput:frontFacingCameraDeviceInput];[session addInput:backFacingCameraDeviceInput];
[session commitConfiguration];// Changes are only committed when the outermost -commitConfiguration// is invoked.
40
![Page 40: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/40.jpg)
AVCam Demo: Movie Recording
[movieFileOutput startRecordingToOutputFileURL:myURL recordingDelegate:self];
- (void)captureOutput:(AVCaptureFileOutput *)captureOutput didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL fromConnections:(NSArray *)connections error:(NSError *)error{// Write resulting movie to the camera roll.// See Code Snippet SP24
}
Performance consideration
• Initiate a QuickTime movie recording by supplying a file URL and delegate
• One AVCaptureFileOutputRecordingDelegate method is mandatory
41
![Page 41: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/41.jpg)
AVCam Demo: Movie RecordingAVCaptureMovieFileOutput writing policy
•You must pass a file-based NSURL•You may not pass a URL to an existing file; The movie file output does not overwrite existing resources•You must have permission to write to the URL specified
42
![Page 42: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/42.jpg)
AVCam Demo: Movie RecordingSetting limits
• -maxRecordedDuration• -maxRecordedFileSize• -minFreeDiskSpaceLimit
- (void)captureOutput:(AVCaptureFileOutput *)captureOutput didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL fromConnections:(NSArray *)connections error:(NSError *)error{
// Check the error AND its userInfo dictionary!BOOL recordingSuccess = YES; // assume success.if ( [error code] != noErr ) {
id val = [[error userInfo] objectForKey:AVErrorRecordingSuccessfullyFinishedKey];if ( val )
recordingSuccess = [val boolValue];}
}
43
![Page 43: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/43.jpg)
AVCam Demo: Movie RecordingEarly recording termination conditions
•AVErrorDiskFull•AVErrorDeviceWasDisconnected•AVErrorMaximumDurationReached•AVErrorMaximumFileSizeReached•AVErrorSessionWasInterrupted
•See Code Snippet SP24 for more detail
44
![Page 44: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/44.jpg)
AVCam Demo: Movie RecordingMetadata
• You may set movie level metadata at any time while recording• Allows for “slow” metadata, such as GPS location, to be acquired after the recording has startedNSMutableArray *metadata = [[NSMutableArray alloc] initWithCapacity:1];AVMutableMetadataItem *item = [[AVMutableMetadataItem alloc] init];item.keySpace = AVMetadataKeySpaceCommon;item.key = AVMetadataCommonKeyLocation;item.value = [NSString stringWithFormat:@"%+08.4lf%+09.4lf/", location.coordinate.latitute, location.coordinate.longitude];[metadata addObject:item];[item release];movieFileOutput.metadata = metadata;
See Code Snippet SP25 for more metadata examples
45
![Page 45: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/45.jpg)
AVCaptureMovieFileOutputSupported resolutions and bitrates (H.264 + AAC except where noted by *)
Preset iPhone 3G iPhone 3GS iPhone 4 (Back) iPhone 4 (Front)
High
Medium
Low
640x480
1280x720
Photo
No video*Apple Lossless
640x4803.5 mbps
1280x72010.5 mbps
640x4803.5 mbps
No video*Apple Lossless
480x360700 kbps
480x360700 kbps
480x360700 kbps
No video*Apple Lossless
192x144128 kbps
192x144128 kbps
192x144128 kbps
No video*Apple Lossless
640x4803.5 mbps
640x4803.5 mbps
640x4803.5 mbps
No video*Apple Lossless
No video64 kbps AAC
No video64 kbps AAC
No video64 kbps AAC
N/A N/A N/A N/A
46
![Page 46: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/46.jpg)
AVCam Demo: PhotosAVCaptureStillImageOutput considerations
• Uses a block-style completion handler to deliver image data as a CMSampleBuffer
• The sample buffer contains useful still image metadata
[stillImageOutput captureStillImageAsynchronouslyFromConnection:connection! completionHandler:
^(CMSampleBufferRef imageSampleBuffer, NSError *error) {! !CFDictionaryRef exifAttachments =CMGetAttachment(imageSampleBuffer, kCGImagePropertyExifDictionary, NULL);
if (exifAttachments) {// Attachments may be read or additional ones written
} }
];
47
![Page 47: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/47.jpg)
AVCam Demo: PhotosPerformance considerations
• Use -availableImageDataCVPixelFormatTypes and -availableImageDataCodecTypes to discover supported output formats
• Set your desired output format using outputSettings• If your final destination still image format is ‘jpeg’, let AVCaptureStillImageOutput do the compression for you
• Use +jpegStillImageNSDataRepresentation: To write a jpeg sample buffer to an NSData without recompression, merging in all metadata buffer attachments
48
![Page 48: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/48.jpg)
AVCaptureStillImageOutputSupported resolutions and formats
Preset iPhone 3G(yuvs, 2vuy, BGRA, jpeg)
iPhone 3GS(420f, 420v, BGRA, jpeg)
iPhone 4 (Back)(420f, 420v, BGRA, jpeg)
iPhone 4 (Front)(420f, 420v, BGRA, jpeg)
High
Medium
Low
640x480
1280x720
Photo
400x304 640x480 1280x720 640x480
400x304 480x360 480x360 480x360
400x304 192x144 192x144 192x144
N/A 640x480 640x480 640x480
N/A N/A 1280x720 N/A
1600x1200 2048x1536 2592x1936 640x480
49
![Page 49: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/49.jpg)
Common Capture Use Cases
• Process YUV video frames from the camera
• Control the camera, take photos, and record movies
• Preview video from the camera to a Core Animation layer
• Process PCM audio data from the microphone to draw a waveform
50
![Page 50: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/50.jpg)
PinchyPreviewDemo
Previewing images from the camera using AVCaptureVideoPreviewLayer
51
![Page 51: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/51.jpg)
PinchyPreview
Video
52
![Page 52: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/52.jpg)
PinchyPreview
Video
AVCaptureVideoPreviewLayer
AVCaptureDeviceInput
AVCaptureDevice
AVCaptureSession
53
![Page 53: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/53.jpg)
PinchyPreviewAVCaptureVideoPreviewLayer considerations
• Unlike AVCaptureOutput, it retains and owns its AVCaptureSession• Behaves like any other CALayer in a rendering tree• You may set the orientation property to tell the preview layer how it should rotate images coming from the camera
• On iPhone 4, the preview layer supports mirroring, which is the default when previewing from the front-facing camera
54
![Page 54: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/54.jpg)
PinchyPreviewAVCaptureVideoPreviewLayer considerations
• Supports three video gravity modes:■ AVLayerVideoGravityResizeAspect■ AVLayerVideoGravityResizeAspectFill■ AVLayerVideoGravityResize
55
![Page 55: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/55.jpg)
PinchyPreviewAVCaptureVideoPreviewLayer considerations
• Supports three video gravity modes:■ AVLayerVideoGravityResizeAspect■ AVLayerVideoGravityResizeAspectFill■ AVLayerVideoGravityResize
56
![Page 56: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/56.jpg)
PinchyPreviewAVCaptureVideoPreviewLayer considerations
• Supports three video gravity modes:■ AVLayerVideoGravityResizeAspect■ AVLayerVideoGravityResizeAspectFill■ AVLayerVideoGravityResize
57
![Page 57: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/57.jpg)
PinchyPreviewAVCaptureVideoPreviewLayer considerations
• Supports three video gravity modes:■ AVLayerVideoGravityResizeAspect■ AVLayerVideoGravityResizeAspectFill■ AVLayerVideoGravityResize
58
![Page 58: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/58.jpg)
PinchyPreviewAVCaptureVideoPreviewLayer considerations
• Supports three video gravity modes:■ AVLayerVideoGravityResizeAspect■ AVLayerVideoGravityResizeAspectFill■ AVLayerVideoGravityResize
59
![Page 59: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/59.jpg)
AVCaptureVideoPreviewLayerConsiderations when driving “tap-to-focus” using a preview
• When mapping a focus touch from a video preview, you must account for:■ Preview orientation■ Preview video gravity (aspect fit/fill/stretch)■ Mirroring
• Refer to AVCam Demo (0,0)
(1,1)
Direction of scan
60
![Page 60: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/60.jpg)
Common Capture Use Cases
• Process YUV video frames from the camera
• Control the camera, take photos, and record movies
• Preview video from the camera to a Core Animation layer
• Process PCM audio data from the microphone to draw a waveform
61
![Page 61: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/61.jpg)
WavyDemo
Audio sample processing using AVCaptureAudioDataOutput
62
![Page 62: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/62.jpg)
Wavy
Audio
63
![Page 63: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/63.jpg)
Wavy
AudioAVCaptureDeviceInput
AVCaptureDevice
AVCaptureSession
AVCaptureAudioDataOutput
CMSampleBuffer
64
![Page 64: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/64.jpg)
AVCaptureAudioDataOutputPerformance considerations
• setSampleBufferDelegate:queue:Requires a serial dispatch queue to ensure properly ordered buffer callbacks
• Note: Don’t pass dispatch_get_current_queue().• Emitted sample buffers contain interleaved 16-bit signed integer PCM samples, mono or stereo, at the audio hardware’s sample rate
• Unlike AVCaptureVideoDataOutput, there is no affordance for dropping samples
• Be FAST in your delegate callback!
65
![Page 65: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/65.jpg)
AVCaptureAudioDataOutputCMSampleBuffer usage
• Contains no image buffer, unlike AVCaptureVideoDataOutput• Uses CMBlockBuffer instead
CMBlockBufferRef blockBuffer = CMSampleBufferGetDataBuffer(sampleBuffer);
char *dataPointer = NULL;size_t lengthAtOffset, totalLength;OSStatus err = CMBlockBufferGetDataPointer(
blockBuffer,0, // offset&lengthAtOffset,&totalLength,&dataPointer);
66
![Page 66: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/66.jpg)
Multitasking Considerations
• You may record/process audio in the background if you set the appropriate UIBackgroundModes in your plist
67
![Page 67: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/67.jpg)
Multitasking Considerations
• Users receive the double-height red status bar when your app runs the audio device in the background
68
![Page 68: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/68.jpg)
Multitasking Considerations
• Background apps may not record/process video from cameras• When backgrounded, apps running the camera:
■ Receive AVCaptureSessionWasInterruptedNotification■ Receive AVCaptureSessionDidStopRunningNotification■ Movie recordings in progress are stopped
• When re-entering foreground, apps running the camera:■ Receive AVCaptureSessionInterruptionEndedNotification■ Receive AVCaptureSessionDidStartRunningNotification
• running and interrupted are also key-value observable properties
69
![Page 69: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/69.jpg)
AVCaptureConnections
The glue that holds the session, inputs, and outputs together
70
![Page 70: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/70.jpg)
Using AVCaptureConnections
Video
Outputs
InputsAudio
71
![Page 71: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/71.jpg)
Using AVCaptureConnections
Video
Outputs
InputsAudio
AVCaptureDeviceInput
AVCaptureDevice
AVCaptureDeviceInput
AVCaptureDevice
AVCaptureSessionAVCaptureVideoPreviewLayer
AVCaptureStillImageOutput AVCaptureMovieFileOutput
AVCaptureConnection AVCaptureConnection AVCaptureConnection
72
![Page 72: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/72.jpg)
Purpose of AVCaptureConnection
• Identifies a specific stream of captured media• Allows you to control exactly what is captured by enabling or disabling the connection
• An audio connection allows you to monitor audio levels• A video connection allows you to affect the video delivered to the output■ video orientation■ video mirroring
• *Note: AVCaptureVideoDataOutput does not support setVideoOrientation or setVideoMirrored on its connection
73
![Page 73: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/73.jpg)
AVCaptureConnection as Status Monitor
• AVCaptureConnection exposes the current state of the media stream while the session is running
• Refer to Code Snippet SP27
AVCaptureConnection *connection;
// ... find an audio connection ...
NSArray *audioChans = connection.audioChannels;
for (AVCaptureAudioChannel *channel in audioChans) { float avg = channel.averagePowerLevel;! float peak= channel.peakHoldLevel;
// update level meter UI}
74
![Page 74: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/74.jpg)
AVCaptureConnection as an IdentifierAn AVCaptureConnection instance refers to a specific stream in output delegate APIs
- (void)captureOutput:(AVCaptureFileOutput *)captureOutputdidFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURLfromConnections:(NSArray *)connections error:(NSError *)error{
}
AVCaptureSession
AVCaptureMovieFileOutput
75
![Page 75: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/75.jpg)
Finding AVCaptureConnections
• AVCaptureOutput implements
• Examples:
- (NSArray *)connections;
NSArray *movieFileOutputConnections= [movieFileOutput connections];
AVCaptureSession
AVCaptureMovieFileOutput
AVCaptureInput
AVCaptureDevice
76
![Page 76: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/76.jpg)
Disabling Connections
• Follow along in Code Snippet SP26
- (void)disableOutputConnection:(AVCaptureOutput *)output connectionWithMediaType:(NSString *)mediaType
{ NSArray *connections = output.connections; for ( AVCaptureConnection *conn in connections ) { // Ask the current connection's input for its media type NSArray *inputPorts = conn.inputPorts; for ( AVCaptureInputPort *port in inputPorts ) { if ( [port.mediaType isEqual:mediaType] ) { // Found a match. Disable the connection. connection.enabled = NO; return; } } }}
77
![Page 77: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/77.jpg)
Summary
• Process YUV video frames from the camera
• Control the camera, take photos, and record movies
• Preview video from the camera to a Core Animation layer
• Process PCM audio data from the microphone to draw a waveform
• AVCaptureVideoDataOutput
• AVCaptureDevice, AVCaptureStillImageOutput, AVCaptureMovieFileOutput
• AVCaptureVideoPreviewLayer
• AVCaptureAudioDataOutput
78
![Page 78: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/78.jpg)
Eryk VershenMedia Technologies [email protected]
Apple Developer Forumshttp://devforums.apple.com
More Information
79
![Page 79: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/79.jpg)
Discovering AV Foundation PresidioTuesday 2:00PM
Editing Media with AV Foundation PresidioTuesday 3:15PM
Related Sessions
Incorporating the Camera and Photo Library in your App PresidioThursday 9:00AM
Discovering AV Foundation (Repeat) Nob HillThursday 4:30PM
80
![Page 80: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/80.jpg)
AV Foundation Lab Graphics and Media Lab BFriday 11:30AM
AV Foundation Lab Graphics and Media Lab CWednesday 9:00AM
Core Animation Lab Graphics and Media Lab DThursday 3:15PM
Labs
81
![Page 81: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/81.jpg)
82
![Page 82: Using the Camera with AV Foundation - Huihoodocs.huihoo.com/apple/wwdc/2010/session_409__using... · Using the Camera with AV Foundation 2. ... API for high, medium, or low quality](https://reader030.vdocument.in/reader030/viewer/2022013120/5aa5cde57f8b9afa758db517/html5/thumbnails/82.jpg)
83