diff options
Diffstat (limited to 'client/player.cc')
-rw-r--r-- | client/player.cc | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/client/player.cc b/client/player.cc index a8f6152..5ee0ccd 100644 --- a/client/player.cc +++ b/client/player.cc @@ -54,13 +54,35 @@ void Player::show_frame() fprintf(stderr, "Frame!%d\n", num++); frame = decoder->getFrame(); - if(!frame) return; - - dvdecoder.decode(frame); - free(frame); + if(frame) { + dvdecoder.decode(frame); + free(frame); + } render.width = widget->width(); render.height = widget->height(); render.display(WIDTH, HEIGHT); - } + +//Hmm ... is this how it should work? +void Player::getScreenShot(QImage *image) +{ + double R, G, B; + double Y, U, V; + + char *yuv = render.getDisplayData(); + + for(int x = 0; x < WIDTH; x++) { + for(int y = 0; y < HEIGHT; y++) { + Y = yuv[(x + y * WIDTH)]; + U = yuv[(x + y * WIDTH)]; + V = yuv[(x + y * WIDTH)]; + + R = Y + 1.4075 * (V - 128); + G = Y - (0.3455 * (U - 128)) - (0.7169 * (V - 128)); + B = Y + 1.7790 * (U - 128); + // QRgb qRgb((unsigned int)R,(unsigned int)G,(unsigned int)B); + image->setPixel(x, y, qRgb((unsigned int)R,(unsigned int)G,(unsigned int)B)); + } + } + } |