зеркало из https://github.com/mozilla/gecko-dev.git
216 строки
6.3 KiB
Diff
216 строки
6.3 KiB
Diff
diff --git a/media/libvpx/vp8/common/loopfilter_filters.c b/media/libvpx/vp8/common/loopfilter_filters.c
|
|
--- a/media/libvpx/vp8/common/loopfilter_filters.c
|
|
+++ b/media/libvpx/vp8/common/loopfilter_filters.c
|
|
@@ -8,16 +8,19 @@
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
|
|
#include <stdlib.h>
|
|
#include "loopfilter.h"
|
|
#include "onyxc_int.h"
|
|
|
|
+#ifdef __SUNPRO_C
|
|
+#define __inline static inline
|
|
+#endif
|
|
|
|
#define NEW_LOOPFILTER_MASK
|
|
|
|
typedef unsigned char uc;
|
|
|
|
static __inline signed char vp8_signed_char_clamp(int t)
|
|
{
|
|
t = (t < -128 ? -128 : t);
|
|
diff --git a/media/libvpx/vpx/internal/vpx_codec_internal.h b/media/libvpx/vpx/internal/vpx_codec_internal.h
|
|
--- a/media/libvpx/vpx/internal/vpx_codec_internal.h
|
|
+++ b/media/libvpx/vpx/internal/vpx_codec_internal.h
|
|
@@ -316,17 +316,17 @@ struct vpx_codec_iface
|
|
|
|
/*!\brief Callback function pointer / user data pair storage */
|
|
typedef struct vpx_codec_priv_cb_pair
|
|
{
|
|
union
|
|
{
|
|
vpx_codec_put_frame_cb_fn_t put_frame;
|
|
vpx_codec_put_slice_cb_fn_t put_slice;
|
|
- };
|
|
+ } fn;
|
|
void *user_priv;
|
|
} vpx_codec_priv_cb_pair_t;
|
|
|
|
|
|
/*!\brief Instance private storage
|
|
*
|
|
* This structure is allocated by the algorithm's init function. It can be
|
|
* extended in one of two ways. First, a second, algorithm specific structure
|
|
diff --git a/media/libvpx/vpx/src/vpx_decoder.c b/media/libvpx/vpx/src/vpx_decoder.c
|
|
--- a/media/libvpx/vpx/src/vpx_decoder.c
|
|
+++ b/media/libvpx/vpx/src/vpx_decoder.c
|
|
@@ -165,17 +165,17 @@ vpx_codec_err_t vpx_codec_register_put_f
|
|
|
|
if (!ctx || !cb)
|
|
res = VPX_CODEC_INVALID_PARAM;
|
|
else if (!ctx->iface || !ctx->priv
|
|
|| !(ctx->iface->caps & VPX_CODEC_CAP_PUT_FRAME))
|
|
res = VPX_CODEC_ERROR;
|
|
else
|
|
{
|
|
- ctx->priv->dec.put_frame_cb.put_frame = cb;
|
|
+ ctx->priv->dec.put_frame_cb.fn.put_frame = cb;
|
|
ctx->priv->dec.put_frame_cb.user_priv = user_priv;
|
|
res = VPX_CODEC_OK;
|
|
}
|
|
|
|
return SAVE_STATUS(ctx, res);
|
|
}
|
|
|
|
|
|
@@ -187,17 +187,17 @@ vpx_codec_err_t vpx_codec_register_put_s
|
|
|
|
if (!ctx || !cb)
|
|
res = VPX_CODEC_INVALID_PARAM;
|
|
else if (!ctx->iface || !ctx->priv
|
|
|| !(ctx->iface->caps & VPX_CODEC_CAP_PUT_FRAME))
|
|
res = VPX_CODEC_ERROR;
|
|
else
|
|
{
|
|
- ctx->priv->dec.put_slice_cb.put_slice = cb;
|
|
+ ctx->priv->dec.put_slice_cb.fn.put_slice = cb;
|
|
ctx->priv->dec.put_slice_cb.user_priv = user_priv;
|
|
res = VPX_CODEC_OK;
|
|
}
|
|
|
|
return SAVE_STATUS(ctx, res);
|
|
}
|
|
|
|
|
|
diff --git a/media/libvpx/vpx_ports/mem.h b/media/libvpx/vpx_ports/mem.h
|
|
--- a/media/libvpx/vpx_ports/mem.h
|
|
+++ b/media/libvpx/vpx_ports/mem.h
|
|
@@ -9,17 +9,17 @@
|
|
*/
|
|
|
|
|
|
#ifndef VPX_PORTS_MEM_H
|
|
#define VPX_PORTS_MEM_H
|
|
#include "vpx_config.h"
|
|
#include "vpx/vpx_integer.h"
|
|
|
|
-#if defined(__GNUC__) && __GNUC__
|
|
+#if (defined(__GNUC__) && __GNUC__) || defined(__SUNPRO_C)
|
|
#define DECLARE_ALIGNED(n,typ,val) typ val __attribute__ ((aligned (n)))
|
|
#elif defined(_MSC_VER)
|
|
#define DECLARE_ALIGNED(n,typ,val) __declspec(align(n)) typ val
|
|
#else
|
|
#warning No alignment directives known for this compiler.
|
|
#define DECLARE_ALIGNED(n,typ,val) typ val
|
|
#endif
|
|
#endif
|
|
diff --git a/media/libvpx/vpx_ports/x86.h b/media/libvpx/vpx_ports/x86.h
|
|
--- a/media/libvpx/vpx_ports/x86.h
|
|
+++ b/media/libvpx/vpx_ports/x86.h
|
|
@@ -26,16 +26,36 @@
|
|
__asm__ __volatile__ (\
|
|
"pushl %%ebx \n\t" \
|
|
"cpuid \n\t" \
|
|
"movl %%ebx, %1 \n\t" \
|
|
"popl %%ebx \n\t" \
|
|
: "=a" (ax), "=r" (bx), "=c" (cx), "=d" (dx) \
|
|
: "a" (func));
|
|
#endif
|
|
+#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
|
|
+#if ARCH_X86_64
|
|
+#define cpuid(func,ax,bx,cx,dx)\
|
|
+ asm volatile (\
|
|
+ "xchg %rsi, %rbx \n\t" \
|
|
+ "cpuid \n\t" \
|
|
+ "movl %ebx, %edi \n\t" \
|
|
+ "xchg %rsi, %rbx \n\t" \
|
|
+ : "=a" (ax), "=D" (bx), "=c" (cx), "=d" (dx) \
|
|
+ : "a" (func));
|
|
+#else
|
|
+#define cpuid(func,ax,bx,cx,dx)\
|
|
+ asm volatile (\
|
|
+ "pushl %ebx \n\t" \
|
|
+ "cpuid \n\t" \
|
|
+ "movl %ebx, %edi \n\t" \
|
|
+ "popl %ebx \n\t" \
|
|
+ : "=a" (ax), "=D" (bx), "=c" (cx), "=d" (dx) \
|
|
+ : "a" (func));
|
|
+#endif
|
|
#else
|
|
#if ARCH_X86_64
|
|
void __cpuid(int CPUInfo[4], int info_type);
|
|
#pragma intrinsic(__cpuid)
|
|
#define cpuid(func,a,b,c,d) do{\
|
|
int regs[4];\
|
|
__cpuid(regs,func); a=regs[0]; b=regs[1]; c=regs[2]; d=regs[3];\
|
|
} while(0)
|
|
@@ -108,29 +128,36 @@ unsigned __int64 __rdtsc(void);
|
|
#endif
|
|
static unsigned int
|
|
x86_readtsc(void)
|
|
{
|
|
#if defined(__GNUC__) && __GNUC__
|
|
unsigned int tsc;
|
|
__asm__ __volatile__("rdtsc\n\t":"=a"(tsc):);
|
|
return tsc;
|
|
+#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
|
|
+ unsigned int tsc;
|
|
+ asm volatile("rdtsc\n\t":"=a"(tsc):);
|
|
+ return tsc;
|
|
#else
|
|
#if ARCH_X86_64
|
|
return __rdtsc();
|
|
#else
|
|
__asm rdtsc;
|
|
#endif
|
|
#endif
|
|
}
|
|
|
|
|
|
#if defined(__GNUC__) && __GNUC__
|
|
#define x86_pause_hint()\
|
|
__asm__ __volatile__ ("pause \n\t")
|
|
+#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
|
|
+#define x86_pause_hint()\
|
|
+ asm volatile ("pause \n\t")
|
|
#else
|
|
#if ARCH_X86_64
|
|
/* No pause intrinsic for windows x64 */
|
|
#define x86_pause_hint()
|
|
#else
|
|
#define x86_pause_hint()\
|
|
__asm pause
|
|
#endif
|
|
@@ -144,16 +171,29 @@ x87_set_control_word(unsigned short mode
|
|
}
|
|
static unsigned short
|
|
x87_get_control_word(void)
|
|
{
|
|
unsigned short mode;
|
|
__asm__ __volatile__("fstcw %0\n\t":"=m"(*&mode):);
|
|
return mode;
|
|
}
|
|
+#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
|
|
+static void
|
|
+x87_set_control_word(unsigned short mode)
|
|
+{
|
|
+ asm volatile("fldcw %0" : : "m"(*&mode));
|
|
+}
|
|
+static unsigned short
|
|
+x87_get_control_word(void)
|
|
+{
|
|
+ unsigned short mode;
|
|
+ asm volatile("fstcw %0\n\t":"=m"(*&mode):);
|
|
+ return mode;
|
|
+}
|
|
#elif ARCH_X86_64
|
|
/* No fldcw intrinsics on Windows x64, punt to external asm */
|
|
extern void vpx_winx64_fldcw(unsigned short mode);
|
|
extern unsigned short vpx_winx64_fstcw(void);
|
|
#define x87_set_control_word vpx_winx64_fldcw
|
|
#define x87_get_control_word vpx_winx64_fstcw
|
|
#else
|
|
static void
|