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; }