summaryrefslogtreecommitdiffstats
path: root/vrplayer/decoder.cpp
blob: 10e562e98c5ee312bea232ba9f6bcaf179d2506b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#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
}