self->parent.row_stride[0]);
}
+static void
+deinterlace_scanline_linear_planar_y_c (GstDeinterlaceSimpleMethod * self,
+ guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ deinterlace_scanline_linear_c (self, out, scanlines->t0, scanlines->b0,
+ self->parent.row_stride[0]);
+}
+
+static void
+deinterlace_scanline_linear_planar_u_c (GstDeinterlaceSimpleMethod * self,
+ guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ deinterlace_scanline_linear_c (self, out, scanlines->t0, scanlines->b0,
+ self->parent.row_stride[1]);
+}
+
+static void
+deinterlace_scanline_linear_planar_v_c (GstDeinterlaceSimpleMethod * self,
+ guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ deinterlace_scanline_linear_c (self, out, scanlines->t0, scanlines->b0,
+ self->parent.row_stride[2]);
+}
+
#ifdef BUILD_X86_ASM
#include "mmx.h"
static void
self->parent.row_stride[0]);
}
+static void
+deinterlace_scanline_linear_planar_y_mmx (GstDeinterlaceSimpleMethod * self,
+ guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ deinterlace_scanline_linear_mmx (self, out, scanlines->t0, scanlines->b0,
+ self->parent.row_stride[0]);
+}
+
+static void
+deinterlace_scanline_linear_planar_u_mmx (GstDeinterlaceSimpleMethod * self,
+ guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ deinterlace_scanline_linear_mmx (self, out, scanlines->t0, scanlines->b0,
+ self->parent.row_stride[1]);
+}
+
+static void
+deinterlace_scanline_linear_planar_v_mmx (GstDeinterlaceSimpleMethod * self,
+ guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ deinterlace_scanline_linear_mmx (self, out, scanlines->t0, scanlines->b0,
+ self->parent.row_stride[2]);
+}
+
#include "sse.h"
static void
deinterlace_scanline_linear_mmxext (GstDeinterlaceSimpleMethod * self,
self->parent.row_stride[0]);
}
+static void
+deinterlace_scanline_linear_planar_y_mmxext (GstDeinterlaceSimpleMethod * self,
+ guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ deinterlace_scanline_linear_mmxext (self, out, scanlines->t0, scanlines->b0,
+ self->parent.row_stride[0]);
+}
+
+static void
+deinterlace_scanline_linear_planar_u_mmxext (GstDeinterlaceSimpleMethod * self,
+ guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ deinterlace_scanline_linear_mmxext (self, out, scanlines->t0, scanlines->b0,
+ self->parent.row_stride[1]);
+}
+
+static void
+deinterlace_scanline_linear_planar_v_mmxext (GstDeinterlaceSimpleMethod * self,
+ guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ deinterlace_scanline_linear_mmxext (self, out, scanlines->t0, scanlines->b0,
+ self->parent.row_stride[2]);
+}
+
#endif
G_DEFINE_TYPE (GstDeinterlaceMethodLinear, gst_deinterlace_method_linear,
dism_class->interpolate_scanline_yuy2 = deinterlace_scanline_linear_packed_c;
dism_class->interpolate_scanline_yvyu = deinterlace_scanline_linear_packed_c;
+ dism_class->interpolate_scanline_planar_y =
+ deinterlace_scanline_linear_planar_y_c;
+ dism_class->interpolate_scanline_planar_u =
+ deinterlace_scanline_linear_planar_u_c;
+ dism_class->interpolate_scanline_planar_v =
+ deinterlace_scanline_linear_planar_v_c;
#ifdef BUILD_X86_ASM
if (cpu_flags & OIL_IMPL_FLAG_MMXEXT) {
deinterlace_scanline_linear_packed_mmxext;
dism_class->interpolate_scanline_yvyu =
deinterlace_scanline_linear_packed_mmxext;
+ dism_class->interpolate_scanline_planar_y =
+ deinterlace_scanline_linear_planar_y_mmxext;
+ dism_class->interpolate_scanline_planar_u =
+ deinterlace_scanline_linear_planar_u_mmxext;
+ dism_class->interpolate_scanline_planar_v =
+ deinterlace_scanline_linear_planar_v_mmxext;
} else if (cpu_flags & OIL_IMPL_FLAG_MMX) {
dism_class->interpolate_scanline_yuy2 =
deinterlace_scanline_linear_packed_mmx;
dism_class->interpolate_scanline_yvyu =
deinterlace_scanline_linear_packed_mmx;
+ dism_class->interpolate_scanline_planar_y =
+ deinterlace_scanline_linear_planar_y_mmx;
+ dism_class->interpolate_scanline_planar_u =
+ deinterlace_scanline_linear_planar_u_mmx;
+ dism_class->interpolate_scanline_planar_v =
+ deinterlace_scanline_linear_planar_v_mmx;
}
#endif
}
scanlines->m1, self->parent.row_stride[0]);
}
+static void
+deinterlace_scanline_linear_blend_planar_y_c (GstDeinterlaceSimpleMethod * self,
+ guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ deinterlace_scanline_linear_blend_c (self, out, scanlines->t0, scanlines->b0,
+ scanlines->m1, self->parent.row_stride[0]);
+}
+
+static void
+deinterlace_scanline_linear_blend_planar_u_c (GstDeinterlaceSimpleMethod * self,
+ guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ deinterlace_scanline_linear_blend_c (self, out, scanlines->t0, scanlines->b0,
+ scanlines->m1, self->parent.row_stride[1]);
+}
+
+static void
+deinterlace_scanline_linear_blend_planar_v_c (GstDeinterlaceSimpleMethod * self,
+ guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ deinterlace_scanline_linear_blend_c (self, out, scanlines->t0, scanlines->b0,
+ scanlines->m1, self->parent.row_stride[2]);
+}
+
static inline void
deinterlace_scanline_linear_blend2_c (GstDeinterlaceSimpleMethod * self,
guint8 * out, const guint8 * m0, const guint8 * t1, const guint8 * b1,
scanlines->b1, self->parent.row_stride[0]);
}
+static void
+deinterlace_scanline_linear_blend2_planar_y_c (GstDeinterlaceSimpleMethod *
+ self, guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ deinterlace_scanline_linear_blend2_c (self, out, scanlines->m0, scanlines->t1,
+ scanlines->b1, self->parent.row_stride[0]);
+}
+
+static void
+deinterlace_scanline_linear_blend2_planar_u_c (GstDeinterlaceSimpleMethod *
+ self, guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ deinterlace_scanline_linear_blend2_c (self, out, scanlines->m0, scanlines->t1,
+ scanlines->b1, self->parent.row_stride[1]);
+}
+
+static void
+deinterlace_scanline_linear_blend2_planar_v_c (GstDeinterlaceSimpleMethod *
+ self, guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ deinterlace_scanline_linear_blend2_c (self, out, scanlines->m0, scanlines->t1,
+ scanlines->b1, self->parent.row_stride[2]);
+}
+
#ifdef BUILD_X86_ASM
#include "mmx.h"
static inline void
scanlines->b0, scanlines->m1, self->parent.row_stride[0]);
}
+static void
+deinterlace_scanline_linear_blend_planar_y_mmx (GstDeinterlaceSimpleMethod *
+ self, guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ deinterlace_scanline_linear_blend_mmx (self, out, scanlines->t0,
+ scanlines->b0, scanlines->m1, self->parent.row_stride[0]);
+}
+
+static void
+deinterlace_scanline_linear_blend_planar_u_mmx (GstDeinterlaceSimpleMethod *
+ self, guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ deinterlace_scanline_linear_blend_mmx (self, out, scanlines->t0,
+ scanlines->b0, scanlines->m1, self->parent.row_stride[1]);
+}
+
+static void
+deinterlace_scanline_linear_blend_planar_v_mmx (GstDeinterlaceSimpleMethod *
+ self, guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ deinterlace_scanline_linear_blend_mmx (self, out, scanlines->t0,
+ scanlines->b0, scanlines->m1, self->parent.row_stride[2]);
+}
+
static inline void
deinterlace_scanline_linear_blend2_mmx (GstDeinterlaceSimpleMethod * self,
guint8 * out, const guint8 * m0, const guint8 * t1, const guint8 * b1,
scanlines->t1, scanlines->b1, self->parent.row_stride[0]);
}
+static void
+deinterlace_scanline_linear_blend2_planar_y_mmx (GstDeinterlaceSimpleMethod *
+ self, guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ deinterlace_scanline_linear_blend2_mmx (self, out, scanlines->m0,
+ scanlines->t1, scanlines->b1, self->parent.row_stride[0]);
+}
+
+static void
+deinterlace_scanline_linear_blend2_planar_u_mmx (GstDeinterlaceSimpleMethod *
+ self, guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ deinterlace_scanline_linear_blend2_mmx (self, out, scanlines->m0,
+ scanlines->t1, scanlines->b1, self->parent.row_stride[1]);
+}
+
+static void
+deinterlace_scanline_linear_blend2_planar_v_mmx (GstDeinterlaceSimpleMethod *
+ self, guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ deinterlace_scanline_linear_blend2_mmx (self, out, scanlines->m0,
+ scanlines->t1, scanlines->b1, self->parent.row_stride[2]);
+}
#endif
G_DEFINE_TYPE (GstDeinterlaceMethodLinearBlend,
deinterlace_scanline_linear_blend_packed_c;
dism_class->interpolate_scanline_yvyu =
deinterlace_scanline_linear_blend_packed_c;
+ dism_class->interpolate_scanline_planar_y =
+ deinterlace_scanline_linear_blend_planar_y_c;
+ dism_class->interpolate_scanline_planar_u =
+ deinterlace_scanline_linear_blend_planar_u_c;
+ dism_class->interpolate_scanline_planar_v =
+ deinterlace_scanline_linear_blend_planar_v_c;
dism_class->copy_scanline_yuy2 = deinterlace_scanline_linear_blend2_packed_c;
dism_class->copy_scanline_yvyu = deinterlace_scanline_linear_blend2_packed_c;
+ dism_class->copy_scanline_planar_y =
+ deinterlace_scanline_linear_blend2_planar_y_c;
+ dism_class->copy_scanline_planar_u =
+ deinterlace_scanline_linear_blend2_planar_u_c;
+ dism_class->copy_scanline_planar_v =
+ deinterlace_scanline_linear_blend2_planar_v_c;
#ifdef BUILD_X86_ASM
if (cpu_flags & OIL_IMPL_FLAG_MMX) {
deinterlace_scanline_linear_blend_packed_mmx;
dism_class->interpolate_scanline_yvyu =
deinterlace_scanline_linear_blend_packed_mmx;
+ dism_class->interpolate_scanline_planar_y =
+ deinterlace_scanline_linear_blend_planar_y_mmx;
+ dism_class->interpolate_scanline_planar_u =
+ deinterlace_scanline_linear_blend_planar_u_mmx;
+ dism_class->interpolate_scanline_planar_v =
+ deinterlace_scanline_linear_blend_planar_v_mmx;
+
dism_class->copy_scanline_yuy2 =
deinterlace_scanline_linear_blend2_packed_mmx;
dism_class->copy_scanline_yvyu =
deinterlace_scanline_linear_blend2_packed_mmx;
+ dism_class->copy_scanline_planar_y =
+ deinterlace_scanline_linear_blend2_planar_y_mmx;
+ dism_class->copy_scanline_planar_u =
+ deinterlace_scanline_linear_blend2_planar_u_mmx;
+ dism_class->copy_scanline_planar_v =
+ deinterlace_scanline_linear_blend2_planar_v_mmx;
}
#endif
}
oil_memcpy (out, scanlines->t0, self->parent.row_stride[0]);
}
+static void
+deinterlace_scanline_scaler_bob_planar_y (GstDeinterlaceSimpleMethod * self,
+ guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ oil_memcpy (out, scanlines->t0, self->parent.row_stride[0]);
+}
+
+static void
+deinterlace_scanline_scaler_bob_planar_u (GstDeinterlaceSimpleMethod * self,
+ guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ oil_memcpy (out, scanlines->t0, self->parent.row_stride[1]);
+}
+
+static void
+deinterlace_scanline_scaler_bob_planar_v (GstDeinterlaceSimpleMethod * self,
+ guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ oil_memcpy (out, scanlines->t0, self->parent.row_stride[2]);
+}
+
G_DEFINE_TYPE (GstDeinterlaceMethodScalerBob, gst_deinterlace_method_scaler_bob,
GST_TYPE_DEINTERLACE_SIMPLE_METHOD);
deinterlace_scanline_scaler_bob_packed;
dism_class->interpolate_scanline_yvyu =
deinterlace_scanline_scaler_bob_packed;
+ dism_class->interpolate_scanline_planar_y =
+ deinterlace_scanline_scaler_bob_planar_y;
+ dism_class->interpolate_scanline_planar_u =
+ deinterlace_scanline_scaler_bob_planar_u;
+ dism_class->interpolate_scanline_planar_v =
+ deinterlace_scanline_scaler_bob_planar_v;
}
static void
}
static void
+deinterlace_scanline_weave_planar_y (GstDeinterlaceSimpleMethod * self,
+ guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ oil_memcpy (out, scanlines->m1, self->parent.row_stride[0]);
+}
+
+static void
+deinterlace_scanline_weave_planar_u (GstDeinterlaceSimpleMethod * self,
+ guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ oil_memcpy (out, scanlines->m1, self->parent.row_stride[1]);
+}
+
+static void
+deinterlace_scanline_weave_planar_v (GstDeinterlaceSimpleMethod * self,
+ guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ oil_memcpy (out, scanlines->m1, self->parent.row_stride[2]);
+}
+
+static void
copy_scanline_packed (GstDeinterlaceSimpleMethod * self, guint8 * out,
const GstDeinterlaceScanlineData * scanlines)
{
oil_memcpy (out, scanlines->m0, self->parent.row_stride[0]);
}
+static void
+copy_scanline_planar_y (GstDeinterlaceSimpleMethod * self, guint8 * out,
+ const GstDeinterlaceScanlineData * scanlines)
+{
+ oil_memcpy (out, scanlines->m0, self->parent.row_stride[0]);
+}
+
+static void
+copy_scanline_planar_u (GstDeinterlaceSimpleMethod * self, guint8 * out,
+ const GstDeinterlaceScanlineData * scanlines)
+{
+ oil_memcpy (out, scanlines->m0, self->parent.row_stride[1]);
+}
+
+static void
+copy_scanline_planar_v (GstDeinterlaceSimpleMethod * self, guint8 * out,
+ const GstDeinterlaceScanlineData * scanlines)
+{
+ oil_memcpy (out, scanlines->m0, self->parent.row_stride[2]);
+}
+
G_DEFINE_TYPE (GstDeinterlaceMethodWeave, gst_deinterlace_method_weave,
GST_TYPE_DEINTERLACE_SIMPLE_METHOD);
dism_class->interpolate_scanline_yuy2 = deinterlace_scanline_weave_packed;
dism_class->interpolate_scanline_yvyu = deinterlace_scanline_weave_packed;
+ dism_class->interpolate_scanline_planar_y =
+ deinterlace_scanline_weave_planar_y;
+ dism_class->interpolate_scanline_planar_u =
+ deinterlace_scanline_weave_planar_u;
+ dism_class->interpolate_scanline_planar_v =
+ deinterlace_scanline_weave_planar_v;
+ dism_class->copy_scanline_yuy2 = copy_scanline_packed;
dism_class->copy_scanline_yvyu = copy_scanline_packed;
+ dism_class->copy_scanline_planar_y = copy_scanline_planar_y;
+ dism_class->copy_scanline_planar_u = copy_scanline_planar_u;
+ dism_class->copy_scanline_planar_v = copy_scanline_planar_v;
}
static void
}
static void
+deinterlace_scanline_weave_planar_y (GstDeinterlaceSimpleMethod * self,
+ guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ oil_memcpy (out, scanlines->m1, self->parent.row_stride[0]);
+}
+
+static void
+deinterlace_scanline_weave_planar_u (GstDeinterlaceSimpleMethod * self,
+ guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ oil_memcpy (out, scanlines->m1, self->parent.row_stride[1]);
+}
+
+static void
+deinterlace_scanline_weave_planar_v (GstDeinterlaceSimpleMethod * self,
+ guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ oil_memcpy (out, scanlines->m1, self->parent.row_stride[2]);
+}
+
+static void
copy_scanline_packed (GstDeinterlaceSimpleMethod * self, guint8 * out,
const GstDeinterlaceScanlineData * scanlines)
{
}
}
+static void
+copy_scanline_planar_y (GstDeinterlaceSimpleMethod * self, guint8 * out,
+ const GstDeinterlaceScanlineData * scanlines)
+{
+ /* FIXME: original code used m2 and m0 but this looks really bad */
+ if (scanlines->bottom_field) {
+ oil_memcpy (out, scanlines->bb2, self->parent.row_stride[0]);
+ } else {
+ oil_memcpy (out, scanlines->bb0, self->parent.row_stride[0]);
+ }
+}
+
+static void
+copy_scanline_planar_u (GstDeinterlaceSimpleMethod * self, guint8 * out,
+ const GstDeinterlaceScanlineData * scanlines)
+{
+ /* FIXME: original code used m2 and m0 but this looks really bad */
+ if (scanlines->bottom_field) {
+ oil_memcpy (out, scanlines->bb2, self->parent.row_stride[1]);
+ } else {
+ oil_memcpy (out, scanlines->bb0, self->parent.row_stride[1]);
+ }
+}
+
+static void
+copy_scanline_planar_v (GstDeinterlaceSimpleMethod * self, guint8 * out,
+ const GstDeinterlaceScanlineData * scanlines)
+{
+ /* FIXME: original code used m2 and m0 but this looks really bad */
+ if (scanlines->bottom_field) {
+ oil_memcpy (out, scanlines->bb2, self->parent.row_stride[2]);
+ } else {
+ oil_memcpy (out, scanlines->bb0, self->parent.row_stride[2]);
+ }
+}
+
G_DEFINE_TYPE (GstDeinterlaceMethodWeaveBFF, gst_deinterlace_method_weave_bff,
GST_TYPE_DEINTERLACE_SIMPLE_METHOD);
dism_class->interpolate_scanline_yuy2 = deinterlace_scanline_weave_packed;
dism_class->interpolate_scanline_yvyu = deinterlace_scanline_weave_packed;
+ dism_class->interpolate_scanline_planar_y =
+ deinterlace_scanline_weave_planar_y;
+ dism_class->interpolate_scanline_planar_u =
+ deinterlace_scanline_weave_planar_u;
+ dism_class->interpolate_scanline_planar_v =
+ deinterlace_scanline_weave_planar_v;
dism_class->copy_scanline_yuy2 = copy_scanline_packed;
dism_class->copy_scanline_yvyu = copy_scanline_packed;
+ dism_class->copy_scanline_planar_y = copy_scanline_planar_y;
+ dism_class->copy_scanline_planar_u = copy_scanline_planar_u;
+ dism_class->copy_scanline_planar_v = copy_scanline_planar_v;
}
static void
}
static void
+deinterlace_scanline_weave_planar_y (GstDeinterlaceSimpleMethod * self,
+ guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ oil_memcpy (out, scanlines->m1, self->parent.row_stride[0]);
+}
+
+static void
+deinterlace_scanline_weave_planar_u (GstDeinterlaceSimpleMethod * self,
+ guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ oil_memcpy (out, scanlines->m1, self->parent.row_stride[1]);
+}
+
+static void
+deinterlace_scanline_weave_planar_v (GstDeinterlaceSimpleMethod * self,
+ guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ oil_memcpy (out, scanlines->m1, self->parent.row_stride[2]);
+}
+
+static void
copy_scanline_packed (GstDeinterlaceSimpleMethod * self,
guint8 * out, const GstDeinterlaceScanlineData * scanlines)
{
}
}
+static void
+copy_scanline_planar_y (GstDeinterlaceSimpleMethod * self,
+ guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ /* FIXME: original code used m2 and m0 but this looks really bad */
+ if (scanlines->bottom_field) {
+ oil_memcpy (out, scanlines->bb0, self->parent.row_stride[0]);
+ } else {
+ oil_memcpy (out, scanlines->bb2, self->parent.row_stride[0]);
+ }
+}
+
+static void
+copy_scanline_planar_u (GstDeinterlaceSimpleMethod * self,
+ guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ /* FIXME: original code used m2 and m0 but this looks really bad */
+ if (scanlines->bottom_field) {
+ oil_memcpy (out, scanlines->bb0, self->parent.row_stride[1]);
+ } else {
+ oil_memcpy (out, scanlines->bb2, self->parent.row_stride[1]);
+ }
+}
+
+static void
+copy_scanline_planar_v (GstDeinterlaceSimpleMethod * self,
+ guint8 * out, const GstDeinterlaceScanlineData * scanlines)
+{
+ /* FIXME: original code used m2 and m0 but this looks really bad */
+ if (scanlines->bottom_field) {
+ oil_memcpy (out, scanlines->bb0, self->parent.row_stride[2]);
+ } else {
+ oil_memcpy (out, scanlines->bb2, self->parent.row_stride[2]);
+ }
+}
+
G_DEFINE_TYPE (GstDeinterlaceMethodWeaveTFF, gst_deinterlace_method_weave_tff,
GST_TYPE_DEINTERLACE_SIMPLE_METHOD);
dism_class->interpolate_scanline_yuy2 = deinterlace_scanline_weave_packed;
dism_class->interpolate_scanline_yvyu = deinterlace_scanline_weave_packed;
+ dism_class->interpolate_scanline_planar_y =
+ deinterlace_scanline_weave_planar_y;
+ dism_class->interpolate_scanline_planar_u =
+ deinterlace_scanline_weave_planar_u;
+ dism_class->interpolate_scanline_planar_v =
+ deinterlace_scanline_weave_planar_v;
dism_class->copy_scanline_yuy2 = copy_scanline_packed;
dism_class->copy_scanline_yvyu = copy_scanline_packed;
+ dism_class->copy_scanline_planar_y = copy_scanline_planar_y;
+ dism_class->copy_scanline_planar_u = copy_scanline_planar_u;
+ dism_class->copy_scanline_planar_v = copy_scanline_planar_v;
}
static void