diff --git a/.gitignore b/.gitignore index 57b10f0..7b792a9 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/libvpx-v1.2.0.tar.bz2 +SOURCES/libvpx-v1.3.0.tar.bz2 diff --git a/.libvpx.metadata b/.libvpx.metadata index 925b15e..2738fa2 100644 --- a/.libvpx.metadata +++ b/.libvpx.metadata @@ -1 +1 @@ -d624b9c88c5aa83d39c8a048532cd742146e7a2e SOURCES/libvpx-v1.2.0.tar.bz2 +191b95817aede8c136cc3f3745fb1b8c50e6d5dc SOURCES/libvpx-v1.3.0.tar.bz2 diff --git a/SOURCES/Bug-fix-in-ssse3-quantize-function.patch b/SOURCES/Bug-fix-in-ssse3-quantize-function.patch new file mode 100644 index 0000000..74138e8 --- /dev/null +++ b/SOURCES/Bug-fix-in-ssse3-quantize-function.patch @@ -0,0 +1,32 @@ +commit 0d43bd77e5f429467fbd280a7b8f7fbc0bfe1809 +Author: Yunqing Wang +Date: Fri Feb 7 14:27:07 2014 -0800 + + Bug fix in ssse3 quantize function + + A bug was reported in Issue 702: "SIGILL (Illegal instruction) when + transcoding with vp9 - using FFmpeg". It was reproduced and fixed. + + Change-Id: Ie32c149a89af02856084aeaf289e848a905c7700 + +diff --git a/vp9/encoder/x86/vp9_quantize_ssse3.asm b/vp9/encoder/x86/vp9_quantize_ssse3.asm +index db30660..48ccef8 100644 +--- a/vp9/encoder/x86/vp9_quantize_ssse3.asm ++++ b/vp9/encoder/x86/vp9_quantize_ssse3.asm +@@ -188,7 +188,8 @@ cglobal quantize_%1, 0, %2, 15, coeff, ncoeff, skip, zbin, round, quant, \ + pmaxsw m8, m7 + pshuflw m7, m8, 0x1 + pmaxsw m8, m7 +- pextrw [r2], m8, 0 ++ pextrw r6, m8, 0 ++ mov [r2], r6 + RET + + ; skip-block, i.e. just write all zeroes +@@ -214,5 +215,5 @@ cglobal quantize_%1, 0, %2, 15, coeff, ncoeff, skip, zbin, round, quant, \ + %endmacro + + INIT_XMM ssse3 +-QUANTIZE_FN b, 6 ++QUANTIZE_FN b, 7 + QUANTIZE_FN b_32x32, 7 diff --git a/SOURCES/libvpx-nasm.patch b/SOURCES/libvpx-nasm.patch deleted file mode 100644 index 16b03f0..0000000 --- a/SOURCES/libvpx-nasm.patch +++ /dev/null @@ -1,40 +0,0 @@ -diff -up libvpx-v1.2.0/vp8/common/x86/iwalsh_mmx.asm.nasm libvpx-v1.2.0/vp8/common/x86/iwalsh_mmx.asm ---- libvpx-v1.2.0/vp8/common/x86/iwalsh_mmx.asm.nasm 2013-02-28 18:51:11.000000000 +0100 -+++ libvpx-v1.2.0/vp8/common/x86/iwalsh_mmx.asm 2013-04-05 14:16:31.784250142 +0200 -@@ -24,7 +24,7 @@ sym(vp8_short_inv_walsh4x4_mmx): - - movq mm0, [rdx + 0] ;ip[0] - movq mm1, [rdx + 8] ;ip[4] -- movd mm7, rax -+ movq mm7, rax - - movq mm2, [rdx + 16] ;ip[8] - movq mm3, [rdx + 24] ;ip[12] -diff -up libvpx-v1.2.0/vp8/common/x86/mfqe_sse2.asm.nasm libvpx-v1.2.0/vp8/common/x86/mfqe_sse2.asm ---- libvpx-v1.2.0/vp8/common/x86/mfqe_sse2.asm.nasm 2013-02-28 18:51:11.000000000 +0100 -+++ libvpx-v1.2.0/vp8/common/x86/mfqe_sse2.asm 2013-04-05 15:20:26.521402526 +0200 -@@ -271,7 +271,11 @@ sym(vp8_variance_and_sad_16x16_sse2): - SECTION_RODATA - align 16 - t128: -- ddq 128 -+%if CONFIG_BIG_ENDIAN -+ dq 0, 128 -+%else -+ dq 128, 0 -+%endif - align 16 - tMFQE: ; 1 << MFQE_PRECISION - times 8 dw 0x10 -diff -up libvpx-v1.2.0/vp8/encoder/x86/temporal_filter_apply_sse2.asm.nasm libvpx-v1.2.0/vp8/encoder/x86/temporal_filter_apply_sse2.asm ---- libvpx-v1.2.0/vp8/encoder/x86/temporal_filter_apply_sse2.asm.nasm 2013-02-28 18:51:11.000000000 +0100 -+++ libvpx-v1.2.0/vp8/encoder/x86/temporal_filter_apply_sse2.asm 2013-04-05 14:16:31.784250142 +0200 -@@ -50,7 +50,7 @@ sym(vp8_temporal_filter_apply_sse2): - ; 0x8000 >> (16 - strength) - mov rdx, 16 - sub rdx, arg(4) ; 16 - strength -- movd xmm4, rdx ; can't use rdx w/ shift -+ movq xmm4, rdx ; can't use rdx w/ shift - movdqa xmm5, [GLOBAL(_const_top_bit)] - psrlw xmm5, xmm4 - movdqa [rsp + rounding_bit], xmm5 diff --git a/SOURCES/libvpx.ver b/SOURCES/libvpx.ver index c3010ec..aa147ab 100644 --- a/SOURCES/libvpx.ver +++ b/SOURCES/libvpx.ver @@ -23,6 +23,7 @@ vpx_codec_peek_stream_info; vpx_codec_register_put_frame_cb; vpx_codec_register_put_slice_cb; vpx_codec_set_cx_data_buf; +vpx_codec_set_frame_buffer_functions; vpx_codec_set_mem_map; vpx_codec_version; vpx_codec_version_extra_str; @@ -32,6 +33,10 @@ vpx_codec_vp8_cx; vpx_codec_vp8_cx_algo; vpx_codec_vp8_dx; vpx_codec_vp8_dx_algo; +vpx_codec_vp9_cx; +vpx_codec_vp9_cx_algo; +vpx_codec_vp9_dx; +vpx_codec_vp9_dx_algo; vpx_dec_control; vpx_dec_decode; vpx_dec_destroy; @@ -55,4 +60,20 @@ vpx_img_flip; vpx_img_free; vpx_img_set_rect; vpx_img_wrap; +vpx_svc_dump_statistics; +vpx_svc_encode; +vpx_svc_get_buffer; +vpx_svc_get_encode_frame_count; +vpx_svc_get_frame_size; +vpx_svc_get_layer_resolution; +vpx_svc_get_message; +vpx_svc_get_rc_stats_buffer; +vpx_svc_get_rc_stats_buffer_size; +vpx_svc_init; +vpx_svc_is_keyframe; +vpx_svc_release; +vpx_svc_set_keyframe; +vpx_svc_set_options; +vpx_svc_set_quantizers; +vpx_svc_set_scale_factors; local: *; }; diff --git a/SOURCES/sectalign-nasm.patch b/SOURCES/sectalign-nasm.patch new file mode 100644 index 0000000..c74a236 --- /dev/null +++ b/SOURCES/sectalign-nasm.patch @@ -0,0 +1,24 @@ +https://bugzilla.redhat.com/show_bug.cgi?id=603113#c11 + +--- libvpx-v1.3.0/build/make/configure.sh-orig 2014-01-10 21:12:40.000000000 +0100 ++++ libvpx-v1.3.0/build/make/configure.sh 2014-07-29 13:30:14.509553770 +0200 +@@ -374,7 +374,7 @@ EOF + readelf -WS ${TMP_O} >${TMP_X} + log_file ${TMP_X} + if ! grep -q '\.rodata .* 16$' ${TMP_X}; then +- die "${AS} ${ASFLAGS} does not support section alignment (nasm <=2.08?)" ++ echo >&2 "${AS} ${ASFLAGS} does not support section alignment (nasm <=2.08?)" + fi + } + +--- libvpx-v1.3.0/vpx_ports/x86_abi_support.asm-orig 2014-07-29 14:06:26.856461360 +0200 ++++ libvpx-v1.3.0/vpx_ports/x86_abi_support.asm 2014-07-29 15:00:51.772040384 +0200 +@@ -377,7 +377,7 @@ section .text + %elifidn __OUTPUT_FORMAT__,aout + %define SECTION_RODATA section .data + %else +-%define SECTION_RODATA section .rodata ++%define SECTION_RODATA section .rodata align=16 + %endif + + diff --git a/SOURCES/vp9-nasm.patch b/SOURCES/vp9-nasm.patch new file mode 100644 index 0000000..5e80cb7 --- /dev/null +++ b/SOURCES/vp9-nasm.patch @@ -0,0 +1,96 @@ +https://gerrit.chromium.org/gerrit/#/c/71007/ + +[modified] + +commit 2695f18211e9b1017647af608a64d72a688ffbe7 +Author: Jan Kratochvil +Date: Mon Jul 28 20:07:38 2014 +0200 + + Fix --as=nasm compatibility for new asm code. + + s/movd/movq/ + s/pmovmskb rX,/pmovmskb rXd,/ + Add end-of-line ':' label markers. + + Change-Id: Icc2c8b66af3cf72598361021699e099739f813d7 + +diff --git a/vp9/common/x86/vp9_subpixel_8t_ssse3.asm b/vp9/common/x86/vp9_subpixel_8t_ssse3.asm +index fd781d4..57eee70 100644 +--- a/vp9/common/x86/vp9_subpixel_8t_ssse3.asm ++++ b/vp9/common/x86/vp9_subpixel_8t_ssse3.asm +@@ -18,7 +18,7 @@ + mov rcx, 0x0400040 + + movdqa xmm4, [rdx] ;load filters +- movd xmm5, rcx ++ movq xmm5, rcx + packsswb xmm4, xmm4 + pshuflw xmm0, xmm4, 0b ;k0_k1 + pshuflw xmm1, xmm4, 01010101b ;k2_k3 +@@ -624,7 +624,7 @@ sym(vp9_filter_block1d16_v8_avg_ssse3): + pavgb xmm0, xmm1 + %endif + movd [rdi], xmm0 +-.done ++.done: + %endm + + %macro HORIZx8_ROW 4 +@@ -661,7 +661,7 @@ sym(vp9_filter_block1d16_v8_avg_ssse3): + mov rcx, 0x0400040 + + movdqa xmm4, [rdx] ;load filters +- movd xmm5, rcx ++ movq xmm5, rcx + packsswb xmm4, xmm4 + pshuflw xmm0, xmm4, 0b ;k0_k1 + pshuflw xmm1, xmm4, 01010101b ;k2_k3 +@@ -727,7 +727,7 @@ sym(vp9_filter_block1d16_v8_avg_ssse3): + pavgb xmm0, xmm1 + %endif + movq [rdi], xmm0 +-.done ++.done: + %endm + + %macro HORIZx16 1 +diff --git a/vp9/encoder/x86/vp9_quantize_ssse3_x86_64.asm b/vp9/encoder/x86/vp9_quantize_ssse3_x86_64.asm +index 508e1d4..1c97342 100644 +--- a/vp9/encoder/x86/vp9_quantize_ssse3.asm ++++ b/vp9/encoder/x86/vp9_quantize_ssse3.asm +@@ -122,8 +122,8 @@ cglobal quantize_%1, 0, %2, 15, coeff, ncoeff, skip, zbin, round, quant, \ + pcmpgtw m7, m6, m0 ; m7 = c[i] >= zbin + pcmpgtw m12, m11, m0 ; m12 = c[i] >= zbin + %ifidn %1, b_32x32 +- pmovmskb r6, m7 +- pmovmskb r2, m12 ++ pmovmskb r6d, m7 ++ pmovmskb r2d, m12 + or r6, r2 + jz .skip_iter + %endif +diff --git a/vp9/encoder/x86/vp9_subpel_variance.asm b/vp9/encoder/x86/vp9_subpel_variance.asm +index 1a9e4e8..e06e220 100644 +--- a/vp9/encoder/x86/vp9_subpel_variance.asm ++++ b/vp9/encoder/x86/vp9_subpel_variance.asm +@@ -101,7 +101,6 @@ SECTION .text + pshufd m4, m6, 0x1 + movd [r1], m7 ; store sse + paddd m6, m4 +- movd rax, m6 ; store sum as return value + %else ; mmsize == 8 + pshufw m4, m6, 0xe + pshufw m3, m7, 0xe +@@ -113,7 +112,11 @@ SECTION .text + movd [r1], m7 ; store sse + pshufw m4, m6, 0xe + paddd m6, m4 +- movd rax, m6 ; store sum as return value ++%endif ++%if ARCH_X86_64 ++ movq rax, m6 ; store sum as return value ++%else ++ movd eax, m6 ; store sum as return value + %endif + RET + %endmacro diff --git a/SOURCES/x86inc-nasm.patch b/SOURCES/x86inc-nasm.patch new file mode 100644 index 0000000..079ac08 --- /dev/null +++ b/SOURCES/x86inc-nasm.patch @@ -0,0 +1,25 @@ +commit 7ddb5f599286ab4ce7de4061ab94828cdfee36c6 +Author: KO Myung-Hun +Date: Tue Jul 22 10:47:20 2014 +0900 + + x86inc: fix compilation with NASM + + Change-Id: I5978921ab1ccad6648a5bde6ad023c3e3430f5f4 + +diff --git a/third_party/x86inc/x86inc.asm b/third_party/x86inc/x86inc.asm +index 2134676..99453a9 100644 +--- a/third_party/x86inc/x86inc.asm ++++ b/third_party/x86inc/x86inc.asm +@@ -234,10 +234,10 @@ ALIGNMODE k7 + %define r%1mp %2 + %elif ARCH_X86_64 ; memory + %define r%1m [rsp + stack_offset + %6] +- %define r%1mp qword r %+ %1m ++ %define r%1mp qword r %+ %1 %+ m + %else + %define r%1m [esp + stack_offset + %6] +- %define r%1mp dword r %+ %1m ++ %define r%1mp dword r %+ %1 %+ m + %endif + %define r%1 %2 + %endmacro diff --git a/SPECS/libvpx.spec b/SPECS/libvpx.spec index 3d05f00..da72f32 100644 --- a/SPECS/libvpx.spec +++ b/SPECS/libvpx.spec @@ -1,26 +1,21 @@ %global majorver 1 -%global minorver 2 +%global minorver 3 %global tinyver 0 Name: libvpx Summary: VP8 Video Codec SDK Version: %{majorver}.%{minorver}.%{tinyver} %global soversion %{version} -Release: 4%{?dist} +Release: 5%{?dist} License: BSD Group: System Environment/Libraries -# Google forgot to make a 1.2.0 tarball, so I made one from the git tag. -# git clone https://code.google.com/p/webm.libvpx/ libvpx -# cd libvpx -# git checkout v1.2.0 -# rm -rf .git* -# cd .. -# mv libvpx libvpx-v1.2.0 -# tar xvfj libvpx-v1.2.0.tar.bz2 libvpx-v1.2.0 Source0: http://webm.googlecode.com/files/%{name}-v%{version}.tar.bz2 # Thanks to debian. Source2: libvpx.ver -Patch0: libvpx-nasm.patch +Patch0: Bug-fix-in-ssse3-quantize-function.patch +Patch1: x86inc-nasm.patch +Patch2: vp9-nasm.patch +Patch3: sectalign-nasm.patch URL: http://www.webmproject.org/tools/vp8-sdk/ %ifarch %{ix86} x86_64 BuildRequires: nasm @@ -52,7 +47,11 @@ and decoder. %prep %setup -q -n %{name}-v%{version} -%patch0 -p1 -b .nasm +%patch0 -p1 -b .patch0 +%patch1 -p1 -b .x86inc-nasm +%patch2 -p1 -b .vp9-nasm +%patch3 -p1 -b .sectalign-nasm +sed -i -e 's/^\(global .*\) PRIVATE$/\1/' $(find -name "*.asm") %build %ifarch %{ix86} @@ -61,9 +60,13 @@ and decoder. %ifarch x86_64 %global vpxtarget x86_64-linux-gcc %else +%ifarch armv7hl +%global vpxtarget armv7-linux-gcc +%else %global vpxtarget generic-gnu %endif %endif +%endif # The configure script will reject the shared flag on the generic target # This means we need to fall back to the manual creation we did before. :P @@ -73,7 +76,12 @@ and decoder. %global generic_target 0 %endif -./configure --target=%{vpxtarget} --enable-pic --disable-install-srcs \ +%ifarch armv7hl +CROSS=armv7hl-redhat-linux-gnueabi- CHOST=armv7hl-redhat-linux-gnueabi-hardfloat ./configure \ +%else +./configure --target=%{vpxtarget} \ +%endif +--enable-pic --disable-install-srcs --as=nasm \ %if ! %{generic_target} --enable-shared \ %endif @@ -84,6 +92,21 @@ sed -i "s|-O3|%{optflags}|g" libs-%{vpxtarget}.mk sed -i "s|-O3|%{optflags}|g" examples-%{vpxtarget}.mk sed -i "s|-O3|%{optflags}|g" docs-%{vpxtarget}.mk +%ifarch armv7hl +#hackety hack hack +sed -i "s|AR=armv7hl-redhat-linux-gnueabi-ar|AR=ar|g" libs-%{vpxtarget}.mk +sed -i "s|AR=armv7hl-redhat-linux-gnueabi-ar|AR=ar|g" examples-%{vpxtarget}.mk +sed -i "s|AR=armv7hl-redhat-linux-gnueabi-ar|AR=ar|g" docs-%{vpxtarget}.mk + +sed -i "s|AS=armv7hl-redhat-linux-gnueabi-as|AS=as|g" libs-%{vpxtarget}.mk +sed -i "s|AS=armv7hl-redhat-linux-gnueabi-as|AS=as|g" examples-%{vpxtarget}.mk +sed -i "s|AS=armv7hl-redhat-linux-gnueabi-as|AS=as|g" docs-%{vpxtarget}.mk + +sed -i "s|NM=armv7hl-redhat-linux-gnueabi-nm|NM=nm|g" libs-%{vpxtarget}.mk +sed -i "s|NM=armv7hl-redhat-linux-gnueabi-nm|NM=nm|g" examples-%{vpxtarget}.mk +sed -i "s|NM=armv7hl-redhat-linux-gnueabi-nm|NM=nm|g" docs-%{vpxtarget}.mk +%endif + make %{?_smp_mflags} verbose=true target=libs %if %{generic_target} @@ -155,24 +178,21 @@ popd %{_bindir}/* %changelog -* Fri Jan 24 2014 Daniel Mach - 1.2.0-4 -- Mass rebuild 2014-01-24 +* Thu Mar 20 2014 Wim Taymans - 1.3.0-4 +- fix Illegal Instruction abort + +* Thu Feb 13 2014 Dan Horák - 1.3.0-3 +- update library symbol list for 1.3.0 from Debian -* Fri Dec 27 2013 Daniel Mach - 1.2.0-3 -- Mass rebuild 2013-12-27 +* Tue Feb 11 2014 Tom Callaway - 1.3.0-2 +- armv7hl specific target -* Fri Apr 5 2013 Martin Stransky - 1.2.0-2 -- Build fix for nasm +* Tue Feb 11 2014 Tom Callaway - 1.3.0-1 +- update to 1.3.0 * Thu Feb 28 2013 Tom Callaway - 1.2.0-1 - update to 1.2.0 -* Thu Feb 14 2013 Fedora Release Engineering - 1.1.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild - -* Thu Jul 19 2012 Fedora Release Engineering - 1.1.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild - * Tue May 29 2012 Tom Callaway - 1.1.0-1 - update to 1.1.0 @@ -186,9 +206,6 @@ popd * Mon Jan 30 2012 Tom Callaway - 1.0.0-1 - update to 1.0.0 -* Fri Jan 13 2012 Fedora Release Engineering - 0.9.7.1-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild - * Mon Oct 10 2011 Dan Horák - 0.9.7.1-3 - use macro instead of hard-coded version