Ignore:
Timestamp:
Nov 21, 2017 9:25:11 AM (6 years ago)
Author:
riza
Message:

Close #2065: Update libyuv to fix linker error when building libyuv as dll on Visual Studio 2015.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/third_party/yuv/source/row_win.cc

    r5633 r5699  
    14111411    pavgb      xmm2, xmm4 
    14121412 
    1413     // step 2 - convert to U and V 
    1414     // from here down is very similar to Y code except 
    1415     // instead of 16 different pixels, its 8 pixels of U and 8 of V 
     1413        // step 2 - convert to U and V 
     1414        // from here down is very similar to Y code except 
     1415        // instead of 16 different pixels, its 8 pixels of U and 8 of V 
    14161416    movdqa     xmm1, xmm0 
    14171417    movdqa     xmm3, xmm2 
     
    14271427    paddb      xmm0, xmm5  // -> unsigned 
    14281428 
    1429     // step 3 - store 8 U and 8 V values 
     1429        // step 3 - store 8 U and 8 V values 
    14301430    movlps     qword ptr [edx], xmm0  // U 
    14311431    movhps     qword ptr [edx + edi], xmm0  // V 
     
    14831483    pavgb      xmm2, xmm4 
    14841484 
    1485     // step 2 - convert to U and V 
    1486     // from here down is very similar to Y code except 
    1487     // instead of 16 different pixels, its 8 pixels of U and 8 of V 
     1485        // step 2 - convert to U and V 
     1486        // from here down is very similar to Y code except 
     1487        // instead of 16 different pixels, its 8 pixels of U and 8 of V 
    14881488    movdqa     xmm1, xmm0 
    14891489    movdqa     xmm3, xmm2 
     
    15001500    packsswb   xmm0, xmm1 
    15011501 
    1502     // step 3 - store 8 U and 8 V values 
     1502        // step 3 - store 8 U and 8 V values 
    15031503    movlps     qword ptr [edx], xmm0  // U 
    15041504    movhps     qword ptr [edx + edi], xmm0  // V 
     
    15501550    vpavgb     ymm2, ymm2, ymm4  // mutated by vshufps 
    15511551 
    1552     // step 2 - convert to U and V 
    1553     // from here down is very similar to Y code except 
    1554     // instead of 32 different pixels, its 16 pixels of U and 16 of V 
     1552        // step 2 - convert to U and V 
     1553        // from here down is very similar to Y code except 
     1554        // instead of 32 different pixels, its 16 pixels of U and 16 of V 
    15551555    vpmaddubsw ymm1, ymm0, ymm7  // U 
    15561556    vpmaddubsw ymm3, ymm2, ymm7 
     
    15661566    vpaddb     ymm0, ymm0, ymm5  // -> unsigned 
    15671567 
    1568     // step 3 - store 16 U and 16 V values 
     1568        // step 3 - store 16 U and 16 V values 
    15691569    vextractf128 [edx], ymm0, 0  // U 
    15701570    vextractf128 [edx + edi], ymm0, 1  // V 
     
    16181618    vpavgb     ymm2, ymm2, ymm4  // mutated by vshufps 
    16191619 
    1620     // step 2 - convert to U and V 
    1621     // from here down is very similar to Y code except 
    1622     // instead of 32 different pixels, its 16 pixels of U and 16 of V 
     1620        // step 2 - convert to U and V 
     1621        // from here down is very similar to Y code except 
     1622        // instead of 32 different pixels, its 16 pixels of U and 16 of V 
    16231623    vpmaddubsw ymm1, ymm0, ymm7  // U 
    16241624    vpmaddubsw ymm3, ymm2, ymm7 
     
    16351635    vpshufb    ymm0, ymm0, ymmword ptr kShufARGBToUV_AVX  // for vshufps/vphaddw 
    16361636 
    1637     // step 3 - store 16 U and 16 V values 
     1637        // step 3 - store 16 U and 16 V values 
    16381638    vextractf128 [edx], ymm0, 0  // U 
    16391639    vextractf128 [edx + edi], ymm0, 1  // V 
     
    17511751    pavgb      xmm2, xmm4 
    17521752 
    1753     // step 2 - convert to U and V 
    1754     // from here down is very similar to Y code except 
    1755     // instead of 16 different pixels, its 8 pixels of U and 8 of V 
     1753        // step 2 - convert to U and V 
     1754        // from here down is very similar to Y code except 
     1755        // instead of 16 different pixels, its 8 pixels of U and 8 of V 
    17561756    movdqa     xmm1, xmm0 
    17571757    movdqa     xmm3, xmm2 
     
    17671767    paddb      xmm0, xmm5  // -> unsigned 
    17681768 
    1769     // step 3 - store 8 U and 8 V values 
     1769        // step 3 - store 8 U and 8 V values 
    17701770    movlps     qword ptr [edx], xmm0  // U 
    17711771    movhps     qword ptr [edx + edi], xmm0  // V 
     
    18231823    pavgb      xmm2, xmm4 
    18241824 
    1825     // step 2 - convert to U and V 
    1826     // from here down is very similar to Y code except 
    1827     // instead of 16 different pixels, its 8 pixels of U and 8 of V 
     1825        // step 2 - convert to U and V 
     1826        // from here down is very similar to Y code except 
     1827        // instead of 16 different pixels, its 8 pixels of U and 8 of V 
    18281828    movdqa     xmm1, xmm0 
    18291829    movdqa     xmm3, xmm2 
     
    18391839    paddb      xmm0, xmm5  // -> unsigned 
    18401840 
    1841     // step 3 - store 8 U and 8 V values 
     1841        // step 3 - store 8 U and 8 V values 
    18421842    movlps     qword ptr [edx], xmm0  // U 
    18431843    movhps     qword ptr [edx + edi], xmm0  // V 
     
    18951895    pavgb      xmm2, xmm4 
    18961896 
    1897     // step 2 - convert to U and V 
    1898     // from here down is very similar to Y code except 
    1899     // instead of 16 different pixels, its 8 pixels of U and 8 of V 
     1897        // step 2 - convert to U and V 
     1898        // from here down is very similar to Y code except 
     1899        // instead of 16 different pixels, its 8 pixels of U and 8 of V 
    19001900    movdqa     xmm1, xmm0 
    19011901    movdqa     xmm3, xmm2 
     
    19111911    paddb      xmm0, xmm5  // -> unsigned 
    19121912 
    1913     // step 3 - store 8 U and 8 V values 
     1913        // step 3 - store 8 U and 8 V values 
    19141914    movlps     qword ptr [edx], xmm0  // U 
    19151915    movhps     qword ptr [edx + edi], xmm0  // V 
     
    29282928    packuswb   xmm0, xmm0        // G 
    29292929 
    2930     // Step 2: Weave into ARGB 
     2930        // Step 2: Weave into ARGB 
    29312931    punpcklbw  xmm0, xmm0  // GG 
    29322932    movdqa     xmm1, xmm0 
     
    29762976    vpackuswb  ymm0, ymm0, ymm0        // G.  still mutated: 3120 
    29772977 
    2978     // TODO(fbarchard): Weave alpha with unpack. 
    2979     // Step 2: Weave into ARGB 
     2978        // TODO(fbarchard): Weave alpha with unpack. 
     2979        // Step 2: Weave into ARGB 
    29802980    vpunpcklbw ymm1, ymm0, ymm0  // GG - mutates 
    29812981    vpermq     ymm1, ymm1, 0xd8 
     
    40684068    sub        edi, esi 
    40694069 
    4070     // 8 pixel loop. 
     4070        // 8 pixel loop. 
    40714071  convertloop8: 
    40724072    movq       xmm0, qword ptr [esi]  // alpha 
     
    41244124    sub         edi, esi 
    41254125 
    4126     // 32 pixel loop. 
     4126        // 32 pixel loop. 
    41274127  convertloop32: 
    41284128    vmovdqu     ymm0, [esi]  // alpha 
     
    41844184    jl         convertloop4b  // less than 4 pixels? 
    41854185 
    4186     // 4 pixel loop. 
     4186        // 4 pixel loop. 
    41874187  convertloop4: 
    41884188    movdqu     xmm3, [eax]  // src argb 
     
    42134213    jl         convertloop1b 
    42144214 
    4215     // 1 pixel loop. 
     4215        // 1 pixel loop. 
    42164216  convertloop1: 
    42174217    movd       xmm3, [eax]  // src argb 
     
    52575257    packssdw   xmm5, xmm5  // 16 bit shorts 
    52585258 
    5259     // 4 pixel loop small blocks. 
     5259        // 4 pixel loop small blocks. 
    52605260  s4: 
    52615261        // top left 
     
    52995299    jmp        l4b 
    53005300 
    5301     // 4 pixel loop 
     5301            // 4 pixel loop 
    53025302  l4: 
    53035303        // top left 
     
    53515351    jl         l1b 
    53525352 
    5353     // 1 pixel loop 
     5353        // 1 pixel loop 
    53545354  l1: 
    53555355    movdqu     xmm0, [eax] 
     
    53935393    jne        l4b 
    53945394 
    5395     // 4 pixel loop 
     5395        // 4 pixel loop 
    53965396  l4: 
    53975397    movdqu     xmm2, [eax]  // 4 argb pixels 16 bytes. 
     
    54395439    jl         l1b 
    54405440 
    5441     // 1 pixel loop 
     5441        // 1 pixel loop 
    54425442  l1: 
    54435443    movd       xmm2, dword ptr [eax]  // 1 argb pixel 4 bytes. 
     
    54825482    jl         l4b 
    54835483 
    5484     // setup for 4 pixel loop 
     5484        // setup for 4 pixel loop 
    54855485    pshufd     xmm7, xmm7, 0x44  // dup dudv 
    54865486    pshufd     xmm5, xmm5, 0  // dup 4, stride 
     
    54945494    addps      xmm4, xmm4  // dudv *= 4 
    54955495 
    5496     // 4 pixel loop 
     5496        // 4 pixel loop 
    54975497  l4: 
    54985498    cvttps2dq  xmm0, xmm2  // x, y float to int first 2 
     
    55255525    jl         l1b 
    55265526 
    5527     // 1 pixel loop 
     5527        // 1 pixel loop 
    55285528  l1: 
    55295529    cvttps2dq  xmm0, xmm2  // x, y float to int 
     
    55995599    jmp        xloop99 
    56005600 
    5601     // Blend 50 / 50. 
     5601        // Blend 50 / 50. 
    56025602 xloop50: 
    56035603   vmovdqu    ymm0, [esi] 
     
    56095609   jmp        xloop99 
    56105610 
    5611     // Blend 100 / 0 - Copy row unchanged. 
     5611        // Blend 100 / 0 - Copy row unchanged. 
    56125612 xloop100: 
    56135613   rep movsb 
     
    56395639    mov        eax, [esp + 8 + 20]  // source_y_fraction (0..255) 
    56405640    sub        edi, esi 
    5641     // Dispatch to specialized filters if applicable. 
     5641        // Dispatch to specialized filters if applicable. 
    56425642    cmp        eax, 0 
    56435643    je         xloop100  // 0 /256.  Blend 100 / 0. 
     
    56795679    jmp        xloop99 
    56805680 
    5681     // Blend 50 / 50. 
     5681        // Blend 50 / 50. 
    56825682  xloop50: 
    56835683    movdqu     xmm0, [esi] 
     
    56905690    jmp        xloop99 
    56915691 
    5692     // Blend 100 / 0 - Copy row unchanged. 
     5692        // Blend 100 / 0 - Copy row unchanged. 
    56935693  xloop100: 
    56945694    movdqu     xmm0, [esi] 
     
    57855785    je         shuf_2103 
    57865786 
    5787     // TODO(fbarchard): Use one source pointer and 3 offsets. 
     5787        // TODO(fbarchard): Use one source pointer and 3 offsets. 
    57885788  shuf_any1: 
    57895789    movzx      ebx, byte ptr [esi] 
     
    59725972    pxor       xmm3, xmm3  // 0 constant for zero extending bytes to ints. 
    59735973 
    5974     // 2 pixel loop. 
     5974        // 2 pixel loop. 
    59755975 convertloop: 
    59765976        //    pmovzxbd  xmm0, dword ptr [eax]  // BGRA pixel 
     
    60736073    sub        edx, eax 
    60746074 
    6075     // 8 pixel loop. 
     6075        // 8 pixel loop. 
    60766076 convertloop: 
    60776077    movdqu      xmm2, xmmword ptr [eax]  // 8 shorts 
     
    61116111    sub        edx, eax 
    61126112 
    6113     // 16 pixel loop. 
     6113        // 16 pixel loop. 
    61146114 convertloop: 
    61156115    vmovdqu     ymm2, [eax]  // 16 shorts 
     
    61456145    sub        edx, eax 
    61466146 
    6147     // 16 pixel loop. 
     6147        // 16 pixel loop. 
    61486148 convertloop: 
    61496149    vpmovzxwd   ymm2, xmmword ptr [eax]  // 8 shorts -> 8 ints 
     
    62536253    pxor       xmm5, xmm5 
    62546254 
    6255     // 4 pixel loop. 
     6255        // 4 pixel loop. 
    62566256  convertloop: 
    62576257    movdqu     xmm0, xmmword ptr [eax]  // generate luma ptr 
Note: See TracChangeset for help on using the changeset viewer.