diff --git a/ChangeLog b/ChangeLog index 2c813078b1a..3ed667ddd39 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,45 @@ +2004-01-12 Benjamin Otte + + * gst-libs/gst/video/video.h: + Fix caps template names to be understandable. + Prefix everything with GST_VIDEO. + * ext/aalib/gstaasink.c: + * ext/divx/gstdivxdec.c: + * ext/divx/gstdivxenc.c: + * ext/gdk_pixbuf/gstgdkpixbuf.c: + * ext/hermes/gstcolorspace.c: (gst_colorspace_base_init): + * ext/jpeg/gstjpegdec.c: (raw_caps_factory): + * ext/jpeg/gstjpegenc.c: (raw_caps_factory): + * ext/libcaca/gstcacasink.c: + * ext/libpng/gstpngenc.c: (raw_caps_factory): + * ext/snapshot/gstsnapshot.c: + * ext/swfdec/gstswfdec.c: + * ext/xvid/gstxviddec.c: + * ext/xvid/gstxvidenc.c: + * gst/chart/gstchart.c: + * gst/deinterlace/gstdeinterlace.c: + * gst/effectv/gsteffectv.c: + * gst/flx/gstflxdec.c: (gst_flxdec_loop): + * gst/goom/gstgoom.c: + * gst/median/gstmedian.c: + * gst/monoscope/gstmonoscope.c: (gst_monoscope_init), + (gst_monoscope_srcconnect), (gst_monoscope_chain): + * gst/overlay/gstoverlay.c: + * gst/smooth/gstsmooth.c: + * gst/smpte/gstsmpte.c: + * gst/synaesthesia/gstsynaesthesia.c: + * gst/videocrop/gstvideocrop.c: + * gst/videodrop/gstvideodrop.c: + * gst/y4m/gsty4mencode.c: + * sys/qcam/gstqcamsrc.c: + * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_palette_to_caps): + Make them work with new video.h file. + * sys/ximage/ximagesink.c: (gst_ximagesink_chain), + (gst_ximagesink_buffer_free), (gst_ximagesink_buffer_alloc): + * sys/xvimage/xvimagesink.c: (gst_xvimagesink_chain), + (gst_xvimagesink_buffer_free), (gst_xvimagesink_buffer_alloc): + Make it work with new buffer allocation system. + 2004-01-11 Julien MOUTTE * ext/ffmpeg/gstffmpegcolorspace.c: (gst_ffmpegcsp_chain): Fixing the diff --git a/gst-libs/gst/video/video.h b/gst-libs/gst/video/video.h index 669a6a5481c..cb8727a9489 100644 --- a/gst-libs/gst/video/video.h +++ b/gst-libs/gst/video/video.h @@ -23,156 +23,136 @@ #include -#define R_MASK_32 "0xff000000" -#define G_MASK_32 "0x00ff0000" -#define B_MASK_32 "0x0000ff00" +#define GST_VIDEO_BYTE1_MASK_32 "0xFF000000" +#define GST_VIDEO_BYTE2_MASK_32 "0x00FF0000" +#define GST_VIDEO_BYTE3_MASK_32 "0x0000FF00" +#define GST_VIDEO_BYTE4_MASK_32 "0x000000FF" -#define R_MASK_32_REVERSE "0x000000ff" -#define G_MASK_32_REVERSE "0x0000ff00" -#define B_MASK_32_REVERSE "0x00ff0000" +#define GST_VIDEO_BYTE1_MASK_24 "0x00FF0000" +#define GST_VIDEO_BYTE2_MASK_24 "0x0000FF00" +#define GST_VIDEO_BYTE3_MASK_24 "0x000000FF" -#define R_MASK_24 "0xff0000" -#define G_MASK_24 "0x00ff00" -#define B_MASK_24 "0x0000ff" +#define GST_VIDEO_BYTE1_MASK_32_INT 0xFF000000 +#define GST_VIDEO_BYTE2_MASK_32_INT 0x00FF0000 +#define GST_VIDEO_BYTE3_MASK_32_INT 0x0000FF00 +#define GST_VIDEO_BYTE4_MASK_32_INT 0x000000FF -#define R_MASK_24_REVERSE "0x0000ff" -#define G_MASK_24_REVERSE "0x00ff00" -#define B_MASK_24_REVERSE "0xff0000" +#define GST_VIDEO_BYTE1_MASK_24_INT 0x00FF0000 +#define GST_VIDEO_BYTE2_MASK_24_INT 0x0000FF00 +#define GST_VIDEO_BYTE3_MASK_24_INT 0x000000FF -#define R_MASK_16 "0xf800" -#define G_MASK_16 "0x07e0" -#define B_MASK_16 "0x001f" +#define GST_VIDEO_RED_MASK_16 "0xf800" +#define GST_VIDEO_GREEN_MASK_16 "0x07e0" +#define GST_VIDEO_BLUE_MASK_16 "0x001f" -#define R_MASK_15 "0x7c00" -#define G_MASK_15 "0x03e0" -#define B_MASK_15 "0x001f" +#define GST_VIDEO_RED_MASK_15 "0x7c00" +#define GST_VIDEO_GREEN_MASK_15 "0x03e0" +#define GST_VIDEO_BLUE_MASK_15 "0x001f" -#define R_MASK_32_INT 0xff000000 -#define G_MASK_32_INT 0x00ff0000 -#define B_MASK_32_INT 0x0000ff00 +#define GST_VIDEO_RED_MASK_16_INT 0xf800 +#define GST_VIDEO_GREEN_MASK_16_INT 0x07e0 +#define GST_VIDEO_BLUE_MASK_16_INT 0x001f -#define R_MASK_32_REVERSE_INT 0x000000ff -#define G_MASK_32_REVERSE_INT 0x0000ff00 -#define B_MASK_32_REVERSE_INT 0x00ff0000 +#define GST_VIDEO_RED_MASK_15_INT 0x7c00 +#define GST_VIDEO_GREEN_MASK_15_INT 0x03e0 +#define GST_VIDEO_BLUE_MASK_15_INT 0x001f -#define R_MASK_24_INT 0xff0000 -#define G_MASK_24_INT 0x00ff00 -#define B_MASK_24_INT 0x0000ff +#define GST_VIDEO_SIZE_RANGE "(int) [ 16, 4096 ]" +#define GST_VIDEO_FPS_RANGE "(double) [ 0, max ]" -#define R_MASK_24_REVERSE_INT 0x0000ff -#define G_MASK_24_REVERSE_INT 0x00ff00 -#define B_MASK_24_REVERSE_INT 0xff0000 +/* consider the next 2 protected */ +#define __GST_VIDEO_CAPS_MAKE_32(R, G, B) \ + "video/x-raw-rgb, " \ + "bpp = (int) 32, " \ + "depth = (int) 24, " \ + "endianness = (int) BIG_ENDIAN, " \ + "red_mask = (int) " GST_VIDEO_BYTE ## R ## _MASK_32 ", " \ + "green_mask = (int) " GST_VIDEO_BYTE ## G ## _MASK_32 ", " \ + "blue_mask = (int) " GST_VIDEO_BYTE ## B ## _MASK_32 ", " \ + "width = " GST_VIDEO_SIZE_RANGE ", " \ + "height = " GST_VIDEO_SIZE_RANGE ", " \ + "framerate = " GST_VIDEO_FPS_RANGE -#define R_MASK_16_INT 0xf800 -#define G_MASK_16_INT 0x07e0 -#define B_MASK_16_INT 0x001f +#define __GST_VIDEO_CAPS_MAKE_24(R, G, B) \ + "video/x-raw-rgb, " \ + "bpp = (int) 24, " \ + "depth = (int) 24, " \ + "endianness = (int) BIG_ENDIAN, " \ + "red_mask = (int) " GST_VIDEO_BYTE ## R ## _MASK_24 ", " \ + "green_mask = (int) " GST_VIDEO_BYTE ## G ## _MASK_24 ", " \ + "blue_mask = (int) " GST_VIDEO_BYTE ## B ## _MASK_24 ", " \ + "width = " GST_VIDEO_SIZE_RANGE ", " \ + "height = " GST_VIDEO_SIZE_RANGE ", " \ + "framerate = " GST_VIDEO_FPS_RANGE -#define R_MASK_15_INT 0x7c00 -#define G_MASK_15_INT 0x03e0 -#define B_MASK_15_INT 0x001f -#define SIZE_RANGE "(int) [ 16, 4096 ]" -#define FPS_RANGE "(double) [ 0, max ]" +/* 24 bit */ -/* properties for pad templates */ -#define GST_VIDEO_RGB_PAD_TEMPLATE_CAPS_24_32 \ - GST_VIDEO_RGB_PAD_TEMPLATE_CAPS_32 "; " \ - GST_VIDEO_RGB_PAD_TEMPLATE_CAPS_24 +#define GST_VIDEO_CAPS_RGB \ + __GST_VIDEO_CAPS_MAKE_24 (1, 2, 3) -#define GST_VIDEO_RGB_PAD_TEMPLATE_CAPS_24_32_REVERSE \ - GST_VIDEO_RGB_PAD_TEMPLATE_CAPS_32_REVERSE "; " \ - GST_VIDEO_RGB_PAD_TEMPLATE_CAPS_24_REVERSE +#define GST_VIDEO_CAPS_BGR \ + __GST_VIDEO_CAPS_MAKE_24 (3, 2, 1) -#define GST_VIDEO_RGB_PAD_TEMPLATE_CAPS_32 \ - "video/x-raw-rgb, " \ - "bpp = (int) 32, " \ - "depth = (int) 24, " \ - "endianness = (int) BIG_ENDIAN, " \ - "red_mask = (int) " R_MASK_32 ", " \ - "green_mask = (int) " G_MASK_32 ", " \ - "blue_mask = (int) " B_MASK_32 ", " \ - "width = " SIZE_RANGE ", " \ - "height = " SIZE_RANGE ", " \ - "framerate = " FPS_RANGE +/* 32 bit */ -#define GST_VIDEO_RGB_PAD_TEMPLATE_CAPS_24 \ - "video/x-raw-rgb, " \ - "bpp = (int) 24, " \ - "depth = (int) 24, " \ - "endianness = (int) BIG_ENDIAN, " \ - "red_mask = (int) " R_MASK_24 ", " \ - "green_mask = (int) " G_MASK_24 ", " \ - "blue_mask = (int) " B_MASK_24 ", " \ - "width = " SIZE_RANGE ", " \ - "height = " SIZE_RANGE ", " \ - "framerate = " FPS_RANGE +#define GST_VIDEO_CAPS_RGBx \ + __GST_VIDEO_CAPS_MAKE_32 (1, 2, 3) + +#define GST_VIDEO_CAPS_xRGB \ + __GST_VIDEO_CAPS_MAKE_32 (2, 3, 4) + +#define GST_VIDEO_CAPS_BGRx \ + __GST_VIDEO_CAPS_MAKE_32 (3, 2, 1) + +#define GST_VIDEO_CAPS_xBGR \ + __GST_VIDEO_CAPS_MAKE_32 (4, 3, 2) -#define GST_VIDEO_RGB_PAD_TEMPLATE_CAPS_32_REVERSE \ - "video/x-raw-rgb, " \ - "bpp = (int) 32, " \ - "depth = (int) 24, " \ - "endianness = (int) BIG_ENDIAN, " \ - "red_mask = (int) " R_MASK_32_REVERSE ", " \ - "green_mask = (int) " G_MASK_32_REVERSE ", " \ - "blue_mask = (int) " B_MASK_32_REVERSE ", " \ - "width = " SIZE_RANGE ", " \ - "height = " SIZE_RANGE ", " \ - "framerate = " FPS_RANGE +/* note: the macro name uses the order on BE systems */ +#if G_BYTE_ORDER == G_BIG_ENDIAN + #define GST_VIDEO_CAPS_xRGB_HOST_ENDIAN \ + GST_VIDEO_CAPS_xRGB + #define GST_VIDEO_CAPS_BGRx_HOST_ENDIAN \ + GST_VIDEO_CAPS_BGRx +#else + #define GST_VIDEO_CAPS_xRGB_HOST_ENDIAN \ + GST_VIDEO_CAPS_BGRx + #define GST_VIDEO_CAPS_BGRx_HOST_ENDIAN \ + GST_VIDEO_CAPS_xRGB +#endif + +/* 15/16 bit */ + +#define GST_VIDEO_CAPS_RGB_16 \ + "video/x-raw-rgb, " \ + "bpp = (int) 16, " \ + "depth = (int) 16, " \ + "endianness = (int) BYTE_ORDER, " \ + "red_mask = (int) " GST_VIDEO_RED_MASK_16 ", " \ + "green_mask = (int) " GST_VIDEO_GREEN_MASK_16 ", " \ + "blue_mask = (int) " GST_VIDEO_BLUE_MASK_16 ", " \ + "width = " GST_VIDEO_SIZE_RANGE ", " \ + "height = " GST_VIDEO_SIZE_RANGE ", " \ + "framerate = " GST_VIDEO_FPS_RANGE -#define GST_VIDEO_RGB_PAD_TEMPLATE_CAPS_24_REVERSE \ - "video/x-raw-rgb, " \ - "bpp = (int) 24, " \ - "depth = (int) 24, " \ - "endianness = (int) BIG_ENDIAN, " \ - "red_mask = (int) " R_MASK_24_REVERSE ", " \ - "green_mask = (int) " G_MASK_24_REVERSE ", " \ - "blue_mask = (int) " B_MASK_24_REVERSE ", " \ - "width = " SIZE_RANGE ", " \ - "height = " SIZE_RANGE ", " \ - "framerate = " FPS_RANGE +#define GST_VIDEO_CAPS_RGB_15 \ + "video/x-raw-rgb, " \ + "bpp = (int) 16, " \ + "depth = (int) 15, " \ + "endianness = (int) BYTE_ORDER, " \ + "red_mask = (int) " GST_VIDEO_RED_MASK_15 ", " \ + "green_mask = (int) " GST_VIDEO_GREEN_MASK_15 ", " \ + "blue_mask = (int) " GST_VIDEO_BLUE_MASK_15 ", " \ + "width = " GST_VIDEO_SIZE_RANGE ", " \ + "height = " GST_VIDEO_SIZE_RANGE ", " \ + "framerate = " GST_VIDEO_FPS_RANGE -#define GST_VIDEO_RGB_PAD_TEMPLATE_CAPS_15_16 \ - "video/x-raw-rgb, " \ - "bpp = (int) 16, " \ - "depth = (int) { 15, 16 }, " \ - "endianness = (int) BYTE_ORDER, " \ - "red_mask = (int) { " R_MASK_15 ", " R_MASK_16 " }, " \ - "green_mask = (int) { " G_MASK_15 ", " G_MASK_16 " }, " \ - "blue_mask = (int) { " B_MASK_15 ", " B_MASK_16 " }, " \ - "width = " SIZE_RANGE ", " \ - "height = " SIZE_RANGE ", " \ - "framerate = " FPS_RANGE - -#define GST_VIDEO_RGB_PAD_TEMPLATE_CAPS_16 \ - "video/x-raw-rgb, " \ - "bpp = (int) 16, " \ - "depth = (int) 16, " \ - "endianness = (int) BYTE_ORDER, " \ - "red_mask = (int) " R_MASK_16 ", " \ - "green_mask = (int) " G_MASK_16 ", " \ - "blue_mask = (int) " B_MASK_16 ", " \ - "width = " SIZE_RANGE ", " \ - "height = " SIZE_RANGE ", " \ - "framerate = " FPS_RANGE - -#define GST_VIDEO_RGB_PAD_TEMPLATE_CAPS_15 \ - "video/x-raw-rgb, " \ - "bpp = (int) 16, " \ - "depth = (int) 15, " \ - "endianness = (int) BYTE_ORDER, " \ - "red_mask = (int) " R_MASK_15 ", " \ - "green_mask = (int) " G_MASK_15 ", " \ - "blue_mask = (int) " B_MASK_15 ", " \ - "width = " SIZE_RANGE ", " \ - "height = " SIZE_RANGE ", " \ - "framerate = " FPS_RANGE - -#define GST_VIDEO_YUV_PAD_TEMPLATE_CAPS(fourcc) \ - "video/x-raw-yuv, " \ - "format = (fourcc) " fourcc ", " \ - "width = " SIZE_RANGE ", " \ - "height = " SIZE_RANGE ", " \ - "framerate = " FPS_RANGE +#define GST_VIDEO_CAPS_YUV(fourcc) \ + "video/x-raw-yuv, " \ + "format = (fourcc) " fourcc ", " \ + "width = " GST_VIDEO_SIZE_RANGE ", " \ + "height = " GST_VIDEO_SIZE_RANGE ", " \ + "framerate = " GST_VIDEO_FPS_RANGE /* functions */ gdouble gst_video_frame_rate (GstPad *pad); diff --git a/sys/v4l/gstv4lsrc.c b/sys/v4l/gstv4lsrc.c index 024bf44607a..78d2aba4270 100644 --- a/sys/v4l/gstv4lsrc.c +++ b/sys/v4l/gstv4lsrc.c @@ -24,7 +24,6 @@ #include #include #include "v4lsrc_calls.h" -#include /* elementfactory information */ static GstElementDetails gst_v4lsrc_details = GST_ELEMENT_DETAILS ( @@ -391,18 +390,18 @@ gst_v4lsrc_palette_to_caps (int palette) "bpp = (int) 24, " "depth = (int) 24, " "endianness = (int) BIG_ENDIAN, " - "red_mask = " R_MASK_24 ", " - "green_mask = " G_MASK_24 ", " - "blue_mask = " B_MASK_24); + "red_mask = 0xFF0000, " + "green_mask = 0x00FF00, " + "blue_mask = 0x0000FF"); break; case VIDEO_PALETTE_RGB32: caps = gst_caps_from_string ("video/x-raw-rgb, " "bpp = (int) 24, " "depth = (int) 32, " "endianness = (int) BIG_ENDIAN, " - "red_mask = " R_MASK_32 ", " - "green_mask = " G_MASK_32 ", " - "blue_mask = " B_MASK_32); + "red_mask = 0xFF000000, " + "green_mask = 0x00FF0000, " + "blue_mask = 0x0000FF00"); break; default: g_assert_not_reached(); diff --git a/sys/ximage/ximagesink.c b/sys/ximage/ximagesink.c index ac6f701c081..61a6a39cc1b 100644 --- a/sys/ximage/ximagesink.c +++ b/sys/ximage/ximagesink.c @@ -49,6 +49,8 @@ GST_STATIC_PAD_TEMPLATE ( "height = (int) [ 0, MAX ]") ); +static void gst_ximagesink_buffer_free (GstBuffer *buffer); + static GstVideoSinkClass *parent_class = NULL; /* ============================================================= */ @@ -739,7 +741,8 @@ gst_ximagesink_chain (GstPad *pad, GstData *data) /* If this buffer has been allocated using our buffer management we simply put the ximage which is in the PRIVATE pointer */ - if (GST_BUFFER_PRIVATE (buf)) + /* FIXME: need to check for correct xvimagesink here? */ + if (GST_BUFFER_FREE_DATA_FUNC (buf) == gst_ximagesink_buffer_free) { gst_ximagesink_ximage_put (ximagesink, GST_BUFFER_PRIVATE (buf)); } @@ -773,19 +776,16 @@ gst_ximagesink_chain (GstPad *pad, GstData *data) /* Buffer management */ static void -gst_ximagesink_buffer_free (GstData *data) +gst_ximagesink_buffer_free (GstBuffer *buffer) { GstXImageSink *ximagesink; GstXImage *ximage; - GstBuffer *buffer; - ximage = GST_BUFFER_PRIVATE (data); + ximage = GST_BUFFER_PRIVATE (buffer); g_assert (GST_IS_XIMAGESINK (ximage->ximagesink)); ximagesink = ximage->ximagesink; - buffer = GST_BUFFER (data); - /* If our geometry changed we can't reuse that image. */ if ( (ximage->width != GST_VIDEOSINK_WIDTH (ximagesink)) || (ximage->height != GST_VIDEOSINK_HEIGHT (ximagesink)) ) @@ -796,10 +796,6 @@ gst_ximagesink_buffer_free (GstData *data) ximagesink->image_pool = g_slist_prepend (ximagesink->image_pool, ximage); g_mutex_unlock (ximagesink->pool_lock); } - - GST_BUFFER_DATA (buffer) = NULL; - - gst_buffer_default_free (buffer); } static GstBuffer * @@ -856,7 +852,7 @@ gst_ximagesink_buffer_alloc (GstPad *pad, guint64 offset, guint size) GST_BUFFER_PRIVATE (buffer) = ximage; GST_BUFFER_DATA (buffer) = ximage->ximage->data; - GST_DATA_FREE_FUNC (buffer) = gst_ximagesink_buffer_free; + GST_BUFFER_FREE_DATA_FUNC (buffer) = gst_ximagesink_buffer_free; GST_BUFFER_SIZE (buffer) = ximage->size; return buffer; } diff --git a/sys/xvimage/xvimagesink.c b/sys/xvimage/xvimagesink.c index 894aa458e95..99e9f77b23e 100644 --- a/sys/xvimage/xvimagesink.c +++ b/sys/xvimage/xvimagesink.c @@ -55,6 +55,8 @@ GST_STATIC_PAD_TEMPLATE ( ) ); +static void gst_xvimagesink_buffer_free (GstBuffer *buffer); + static GstVideoSinkClass *parent_class = NULL; /* ============================================================= */ @@ -899,7 +901,8 @@ gst_xvimagesink_chain (GstPad *pad, GstData *data) /* If this buffer has been allocated using our buffer management we simply put the ximage which is in the PRIVATE pointer */ - if (GST_BUFFER_PRIVATE (buf)) + /* FIXME: need to check for correct xvimagesink here? */ + if (GST_BUFFER_FREE_DATA_FUNC (buf) == gst_xvimagesink_buffer_free) { gst_xvimagesink_xvimage_put (xvimagesink, GST_BUFFER_PRIVATE (buf)); } @@ -933,19 +936,16 @@ gst_xvimagesink_chain (GstPad *pad, GstData *data) /* Buffer management */ static void -gst_xvimagesink_buffer_free (GstData *data) +gst_xvimagesink_buffer_free (GstBuffer *buffer) { GstXvImageSink *xvimagesink; GstXvImage *xvimage; - GstBuffer *buffer; - xvimage = GST_BUFFER_PRIVATE (data); + xvimage = GST_BUFFER_PRIVATE (buffer); g_assert (GST_IS_XVIMAGESINK (xvimage->xvimagesink)); xvimagesink = xvimage->xvimagesink; - buffer = GST_BUFFER (data); - /* If our geometry changed we can't reuse that image. */ if ( (xvimage->width != GST_VIDEOSINK_WIDTH (xvimagesink)) || (xvimage->height != GST_VIDEOSINK_HEIGHT (xvimagesink)) ) @@ -957,10 +957,6 @@ gst_xvimagesink_buffer_free (GstData *data) xvimage); g_mutex_unlock (xvimagesink->pool_lock); } - - GST_BUFFER_DATA (buffer) = NULL; - - gst_buffer_default_free (buffer); } static GstBuffer * @@ -1017,7 +1013,7 @@ gst_xvimagesink_buffer_alloc (GstPad *pad, guint64 offset, guint size) GST_BUFFER_PRIVATE (buffer) = xvimage; GST_BUFFER_DATA (buffer) = xvimage->xvimage->data; - GST_DATA_FREE_FUNC (buffer) = gst_xvimagesink_buffer_free; + GST_BUFFER_FREE_DATA_FUNC (buffer) = gst_xvimagesink_buffer_free; GST_BUFFER_SIZE (buffer) = xvimage->size; return buffer; }