Propose of this CL: Close the camera properly on MacOS in order to allow other apps to use it.
Changes in this CL:
1. video_capture_qtkit_info_objc.mm _captureDevicesInfo is never released. I have found this memory leak using Instruments from XCode. The patch is releasing it in dealloc.
2. In video_capture_qtkit_objc.h:
a) _captureDeviceName is not needed. Is allocated in the class but never used.
b) I don't see the role of the NSAutoreleasePool. also if you use it you have to release it when the class is destroyed. Otherwise you will leak memory. Libjingle has for each thread a pool on mac os.
3. In video_capture_qtkit_objc.mm
a) the camera is not stopped properly . See the changes from dealloc. NOTE : If you don't call [[_captureVideoDeviceInput device] close] other apps will not be able to use the camera since you are not closing your app
b) Removed QTCaptureDevice* videoDevice = (QTCaptureDevice*)[_captureDevices objectAtIndex:0]; I don't know why this because the desired camera is opened in setCaptureDeviceById and can be different than position 0 in the camera array. At this moment if you have two cameras and user want to pick the one on index 1 the app also locks the one on 0 .
Other changes I have done to improve (and are not in this CL):
a) I have set the FPS properly to the desired. I have succeeded to reduce the CPU with 3 % doing this. The current code for setting FPS is commented in webrtc
b) I have removed _rLock from the equation. I don't know if it's good or not but I hadn't understood what exactly we are trying to protect with this. Anyway in the current implementation is never released.
Review URL: https://webrtc-codereview.appspot.com/1097014
Patch from Silviu Caragea <silviu.cpp@gmail.com>.
git-svn-id: http://webrtc.googlecode.com/svn/trunk@3886 4adac7df-926f-26a2-2b94-8c16560cd09d
(required bumping minSdkVersion to 14)
This fixes a RuntimeException thrown on GalaxyNexus (but not N7, N4, or NS)
during startPreview() after the sequence of Start(), Stop(), Start(); seemingly
GN's OMX stack can't deal with parallel startPreview() & setPreviewDisplay() in
this situation.
Also:
- Only set the surface in the camera when valid
- Remove duplicate assignment
- Fix error check on voiceChannel allocation to account for multiple channel creation due to orientation change causing onDestroy()/onCreate() on the app, and rampant use of process-static holders for VoE data.
BUG=1537
Review URL: https://webrtc-codereview.appspot.com/1259005
git-svn-id: http://webrtc.googlecode.com/svn/trunk@3731 4adac7df-926f-26a2-2b94-8c16560cd09d
- Replace some deprecated calls/enums with their more modern equivalents.
- Clean up some usage of global data and/or hide it better
- Catch specific exceptions instead of Exception, and log the exception instead
of just its message.
- Random log message cleanups
- Added a build_with_libjingle gyp variable to mimic build_with_chromium for
when webrtc is built as part of a libjingle project but not part of chromium.
BUG=webrtc:1169
TEST=none
Review URL: https://webrtc-codereview.appspot.com/1105010
git-svn-id: http://webrtc.googlecode.com/svn/trunk@3554 4adac7df-926f-26a2-2b94-8c16560cd09d
*****
Restructure the video_capture code a bit to make room for a Media Foundation class implementation.
This change includes the following:
* Skeleton classes for a couple of base MediaFoundation classes (no code yet). See *_mf.*.
* Renaming the DirectShow based implementation from "_windows" to "_ds".
* Move the VideoCaptureImpl::CreateDeviceInfo() method into video_capture_factory_windows.cc
The reason for this is that that's where the other VideoCaptureImpl factory function is
and the factory function won't be implementation specific.
* Removed use of <initguid.h> from a header file to avoid defining the same guids in multiple object files.
(more info here: http://msdn.microsoft.com/en-us/library/windows/desktop/dd375463(v=vs.85).aspx)
* Moved a couple of global variables from the capture_delay_values_windows.h header and into
device_info_ds.cc since that's the only file that uses those variables.
* Delete capture_delay_values_windows.h.
* Added a factory function: DeviceInfoDS::Create() that'll create the DirectShow specific implementation.
TEST=This is mostly moving code around. The code that is added, is currently "dead". No manual testing needed.
BUG=chromium:140545
Review URL: https://webrtc-codereview.appspot.com/967008TBR=tommi@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/934017TBR=tommi@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/934018
git-svn-id: http://webrtc.googlecode.com/svn/trunk@3137 4adac7df-926f-26a2-2b94-8c16560cd09d
[ RUN ] ViEStandardIntegrationTest.RunsBaseTestWithoutErrors
2012-11-20 13:06:59.625 vie_auto_test[4001:f07] An uncaught exception was raised
2012-11-20 13:06:59.625 vie_auto_test[4001:f07] Error (1000) creating CGSWindow on line 259
2012-11-20 13:06:59.670 vie_auto_test[4001:f07] (
0 CoreFoundation 0x9a4e912b __raiseError + 219
1 libobjc.A.dylib 0x95ee252e objc_exception_throw + 230
2 CoreFoundation 0x9a448bbb +[NSException raise:format:] + 139
3 AppKit 0x996b4757 _NSCreateWindowWithOpaqueShape2 + 302
4 AppKit 0x996b2f40 -[NSWindow _commonAwake] + 1823
5 AppKit 0x9966fa77 -[NSWindow _commonInitFrame:styleMask:backing:defer:] + 1652
6 AppKit 0x9966eb3f -[NSWindow _initContent:styleMask:backing:defer:contentView:] + 1063
7 AppKit 0x9966e704 -[NSWindow initWithContentRect:styleMask:backing:defer:] + 70
8 vie_auto_test 0x0015c232 -[TestCocoaUi createWindows:] + 338
9 libobjc.A.dylib 0x95eef5d3 -[NSObject performSelector:withObject:] + 70
10 Foundation 0x969050c0 __NSThreadPerformPerform + 395
11 CoreFoundation 0x9a3bf66f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
12 CoreFoundation 0x9a3bf099 __CFRunLoopDoSources0 + 233
13 CoreFoundation 0x9a3e4e46 __CFRunLoopRun + 934
14 CoreFoundation 0x9a3e463a CFRunLoopRunSpecific + 378
15 CoreFoundation 0x9a3e44ab CFRunLoopRunInMode + 123
16 Foundation 0x9690d946 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 278
17 vie_auto_test 0x002e490a main + 522
18 vie_auto_test 0x000b1835 start + 53
*****
Restructure the video_capture code a bit to make room for a Media Foundation class implementation.
This change includes the following:
* Skeleton classes for a couple of base MediaFoundation classes (no code yet). See *_mf.*.
* Renaming the DirectShow based implementation from "_windows" to "_ds".
* Move the VideoCaptureImpl::CreateDeviceInfo() method into video_capture_factory_windows.cc
The reason for this is that that's where the other VideoCaptureImpl factory function is
and the factory function won't be implementation specific.
* Removed use of <initguid.h> from a header file to avoid defining the same guids in multiple object files.
(more info here: http://msdn.microsoft.com/en-us/library/windows/desktop/dd375463(v=vs.85).aspx)
* Moved a couple of global variables from the capture_delay_values_windows.h header and into
device_info_ds.cc since that's the only file that uses those variables.
* Delete capture_delay_values_windows.h.
* Added a factory function: DeviceInfoDS::Create() that'll create the DirectShow specific implementation.
TEST=This is mostly moving code around. The code that is added, is currently "dead". No manual testing needed.
BUG=chromium:140545
Review URL: https://webrtc-codereview.appspot.com/967008TBR=tommi@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/934017
git-svn-id: http://webrtc.googlecode.com/svn/trunk@3136 4adac7df-926f-26a2-2b94-8c16560cd09d
This change includes the following:
* Skeleton classes for a couple of base MediaFoundation classes (no code yet). See *_mf.*.
* Renaming the DirectShow based implementation from "_windows" to "_ds".
* Move the VideoCaptureImpl::CreateDeviceInfo() method into video_capture_factory_windows.cc
The reason for this is that that's where the other VideoCaptureImpl factory function is
and the factory function won't be implementation specific.
* Removed use of <initguid.h> from a header file to avoid defining the same guids in multiple object files.
(more info here: http://msdn.microsoft.com/en-us/library/windows/desktop/dd375463(v=vs.85).aspx)
* Moved a couple of global variables from the capture_delay_values_windows.h header and into
device_info_ds.cc since that's the only file that uses those variables.
* Delete capture_delay_values_windows.h.
* Added a factory function: DeviceInfoDS::Create() that'll create the DirectShow specific implementation.
TEST=This is mostly moving code around. The code that is added, is currently "dead". No manual testing needed.
BUG=chromium:140545
Review URL: https://webrtc-codereview.appspot.com/967008
git-svn-id: http://webrtc.googlecode.com/svn/trunk@3135 4adac7df-926f-26a2-2b94-8c16560cd09d
Remove declaration of a function that doesn't exist.
Remove call to GetProductId from video_capture_factory_windows that's not necessary.
This was the only dependency on device_info_windows.h outside of video_capture_windows.cc.
TEST=There's no code change, so no manual testing is required.
BUG=none
Review URL: https://webrtc-codereview.appspot.com/936025
git-svn-id: http://webrtc.googlecode.com/svn/trunk@3114 4adac7df-926f-26a2-2b94-8c16560cd09d
This makes it possible to link properly using Ninja on Windows.
Another issue exists due to the path containing spaces in webrtc/modules/video_capture/windows/direct_show_base_classes.gyp but that can be worked around by copying the baseclasses dir from the SDK into a path without spaces and then overriding the direct_show_dir variable with GYP_DEFINES.
Example:
set GYP_DEFINES=direct_show_dir=C:/WinSDKv7.1_directshow_baseclasses/
gclient runhooks
ninja -C out/Debug
Notice that the ending slash is needed for the direct_show_dir variable.
BUG=none
TEST=local compilation with the baseclasses copied from Windows SDK 7.1 into C:/WinSDKv7.1_directshow_baseclasses.
Review URL: https://webrtc-codereview.appspot.com/936014
git-svn-id: http://webrtc.googlecode.com/svn/trunk@3043 4adac7df-926f-26a2-2b94-8c16560cd09d