video: More video helper library improvements

Make a new GstVideoFormatinfo structure that contains the specific information
related to a format such as the number of planes, components, subsampling,
pixel stride etc. The result is that we are now able to introduce the concept of
components again in the API.
Use tables to specify the formats and its properties.
Use macros to get information about the video format description.
Move code to set strides, offsets and size into one function.
Remove methods that are not handled with the structures.
Add methods to retrieve pointers and strides to the components in the video.
This commit is contained in:
Wim Taymans 2011-07-04 10:19:13 +02:00
parent ebfd6acde1
commit ddce68a5c2
15 changed files with 691 additions and 1310 deletions

View file

@ -764,9 +764,9 @@ gst_base_text_overlay_setcaps (GstBaseTextOverlay * overlay, GstCaps * caps)
goto invalid_caps; goto invalid_caps;
overlay->info = info; overlay->info = info;
overlay->format = info.format; overlay->format = GST_VIDEO_INFO_FORMAT (&info);
overlay->width = info.width; overlay->width = GST_VIDEO_INFO_WIDTH (&info);
overlay->height = info.height; overlay->height = GST_VIDEO_INFO_HEIGHT (&info);
ret = gst_pad_push_event (overlay->srcpad, gst_event_new_caps (caps)); ret = gst_pad_push_event (overlay->srcpad, gst_event_new_caps (caps));
@ -1465,16 +1465,12 @@ gst_base_text_overlay_shade_packed_Y (GstBaseTextOverlay * overlay,
GstVideoFrame * dest, gint x0, gint x1, gint y0, gint y1) GstVideoFrame * dest, gint x0, gint x1, gint y0, gint y1)
{ {
gint i, j; gint i, j;
guint dest_stride, pixel_stride, component_offset; guint dest_stride, pixel_stride;
guint8 *dest_ptr; guint8 *dest_ptr;
dest_stride = dest->info.stride[0]; dest_stride = GST_VIDEO_FRAME_COMP_STRIDE (dest, 0);
dest_ptr = dest->data[0]; dest_ptr = GST_VIDEO_FRAME_COMP_DATA (dest, 0);
pixel_stride = GST_VIDEO_FRAME_COMP_PSTRIDE (dest, 0);
pixel_stride = gst_video_format_get_pixel_stride (dest->info.format, 0);
component_offset =
gst_video_format_get_component_offset (dest->info.format, 0,
overlay->width, overlay->height);
x0 = CLAMP (x0 - BOX_XPAD, 0, overlay->width); x0 = CLAMP (x0 - BOX_XPAD, 0, overlay->width);
x1 = CLAMP (x1 + BOX_XPAD, 0, overlay->width); x1 = CLAMP (x1 + BOX_XPAD, 0, overlay->width);
@ -1483,21 +1479,21 @@ gst_base_text_overlay_shade_packed_Y (GstBaseTextOverlay * overlay,
y1 = CLAMP (y1 + BOX_YPAD, 0, overlay->height); y1 = CLAMP (y1 + BOX_YPAD, 0, overlay->height);
if (x0 != 0) if (x0 != 0)
x0 = gst_video_format_get_component_width (overlay->format, 0, x0); x0 = GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (dest->info.finfo, 0, x0);
if (x1 != 0) if (x1 != 0)
x1 = gst_video_format_get_component_width (overlay->format, 0, x1); x1 = GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (dest->info.finfo, 0, x1);
if (y0 != 0) if (y0 != 0)
y0 = gst_video_format_get_component_height (overlay->format, 0, y0); y0 = GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (dest->info.finfo, 0, y0);
if (y1 != 0) if (y1 != 0)
y1 = gst_video_format_get_component_height (overlay->format, 0, y1); y1 = GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (dest->info.finfo, 0, y1);
for (i = y0; i < y1; i++) { for (i = y0; i < y1; i++) {
for (j = x0; j < x1; j++) { for (j = x0; j < x1; j++) {
gint y; gint y;
gint y_pos; gint y_pos;
y_pos = (i * dest_stride) + j * pixel_stride + component_offset; y_pos = (i * dest_stride) + j * pixel_stride;
y = dest_ptr[y_pos] + overlay->shading_value; y = dest_ptr[y_pos] + overlay->shading_value;
dest_ptr[y_pos] = CLAMP (y, 0, 255); dest_ptr[y_pos] = CLAMP (y, 0, 255);

View file

@ -329,6 +329,7 @@ gst_text_render_check_argb (GstTextRender * render)
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
GstStructure *s; GstStructure *s;
GstVideoFormat vformat; GstVideoFormat vformat;
const GstVideoFormatInfo *info;
const gchar *fmt; const gchar *fmt;
s = gst_caps_get_structure (peer_caps, i); s = gst_caps_get_structure (peer_caps, i);
@ -340,7 +341,11 @@ gst_text_render_check_argb (GstTextRender * render)
continue; continue;
vformat = gst_video_format_from_string (fmt); vformat = gst_video_format_from_string (fmt);
render->use_ARGB = gst_video_format_has_alpha (vformat); info = gst_video_format_get_info (vformat);
if (info == NULL)
continue;
render->use_ARGB = GST_VIDEO_FORMAT_INFO_HAS_ALPHA (info);
} }
gst_caps_unref (peer_caps); gst_caps_unref (peer_caps);
} }

View file

@ -1111,7 +1111,7 @@ theora_handle_image (GstTheoraDec * dec, th_ycbcr_buffer buf, GstBuffer ** out)
gint width, height, stride; gint width, height, stride;
gint pic_width, pic_height; gint pic_width, pic_height;
GstFlowReturn result; GstFlowReturn result;
int i, plane; int i, comp;
guint8 *dest, *src; guint8 *dest, *src;
GstVideoFrame frame; GstVideoFrame frame;
GstMetaVideoCrop *crop; GstMetaVideoCrop *crop;
@ -1163,27 +1163,24 @@ theora_handle_image (GstTheoraDec * dec, th_ycbcr_buffer buf, GstBuffer ** out)
} }
} }
for (plane = 0; plane < 3; plane++) { for (comp = 0; comp < 3; comp++) {
width = width =
gst_video_format_get_component_width (frame.info.format, plane, GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (frame.info.finfo, comp, pic_width);
pic_width);
height = height =
gst_video_format_get_component_height (frame.info.format, plane, GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (frame.info.finfo, comp, pic_height);
pic_height); stride = GST_VIDEO_FRAME_COMP_STRIDE (&frame, comp);
dest = GST_VIDEO_FRAME_COMP_DATA (&frame, comp);
stride = GST_VIDEO_FRAME_STRIDE (&frame, plane); src = buf[comp].data;
dest = GST_VIDEO_FRAME_DATA (&frame, plane);
src = buf[plane].data;
src += ((height == pic_height) ? offset_y : offset_y / 2) src += ((height == pic_height) ? offset_y : offset_y / 2)
* buf[plane].stride; * buf[comp].stride;
src += (width == pic_width) ? offset_x : offset_x / 2; src += (width == pic_width) ? offset_x : offset_x / 2;
for (i = 0; i < height; i++) { for (i = 0; i < height; i++) {
memcpy (dest, src, width); memcpy (dest, src, width);
dest += stride; dest += stride;
src += buf[plane].stride; src += buf[comp].stride;
} }
} }
gst_video_frame_unmap (&frame); gst_video_frame_unmap (&frame);

View file

@ -668,7 +668,7 @@ theora_enc_sink_setcaps (GstTheoraEnc * enc, GstCaps * caps)
enc->info.pic_width = info.width; enc->info.pic_width = info.width;
enc->info.pic_height = info.height; enc->info.pic_height = info.height;
switch (info.format) { switch (GST_VIDEO_INFO_FORMAT (&info)) {
case GST_VIDEO_FORMAT_I420: case GST_VIDEO_FORMAT_I420:
enc->info.pixel_fmt = TH_PF_420; enc->info.pixel_fmt = TH_PF_420;
break; break;
@ -1023,13 +1023,10 @@ theora_enc_init_buffer (th_ycbcr_buffer buf, th_info * info,
* is perfectly ok, even though it does not strictly look ok. * is perfectly ok, even though it does not strictly look ok.
*/ */
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {
buf[i].width = buf[i].width = GST_VIDEO_FRAME_COMP_WIDTH (frame, i);
gst_video_format_get_component_width (format, i, info->frame_width); buf[i].height = GST_VIDEO_FRAME_COMP_HEIGHT (frame, i);
buf[i].height = buf[i].data = GST_VIDEO_FRAME_COMP_DATA (frame, i);
gst_video_format_get_component_height (format, i, info->frame_height); buf[i].stride = GST_VIDEO_FRAME_COMP_STRIDE (frame, i);
buf[i].data = GST_VIDEO_FRAME_DATA (frame, i);
buf[i].stride = GST_VIDEO_FRAME_STRIDE (frame, i);
} }
} }

View file

@ -61,7 +61,7 @@ gst_buffer_add_meta_video (GstBuffer * buffer, GstVideoFlags flags,
gst_video_info_set_format (&info, format, width, height); gst_video_info_set_format (&info, format, width, height);
meta = gst_buffer_add_meta_video_full (buffer, flags, format, width, height, meta = gst_buffer_add_meta_video_full (buffer, flags, format, width, height,
info.n_planes, info.offset, info.stride); info.finfo->n_planes, info.offset, info.stride);
return meta; return meta;
} }

File diff suppressed because it is too large Load diff

View file

@ -121,6 +121,76 @@ typedef enum {
GST_VIDEO_FORMAT_r210 GST_VIDEO_FORMAT_r210
} GstVideoFormat; } GstVideoFormat;
#define GST_VIDEO_MAX_PLANES 4
#define GST_VIDEO_MAX_COMPONENTS 4
typedef struct _GstVideoFormatInfo GstVideoFormatInfo;
typedef enum
{
GST_VIDEO_FORMAT_FLAG_YUV = (1 << 0),
GST_VIDEO_FORMAT_FLAG_RGB = (1 << 1),
GST_VIDEO_FORMAT_FLAG_GRAY = (1 << 2),
GST_VIDEO_FORMAT_FLAG_ALPHA = (1 << 3)
} GstVideoFormatFlags;
#define GST_VIDEO_SUB_SCALE(scale,val) (-((-(val))>>(scale)))
/**
* GstVideoFormatInfo:
* @format: #GstVideoFormat
* @name: string representation of the format
* @flags: #GstVideoFormatFlags
* @n_components: the number of components in the video format
* @depth: the depth for each component
* @pixel_stride: the pixel stride of each component. This is the amount of
* bytes to the pixel immediately to the right.
* @n_planes: the number of planes for this format
* @plane: the plane number where this component can be found
* @offset: the offset in the plane where the first pixel can be
* found.
* @w_sub: subsampling factor of the width
* @h_sub: subsampling factor of the height
*/
struct _GstVideoFormatInfo {
GstVideoFormat format;
const gchar *name;
GstVideoFormatFlags flags;
guint n_components;
guint depth[GST_VIDEO_MAX_COMPONENTS];
gint pixel_stride[GST_VIDEO_MAX_COMPONENTS];
guint n_planes;
guint plane[GST_VIDEO_MAX_COMPONENTS];
guint offset[GST_VIDEO_MAX_COMPONENTS];
guint w_sub[GST_VIDEO_MAX_COMPONENTS];
guint h_sub[GST_VIDEO_MAX_COMPONENTS];
};
#define GST_VIDEO_FORMAT_INFO_FORMAT(info) ((info)->format)
#define GST_VIDEO_FORMAT_INFO_NAME(info) ((info)->name)
#define GST_VIDEO_FORMAT_INFO_FLAGS(info) ((info)->flags)
#define GST_VIDEO_FORMAT_INFO_IS_YUV(info) ((info)->flags & GST_VIDEO_FORMAT_FLAG_YUV)
#define GST_VIDEO_FORMAT_INFO_IS_RGB(info) ((info)->flags & GST_VIDEO_FORMAT_FLAG_RGB)
#define GST_VIDEO_FORMAT_INFO_IS_GRAY(info) ((info)->flags & GST_VIDEO_FORMAT_FLAG_GRAY)
#define GST_VIDEO_FORMAT_INFO_HAS_ALPHA(info) ((info)->flags & GST_VIDEO_FORMAT_FLAG_ALPHA)
#define GST_VIDEO_FORMAT_INFO_N_COMPONENTS(info) ((info)->n_components)
#define GST_VIDEO_FORMAT_INFO_DEPTH(info,c) ((info)->depth[c])
#define GST_VIDEO_FORMAT_INFO_PSTRIDE(info,c) ((info)->pixel_stride[c])
#define GST_VIDEO_FORMAT_INFO_N_PLANES(info) ((info)->n_planes)
#define GST_VIDEO_FORMAT_INFO_PLANE(info,c) ((info)->plane[c])
#define GST_VIDEO_FORMAT_INFO_OFFSET(info,c) ((info)->offset[c])
#define GST_VIDEO_FORMAT_INFO_W_SUB(info,c) ((info)->w_sub[c])
#define GST_VIDEO_FORMAT_INFO_H_SUB(info,c) ((info)->h_sub[c])
#define GST_VIDEO_FORMAT_INFO_SCALE_WIDTH(info,c,w) GST_VIDEO_SUB_SCALE ((info)->w_sub[(c)],(w))
#define GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT(info,c,h) GST_VIDEO_SUB_SCALE ((info)->h_sub[(c)],(h))
#define GST_VIDEO_FORMAT_INFO_DATA(info,planes,comp) \
(((guint8*)(planes)[info->plane[comp]]) + info->offset[comp])
#define GST_VIDEO_FORMAT_INFO_STRIDE(info,strides,comp) ((strides)[info->plane[comp]])
/* format properties */ /* format properties */
GstVideoFormat gst_video_format_from_masks (gint depth, gint bpp, gint endianness, GstVideoFormat gst_video_format_from_masks (gint depth, gint bpp, gint endianness,
gint red_mask, gint green_mask, gint red_mask, gint green_mask,
@ -132,16 +202,8 @@ GstVideoFormat gst_video_format_from_string (const gchar *format) G_GNU
guint32 gst_video_format_to_fourcc (GstVideoFormat format) G_GNUC_CONST; guint32 gst_video_format_to_fourcc (GstVideoFormat format) G_GNUC_CONST;
const gchar * gst_video_format_to_string (GstVideoFormat format) G_GNUC_CONST; const gchar * gst_video_format_to_string (GstVideoFormat format) G_GNUC_CONST;
gboolean gst_video_format_is_rgb (GstVideoFormat format) G_GNUC_CONST; const GstVideoFormatInfo *
gboolean gst_video_format_is_yuv (GstVideoFormat format) G_GNUC_CONST; gst_video_format_get_info (GstVideoFormat format) G_GNUC_CONST;
gboolean gst_video_format_is_gray (GstVideoFormat format) G_GNUC_CONST;
gboolean gst_video_format_has_alpha (GstVideoFormat format) G_GNUC_CONST;
int gst_video_format_get_n_components (GstVideoFormat format) G_GNUC_CONST;
int gst_video_format_get_component_depth (GstVideoFormat format,
int component) G_GNUC_CONST;
int gst_video_format_get_pixel_stride (GstVideoFormat format,
int component) G_GNUC_CONST;
typedef struct _GstVideoInfo GstVideoInfo; typedef struct _GstVideoInfo GstVideoInfo;
typedef struct _GstVideoFrame GstVideoFrame; typedef struct _GstVideoFrame GstVideoFrame;
@ -168,8 +230,6 @@ typedef enum {
GST_VIDEO_FLAG_PROGRESSIVE = (1 << 5) GST_VIDEO_FLAG_PROGRESSIVE = (1 << 5)
} GstVideoFlags; } GstVideoFlags;
#define GST_VIDEO_MAX_PLANES 4
/** /**
* GstVideoInfo: * GstVideoInfo:
* @flags: additional video flags * @flags: additional video flags
@ -190,14 +250,13 @@ typedef enum {
* @par_d: the pixel-aspect-ratio demnominator * @par_d: the pixel-aspect-ratio demnominator
* @fps_n: the framerate numerator * @fps_n: the framerate numerator
* @fps_d: the framerate demnominator * @fps_d: the framerate demnominator
* @n_planes: the number of planes in the image
* @offset: offsets of the planes * @offset: offsets of the planes
* @stride: strides of the planes * @stride: strides of the planes
* *
* Extra buffer metadata describing image properties * Extra buffer metadata describing image properties
*/ */
struct _GstVideoInfo { struct _GstVideoInfo {
GstVideoFormat format; const GstVideoFormatInfo *finfo;
GstVideoFlags flags; GstVideoFlags flags;
gint width; gint width;
gint height; gint height;
@ -212,11 +271,30 @@ struct _GstVideoInfo {
gint fps_n; gint fps_n;
gint fps_d; gint fps_d;
guint n_planes;
gsize offset[GST_VIDEO_MAX_PLANES]; gsize offset[GST_VIDEO_MAX_PLANES];
gint stride[GST_VIDEO_MAX_PLANES]; gint stride[GST_VIDEO_MAX_PLANES];
}; };
/* general info */
#define GST_VIDEO_INFO_FORMAT(i) (GST_VIDEO_FORMAT_INFO_FORMAT((i)->finfo))
#define GST_VIDEO_INFO_NAME(i) (GST_VIDEO_FORMAT_INFO_NAME((i)->finfo))
#define GST_VIDEO_INFO_WIDTH(i) ((i)->width)
#define GST_VIDEO_INFO_HEIGHT(i) ((i)->height)
#define GST_VIDEO_INFO_SIZE(i) ((i)->size)
/* dealing with planes */
#define GST_VIDEO_INFO_N_PLANES(i) (GST_VIDEO_FORMAT_INFO_N_PLANES((i)->finfo))
#define GST_VIDEO_INFO_PLANE_OFFSET(i,p) ((i)->offset[p])
#define GST_VIDEO_INFO_PLANE_STRIDE(i,p) ((i)->stride[p])
/* dealing with components */
#define GST_VIDEO_INFO_N_COMPONENTS(i) GST_VIDEO_FORMAT_INFO_N_COMPONENTS((i)->finfo)
#define GST_VIDEO_INFO_COMP_DATA(i,d,c) GST_VIDEO_FORMAT_INFO_DATA((i)->finfo,d,c)
#define GST_VIDEO_INFO_COMP_STRIDE(i,c) GST_VIDEO_FORMAT_INFO_STRIDE((i)->finfo,(i)->stride,c)
#define GST_VIDEO_INFO_COMP_WIDTH(i,c) GST_VIDEO_FORMAT_INFO_SCALE_WIDTH((i)->finfo,c,(i)->width)
#define GST_VIDEO_INFO_COMP_HEIGHT(i,c) GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT((i)->finfo,c,(i)->height)
#define GST_VIDEO_INFO_COMP_PSTRIDE(i,c) GST_VIDEO_FORMAT_INFO_PSTRIDE((i)->finfo,c)
void gst_video_info_init (GstVideoInfo *info); void gst_video_info_init (GstVideoInfo *info);
void gst_video_info_set_format (GstVideoInfo *info, GstVideoFormat format, void gst_video_info_set_format (GstVideoInfo *info, GstVideoFormat format,
@ -236,6 +314,7 @@ gboolean gst_video_info_convert (GstVideoInfo *info,
* GstVideoFrame: * GstVideoFrame:
* @info: the #GstVideoInfo * @info: the #GstVideoInfo
* @buffer: the mapped buffer * @buffer: the mapped buffer
* @meta: pointer to metadata if any
* @data: pointers to the plane data * @data: pointers to the plane data
* *
* A video frame obtained from gst_video_frame_map() * A video frame obtained from gst_video_frame_map()
@ -246,18 +325,33 @@ struct _GstVideoFrame {
GstBuffer *buffer; GstBuffer *buffer;
gpointer meta; gpointer meta;
guint8 *data[GST_VIDEO_MAX_PLANES]; gpointer data[GST_VIDEO_MAX_PLANES];
}; };
#define GST_VIDEO_FRAME_DATA(f,c) ((f)->data[c])
#define GST_VIDEO_FRAME_STRIDE(f,c) ((f)->info.stride[c])
gboolean gst_video_frame_map (GstVideoFrame *frame, GstVideoInfo *info, gboolean gst_video_frame_map (GstVideoFrame *frame, GstVideoInfo *info,
GstBuffer *buffer, GstMapFlags flags); GstBuffer *buffer, GstMapFlags flags);
void gst_video_frame_unmap (GstVideoFrame *frame); void gst_video_frame_unmap (GstVideoFrame *frame);
gboolean gst_video_frame_copy (GstVideoFrame *dest, const GstVideoFrame *src); gboolean gst_video_frame_copy (GstVideoFrame *dest, const GstVideoFrame *src);
/* general info */
#define GST_VIDEO_FRAME_FORMAT(f) (GST_VIDEO_INFO_FORMAT(&(f)->info))
#define GST_VIDEO_FRAME_WIDTH(f) (GST_VIDEO_INFO_WIDTH(&(f)->info))
#define GST_VIDEO_FRAME_HEIGHT(f) (GST_VIDEO_INFO_HEIGHT(&(f)->info))
/* dealing with planes */
#define GST_VIDEO_FRAME_N_PLANES(f) (GST_VIDEO_INFO_N_PLANES(&(f)->info))
#define GST_VIDEO_FRAME_PLANE_DATA(f,p) ((f)->data[p])
#define GST_VIDEO_FRAME_PLANE_OFFSET(f,p) (GST_VIDEO_INFO_PLANE_OFFSET(&(f)->info,p))
#define GST_VIDEO_FRAME_PLANE_STRIDE(f,p) (GST_VIDEO_INFO_PLANE_STRIDE(&(f)->info,p))
/* dealing with components */
#define GST_VIDEO_FRAME_N_COMPONENTS(f) GST_VIDEO_INFO_N_COMPONENTS(&(f)->info)
#define GST_VIDEO_FRAME_COMP_DATA(f,c) GST_VIDEO_INFO_COMP_DATA(&(f)->info,(f)->data,c)
#define GST_VIDEO_FRAME_COMP_STRIDE(f,c) GST_VIDEO_INFO_COMP_STRIDE(&(f)->info,c)
#define GST_VIDEO_FRAME_COMP_WIDTH(f,c) GST_VIDEO_INFO_COMP_WIDTH(&(f)->info,c)
#define GST_VIDEO_FRAME_COMP_HEIGHT(f,c) GST_VIDEO_INFO_COMP_HEIGHT(&(f)->info,c)
#define GST_VIDEO_FRAME_COMP_PSTRIDE(f,c) GST_VIDEO_INFO_COMP_PSTRIDE(&(f)->info,c)
#define GST_VIDEO_SIZE_RANGE "(int) [ 1, max ]" #define GST_VIDEO_SIZE_RANGE "(int) [ 1, max ]"
#define GST_VIDEO_FPS_RANGE "(fraction) [ 0, max ]" #define GST_VIDEO_FPS_RANGE "(fraction) [ 0, max ]"
@ -338,18 +432,6 @@ gboolean gst_video_calculate_display_ratio (guint * dar_n,
gboolean gst_video_parse_caps_framerate (GstCaps * caps, int *fps_n, int *fps_d); gboolean gst_video_parse_caps_framerate (GstCaps * caps, int *fps_n, int *fps_d);
GstBuffer * gst_video_parse_caps_palette (GstCaps * caps); GstBuffer * gst_video_parse_caps_palette (GstCaps * caps);
int gst_video_format_get_component_width (GstVideoFormat format,
int component,
int width) G_GNUC_CONST;
int gst_video_format_get_component_height (GstVideoFormat format,
int component,
int height) G_GNUC_CONST;
int gst_video_format_get_component_offset (GstVideoFormat format,
int component,
int width,
int height);
/* video still frame event creation and parsing */ /* video still frame event creation and parsing */
GstEvent * gst_video_event_new_still_frame (gboolean in_still); GstEvent * gst_video_event_new_still_frame (gboolean in_still);

View file

@ -198,9 +198,9 @@ gst_video_convert_set_caps (GstBaseTransform * btrans, GstCaps * incaps,
if (!gst_video_info_from_caps (&in_info, incaps)) if (!gst_video_info_from_caps (&in_info, incaps))
goto invalid_caps; goto invalid_caps;
if (gst_video_format_is_rgb (in_info.format)) { if (in_info.finfo->flags & GST_VIDEO_FORMAT_FLAG_RGB) {
in_spec = COLOR_SPEC_RGB; in_spec = COLOR_SPEC_RGB;
} else if (gst_video_format_is_yuv (in_info.format)) { } else if (in_info.finfo->flags & GST_VIDEO_FORMAT_FLAG_YUV) {
if (in_info.color_matrix && g_str_equal (in_info.color_matrix, "hdtv")) if (in_info.color_matrix && g_str_equal (in_info.color_matrix, "hdtv"))
in_spec = COLOR_SPEC_YUV_BT709; in_spec = COLOR_SPEC_YUV_BT709;
else else
@ -213,9 +213,9 @@ gst_video_convert_set_caps (GstBaseTransform * btrans, GstCaps * incaps,
if (!gst_video_info_from_caps (&out_info, outcaps)) if (!gst_video_info_from_caps (&out_info, outcaps))
goto invalid_caps; goto invalid_caps;
if (gst_video_format_is_rgb (out_info.format)) { if (out_info.finfo->flags & GST_VIDEO_FORMAT_FLAG_RGB) {
out_spec = COLOR_SPEC_RGB; out_spec = COLOR_SPEC_RGB;
} else if (gst_video_format_is_yuv (out_info.format)) { } else if (out_info.finfo->flags & GST_VIDEO_FORMAT_FLAG_YUV) {
if (out_info.color_matrix && g_str_equal (out_info.color_matrix, "hdtv")) if (out_info.color_matrix && g_str_equal (out_info.color_matrix, "hdtv"))
out_spec = COLOR_SPEC_YUV_BT709; out_spec = COLOR_SPEC_YUV_BT709;
else else
@ -246,18 +246,21 @@ gst_video_convert_set_caps (GstBaseTransform * btrans, GstCaps * incaps,
interlaced = (in_info.flags & GST_VIDEO_FLAG_INTERLACED) != 0; interlaced = (in_info.flags & GST_VIDEO_FLAG_INTERLACED) != 0;
space->convert = space->convert =
videoconvert_convert_new (out_info.format, out_spec, in_info.format, videoconvert_convert_new (GST_VIDEO_INFO_FORMAT (&out_info), out_spec,
in_spec, in_info.width, in_info.height); GST_VIDEO_INFO_FORMAT (&in_info), in_spec, in_info.width, in_info.height);
if (space->convert == NULL) if (space->convert == NULL)
goto no_convert; goto no_convert;
videoconvert_convert_set_interlaced (space->convert, interlaced); videoconvert_convert_set_interlaced (space->convert, interlaced);
/* palette, only for from data */ /* palette, only for from data */
if (space->from_info.format == GST_VIDEO_FORMAT_RGB8_PALETTED && if (GST_VIDEO_INFO_FORMAT (&space->from_info) ==
space->to_info.format == GST_VIDEO_FORMAT_RGB8_PALETTED) { GST_VIDEO_FORMAT_RGB8_PALETTED
&& GST_VIDEO_INFO_FORMAT (&space->to_info) ==
GST_VIDEO_FORMAT_RGB8_PALETTED) {
goto format_mismatch; goto format_mismatch;
} else if (space->from_info.format == GST_VIDEO_FORMAT_RGB8_PALETTED) { } else if (GST_VIDEO_INFO_FORMAT (&space->from_info) ==
GST_VIDEO_FORMAT_RGB8_PALETTED) {
GstBuffer *palette; GstBuffer *palette;
guint32 *data; guint32 *data;
@ -274,7 +277,8 @@ gst_video_convert_set_caps (GstBaseTransform * btrans, GstCaps * incaps,
gst_buffer_unmap (palette, data, -1); gst_buffer_unmap (palette, data, -1);
gst_buffer_unref (palette); gst_buffer_unref (palette);
} else if (space->to_info.format == GST_VIDEO_FORMAT_RGB8_PALETTED) { } else if (GST_VIDEO_INFO_FORMAT (&space->to_info) ==
GST_VIDEO_FORMAT_RGB8_PALETTED) {
const guint32 *palette; const guint32 *palette;
GstBuffer *p_buf; GstBuffer *p_buf;
@ -286,8 +290,10 @@ gst_video_convert_set_caps (GstBaseTransform * btrans, GstCaps * incaps,
gst_buffer_unref (p_buf); gst_buffer_unref (p_buf);
} }
GST_DEBUG ("reconfigured %d %d", space->from_info.format, GST_DEBUG ("reconfigured %d %d", GST_VIDEO_INFO_FORMAT (&space->from_info),
space->to_info.format); GST_VIDEO_INFO_FORMAT (&space->to_info));
space->negotiated = TRUE;
return TRUE; return TRUE;
@ -295,29 +301,26 @@ gst_video_convert_set_caps (GstBaseTransform * btrans, GstCaps * incaps,
invalid_caps: invalid_caps:
{ {
GST_ERROR_OBJECT (space, "invalid caps"); GST_ERROR_OBJECT (space, "invalid caps");
space->from_info.format = GST_VIDEO_FORMAT_UNKNOWN; goto error_done;
space->to_info.format = GST_VIDEO_FORMAT_UNKNOWN;
return FALSE;
} }
format_mismatch: format_mismatch:
{ {
GST_ERROR_OBJECT (space, "input and output formats do not match"); GST_ERROR_OBJECT (space, "input and output formats do not match");
space->from_info.format = GST_VIDEO_FORMAT_UNKNOWN; goto error_done;
space->to_info.format = GST_VIDEO_FORMAT_UNKNOWN;
return FALSE;
} }
no_convert: no_convert:
{ {
GST_ERROR_OBJECT (space, "could not create converter"); GST_ERROR_OBJECT (space, "could not create converter");
space->from_info.format = GST_VIDEO_FORMAT_UNKNOWN; goto error_done;
space->to_info.format = GST_VIDEO_FORMAT_UNKNOWN;
return FALSE;
} }
invalid_palette: invalid_palette:
{ {
GST_ERROR_OBJECT (space, "invalid palette"); GST_ERROR_OBJECT (space, "invalid palette");
space->from_info.format = GST_VIDEO_FORMAT_UNKNOWN; goto error_done;
space->to_info.format = GST_VIDEO_FORMAT_UNKNOWN; }
error_done:
{
space->negotiated = FALSE;
return FALSE; return FALSE;
} }
} }
@ -381,8 +384,7 @@ gst_video_convert_class_init (GstVideoConvertClass * klass)
static void static void
gst_video_convert_init (GstVideoConvert * space) gst_video_convert_init (GstVideoConvert * space)
{ {
space->from_info.format = GST_VIDEO_FORMAT_UNKNOWN; space->negotiated = FALSE;
space->to_info.format = GST_VIDEO_FORMAT_UNKNOWN;
} }
void void
@ -447,11 +449,10 @@ gst_video_convert_transform (GstBaseTransform * btrans, GstBuffer * inbuf,
space = GST_VIDEO_CONVERT_CAST (btrans); space = GST_VIDEO_CONVERT_CAST (btrans);
GST_DEBUG ("from %d -> to %d", space->from_info.format, GST_DEBUG ("from %s -> to %s", GST_VIDEO_INFO_NAME (&space->from_info),
space->to_info.format); GST_VIDEO_INFO_NAME (&space->to_info));
if (G_UNLIKELY (space->from_info.format == GST_VIDEO_FORMAT_UNKNOWN || if (G_UNLIKELY (!space->negotiated))
space->to_info.format == GST_VIDEO_FORMAT_UNKNOWN))
goto unknown_format; goto unknown_format;
videoconvert_convert_set_dither (space->convert, space->dither); videoconvert_convert_set_dither (space->convert, space->dither);
@ -468,8 +469,8 @@ gst_video_convert_transform (GstBaseTransform * btrans, GstBuffer * inbuf,
gst_video_frame_unmap (&in_frame); gst_video_frame_unmap (&in_frame);
/* baseclass copies timestamps */ /* baseclass copies timestamps */
GST_DEBUG ("from %d -> to %d done", space->from_info.format, GST_DEBUG ("from %s -> to %s done", GST_VIDEO_INFO_NAME (&space->from_info),
space->to_info.format); GST_VIDEO_INFO_NAME (&space->to_info));
return GST_FLOW_OK; return GST_FLOW_OK;

View file

@ -49,6 +49,7 @@ struct _GstVideoConvert {
GstVideoInfo from_info; GstVideoInfo from_info;
GstVideoInfo to_info; GstVideoInfo to_info;
gboolean negotiated;
ColorSpaceColorSpec from_spec; ColorSpaceColorSpec from_spec;
ColorSpaceColorSpec to_spec; ColorSpaceColorSpec to_spec;

View file

@ -42,27 +42,31 @@ videoconvert_convert_new (GstVideoFormat to_format, ColorSpaceColorSpec to_spec,
GstVideoFormat from_format, ColorSpaceColorSpec from_spec, GstVideoFormat from_format, ColorSpaceColorSpec from_spec,
int width, int height) int width, int height)
{ {
const GstVideoFormatInfo *to_info, *from_info;
VideoConvert *convert; VideoConvert *convert;
int i; int i;
g_return_val_if_fail (!gst_video_format_is_rgb (to_format) from_info = gst_video_format_get_info (from_format);
to_info = gst_video_format_get_info (to_format);
g_return_val_if_fail (!GST_VIDEO_FORMAT_INFO_IS_RGB (to_info)
|| to_spec == COLOR_SPEC_RGB, NULL); || to_spec == COLOR_SPEC_RGB, NULL);
g_return_val_if_fail (!gst_video_format_is_yuv (to_format) g_return_val_if_fail (!GST_VIDEO_FORMAT_INFO_IS_YUV (to_info)
|| to_spec == COLOR_SPEC_YUV_BT709 || to_spec == COLOR_SPEC_YUV_BT709
|| to_spec == COLOR_SPEC_YUV_BT470_6, NULL); || to_spec == COLOR_SPEC_YUV_BT470_6, NULL);
g_return_val_if_fail (gst_video_format_is_rgb (to_format) g_return_val_if_fail (GST_VIDEO_FORMAT_INFO_IS_RGB (to_info)
|| gst_video_format_is_yuv (to_format) || GST_VIDEO_FORMAT_INFO_IS_YUV (to_info)
|| (gst_video_format_is_gray (to_format) && || (GST_VIDEO_FORMAT_INFO_IS_GRAY (to_info) &&
to_spec == COLOR_SPEC_GRAY), NULL); to_spec == COLOR_SPEC_GRAY), NULL);
g_return_val_if_fail (!gst_video_format_is_rgb (from_format) g_return_val_if_fail (!GST_VIDEO_FORMAT_INFO_IS_RGB (from_info)
|| from_spec == COLOR_SPEC_RGB, NULL); || from_spec == COLOR_SPEC_RGB, NULL);
g_return_val_if_fail (!gst_video_format_is_yuv (from_format) g_return_val_if_fail (!GST_VIDEO_FORMAT_INFO_IS_YUV (from_info)
|| from_spec == COLOR_SPEC_YUV_BT709 || from_spec == COLOR_SPEC_YUV_BT709
|| from_spec == COLOR_SPEC_YUV_BT470_6, NULL); || from_spec == COLOR_SPEC_YUV_BT470_6, NULL);
g_return_val_if_fail (gst_video_format_is_rgb (from_format) g_return_val_if_fail (GST_VIDEO_FORMAT_INFO_IS_RGB (from_info)
|| gst_video_format_is_yuv (from_format) || GST_VIDEO_FORMAT_INFO_IS_YUV (from_info)
|| (gst_video_format_is_gray (from_format) && || (GST_VIDEO_FORMAT_INFO_IS_GRAY (from_info) &&
from_spec == COLOR_SPEC_GRAY), NULL); from_spec == COLOR_SPEC_GRAY), NULL);
convert = g_malloc (sizeof (VideoConvert)); convert = g_malloc (sizeof (VideoConvert));
@ -77,8 +81,7 @@ videoconvert_convert_new (GstVideoFormat to_format, ColorSpaceColorSpec to_spec,
convert->convert = videoconvert_convert_generic; convert->convert = videoconvert_convert_generic;
convert->dither16 = videoconvert_dither_none; convert->dither16 = videoconvert_dither_none;
if (gst_video_format_get_component_depth (to_format, 0) > 8 || if (to_info->depth[0] > 8 || from_info->depth[0] > 8) {
gst_video_format_get_component_depth (from_format, 0) > 8) {
convert->use_16bit = TRUE; convert->use_16bit = TRUE;
} else { } else {
convert->use_16bit = FALSE; convert->use_16bit = FALSE;
@ -179,7 +182,7 @@ videoconvert_convert_convert (VideoConvert * convert,
#define FRAME_GET_STRIDE(dir, comp) \ #define FRAME_GET_STRIDE(dir, comp) \
((dir)->info.stride[comp]) ((dir)->info.stride[comp])
#define FRAME_GET_LINE(dir, comp, line) \ #define FRAME_GET_LINE(dir, comp, line) \
((dir)->data[comp] + FRAME_GET_STRIDE (dir, comp) * (line)) (((guint8*)(dir)->data[comp]) + FRAME_GET_STRIDE (dir, comp) * (line))
static void static void
getline_I420 (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src, getline_I420 (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,

View file

@ -903,20 +903,16 @@ gst_video_scale_setup_vs_image (VSImage * image, GstVideoFrame * frame,
GstVideoFormat format; GstVideoFormat format;
gint width, height; gint width, height;
format = frame->info.format; format = GST_VIDEO_FRAME_FORMAT (frame);
width = frame->info.width; width = GST_VIDEO_FRAME_WIDTH (frame);
height = frame->info.height; height = GST_VIDEO_FRAME_HEIGHT (frame);
image->real_width = image->real_width = GST_VIDEO_FRAME_COMP_WIDTH (frame, component);
gst_video_format_get_component_width (format, component, width); image->real_height = GST_VIDEO_FRAME_COMP_HEIGHT (frame, component);
image->real_height = image->width = GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (frame->info.finfo,
gst_video_format_get_component_height (format, component, height); component, MAX (1, width - b_w));
image->width = image->height = GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (frame->info.finfo,
gst_video_format_get_component_width (format, component, MAX (1, component, MAX (1, height - b_h));
width - b_w));
image->height =
gst_video_format_get_component_height (format, component, MAX (1,
height - b_h));
image->border_top = (image->real_height - image->height) / 2; image->border_top = (image->real_height - image->height) / 2;
image->border_bottom = image->real_height - image->height - image->border_top; image->border_bottom = image->real_height - image->height - image->border_top;
@ -940,8 +936,7 @@ gst_video_scale_setup_vs_image (VSImage * image, GstVideoFrame * frame,
image->pixels = image->pixels =
image->real_pixels + image->border_top * image->stride + image->real_pixels + image->border_top * image->stride +
image->border_left * gst_video_format_get_pixel_stride (format, image->border_left * GST_VIDEO_FRAME_COMP_PSTRIDE (frame, component);
component);
} }
static const guint8 * static const guint8 *
@ -1025,7 +1020,7 @@ gst_video_scale_transform (GstBaseTransform * trans, GstBuffer * in,
add_borders = videoscale->add_borders; add_borders = videoscale->add_borders;
GST_OBJECT_UNLOCK (videoscale); GST_OBJECT_UNLOCK (videoscale);
format = videoscale->from_info.format; format = GST_VIDEO_INFO_FORMAT (&videoscale->from_info);
black = _get_black_for_format (format); black = _get_black_for_format (format);
if (videoscale->from_info.width == 1) { if (videoscale->from_info.width == 1) {
@ -1039,7 +1034,7 @@ gst_video_scale_transform (GstBaseTransform * trans, GstBuffer * in,
gst_video_frame_map (&in_frame, &videoscale->from_info, in, GST_MAP_READ); gst_video_frame_map (&in_frame, &videoscale->from_info, in, GST_MAP_READ);
gst_video_frame_map (&out_frame, &videoscale->to_info, out, GST_MAP_WRITE); gst_video_frame_map (&out_frame, &videoscale->to_info, out, GST_MAP_WRITE);
for (i = 0; i < in_frame.info.n_planes; i++) { for (i = 0; i < GST_VIDEO_FRAME_N_PLANES (&in_frame); i++) {
gst_video_scale_setup_vs_image (&src[i], &in_frame, i, 0, 0); gst_video_scale_setup_vs_image (&src[i], &in_frame, i, 0, 0);
gst_video_scale_setup_vs_image (&dest[i], &out_frame, i, gst_video_scale_setup_vs_image (&dest[i], &out_frame, i,
videoscale->borders_w, videoscale->borders_h); videoscale->borders_w, videoscale->borders_h);

View file

@ -1562,22 +1562,22 @@ paint_tmpline_AYUV (paintinfo * p, int x, int w)
static void static void
paint_setup_I420 (paintinfo * p, GstVideoFrame * frame) paint_setup_I420 (paintinfo * p, GstVideoFrame * frame)
{ {
p->yp = GST_VIDEO_FRAME_DATA (frame, 0); p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->up = GST_VIDEO_FRAME_DATA (frame, 1); p->up = GST_VIDEO_FRAME_PLANE_DATA (frame, 1);
p->ustride = GST_VIDEO_FRAME_STRIDE (frame, 1); p->ustride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 1);
p->vp = GST_VIDEO_FRAME_DATA (frame, 2); p->vp = GST_VIDEO_FRAME_PLANE_DATA (frame, 2);
p->vstride = GST_VIDEO_FRAME_STRIDE (frame, 2); p->vstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 2);
p->size = frame->info.size; p->size = frame->info.size;
} }
static void static void
paint_setup_NV12 (paintinfo * p, GstVideoFrame * frame) paint_setup_NV12 (paintinfo * p, GstVideoFrame * frame)
{ {
p->yp = GST_VIDEO_FRAME_DATA (frame, 0); p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->up = GST_VIDEO_FRAME_DATA (frame, 1); p->up = GST_VIDEO_FRAME_PLANE_DATA (frame, 1);
p->ustride = GST_VIDEO_FRAME_STRIDE (frame, 1); p->ustride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 1);
p->vp = p->up + 1; p->vp = p->up + 1;
p->vstride = p->ustride; p->vstride = p->ustride;
p->size = frame->info.size; p->size = frame->info.size;
@ -1586,10 +1586,10 @@ paint_setup_NV12 (paintinfo * p, GstVideoFrame * frame)
static void static void
paint_setup_NV21 (paintinfo * p, GstVideoFrame * frame) paint_setup_NV21 (paintinfo * p, GstVideoFrame * frame)
{ {
p->yp = GST_VIDEO_FRAME_DATA (frame, 0); p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->vp = GST_VIDEO_FRAME_DATA (frame, 1); p->vp = GST_VIDEO_FRAME_PLANE_DATA (frame, 1);
p->vstride = GST_VIDEO_FRAME_STRIDE (frame, 1); p->vstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 1);
p->up = p->vp + 1; p->up = p->vp + 1;
p->ustride = p->vstride; p->ustride = p->vstride;
p->size = frame->info.size; p->size = frame->info.size;
@ -1653,22 +1653,22 @@ convert_hline_NV21 (paintinfo * p, int y)
static void static void
paint_setup_YV12 (paintinfo * p, GstVideoFrame * frame) paint_setup_YV12 (paintinfo * p, GstVideoFrame * frame)
{ {
p->yp = GST_VIDEO_FRAME_DATA (frame, 0); p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->up = GST_VIDEO_FRAME_DATA (frame, 1); p->up = GST_VIDEO_FRAME_PLANE_DATA (frame, 1);
p->ustride = GST_VIDEO_FRAME_STRIDE (frame, 1); p->ustride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 1);
p->vp = GST_VIDEO_FRAME_DATA (frame, 2); p->vp = GST_VIDEO_FRAME_PLANE_DATA (frame, 2);
p->vstride = GST_VIDEO_FRAME_STRIDE (frame, 2); p->vstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 2);
p->size = frame->info.size; p->size = frame->info.size;
} }
static void static void
paint_setup_v308 (paintinfo * p, GstVideoFrame * frame) paint_setup_v308 (paintinfo * p, GstVideoFrame * frame)
{ {
p->yp = GST_VIDEO_FRAME_DATA (frame, 0); p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->up = p->yp + 1; p->up = p->yp + 1;
p->vp = p->yp + 2; p->vp = p->yp + 2;
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->ustride = p->ystride; p->ustride = p->ystride;
p->vstride = p->ystride; p->vstride = p->ystride;
p->size = frame->info.size; p->size = frame->info.size;
@ -1677,11 +1677,11 @@ paint_setup_v308 (paintinfo * p, GstVideoFrame * frame)
static void static void
paint_setup_AYUV (paintinfo * p, GstVideoFrame * frame) paint_setup_AYUV (paintinfo * p, GstVideoFrame * frame)
{ {
p->ap = GST_VIDEO_FRAME_DATA (frame, 0); p->ap = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->yp = p->ap + 1; p->yp = p->ap + 1;
p->up = p->ap + 2; p->up = p->ap + 2;
p->vp = p->ap + 3; p->vp = p->ap + 3;
p->astride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->astride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->ystride = p->astride;; p->ystride = p->astride;;
p->ustride = p->astride; p->ustride = p->astride;
p->vstride = p->astride; p->vstride = p->astride;
@ -1704,11 +1704,11 @@ paint_setup_v410 (paintinfo * p, GstVideoFrame * frame)
static void static void
paint_setup_v216 (paintinfo * p, GstVideoFrame * frame) paint_setup_v216 (paintinfo * p, GstVideoFrame * frame)
{ {
p->ap = GST_VIDEO_FRAME_DATA (frame, 0); p->ap = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->yp = p->ap + 2; p->yp = p->ap + 2;
p->up = p->ap + 0; p->up = p->ap + 0;
p->vp = p->ap + 4; p->vp = p->ap + 4;
p->astride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->astride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->ystride = p->astride;; p->ystride = p->astride;;
p->ustride = p->astride; p->ustride = p->astride;
p->vstride = p->astride; p->vstride = p->astride;
@ -1718,11 +1718,11 @@ paint_setup_v216 (paintinfo * p, GstVideoFrame * frame)
static void static void
paint_setup_v210 (paintinfo * p, GstVideoFrame * frame) paint_setup_v210 (paintinfo * p, GstVideoFrame * frame)
{ {
p->ap = GST_VIDEO_FRAME_DATA (frame, 0); p->ap = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->yp = p->ap; p->yp = p->ap;
p->up = p->ap; p->up = p->ap;
p->vp = p->ap; p->vp = p->ap;
p->astride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->astride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->ystride = p->astride;; p->ystride = p->astride;;
p->ustride = p->astride; p->ustride = p->astride;
p->vstride = p->astride; p->vstride = p->astride;
@ -1732,11 +1732,11 @@ paint_setup_v210 (paintinfo * p, GstVideoFrame * frame)
static void static void
paint_setup_UYVP (paintinfo * p, GstVideoFrame * frame) paint_setup_UYVP (paintinfo * p, GstVideoFrame * frame)
{ {
p->ap = GST_VIDEO_FRAME_DATA (frame, 0); p->ap = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->yp = p->ap; p->yp = p->ap;
p->up = p->ap; p->up = p->ap;
p->vp = p->ap; p->vp = p->ap;
p->astride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->astride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->ystride = p->astride;; p->ystride = p->astride;;
p->ustride = p->astride; p->ustride = p->astride;
p->vstride = p->astride; p->vstride = p->astride;
@ -1746,10 +1746,10 @@ paint_setup_UYVP (paintinfo * p, GstVideoFrame * frame)
static void static void
paint_setup_YUY2 (paintinfo * p, GstVideoFrame * frame) paint_setup_YUY2 (paintinfo * p, GstVideoFrame * frame)
{ {
p->yp = GST_VIDEO_FRAME_DATA (frame, 0); p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->up = p->yp + 1; p->up = p->yp + 1;
p->vp = p->yp + 3; p->vp = p->yp + 3;
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->ustride = p->ystride; p->ustride = p->ystride;
p->vstride = p->ystride; p->vstride = p->ystride;
p->size = frame->info.size; p->size = frame->info.size;
@ -1758,10 +1758,10 @@ paint_setup_YUY2 (paintinfo * p, GstVideoFrame * frame)
static void static void
paint_setup_UYVY (paintinfo * p, GstVideoFrame * frame) paint_setup_UYVY (paintinfo * p, GstVideoFrame * frame)
{ {
p->up = GST_VIDEO_FRAME_DATA (frame, 0); p->up = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->yp = p->up + 1; p->yp = p->up + 1;
p->vp = p->up + 2; p->vp = p->up + 2;
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->ustride = p->ystride; p->ustride = p->ystride;
p->vstride = p->ystride; p->vstride = p->ystride;
p->size = frame->info.size; p->size = frame->info.size;
@ -1770,10 +1770,10 @@ paint_setup_UYVY (paintinfo * p, GstVideoFrame * frame)
static void static void
paint_setup_YVYU (paintinfo * p, GstVideoFrame * frame) paint_setup_YVYU (paintinfo * p, GstVideoFrame * frame)
{ {
p->yp = GST_VIDEO_FRAME_DATA (frame, 0); p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->up = p->yp + 3; p->up = p->yp + 3;
p->vp = p->yp + 1; p->vp = p->yp + 1;
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->ustride = p->ystride; p->ustride = p->ystride;
p->vstride = p->ystride; p->vstride = p->ystride;
p->size = frame->info.size; p->size = frame->info.size;
@ -1782,11 +1782,11 @@ paint_setup_YVYU (paintinfo * p, GstVideoFrame * frame)
static void static void
paint_setup_AY64 (paintinfo * p, GstVideoFrame * frame) paint_setup_AY64 (paintinfo * p, GstVideoFrame * frame)
{ {
p->ap = GST_VIDEO_FRAME_DATA (frame, 0); p->ap = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->yp = p->ap + 2; p->yp = p->ap + 2;
p->up = p->ap + 4; p->up = p->ap + 4;
p->vp = p->ap + 6; p->vp = p->ap + 6;
p->astride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->astride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->ystride = p->astride; p->ystride = p->astride;
p->ustride = p->astride; p->ustride = p->astride;
p->vstride = p->astride; p->vstride = p->astride;
@ -1977,10 +1977,10 @@ static void
paint_setup_IYU2 (paintinfo * p, GstVideoFrame * frame) paint_setup_IYU2 (paintinfo * p, GstVideoFrame * frame)
{ {
/* untested */ /* untested */
p->up = GST_VIDEO_FRAME_DATA (frame, 0); p->up = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->yp = p->up + 1; p->yp = p->up + 1;
p->vp = p->up + 2; p->vp = p->up + 2;
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->ustride = p->ystride; p->ustride = p->ystride;
p->vstride = p->ystride; p->vstride = p->ystride;
p->size = frame->info.size; p->size = frame->info.size;
@ -2006,12 +2006,12 @@ convert_hline_IYU2 (paintinfo * p, int y)
static void static void
paint_setup_Y41B (paintinfo * p, GstVideoFrame * frame) paint_setup_Y41B (paintinfo * p, GstVideoFrame * frame)
{ {
p->yp = GST_VIDEO_FRAME_DATA (frame, 0); p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->up = GST_VIDEO_FRAME_DATA (frame, 1); p->up = GST_VIDEO_FRAME_PLANE_DATA (frame, 1);
p->vp = GST_VIDEO_FRAME_DATA (frame, 2); p->vp = GST_VIDEO_FRAME_PLANE_DATA (frame, 2);
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->ustride = GST_VIDEO_FRAME_STRIDE (frame, 1); p->ustride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 1);
p->vstride = GST_VIDEO_FRAME_STRIDE (frame, 2); p->vstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 2);
p->size = frame->info.size; p->size = frame->info.size;
} }
@ -2038,12 +2038,12 @@ convert_hline_Y41B (paintinfo * p, int y)
static void static void
paint_setup_Y42B (paintinfo * p, GstVideoFrame * frame) paint_setup_Y42B (paintinfo * p, GstVideoFrame * frame)
{ {
p->yp = GST_VIDEO_FRAME_DATA (frame, 0); p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->up = GST_VIDEO_FRAME_DATA (frame, 1); p->up = GST_VIDEO_FRAME_PLANE_DATA (frame, 1);
p->vp = GST_VIDEO_FRAME_DATA (frame, 2); p->vp = GST_VIDEO_FRAME_PLANE_DATA (frame, 2);
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->ustride = GST_VIDEO_FRAME_STRIDE (frame, 1); p->ustride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 1);
p->vstride = GST_VIDEO_FRAME_STRIDE (frame, 2); p->vstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 2);
p->size = frame->info.size; p->size = frame->info.size;
} }
@ -2068,12 +2068,12 @@ convert_hline_Y42B (paintinfo * p, int y)
static void static void
paint_setup_Y444 (paintinfo * p, GstVideoFrame * frame) paint_setup_Y444 (paintinfo * p, GstVideoFrame * frame)
{ {
p->yp = GST_VIDEO_FRAME_DATA (frame, 0); p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->up = GST_VIDEO_FRAME_DATA (frame, 1); p->up = GST_VIDEO_FRAME_PLANE_DATA (frame, 1);
p->vp = GST_VIDEO_FRAME_DATA (frame, 2); p->vp = GST_VIDEO_FRAME_PLANE_DATA (frame, 2);
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->ustride = GST_VIDEO_FRAME_STRIDE (frame, 1); p->ustride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 1);
p->vstride = GST_VIDEO_FRAME_STRIDE (frame, 2); p->vstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 2);
p->size = frame->info.size; p->size = frame->info.size;
} }
@ -2097,8 +2097,8 @@ static void
paint_setup_Y800 (paintinfo * p, GstVideoFrame * frame) paint_setup_Y800 (paintinfo * p, GstVideoFrame * frame)
{ {
/* untested */ /* untested */
p->yp = GST_VIDEO_FRAME_DATA (frame, 0); p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->size = frame->info.size; p->size = frame->info.size;
} }
@ -2117,24 +2117,24 @@ convert_hline_Y800 (paintinfo * p, int y)
static void static void
paint_setup_YVU9 (paintinfo * p, GstVideoFrame * frame) paint_setup_YVU9 (paintinfo * p, GstVideoFrame * frame)
{ {
p->yp = GST_VIDEO_FRAME_DATA (frame, 0); p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->up = GST_VIDEO_FRAME_DATA (frame, 1); p->up = GST_VIDEO_FRAME_PLANE_DATA (frame, 1);
p->vp = GST_VIDEO_FRAME_DATA (frame, 2); p->vp = GST_VIDEO_FRAME_PLANE_DATA (frame, 2);
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->ustride = GST_VIDEO_FRAME_STRIDE (frame, 1); p->ustride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 1);
p->vstride = GST_VIDEO_FRAME_STRIDE (frame, 2); p->vstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 2);
p->size = frame->info.size; p->size = frame->info.size;
} }
static void static void
paint_setup_YUV9 (paintinfo * p, GstVideoFrame * frame) paint_setup_YUV9 (paintinfo * p, GstVideoFrame * frame)
{ {
p->yp = GST_VIDEO_FRAME_DATA (frame, 0); p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->up = GST_VIDEO_FRAME_DATA (frame, 1); p->up = GST_VIDEO_FRAME_PLANE_DATA (frame, 1);
p->vp = GST_VIDEO_FRAME_DATA (frame, 2); p->vp = GST_VIDEO_FRAME_PLANE_DATA (frame, 2);
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->ustride = GST_VIDEO_FRAME_STRIDE (frame, 1); p->ustride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 1);
p->vstride = GST_VIDEO_FRAME_STRIDE (frame, 2); p->vstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 2);
p->size = frame->info.size; p->size = frame->info.size;
} }
@ -2185,11 +2185,11 @@ paint_setup_BGRA8888 (paintinfo * p, GstVideoFrame * frame)
static void static void
paint_setup_xRGB8888 (paintinfo * p, GstVideoFrame * frame) paint_setup_xRGB8888 (paintinfo * p, GstVideoFrame * frame)
{ {
p->ap = GST_VIDEO_FRAME_DATA (frame, 0); p->ap = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->yp = p->ap + 1; p->yp = p->ap + 1;
p->up = p->ap + 2; p->up = p->ap + 2;
p->vp = p->ap + 3; p->vp = p->ap + 3;
p->astride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->astride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->ystride = p->astride; p->ystride = p->astride;
p->ustride = p->astride; p->ustride = p->astride;
p->vstride = p->astride; p->vstride = p->astride;
@ -2199,11 +2199,11 @@ paint_setup_xRGB8888 (paintinfo * p, GstVideoFrame * frame)
static void static void
paint_setup_xBGR8888 (paintinfo * p, GstVideoFrame * frame) paint_setup_xBGR8888 (paintinfo * p, GstVideoFrame * frame)
{ {
p->ap = GST_VIDEO_FRAME_DATA (frame, 0); p->ap = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->yp = p->ap + 3; p->yp = p->ap + 3;
p->up = p->ap + 2; p->up = p->ap + 2;
p->vp = p->ap + 1; p->vp = p->ap + 1;
p->astride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->astride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->ystride = p->astride; p->ystride = p->astride;
p->ustride = p->astride; p->ustride = p->astride;
p->vstride = p->astride; p->vstride = p->astride;
@ -2213,11 +2213,11 @@ paint_setup_xBGR8888 (paintinfo * p, GstVideoFrame * frame)
static void static void
paint_setup_RGBx8888 (paintinfo * p, GstVideoFrame * frame) paint_setup_RGBx8888 (paintinfo * p, GstVideoFrame * frame)
{ {
p->yp = GST_VIDEO_FRAME_DATA (frame, 0); p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->up = p->yp + 1; p->up = p->yp + 1;
p->vp = p->yp + 2; p->vp = p->yp + 2;
p->ap = p->yp + 3; p->ap = p->yp + 3;
p->astride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->astride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->ystride = p->astride; p->ystride = p->astride;
p->ustride = p->astride; p->ustride = p->astride;
p->vstride = p->astride; p->vstride = p->astride;
@ -2227,11 +2227,11 @@ paint_setup_RGBx8888 (paintinfo * p, GstVideoFrame * frame)
static void static void
paint_setup_BGRx8888 (paintinfo * p, GstVideoFrame * frame) paint_setup_BGRx8888 (paintinfo * p, GstVideoFrame * frame)
{ {
p->vp = GST_VIDEO_FRAME_DATA (frame, 0); p->vp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->up = p->vp + 1; p->up = p->vp + 1;
p->yp = p->vp + 2; p->yp = p->vp + 2;
p->ap = p->vp + 3; p->ap = p->vp + 3;
p->astride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->astride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->ystride = p->astride; p->ystride = p->astride;
p->ustride = p->astride; p->ustride = p->astride;
p->vstride = p->astride; p->vstride = p->astride;
@ -2241,10 +2241,10 @@ paint_setup_BGRx8888 (paintinfo * p, GstVideoFrame * frame)
static void static void
paint_setup_RGB888 (paintinfo * p, GstVideoFrame * frame) paint_setup_RGB888 (paintinfo * p, GstVideoFrame * frame)
{ {
p->yp = GST_VIDEO_FRAME_DATA (frame, 0); p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->up = p->yp + 1; p->up = p->yp + 1;
p->vp = p->yp + 2; p->vp = p->yp + 2;
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->ustride = p->ystride; p->ustride = p->ystride;
p->vstride = p->ystride; p->vstride = p->ystride;
p->size = frame->info.size; p->size = frame->info.size;
@ -2253,10 +2253,10 @@ paint_setup_RGB888 (paintinfo * p, GstVideoFrame * frame)
static void static void
paint_setup_BGR888 (paintinfo * p, GstVideoFrame * frame) paint_setup_BGR888 (paintinfo * p, GstVideoFrame * frame)
{ {
p->vp = GST_VIDEO_FRAME_DATA (frame, 0); p->vp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->up = p->vp + 1; p->up = p->vp + 1;
p->yp = p->vp + 2; p->yp = p->vp + 2;
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->ustride = p->ystride; p->ustride = p->ystride;
p->vstride = p->ystride; p->vstride = p->ystride;
p->size = frame->info.size; p->size = frame->info.size;
@ -2265,11 +2265,11 @@ paint_setup_BGR888 (paintinfo * p, GstVideoFrame * frame)
static void static void
paint_setup_ARGB64 (paintinfo * p, GstVideoFrame * frame) paint_setup_ARGB64 (paintinfo * p, GstVideoFrame * frame)
{ {
p->ap = GST_VIDEO_FRAME_DATA (frame, 0); p->ap = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->yp = p->ap + 2; p->yp = p->ap + 2;
p->up = p->ap + 4; p->up = p->ap + 4;
p->yp = p->ap + 6; p->yp = p->ap + 6;
p->astride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->astride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->ystride = p->astride; p->ystride = p->astride;
p->ustride = p->astride; p->ustride = p->astride;
p->vstride = p->astride; p->vstride = p->astride;
@ -2349,8 +2349,8 @@ convert_hline_str3 (paintinfo * p, int y)
static void static void
paint_setup_RGB565 (paintinfo * p, GstVideoFrame * frame) paint_setup_RGB565 (paintinfo * p, GstVideoFrame * frame)
{ {
p->yp = GST_VIDEO_FRAME_DATA (frame, 0); p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->ustride = p->ystride; p->ustride = p->ystride;
p->vstride = p->ystride; p->vstride = p->ystride;
p->size = frame->info.size; p->size = frame->info.size;
@ -2395,8 +2395,8 @@ convert_hline_xRGB1555 (paintinfo * p, int y)
static void static void
paint_setup_xRGB1555 (paintinfo * p, GstVideoFrame * frame) paint_setup_xRGB1555 (paintinfo * p, GstVideoFrame * frame)
{ {
p->yp = GST_VIDEO_FRAME_DATA (frame, 0); p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->ustride = p->ystride; p->ustride = p->ystride;
p->vstride = p->ystride; p->vstride = p->ystride;
p->size = frame->info.size; p->size = frame->info.size;
@ -2406,7 +2406,7 @@ paint_setup_xRGB1555 (paintinfo * p, GstVideoFrame * frame)
static void static void
paint_setup_bayer_bggr (paintinfo * p, GstVideoFrame * frame) paint_setup_bayer_bggr (paintinfo * p, GstVideoFrame * frame)
{ {
p->yp = GST_VIDEO_FRAME_DATA (frame, 0); p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->ystride = GST_ROUND_UP_4 (p->width); p->ystride = GST_ROUND_UP_4 (p->width);
p->ustride = GST_ROUND_UP_4 (p->width); p->ustride = GST_ROUND_UP_4 (p->width);
p->vstride = GST_ROUND_UP_4 (p->width); p->vstride = GST_ROUND_UP_4 (p->width);
@ -2418,7 +2418,7 @@ paint_setup_bayer_bggr (paintinfo * p, GstVideoFrame * frame)
static void static void
paint_setup_bayer_rggb (paintinfo * p, GstVideoFrame * frame) paint_setup_bayer_rggb (paintinfo * p, GstVideoFrame * frame)
{ {
p->yp = GST_VIDEO_FRAME_DATA (frame, 0); p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->ystride = GST_ROUND_UP_4 (p->width); p->ystride = GST_ROUND_UP_4 (p->width);
p->ustride = GST_ROUND_UP_4 (p->width); p->ustride = GST_ROUND_UP_4 (p->width);
p->vstride = GST_ROUND_UP_4 (p->width); p->vstride = GST_ROUND_UP_4 (p->width);
@ -2430,7 +2430,7 @@ paint_setup_bayer_rggb (paintinfo * p, GstVideoFrame * frame)
static void static void
paint_setup_bayer_grbg (paintinfo * p, GstVideoFrame * frame) paint_setup_bayer_grbg (paintinfo * p, GstVideoFrame * frame)
{ {
p->yp = GST_VIDEO_FRAME_DATA (frame, 0); p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->ystride = GST_ROUND_UP_4 (p->width); p->ystride = GST_ROUND_UP_4 (p->width);
p->ustride = GST_ROUND_UP_4 (p->width); p->ustride = GST_ROUND_UP_4 (p->width);
p->vstride = GST_ROUND_UP_4 (p->width); p->vstride = GST_ROUND_UP_4 (p->width);
@ -2442,7 +2442,7 @@ paint_setup_bayer_grbg (paintinfo * p, GstVideoFrame * frame)
static void static void
paint_setup_bayer_gbrg (paintinfo * p, GstVideoFrame * frame) paint_setup_bayer_gbrg (paintinfo * p, GstVideoFrame * frame)
{ {
p->yp = GST_VIDEO_FRAME_DATA (frame, 0); p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->ystride = GST_ROUND_UP_4 (p->width); p->ystride = GST_ROUND_UP_4 (p->width);
p->ustride = GST_ROUND_UP_4 (p->width); p->ustride = GST_ROUND_UP_4 (p->width);
p->vstride = GST_ROUND_UP_4 (p->width); p->vstride = GST_ROUND_UP_4 (p->width);
@ -2482,8 +2482,8 @@ convert_hline_bayer (paintinfo * p, int y)
static void static void
paint_setup_GRAY8 (paintinfo * p, GstVideoFrame * frame) paint_setup_GRAY8 (paintinfo * p, GstVideoFrame * frame)
{ {
p->yp = GST_VIDEO_FRAME_DATA (frame, 0); p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->size = frame->info.size; p->size = frame->info.size;
} }
@ -2503,8 +2503,8 @@ convert_hline_GRAY8 (paintinfo * p, int y)
static void static void
paint_setup_GRAY16 (paintinfo * p, GstVideoFrame * frame) paint_setup_GRAY16 (paintinfo * p, GstVideoFrame * frame)
{ {
p->yp = GST_VIDEO_FRAME_DATA (frame, 0); p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0); p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
p->size = frame->info.size; p->size = frame->info.size;
} }

View file

@ -508,21 +508,25 @@ ximage_buffer_pool_alloc (GstBufferPool * pool, GstBuffer ** buffer,
{ {
GstXImageBufferPool *xpool = GST_XIMAGE_BUFFER_POOL_CAST (pool); GstXImageBufferPool *xpool = GST_XIMAGE_BUFFER_POOL_CAST (pool);
GstXImageBufferPoolPrivate *priv = xpool->priv; GstXImageBufferPoolPrivate *priv = xpool->priv;
GstVideoInfo *info;
GstBuffer *ximage; GstBuffer *ximage;
GstMetaXImage *meta; GstMetaXImage *meta;
info = &priv->info;
ximage = gst_buffer_new (); ximage = gst_buffer_new ();
meta = meta =
gst_buffer_add_meta_ximage (ximage, xpool->sink, priv->info.width, gst_buffer_add_meta_ximage (ximage, xpool->sink,
priv->info.height); GST_VIDEO_INFO_WIDTH (info), GST_VIDEO_INFO_HEIGHT (info));
if (meta == NULL) { if (meta == NULL) {
gst_buffer_unref (ximage); gst_buffer_unref (ximage);
goto no_buffer; goto no_buffer;
} }
if (priv->add_metavideo) { if (priv->add_metavideo) {
GST_DEBUG_OBJECT (pool, "adding GstMetaVideo");
/* these are just the defaults for now */ /* these are just the defaults for now */
gst_buffer_add_meta_video (ximage, 0, priv->info.format, priv->info.width, gst_buffer_add_meta_video (ximage, 0, GST_VIDEO_INFO_FORMAT (info),
priv->info.height); GST_VIDEO_INFO_WIDTH (info), GST_VIDEO_INFO_HEIGHT (info));
} }
*buffer = ximage; *buffer = ximage;

View file

@ -555,22 +555,27 @@ xvimage_buffer_pool_alloc (GstBufferPool * pool, GstBuffer ** buffer,
{ {
GstXvImageBufferPool *xvpool = GST_XVIMAGE_BUFFER_POOL_CAST (pool); GstXvImageBufferPool *xvpool = GST_XVIMAGE_BUFFER_POOL_CAST (pool);
GstXvImageBufferPoolPrivate *priv = xvpool->priv; GstXvImageBufferPoolPrivate *priv = xvpool->priv;
GstVideoInfo *info;
GstBuffer *xvimage; GstBuffer *xvimage;
GstMetaXvImage *meta; GstMetaXvImage *meta;
info = &priv->info;
xvimage = gst_buffer_new (); xvimage = gst_buffer_new ();
meta = meta =
gst_buffer_add_meta_xvimage (xvimage, xvpool->sink, priv->info.width, gst_buffer_add_meta_xvimage (xvimage, xvpool->sink,
priv->info.height, priv->im_format); GST_VIDEO_INFO_WIDTH (info), GST_VIDEO_INFO_HEIGHT (info),
priv->im_format);
if (meta == NULL) { if (meta == NULL) {
gst_buffer_unref (xvimage); gst_buffer_unref (xvimage);
goto no_buffer; goto no_buffer;
} }
if (priv->add_metavideo) { if (priv->add_metavideo) {
GST_DEBUG_OBJECT (pool, "adding GstMetaVideo");
/* these are just the defaults for now */ /* these are just the defaults for now */
gst_buffer_add_meta_video (xvimage, 0, priv->info.format, priv->info.width, gst_buffer_add_meta_video (xvimage, 0, GST_VIDEO_INFO_FORMAT (info),
priv->info.height); GST_VIDEO_INFO_WIDTH (info), GST_VIDEO_INFO_HEIGHT (info));
} }
*buffer = xvimage; *buffer = xvimage;