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/planar_functions.cc

    r5633 r5699  
    322322  } 
    323323#endif 
     324#if defined(HAS_SPLITUVROW_MSA) 
     325  if (TestCpuFlag(kCpuHasMSA)) { 
     326    SplitUVRow = SplitUVRow_Any_MSA; 
     327    if (IS_ALIGNED(width, 32)) { 
     328      SplitUVRow = SplitUVRow_MSA; 
     329    } 
     330  } 
     331#endif 
    324332 
    325333  for (y = 0; y < height; ++y) { 
     
    397405    src_v += src_stride_v; 
    398406    dst_uv += dst_stride_uv; 
     407  } 
     408} 
     409 
     410// Support function for NV12 etc RGB channels. 
     411// Width and height are plane sizes (typically half pixel width). 
     412LIBYUV_API 
     413void SplitRGBPlane(const uint8* src_rgb, 
     414                   int src_stride_rgb, 
     415                   uint8* dst_r, 
     416                   int dst_stride_r, 
     417                   uint8* dst_g, 
     418                   int dst_stride_g, 
     419                   uint8* dst_b, 
     420                   int dst_stride_b, 
     421                   int width, 
     422                   int height) { 
     423  int y; 
     424  void (*SplitRGBRow)(const uint8* src_rgb, uint8* dst_r, uint8* dst_g, 
     425                      uint8* dst_b, int width) = SplitRGBRow_C; 
     426  // Negative height means invert the image. 
     427  if (height < 0) { 
     428    height = -height; 
     429    dst_r = dst_r + (height - 1) * dst_stride_r; 
     430    dst_g = dst_g + (height - 1) * dst_stride_g; 
     431    dst_b = dst_b + (height - 1) * dst_stride_b; 
     432    dst_stride_r = -dst_stride_r; 
     433    dst_stride_g = -dst_stride_g; 
     434    dst_stride_b = -dst_stride_b; 
     435  } 
     436  // Coalesce rows. 
     437  if (src_stride_rgb == width * 3 && dst_stride_r == width && 
     438      dst_stride_g == width && dst_stride_b == width) { 
     439    width *= height; 
     440    height = 1; 
     441    src_stride_rgb = dst_stride_r = dst_stride_g = dst_stride_b = 0; 
     442  } 
     443#if defined(HAS_SPLITRGBROW_SSSE3) 
     444  if (TestCpuFlag(kCpuHasSSSE3)) { 
     445    SplitRGBRow = SplitRGBRow_Any_SSSE3; 
     446    if (IS_ALIGNED(width, 16)) { 
     447      SplitRGBRow = SplitRGBRow_SSSE3; 
     448    } 
     449  } 
     450#endif 
     451#if defined(HAS_SPLITRGBROW_NEON) 
     452  if (TestCpuFlag(kCpuHasNEON)) { 
     453    SplitRGBRow = SplitRGBRow_Any_NEON; 
     454    if (IS_ALIGNED(width, 16)) { 
     455      SplitRGBRow = SplitRGBRow_NEON; 
     456    } 
     457  } 
     458#endif 
     459 
     460  for (y = 0; y < height; ++y) { 
     461    // Copy a row of RGB. 
     462    SplitRGBRow(src_rgb, dst_r, dst_g, dst_b, width); 
     463    dst_r += dst_stride_r; 
     464    dst_g += dst_stride_g; 
     465    dst_b += dst_stride_b; 
     466    src_rgb += src_stride_rgb; 
     467  } 
     468} 
     469 
     470LIBYUV_API 
     471void MergeRGBPlane(const uint8* src_r, 
     472                   int src_stride_r, 
     473                   const uint8* src_g, 
     474                   int src_stride_g, 
     475                   const uint8* src_b, 
     476                   int src_stride_b, 
     477                   uint8* dst_rgb, 
     478                   int dst_stride_rgb, 
     479                   int width, 
     480                   int height) { 
     481  int y; 
     482  void (*MergeRGBRow)(const uint8* src_r, const uint8* src_g, 
     483                      const uint8* src_b, uint8* dst_rgb, int width) = 
     484      MergeRGBRow_C; 
     485  // Coalesce rows. 
     486  // Negative height means invert the image. 
     487  if (height < 0) { 
     488    height = -height; 
     489    dst_rgb = dst_rgb + (height - 1) * dst_stride_rgb; 
     490    dst_stride_rgb = -dst_stride_rgb; 
     491  } 
     492  // Coalesce rows. 
     493  if (src_stride_r == width && src_stride_g == width && src_stride_b == width && 
     494      dst_stride_rgb == width * 3) { 
     495    width *= height; 
     496    height = 1; 
     497    src_stride_r = src_stride_g = src_stride_b = dst_stride_rgb = 0; 
     498  } 
     499#if defined(HAS_MERGERGBROW_SSSE3) 
     500  if (TestCpuFlag(kCpuHasSSSE3)) { 
     501    MergeRGBRow = MergeRGBRow_Any_SSSE3; 
     502    if (IS_ALIGNED(width, 16)) { 
     503      MergeRGBRow = MergeRGBRow_SSSE3; 
     504    } 
     505  } 
     506#endif 
     507#if defined(HAS_MERGERGBROW_NEON) 
     508  if (TestCpuFlag(kCpuHasNEON)) { 
     509    MergeRGBRow = MergeRGBRow_Any_NEON; 
     510    if (IS_ALIGNED(width, 16)) { 
     511      MergeRGBRow = MergeRGBRow_NEON; 
     512    } 
     513  } 
     514#endif 
     515 
     516  for (y = 0; y < height; ++y) { 
     517    // Merge a row of U and V into a row of RGB. 
     518    MergeRGBRow(src_r, src_g, src_b, dst_rgb, width); 
     519    src_r += src_stride_r; 
     520    src_g += src_stride_g; 
     521    src_b += src_stride_b; 
     522    dst_rgb += dst_stride_rgb; 
    399523  } 
    400524} 
     
    845969  if (TestCpuFlag(kCpuHasNEON)) { 
    846970    ARGBBlendRow = ARGBBlendRow_NEON; 
     971  } 
     972#endif 
     973#if defined(HAS_ARGBBLENDROW_MSA) 
     974  if (TestCpuFlag(kCpuHasMSA)) { 
     975    ARGBBlendRow = ARGBBlendRow_MSA; 
    847976  } 
    848977#endif 
     
    15751704  } 
    15761705#endif 
     1706#if defined(HAS_SETROW_MSA) 
     1707  if (TestCpuFlag(kCpuHasMSA) && IS_ALIGNED(width, 16)) { 
     1708    SetRow = SetRow_MSA; 
     1709  } 
     1710#endif 
    15771711 
    15781712  // Set plane 
     
    19752109  } 
    19762110#endif 
     2111#if defined(HAS_ARGBCOLORMATRIXROW_MSA) 
     2112  if (TestCpuFlag(kCpuHasMSA) && IS_ALIGNED(width, 8)) { 
     2113    ARGBColorMatrixRow = ARGBColorMatrixRow_MSA; 
     2114  } 
     2115#endif 
    19772116  for (y = 0; y < height; ++y) { 
    19782117    ARGBColorMatrixRow(src_argb, dst_argb, matrix_argb, width); 
     
    21332272  if (TestCpuFlag(kCpuHasNEON) && IS_ALIGNED(width, 8)) { 
    21342273    ARGBQuantizeRow = ARGBQuantizeRow_NEON; 
     2274  } 
     2275#endif 
     2276#if defined(HAS_ARGBQUANTIZEROW_MSA) 
     2277  if (TestCpuFlag(kCpuHasMSA) && IS_ALIGNED(width, 8)) { 
     2278    ARGBQuantizeRow = ARGBQuantizeRow_MSA; 
    21352279  } 
    21362280#endif 
     
    26202764  } 
    26212765#endif 
     2766#if defined(HAS_SOBELYROW_MSA) 
     2767  if (TestCpuFlag(kCpuHasMSA)) { 
     2768    SobelYRow = SobelYRow_MSA; 
     2769  } 
     2770#endif 
    26222771#if defined(HAS_SOBELXROW_SSE2) 
    26232772  if (TestCpuFlag(kCpuHasSSE2)) { 
     
    26282777  if (TestCpuFlag(kCpuHasNEON)) { 
    26292778    SobelXRow = SobelXRow_NEON; 
     2779  } 
     2780#endif 
     2781#if defined(HAS_SOBELXROW_MSA) 
     2782  if (TestCpuFlag(kCpuHasMSA)) { 
     2783    SobelXRow = SobelXRow_MSA; 
    26302784  } 
    26312785#endif 
     
    29043058  } 
    29053059#endif 
     3060#if defined(HAS_HALFFLOATROW_MSA) 
     3061  if (TestCpuFlag(kCpuHasMSA)) { 
     3062    HalfFloatRow = HalfFloatRow_Any_MSA; 
     3063    if (IS_ALIGNED(width, 32)) { 
     3064      HalfFloatRow = HalfFloatRow_MSA; 
     3065    } 
     3066  } 
     3067#endif 
    29063068 
    29073069  for (y = 0; y < height; ++y) { 
     
    30473209    ARGBExtractAlphaRow = IS_ALIGNED(width, 16) ? ARGBExtractAlphaRow_NEON 
    30483210                                                : ARGBExtractAlphaRow_Any_NEON; 
     3211  } 
     3212#endif 
     3213#if defined(HAS_ARGBEXTRACTALPHAROW_MSA) 
     3214  if (TestCpuFlag(kCpuHasMSA)) { 
     3215    ARGBExtractAlphaRow = IS_ALIGNED(width, 16) ? ARGBExtractAlphaRow_MSA 
     3216                                                : ARGBExtractAlphaRow_Any_MSA; 
    30493217  } 
    30503218#endif 
     
    31583326    if (IS_ALIGNED(width, 16)) { 
    31593327      SplitUVRow = SplitUVRow_NEON; 
     3328    } 
     3329  } 
     3330#endif 
     3331#if defined(HAS_SPLITUVROW_MSA) 
     3332  if (TestCpuFlag(kCpuHasMSA)) { 
     3333    SplitUVRow = SplitUVRow_Any_MSA; 
     3334    if (IS_ALIGNED(width, 32)) { 
     3335      SplitUVRow = SplitUVRow_MSA; 
    31603336    } 
    31613337  } 
     
    32693445  } 
    32703446#endif 
     3447#if defined(HAS_SPLITUVROW_MSA) 
     3448  if (TestCpuFlag(kCpuHasMSA)) { 
     3449    SplitUVRow = SplitUVRow_Any_MSA; 
     3450    if (IS_ALIGNED(width, 32)) { 
     3451      SplitUVRow = SplitUVRow_MSA; 
     3452    } 
     3453  } 
     3454#endif 
    32713455#if defined(HAS_INTERPOLATEROW_SSSE3) 
    32723456  if (TestCpuFlag(kCpuHasSSSE3)) { 
Note: See TracChangeset for help on using the changeset viewer.