summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin KAY <komadori@users.sourceforge.net>2003-06-15 20:04:35 +0000
committerRobin KAY <komadori@users.sourceforge.net>2003-06-15 20:04:35 +0000
commitc4b98bced692d2c768d86207fa2195788407b031 (patch)
treec6517c57e9445d95c42c3cb6cfe7a6c2ef2cb21b
parent7598f9381f9b99734d76f5f8b4f5dc675db049cc (diff)
downloadxine-lib-c4b98bced692d2c768d86207fa2195788407b031.tar.gz
xine-lib-c4b98bced692d2c768d86207fa2195788407b031.tar.bz2
Properly deinterlace YUY2 frames.
CVS patchset: 5051 CVS date: 2003/06/15 20:04:35
-rw-r--r--src/video_out/video_out_pgx64.c29
1 files changed, 20 insertions, 9 deletions
diff --git a/src/video_out/video_out_pgx64.c b/src/video_out/video_out_pgx64.c
index d0fad982d..efc44b961 100644
--- a/src/video_out/video_out_pgx64.c
+++ b/src/video_out/video_out_pgx64.c
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
- * $Id: video_out_pgx64.c,v 1.29 2003/06/15 11:44:57 komadori Exp $
+ * $Id: video_out_pgx64.c,v 1.30 2003/06/15 20:04:35 komadori Exp $
*
* video_out_pgx64.c, Sun PGX64/PGX24 output plugin for xine
*
@@ -350,13 +350,13 @@ static void pgx64_display_frame(pgx64_driver_t *this, pgx64_frame_t *frame)
if (frame->format == XINE_IMGFMT_YV12) {
if (this->deinterlace) {
- register uint8_t *y = frame->vo_frame.base[0];
- register uint8_t *ydest = this->fbbase+frame->buf_y;
- register uint8_t *u = frame->vo_frame.base[1];
- register uint8_t *v = frame->vo_frame.base[2];
- register uint8_t *udest = this->fbbase+frame->buf_u;
- register uint8_t *vdest = this->fbbase+frame->buf_v;
- int i = 0;
+ uint8_t *y = frame->vo_frame.base[0];
+ uint8_t *ydest = this->fbbase+frame->buf_y;
+ uint8_t *u = frame->vo_frame.base[1];
+ uint8_t *v = frame->vo_frame.base[2];
+ uint8_t *udest = this->fbbase+frame->buf_u;
+ uint8_t *vdest = this->fbbase+frame->buf_v;
+ int i;
for (i = 0; i < frame->height/2; i++, y += 2*frame->vo_frame.pitches[0], ydest += frame->vo_frame.pitches[0]) {
memcpy(ydest, y, frame->vo_frame.pitches[0]);
@@ -375,7 +375,18 @@ static void pgx64_display_frame(pgx64_driver_t *this, pgx64_frame_t *frame)
}
}
else {
- memcpy(this->fbbase+frame->buf_y, frame->vo_frame.base[0], frame->lengths[0]);
+ if (this->deinterlace) {
+ uint8_t *y = frame->vo_frame.base[0];
+ uint8_t *ydest = this->fbbase+frame->buf_y;
+ int i;
+
+ for (i = 0; i < frame->height/2; i++, y += 2*frame->vo_frame.pitches[0], ydest += frame->vo_frame.pitches[0]) {
+ memcpy(ydest, y, frame->vo_frame.pitches[0]);
+ }
+ }
+ else {
+ memcpy(this->fbbase+frame->buf_y, frame->vo_frame.base[0], frame->lengths[0]);
+ }
}
if ((this->current != NULL) && (this->current != frame)) {