/**
  * Implements OperationSetVideoTelephony#setLocalVideoAllowed(Call, boolean). Modifies the local
  * media setup to reflect the requested setting for the streaming of the local video and then
  * re-invites all CallPeers to re-negotiate the modified media setup.
  *
  * @param call the call where we'd like to allow sending local video.
  * @param allowed <tt>true</tt> if local video transmission is allowed and <tt>false</tt>
  *     otherwise.
  * @throws OperationFailedException if video initialization fails.
  */
 @Override
 public void setLocalVideoAllowed(Call call, boolean allowed) throws OperationFailedException {
   ((CallJabberImpl) call).setLocalVideoAllowed(allowed, MediaUseCase.DESKTOP);
   size =
       (((VideoMediaFormat) ((CallJabberImpl) call).getDefaultDevice(MediaType.VIDEO).getFormat())
           .getSize());
   ((CallJabberImpl) call).modifyVideoContent(allowed);
 }
  /**
   * Check if the remote part supports Jingle video.
   *
   * @param calleeAddress Contact address
   * @param videoDevice <tt>MediaDevice</tt> used
   * @return true if contact support Jingle video, false otherwise
   * @throws OperationFailedException with the corresponding code if we fail to create the video
   *     call.
   */
  protected Call createOutgoingVideoCall(String calleeAddress, MediaDevice videoDevice)
      throws OperationFailedException {
    if (parentProvider.getConnection() == null) {
      throw new OperationFailedException(
          "Failed to create OutgoingJingleSession.\n" + "we don't have a valid XMPPConnection.",
          OperationFailedException.INTERNAL_ERROR);
    }

    CallJabberImpl call = new CallJabberImpl(basicTelephony);
    /* enable video */
    call.setVideoDevice(videoDevice);
    call.setLocalVideoAllowed(true, getMediaUseCase());

    return basicTelephony.createOutgoingCall(call, calleeAddress);
  }
 /**
  * Sets the indicator which determines whether the streaming of local video in a specific
  * <tt>Call</tt> is allowed. The setting does not reflect the availability of actual video capture
  * devices, it just expresses the desire of the user to have the local video streamed in the case
  * the system is actually able to do so.
  *
  * @param call the <tt>Call</tt> to allow/disallow the streaming of local video for
  * @param mediaDevice the media device to use for the desktop streaming
  * @param allowed <tt>true</tt> to allow the streaming of local video for the specified
  *     <tt>Call</tt>; <tt>false</tt> to disallow it
  * @throws OperationFailedException if initializing local video fails.
  */
 public void setLocalVideoAllowed(Call call, MediaDevice mediaDevice, boolean allowed)
     throws OperationFailedException {
   ((CallJabberImpl) call).setVideoDevice(mediaDevice);
   size = ((VideoMediaFormat) mediaDevice.getFormat()).getSize();
   super.setLocalVideoAllowed(call, allowed);
 }