summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2013-01-07 01:35:12 +0100
committerMichael Niedermayer <michaelni@gmx.at>2013-01-07 01:35:18 +0100
commitea93ccf07991dbb0d90b913c0bf49f680fdc0ffc (patch)
treef480704103df76937079555a2717f8c0c00bc1aa
parent55d8cac254ee2aeba051810ca92bb868fcbd8468 (diff)
parent5b4dfbffc258f90a7d2540d21209ac23afcf7cd0 (diff)
downloadffmpeg-ea93ccf07991dbb0d90b913c0bf49f680fdc0ffc.tar.gz
Merge commit '5b4dfbffc258f90a7d2540d21209ac23afcf7cd0'
* commit '5b4dfbffc258f90a7d2540d21209ac23afcf7cd0': x86: ABS1: port to cpuflags v210x: cosmetics, reformat Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--libavcodec/v210x.c112
-rw-r--r--libavcodec/x86/dsputilenc.asm2
-rw-r--r--libavutil/x86/x86util.asm21
3 files changed, 65 insertions, 70 deletions
diff --git a/libavcodec/v210x.c b/libavcodec/v210x.c
index aa0da7f756..cb9fc6f27a 100644
--- a/libavcodec/v210x.c
+++ b/libavcodec/v210x.c
@@ -26,12 +26,12 @@
static av_cold int decode_init(AVCodecContext *avctx)
{
- if(avctx->width & 1){
+ if (avctx->width & 1) {
av_log(avctx, AV_LOG_ERROR, "v210x needs even width\n");
return AVERROR(EINVAL);
}
- avctx->pix_fmt = AV_PIX_FMT_YUV422P16;
- avctx->bits_per_raw_sample= 10;
+ avctx->pix_fmt = AV_PIX_FMT_YUV422P16;
+ avctx->bits_per_raw_sample = 10;
avctx->coded_frame= avcodec_alloc_frame();
if (!avctx->coded_frame)
@@ -43,82 +43,82 @@ static av_cold int decode_init(AVCodecContext *avctx)
static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
AVPacket *avpkt)
{
- int y=0;
- int width= avctx->width;
- AVFrame *pic= avctx->coded_frame;
- const uint32_t *src= (const uint32_t *)avpkt->data;
+ const uint32_t *src = (const uint32_t *)avpkt->data;
+ AVFrame *pic = avctx->coded_frame;
+ int width = avctx->width;
+ int y = 0;
uint16_t *ydst, *udst, *vdst, *yend;
int ret;
- if(pic->data[0])
+ if (pic->data[0])
avctx->release_buffer(avctx, pic);
- if(avpkt->size < avctx->width * avctx->height * 8 / 3){
+ if (avpkt->size < avctx->width * avctx->height * 8 / 3) {
av_log(avctx, AV_LOG_ERROR, "Packet too small\n");
return AVERROR_INVALIDDATA;
}
- if(avpkt->size > avctx->width * avctx->height * 8 / 3){
+ if (avpkt->size > avctx->width * avctx->height * 8 / 3) {
av_log_ask_for_sample(avctx, "Probably padded data\n");
}
- pic->reference= 0;
+ pic->reference = 0;
if ((ret = ff_get_buffer(avctx, pic)) < 0)
return ret;
- ydst= (uint16_t *)pic->data[0];
- udst= (uint16_t *)pic->data[1];
- vdst= (uint16_t *)pic->data[2];
- yend= ydst + width;
- pic->pict_type= AV_PICTURE_TYPE_I;
- pic->key_frame= 1;
-
- for(;;){
- uint32_t v= av_be2ne32(*src++);
- *udst++= (v>>16) & 0xFFC0;
- *ydst++= (v>>6 ) & 0xFFC0;
- *vdst++= (v<<4 ) & 0xFFC0;
-
- v= av_be2ne32(*src++);
- *ydst++= (v>>16) & 0xFFC0;
-
- if(ydst >= yend){
- ydst+= pic->linesize[0]/2 - width;
- udst+= pic->linesize[1]/2 - width/2;
- vdst+= pic->linesize[2]/2 - width/2;
- yend= ydst + width;
- if(++y >= avctx->height)
+ ydst = (uint16_t *)pic->data[0];
+ udst = (uint16_t *)pic->data[1];
+ vdst = (uint16_t *)pic->data[2];
+ yend = ydst + width;
+ pic->pict_type = AV_PICTURE_TYPE_I;
+ pic->key_frame = 1;
+
+ for (;;) {
+ uint32_t v = av_be2ne32(*src++);
+ *udst++ = (v >> 16) & 0xFFC0;
+ *ydst++ = (v >> 6 ) & 0xFFC0;
+ *vdst++ = (v << 4 ) & 0xFFC0;
+
+ v = av_be2ne32(*src++);
+ *ydst++ = (v >> 16) & 0xFFC0;
+
+ if (ydst >= yend) {
+ ydst += pic->linesize[0] / 2 - width;
+ udst += pic->linesize[1] / 2 - width / 2;
+ vdst += pic->linesize[2] / 2 - width / 2;
+ yend = ydst + width;
+ if (++y >= avctx->height)
break;
}
- *udst++= (v>>6 ) & 0xFFC0;
- *ydst++= (v<<4 ) & 0xFFC0;
+ *udst++ = (v >> 6 ) & 0xFFC0;
+ *ydst++ = (v << 4 ) & 0xFFC0;
- v= av_be2ne32(*src++);
- *vdst++= (v>>16) & 0xFFC0;
- *ydst++= (v>>6 ) & 0xFFC0;
+ v = av_be2ne32(*src++);
+ *vdst++ = (v >> 16) & 0xFFC0;
+ *ydst++ = (v >> 6 ) & 0xFFC0;
- if(ydst >= yend){
- ydst+= pic->linesize[0]/2 - width;
- udst+= pic->linesize[1]/2 - width/2;
- vdst+= pic->linesize[2]/2 - width/2;
- yend= ydst + width;
- if(++y >= avctx->height)
+ if (ydst >= yend) {
+ ydst += pic->linesize[0] / 2 - width;
+ udst += pic->linesize[1] / 2 - width / 2;
+ vdst += pic->linesize[2] / 2 - width / 2;
+ yend = ydst + width;
+ if (++y >= avctx->height)
break;
}
- *udst++= (v<<4 ) & 0xFFC0;
-
- v= av_be2ne32(*src++);
- *ydst++= (v>>16) & 0xFFC0;
- *vdst++= (v>>6 ) & 0xFFC0;
- *ydst++= (v<<4 ) & 0xFFC0;
- if(ydst >= yend){
- ydst+= pic->linesize[0]/2 - width;
- udst+= pic->linesize[1]/2 - width/2;
- vdst+= pic->linesize[2]/2 - width/2;
- yend= ydst + width;
- if(++y >= avctx->height)
+ *udst++ = (v << 4 ) & 0xFFC0;
+
+ v = av_be2ne32(*src++);
+ *ydst++ = (v >> 16) & 0xFFC0;
+ *vdst++ = (v >> 6 ) & 0xFFC0;
+ *ydst++ = (v << 4 ) & 0xFFC0;
+ if (ydst >= yend) {
+ ydst += pic->linesize[0] / 2 - width;
+ udst += pic->linesize[1] / 2 - width / 2;
+ vdst += pic->linesize[2] / 2 - width / 2;
+ yend = ydst + width;
+ if (++y >= avctx->height)
break;
}
}
diff --git a/libavcodec/x86/dsputilenc.asm b/libavcodec/x86/dsputilenc.asm
index 3e7990d0a8..5b06d3ba1a 100644
--- a/libavcodec/x86/dsputilenc.asm
+++ b/libavcodec/x86/dsputilenc.asm
@@ -257,11 +257,9 @@ hadamard8_16_wrapper 0, 14
%endmacro
INIT_MMX mmx
-%define ABS1 ABS1_MMX
HADAMARD8_DIFF
INIT_MMX mmxext
-%define ABS1 ABS1_MMXEXT
HADAMARD8_DIFF
INIT_XMM sse2
diff --git a/libavutil/x86/x86util.asm b/libavutil/x86/x86util.asm
index 00fa7b1827..2cc8470d21 100644
--- a/libavutil/x86/x86util.asm
+++ b/libavutil/x86/x86util.asm
@@ -172,11 +172,19 @@
psignw %1, %2
%endmacro
-%macro ABS1_MMX 2 ; a, tmp
+%macro ABS1 2
+%if cpuflag(ssse3)
+ pabsw %1, %1
+%elif cpuflag(mmxext) ; a, tmp
+ pxor %2, %2
+ psubw %2, %1
+ pmaxsw %1, %2
+%else ; a, tmp
pxor %2, %2
pcmpgtw %2, %1
pxor %1, %2
psubw %1, %2
+%endif
%endmacro
%macro ABS2_MMX 4 ; a, b, tmp0, tmp1
@@ -190,12 +198,6 @@
psubw %2, %4
%endmacro
-%macro ABS1_MMXEXT 2 ; a, tmp
- pxor %2, %2
- psubw %2, %1
- pmaxsw %1, %2
-%endmacro
-
%macro ABS2_MMXEXT 4 ; a, b, tmp0, tmp1
pxor %3, %3
pxor %4, %4
@@ -205,10 +207,6 @@
pmaxsw %2, %4
%endmacro
-%macro ABS1_SSSE3 2
- pabsw %1, %1
-%endmacro
-
%macro ABS2_SSSE3 4
pabsw %1, %1
pabsw %2, %2
@@ -254,7 +252,6 @@
ABS2 %3, %4, %5, %6
%endmacro
-%define ABS1 ABS1_MMX
%define ABS2 ABS2_MMX
%define ABSB ABSB_MMX
%define ABSB2 ABSB2_MMX