/**
   * @param inputPath Absolute filename pathname or "-" to use a stream
   * @param inputStream Can be null
   * @param params
   * @param sourceFormat
   * @param fullSize
   * @param outputStream Stream to write to
   * @throws ProcessorException
   */
  private void doProcess(
      String inputPath,
      InputStream inputStream,
      Parameters params,
      SourceFormat sourceFormat,
      Dimension fullSize,
      OutputStream outputStream)
      throws ProcessorException {
    final Set<OutputFormat> availableOutputFormats = getAvailableOutputFormats(sourceFormat);
    if (getAvailableOutputFormats(sourceFormat).size() < 1) {
      throw new UnsupportedSourceFormatException(sourceFormat);
    } else if (!availableOutputFormats.contains(params.getOutputFormat())) {
      throw new UnsupportedOutputFormatException();
    }

    try {
      IMOperation op = new IMOperation();
      op.addImage(inputPath);
      assembleOperation(op, params, fullSize);

      op.addImage(params.getOutputFormat().getExtension() + ":-"); // write to stdout

      ConvertCmd convert = new ConvertCmd(true);

      String binaryPath =
          Application.getConfiguration().getString("GraphicsMagickProcessor.path_to_binaries", "");
      if (binaryPath.length() > 0) {
        convert.setSearchPath(binaryPath);
      }
      if (inputStream != null) {
        convert.setInputProvider(new Pipe(inputStream, null));
      }
      convert.setOutputConsumer(new Pipe(null, outputStream));
      convert.run(op);
    } catch (InterruptedException | IM4JavaException | IOException e) {
      throw new ProcessorException(e.getMessage(), e);
    }
  }