The JUCE cross-platform C++ framework, with DISTRHO/KXStudio specific changes
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

102 lines
3.0KB

  1. /*
  2. ==============================================================================
  3. This file is part of the JUCE library.
  4. Copyright (c) 2017 - ROLI Ltd.
  5. JUCE is an open source library subject to commercial or open-source
  6. licensing.
  7. By using JUCE, you agree to the terms of both the JUCE 5 End-User License
  8. Agreement and JUCE 5 Privacy Policy (both updated and effective as of the
  9. 27th April 2017).
  10. End User License Agreement: www.juce.com/juce-5-licence
  11. Privacy Policy: www.juce.com/juce-5-privacy-policy
  12. Or: You may also use this code under the terms of the GPL v3 (see
  13. www.gnu.org/licenses).
  14. JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
  15. EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
  16. DISCLAIMED.
  17. ==============================================================================
  18. */
  19. #if JUCE_MAC || JUCE_IOS
  20. #include "../native/juce_mac_CameraDevice.h"
  21. #elif JUCE_WINDOWS
  22. #include "../native/juce_win32_CameraDevice.h"
  23. #elif JUCE_ANDROID
  24. #include "../native/juce_android_CameraDevice.h"
  25. #endif
  26. //==============================================================================
  27. CameraDevice::CameraDevice (const String& nm, int index, int minWidth, int minHeight, int maxWidth, int maxHeight, bool useHighQuality)
  28. : name (nm), pimpl (new Pimpl (name, index, minWidth, minHeight, maxWidth, maxHeight, useHighQuality))
  29. {
  30. }
  31. CameraDevice::~CameraDevice()
  32. {
  33. stopRecording();
  34. pimpl = nullptr;
  35. }
  36. Component* CameraDevice::createViewerComponent()
  37. {
  38. return new ViewerComponent (*this);
  39. }
  40. void CameraDevice::startRecordingToFile (const File& file, int quality)
  41. {
  42. stopRecording();
  43. pimpl->startRecordingToFile (file, quality);
  44. }
  45. Time CameraDevice::getTimeOfFirstRecordedFrame() const
  46. {
  47. return pimpl->getTimeOfFirstRecordedFrame();
  48. }
  49. void CameraDevice::stopRecording()
  50. {
  51. pimpl->stopRecording();
  52. }
  53. void CameraDevice::addListener (Listener* listenerToAdd)
  54. {
  55. if (listenerToAdd != nullptr)
  56. pimpl->addListener (listenerToAdd);
  57. }
  58. void CameraDevice::removeListener (Listener* listenerToRemove)
  59. {
  60. if (listenerToRemove != nullptr)
  61. pimpl->removeListener (listenerToRemove);
  62. }
  63. //==============================================================================
  64. StringArray CameraDevice::getAvailableDevices()
  65. {
  66. JUCE_AUTORELEASEPOOL
  67. {
  68. return Pimpl::getAvailableDevices();
  69. }
  70. }
  71. CameraDevice* CameraDevice::openDevice (int index,
  72. int minWidth, int minHeight,
  73. int maxWidth, int maxHeight,
  74. bool useHighQuality)
  75. {
  76. if (ScopedPointer<CameraDevice> d = new CameraDevice (getAvailableDevices() [index], index,
  77. minWidth, minHeight, maxWidth, maxHeight, useHighQuality))
  78. if (d->pimpl->openedOk())
  79. return d.release();
  80. return nullptr;
  81. }