diff options
author | Robin KAY <komadori@users.sourceforge.net> | 2003-10-22 20:38:09 +0000 |
---|---|---|
committer | Robin KAY <komadori@users.sourceforge.net> | 2003-10-22 20:38:09 +0000 |
commit | 51616b96cd2793085ae314fecde90ac9a0735a04 (patch) | |
tree | 0b39e50ada1882338f37d0225729a201c755e61c /src | |
parent | 35decc993a98b994662fcdca0fc537398d64a03d (diff) | |
download | xine-lib-51616b96cd2793085ae314fecde90ac9a0735a04.tar.gz xine-lib-51616b96cd2793085ae314fecde90ac9a0735a04.tar.bz2 |
Replace copy member in vo_frame_t with proc_frame and proc_slice. Increase video_out API version to 18.
CVS patchset: 5574
CVS date: 2003/10/22 20:38:09
Diffstat (limited to 'src')
29 files changed, 239 insertions, 184 deletions
diff --git a/src/libmpeg2/slice.c b/src/libmpeg2/slice.c index 0d2fed055..0fe4ee2d9 100644 --- a/src/libmpeg2/slice.c +++ b/src/libmpeg2/slice.c @@ -1438,27 +1438,27 @@ do { \ mpeg2_mc.avg : mpeg2_mc.put)); \ } while (0) -#define NEXT_MACROBLOCK \ -do { \ - picture->offset += 16; \ - if (picture->offset == picture->coded_picture_width) { \ - do { /* just so we can use the break statement */ \ - if (picture->current_frame->copy) { \ - picture->current_frame->copy (picture->current_frame, \ - picture->dest); \ - } \ - picture->dest[0] += 16 * picture->pitches[0]; \ - picture->dest[1] += 8 * picture->pitches[1]; \ - picture->dest[2] += 8 * picture->pitches[2]; \ - } while (0); \ - picture->v_offset += 16; \ - if (picture->v_offset > picture->limit_y) { \ - if (mpeg2_cpu_state_restore) \ - mpeg2_cpu_state_restore (&cpu_state); \ - return; \ - } \ - picture->offset = 0; \ - } \ +#define NEXT_MACROBLOCK \ +do { \ + picture->offset += 16; \ + if (picture->offset == picture->coded_picture_width) { \ + do { /* just so we can use the break statement */ \ + if (picture->current_frame->proc_slice) { \ + picture->current_frame->proc_slice (picture->current_frame, \ + picture->dest); \ + } \ + picture->dest[0] += 16 * picture->pitches[0]; \ + picture->dest[1] += 8 * picture->pitches[1]; \ + picture->dest[2] += 8 * picture->pitches[2]; \ + } while (0); \ + picture->v_offset += 16; \ + if (picture->v_offset > picture->limit_y) { \ + if (mpeg2_cpu_state_restore) \ + mpeg2_cpu_state_restore (&cpu_state); \ + return; \ + } \ + picture->offset = 0; \ + } \ } while (0) static inline int slice_init (picture_t * picture, int code) @@ -1605,7 +1605,7 @@ static inline int slice_init (picture_t * picture, int code) while (picture->offset - picture->coded_picture_width >= 0) { picture->offset -= picture->coded_picture_width; - if ((picture->current_frame->copy == NULL) || + if ((picture->current_frame->proc_slice == NULL) || (picture->picture_coding_type != B_TYPE)) { picture->dest[0] += 16 * picture->pitches[0]; picture->dest[1] += 8 * picture->pitches[1]; diff --git a/src/libmpeg2/slice_xvmc.c b/src/libmpeg2/slice_xvmc.c index 3e63bd77b..cddc517c8 100644 --- a/src/libmpeg2/slice_xvmc.c +++ b/src/libmpeg2/slice_xvmc.c @@ -1530,29 +1530,29 @@ do { \ mpeg2_mc.avg : mpeg2_mc.put)); \ } while (0) -#define NEXT_MACROBLOCK \ -do { \ - picture->offset += 16; \ - if (picture->offset == picture->coded_picture_width) { \ - do { /* just so we can use the break statement */ \ - if (picture->current_frame->copy) { \ - picture->current_frame->copy (picture->current_frame, \ - picture->dest); \ - if (picture->picture_coding_type == B_TYPE) \ - break; \ - } \ - picture->dest[0] += 16 * picture->pitches[0]; \ - picture->dest[1] += 8 * picture->pitches[1]; \ - picture->dest[2] += 8 * picture->pitches[2]; \ - } while (0); \ - picture->v_offset += 16; \ - if (picture->v_offset > picture->limit_y) { \ - if (mpeg2_cpu_state_restore) \ - mpeg2_cpu_state_restore (&cpu_state); \ - return; \ - } \ - picture->offset = 0; \ - } \ +#define NEXT_MACROBLOCK \ +do { \ + picture->offset += 16; \ + if (picture->offset == picture->coded_picture_width) { \ + do { /* just so we can use the break statement */ \ + if (picture->current_frame->proc_slice) { \ + picture->current_frame->proc_slice (picture->current_frame, \ + picture->dest); \ + if (picture->picture_coding_type == B_TYPE) \ + break; \ + } \ + picture->dest[0] += 16 * picture->pitches[0]; \ + picture->dest[1] += 8 * picture->pitches[1]; \ + picture->dest[2] += 8 * picture->pitches[2]; \ + } while (0); \ + picture->v_offset += 16; \ + if (picture->v_offset > picture->limit_y) { \ + if (mpeg2_cpu_state_restore) \ + mpeg2_cpu_state_restore (&cpu_state); \ + return; \ + } \ + picture->offset = 0; \ + } \ } while (0) static inline int slice_xvmc_init (picture_t * picture, int code) @@ -1634,7 +1634,7 @@ static inline int slice_xvmc_init (picture_t * picture, int code) picture->v_offset = (code - 1) * 16; offset = (code - 1); - if (picture->current_frame->copy && picture->picture_coding_type == B_TYPE) + if (picture->current_frame->proc_slice && picture->picture_coding_type == B_TYPE) offset = 0; else if (picture->picture_structure != FRAME_PICTURE) offset = 2 * offset; @@ -1710,7 +1710,7 @@ static inline int slice_xvmc_init (picture_t * picture, int code) while (picture->offset - picture->coded_picture_width >= 0) { picture->offset -= picture->coded_picture_width; - if ((picture->current_frame->copy == NULL) || + if ((picture->current_frame->proc_slice == NULL) || (picture->picture_coding_type != B_TYPE)) { picture->dest[0] += 16 * picture->pitches[0]; picture->dest[1] += 8 * picture->pitches[1]; diff --git a/src/post/deinterlace/xine_plugin.c b/src/post/deinterlace/xine_plugin.c index fa6ad24e1..6e06c5d3e 100644 --- a/src/post/deinterlace/xine_plugin.c +++ b/src/post/deinterlace/xine_plugin.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: xine_plugin.c,v 1.16 2003/10/19 20:58:27 f1rmb Exp $ + * $Id: xine_plugin.c,v 1.17 2003/10/22 20:38:09 komadori Exp $ * * advanced video deinterlacer plugin * Jun/2003 by Miguel Freitas @@ -536,7 +536,8 @@ static vo_frame_t *deinterlace_get_frame(xine_video_port_t *port_gen, uint32_t w /* replace with our own draw function */ frame->draw = deinterlace_draw; /* decoders should not copy the frames, since they won't be displayed */ - frame->copy = NULL; + frame->proc_slice = NULL; + frame->proc_frame = NULL; } pthread_mutex_unlock (&this->lock); diff --git a/src/post/mosaico/mosaico.c b/src/post/mosaico/mosaico.c index 8b095769c..03f488b7a 100644 --- a/src/post/mosaico/mosaico.c +++ b/src/post/mosaico/mosaico.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: mosaico.c,v 1.14 2003/10/06 21:52:43 miguelfreitas Exp $ + * $Id: mosaico.c,v 1.15 2003/10/22 20:38:10 komadori Exp $ */ /* @@ -356,7 +356,9 @@ static vo_frame_t *mosaico_get_frame(xine_video_port_t *port_gen, uint32_t width /* replace with our own draw function */ frame->draw = mosaico_draw; /* decoders should not copy the frames, since they won't be displayed */ - frame->copy = NULL; + frame->proc_slice = NULL; + frame->proc_frame = NULL; + return frame; } @@ -373,7 +375,9 @@ static vo_frame_t *mosaico_get_frame_2(xine_video_port_t *port_gen, uint32_t wid /* replace with our own draw function */ frame->draw = mosaico_draw_2; /* decoders should not copy the frames, since they won't be displayed */ - frame->copy = NULL; + frame->proc_slice = NULL; + frame->proc_frame = NULL; + return frame; } diff --git a/src/post/mosaico/switch.c b/src/post/mosaico/switch.c index 694db8697..4c5308363 100644 --- a/src/post/mosaico/switch.c +++ b/src/post/mosaico/switch.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: switch.c,v 1.6 2003/10/06 21:52:43 miguelfreitas Exp $ + * $Id: switch.c,v 1.7 2003/10/22 20:38:10 komadori Exp $ */ /* @@ -297,8 +297,10 @@ static vo_frame_t *switch_get_frame(xine_video_port_t *port_gen, uint32_t width, /* replace with our own draw function */ frame->draw = switch_draw; /* decoders should not copy the frames, since they won't be displayed */ - frame->copy = NULL; + frame->proc_slice = NULL; + frame->proc_frame = NULL; pthread_mutex_unlock(&output->mut1); + return frame; } @@ -319,8 +321,10 @@ static vo_frame_t *switch_get_frame_2(xine_video_port_t *port_gen, uint32_t widt /* replace with our own draw function */ frame->draw = switch_draw_2; /* decoders should not copy the frames, since they won't be displayed */ - frame->copy = NULL; + frame->proc_slice = NULL; + frame->proc_frame = NULL; pthread_mutex_unlock(&output->mut1); + return frame; } diff --git a/src/post/planar/boxblur.c b/src/post/planar/boxblur.c index 7ec51bc55..1a161cbb4 100644 --- a/src/post/planar/boxblur.c +++ b/src/post/planar/boxblur.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: boxblur.c,v 1.7 2003/10/06 21:52:43 miguelfreitas Exp $ + * $Id: boxblur.c,v 1.8 2003/10/22 20:38:10 komadori Exp $ * * mplayer's boxblur * Copyright (C) 2002 Michael Niedermayer <michaelni@gmx.at> @@ -298,7 +298,8 @@ static vo_frame_t *boxblur_get_frame(xine_video_port_t *port_gen, uint32_t width /* replace with our own draw function */ frame->draw = boxblur_draw; /* decoders should not copy the frames, since they won't be displayed */ - frame->copy = NULL; + frame->proc_slice = NULL; + frame->proc_frame = NULL; return frame; } diff --git a/src/post/planar/denoise3d.c b/src/post/planar/denoise3d.c index 024cba960..6edeff291 100644 --- a/src/post/planar/denoise3d.c +++ b/src/post/planar/denoise3d.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: denoise3d.c,v 1.7 2003/10/06 21:52:43 miguelfreitas Exp $ + * $Id: denoise3d.c,v 1.8 2003/10/22 20:38:10 komadori Exp $ * * mplayer's denoise3d * Copyright (C) 2003 Daniel Moreno <comac@comac.darktech.org> @@ -333,7 +333,8 @@ static vo_frame_t *denoise3d_get_frame(xine_video_port_t *port_gen, uint32_t wid /* replace with our own draw function */ frame->draw = denoise3d_draw; /* decoders should not copy the frames, since they won't be displayed */ - frame->copy = NULL; + frame->proc_slice = NULL; + frame->proc_frame = NULL; return frame; } diff --git a/src/post/planar/eq.c b/src/post/planar/eq.c index e5991e7ea..532785b66 100644 --- a/src/post/planar/eq.c +++ b/src/post/planar/eq.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: eq.c,v 1.6 2003/10/06 21:52:43 miguelfreitas Exp $ + * $Id: eq.c,v 1.7 2003/10/22 20:38:10 komadori Exp $ * * mplayer's eq (soft video equalizer) * Copyright (C) Richard Felker @@ -417,7 +417,8 @@ static vo_frame_t *eq_get_frame(xine_video_port_t *port_gen, uint32_t width, /* replace with our own draw function */ frame->draw = eq_draw; /* decoders should not copy the frames, since they won't be displayed */ - frame->copy = NULL; + frame->proc_slice = NULL; + frame->proc_frame = NULL; return frame; } diff --git a/src/post/planar/eq2.c b/src/post/planar/eq2.c index 866f3083b..289d726da 100644 --- a/src/post/planar/eq2.c +++ b/src/post/planar/eq2.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: eq2.c,v 1.8 2003/10/06 21:52:43 miguelfreitas Exp $ + * $Id: eq2.c,v 1.9 2003/10/22 20:38:10 komadori Exp $ * * mplayer's eq2 (soft video equalizer) * Software equalizer (brightness, contrast, gamma, saturation) @@ -611,7 +611,8 @@ static vo_frame_t *eq2_get_frame(xine_video_port_t *port_gen, uint32_t width, /* replace with our own draw function */ frame->draw = eq2_draw; /* decoders should not copy the frames, since they won't be displayed */ - frame->copy = NULL; + frame->proc_slice = NULL; + frame->proc_frame = NULL; return frame; } diff --git a/src/post/planar/expand.c b/src/post/planar/expand.c index ea7a6ee60..a6db54208 100644 --- a/src/post/planar/expand.c +++ b/src/post/planar/expand.c @@ -361,9 +361,10 @@ static vo_frame_t *expand_get_frame(xine_video_port_t *port_gen, uint32_t width, * - letting the decoder copy the image * - copying the bottom black bar in expand_draw() */ - cloned_frame->copy = NULL; - cloned_frame->field = expand_field; - cloned_frame->lock = expand_lock; + cloned_frame->proc_slice = NULL; + cloned_frame->proc_frame = NULL; + cloned_frame->field = expand_field; + cloned_frame->lock = expand_lock; cloned_frame->port = port_gen; /* misuse the next pointer to remember the original */ diff --git a/src/post/planar/invert.c b/src/post/planar/invert.c index 26bc4b7b9..db8851260 100644 --- a/src/post/planar/invert.c +++ b/src/post/planar/invert.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: invert.c,v 1.13 2003/10/06 21:52:43 miguelfreitas Exp $ + * $Id: invert.c,v 1.14 2003/10/22 20:38:10 komadori Exp $ */ /* @@ -203,7 +203,8 @@ static vo_frame_t *invert_get_frame(xine_video_port_t *port_gen, uint32_t width, /* replace with our own draw function */ frame->draw = invert_draw; /* decoders should not copy the frames, since they won't be displayed */ - frame->copy = NULL; + frame->proc_slice = NULL; + frame->proc_frame = NULL; return frame; } diff --git a/src/post/planar/unsharp.c b/src/post/planar/unsharp.c index 499fba98f..3c11945ef 100644 --- a/src/post/planar/unsharp.c +++ b/src/post/planar/unsharp.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: unsharp.c,v 1.7 2003/10/06 21:52:44 miguelfreitas Exp $ + * $Id: unsharp.c,v 1.8 2003/10/22 20:38:10 komadori Exp $ * * mplayer's unsharp * Copyright (C) 2002 Rémi Guyomarch <rguyom@pobox.com> @@ -424,7 +424,8 @@ static vo_frame_t *unsharp_get_frame(xine_video_port_t *port_gen, uint32_t width /* replace with our own draw function */ frame->draw = unsharp_draw; /* decoders should not copy the frames, since they won't be displayed */ - frame->copy = NULL; + frame->proc_slice = NULL; + frame->proc_frame = NULL; return frame; } diff --git a/src/video_out/video_out_aa.c b/src/video_out/video_out_aa.c index 9c0e9e05a..c845dfd00 100644 --- a/src/video_out/video_out_aa.c +++ b/src/video_out/video_out_aa.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_aa.c,v 1.37 2003/10/06 21:52:44 miguelfreitas Exp $ + * $Id: video_out_aa.c,v 1.38 2003/10/22 20:38:10 komadori Exp $ * * video_out_aa.c, ascii-art output plugin for xine * @@ -109,7 +109,8 @@ static vo_frame_t *aa_alloc_frame(vo_driver_t *this) { frame = (aa_frame_t *) malloc (sizeof (aa_frame_t)); memset (frame, 0, sizeof (aa_frame_t)); - frame->vo_frame.copy = NULL; + frame->vo_frame.proc_slice = NULL; + frame->vo_frame.proc_frame = NULL; frame->vo_frame.field = aa_frame_field; frame->vo_frame.dispose = aa_dispose_frame; frame->vo_frame.driver = this; @@ -328,6 +329,6 @@ static vo_info_t vo_info_aa = { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_VIDEO_OUT, 17, "aa", XINE_VERSION_CODE, &vo_info_aa, init_class }, + { PLUGIN_VIDEO_OUT, 18, "aa", XINE_VERSION_CODE, &vo_info_aa, init_class }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/video_out/video_out_directfb.c b/src/video_out/video_out_directfb.c index a8282b5c5..ffb515f93 100644 --- a/src/video_out/video_out_directfb.c +++ b/src/video_out/video_out_directfb.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_directfb.c,v 1.21 2003/10/06 21:52:44 miguelfreitas Exp $ + * $Id: video_out_directfb.c,v 1.22 2003/10/22 20:38:10 komadori Exp $ * * DirectFB based output plugin. * Rich Wareham <richwareham@users.sourceforge.net> @@ -195,9 +195,10 @@ static vo_frame_t *directfb_alloc_frame (vo_driver_t *this_gen) { * supply required functions */ - frame->vo_frame.copy = NULL; - frame->vo_frame.field = directfb_frame_field; - frame->vo_frame.dispose = directfb_frame_dispose; + frame->vo_frame.proc_slice = NULL; + frame->vo_frame.proc_frame = NULL; + frame->vo_frame.field = directfb_frame_field; + frame->vo_frame.dispose = directfb_frame_dispose; frame->surface = NULL; frame->locked = 0; @@ -591,7 +592,7 @@ static vo_info_t vo_info_directfb = { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_VIDEO_OUT, 17, "DirectFB", XINE_VERSION_CODE, &vo_info_directfb, init_class }, + { PLUGIN_VIDEO_OUT, 18, "DirectFB", XINE_VERSION_CODE, &vo_info_directfb, init_class }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/video_out/video_out_directx.c b/src/video_out/video_out_directx.c index 1c514f518..7ae1d891b 100755 --- a/src/video_out/video_out_directx.c +++ b/src/video_out/video_out_directx.c @@ -853,9 +853,10 @@ static vo_frame_t * win32_alloc_frame( vo_driver_t * vo_driver ) win32_frame = ( win32_frame_t * ) malloc( sizeof( win32_frame_t ) ); memset( win32_frame, 0, sizeof( win32_frame_t ) ); - win32_frame->vo_frame.copy = NULL; - win32_frame->vo_frame.field = win32_frame_field; - win32_frame->vo_frame.dispose = win32_frame_dispose; + win32_frame->vo_frame.proc_slice = NULL; + win32_frame->vo_frame.proc_frame = NULL; + win32_frame->vo_frame.field = win32_frame_field; + win32_frame->vo_frame.dispose = win32_frame_dispose; win32_frame->format = -1; return ( vo_frame_t * ) win32_frame; @@ -1262,6 +1263,6 @@ static vo_info_t vo_info_win32 = { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_VIDEO_OUT, 17, "vo_directx", XINE_VERSION_CODE, &vo_info_win32, init_class }, + { PLUGIN_VIDEO_OUT, 18, "vo_directx", XINE_VERSION_CODE, &vo_info_win32, init_class }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/video_out/video_out_fb.c b/src/video_out/video_out_fb.c index ee65f19d0..931fe94ff 100644 --- a/src/video_out/video_out_fb.c +++ b/src/video_out/video_out_fb.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_fb.c,v 1.28 2003/10/06 21:52:44 miguelfreitas Exp $ + * $Id: video_out_fb.c,v 1.29 2003/10/22 20:38:10 komadori Exp $ * * video_out_fb.c, frame buffer xine driver by Miguel Freitas * @@ -149,13 +149,12 @@ typedef struct static uint32_t fb_get_capabilities(vo_driver_t *this_gen) { - return VO_CAP_COPIES_IMAGE | - VO_CAP_YV12 | + return VO_CAP_YV12 | VO_CAP_YUY2 | VO_CAP_BRIGHTNESS; } -static void fb_frame_copy(vo_frame_t *vo_img, uint8_t **src) +static void fb_frame_proc_slice(vo_frame_t *vo_img, uint8_t **src) { fb_frame_t *frame = (fb_frame_t *)vo_img ; @@ -225,10 +224,11 @@ static vo_frame_t *fb_alloc_frame(vo_driver_t *this_gen) pthread_mutex_init(&frame->vo_frame.mutex, NULL); /* supply required functions */ - frame->vo_frame.copy = fb_frame_copy; - frame->vo_frame.field = fb_frame_field; - frame->vo_frame.dispose = fb_frame_dispose; - frame->vo_frame.driver = this_gen; + frame->vo_frame.proc_slice = fb_frame_proc_slice; + frame->vo_frame.proc_frame = NULL; + frame->vo_frame.field = fb_frame_field; + frame->vo_frame.dispose = fb_frame_dispose; + frame->vo_frame.driver = this_gen; frame->this = this; @@ -1053,7 +1053,7 @@ plugin_info_t xine_plugin_info[] = /* type, API, "name", version, special_info, init_function */ { PLUGIN_VIDEO_OUT, - 17, + 18, "fb", XINE_VERSION_CODE, &vo_info_fb, fb_init_class diff --git a/src/video_out/video_out_none.c b/src/video_out/video_out_none.c index 7d99713ea..371ffb295 100644 --- a/src/video_out/video_out_none.c +++ b/src/video_out/video_out_none.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_none.c,v 1.16 2003/10/06 21:52:44 miguelfreitas Exp $ + * $Id: video_out_none.c,v 1.17 2003/10/22 20:38:10 komadori Exp $ * * Was originally part of toxine frontend. * ...but has now been adapted to xine coding style standards ;) @@ -99,10 +99,11 @@ static vo_frame_t *none_alloc_frame(vo_driver_t *vo_driver) { frame->vo_frame.base[1] = NULL; frame->vo_frame.base[2] = NULL; - frame->vo_frame.copy = NULL; - frame->vo_frame.field = none_frame_field; - frame->vo_frame.dispose = none_frame_dispose; - frame->vo_frame.driver = vo_driver; + frame->vo_frame.proc_slice = NULL; + frame->vo_frame.proc_frame = NULL; + frame->vo_frame.field = none_frame_field; + frame->vo_frame.dispose = none_frame_dispose; + frame->vo_frame.driver = vo_driver; return (vo_frame_t *)frame; } @@ -302,6 +303,6 @@ static vo_info_t vo_info_none = { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_VIDEO_OUT, 17, "none", XINE_VERSION_CODE, &vo_info_none, init_class }, + { PLUGIN_VIDEO_OUT, 18, "none", XINE_VERSION_CODE, &vo_info_none, init_class }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/video_out/video_out_opengl.c b/src/video_out/video_out_opengl.c index f2282eaf5..1ae5534de 100644 --- a/src/video_out/video_out_opengl.c +++ b/src/video_out/video_out_opengl.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_opengl.c,v 1.28 2003/10/06 21:52:44 miguelfreitas Exp $ + * $Id: video_out_opengl.c,v 1.29 2003/10/22 20:38:10 komadori Exp $ * * video_out_glut.c, glut based OpenGL rendering interface for xine * Matthias Hopf <mat@mshopf.de> @@ -189,11 +189,11 @@ enum { CONTEXT_BAD = 0, CONTEXT_SAME_DRAWABLE, CONTEXT_RELOAD, CONTEXT_SET }; static uint32_t opengl_get_capabilities (vo_driver_t *this_gen) { - return VO_CAP_COPIES_IMAGE | VO_CAP_YV12 | VO_CAP_YUY2 | VO_CAP_BRIGHTNESS; + return VO_CAP_YV12 | VO_CAP_YUY2 | VO_CAP_BRIGHTNESS; } -static void opengl_frame_copy (vo_frame_t *vo_img, uint8_t **src) { +static void opengl_frame_proc_slice (vo_frame_t *vo_img, uint8_t **src) { opengl_frame_t *frame = (opengl_frame_t *) vo_img ; vo_img->copy_called = 1; @@ -285,10 +285,11 @@ static vo_frame_t *opengl_alloc_frame (vo_driver_t *this_gen) { /* * supply required functions/fields */ - frame->vo_frame.copy = opengl_frame_copy; - frame->vo_frame.field = opengl_frame_field; - frame->vo_frame.dispose = opengl_frame_dispose; - frame->vo_frame.driver = this_gen; + frame->vo_frame.proc_slice = opengl_frame_proc_slice; + frame->vo_frame.proc_frame = opengl_frame_proc_frame; + frame->vo_frame.field = opengl_frame_field; + frame->vo_frame.dispose = opengl_frame_dispose; + frame->vo_frame.driver = this_gen; /* * colorspace converter for this frame @@ -1000,7 +1001,7 @@ static vo_info_t vo_info_opengl = { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_VIDEO_OUT, 17, "opengl", XINE_VERSION_CODE, + { PLUGIN_VIDEO_OUT, 18, "opengl", XINE_VERSION_CODE, &vo_info_opengl, opengl_init_class }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/video_out/video_out_pgx64.c b/src/video_out/video_out_pgx64.c index e7a33edfe..0e6a8ecf6 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.40 2003/10/19 03:12:47 komadori Exp $ + * $Id: video_out_pgx64.c,v 1.41 2003/10/22 20:38:10 komadori Exp $ * * video_out_pgx64.c, Sun PGX64/PGX24 output plugin for xine * @@ -267,7 +267,18 @@ static int vram_alloc(pgx64_driver_t* this, int size) * XINE VIDEO DRIVER FUNCTIONS */ -static void pgx64_frame_copy(pgx64_frame_t *frame, uint8_t **src) +static void pgx64_frame_proc_frame(pgx64_frame_t *frame, uint8_t **src) +{ + int i; + + frame->vo_frame.copy_called = 1; + + for (i=0; i<frame->planes; i++) { + memcpy(frame->buffer_ptrs[i], src[i], frame->lengths[i]); + } +} + +static void pgx64_frame_proc_slice(pgx64_frame_t *frame, uint8_t **src) { int i, len; @@ -280,6 +291,8 @@ static void pgx64_frame_copy(pgx64_frame_t *frame, uint8_t **src) } } + + static void pgx64_frame_field(pgx64_frame_t *frame, int which_field) { } @@ -292,8 +305,7 @@ static void pgx64_frame_dispose(pgx64_frame_t *frame) static uint32_t pgx64_get_capabilities(pgx64_driver_t *this) { - return VO_CAP_COPIES_IMAGE | - VO_CAP_YV12 | + return VO_CAP_YV12 | VO_CAP_YUY2 | VO_CAP_COLORKEY | VO_CAP_SATURATION | @@ -313,9 +325,10 @@ static pgx64_frame_t* pgx64_alloc_frame(pgx64_driver_t *this) pthread_mutex_init(&frame->vo_frame.mutex, NULL); - frame->vo_frame.copy = NULL; - frame->vo_frame.field = (void*)pgx64_frame_field; - frame->vo_frame.dispose = (void*)pgx64_frame_dispose; + frame->vo_frame.proc_frame = NULL; + frame->vo_frame.proc_slice = NULL; + frame->vo_frame.field = (void*)pgx64_frame_field; + frame->vo_frame.dispose = (void*)pgx64_frame_dispose; return frame; } @@ -334,7 +347,8 @@ static void pgx64_update_frame_format(pgx64_driver_t *this, pgx64_frame_t *frame frame->format = format; frame->pitch = ((width + 7) / 8) * 8; - frame->vo_frame.copy = NULL; + frame->vo_frame.proc_frame = NULL; + frame->vo_frame.proc_slice = NULL; switch (format) { case XINE_IMGFMT_YUY2: @@ -435,7 +449,7 @@ static void pgx64_display_frame(pgx64_driver_t *this, pgx64_frame_t *frame) if (this->buf_mode == BUF_MODE_MULTI) { int i; - if (frame->vo_frame.copy != (void*)pgx64_frame_copy) { + if (frame->vo_frame.proc_slice != (void*)pgx64_frame_proc_slice) { for (i=0; i<frame->planes; i++) { if ((frame->buffers[i] = vram_alloc(this, frame->lengths[i])) < 0) { if (this->detained_frames < MAX_DETAINED_FRAMES) { @@ -455,7 +469,8 @@ static void pgx64_display_frame(pgx64_driver_t *this, pgx64_frame_t *frame) } } - frame->vo_frame.copy = (void*)pgx64_frame_copy; + frame->vo_frame.proc_frame = (void*)pgx64_frame_proc_frame; + frame->vo_frame.proc_slice = (void*)pgx64_frame_proc_slice; } for (i=0; i<frame->planes; i++) { @@ -506,7 +521,8 @@ static void pgx64_display_frame(pgx64_driver_t *this, pgx64_frame_t *frame) memcpy(this->buffer_ptrs[this->dblbuf_select][i], frame->vo_frame.base[i], frame->lengths[i]); } - frame->vo_frame.copy = NULL; + frame->vo_frame.proc_slice = NULL; + frame->vo_frame.proc_frame = NULL; } this->vregs[CAPTURE_CONFIG] = this->dblbuf_select ? le2me_32(CAPTURE_CONFIG_BUF1) : le2me_32(CAPTURE_CONFIG_BUF0); @@ -522,7 +538,7 @@ static void pgx64_display_frame(pgx64_driver_t *this, pgx64_frame_t *frame) static void pgx64_overlay_blend(pgx64_driver_t *this, pgx64_frame_t *frame, vo_overlay_t *overlay) { if (overlay->rle) { - if (frame->vo_frame.copy == (void*)pgx64_frame_copy) { + if (frame->vo_frame.proc_slice == (void*)pgx64_frame_proc_slice) { /* FIXME: Implement out of place alphablending functions for better performance */ switch (frame->format) { case XINE_IMGFMT_YV12: { @@ -1074,6 +1090,6 @@ static pgx64_driver_class_t* pgx64_init_class(xine_t *xine, void *visual_gen) } plugin_info_t xine_plugin_info[] = { - {PLUGIN_VIDEO_OUT, 17, "pgx64", XINE_VERSION_CODE, &vo_info_pgx64, (void*)pgx64_init_class}, + {PLUGIN_VIDEO_OUT, 18, "pgx64", XINE_VERSION_CODE, &vo_info_pgx64, (void*)pgx64_init_class}, {PLUGIN_NONE, 0, "", 0, NULL, NULL} }; diff --git a/src/video_out/video_out_sdl.c b/src/video_out/video_out_sdl.c index 50ff3753f..5c5af63ad 100644 --- a/src/video_out/video_out_sdl.c +++ b/src/video_out/video_out_sdl.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_sdl.c,v 1.27 2003/10/06 21:52:44 miguelfreitas Exp $ + * $Id: video_out_sdl.c,v 1.28 2003/10/22 20:38:10 komadori Exp $ * * video_out_sdl.c, Simple DirectMedia Layer * @@ -146,9 +146,10 @@ static vo_frame_t *sdl_alloc_frame (vo_driver_t *this_gen) { * supply required functions */ - frame->vo_frame.copy = NULL; - frame->vo_frame.field = sdl_frame_field; - frame->vo_frame.dispose = sdl_frame_dispose; + frame->vo_frame.proc_slice = NULL; + frame->vo_frame.proc_frame = NULL; + frame->vo_frame.field = sdl_frame_field; + frame->vo_frame.dispose = sdl_frame_dispose; return (vo_frame_t *) frame; } @@ -596,6 +597,6 @@ static vo_info_t vo_info_sdl = { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_VIDEO_OUT, 17, "sdl", XINE_VERSION_CODE, &vo_info_sdl, init_class }, + { PLUGIN_VIDEO_OUT, 18, "sdl", XINE_VERSION_CODE, &vo_info_sdl, init_class }, { PLUGIN_NONE, 0, "" , 0 , NULL, NULL} }; diff --git a/src/video_out/video_out_stk.c b/src/video_out/video_out_stk.c index 7a9aa093b..6f034d98c 100644 --- a/src/video_out/video_out_stk.c +++ b/src/video_out/video_out_stk.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_stk.c,v 1.5 2003/10/07 17:35:51 miguelfreitas Exp $ + * $Id: video_out_stk.c,v 1.6 2003/10/22 20:38:10 komadori Exp $ * * video_out_stk.c, Libstk Surface Video Driver * more info on Libstk at http://www.libstk.org @@ -105,7 +105,7 @@ static uint32_t stk_get_capabilities (vo_driver_t *this_gen) { } /* copy YUV to RGB data (see fb driver)*/ -static void stk_frame_copy (vo_frame_t *vo_img, uint8_t **src) +static void stk_frame_proc_slice (vo_frame_t *vo_img, uint8_t **src) { /* not needed by SDL, we may need it for other stk backends */ //printf("video_out_stk: frame_copy()\n"); @@ -138,9 +138,10 @@ static vo_frame_t *stk_alloc_frame(vo_driver_t *this_gen) { pthread_mutex_init (&frame->vo_frame.mutex, NULL); /* map the frame function pointers */ - frame->vo_frame.copy = stk_frame_copy; - frame->vo_frame.field = stk_frame_field; - frame->vo_frame.dispose = stk_frame_dispose; + frame->vo_frame.proc_slice = stk_frame_proc_slice; + frame->vo_frame.proc_frame = NULL; + frame->vo_frame.field = stk_frame_field; + frame->vo_frame.dispose = stk_frame_dispose; return (vo_frame_t *) frame; } @@ -477,7 +478,7 @@ static vo_info_t vo_info_stk = { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_VIDEO_OUT, 17, "stk", XINE_VERSION_CODE, &vo_info_stk, init_class }, + { PLUGIN_VIDEO_OUT, 18, "stk", XINE_VERSION_CODE, &vo_info_stk, init_class }, { PLUGIN_NONE, 0, "" , 0 , NULL, NULL} }; diff --git a/src/video_out/video_out_syncfb.c b/src/video_out/video_out_syncfb.c index 32376315d..9a7ba581e 100644 --- a/src/video_out/video_out_syncfb.c +++ b/src/video_out/video_out_syncfb.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_syncfb.c,v 1.89 2003/10/06 21:52:44 miguelfreitas Exp $ + * $Id: video_out_syncfb.c,v 1.90 2003/10/22 20:38:10 komadori Exp $ * * video_out_syncfb.c, SyncFB (for Matrox G200/G400 cards) interface for xine * @@ -486,9 +486,10 @@ static vo_frame_t* syncfb_alloc_frame(vo_driver_t* this_gen) /* * supply required functions */ - frame->vo_frame.copy = NULL; - frame->vo_frame.field = syncfb_frame_field; - frame->vo_frame.dispose = syncfb_frame_dispose; + frame->vo_frame.proc_slice = NULL; + frame->vo_frame.proc_frame = NULL; + frame->vo_frame.field = syncfb_frame_field; + frame->vo_frame.dispose = syncfb_frame_dispose; frame->vo_frame.driver = this_gen; } @@ -1057,7 +1058,7 @@ static vo_info_t vo_info_syncfb = { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_VIDEO_OUT, 17, "SyncFB", XINE_VERSION_CODE, &vo_info_syncfb, init_class }, + { PLUGIN_VIDEO_OUT, 18, "SyncFB", XINE_VERSION_CODE, &vo_info_syncfb, init_class }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/video_out/video_out_vidix.c b/src/video_out/video_out_vidix.c index b7017c233..356d5278b 100644 --- a/src/video_out/video_out_vidix.c +++ b/src/video_out/video_out_vidix.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_vidix.c,v 1.47 2003/10/06 21:52:44 miguelfreitas Exp $ + * $Id: video_out_vidix.c,v 1.48 2003/10/22 20:38:10 komadori Exp $ * * video_out_vidix.c * @@ -402,9 +402,10 @@ static vo_frame_t *vidix_alloc_frame (vo_driver_t *this_gen) { * supply required functions */ - frame->vo_frame.copy = NULL; - frame->vo_frame.field = vidix_frame_field; - frame->vo_frame.dispose = vidix_frame_dispose; + frame->vo_frame.proc_slice = NULL; + frame->vo_frame.proc_frame = NULL; + frame->vo_frame.field = vidix_frame_field; + frame->vo_frame.dispose = vidix_frame_dispose; return (vo_frame_t *) frame; } @@ -1233,10 +1234,10 @@ static vo_info_t vo_info_vidixfb = { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ #ifdef HAVE_X11 - { PLUGIN_VIDEO_OUT, 17, "vidix", XINE_VERSION_CODE, &vo_info_vidix, vidix_init_class }, + { PLUGIN_VIDEO_OUT, 18, "vidix", XINE_VERSION_CODE, &vo_info_vidix, vidix_init_class }, #endif #ifdef HAVE_FB - { PLUGIN_VIDEO_OUT, 17, "vidixfb", XINE_VERSION_CODE, &vo_info_vidixfb, vidixfb_init_class }, + { PLUGIN_VIDEO_OUT, 18, "vidixfb", XINE_VERSION_CODE, &vo_info_vidixfb, vidixfb_init_class }, #endif { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/video_out/video_out_xshm.c b/src/video_out/video_out_xshm.c index 895606b05..f6c17cd1a 100644 --- a/src/video_out/video_out_xshm.c +++ b/src/video_out/video_out_xshm.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_xshm.c,v 1.115 2003/10/18 23:01:21 f1rmb Exp $ + * $Id: video_out_xshm.c,v 1.116 2003/10/22 20:38:10 komadori Exp $ * * video_out_xshm.c, X11 shared memory extension interface for xine * @@ -307,11 +307,11 @@ static void dispose_ximage (xshm_driver_t *this, */ static uint32_t xshm_get_capabilities (vo_driver_t *this_gen) { - return VO_CAP_COPIES_IMAGE | VO_CAP_YV12 | VO_CAP_YUY2 | + return VO_CAP_YV12 | VO_CAP_YUY2 | VO_CAP_BRIGHTNESS | VO_CAP_CONTRAST | VO_CAP_SATURATION; } -static void xshm_frame_copy (vo_frame_t *vo_img, uint8_t **src) { +static void xshm_frame_proc_slice (vo_frame_t *vo_img, uint8_t **src) { xshm_frame_t *frame = (xshm_frame_t *) vo_img ; /*xshm_driver_t *this = (xshm_driver_t *) vo_img->driver; */ @@ -390,10 +390,11 @@ static vo_frame_t *xshm_alloc_frame (vo_driver_t *this_gen) { * supply required functions/fields */ - frame->vo_frame.copy = xshm_frame_copy; - frame->vo_frame.field = xshm_frame_field; - frame->vo_frame.dispose = xshm_frame_dispose; - frame->vo_frame.driver = this_gen; + frame->vo_frame.proc_slice = xshm_frame_proc_slice; + frame->vo_frame.proc_frame = NULL; + frame->vo_frame.field = xshm_frame_field; + frame->vo_frame.dispose = xshm_frame_dispose; + frame->vo_frame.driver = this_gen; /* * colorspace converter for this frame @@ -1229,6 +1230,6 @@ static vo_info_t vo_info_xshm = { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_VIDEO_OUT, 17, "xshm", XINE_VERSION_CODE, &vo_info_xshm, xshm_init_class }, + { PLUGIN_VIDEO_OUT, 18, "xshm", XINE_VERSION_CODE, &vo_info_xshm, xshm_init_class }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/video_out/video_out_xv.c b/src/video_out/video_out_xv.c index 2fc804b92..316c63eab 100644 --- a/src/video_out/video_out_xv.c +++ b/src/video_out/video_out_xv.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_xv.c,v 1.176 2003/10/18 23:01:21 f1rmb Exp $ + * $Id: video_out_xv.c,v 1.177 2003/10/22 20:38:10 komadori Exp $ * * video_out_xv.c, X11 video extension interface for xine * @@ -207,10 +207,11 @@ static vo_frame_t *xv_alloc_frame (vo_driver_t *this_gen) { /* * supply required functions */ - frame->vo_frame.copy = NULL; - frame->vo_frame.field = xv_frame_field; - frame->vo_frame.dispose = xv_frame_dispose; - frame->vo_frame.driver = this_gen; + frame->vo_frame.proc_slice = NULL; + frame->vo_frame.proc_frame = NULL; + frame->vo_frame.field = xv_frame_field; + frame->vo_frame.dispose = xv_frame_dispose; + frame->vo_frame.driver = this_gen; return (vo_frame_t *) frame; } @@ -1466,7 +1467,7 @@ static vo_info_t vo_info_xv = { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_VIDEO_OUT, 17, "xv", XINE_VERSION_CODE, &vo_info_xv, init_class }, + { PLUGIN_VIDEO_OUT, 18, "xv", XINE_VERSION_CODE, &vo_info_xv, init_class }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/video_out/video_out_xvmc.c b/src/video_out/video_out_xvmc.c index 2a3a642b1..e1e6aa2f3 100644 --- a/src/video_out/video_out_xvmc.c +++ b/src/video_out/video_out_xvmc.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_xvmc.c,v 1.2 2003/10/06 21:52:44 miguelfreitas Exp $ + * $Id: video_out_xvmc.c,v 1.3 2003/10/22 20:38:10 komadori Exp $ * * video_out_xvmc.c, X11 video motion compensation extension interface for xine * @@ -623,9 +623,10 @@ static vo_frame_t *xvmc_alloc_frame (vo_driver_t *this_gen) { * supply required functions */ - frame->vo_frame.copy = NULL; - frame->vo_frame.field = xvmc_frame_field; - frame->vo_frame.dispose = xvmc_frame_dispose; + frame->vo_frame.proc_slice = NULL; + frame->vo_frame.proc_frame = NULL; + frame->vo_frame.field = xvmc_frame_field; + frame->vo_frame.dispose = xvmc_frame_dispose; frame->vo_frame.proc_macro_block = xvmc_proc_macro_block; frame->vo_frame.driver = this_gen; @@ -1901,7 +1902,7 @@ static vo_info_t vo_info_xvmc = { plugin_info_t xine_plugin_info[] = { /* type, API, "name", version, special_info, init_function */ - { PLUGIN_VIDEO_OUT, 17, "xvmc", XINE_VERSION_CODE, &vo_info_xvmc, init_class }, + { PLUGIN_VIDEO_OUT, 18, "xvmc", XINE_VERSION_CODE, &vo_info_xvmc, init_class }, { PLUGIN_NONE, 0, "", 0, NULL, NULL } }; diff --git a/src/xine-engine/post.c b/src/xine-engine/post.c index 1b1f70308..bbccf1187 100644 --- a/src/xine-engine/post.c +++ b/src/xine-engine/post.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: post.c,v 1.15 2003/10/06 21:52:44 miguelfreitas Exp $ + * $Id: post.c,v 1.16 2003/10/22 20:38:10 komadori Exp $ */ /* @@ -125,10 +125,17 @@ static void post_frame_free(vo_frame_t *vo_img) { vo_img->free(vo_img); } -static void post_frame_copy(vo_frame_t *vo_img, uint8_t **src) { +static void post_frame_proc_slice(vo_frame_t *vo_img, uint8_t **src) { post_video_port_t *port = (post_video_port_t *)vo_img->port; vo_img->port = port->original_port; - port->original_frame.copy(vo_img, src); + port->original_frame.proc_slice(vo_img, src); + vo_img->port = &port->port; +} + +static void post_frame_proc_frame(vo_frame_t *vo_img, uint8_t **src) { + post_video_port_t *port = (post_video_port_t *)vo_img->port; + vo_img->port = port->original_port; + port->original_frame.proc_frame(vo_img, src); vo_img->port = &port->port; } @@ -188,7 +195,8 @@ static void post_frame_proc_macro_block(int x, void post_intercept_video_frame(vo_frame_t *frame, post_video_port_t *port) { port->original_frame.port = frame->port; port->original_frame.free = frame->free; - port->original_frame.copy = frame->copy; + port->original_frame.proc_slice = frame->proc_slice; + port->original_frame.proc_frame = frame->proc_frame; port->original_frame.field = frame->field; port->original_frame.draw = frame->draw; port->original_frame.lock = frame->lock; @@ -197,7 +205,8 @@ void post_intercept_video_frame(vo_frame_t *frame, post_video_port_t *port) { frame->port = &port->port; frame->free = post_frame_free; - frame->copy = frame->copy ? post_frame_copy : NULL; /* this one can be NULL */ + frame->proc_slice = frame->proc_slice ? post_frame_proc_slice : NULL; + frame->proc_frame = frame->proc_frame ? post_frame_proc_frame : NULL; frame->field = post_frame_field; frame->draw = post_frame_draw; frame->lock = post_frame_lock; @@ -208,7 +217,8 @@ void post_intercept_video_frame(vo_frame_t *frame, post_video_port_t *port) { void post_restore_video_frame(vo_frame_t *frame, post_video_port_t *port) { frame->port = port->original_port; frame->free = port->original_frame.free; - frame->copy = port->original_frame.copy; + frame->proc_slice = port->original_frame.proc_slice; + frame->proc_frame = port->original_frame.proc_frame; frame->field = port->original_frame.field; frame->draw = port->original_frame.draw; frame->lock = port->original_frame.lock; diff --git a/src/xine-engine/video_out.c b/src/xine-engine/video_out.c index d4d712dfc..f91cf15f3 100644 --- a/src/xine-engine/video_out.c +++ b/src/xine-engine/video_out.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.c,v 1.173 2003/10/08 02:32:04 miguelfreitas Exp $ + * $Id: video_out.c,v 1.174 2003/10/22 20:38:10 komadori Exp $ * * frame allocation / queuing / scheduling / output functions */ @@ -221,9 +221,12 @@ static void vo_frame_dec_lock (vo_frame_t *img) { /* call vo_driver->copy method for the entire frame */ static void vo_frame_driver_copy(vo_frame_t *img) -{ - if (img->format == XINE_IMGFMT_YV12) { - if (img->copy) { +{ + if (img->proc_frame) { + img->proc_frame(img, img->base); + } + else if (img->proc_slice) { + if (img->format == XINE_IMGFMT_YV12) { int height = img->height; uint8_t* src[3]; @@ -231,21 +234,19 @@ static void vo_frame_driver_copy(vo_frame_t *img) src[1] = img->base[1]; src[2] = img->base[2]; while ((height -= 16) > -16) { - img->copy(img, src); + img->proc_slice(img, src); src[0] += 16 * img->pitches[0]; src[1] += 8 * img->pitches[1]; src[2] += 8 * img->pitches[2]; } - } - } else { - if (img->copy) { + } else { int height = img->height; uint8_t* src[3]; src[0] = img->base[0]; while ((height -= 16) > -16) { - img->copy(img, src); + img->proc_slice(img, src); src[0] += 16 * img->pitches[0]; } } @@ -391,7 +392,7 @@ static int vo_frame_draw (vo_frame_t *img, xine_stream_t *stream) { if (!img->bad_frame) { /* do not call copy() for frames that will be dropped */ - if( !frames_to_skip && img->copy && !img->copy_called ) + if( !frames_to_skip && !img->copy_called ) vo_frame_driver_copy(img); /* @@ -791,7 +792,7 @@ static void overlay_and_display_frame (vos_t *this, /* no, this is not were copy() is usually called. * it's just to catch special cases like late or duplicated frames. */ - if( img->copy && !img->copy_called ) + if(!img->copy_called ) vo_frame_driver_copy(img); pthread_mutex_lock( &img->stream->current_extra_info_lock ); diff --git a/src/xine-engine/video_out.h b/src/xine-engine/video_out.h index c4cdb2d03..3e132ac94 100644 --- a/src/xine-engine/video_out.h +++ b/src/xine-engine/video_out.h @@ -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.h,v 1.97 2003/10/06 21:52:45 miguelfreitas Exp $ + * $Id: video_out.h,v 1.98 2003/10/22 20:38:10 komadori Exp $ * * * xine version of video_out.h @@ -84,10 +84,14 @@ struct vo_frame_s { /* this frame is no longer used by the decoder, video driver, etc */ void (*free) (vo_frame_t *vo_img); - + + /* tell video driver to copy/convert the whole of this frame, may be NULL */ + /* this function MUST set the variable copy_called above */ + void (*proc_frame) (vo_frame_t *vo_img, uint8_t **src); + /* tell video driver to copy/convert a slice of this frame, may be NULL */ /* this function MUST set the variable copy_called above */ - void (*copy) (vo_frame_t *vo_img, uint8_t **src); + void (*proc_slice) (vo_frame_t *vo_img, uint8_t **src); /* tell video driver that the decoder starts a new field */ void (*field) (vo_frame_t *vo_img, int which_field); @@ -284,10 +288,6 @@ struct xine_video_port_s { /* video driver capabilities */ -/* driver copies image (i.e. converts it to - rgb buffers in the private fields of image buffer) */ -#define VO_CAP_COPIES_IMAGE 0x00000001 - #define VO_CAP_YV12 0x00000002 /* driver can handle YUV 4:2:0 pictures */ #define VO_CAP_YUY2 0x00000004 /* driver can handle YUY2 pictures */ @@ -335,7 +335,7 @@ struct xine_video_port_s { * from generic vo functions. */ -#define VIDEO_OUT_DRIVER_IFACE_VERSION 17 +#define VIDEO_OUT_DRIVER_IFACE_VERSION 18 struct vo_driver_s { |