<div dir="ltr">Hi Steve,<div>I applied the second patch at the current tip and tried to build the code, It is building fine, But when i tried to encode, the frames were not encoded ( encode function is not invoked).</div><div>
<br></div><div><div><br></div><div>rajesh@mcw-8aaaa0bebfe /c/Documents and Settings/rajesh/Desktop/x265/build/msys</div><div>$ x265.exe --input bowing_cif.y4m -o out.hevc -f 30</div><div>y4m  [info]: 352x288 fps 30000/1001 i420 sar 128:117 frames 0 - 29 of 300</div>
<div>x265 [info]: HEVC encoder version 0.9+82-84315557c97f</div><div>x265 [info]: build info [Windows][GCC 4.8.1][32 bit] 8bpp</div><div>x265 [info]: using cpu capabilities: MMX2 SSE2 SSE3 Cache64</div><div>x265 [info]: WPP streams / pool / frames         : 5 / 2 / 1</div>
<div>x265 [info]: Main profile, Level-2 (Main tier)</div><div>x265 [info]: CU size                             : 64</div><div>x265 [info]: Max RQT depth inter / intra         : 1 / 1</div><div>x265 [info]: ME / range / subpel / merge         : hex / 57 / 2 / 2</div>
<div>x265 [info]: Keyframe min / max / scenecut       : 25 / 250 / 40</div><div>x265 [info]: Lookahead / bframes / badapt        : 20 / 4 / 2</div><div>x265 [info]: b-pyramid / weightp / weightb / refs: 1 / 1 / 0 / 3</div>
<div>x265 [info]: Rate Control / AQ-Strength / CUTree : CRF-28.0 / 1.0 / 1</div><div>x265 [info]: tools: rect amp rd=3 lft sao-lcu sign-hide</div><div><br></div><div>rajesh@mcw-8aaaa0bebfe /c/Documents and Settings/rajesh/Desktop/x265/build/msys</div>
<div>$</div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Apr 21, 2014 at 2:05 PM, Steve Borho <span dir="ltr"><<a href="mailto:steve@borho.org" target="_blank">steve@borho.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Mon, Apr 21, 2014 at 3:15 PM, dave <<a href="mailto:dtyx265@gmail.com">dtyx265@gmail.com</a>> wrote:<br>

> On 04/18/2014 12:10 PM, Steve Borho wrote:<br>
>><br>
>> # HG changeset patch<br>
>> # User Steve Borho <<a href="mailto:steve@borho.org">steve@borho.org</a>><br>
>> # Date 1397762142 18000<br>
>> #      Thu Apr 17 14:15:42 2014 -0500<br>
>> # Node ID df76c716a254ba1b3fdc563d9e7803c4f4df1829<br>
>> # Parent  1fab04de065a3f7f5fedc128f572b860d6df0de2<br>
>> manually align the stack for GCC x86_32 builds<br>
>><br>
>> This version declares x265_stack_align as extern "C" since it is an<br>
>> assembly<br>
>> function, fixes the return of count from Encoder::encode<br>
>><br>
>> This needs testing on GCC built x86_32 platforms, any volunteers?<br>
>><br>
>> For all threads x265 creates I'm hoping we can align the stack immediately<br>
>> in<br>
>> the call to threadMain().<br>
>><br>
>> At first glance, it seems only the call to x265_encoder_encode() needs to<br>
>> be<br>
>> stack aligned.<br>
>><br>
>> diff -r 1fab04de065a -r df76c716a254<br>
>> source/cmake/CMakeASM_YASMInformation.cmake<br>
>> --- a/source/cmake/CMakeASM_YASMInformation.cmake       Fri Apr 18<br>
>> 18:00:58 2014 +0530<br>
>> +++ b/source/cmake/CMakeASM_YASMInformation.cmake       Thu Apr 17<br>
>> 14:15:42 2014 -0500<br>
>> @@ -21,8 +21,7 @@<br>
>>       endif()<br>
>>   endif()<br>
>>   -# we cannot assume 16-byte stack alignment on x86_32 even with GCC<br>
>> -if(GCC AND X64)<br>
>> +if(GCC)<br>
>>       set(ASM_FLAGS "${ASM_FLAGS} -DHAVE_ALIGNED_STACK=1")<br>
>>   else()<br>
>>       set(ASM_FLAGS "${ASM_FLAGS} -DHAVE_ALIGNED_STACK=0")<br>
>> diff -r 1fab04de065a -r df76c716a254 source/common/common.h<br>
>> --- a/source/common/common.h    Fri Apr 18 18:00:58 2014 +0530<br>
>> +++ b/source/common/common.h    Thu Apr 17 14:15:42 2014 -0500<br>
>> @@ -47,10 +47,21 @@<br>
>>   #define ALIGN_VAR_8(T, var)  T var __attribute__((aligned(8)))<br>
>>   #define ALIGN_VAR_16(T, var) T var __attribute__((aligned(16)))<br>
>>   #define ALIGN_VAR_32(T, var) T var __attribute__((aligned(32)))<br>
>> +<br>
>> +#if X265_ARCH_X86 && !defined(X86_64)<br>
>> +extern "C" intptr_t x265_stack_align( void (*func)(), ... );<br>
>> +#define x265_stack_align(func,...) x265_stack_align((void (*)())func,<br>
>> __VA_ARGS__)<br>
>> +#else<br>
>> +#define x265_stack_align(func,...) func(__VA_ARGS__)<br>
>> +#endif<br>
>> +<br>
>>   #elif defined(_MSC_VER)<br>
>> +<br>
>>   #define ALIGN_VAR_8(T, var)  __declspec(align(8)) T var<br>
>>   #define ALIGN_VAR_16(T, var) __declspec(align(16)) T var<br>
>>   #define ALIGN_VAR_32(T, var) __declspec(align(32)) T var<br>
>> +#define x265_stack_align(func,...) func(__VA_ARGS__)<br>
>> +<br>
>>   #endif // if defined(__GNUC__)<br>
>>     #if HIGH_BIT_DEPTH<br>
>> diff -r 1fab04de065a -r df76c716a254 source/common/threading.cpp<br>
>> --- a/source/common/threading.cpp       Fri Apr 18 18:00:58 2014 +0530<br>
>> +++ b/source/common/threading.cpp       Thu Apr 17 14:15:42 2014 -0500<br>
>> @@ -28,12 +28,18 @@<br>
>>   namespace x265 {<br>
>>   // x265 private namespace<br>
>>   +/* C shim for forced stack alignment */<br>
>> +static void stackAlignMain(Thread *instance)<br>
>> +{<br>
>> +    instance->threadMain();<br>
>> +}<br>
>> +<br>
>>   #if _WIN32<br>
>>     static DWORD WINAPI ThreadShim(Thread *instance)<br>
>>   {<br>
>>       // defer processing to the virtual function implemented in the<br>
>> derived class<br>
>> -    instance->threadMain();<br>
>> +    x265_stack_align(stackAlignMain, instance);<br>
>>         return 0;<br>
>>   }<br>
>> @@ -70,7 +76,7 @@<br>
>>       // defer processing to the virtual function implemented in the<br>
>> derived class<br>
>>       Thread *instance = reinterpret_cast<Thread *>(opaque);<br>
>>   -    instance->threadMain();<br>
>> +    x265_stack_align(stackAlignMain, instance);<br>
>>         return NULL;<br>
>>   }<br>
>> diff -r 1fab04de065a -r df76c716a254 source/encoder/api.cpp<br>
>> --- a/source/encoder/api.cpp    Fri Apr 18 18:00:58 2014 +0530<br>
>> +++ b/source/encoder/api.cpp    Thu Apr 17 14:15:42 2014 -0500<br>
>> @@ -103,6 +103,15 @@<br>
>>       return ret;<br>
>>   }<br>
>>   +#if defined(__GNUC__) && X265_ARCH_X86 && !defined(X86_64)<br>
>> +/* C wrapper for Encoder::encode() so we can align the stack prior to<br>
>> entry<br>
>> + * since the caller may not have aligned the stack enough for us */<br>
>> +static intptr_t encode_stack_frame(Encoder *enc, bool bEos, const<br>
>> x265_picture* pic, x265_picture *pic_out, NALUnitEBSP **nalunits)<br>
>> +{<br>
>> +    return (intptr_t)enc->encode(bEos, pic, pic_out, nalunits);<br>
>> +}<br>
>> +#endif<br>
>> +<br>
>>   extern "C"<br>
>>   int x265_encoder_encode(x265_encoder *enc, x265_nal **pp_nal, uint32_t<br>
>> *pi_nal, x265_picture *pic_in, x265_picture *pic_out)<br>
>>   {<br>
>> @@ -111,7 +120,12 @@<br>
>>         Encoder *encoder = static_cast<Encoder*>(enc);<br>
>>       NALUnitEBSP *nalunits[MAX_NAL_UNITS] = { 0, 0, 0, 0, 0 };<br>
>> +<br>
>> +#if defined(__GNUC__) && X265_ARCH_X86 && !defined(X86_64)<br>
>> +    int numEncoded = (int)x265_stack_align(encode_stack_frame, encoder,<br>
>> !pic_in, pic_in, pic_out, nalunits);<br>
>> +#else<br>
>>       int numEncoded = encoder->encode(!pic_in, pic_in, pic_out,<br>
>> nalunits);<br>
>> +#endif<br>
>>         if (pp_nal && numEncoded > 0)<br>
>>       {<br>
>> _______________________________________________<br>
>> x265-devel mailing list<br>
>> <a href="mailto:x265-devel@videolan.org">x265-devel@videolan.org</a><br>
>> <a href="https://mailman.videolan.org/listinfo/x265-devel" target="_blank">https://mailman.videolan.org/listinfo/x265-devel</a><br>
><br>
> I resolved build dependencies for 32 bit on my system but it seems like<br>
> cmake is primarily setup to just build for the host system. It's ignoring<br>
> "-f elf32" for CMAKE_ASM_YASM_FLAGS and generating "-f elf64...".  GCC and<br>
> ld are accepting -m32 but then ld fails to link yasm's 64bit object code<br>
> with GCC's 32bit code.<br>
><br>
> I tried tinkering with the cmake generated build.make file to get yasm to<br>
> create 32bit code but then yasm doesn't like 64bit register symbols.  How do<br>
> you get yasm to build 32bit object code from 64bit source code?<br>
><br>
> Am I wasting my time trying to build x265 for 32 bit linux from 64 bit linux<br>
> or is this something that is needed?<br>
<br>
</div></div>I'm really not familiar with cross-compiling to x86_32 on a 64bit<br>
linux, never been compelled to try it.  This would be much easier to<br>
verify on an x86_32 linux machine or on Windows with a Win32 MinGW<br>
setup (it doesn't matter if Windows is 64bit or not, since Windows<br>
ships with Win32 compatibility libraries).<br>
<br>
I used to have a 32bit linux setup until very recently when that computer died.<br>
<br>
Murugan should be able to test the latest patch today, so hopefully<br>
this can be pushed.<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
Steve Borho<br>
</font></span><div class="HOEnZb"><div class="h5">_______________________________________________<br>
x265-devel mailing list<br>
<a href="mailto:x265-devel@videolan.org">x265-devel@videolan.org</a><br>
<a href="https://mailman.videolan.org/listinfo/x265-devel" target="_blank">https://mailman.videolan.org/listinfo/x265-devel</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div dir="ltr">With Regards,<div><br></div><div>Murugan. V</div><div>+919659287478</div></div>
</div>