summaryrefslogtreecommitdiff
authorsandman <sandman>2002-08-01 01:33:23 (UTC)
committer sandman <sandman>2002-08-01 01:33:23 (UTC)
commit32b7fdb0e9e5ec6cb6f791962efe68c40564b178 (patch) (side-by-side diff)
tree86044a8b3884536f65d38b32d3e0552c30f13a81
parentba034bf4cb91b83654056945fc27313a28528015 (diff)
downloadopie-32b7fdb0e9e5ec6cb6f791962efe68c40564b178.zip
opie-32b7fdb0e9e5ec6cb6f791962efe68c40564b178.tar.gz
opie-32b7fdb0e9e5ec6cb6f791962efe68c40564b178.tar.bz2
Fixed video output (frames allocated before video was enabled via
show_video flag have never been displayes thereafter) Also optimized the video widget
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/multimedia/opieplayer2/lib.cpp2
-rw-r--r--noncore/multimedia/opieplayer2/nullvideo.c13
-rw-r--r--noncore/multimedia/opieplayer2/xinevideowidget.cpp61
-rw-r--r--noncore/multimedia/opieplayer2/xinevideowidget.h3
4 files changed, 38 insertions, 41 deletions
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
@@ -195,15 +195,15 @@ void Lib::drawFrame( uint8_t* frame, int width, int height, int bytes ) {
if (!m_video ) {
qWarning("not showing video now");
return;
}
qWarning("called draw frame %d %d", width, height);
QSize size = m_wid->size();
int xoffset = (size.width() - width) / 2;
int yoffset = (size.height() - height) / 2;
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
@@ -63,47 +63,46 @@ struct opie_frame_s {
int ideal_height;
int output_width, output_height;
uint8_t *chunk[3];
yuv2rgb_t *yuv2rgb;
uint8_t *rgb_dst;
int yuv_stride;
int stripe_height, stripe_inc;
int bytes_per_line;
uint8_t *data;
- int show_video;
+// int show_video;
null_driver_t *output;
};
static uint32_t null_get_capabilities(vo_driver_t *self ){
null_driver_t* this = (null_driver_t*)self;
printf("capabilities\n");
return this->m_capabilities;
}
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,
src[0], src[1], src[2]);
} else {
frame->yuv2rgb->yuy22rgb_fun (frame->yuv2rgb, frame->rgb_dst,
src[0]);
-
}
frame->rgb_dst += frame->stripe_inc;
printf("returning\n");
}
static void null_frame_field (vo_frame_t *vo_img, int which_field) {
opie_frame_t *frame = (opie_frame_t *) vo_img ;
printf("field\n\n");
switch (which_field) {
@@ -136,45 +135,45 @@ static void null_frame_dispose( vo_frame_t* vo_img){
static vo_frame_t* null_alloc_frame( vo_driver_t* self ){
null_driver_t* this = (null_driver_t*)self;
opie_frame_t* frame;
frame = (opie_frame_t*)malloc ( sizeof(opie_frame_t) );
memset( frame, 0, sizeof( opie_frame_t) );
pthread_mutex_init (&frame->frame.mutex, NULL);
printf("alloc_frame\n");
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;*/
frame->frame.copy = null_frame_copy;
frame->frame.field = null_frame_field;
frame->frame.dispose = null_frame_dispose;
frame->yuv2rgb = 0;
/*
* colorspace converter for this frame
*/
frame->yuv2rgb = this->yuv2rgb_factory->create_converter (this->yuv2rgb_factory);
return (vo_frame_t*) frame;
}
// 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;
frame->ratio_factor = 1.0;
} else {
double image_ratio, desired_ratio, corr_factor;
image_ratio = (double) frame->width / (double) frame->height;
switch (frame->user_ratio) {
@@ -292,25 +291,25 @@ static void null_update_frame_format( vo_driver_t* self, vo_frame_t* img,
|| (flags != frame->flags)
|| (format != frame->format)
|| (this->user_ratio != frame->user_ratio)
|| this->gui_changed ) {
frame->width = width;
frame->height = height;
frame->ratio_code = ratio_code;
frame->flags = flags;
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);
null_compute_rgb_size (this, frame);
/*
* (re-) allocate
*/
if( frame->data ) {
if(frame->chunk[0] ){
free( frame->chunk[0] );
frame->chunk[0] = NULL;
@@ -346,25 +345,25 @@ static void null_update_frame_format( vo_driver_t* self, vo_frame_t* img,
}
frame->format = format;
frame->width = width;
frame->height = height;
frame->stripe_height = 16 * frame->output_height / frame->height;
frame->bytes_per_line = frame->output_width * this->bytes_per_pixel;
/*
* set up colorspace converter
*/
- if(this->m_show_video ){
+ if(1 /*this->m_show_video*/ ){
printf("showing video\n");
switch (flags) {
case VO_TOP_FIELD:
case VO_BOTTOM_FIELD:
frame->yuv2rgb->configure (frame->yuv2rgb,
frame->width,
16,
frame->width*2,
frame->width,
frame->output_width,
frame->stripe_height,
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
@@ -37,94 +37,89 @@
#include <qgfx_qws.h>
#include <qdirectpainter_qws.h>
#include <qsize.h>
#include <qpe/resource.h>
#include "xinevideowidget.h"
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;
setBackgroundMode( NoBackground);
/* QImage image = Resource::loadImage("SoundPlayer");
image = image.smoothScale( width, height );
m_image = new QImage( image );*/
}
XineVideoWidget::~XineVideoWidget() {
delete m_image;
}
void XineVideoWidget::clear() {
m_buff = 0;
- repaint();
+ repaint(false);
}
void XineVideoWidget::paintEvent( QPaintEvent* e ) {
qWarning("painting");
+ if (m_buff == 0 ) {
QPainter p(this );
- p.setBrush( QBrush( Qt::black ) );
- p.drawRect( rect() );
- if (m_buff == 0 )
+ p.fillRect( rect(), black );
p.drawImage( 0, 0, *m_image );
+ qWarning ( "logo\n" );
+ }
else {
qWarning("paitnevent\n");
+ {
+ if (( m_thisframe & m_lastframe ) != m_lastframe ) {
+ QPainter p ( this );
+ p. fillRect ( m_lastframe, black );
+ }
+ }
+ {
QDirectPainter dp( this );
- uchar* dst = dp.frameBuffer() + (m_yOff + dp.yOffset() ) * linestep +
- (m_xOff + dp.xOffset() ) * m_bytes_per_pixel;
+
+ 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_Height; y++ ) {
+ 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 ) );
+ QPainter p ( this );
+ p. fillRect ( m_thisframe, QBrush ( NoBrush ));
+ }
}
-// QWidget::paintEvent( e );
}
int XineVideoWidget::height() const{
return m_image->height();
}
int XineVideoWidget::width() const{
return m_image->width();
}
void XineVideoWidget::setImage( QImage* image ) {
delete m_image;
m_image = 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
@@ -42,23 +42,26 @@ public:
XineVideoWidget( int width, int height, QWidget* parent, const char* name );
~XineVideoWidget();
QImage *image() { return m_image; };
void setImage( QImage* image );
void setImage( uchar* image, int yoffsetXLine, int xoffsetXBytes,
int width, int height, int linestep, int bytes, int bpp);
int width() const;
int height() const;
void clear() ;
protected:
void paintEvent( QPaintEvent* p );
private:
+ QRect m_lastframe;
+ QRect m_thisframe;
+
int m_wid;
int m_height;
int m_yOff, m_xOff;
uchar* m_buff;
int m_Width, m_Height, linestep;
int m_bytes;
int m_bytes_per_pixel;
QImage* m_image;
};