mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-23 06:26:23 +00:00
gst/: More stride fixes.
Original commit message from CVS: * gst/alpha/gstalpha.c: (gst_alpha_set_property), (gst_alpha_add), (gst_alpha_chroma_key), (gst_alpha_init_params), (gst_alpha_chain): * gst/videomixer/videomixer.c: (gst_videomixer_blend_ayuv_i420), (gst_videomixer_fill_checker), (gst_videomixer_blend_buffers), (gst_videomixer_loop): More stride fixes.
This commit is contained in:
parent
0674c96ddb
commit
d14f98738d
3 changed files with 37 additions and 29 deletions
|
@ -1,3 +1,12 @@
|
|||
2004-11-05 Wim Taymans <wim@fluendo.com>
|
||||
|
||||
* gst/alpha/gstalpha.c: (gst_alpha_set_property), (gst_alpha_add),
|
||||
(gst_alpha_chroma_key), (gst_alpha_init_params), (gst_alpha_chain):
|
||||
* gst/videomixer/videomixer.c: (gst_videomixer_blend_ayuv_i420),
|
||||
(gst_videomixer_fill_checker), (gst_videomixer_blend_buffers),
|
||||
(gst_videomixer_loop):
|
||||
More stride fixes.
|
||||
|
||||
2004-11-05 Benjamin Otte <otte@gnome.org>
|
||||
|
||||
* ext/mad/gstmad.c: (gst_mad_chain):
|
||||
|
|
|
@ -49,8 +49,9 @@ typedef enum
|
|||
}
|
||||
GstAlphaMethod;
|
||||
|
||||
#define ROUND_UP_4(x) (((x) + 3) & ~3)
|
||||
#define ROUND_UP_2(x) (((x) + 1) & ~1)
|
||||
#define ROUND_UP_4(x) (((x) + 3) & ~3)
|
||||
#define ROUND_UP_8(x) (((x) + 7) & ~7)
|
||||
|
||||
struct _GstAlpha
|
||||
{
|
||||
|
@ -399,8 +400,6 @@ gst_alpha_sink_link (GstPad * pad, const GstCaps * caps)
|
|||
return GST_PAD_LINK_OK;
|
||||
}
|
||||
|
||||
#define ROUND_UP_4(x) (((x) + 3) & ~3)
|
||||
|
||||
static void
|
||||
gst_alpha_add (guint8 * src, guint8 * dest, gint width, gint height,
|
||||
gdouble alpha)
|
||||
|
@ -410,17 +409,17 @@ gst_alpha_add (guint8 * src, guint8 * dest, gint width, gint height,
|
|||
guint8 *srcU;
|
||||
guint8 *srcV;
|
||||
gint i, j;
|
||||
gint w2, h2;
|
||||
gint size, size2;
|
||||
gint stride, stride2;
|
||||
gint wrap, wrap2;
|
||||
|
||||
width = ROUND_UP_2 (width);
|
||||
height = ROUND_UP_2 (height);
|
||||
|
||||
stride = ROUND_UP_4 (width);
|
||||
size = stride * height;
|
||||
w2 = (width + 1) >> 1;
|
||||
stride2 = ROUND_UP_4 (w2);
|
||||
h2 = (height + 1) >> 1;
|
||||
size2 = stride2 * h2;
|
||||
stride2 = ROUND_UP_8 (width) / 2;
|
||||
size2 = stride2 * height / 2;
|
||||
|
||||
wrap = stride - 2 * (width / 2);
|
||||
wrap2 = stride2 - width / 2;
|
||||
|
@ -463,19 +462,19 @@ gst_alpha_chroma_key (gchar * src, gchar * dest, gint width, gint height,
|
|||
guint8 *dest1, *dest2;
|
||||
gint i, j;
|
||||
gint x, z, u, v, y11, y12, y21, y22;
|
||||
gint w2, h2;
|
||||
gint size, size2;
|
||||
gint stride, stride2;
|
||||
gint wrap, wrap2, wrap3;
|
||||
gint tmp, tmp1;
|
||||
gint x1, y1;
|
||||
|
||||
width = ROUND_UP_2 (width);
|
||||
height = ROUND_UP_2 (height);
|
||||
|
||||
stride = ROUND_UP_4 (width);
|
||||
size = stride * height;
|
||||
w2 = (width + 1) >> 1;
|
||||
stride2 = ROUND_UP_4 (w2);
|
||||
h2 = (height + 1) >> 1;
|
||||
size2 = stride2 * h2;
|
||||
stride2 = ROUND_UP_8 (width) / 2;
|
||||
size2 = stride2 * height / 2;
|
||||
|
||||
srcY1 = src;
|
||||
srcY2 = src + stride;
|
||||
|
@ -487,7 +486,7 @@ gst_alpha_chroma_key (gchar * src, gchar * dest, gint width, gint height,
|
|||
|
||||
wrap = 2 * stride - 2 * (width / 2);
|
||||
wrap2 = stride2 - width / 2;
|
||||
wrap3 = 8 * width - 8 * (ROUND_UP_2 (width) / 2);
|
||||
wrap3 = 8 * width - 8 * (width / 2);
|
||||
|
||||
for (i = 0; i < height / 2; i++) {
|
||||
for (j = 0; j < width / 2; j++) {
|
||||
|
@ -676,7 +675,9 @@ gst_alpha_chain (GstPad * pad, GstData * _data)
|
|||
alpha->out_height = new_height;
|
||||
}
|
||||
|
||||
outbuf = gst_buffer_new_and_alloc (new_width * new_height * 4);
|
||||
outbuf =
|
||||
gst_buffer_new_and_alloc (ROUND_UP_2 (new_width) *
|
||||
ROUND_UP_2 (new_height) * 4);
|
||||
GST_BUFFER_TIMESTAMP (outbuf) = GST_BUFFER_TIMESTAMP (buffer);
|
||||
GST_BUFFER_DURATION (outbuf) = GST_BUFFER_DURATION (buffer);
|
||||
|
||||
|
|
|
@ -746,8 +746,9 @@ gst_videomixer_handle_src_event (GstPad * pad, GstEvent * event)
|
|||
#define BLEND_MODE BLEND_HARDLIGHT
|
||||
#endif
|
||||
|
||||
#define ROUND_UP_4(x) (((x) + 3) & ~3)
|
||||
#define ROUND_UP_2(x) (((x) + 1) & ~1)
|
||||
#define ROUND_UP_4(x) (((x) + 3) & ~3)
|
||||
#define ROUND_UP_8(x) (((x) + 7) & ~7)
|
||||
|
||||
/* note that this function does packing conversion and blending at the
|
||||
* same time */
|
||||
|
@ -767,16 +768,13 @@ gst_videomixer_blend_ayuv_i420 (guint8 * src, gint xpos, gint ypos,
|
|||
guint8 *src1, *src2;
|
||||
gint Y, U, V;
|
||||
gint dest_stride, dest_stride2;
|
||||
gint w2, h2;
|
||||
|
||||
src_stride = src_width * 4;
|
||||
src_stride = ROUND_UP_2 (src_width) * 4;
|
||||
|
||||
dest_stride = ROUND_UP_4 (dest_width);
|
||||
dest_size = dest_stride * dest_height;
|
||||
w2 = (dest_width + 1) >> 1;
|
||||
dest_stride2 = ROUND_UP_4 (w2);
|
||||
h2 = (dest_height + 1) >> 1;
|
||||
dest_size2 = dest_stride2 * h2;
|
||||
dest_size = dest_stride * ROUND_UP_2 (dest_height);
|
||||
dest_stride2 = ROUND_UP_8 (dest_width) / 2;
|
||||
dest_size2 = dest_stride2 * ROUND_UP_2 (dest_height) / 2;
|
||||
|
||||
b_alpha = (gint) (src_alpha * 255);
|
||||
|
||||
|
@ -800,8 +798,8 @@ gst_videomixer_blend_ayuv_i420 (guint8 * src, gint xpos, gint ypos,
|
|||
}
|
||||
|
||||
src_add = 2 * src_stride - (8 * ROUND_UP_2 (src_width) / 2);
|
||||
destY_add = 2 * dest_stride - (2 * (src_width / 2));
|
||||
destC_add = dest_stride2 - (src_width / 2);
|
||||
destY_add = 2 * dest_stride - (2 * (ROUND_UP_2 (src_width) / 2));
|
||||
destC_add = dest_stride2 - (ROUND_UP_2 (src_width) / 2);
|
||||
|
||||
destY1 = dest + xpos + (ypos * dest_stride);
|
||||
destY2 = destY1 + dest_stride;
|
||||
|
@ -812,8 +810,8 @@ gst_videomixer_blend_ayuv_i420 (guint8 * src, gint xpos, gint ypos,
|
|||
src2 = src + src_stride;
|
||||
|
||||
/* we convert a square of 2x2 samples to generate 4 Luma and 2 chroma samples */
|
||||
for (i = 0; i < src_height / 2; i++) {
|
||||
for (j = 0; j < src_width / 2; j++) {
|
||||
for (i = 0; i < ROUND_UP_2 (src_height) / 2; i++) {
|
||||
for (j = 0; j < ROUND_UP_2 (src_width) / 2; j++) {
|
||||
alpha = (src1[0] * b_alpha) >> 8;
|
||||
BLEND_MODE (destY1[0], destU[0], destV[0], src1[1], src1[2], src1[3],
|
||||
alpha, Y, U, V);
|
||||
|
@ -1099,8 +1097,8 @@ gst_videomixer_loop (GstElement * element)
|
|||
mix->out_height = new_height;
|
||||
}
|
||||
|
||||
outsize = ROUND_UP_4 (mix->out_width) * mix->out_height +
|
||||
2 * ROUND_UP_4 ((mix->out_width + 1) >> 1) * ((mix->out_height + 1) >> 1);
|
||||
outsize = ROUND_UP_4 (mix->out_width) * ROUND_UP_2 (mix->out_height) +
|
||||
2 * ROUND_UP_8 (mix->out_width) / 2 * ROUND_UP_2 (mix->out_height);
|
||||
|
||||
outbuf = gst_pad_alloc_buffer (mix->srcpad, GST_BUFFER_OFFSET_NONE, outsize);
|
||||
switch (mix->background) {
|
||||
|
|
Loading…
Reference in a new issue