X11: use new alignment function

Remove some custom padding and alignment functions and replace with the new
align function from the video library.
This commit is contained in:
Wim Taymans 2012-08-20 11:19:37 +02:00
parent 9583d1bfc9
commit bc9c1685c2
2 changed files with 16 additions and 51 deletions

View file

@ -502,8 +502,6 @@ ximage_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config)
if (!gst_video_info_from_caps (&info, caps)) if (!gst_video_info_from_caps (&info, caps))
goto wrong_caps; goto wrong_caps;
priv->info = info;
GST_LOG_OBJECT (pool, "%dx%d, caps %" GST_PTR_FORMAT, info.width, info.height, GST_LOG_OBJECT (pool, "%dx%d, caps %" GST_PTR_FORMAT, info.width, info.height,
caps); caps);
@ -528,6 +526,9 @@ ximage_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config)
priv->align.padding_left, priv->align.padding_left, priv->align.padding_left, priv->align.padding_left,
priv->align.padding_bottom); priv->align.padding_bottom);
/* do padding and alignment */
gst_video_info_align (&info, &priv->align);
/* we need the video metadata too now */ /* we need the video metadata too now */
priv->add_metavideo = TRUE; priv->add_metavideo = TRUE;
} else { } else {
@ -542,6 +543,8 @@ ximage_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config)
GST_VIDEO_INFO_HEIGHT (&info) + priv->align.padding_top + GST_VIDEO_INFO_HEIGHT (&info) + priv->align.padding_top +
priv->align.padding_bottom; priv->align.padding_bottom;
priv->info = info;
return GST_BUFFER_POOL_CLASS (parent_class)->set_config (pool, config); return GST_BUFFER_POOL_CLASS (parent_class)->set_config (pool, config);
/* ERRORS */ /* ERRORS */
@ -583,25 +586,11 @@ ximage_buffer_pool_alloc (GstBufferPool * pool, GstBuffer ** buffer,
goto no_buffer; goto no_buffer;
} }
if (priv->add_metavideo) { if (priv->add_metavideo) {
GstVideoMeta *meta;
GST_DEBUG_OBJECT (pool, "adding GstVideoMeta"); GST_DEBUG_OBJECT (pool, "adding GstVideoMeta");
/* these are just the defaults for now */ /* these are just the defaults for now */
meta = gst_buffer_add_video_meta (ximage, GST_VIDEO_FRAME_FLAG_NONE, gst_buffer_add_video_meta_full (ximage, GST_VIDEO_FRAME_FLAG_NONE,
GST_VIDEO_INFO_FORMAT (info), priv->padded_width, priv->padded_height); GST_VIDEO_INFO_FORMAT (info), priv->padded_width, priv->padded_height,
GST_VIDEO_INFO_N_PLANES (info), info->offset, info->stride);
if (priv->need_alignment) {
gint vpad, hpad, pstride;
vpad = priv->align.padding_left;
hpad = priv->align.padding_top;
meta->width = GST_VIDEO_INFO_WIDTH (&priv->info);
meta->height = GST_VIDEO_INFO_HEIGHT (&priv->info);
pstride = GST_VIDEO_INFO_COMP_PSTRIDE (&priv->info, 0);
meta->offset[0] += (vpad * meta->stride[0]) + (hpad * pstride);
}
} }
*buffer = ximage; *buffer = ximage;

View file

@ -548,7 +548,6 @@ xvimage_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config)
if (priv->caps) if (priv->caps)
gst_caps_unref (priv->caps); gst_caps_unref (priv->caps);
priv->caps = gst_caps_ref (caps); priv->caps = gst_caps_ref (caps);
priv->info = info;
/* enable metadata based on config of the pool */ /* enable metadata based on config of the pool */
priv->add_metavideo = priv->add_metavideo =
@ -566,6 +565,9 @@ xvimage_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config)
priv->align.padding_left, priv->align.padding_left, priv->align.padding_left, priv->align.padding_left,
priv->align.padding_bottom); priv->align.padding_bottom);
/* do padding and alignment */
gst_video_info_align (&info, &priv->align);
/* we need the video metadata too now */ /* we need the video metadata too now */
priv->add_metavideo = TRUE; priv->add_metavideo = TRUE;
} else { } else {
@ -580,6 +582,8 @@ xvimage_buffer_pool_set_config (GstBufferPool * pool, GstStructure * config)
GST_VIDEO_INFO_HEIGHT (&info) + priv->align.padding_top + GST_VIDEO_INFO_HEIGHT (&info) + priv->align.padding_top +
priv->align.padding_bottom; priv->align.padding_bottom;
priv->info = info;
return GST_BUFFER_POOL_CLASS (parent_class)->set_config (pool, config); return GST_BUFFER_POOL_CLASS (parent_class)->set_config (pool, config);
/* ERRORS */ /* ERRORS */
@ -632,38 +636,10 @@ xvimage_buffer_pool_alloc (GstBufferPool * pool, GstBuffer ** buffer,
} }
if (priv->add_metavideo) { if (priv->add_metavideo) {
GstVideoMeta *meta;
const GstVideoFormatInfo *vinfo = info->finfo;
gint i;
GST_DEBUG_OBJECT (pool, "adding GstVideoMeta"); GST_DEBUG_OBJECT (pool, "adding GstVideoMeta");
/* these are just the defaults for now */ gst_buffer_add_video_meta_full (xvimage, GST_VIDEO_FRAME_FLAG_NONE,
meta = gst_buffer_add_video_meta (xvimage, GST_VIDEO_FRAME_FLAG_NONE, GST_VIDEO_INFO_FORMAT (info), priv->padded_width, priv->padded_height,
GST_VIDEO_INFO_FORMAT (info), priv->padded_width, priv->padded_height); GST_VIDEO_INFO_N_PLANES (info), info->offset, info->stride);
if (priv->need_alignment) {
meta->width = GST_VIDEO_INFO_WIDTH (&priv->info);
meta->height = GST_VIDEO_INFO_HEIGHT (&priv->info);
/* FIXME, not quite correct, NV12 would apply the vedge twice on the second
* plane */
for (i = 0; i < GST_VIDEO_INFO_N_COMPONENTS (info); i++) {
gint vedge, hedge, plane;
hedge =
GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (vinfo, i,
priv->align.padding_left);
vedge =
GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (vinfo, i,
priv->align.padding_top);
plane = GST_VIDEO_FORMAT_INFO_PLANE (vinfo, i);
GST_LOG_OBJECT (pool, "comp %d, plane %d: hedge %d, vedge %d", i,
plane, hedge, vedge);
meta->offset[plane] += (vedge * meta->stride[plane]) + hedge;
}
}
} }
*buffer = xvimage; *buffer = xvimage;