mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 03:35:21 +00:00
video-converter: disable fastpath for crop and border
Add crop and border properties to the fastpath table and only select fastpath functions when it can handle the cropping or borders. Fixes https://bugzilla.gnome.org/show_bug.cgi?id=744028
This commit is contained in:
parent
3dfbd11fc8
commit
36a50778af
1 changed files with 145 additions and 71 deletions
|
@ -3183,6 +3183,8 @@ typedef struct
|
||||||
gboolean keeps_interlaced;
|
gboolean keeps_interlaced;
|
||||||
gboolean needs_color_matrix;
|
gboolean needs_color_matrix;
|
||||||
gboolean keeps_size;
|
gboolean keeps_size;
|
||||||
|
gboolean do_crop;
|
||||||
|
gboolean do_border;
|
||||||
gint width_align, height_align;
|
gint width_align, height_align;
|
||||||
void (*convert) (GstVideoConverter * convert, const GstVideoFrame * src,
|
void (*convert) (GstVideoConverter * convert, const GstVideoFrame * src,
|
||||||
GstVideoFrame * dest);
|
GstVideoFrame * dest);
|
||||||
|
@ -3190,162 +3192,229 @@ typedef struct
|
||||||
} VideoTransform;
|
} VideoTransform;
|
||||||
|
|
||||||
static const VideoTransform transforms[] = {
|
static const VideoTransform transforms[] = {
|
||||||
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_I420_YUY2},
|
convert_I420_YUY2},
|
||||||
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_I420_UYVY},
|
convert_I420_UYVY},
|
||||||
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_I420_AYUV},
|
convert_I420_AYUV},
|
||||||
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_I420_Y42B},
|
convert_I420_Y42B},
|
||||||
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_I420_Y444},
|
convert_I420_Y444},
|
||||||
|
|
||||||
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_I420_YUY2},
|
convert_I420_YUY2},
|
||||||
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_I420_UYVY},
|
convert_I420_UYVY},
|
||||||
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_I420_AYUV},
|
convert_I420_AYUV},
|
||||||
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_Y42B, FALSE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_I420_Y42B},
|
convert_I420_Y42B},
|
||||||
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_I420_Y444},
|
convert_I420_Y444},
|
||||||
|
|
||||||
{GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_I420, TRUE, FALSE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_I420, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_YUY2_I420},
|
convert_YUY2_I420},
|
||||||
{GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_YV12, TRUE, FALSE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_YV12, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_YUY2_I420},
|
convert_YUY2_I420},
|
||||||
{GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_UYVY_YUY2}, /* alias */
|
convert_UYVY_YUY2}, /* alias */
|
||||||
{GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_YUY2_AYUV},
|
convert_YUY2_AYUV},
|
||||||
{GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_Y42B, TRUE, FALSE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_Y42B, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_YUY2_Y42B},
|
convert_YUY2_Y42B},
|
||||||
{GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_Y444, TRUE, FALSE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_Y444, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_YUY2_Y444},
|
convert_YUY2_Y444},
|
||||||
|
|
||||||
{GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_I420, TRUE, FALSE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_I420, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_UYVY_I420},
|
convert_UYVY_I420},
|
||||||
{GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_YV12, TRUE, FALSE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_YV12, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_UYVY_I420},
|
convert_UYVY_I420},
|
||||||
{GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_UYVY_YUY2},
|
convert_UYVY_YUY2},
|
||||||
{GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_UYVY_AYUV},
|
convert_UYVY_AYUV},
|
||||||
{GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_Y42B, TRUE, FALSE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_Y42B, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_UYVY_Y42B},
|
convert_UYVY_Y42B},
|
||||||
{GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_Y444, TRUE, FALSE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_Y444, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_UYVY_Y444},
|
convert_UYVY_Y444},
|
||||||
|
|
||||||
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_I420, FALSE, FALSE, TRUE, 1, 1,
|
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_I420, FALSE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 1, 1,
|
||||||
convert_AYUV_I420},
|
convert_AYUV_I420},
|
||||||
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, TRUE, 1, 1,
|
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 1, 1,
|
||||||
convert_AYUV_I420},
|
convert_AYUV_I420},
|
||||||
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, 1, 0,
|
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 1, 0,
|
||||||
convert_AYUV_YUY2},
|
convert_AYUV_YUY2},
|
||||||
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, 1, 0,
|
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 1, 0,
|
||||||
convert_AYUV_UYVY},
|
convert_AYUV_UYVY},
|
||||||
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_Y42B, TRUE, FALSE, TRUE, 1, 0,
|
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_Y42B, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 1, 0,
|
||||||
convert_AYUV_Y42B},
|
convert_AYUV_Y42B},
|
||||||
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_Y444, TRUE, FALSE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_Y444, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_AYUV_Y444},
|
convert_AYUV_Y444},
|
||||||
|
|
||||||
{GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_I420, FALSE, FALSE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_I420, FALSE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_Y42B_I420},
|
convert_Y42B_I420},
|
||||||
{GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_Y42B_I420},
|
convert_Y42B_I420},
|
||||||
{GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_Y42B_YUY2},
|
convert_Y42B_YUY2},
|
||||||
{GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_Y42B_UYVY},
|
convert_Y42B_UYVY},
|
||||||
{GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, 1, 0,
|
{GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 1, 0,
|
||||||
convert_Y42B_AYUV},
|
convert_Y42B_AYUV},
|
||||||
{GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_Y444, TRUE, FALSE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_Y444, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_Y42B_Y444},
|
convert_Y42B_Y444},
|
||||||
|
|
||||||
{GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_I420, FALSE, FALSE, TRUE, 1, 0,
|
{GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_I420, FALSE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 1, 0,
|
||||||
convert_Y444_I420},
|
convert_Y444_I420},
|
||||||
{GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, TRUE, 1, 0,
|
{GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_YV12, FALSE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 1, 0,
|
||||||
convert_Y444_I420},
|
convert_Y444_I420},
|
||||||
{GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, 1, 0,
|
{GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 1, 0,
|
||||||
convert_Y444_YUY2},
|
convert_Y444_YUY2},
|
||||||
{GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, 1, 0,
|
{GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 1, 0,
|
||||||
convert_Y444_UYVY},
|
convert_Y444_UYVY},
|
||||||
{GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_AYUV, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_Y444_AYUV},
|
convert_Y444_AYUV},
|
||||||
{GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_Y42B, TRUE, FALSE, TRUE, 1, 0,
|
{GST_VIDEO_FORMAT_Y444, GST_VIDEO_FORMAT_Y42B, TRUE, FALSE, TRUE, FALSE,
|
||||||
|
FALSE, 1, 0,
|
||||||
convert_Y444_Y42B},
|
convert_Y444_Y42B},
|
||||||
|
|
||||||
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
|
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
|
||||||
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_ARGB, TRUE, TRUE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_ARGB, TRUE, TRUE, TRUE, FALSE, FALSE,
|
||||||
|
0, 0,
|
||||||
convert_AYUV_ARGB},
|
convert_AYUV_ARGB},
|
||||||
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_BGRA, TRUE, TRUE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_BGRA, TRUE, TRUE, TRUE, FALSE, FALSE,
|
||||||
|
0, 0,
|
||||||
convert_AYUV_BGRA},
|
convert_AYUV_BGRA},
|
||||||
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_xRGB, TRUE, TRUE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_xRGB, TRUE, TRUE, TRUE, FALSE, FALSE,
|
||||||
|
0, 0,
|
||||||
convert_AYUV_ARGB}, /* alias */
|
convert_AYUV_ARGB}, /* alias */
|
||||||
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_BGRx, TRUE, TRUE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_BGRx, TRUE, TRUE, TRUE, FALSE, FALSE,
|
||||||
|
0, 0,
|
||||||
convert_AYUV_BGRA}, /* alias */
|
convert_AYUV_BGRA}, /* alias */
|
||||||
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_ABGR, TRUE, TRUE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_ABGR, TRUE, TRUE, TRUE, FALSE, FALSE,
|
||||||
|
0, 0,
|
||||||
convert_AYUV_ABGR},
|
convert_AYUV_ABGR},
|
||||||
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_RGBA, TRUE, TRUE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_RGBA, TRUE, TRUE, TRUE, FALSE, FALSE,
|
||||||
|
0, 0,
|
||||||
convert_AYUV_RGBA},
|
convert_AYUV_RGBA},
|
||||||
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_xBGR, TRUE, TRUE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_xBGR, TRUE, TRUE, TRUE, FALSE, FALSE,
|
||||||
|
0, 0,
|
||||||
convert_AYUV_ABGR}, /* alias */
|
convert_AYUV_ABGR}, /* alias */
|
||||||
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_RGBx, TRUE, TRUE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_RGBx, TRUE, TRUE, TRUE, FALSE, FALSE,
|
||||||
|
0, 0,
|
||||||
convert_AYUV_RGBA}, /* alias */
|
convert_AYUV_RGBA}, /* alias */
|
||||||
|
|
||||||
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_BGRA, FALSE, TRUE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_BGRA, FALSE, TRUE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_I420_BGRA},
|
convert_I420_BGRA},
|
||||||
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_BGRx, FALSE, TRUE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_BGRx, FALSE, TRUE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_I420_BGRA},
|
convert_I420_BGRA},
|
||||||
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_BGRA, FALSE, TRUE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_BGRA, FALSE, TRUE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_I420_BGRA},
|
convert_I420_BGRA},
|
||||||
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_BGRx, FALSE, TRUE, TRUE, 0, 0,
|
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_BGRx, FALSE, TRUE, TRUE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_I420_BGRA},
|
convert_I420_BGRA},
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_I420, TRUE, FALSE, FALSE, 0, 0,
|
{GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_I420, TRUE, FALSE, FALSE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_scale_planes, GST_VIDEO_FORMAT_GRAY8},
|
convert_scale_planes, GST_VIDEO_FORMAT_GRAY8},
|
||||||
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_YV12, TRUE, FALSE, FALSE, 0, 0,
|
{GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_YV12, TRUE, FALSE, FALSE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_scale_planes, GST_VIDEO_FORMAT_GRAY8},
|
convert_scale_planes, GST_VIDEO_FORMAT_GRAY8},
|
||||||
{GST_VIDEO_FORMAT_Y41B, GST_VIDEO_FORMAT_Y41B, TRUE, FALSE, FALSE, 0, 0,
|
{GST_VIDEO_FORMAT_Y41B, GST_VIDEO_FORMAT_Y41B, TRUE, FALSE, FALSE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_scale_planes, GST_VIDEO_FORMAT_GRAY8},
|
convert_scale_planes, GST_VIDEO_FORMAT_GRAY8},
|
||||||
{GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_Y42B, TRUE, FALSE, FALSE, 0, 0,
|
{GST_VIDEO_FORMAT_Y42B, GST_VIDEO_FORMAT_Y42B, TRUE, FALSE, FALSE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_scale_planes, GST_VIDEO_FORMAT_GRAY8},
|
convert_scale_planes, GST_VIDEO_FORMAT_GRAY8},
|
||||||
{GST_VIDEO_FORMAT_A420, GST_VIDEO_FORMAT_A420, TRUE, FALSE, FALSE, 0, 0,
|
{GST_VIDEO_FORMAT_A420, GST_VIDEO_FORMAT_A420, TRUE, FALSE, FALSE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_scale_planes, GST_VIDEO_FORMAT_GRAY8},
|
convert_scale_planes, GST_VIDEO_FORMAT_GRAY8},
|
||||||
{GST_VIDEO_FORMAT_YUV9, GST_VIDEO_FORMAT_YUV9, TRUE, FALSE, FALSE, 0, 0,
|
{GST_VIDEO_FORMAT_YUV9, GST_VIDEO_FORMAT_YUV9, TRUE, FALSE, FALSE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_scale_planes, GST_VIDEO_FORMAT_GRAY8},
|
convert_scale_planes, GST_VIDEO_FORMAT_GRAY8},
|
||||||
{GST_VIDEO_FORMAT_YVU9, GST_VIDEO_FORMAT_YVU9, TRUE, FALSE, FALSE, 0, 0,
|
{GST_VIDEO_FORMAT_YVU9, GST_VIDEO_FORMAT_YVU9, TRUE, FALSE, FALSE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_scale_planes, GST_VIDEO_FORMAT_GRAY8},
|
convert_scale_planes, GST_VIDEO_FORMAT_GRAY8},
|
||||||
|
|
||||||
{GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, FALSE, 0, 0,
|
{GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_YUY2, TRUE, FALSE, FALSE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_scale_planes, GST_VIDEO_FORMAT_YUY2},
|
convert_scale_planes, GST_VIDEO_FORMAT_YUY2},
|
||||||
{GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, FALSE, 0, 0,
|
{GST_VIDEO_FORMAT_UYVY, GST_VIDEO_FORMAT_UYVY, TRUE, FALSE, FALSE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_scale_planes, GST_VIDEO_FORMAT_UYVY},
|
convert_scale_planes, GST_VIDEO_FORMAT_UYVY},
|
||||||
{GST_VIDEO_FORMAT_YVYU, GST_VIDEO_FORMAT_YVYU, TRUE, FALSE, FALSE, 0, 0,
|
{GST_VIDEO_FORMAT_YVYU, GST_VIDEO_FORMAT_YVYU, TRUE, FALSE, FALSE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_scale_planes, GST_VIDEO_FORMAT_YVYU},
|
convert_scale_planes, GST_VIDEO_FORMAT_YVYU},
|
||||||
|
|
||||||
{GST_VIDEO_FORMAT_RGB15, GST_VIDEO_FORMAT_RGB15, TRUE, FALSE, FALSE, 0, 0,
|
{GST_VIDEO_FORMAT_RGB15, GST_VIDEO_FORMAT_RGB15, TRUE, FALSE, FALSE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_scale_planes, GST_VIDEO_FORMAT_NV12},
|
convert_scale_planes, GST_VIDEO_FORMAT_NV12},
|
||||||
{GST_VIDEO_FORMAT_RGB16, GST_VIDEO_FORMAT_RGB16, TRUE, FALSE, FALSE, 0, 0,
|
{GST_VIDEO_FORMAT_RGB16, GST_VIDEO_FORMAT_RGB16, TRUE, FALSE, FALSE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_scale_planes, GST_VIDEO_FORMAT_NV12},
|
convert_scale_planes, GST_VIDEO_FORMAT_NV12},
|
||||||
|
|
||||||
{GST_VIDEO_FORMAT_RGB, GST_VIDEO_FORMAT_RGB, TRUE, FALSE, FALSE, 0, 0,
|
{GST_VIDEO_FORMAT_RGB, GST_VIDEO_FORMAT_RGB, TRUE, FALSE, FALSE, FALSE, FALSE,
|
||||||
|
0, 0,
|
||||||
convert_scale_planes, GST_VIDEO_FORMAT_RGB},
|
convert_scale_planes, GST_VIDEO_FORMAT_RGB},
|
||||||
{GST_VIDEO_FORMAT_BGR, GST_VIDEO_FORMAT_BGR, TRUE, FALSE, FALSE, 0, 0,
|
{GST_VIDEO_FORMAT_BGR, GST_VIDEO_FORMAT_BGR, TRUE, FALSE, FALSE, FALSE, FALSE,
|
||||||
|
0, 0,
|
||||||
convert_scale_planes, GST_VIDEO_FORMAT_BGR},
|
convert_scale_planes, GST_VIDEO_FORMAT_BGR},
|
||||||
|
|
||||||
{GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_GRAY8, TRUE, FALSE, FALSE, 0, 0,
|
{GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_GRAY8, TRUE, FALSE, FALSE, FALSE,
|
||||||
|
FALSE, 0, 0,
|
||||||
convert_scale_planes, GST_VIDEO_FORMAT_GRAY8},
|
convert_scale_planes, GST_VIDEO_FORMAT_GRAY8},
|
||||||
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
|
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
|
||||||
{GST_VIDEO_FORMAT_GRAY16_LE, GST_VIDEO_FORMAT_GRAY16_LE, TRUE, FALSE, FALSE,
|
{GST_VIDEO_FORMAT_GRAY16_LE, GST_VIDEO_FORMAT_GRAY16_LE, TRUE, FALSE, FALSE,
|
||||||
0, 0,
|
FALSE, FALSE, 0, 0,
|
||||||
convert_scale_planes, GST_VIDEO_FORMAT_GRAY16_LE},
|
convert_scale_planes, GST_VIDEO_FORMAT_GRAY16_LE},
|
||||||
#else
|
#else
|
||||||
{GST_VIDEO_FORMAT_GRAY16_BE, GST_VIDEO_FORMAT_GRAY16_BE, TRUE, FALSE, FALSE,
|
{GST_VIDEO_FORMAT_GRAY16_BE, GST_VIDEO_FORMAT_GRAY16_BE, TRUE, FALSE, FALSE,
|
||||||
0, 0,
|
FALSE, FALSE, 0, 0,
|
||||||
convert_scale_planes, GST_VIDEO_FORMAT_GRAY16_BE},
|
convert_scale_planes, GST_VIDEO_FORMAT_GRAY16_BE},
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
@ -3356,7 +3425,7 @@ video_converter_lookup_fastpath (GstVideoConverter * convert)
|
||||||
int i;
|
int i;
|
||||||
GstVideoFormat in_format, out_format;
|
GstVideoFormat in_format, out_format;
|
||||||
GstVideoTransferFunction in_transf, out_transf;
|
GstVideoTransferFunction in_transf, out_transf;
|
||||||
gboolean interlaced, same_matrix, same_primaries, same_size;
|
gboolean interlaced, same_matrix, same_primaries, same_size, crop, border;
|
||||||
gint width, height;
|
gint width, height;
|
||||||
|
|
||||||
width = GST_VIDEO_INFO_WIDTH (&convert->in_info);
|
width = GST_VIDEO_INFO_WIDTH (&convert->in_info);
|
||||||
|
@ -3399,6 +3468,9 @@ video_converter_lookup_fastpath (GstVideoConverter * convert)
|
||||||
interlaced = GST_VIDEO_INFO_IS_INTERLACED (&convert->in_info);
|
interlaced = GST_VIDEO_INFO_IS_INTERLACED (&convert->in_info);
|
||||||
interlaced |= GST_VIDEO_INFO_IS_INTERLACED (&convert->out_info);
|
interlaced |= GST_VIDEO_INFO_IS_INTERLACED (&convert->out_info);
|
||||||
|
|
||||||
|
crop = convert->in_x || convert->in_y;
|
||||||
|
border = convert->out_x || convert->out_y;
|
||||||
|
|
||||||
for (i = 0; i < sizeof (transforms) / sizeof (transforms[0]); i++) {
|
for (i = 0; i < sizeof (transforms) / sizeof (transforms[0]); i++) {
|
||||||
if (transforms[i].in_format == in_format &&
|
if (transforms[i].in_format == in_format &&
|
||||||
transforms[i].out_format == out_format &&
|
transforms[i].out_format == out_format &&
|
||||||
|
@ -3406,7 +3478,9 @@ video_converter_lookup_fastpath (GstVideoConverter * convert)
|
||||||
(transforms[i].needs_color_matrix || (same_matrix && same_primaries))
|
(transforms[i].needs_color_matrix || (same_matrix && same_primaries))
|
||||||
&& (transforms[i].keeps_size || !same_size)
|
&& (transforms[i].keeps_size || !same_size)
|
||||||
&& (transforms[i].width_align & width) == 0
|
&& (transforms[i].width_align & width) == 0
|
||||||
&& (transforms[i].height_align & height) == 0) {
|
&& (transforms[i].height_align & height) == 0
|
||||||
|
&& (transforms[i].do_crop || !crop)
|
||||||
|
&& (transforms[i].do_border || !border)) {
|
||||||
GST_DEBUG ("using fastpath");
|
GST_DEBUG ("using fastpath");
|
||||||
if (transforms[i].needs_color_matrix)
|
if (transforms[i].needs_color_matrix)
|
||||||
video_converter_compute_matrix (convert);
|
video_converter_compute_matrix (convert);
|
||||||
|
|
Loading…
Reference in a new issue