gst/ffmpegcolorspace/gstffmpegcodecmap.c: Replace __VA_ARGS__ caps creation macros with varargs functions. looks nice...

Original commit message from CVS:
Patch by: Sebastien Moutte  <sebastien moutte net>
* gst/ffmpegcolorspace/gstffmpegcodecmap.c: (gst_ff_vid_caps_new),
(gst_ff_aud_caps_new), (gst_ffmpeg_pixfmt_to_caps),
(gst_ffmpeg_smpfmt_to_caps):
Replace __VA_ARGS__ caps creation macros with varargs functions.
Makes things compile on MSVC (#320765), looks nicer, and we can
tell the compiler to check for the NULL terminator.
This commit is contained in:
Sebastien Moutte 2006-03-15 11:30:29 +00:00 committed by Tim-Philipp Müller
parent 36fa065dc9
commit 942633c665
2 changed files with 84 additions and 32 deletions

View file

@ -1,3 +1,14 @@
2006-03-15 Tim-Philipp Müller <tim at centricular dot net>
Patch by: Sebastien Moutte <sebastien moutte net>
* gst/ffmpegcolorspace/gstffmpegcodecmap.c: (gst_ff_vid_caps_new),
(gst_ff_aud_caps_new), (gst_ffmpeg_pixfmt_to_caps),
(gst_ffmpeg_smpfmt_to_caps):
Replace __VA_ARGS__ caps creation macros with varargs functions.
Makes things compile on MSVC (#320765), looks nicer, and we can
tell the compiler to check for the NULL terminator.
2006-03-14 Tim-Philipp Müller <tim at centricular dot net> 2006-03-14 Tim-Philipp Müller <tim at centricular dot net>
Patch by: Fabrizio Gennari <fabrizio dot ge at tiscali dot it> Patch by: Fabrizio Gennari <fabrizio dot ge at tiscali dot it>

View file

@ -30,12 +30,19 @@
#include "avcodec.h" #include "avcodec.h"
#include "gstffmpegcodecmap.h" #include "gstffmpegcodecmap.h"
static GstCaps *
gst_ff_vid_caps_new (AVCodecContext * context,
const char *mimetype, const char *fieldname, ...)
G_GNUC_NULL_TERMINATED;
static GstCaps *gst_ff_aud_caps_new (AVCodecContext * context,
const char *mimetype, const char *fieldname, ...) G_GNUC_NULL_TERMINATED;
/* /*
* Read a palette from a caps. * Read a palette from a caps.
*/ */
static void static void
gst_ffmpeg_get_palette (const GstCaps * caps, AVCodecContext * context) gst_ffmpeg_get_palette (const GstCaps * caps, AVCodecContext * context)
{ {
GstStructure *str = gst_caps_get_structure (caps, 0); GstStructure *str = gst_caps_get_structure (caps, 0);
const GValue *palette_v; const GValue *palette_v;
@ -69,7 +76,7 @@ gst_ffmpeg_set_palette (GstCaps * caps, AVCodecContext * context)
} }
} }
/* this macro makes a caps width fixed or unfixed width/height /* this function creates caps with fixed or unfixed width/height
* properties depending on whether we've got a context. * properties depending on whether we've got a context.
* *
* See below for why we use this. * See below for why we use this.
@ -78,33 +85,67 @@ gst_ffmpeg_set_palette (GstCaps * caps, AVCodecContext * context)
* but I'm too lazy today. Maybe later. * but I'm too lazy today. Maybe later.
*/ */
#define GST_FF_VID_CAPS_NEW(mimetype, ...) \ static GstCaps *
(context != NULL) ? \ gst_ff_vid_caps_new (AVCodecContext * context, const char *mimetype,
gst_caps_new_simple (mimetype, \ const char *fieldname, ...)
"width", G_TYPE_INT, context->width, \ {
"height", G_TYPE_INT, context->height, \ GstStructure *structure = NULL;
"framerate", GST_TYPE_FRACTION, \ GstCaps *caps = NULL;
(gint) context->frame_rate, (gint) context->frame_rate_base, \ va_list var_args;
__VA_ARGS__, NULL) \
: \ if (context != NULL) {
gst_caps_new_simple (mimetype, \ caps = gst_caps_new_simple (mimetype,
"width", GST_TYPE_INT_RANGE, 1, G_MAXINT, \ "width", G_TYPE_INT, context->width,
"height", GST_TYPE_INT_RANGE, 1, G_MAXINT, \ "height", G_TYPE_INT, context->height,
"framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1,\ "framerate", GST_TYPE_FRACTION,
__VA_ARGS__, NULL) (gint) context->frame_rate, (gint) context->frame_rate_base, NULL);
} else {
caps = gst_caps_new_simple (mimetype,
"width", GST_TYPE_INT_RANGE, 1, G_MAXINT,
"height", GST_TYPE_INT_RANGE, 1, G_MAXINT,
"framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL);
}
structure = gst_caps_get_structure (caps, 0);
if (structure) {
va_start (var_args, fieldname);
gst_structure_set_valist (structure, fieldname, var_args);
va_end (var_args);
}
return caps;
}
/* same for audio - now with channels/sample rate /* same for audio - now with channels/sample rate
*/ */
#define GST_FF_AUD_CAPS_NEW(mimetype, ...) \ static GstCaps *
(context != NULL) ? \ gst_ff_aud_caps_new (AVCodecContext * context, const char *mimetype,
gst_caps_new_simple (mimetype, \ const char *fieldname, ...)
"rate", G_TYPE_INT, context->sample_rate, \ {
"channels", G_TYPE_INT, context->channels, \ GstCaps *caps = NULL;
__VA_ARGS__, NULL) \ GstStructure *structure = NULL;
: \ va_list var_args;
gst_caps_new_simple (mimetype, \
__VA_ARGS__, NULL) if (context != NULL) {
caps = gst_caps_new_simple (mimetype,
"rate", G_TYPE_INT, context->sample_rate,
"channels", G_TYPE_INT, context->channels, NULL);
} else {
caps = gst_caps_new_simple (mimetype, NULL);
}
structure = gst_caps_get_structure (caps, 0);
if (structure) {
va_start (var_args, fieldname);
gst_structure_set_valist (structure, fieldname, var_args);
va_end (var_args);
}
return caps;
}
/* Convert a FFMPEG Pixel Format and optional AVCodecContext /* Convert a FFMPEG Pixel Format and optional AVCodecContext
* to a GstCaps. If the context is ommitted, no fixed values * to a GstCaps. If the context is ommitted, no fixed values
@ -246,7 +287,7 @@ gst_ffmpeg_pixfmt_to_caps (enum PixelFormat pix_fmt, AVCodecContext * context)
break; break;
case PIX_FMT_GRAY8: case PIX_FMT_GRAY8:
bpp = depth = 8; bpp = depth = 8;
caps = GST_FF_VID_CAPS_NEW ("video/x-raw-gray", caps = gst_ff_vid_caps_new (context, "video/x-raw-gray",
"bpp", G_TYPE_INT, bpp, "depth", G_TYPE_INT, depth, NULL); "bpp", G_TYPE_INT, bpp, "depth", G_TYPE_INT, depth, NULL);
break; break;
default: default:
@ -257,7 +298,7 @@ gst_ffmpeg_pixfmt_to_caps (enum PixelFormat pix_fmt, AVCodecContext * context)
if (caps == NULL) { if (caps == NULL) {
if (bpp != 0) { if (bpp != 0) {
if (a_mask != 0) { if (a_mask != 0) {
caps = GST_FF_VID_CAPS_NEW ("video/x-raw-rgb", caps = gst_ff_vid_caps_new (context, "video/x-raw-rgb",
"bpp", G_TYPE_INT, bpp, "bpp", G_TYPE_INT, bpp,
"depth", G_TYPE_INT, depth, "depth", G_TYPE_INT, depth,
"red_mask", G_TYPE_INT, r_mask, "red_mask", G_TYPE_INT, r_mask,
@ -266,7 +307,7 @@ gst_ffmpeg_pixfmt_to_caps (enum PixelFormat pix_fmt, AVCodecContext * context)
"alpha_mask", G_TYPE_INT, a_mask, "alpha_mask", G_TYPE_INT, a_mask,
"endianness", G_TYPE_INT, endianness, NULL); "endianness", G_TYPE_INT, endianness, NULL);
} else if (r_mask != 0) { } else if (r_mask != 0) {
caps = GST_FF_VID_CAPS_NEW ("video/x-raw-rgb", caps = gst_ff_vid_caps_new (context, "video/x-raw-rgb",
"bpp", G_TYPE_INT, bpp, "bpp", G_TYPE_INT, bpp,
"depth", G_TYPE_INT, depth, "depth", G_TYPE_INT, depth,
"red_mask", G_TYPE_INT, r_mask, "red_mask", G_TYPE_INT, r_mask,
@ -274,7 +315,7 @@ gst_ffmpeg_pixfmt_to_caps (enum PixelFormat pix_fmt, AVCodecContext * context)
"blue_mask", G_TYPE_INT, b_mask, "blue_mask", G_TYPE_INT, b_mask,
"endianness", G_TYPE_INT, endianness, NULL); "endianness", G_TYPE_INT, endianness, NULL);
} else { } else {
caps = GST_FF_VID_CAPS_NEW ("video/x-raw-rgb", caps = gst_ff_vid_caps_new (context, "video/x-raw-rgb",
"bpp", G_TYPE_INT, bpp, "bpp", G_TYPE_INT, bpp,
"depth", G_TYPE_INT, depth, "depth", G_TYPE_INT, depth,
"endianness", G_TYPE_INT, endianness, NULL); "endianness", G_TYPE_INT, endianness, NULL);
@ -283,7 +324,7 @@ gst_ffmpeg_pixfmt_to_caps (enum PixelFormat pix_fmt, AVCodecContext * context)
} }
} }
} else if (fmt) { } else if (fmt) {
caps = GST_FF_VID_CAPS_NEW ("video/x-raw-yuv", caps = gst_ff_vid_caps_new (context, "video/x-raw-yuv",
"format", GST_TYPE_FOURCC, fmt, NULL); "format", GST_TYPE_FOURCC, fmt, NULL);
} }
} }
@ -328,7 +369,7 @@ gst_ffmpeg_smpfmt_to_caps (enum SampleFormat sample_fmt,
} }
if (bpp) { if (bpp) {
caps = GST_FF_AUD_CAPS_NEW ("audio/x-raw-int", caps = gst_ff_aud_caps_new (context, "audio/x-raw-int",
"signed", G_TYPE_BOOLEAN, signedness, "signed", G_TYPE_BOOLEAN, signedness,
"endianness", G_TYPE_INT, G_BYTE_ORDER, "endianness", G_TYPE_INT, G_BYTE_ORDER,
"width", G_TYPE_INT, bpp, "depth", G_TYPE_INT, bpp, NULL); "width", G_TYPE_INT, bpp, "depth", G_TYPE_INT, bpp, NULL);