gst/videoscale/: Support 1x1 images as input and output as for example the BBC HQ new streams have 1x1 GIFs in the pl...

Original commit message from CVS:
* gst/videoscale/gstvideoscale.c:
* gst/videoscale/vs_4tap.c: (vs_image_scale_4tap_Y):
* gst/videoscale/vs_image.c: (vs_image_scale_nearest_RGBA),
(vs_image_scale_linear_RGBA), (vs_image_scale_nearest_RGB),
(vs_image_scale_linear_RGB), (vs_image_scale_nearest_YUYV),
(vs_image_scale_linear_YUYV), (vs_image_scale_nearest_UYVY),
(vs_image_scale_linear_UYVY), (vs_image_scale_nearest_Y),
(vs_image_scale_linear_Y), (vs_image_scale_nearest_RGB565),
(vs_image_scale_linear_RGB565), (vs_image_scale_nearest_RGB555),
(vs_image_scale_linear_RGB555):
Support 1x1 images as input and output as for example the BBC HQ new
streams have 1x1 GIFs in the playlists for some reason.
This commit is contained in:
Sebastian Dröge 2008-05-02 10:02:05 +00:00
parent ea0d78e8e5
commit abbce230e2
4 changed files with 151 additions and 34 deletions

View File

@ -1,3 +1,18 @@
2008-05-02 Sebastian Dröge <slomo@circular-chaos.org>
* gst/videoscale/gstvideoscale.c:
* gst/videoscale/vs_4tap.c: (vs_image_scale_4tap_Y):
* gst/videoscale/vs_image.c: (vs_image_scale_nearest_RGBA),
(vs_image_scale_linear_RGBA), (vs_image_scale_nearest_RGB),
(vs_image_scale_linear_RGB), (vs_image_scale_nearest_YUYV),
(vs_image_scale_linear_YUYV), (vs_image_scale_nearest_UYVY),
(vs_image_scale_linear_UYVY), (vs_image_scale_nearest_Y),
(vs_image_scale_linear_Y), (vs_image_scale_nearest_RGB565),
(vs_image_scale_linear_RGB565), (vs_image_scale_nearest_RGB555),
(vs_image_scale_linear_RGB555):
Support 1x1 images as input and output as for example the BBC HQ new
streams have 1x1 GIFs in the playlists for some reason.
2008-05-01 Tim-Philipp Müller <tim.muller at collabora co uk>
* gst/playback/gstdecodebin.c: (free_pad_probe_for_element),

View File

@ -89,10 +89,6 @@ enum
/* FILL ME */
};
/* can't handle width/height of 1 yet, since we divide a lot by (n-1) */
#undef GST_VIDEO_SIZE_RANGE
#define GST_VIDEO_SIZE_RANGE "(int) [ 2, MAX ]"
static GstStaticCaps gst_video_scale_format_caps[] = {
GST_STATIC_CAPS (GST_VIDEO_CAPS_RGBx),
GST_STATIC_CAPS (GST_VIDEO_CAPS_xRGB),

View File

@ -163,7 +163,14 @@ vs_image_scale_4tap_Y (const VSImage * dest, const VSImage * src,
int xacc;
int k;
if (dest->height == 1)
y_increment = 0;
else
y_increment = ((src->height - 1) << 16) / (dest->height - 1);
if (dest->width == 1)
x_increment = 0;
else
x_increment = ((src->width - 1) << 16) / (dest->width - 1);
k = 0;

View File

@ -46,9 +46,17 @@ vs_image_scale_nearest_RGBA (const VSImage * dest, const VSImage * src,
int x;
int xacc;
if (dest->height == 1)
y_increment = 0;
else
y_increment = ((src->height - 1) << 16) / (dest->height - 1);
if (dest->width == 1)
x_increment = 0;
else
x_increment = ((src->width - 1) << 16) / (dest->width - 1);
acc = 0;
for (i = 0; i < dest->height; i++) {
j = acc >> 16;
@ -79,7 +87,14 @@ vs_image_scale_linear_RGBA (const VSImage * dest, const VSImage * src,
int dest_size;
int xacc;
if (dest->height == 1)
y_increment = 0;
else
y_increment = ((src->height - 1) << 16) / (dest->height - 1);
if (dest->width == 1)
x_increment = 0;
else
x_increment = ((src->width - 1) << 16) / (dest->width - 1);
dest_size = dest->width * 4;
@ -162,7 +177,14 @@ vs_image_scale_nearest_RGB (const VSImage * dest, const VSImage * src,
int x;
int xacc;
if (dest->height == 1)
y_increment = 0;
else
y_increment = ((src->height - 1) << 16) / (dest->height - 1);
if (dest->width == 1)
x_increment = 0;
else
x_increment = ((src->width - 1) << 16) / (dest->width - 1);
acc = 0;
@ -195,7 +217,14 @@ vs_image_scale_linear_RGB (const VSImage * dest, const VSImage * src,
int dest_size;
int xacc;
if (dest->height == 1)
y_increment = 0;
else
y_increment = ((src->height - 1) << 16) / (dest->height - 1);
if (dest->width == 1)
x_increment = 0;
else
x_increment = ((src->width - 1) << 16) / (dest->width - 1);
dest_size = dest->width * 3;
@ -280,7 +309,14 @@ vs_image_scale_nearest_YUYV (const VSImage * dest, const VSImage * src,
int xacc;
int n_quads;
if (dest->height == 1)
y_increment = 0;
else
y_increment = ((src->height - 1) << 16) / (dest->height - 1);
if (dest->width == 1)
x_increment = 0;
else
x_increment = ((src->width - 1) << 16) / (dest->width - 1);
n_quads = ROUND_UP_2 (dest->width) / 2;
@ -315,7 +351,14 @@ vs_image_scale_linear_YUYV (const VSImage * dest, const VSImage * src,
int n_quads;
int xacc;
if (dest->height == 1)
y_increment = 0;
else
y_increment = ((src->height - 1) << 16) / (dest->height - 1);
if (dest->width == 1)
x_increment = 0;
else
x_increment = ((src->width - 1) << 16) / (dest->width - 1);
dest_size = ROUND_UP_4 (dest->width * 2);
@ -398,7 +441,14 @@ vs_image_scale_nearest_UYVY (const VSImage * dest, const VSImage * src,
int xacc;
int n_quads;
if (dest->height == 1)
y_increment = 0;
else
y_increment = ((src->height - 1) << 16) / (dest->height - 1);
if (dest->width == 1)
x_increment = 0;
else
x_increment = ((src->width - 1) << 16) / (dest->width - 1);
n_quads = (dest->width + 1) / 2;
@ -433,7 +483,14 @@ vs_image_scale_linear_UYVY (const VSImage * dest, const VSImage * src,
int n_quads;
int xacc;
if (dest->height == 1)
y_increment = 0;
else
y_increment = ((src->height - 1) << 16) / (dest->height - 1);
if (dest->width == 1)
x_increment = 0;
else
x_increment = ((src->width - 1) << 16) / (dest->width - 1);
dest_size = ROUND_UP_4 (dest->width * 2);
@ -515,7 +572,14 @@ vs_image_scale_nearest_Y (const VSImage * dest, const VSImage * src,
int x;
int xacc;
if (dest->height == 1)
y_increment = 0;
else
y_increment = ((src->height - 1) << 16) / (dest->height - 1);
if (dest->width == 1)
x_increment = 0;
else
x_increment = ((src->width - 1) << 16) / (dest->width - 1);
acc = 0;
@ -548,7 +612,14 @@ vs_image_scale_linear_Y (const VSImage * dest, const VSImage * src,
int dest_size;
int xacc;
if (dest->height == 1)
y_increment = 0;
else
y_increment = ((src->height - 1) << 16) / (dest->height - 1);
if (dest->width == 1)
x_increment = 0;
else
x_increment = ((src->width - 1) << 16) / (dest->width - 1);
dest_size = dest->width;
@ -632,7 +703,14 @@ vs_image_scale_nearest_RGB565 (const VSImage * dest, const VSImage * src,
int x;
int xacc;
if (dest->height == 1)
y_increment = 0;
else
y_increment = ((src->height - 1) << 16) / (dest->height - 1);
if (dest->width == 1)
x_increment = 0;
else
x_increment = ((src->width - 1) << 16) / (dest->width - 1);
acc = 0;
@ -665,7 +743,14 @@ vs_image_scale_linear_RGB565 (const VSImage * dest, const VSImage * src,
int dest_size;
int xacc;
if (dest->height == 1)
y_increment = 0;
else
y_increment = ((src->height - 1) << 16) / (dest->height - 1);
if (dest->width == 1)
x_increment = 0;
else
x_increment = ((src->width - 1) << 16) / (dest->width - 1);
dest_size = dest->width * 2;
@ -749,7 +834,14 @@ vs_image_scale_nearest_RGB555 (const VSImage * dest, const VSImage * src,
int x;
int xacc;
if (dest->height == 1)
y_increment = 0;
else
y_increment = ((src->height - 1) << 16) / (dest->height - 1);
if (dest->width == 1)
x_increment = 0;
else
x_increment = ((src->width - 1) << 16) / (dest->width - 1);
acc = 0;
@ -782,7 +874,14 @@ vs_image_scale_linear_RGB555 (const VSImage * dest, const VSImage * src,
int dest_size;
int xacc;
if (dest->height == 1)
y_increment = 0;
else
y_increment = ((src->height - 1) << 16) / (dest->height - 1);
if (dest->width == 1)
x_increment = 0;
else
x_increment = ((src->width - 1) << 16) / (dest->width - 1);
dest_size = dest->width * 2;