xrdp/vrplayer/decoder.cpp

74 lines
1.9 KiB
C++

#include "decoder.h"
Decoder::Decoder(QObject *parent) :
QObject(parent)
{
channel = NULL;
}
/*
* inititialize the decoder
*
* @return 0 on success, -1 on failure
*****************************************************************************/
int Decoder::init(QString filename)
{
printf("Decoder::init\n");
if (channel)
return -1;
/* open a virtual channel and connect to remote client */
channel = WTSVirtualChannelOpenEx(WTS_CURRENT_SESSION, "xrdpvr", 0);
if (channel == NULL)
{
qDebug() << "WTSVirtualChannelOpenEx() failed\n";
return -1;
}
/* initialize the player */
if (xrdpvr_init_player(channel, 101, filename.toAscii().data()))
{
fprintf(stderr, "failed to initialize the player\n");
return -1;
}
#if 1
sleep(1);
qDebug() << "sleeping 1";
xrdpvr_set_geometry(channel, 101, mainWindowGeometry.x(),
mainWindowGeometry.y(), mainWindowGeometry.width(),
mainWindowGeometry.height());
qDebug() << "set geometry to:" << mainWindowGeometry.x() <<
"" << mainWindowGeometry.y() <<
"" << mainWindowGeometry.width() <<
"" << mainWindowGeometry.height();
#endif
/* send compressed media data to client; client will decompress */
/* the media and play it locally */
xrdpvr_play_media(channel, 101, filename.toAscii().data());
/* perform clean up */
xrdpvr_deinit_player(channel, 101);
WTSVirtualChannelClose(channel);
return 0;
}
void Decoder::onGeometryChanged(QRect *g)
{
#if 1
mainWindowGeometry.setX(g->x());
mainWindowGeometry.setY(g->y());
mainWindowGeometry.setWidth(g->width());
mainWindowGeometry.setHeight(g->height());
#else
if (!channel)
return;
xrdpvr_set_geometry(channel, 101, g->x(), g->y(), g->width(), g->height());
qDebug() << "sent geometry";
#endif
}