Coder Social home page Coder Social logo

thor's Introduction

Thor Video Codec

Implementation of https://tools.ietf.org/html/draft-fuldseth-netvc-thor

Build

Windows: Use Visual Studio with build/Thor.sln.

Mac/Linux:

make -j8

Binaries will appear in the build/ directory.

Usage

encoder: Thorenc -cf config.txt -if in.yuv -of str.bit -rf out.yuv -qp N -width [width] -height [height] -f [framerate] -stat out.stat -qp [quant] -n [num frames]

A y4m file can be provided for input, and it will override width, height and framerate values given on the command-line.

decoder: Thordec str.bit out.dec.yuv

thor's People

Contributors

fluffy avatar kkcisco avatar metajack avatar mzanaty avatar stemidts avatar tdaede avatar thdav avatar volvet avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

thor's Issues

A SIGSEGV signal appear when running program Thordec

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

Add code to check encoder/decoder agreement

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.

Using %d for unsigned intergers, instead of %u

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

Stack buffer overflow found in common_kernels.c

==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.

get_vlc(): infinite loop on invalid streams

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.

Stack buffer overflow in read_block()

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

Code fail to build with GCC 5.2

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

Compilation fails with clang due to intrinsics

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

NULL Pointer Dereference in interpolate_frame

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

Compilation fails on ARM with gcc 4.6.1

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

Assembly optimisations - offer of code

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!

Invalid read in vg_replace_strmem.c:210

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.