---
libavcodec/Makefile | 4 +--
libavcodec/dwt.c | 53 +--------------------------------
libavcodec/dwt.h | 12 --------
libavcodec/snow.c | 1 +
libavcodec/snow_dwt.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++
libavcodec/snow_dwt.h | 36 +++++++++++++++++++++++
libavcodec/x86/snowdsp.c | 3 +-
7 files changed, 115 insertions(+), 67 deletions(-)
create mode 100644 libavcodec/snow_dwt.c
create mode 100644 libavcodec/snow_dwt.h
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index 45c6d66..7e06945 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -339,8 +339,8 @@ OBJS-$(CONFIG_SIPR_DECODER) += sipr.o
acelp_pitch_delay.o \
OBJS-$(CONFIG_SMACKAUD_DECODER) += smacker.o
OBJS-$(CONFIG_SMACKER_DECODER) += smacker.o
OBJS-$(CONFIG_SMC_DECODER) += smc.o
-OBJS-$(CONFIG_SNOW_DECODER) += snowdec.o snow.o
-OBJS-$(CONFIG_SNOW_ENCODER) += snowenc.o snow.o \
+OBJS-$(CONFIG_SNOW_DECODER) += snowdec.o snow.o snow_dwt.o
+OBJS-$(CONFIG_SNOW_ENCODER) += snowenc.o snow.o snow_dwt.o \
h263.o ituh263enc.o
OBJS-$(CONFIG_SOL_DPCM_DECODER) += dpcm.o
OBJS-$(CONFIG_SP5X_DECODER) += sp5xdec.o mjpegdec.o mjpeg.o
diff --git a/libavcodec/dwt.c b/libavcodec/dwt.c
index 93cf2c6..0796a3e 100644
--- a/libavcodec/dwt.c
+++ b/libavcodec/dwt.c
@@ -22,6 +22,7 @@
#include "libavutil/common.h"
#include "dsputil.h"
#include "dwt.h"
+#include "snow_dwt.h"
int ff_slice_buffer_init(slice_buffer *buf, int line_count,
int max_allocated_lines, int line_width,
@@ -465,34 +466,6 @@ static void spatial_compose53i_dy(DWTCompose *cs, IDWTELEM
*buffer,
cs->y += 2;
}
-void ff_snow_horizontal_compose97i(IDWTELEM *b, IDWTELEM *temp, int width)
-{
- const int w2 = (width + 1) >> 1;
- int x;
-
- temp[0] = b[0] - ((3 * b[w2] + 2) >> 2);
- for (x = 1; x < (width >> 1); x++) {
- temp[2 * x] = b[x] - ((3 * (b[x + w2 - 1] + b[x + w2]) + 4) >> 3);
- temp[2 * x - 1] = b[x + w2 - 1] - temp[2 * x - 2] - temp[2 * x];
- }
- if (width & 1) {
- temp[2 * x] = b[x] - ((3 * b[x + w2 - 1] + 2) >> 2);
- temp[2 * x - 1] = b[x + w2 - 1] - temp[2 * x - 2] - temp[2 * x];
- } else
- temp[2 * x - 1] = b[x + w2 - 1] - 2 * temp[2 * x - 2];
-
- b[0] = temp[0] + ((2 * temp[0] + temp[1] + 4) >> 3);
- for (x = 2; x < width - 1; x += 2) {
- b[x] = temp[x] + ((4 * temp[x] + temp[x - 1] + temp[x + 1] + 8) >>
4);
- b[x - 1] = temp[x - 1] + ((3 * (b[x - 2] + b[x])) >> 1);
- }
- if (width & 1) {
- b[x] = temp[x] + ((2 * temp[x] + temp[x - 1] + 4) >> 3);
- b[x - 1] = temp[x - 1] + ((3 * (b[x - 2] + b[x])) >> 1);
- } else
- b[x - 1] = temp[x - 1] + 3 * b[x - 2];
-}
-
static void vertical_compose97iH0(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2,
int width)
{
@@ -529,20 +502,6 @@ static void vertical_compose97iL1(IDWTELEM *b0, IDWTELEM
*b1, IDWTELEM *b2,
b1[i] -= (W_DM * (b0[i] + b2[i]) + W_DO) >> W_DS;
}
-void ff_snow_vertical_compose97i(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2,
- IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5,
- int width)
-{
- int i;
-
- for (i = 0; i < width; i++) {
- b4[i] -= (W_DM * (b3[i] + b5[i]) + W_DO) >> W_DS;
- b3[i] -= (W_CM * (b2[i] + b4[i]) + W_CO) >> W_CS;
- b2[i] += (W_BM * (b1[i] + b3[i]) + 4 * b2[i] + W_BO) >> W_BS;
- b1[i] += (W_AM * (b0[i] + b2[i]) + W_AO) >> W_AS;
- }
-}
-
static void spatial_compose97i_buffered_init(DWTCompose *cs, slice_buffer *sb,
int height, int stride_line)
{
@@ -849,13 +808,3 @@ void ff_dsputil_init_dwt(DSPContext *c)
c->w97[0] = w97_16_c;
c->w97[1] = w97_8_c;
}
-
-void ff_dwt_init(DWTContext *c)
-{
- c->vertical_compose97i = ff_snow_vertical_compose97i;
- c->horizontal_compose97i = ff_snow_horizontal_compose97i;
- c->inner_add_yblock = ff_snow_inner_add_yblock;
-
- if (HAVE_MMX)
- ff_dwt_init_x86(c);
-}
diff --git a/libavcodec/dwt.h b/libavcodec/dwt.h
index f2d7864..6cf73ba 100644
--- a/libavcodec/dwt.h
+++ b/libavcodec/dwt.h
@@ -93,15 +93,6 @@ void ff_slice_buffer_flush(slice_buffer *buf);
void ff_slice_buffer_destroy(slice_buffer *buf);
IDWTELEM *ff_slice_buffer_load_line(slice_buffer *buf, int line);
-void ff_snow_vertical_compose97i(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2,
- IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5,
- int width);
-void ff_snow_horizontal_compose97i(IDWTELEM *b, IDWTELEM *temp, int width);
-void ff_snow_inner_add_yblock(const uint8_t *obmc, const int obmc_stride,
- uint8_t **block, int b_w, int b_h, int src_x,
- int src_y, int src_stride, slice_buffer *sb,
- int add, uint8_t *dst8);
-
int ff_w53_32_c(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h);
int ff_w97_32_c(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h);
@@ -118,7 +109,4 @@ void ff_spatial_idwt_buffered_slice(DWTContext *dsp,
DWTCompose *cs,
void ff_spatial_idwt(IDWTELEM *buffer, IDWTELEM *temp, int width, int height,
int stride, int type, int decomposition_count);
-void ff_dwt_init(DWTContext *c);
-void ff_dwt_init_x86(DWTContext *c);
-
#endif /* AVCODEC_DWT_H */
diff --git a/libavcodec/snow.c b/libavcodec/snow.c
index d69f452..5e41c6d 100644
--- a/libavcodec/snow.c
+++ b/libavcodec/snow.c
@@ -25,6 +25,7 @@
#include "dsputil.h"
#include "dwt.h"
#include "snow.h"
+#include "snow_dwt.h"
#include "snowdata.h"
#include "rangecoder.h"
diff --git a/libavcodec/snow_dwt.c b/libavcodec/snow_dwt.c
new file mode 100644
index 0000000..dfed9e6
--- /dev/null
+++ b/libavcodec/snow_dwt.c
@@ -0,0 +1,73 @@
+/*
+ * This file is part of Libav.
+ *
+ * Libav is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * Libav is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Libav; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "libavutil/common.h"
+#include "dwt.h"
+#include "snow_dwt.h"
+
+void ff_snow_horizontal_compose97i(IDWTELEM *b, IDWTELEM *temp, int width)
+{
+ const int w2 = (width + 1) >> 1;
+ int x;
+
+ temp[0] = b[0] - ((3 * b[w2] + 2) >> 2);
+ for (x = 1; x < (width >> 1); x++) {
+ temp[2 * x] = b[x] - ((3 * (b[x + w2 - 1] + b[x + w2]) + 4) >> 3);
+ temp[2 * x - 1] = b[x + w2 - 1] - temp[2 * x - 2] - temp[2 * x];
+ }
+ if (width & 1) {
+ temp[2 * x] = b[x] - ((3 * b[x + w2 - 1] + 2) >> 2);
+ temp[2 * x - 1] = b[x + w2 - 1] - temp[2 * x - 2] - temp[2 * x];
+ } else
+ temp[2 * x - 1] = b[x + w2 - 1] - 2 * temp[2 * x - 2];
+
+ b[0] = temp[0] + ((2 * temp[0] + temp[1] + 4) >> 3);
+ for (x = 2; x < width - 1; x += 2) {
+ b[x] = temp[x] + ((4 * temp[x] + temp[x - 1] + temp[x + 1] + 8) >>
4);
+ b[x - 1] = temp[x - 1] + ((3 * (b[x - 2] + b[x])) >> 1);
+ }
+ if (width & 1) {
+ b[x] = temp[x] + ((2 * temp[x] + temp[x - 1] + 4) >> 3);
+ b[x - 1] = temp[x - 1] + ((3 * (b[x - 2] + b[x])) >> 1);
+ } else
+ b[x - 1] = temp[x - 1] + 3 * b[x - 2];
+}
+
+void ff_snow_vertical_compose97i(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2,
+ IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5,
+ int width)
+{
+ int i;
+
+ for (i = 0; i < width; i++) {
+ b4[i] -= (W_DM * (b3[i] + b5[i]) + W_DO) >> W_DS;
+ b3[i] -= (W_CM * (b2[i] + b4[i]) + W_CO) >> W_CS;
+ b2[i] += (W_BM * (b1[i] + b3[i]) + 4 * b2[i] + W_BO) >> W_BS;
+ b1[i] += (W_AM * (b0[i] + b2[i]) + W_AO) >> W_AS;
+ }
+}
+
+void ff_dwt_init(DWTContext *c)
+{
+ c->vertical_compose97i = ff_snow_vertical_compose97i;
+ c->horizontal_compose97i = ff_snow_horizontal_compose97i;
+ c->inner_add_yblock = ff_snow_inner_add_yblock;
+
+ if (HAVE_MMX)
+ ff_dwt_init_x86(c);
+}
diff --git a/libavcodec/snow_dwt.h b/libavcodec/snow_dwt.h
new file mode 100644
index 0000000..71340ee
--- /dev/null
+++ b/libavcodec/snow_dwt.h
@@ -0,0 +1,36 @@
+/*
+ * This file is part of Libav.
+ *
+ * Libav is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * Libav is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Libav; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef AVCODEC_SNOW_DWT_H
+#define AVCODEC_SNOW_DWT_H
+
+#include "dwt.h"
+
+void ff_snow_vertical_compose97i(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2,
+ IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5,
+ int width);
+void ff_snow_horizontal_compose97i(IDWTELEM *b, IDWTELEM *temp, int width);
+void ff_snow_inner_add_yblock(const uint8_t *obmc, const int obmc_stride,
+ uint8_t **block, int b_w, int b_h, int src_x,
+ int src_y, int src_stride, slice_buffer *sb,
+ int add, uint8_t *dst8);
+
+void ff_dwt_init(DWTContext *c);
+void ff_dwt_init_x86(DWTContext *c);
+
+#endif /* AVCODEC_SNOW_DWT_H */
diff --git a/libavcodec/x86/snowdsp.c b/libavcodec/x86/snowdsp.c
index fb190d8..5672e6e 100644
--- a/libavcodec/x86/snowdsp.c
+++ b/libavcodec/x86/snowdsp.c
@@ -22,8 +22,9 @@
#include "libavutil/cpu.h"
#include "libavutil/x86/asm.h"
#include "libavcodec/avcodec.h"
-#include "libavcodec/snow.h"
#include "libavcodec/dwt.h"
+#include "libavcodec/snow.h"
+#include "libavcodec/snow_dwt.h"
#include "dsputil_mmx.h"
#if HAVE_INLINE_ASM
--
1.7.10.4
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel