bool SDLSurface::renderToSurface(RGBVideoSample& videoSample) {
  if (!videoSample) {
    return false;
  }
  if (!isInitialized()) {
    return false;
  }
#ifdef DEBUG
  std::cout << "SDLSurface::renderToSurface" << std::endl;
#endif
  SDLSurfaceLock surfaceLock(m_pSurface);
  if (!surfaceLock) {
    return false;
  }
  RGBVideoFormat videoFormat(videoSample.sampleFormat());
  if (videoFormat.sizePixels() != sizePixels()) {
    return false;
  }
  if (videoFormat.bitsPerPixel() != bitsPerPixel()) {
    return false;
  }
  if (videoFormat.sizeRowBytes() != sizeRowBytes()) {
    return false;
  }
  if (videoFormat.sizeBytes() != sizeBytes()) {
    return false;
  }
  if (videoFormat.rgbFormat() != rgbFormat()) {
    return false;
  }
  RGBVideoFrameSharedPtr pVideoFrame(videoSample.sampleData());
  ImageViewType imageView(pVideoFrame->imageView());
  switch (rgbFormat()) {
    case RGB888:
      renderImageToSurface<rgb8_view_t, rgb8_ptr_t>(imageView);
      break;
    case RGBA8888:
      renderImageToSurface<rgba8_view_t, rgba8_ptr_t>(imageView);
      break;
    case BGR888:
      renderImageToSurface<bgr8_view_t, bgr8_ptr_t>(imageView);
      break;
    case ABGR8888:
      renderImageToSurface<abgr8_view_t, abgr8_ptr_t>(imageView);
      break;
    default:
      return false;
  }
  return true;
}
/*
	QRGB888ImageMaker
*/
QRGB888ImageMaker::QRGB888ImageMaker( int width, int height )
	: mQImage(NULL),
	  mImageConverter(NULL)
{
	ImageFormat rgbFormat( width, height, ImageFormat::RGB24 );
	mImageConverter = new ImageConverter( rgbFormat );
	
	// Get a grip onto the data of the image that serves as output of the ImageConverter
	uchar* data = reinterpret_cast<uchar*>( mImageConverter->getImage().getBuffer().getBytes() );

	// Create a QImage pointing *directly* onto this data
	mQImage = new QImage( data, width, height, QImage::Format_RGB888 );
}
bool SDLSurface::isInitialized() const {
  if (!m_pSurface) {
    return false;
  }
  if (!isValidRGBFormat(rgbFormat())) {
    return false;
  }
  IntegerSize sizePixelsSurface(sizePixels());
  if (!sizePixelsSurface.width()) {
    return false;
  }
  if (!sizePixelsSurface.height()) {
    return false;
  }
  return true;
}