Source: ffmpeg
Version: 7:4.3.1-2
Severity: important
Tags: patch
User: [email protected]
Usertags: powerpc ppc64
X-Debbugs-Cc: [email protected]
Hello!
ffmpeg currently FTBFS on powerpc and ppc64 [1]:
src/libswscale/ppc/yuv2rgb_altivec.c: In function ‘altivec_yuv2_abgr’:
src/libswscale/ppc/yuv2rgb_altivec.c:338:18: error: implicit declaration of
function ‘vec_xl’; did you mean ‘vec_rl’?
[-Werror=implicit-function-declaration]
338 | y0 = vec_xl(0, y1i);
\
| ^~~~~~
src/libswscale/ppc/yuv2rgb_altivec.c:437:1: note: in expansion of macro
‘DEFCSP420_CVT’
437 | DEFCSP420_CVT(yuv2_abgr, out_abgr)
| ^~~~~~~~~~~~~
gcc -I. -Isrc/ -Wdate-time -D_FORTIFY_SOURCE=2 -U_FORTIFY_SOURCE
-D_FORTIFY_SOURCE=2 -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
-D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -DZLIB_CONST
-DHAVE_AV_CONFIG_H -DBUILDING_swscale -g -O2
-fdebug-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat
-Werror=format-security -fno-strict-overflow -fstack-protector-all -fPIE
-std=c11 -fomit-frame-pointer -fPIC -maltivec -mabi=altivec -pthread
-I/usr/include/p11-kit-1 -I/usr/include/lilv-0 -I/usr/include/sratom-0
-I/usr/include/sord-0 -I/usr/include/serd-0 -I/usr/include/harfbuzz
-I/usr/include/glib-2.0 -I/usr/lib/powerpc64-linux-gnu/glib-2.0/include
-I/usr/include/uuid -I/usr/include/fribidi -I/usr/include/freetype2
-I/usr/include/libpng16 -I/usr/include/libxml2 -I/usr/include/uuid
-I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/bs2b
-I/usr/include/libdrm -I/usr/include/uuid -I/usr/include/freetype2
-I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16
-I/usr/include/fribidi -I/usr/include/openjpeg-2.3 -I/usr/include/opus
-I/usr/include/opus -D_REENTRANT -pthread -I/usr/include/librsvg-2.0
-I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libmount -I/usr/include/blkid
-I/usr/include/cairo -I/usr/include/glib-2.0
-I/usr/lib/powerpc64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1
-I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16
-I/usr/include/srt -I/usr/include/p11-kit-1 -isystem
/usr/include/mit-krb5 -I/usr/include/pgm-5.2 -I/usr/include/libxml2
-g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith
-Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes
-Wno-pointer-to-int-cast -Wstrict-prototypes -Wempty-body -Wno-parentheses
-Wno-switch -Wno-format-zero-length -Wno-pointer-sign
-Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -O3
-fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=format-security
-Werror=implicit-function-declaration -Werror=missing-prototypes
-Werror=return-type -Werror=vla -Wformat -fdiagnostics-color=auto
-Wno-maybe-uninitialized -D_REENTRANT -I/usr/include/SDL2 -MMD -MF
libswscale/swscale_unscaled.d -MT libswscale/swscale_unscaled.o -c -o
libswscale/swscale_unscaled.o src/libswscale/swscale_unscaled.c
src/libswscale/ppc/yuv2rgb_altivec.c:338:18: error: incompatible types when
assigning to type ‘__vector unsigned char’ {aka ‘__vector(16) unsigned char’}
from type ‘int’
338 | y0 = vec_xl(0, y1i);
\
| ^~~~~~
src/libswscale/ppc/yuv2rgb_altivec.c:437:1: note: in expansion of macro
‘DEFCSP420_CVT’
437 | DEFCSP420_CVT(yuv2_abgr, out_abgr)
| ^~~~~~~~~~~~~
src/libswscale/ppc/yuv2rgb_altivec.c:340:18: error: incompatible types when
assigning to type ‘__vector unsigned char’ {aka ‘__vector(16) unsigned char’}
from type ‘int’
340 | y1 = vec_xl(0, y2i);
\
| ^~~~~~
src/libswscale/ppc/yuv2rgb_altivec.c:437:1: note: in expansion of macro
‘DEFCSP420_CVT’
437 | DEFCSP420_CVT(yuv2_abgr, out_abgr)
| ^~~~~~~~~~~~~
src/libswscale/ppc/yuv2rgb_altivec.c:437:1: error: cannot convert a value of
type ‘int’ to vector type ‘__vector(16) signed char’ which has different size
src/libswscale/ppc/yuv2rgb_altivec.c:437:1: error: cannot convert a value of
type ‘int’ to vector type ‘__vector(16) signed char’ which has different size
src/libswscale/ppc/yuv2rgb_altivec.c: In function ‘altivec_yuv2_bgra’:
src/libswscale/ppc/yuv2rgb_altivec.c:338:18: error: incompatible types when
assigning to type ‘__vector unsigned char’ {aka ‘__vector(16) unsigned char’}
from type ‘int’
338 | y0 = vec_xl(0, y1i);
\
| ^~~~~~
src/libswscale/ppc/yuv2rgb_altivec.c:438:1: note: in expansion of macro
‘DEFCSP420_CVT’
438 | DEFCSP420_CVT(yuv2_bgra, out_bgra)
| ^~~~~~~~~~~~~
src/libswscale/ppc/yuv2rgb_altivec.c:340:18: error: incompatible types when
assigning to type ‘__vector unsigned char’ {aka ‘__vector(16) unsigned char’}
from type ‘int’
340 | y1 = vec_xl(0, y2i);
\
| ^~~~~~
src/libswscale/ppc/yuv2rgb_altivec.c:438:1: note: in expansion of macro
‘DEFCSP420_CVT’
438 | DEFCSP420_CVT(yuv2_bgra, out_bgra)
| ^~~~~~~~~~~~~
src/libswscale/ppc/yuv2rgb_altivec.c:438:1: error: cannot convert a value of
type ‘int’ to vector type ‘__vector(16) signed char’ which has different size
src/libswscale/ppc/yuv2rgb_altivec.c:438:1: error: cannot convert a value of
type ‘int’ to vector type ‘__vector(16) signed char’ which has different size
gcc -I. -Isrc/ -Wdate-time -D_FORTIFY_SOURCE=2 -U_FORTIFY_SOURCE
-D_FORTIFY_SOURCE=2 -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
-D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -DZLIB_CONST
-DHAVE_AV_CONFIG_H -DBUILDING_swscale -g -O2
-fdebug-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat
-Werror=format-security -fno-strict-overflow -fstack-protector-all -fPIE
-std=c11 -fomit-frame-pointer -fPIC -maltivec -mabi=altivec -pthread
-I/usr/include/p11-kit-1 -I/usr/include/lilv-0 -I/usr/include/sratom-0
-I/usr/include/sord-0 -I/usr/include/serd-0 -I/usr/include/harfbuzz
-I/usr/include/glib-2.0 -I/usr/lib/powerpc64-linux-gnu/glib-2.0/include
-I/usr/include/uuid -I/usr/include/fribidi -I/usr/include/freetype2
-I/usr/include/libpng16 -I/usr/include/libxml2 -I/usr/include/uuid
-I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/bs2b
-I/usr/include/libdrm -I/usr/include/uuid -I/usr/include/freetype2
-I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16
-I/usr/include/fribidi -I/usr/include/openjpeg-2.3 -I/usr/include/opus
-I/usr/include/opus -D_REENTRANT -pthread -I/usr/include/librsvg-2.0
-I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libmount -I/usr/include/blkid
-I/usr/include/cairo -I/usr/include/glib-2.0
-I/usr/lib/powerpc64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1
-I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16
-I/usr/include/srt -I/usr/include/p11-kit-1 -isystem
/usr/include/mit-krb5 -I/usr/include/pgm-5.2 -I/usr/include/libxml2
-g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith
-Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes
-Wno-pointer-to-int-cast -Wstrict-prototypes -Wempty-body -Wno-parentheses
-Wno-switch -Wno-format-zero-length -Wno-pointer-sign
-Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -O3
-fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=format-security
-Werror=implicit-function-declaration -Werror=missing-prototypes
-Werror=return-type -Werror=vla -Wformat -fdiagnostics-color=auto
-Wno-maybe-uninitialized -D_REENTRANT -I/usr/include/SDL2 -MMD -MF
libswscale/utils.d -MT libswscale/utils.o -c -o libswscale/utils.o
src/libswscale/utils.c
src/libswscale/ppc/yuv2rgb_altivec.c: In function ‘altivec_yuv2_rgba’:
src/libswscale/ppc/yuv2rgb_altivec.c:338:18: error: incompatible types when
assigning to type ‘__vector unsigned char’ {aka ‘__vector(16) unsigned char’}
from type ‘int’
338 | y0 = vec_xl(0, y1i);
\
| ^~~~~~
src/libswscale/ppc/yuv2rgb_altivec.c:439:1: note: in expansion of macro
‘DEFCSP420_CVT’
439 | DEFCSP420_CVT(yuv2_rgba, out_rgba)
| ^~~~~~~~~~~~~
src/libswscale/ppc/yuv2rgb_altivec.c:340:18: error: incompatible types when
assigning to type ‘__vector unsigned char’ {aka ‘__vector(16) unsigned char’}
from type ‘int’
340 | y1 = vec_xl(0, y2i);
\
| ^~~~~~
src/libswscale/ppc/yuv2rgb_altivec.c:439:1: note: in expansion of macro
‘DEFCSP420_CVT’
439 | DEFCSP420_CVT(yuv2_rgba, out_rgba)
| ^~~~~~~~~~~~~
src/libswscale/ppc/yuv2rgb_altivec.c:439:1: error: cannot convert a value of
type ‘int’ to vector type ‘__vector(16) signed char’ which has different size
src/libswscale/ppc/yuv2rgb_altivec.c:439:1: error: cannot convert a value of
type ‘int’ to vector type ‘__vector(16) signed char’ which has different size
src/libswscale/ppc/yuv2rgb_altivec.c: In function ‘altivec_yuv2_argb’:
src/libswscale/ppc/yuv2rgb_altivec.c:338:18: error: incompatible types when
assigning to type ‘__vector unsigned char’ {aka ‘__vector(16) unsigned char’}
from type ‘int’
338 | y0 = vec_xl(0, y1i);
\
| ^~~~~~
src/libswscale/ppc/yuv2rgb_altivec.c:440:1: note: in expansion of macro
‘DEFCSP420_CVT’
440 | DEFCSP420_CVT(yuv2_argb, out_argb)
| ^~~~~~~~~~~~~
src/libswscale/ppc/yuv2rgb_altivec.c:340:18: error: incompatible types when
assigning to type ‘__vector unsigned char’ {aka ‘__vector(16) unsigned char’}
from type ‘int’
340 | y1 = vec_xl(0, y2i);
\
| ^~~~~~
src/libswscale/ppc/yuv2rgb_altivec.c:440:1: note: in expansion of macro
‘DEFCSP420_CVT’
440 | DEFCSP420_CVT(yuv2_argb, out_argb)
| ^~~~~~~~~~~~~
src/libswscale/ppc/yuv2rgb_altivec.c:440:1: error: cannot convert a value of
type ‘int’ to vector type ‘__vector(16) signed char’ which has different size
src/libswscale/ppc/yuv2rgb_altivec.c:440:1: error: cannot convert a value of
type ‘int’ to vector type ‘__vector(16) signed char’ which has different size
src/libswscale/ppc/yuv2rgb_altivec.c: In function ‘altivec_yuv2_rgb24’:
src/libswscale/ppc/yuv2rgb_altivec.c:338:18: error: incompatible types when
assigning to type ‘__vector unsigned char’ {aka ‘__vector(16) unsigned char’}
from type ‘int’
338 | y0 = vec_xl(0, y1i);
\
| ^~~~~~
src/libswscale/ppc/yuv2rgb_altivec.c:441:1: note: in expansion of macro
‘DEFCSP420_CVT’
441 | DEFCSP420_CVT(yuv2_rgb24, out_rgb24)
| ^~~~~~~~~~~~~
src/libswscale/ppc/yuv2rgb_altivec.c:340:18: error: incompatible types when
assigning to type ‘__vector unsigned char’ {aka ‘__vector(16) unsigned char’}
from type ‘int’
340 | y1 = vec_xl(0, y2i);
\
| ^~~~~~
src/libswscale/ppc/yuv2rgb_altivec.c:441:1: note: in expansion of macro
‘DEFCSP420_CVT’
441 | DEFCSP420_CVT(yuv2_rgb24, out_rgb24)
| ^~~~~~~~~~~~~
src/libswscale/ppc/yuv2rgb_altivec.c:441:1: error: cannot convert a value of
type ‘int’ to vector type ‘__vector(16) signed char’ which has different size
src/libswscale/ppc/yuv2rgb_altivec.c:441:1: error: cannot convert a value of
type ‘int’ to vector type ‘__vector(16) signed char’ which has different size
src/libswscale/ppc/yuv2rgb_altivec.c: In function ‘altivec_yuv2_bgr24’:
src/libswscale/ppc/yuv2rgb_altivec.c:338:18: error: incompatible types when
assigning to type ‘__vector unsigned char’ {aka ‘__vector(16) unsigned char’}
from type ‘int’
338 | y0 = vec_xl(0, y1i);
\
| ^~~~~~
src/libswscale/ppc/yuv2rgb_altivec.c:442:1: note: in expansion of macro
‘DEFCSP420_CVT’
442 | DEFCSP420_CVT(yuv2_bgr24, out_bgr24)
| ^~~~~~~~~~~~~
src/libswscale/ppc/yuv2rgb_altivec.c:340:18: error: incompatible types when
assigning to type ‘__vector unsigned char’ {aka ‘__vector(16) unsigned char’}
from type ‘int’
340 | y1 = vec_xl(0, y2i);
\
| ^~~~~~
src/libswscale/ppc/yuv2rgb_altivec.c:442:1: note: in expansion of macro
‘DEFCSP420_CVT’
442 | DEFCSP420_CVT(yuv2_bgr24, out_bgr24)
| ^~~~~~~~~~~~~
src/libswscale/ppc/yuv2rgb_altivec.c:442:1: error: cannot convert a value of
type ‘int’ to vector type ‘__vector(16) signed char’ which has different size
src/libswscale/ppc/yuv2rgb_altivec.c:442:1: error: cannot convert a value of
type ‘int’ to vector type ‘__vector(16) signed char’ which has different size
gcc -I. -Isrc/ -Wdate-time -D_FORTIFY_SOURCE=2 -U_FORTIFY_SOURCE
-D_FORTIFY_SOURCE=2 -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
-D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -DZLIB_CONST
-DHAVE_AV_CONFIG_H -DBUILDING_swscale -g -O2
-fdebug-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat
-Werror=format-security -fno-strict-overflow -fstack-protector-all -fPIE
-std=c11 -fomit-frame-pointer -fPIC -maltivec -mabi=altivec -pthread
-I/usr/include/p11-kit-1 -I/usr/include/lilv-0 -I/usr/include/sratom-0
-I/usr/include/sord-0 -I/usr/include/serd-0 -I/usr/include/harfbuzz
-I/usr/include/glib-2.0 -I/usr/lib/powerpc64-linux-gnu/glib-2.0/include
-I/usr/include/uuid -I/usr/include/fribidi -I/usr/include/freetype2
-I/usr/include/libpng16 -I/usr/include/libxml2 -I/usr/include/uuid
-I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/bs2b
-I/usr/include/libdrm -I/usr/include/uuid -I/usr/include/freetype2
-I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16
-I/usr/include/fribidi -I/usr/include/openjpeg-2.3 -I/usr/include/opus
-I/usr/include/opus -D_REENTRANT -pthread -I/usr/include/librsvg-2.0
-I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libmount -I/usr/include/blkid
-I/usr/include/cairo -I/usr/include/glib-2.0
-I/usr/lib/powerpc64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1
-I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16
-I/usr/include/srt -I/usr/include/p11-kit-1 -isystem
/usr/include/mit-krb5 -I/usr/include/pgm-5.2 -I/usr/include/libxml2
-g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith
-Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes
-Wno-pointer-to-int-cast -Wstrict-prototypes -Wempty-body -Wno-parentheses
-Wno-switch -Wno-format-zero-length -Wno-pointer-sign
-Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -O3
-fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=format-security
-Werror=implicit-function-declaration -Werror=missing-prototypes
-Werror=return-type -Werror=vla -Wformat -fdiagnostics-color=auto
-Wno-maybe-uninitialized -D_REENTRANT -I/usr/include/SDL2 -MMD -MF
libswscale/vscale.d -MT libswscale/vscale.o -c -o libswscale/vscale.o
src/libswscale/vscale.c
gcc -I. -Isrc/ -Wdate-time -D_FORTIFY_SOURCE=2 -U_FORTIFY_SOURCE
-D_FORTIFY_SOURCE=2 -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
-D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -DZLIB_CONST
-DHAVE_AV_CONFIG_H -DBUILDING_swscale -g -O2
-fdebug-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat
-Werror=format-security -fno-strict-overflow -fstack-protector-all -fPIE
-std=c11 -fomit-frame-pointer -fPIC -maltivec -mabi=altivec -pthread
-I/usr/include/p11-kit-1 -I/usr/include/lilv-0 -I/usr/include/sratom-0
-I/usr/include/sord-0 -I/usr/include/serd-0 -I/usr/include/harfbuzz
-I/usr/include/glib-2.0 -I/usr/lib/powerpc64-linux-gnu/glib-2.0/include
-I/usr/include/uuid -I/usr/include/fribidi -I/usr/include/freetype2
-I/usr/include/libpng16 -I/usr/include/libxml2 -I/usr/include/uuid
-I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/bs2b
-I/usr/include/libdrm -I/usr/include/uuid -I/usr/include/freetype2
-I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16
-I/usr/include/fribidi -I/usr/include/openjpeg-2.3 -I/usr/include/opus
-I/usr/include/opus -D_REENTRANT -pthread -I/usr/include/librsvg-2.0
-I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libmount -I/usr/include/blkid
-I/usr/include/cairo -I/usr/include/glib-2.0
-I/usr/lib/powerpc64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1
-I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16
-I/usr/include/srt -I/usr/include/p11-kit-1 -isystem
/usr/include/mit-krb5 -I/usr/include/pgm-5.2 -I/usr/include/libxml2
-g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith
-Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes
-Wno-pointer-to-int-cast -Wstrict-prototypes -Wempty-body -Wno-parentheses
-Wno-switch -Wno-format-zero-length -Wno-pointer-sign
-Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -O3
-fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=format-security
-Werror=implicit-function-declaration -Werror=missing-prototypes
-Werror=return-type -Werror=vla -Wformat -fdiagnostics-color=auto
-Wno-maybe-uninitialized -D_REENTRANT -I/usr/include/SDL2 -MMD -MF
libswscale/yuv2rgb.d -MT libswscale/yuv2rgb.o -c -o libswscale/yuv2rgb.o
src/libswscale/yuv2rgb.c
cc1: some warnings being treated as errors
make[2]: *** [/<<PKGBUILDDIR>>/ffbuild/common.mak:59:
libswscale/ppc/yuv2rgb_altivec.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: Leaving directory '/<<PKGBUILDDIR>>/debian/standard'
Upstream has a patch for that, see [2]. Could you backport that patch?
Thanks,
Adrian
> [1]
> https://buildd.debian.org/status/fetch.php?pkg=ffmpeg&arch=ppc64&ver=7%3A4.3.1-2&stamp=1597687204&raw=0
> [2] https://trac.ffmpeg.org/ticket/8750
--
.''`. John Paul Adrian Glaubitz
: :' : Debian Developer - [email protected]
`. `' Freie Universitaet Berlin - [email protected]
`- GPG: 62FF 8A75 84E0 2956 9546 0006 7426 3B37 F5B5 F913
diff --git a/libswscale/ppc/yuv2rgb_altivec.c b/libswscale/ppc/yuv2rgb_altivec.c
index 536545293d..930ef6b98f 100644
--- a/libswscale/ppc/yuv2rgb_altivec.c
+++ b/libswscale/ppc/yuv2rgb_altivec.c
@@ -283,6 +283,16 @@ static inline void cvtyuvtoRGB(SwsContext *c, vector
signed short Y,
*
------------------------------------------------------------------------------
*/
+#if !HAVE_VSX
+static inline vector unsigned char vec_xl(signed long long offset, const ubyte
*addr)
+{
+ const vector unsigned char *v_addr = (const vector unsigned char *) (addr
+ offset);
+ vector unsigned char align_perm = vec_lvsl(offset, addr);
+
+ return (vector unsigned char) vec_perm(v_addr[0], v_addr[1], align_perm);
+}
+#endif /* !HAVE_VSX */
+
#define DEFCSP420_CVT(name, out_pixels) \
static int altivec_ ## name(SwsContext *c, const unsigned char **in, \
int *instrides, int srcSliceY, int srcSliceH, \