mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-28 03:00:35 +00:00
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:
parent
ebfd6acde1
commit
ddce68a5c2
15 changed files with 691 additions and 1310 deletions
|
@ -764,9 +764,9 @@ gst_base_text_overlay_setcaps (GstBaseTextOverlay * overlay, GstCaps * caps)
|
|||
goto invalid_caps;
|
||||
|
||||
overlay->info = info;
|
||||
overlay->format = info.format;
|
||||
overlay->width = info.width;
|
||||
overlay->height = info.height;
|
||||
overlay->format = GST_VIDEO_INFO_FORMAT (&info);
|
||||
overlay->width = GST_VIDEO_INFO_WIDTH (&info);
|
||||
overlay->height = GST_VIDEO_INFO_HEIGHT (&info);
|
||||
|
||||
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)
|
||||
{
|
||||
gint i, j;
|
||||
guint dest_stride, pixel_stride, component_offset;
|
||||
guint dest_stride, pixel_stride;
|
||||
guint8 *dest_ptr;
|
||||
|
||||
dest_stride = dest->info.stride[0];
|
||||
dest_ptr = dest->data[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);
|
||||
dest_stride = GST_VIDEO_FRAME_COMP_STRIDE (dest, 0);
|
||||
dest_ptr = GST_VIDEO_FRAME_COMP_DATA (dest, 0);
|
||||
pixel_stride = GST_VIDEO_FRAME_COMP_PSTRIDE (dest, 0);
|
||||
|
||||
x0 = CLAMP (x0 - 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);
|
||||
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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 (j = x0; j < x1; j++) {
|
||||
gint y;
|
||||
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;
|
||||
|
||||
dest_ptr[y_pos] = CLAMP (y, 0, 255);
|
||||
|
|
|
@ -329,6 +329,7 @@ gst_text_render_check_argb (GstTextRender * render)
|
|||
for (i = 0; i < n; i++) {
|
||||
GstStructure *s;
|
||||
GstVideoFormat vformat;
|
||||
const GstVideoFormatInfo *info;
|
||||
const gchar *fmt;
|
||||
|
||||
s = gst_caps_get_structure (peer_caps, i);
|
||||
|
@ -340,7 +341,11 @@ gst_text_render_check_argb (GstTextRender * render)
|
|||
continue;
|
||||
|
||||
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);
|
||||
}
|
||||
|
|
|
@ -1111,7 +1111,7 @@ theora_handle_image (GstTheoraDec * dec, th_ycbcr_buffer buf, GstBuffer ** out)
|
|||
gint width, height, stride;
|
||||
gint pic_width, pic_height;
|
||||
GstFlowReturn result;
|
||||
int i, plane;
|
||||
int i, comp;
|
||||
guint8 *dest, *src;
|
||||
GstVideoFrame frame;
|
||||
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 =
|
||||
gst_video_format_get_component_width (frame.info.format, plane,
|
||||
pic_width);
|
||||
GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (frame.info.finfo, comp, pic_width);
|
||||
height =
|
||||
gst_video_format_get_component_height (frame.info.format, plane,
|
||||
pic_height);
|
||||
GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (frame.info.finfo, comp, 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);
|
||||
dest = GST_VIDEO_FRAME_DATA (&frame, plane);
|
||||
|
||||
src = buf[plane].data;
|
||||
src = buf[comp].data;
|
||||
src += ((height == pic_height) ? offset_y : offset_y / 2)
|
||||
* buf[plane].stride;
|
||||
* buf[comp].stride;
|
||||
src += (width == pic_width) ? offset_x : offset_x / 2;
|
||||
|
||||
for (i = 0; i < height; i++) {
|
||||
memcpy (dest, src, width);
|
||||
|
||||
dest += stride;
|
||||
src += buf[plane].stride;
|
||||
src += buf[comp].stride;
|
||||
}
|
||||
}
|
||||
gst_video_frame_unmap (&frame);
|
||||
|
|
|
@ -668,7 +668,7 @@ theora_enc_sink_setcaps (GstTheoraEnc * enc, GstCaps * caps)
|
|||
enc->info.pic_width = info.width;
|
||||
enc->info.pic_height = info.height;
|
||||
|
||||
switch (info.format) {
|
||||
switch (GST_VIDEO_INFO_FORMAT (&info)) {
|
||||
case GST_VIDEO_FORMAT_I420:
|
||||
enc->info.pixel_fmt = TH_PF_420;
|
||||
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.
|
||||
*/
|
||||
for (i = 0; i < 3; i++) {
|
||||
buf[i].width =
|
||||
gst_video_format_get_component_width (format, i, info->frame_width);
|
||||
buf[i].height =
|
||||
gst_video_format_get_component_height (format, i, info->frame_height);
|
||||
|
||||
buf[i].data = GST_VIDEO_FRAME_DATA (frame, i);
|
||||
buf[i].stride = GST_VIDEO_FRAME_STRIDE (frame, i);
|
||||
buf[i].width = GST_VIDEO_FRAME_COMP_WIDTH (frame, i);
|
||||
buf[i].height = GST_VIDEO_FRAME_COMP_HEIGHT (frame, i);
|
||||
buf[i].data = GST_VIDEO_FRAME_COMP_DATA (frame, i);
|
||||
buf[i].stride = GST_VIDEO_FRAME_COMP_STRIDE (frame, i);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -61,7 +61,7 @@ gst_buffer_add_meta_video (GstBuffer * buffer, GstVideoFlags flags,
|
|||
gst_video_info_set_format (&info, 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;
|
||||
}
|
||||
|
|
|
@ -47,7 +47,7 @@ typedef struct _GstMetaVideoCrop GstMetaVideoCrop;
|
|||
* Extra buffer metadata describing image properties
|
||||
*/
|
||||
struct _GstMetaVideo {
|
||||
GstMeta meta;
|
||||
GstMeta meta;
|
||||
|
||||
GstBuffer *buffer;
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -121,6 +121,76 @@ typedef enum {
|
|||
GST_VIDEO_FORMAT_r210
|
||||
} 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 */
|
||||
GstVideoFormat gst_video_format_from_masks (gint depth, gint bpp, gint endianness,
|
||||
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;
|
||||
const gchar * gst_video_format_to_string (GstVideoFormat format) G_GNUC_CONST;
|
||||
|
||||
gboolean gst_video_format_is_rgb (GstVideoFormat format) G_GNUC_CONST;
|
||||
gboolean gst_video_format_is_yuv (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;
|
||||
const GstVideoFormatInfo *
|
||||
gst_video_format_get_info (GstVideoFormat format) G_GNUC_CONST;
|
||||
|
||||
typedef struct _GstVideoInfo GstVideoInfo;
|
||||
typedef struct _GstVideoFrame GstVideoFrame;
|
||||
|
@ -168,8 +230,6 @@ typedef enum {
|
|||
GST_VIDEO_FLAG_PROGRESSIVE = (1 << 5)
|
||||
} GstVideoFlags;
|
||||
|
||||
#define GST_VIDEO_MAX_PLANES 4
|
||||
|
||||
/**
|
||||
* GstVideoInfo:
|
||||
* @flags: additional video flags
|
||||
|
@ -190,33 +250,51 @@ typedef enum {
|
|||
* @par_d: the pixel-aspect-ratio demnominator
|
||||
* @fps_n: the framerate numerator
|
||||
* @fps_d: the framerate demnominator
|
||||
* @n_planes: the number of planes in the image
|
||||
* @offset: offsets of the planes
|
||||
* @stride: strides of the planes
|
||||
*
|
||||
* Extra buffer metadata describing image properties
|
||||
*/
|
||||
struct _GstVideoInfo {
|
||||
GstVideoFormat format;
|
||||
GstVideoFlags flags;
|
||||
gint width;
|
||||
gint height;
|
||||
guint size;
|
||||
const GstVideoFormatInfo *finfo;
|
||||
GstVideoFlags flags;
|
||||
gint width;
|
||||
gint height;
|
||||
guint size;
|
||||
|
||||
const gchar *color_matrix;
|
||||
const gchar *chroma_site;
|
||||
GstBuffer *palette;
|
||||
const gchar *color_matrix;
|
||||
const gchar *chroma_site;
|
||||
GstBuffer *palette;
|
||||
|
||||
gint par_n;
|
||||
gint par_d;
|
||||
gint fps_n;
|
||||
gint fps_d;
|
||||
gint par_n;
|
||||
gint par_d;
|
||||
gint fps_n;
|
||||
gint fps_d;
|
||||
|
||||
guint n_planes;
|
||||
gsize offset[GST_VIDEO_MAX_PLANES];
|
||||
gint stride[GST_VIDEO_MAX_PLANES];
|
||||
gsize offset[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_set_format (GstVideoInfo *info, GstVideoFormat format,
|
||||
|
@ -236,6 +314,7 @@ gboolean gst_video_info_convert (GstVideoInfo *info,
|
|||
* GstVideoFrame:
|
||||
* @info: the #GstVideoInfo
|
||||
* @buffer: the mapped buffer
|
||||
* @meta: pointer to metadata if any
|
||||
* @data: pointers to the plane data
|
||||
*
|
||||
* A video frame obtained from gst_video_frame_map()
|
||||
|
@ -246,18 +325,33 @@ struct _GstVideoFrame {
|
|||
GstBuffer *buffer;
|
||||
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,
|
||||
GstBuffer *buffer, GstMapFlags flags);
|
||||
void gst_video_frame_unmap (GstVideoFrame *frame);
|
||||
|
||||
gboolean gst_video_frame_map (GstVideoFrame *frame, GstVideoInfo *info,
|
||||
GstBuffer *buffer, GstMapFlags flags);
|
||||
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_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);
|
||||
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 */
|
||||
|
||||
GstEvent * gst_video_event_new_still_frame (gboolean in_still);
|
||||
|
|
|
@ -198,9 +198,9 @@ gst_video_convert_set_caps (GstBaseTransform * btrans, GstCaps * incaps,
|
|||
if (!gst_video_info_from_caps (&in_info, incaps))
|
||||
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;
|
||||
} 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"))
|
||||
in_spec = COLOR_SPEC_YUV_BT709;
|
||||
else
|
||||
|
@ -213,9 +213,9 @@ gst_video_convert_set_caps (GstBaseTransform * btrans, GstCaps * incaps,
|
|||
if (!gst_video_info_from_caps (&out_info, outcaps))
|
||||
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;
|
||||
} 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"))
|
||||
out_spec = COLOR_SPEC_YUV_BT709;
|
||||
else
|
||||
|
@ -246,18 +246,21 @@ gst_video_convert_set_caps (GstBaseTransform * btrans, GstCaps * incaps,
|
|||
interlaced = (in_info.flags & GST_VIDEO_FLAG_INTERLACED) != 0;
|
||||
|
||||
space->convert =
|
||||
videoconvert_convert_new (out_info.format, out_spec, in_info.format,
|
||||
in_spec, in_info.width, in_info.height);
|
||||
videoconvert_convert_new (GST_VIDEO_INFO_FORMAT (&out_info), out_spec,
|
||||
GST_VIDEO_INFO_FORMAT (&in_info), in_spec, in_info.width, in_info.height);
|
||||
if (space->convert == NULL)
|
||||
goto no_convert;
|
||||
|
||||
videoconvert_convert_set_interlaced (space->convert, interlaced);
|
||||
|
||||
/* palette, only for from data */
|
||||
if (space->from_info.format == GST_VIDEO_FORMAT_RGB8_PALETTED &&
|
||||
space->to_info.format == GST_VIDEO_FORMAT_RGB8_PALETTED) {
|
||||
if (GST_VIDEO_INFO_FORMAT (&space->from_info) ==
|
||||
GST_VIDEO_FORMAT_RGB8_PALETTED
|
||||
&& GST_VIDEO_INFO_FORMAT (&space->to_info) ==
|
||||
GST_VIDEO_FORMAT_RGB8_PALETTED) {
|
||||
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;
|
||||
guint32 *data;
|
||||
|
||||
|
@ -274,7 +277,8 @@ gst_video_convert_set_caps (GstBaseTransform * btrans, GstCaps * incaps,
|
|||
gst_buffer_unmap (palette, data, -1);
|
||||
|
||||
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;
|
||||
GstBuffer *p_buf;
|
||||
|
||||
|
@ -286,8 +290,10 @@ gst_video_convert_set_caps (GstBaseTransform * btrans, GstCaps * incaps,
|
|||
gst_buffer_unref (p_buf);
|
||||
}
|
||||
|
||||
GST_DEBUG ("reconfigured %d %d", space->from_info.format,
|
||||
space->to_info.format);
|
||||
GST_DEBUG ("reconfigured %d %d", GST_VIDEO_INFO_FORMAT (&space->from_info),
|
||||
GST_VIDEO_INFO_FORMAT (&space->to_info));
|
||||
|
||||
space->negotiated = TRUE;
|
||||
|
||||
return TRUE;
|
||||
|
||||
|
@ -295,29 +301,26 @@ gst_video_convert_set_caps (GstBaseTransform * btrans, GstCaps * incaps,
|
|||
invalid_caps:
|
||||
{
|
||||
GST_ERROR_OBJECT (space, "invalid caps");
|
||||
space->from_info.format = GST_VIDEO_FORMAT_UNKNOWN;
|
||||
space->to_info.format = GST_VIDEO_FORMAT_UNKNOWN;
|
||||
return FALSE;
|
||||
goto error_done;
|
||||
}
|
||||
format_mismatch:
|
||||
{
|
||||
GST_ERROR_OBJECT (space, "input and output formats do not match");
|
||||
space->from_info.format = GST_VIDEO_FORMAT_UNKNOWN;
|
||||
space->to_info.format = GST_VIDEO_FORMAT_UNKNOWN;
|
||||
return FALSE;
|
||||
goto error_done;
|
||||
}
|
||||
no_convert:
|
||||
{
|
||||
GST_ERROR_OBJECT (space, "could not create converter");
|
||||
space->from_info.format = GST_VIDEO_FORMAT_UNKNOWN;
|
||||
space->to_info.format = GST_VIDEO_FORMAT_UNKNOWN;
|
||||
return FALSE;
|
||||
goto error_done;
|
||||
}
|
||||
invalid_palette:
|
||||
{
|
||||
GST_ERROR_OBJECT (space, "invalid palette");
|
||||
space->from_info.format = GST_VIDEO_FORMAT_UNKNOWN;
|
||||
space->to_info.format = GST_VIDEO_FORMAT_UNKNOWN;
|
||||
goto error_done;
|
||||
}
|
||||
error_done:
|
||||
{
|
||||
space->negotiated = FALSE;
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
@ -381,8 +384,7 @@ gst_video_convert_class_init (GstVideoConvertClass * klass)
|
|||
static void
|
||||
gst_video_convert_init (GstVideoConvert * space)
|
||||
{
|
||||
space->from_info.format = GST_VIDEO_FORMAT_UNKNOWN;
|
||||
space->to_info.format = GST_VIDEO_FORMAT_UNKNOWN;
|
||||
space->negotiated = FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -447,11 +449,10 @@ gst_video_convert_transform (GstBaseTransform * btrans, GstBuffer * inbuf,
|
|||
|
||||
space = GST_VIDEO_CONVERT_CAST (btrans);
|
||||
|
||||
GST_DEBUG ("from %d -> to %d", space->from_info.format,
|
||||
space->to_info.format);
|
||||
GST_DEBUG ("from %s -> to %s", GST_VIDEO_INFO_NAME (&space->from_info),
|
||||
GST_VIDEO_INFO_NAME (&space->to_info));
|
||||
|
||||
if (G_UNLIKELY (space->from_info.format == GST_VIDEO_FORMAT_UNKNOWN ||
|
||||
space->to_info.format == GST_VIDEO_FORMAT_UNKNOWN))
|
||||
if (G_UNLIKELY (!space->negotiated))
|
||||
goto unknown_format;
|
||||
|
||||
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);
|
||||
|
||||
/* baseclass copies timestamps */
|
||||
GST_DEBUG ("from %d -> to %d done", space->from_info.format,
|
||||
space->to_info.format);
|
||||
GST_DEBUG ("from %s -> to %s done", GST_VIDEO_INFO_NAME (&space->from_info),
|
||||
GST_VIDEO_INFO_NAME (&space->to_info));
|
||||
|
||||
return GST_FLOW_OK;
|
||||
|
||||
|
|
|
@ -49,6 +49,7 @@ struct _GstVideoConvert {
|
|||
|
||||
GstVideoInfo from_info;
|
||||
GstVideoInfo to_info;
|
||||
gboolean negotiated;
|
||||
|
||||
ColorSpaceColorSpec from_spec;
|
||||
ColorSpaceColorSpec to_spec;
|
||||
|
|
|
@ -42,27 +42,31 @@ videoconvert_convert_new (GstVideoFormat to_format, ColorSpaceColorSpec to_spec,
|
|||
GstVideoFormat from_format, ColorSpaceColorSpec from_spec,
|
||||
int width, int height)
|
||||
{
|
||||
const GstVideoFormatInfo *to_info, *from_info;
|
||||
VideoConvert *convert;
|
||||
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);
|
||||
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_BT470_6, NULL);
|
||||
g_return_val_if_fail (gst_video_format_is_rgb (to_format)
|
||||
|| gst_video_format_is_yuv (to_format)
|
||||
|| (gst_video_format_is_gray (to_format) &&
|
||||
g_return_val_if_fail (GST_VIDEO_FORMAT_INFO_IS_RGB (to_info)
|
||||
|| GST_VIDEO_FORMAT_INFO_IS_YUV (to_info)
|
||||
|| (GST_VIDEO_FORMAT_INFO_IS_GRAY (to_info) &&
|
||||
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);
|
||||
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_BT470_6, NULL);
|
||||
g_return_val_if_fail (gst_video_format_is_rgb (from_format)
|
||||
|| gst_video_format_is_yuv (from_format)
|
||||
|| (gst_video_format_is_gray (from_format) &&
|
||||
g_return_val_if_fail (GST_VIDEO_FORMAT_INFO_IS_RGB (from_info)
|
||||
|| GST_VIDEO_FORMAT_INFO_IS_YUV (from_info)
|
||||
|| (GST_VIDEO_FORMAT_INFO_IS_GRAY (from_info) &&
|
||||
from_spec == COLOR_SPEC_GRAY), NULL);
|
||||
|
||||
convert = g_malloc (sizeof (VideoConvert));
|
||||
|
@ -77,8 +81,7 @@ videoconvert_convert_new (GstVideoFormat to_format, ColorSpaceColorSpec to_spec,
|
|||
convert->convert = videoconvert_convert_generic;
|
||||
convert->dither16 = videoconvert_dither_none;
|
||||
|
||||
if (gst_video_format_get_component_depth (to_format, 0) > 8 ||
|
||||
gst_video_format_get_component_depth (from_format, 0) > 8) {
|
||||
if (to_info->depth[0] > 8 || from_info->depth[0] > 8) {
|
||||
convert->use_16bit = TRUE;
|
||||
} else {
|
||||
convert->use_16bit = FALSE;
|
||||
|
@ -179,7 +182,7 @@ videoconvert_convert_convert (VideoConvert * convert,
|
|||
#define FRAME_GET_STRIDE(dir, comp) \
|
||||
((dir)->info.stride[comp])
|
||||
#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
|
||||
getline_I420 (VideoConvert * convert, guint8 * dest, const GstVideoFrame * src,
|
||||
|
|
|
@ -903,20 +903,16 @@ gst_video_scale_setup_vs_image (VSImage * image, GstVideoFrame * frame,
|
|||
GstVideoFormat format;
|
||||
gint width, height;
|
||||
|
||||
format = frame->info.format;
|
||||
width = frame->info.width;
|
||||
height = frame->info.height;
|
||||
format = GST_VIDEO_FRAME_FORMAT (frame);
|
||||
width = GST_VIDEO_FRAME_WIDTH (frame);
|
||||
height = GST_VIDEO_FRAME_HEIGHT (frame);
|
||||
|
||||
image->real_width =
|
||||
gst_video_format_get_component_width (format, component, width);
|
||||
image->real_height =
|
||||
gst_video_format_get_component_height (format, component, height);
|
||||
image->width =
|
||||
gst_video_format_get_component_width (format, component, MAX (1,
|
||||
width - b_w));
|
||||
image->height =
|
||||
gst_video_format_get_component_height (format, component, MAX (1,
|
||||
height - b_h));
|
||||
image->real_width = GST_VIDEO_FRAME_COMP_WIDTH (frame, component);
|
||||
image->real_height = GST_VIDEO_FRAME_COMP_HEIGHT (frame, component);
|
||||
image->width = GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (frame->info.finfo,
|
||||
component, MAX (1, width - b_w));
|
||||
image->height = GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (frame->info.finfo,
|
||||
component, MAX (1, height - b_h));
|
||||
|
||||
image->border_top = (image->real_height - image->height) / 2;
|
||||
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->real_pixels + image->border_top * image->stride +
|
||||
image->border_left * gst_video_format_get_pixel_stride (format,
|
||||
component);
|
||||
image->border_left * GST_VIDEO_FRAME_COMP_PSTRIDE (frame, component);
|
||||
}
|
||||
|
||||
static const guint8 *
|
||||
|
@ -1025,7 +1020,7 @@ gst_video_scale_transform (GstBaseTransform * trans, GstBuffer * in,
|
|||
add_borders = videoscale->add_borders;
|
||||
GST_OBJECT_UNLOCK (videoscale);
|
||||
|
||||
format = videoscale->from_info.format;
|
||||
format = GST_VIDEO_INFO_FORMAT (&videoscale->from_info);
|
||||
black = _get_black_for_format (format);
|
||||
|
||||
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 (&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 (&dest[i], &out_frame, i,
|
||||
videoscale->borders_w, videoscale->borders_h);
|
||||
|
|
|
@ -1562,22 +1562,22 @@ paint_tmpline_AYUV (paintinfo * p, int x, int w)
|
|||
static void
|
||||
paint_setup_I420 (paintinfo * p, GstVideoFrame * frame)
|
||||
{
|
||||
p->yp = GST_VIDEO_FRAME_DATA (frame, 0);
|
||||
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0);
|
||||
p->up = GST_VIDEO_FRAME_DATA (frame, 1);
|
||||
p->ustride = GST_VIDEO_FRAME_STRIDE (frame, 1);
|
||||
p->vp = GST_VIDEO_FRAME_DATA (frame, 2);
|
||||
p->vstride = GST_VIDEO_FRAME_STRIDE (frame, 2);
|
||||
p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
|
||||
p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
|
||||
p->up = GST_VIDEO_FRAME_PLANE_DATA (frame, 1);
|
||||
p->ustride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 1);
|
||||
p->vp = GST_VIDEO_FRAME_PLANE_DATA (frame, 2);
|
||||
p->vstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 2);
|
||||
p->size = frame->info.size;
|
||||
}
|
||||
|
||||
static void
|
||||
paint_setup_NV12 (paintinfo * p, GstVideoFrame * frame)
|
||||
{
|
||||
p->yp = GST_VIDEO_FRAME_DATA (frame, 0);
|
||||
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0);
|
||||
p->up = GST_VIDEO_FRAME_DATA (frame, 1);
|
||||
p->ustride = GST_VIDEO_FRAME_STRIDE (frame, 1);
|
||||
p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
|
||||
p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
|
||||
p->up = GST_VIDEO_FRAME_PLANE_DATA (frame, 1);
|
||||
p->ustride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 1);
|
||||
p->vp = p->up + 1;
|
||||
p->vstride = p->ustride;
|
||||
p->size = frame->info.size;
|
||||
|
@ -1586,10 +1586,10 @@ paint_setup_NV12 (paintinfo * p, GstVideoFrame * frame)
|
|||
static void
|
||||
paint_setup_NV21 (paintinfo * p, GstVideoFrame * frame)
|
||||
{
|
||||
p->yp = GST_VIDEO_FRAME_DATA (frame, 0);
|
||||
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0);
|
||||
p->vp = GST_VIDEO_FRAME_DATA (frame, 1);
|
||||
p->vstride = GST_VIDEO_FRAME_STRIDE (frame, 1);
|
||||
p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
|
||||
p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
|
||||
p->vp = GST_VIDEO_FRAME_PLANE_DATA (frame, 1);
|
||||
p->vstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 1);
|
||||
p->up = p->vp + 1;
|
||||
p->ustride = p->vstride;
|
||||
p->size = frame->info.size;
|
||||
|
@ -1653,22 +1653,22 @@ convert_hline_NV21 (paintinfo * p, int y)
|
|||
static void
|
||||
paint_setup_YV12 (paintinfo * p, GstVideoFrame * frame)
|
||||
{
|
||||
p->yp = GST_VIDEO_FRAME_DATA (frame, 0);
|
||||
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0);
|
||||
p->up = GST_VIDEO_FRAME_DATA (frame, 1);
|
||||
p->ustride = GST_VIDEO_FRAME_STRIDE (frame, 1);
|
||||
p->vp = GST_VIDEO_FRAME_DATA (frame, 2);
|
||||
p->vstride = GST_VIDEO_FRAME_STRIDE (frame, 2);
|
||||
p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
|
||||
p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
|
||||
p->up = GST_VIDEO_FRAME_PLANE_DATA (frame, 1);
|
||||
p->ustride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 1);
|
||||
p->vp = GST_VIDEO_FRAME_PLANE_DATA (frame, 2);
|
||||
p->vstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 2);
|
||||
p->size = frame->info.size;
|
||||
}
|
||||
|
||||
static void
|
||||
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->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->vstride = p->ystride;
|
||||
p->size = frame->info.size;
|
||||
|
@ -1677,11 +1677,11 @@ paint_setup_v308 (paintinfo * p, GstVideoFrame * frame)
|
|||
static void
|
||||
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->up = p->ap + 2;
|
||||
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->ustride = p->astride;
|
||||
p->vstride = p->astride;
|
||||
|
@ -1704,11 +1704,11 @@ paint_setup_v410 (paintinfo * p, GstVideoFrame * frame)
|
|||
static void
|
||||
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->up = p->ap + 0;
|
||||
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->ustride = p->astride;
|
||||
p->vstride = p->astride;
|
||||
|
@ -1718,11 +1718,11 @@ paint_setup_v216 (paintinfo * p, GstVideoFrame * frame)
|
|||
static void
|
||||
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->up = 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->ustride = p->astride;
|
||||
p->vstride = p->astride;
|
||||
|
@ -1732,11 +1732,11 @@ paint_setup_v210 (paintinfo * p, GstVideoFrame * frame)
|
|||
static void
|
||||
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->up = 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->ustride = p->astride;
|
||||
p->vstride = p->astride;
|
||||
|
@ -1746,10 +1746,10 @@ paint_setup_UYVP (paintinfo * p, GstVideoFrame * frame)
|
|||
static void
|
||||
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->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->vstride = p->ystride;
|
||||
p->size = frame->info.size;
|
||||
|
@ -1758,10 +1758,10 @@ paint_setup_YUY2 (paintinfo * p, GstVideoFrame * frame)
|
|||
static void
|
||||
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->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->vstride = p->ystride;
|
||||
p->size = frame->info.size;
|
||||
|
@ -1770,10 +1770,10 @@ paint_setup_UYVY (paintinfo * p, GstVideoFrame * frame)
|
|||
static void
|
||||
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->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->vstride = p->ystride;
|
||||
p->size = frame->info.size;
|
||||
|
@ -1782,11 +1782,11 @@ paint_setup_YVYU (paintinfo * p, GstVideoFrame * frame)
|
|||
static void
|
||||
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->up = p->ap + 4;
|
||||
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->ustride = p->astride;
|
||||
p->vstride = p->astride;
|
||||
|
@ -1977,10 +1977,10 @@ static void
|
|||
paint_setup_IYU2 (paintinfo * p, GstVideoFrame * frame)
|
||||
{
|
||||
/* untested */
|
||||
p->up = GST_VIDEO_FRAME_DATA (frame, 0);
|
||||
p->up = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
|
||||
p->yp = p->up + 1;
|
||||
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->vstride = p->ystride;
|
||||
p->size = frame->info.size;
|
||||
|
@ -2006,12 +2006,12 @@ convert_hline_IYU2 (paintinfo * p, int y)
|
|||
static void
|
||||
paint_setup_Y41B (paintinfo * p, GstVideoFrame * frame)
|
||||
{
|
||||
p->yp = GST_VIDEO_FRAME_DATA (frame, 0);
|
||||
p->up = GST_VIDEO_FRAME_DATA (frame, 1);
|
||||
p->vp = GST_VIDEO_FRAME_DATA (frame, 2);
|
||||
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0);
|
||||
p->ustride = GST_VIDEO_FRAME_STRIDE (frame, 1);
|
||||
p->vstride = GST_VIDEO_FRAME_STRIDE (frame, 2);
|
||||
p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
|
||||
p->up = GST_VIDEO_FRAME_PLANE_DATA (frame, 1);
|
||||
p->vp = GST_VIDEO_FRAME_PLANE_DATA (frame, 2);
|
||||
p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
|
||||
p->ustride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 1);
|
||||
p->vstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 2);
|
||||
p->size = frame->info.size;
|
||||
}
|
||||
|
||||
|
@ -2038,12 +2038,12 @@ convert_hline_Y41B (paintinfo * p, int y)
|
|||
static void
|
||||
paint_setup_Y42B (paintinfo * p, GstVideoFrame * frame)
|
||||
{
|
||||
p->yp = GST_VIDEO_FRAME_DATA (frame, 0);
|
||||
p->up = GST_VIDEO_FRAME_DATA (frame, 1);
|
||||
p->vp = GST_VIDEO_FRAME_DATA (frame, 2);
|
||||
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0);
|
||||
p->ustride = GST_VIDEO_FRAME_STRIDE (frame, 1);
|
||||
p->vstride = GST_VIDEO_FRAME_STRIDE (frame, 2);
|
||||
p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
|
||||
p->up = GST_VIDEO_FRAME_PLANE_DATA (frame, 1);
|
||||
p->vp = GST_VIDEO_FRAME_PLANE_DATA (frame, 2);
|
||||
p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
|
||||
p->ustride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 1);
|
||||
p->vstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 2);
|
||||
p->size = frame->info.size;
|
||||
}
|
||||
|
||||
|
@ -2068,12 +2068,12 @@ convert_hline_Y42B (paintinfo * p, int y)
|
|||
static void
|
||||
paint_setup_Y444 (paintinfo * p, GstVideoFrame * frame)
|
||||
{
|
||||
p->yp = GST_VIDEO_FRAME_DATA (frame, 0);
|
||||
p->up = GST_VIDEO_FRAME_DATA (frame, 1);
|
||||
p->vp = GST_VIDEO_FRAME_DATA (frame, 2);
|
||||
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0);
|
||||
p->ustride = GST_VIDEO_FRAME_STRIDE (frame, 1);
|
||||
p->vstride = GST_VIDEO_FRAME_STRIDE (frame, 2);
|
||||
p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
|
||||
p->up = GST_VIDEO_FRAME_PLANE_DATA (frame, 1);
|
||||
p->vp = GST_VIDEO_FRAME_PLANE_DATA (frame, 2);
|
||||
p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
|
||||
p->ustride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 1);
|
||||
p->vstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 2);
|
||||
p->size = frame->info.size;
|
||||
}
|
||||
|
||||
|
@ -2097,8 +2097,8 @@ static void
|
|||
paint_setup_Y800 (paintinfo * p, GstVideoFrame * frame)
|
||||
{
|
||||
/* untested */
|
||||
p->yp = GST_VIDEO_FRAME_DATA (frame, 0);
|
||||
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0);
|
||||
p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
|
||||
p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
|
||||
p->size = frame->info.size;
|
||||
}
|
||||
|
||||
|
@ -2117,24 +2117,24 @@ convert_hline_Y800 (paintinfo * p, int y)
|
|||
static void
|
||||
paint_setup_YVU9 (paintinfo * p, GstVideoFrame * frame)
|
||||
{
|
||||
p->yp = GST_VIDEO_FRAME_DATA (frame, 0);
|
||||
p->up = GST_VIDEO_FRAME_DATA (frame, 1);
|
||||
p->vp = GST_VIDEO_FRAME_DATA (frame, 2);
|
||||
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0);
|
||||
p->ustride = GST_VIDEO_FRAME_STRIDE (frame, 1);
|
||||
p->vstride = GST_VIDEO_FRAME_STRIDE (frame, 2);
|
||||
p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
|
||||
p->up = GST_VIDEO_FRAME_PLANE_DATA (frame, 1);
|
||||
p->vp = GST_VIDEO_FRAME_PLANE_DATA (frame, 2);
|
||||
p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
|
||||
p->ustride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 1);
|
||||
p->vstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 2);
|
||||
p->size = frame->info.size;
|
||||
}
|
||||
|
||||
static void
|
||||
paint_setup_YUV9 (paintinfo * p, GstVideoFrame * frame)
|
||||
{
|
||||
p->yp = GST_VIDEO_FRAME_DATA (frame, 0);
|
||||
p->up = GST_VIDEO_FRAME_DATA (frame, 1);
|
||||
p->vp = GST_VIDEO_FRAME_DATA (frame, 2);
|
||||
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0);
|
||||
p->ustride = GST_VIDEO_FRAME_STRIDE (frame, 1);
|
||||
p->vstride = GST_VIDEO_FRAME_STRIDE (frame, 2);
|
||||
p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
|
||||
p->up = GST_VIDEO_FRAME_PLANE_DATA (frame, 1);
|
||||
p->vp = GST_VIDEO_FRAME_PLANE_DATA (frame, 2);
|
||||
p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
|
||||
p->ustride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 1);
|
||||
p->vstride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 2);
|
||||
p->size = frame->info.size;
|
||||
}
|
||||
|
||||
|
@ -2185,11 +2185,11 @@ paint_setup_BGRA8888 (paintinfo * p, GstVideoFrame * frame)
|
|||
static void
|
||||
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->up = p->ap + 2;
|
||||
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->ustride = p->astride;
|
||||
p->vstride = p->astride;
|
||||
|
@ -2199,11 +2199,11 @@ paint_setup_xRGB8888 (paintinfo * p, GstVideoFrame * frame)
|
|||
static void
|
||||
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->up = p->ap + 2;
|
||||
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->ustride = p->astride;
|
||||
p->vstride = p->astride;
|
||||
|
@ -2213,11 +2213,11 @@ paint_setup_xBGR8888 (paintinfo * p, GstVideoFrame * frame)
|
|||
static void
|
||||
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->vp = p->yp + 2;
|
||||
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->ustride = p->astride;
|
||||
p->vstride = p->astride;
|
||||
|
@ -2227,11 +2227,11 @@ paint_setup_RGBx8888 (paintinfo * p, GstVideoFrame * frame)
|
|||
static void
|
||||
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->yp = p->vp + 2;
|
||||
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->ustride = p->astride;
|
||||
p->vstride = p->astride;
|
||||
|
@ -2241,10 +2241,10 @@ paint_setup_BGRx8888 (paintinfo * p, GstVideoFrame * frame)
|
|||
static void
|
||||
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->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->vstride = p->ystride;
|
||||
p->size = frame->info.size;
|
||||
|
@ -2253,10 +2253,10 @@ paint_setup_RGB888 (paintinfo * p, GstVideoFrame * frame)
|
|||
static void
|
||||
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->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->vstride = p->ystride;
|
||||
p->size = frame->info.size;
|
||||
|
@ -2265,11 +2265,11 @@ paint_setup_BGR888 (paintinfo * p, GstVideoFrame * frame)
|
|||
static void
|
||||
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->up = p->ap + 4;
|
||||
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->ustride = p->astride;
|
||||
p->vstride = p->astride;
|
||||
|
@ -2349,8 +2349,8 @@ convert_hline_str3 (paintinfo * p, int y)
|
|||
static void
|
||||
paint_setup_RGB565 (paintinfo * p, GstVideoFrame * frame)
|
||||
{
|
||||
p->yp = GST_VIDEO_FRAME_DATA (frame, 0);
|
||||
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0);
|
||||
p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
|
||||
p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
|
||||
p->ustride = p->ystride;
|
||||
p->vstride = p->ystride;
|
||||
p->size = frame->info.size;
|
||||
|
@ -2395,8 +2395,8 @@ convert_hline_xRGB1555 (paintinfo * p, int y)
|
|||
static void
|
||||
paint_setup_xRGB1555 (paintinfo * p, GstVideoFrame * frame)
|
||||
{
|
||||
p->yp = GST_VIDEO_FRAME_DATA (frame, 0);
|
||||
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0);
|
||||
p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
|
||||
p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
|
||||
p->ustride = p->ystride;
|
||||
p->vstride = p->ystride;
|
||||
p->size = frame->info.size;
|
||||
|
@ -2406,7 +2406,7 @@ paint_setup_xRGB1555 (paintinfo * p, GstVideoFrame * frame)
|
|||
static void
|
||||
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->ustride = 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
|
||||
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->ustride = 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
|
||||
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->ustride = 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
|
||||
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->ustride = 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
|
||||
paint_setup_GRAY8 (paintinfo * p, GstVideoFrame * frame)
|
||||
{
|
||||
p->yp = GST_VIDEO_FRAME_DATA (frame, 0);
|
||||
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0);
|
||||
p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
|
||||
p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
|
||||
p->size = frame->info.size;
|
||||
}
|
||||
|
||||
|
@ -2503,8 +2503,8 @@ convert_hline_GRAY8 (paintinfo * p, int y)
|
|||
static void
|
||||
paint_setup_GRAY16 (paintinfo * p, GstVideoFrame * frame)
|
||||
{
|
||||
p->yp = GST_VIDEO_FRAME_DATA (frame, 0);
|
||||
p->ystride = GST_VIDEO_FRAME_STRIDE (frame, 0);
|
||||
p->yp = GST_VIDEO_FRAME_PLANE_DATA (frame, 0);
|
||||
p->ystride = GST_VIDEO_FRAME_PLANE_STRIDE (frame, 0);
|
||||
p->size = frame->info.size;
|
||||
}
|
||||
|
||||
|
|
|
@ -508,21 +508,25 @@ ximage_buffer_pool_alloc (GstBufferPool * pool, GstBuffer ** buffer,
|
|||
{
|
||||
GstXImageBufferPool *xpool = GST_XIMAGE_BUFFER_POOL_CAST (pool);
|
||||
GstXImageBufferPoolPrivate *priv = xpool->priv;
|
||||
GstVideoInfo *info;
|
||||
GstBuffer *ximage;
|
||||
GstMetaXImage *meta;
|
||||
|
||||
info = &priv->info;
|
||||
|
||||
ximage = gst_buffer_new ();
|
||||
meta =
|
||||
gst_buffer_add_meta_ximage (ximage, xpool->sink, priv->info.width,
|
||||
priv->info.height);
|
||||
gst_buffer_add_meta_ximage (ximage, xpool->sink,
|
||||
GST_VIDEO_INFO_WIDTH (info), GST_VIDEO_INFO_HEIGHT (info));
|
||||
if (meta == NULL) {
|
||||
gst_buffer_unref (ximage);
|
||||
goto no_buffer;
|
||||
}
|
||||
if (priv->add_metavideo) {
|
||||
GST_DEBUG_OBJECT (pool, "adding GstMetaVideo");
|
||||
/* these are just the defaults for now */
|
||||
gst_buffer_add_meta_video (ximage, 0, priv->info.format, priv->info.width,
|
||||
priv->info.height);
|
||||
gst_buffer_add_meta_video (ximage, 0, GST_VIDEO_INFO_FORMAT (info),
|
||||
GST_VIDEO_INFO_WIDTH (info), GST_VIDEO_INFO_HEIGHT (info));
|
||||
}
|
||||
*buffer = ximage;
|
||||
|
||||
|
|
|
@ -555,22 +555,27 @@ xvimage_buffer_pool_alloc (GstBufferPool * pool, GstBuffer ** buffer,
|
|||
{
|
||||
GstXvImageBufferPool *xvpool = GST_XVIMAGE_BUFFER_POOL_CAST (pool);
|
||||
GstXvImageBufferPoolPrivate *priv = xvpool->priv;
|
||||
GstVideoInfo *info;
|
||||
GstBuffer *xvimage;
|
||||
GstMetaXvImage *meta;
|
||||
|
||||
info = &priv->info;
|
||||
|
||||
xvimage = gst_buffer_new ();
|
||||
meta =
|
||||
gst_buffer_add_meta_xvimage (xvimage, xvpool->sink, priv->info.width,
|
||||
priv->info.height, priv->im_format);
|
||||
gst_buffer_add_meta_xvimage (xvimage, xvpool->sink,
|
||||
GST_VIDEO_INFO_WIDTH (info), GST_VIDEO_INFO_HEIGHT (info),
|
||||
priv->im_format);
|
||||
if (meta == NULL) {
|
||||
gst_buffer_unref (xvimage);
|
||||
goto no_buffer;
|
||||
}
|
||||
|
||||
if (priv->add_metavideo) {
|
||||
GST_DEBUG_OBJECT (pool, "adding GstMetaVideo");
|
||||
/* these are just the defaults for now */
|
||||
gst_buffer_add_meta_video (xvimage, 0, priv->info.format, priv->info.width,
|
||||
priv->info.height);
|
||||
gst_buffer_add_meta_video (xvimage, 0, GST_VIDEO_INFO_FORMAT (info),
|
||||
GST_VIDEO_INFO_WIDTH (info), GST_VIDEO_INFO_HEIGHT (info));
|
||||
}
|
||||
|
||||
*buffer = xvimage;
|
||||
|
|
Loading…
Reference in a new issue