16b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner/* 26b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) 36b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 46b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner This library is free software; you can redistribute it and/or 56b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner modify it under the terms of the GNU Library General Public 66b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner License as published by the Free Software Foundation; either 76b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner version 2 of the License, or (at your option) any later version. 86b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 96b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner This library is distributed in the hope that it will be useful, 106b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner but WITHOUT ANY WARRANTY; without even the implied warranty of 116b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 126b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner Library General Public License for more details. 136b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 146b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner You should have received a copy of the GNU Library General Public License 156b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner along with this library; see the file COPYING.LIB. If not, write to 166b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 176b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner Boston, MA 02110-1301, USA. 186b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner*/ 196b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 206b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#include "config.h" 216b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#include "ImageGStreamer.h" 226b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 236b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#if USE(GSTREAMER) 246b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#include "GOwnPtr.h" 256b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 266b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennerusing namespace std; 276b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennerusing namespace WebCore; 286b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 296b70adc33054f8aee8c54d0f460458a9df11b8a5Russell BrennerPassRefPtr<ImageGStreamer> ImageGStreamer::createImage(GstBuffer* buffer) 306b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner{ 316b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner int width = 0, height = 0; 326b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner GstCaps* caps = gst_buffer_get_caps(buffer); 336b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner GstVideoFormat format; 346b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (!gst_video_format_parse_caps(caps, &format, &width, &height)) { 356b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner gst_caps_unref(caps); 366b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return 0; 376b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 386b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 396b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner gst_caps_unref(caps); 406b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 416b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner QImage::Format imageFormat; 426b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (format == GST_VIDEO_FORMAT_RGB) 436b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner imageFormat = QImage::Format_RGB888; 446b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner else 456b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner imageFormat = QImage::Format_RGB32; 466b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 476b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return adoptRef(new ImageGStreamer(buffer, IntSize(width, height), imageFormat)); 486b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner} 496b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 506b70adc33054f8aee8c54d0f460458a9df11b8a5Russell BrennerImageGStreamer::ImageGStreamer(GstBuffer*& buffer, IntSize size, QImage::Format imageFormat) 516b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner : m_image(0) 526b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner{ 536b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner QPixmap* surface = new QPixmap; 546b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner QImage image(GST_BUFFER_DATA(buffer), size.width(), size.height(), imageFormat); 556b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner surface->convertFromImage(image); 566b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner m_image = BitmapImage::create(surface); 576b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner} 586b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 596b70adc33054f8aee8c54d0f460458a9df11b8a5Russell BrennerImageGStreamer::~ImageGStreamer() 606b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner{ 616b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (m_image) 626b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner m_image.clear(); 636b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 646b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner m_image = 0; 656b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner} 666b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#endif // USE(GSTREAMER) 676b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 68