DirectFB - Home of the pragmatist Roadmap


[directfb-dev] Re: VeXP VideoProvider
Mailing List archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[directfb-dev] Re: VeXP VideoProvider



Claudio "KLaN" Ciccani wrote:

samh wrote:

Claudio "KLaN" Ciccani wrote:

/samh wrote:

i got directfb-extra from cvs

but xine-videoprovider doesn't work with VeXP
i think the problem is on VeXP
because everything fine on Xine

how can i solve this problem with my EPIA-M


Can you report console output ?


Best regards,
Claudio
/

/in VeXP, structure vo_frame_s is different from xine /

/there are no member functions proc_frame & proc_slice
and there is no member proc_called(there is a member function (*copy) just like proc_slice)

i add proc_frame & proc_slice to VeXP vo_frame_s
set them to NULL

df_xine can load mpeg2 file
i got the audio outpot but the video output is nothing/

This patch ports video_out_dfb to VeXP (not tested, but should work).
Let me know.


Best regards,
Claudio

Sorry, this is the right patch.


Best regards,
Claudio


================================================================

diff -uraN DirectFB-extra/interfaces/IDirectFBVideoProvider/video_out_dfb/video_out_dfb.c DirectFB-extra2/interfaces/IDirectFBVideoProvider/video_out_dfb/video_out_dfb.c
--- DirectFB-extra/interfaces/IDirectFBVideoProvider/video_out_dfb/video_out_dfb.c 2004-05-18 11:24:09.000000000 +0200
+++ DirectFB-extra2/interfaces/IDirectFBVideoProvider/video_out_dfb/video_out_dfb.c 2004-05-18 12:09:52.000000000 +0200
@@ -284,7 +284,7 @@
uint8_t* v_off;
uint32_t line = frame->width >> 2;
uint32_t n = (frame->width * frame->height) >> 3;
- uint32_t l = frame->vo_frame.pitches[0];
+ uint32_t l = frame->width << 1;
int32_t bright = this->brightness.l_val;
int32_t ctr = this->contrast.l_val;

@@ -1468,7 +1468,7 @@


static void
-dfb_proc_frame(vo_frame_t* vo_frame)
+dfb_frame_copy(vo_frame_t* vo_frame)
{
dfb_frame_t* frame = (dfb_frame_t*) vo_frame;
#ifdef DFB_DEBUG
@@ -1478,8 +1478,6 @@
TEST(vo_frame != NULL);
TEST(frame->surface != NULL);

- vo_frame->proc_called = 1;
-
if(frame->proc_needed)
{
uint8_t* data;
@@ -1488,8 +1486,7 @@
data = (uint8_t*) frame->surface->back_buffer->system.addr;
pitch = (uint32_t) frame->surface->back_buffer->system.pitch;

- SPEED(frame->realize((dfb_driver_t*) vo_frame->driver,
- frame, data, pitch));
+ SPEED(frame->realize(frame->driver, frame, data, pitch));
}

FAILURE:
@@ -1525,14 +1522,13 @@

pthread_mutex_init(&(frame->vo_frame.mutex), NULL);

- frame->vo_frame.proc_slice = NULL;
- frame->vo_frame.proc_frame = dfb_proc_frame;
- frame->vo_frame.field = NULL;
- frame->vo_frame.dispose = dfb_frame_dispose;
- frame->vo_frame.driver = vo_driver;
- frame->state.src_blend = DSBF_SRCALPHA;
- frame->state.dst_blend = DSBF_INVSRCALPHA;
- frame->state.modified = SMF_ALL;
+ frame->vo_frame.copy = dfb_frame_copy;
+ frame->vo_frame.field = NULL;
+ frame->vo_frame.dispose = dfb_frame_dispose;
+ frame->driver = (dfb_driver_t*) vo_driver;
+ frame->state.src_blend = DSBF_SRCALPHA;
+ frame->state.dst_blend = DSBF_INVSRCALPHA;
+ frame->state.modified = SMF_ALL;

D_MAGIC_SET(&(frame->state), CardState);

@@ -1584,16 +1580,32 @@
frame->state.source = frame->surface;
frame->state.modified |= SMF_SOURCE;

- release(frame->chunks[0]);
- release(frame->chunks[1]);
- release(frame->chunks[2]);
+ if(frame->vo_frame.base[0])
+ {
+ xine_free_aligned(frame->vo_frame.base[0]);
+ frame->vo_frame.base[0] = NULL;
+ }
+
+ if(frame->vo_frame.base[1])
+ {
+ xine_free_aligned(frame->vo_frame.base[1]);
+ frame->vo_frame.base[1] = NULL;
+ }
+
+ if(frame->vo_frame.base[2])
+ {
+ xine_free_aligned(frame->vo_frame.base[2]);
+ frame->vo_frame.base[2] = NULL;
+ }

if(format == XINE_IMGFMT_YUY2)
{
+ int pitch;
+
ONESHOT("video frame format is YUY2");

yuv_cc = &yuy2_cc;
- vo_frame->pitches[0] = frame->width << 1;
+ pitch = frame->width << 1;

if(frame->surface->format == DSPF_YUY2 &&
!this->brightness.l_val && this->contrast.l_val == 0x4000)
@@ -1604,20 +1616,19 @@
} else
{
vo_frame->base[0] = (uint8_t*) xine_xmalloc_aligned(16,
- vo_frame->pitches[0] *
- frame->height,
- &(frame->chunks[0]));
+ pitch * frame->height);
TEST(vo_frame->base[0] != NULL);
}

} else /* assume XINE_IMGFMT_YV12 */
{
+ int pitches[2];
+
ONESHOT("video frame format is YV12");

yuv_cc = &yv12_cc;
- vo_frame->pitches[0] = frame->width;
- vo_frame->pitches[1] = frame->width >> 1;
- vo_frame->pitches[2] = frame->width >> 1;
+ pitches[0] = frame->width;
+ pitches[1] = frame->width >> 1;

if((frame->surface->format == DSPF_YV12 ||
frame->surface->format == DSPF_I420) &&
@@ -1642,17 +1653,11 @@
} else
{
vo_frame->base[0] = (uint8_t*) xine_xmalloc_aligned(16,
- vo_frame->pitches[0] *
- frame->height,
- &(frame->chunks[0]));
+ pitches[0] * frame->height);
vo_frame->base[1] = (uint8_t*) xine_xmalloc_aligned(16,
- vo_frame->pitches[1] *
- (frame->height >> 1) + 2,
- &(frame->chunks[1]));
+ (pitches[1] * (frame->height >> 1)) + 2);
vo_frame->base[2] = (uint8_t*) xine_xmalloc_aligned(16,
- vo_frame->pitches[2] *
- (frame->height >> 1) + 2,
- &(frame->chunks[2]));
+ (pitches[1] * (frame->height >> 1)) + 2);
TEST(vo_frame->base[0] != NULL);
TEST(vo_frame->base[1] != NULL);
TEST(vo_frame->base[2] != NULL);
@@ -2062,15 +2067,8 @@
}


-static int
-dfb_redraw_needed(vo_driver_t* vo_driver)
-{
- return(0);
-}
-
-
static void
-dfb_dispose(vo_driver_t* vo_driver)
+dfb_exit(vo_driver_t* vo_driver)
{
dfb_driver_t* this = (dfb_driver_t*) vo_driver;

@@ -2083,8 +2081,25 @@
}


-static vo_driver_t*
-open_plugin(video_driver_class_t* vo_class, const void *vo_visual)
+static vo_info_t vo_info_dfb =
+{
+ VIDEO_OUT_IFACE_VERSION,
+ "DFB",
+ "Unofficial DirectFB video driver for VeXP",
+ XINE_VISUAL_TYPE_DFB,
+ 8
+};
+
+
+vo_info_t*
+get_video_out_plugin_info(void)
+{
+ return(&vo_info_dfb);
+}
+
+
+vo_driver_t*
+init_video_out_plugin(config_values_t *config, void *vo_visual)
{
dfb_driver_class_t* class = (dfb_driver_class_t*) vo_class;
dfb_visual_t* visual = (dfb_visual_t*) vo_visual;
@@ -2094,26 +2109,23 @@
TEST(vo_visual != NULL);
TEST(visual->output_cb != NULL);

- if(class->xine->verbosity)
- fprintf(stderr, "DFB [Unofficial DirectFB video driver]\n");
+ fprintf(stderr, "DFB [Unofficial DirectFB video driver for VeXP]\n");

TEST(this = (dfb_driver_t*) calloc(1, sizeof(dfb_driver_t)));

this->vo_driver.get_capabilities = dfb_get_capabilities;
this->vo_driver.alloc_frame = dfb_alloc_frame;
this->vo_driver.update_frame_format = dfb_update_frame_format;
- this->vo_driver.overlay_begin = NULL;
this->vo_driver.overlay_blend = dfb_overlay_blend;
- this->vo_driver.overlay_end = NULL;
this->vo_driver.display_frame = dfb_display_frame;
this->vo_driver.get_property = dfb_get_property;
this->vo_driver.set_property = dfb_set_property;
this->vo_driver.get_property_min_max = dfb_get_property_min_max;
this->vo_driver.gui_data_exchange = dfb_gui_data_exchange;
- this->vo_driver.redraw_needed = dfb_redraw_needed;
- this->vo_driver.dispose = dfb_dispose;
+ this->vo_driver.exit = dfb_exit;
+ this->vo_driver.get_info = get_video_out_plugin_info;

- this->verbosity = class->xine->verbosity;
+ this->verbosity = 1;

#ifdef ARCH_X86
{
@@ -2143,21 +2155,17 @@
}
#endif

+ if(config)
{
- config_values_t* config = class->xine->config;
-
- if(config)
- {
- this->max_num_frames = config->register_num(config,
- "video.dfb.max_num_frames", 15,
- "Maximum number of allocated frames (at least 5)",
- NULL, 10, NULL, NULL);
-
- this->correction.defined = config->register_range(config,
- "video.dfb.gamma_correction", -16,
- -128, 127, "RGB gamma correction",
- NULL, 10, NULL, NULL);
- }
+ this->max_num_frames = config->register_num(config,
+ "video.dfb.max_num_frames", 15,
+ "Maximum number of allocated frames (at least 5)",
+ NULL, 10, NULL, NULL);
+
+ this->correction.defined = config->register_range(config,
+ "video.dfb.gamma_correction", -16,
+ -128, 127, "RGB gamma correction",
+ NULL, 10, NULL, NULL);
}


@@ -2234,63 +2242,3 @@
return(NULL);
}

-
-static char*
-get_identifier(video_driver_class_t* vo_class)
-{
- return("DFB");
-}
-
-
-static char*
-get_description(video_driver_class_t* vo_class)
-{
- return("Unofficial DirectFB video driver.");
-}
-
-
-static void
-dispose_class(video_driver_class_t* vo_class)
-{
- release(vo_class);
-}
-
-
-static void*
-init_class(xine_t* xine, void* vo_visual)
-{
- dfb_driver_class_t* class = NULL;
-
- TEST(xine != NULL);
-
- TEST(class = (dfb_driver_class_t*) calloc(1, sizeof(dfb_driver_class_t)));
-
- class->vo_class.open_plugin = open_plugin;
- class->vo_class.get_identifier = get_identifier;
- class->vo_class.get_description = get_description;
- class->vo_class.dispose = dispose_class;
- class->xine = xine;
-
- return(class);
-
-FAILURE:
- return(NULL);
-}
-
-
-
-static vo_info_t vo_info_dfb =
-{
- 8,
- XINE_VISUAL_TYPE_DFB
-};
-
-
-plugin_info_t xine_plugin_info[] =
-{
- /* type, API, "name", version, special_info, init_function */
- { PLUGIN_VIDEO_OUT, VIDEO_OUT_DRIVER_IFACE_VERSION, "DFB",
- XINE_VERSION_CODE, &vo_info_dfb, init_class},
- { PLUGIN_NONE, 0, "", 0, NULL, NULL}
-};
-
diff -uraN DirectFB-extra/interfaces/IDirectFBVideoProvider/video_out_dfb/video_out_dfb.h DirectFB-extra2/interfaces/IDirectFBVideoProvider/video_out_dfb/video_out_dfb.h
--- DirectFB-extra/interfaces/IDirectFBVideoProvider/video_out_dfb/video_out_dfb.h 2004-05-18 11:24:09.000000000 +0200
+++ DirectFB-extra2/interfaces/IDirectFBVideoProvider/video_out_dfb/video_out_dfb.h 2004-05-18 12:00:11.000000000 +0200
@@ -35,6 +35,8 @@
{
vo_frame_t vo_frame;

+ dfb_driver_t* driver;
+
int width;
int height;
double ratio;
@@ -44,8 +46,6 @@
CardState state;
CoreSurface* surface;

- void* chunks[3];
-
void (*realize) (dfb_driver_t* this, dfb_frame_t* frame,
uint8_t* data, uint32_t pitch);

@@ -128,15 +128,6 @@

typedef struct
{
- video_driver_class_t vo_class;
-
- xine_t* xine;
-
-} dfb_driver_class_t;
-
-
-typedef struct
-{
IDirectFBSurface* surface;

DVOutputCallback output_cb;
diff -uraN DirectFB-extra/interfaces/IDirectFBVideoProvider/video_out_dfb/video_out_dfb_mmx.h DirectFB-extra2/interfaces/IDirectFBVideoProvider/video_out_dfb/video_out_dfb_mmx.h
--- DirectFB-extra/interfaces/IDirectFBVideoProvider/video_out_dfb/video_out_dfb_mmx.h 2004-05-18 11:24:09.000000000 +0200
+++ DirectFB-extra2/interfaces/IDirectFBVideoProvider/video_out_dfb/video_out_dfb_mmx.h 2004-05-18 12:04:24.000000000 +0200
@@ -214,7 +214,7 @@
"emms\n\t"

:: "r" (yuv_data), "r" (y_off), "r" (u_off), "r" (v_off),
- "r" (frame->vo_frame.pitches[0]), "r" (pitch),
+ "r" (frame->width << 1), "r" (pitch),
"m" (line), "m" (n)
: "memory");
}




--
Info: To unsubscribe send a mail to ecartis@directfb.org with
"unsubscribe directfb-dev" as subject.



Home | Main Index | Thread Index


directfb.org / Development / Old Archives