[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdebase/runtime/phonon/xine
From: Matthias Kretz <kretz () kde ! org>
Date: 2008-05-27 7:18:57
Message-ID: 1211872737.793068.4602.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 813203 by mkretz:
start of an (disabled from compilation for 4.1) implementation for \
Experimental::VideoDataOutput
M +1 -1 CMakeLists.txt
M +4 -3 backend.cpp
M +78 -23 videodataoutput.cpp
M +18 -35 videodataoutput.h
--- trunk/KDE/kdebase/runtime/phonon/xine/CMakeLists.txt #813202:813203
@@ -18,7 +18,7 @@
effect.cpp
audiooutput.cpp
mediaobject.cpp
- videodataoutput.cpp
+ #videodataoutput.cpp
visualization.cpp
backend.cpp
volumefadereffect.cpp
--- trunk/KDE/kdebase/runtime/phonon/xine/backend.cpp #813202:813203
@@ -20,6 +20,7 @@
*/
#include "backend.h"
+//#include <phonon/experimental/backendinterface.h>
#include "mediaobject.h"
#include "effect.h"
#include "events.h"
@@ -28,7 +29,7 @@
#include "nullsink.h"
#include "visualization.h"
#include "volumefadereffect.h"
-#include "videodataoutput.h"
+//#include "videodataoutput.h"
#include "videowidget.h"
#include "wirecall.h"
#include "xinethread.h"
@@ -106,8 +107,8 @@
return new AudioDataOutput(parent);
case VisualizationClass:
return new Visualization(parent);
- case VideoDataOutputClass:
- return new VideoDataOutput(parent);
+ //case Phonon::Experimental::BackendInterface::VideoDataOutputClass:
+ //return new VideoDataOutput(parent);
case EffectClass:
{
Q_ASSERT(args.size() == 1);
--- trunk/KDE/kdebase/runtime/phonon/xine/videodataoutput.cpp #813202:813203
@@ -21,7 +21,10 @@
#include "videodataoutput.h"
#include <kdebug.h>
#include "sourcenode.h"
+#include <Phonon/Experimental/AbstractVideoDataOutput>
+#define K_XT(type) (static_cast<type *>(SinkNode::threadSafeObject().data()))
+
namespace Phonon
{
namespace Xine
@@ -29,64 +32,116 @@
class VideoDataOutputXT : public SinkNodeXT
{
public:
+ VideoDataOutputXT();
+ ~VideoDataOutputXT();
xine_video_port_t *videoPort() const { return m_videoPort; }
void rewireTo(SourceNodeXT *);
+ Phonon::Experimental::AbstractVideoDataOutput *m_frontend;
private:
+ struct Frame
+ {
+ int format;
+ int width;
+ int height;
+ double aspectRatio;
+ void *data0;
+ void *data1;
+ void *data2;
+ };
+ static void raw_output_cb(void *user_data, int frame_format, int frame_width,
+ int frame_height, double frame_aspect, void *data0, void *data1, void *data2);
+ static void raw_overlay_cb(void *user_data, int num_ovl, raw_overlay_t \
*overlay_array); +
+#ifdef XINE_VISUAL_TYPE_RAW
+ raw_visual_t m_visual;
+#endif
xine_video_port_t *m_videoPort;
};
-VideoDataOutput::VideoDataOutput(QObject *parent)
- : QObject(parent),
- SinkNode(new VideoDataOutputXT)
+void VideoDataOutputXT::raw_output_cb(void *user_data, int format, int width,
+ int height, double aspect, void *data0, void *data1, void *data2)
{
+ VideoDataOutputXT* vw = reinterpret_cast<VideoDataOutputXT *>(user_data);
+ const Experimental::VideoFrame f = {
+ width,
+ height,
+ aspect,
+ ((format == XINE_VORAW_YV12) ? Experimental::VideoFrame::Format_YV12 :
+ (format == XINE_VORAW_YUY2) ? Experimental::VideoFrame::Format_YUY2 :
+ (format == XINE_VORAW_RGB ) ? Experimental::VideoFrame::Format_RGB888 :
+ Experimental::VideoFrame::Format_Invalid),
+ QByteArray::fromRawData(reinterpret_cast<const char *>(data0), ((format == \
XINE_VORAW_RGB) ? 3 : (format == XINE_VORAW_YUY2) ? 2 : 1) * width * height), + \
QByteArray::fromRawData(reinterpret_cast<const char *>(data1), (format == XINE_VORAW_YV12) ? \
(width >> 1) + (height >> 1) : 0), + QByteArray::fromRawData(reinterpret_cast<const char \
*>(data2), (format == XINE_VORAW_YV12) ? (width >> 1) + (height >> 1) : 0) + };
+ if (vw->m_frontend) {
+ //kDebug(610) << "send frame to frontend";
+ vw->m_frontend->frameReady(f);
+ }
}
-VideoDataOutput::~VideoDataOutput()
+void VideoDataOutputXT::raw_overlay_cb(void *user_data, int num_ovl, raw_overlay_t \
*overlay_array) {
+ VideoDataOutputXT* vw = reinterpret_cast<VideoDataOutputXT *>(user_data);
+ Q_UNUSED(vw);
+ Q_UNUSED(num_ovl);
+ Q_UNUSED(overlay_array);
}
-void VideoDataOutputXT::rewireTo(SourceNodeXT *source)
+VideoDataOutputXT::VideoDataOutputXT()
+ : m_frontend(0),
+ m_videoPort(0)
{
- xine_post_wire_video_port(source->videoOutputPort(), videoPort());
+#ifdef XINE_VISUAL_TYPE_RAW
+ m_visual.user_data = static_cast<void *>(this);
+ m_visual.raw_output_cb = &Phonon::Xine::VideoDataOutputXT::raw_output_cb;
+ m_visual.raw_overlay_cb = &Phonon::Xine::VideoDataOutputXT::raw_overlay_cb;
+ m_visual.supported_formats = /*XINE_VORAW_YV12 | XINE_VORAW_YUY2 |*/ XINE_VORAW_RGB; // \
TODO + m_videoPort = xine_open_video_driver(XineEngine::xine(), "auto", \
XINE_VISUAL_TYPE_RAW, static_cast<void *>(&m_visual)); +#endif
}
-quint32 VideoDataOutput::format() const
+VideoDataOutputXT::~VideoDataOutputXT()
{
- return m_fourcc;
-}
+ if (m_videoPort) {
+ xine_video_port_t *vp = m_videoPort;
+ m_videoPort = 0;
-int VideoDataOutput::frameRate() const
-{
- return m_frameRate;
+ xine_close_video_driver(XineEngine::xine(), vp);
+ }
}
-void VideoDataOutput::setFrameRate(int frameRate)
+VideoDataOutput::VideoDataOutput(QObject *parent)
+ : QObject(parent),
+ SinkNode(new VideoDataOutputXT)
{
- m_frameRate = frameRate;
}
-QSize VideoDataOutput::naturalFrameSize() const
+VideoDataOutput::~VideoDataOutput()
{
- return QSize(320, 240);
}
-QSize VideoDataOutput::frameSize() const
+void VideoDataOutputXT::rewireTo(SourceNodeXT *source)
{
- return m_frameSize;
+ if (!source->videoOutputPort()) {
+ return;
+ }
+ xine_post_wire_video_port(source->videoOutputPort(), videoPort());
}
-void VideoDataOutput::setFrameSize(const QSize &frameSize)
+Experimental::AbstractVideoDataOutput *VideoDataOutput::frontendObject() const
{
- m_frameSize = frameSize;
+ return K_XT(const VideoDataOutputXT)->m_frontend;
}
-void VideoDataOutput::setFormat(quint32 fourcc)
+void VideoDataOutput::setFrontendObject(Experimental::AbstractVideoDataOutput *x)
{
- m_fourcc = fourcc;
+ K_XT(VideoDataOutputXT)->m_frontend = x;
}
}} //namespace Phonon::Xine
+#undef K_XT
+
#include "videodataoutput.moc"
-// vim: sw=4 ts=4
--- trunk/KDE/kdebase/runtime/phonon/xine/videodataoutput.h #813202:813203
@@ -1,5 +1,5 @@
/* This file is part of the KDE project
- Copyright (C) 2006 Matthias Kretz <kretz@kde.org>
+ Copyright (C) 2006,2008 Matthias Kretz <kretz@kde.org>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
@@ -17,57 +17,40 @@
Boston, MA 02110-1301, USA.
*/
-#ifndef Phonon_XINE_VIDEODATAOUTPUT_H
-#define Phonon_XINE_VIDEODATAOUTPUT_H
+#ifndef PHONON_XINE_VIDEODATAOUTPUT_H
+#define PHONON_XINE_VIDEODATAOUTPUT_H
-#include <phonon/experimental/videoframe.h>
-#include <QVector>
-#include <QByteArray>
-#include <QObject>
-#include <QSize>
-#include <QList>
#include "sinknode.h"
+#include <Phonon/Experimental/VideoDataOutputInterface>
+#include <Phonon/Experimental/VideoFrame>
+
+#include <QtCore/QByteArray>
+#include <QtCore/QList>
+#include <QtCore/QObject>
+#include <QtCore/QSize>
+#include <QtCore/QVector>
+
#include <xine.h>
namespace Phonon
{
namespace Xine
{
-/**
- * \author Matthias Kretz <kretz@kde.org>
- */
-class VideoDataOutput : public QObject, public Phonon::Xine::SinkNode
+
+class VideoDataOutput : public QObject, public Phonon::Experimental::VideoDataOutputInterface, \
public Phonon::Xine::SinkNode {
Q_OBJECT
- Q_INTERFACES(Phonon::Xine::SinkNode)
+ Q_INTERFACES(Phonon::Experimental::VideoDataOutputInterface Phonon::Xine::SinkNode)
public:
VideoDataOutput(QObject *parent);
~VideoDataOutput();
MediaStreamTypes inputMediaStreamTypes() const { return Phonon::Xine::Video; }
- public slots:
- int frameRate() const;
- void setFrameRate(int frameRate);
-
- QSize naturalFrameSize() const;
- QSize frameSize() const;
- void setFrameSize(const QSize &frameSize);
-
- quint32 format() const;
- void setFormat(quint32 fourcc);
-
- signals:
- void frameReady(const Phonon::Experimental::VideoFrame &frame);
- void endOfMedia();
-
- private:
- quint32 m_fourcc;
- int m_frameRate;
- QSize m_frameSize;
+ Experimental::AbstractVideoDataOutput *frontendObject() const;
+ void setFrontendObject(Experimental::AbstractVideoDataOutput *);
};
}} //namespace Phonon::Xine
-// vim: sw=4 ts=4 tw=80
-#endif // Phonon_XINE_VIDEODATAOUTPUT_H
+#endif // PHONON_XINE_VIDEODATAOUTPUT_H
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic