From 32b7fdb0e9e5ec6cb6f791962efe68c40564b178 Mon Sep 17 00:00:00 2001 From: sandman Date: Thu, 01 Aug 2002 01:33:23 +0000 Subject: Fixed video output (frames allocated before video was enabled via show_video flag have never been displayes thereafter) Also optimized the video widget --- diff --git a/noncore/multimedia/opieplayer2/lib.cpp b/noncore/multimedia/opieplayer2/lib.cpp index aa37cd7..ac5cdd5 100644 --- a/noncore/multimedia/opieplayer2/lib.cpp +++ b/noncore/multimedia/opieplayer2/lib.cpp @@ -204,6 +204,6 @@ void Lib::drawFrame( uint8_t* frame, int width, int height, int bytes ) { int linestep = qt_screen->linestep(); m_wid->setImage( frame, yoffset, xoffset, width, height, linestep, bytes, m_bytes_per_pixel ); - m_wid->repaint(); +// m_wid->repaint(false); } diff --git a/noncore/multimedia/opieplayer2/nullvideo.c b/noncore/multimedia/opieplayer2/nullvideo.c index f356e76..63d5752 100644 --- a/noncore/multimedia/opieplayer2/nullvideo.c +++ b/noncore/multimedia/opieplayer2/nullvideo.c @@ -72,7 +72,7 @@ struct opie_frame_s { int bytes_per_line; uint8_t *data; - int show_video; +// int show_video; null_driver_t *output; }; @@ -85,7 +85,7 @@ static uint32_t null_get_capabilities(vo_driver_t *self ){ static void null_frame_copy (vo_frame_t *vo_img, uint8_t **src) { opie_frame_t *frame = (opie_frame_t *) vo_img ; printf("frame copy\n"); - if(!frame->show_video ){ printf("no video\n"); return; } // no video + if(!frame->output->m_show_video ){ printf("no video\n"); return; } // no video if (frame->format == IMGFMT_YV12) { frame->yuv2rgb->yuv2rgb_fun (frame->yuv2rgb, frame->rgb_dst, @@ -94,7 +94,6 @@ static void null_frame_copy (vo_frame_t *vo_img, uint8_t **src) { frame->yuv2rgb->yuy22rgb_fun (frame->yuv2rgb, frame->rgb_dst, src[0]); - } frame->rgb_dst += frame->stripe_inc; @@ -145,7 +144,7 @@ static vo_frame_t* null_alloc_frame( vo_driver_t* self ){ frame->name = "opie\0"; frame->version = 1; frame->output = this; - frame->show_video = this->m_show_video; +// frame->show_video = this->m_show_video; /* initialize the frame*/ frame->frame.driver = self; /*frame.frame.free = null_frame_free;*/ @@ -165,7 +164,7 @@ static vo_frame_t* null_alloc_frame( vo_driver_t* self ){ // size specific static void null_compute_ideal_size (null_driver_t *this, opie_frame_t *frame) { - if (!this->m_is_scaling || !this->m_show_video) { + if (!this->m_is_scaling /*|| !this->m_show_video*/) { printf("Not scaling\n"); frame->ideal_width = frame->width; frame->ideal_height = frame->height; @@ -301,7 +300,7 @@ static void null_update_frame_format( vo_driver_t* self, vo_frame_t* img, frame->format = format; frame->user_ratio = this->user_ratio; this->gui_changed = 0; - frame->show_video = this->m_show_video; +// frame->show_video = this->m_show_video; null_compute_ideal_size (this, frame); @@ -355,7 +354,7 @@ static void null_update_frame_format( vo_driver_t* self, vo_frame_t* img, /* * set up colorspace converter */ - if(this->m_show_video ){ + if(1 /*this->m_show_video*/ ){ printf("showing video\n"); switch (flags) { @@ -414,7 +413,7 @@ static void null_display_frame( vo_driver_t* self, vo_frame_t *frame_gen ){ display_xine_frame_t display = this->frameDis; printf("display frame\n"); - // if( this->m_show_video ) { // return if not displaying +// if( this->m_show_video ) { // return if not displaying printf("calling home aye\n" ); if( display != NULL ) { (*display)(this->caller, frame->data, @@ -422,7 +421,7 @@ static void null_display_frame( vo_driver_t* self, vo_frame_t *frame_gen ){ frame->bytes_per_line ); printf("display done hope you enyoyed the frame"); } - // } +// } frame->frame.displayed (&frame->frame); } diff --git a/noncore/multimedia/opieplayer2/xinevideowidget.cpp b/noncore/multimedia/opieplayer2/xinevideowidget.cpp index d665f16..b5a714e 100644 --- a/noncore/multimedia/opieplayer2/xinevideowidget.cpp +++ b/noncore/multimedia/opieplayer2/xinevideowidget.cpp @@ -46,7 +46,7 @@ XineVideoWidget::XineVideoWidget( int width, int height, QWidget* parent, const char* name ) - : QWidget( parent, name ) + : QWidget( parent, name, WRepaintNoErase | WResizeNoErase ) { m_image = new QImage( width, height, qt_screen->depth() ); m_buff = 0; @@ -61,32 +61,43 @@ XineVideoWidget::~XineVideoWidget() { } void XineVideoWidget::clear() { m_buff = 0; - repaint(); + repaint(false); } void XineVideoWidget::paintEvent( QPaintEvent* e ) { qWarning("painting"); - QPainter p(this ); - p.setBrush( QBrush( Qt::black ) ); - p.drawRect( rect() ); - if (m_buff == 0 ) + if (m_buff == 0 ) { + QPainter p(this ); + p.fillRect( rect(), black ); p.drawImage( 0, 0, *m_image ); - else { + qWarning ( "logo\n" ); + } + else { qWarning("paitnevent\n"); - - QDirectPainter dp( this ); - uchar* dst = dp.frameBuffer() + (m_yOff + dp.yOffset() ) * linestep + - (m_xOff + dp.xOffset() ) * m_bytes_per_pixel; - uchar* frame = m_buff; - for(int y = 0; y < m_Height; y++ ) { - memcpy( dst, frame, m_bytes ); - frame += m_bytes; - dst += linestep; + { + + if (( m_thisframe & m_lastframe ) != m_lastframe ) { + QPainter p ( this ); + p. fillRect ( m_lastframe, black ); + } + } + { + QDirectPainter dp ( this ); + + uchar* dst = dp.frameBuffer() + (m_thisframe. y ( ) + dp.yOffset() ) * linestep + + (m_thisframe. x ( ) + dp.xOffset() ) * m_bytes_per_pixel; + uchar* frame = m_buff; + for(int y = 0; y < m_thisframe. height ( ); y++ ) { + memcpy( dst, frame, m_bytes ); + frame += m_bytes; + dst += linestep; + } } - // QVFB hack by MArtin Jones -// QPainter dp2(this); - // dp2.fillRect( rect(), QBrush( NoBrush ) ); + { + // QVFB hack by MArtin Jones + QPainter p ( this ); + p. fillRect ( m_thisframe, QBrush ( NoBrush )); + } } -// QWidget::paintEvent( e ); } int XineVideoWidget::height() const{ return m_image->height(); @@ -101,30 +112,14 @@ void XineVideoWidget::setImage( QImage* image ) { void XineVideoWidget::setImage( uchar* image, int yoffsetXLine, int xoffsetXBytes, int width, int height, int linestep, int bytes, int bpp ) { -/* if (m_buff != 0 ) - free(m_buff ); -*/ + + m_lastframe = m_thisframe; + m_thisframe. setRect ( xoffsetXBytes, yoffsetXLine, width, height ); + m_buff = image; - m_yOff = yoffsetXLine; - m_xOff = xoffsetXBytes; - m_Width = width; - m_Height = height; this->linestep = linestep; m_bytes = bytes; m_bytes_per_pixel = bpp; - //// - qWarning("width %d %d", width, height ); -/* QDirectPainter dp( this ); - uchar* dst = dp.frameBuffer() + (m_yOff + dp.yOffset() ) * linestep + - (m_xOff + dp.xOffset() ) * m_bytes_per_pixel; - uchar* frame = m_buff; - for(int y = 0; y < m_Height; y++ ) { - memcpy( dst, frame, m_bytes ); - frame += m_bytes; - dst += linestep; - } - // QVFB hack - QPainter dp2(this); - dp2.fillRect( rect(), QBrush( NoBrush ) ); -*/ + + repaint ( false ); } diff --git a/noncore/multimedia/opieplayer2/xinevideowidget.h b/noncore/multimedia/opieplayer2/xinevideowidget.h index b670fa0..5656194 100644 --- a/noncore/multimedia/opieplayer2/xinevideowidget.h +++ b/noncore/multimedia/opieplayer2/xinevideowidget.h @@ -51,6 +51,9 @@ public: protected: void paintEvent( QPaintEvent* p ); private: + QRect m_lastframe; + QRect m_thisframe; + int m_wid; int m_height; int m_yOff, m_xOff; -- cgit v0.9.0.2