cisco / thor Goto Github PK
View Code? Open in Web Editor NEWThor Video Codec
License: BSD 2-Clause "Simplified" License
Thor Video Codec
License: BSD 2-Clause "Simplified" License
I would like to point out that identifiers like "_INTER_PREDICTION_H_
" and "_SIMD_H
" do not fit to the expected naming convention of the C language standard.
Would you like to adjust your selection for unique names?
I suggest to reuse a higher level build system than your current small make file so that powerful checks for software features will become easier.
version: master (commit 18de8f9)
poc: poc
command: ./Thordec poc out.yuv
user@c3ae4d510abb:$ ./Thordec poc out.yuv
decode_frame_num= 0 display_frame_num=51657 input_file_size= 46 bitcnt= 0
Segmentation fault (core dumped)
Here is the backtrace in GDB:
pwndbg> backtrace
#0 0x00005555555a602f in interpolate_frame (k=<optimized out>, ratio=<optimized out>, h=34, w=256, outdata=0x0, indata1=0x7fffffff01c0, indata0=0x7fffffff01c0, mv_data=0x5555557a7f90) at common/temporal_interp.c:896
#1 interpolate_frames_hbd (new_frame=0x0, ref0=<optimized out>, ref1=<optimized out>, ratio=<optimized out>, pos=<optimized out>) at common/temporal_interp.c:967
#2 0x000055555555e0f7 in decode_frame (decoder_info=0x7fffffff7070, rec_buffer=0x7ffffffef5c0) at dec/decode_frame.c:110
#3 0x00005555555556b4 in main (argc=argc@entry=3, argv=argv@entry=0x7fffffffe468) at dec/maindec.c:179
#4 0x00007ffff7ca10b3 in __libc_start_main (main=0x5555555552c0 <main>, argc=3, argv=0x7fffffffe468, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffe458) at ../csu/libc-start.c:308
#5 0x000055555555714e in _start () at /usr/include/x86_64-linux-gnu/bits/stdio2.h:100
Tedious, could submit a patch to save you time? :)
common/simd/v64_intrinsics_c.h:794
common/simd/v64_intrinsics_c.h:806
common/simd/v64_intrinsics_c.h:818
common/simd/v64_intrinsics_c.h:830
common/simd/v64_intrinsics_c.h:842
common/simd/v64_intrinsics_c.h:854
common/simd/v64_intrinsics_c.h:865
common/simd/v64_intrinsics_c.h:876
common/simd/v64_intrinsics_c.h:887
common/simd/v64_intrinsics_c.h:909
common/simd/v128_intrinsics_c.h:590
command line:Thordec crash
valgrind command line to get detail: valgrind Thordec crash
click this to get crash file.
environment:ubuntu18.04,gcc7.5,g++7.5
==3841557== Memcheck, a memory error detector
==3841557== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==3841557== Using Valgrind-3.17.0 and LibVEX; rerun with -h for copyright info
==3841557== Command: ../../software/thor-master/build/Thordec crash
==3841557== Parent PID: 229797
==3841557==
==3841557== Invalid read of size 1
==3841557== at 0x403B006: rindex (vg_replace_strmem.c:210)
==3841557== by 0x10AB71: main (maindec.c:116)
==3841557== Address 0x0 is not stack'd, malloc'd or (recently) free'd
==3841557==
==3841557==
==3841557== Process terminating with default action of signal 11 (SIGSEGV): dumping core
==3841557== Access not within mapped region at address 0x0
==3841557== at 0x403B006: rindex (vg_replace_strmem.c:210)
==3841557== by 0x10AB71: main (maindec.c:116)
==3841557== If you believe this happened as a result of a stack
==3841557== overflow in your program's main thread (unlikely but
==3841557== possible), you can try to increase the size of the
==3841557== main thread stack using the --main-stacksize= flag.
==3841557== The main thread stack size used in this run was 8388608.
==3841557==
==3841557== HEAP SUMMARY:
==3841557== in use at exit: 552 bytes in 1 blocks
==3841557== total heap usage: 1 allocs, 0 frees, 552 bytes allocated
==3841557==
==3841557== LEAK SUMMARY:
==3841557== definitely lost: 0 bytes in 0 blocks
==3841557== indirectly lost: 0 bytes in 0 blocks
==3841557== possibly lost: 0 bytes in 0 blocks
==3841557== still reachable: 552 bytes in 1 blocks
==3841557== suppressed: 0 bytes in 0 blocks
==3841557== Rerun with --leak-check=full to see details of leaked memory
==3841557==
==3841557== For lists of detected and suppressed errors, rerun with: -s
==3841557== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
Would you like to add more error handling for return values from functions like the following?
Several of the while(!done) loops will loop forever if fed a constant stream of zeros. Once they read all of the bits in the file, this is exactly what they will receive.
Tested with https://media.xiph.org/video/derf/y4m/coastguard_qcif.y4m
Second frame from the decoder:
Second frame reconstruction from the encoder:
Frame 289 reconstruction from the encoder:
Disabling B-frames makes the green and purple streaks go away, but the color drift mismatch between encoder and decoder remains.
==2602==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7ffdc4f3617c at pc 0x0000004b23dd bp 0x7ffdc4f35270 sp 0x7ffdc4f35260
READ of size 4 at 0x7ffdc4f3617c thread T0
#0 0x4b23dc in scale_frame_down2x2_simd_lbd common/common_kernels.c:1849
#1 0x4e57b7 in interpolate_frames_lbd common/temporal_interp.c:950
#2 0x4273b0 in decode_frame dec/decode_frame.c:110
#3 0x402934 in main dec/maindec.c:179
#4 0x7f16740a582f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2082f)
#5 0x406ce8 in _start (/home/mfc_fuzz/thor/build/Thordec+0x406ce8)
Address 0x7ffdc4f3617c is located in stack of thread T0 at offset 2492 in frame
#0 0x4020af in main dec/maindec.c:97
This frame has 9 object(s):
[32, 40) 'infile'
[96, 104) 'outfile'
[160, 172) 'tot_bits'
[224, 352) 'rec_available'
[384, 2472) 'stream' <== Memory access at offset 2492 overflows this variable
[2528, 5696) 'rec'
[5728, 8896) 'ref'
[8928, 33992) 'bit_count'
[34048, 63424) 'decoder_info'
HINT: this may be a false positive if your program uses some custom stack unwind mechanism or swapcontext
(longjmp and C++ exceptions are supported)
SUMMARY: AddressSanitizer: stack-buffer-overflow common/common_kernels.c:1849 scale_frame_down2x2_simd_lbd
Shadow bytes around the buggy address:
0x1000389debd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x1000389debe0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x1000389debf0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x1000389dec00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x1000389dec10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x1000389dec20: 00 00 00 00 00 00 00 00 00 00 00 00 00 f4 f4[f4]
0x1000389dec30: f2 f2 f2 f2 00 00 00 00 00 00 00 00 00 00 00 00
0x1000389dec40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x1000389dec50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x1000389dec60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x1000389dec70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Heap right redzone: fb
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack partial redzone: f4
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
==2602==ABORTING
The input file has been put at :https://github.com/fCorleone/fuzz_programs/blob/master/thor/test2.bit
The command line is ./Thordec test2.bit out
the program was compiled by afl-gcc with ASAN mode.
Would the Thor team consider using our library of video coding assembly optimisations? This is a collection of permissively licensed assembly with test and demonstration code aimed primarily at HEVC encoding and decoding using x86/x64/AVX2. Thor primitives could easily be added and it seems likely that transforms are already interchangeable.
https://github.com/kupix/hevcasm/tree/develop
Happy to adapt and improve (and rename!) the HEVCasm library to Cisco's requirements :) We'd eventually love it to be a one-stop-shop for all the optimised primitives you might need for an encoder or decoder of modern video formats. HEVCasm is currently in use in Parabola products and collaborative R&D projects.
The "primitives API" as exposed by HEVCasm is a natural interface already existing in most codec implementations. It could be used to enable reuse of some of the most time-consuming work between encoders and decoders of different formats. So many codecs come with their own primitives built in and this represents vast duplication of effort between projects - our goal is to rise above politics and egos to improve that situation!
The code fail to build in Linux with GCC 5.2
cc -march=atom -mtune=native -O3 -pipe -fstack-protector --param=ssp-buffer-size=4 -fomit-frame-pointer -mfpmath=sse -std=c99 -g -O6 -Wall -pedantic -I common -c -o enc/encode_block.o enc/encode_block.c
cc -march=atom -mtune=native -O3 -pipe -fstack-protector --param=ssp-buffer-size=4 -fomit-frame-pointer -mfpmath=sse -std=c99 -g -O6 -Wall -pedantic -I common -c -o enc/encode_frame.o enc/encode_frame.c
cc -march=atom -mtune=native -O3 -pipe -fstack-protector --param=ssp-buffer-size=4 -fomit-frame-pointer -mfpmath=sse -std=c99 -g -O6 -Wall -pedantic -I common -c -o enc/mainenc.o enc/mainenc.c
cc -march=atom -mtune=native -O3 -pipe -fstack-protector --param=ssp-buffer-size=4 -fomit-frame-pointer -mfpmath=sse -std=c99 -g -O6 -Wall -pedantic -I common -c -o enc/putvlc.o enc/putvlc.c
In file included from common/simd/v128_intrinsics_x86.h:32:0,
from common/simd.h:131,
from common/common_block.h:31,
from enc/encode_frame.c:32:
common/simd/v64_intrinsics_x86.h: En la función ‘v64_unziphi_8’:
In file included from common/simd/v128_intrinsics_x86.h:32:0,
from common/simd.h:131,
from enc/putvlc.c:32:
common/simd/v64_intrinsics_x86.h: En la función ‘v64_unziphi_8’:
common/simd/v64_intrinsics_x86.h:222:53: aviso: declaración implícita de la función ‘_mm_cvtsi64_si128’ [-Wimplicit-function-declaration]
return _mm_shuffle_epi8(_mm_unpacklo_epi64(b, a), _mm_cvtsi64_si128(0x0f0d0b0907050301LL));
^
common/simd/v64_intrinsics_x86.h:222:53: error: tipo incompatible para el argumento 2 de ‘_mm_shuffle_epi8’
common/simd/v64_intrinsics_x86.h:222:53: aviso: declaración implícita de la función ‘_mm_cvtsi64_si128’ [-Wimplicit-function-declaration]
return _mm_shuffle_epi8(_mm_unpacklo_epi64(b, a), _mm_cvtsi64_si128(0x0f0d0b0907050301LL));
^
common/simd/v64_intrinsics_x86.h:222:53: error: tipo incompatible para el argumento 2 de ‘_mm_shuffle_epi8’
In file included from common/simd/v64_intrinsics_x86.h:34:0,
from common/simd/v128_intrinsics_x86.h:32,
from common/simd.h:131,
from common/common_block.h:31,
from enc/encode_frame.c:32:
/usr/lib/gcc/i686-pc-linux-gnu/5.2.0/include/tmmintrin.h:136:1: nota: se esperaba ‘__m128i {aka __vector(2) long long int}’ pero el argumento es de tipo ‘int’
_mm_shuffle_epi8 (__m128i __X, __m128i __Y)
^
In file included from common/simd/v64_intrinsics_x86.h:34:0,
from common/simd/v128_intrinsics_x86.h:32,
from common/simd.h:131,
from enc/putvlc.c:32:
/usr/lib/gcc/i686-pc-linux-gnu/5.2.0/include/tmmintrin.h:136:1: nota: se esperaba ‘__m128i {aka __vector(2) long long int}’ pero el argumento es de tipo ‘int’
_mm_shuffle_epi8 (__m128i __X, __m128i __Y)
^
In file included from common/simd/v128_intrinsics_x86.h:32:0,
from common/simd.h:131,
from enc/putvlc.c:32:
common/simd/v64_intrinsics_x86.h: En la función ‘v64_unziplo_8’:
common/simd/v64_intrinsics_x86.h:231:53: error: tipo incompatible para el argumento 2 de ‘_mm_shuffle_epi8’
return _mm_shuffle_epi8(_mm_unpacklo_epi64(b, a), _mm_cvtsi64_si128(0x0e0c0a0806040200LL));
^
In file included from common/simd/v64_intrinsics_x86.h:34:0,
from common/simd/v128_intrinsics_x86.h:32,
from common/simd.h:131,
from enc/putvlc.c:32:
/usr/lib/gcc/i686-pc-linux-gnu/5.2.0/include/tmmintrin.h:136:1: nota: se esperaba ‘__m128i {aka __vector(2) long long int}’ pero el argumento es de tipo ‘int’
_mm_shuffle_epi8 (__m128i __X, __m128i __Y)
^
In file included from common/simd/v128_intrinsics_x86.h:32:0,
from common/simd.h:131,
from enc/putvlc.c:32:
common/simd/v64_intrinsics_x86.h: En la función ‘v64_unziphi_16’:
common/simd/v64_intrinsics_x86.h:239:53: error: tipo incompatible para el argumento 2 de ‘_mm_shuffle_epi8’
return _mm_shuffle_epi8(_mm_unpacklo_epi64(b, a), _mm_cvtsi64_si128(0x0f0e0b0a07060302LL));
^
In file included from common/simd/v64_intrinsics_x86.h:34:0,
from common/simd/v128_intrinsics_x86.h:32,
from common/simd.h:131,
from enc/putvlc.c:32:
/usr/lib/gcc/i686-pc-linux-gnu/5.2.0/include/tmmintrin.h:136:1: nota: se esperaba ‘__m128i {aka __vector(2) long long int}’ pero el argumento es de tipo ‘int’
_mm_shuffle_epi8 (__m128i __X, __m128i __Y)
^
In file included from common/simd/v128_intrinsics_x86.h:32:0,
from common/simd.h:131,
from enc/putvlc.c:32:
common/simd/v64_intrinsics_x86.h: En la función ‘v64_unziplo_16’:
common/simd/v64_intrinsics_x86.h:247:53: error: tipo incompatible para el argumento 2 de ‘_mm_shuffle_epi8’
return _mm_shuffle_epi8(_mm_unpacklo_epi64(b, a), _mm_cvtsi64_si128(0x0d0c090805040100LL));
^
In file included from common/simd/v64_intrinsics_x86.h:34:0,
from common/simd/v128_intrinsics_x86.h:32,
from common/simd.h:131,
from enc/putvlc.c:32:
/usr/lib/gcc/i686-pc-linux-gnu/5.2.0/include/tmmintrin.h:136:1: nota: se esperaba ‘__m128i {aka __vector(2) long long int}’ pero el argumento es de tipo ‘int’
_mm_shuffle_epi8 (__m128i __X, __m128i __Y)
^
In file included from common/simd/v128_intrinsics_x86.h:32:0,
from common/simd.h:131,
from common/common_block.h:31,
from enc/encode_frame.c:32:
common/simd/v64_intrinsics_x86.h: En la función ‘v64_unziplo_8’:
common/simd/v64_intrinsics_x86.h:231:53: error: tipo incompatible para el argumento 2 de ‘_mm_shuffle_epi8’
return _mm_shuffle_epi8(_mm_unpacklo_epi64(b, a), _mm_cvtsi64_si128(0x0e0c0a0806040200LL));
^
In file included from common/simd/v64_intrinsics_x86.h:34:0,
from common/simd/v128_intrinsics_x86.h:32,
from common/simd.h:131,
from common/common_block.h:31,
from enc/encode_frame.c:32:
/usr/lib/gcc/i686-pc-linux-gnu/5.2.0/include/tmmintrin.h:136:1: nota: se esperaba ‘__m128i {aka __vector(2) long long int}’ pero el argumento es de tipo ‘int’
_mm_shuffle_epi8 (__m128i __X, __m128i __Y)
^
In file included from common/simd/v128_intrinsics_x86.h:32:0,
from common/simd.h:131,
from common/common_block.h:31,
from enc/encode_frame.c:32:
common/simd/v64_intrinsics_x86.h: En la función ‘v64_unziphi_16’:
common/simd/v64_intrinsics_x86.h:239:53: error: tipo incompatible para el argumento 2 de ‘_mm_shuffle_epi8’
return _mm_shuffle_epi8(_mm_unpacklo_epi64(b, a), _mm_cvtsi64_si128(0x0f0e0b0a07060302LL));
^
In file included from common/simd/v64_intrinsics_x86.h:34:0,
from common/simd/v128_intrinsics_x86.h:32,
from common/simd.h:131,
from common/common_block.h:31,
from enc/encode_frame.c:32:
/usr/lib/gcc/i686-pc-linux-gnu/5.2.0/include/tmmintrin.h:136:1: nota: se esperaba ‘__m128i {aka __vector(2) long long int}’ pero el argumento es de tipo ‘int’
_mm_shuffle_epi8 (__m128i __X, __m128i __Y)
^
In file included from common/simd/v128_intrinsics_x86.h:32:0,
from common/simd.h:131,
from common/common_block.h:31,
from enc/encode_frame.c:32:
common/simd/v64_intrinsics_x86.h: En la función ‘v64_unziplo_16’:
common/simd/v64_intrinsics_x86.h:247:53: error: tipo incompatible para el argumento 2 de ‘_mm_shuffle_epi8’
return _mm_shuffle_epi8(_mm_unpacklo_epi64(b, a), _mm_cvtsi64_si128(0x0d0c090805040100LL));
^
In file included from common/simd/v64_intrinsics_x86.h:34:0,
from common/simd/v128_intrinsics_x86.h:32,
from common/simd.h:131,
from common/common_block.h:31,
from enc/encode_frame.c:32:
/usr/lib/gcc/i686-pc-linux-gnu/5.2.0/include/tmmintrin.h:136:1: nota: se esperaba ‘__m128i {aka __vector(2) long long int}’ pero el argumento es de tipo ‘int’
_mm_shuffle_epi8 (__m128i __X, __m128i __Y)
^
In file included from common/simd.h:131:0,
from enc/putvlc.c:32:
common/simd/v128_intrinsics_x86.h: En la función ‘v128_from_64’:
common/simd/v128_intrinsics_x86.h:50:24: aviso: declaración implícita de la función ‘_mm_cvtsi64_m64’ [-Wimplicit-function-declaration]
return _mm_set_epi64(_mm_cvtsi64_m64(a), _mm_cvtsi64_m64(b));
^
common/simd/v128_intrinsics_x86.h:50:24: error: tipo incompatible para el argumento 1 de ‘_mm_set_epi64’
In file included from common/simd/v64_intrinsics_x86.h:32:0,
from common/simd/v128_intrinsics_x86.h:32,
from common/simd.h:131,
from enc/putvlc.c:32:
/usr/lib/gcc/i686-pc-linux-gnu/5.2.0/include/emmintrin.h:591:1: nota: se esperaba ‘__m64 {aka __vector(2) int}’ pero el argumento es de tipo ‘int’
_mm_set_epi64 (__m64 __q1, __m64 __q0)
^
In file included from common/simd.h:131:0,
from enc/putvlc.c:32:
common/simd/v128_intrinsics_x86.h:50:44: error: tipo incompatible para el argumento 2 de ‘_mm_set_epi64’
return _mm_set_epi64(_mm_cvtsi64_m64(a), _mm_cvtsi64_m64(b));
^
In file included from common/simd/v64_intrinsics_x86.h:32:0,
from common/simd/v128_intrinsics_x86.h:32,
from common/simd.h:131,
from enc/putvlc.c:32:
/usr/lib/gcc/i686-pc-linux-gnu/5.2.0/include/emmintrin.h:591:1: nota: se esperaba ‘__m64 {aka __vector(2) int}’ pero el argumento es de tipo ‘int’
_mm_set_epi64 (__m64 __q1, __m64 __q0)
^
In file included from common/simd.h:131:0,
from common/common_block.h:31,
from enc/encode_frame.c:32:
common/simd/v128_intrinsics_x86.h: En la función ‘v128_from_64’:
common/simd/v128_intrinsics_x86.h:50:24: aviso: declaración implícita de la función ‘_mm_cvtsi64_m64’ [-Wimplicit-function-declaration]
return _mm_set_epi64(_mm_cvtsi64_m64(a), _mm_cvtsi64_m64(b));
^
common/simd/v128_intrinsics_x86.h:50:24: error: tipo incompatible para el argumento 1 de ‘_mm_set_epi64’
In file included from common/simd/v64_intrinsics_x86.h:32:0,
from common/simd/v128_intrinsics_x86.h:32,
from common/simd.h:131,
from common/common_block.h:31,
from enc/encode_frame.c:32:
/usr/lib/gcc/i686-pc-linux-gnu/5.2.0/include/emmintrin.h:591:1: nota: se esperaba ‘__m64 {aka __vector(2) int}’ pero el argumento es de tipo ‘int’
_mm_set_epi64 (__m64 __q1, __m64 __q0)
^
In file included from common/simd.h:131:0,
from common/common_block.h:31,
from enc/encode_frame.c:32:
common/simd/v128_intrinsics_x86.h:50:44: error: tipo incompatible para el argumento 2 de ‘_mm_set_epi64’
return _mm_set_epi64(_mm_cvtsi64_m64(a), _mm_cvtsi64_m64(b));
^
In file included from common/simd/v64_intrinsics_x86.h:32:0,
from common/simd/v128_intrinsics_x86.h:32,
from common/simd.h:131,
from common/common_block.h:31,
from enc/encode_frame.c:32:
/usr/lib/gcc/i686-pc-linux-gnu/5.2.0/include/emmintrin.h:591:1: nota: se esperaba ‘__m64 {aka __vector(2) int}’ pero el argumento es de tipo ‘int’
_mm_set_epi64 (__m64 __q1, __m64 __q0)
^
In file included from common/simd.h:131:0,
from enc/putvlc.c:32:
common/simd/v128_intrinsics_x86.h: En la función ‘v128_unziplo_8’:
common/simd/v128_intrinsics_x86.h:219:16: error: tipos incompatibles en la inicialización del tipo ‘v128 {aka __vector(2) long long int}’ usando el tipo ‘int’
v128 order = _mm_cvtsi64_si128(0x0e0c0a0806040200LL);
^
common/simd/v128_intrinsics_x86.h: En la función ‘v128_unziplo_16’:
common/simd/v128_intrinsics_x86.h:232:16: error: tipos incompatibles en la inicialización del tipo ‘v128 {aka __vector(2) long long int}’ usando el tipo ‘int’
v128 order = _mm_cvtsi64_si128(0x0d0c090805040100LL);
^
In file included from common/simd.h:131:0,
from common/common_block.h:31,
from enc/encode_frame.c:32:
common/simd/v128_intrinsics_x86.h: En la función ‘v128_unziplo_8’:
common/simd/v128_intrinsics_x86.h:219:16: error: tipos incompatibles en la inicialización del tipo ‘v128 {aka __vector(2) long long int}’ usando el tipo ‘int’
v128 order = _mm_cvtsi64_si128(0x0e0c0a0806040200LL);
^
common/simd/v128_intrinsics_x86.h: En la función ‘v128_unziplo_16’:
common/simd/v128_intrinsics_x86.h:232:16: error: tipos incompatibles en la inicialización del tipo ‘v128 {aka __vector(2) long long int}’ usando el tipo ‘int’
v128 order = _mm_cvtsi64_si128(0x0d0c090805040100LL);
^
In file included from common/simd/v128_intrinsics_x86.h:32:0,
from common/simd.h:131,
from common/common_block.h:31,
from enc/write_bits.h:42,
from enc/encode_block.c:41:
common/simd/v64_intrinsics_x86.h: En la función ‘v64_unziphi_8’:
common/simd/v64_intrinsics_x86.h:222:53: aviso: declaración implícita de la función ‘_mm_cvtsi64_si128’ [-Wimplicit-function-declaration]
return _mm_shuffle_epi8(_mm_unpacklo_epi64(b, a), _mm_cvtsi64_si128(0x0f0d0b0
^
In file included from enc/../common/simd/v128_intrinsics_x86.h:32:0,
from enc/../common/simd.h:131,
from enc/mainenc.c:44:
enc/../common/simd/v64_intrinsics_x86.h: En la función ‘v64_unziphi_8’:
enc/../common/simd/v64_intrinsics_x86.h:222:53: aviso: declaración implícita de la función ‘_mm_cvtsi64_si128’ [-Wimplicit-function-declaration]
return _mm_shuffle_epi8(_mm_unpacklo_epi64(b, a), _mm_cvtsi64_si128(0x0f0d0b0907050301LL));
^
common/simd/v64_intrinsics_x86.h:222:53: error: tipo incompatible para el argumento 2 de ‘_mm_shuffle_epi8’
enc/../common/simd/v64_intrinsics_x86.h:222:53: error: tipo incompatible para el argumento 2 de ‘_mm_shuffle_epi8’
In file included from common/simd/v64_intrinsics_x86.h:34:0,
from common/simd/v128_intrinsics_x86.h:32,
from common/simd.h:131,
from common/common_block.h:31,
from enc/write_bits.h:42,
from enc/encode_block.c:41:
/usr/lib/gcc/i686-pc-linux-gnu/5.2.0/include/tmmintrin.h:136:1: nota: se esperaba ‘__m128i {aka __vector(2) long long int}’ pero el argumento es de tipo ‘int’
_mm_shuffle_epi8 (__m128i __X, __m128i __Y)
^
In file included from enc/../common/simd/v64_intrinsics_x86.h:34:0,
from enc/../common/simd/v128_intrinsics_x86.h:32,
from enc/../common/simd.h:131,
from enc/mainenc.c:44:
/usr/lib/gcc/i686-pc-linux-gnu/5.2.0/include/tmmintrin.h:136:1: nota: se esperaba ‘__m128i {aka __vector(2) long long int}’ pero el argumento es de tipo ‘int’
_mm_shuffle_epi8 (__m128i __X, __m128i __Y)
^
In file included from enc/../common/simd/v128_intrinsics_x86.h:32:0,
from enc/../common/simd.h:131,
from enc/mainenc.c:44:
enc/../common/simd/v64_intrinsics_x86.h: En la función ‘v64_unziplo_8’:
enc/../common/simd/v64_intrinsics_x86.h:231:53: error: tipo incompatible para el argumento 2 de ‘_mm_shuffle_epi8’
return _mm_shuffle_epi8(_mm_unpacklo_epi64(b, a), _mm_cvtsi64_si128(0x0e0c0a0806040200LL));
^
In file included from common/simd/v128_intrinsics_x86.h:32:0,
from common/simd.h:131,
from common/common_block.h:31,
from enc/write_bits.h:42,
from enc/encode_block.c:41:
common/simd/v64_intrinsics_x86.h: En la función ‘v64_unziplo_8’:
common/simd/v64_intrinsics_x86.h:231:53: error: tipo incompatible para el argumento 2 de ‘_mm_shuffle_epi8’
return _mm_shuffle_epi8(_mm_unpacklo_epi64(b, a), _mm_cvtsi64_si128(0x0e0c0a0
^
In file included from common/simd/v64_intrinsics_x86.h:34:0,
from common/simd/v128_intrinsics_x86.h:32,
from common/simd.h:131,
from common/common_block.h:31,
from enc/write_bits.h:42,
from enc/encode_block.c:41:
/usr/lib/gcc/i686-pc-linux-gnu/5.2.0/include/tmmintrin.h:136:1: nota: se esperaba ‘__m128i {aka __vector(2) long long int}’ pero el argumento es de tipo ‘int’
_mm_shuffle_epi8 (__m128i __X, __m128i __Y)
^
In file included from enc/../common/simd/v64_intrinsics_x86.h:34:0,
from enc/../common/simd/v128_intrinsics_x86.h:32,
from enc/../common/simd.h:131,
from enc/mainenc.c:44:
/usr/lib/gcc/i686-pc-linux-gnu/5.2.0/include/tmmintrin.h:136:1: nota: se esperaba ‘__m128i {aka __vector(2) long long int}’ pero el argumento es de tipo ‘int’
_mm_shuffle_epi8 (__m128i __X, __m128i __Y)
^
In file included from enc/../common/simd/v128_intrinsics_x86.h:32:0,
from enc/../common/simd.h:131,
from enc/mainenc.c:44:
enc/../common/simd/v64_intrinsics_x86.h: En la función ‘v64_unziphi_16’:
In file included from common/simd/v128_intrinsics_x86.h:32:0,
from common/simd.h:131,
from common/common_block.h:31,
from enc/write_bits.h:42,
from enc/encode_block.c:41:
common/simd/v64_intrinsics_x86.h: En la función ‘v64_unziphi_16’:
enc/../common/simd/v64_intrinsics_x86.h:239:53: error: tipo incompatible para el argumento 2 de ‘_mm_shuffle_epi8’
return _mm_shuffle_epi8(_mm_unpacklo_epi64(b, a), _mm_cvtsi64_si128(0x0f0e0b0a07060302LL));
^
common/simd/v64_intrinsics_x86.h:239:53: error: tipo incompatible para el argumento 2 de ‘_mm_shuffle_epi8’
return _mm_shuffle_epi8(_mm_unpacklo_epi64(b, a), _mm_cvtsi64_si128(0x0f0e0b0
^
In file included from enc/../common/simd/v64_intrinsics_x86.h:34:0,
from enc/../common/simd/v128_intrinsics_x86.h:32,
from enc/../common/simd.h:131,
from enc/mainenc.c:44:
/usr/lib/gcc/i686-pc-linux-gnu/5.2.0/include/tmmintrin.h:136:1: nota: se esperaba ‘__m128i {aka __vector(2) long long int}’ pero el argumento es de tipo ‘int’
_mm_shuffle_epi8 (__m128i __X, __m128i __Y)
^
In file included from common/simd/v64_intrinsics_x86.h:34:0,
from common/simd/v128_intrinsics_x86.h:32,
from common/simd.h:131,
from common/common_block.h:31,
from enc/write_bits.h:42,
from enc/encode_block.c:41:
/usr/lib/gcc/i686-pc-linux-gnu/5.2.0/include/tmmintrin.h:136:1: nota: se esperaba ‘__m128i {aka __vector(2) long long int}’ pero el argumento es de tipo ‘int’
_mm_shuffle_epi8 (__m128i __X, __m128i __Y)
^
In file included from enc/../common/simd/v128_intrinsics_x86.h:32:0,
from enc/../common/simd.h:131,
from enc/mainenc.c:44:
enc/../common/simd/v64_intrinsics_x86.h: En la función ‘v64_unziplo_16’:
In file included from common/simd/v128_intrinsics_x86.h:32:0,
from common/simd.h:131,
from common/common_block.h:31,
from enc/write_bits.h:42,
from enc/encode_block.c:41:
common/simd/v64_intrinsics_x86.h: En la función ‘v64_unziplo_16’:
enc/../common/simd/v64_intrinsics_x86.h:247:53: error: tipo incompatible para el argumento 2 de ‘_mm_shuffle_epi8’
return _mm_shuffle_epi8(_mm_unpacklo_epi64(b, a), _mm_cvtsi64_si128(0x0d0c090805040100LL));
^
common/simd/v64_intrinsics_x86.h:247:53: error: tipo incompatible para el argumento 2 de ‘_mm_shuffle_epi8’
return _mm_shuffle_epi8(_mm_unpacklo_epi64(b, a), _mm_cvtsi64_si128(0x0d0c090
^
In file included from enc/../common/simd/v64_intrinsics_x86.h:34:0,
from enc/../common/simd/v128_intrinsics_x86.h:32,
from enc/../common/simd.h:131,
from enc/mainenc.c:44:
/usr/lib/gcc/i686-pc-linux-gnu/5.2.0/include/tmmintrin.h:136:1: nota: se esperaba ‘__m128i {aka __vector(2) long long int}’ pero el argumento es de tipo ‘int’
_mm_shuffle_epi8 (__m128i __X, __m128i __Y)
^
In file included from common/simd/v64_intrinsics_x86.h:34:0,
from common/simd/v128_intrinsics_x86.h:32,
from common/simd.h:131,
from common/common_block.h:31,
from enc/write_bits.h:42,
from enc/encode_block.c:41:
/usr/lib/gcc/i686-pc-linux-gnu/5.2.0/include/tmmintrin.h:136:1: nota: se esperaba ‘__m128i {aka __vector(2) long long int}’ pero el argumento es de tipo ‘int’
_mm_shuffle_epi8 (__m128i __X, __m128i __Y)
^
In file included from common/simd.h:131:0,
from common/common_block.h:31,
from enc/write_bits.h:42,
from enc/encode_block.c:41:
common/simd/v128_intrinsics_x86.h: En la función ‘v128_from_64’:
common/simd/v128_intrinsics_x86.h:50:24: aviso: declaración implícita de la función ‘_mm_cvtsi64_m64’ [-Wimplicit-function-declaration]
return _mm_set_epi64(_mm_cvtsi64_m64(a), _mm_cvtsi64_m64(b));
^
common/simd/v128_intrinsics_x86.h:50:24: error: tipo incompatible para el argumento 1 de ‘_mm_set_epi64’
In file included from common/simd/v64_intrinsics_x86.h:32:0,
from common/simd/v128_intrinsics_x86.h:32,
from common/simd.h:131,
from common/common_block.h:31,
from enc/write_bits.h:42,
from enc/encode_block.c:41:
/usr/lib/gcc/i686-pc-linux-gnu/5.2.0/include/emmintrin.h:591:1: nota: se esperaba ‘__m64 {aka __vector(2) int}’ pero el argumento es de tipo ‘int’
_mm_set_epi64 (__m64 __q1, __m64 __q0)
^
In file included from common/simd.h:131:0,
from common/common_block.h:31,
from enc/write_bits.h:42,
from enc/encode_block.c:41:
common/simd/v128_intrinsics_x86.h:50:44: error: tipo incompatible para el argumento 2 de ‘_mm_set_epi64’
return _mm_set_epi64(_mm_cvtsi64_m64(a), _mm_cvtsi64_m64(b));
^
In file included from common/simd/v64_intrinsics_x86.h:32:0,
from common/simd/v128_intrinsics_x86.h:32,
from common/simd.h:131,
from common/common_block.h:31,
from enc/write_bits.h:42,
from enc/encode_block.c:41:
/usr/lib/gcc/i686-pc-linux-gnu/5.2.0/include/emmintrin.h:591:1: nota: se esperaba ‘__m64 {aka __vector(2) int}’ pero el argumento es de tipo ‘int’
_mm_set_epi64 (__m64 __q1, __m64 __q0)
^
In file included from enc/../common/simd.h:131:0,
from enc/mainenc.c:44:
enc/../common/simd/v128_intrinsics_x86.h: En la función ‘v128_from_64’:
enc/../common/simd/v128_intrinsics_x86.h:50:24: aviso: declaración implícita de la función ‘_mm_cvtsi64_m64’ [-Wimplicit-function-declaration]
return _mm_set_epi64(_mm_cvtsi64_m64(a), _mm_cvtsi64_m64(b));
^
enc/../common/simd/v128_intrinsics_x86.h:50:24: error: tipo incompatible para el argumento 1 de ‘_mm_set_epi64’
In file included from enc/../common/simd/v64_intrinsics_x86.h:32:0,
from enc/../common/simd/v128_intrinsics_x86.h:32,
from enc/../common/simd.h:131,
from enc/mainenc.c:44:
/usr/lib/gcc/i686-pc-linux-gnu/5.2.0/include/emmintrin.h:591:1: nota: se esperaba ‘__m64 {aka __vector(2) int}’ pero el argumento es de tipo ‘int’
_mm_set_epi64 (__m64 __q1, __m64 __q0)
^
In file included from enc/../common/simd.h:131:0,
from enc/mainenc.c:44:
enc/../common/simd/v128_intrinsics_x86.h:50:44: error: tipo incompatible para el argumento 2 de ‘_mm_set_epi64’
return _mm_set_epi64(_mm_cvtsi64_m64(a), _mm_cvtsi64_m64(b));
^
In file included from enc/../common/simd/v64_intrinsics_x86.h:32:0,
from enc/../common/simd/v128_intrinsics_x86.h:32,
from enc/../common/simd.h:131,
from enc/mainenc.c:44:
/usr/lib/gcc/i686-pc-linux-gnu/5.2.0/include/emmintrin.h:591:1: nota: se esperaba ‘__m64 {aka __vector(2) int}’ pero el argumento es de tipo ‘int’
_mm_set_epi64 (__m64 __q1, __m64 __q0)
^
Makefile:69: fallo en las instrucciones para el objetivo 'enc/encode_frame.o'
make: *** [enc/encode_frame.o] Error 1
make: *** Se espera a que terminen otras tareas....
Makefile:69: fallo en las instrucciones para el objetivo 'enc/putvlc.o'
make: *** [enc/putvlc.o] Error 1
In file included from common/simd.h:131:0,
from common/common_block.h:31,
from enc/write_bits.h:42,
from enc/encode_block.c:41:
common/simd/v128_intrinsics_x86.h: En la función ‘v128_unziplo_8’:
common/simd/v128_intrinsics_x86.h:219:16: error: tipos incompatibles en la inicialización del tipo ‘v128 {aka __vector(2) long long int}’ usando el tipo ‘int’
v128 order = _mm_cvtsi64_si128(0x0e0c0a0806040200LL);
^
common/simd/v128_intrinsics_x86.h: En la función ‘v128_unziplo_16’:
common/simd/v128_intrinsics_x86.h:232:16: error: tipos incompatibles en la inicialización del tipo ‘v128 {aka __vector(2) long long int}’ usando el tipo ‘int’
v128 order = _mm_cvtsi64_si128(0x0d0c090805040100LL);
^
In file included from enc/../common/simd.h:131:0,
from enc/mainenc.c:44:
enc/../common/simd/v128_intrinsics_x86.h: En la función ‘v128_unziplo_8’:
enc/../common/simd/v128_intrinsics_x86.h:219:16: error: tipos incompatibles en la inicialización del tipo ‘v128 {aka __vector(2) long long int}’ usando el tipo ‘int’
v128 order = _mm_cvtsi64_si128(0x0e0c0a0806040200LL);
^
enc/../common/simd/v128_intrinsics_x86.h: En la función ‘v128_unziplo_16’:
enc/../common/simd/v128_intrinsics_x86.h:232:16: error: tipos incompatibles en la inicialización del tipo ‘v128 {aka __vector(2) long long int}’ usando el tipo ‘int’
v128 order = _mm_cvtsi64_si128(0x0d0c090805040100LL);
^
Makefile:69: fallo en las instrucciones para el objetivo 'enc/mainenc.o'
make: *** [enc/mainenc.o] Error 1
Makefile:69: fallo en las instrucciones para el objetivo 'enc/encode_block.o'
make: *** [enc/encode_block.o] Error 1
make option are the standard in ArchLinux
make DESTDIR=${pkgdir} prefix=/usr \
localstatedir=/var sysconfdir=/etc \
sbindir=/usr/bin bindir=/usr/bin \
libdir=/usr/lib libexecdir=/usr/lib
I test with gcc --march=686 -mtune=generic -O3 -pipe -fstack-protector --param=ssp-buffer-size=4 -fomit-frame-pointer
without succes too and the same errors
It would be useful to have an automated way to check that the encoder and decoder agree on the reconstructed frame. This could be done by running the decoder inside the encoder after each frame with the coded bitstream.
See issue #31.
Compilation errors on OMAP4 Panda board w/ ARMv7 Processor rev 2 (v7l):
common/common_kernels.c: In function ‘get_inter_prediction_luma_inner’: common/common_kernels.c:197:7: error: incompatible type for argument 1 of ‘v128_unpacklo_u8_s16’ common/simd/v128_intrinsics.h:129:18: note: expected ‘v128’ but argument is of type ‘v64’ common/common_kernels.c:198:7: error: incompatible type for argument 1 of ‘v128_unpacklo_u8_s16’ common/simd/v128_intrinsics.h:129:18: note: expected ‘v128’ but argument is of type ‘v64’ common/common_kernels.c:199:7: error: incompatible type for argument 1 of ‘v128_unpacklo_u8_s16’ common/simd/v128_intrinsics.h:129:18: note: expected ‘v128’ but argument is of type ‘v64’ common/common_kernels.c:201:7: error: incompatible type for argument 1 of ‘v128_unpacklo_u8_s16’ common/simd/v128_intrinsics.h:129:18: note: expected ‘v128’ but argument is of type ‘v64’ common/common_kernels.c:202:7: error: incompatible type for argument 1 of ‘v128_unpacklo_u8_s16’ common/simd/v128_intrinsics.h:129:18: note: expected ‘v128’ but argument is of type ‘v64’ common/common_kernels.c:203:7: error: incompatible type for argument 1 of ‘v128_unpacklo_u8_s16’ common/simd/v128_intrinsics.h:129:18: note: expected ‘v128’ but argument is of type ‘v64’ common/common_kernels.c: In function ‘get_inter_prediction_luma_centre’: common/common_kernels.c:337:7: error: incompatible type for argument 2 of ‘v64_add_16’ common/simd/v64_intrinsics.h:72:17: note: expected ‘v64’ but argument is of type ‘v128’ make: *** [common/common_kernels.o] Error 1
Can also be reproduced with gcc 4.6.3
In particular: -if, -of, -rf, -stat, -width, -height, -n, -f, and -qp.
This would allow AWCY to reference the latest versions of the config files in your repository directly.
Compiler errors with Debian clang version 3.5.2-1 with target: x86_64-pc-linux-gnu
$>CC=clang make ... In file included from enc/encode_block.c:41: In file included from enc/write_bits.h:42: In file included from common/common_block.h:31: In file included from common/simd.h:132: In file included from common/simd/v128_intrinsics_x86.h:32: common/simd/v64_intrinsics_x86.h:110:12: error: argument to '__builtin_ia32_psrldqi128' must be a constant integer ; (__m128i)__builtin_ia32_psrldqi128(__a, (c)*8); }) : b; ^ ~~~~~ common/simd/v64_intrinsics_x86.h:110:12: error: can't convert between vector and non-scalar values ('void' and 'v64' (aka '__m128i')) return c ? __extension__ ({ ^ ~~~~~~~~~~~~~~~~ common/simd/v64_intrinsics_x86.h:504:12: error: argument to '__builtin_ia32_pslldqi128' must be a constant integer ; (__m128i)__builtin_ia32_pslldqi128(__a, (c)*8); }); ^ ~~~~~ common/simd/v64_intrinsics_x86.h:504:10: error: returning 'void' from a function with incompatible result type 'v64' (aka '__m128i') return __extension__ ({ ^~~~~~~~~~~~~~~~ common/simd/v64_intrinsics_x86.h:508:12: error: argument to '__builtin_ia32_psrldqi128' must be a constant integer ; (__m128i)__builtin_ia32_psrldqi128(__a, (c + 8)*8); }); ^ ~~~~~~~~~ common/simd/v64_intrinsics_x86.h:508:10: error: returning 'void' from a function with incompatible result type 'v64' (aka '__m128i') return __extension__ ({ ^~~~~~~~~~~~~~~~ In file included from enc/encode_block.c:41: In file included from enc/write_bits.h:42: In file included from common/common_block.h:31: In file included from common/simd.h:132: common/simd/v128_intrinsics_x86.h:89:12: error: argument to '__builtin_ia32_psrldqi128' must be a constant integer ; (__m128i)__builtin_ia32_psrldqi128(__a, (c)*8); }), __extension__ ({ ^ ~~~~~ common/simd/v128_intrinsics_x86.h:89:12: error: argument to '__builtin_ia32_pslldqi128' must be a constant integer ; (__m128i)__builtin_ia32_pslldqi128(__a, (16 - c)*8); })) : b; ^ ~~~~~~~~~~ common/simd/v128_intrinsics_x86.h:89:27: error: passing 'void' to parameter of incompatible type '__m128i' (vector of 2 'long long' values) return c ? _mm_or_si128(__extension__ ({ ^~~~~~~~~~~~~~~~ /usr/include/clang/3.5.2/include/emmintrin.h:817:22: note: passing argument to parameter '__a' here _mm_or_si128(__m128i __a, __m128i __b) ^ In file included from enc/encode_block.c:41: In file included from enc/write_bits.h:42: In file included from common/common_block.h:31: In file included from common/simd.h:132: common/simd/v128_intrinsics_x86.h:528:12: error: argument to '__builtin_ia32_pslldqi128' must be a constant integer ; (__m128i)__builtin_ia32_pslldqi128(__a, (c)*8); }); ^ ~~~~~ common/simd/v128_intrinsics_x86.h:528:10: error: returning 'void' from a function with incompatible result type 'v128' (aka '__m128i') return __extension__ ({ ^~~~~~~~~~~~~~~~ common/simd/v128_intrinsics_x86.h:532:12: error: argument to '__builtin_ia32_psrldqi128' must be a constant integer ; (__m128i)__builtin_ia32_psrldqi128(__a, (c)*8); }); ^ ~~~~~ common/simd/v128_intrinsics_x86.h:532:10: error: returning 'void' from a function with incompatible result type 'v128' (aka '__m128i') return __extension__ ({ ^~~~~~~~~~~~~~~~ 1 warning and 13 errors generated. Makefile:69: recipe for target 'enc/encode_block.o' failed make: *** [enc/encode_block.o] Error 1
version: master (commit 18de8f9)
poc: poc
command: ./Thordec poc out.yuv
user@c3ae4d510abb:$ ./Thordec poc out.yuv
Warning: short read*** stack smashing detected ***: terminated
Aborted (core dumped)
Here is the backtrace in GDB:
pwndbg> backtrace
#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1 0x00007ffff7c9f859 in __GI_abort () at abort.c:79
#2 0x00007ffff7d0a29e in __libc_message (action=action@entry=do_abort, fmt=fmt@entry=0x7ffff7e3408f "*** %s ***: terminated\n") at ../sysdeps/posix/libc_fatal.c:155
#3 0x00007ffff7dacaea in __GI___fortify_fail (msg=msg@entry=0x7ffff7e34077 "stack smashing detected") at fortify_fail.c:26
#4 0x00007ffff7dacab6 in __stack_chk_fail () at stack_chk_fail.c:24
#5 0x000055555555d8ae in read_block (decoder_info=decoder_info@entry=0x7fffffff7070, stream=<optimized out>, block_info=block_info@entry=0x7ffffffed160, frame_type=<optimized out>) at dec/read_bits.c:134
#6 0x000055555555883f in decode_block (decoder_info=decoder_info@entry=0x7fffffff7070, size=size@entry=8, ypos=ypos@entry=0, xpos=xpos@entry=24, sub=sub@entry=31) at dec/decode_block.c:287
#7 0x0000555555559d26 in process_block_dec_lbd (decoder_info=0x7fffffff7070, size=8, yposY=0, xposY=24, sub=31) at dec/decode_block.c:661
#8 0x000055555555dd60 in decode_frame (decoder_info=0x7fffffff7070, rec_buffer=<optimized out>) at dec/decode_frame.c:163
#9 0x00005555555556b4 in main (argc=argc@entry=3, argv=argv@entry=0x7fffffffe468) at dec/maindec.c:179
#10 0x00007ffff7ca10b3 in __libc_start_main (main=0x5555555552c0 <main>, argc=3, argv=0x7fffffffe468, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffe458) at ../csu/libc-start.c:308
#11 0x000055555555714e in _start () at /usr/include/x86_64-linux-gnu/bits/stdio2.h:100
An issue has been discovered when use Thordec:
ASAN:SIGSEGV
=================================================================
==22231==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x7fec86fb7425 bp 0x7fffe85bc968 sp 0x7fffe85aceb8 T0)
#0 0x7fec86fb7424 in strrchr (/lib/x86_64-linux-gnu/libc.so.6+0x8d424)
#1 0x4022a9 in main dec/maindec.c:116
#2 0x7fec86f4a82f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2082f)
#3 0x406ce8 in _start (/home/mfc_fuzz/thor/build/Thordec+0x406ce8)
AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV ??:0 strrchr
==22231==ABORTING
The input file is displayed at: https://github.com/fCorleone/fuzz_programs/blob/master/thor/test.bit
The command line is ./Thordec test.bit out.yuv
Currently the code only works for sequences that are (sub_gop*n+1), and rounds down.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.