mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-23 18:21:04 +00:00
video: remove intermediate Plane structure
Remove the GstVideoPlane structure and move the fields directly into the GstVideoInfo structure. This makes things a little easier to read and also makes it more likely that we can pass the stride array to external libraries.
This commit is contained in:
parent
5eeb468c75
commit
6d9e76f2de
9 changed files with 83 additions and 87 deletions
|
@ -1442,7 +1442,7 @@ gst_base_text_overlay_shade_planar_Y (GstBaseTextOverlay * overlay,
|
||||||
gint i, j, dest_stride;
|
gint i, j, dest_stride;
|
||||||
guint8 *dest_ptr;
|
guint8 *dest_ptr;
|
||||||
|
|
||||||
dest_stride = dest->info.plane[0].stride;
|
dest_stride = dest->info.stride[0];
|
||||||
dest_ptr = dest->data[0];
|
dest_ptr = dest->data[0];
|
||||||
|
|
||||||
x0 = CLAMP (x0 - BOX_XPAD, 0, overlay->width);
|
x0 = CLAMP (x0 - BOX_XPAD, 0, overlay->width);
|
||||||
|
@ -1468,7 +1468,7 @@ gst_base_text_overlay_shade_packed_Y (GstBaseTextOverlay * overlay,
|
||||||
guint dest_stride, pixel_stride, component_offset;
|
guint dest_stride, pixel_stride, component_offset;
|
||||||
guint8 *dest_ptr;
|
guint8 *dest_ptr;
|
||||||
|
|
||||||
dest_stride = dest->info.plane[0].stride;
|
dest_stride = dest->info.stride[0];
|
||||||
dest_ptr = dest->data[0];
|
dest_ptr = dest->data[0];
|
||||||
|
|
||||||
pixel_stride = gst_video_format_get_pixel_stride (dest->info.format, 0);
|
pixel_stride = gst_video_format_get_pixel_stride (dest->info.format, 0);
|
||||||
|
@ -1591,9 +1591,9 @@ gst_base_text_overlay_blit_NV12_NV21 (GstBaseTextOverlay * overlay,
|
||||||
y_pixels = dest->data[0];
|
y_pixels = dest->data[0];
|
||||||
u_pixels = dest->data[1];
|
u_pixels = dest->data[1];
|
||||||
v_pixels = dest->data[2];
|
v_pixels = dest->data[2];
|
||||||
y_stride = dest->info.plane[0].stride;
|
y_stride = dest->info.stride[0];
|
||||||
u_stride = dest->info.plane[1].stride;
|
u_stride = dest->info.stride[1];
|
||||||
v_stride = dest->info.plane[2].stride;
|
v_stride = dest->info.stride[2];
|
||||||
|
|
||||||
gst_base_text_overlay_blit_1 (overlay, y_pixels, xpos, ypos,
|
gst_base_text_overlay_blit_1 (overlay, y_pixels, xpos, ypos,
|
||||||
overlay->text_image, y_stride);
|
overlay->text_image, y_stride);
|
||||||
|
@ -1617,9 +1617,9 @@ gst_base_text_overlay_blit_I420 (GstBaseTextOverlay * overlay,
|
||||||
y_pixels = dest->data[0];
|
y_pixels = dest->data[0];
|
||||||
u_pixels = dest->data[1];
|
u_pixels = dest->data[1];
|
||||||
v_pixels = dest->data[2];
|
v_pixels = dest->data[2];
|
||||||
y_stride = dest->info.plane[0].stride;
|
y_stride = dest->info.stride[0];
|
||||||
u_stride = dest->info.plane[1].stride;
|
u_stride = dest->info.stride[1];
|
||||||
v_stride = dest->info.plane[2].stride;
|
v_stride = dest->info.stride[2];
|
||||||
|
|
||||||
gst_base_text_overlay_blit_1 (overlay, y_pixels, xpos, ypos,
|
gst_base_text_overlay_blit_1 (overlay, y_pixels, xpos, ypos,
|
||||||
overlay->text_image, y_stride);
|
overlay->text_image, y_stride);
|
||||||
|
|
|
@ -1135,9 +1135,9 @@ theora_handle_image (GstTheoraDec * dec, th_ycbcr_buffer buf, GstBuffer ** out)
|
||||||
height =
|
height =
|
||||||
gst_video_format_get_component_height (frame.info.format, plane,
|
gst_video_format_get_component_height (frame.info.format, plane,
|
||||||
dec->vinfo.height);
|
dec->vinfo.height);
|
||||||
stride = frame.info.plane[plane].stride;
|
|
||||||
|
|
||||||
dest = frame.data[plane];
|
stride = GST_VIDEO_FRAME_STRIDE (&frame, plane);
|
||||||
|
dest = GST_VIDEO_FRAME_DATA (&frame, plane);
|
||||||
|
|
||||||
src = buf[plane].data;
|
src = buf[plane].data;
|
||||||
src += ((height == dec->vinfo.height) ? dec->offset_y : dec->offset_y / 2)
|
src += ((height == dec->vinfo.height) ? dec->offset_y : dec->offset_y / 2)
|
||||||
|
|
|
@ -1028,8 +1028,8 @@ theora_enc_init_buffer (th_ycbcr_buffer buf, th_info * info,
|
||||||
buf[i].height =
|
buf[i].height =
|
||||||
gst_video_format_get_component_height (format, i, info->frame_height);
|
gst_video_format_get_component_height (format, i, info->frame_height);
|
||||||
|
|
||||||
buf[i].data = frame->data[i];
|
buf[i].data = GST_VIDEO_FRAME_DATA (frame, i);
|
||||||
buf[i].stride = frame->info.plane[i].stride;
|
buf[i].stride = GST_VIDEO_FRAME_STRIDE (frame, i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,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.plane);
|
info.n_planes, info.offset, info.stride);
|
||||||
|
|
||||||
return meta;
|
return meta;
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,8 @@ gst_buffer_add_meta_video (GstBuffer * buffer, GstVideoFlags flags,
|
||||||
GstMetaVideo *
|
GstMetaVideo *
|
||||||
gst_buffer_add_meta_video_full (GstBuffer * buffer, GstVideoFlags flags,
|
gst_buffer_add_meta_video_full (GstBuffer * buffer, GstVideoFlags flags,
|
||||||
GstVideoFormat format, guint width, guint height,
|
GstVideoFormat format, guint width, guint height,
|
||||||
guint n_planes, GstVideoPlane plane[GST_VIDEO_MAX_PLANES])
|
guint n_planes, gsize offset[GST_VIDEO_MAX_PLANES],
|
||||||
|
gint stride[GST_VIDEO_MAX_PLANES])
|
||||||
{
|
{
|
||||||
GstMetaVideo *meta;
|
GstMetaVideo *meta;
|
||||||
guint i;
|
guint i;
|
||||||
|
@ -69,8 +70,10 @@ gst_buffer_add_meta_video_full (GstBuffer * buffer, GstVideoFlags flags,
|
||||||
meta->buffer = buffer;
|
meta->buffer = buffer;
|
||||||
|
|
||||||
meta->n_planes = n_planes;
|
meta->n_planes = n_planes;
|
||||||
for (i = 0; i < n_planes; i++)
|
for (i = 0; i < n_planes; i++) {
|
||||||
meta->plane[i] = plane[i];
|
meta->offset[i] = offset[i];
|
||||||
|
meta->stride[i] = stride[i];
|
||||||
|
}
|
||||||
|
|
||||||
return meta;
|
return meta;
|
||||||
}
|
}
|
||||||
|
@ -118,8 +121,8 @@ gst_meta_video_map (GstMetaVideo * meta, guint plane, gint * stride,
|
||||||
write = (flags & GST_MAP_WRITE) != 0;
|
write = (flags & GST_MAP_WRITE) != 0;
|
||||||
g_return_val_if_fail (!write || gst_buffer_is_writable (buffer), NULL);
|
g_return_val_if_fail (!write || gst_buffer_is_writable (buffer), NULL);
|
||||||
|
|
||||||
offset = meta->plane[plane].offset;
|
offset = meta->offset[plane];
|
||||||
*stride = meta->plane[plane].stride;
|
*stride = meta->stride[plane];
|
||||||
/* find the memory block for this plane, this is the memory block containing
|
/* find the memory block for this plane, this is the memory block containing
|
||||||
* the plane offset */
|
* the plane offset */
|
||||||
mem = find_mem_for_offset (buffer, &offset, flags);
|
mem = find_mem_for_offset (buffer, &offset, flags);
|
||||||
|
@ -144,7 +147,7 @@ gst_meta_video_unmap (GstMetaVideo * meta, guint plane, gpointer data)
|
||||||
buffer = meta->buffer;
|
buffer = meta->buffer;
|
||||||
g_return_val_if_fail (buffer != NULL, FALSE);
|
g_return_val_if_fail (buffer != NULL, FALSE);
|
||||||
|
|
||||||
offset = meta->plane[plane].offset;
|
offset = meta->offset[plane];
|
||||||
mem = find_mem_for_offset (buffer, &offset, GST_MAP_READ);
|
mem = find_mem_for_offset (buffer, &offset, GST_MAP_READ);
|
||||||
base = data;
|
base = data;
|
||||||
|
|
||||||
|
|
|
@ -30,14 +30,14 @@ G_BEGIN_DECLS
|
||||||
#define GST_META_INFO_VIDEO (gst_meta_video_get_info())
|
#define GST_META_INFO_VIDEO (gst_meta_video_get_info())
|
||||||
|
|
||||||
typedef struct _GstMetaVideo GstMetaVideo;
|
typedef struct _GstMetaVideo GstMetaVideo;
|
||||||
typedef struct _GstMetaVideoPlane GstMetaVideoPlane;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GstMetaVideo:
|
* GstMetaVideo:
|
||||||
* @meta: parent #GstMeta
|
* @meta: parent #GstMeta
|
||||||
* @flags: additional video flags
|
* @flags: additional video flags
|
||||||
* @n_planes: the number of planes in the image
|
* @n_planes: the number of planes in the image
|
||||||
* @plane: array of #GstMetaVideoPlane
|
* @offset: array of offsets for the planes
|
||||||
|
* @stride: array of strides for the planes
|
||||||
* @map: map the memory of a plane
|
* @map: map the memory of a plane
|
||||||
* @unmap: unmap the memory of a plane
|
* @unmap: unmap the memory of a plane
|
||||||
*
|
*
|
||||||
|
@ -54,7 +54,8 @@ struct _GstMetaVideo {
|
||||||
guint height;
|
guint height;
|
||||||
|
|
||||||
guint n_planes;
|
guint n_planes;
|
||||||
GstVideoPlane plane[GST_VIDEO_MAX_PLANES];
|
gsize offset[GST_VIDEO_MAX_PLANES];
|
||||||
|
gint stride[GST_VIDEO_MAX_PLANES];
|
||||||
|
|
||||||
gpointer (*map) (GstMetaVideo *meta, guint plane, gint *stride,
|
gpointer (*map) (GstMetaVideo *meta, guint plane, gint *stride,
|
||||||
GstMapFlags flags);
|
GstMapFlags flags);
|
||||||
|
@ -68,7 +69,8 @@ GstMetaVideo * gst_buffer_add_meta_video (GstBuffer *buffer, GstVideoFlags
|
||||||
GstVideoFormat format, guint width, guint height);
|
GstVideoFormat format, guint width, guint height);
|
||||||
GstMetaVideo * gst_buffer_add_meta_video_full (GstBuffer *buffer, GstVideoFlags flags,
|
GstMetaVideo * gst_buffer_add_meta_video_full (GstBuffer *buffer, GstVideoFlags flags,
|
||||||
GstVideoFormat format, guint width, guint height,
|
GstVideoFormat format, guint width, guint height,
|
||||||
guint n_planes, GstVideoPlane plane[GST_VIDEO_MAX_PLANES]);
|
guint n_planes, gsize offset[GST_VIDEO_MAX_PLANES],
|
||||||
|
gint stride[GST_VIDEO_MAX_PLANES]);
|
||||||
|
|
||||||
gpointer gst_meta_video_map (GstMetaVideo *meta, guint plane, gint *stride,
|
gpointer gst_meta_video_map (GstMetaVideo *meta, guint plane, gint *stride,
|
||||||
GstMapFlags flags);
|
GstMapFlags flags);
|
||||||
|
|
|
@ -724,7 +724,7 @@ gst_video_info_set_format (GstVideoInfo * info, GstVideoFormat format,
|
||||||
fill_planes (info);
|
fill_planes (info);
|
||||||
|
|
||||||
for (i = 0; i < info->n_planes; i++) {
|
for (i = 0; i < info->n_planes; i++) {
|
||||||
info->plane[i].stride = get_stride (format, i, info->width);
|
info->stride[i] = get_stride (format, i, info->width);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -908,7 +908,7 @@ gst_video_frame_map (GstVideoFrame * frame, GstVideoInfo * info,
|
||||||
|
|
||||||
for (i = 0; i < info->n_planes; i++) {
|
for (i = 0; i < info->n_planes; i++) {
|
||||||
frame->data[i] =
|
frame->data[i] =
|
||||||
gst_meta_video_map (meta, i, &frame->info.plane[i].stride, flags);
|
gst_meta_video_map (meta, i, &frame->info.stride[i], flags);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* copy the info */
|
/* copy the info */
|
||||||
|
@ -922,7 +922,7 @@ gst_video_frame_map (GstVideoFrame * frame, GstVideoInfo * info,
|
||||||
|
|
||||||
/* set up pointers */
|
/* set up pointers */
|
||||||
for (i = 0; i < info->n_planes; i++) {
|
for (i = 0; i < info->n_planes; i++) {
|
||||||
frame->data[i] = data + info->plane[i].offset;
|
frame->data[i] = data + info->offset[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -961,7 +961,7 @@ gst_video_frame_unmap (GstVideoFrame * frame)
|
||||||
guint8 *data;
|
guint8 *data;
|
||||||
|
|
||||||
data = frame->data[0];
|
data = frame->data[0];
|
||||||
data -= frame->info.plane[0].offset;
|
data -= frame->info.offset[0];
|
||||||
gst_buffer_unmap (buffer, data, -1);
|
gst_buffer_unmap (buffer, data, -1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1571,74 +1571,74 @@ fill_planes (GstVideoInfo * info)
|
||||||
case GST_VIDEO_FORMAT_ARGB64:
|
case GST_VIDEO_FORMAT_ARGB64:
|
||||||
case GST_VIDEO_FORMAT_AYUV64:
|
case GST_VIDEO_FORMAT_AYUV64:
|
||||||
info->n_planes = 1;
|
info->n_planes = 1;
|
||||||
info->plane[0].offset = 0;
|
info->offset[0] = 0;
|
||||||
break;
|
break;
|
||||||
case GST_VIDEO_FORMAT_I420:
|
case GST_VIDEO_FORMAT_I420:
|
||||||
info->n_planes = 3;
|
info->n_planes = 3;
|
||||||
info->plane[0].offset = 0;
|
info->offset[0] = 0;
|
||||||
info->plane[1].offset = GST_ROUND_UP_4 (width) * GST_ROUND_UP_2 (height);
|
info->offset[1] = GST_ROUND_UP_4 (width) * GST_ROUND_UP_2 (height);
|
||||||
info->plane[2].offset = info->plane[1].offset +
|
info->offset[2] = info->offset[1] +
|
||||||
GST_ROUND_UP_4 (GST_ROUND_UP_2 (width) / 2) *
|
GST_ROUND_UP_4 (GST_ROUND_UP_2 (width) / 2) *
|
||||||
(GST_ROUND_UP_2 (height) / 2);
|
(GST_ROUND_UP_2 (height) / 2);
|
||||||
break;
|
break;
|
||||||
case GST_VIDEO_FORMAT_YV12: /* same as I420, but plane 1+2 swapped */
|
case GST_VIDEO_FORMAT_YV12: /* same as I420, but plane 1+2 swapped */
|
||||||
info->n_planes = 3;
|
info->n_planes = 3;
|
||||||
info->plane[0].offset = 0;
|
info->offset[0] = 0;
|
||||||
info->plane[2].offset = GST_ROUND_UP_4 (width) * GST_ROUND_UP_2 (height);
|
info->offset[2] = GST_ROUND_UP_4 (width) * GST_ROUND_UP_2 (height);
|
||||||
info->plane[1].offset = info->plane[2].offset +
|
info->offset[1] = info->offset[2] +
|
||||||
GST_ROUND_UP_4 (GST_ROUND_UP_2 (width) / 2) *
|
GST_ROUND_UP_4 (GST_ROUND_UP_2 (width) / 2) *
|
||||||
(GST_ROUND_UP_2 (height) / 2);
|
(GST_ROUND_UP_2 (height) / 2);
|
||||||
break;
|
break;
|
||||||
case GST_VIDEO_FORMAT_Y41B:
|
case GST_VIDEO_FORMAT_Y41B:
|
||||||
info->n_planes = 3;
|
info->n_planes = 3;
|
||||||
info->plane[0].offset = 0;
|
info->offset[0] = 0;
|
||||||
info->plane[1].offset = GST_ROUND_UP_4 (width) * height;
|
info->offset[1] = GST_ROUND_UP_4 (width) * height;
|
||||||
info->plane[2].offset = (GST_ROUND_UP_4 (width) +
|
info->offset[2] = (GST_ROUND_UP_4 (width) +
|
||||||
(GST_ROUND_UP_16 (width) / 4)) * height;
|
(GST_ROUND_UP_16 (width) / 4)) * height;
|
||||||
break;
|
break;
|
||||||
case GST_VIDEO_FORMAT_Y42B:
|
case GST_VIDEO_FORMAT_Y42B:
|
||||||
info->n_planes = 3;
|
info->n_planes = 3;
|
||||||
info->plane[0].offset = 0;
|
info->offset[0] = 0;
|
||||||
info->plane[1].offset = GST_ROUND_UP_4 (width) * height;
|
info->offset[1] = GST_ROUND_UP_4 (width) * height;
|
||||||
info->plane[2].offset =
|
info->offset[2] =
|
||||||
(GST_ROUND_UP_4 (width) + (GST_ROUND_UP_8 (width) / 2)) * height;
|
(GST_ROUND_UP_4 (width) + (GST_ROUND_UP_8 (width) / 2)) * height;
|
||||||
break;
|
break;
|
||||||
case GST_VIDEO_FORMAT_Y444:
|
case GST_VIDEO_FORMAT_Y444:
|
||||||
info->n_planes = 3;
|
info->n_planes = 3;
|
||||||
info->plane[0].offset = 0;
|
info->offset[0] = 0;
|
||||||
info->plane[1].offset = GST_ROUND_UP_4 (width) * height;
|
info->offset[1] = GST_ROUND_UP_4 (width) * height;
|
||||||
info->plane[2].offset = GST_ROUND_UP_4 (width) * height * 2;
|
info->offset[2] = GST_ROUND_UP_4 (width) * height * 2;
|
||||||
break;
|
break;
|
||||||
case GST_VIDEO_FORMAT_NV12:
|
case GST_VIDEO_FORMAT_NV12:
|
||||||
case GST_VIDEO_FORMAT_NV21:
|
case GST_VIDEO_FORMAT_NV21:
|
||||||
info->n_planes = 2;
|
info->n_planes = 2;
|
||||||
info->plane[0].offset = 0;
|
info->offset[0] = 0;
|
||||||
info->plane[1].offset = GST_ROUND_UP_4 (width) * GST_ROUND_UP_2 (height);
|
info->offset[1] = GST_ROUND_UP_4 (width) * GST_ROUND_UP_2 (height);
|
||||||
break;
|
break;
|
||||||
case GST_VIDEO_FORMAT_A420:
|
case GST_VIDEO_FORMAT_A420:
|
||||||
info->n_planes = 4;
|
info->n_planes = 4;
|
||||||
info->plane[0].offset = 0;
|
info->offset[0] = 0;
|
||||||
info->plane[1].offset = GST_ROUND_UP_4 (width) * GST_ROUND_UP_2 (height);
|
info->offset[1] = GST_ROUND_UP_4 (width) * GST_ROUND_UP_2 (height);
|
||||||
info->plane[2].offset = info->plane[1].offset +
|
info->offset[2] = info->offset[1] +
|
||||||
GST_ROUND_UP_4 (GST_ROUND_UP_2 (width) / 2) *
|
GST_ROUND_UP_4 (GST_ROUND_UP_2 (width) / 2) *
|
||||||
(GST_ROUND_UP_2 (height) / 2);
|
(GST_ROUND_UP_2 (height) / 2);
|
||||||
info->plane[3].offset = info->plane[2].offset +
|
info->offset[3] = info->offset[2] +
|
||||||
GST_ROUND_UP_4 (GST_ROUND_UP_2 (width) / 2) *
|
GST_ROUND_UP_4 (GST_ROUND_UP_2 (width) / 2) *
|
||||||
(GST_ROUND_UP_2 (height) / 2);
|
(GST_ROUND_UP_2 (height) / 2);
|
||||||
break;
|
break;
|
||||||
case GST_VIDEO_FORMAT_YUV9:
|
case GST_VIDEO_FORMAT_YUV9:
|
||||||
info->n_planes = 3;
|
info->n_planes = 3;
|
||||||
info->plane[0].offset = 0;
|
info->offset[0] = 0;
|
||||||
info->plane[1].offset = GST_ROUND_UP_4 (width) * height;
|
info->offset[1] = GST_ROUND_UP_4 (width) * height;
|
||||||
info->plane[2].offset = info->plane[1].offset +
|
info->offset[2] = info->offset[1] +
|
||||||
GST_ROUND_UP_4 (GST_ROUND_UP_4 (width) / 4) *
|
GST_ROUND_UP_4 (GST_ROUND_UP_4 (width) / 4) *
|
||||||
(GST_ROUND_UP_4 (height) / 4);
|
(GST_ROUND_UP_4 (height) / 4);
|
||||||
break;
|
break;
|
||||||
case GST_VIDEO_FORMAT_YVU9:
|
case GST_VIDEO_FORMAT_YVU9:
|
||||||
info->n_planes = 3;
|
info->n_planes = 3;
|
||||||
info->plane[0].offset = 0;
|
info->offset[0] = 0;
|
||||||
info->plane[2].offset = GST_ROUND_UP_4 (width) * height;
|
info->offset[2] = GST_ROUND_UP_4 (width) * height;
|
||||||
info->plane[1].offset = info->plane[2].offset +
|
info->offset[1] = info->offset[2] +
|
||||||
GST_ROUND_UP_4 (GST_ROUND_UP_4 (width) / 4) *
|
GST_ROUND_UP_4 (GST_ROUND_UP_4 (width) / 4) *
|
||||||
(GST_ROUND_UP_4 (height) / 4);
|
(GST_ROUND_UP_4 (height) / 4);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -143,7 +143,6 @@ int gst_video_format_get_component_depth (GstVideoFormat format,
|
||||||
int gst_video_format_get_pixel_stride (GstVideoFormat format,
|
int gst_video_format_get_pixel_stride (GstVideoFormat format,
|
||||||
int component) G_GNUC_CONST;
|
int component) G_GNUC_CONST;
|
||||||
|
|
||||||
typedef struct _GstVideoPlane GstVideoPlane;
|
|
||||||
typedef struct _GstVideoInfo GstVideoInfo;
|
typedef struct _GstVideoInfo GstVideoInfo;
|
||||||
typedef struct _GstVideoFrame GstVideoFrame;
|
typedef struct _GstVideoFrame GstVideoFrame;
|
||||||
|
|
||||||
|
@ -171,19 +170,6 @@ typedef enum {
|
||||||
|
|
||||||
#define GST_VIDEO_MAX_PLANES 4
|
#define GST_VIDEO_MAX_PLANES 4
|
||||||
|
|
||||||
/**
|
|
||||||
* GstVideoPlane:
|
|
||||||
* @offset: offset of the first pixel in the buffer memory region
|
|
||||||
* @stride: stride of the image lines. Can be negative when the image is
|
|
||||||
* upside-down
|
|
||||||
*
|
|
||||||
* Information for one video plane.
|
|
||||||
*/
|
|
||||||
struct _GstVideoPlane {
|
|
||||||
gsize offset;
|
|
||||||
gint stride;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GstVideoInfo:
|
* GstVideoInfo:
|
||||||
* @flags: additional video flags
|
* @flags: additional video flags
|
||||||
|
@ -205,7 +191,8 @@ struct _GstVideoPlane {
|
||||||
* @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
|
* @n_planes: the number of planes in the image
|
||||||
* @plane: array of #GstMetaVideoPlane
|
* @offset: offsets of the planes
|
||||||
|
* @stride: strides of the planes
|
||||||
*
|
*
|
||||||
* Extra buffer metadata describing image properties
|
* Extra buffer metadata describing image properties
|
||||||
*/
|
*/
|
||||||
|
@ -226,9 +213,25 @@ struct _GstVideoInfo {
|
||||||
guint fps_d;
|
guint fps_d;
|
||||||
|
|
||||||
guint n_planes;
|
guint n_planes;
|
||||||
GstVideoPlane plane[GST_VIDEO_MAX_PLANES];
|
gsize offset[GST_VIDEO_MAX_PLANES];
|
||||||
|
gint stride[GST_VIDEO_MAX_PLANES];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void gst_video_info_init (GstVideoInfo *info);
|
||||||
|
|
||||||
|
void gst_video_info_set_format (GstVideoInfo *info, GstVideoFormat format,
|
||||||
|
guint width, guint height);
|
||||||
|
|
||||||
|
gboolean gst_video_info_from_caps (GstVideoInfo *info, const GstCaps * caps);
|
||||||
|
|
||||||
|
GstCaps * gst_video_info_to_caps (GstVideoInfo *info);
|
||||||
|
|
||||||
|
gboolean gst_video_info_convert (GstVideoInfo *info,
|
||||||
|
GstFormat src_format,
|
||||||
|
gint64 src_value,
|
||||||
|
GstFormat dest_format,
|
||||||
|
gint64 *dest_value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GstVideoFrame:
|
* GstVideoFrame:
|
||||||
* @info: the #GstVideoInfo
|
* @info: the #GstVideoInfo
|
||||||
|
@ -246,20 +249,8 @@ struct _GstVideoFrame {
|
||||||
guint8 *data[GST_VIDEO_MAX_PLANES];
|
guint8 *data[GST_VIDEO_MAX_PLANES];
|
||||||
};
|
};
|
||||||
|
|
||||||
void gst_video_info_init (GstVideoInfo *info);
|
#define GST_VIDEO_FRAME_DATA(f,c) ((f)->data[c])
|
||||||
|
#define GST_VIDEO_FRAME_STRIDE(f,c) ((f)->info.stride[c])
|
||||||
void gst_video_info_set_format (GstVideoInfo *info, GstVideoFormat format,
|
|
||||||
guint width, guint height);
|
|
||||||
|
|
||||||
gboolean gst_video_info_from_caps (GstVideoInfo *info, const GstCaps * caps);
|
|
||||||
|
|
||||||
GstCaps * gst_video_info_to_caps (GstVideoInfo *info);
|
|
||||||
|
|
||||||
gboolean gst_video_info_convert (GstVideoInfo *info,
|
|
||||||
GstFormat src_format,
|
|
||||||
gint64 src_value,
|
|
||||||
GstFormat dest_format,
|
|
||||||
gint64 *dest_value);
|
|
||||||
|
|
||||||
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);
|
||||||
|
|
|
@ -177,7 +177,7 @@ videoconvert_convert_convert (VideoConvert * convert,
|
||||||
/* Line conversion to AYUV */
|
/* Line conversion to AYUV */
|
||||||
|
|
||||||
#define FRAME_GET_STRIDE(dir, comp) \
|
#define FRAME_GET_STRIDE(dir, comp) \
|
||||||
((dir)->info.plane[comp].stride)
|
((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))
|
((dir)->data[comp] + FRAME_GET_STRIDE (dir, comp) * (line))
|
||||||
|
|
||||||
|
|
|
@ -912,7 +912,7 @@ gst_video_scale_setup_vs_image (VSImage * image, GstVideoFrame * frame,
|
||||||
}
|
}
|
||||||
|
|
||||||
image->real_pixels = frame->data[component];
|
image->real_pixels = frame->data[component];
|
||||||
image->stride = frame->info.plane[component].stride;
|
image->stride = frame->info.stride[component];
|
||||||
|
|
||||||
image->pixels =
|
image->pixels =
|
||||||
image->real_pixels + image->border_top * image->stride +
|
image->real_pixels + image->border_top * image->stride +
|
||||||
|
|
Loading…
Reference in a new issue