#define DEFAULT_PROP_GAMMA 1
static GstStaticPadTemplate gst_gamma_src_template =
- GST_STATIC_PAD_TEMPLATE ("src",
+GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("AYUV") ";"
- GST_VIDEO_CAPS_ARGB ";" GST_VIDEO_CAPS_BGRA ";"
- GST_VIDEO_CAPS_ABGR ";" GST_VIDEO_CAPS_RGBA ";"
- GST_VIDEO_CAPS_YUV ("Y444") ";"
- GST_VIDEO_CAPS_xRGB ";" GST_VIDEO_CAPS_RGBx ";"
- GST_VIDEO_CAPS_xBGR ";" GST_VIDEO_CAPS_BGRx ";"
- GST_VIDEO_CAPS_RGB ";" GST_VIDEO_CAPS_BGR ";"
- GST_VIDEO_CAPS_YUV ("Y42B") ";"
- GST_VIDEO_CAPS_YUV ("NV12") ";"
- GST_VIDEO_CAPS_YUV ("NV21") ";"
- GST_VIDEO_CAPS_YUV ("YUY2") ";"
- GST_VIDEO_CAPS_YUV ("UYVY") ";"
- GST_VIDEO_CAPS_YUV ("YVYU") ";"
- GST_VIDEO_CAPS_YUV ("I420") ";"
- GST_VIDEO_CAPS_YUV ("YV12") ";"
- GST_VIDEO_CAPS_YUV ("IYUV") ";" GST_VIDEO_CAPS_YUV ("Y41B")
- )
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("{ AYUV, "
+ "ARGB, BGRA, ABGR, RGBA, ABGR, RGBA, Y444, "
+ "xRGB, RGBx, xBGR, BGRx, RGB, BGR, Y42B, NV12, "
+ "NV21, YUY2, UYVY, YVYU, I420, YV12, IYUV, Y41B }"))
);
static GstStaticPadTemplate gst_gamma_sink_template =
- GST_STATIC_PAD_TEMPLATE ("sink",
+GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("AYUV") ";"
- GST_VIDEO_CAPS_ARGB ";" GST_VIDEO_CAPS_BGRA ";"
- GST_VIDEO_CAPS_ABGR ";" GST_VIDEO_CAPS_RGBA ";"
- GST_VIDEO_CAPS_YUV ("Y444") ";"
- GST_VIDEO_CAPS_xRGB ";" GST_VIDEO_CAPS_RGBx ";"
- GST_VIDEO_CAPS_xBGR ";" GST_VIDEO_CAPS_BGRx ";"
- GST_VIDEO_CAPS_RGB ";" GST_VIDEO_CAPS_BGR ";"
- GST_VIDEO_CAPS_YUV ("Y42B") ";"
- GST_VIDEO_CAPS_YUV ("NV12") ";"
- GST_VIDEO_CAPS_YUV ("NV21") ";"
- GST_VIDEO_CAPS_YUV ("YUY2") ";"
- GST_VIDEO_CAPS_YUV ("UYVY") ";"
- GST_VIDEO_CAPS_YUV ("YVYU") ";"
- GST_VIDEO_CAPS_YUV ("I420") ";"
- GST_VIDEO_CAPS_YUV ("YV12") ";"
- GST_VIDEO_CAPS_YUV ("IYUV") ";" GST_VIDEO_CAPS_YUV ("Y41B")
- )
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("{ AYUV, "
+ "ARGB, BGRA, ABGR, RGBA, ABGR, RGBA, Y444, "
+ "xRGB, RGBx, xBGR, BGRx, RGB, BGR, Y42B, NV12, "
+ "NV21, YUY2, UYVY, YVYU, I420, YV12, IYUV, Y41B }"))
);
static void gst_gamma_set_property (GObject * object, guint prop_id,
}
static void
-gst_gamma_planar_yuv_ip (GstGamma * gamma, guint8 * data)
+gst_gamma_planar_yuv_ip (GstGamma * gamma, GstVideoFrame * frame)
{
gint i, j, height;
- gint width, row_stride, row_wrap;
+ gint width, stride, row_wrap;
const guint8 *table = gamma->gamma_table;
+ guint8 *data;
- data =
- data + gst_video_format_get_component_offset (gamma->format, 0,
- gamma->width, gamma->height);
-
- width = gst_video_format_get_component_width (gamma->format, 0, gamma->width);
- height = gst_video_format_get_component_height (gamma->format, 0,
- gamma->height);
- row_stride = gst_video_format_get_row_stride (gamma->format, 0, gamma->width);
- row_wrap = row_stride - width;
+ data = GST_VIDEO_FRAME_COMP_DATA (frame, 0);
+ stride = GST_VIDEO_FRAME_COMP_STRIDE (frame, 0);
+ width = GST_VIDEO_FRAME_COMP_WIDTH (frame, 0);
+ height = GST_VIDEO_FRAME_COMP_HEIGHT (frame, 0);
+ row_wrap = stride - width;
for (i = 0; i < height; i++) {
for (j = 0; j < width; j++) {
}
static void
-gst_gamma_packed_yuv_ip (GstGamma * gamma, guint8 * data)
+gst_gamma_packed_yuv_ip (GstGamma * gamma, GstVideoFrame * frame)
{
gint i, j, height;
- gint width, row_stride, row_wrap;
+ gint width, stride, row_wrap;
gint pixel_stride;
const guint8 *table = gamma->gamma_table;
+ guint8 *data;
- data = data + gst_video_format_get_component_offset (gamma->format, 0,
- gamma->width, gamma->height);
-
- width = gst_video_format_get_component_width (gamma->format, 0, gamma->width);
- height = gst_video_format_get_component_height (gamma->format, 0,
- gamma->height);
- row_stride = gst_video_format_get_row_stride (gamma->format, 0, gamma->width);
- pixel_stride = gst_video_format_get_pixel_stride (gamma->format, 0);
- row_wrap = row_stride - pixel_stride * width;
+ data = GST_VIDEO_FRAME_COMP_DATA (frame, 0);
+ stride = GST_VIDEO_FRAME_COMP_STRIDE (frame, 0);
+ width = GST_VIDEO_FRAME_COMP_WIDTH (frame, 0);
+ height = GST_VIDEO_FRAME_COMP_HEIGHT (frame, 0);
+ pixel_stride = GST_VIDEO_FRAME_COMP_PSTRIDE (frame, 0);
+ row_wrap = stride - pixel_stride * width;
for (i = 0; i < height; i++) {
for (j = 0; j < width; j++) {
#define APPLY_MATRIX(m,o,v1,v2,v3) ((m[o*4] * v1 + m[o*4+1] * v2 + m[o*4+2] * v3 + m[o*4+3]) >> 8)
static void
-gst_gamma_packed_rgb_ip (GstGamma * gamma, guint8 * data)
+gst_gamma_packed_rgb_ip (GstGamma * gamma, GstVideoFrame * frame)
{
gint i, j, height;
- gint width, row_stride, row_wrap;
+ gint width, stride, row_wrap;
gint pixel_stride;
const guint8 *table = gamma->gamma_table;
gint offsets[3];
gint r, g, b;
gint y, u, v;
+ guint8 *data;
- offsets[0] = gst_video_format_get_component_offset (gamma->format, 0,
- gamma->width, gamma->height);
- offsets[1] = gst_video_format_get_component_offset (gamma->format, 1,
- gamma->width, gamma->height);
- offsets[2] = gst_video_format_get_component_offset (gamma->format, 2,
- gamma->width, gamma->height);
+ data = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+ stride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+ width = GST_VIDEO_FRAME_COMP_WIDTH (frame, 0);
+ height = GST_VIDEO_FRAME_COMP_HEIGHT (frame, 0);
- width = gst_video_format_get_component_width (gamma->format, 0, gamma->width);
- height = gst_video_format_get_component_height (gamma->format, 0,
- gamma->height);
- row_stride = gst_video_format_get_row_stride (gamma->format, 0, gamma->width);
- pixel_stride = gst_video_format_get_pixel_stride (gamma->format, 0);
- row_wrap = row_stride - pixel_stride * width;
+ offsets[0] = GST_VIDEO_FRAME_COMP_OFFSET (frame, 0);
+ offsets[1] = GST_VIDEO_FRAME_COMP_OFFSET (frame, 1);
+ offsets[2] = GST_VIDEO_FRAME_COMP_OFFSET (frame, 2);
+
+ pixel_stride = GST_VIDEO_FRAME_COMP_PSTRIDE (frame, 0);
+ row_wrap = stride - pixel_stride * width;
for (i = 0; i < height; i++) {
for (j = 0; j < width; j++) {
GstCaps * outcaps)
{
GstGamma *gamma = GST_GAMMA (base);
+ GstVideoInfo info;
GST_DEBUG_OBJECT (gamma,
"setting caps: in %" GST_PTR_FORMAT " out %" GST_PTR_FORMAT, incaps,
outcaps);
- if (!gst_video_format_parse_caps (incaps, &gamma->format, &gamma->width,
- &gamma->height))
+ if (!gst_video_info_from_caps (&info, incaps))
goto invalid_caps;
- gamma->size =
- gst_video_format_get_size (gamma->format, gamma->width, gamma->height);
+ gamma->info = info;
- switch (gamma->format) {
+ switch (GST_VIDEO_INFO_FORMAT (&info)) {
case GST_VIDEO_FORMAT_I420:
case GST_VIDEO_FORMAT_YV12:
case GST_VIDEO_FORMAT_Y41B:
return TRUE;
invalid_caps:
- GST_ERROR_OBJECT (gamma, "Invalid caps: %" GST_PTR_FORMAT, incaps);
- return FALSE;
+ {
+ GST_ERROR_OBJECT (gamma, "Invalid caps: %" GST_PTR_FORMAT, incaps);
+ return FALSE;
+ }
}
static void
gst_gamma_transform_ip (GstBaseTransform * base, GstBuffer * outbuf)
{
GstGamma *gamma = GST_GAMMA (base);
- guint8 *data;
- gsize size;
+ GstVideoFrame frame;
if (!gamma->process)
goto not_negotiated;
if (base->passthrough)
goto done;
- data = gst_buffer_map (outbuf, &size, NULL, GST_MAP_READWRITE);
-
- if (size != gamma->size)
- goto wrong_size;
+ if (!gst_video_frame_map (&frame, &gamma->info, outbuf, GST_MAP_READWRITE))
+ goto wrong_buffer;
GST_OBJECT_LOCK (gamma);
- gamma->process (gamma, data);
+ gamma->process (gamma, &frame);
GST_OBJECT_UNLOCK (gamma);
- gst_buffer_unmap (outbuf, data, size);
+ gst_video_frame_unmap (&frame);
done:
return GST_FLOW_OK;
/* ERRORS */
-wrong_size:
+wrong_buffer:
{
GST_ELEMENT_ERROR (gamma, STREAM, FORMAT,
- (NULL), ("Invalid buffer size %d, expected %d", size, gamma->size));
- gst_buffer_unmap (outbuf, data, size);
+ (NULL), ("Invalid buffer received"));
return GST_FLOW_ERROR;
}
not_negotiated:
};
static GstStaticPadTemplate gst_video_balance_src_template =
- GST_STATIC_PAD_TEMPLATE ("src",
+GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("AYUV") ";"
- GST_VIDEO_CAPS_ARGB ";" GST_VIDEO_CAPS_BGRA ";"
- GST_VIDEO_CAPS_ABGR ";" GST_VIDEO_CAPS_RGBA ";"
- GST_VIDEO_CAPS_YUV ("Y444") ";"
- GST_VIDEO_CAPS_xRGB ";" GST_VIDEO_CAPS_RGBx ";"
- GST_VIDEO_CAPS_xBGR ";" GST_VIDEO_CAPS_BGRx ";"
- GST_VIDEO_CAPS_RGB ";" GST_VIDEO_CAPS_BGR ";"
- GST_VIDEO_CAPS_YUV ("Y42B") ";"
- GST_VIDEO_CAPS_YUV ("YUY2") ";"
- GST_VIDEO_CAPS_YUV ("UYVY") ";"
- GST_VIDEO_CAPS_YUV ("YVYU") ";"
- GST_VIDEO_CAPS_YUV ("I420") ";"
- GST_VIDEO_CAPS_YUV ("YV12") ";"
- GST_VIDEO_CAPS_YUV ("IYUV") ";" GST_VIDEO_CAPS_YUV ("Y41B")
- )
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("{ AYUV, "
+ "ARGB, BGRA, ABGR, RGBA, Y444, xRGB, RGBx, "
+ "xBGR, BGRx, RGB, BGR, Y42B, YUY2, UYVY, YVYU, "
+ "I420, YV12, IYUV, Y41B }"))
);
static GstStaticPadTemplate gst_video_balance_sink_template =
- GST_STATIC_PAD_TEMPLATE ("sink",
+GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("AYUV") ";"
- GST_VIDEO_CAPS_ARGB ";" GST_VIDEO_CAPS_BGRA ";"
- GST_VIDEO_CAPS_ABGR ";" GST_VIDEO_CAPS_RGBA ";"
- GST_VIDEO_CAPS_YUV ("Y444") ";"
- GST_VIDEO_CAPS_xRGB ";" GST_VIDEO_CAPS_RGBx ";"
- GST_VIDEO_CAPS_xBGR ";" GST_VIDEO_CAPS_BGRx ";"
- GST_VIDEO_CAPS_RGB ";" GST_VIDEO_CAPS_BGR ";"
- GST_VIDEO_CAPS_YUV ("Y42B") ";"
- GST_VIDEO_CAPS_YUV ("YUY2") ";"
- GST_VIDEO_CAPS_YUV ("UYVY") ";"
- GST_VIDEO_CAPS_YUV ("YVYU") ";"
- GST_VIDEO_CAPS_YUV ("I420") ";"
- GST_VIDEO_CAPS_YUV ("YV12") ";"
- GST_VIDEO_CAPS_YUV ("IYUV") ";" GST_VIDEO_CAPS_YUV ("Y41B")
- )
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("{ AYUV, "
+ "ARGB, BGRA, ABGR, RGBA, Y444, xRGB, RGBx, "
+ "xBGR, BGRx, RGB, BGR, Y42B, YUY2, UYVY, YVYU, "
+ "I420, YV12, IYUV, Y41B }"))
);
static void gst_video_balance_colorbalance_init (GstColorBalanceClass * iface);
-static void gst_video_balance_interface_init (GstImplementsInterfaceClass *
- klass);
static void gst_video_balance_set_property (GObject * object, guint prop_id,
const GValue * value, GParamSpec * pspec);
#define gst_video_balance_parent_class parent_class
G_DEFINE_TYPE_WITH_CODE (GstVideoBalance, gst_video_balance,
GST_TYPE_VIDEO_FILTER,
- G_IMPLEMENT_INTERFACE (GST_TYPE_IMPLEMENTS_INTERFACE,
- gst_video_balance_interface_init);
G_IMPLEMENT_INTERFACE (GST_TYPE_COLOR_BALANCE,
gst_video_balance_colorbalance_init));
}
static void
-gst_video_balance_planar_yuv (GstVideoBalance * videobalance, guint8 * data)
+gst_video_balance_planar_yuv (GstVideoBalance * videobalance,
+ GstVideoFrame * frame)
{
gint x, y;
guint8 *ydata;
guint8 *udata, *vdata;
gint ystride, ustride, vstride;
- GstVideoFormat format;
gint width, height;
gint width2, height2;
guint8 *tabley = videobalance->tabley;
guint8 **tableu = videobalance->tableu;
guint8 **tablev = videobalance->tablev;
- format = videobalance->format;
- width = videobalance->width;
- height = videobalance->height;
+ width = GST_VIDEO_FRAME_WIDTH (frame);
+ height = GST_VIDEO_FRAME_HEIGHT (frame);
- ydata =
- data + gst_video_format_get_component_offset (format, 0, width, height);
- ystride = gst_video_format_get_row_stride (format, 0, width);
+ ydata = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+ ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
for (y = 0; y < height; y++) {
guint8 *yptr;
}
}
- width2 = gst_video_format_get_component_width (format, 1, width);
- height2 = gst_video_format_get_component_height (format, 1, height);
+ width2 = GST_VIDEO_FRAME_COMP_WIDTH (frame, 1);
+ height2 = GST_VIDEO_FRAME_COMP_HEIGHT (frame, 1);
- udata =
- data + gst_video_format_get_component_offset (format, 1, width, height);
- vdata =
- data + gst_video_format_get_component_offset (format, 2, width, height);
- ustride = gst_video_format_get_row_stride (format, 1, width);
- vstride = gst_video_format_get_row_stride (format, 1, width);
+ udata = GST_VIDEO_FRAME_PLANE_DATA (frame, 1);
+ vdata = GST_VIDEO_FRAME_PLANE_DATA (frame, 2);
+ ustride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 1);
+ vstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 2);
for (y = 0; y < height2; y++) {
guint8 *uptr, *vptr;
}
static void
-gst_video_balance_packed_yuv (GstVideoBalance * videobalance, guint8 * data)
+gst_video_balance_packed_yuv (GstVideoBalance * videobalance,
+ GstVideoFrame * frame)
{
- gint x, y;
- guint8 *ydata;
- guint8 *udata, *vdata;
- gint ystride, ustride, vstride;
+ gint x, y, stride;
+ guint8 *ydata, *udata, *vdata;
gint yoff, uoff, voff;
- GstVideoFormat format;
gint width, height;
gint width2, height2;
guint8 *tabley = videobalance->tabley;
guint8 **tableu = videobalance->tableu;
guint8 **tablev = videobalance->tablev;
- format = videobalance->format;
- width = videobalance->width;
- height = videobalance->height;
+ width = GST_VIDEO_FRAME_WIDTH (frame);
+ height = GST_VIDEO_FRAME_HEIGHT (frame);
- ydata =
- data + gst_video_format_get_component_offset (format, 0, width, height);
- ystride = gst_video_format_get_row_stride (format, 0, width);
- yoff = gst_video_format_get_pixel_stride (format, 0);
+ stride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+ ydata = GST_VIDEO_FRAME_COMP_DATA (frame, 0);
+ yoff = GST_VIDEO_FRAME_COMP_PSTRIDE (frame, 0);
for (y = 0; y < height; y++) {
guint8 *yptr;
- yptr = ydata + y * ystride;
+ yptr = ydata + y * stride;
for (x = 0; x < width; x++) {
*yptr = tabley[*yptr];
yptr += yoff;
}
}
- width2 = gst_video_format_get_component_width (format, 1, width);
- height2 = gst_video_format_get_component_height (format, 1, height);
+ width2 = GST_VIDEO_FRAME_COMP_WIDTH (frame, 1);
+ height2 = GST_VIDEO_FRAME_COMP_HEIGHT (frame, 1);
- udata =
- data + gst_video_format_get_component_offset (format, 1, width, height);
- vdata =
- data + gst_video_format_get_component_offset (format, 2, width, height);
- ustride = gst_video_format_get_row_stride (format, 1, width);
- vstride = gst_video_format_get_row_stride (format, 1, width);
- uoff = gst_video_format_get_pixel_stride (format, 1);
- voff = gst_video_format_get_pixel_stride (format, 2);
+ udata = GST_VIDEO_FRAME_COMP_DATA (frame, 1);
+ vdata = GST_VIDEO_FRAME_COMP_DATA (frame, 2);
+ uoff = GST_VIDEO_FRAME_COMP_PSTRIDE (frame, 1);
+ voff = GST_VIDEO_FRAME_COMP_PSTRIDE (frame, 2);
for (y = 0; y < height2; y++) {
guint8 *uptr, *vptr;
guint8 u1, v1;
- uptr = udata + y * ustride;
- vptr = vdata + y * vstride;
+ uptr = udata + y * stride;
+ vptr = vdata + y * stride;
for (x = 0; x < width2; x++) {
u1 = *uptr;
#define APPLY_MATRIX(m,o,v1,v2,v3) ((m[o*4] * v1 + m[o*4+1] * v2 + m[o*4+2] * v3 + m[o*4+3]) >> 8)
static void
-gst_video_balance_packed_rgb (GstVideoBalance * videobalance, guint8 * data)
+gst_video_balance_packed_rgb (GstVideoBalance * videobalance,
+ GstVideoFrame * frame)
{
gint i, j, height;
- gint width, row_stride, row_wrap;
+ gint width, stride, row_wrap;
gint pixel_stride;
+ guint8 *data;
gint offsets[3];
gint r, g, b;
gint y, u, v;
guint8 **tableu = videobalance->tableu;
guint8 **tablev = videobalance->tablev;
- offsets[0] = gst_video_format_get_component_offset (videobalance->format, 0,
- videobalance->width, videobalance->height);
- offsets[1] = gst_video_format_get_component_offset (videobalance->format, 1,
- videobalance->width, videobalance->height);
- offsets[2] = gst_video_format_get_component_offset (videobalance->format, 2,
- videobalance->width, videobalance->height);
-
- width =
- gst_video_format_get_component_width (videobalance->format, 0,
- videobalance->width);
- height =
- gst_video_format_get_component_height (videobalance->format, 0,
- videobalance->height);
- row_stride =
- gst_video_format_get_row_stride (videobalance->format, 0,
- videobalance->width);
- pixel_stride = gst_video_format_get_pixel_stride (videobalance->format, 0);
- row_wrap = row_stride - pixel_stride * width;
+ width = GST_VIDEO_FRAME_WIDTH (frame);
+ height = GST_VIDEO_FRAME_HEIGHT (frame);
+
+ offsets[0] = GST_VIDEO_FRAME_COMP_OFFSET (frame, 0);
+ offsets[1] = GST_VIDEO_FRAME_COMP_OFFSET (frame, 1);
+ offsets[2] = GST_VIDEO_FRAME_COMP_OFFSET (frame, 2);
+
+ data = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
+ stride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
+
+ pixel_stride = GST_VIDEO_FRAME_COMP_PSTRIDE (frame, 0);
+ row_wrap = stride - pixel_stride * width;
for (i = 0; i < height; i++) {
for (j = 0; j < width; j++) {
GstCaps * outcaps)
{
GstVideoBalance *videobalance = GST_VIDEO_BALANCE (base);
+ GstVideoInfo info;
GST_DEBUG_OBJECT (videobalance,
"in %" GST_PTR_FORMAT " out %" GST_PTR_FORMAT, incaps, outcaps);
videobalance->process = NULL;
- if (!gst_video_format_parse_caps (incaps, &videobalance->format,
- &videobalance->width, &videobalance->height))
+ if (!gst_video_info_from_caps (&info, incaps))
goto invalid_caps;
- videobalance->size =
- gst_video_format_get_size (videobalance->format, videobalance->width,
- videobalance->height);
-
- switch (videobalance->format) {
+ switch (GST_VIDEO_INFO_FORMAT (&info)) {
case GST_VIDEO_FORMAT_I420:
case GST_VIDEO_FORMAT_YV12:
case GST_VIDEO_FORMAT_Y41B:
videobalance->process = gst_video_balance_packed_rgb;
break;
default:
+ goto unknown_format;
break;
}
- return videobalance->process != NULL;
+ videobalance->info = info;
+
+ return TRUE;
invalid_caps:
- GST_ERROR_OBJECT (videobalance, "Invalid caps: %" GST_PTR_FORMAT, incaps);
- return FALSE;
+ {
+ GST_ERROR_OBJECT (videobalance, "Invalid caps: %" GST_PTR_FORMAT, incaps);
+ return FALSE;
+ }
+unknown_format:
+ {
+ GST_ERROR_OBJECT (videobalance, "unknown format %" GST_PTR_FORMAT, incaps);
+ return FALSE;
+ }
}
static void
gst_video_balance_transform_ip (GstBaseTransform * base, GstBuffer * outbuf)
{
GstVideoBalance *videobalance = GST_VIDEO_BALANCE (base);
- guint8 *data;
- gsize size;
+ GstVideoFrame frame;
if (!videobalance->process)
goto not_negotiated;
if (base->passthrough)
goto done;
- data = gst_buffer_map (outbuf, &size, NULL, GST_MAP_READWRITE);
-
- if (size != videobalance->size)
- goto wrong_size;
+ if (!gst_video_frame_map (&frame, &videobalance->info, outbuf,
+ GST_MAP_READWRITE))
+ goto wrong_frame;
GST_OBJECT_LOCK (videobalance);
- videobalance->process (videobalance, data);
+ videobalance->process (videobalance, &frame);
GST_OBJECT_UNLOCK (videobalance);
- gst_buffer_unmap (outbuf, data, size);
+ gst_video_frame_unmap (&frame);
done:
return GST_FLOW_OK;
/* ERRORS */
-wrong_size:
+wrong_frame:
{
GST_ELEMENT_ERROR (videobalance, STREAM, FORMAT,
- (NULL), ("Invalid buffer size %d, expected %d", size,
- videobalance->size));
- gst_buffer_unmap (outbuf, data, size);
+ (NULL), ("Invalid buffer received"));
return GST_FLOW_ERROR;
}
not_negotiated:
- GST_ERROR_OBJECT (videobalance, "Not negotiated yet");
- return GST_FLOW_NOT_NEGOTIATED;
+ {
+ GST_ERROR_OBJECT (videobalance, "Not negotiated yet");
+ return GST_FLOW_NOT_NEGOTIATED;
+ }
}
static void
}
}
-static gboolean
-gst_video_balance_interface_supported (GstImplementsInterface * iface,
- GType type)
-{
- g_assert (type == GST_TYPE_COLOR_BALANCE);
- return TRUE;
-}
-
-static void
-gst_video_balance_interface_init (GstImplementsInterfaceClass * klass)
-{
- klass->supported = gst_video_balance_interface_supported;
-}
-
static const GList *
gst_video_balance_colorbalance_list_channels (GstColorBalance * balance)
{
#define GST_CAT_DEFAULT video_flip_debug
static GstStaticPadTemplate gst_video_flip_src_template =
- GST_STATIC_PAD_TEMPLATE ("src",
+GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("AYUV") ";"
- GST_VIDEO_CAPS_ARGB ";" GST_VIDEO_CAPS_BGRA ";"
- GST_VIDEO_CAPS_ABGR ";" GST_VIDEO_CAPS_RGBA ";"
- GST_VIDEO_CAPS_YUV ("Y444") ";"
- GST_VIDEO_CAPS_xRGB ";" GST_VIDEO_CAPS_RGBx ";"
- GST_VIDEO_CAPS_xBGR ";" GST_VIDEO_CAPS_BGRx ";"
- GST_VIDEO_CAPS_RGB ";" GST_VIDEO_CAPS_BGR ";"
- GST_VIDEO_CAPS_YUV ("I420") ";"
- GST_VIDEO_CAPS_YUV ("YV12") ";" GST_VIDEO_CAPS_YUV ("IYUV") ";"
- GST_VIDEO_CAPS_YUV ("YUY2") ";" GST_VIDEO_CAPS_YUV ("UYVY") ";"
- GST_VIDEO_CAPS_YUV ("YVYU")
-
- )
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("{ AYUV, "
+ "ARGB, BGRA, ABGR, RGBA, Y444, xRGB, RGBx,xBGR, BGRx, "
+ "RGB, BGR, I420, YV12, IYUV YUY2, UYVY, YVYU }"))
);
static GstStaticPadTemplate gst_video_flip_sink_template =
- GST_STATIC_PAD_TEMPLATE ("sink",
+GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("AYUV") ";"
- GST_VIDEO_CAPS_ARGB ";" GST_VIDEO_CAPS_BGRA ";"
- GST_VIDEO_CAPS_ABGR ";" GST_VIDEO_CAPS_RGBA ";"
- GST_VIDEO_CAPS_YUV ("Y444") ";"
- GST_VIDEO_CAPS_xRGB ";" GST_VIDEO_CAPS_RGBx ";"
- GST_VIDEO_CAPS_xBGR ";" GST_VIDEO_CAPS_BGRx ";"
- GST_VIDEO_CAPS_RGB ";" GST_VIDEO_CAPS_BGR ";"
- GST_VIDEO_CAPS_YUV ("I420") ";"
- GST_VIDEO_CAPS_YUV ("YV12") ";" GST_VIDEO_CAPS_YUV ("IYUV") ";"
- GST_VIDEO_CAPS_YUV ("YUY2") ";" GST_VIDEO_CAPS_YUV ("UYVY") ";"
- GST_VIDEO_CAPS_YUV ("YVYU")
- )
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("{ AYUV, "
+ "ARGB, BGRA, ABGR, RGBA, Y444, xRGB, RGBx,xBGR, BGRx, "
+ "RGB, BGR, I420, YV12, IYUV YUY2, UYVY, YVYU }"))
);
#define GST_TYPE_VIDEO_FLIP_METHOD (gst_video_flip_method_get_type())
gst_video_flip_get_unit_size (GstBaseTransform * btrans, GstCaps * caps,
gsize * size)
{
- GstVideoFormat format;
- gint width, height;
+ GstVideoInfo info;
- if (!gst_video_format_parse_caps (caps, &format, &width, &height))
+ if (!gst_video_info_from_caps (&info, caps))
return FALSE;
- *size = gst_video_format_get_size (format, width, height);
+ *size = info.size;
GST_DEBUG_OBJECT (btrans, "our frame size is %d bytes (%dx%d)", *size,
- width, height);
+ info.width, info.height);
return TRUE;
}
static void
-gst_video_flip_planar_yuv (GstVideoFlip * videoflip, guint8 * dest,
- const guint8 * src)
+gst_video_flip_planar_yuv (GstVideoFlip * videoflip, GstVideoFrame * dest,
+ const GstVideoFrame * src)
{
gint x, y;
guint8 const *s;
guint8 *d;
- GstVideoFormat format = videoflip->format;
- gint sw = videoflip->from_width;
- gint sh = videoflip->from_height;
- gint dw = videoflip->to_width;
- gint dh = videoflip->to_height;
gint src_y_stride, src_u_stride, src_v_stride;
- gint src_y_offset, src_u_offset, src_v_offset;
gint src_y_height, src_u_height, src_v_height;
gint src_y_width, src_u_width, src_v_width;
gint dest_y_stride, dest_u_stride, dest_v_stride;
- gint dest_y_offset, dest_u_offset, dest_v_offset;
gint dest_y_height, dest_u_height, dest_v_height;
gint dest_y_width, dest_u_width, dest_v_width;
- src_y_stride = gst_video_format_get_row_stride (format, 0, sw);
- src_u_stride = gst_video_format_get_row_stride (format, 1, sw);
- src_v_stride = gst_video_format_get_row_stride (format, 2, sw);
+ src_y_stride = GST_VIDEO_FRAME_PLANE_STRIDE (src, 0);
+ src_u_stride = GST_VIDEO_FRAME_PLANE_STRIDE (src, 1);
+ src_v_stride = GST_VIDEO_FRAME_PLANE_STRIDE (src, 2);
- dest_y_stride = gst_video_format_get_row_stride (format, 0, dw);
- dest_u_stride = gst_video_format_get_row_stride (format, 1, dw);
- dest_v_stride = gst_video_format_get_row_stride (format, 2, dw);
+ dest_y_stride = GST_VIDEO_FRAME_PLANE_STRIDE (dest, 0);
+ dest_u_stride = GST_VIDEO_FRAME_PLANE_STRIDE (dest, 1);
+ dest_v_stride = GST_VIDEO_FRAME_PLANE_STRIDE (dest, 2);
- src_y_offset = gst_video_format_get_component_offset (format, 0, sw, sh);
- src_u_offset = gst_video_format_get_component_offset (format, 1, sw, sh);
- src_v_offset = gst_video_format_get_component_offset (format, 2, sw, sh);
+ src_y_width = GST_VIDEO_FRAME_COMP_WIDTH (src, 0);
+ src_u_width = GST_VIDEO_FRAME_COMP_WIDTH (src, 1);
+ src_v_width = GST_VIDEO_FRAME_COMP_WIDTH (src, 2);
- dest_y_offset = gst_video_format_get_component_offset (format, 0, dw, dh);
- dest_u_offset = gst_video_format_get_component_offset (format, 1, dw, dh);
- dest_v_offset = gst_video_format_get_component_offset (format, 2, dw, dh);
+ dest_y_width = GST_VIDEO_FRAME_COMP_WIDTH (dest, 0);
+ dest_u_width = GST_VIDEO_FRAME_COMP_WIDTH (dest, 1);
+ dest_v_width = GST_VIDEO_FRAME_COMP_WIDTH (dest, 2);
- src_y_width = gst_video_format_get_component_width (format, 0, sw);
- src_u_width = gst_video_format_get_component_width (format, 1, sw);
- src_v_width = gst_video_format_get_component_width (format, 2, sw);
+ src_y_height = GST_VIDEO_FRAME_COMP_HEIGHT (src, 0);
+ src_u_height = GST_VIDEO_FRAME_COMP_HEIGHT (src, 1);
+ src_v_height = GST_VIDEO_FRAME_COMP_HEIGHT (src, 2);
- dest_y_width = gst_video_format_get_component_width (format, 0, dw);
- dest_u_width = gst_video_format_get_component_width (format, 1, dw);
- dest_v_width = gst_video_format_get_component_width (format, 2, dw);
-
- src_y_height = gst_video_format_get_component_height (format, 0, sh);
- src_u_height = gst_video_format_get_component_height (format, 1, sh);
- src_v_height = gst_video_format_get_component_height (format, 2, sh);
-
- dest_y_height = gst_video_format_get_component_height (format, 0, dh);
- dest_u_height = gst_video_format_get_component_height (format, 1, dh);
- dest_v_height = gst_video_format_get_component_height (format, 2, dh);
+ dest_y_height = GST_VIDEO_FRAME_COMP_HEIGHT (dest, 0);
+ dest_u_height = GST_VIDEO_FRAME_COMP_HEIGHT (dest, 1);
+ dest_v_height = GST_VIDEO_FRAME_COMP_HEIGHT (dest, 2);
switch (videoflip->method) {
case GST_VIDEO_FLIP_METHOD_90R:
/* Flip Y */
- s = src + src_y_offset;
- d = dest + dest_y_offset;
+ s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
for (y = 0; y < dest_y_height; y++) {
for (x = 0; x < dest_y_width; x++) {
d[y * dest_y_stride + x] =
}
}
/* Flip U */
- s = src + src_u_offset;
- d = dest + dest_u_offset;
+ s = GST_VIDEO_FRAME_PLANE_DATA (src, 1);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dest, 1);
for (y = 0; y < dest_u_height; y++) {
for (x = 0; x < dest_u_width; x++) {
d[y * dest_u_stride + x] =
}
}
/* Flip V */
- s = src + src_v_offset;
- d = dest + dest_v_offset;
+ s = GST_VIDEO_FRAME_PLANE_DATA (src, 2);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dest, 2);
for (y = 0; y < dest_v_height; y++) {
for (x = 0; x < dest_v_width; x++) {
d[y * dest_v_stride + x] =
break;
case GST_VIDEO_FLIP_METHOD_90L:
/* Flip Y */
- s = src + src_y_offset;
- d = dest + dest_y_offset;
+ s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
for (y = 0; y < dest_y_height; y++) {
for (x = 0; x < dest_y_width; x++) {
d[y * dest_y_stride + x] =
}
}
/* Flip U */
- s = src + src_u_offset;
- d = dest + dest_u_offset;
+ s = GST_VIDEO_FRAME_PLANE_DATA (src, 1);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dest, 1);
for (y = 0; y < dest_u_height; y++) {
for (x = 0; x < dest_u_width; x++) {
d[y * dest_u_stride + x] =
}
}
/* Flip V */
- s = src + src_v_offset;
- d = dest + dest_v_offset;
+ s = GST_VIDEO_FRAME_PLANE_DATA (src, 2);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dest, 2);
for (y = 0; y < dest_v_height; y++) {
for (x = 0; x < dest_v_width; x++) {
d[y * dest_v_stride + x] =
break;
case GST_VIDEO_FLIP_METHOD_180:
/* Flip Y */
- s = src + src_y_offset;
- d = dest + dest_y_offset;
+ s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
for (y = 0; y < dest_y_height; y++) {
for (x = 0; x < dest_y_width; x++) {
d[y * dest_y_stride + x] =
}
}
/* Flip U */
- s = src + src_u_offset;
- d = dest + dest_u_offset;
+ s = GST_VIDEO_FRAME_PLANE_DATA (src, 1);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dest, 1);
for (y = 0; y < dest_u_height; y++) {
for (x = 0; x < dest_u_width; x++) {
d[y * dest_u_stride + x] =
}
}
/* Flip V */
- s = src + src_v_offset;
- d = dest + dest_v_offset;
+ s = GST_VIDEO_FRAME_PLANE_DATA (src, 2);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dest, 2);
for (y = 0; y < dest_v_height; y++) {
for (x = 0; x < dest_v_width; x++) {
d[y * dest_v_stride + x] =
break;
case GST_VIDEO_FLIP_METHOD_HORIZ:
/* Flip Y */
- s = src + src_y_offset;
- d = dest + dest_y_offset;
+ s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
for (y = 0; y < dest_y_height; y++) {
for (x = 0; x < dest_y_width; x++) {
d[y * dest_y_stride + x] =
}
}
/* Flip U */
- s = src + src_u_offset;
- d = dest + dest_u_offset;
+ s = GST_VIDEO_FRAME_PLANE_DATA (src, 1);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dest, 1);
for (y = 0; y < dest_u_height; y++) {
for (x = 0; x < dest_u_width; x++) {
d[y * dest_u_stride + x] =
}
}
/* Flip V */
- s = src + src_v_offset;
- d = dest + dest_v_offset;
+ s = GST_VIDEO_FRAME_PLANE_DATA (src, 2);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dest, 2);
for (y = 0; y < dest_v_height; y++) {
for (x = 0; x < dest_v_width; x++) {
d[y * dest_v_stride + x] =
break;
case GST_VIDEO_FLIP_METHOD_VERT:
/* Flip Y */
- s = src + src_y_offset;
- d = dest + dest_y_offset;
+ s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
for (y = 0; y < dest_y_height; y++) {
for (x = 0; x < dest_y_width; x++) {
d[y * dest_y_stride + x] =
}
}
/* Flip U */
- s = src + src_u_offset;
- d = dest + dest_u_offset;
+ s = GST_VIDEO_FRAME_PLANE_DATA (src, 1);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dest, 1);
for (y = 0; y < dest_u_height; y++) {
for (x = 0; x < dest_u_width; x++) {
d[y * dest_u_stride + x] =
}
}
/* Flip V */
- s = src + src_v_offset;
- d = dest + dest_v_offset;
+ s = GST_VIDEO_FRAME_PLANE_DATA (src, 2);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dest, 2);
for (y = 0; y < dest_v_height; y++) {
for (x = 0; x < dest_v_width; x++) {
d[y * dest_v_stride + x] =
break;
case GST_VIDEO_FLIP_METHOD_TRANS:
/* Flip Y */
- s = src + src_y_offset;
- d = dest + dest_y_offset;
+ s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
for (y = 0; y < dest_y_height; y++) {
for (x = 0; x < dest_y_width; x++) {
d[y * dest_y_stride + x] = s[x * src_y_stride + y];
}
}
/* Flip U */
- s = src + src_u_offset;
- d = dest + dest_u_offset;
+ s = GST_VIDEO_FRAME_PLANE_DATA (src, 1);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dest, 1);
for (y = 0; y < dest_u_height; y++) {
for (x = 0; x < dest_u_width; x++) {
d[y * dest_u_stride + x] = s[x * src_u_stride + y];
}
}
/* Flip V */
- s = src + src_v_offset;
- d = dest + dest_v_offset;
+ s = GST_VIDEO_FRAME_PLANE_DATA (src, 2);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dest, 2);
for (y = 0; y < dest_u_height; y++) {
for (x = 0; x < dest_u_width; x++) {
d[y * dest_v_stride + x] = s[x * src_v_stride + y];
break;
case GST_VIDEO_FLIP_METHOD_OTHER:
/* Flip Y */
- s = src + src_y_offset;
- d = dest + dest_y_offset;
+ s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
for (y = 0; y < dest_y_height; y++) {
for (x = 0; x < dest_y_width; x++) {
d[y * dest_y_stride + x] =
}
}
/* Flip U */
- s = src + src_u_offset;
- d = dest + dest_u_offset;
+ s = GST_VIDEO_FRAME_PLANE_DATA (src, 1);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dest, 1);
for (y = 0; y < dest_u_height; y++) {
for (x = 0; x < dest_u_width; x++) {
d[y * dest_u_stride + x] =
}
}
/* Flip V */
- s = src + src_v_offset;
- d = dest + dest_v_offset;
+ s = GST_VIDEO_FRAME_PLANE_DATA (src, 2);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dest, 2);
for (y = 0; y < dest_v_height; y++) {
for (x = 0; x < dest_v_width; x++) {
d[y * dest_v_stride + x] =
}
static void
-gst_video_flip_packed_simple (GstVideoFlip * videoflip, guint8 * dest,
- const guint8 * src)
+gst_video_flip_packed_simple (GstVideoFlip * videoflip, GstVideoFrame * dest,
+ const GstVideoFrame * src)
{
gint x, y, z;
- guint8 const *s = src;
- guint8 *d = dest;
- GstVideoFormat format = videoflip->format;
- gint sw = videoflip->from_width;
- gint sh = videoflip->from_height;
- gint dw = videoflip->to_width;
- gint dh = videoflip->to_height;
+ guint8 const *s;
+ guint8 *d;
+ gint sw = GST_VIDEO_FRAME_WIDTH (src);
+ gint sh = GST_VIDEO_FRAME_HEIGHT (src);
+ gint dw = GST_VIDEO_FRAME_WIDTH (dest);
+ gint dh = GST_VIDEO_FRAME_HEIGHT (dest);
gint src_stride, dest_stride;
gint bpp;
- src_stride = gst_video_format_get_row_stride (format, 0, sw);
- dest_stride = gst_video_format_get_row_stride (format, 0, dw);
+ s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
+
+ src_stride = GST_VIDEO_FRAME_PLANE_STRIDE (src, 0);
+ dest_stride = GST_VIDEO_FRAME_PLANE_STRIDE (dest, 0);
/* This is only true for non-subsampled formats! */
- bpp = gst_video_format_get_pixel_stride (format, 0);
+ bpp = GST_VIDEO_FRAME_COMP_PSTRIDE (src, 0);
switch (videoflip->method) {
case GST_VIDEO_FLIP_METHOD_90R:
static void
-gst_video_flip_y422 (GstVideoFlip * videoflip, guint8 * dest,
- const guint8 * src)
+gst_video_flip_y422 (GstVideoFlip * videoflip, GstVideoFrame * dest,
+ const GstVideoFrame * src)
{
gint x, y;
- guint8 const *s = src;
- guint8 *d = dest;
- GstVideoFormat format = videoflip->format;
- gint sw = videoflip->from_width;
- gint sh = videoflip->from_height;
- gint dw = videoflip->to_width;
- gint dh = videoflip->to_height;
+ guint8 const *s;
+ guint8 *d;
+ gint sw = GST_VIDEO_FRAME_WIDTH (src);
+ gint sh = GST_VIDEO_FRAME_HEIGHT (src);
+ gint dw = GST_VIDEO_FRAME_WIDTH (dest);
+ gint dh = GST_VIDEO_FRAME_HEIGHT (dest);
gint src_stride, dest_stride;
gint bpp;
gint y_offset;
gint v_offset;
gint y_stride;
- src_stride = gst_video_format_get_row_stride (format, 0, sw);
- dest_stride = gst_video_format_get_row_stride (format, 0, dw);
+ s = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
+ d = GST_VIDEO_FRAME_PLANE_DATA (dest, 0);
+
+ src_stride = GST_VIDEO_FRAME_PLANE_STRIDE (src, 0);
+ dest_stride = GST_VIDEO_FRAME_PLANE_STRIDE (dest, 0);
- y_offset = gst_video_format_get_component_offset (format, 0, sw, sh);
- u_offset = gst_video_format_get_component_offset (format, 1, sw, sh);
- v_offset = gst_video_format_get_component_offset (format, 2, sw, sh);
- y_stride = gst_video_format_get_pixel_stride (format, 0);
+ y_offset = GST_VIDEO_FRAME_COMP_OFFSET (src, 0);
+ u_offset = GST_VIDEO_FRAME_COMP_OFFSET (src, 1);
+ v_offset = GST_VIDEO_FRAME_COMP_OFFSET (src, 2);
+ y_stride = GST_VIDEO_FRAME_COMP_PSTRIDE (src, 0);
bpp = y_stride;
switch (videoflip->method) {
GstCaps * outcaps)
{
GstVideoFlip *vf = GST_VIDEO_FLIP (btrans);
- GstVideoFormat in_format, out_format;
+ GstVideoInfo in_info, out_info;
gboolean ret = FALSE;
vf->process = NULL;
- if (!gst_video_format_parse_caps (incaps, &in_format, &vf->from_width,
- &vf->from_height)
- || !gst_video_format_parse_caps (outcaps, &out_format, &vf->to_width,
- &vf->to_height))
+ if (!gst_video_info_from_caps (&in_info, incaps)
+ || !gst_video_info_from_caps (&out_info, outcaps))
goto invalid_caps;
- if (in_format != out_format)
+ if (GST_VIDEO_INFO_FORMAT (&in_info) != GST_VIDEO_INFO_FORMAT (&out_info))
goto invalid_caps;
- vf->format = in_format;
/* Check that they are correct */
switch (vf->method) {
case GST_VIDEO_FLIP_METHOD_90L:
case GST_VIDEO_FLIP_METHOD_TRANS:
case GST_VIDEO_FLIP_METHOD_OTHER:
- if ((vf->from_width != vf->to_height) ||
- (vf->from_height != vf->to_width)) {
+ if ((in_info.width != out_info.height) ||
+ (in_info.height != out_info.width)) {
GST_ERROR_OBJECT (vf, "we are inverting width and height but caps "
- "are not correct : %dx%d to %dx%d", vf->from_width,
- vf->from_height, vf->to_width, vf->to_height);
+ "are not correct : %dx%d to %dx%d", in_info.width,
+ in_info.height, out_info.width, out_info.height);
goto beach;
}
break;
case GST_VIDEO_FLIP_METHOD_180:
case GST_VIDEO_FLIP_METHOD_HORIZ:
case GST_VIDEO_FLIP_METHOD_VERT:
- if ((vf->from_width != vf->to_width) ||
- (vf->from_height != vf->to_height)) {
+ if ((in_info.width != out_info.width) ||
+ (in_info.height != out_info.height)) {
GST_ERROR_OBJECT (vf, "we are keeping width and height but caps "
- "are not correct : %dx%d to %dx%d", vf->from_width,
- vf->from_height, vf->to_width, vf->to_height);
+ "are not correct : %dx%d to %dx%d", in_info.width,
+ in_info.height, out_info.width, out_info.height);
goto beach;
}
break;
}
ret = TRUE;
+ vf->in_info = in_info;
+ vf->out_info = out_info;
- switch (vf->format) {
+ switch (GST_VIDEO_INFO_FORMAT (&in_info)) {
case GST_VIDEO_FORMAT_I420:
case GST_VIDEO_FORMAT_YV12:
case GST_VIDEO_FORMAT_Y444:
GstBuffer * out)
{
GstVideoFlip *videoflip = GST_VIDEO_FLIP (trans);
- guint8 *dest;
- guint8 *src;
- gsize srcsize, destsize;
+ GstVideoFrame dest;
+ GstVideoFrame src;
if (G_UNLIKELY (videoflip->process == NULL))
goto not_negotiated;
- src = gst_buffer_map (in, &srcsize, NULL, GST_MAP_READ);
- dest = gst_buffer_map (out, &destsize, NULL, GST_MAP_WRITE);
+ if (!gst_video_frame_map (&src, &videoflip->in_info, in, GST_MAP_READ))
+ goto invalid_in;
+
+ if (!gst_video_frame_map (&dest, &videoflip->out_info, out, GST_MAP_WRITE))
+ goto invalid_out;
GST_LOG_OBJECT (videoflip, "videoflip: flipping %dx%d to %dx%d (%s)",
- videoflip->from_width, videoflip->from_height, videoflip->to_width,
- videoflip->to_height, video_flip_methods[videoflip->method].value_nick);
+ videoflip->in_info.width, videoflip->in_info.height,
+ videoflip->out_info.width, videoflip->out_info.height,
+ video_flip_methods[videoflip->method].value_nick);
GST_OBJECT_LOCK (videoflip);
- videoflip->process (videoflip, dest, src);
+ videoflip->process (videoflip, &dest, &src);
GST_OBJECT_UNLOCK (videoflip);
- gst_buffer_unmap (in, src, srcsize);
- gst_buffer_unmap (out, dest, destsize);
+ gst_video_frame_unmap (&src);
+ gst_video_frame_unmap (&dest);
return GST_FLOW_OK;
not_negotiated:
- GST_ERROR_OBJECT (videoflip, "Not negotiated yet");
- return GST_FLOW_NOT_NEGOTIATED;
+ {
+ GST_ERROR_OBJECT (videoflip, "Not negotiated yet");
+ return GST_FLOW_NOT_NEGOTIATED;
+ }
+invalid_in:
+ {
+ GST_ERROR_OBJECT (videoflip, "invalid input frame");
+ return GST_FLOW_OK;
+ }
+invalid_out:
+ {
+ GST_ERROR_OBJECT (videoflip, "invalid output frame");
+ gst_video_frame_unmap (&src);
+ return GST_FLOW_OK;
+ }
}
static gboolean
switch (vf->method) {
case GST_VIDEO_FLIP_METHOD_90R:
new_x = y;
- new_y = vf->to_width - x;
+ new_y = vf->out_info.width - x;
break;
case GST_VIDEO_FLIP_METHOD_90L:
- new_x = vf->to_height - y;
+ new_x = vf->out_info.height - y;
new_y = x;
break;
case GST_VIDEO_FLIP_METHOD_OTHER:
- new_x = vf->to_height - y;
- new_y = vf->to_width - x;
+ new_x = vf->out_info.height - y;
+ new_y = vf->out_info.width - x;
break;
case GST_VIDEO_FLIP_METHOD_TRANS:
new_x = y;
new_y = x;
break;
case GST_VIDEO_FLIP_METHOD_180:
- new_x = vf->to_width - x;
- new_y = vf->to_height - y;
+ new_x = vf->out_info.width - x;
+ new_y = vf->out_info.height - y;
break;
case GST_VIDEO_FLIP_METHOD_HORIZ:
- new_x = vf->to_width - x;
+ new_x = vf->out_info.width - x;
new_y = y;
break;
case GST_VIDEO_FLIP_METHOD_VERT:
new_x = x;
- new_y = vf->to_height - y;
+ new_y = vf->out_info.height - y;
break;
default:
new_x = x;