Merge remote-tracking branch 'origin/5.4' into 5.5
authorYoann Lopes <yoann.lopes@theqtcompany.com>
Tue, 5 May 2015 09:48:21 +0000 (11:48 +0200)
committerYoann Lopes <yoann.lopes@theqtcompany.com>
Tue, 5 May 2015 09:48:21 +0000 (11:48 +0200)
Conflicts:
.qmake.conf
src/plugins/avfoundation/camera/avfcamerasession.h
src/plugins/avfoundation/camera/avfcamerasession.mm

Change-Id: Ib2e25d907a7069591920d2f69e007f314cc0fd85

1  2 
src/plugins/android/src/mediacapture/qandroidcapturesession.cpp
src/plugins/android/src/mediacapture/qandroidcapturesession.h
src/plugins/avfoundation/camera/avfaudioinputselectorcontrol.h
src/plugins/avfoundation/camera/avfaudioinputselectorcontrol.mm
src/plugins/avfoundation/camera/avfcamerasession.h
src/plugins/avfoundation/camera/avfcamerasession.mm
src/plugins/avfoundation/camera/avfmediarecordercontrol.h
src/plugins/avfoundation/camera/avfmediarecordercontrol.mm

@@@ -99,9 -92,7 +99,9 @@@ Q_SIGNALS
  
  private:
      static void updateCameraDevices();
-     void attachInputDevices();
+     void attachVideoInputDevice();
 +    void applyImageEncoderSettings();
 +    void applyViewfinderSettings();
  
      static int m_defaultCameraIndex;
      static QList<AVFCameraInfo> m_cameraDevices;
  
      AVCaptureSession *m_captureSession;
      AVCaptureDeviceInput *m_videoInput;
-     AVCaptureDeviceInput *m_audioInput;
      AVFCameraSessionObserver *m_observer;
 +
 +    QSet<AVFMediaVideoProbeControl *> m_videoProbes;
 +    QMutex m_videoProbesMutex;
 +
 +    FourCharCode m_defaultCodec;
  };
  
  QT_END_NAMESPACE
@@@ -143,8 -147,6 +143,7 @@@ AVFCameraSession::AVFCameraSession(AVFC
     , m_state(QCamera::UnloadedState)
     , m_active(false)
     , m_videoInput(nil)
-    , m_audioInput(nil)
 +   , m_defaultCodec(0)
  {
      m_captureSession = [[AVCaptureSession alloc] init];
      m_observer = [[AVFCameraSessionObserver alloc] initWithCameraSession:this];
@@@ -360,98 -352,6 +353,75 @@@ void AVFCameraSession::attachVideoInput
              }
          }
      }
-     //Attach audio input device:
-     if (m_service->audioInputSelectorControl()->isDirty()) {
-         if (m_audioInput) {
-             [m_captureSession removeInput:m_audioInput];
-             [m_audioInput release];
-             m_audioInput = 0;
-         }
-         AVCaptureDevice *audioDevice = m_service->audioInputSelectorControl()->createCaptureDevice();
-         NSError *error = nil;
-         m_audioInput = [AVCaptureDeviceInput
-                 deviceInputWithDevice:audioDevice
-                 error:&error];
-         if (!m_audioInput) {
-             qWarning() << "Failed to create audio device input";
-         } else {
-             [m_audioInput retain];
-             [m_captureSession addInput:m_audioInput];
-         }
-     }
  }
  
 +void AVFCameraSession::applyImageEncoderSettings()
 +{
 +    if (AVFImageEncoderControl *control = m_service->imageEncoderControl())
 +        control->applySettings();
 +}
 +
 +void AVFCameraSession::applyViewfinderSettings()
 +{
 +    if (AVFCameraViewfinderSettingsControl2 *vfControl = m_service->viewfinderSettingsControl2()) {
 +        QCameraViewfinderSettings vfSettings(vfControl->requestedSettings());
 +        if (AVFImageEncoderControl *imControl = m_service->imageEncoderControl()) {
 +            const QSize imageResolution(imControl->imageSettings().resolution());
 +            if (!imageResolution.isNull() && imageResolution.isValid()) {
 +                vfSettings.setResolution(imageResolution);
 +                vfControl->setViewfinderSettings(vfSettings);
 +                return;
 +            }
 +        }
 +
 +        if (!vfSettings.isNull())
 +            vfControl->applySettings();
 +    }
 +}
 +
 +void AVFCameraSession::addProbe(AVFMediaVideoProbeControl *probe)
 +{
 +    m_videoProbesMutex.lock();
 +    if (probe)
 +        m_videoProbes << probe;
 +    m_videoProbesMutex.unlock();
 +}
 +
 +void AVFCameraSession::removeProbe(AVFMediaVideoProbeControl *probe)
 +{
 +    m_videoProbesMutex.lock();
 +    m_videoProbes.remove(probe);
 +    m_videoProbesMutex.unlock();
 +}
 +
 +FourCharCode AVFCameraSession::defaultCodec()
 +{
 +    if (!m_defaultCodec) {
 +#if QT_MAC_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_7, __IPHONE_7_0)
 +        if (QSysInfo::MacintoshVersion >= qt_OS_limit(QSysInfo::MV_10_7, QSysInfo::MV_IOS_7_0)) {
 +            if (AVCaptureDevice *device = videoCaptureDevice()) {
 +                AVCaptureDeviceFormat *format = device.activeFormat;
 +                if (!format || !format.formatDescription)
 +                    return m_defaultCodec;
 +                m_defaultCodec = CMVideoFormatDescriptionGetCodecType(format.formatDescription);
 +            }
 +        }
 +#else
 +    // TODO: extract media subtype.
 +#endif
 +    }
 +    return m_defaultCodec;
 +}
 +
 +void AVFCameraSession::onCameraFrameFetched(const QVideoFrame &frame)
 +{
 +    m_videoProbesMutex.lock();
 +    QSet<AVFMediaVideoProbeControl *>::const_iterator i = m_videoProbes.constBegin();
 +    while (i != m_videoProbes.constEnd()) {
 +        (*i)->newFrameProbed(frame);
 +        ++i;
 +    }
 +    m_videoProbesMutex.unlock();
 +}
 +
  #include "moc_avfcamerasession.cpp"