diff options
author | Robin KAY <komadori@users.sourceforge.net> | 2003-06-15 20:04:35 +0000 |
---|---|---|
committer | Robin KAY <komadori@users.sourceforge.net> | 2003-06-15 20:04:35 +0000 |
commit | c4b98bced692d2c768d86207fa2195788407b031 (patch) | |
tree | c6517c57e9445d95c42c3cb6cfe7a6c2ef2cb21b | |
parent | 7598f9381f9b99734d76f5f8b4f5dc675db049cc (diff) | |
download | xine-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.c | 29 |
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)) { |