mirror of https://github.com/FFmpeg/FFmpeg.git
Compare commits
9 Commits
a677b38298
...
8e90f150eb
| Author | SHA1 | Date |
|---|---|---|
|
|
8e90f150eb | |
|
|
63685709b9 | |
|
|
2786e5a9ad | |
|
|
182b9c7a4a | |
|
|
abf819cff6 | |
|
|
1e0cd4b650 | |
|
|
a2914a1ec3 | |
|
|
c5e94a564c | |
|
|
2be1b2ea96 |
|
|
@ -36,6 +36,7 @@
|
||||||
/ffprobe
|
/ffprobe
|
||||||
/config.asm
|
/config.asm
|
||||||
/config.h
|
/config.h
|
||||||
|
/config_components.asm
|
||||||
/config_components.h
|
/config_components.h
|
||||||
/coverage.info
|
/coverage.info
|
||||||
/lcov/
|
/lcov/
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,6 @@ OBJS = ac3_parser.o \
|
||||||
get_buffer.o \
|
get_buffer.o \
|
||||||
imgconvert.o \
|
imgconvert.o \
|
||||||
jni.o \
|
jni.o \
|
||||||
lcevcdec.o \
|
|
||||||
mathtables.o \
|
mathtables.o \
|
||||||
mediacodec.o \
|
mediacodec.o \
|
||||||
mpeg12framerate.o \
|
mpeg12framerate.o \
|
||||||
|
|
@ -130,6 +129,7 @@ OBJS-$(CONFIG_IVIDSP) += ivi_dsp.o
|
||||||
OBJS-$(CONFIG_JNI) += ffjni.o jni.o
|
OBJS-$(CONFIG_JNI) += ffjni.o jni.o
|
||||||
OBJS-$(CONFIG_JPEGTABLES) += jpegtables.o
|
OBJS-$(CONFIG_JPEGTABLES) += jpegtables.o
|
||||||
OBJS-$(CONFIG_LCMS2) += fflcms2.o
|
OBJS-$(CONFIG_LCMS2) += fflcms2.o
|
||||||
|
OBJS-$(CONFIG_LIBLCEVC_DEC) += lcevcdec.o
|
||||||
OBJS-$(CONFIG_LLAUDDSP) += lossless_audiodsp.o
|
OBJS-$(CONFIG_LLAUDDSP) += lossless_audiodsp.o
|
||||||
OBJS-$(CONFIG_LLVIDDSP) += lossless_videodsp.o
|
OBJS-$(CONFIG_LLVIDDSP) += lossless_videodsp.o
|
||||||
OBJS-$(CONFIG_LLVIDENCDSP) += lossless_videoencdsp.o
|
OBJS-$(CONFIG_LLVIDENCDSP) += lossless_videoencdsp.o
|
||||||
|
|
|
||||||
|
|
@ -94,10 +94,14 @@ typedef struct DecodeContext {
|
||||||
*/
|
*/
|
||||||
uint64_t side_data_pref_mask;
|
uint64_t side_data_pref_mask;
|
||||||
|
|
||||||
FFLCEVCContext *lcevc;
|
#if CONFIG_LIBLCEVC_DEC
|
||||||
int lcevc_frame;
|
struct {
|
||||||
int width;
|
FFLCEVCContext *ctx;
|
||||||
int height;
|
int frame;
|
||||||
|
int width;
|
||||||
|
int height;
|
||||||
|
} lcevc;
|
||||||
|
#endif
|
||||||
} DecodeContext;
|
} DecodeContext;
|
||||||
|
|
||||||
static DecodeContext *decode_ctx(AVCodecInternal *avci)
|
static DecodeContext *decode_ctx(AVCodecInternal *avci)
|
||||||
|
|
@ -1658,26 +1662,29 @@ int ff_attach_decode_data(AVFrame *frame)
|
||||||
|
|
||||||
static void update_frame_props(AVCodecContext *avctx, AVFrame *frame)
|
static void update_frame_props(AVCodecContext *avctx, AVFrame *frame)
|
||||||
{
|
{
|
||||||
|
#if CONFIG_LIBLCEVC_DEC
|
||||||
AVCodecInternal *avci = avctx->internal;
|
AVCodecInternal *avci = avctx->internal;
|
||||||
DecodeContext *dc = decode_ctx(avci);
|
DecodeContext *dc = decode_ctx(avci);
|
||||||
|
|
||||||
dc->lcevc_frame = dc->lcevc && avctx->codec_type == AVMEDIA_TYPE_VIDEO &&
|
dc->lcevc.frame = dc->lcevc.ctx && avctx->codec_type == AVMEDIA_TYPE_VIDEO &&
|
||||||
av_frame_get_side_data(frame, AV_FRAME_DATA_LCEVC);
|
av_frame_get_side_data(frame, AV_FRAME_DATA_LCEVC);
|
||||||
|
|
||||||
if (dc->lcevc_frame) {
|
if (dc->lcevc.frame) {
|
||||||
dc->width = frame->width;
|
dc->lcevc.width = frame->width;
|
||||||
dc->height = frame->height;
|
dc->lcevc.height = frame->height;
|
||||||
frame->width = frame->width * 2 / FFMAX(frame->sample_aspect_ratio.den, 1);
|
frame->width = frame->width * 2 / FFMAX(frame->sample_aspect_ratio.den, 1);
|
||||||
frame->height = frame->height * 2 / FFMAX(frame->sample_aspect_ratio.num, 1);
|
frame->height = frame->height * 2 / FFMAX(frame->sample_aspect_ratio.num, 1);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static int attach_post_process_data(AVCodecContext *avctx, AVFrame *frame)
|
static int attach_post_process_data(AVCodecContext *avctx, AVFrame *frame)
|
||||||
{
|
{
|
||||||
|
#if CONFIG_LIBLCEVC_DEC
|
||||||
AVCodecInternal *avci = avctx->internal;
|
AVCodecInternal *avci = avctx->internal;
|
||||||
DecodeContext *dc = decode_ctx(avci);
|
DecodeContext *dc = decode_ctx(avci);
|
||||||
|
|
||||||
if (dc->lcevc_frame) {
|
if (dc->lcevc.frame) {
|
||||||
FrameDecodeData *fdd = frame->private_ref;
|
FrameDecodeData *fdd = frame->private_ref;
|
||||||
FFLCEVCFrame *frame_ctx;
|
FFLCEVCFrame *frame_ctx;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
@ -1692,13 +1699,13 @@ static int attach_post_process_data(AVCodecContext *avctx, AVFrame *frame)
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
frame_ctx->lcevc = av_refstruct_ref(dc->lcevc);
|
frame_ctx->lcevc = av_refstruct_ref(dc->lcevc.ctx);
|
||||||
frame_ctx->frame->width = frame->width;
|
frame_ctx->frame->width = frame->width;
|
||||||
frame_ctx->frame->height = frame->height;
|
frame_ctx->frame->height = frame->height;
|
||||||
frame_ctx->frame->format = frame->format;
|
frame_ctx->frame->format = frame->format;
|
||||||
|
|
||||||
frame->width = dc->width;
|
frame->width = dc->lcevc.width;
|
||||||
frame->height = dc->height;
|
frame->height = dc->lcevc.height;
|
||||||
|
|
||||||
ret = avctx->get_buffer2(avctx, frame_ctx->frame, 0);
|
ret = avctx->get_buffer2(avctx, frame_ctx->frame, 0);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
|
|
@ -1712,7 +1719,8 @@ static int attach_post_process_data(AVCodecContext *avctx, AVFrame *frame)
|
||||||
fdd->post_process_opaque_free = ff_lcevc_unref;
|
fdd->post_process_opaque_free = ff_lcevc_unref;
|
||||||
fdd->post_process = ff_lcevc_process;
|
fdd->post_process = ff_lcevc_process;
|
||||||
}
|
}
|
||||||
dc->lcevc_frame = 0;
|
dc->lcevc.frame = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -1960,7 +1968,7 @@ static av_cold void progress_frame_pool_free_entry_cb(AVRefStructOpaque opaque,
|
||||||
av_frame_free(&progress->f);
|
av_frame_free(&progress->f);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ff_decode_preinit(AVCodecContext *avctx)
|
av_cold int ff_decode_preinit(AVCodecContext *avctx)
|
||||||
{
|
{
|
||||||
AVCodecInternal *avci = avctx->internal;
|
AVCodecInternal *avci = avctx->internal;
|
||||||
DecodeContext *dc = decode_ctx(avci);
|
DecodeContext *dc = decode_ctx(avci);
|
||||||
|
|
@ -2080,9 +2088,13 @@ int ff_decode_preinit(AVCodecContext *avctx)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
if (!(avctx->export_side_data & AV_CODEC_EXPORT_DATA_ENHANCEMENTS)) {
|
if (!(avctx->export_side_data & AV_CODEC_EXPORT_DATA_ENHANCEMENTS)) {
|
||||||
ret = ff_lcevc_alloc(&dc->lcevc);
|
if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) {
|
||||||
if (ret < 0 && (avctx->err_recognition & AV_EF_EXPLODE))
|
#if CONFIG_LIBLCEVC_DEC
|
||||||
return ret;
|
ret = ff_lcevc_alloc(&dc->lcevc.ctx);
|
||||||
|
if (ret < 0 && (avctx->err_recognition & AV_EF_EXPLODE))
|
||||||
|
return ret;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -2292,7 +2304,7 @@ int ff_hwaccel_frame_priv_alloc(AVCodecContext *avctx, void **hwaccel_picture_pr
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ff_decode_flush_buffers(AVCodecContext *avctx)
|
av_cold void ff_decode_flush_buffers(AVCodecContext *avctx)
|
||||||
{
|
{
|
||||||
AVCodecInternal *avci = avctx->internal;
|
AVCodecInternal *avci = avctx->internal;
|
||||||
DecodeContext *dc = decode_ctx(avci);
|
DecodeContext *dc = decode_ctx(avci);
|
||||||
|
|
@ -2310,27 +2322,31 @@ void ff_decode_flush_buffers(AVCodecContext *avctx)
|
||||||
dc->draining_started = 0;
|
dc->draining_started = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
AVCodecInternal *ff_decode_internal_alloc(void)
|
av_cold AVCodecInternal *ff_decode_internal_alloc(void)
|
||||||
{
|
{
|
||||||
return av_mallocz(sizeof(DecodeContext));
|
return av_mallocz(sizeof(DecodeContext));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ff_decode_internal_sync(AVCodecContext *dst, const AVCodecContext *src)
|
av_cold void ff_decode_internal_sync(AVCodecContext *dst, const AVCodecContext *src)
|
||||||
{
|
{
|
||||||
const DecodeContext *src_dc = decode_ctx(src->internal);
|
const DecodeContext *src_dc = decode_ctx(src->internal);
|
||||||
DecodeContext *dst_dc = decode_ctx(dst->internal);
|
DecodeContext *dst_dc = decode_ctx(dst->internal);
|
||||||
|
|
||||||
dst_dc->initial_pict_type = src_dc->initial_pict_type;
|
dst_dc->initial_pict_type = src_dc->initial_pict_type;
|
||||||
dst_dc->intra_only_flag = src_dc->intra_only_flag;
|
dst_dc->intra_only_flag = src_dc->intra_only_flag;
|
||||||
av_refstruct_replace(&dst_dc->lcevc, src_dc->lcevc);
|
#if CONFIG_LIBLCEVC_DEC
|
||||||
|
av_refstruct_replace(&dst_dc->lcevc.ctx, src_dc->lcevc.ctx);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void ff_decode_internal_uninit(AVCodecContext *avctx)
|
av_cold void ff_decode_internal_uninit(AVCodecContext *avctx)
|
||||||
{
|
{
|
||||||
|
#if CONFIG_LIBLCEVC_DEC
|
||||||
AVCodecInternal *avci = avctx->internal;
|
AVCodecInternal *avci = avctx->internal;
|
||||||
DecodeContext *dc = decode_ctx(avci);
|
DecodeContext *dc = decode_ctx(avci);
|
||||||
|
|
||||||
av_refstruct_unref(&dc->lcevc);
|
av_refstruct_unref(&dc->lcevc.ctx);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static int attach_displaymatrix(AVCodecContext *avctx, AVFrame *frame, int orientation)
|
static int attach_displaymatrix(AVCodecContext *avctx, AVFrame *frame, int orientation)
|
||||||
|
|
|
||||||
|
|
@ -16,8 +16,6 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config_components.h"
|
|
||||||
|
|
||||||
#include "libavutil/avassert.h"
|
#include "libavutil/avassert.h"
|
||||||
#include "libavutil/frame.h"
|
#include "libavutil/frame.h"
|
||||||
#include "libavutil/imgutils.h"
|
#include "libavutil/imgutils.h"
|
||||||
|
|
@ -28,7 +26,6 @@
|
||||||
#include "decode.h"
|
#include "decode.h"
|
||||||
#include "lcevcdec.h"
|
#include "lcevcdec.h"
|
||||||
|
|
||||||
#if CONFIG_LIBLCEVC_DEC
|
|
||||||
static LCEVC_ColorFormat map_format(int format)
|
static LCEVC_ColorFormat map_format(int format)
|
||||||
{
|
{
|
||||||
switch (format) {
|
switch (format) {
|
||||||
|
|
@ -249,11 +246,9 @@ static void lcevc_free(AVRefStructOpaque unused, void *obj)
|
||||||
LCEVC_DestroyDecoder(lcevc->decoder);
|
LCEVC_DestroyDecoder(lcevc->decoder);
|
||||||
memset(lcevc, 0, sizeof(*lcevc));
|
memset(lcevc, 0, sizeof(*lcevc));
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
static int lcevc_init(FFLCEVCContext *lcevc, void *logctx)
|
static int lcevc_init(FFLCEVCContext *lcevc, void *logctx)
|
||||||
{
|
{
|
||||||
#if CONFIG_LIBLCEVC_DEC
|
|
||||||
LCEVC_AccelContextHandle dummy = { 0 };
|
LCEVC_AccelContextHandle dummy = { 0 };
|
||||||
const int32_t event = LCEVC_Log;
|
const int32_t event = LCEVC_Log;
|
||||||
|
|
||||||
|
|
@ -272,7 +267,6 @@ static int lcevc_init(FFLCEVCContext *lcevc, void *logctx)
|
||||||
return AVERROR_EXTERNAL;
|
return AVERROR_EXTERNAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
lcevc->initialized = 1;
|
lcevc->initialized = 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -291,7 +285,6 @@ int ff_lcevc_process(void *logctx, AVFrame *frame)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if CONFIG_LIBLCEVC_DEC
|
|
||||||
av_assert0(frame_ctx->frame);
|
av_assert0(frame_ctx->frame);
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -304,7 +297,6 @@ int ff_lcevc_process(void *logctx, AVFrame *frame)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
av_frame_remove_side_data(frame, AV_FRAME_DATA_LCEVC);
|
av_frame_remove_side_data(frame, AV_FRAME_DATA_LCEVC);
|
||||||
#endif
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -312,11 +304,9 @@ int ff_lcevc_process(void *logctx, AVFrame *frame)
|
||||||
int ff_lcevc_alloc(FFLCEVCContext **plcevc)
|
int ff_lcevc_alloc(FFLCEVCContext **plcevc)
|
||||||
{
|
{
|
||||||
FFLCEVCContext *lcevc = NULL;
|
FFLCEVCContext *lcevc = NULL;
|
||||||
#if CONFIG_LIBLCEVC_DEC
|
|
||||||
lcevc = av_refstruct_alloc_ext(sizeof(*lcevc), 0, NULL, lcevc_free);
|
lcevc = av_refstruct_alloc_ext(sizeof(*lcevc), 0, NULL, lcevc_free);
|
||||||
if (!lcevc)
|
if (!lcevc)
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
#endif
|
|
||||||
*plcevc = lcevc;
|
*plcevc = lcevc;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -401,7 +401,6 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
||||||
dst->hwaccel_flags = src->hwaccel_flags;
|
dst->hwaccel_flags = src->hwaccel_flags;
|
||||||
|
|
||||||
av_refstruct_replace(&dst->internal->pool, src->internal->pool);
|
av_refstruct_replace(&dst->internal->pool, src->internal->pool);
|
||||||
ff_decode_internal_sync(dst, src);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (for_user) {
|
if (for_user) {
|
||||||
|
|
|
||||||
|
|
@ -54,8 +54,8 @@ cglobal put_pixels8_x2, 4,5
|
||||||
pavgb m0, m2
|
pavgb m0, m2
|
||||||
pavgb m1, m3
|
pavgb m1, m3
|
||||||
%else
|
%else
|
||||||
PAVGB m0, [r1]
|
pavgb m0, [r1]
|
||||||
PAVGB m1, [r1+r2]
|
pavgb m1, [r1+r2]
|
||||||
%endif
|
%endif
|
||||||
mova [r0], m0
|
mova [r0], m0
|
||||||
mova [r0+r2], m1
|
mova [r0+r2], m1
|
||||||
|
|
@ -69,8 +69,8 @@ cglobal put_pixels8_x2, 4,5
|
||||||
pavgb m0, m2
|
pavgb m0, m2
|
||||||
pavgb m1, m3
|
pavgb m1, m3
|
||||||
%else
|
%else
|
||||||
PAVGB m0, [r1]
|
pavgb m0, [r1]
|
||||||
PAVGB m1, [r1+r2]
|
pavgb m1, [r1+r2]
|
||||||
%endif
|
%endif
|
||||||
add r1, r4
|
add r1, r4
|
||||||
mova [r0], m0
|
mova [r0], m0
|
||||||
|
|
@ -103,8 +103,8 @@ cglobal put_no_rnd_pixels8_x2, 4,5
|
||||||
add r1, r4
|
add r1, r4
|
||||||
psubusb m0, m6
|
psubusb m0, m6
|
||||||
psubusb m2, m6
|
psubusb m2, m6
|
||||||
PAVGB m0, m1
|
pavgb m0, m1
|
||||||
PAVGB m2, m3
|
pavgb m2, m3
|
||||||
mova [r0], m0
|
mova [r0], m0
|
||||||
mova [r0+r2], m2
|
mova [r0+r2], m2
|
||||||
mova m0, [r1]
|
mova m0, [r1]
|
||||||
|
|
@ -115,8 +115,8 @@ cglobal put_no_rnd_pixels8_x2, 4,5
|
||||||
add r1, r4
|
add r1, r4
|
||||||
psubusb m0, m6
|
psubusb m0, m6
|
||||||
psubusb m2, m6
|
psubusb m2, m6
|
||||||
PAVGB m0, m1
|
pavgb m0, m1
|
||||||
PAVGB m2, m3
|
pavgb m2, m3
|
||||||
mova [r0], m0
|
mova [r0], m0
|
||||||
mova [r0+r2], m2
|
mova [r0+r2], m2
|
||||||
add r0, r4
|
add r0, r4
|
||||||
|
|
@ -143,8 +143,8 @@ cglobal %1_no_rnd_pixels8_x2_exact, 4,5
|
||||||
pxor m2, m4
|
pxor m2, m4
|
||||||
pxor m1, m4
|
pxor m1, m4
|
||||||
pxor m3, m4
|
pxor m3, m4
|
||||||
PAVGB m0, m1
|
pavgb m0, m1
|
||||||
PAVGB m2, m3
|
pavgb m2, m3
|
||||||
pxor m0, m4
|
pxor m0, m4
|
||||||
pxor m2, m4
|
pxor m2, m4
|
||||||
%ifidn %1, avg
|
%ifidn %1, avg
|
||||||
|
|
@ -161,8 +161,8 @@ cglobal %1_no_rnd_pixels8_x2_exact, 4,5
|
||||||
pxor m1, m4
|
pxor m1, m4
|
||||||
pxor m2, m4
|
pxor m2, m4
|
||||||
pxor m3, m4
|
pxor m3, m4
|
||||||
PAVGB m0, m1
|
pavgb m0, m1
|
||||||
PAVGB m2, m3
|
pavgb m2, m3
|
||||||
pxor m0, m4
|
pxor m0, m4
|
||||||
pxor m2, m4
|
pxor m2, m4
|
||||||
%ifidn %1, avg
|
%ifidn %1, avg
|
||||||
|
|
@ -198,16 +198,16 @@ cglobal put_pixels8_y2, 4,5
|
||||||
movu m1, [r1+r2]
|
movu m1, [r1+r2]
|
||||||
movu m2, [r1+r4]
|
movu m2, [r1+r4]
|
||||||
add r1, r4
|
add r1, r4
|
||||||
PAVGB m0, m1
|
pavgb m0, m1
|
||||||
PAVGB m1, m2
|
pavgb m1, m2
|
||||||
mova [r0+r2], m0
|
mova [r0+r2], m0
|
||||||
mova [r0+r4], m1
|
mova [r0+r4], m1
|
||||||
movu m1, [r1+r2]
|
movu m1, [r1+r2]
|
||||||
movu m0, [r1+r4]
|
movu m0, [r1+r4]
|
||||||
add r0, r4
|
add r0, r4
|
||||||
add r1, r4
|
add r1, r4
|
||||||
PAVGB m2, m1
|
pavgb m2, m1
|
||||||
PAVGB m1, m0
|
pavgb m1, m0
|
||||||
mova [r0+r2], m2
|
mova [r0+r2], m2
|
||||||
mova [r0+r4], m1
|
mova [r0+r4], m1
|
||||||
add r0, r4
|
add r0, r4
|
||||||
|
|
@ -235,8 +235,8 @@ cglobal put_no_rnd_pixels8_y2, 4,5
|
||||||
mova m2, [r1+r4]
|
mova m2, [r1+r4]
|
||||||
add r1, r4
|
add r1, r4
|
||||||
psubusb m1, m6
|
psubusb m1, m6
|
||||||
PAVGB m0, m1
|
pavgb m0, m1
|
||||||
PAVGB m1, m2
|
pavgb m1, m2
|
||||||
mova [r0+r2], m0
|
mova [r0+r2], m0
|
||||||
mova [r0+r4], m1
|
mova [r0+r4], m1
|
||||||
mova m1, [r1+r2]
|
mova m1, [r1+r2]
|
||||||
|
|
@ -244,8 +244,8 @@ cglobal put_no_rnd_pixels8_y2, 4,5
|
||||||
add r0, r4
|
add r0, r4
|
||||||
add r1, r4
|
add r1, r4
|
||||||
psubusb m1, m6
|
psubusb m1, m6
|
||||||
PAVGB m2, m1
|
pavgb m2, m1
|
||||||
PAVGB m1, m0
|
pavgb m1, m0
|
||||||
mova [r0+r2], m2
|
mova [r0+r2], m2
|
||||||
mova [r0+r4], m1
|
mova [r0+r4], m1
|
||||||
add r0, r4
|
add r0, r4
|
||||||
|
|
@ -271,8 +271,8 @@ cglobal %1_no_rnd_pixels8_y2_exact, 4,5
|
||||||
movu m2, [r1+r2]
|
movu m2, [r1+r2]
|
||||||
pxor m1, m3
|
pxor m1, m3
|
||||||
pxor m2, m3
|
pxor m2, m3
|
||||||
PAVGB m0, m1
|
pavgb m0, m1
|
||||||
PAVGB m1, m2
|
pavgb m1, m2
|
||||||
pxor m0, m3
|
pxor m0, m3
|
||||||
pxor m1, m3
|
pxor m1, m3
|
||||||
%ifidn %1, avg
|
%ifidn %1, avg
|
||||||
|
|
@ -285,8 +285,8 @@ cglobal %1_no_rnd_pixels8_y2_exact, 4,5
|
||||||
movu m0, [r1+r4]
|
movu m0, [r1+r4]
|
||||||
pxor m1, m3
|
pxor m1, m3
|
||||||
pxor m0, m3
|
pxor m0, m3
|
||||||
PAVGB m2, m1
|
pavgb m2, m1
|
||||||
PAVGB m1, m0
|
pavgb m1, m0
|
||||||
pxor m2, m3
|
pxor m2, m3
|
||||||
pxor m1, m3
|
pxor m1, m3
|
||||||
%ifidn %1, avg
|
%ifidn %1, avg
|
||||||
|
|
@ -325,11 +325,11 @@ cglobal avg_pixels8_x2, 4,5
|
||||||
pavgb m0, m1
|
pavgb m0, m1
|
||||||
pavgb m2, m3
|
pavgb m2, m3
|
||||||
%else
|
%else
|
||||||
PAVGB m0, [r1+1], m3, m5
|
pavgb m0, [r1+1]
|
||||||
PAVGB m2, [r1+r2+1], m4, m5
|
pavgb m2, [r1+r2+1]
|
||||||
%endif
|
%endif
|
||||||
PAVGB m0, [r0], m3, m5
|
pavgb m0, [r0]
|
||||||
PAVGB m2, [r0+r2], m4, m5
|
pavgb m2, [r0+r2]
|
||||||
add r1, r4
|
add r1, r4
|
||||||
mova [r0], m0
|
mova [r0], m0
|
||||||
mova [r0+r2], m2
|
mova [r0+r2], m2
|
||||||
|
|
@ -341,13 +341,13 @@ cglobal avg_pixels8_x2, 4,5
|
||||||
pavgb m0, m1
|
pavgb m0, m1
|
||||||
pavgb m2, m3
|
pavgb m2, m3
|
||||||
%else
|
%else
|
||||||
PAVGB m0, [r1+1], m3, m5
|
pavgb m0, [r1+1]
|
||||||
PAVGB m2, [r1+r2+1], m4, m5
|
pavgb m2, [r1+r2+1]
|
||||||
%endif
|
%endif
|
||||||
add r0, r4
|
add r0, r4
|
||||||
add r1, r4
|
add r1, r4
|
||||||
PAVGB m0, [r0], m3, m5
|
pavgb m0, [r0]
|
||||||
PAVGB m2, [r0+r2], m4, m5
|
pavgb m2, [r0+r2]
|
||||||
mova [r0], m0
|
mova [r0], m0
|
||||||
mova [r0+r2], m2
|
mova [r0+r2], m2
|
||||||
add r0, r4
|
add r0, r4
|
||||||
|
|
@ -377,20 +377,20 @@ cglobal avg_pixels8_y2, 4,5
|
||||||
movu m1, [r1+r2]
|
movu m1, [r1+r2]
|
||||||
movu m2, [r1+r4]
|
movu m2, [r1+r4]
|
||||||
add r1, r4
|
add r1, r4
|
||||||
PAVGB m0, m1
|
pavgb m0, m1
|
||||||
PAVGB m1, m2
|
pavgb m1, m2
|
||||||
PAVGB m0, [r0+r2]
|
pavgb m0, [r0+r2]
|
||||||
PAVGB m1, [r0+r4]
|
pavgb m1, [r0+r4]
|
||||||
mova [r0+r2], m0
|
mova [r0+r2], m0
|
||||||
mova [r0+r4], m1
|
mova [r0+r4], m1
|
||||||
movu m1, [r1+r2]
|
movu m1, [r1+r2]
|
||||||
movu m0, [r1+r4]
|
movu m0, [r1+r4]
|
||||||
PAVGB m2, m1
|
pavgb m2, m1
|
||||||
PAVGB m1, m0
|
pavgb m1, m0
|
||||||
add r0, r4
|
add r0, r4
|
||||||
add r1, r4
|
add r1, r4
|
||||||
PAVGB m2, [r0+r2]
|
pavgb m2, [r0+r2]
|
||||||
PAVGB m1, [r0+r4]
|
pavgb m1, [r0+r4]
|
||||||
mova [r0+r2], m2
|
mova [r0+r2], m2
|
||||||
mova [r0+r4], m1
|
mova [r0+r4], m1
|
||||||
add r0, r4
|
add r0, r4
|
||||||
|
|
@ -423,12 +423,12 @@ cglobal %1%3_pixels8_xy2, 4,5,5
|
||||||
punpcklbw m0, m1
|
punpcklbw m0, m1
|
||||||
pmaddubsw m0, m4
|
pmaddubsw m0, m4
|
||||||
%ifidn %3, _no_rnd
|
%ifidn %3, _no_rnd
|
||||||
paddusw m2, m3
|
paddw m2, m3
|
||||||
paddusw m2, m0
|
paddw m2, m0
|
||||||
psrlw m2, 2
|
psrlw m2, 2
|
||||||
%else
|
%else
|
||||||
paddusw m2, m0
|
paddw m2, m0
|
||||||
pmulhrsw m2, [pw_8192]
|
pmulhrsw m2, m3
|
||||||
%endif
|
%endif
|
||||||
%ifidn %1, avg
|
%ifidn %1, avg
|
||||||
movh m1, [r0+r4]
|
movh m1, [r0+r4]
|
||||||
|
|
@ -445,12 +445,12 @@ cglobal %1%3_pixels8_xy2, 4,5,5
|
||||||
punpcklbw m2, m1
|
punpcklbw m2, m1
|
||||||
pmaddubsw m2, m4
|
pmaddubsw m2, m4
|
||||||
%ifidn %3, _no_rnd
|
%ifidn %3, _no_rnd
|
||||||
paddusw m0, m3
|
paddw m0, m3
|
||||||
paddusw m0, m2
|
paddw m0, m2
|
||||||
psrlw m0, 2
|
psrlw m0, 2
|
||||||
%else
|
%else
|
||||||
paddusw m0, m2
|
paddw m0, m2
|
||||||
pmulhrsw m0, [pw_8192]
|
pmulhrsw m0, m3
|
||||||
%endif
|
%endif
|
||||||
%ifidn %1, avg
|
%ifidn %1, avg
|
||||||
movh m1, [r0+r4]
|
movh m1, [r0+r4]
|
||||||
|
|
@ -485,8 +485,8 @@ cglobal %1%3_pixels16_xy2, 4,5,8
|
||||||
punpcklbw m4, m7
|
punpcklbw m4, m7
|
||||||
punpckhbw m1, m7
|
punpckhbw m1, m7
|
||||||
punpckhbw m5, m7
|
punpckhbw m5, m7
|
||||||
paddusw m4, m0
|
paddw m4, m0
|
||||||
paddusw m5, m1
|
paddw m5, m1
|
||||||
xor r4, r4
|
xor r4, r4
|
||||||
add r1, r2
|
add r1, r2
|
||||||
.loop:
|
.loop:
|
||||||
|
|
@ -498,18 +498,18 @@ cglobal %1%3_pixels16_xy2, 4,5,8
|
||||||
punpcklbw m2, m7
|
punpcklbw m2, m7
|
||||||
punpckhbw m1, m7
|
punpckhbw m1, m7
|
||||||
punpckhbw m3, m7
|
punpckhbw m3, m7
|
||||||
paddusw m0, m2
|
paddw m0, m2
|
||||||
paddusw m1, m3
|
paddw m1, m3
|
||||||
paddusw m4, m6
|
paddw m4, m6
|
||||||
paddusw m5, m6
|
paddw m5, m6
|
||||||
paddusw m4, m0
|
paddw m4, m0
|
||||||
paddusw m5, m1
|
paddw m5, m1
|
||||||
psrlw m4, 2
|
psrlw m4, 2
|
||||||
psrlw m5, 2
|
psrlw m5, 2
|
||||||
%ifidn %1, avg
|
%ifidn %1, avg
|
||||||
mova m3, [r0+r4]
|
mova m3, [r0+r4]
|
||||||
packuswb m4, m5
|
packuswb m4, m5
|
||||||
PAVGB m4, m3
|
pavgb m4, m3
|
||||||
%else
|
%else
|
||||||
packuswb m4, m5
|
packuswb m4, m5
|
||||||
%endif
|
%endif
|
||||||
|
|
@ -524,18 +524,18 @@ cglobal %1%3_pixels16_xy2, 4,5,8
|
||||||
punpcklbw m4, m7
|
punpcklbw m4, m7
|
||||||
punpckhbw m3, m7
|
punpckhbw m3, m7
|
||||||
punpckhbw m5, m7
|
punpckhbw m5, m7
|
||||||
paddusw m4, m2
|
paddw m4, m2
|
||||||
paddusw m5, m3
|
paddw m5, m3
|
||||||
paddusw m0, m6
|
paddw m0, m6
|
||||||
paddusw m1, m6
|
paddw m1, m6
|
||||||
paddusw m0, m4
|
paddw m0, m4
|
||||||
paddusw m1, m5
|
paddw m1, m5
|
||||||
psrlw m0, 2
|
psrlw m0, 2
|
||||||
psrlw m1, 2
|
psrlw m1, 2
|
||||||
%ifidn %1, avg
|
%ifidn %1, avg
|
||||||
mova m3, [r0+r4]
|
mova m3, [r0+r4]
|
||||||
packuswb m0, m1
|
packuswb m0, m1
|
||||||
PAVGB m0, m3
|
pavgb m0, m3
|
||||||
%else
|
%else
|
||||||
packuswb m0, m1
|
packuswb m0, m1
|
||||||
%endif
|
%endif
|
||||||
|
|
@ -567,8 +567,8 @@ cglobal %1_pixels16_xy2, 4,5,%2
|
||||||
movu m3, [r1+r4+1]
|
movu m3, [r1+r4+1]
|
||||||
pmaddubsw m2, m5
|
pmaddubsw m2, m5
|
||||||
pmaddubsw m3, m5
|
pmaddubsw m3, m5
|
||||||
paddusw m0, m2
|
paddw m0, m2
|
||||||
paddusw m1, m3
|
paddw m1, m3
|
||||||
pmulhrsw m0, [pw_8192]
|
pmulhrsw m0, [pw_8192]
|
||||||
pmulhrsw m1, [pw_8192]
|
pmulhrsw m1, [pw_8192]
|
||||||
%ifidn %1, avg
|
%ifidn %1, avg
|
||||||
|
|
@ -587,8 +587,8 @@ cglobal %1_pixels16_xy2, 4,5,%2
|
||||||
movu m1, [r1+r4+1]
|
movu m1, [r1+r4+1]
|
||||||
pmaddubsw m0, m5
|
pmaddubsw m0, m5
|
||||||
pmaddubsw m1, m5
|
pmaddubsw m1, m5
|
||||||
paddusw m2, m0
|
paddw m2, m0
|
||||||
paddusw m3, m1
|
paddw m3, m1
|
||||||
pmulhrsw m2, [pw_8192]
|
pmulhrsw m2, [pw_8192]
|
||||||
pmulhrsw m3, [pw_8192]
|
pmulhrsw m3, [pw_8192]
|
||||||
%ifidn %1, avg
|
%ifidn %1, avg
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue