Commit fc530ca3 authored by jmuizelaar@mozilla.com's avatar jmuizelaar@mozilla.com
Browse files

Bug 1452375 - ssse3-scaler: handle init failure r=sotaro

parent f9ae42cb
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@
#include <tmmintrin.h>
#include <stdint.h>
#include <assert.h>
#include "ssse3-scaler.h"

typedef int32_t                 pixman_fixed_16_16_t;
typedef pixman_fixed_16_16_t    pixman_fixed_t;
@@ -505,7 +506,7 @@ fail:
/* scale the src from src_width/height to dest_width/height drawn
 * into the rectangle x,y width,height
 * src_stride and dst_stride are 4 byte units */
void ssse3_scale_data(uint32_t *src, int src_width, int src_height, int src_stride,
bool ssse3_scale_data(uint32_t *src, int src_width, int src_height, int src_stride,
                      uint32_t *dest, int dest_width, int dest_height,
                      int dest_stride,
                      int x, int y,
@@ -551,6 +552,10 @@ void ssse3_scale_data(uint32_t *src, int src_width, int src_height, int src_stri
    iter.data = NULL;

    ssse3_bilinear_cover_iter_init(&iter);

    if (!iter.fini)
      return false;

    if (iter.data) {
        for (int iy = 0; iy < height; iy++) {
            ssse3_fetch_bilinear_cover(&iter, NULL);
@@ -558,4 +563,5 @@ void ssse3_scale_data(uint32_t *src, int src_width, int src_height, int src_stri
        }
        ssse3_bilinear_cover_iter_fini(&iter);
    }
    return true;
}
+3 −1
Original line number Diff line number Diff line
@@ -7,10 +7,12 @@
#ifndef MOZILLA_GFX_2D_SSSE3_SCALER_H_
#define MOZILLA_GFX_2D_SSSE3_SCALER_H_

#include <stdbool.h>

#ifdef __cplusplus
extern "C" {
#endif
void ssse3_scale_data(uint32_t *src, int src_width, int src_height,
bool ssse3_scale_data(uint32_t *src, int src_width, int src_height,
                int src_stride,
                uint32_t *dest, int dest_width, int dest_height,
                int dest_rowstride,
+7 −7
Original line number Diff line number Diff line
@@ -557,7 +557,7 @@ AttemptVideoScale(TextureSourceBasic* aSource, const SourceSurface* aSourceMask,
    RefPtr<DataSourceSurface> srcSource = aSource->GetSurface(aDest)->GetDataSurface();
    DataSourceSurface::ScopedMap mapSrc(srcSource, DataSourceSurface::READ);

    ssse3_scale_data((uint32_t*)mapSrc.GetData(), srcSource->GetSize().width, srcSource->GetSize().height,
    bool success = ssse3_scale_data((uint32_t*)mapSrc.GetData(), srcSource->GetSize().width, srcSource->GetSize().height,
                                    mapSrc.GetStride()/4,
                                    ((uint32_t*)dstData) + fillRect.X() + (dstStride / 4) * fillRect.Y(), dstRect.Width(), dstRect.Height(),
                                    dstStride / 4,
@@ -565,7 +565,7 @@ AttemptVideoScale(TextureSourceBasic* aSource, const SourceSurface* aSourceMask,
                                    fillRect.Width(), fillRect.Height());

    aDest->ReleaseBits(dstData);
    return true;
    return success;
  } else
#endif // MOZILLA_SSE_HAVE_CPUID_DETECTION
    return false;