1/* 2 * Copyright (C) 2010, 2011, 2012 Igalia S.L 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Library General Public 6 * License as published by the Free Software Foundation; either 7 * version 2 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Library General Public License for more details. 13 * 14 * You should have received a copy of the GNU Library General Public License 15 * along with this library; see the file COPYING.LIB. If not, write to 16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 17 * Boston, MA 02110-1301, USA. 18 */ 19 20#ifndef ImageGStreamer_h 21#define ImageGStreamer_h 22 23#if ENABLE(VIDEO) && USE(GSTREAMER) 24 25#include "BitmapImage.h" 26#include "FloatRect.h" 27#include "GRefPtrGStreamer.h" 28 29#include <gst/gst.h> 30#include <gst/video/video.h> 31 32#include <wtf/PassRefPtr.h> 33#include <wtf/RefCounted.h> 34#include <wtf/RefPtr.h> 35 36namespace WebCore { 37class IntSize; 38 39class ImageGStreamer : public RefCounted<ImageGStreamer> { 40 public: 41 static PassRefPtr<ImageGStreamer> createImage(GstBuffer* buffer, GstCaps* caps) 42 { 43 return adoptRef(new ImageGStreamer(buffer, caps)); 44 } 45 ~ImageGStreamer(); 46 47 PassRefPtr<BitmapImage> image() 48 { 49 ASSERT(m_image); 50 return m_image.get(); 51 } 52 53 void setCropRect(FloatRect rect) { m_cropRect = rect; } 54 FloatRect rect() 55 { 56 if (!m_cropRect.isEmpty()) 57 return FloatRect(m_cropRect); 58 ASSERT(m_image); 59 return FloatRect(0, 0, m_image->size().width(), m_image->size().height()); 60 } 61 62 private: 63 ImageGStreamer(GstBuffer*, GstCaps*); 64 RefPtr<BitmapImage> m_image; 65 FloatRect m_cropRect; 66 67#if USE(CAIRO) 68 GstVideoFrame m_videoFrame; 69#endif 70 }; 71} 72 73#endif // USE(GSTREAMER) 74#endif 75