Hello,

I am attempting to update xineplug_decode_cle266 to the cvs head of DirectFB. Attached is my video_out_dfb patch which I haven't tested yet (but it builds). Some of the changes I think are related to the recent core API changes. Since the update xineplug_decode_cle266 no longer compiles as well:

# make
make  all-recursive
make[1]: Entering directory `/opt/src/CVS_cle266mpegdec/xineplug_decode_cle266'
Making all in src
make[2]: Entering directory `/opt/src/CVS_cle266mpegdec/xineplug_decode_cle266/src' if /bin/sh ../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I.. -D_REENTRANT -I/usr/local/include/directfb -D_GNU_SOURCE -D_REENTRANT -I/usr/local/include/directfb-internal -I/usr/local/include/directfb -DREENTRANT -I/usr/local/include -g -O2 -MT xineplug_decode_cle266_la-xine_decoder.lo -MD -MP -MF ".deps/xineplug_decode_cle266_la-xine_decoder.Tpo" -c -o xineplug_decode_cle266_la-xine_decoder.lo `test -f 'xine_decoder.c' || echo './'`xine_decoder.c; \ then mv -f ".deps/xineplug_decode_cle266_la-xine_decoder.Tpo" ".deps/xineplug_decode_cle266_la-xine_decoder.Plo"; else rm -f ".deps/xineplug_decode_cle266_la-xine_decoder.Tpo"; exit 1; fi gcc -DHAVE_CONFIG_H -I. -I. -I.. -D_REENTRANT -I/usr/local/include/directfb -D_GNU_SOURCE -D_REENTRANT -I/usr/local/include/directfb-internal -I/usr/local/include/directfb -DREENTRANT -I/usr/local/include -g -O2 -MT xineplug_decode_cle266_la-xine_decoder.lo -MD -MP -MF .deps/xineplug_decode_cle266_la-xine_decoder.Tpo -c xine_decoder.c -fPIC -DPIC -o .libs/xineplug_decode_cle266_la-xine_decoder.o
xine_decoder.c: In function `cle266_get_frame':
xine_decoder.c:101: warning: passing arg 1 of `dfb_surface_hardware_lock' from incompatible pointer type xine_decoder.c:101: warning: passing arg 2 of `dfb_surface_hardware_lock' makes pointer from integer without a cast xine_decoder.c:101: error: too few arguments to function `dfb_surface_hardware_lock'
make[2]: *** [xineplug_decode_cle266_la-xine_decoder.lo] Error 1
make[2]: Leaving directory `/opt/src/CVS_cle266mpegdec/xineplug_decode_cle266/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/opt/src/CVS_cle266mpegdec/xineplug_decode_cle266'
make: *** [all] Error 2


It looks like dfb_surface_hardware_lock requires a CoreDFB object passed to it. Can anyone tell me the best way to get that is?

You can find xineplug_decode_cle266 here:

http://sourceforge.net/projects/cle266mpegdec/
http://cle266mpegdec.cvs.sourceforge.net/cle266mpegdec/xineplug_decode_cle266/

Thanks,
-Rob


Index: interfaces/IDirectFBVideoProvider/video_out_dfb/video_out_dfb.c
===================================================================
RCS file: 
/cvs/directfb/DirectFB-extra/interfaces/IDirectFBVideoProvider/video_out_dfb/video_out_dfb.c,v
retrieving revision 1.37
diff -u -r1.37 video_out_dfb.c
--- interfaces/IDirectFBVideoProvider/video_out_dfb/video_out_dfb.c     13 Dec 
2006 18:38:53 -0000      1.37
+++ interfaces/IDirectFBVideoProvider/video_out_dfb/video_out_dfb.c     3 Jan 
2007 14:22:14 -0000
@@ -33,6 +33,9 @@
 
 #include <idirectfb.h>
 
+#include <core/state.h>
+#include <core/surfaces.h>
+
 #include <gfx/convert.h>
 
 #define LOG_MODULE "video_out_dfb"
@@ -48,12 +51,15 @@
 #include "video_out_dfb_mix.h"
 #include "video_out_dfb_blend.h"
 
+#define VO_CAP_DFBV 0x00010000
+#define XINE_IMGFMT_DFBV (('V'<<24)|('B'<<16)|('F'<<8)|'D')
+
 
 static uint32_t
 vo_dfb_get_capabilities( vo_driver_t *vo_driver )
 {
      dfb_driver_t *this = (dfb_driver_t*) vo_driver;
-     uint32_t      caps = VO_CAP_YV12 | VO_CAP_YUY2;
+     uint32_t      caps = VO_CAP_YV12 | VO_CAP_YUY2 | VO_CAP_DFBV;
 
      if (this->ovl)
           caps |= VO_CAP_UNSCALED_OVERLAY;
@@ -94,6 +100,27 @@
 }
 
 static void
+vo_dfb_duplicate_frame_data( vo_frame_t *vo_frame,
+                             vo_frame_t *vo_original)
+{
+     dfb_frame_t  *frame = (dfb_frame_t*) vo_frame;
+     dfb_frame_t  *original = (dfb_frame_t*) vo_original;
+
+     CardState state;
+     DFBRectangle rect = { 0, 0, frame->width, frame->height };
+     DFBRegion clip;
+
+     dfb_state_init( &state, NULL );
+     dfb_region_from_rectangle( &clip, &rect );
+     dfb_state_set_destination( &state, (CoreSurface*) frame->surface );
+     dfb_state_set_source( &state, (CoreSurface*) original->surface );
+     dfb_state_set_clip( &state, &clip );
+     dfb_state_set_blitting_flags( &state, DSBLIT_NOFX );
+     dfb_gfxcard_blit( &rect, 0, 0, &state );
+     dfb_state_destroy( &state );
+}
+
+static void
 vo_dfb_frame_dispose( vo_frame_t *vo_frame )
 {
      dfb_frame_t *frame = (dfb_frame_t*) vo_frame;
@@ -163,17 +190,31 @@
           
           dsc.flags       = DSDESC_CAPS | DSDESC_WIDTH | 
                             DSDESC_HEIGHT | DSDESC_PIXELFORMAT;
-          dsc.caps        = DSCAPS_SYSTEMONLY | DSCAPS_INTERLACED;
           dsc.width       = (width + 7) & ~7;
           dsc.height      = (height + 1) & ~1;
           dsc.pixelformat = format;
+
+          if (format == XINE_IMGFMT_DFBV) {
+               lprintf( "creating in video memory\n" );
+               dsc.caps = DSCAPS_VIDEOONLY | DSCAPS_INTERLACED;
+          }
+          else {
+               dsc.caps = DSCAPS_SYSTEMONLY | DSCAPS_INTERLACED;
+          }
           
           ret = idirectfb_singleton->CreateSurface( idirectfb_singleton,
                                                     &dsc, &frame->surface );
+
+          if (format == XINE_IMGFMT_DFBV) {
+               frame->vo_frame.proc_duplicate_frame_data = 
vo_dfb_duplicate_frame_data;
+          }
+
           if (ret) {
                DirectFBError( "IDirectFB::CreateSurface()", ret );
                return;
           }
+
+          frame->vo_frame.accel_data = frame->surface;
           
           frame->surface->Lock( frame->surface, DSLF_WRITE,
                                 (void*)&frame->vo_frame.base[0],
_______________________________________________
directfb-dev mailing list
[email protected]
http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-dev

Reply via email to