int V4L2JpegEncoder::encodeImage(const ImageConfig *input)
{
	int ret;

	TRACE();

	output.width = input->width;
	output.height = input->height;

	ret = initDevice(V4L2_OUTPUT, input);
	if (ret < 0) {
		ERR("Failed to configure output stream");
		return ret;
	}

	ret = initDevice(V4L2_CAPTURE, &output);
	if (ret < 0) {
		ERR("Failed to configure capture stream");
		cleanupDevice(V4L2_OUTPUT);
		return ret;
	}

	ret = device->pollDevice(POLLIN | POLLERR, 1000);

	cleanupDevice(V4L2_OUTPUT);
	cleanupDevice(V4L2_CAPTURE);

	if (!(ret & POLLIN)) {
		ERR("No frames received before timeout");
		return -1;
	}

	return 0;
}
  //---------------------------------------------------------------
  void
  Device1394::fini()
  {
    MIRO_DBG(VIDEO, LL_DEBUG, "Device1394::fini()");
	
    if (is_open_)
    {
      MIRO_DBG(VIDEO, LL_DEBUG, "Device1394::fini() close");
      dc1394_stop_iso_transmission(handle_, p_camera_->node);
      dc1394_dma_unlisten(handle_, p_camera_);
      dc1394_dma_release_camera(handle_, p_camera_);
      is_open_ = false;
    }

    cleanupDevice();
  }