List Info

Thread: VideoProvider Events (proposed patch for review)




VideoProvider Events (proposed patch for review)
country flaguser name
United States
2007-03-29 09:56:59
Please find below a proposed patch for extending events to
add a new type for
VideoProviders.
This is a first patch and I would welcome feedback as
always.
I have not done a generic change for events as was suggested
in a previous
thread.  Thought I would submit a small change first! And
see what people
thought.
The other reason is currently all implementation for video
providers is
written by the video provider writer.  There is no generic
infrastructure.

Patch below:

diff -urN DirectFB-1.0.0.orig/include/directfb.h
DirectFB-1.0.0.new/include/directfb.h
--- DirectFB-1.0.0.orig/include/directfb.h	2007-03-14
08:33:48.000000000
+0000
+++ DirectFB-1.0.0.new/include/directfb.h	2007-03-29
15:36:22.000000000
+0100
 -3868,7
+3868,8 
      DFEC_INPUT          = 0x01,   /* raw input event */
      DFEC_WINDOW         = 0x02,   /* windowing event */
      DFEC_USER           = 0x03,   /* custom event for the
user of this
library */
-     DFEC_UNIVERSAL      = 0x04    /* universal event for
custom usage with
variable size */
+     DFEC_UNIVERSAL      = 0x04,   /* universal event for
custom usage with
variable size */
+     DFEC_VIDEOPROVIDER  = 0x05    /* video provider event
*/
 } DFBEventClass;
 
 /*
 -4006,6
+4007,19 
 } DFBWindowEventType;
 
 /*
+ * Video Provider Event Types - can also be used as flags
for event
filters.
+ */
+typedef enum {
+     DVPET_NONE           = 0x00000000,
+     DVPET_STARTED        = 0x00000001,  /* The video
provider has started
the playback     */
+     DVPET_STOPPED        = 0x00000002,  /* The video
provider has stopped
the playback     */
+     DVPET_SPEEDCHANGE    = 0x00000004,  /* A speed change
has occured                     
*/
+     DVPET_STREAMCHANGE   = 0x00000008,  /* A stream
description change has
occured         */
+     DVPET_FATALERROR     = 0x00000010,  /* A fatal error
has occured:
restart must be done */
+     DVPET_ALL            = 0x0000001F   /* all event types
*/
+} DFBVideoProviderEventType;
+
+/*
  * Event from the windowing system.
  */
 typedef struct {
 -4059,6
+4073,15 
 } DFBWindowEvent;
 
 /*
+ * Event from the video provider
+ */
+typedef struct {
+     DFBEventClass                   clazz;      /* clazz
of event */
+
+     DFBVideoProviderEventType       type;       /* type of
event */
+} DFBVideoProviderEvent;
+
+/*
  * Event for usage by the user of this library.
  */
 typedef struct {
 -4084,11
+4107,12 
  * General container for a DirectFB Event.
  */
 typedef union {
-     DFBEventClass                   clazz;       /* clazz
of event */
-     DFBInputEvent                   input;       /* field
for input events
*/
-     DFBWindowEvent                  window;      /* field
for window
events */
-     DFBUserEvent                    user;        /* field
for user-defined
events */
-     DFBUniversalEvent               universal;   /* field
for universal
events */
+     DFBEventClass                   clazz;         /*
clazz of event */
+     DFBInputEvent                   input;         /*
field for input
events */
+     DFBWindowEvent                  window;        /*
field for window
events */
+     DFBUserEvent                    user;          /*
field for
user-defined events */
+     DFBUniversalEvent               universal;     /*
field for universal
events */
+     DFBVideoProviderEvent           videoprovider; /*
field for video
provider */
 } DFBEvent;
 
 #define DFB_EVENT(e)          ((DFBEvent *) (e))
 -4103,6
+4127,7 
      unsigned int   DFEC_WINDOW;             /* Number of
window events. */
      unsigned int   DFEC_USER;               /* Number of
user events. */
      unsigned int   DFEC_UNIVERSAL;          /* Number of
universal events.
*/
+     unsigned int   DFEC_VIDEOPROVIDER;      /* Number of
universal events.
*/
 
      unsigned int   DIET_KEYPRESS;
      unsigned int   DIET_KEYRELEASE;
 -4125,6
+4150,12 
      unsigned int   DWET_LEAVE;
      unsigned int   DWET_WHEEL;
      unsigned int   DWET_POSITION_SIZE;
+
+     unsigned int   DVPET_STARTED;
+     unsigned int   DVPET_STOPPED;
+     unsigned int   DVPET_SPEEDCHANGE;
+     unsigned int   DVPET_STREAMCHANGE;
+     unsigned int   DVPET_FATALERROR;
 } DFBEventBufferStats;
 
 
 -5298,6
+5329,55 
           IDirectFBVideoProvider   *thiz,
           float                    *ret_level
      );
+
+     /** Event buffers **/
+     /*
+      * Create an event buffer for this video provider and
attach it.
+      */
+     DFBResult (*CreateEventBuffer) (
+          IDirectFBVideoProvider       *thiz,
+          IDirectFBEventBuffer         **ret_buffer
+     );
+
+     /*
+      * Attach an existing event buffer to this video
provider.
+      *
+      * NOTE: Attaching multiple times generates multiple
events.
+      */
+     DFBResult (*AttachEventBuffer) (
+          IDirectFBVideoProvider       *thiz,
+          IDirectFBEventBuffer          *buffer
+     );
+
+     /*
+      * Enable specific events to be sent from the video
provider.
+      *
+      * The argument is a mask of events that will be set
in the
+      * videoproviders's event mask. The default event mask
is DVPET_ALL.
+      */
+     DFBResult (*EnableEvents) (
+          IDirectFBVideoProvider         *thiz,
+          DFBVideoProviderEventType      mask
+     );
+
+     /*
+      * Disable specific events from being sent from the
video provider
+      *
+      * The argument is a mask of events that will be
cleared in
+      * the video providers's event mask. The default event
mask is
DWET_ALL.
+      */
+     DFBResult (*DisableEvents) (
+          IDirectFBVideoProvider         *thiz,
+          DFBVideoProviderEventType      mask
+     );
+
+     /*
+      * Detach an event buffer from this video provider.
+      */
+     DFBResult (*DetachEventBuffer) (
+          IDirectFBVideoProvider       *thiz,
+          IDirectFBEventBuffer          *buffer
+     );
 )
 
 /***********************
diff -urN
DirectFB-1.0.0.orig/src/input/idirectfbinputbuffer.c
DirectFB-1.0.0.new/src/input/idirectfbinputbuffer.c
---
DirectFB-1.0.0.orig/src/input/idirectfbinputbuffer.c	2007-03
-14
08:33:48.000000000 +0000
+++
DirectFB-1.0.0.new/src/input/idirectfbinputbuffer.c	2007-03-
29
15:36:43.000000000 +0100
 -340,6
+340,10 
                event->user = item->evt.user;
                break;
 
+         case DFEC_VIDEOPROVIDER:
+              event->videoprovider =
item->evt.videoprovider;
+              break;
+
           case DFEC_UNIVERSAL:
                direct_memcpy( event, &item->evt,
item->evt.universal.size
);
                break;
 -393,6
+397,10 
                event->user = item->evt.user;
                break;
 
+          case DFEC_VIDEOPROVIDER:
+              event->videoprovider =
item->evt.videoprovider;
+              break;
+
           case DFEC_UNIVERSAL:
                direct_memcpy( event, &item->evt,
item->evt.universal.size
);
                break;
 -430,6
+438,7 
           case DFEC_INPUT:
           case DFEC_WINDOW:
           case DFEC_USER:
+          case DFEC_VIDEOPROVIDER:
                size = sizeof(EventBufferItem);
                break;
 
 -461,6
+470,10 
                item->evt.user = event->user;
                break;
 
+          case DFEC_VIDEOPROVIDER:
+               item->evt.videoprovider =
event->videoprovider;
+               break;
+
           case DFEC_UNIVERSAL:
                direct_memcpy( &item->evt, event,
event->universal.size );
                break;
 -938,6
+951,35 
                stats->DFEC_USER += incdec;
                break;
 
+          case DFEC_VIDEOPROVIDER:
+               stats->DFEC_VIDEOPROVIDER +=incdec;
+
+               switch (event->videoprovider.type) {
+                    case DVPET_STARTED:
+                         stats->DVPET_STARTED +=
incdec;
+                         break;
+
+                    case DVPET_STOPPED:
+                         stats->DVPET_STOPPED +=
incdec;
+                         break;
+
+                    case DVPET_SPEEDCHANGE:
+                         stats->DVPET_SPEEDCHANGE +=
incdec;
+                         break;
+
+                    case DVPET_STREAMCHANGE:
+                         stats->DVPET_STREAMCHANGE +=
incdec;
+                         break;
+
+                    case DVPET_FATALERROR:
+                         stats->DVPET_FATALERROR +=
incdec;
+                         break;
+
+                    default:
+                         D_BUG( "unknown video
provider event type
0x%08xn", event->videoprovider.type );
+               }
+               break;
+
           case DFEC_UNIVERSAL:
                stats->DFEC_UNIVERSAL += incdec;
                break;
diff -urN
DirectFB-1.0.0.orig/src/media/idirectfbvideoprovider.c
DirectFB-1.0.0.new/src/media/idirectfbvideoprovider.c
---
DirectFB-1.0.0.orig/src/media/idirectfbvideoprovider.c	2007-
03-14
08:33:48.000000000 +0000
+++
DirectFB-1.0.0.new/src/media/idirectfbvideoprovider.c	2007-0
3-29
15:44:57.000000000 +0100
 -203,6
+203,42 
      return DFB_UNIMPLEMENTED;
 }
 
+
+static DFBResult
+IDirectFBVideoProvider_CreateEventBuffer(
IDirectFBVideoProvider  *thiz,
+                                         
IDirectFBEventBuffer    **buffer
)
+{
+    return DFB_UNIMPLEMENTED;
+}
+
+static DFBResult
+IDirectFBVideoProvider_AttachEventBuffer(
IDirectFBVideoProvider  *thiz,
+                                         
IDirectFBEventBuffer    *buffer )
+{
+    return DFB_UNIMPLEMENTED;
+}
+
+static DFBResult
+IDirectFBVideoProvider_EnableEvents(IDirectFBVideoProvider 
       *thiz,
+                                   
DFBVideoProviderEventType      mask
+{
+     return DFB_UNIMPLEMENTED;
+}
+
+static DFBResult
+IDirectFBVideoProvider_DisableEvents(IDirectFBVideoProvider
        *thiz,
+                                    
DFBVideoProviderEventType      mask
+{
+    return DFB_UNIMPLEMENTED;
+}
+
+static DFBResult
+IDirectFBVideoProvider_DetachEventBuffer(
IDirectFBVideoProvider  *thiz,
+                                         
IDirectFBEventBuffer    *buffer )
+{
+    return DFB_UNIMPLEMENTED;
+}
+
 static void
 IDirectFBVideoProvider_Construct( IDirectFBVideoProvider
*thiz )
 {
 -225,6
+261,11 
      thiz->GetSpeed              =
IDirectFBVideoProvider_GetSpeed;
      thiz->SetVolume             =
IDirectFBVideoProvider_SetVolume;
      thiz->GetVolume             =
IDirectFBVideoProvider_GetVolume;
+     thiz->CreateEventBuffer     =
IDirectFBVideoProvider_CreateEventBuffer;
+     thiz->AttachEventBuffer     =
IDirectFBVideoProvider_AttachEventBuffer;
+     thiz->EnableEvents          =
IDirectFBVideoProvider_EnableEvents;
+     thiz->DisableEvents         =
IDirectFBVideoProvider_DisableEvents;
+     thiz->DetachEventBuffer     =
IDirectFBVideoProvider_DetachEventBuffer;
 }
 
Cheers
Dan

http://www.nabble.com/file/7526/video_provider_events
.patch
video_provider_events.patch 
-- 
View this message in context: http://www.nab
ble.com/VideoProvider-Events-%28proposed-patch-for-review%29
-tf3486827.html#a9735075
Sent from the DirectFB Dev mailing list archive at
Nabble.com.


_______________________________________________
directfb-dev mailing list
directfb-devdirectfb.org
http://mail.directfb.org/cgi-bin/mailman/listinfo/
directfb-dev

[1]

about | contact  Other archives ( Real Estate discussion Medical topics )