* qatar/master:
ARM: allow runtime masking of CPU features
dsputil: remove unused functions
mov: Treat keyframe indexes as 1-origin if starting at non-zero.
mov: Take stps entries into consideration also about key_off.
Remove lowres video decoding
Conflicts:
ffmpeg.c
ffplay.c
libavcodec/arm/vp8dsp_init_arm.c
libavcodec/libopenjpegdec.c
libavcodec/mjpegdec.c
libavcodec/mpegvideo.c
libavcodec/utils.c
libavformat/mov.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
... | ... |
@@ -565,6 +565,14 @@ int opt_cpuflags(const char *opt, const char *arg) |
565 | 565 |
{ "fma4" , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_FMA4 }, .unit = "flags" }, |
566 | 566 |
{ "3dnow" , NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_3DNOW }, .unit = "flags" }, |
567 | 567 |
{ "3dnowext", NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_3DNOWEXT }, .unit = "flags" }, |
568 |
+ |
|
569 |
+ { "armv5te", NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_ARMV5TE }, .unit = "flags" }, |
|
570 |
+ { "armv6", NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_ARMV6 }, .unit = "flags" }, |
|
571 |
+ { "armv6t2", NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_ARMV6T2 }, .unit = "flags" }, |
|
572 |
+ { "vfp", NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_VFP }, .unit = "flags" }, |
|
573 |
+ { "vfpv3", NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_VFPV3 }, .unit = "flags" }, |
|
574 |
+ { "neon", NULL, 0, AV_OPT_TYPE_CONST, { AV_CPU_FLAG_NEON }, .unit = "flags" }, |
|
575 |
+ |
|
568 | 576 |
{ NULL }, |
569 | 577 |
}; |
570 | 578 |
static const AVClass class = { |
... | ... |
@@ -260,7 +260,6 @@ static int64_t duration = AV_NOPTS_VALUE; |
260 | 260 |
static int workaround_bugs = 1; |
261 | 261 |
static int fast = 0; |
262 | 262 |
static int genpts = 0; |
263 |
-static int lowres = 0; |
|
264 | 263 |
static int idct = FF_IDCT_AUTO; |
265 | 264 |
static enum AVDiscard skip_frame = AVDISCARD_DEFAULT; |
266 | 265 |
static enum AVDiscard skip_idct = AVDISCARD_DEFAULT; |
... | ... |
@@ -1325,7 +1324,7 @@ static void alloc_picture(void *opaque) |
1325 | 1325 |
/* SDL allocates a buffer smaller than requested if the video |
1326 | 1326 |
* overlay hardware is unable to support the requested size. */ |
1327 | 1327 |
fprintf(stderr, "Error: the video system does not support an image\n" |
1328 |
- "size of %dx%d pixels. Try using -lowres or -vf \"scale=w:h\"\n" |
|
1328 |
+ "size of %dx%d pixels. Try using -vf \"scale=w:h\"\n" |
|
1329 | 1329 |
"to reduce the image size.\n", vp->width, vp->height ); |
1330 | 1330 |
do_exit(is); |
1331 | 1331 |
} |
... | ... |
@@ -3085,7 +3084,6 @@ static const OptionDef options[] = { |
3085 | 3085 |
{ "fast", OPT_BOOL | OPT_EXPERT, { (void*)&fast }, "non spec compliant optimizations", "" }, |
3086 | 3086 |
{ "genpts", OPT_BOOL | OPT_EXPERT, { (void*)&genpts }, "generate pts", "" }, |
3087 | 3087 |
{ "drp", OPT_INT | HAS_ARG | OPT_EXPERT, { (void*)&decoder_reorder_pts }, "let decoder reorder pts 0=off 1=on -1=auto", ""}, |
3088 |
- { "lowres", OPT_INT | HAS_ARG | OPT_EXPERT, { (void*)&lowres }, "", "" }, |
|
3089 | 3088 |
{ "skiploop", OPT_INT | HAS_ARG | OPT_EXPERT, { (void*)&skip_loop_filter }, "", "" }, |
3090 | 3089 |
{ "skipframe", OPT_INT | HAS_ARG | OPT_EXPERT, { (void*)&skip_frame }, "", "" }, |
3091 | 3090 |
{ "skipidct", OPT_INT | HAS_ARG | OPT_EXPERT, { (void*)&skip_idct }, "", "" }, |
... | ... |
@@ -336,7 +336,7 @@ void ff_dsputil_init_alpha(DSPContext* c, AVCodecContext *avctx) |
336 | 336 |
put_pixels_clamped_axp_p = c->put_pixels_clamped; |
337 | 337 |
add_pixels_clamped_axp_p = c->add_pixels_clamped; |
338 | 338 |
|
339 |
- if (!avctx->lowres && avctx->bits_per_raw_sample <= 8 && |
|
339 |
+ if (avctx->bits_per_raw_sample <= 8 && |
|
340 | 340 |
(avctx->idct_algo == FF_IDCT_AUTO || |
341 | 341 |
avctx->idct_algo == FF_IDCT_SIMPLEALPHA)) { |
342 | 342 |
c->idct_put = ff_simple_idct_put_axp; |
... | ... |
@@ -19,6 +19,8 @@ |
19 | 19 |
*/ |
20 | 20 |
|
21 | 21 |
#include <stdint.h> |
22 |
+ |
|
23 |
+#include "libavutil/arm/cpu.h" |
|
22 | 24 |
#include "libavutil/attributes.h" |
23 | 25 |
#include "libavcodec/ac3dsp.h" |
24 | 26 |
#include "config.h" |
... | ... |
@@ -47,13 +49,15 @@ void ff_ac3_update_bap_counts_arm(uint16_t mant_cnt[16], uint8_t *bap, int len); |
47 | 47 |
|
48 | 48 |
av_cold void ff_ac3dsp_init_arm(AC3DSPContext *c, int bit_exact) |
49 | 49 |
{ |
50 |
+ int cpu_flags = av_get_cpu_flags(); |
|
51 |
+ |
|
50 | 52 |
c->update_bap_counts = ff_ac3_update_bap_counts_arm; |
51 | 53 |
|
52 |
- if (HAVE_ARMV6) { |
|
54 |
+ if (have_armv6(cpu_flags)) { |
|
53 | 55 |
c->bit_alloc_calc_bap = ff_ac3_bit_alloc_calc_bap_armv6; |
54 | 56 |
} |
55 | 57 |
|
56 |
- if (HAVE_NEON) { |
|
58 |
+ if (have_neon(cpu_flags)) { |
|
57 | 59 |
c->ac3_exponent_min = ff_ac3_exponent_min_neon; |
58 | 60 |
c->ac3_max_msb_abs_int16 = ff_ac3_max_msb_abs_int16_neon; |
59 | 61 |
c->ac3_lshift_int16 = ff_ac3_lshift_int16_neon; |
... | ... |
@@ -19,6 +19,8 @@ |
19 | 19 |
*/ |
20 | 20 |
|
21 | 21 |
#include "config.h" |
22 |
+ |
|
23 |
+#include "libavutil/arm/cpu.h" |
|
22 | 24 |
#include "libavutil/attributes.h" |
23 | 25 |
#include "libavcodec/dcadsp.h" |
24 | 26 |
|
... | ... |
@@ -27,6 +29,8 @@ void ff_dca_lfe_fir_neon(float *out, const float *in, const float *coefs, |
27 | 27 |
|
28 | 28 |
av_cold void ff_dcadsp_init_arm(DCADSPContext *s) |
29 | 29 |
{ |
30 |
- if (HAVE_NEON) |
|
30 |
+ int cpu_flags = av_get_cpu_flags(); |
|
31 |
+ |
|
32 |
+ if (have_neon(cpu_flags)) |
|
31 | 33 |
s->lfe_fir = ff_dca_lfe_fir_neon; |
32 | 34 |
} |
... | ... |
@@ -19,6 +19,7 @@ |
19 | 19 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
20 | 20 |
*/ |
21 | 21 |
|
22 |
+#include "libavutil/arm/cpu.h" |
|
22 | 23 |
#include "libavcodec/dsputil.h" |
23 | 24 |
#include "dsputil_arm.h" |
24 | 25 |
|
... | ... |
@@ -76,11 +77,12 @@ static void simple_idct_arm_add(uint8_t *dest, int line_size, DCTELEM *block) |
76 | 76 |
void ff_dsputil_init_arm(DSPContext* c, AVCodecContext *avctx) |
77 | 77 |
{ |
78 | 78 |
const int high_bit_depth = avctx->bits_per_raw_sample > 8; |
79 |
+ int cpu_flags = av_get_cpu_flags(); |
|
79 | 80 |
|
80 | 81 |
ff_put_pixels_clamped = c->put_pixels_clamped; |
81 | 82 |
ff_add_pixels_clamped = c->add_pixels_clamped; |
82 | 83 |
|
83 |
- if (!avctx->lowres && avctx->bits_per_raw_sample <= 8) { |
|
84 |
+ if (avctx->bits_per_raw_sample <= 8) { |
|
84 | 85 |
if(avctx->idct_algo == FF_IDCT_AUTO || |
85 | 86 |
avctx->idct_algo == FF_IDCT_ARM){ |
86 | 87 |
c->idct_put = j_rev_dct_arm_put; |
... | ... |
@@ -117,8 +119,8 @@ void ff_dsputil_init_arm(DSPContext* c, AVCodecContext *avctx) |
117 | 117 |
c->put_no_rnd_pixels_tab[1][3] = ff_put_no_rnd_pixels8_xy2_arm; |
118 | 118 |
} |
119 | 119 |
|
120 |
- if (HAVE_ARMV5TE) ff_dsputil_init_armv5te(c, avctx); |
|
121 |
- if (HAVE_ARMV6) ff_dsputil_init_armv6(c, avctx); |
|
122 |
- if (HAVE_ARMVFP) ff_dsputil_init_vfp(c, avctx); |
|
123 |
- if (HAVE_NEON) ff_dsputil_init_neon(c, avctx); |
|
120 |
+ if (have_armv5te(cpu_flags)) ff_dsputil_init_armv5te(c, avctx); |
|
121 |
+ if (have_armv6(cpu_flags)) ff_dsputil_init_armv6(c, avctx); |
|
122 |
+ if (have_vfp(cpu_flags)) ff_dsputil_init_vfp(c, avctx); |
|
123 |
+ if (have_neon(cpu_flags)) ff_dsputil_init_neon(c, avctx); |
|
124 | 124 |
} |
... | ... |
@@ -29,7 +29,7 @@ void ff_prefetch_arm(void *mem, int stride, int h); |
29 | 29 |
|
30 | 30 |
av_cold void ff_dsputil_init_armv5te(DSPContext *c, AVCodecContext *avctx) |
31 | 31 |
{ |
32 |
- if (!avctx->lowres && avctx->bits_per_raw_sample <= 8 && |
|
32 |
+ if (avctx->bits_per_raw_sample <= 8 && |
|
33 | 33 |
(avctx->idct_algo == FF_IDCT_AUTO || |
34 | 34 |
avctx->idct_algo == FF_IDCT_SIMPLEARMV5TE)) { |
35 | 35 |
c->idct_put = ff_simple_idct_put_armv5te; |
... | ... |
@@ -74,7 +74,7 @@ av_cold void ff_dsputil_init_armv6(DSPContext *c, AVCodecContext *avctx) |
74 | 74 |
{ |
75 | 75 |
const int high_bit_depth = avctx->bits_per_raw_sample > 8; |
76 | 76 |
|
77 |
- if (!avctx->lowres && avctx->bits_per_raw_sample <= 8 && |
|
77 |
+ if (avctx->bits_per_raw_sample <= 8 && |
|
78 | 78 |
(avctx->idct_algo == FF_IDCT_AUTO || |
79 | 79 |
avctx->idct_algo == FF_IDCT_SIMPLEARMV6)) { |
80 | 80 |
c->idct_put = ff_simple_idct_put_armv6; |
... | ... |
@@ -182,7 +182,7 @@ void ff_dsputil_init_neon(DSPContext *c, AVCodecContext *avctx) |
182 | 182 |
{ |
183 | 183 |
const int high_bit_depth = avctx->bits_per_raw_sample > 8; |
184 | 184 |
|
185 |
- if (!avctx->lowres && avctx->bits_per_raw_sample <= 8) { |
|
185 |
+ if (avctx->bits_per_raw_sample <= 8) { |
|
186 | 186 |
if (avctx->idct_algo == FF_IDCT_AUTO || |
187 | 187 |
avctx->idct_algo == FF_IDCT_SIMPLENEON) { |
188 | 188 |
c->idct_put = ff_simple_idct_put_neon; |
... | ... |
@@ -18,6 +18,7 @@ |
18 | 18 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
19 | 19 |
*/ |
20 | 20 |
|
21 |
+#include "libavutil/arm/cpu.h" |
|
21 | 22 |
#include "libavcodec/dsputil.h" |
22 | 23 |
#include "dsputil_arm.h" |
23 | 24 |
|
... | ... |
@@ -28,7 +29,9 @@ void ff_vector_fmul_reverse_vfp(float *dst, const float *src0, |
28 | 28 |
|
29 | 29 |
void ff_dsputil_init_vfp(DSPContext* c, AVCodecContext *avctx) |
30 | 30 |
{ |
31 |
- if (!HAVE_VFPV3) |
|
31 |
+ int cpu_flags = av_get_cpu_flags(); |
|
32 |
+ |
|
33 |
+ if (!have_vfpv3(cpu_flags)) |
|
32 | 34 |
c->vector_fmul = ff_vector_fmul_vfp; |
33 | 35 |
c->vector_fmul_reverse = ff_vector_fmul_reverse_vfp; |
34 | 36 |
} |
... | ... |
@@ -18,6 +18,8 @@ |
18 | 18 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
19 | 19 |
*/ |
20 | 20 |
|
21 |
+#include "libavutil/arm/cpu.h" |
|
22 |
+ |
|
21 | 23 |
#define CONFIG_FFT_FLOAT 0 |
22 | 24 |
#include "libavcodec/fft.h" |
23 | 25 |
|
... | ... |
@@ -27,7 +29,9 @@ void ff_mdct_fixed_calcw_neon(FFTContext *s, FFTDouble *o, const FFTSample *i); |
27 | 27 |
|
28 | 28 |
av_cold void ff_fft_fixed_init_arm(FFTContext *s) |
29 | 29 |
{ |
30 |
- if (HAVE_NEON) { |
|
30 |
+ int cpu_flags = av_get_cpu_flags(); |
|
31 |
+ |
|
32 |
+ if (have_neon(cpu_flags)) { |
|
31 | 33 |
s->fft_permutation = FF_FFT_PERM_SWAP_LSBS; |
32 | 34 |
s->fft_calc = ff_fft_fixed_calc_neon; |
33 | 35 |
|
... | ... |
@@ -18,6 +18,7 @@ |
18 | 18 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
19 | 19 |
*/ |
20 | 20 |
|
21 |
+#include "libavutil/arm/cpu.h" |
|
21 | 22 |
#include "libavcodec/fft.h" |
22 | 23 |
#include "libavcodec/rdft.h" |
23 | 24 |
#include "libavcodec/synth_filter.h" |
... | ... |
@@ -39,7 +40,9 @@ void ff_synth_filter_float_neon(FFTContext *imdct, |
39 | 39 |
|
40 | 40 |
av_cold void ff_fft_init_arm(FFTContext *s) |
41 | 41 |
{ |
42 |
- if (HAVE_NEON) { |
|
42 |
+ int cpu_flags = av_get_cpu_flags(); |
|
43 |
+ |
|
44 |
+ if (have_neon(cpu_flags)) { |
|
43 | 45 |
s->fft_permute = ff_fft_permute_neon; |
44 | 46 |
s->fft_calc = ff_fft_calc_neon; |
45 | 47 |
#if CONFIG_MDCT |
... | ... |
@@ -54,7 +57,9 @@ av_cold void ff_fft_init_arm(FFTContext *s) |
54 | 54 |
#if CONFIG_RDFT |
55 | 55 |
av_cold void ff_rdft_init_arm(RDFTContext *s) |
56 | 56 |
{ |
57 |
- if (HAVE_NEON) |
|
57 |
+ int cpu_flags = av_get_cpu_flags(); |
|
58 |
+ |
|
59 |
+ if (have_neon(cpu_flags)) |
|
58 | 60 |
s->rdft_calc = ff_rdft_calc_neon; |
59 | 61 |
} |
60 | 62 |
#endif |
... | ... |
@@ -62,7 +67,9 @@ av_cold void ff_rdft_init_arm(RDFTContext *s) |
62 | 62 |
#if CONFIG_DCA_DECODER |
63 | 63 |
av_cold void ff_synth_filter_init_arm(SynthFilterContext *s) |
64 | 64 |
{ |
65 |
- if (HAVE_NEON) |
|
65 |
+ int cpu_flags = av_get_cpu_flags(); |
|
66 |
+ |
|
67 |
+ if (have_neon(cpu_flags)) |
|
66 | 68 |
s->synth_filter_float = ff_synth_filter_float_neon; |
67 | 69 |
} |
68 | 70 |
#endif |
... | ... |
@@ -20,6 +20,7 @@ |
20 | 20 |
|
21 | 21 |
#include <stdint.h> |
22 | 22 |
|
23 |
+#include "libavutil/arm/cpu.h" |
|
23 | 24 |
#include "libavcodec/avcodec.h" |
24 | 25 |
#include "libavcodec/fmtconvert.h" |
25 | 26 |
|
... | ... |
@@ -33,11 +34,13 @@ void ff_float_to_int16_vfp(int16_t *dst, const float *src, long len); |
33 | 33 |
|
34 | 34 |
void ff_fmt_convert_init_arm(FmtConvertContext *c, AVCodecContext *avctx) |
35 | 35 |
{ |
36 |
- if (HAVE_ARMVFP && HAVE_ARMV6) { |
|
36 |
+ int cpu_flags = av_get_cpu_flags(); |
|
37 |
+ |
|
38 |
+ if (have_vfp(cpu_flags) && have_armv6(cpu_flags)) { |
|
37 | 39 |
c->float_to_int16 = ff_float_to_int16_vfp; |
38 | 40 |
} |
39 | 41 |
|
40 |
- if (HAVE_NEON) { |
|
42 |
+ if (have_neon(cpu_flags)) { |
|
41 | 43 |
c->int32_to_float_fmul_scalar = ff_int32_to_float_fmul_scalar_neon; |
42 | 44 |
|
43 | 45 |
if (!(avctx->flags & CODEC_FLAG_BITEXACT)) { |
... | ... |
@@ -20,6 +20,7 @@ |
20 | 20 |
|
21 | 21 |
#include <stdint.h> |
22 | 22 |
|
23 |
+#include "libavutil/arm/cpu.h" |
|
23 | 24 |
#include "libavcodec/dsputil.h" |
24 | 25 |
#include "libavcodec/h264dsp.h" |
25 | 26 |
|
... | ... |
@@ -99,5 +100,8 @@ static void ff_h264dsp_init_neon(H264DSPContext *c, const int bit_depth, const i |
99 | 99 |
|
100 | 100 |
void ff_h264dsp_init_arm(H264DSPContext *c, const int bit_depth, const int chroma_format_idc) |
101 | 101 |
{ |
102 |
- if (HAVE_NEON) ff_h264dsp_init_neon(c, bit_depth, chroma_format_idc); |
|
102 |
+ int cpu_flags = av_get_cpu_flags(); |
|
103 |
+ |
|
104 |
+ if (have_neon(cpu_flags)) |
|
105 |
+ ff_h264dsp_init_neon(c, bit_depth, chroma_format_idc); |
|
103 | 106 |
} |
... | ... |
@@ -20,6 +20,7 @@ |
20 | 20 |
|
21 | 21 |
#include <stdint.h> |
22 | 22 |
|
23 |
+#include "libavutil/arm/cpu.h" |
|
23 | 24 |
#include "libavcodec/h264pred.h" |
24 | 25 |
|
25 | 26 |
void ff_pred16x16_vert_neon(uint8_t *src, int stride); |
... | ... |
@@ -77,5 +78,8 @@ static void ff_h264_pred_init_neon(H264PredContext *h, int codec_id, const int b |
77 | 77 |
|
78 | 78 |
void ff_h264_pred_init_arm(H264PredContext *h, int codec_id, int bit_depth, const int chroma_format_idc) |
79 | 79 |
{ |
80 |
- if (HAVE_NEON) ff_h264_pred_init_neon(h, codec_id, bit_depth, chroma_format_idc); |
|
80 |
+ int cpu_flags = av_get_cpu_flags(); |
|
81 |
+ |
|
82 |
+ if (have_neon(cpu_flags)) |
|
83 |
+ ff_h264_pred_init_neon(h, codec_id, bit_depth, chroma_format_idc); |
|
81 | 84 |
} |
... | ... |
@@ -19,6 +19,8 @@ |
19 | 19 |
*/ |
20 | 20 |
|
21 | 21 |
#include <stdint.h> |
22 |
+ |
|
23 |
+#include "libavutil/arm/cpu.h" |
|
22 | 24 |
#include "libavcodec/mpegaudiodsp.h" |
23 | 25 |
#include "config.h" |
24 | 26 |
|
... | ... |
@@ -27,7 +29,9 @@ void ff_mpadsp_apply_window_fixed_armv6(int32_t *synth_buf, int32_t *window, |
27 | 27 |
|
28 | 28 |
void ff_mpadsp_init_arm(MPADSPContext *s) |
29 | 29 |
{ |
30 |
- if (HAVE_ARMV6) { |
|
30 |
+ int cpu_flags = av_get_cpu_flags(); |
|
31 |
+ |
|
32 |
+ if (have_armv6(cpu_flags)) { |
|
31 | 33 |
s->apply_window_fixed = ff_mpadsp_apply_window_fixed_armv6; |
32 | 34 |
} |
33 | 35 |
} |
... | ... |
@@ -18,6 +18,7 @@ |
18 | 18 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
19 | 19 |
*/ |
20 | 20 |
|
21 |
+#include "libavutil/arm/cpu.h" |
|
21 | 22 |
#include "libavcodec/avcodec.h" |
22 | 23 |
#include "libavcodec/dsputil.h" |
23 | 24 |
#include "libavcodec/mpegvideo.h" |
... | ... |
@@ -40,11 +41,12 @@ void ff_dct_unquantize_h263_intra_neon(MpegEncContext *s, DCTELEM *block, |
40 | 40 |
|
41 | 41 |
void ff_MPV_common_init_arm(MpegEncContext *s) |
42 | 42 |
{ |
43 |
-#if HAVE_ARMV5TE |
|
44 |
- ff_MPV_common_init_armv5te(s); |
|
45 |
-#endif |
|
43 |
+ int cpu_flags = av_get_cpu_flags(); |
|
44 |
+ |
|
45 |
+ if (have_armv5te(cpu_flags)) |
|
46 |
+ ff_MPV_common_init_armv5te(s); |
|
46 | 47 |
|
47 |
- if (HAVE_NEON) { |
|
48 |
+ if (have_neon(cpu_flags)) { |
|
48 | 49 |
s->dct_unquantize_h263_intra = ff_dct_unquantize_h263_intra_neon; |
49 | 50 |
s->dct_unquantize_h263_inter = ff_dct_unquantize_h263_inter_neon; |
50 | 51 |
} |
... | ... |
@@ -19,6 +19,7 @@ |
19 | 19 |
*/ |
20 | 20 |
|
21 | 21 |
#include "config.h" |
22 |
+#include "libavutil/arm/cpu.h" |
|
22 | 23 |
#include "libavutil/attributes.h" |
23 | 24 |
#include "libavcodec/sbrdsp.h" |
24 | 25 |
|
... | ... |
@@ -51,7 +52,9 @@ void ff_sbr_hf_apply_noise_3_neon(float Y[64][2], const float *s_m, |
51 | 51 |
|
52 | 52 |
av_cold void ff_sbrdsp_init_arm(SBRDSPContext *s) |
53 | 53 |
{ |
54 |
- if (HAVE_NEON) { |
|
54 |
+ int cpu_flags = av_get_cpu_flags(); |
|
55 |
+ |
|
56 |
+ if (have_neon(cpu_flags)) { |
|
55 | 57 |
s->sum64x5 = ff_sbr_sum64x5_neon; |
56 | 58 |
s->sum_square = ff_sbr_sum_square_neon; |
57 | 59 |
s->neg_odd_64 = ff_sbr_neg_odd_64_neon; |
... | ... |
@@ -19,6 +19,8 @@ |
19 | 19 |
*/ |
20 | 20 |
|
21 | 21 |
#include <stdint.h> |
22 |
+ |
|
23 |
+#include "libavutil/arm/cpu.h" |
|
22 | 24 |
#include "libavcodec/avcodec.h" |
23 | 25 |
#include "libavcodec/vp56dsp.h" |
24 | 26 |
|
... | ... |
@@ -27,7 +29,9 @@ void ff_vp6_edge_filter_ver_neon(uint8_t *yuv, int stride, int t); |
27 | 27 |
|
28 | 28 |
void ff_vp56dsp_init_arm(VP56DSPContext *s, enum CodecID codec) |
29 | 29 |
{ |
30 |
- if (codec != CODEC_ID_VP5 && HAVE_NEON) { |
|
30 |
+ int cpu_flags = av_get_cpu_flags(); |
|
31 |
+ |
|
32 |
+ if (codec != CODEC_ID_VP5 && have_neon(cpu_flags)) { |
|
31 | 33 |
s->edge_filter_hor = ff_vp6_edge_filter_hor_neon; |
32 | 34 |
s->edge_filter_ver = ff_vp6_edge_filter_ver_neon; |
33 | 35 |
} |
... | ... |
@@ -17,6 +17,8 @@ |
17 | 17 |
*/ |
18 | 18 |
|
19 | 19 |
#include <stdint.h> |
20 |
+ |
|
21 |
+#include "libavutil/arm/cpu.h" |
|
20 | 22 |
#include "libavcodec/vp8dsp.h" |
21 | 23 |
|
22 | 24 |
void ff_vp8_luma_dc_wht_dc_armv6(DCTELEM block[4][4][16], DCTELEM dc[16]); |
... | ... |
@@ -301,7 +303,9 @@ av_cold void ff_vp8dsp_init_arm(VP8DSPContext *dsp) |
301 | 301 |
dsp->put_vp8_bilinear_pixels_tab[2][2][0] = ff_put_vp8_bilin4_v_##opt; \ |
302 | 302 |
dsp->put_vp8_bilinear_pixels_tab[2][2][1] = ff_put_vp8_bilin4_hv_##opt; \ |
303 | 303 |
dsp->put_vp8_bilinear_pixels_tab[2][2][2] = ff_put_vp8_bilin4_hv_##opt |
304 |
- if (HAVE_NEON) { |
|
304 |
+ int cpu_flags = av_get_cpu_flags(); |
|
305 |
+ |
|
306 |
+ if (have_neon(cpu_flags)) { |
|
305 | 307 |
set_func_ptrs(neon); |
306 | 308 |
} else if (HAVE_ARMV6) { |
307 | 309 |
set_func_ptrs(armv6); |
... | ... |
@@ -1451,7 +1451,7 @@ typedef struct AVCodecContext { |
1451 | 1451 |
int width, height; |
1452 | 1452 |
|
1453 | 1453 |
/** |
1454 |
- * Bitstream width / height, may be different from width/height if lowres enabled. |
|
1454 |
+ * Bitstream width / height, may be different from width/height. |
|
1455 | 1455 |
* - encoding: unused |
1456 | 1456 |
* - decoding: Set by user before init if known. Codec should override / dynamically change if needed. |
1457 | 1457 |
*/ |
... | ... |
@@ -2649,7 +2649,7 @@ typedef struct AVCodecContext { |
2649 | 2649 |
* - encoding: unused |
2650 | 2650 |
* - decoding: Set by user. |
2651 | 2651 |
*/ |
2652 |
- int lowres; |
|
2652 |
+ attribute_deprecated int lowres; |
|
2653 | 2653 |
|
2654 | 2654 |
/** |
2655 | 2655 |
* the picture in the bitstream |
... | ... |
@@ -2920,7 +2920,7 @@ typedef struct AVCodec { |
2920 | 2920 |
const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0 |
2921 | 2921 |
const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1 |
2922 | 2922 |
const uint64_t *channel_layouts; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0 |
2923 |
- uint8_t max_lowres; ///< maximum value for lowres supported by the decoder |
|
2923 |
+ attribute_deprecated uint8_t max_lowres; ///< maximum value for lowres supported by the decoder |
|
2924 | 2924 |
const AVClass *priv_class; ///< AVClass for the private context |
2925 | 2925 |
const AVProfile *profiles; ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN} |
2926 | 2926 |
|
... | ... |
@@ -381,38 +381,6 @@ void ff_put_pixels_clamped_c(const DCTELEM *block, uint8_t *restrict pixels, |
381 | 381 |
} |
382 | 382 |
} |
383 | 383 |
|
384 |
-static void put_pixels_clamped4_c(const DCTELEM *block, uint8_t *restrict pixels, |
|
385 |
- int line_size) |
|
386 |
-{ |
|
387 |
- int i; |
|
388 |
- |
|
389 |
- /* read the pixels */ |
|
390 |
- for(i=0;i<4;i++) { |
|
391 |
- pixels[0] = av_clip_uint8(block[0]); |
|
392 |
- pixels[1] = av_clip_uint8(block[1]); |
|
393 |
- pixels[2] = av_clip_uint8(block[2]); |
|
394 |
- pixels[3] = av_clip_uint8(block[3]); |
|
395 |
- |
|
396 |
- pixels += line_size; |
|
397 |
- block += 8; |
|
398 |
- } |
|
399 |
-} |
|
400 |
- |
|
401 |
-static void put_pixels_clamped2_c(const DCTELEM *block, uint8_t *restrict pixels, |
|
402 |
- int line_size) |
|
403 |
-{ |
|
404 |
- int i; |
|
405 |
- |
|
406 |
- /* read the pixels */ |
|
407 |
- for(i=0;i<2;i++) { |
|
408 |
- pixels[0] = av_clip_uint8(block[0]); |
|
409 |
- pixels[1] = av_clip_uint8(block[1]); |
|
410 |
- |
|
411 |
- pixels += line_size; |
|
412 |
- block += 8; |
|
413 |
- } |
|
414 |
-} |
|
415 |
- |
|
416 | 384 |
void ff_put_signed_pixels_clamped_c(const DCTELEM *block, |
417 | 385 |
uint8_t *restrict pixels, |
418 | 386 |
int line_size) |
... | ... |
@@ -454,36 +422,6 @@ void ff_add_pixels_clamped_c(const DCTELEM *block, uint8_t *restrict pixels, |
454 | 454 |
} |
455 | 455 |
} |
456 | 456 |
|
457 |
-static void add_pixels_clamped4_c(const DCTELEM *block, uint8_t *restrict pixels, |
|
458 |
- int line_size) |
|
459 |
-{ |
|
460 |
- int i; |
|
461 |
- |
|
462 |
- /* read the pixels */ |
|
463 |
- for(i=0;i<4;i++) { |
|
464 |
- pixels[0] = av_clip_uint8(pixels[0] + block[0]); |
|
465 |
- pixels[1] = av_clip_uint8(pixels[1] + block[1]); |
|
466 |
- pixels[2] = av_clip_uint8(pixels[2] + block[2]); |
|
467 |
- pixels[3] = av_clip_uint8(pixels[3] + block[3]); |
|
468 |
- pixels += line_size; |
|
469 |
- block += 8; |
|
470 |
- } |
|
471 |
-} |
|
472 |
- |
|
473 |
-static void add_pixels_clamped2_c(const DCTELEM *block, uint8_t *restrict pixels, |
|
474 |
- int line_size) |
|
475 |
-{ |
|
476 |
- int i; |
|
477 |
- |
|
478 |
- /* read the pixels */ |
|
479 |
- for(i=0;i<2;i++) { |
|
480 |
- pixels[0] = av_clip_uint8(pixels[0] + block[0]); |
|
481 |
- pixels[1] = av_clip_uint8(pixels[1] + block[1]); |
|
482 |
- pixels += line_size; |
|
483 |
- block += 8; |
|
484 |
- } |
|
485 |
-} |
|
486 |
- |
|
487 | 457 |
static int sum_abs_dctelem_c(DCTELEM *block) |
488 | 458 |
{ |
489 | 459 |
int sum=0, i; |
... | ... |
@@ -2746,37 +2684,6 @@ static void ff_jref_idct_add(uint8_t *dest, int line_size, DCTELEM *block) |
2746 | 2746 |
ff_add_pixels_clamped_c(block, dest, line_size); |
2747 | 2747 |
} |
2748 | 2748 |
|
2749 |
-static void ff_jref_idct4_put(uint8_t *dest, int line_size, DCTELEM *block) |
|
2750 |
-{ |
|
2751 |
- ff_j_rev_dct4 (block); |
|
2752 |
- put_pixels_clamped4_c(block, dest, line_size); |
|
2753 |
-} |
|
2754 |
-static void ff_jref_idct4_add(uint8_t *dest, int line_size, DCTELEM *block) |
|
2755 |
-{ |
|
2756 |
- ff_j_rev_dct4 (block); |
|
2757 |
- add_pixels_clamped4_c(block, dest, line_size); |
|
2758 |
-} |
|
2759 |
- |
|
2760 |
-static void ff_jref_idct2_put(uint8_t *dest, int line_size, DCTELEM *block) |
|
2761 |
-{ |
|
2762 |
- ff_j_rev_dct2 (block); |
|
2763 |
- put_pixels_clamped2_c(block, dest, line_size); |
|
2764 |
-} |
|
2765 |
-static void ff_jref_idct2_add(uint8_t *dest, int line_size, DCTELEM *block) |
|
2766 |
-{ |
|
2767 |
- ff_j_rev_dct2 (block); |
|
2768 |
- add_pixels_clamped2_c(block, dest, line_size); |
|
2769 |
-} |
|
2770 |
- |
|
2771 |
-static void ff_jref_idct1_put(uint8_t *dest, int line_size, DCTELEM *block) |
|
2772 |
-{ |
|
2773 |
- dest[0] = av_clip_uint8((block[0] + 4)>>3); |
|
2774 |
-} |
|
2775 |
-static void ff_jref_idct1_add(uint8_t *dest, int line_size, DCTELEM *block) |
|
2776 |
-{ |
|
2777 |
- dest[0] = av_clip_uint8(dest[0] + ((block[0] + 4)>>3)); |
|
2778 |
-} |
|
2779 |
- |
|
2780 | 2749 |
static void just_return(void *mem av_unused, int stride av_unused, int h av_unused) { return; } |
2781 | 2750 |
|
2782 | 2751 |
/* init static data */ |
... | ... |
@@ -2843,28 +2750,12 @@ av_cold void ff_dsputil_init(DSPContext* c, AVCodecContext *avctx) |
2843 | 2843 |
} |
2844 | 2844 |
#endif //CONFIG_ENCODERS |
2845 | 2845 |
|
2846 |
- if(avctx->lowres==1){ |
|
2847 |
- c->idct_put= ff_jref_idct4_put; |
|
2848 |
- c->idct_add= ff_jref_idct4_add; |
|
2849 |
- c->idct = ff_j_rev_dct4; |
|
2850 |
- c->idct_permutation_type= FF_NO_IDCT_PERM; |
|
2851 |
- }else if(avctx->lowres==2){ |
|
2852 |
- c->idct_put= ff_jref_idct2_put; |
|
2853 |
- c->idct_add= ff_jref_idct2_add; |
|
2854 |
- c->idct = ff_j_rev_dct2; |
|
2855 |
- c->idct_permutation_type= FF_NO_IDCT_PERM; |
|
2856 |
- }else if(avctx->lowres==3){ |
|
2857 |
- c->idct_put= ff_jref_idct1_put; |
|
2858 |
- c->idct_add= ff_jref_idct1_add; |
|
2859 |
- c->idct = ff_j_rev_dct1; |
|
2860 |
- c->idct_permutation_type= FF_NO_IDCT_PERM; |
|
2861 |
- }else{ |
|
2862 |
- if (avctx->bits_per_raw_sample == 10) { |
|
2863 |
- c->idct_put = ff_simple_idct_put_10; |
|
2864 |
- c->idct_add = ff_simple_idct_add_10; |
|
2865 |
- c->idct = ff_simple_idct_10; |
|
2866 |
- c->idct_permutation_type = FF_NO_IDCT_PERM; |
|
2867 |
- } else { |
|
2846 |
+ if (avctx->bits_per_raw_sample == 10) { |
|
2847 |
+ c->idct_put = ff_simple_idct_put_10; |
|
2848 |
+ c->idct_add = ff_simple_idct_add_10; |
|
2849 |
+ c->idct = ff_simple_idct_10; |
|
2850 |
+ c->idct_permutation_type = FF_NO_IDCT_PERM; |
|
2851 |
+ } else { |
|
2868 | 2852 |
if(avctx->idct_algo==FF_IDCT_INT){ |
2869 | 2853 |
c->idct_put= ff_jref_idct_put; |
2870 | 2854 |
c->idct_add= ff_jref_idct_add; |
... | ... |
@@ -2895,7 +2786,6 @@ av_cold void ff_dsputil_init(DSPContext* c, AVCodecContext *avctx) |
2895 | 2895 |
c->idct = ff_simple_idct_8; |
2896 | 2896 |
c->idct_permutation_type= FF_NO_IDCT_PERM; |
2897 | 2897 |
} |
2898 |
- } |
|
2899 | 2898 |
} |
2900 | 2899 |
|
2901 | 2900 |
c->diff_pixels = diff_pixels_c; |
... | ... |
@@ -46,9 +46,6 @@ void ff_fdct248_islow_8(DCTELEM *data); |
46 | 46 |
void ff_fdct248_islow_10(DCTELEM *data); |
47 | 47 |
|
48 | 48 |
void ff_j_rev_dct (DCTELEM *data); |
49 |
-void ff_j_rev_dct4 (DCTELEM *data); |
|
50 |
-void ff_j_rev_dct2 (DCTELEM *data); |
|
51 |
-void ff_j_rev_dct1 (DCTELEM *data); |
|
52 | 49 |
void ff_wmv2_idct_c(DCTELEM *data); |
53 | 50 |
|
54 | 51 |
void ff_fdct_mmx(DCTELEM *block); |
... | ... |
@@ -311,13 +311,7 @@ av_cold int ff_dvvideo_init(AVCodecContext *avctx) |
311 | 311 |
/* 248DCT setup */ |
312 | 312 |
s->fdct[1] = dsp.fdct248; |
313 | 313 |
s->idct_put[1] = ff_simple_idct248_put; // FIXME: need to add it to DSP |
314 |
- if (avctx->lowres){ |
|
315 |
- for (i = 0; i < 64; i++){ |
|
316 |
- int j = ff_zigzag248_direct[i]; |
|
317 |
- s->dv_zigzag[1][i] = dsp.idct_permutation[(j & 7) + (j & 8) * 4 + (j & 48) / 2]; |
|
318 |
- } |
|
319 |
- }else |
|
320 |
- memcpy(s->dv_zigzag[1], ff_zigzag248_direct, 64); |
|
314 |
+ memcpy(s->dv_zigzag[1], ff_zigzag248_direct, 64); |
|
321 | 315 |
|
322 | 316 |
avctx->coded_frame = &s->picture; |
323 | 317 |
s->avctx = avctx; |
... | ... |
@@ -144,7 +144,7 @@ static int dv_decode_video_segment(AVCodecContext *avctx, void *arg) |
144 | 144 |
LOCAL_ALIGNED_16(DCTELEM, sblock, [5*DV_MAX_BPM], [64]); |
145 | 145 |
LOCAL_ALIGNED_16(uint8_t, mb_bit_buffer, [ 80 + FF_INPUT_BUFFER_PADDING_SIZE]); /* allow some slack */ |
146 | 146 |
LOCAL_ALIGNED_16(uint8_t, vs_bit_buffer, [5*80 + FF_INPUT_BUFFER_PADDING_SIZE]); /* allow some slack */ |
147 |
- const int log2_blocksize = 3-s->avctx->lowres; |
|
147 |
+ const int log2_blocksize = 3; |
|
148 | 148 |
int is_field_mode[5]; |
149 | 149 |
|
150 | 150 |
assert((((int)mb_bit_buffer) & 7) == 0); |
... | ... |
@@ -382,6 +382,5 @@ AVCodec ff_dvvideo_decoder = { |
382 | 382 |
.close = dvvideo_close, |
383 | 383 |
.decode = dvvideo_decode_frame, |
384 | 384 |
.capabilities = CODEC_CAP_DR1 | CODEC_CAP_SLICE_THREADS, |
385 |
- .max_lowres = 3, |
|
386 | 385 |
.long_name = NULL_IF_CONFIG_SMALL("DV (Digital Video)"), |
387 | 386 |
}; |
... | ... |
@@ -907,7 +907,7 @@ void ff_er_frame_end(MpegEncContext *s) |
907 | 907 |
|
908 | 908 |
/* We do not support ER of field pictures yet, |
909 | 909 |
* though it should not crash if enabled. */ |
910 |
- if (!s->err_recognition || s->error_count == 0 || s->avctx->lowres || |
|
910 |
+ if (!s->err_recognition || s->error_count == 0 || |
|
911 | 911 |
s->avctx->hwaccel || |
912 | 912 |
s->avctx->codec->capabilities&CODEC_CAP_HWACCEL_VDPAU || |
913 | 913 |
s->picture_structure != PICT_FRAME || |
... | ... |
@@ -127,7 +127,6 @@ AVCodec ff_flv_decoder = { |
127 | 127 |
.close = ff_h263_decode_end, |
128 | 128 |
.decode = ff_h263_decode_frame, |
129 | 129 |
.capabilities = CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1, |
130 |
- .max_lowres = 3, |
|
131 | 130 |
.long_name = NULL_IF_CONFIG_SMALL("Flash Video (FLV) / Sorenson Spark / Sorenson H.263"), |
132 | 131 |
.pix_fmts = ff_pixfmt_list_420, |
133 | 132 |
}; |
... | ... |
@@ -151,7 +151,7 @@ static int get_consumed_bytes(MpegEncContext *s, int buf_size){ |
151 | 151 |
|
152 | 152 |
static int decode_slice(MpegEncContext *s){ |
153 | 153 |
const int part_mask= s->partitioned_frame ? (ER_AC_END|ER_AC_ERROR) : 0x7F; |
154 |
- const int mb_size= 16>>s->avctx->lowres; |
|
154 |
+ const int mb_size = 16; |
|
155 | 155 |
s->last_resync_gb= s->gb; |
156 | 156 |
s->first_slice_line= 1; |
157 | 157 |
|
... | ... |
@@ -764,7 +764,6 @@ AVCodec ff_h263_decoder = { |
764 | 764 |
.capabilities = CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 | |
765 | 765 |
CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY, |
766 | 766 |
.flush = ff_mpeg_flush, |
767 |
- .max_lowres = 3, |
|
768 | 767 |
.long_name = NULL_IF_CONFIG_SMALL("H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 version 2"), |
769 | 768 |
.pix_fmts = ff_hwaccel_pixfmt_list_420, |
770 | 769 |
}; |
... | ... |
@@ -716,7 +716,6 @@ av_cold void ff_intrax8_common_end(IntraX8Context * w) |
716 | 716 |
* The parent codec must call MPV_frame_start(), ff_er_frame_start() before calling this function. |
717 | 717 |
* The parent codec must call ff_er_frame_end(), MPV_frame_end() after calling this function. |
718 | 718 |
* This function does not use MPV_decode_mb(). |
719 |
- * lowres decoding is theoretically impossible. |
|
720 | 719 |
* @param w pointer to IntraX8Context |
721 | 720 |
* @param dquant doubled quantizer, it would be odd in case of VC-1 halfpq==1. |
722 | 721 |
* @param quant_offset offset away from zero |
... | ... |
@@ -940,216 +940,3 @@ void ff_j_rev_dct(DCTBLOCK data) |
940 | 940 |
dataptr++; /* advance pointer to next column */ |
941 | 941 |
} |
942 | 942 |
} |
943 |
- |
|
944 |
-#undef DCTSIZE |
|
945 |
-#define DCTSIZE 4 |
|
946 |
-#define DCTSTRIDE 8 |
|
947 |
- |
|
948 |
-void ff_j_rev_dct4(DCTBLOCK data) |
|
949 |
-{ |
|
950 |
- int32_t tmp0, tmp1, tmp2, tmp3; |
|
951 |
- int32_t tmp10, tmp11, tmp12, tmp13; |
|
952 |
- int32_t z1; |
|
953 |
- int32_t d0, d2, d4, d6; |
|
954 |
- register DCTELEM *dataptr; |
|
955 |
- int rowctr; |
|
956 |
- |
|
957 |
- /* Pass 1: process rows. */ |
|
958 |
- /* Note results are scaled up by sqrt(8) compared to a true IDCT; */ |
|
959 |
- /* furthermore, we scale the results by 2**PASS1_BITS. */ |
|
960 |
- |
|
961 |
- data[0] += 4; |
|
962 |
- |
|
963 |
- dataptr = data; |
|
964 |
- |
|
965 |
- for (rowctr = DCTSIZE-1; rowctr >= 0; rowctr--) { |
|
966 |
- /* Due to quantization, we will usually find that many of the input |
|
967 |
- * coefficients are zero, especially the AC terms. We can exploit this |
|
968 |
- * by short-circuiting the IDCT calculation for any row in which all |
|
969 |
- * the AC terms are zero. In that case each output is equal to the |
|
970 |
- * DC coefficient (with scale factor as needed). |
|
971 |
- * With typical images and quantization tables, half or more of the |
|
972 |
- * row DCT calculations can be simplified this way. |
|
973 |
- */ |
|
974 |
- |
|
975 |
- register int *idataptr = (int*)dataptr; |
|
976 |
- |
|
977 |
- d0 = dataptr[0]; |
|
978 |
- d2 = dataptr[1]; |
|
979 |
- d4 = dataptr[2]; |
|
980 |
- d6 = dataptr[3]; |
|
981 |
- |
|
982 |
- if ((d2 | d4 | d6) == 0) { |
|
983 |
- /* AC terms all zero */ |
|
984 |
- if (d0) { |
|
985 |
- /* Compute a 32 bit value to assign. */ |
|
986 |
- DCTELEM dcval = (DCTELEM) (d0 << PASS1_BITS); |
|
987 |
- register int v = (dcval & 0xffff) | ((dcval << 16) & 0xffff0000); |
|
988 |
- |
|
989 |
- idataptr[0] = v; |
|
990 |
- idataptr[1] = v; |
|
991 |
- } |
|
992 |
- |
|
993 |
- dataptr += DCTSTRIDE; /* advance pointer to next row */ |
|
994 |
- continue; |
|
995 |
- } |
|
996 |
- |
|
997 |
- /* Even part: reverse the even part of the forward DCT. */ |
|
998 |
- /* The rotator is sqrt(2)*c(-6). */ |
|
999 |
- if (d6) { |
|
1000 |
- if (d2) { |
|
1001 |
- /* d0 != 0, d2 != 0, d4 != 0, d6 != 0 */ |
|
1002 |
- z1 = MULTIPLY(d2 + d6, FIX_0_541196100); |
|
1003 |
- tmp2 = z1 + MULTIPLY(-d6, FIX_1_847759065); |
|
1004 |
- tmp3 = z1 + MULTIPLY(d2, FIX_0_765366865); |
|
1005 |
- |
|
1006 |
- tmp0 = (d0 + d4) << CONST_BITS; |
|
1007 |
- tmp1 = (d0 - d4) << CONST_BITS; |
|
1008 |
- |
|
1009 |
- tmp10 = tmp0 + tmp3; |
|
1010 |
- tmp13 = tmp0 - tmp3; |
|
1011 |
- tmp11 = tmp1 + tmp2; |
|
1012 |
- tmp12 = tmp1 - tmp2; |
|
1013 |
- } else { |
|
1014 |
- /* d0 != 0, d2 == 0, d4 != 0, d6 != 0 */ |
|
1015 |
- tmp2 = MULTIPLY(-d6, FIX_1_306562965); |
|
1016 |
- tmp3 = MULTIPLY(d6, FIX_0_541196100); |
|
1017 |
- |
|
1018 |
- tmp0 = (d0 + d4) << CONST_BITS; |
|
1019 |
- tmp1 = (d0 - d4) << CONST_BITS; |
|
1020 |
- |
|
1021 |
- tmp10 = tmp0 + tmp3; |
|
1022 |
- tmp13 = tmp0 - tmp3; |
|
1023 |
- tmp11 = tmp1 + tmp2; |
|
1024 |
- tmp12 = tmp1 - tmp2; |
|
1025 |
- } |
|
1026 |
- } else { |
|
1027 |
- if (d2) { |
|
1028 |
- /* d0 != 0, d2 != 0, d4 != 0, d6 == 0 */ |
|
1029 |
- tmp2 = MULTIPLY(d2, FIX_0_541196100); |
|
1030 |
- tmp3 = MULTIPLY(d2, FIX_1_306562965); |
|
1031 |
- |
|
1032 |
- tmp0 = (d0 + d4) << CONST_BITS; |
|
1033 |
- tmp1 = (d0 - d4) << CONST_BITS; |
|
1034 |
- |
|
1035 |
- tmp10 = tmp0 + tmp3; |
|
1036 |
- tmp13 = tmp0 - tmp3; |
|
1037 |
- tmp11 = tmp1 + tmp2; |
|
1038 |
- tmp12 = tmp1 - tmp2; |
|
1039 |
- } else { |
|
1040 |
- /* d0 != 0, d2 == 0, d4 != 0, d6 == 0 */ |
|
1041 |
- tmp10 = tmp13 = (d0 + d4) << CONST_BITS; |
|
1042 |
- tmp11 = tmp12 = (d0 - d4) << CONST_BITS; |
|
1043 |
- } |
|
1044 |
- } |
|
1045 |
- |
|
1046 |
- /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */ |
|
1047 |
- |
|
1048 |
- dataptr[0] = (DCTELEM) DESCALE(tmp10, CONST_BITS-PASS1_BITS); |
|
1049 |
- dataptr[1] = (DCTELEM) DESCALE(tmp11, CONST_BITS-PASS1_BITS); |
|
1050 |
- dataptr[2] = (DCTELEM) DESCALE(tmp12, CONST_BITS-PASS1_BITS); |
|
1051 |
- dataptr[3] = (DCTELEM) DESCALE(tmp13, CONST_BITS-PASS1_BITS); |
|
1052 |
- |
|
1053 |
- dataptr += DCTSTRIDE; /* advance pointer to next row */ |
|
1054 |
- } |
|
1055 |
- |
|
1056 |
- /* Pass 2: process columns. */ |
|
1057 |
- /* Note that we must descale the results by a factor of 8 == 2**3, */ |
|
1058 |
- /* and also undo the PASS1_BITS scaling. */ |
|
1059 |
- |
|
1060 |
- dataptr = data; |
|
1061 |
- for (rowctr = DCTSIZE-1; rowctr >= 0; rowctr--) { |
|
1062 |
- /* Columns of zeroes can be exploited in the same way as we did with rows. |
|
1063 |
- * However, the row calculation has created many nonzero AC terms, so the |
|
1064 |
- * simplification applies less often (typically 5% to 10% of the time). |
|
1065 |
- * On machines with very fast multiplication, it's possible that the |
|
1066 |
- * test takes more time than it's worth. In that case this section |
|
1067 |
- * may be commented out. |
|
1068 |
- */ |
|
1069 |
- |
|
1070 |
- d0 = dataptr[DCTSTRIDE*0]; |
|
1071 |
- d2 = dataptr[DCTSTRIDE*1]; |
|
1072 |
- d4 = dataptr[DCTSTRIDE*2]; |
|
1073 |
- d6 = dataptr[DCTSTRIDE*3]; |
|
1074 |
- |
|
1075 |
- /* Even part: reverse the even part of the forward DCT. */ |
|
1076 |
- /* The rotator is sqrt(2)*c(-6). */ |
|
1077 |
- if (d6) { |
|
1078 |
- if (d2) { |
|
1079 |
- /* d0 != 0, d2 != 0, d4 != 0, d6 != 0 */ |
|
1080 |
- z1 = MULTIPLY(d2 + d6, FIX_0_541196100); |
|
1081 |
- tmp2 = z1 + MULTIPLY(-d6, FIX_1_847759065); |
|
1082 |
- tmp3 = z1 + MULTIPLY(d2, FIX_0_765366865); |
|
1083 |
- |
|
1084 |
- tmp0 = (d0 + d4) << CONST_BITS; |
|
1085 |
- tmp1 = (d0 - d4) << CONST_BITS; |
|
1086 |
- |
|
1087 |
- tmp10 = tmp0 + tmp3; |
|
1088 |
- tmp13 = tmp0 - tmp3; |
|
1089 |
- tmp11 = tmp1 + tmp2; |
|
1090 |
- tmp12 = tmp1 - tmp2; |
|
1091 |
- } else { |
|
1092 |
- /* d0 != 0, d2 == 0, d4 != 0, d6 != 0 */ |
|
1093 |
- tmp2 = MULTIPLY(-d6, FIX_1_306562965); |
|
1094 |
- tmp3 = MULTIPLY(d6, FIX_0_541196100); |
|
1095 |
- |
|
1096 |
- tmp0 = (d0 + d4) << CONST_BITS; |
|
1097 |
- tmp1 = (d0 - d4) << CONST_BITS; |
|
1098 |
- |
|
1099 |
- tmp10 = tmp0 + tmp3; |
|
1100 |
- tmp13 = tmp0 - tmp3; |
|
1101 |
- tmp11 = tmp1 + tmp2; |
|
1102 |
- tmp12 = tmp1 - tmp2; |
|
1103 |
- } |
|
1104 |
- } else { |
|
1105 |
- if (d2) { |
|
1106 |
- /* d0 != 0, d2 != 0, d4 != 0, d6 == 0 */ |
|
1107 |
- tmp2 = MULTIPLY(d2, FIX_0_541196100); |
|
1108 |
- tmp3 = MULTIPLY(d2, FIX_1_306562965); |
|
1109 |
- |
|
1110 |
- tmp0 = (d0 + d4) << CONST_BITS; |
|
1111 |
- tmp1 = (d0 - d4) << CONST_BITS; |
|
1112 |
- |
|
1113 |
- tmp10 = tmp0 + tmp3; |
|
1114 |
- tmp13 = tmp0 - tmp3; |
|
1115 |
- tmp11 = tmp1 + tmp2; |
|
1116 |
- tmp12 = tmp1 - tmp2; |
|
1117 |
- } else { |
|
1118 |
- /* d0 != 0, d2 == 0, d4 != 0, d6 == 0 */ |
|
1119 |
- tmp10 = tmp13 = (d0 + d4) << CONST_BITS; |
|
1120 |
- tmp11 = tmp12 = (d0 - d4) << CONST_BITS; |
|
1121 |
- } |
|
1122 |
- } |
|
1123 |
- |
|
1124 |
- /* Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 */ |
|
1125 |
- |
|
1126 |
- dataptr[DCTSTRIDE*0] = tmp10 >> (CONST_BITS+PASS1_BITS+3); |
|
1127 |
- dataptr[DCTSTRIDE*1] = tmp11 >> (CONST_BITS+PASS1_BITS+3); |
|
1128 |
- dataptr[DCTSTRIDE*2] = tmp12 >> (CONST_BITS+PASS1_BITS+3); |
|
1129 |
- dataptr[DCTSTRIDE*3] = tmp13 >> (CONST_BITS+PASS1_BITS+3); |
|
1130 |
- |
|
1131 |
- dataptr++; /* advance pointer to next column */ |
|
1132 |
- } |
|
1133 |
-} |
|
1134 |
- |
|
1135 |
-void ff_j_rev_dct2(DCTBLOCK data){ |
|
1136 |
- int d00, d01, d10, d11; |
|
1137 |
- |
|
1138 |
- data[0] += 4; |
|
1139 |
- d00 = data[0+0*DCTSTRIDE] + data[1+0*DCTSTRIDE]; |
|
1140 |
- d01 = data[0+0*DCTSTRIDE] - data[1+0*DCTSTRIDE]; |
|
1141 |
- d10 = data[0+1*DCTSTRIDE] + data[1+1*DCTSTRIDE]; |
|
1142 |
- d11 = data[0+1*DCTSTRIDE] - data[1+1*DCTSTRIDE]; |
|
1143 |
- |
|
1144 |
- data[0+0*DCTSTRIDE]= (d00 + d10)>>3; |
|
1145 |
- data[1+0*DCTSTRIDE]= (d01 + d11)>>3; |
|
1146 |
- data[0+1*DCTSTRIDE]= (d00 - d10)>>3; |
|
1147 |
- data[1+1*DCTSTRIDE]= (d01 - d11)>>3; |
|
1148 |
-} |
|
1149 |
- |
|
1150 |
-void ff_j_rev_dct1(DCTBLOCK data){ |
|
1151 |
- data[0] = (data[0] + 4)>>3; |
|
1152 |
-} |
|
1153 |
- |
|
1154 |
-#undef FIX |
|
1155 |
-#undef CONST_BITS |
... | ... |
@@ -286,7 +286,6 @@ static int libopenjpeg_decode_frame(AVCodecContext *avctx, |
286 | 286 |
} |
287 | 287 |
|
288 | 288 |
ctx->dec_params.cp_limit_decoding = NO_LIMITATION; |
289 |
- ctx->dec_params.cp_reduce = avctx->lowres; |
|
290 | 289 |
// Tie decoder with decoding parameters |
291 | 290 |
opj_setup_decoder(dec, &ctx->dec_params); |
292 | 291 |
stream = opj_cio_open((opj_common_ptr)dec, buf, buf_size); |
... | ... |
@@ -369,6 +368,6 @@ AVCodec ff_libopenjpeg_decoder = { |
369 | 369 |
.decode = libopenjpeg_decode_frame, |
370 | 370 |
.capabilities = CODEC_CAP_DR1 | CODEC_CAP_FRAME_THREADS, |
371 | 371 |
.max_lowres = 5, |
372 |
- .long_name = NULL_IF_CONFIG_SMALL("OpenJPEG JPEG 2000"), |
|
372 |
+ .long_name = NULL_IF_CONFIG_SMALL("OpenJPEG JPEG 2000"), |
|
373 | 373 |
.init_thread_copy = ONLY_IF_THREADS_ENABLED(libopenjpeg_decode_init_thread_copy), |
374 | 374 |
}; |
... | ... |
@@ -941,21 +941,6 @@ static int ljpeg_decode_yuv_scan(MJpegDecodeContext *s, int predictor, |
941 | 941 |
return 0; |
942 | 942 |
} |
943 | 943 |
|
944 |
-static av_always_inline void mjpeg_copy_block(uint8_t *dst, const uint8_t *src, |
|
945 |
- int linesize, int lowres) |
|
946 |
-{ |
|
947 |
- switch (lowres) { |
|
948 |
- case 0: copy_block8(dst, src, linesize, linesize, 8); |
|
949 |
- break; |
|
950 |
- case 1: copy_block4(dst, src, linesize, linesize, 4); |
|
951 |
- break; |
|
952 |
- case 2: copy_block2(dst, src, linesize, linesize, 2); |
|
953 |
- break; |
|
954 |
- case 3: *dst = *src; |
|
955 |
- break; |
|
956 |
- } |
|
957 |
-} |
|
958 |
- |
|
959 | 944 |
static int mjpeg_decode_scan(MJpegDecodeContext *s, int nb_components, int Ah, |
960 | 945 |
int Al, const uint8_t *mb_bitmask, |
961 | 946 |
const AVFrame *reference) |
... | ... |
@@ -1018,16 +1003,16 @@ static int mjpeg_decode_scan(MJpegDecodeContext *s, int nb_components, int Ah, |
1018 | 1018 |
x = 0; |
1019 | 1019 |
y = 0; |
1020 | 1020 |
for (j = 0; j < n; j++) { |
1021 |
- block_offset = (((linesize[c] * (v * mb_y + y) * 8) + |
|
1022 |
- (h * mb_x + x) * 8) >> s->avctx->lowres); |
|
1021 |
+ block_offset = ((linesize[c] * (v * mb_y + y) * 8) + |
|
1022 |
+ (h * mb_x + x) * 8); |
|
1023 | 1023 |
|
1024 | 1024 |
if (s->interlaced && s->bottom_field) |
1025 | 1025 |
block_offset += linesize[c] >> 1; |
1026 | 1026 |
ptr = data[c] + block_offset; |
1027 | 1027 |
if (!s->progressive) { |
1028 | 1028 |
if (copy_mb) |
1029 |
- mjpeg_copy_block(ptr, reference_data[c] + block_offset, |
|
1030 |
- linesize[c], s->avctx->lowres); |
|
1029 |
+ copy_block8(ptr, reference_data[c] + block_offset, |
|
1030 |
+ linesize[c], linesize[c], 8); |
|
1031 | 1031 |
else { |
1032 | 1032 |
s->dsp.clear_block(s->block); |
1033 | 1033 |
if (decode_block(s, s->block, i, |
... | ... |
@@ -1829,7 +1814,6 @@ AVCodec ff_mjpeg_decoder = { |
1829 | 1829 |
.close = ff_mjpeg_decode_end, |
1830 | 1830 |
.decode = ff_mjpeg_decode_frame, |
1831 | 1831 |
.capabilities = CODEC_CAP_DR1, |
1832 |
- .max_lowres = 3, |
|
1833 | 1832 |
.long_name = NULL_IF_CONFIG_SMALL("MJPEG (Motion JPEG)"), |
1834 | 1833 |
.priv_class = &mjpegdec_class, |
1835 | 1834 |
}; |
... | ... |
@@ -1843,6 +1827,5 @@ AVCodec ff_thp_decoder = { |
1843 | 1843 |
.close = ff_mjpeg_decode_end, |
1844 | 1844 |
.decode = ff_mjpeg_decode_frame, |
1845 | 1845 |
.capabilities = CODEC_CAP_DR1, |
1846 |
- .max_lowres = 3, |
|
1847 | 1846 |
.long_name = NULL_IF_CONFIG_SMALL("Nintendo Gamecube THP video"), |
1848 | 1847 |
}; |
... | ... |
@@ -1676,7 +1676,6 @@ static int mpeg_decode_slice(MpegEncContext *s, int mb_y, |
1676 | 1676 |
const uint8_t **buf, int buf_size) |
1677 | 1677 |
{ |
1678 | 1678 |
AVCodecContext *avctx = s->avctx; |
1679 |
- const int lowres = s->avctx->lowres; |
|
1680 | 1679 |
const int field_pic = s->picture_structure != PICT_FRAME; |
1681 | 1680 |
|
1682 | 1681 |
s->resync_mb_x = |
... | ... |
@@ -1797,14 +1796,14 @@ static int mpeg_decode_slice(MpegEncContext *s, int mb_y, |
1797 | 1797 |
} |
1798 | 1798 |
} |
1799 | 1799 |
|
1800 |
- s->dest[0] += 16 >> lowres; |
|
1801 |
- s->dest[1] +=(16 >> lowres) >> s->chroma_x_shift; |
|
1802 |
- s->dest[2] +=(16 >> lowres) >> s->chroma_x_shift; |
|
1800 |
+ s->dest[0] += 16; |
|
1801 |
+ s->dest[1] += 16 >> s->chroma_x_shift; |
|
1802 |
+ s->dest[2] += 16 >> s->chroma_x_shift; |
|
1803 | 1803 |
|
1804 | 1804 |
ff_MPV_decode_mb(s, s->block); |
1805 | 1805 |
|
1806 | 1806 |
if (++s->mb_x >= s->mb_width) { |
1807 |
- const int mb_size = 16 >> s->avctx->lowres; |
|
1807 |
+ const int mb_size = 16; |
|
1808 | 1808 |
|
1809 | 1809 |
ff_draw_horiz_band(s, mb_size*(s->mb_y >> field_pic), mb_size); |
1810 | 1810 |
ff_MPV_report_decode_progress(s); |
... | ... |
@@ -2579,7 +2578,6 @@ AVCodec ff_mpeg1video_decoder = { |
2579 | 2579 |
CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY | |
2580 | 2580 |
CODEC_CAP_SLICE_THREADS, |
2581 | 2581 |
.flush = flush, |
2582 |
- .max_lowres = 3, |
|
2583 | 2582 |
.long_name = NULL_IF_CONFIG_SMALL("MPEG-1 video"), |
2584 | 2583 |
.update_thread_context = ONLY_IF_THREADS_ENABLED(mpeg_decode_update_thread_context) |
2585 | 2584 |
}; |
... | ... |
@@ -2596,7 +2594,6 @@ AVCodec ff_mpeg2video_decoder = { |
2596 | 2596 |
CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY | |
2597 | 2597 |
CODEC_CAP_SLICE_THREADS, |
2598 | 2598 |
.flush = flush, |
2599 |
- .max_lowres = 3, |
|
2600 | 2599 |
.long_name = NULL_IF_CONFIG_SMALL("MPEG-2 video"), |
2601 | 2600 |
.profiles = NULL_IF_CONFIG_SMALL(mpeg2_video_profiles), |
2602 | 2601 |
}; |
... | ... |
@@ -2327,7 +2327,6 @@ AVCodec ff_mpeg4_decoder = { |
2327 | 2327 |
CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY | |
2328 | 2328 |
CODEC_CAP_FRAME_THREADS, |
2329 | 2329 |
.flush = ff_mpeg_flush, |
2330 |
- .max_lowres = 3, |
|
2331 | 2330 |
.long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2"), |
2332 | 2331 |
.pix_fmts = ff_hwaccel_pixfmt_list_420, |
2333 | 2332 |
.profiles = NULL_IF_CONFIG_SMALL(mpeg4_video_profiles), |
... | ... |
@@ -1784,381 +1784,6 @@ void ff_print_debug_info(MpegEncContext *s, AVFrame *pict) |
1784 | 1784 |
} |
1785 | 1785 |
} |
1786 | 1786 |
|
1787 |
-static inline int hpel_motion_lowres(MpegEncContext *s, |
|
1788 |
- uint8_t *dest, uint8_t *src, |
|
1789 |
- int field_based, int field_select, |
|
1790 |
- int src_x, int src_y, |
|
1791 |
- int width, int height, int stride, |
|
1792 |
- int h_edge_pos, int v_edge_pos, |
|
1793 |
- int w, int h, h264_chroma_mc_func *pix_op, |
|
1794 |
- int motion_x, int motion_y) |
|
1795 |
-{ |
|
1796 |
- const int lowres = s->avctx->lowres; |
|
1797 |
- const int op_index = FFMIN(lowres, 2); |
|
1798 |
- const int s_mask = (2 << lowres) - 1; |
|
1799 |
- int emu = 0; |
|
1800 |
- int sx, sy; |
|
1801 |
- |
|
1802 |
- if (s->quarter_sample) { |
|
1803 |
- motion_x /= 2; |
|
1804 |
- motion_y /= 2; |
|
1805 |
- } |
|
1806 |
- |
|
1807 |
- sx = motion_x & s_mask; |
|
1808 |
- sy = motion_y & s_mask; |
|
1809 |
- src_x += motion_x >> lowres + 1; |
|
1810 |
- src_y += motion_y >> lowres + 1; |
|
1811 |
- |
|
1812 |
- src += src_y * stride + src_x; |
|
1813 |
- |
|
1814 |
- if ((unsigned)src_x > FFMAX( h_edge_pos - (!!sx) - w, 0) || |
|
1815 |
- (unsigned)src_y > FFMAX((v_edge_pos >> field_based) - (!!sy) - h, 0)) { |
|
1816 |
- s->dsp.emulated_edge_mc(s->edge_emu_buffer, src, s->linesize, w + 1, |
|
1817 |
- (h + 1) << field_based, src_x, |
|
1818 |
- src_y << field_based, |
|
1819 |
- h_edge_pos, |
|
1820 |
- v_edge_pos); |
|
1821 |
- src = s->edge_emu_buffer; |
|
1822 |
- emu = 1; |
|
1823 |
- } |
|
1824 |
- |
|
1825 |
- sx = (sx << 2) >> lowres; |
|
1826 |
- sy = (sy << 2) >> lowres; |
|
1827 |
- if (field_select) |
|
1828 |
- src += s->linesize; |
|
1829 |
- pix_op[op_index](dest, src, stride, h, sx, sy); |
|
1830 |
- return emu; |
|
1831 |
-} |
|
1832 |
- |
|
1833 |
-/* apply one mpeg motion vector to the three components */ |
|
1834 |
-static av_always_inline void mpeg_motion_lowres(MpegEncContext *s, |
|
1835 |
- uint8_t *dest_y, |
|
1836 |
- uint8_t *dest_cb, |
|
1837 |
- uint8_t *dest_cr, |
|
1838 |
- int field_based, |
|
1839 |
- int bottom_field, |
|
1840 |
- int field_select, |
|
1841 |
- uint8_t **ref_picture, |
|
1842 |
- h264_chroma_mc_func *pix_op, |
|
1843 |
- int motion_x, int motion_y, |
|
1844 |
- int h, int mb_y) |
|
1845 |
-{ |
|
1846 |
- uint8_t *ptr_y, *ptr_cb, *ptr_cr; |
|
1847 |
- int mx, my, src_x, src_y, uvsrc_x, uvsrc_y, uvlinesize, linesize, sx, sy, |
|
1848 |
- uvsx, uvsy; |
|
1849 |
- const int lowres = s->avctx->lowres; |
|
1850 |
- const int op_index = FFMIN(lowres-1+s->chroma_x_shift, 2); |
|
1851 |
- const int block_s = 8>>lowres; |
|
1852 |
- const int s_mask = (2 << lowres) - 1; |
|
1853 |
- const int h_edge_pos = s->h_edge_pos >> lowres; |
|
1854 |
- const int v_edge_pos = s->v_edge_pos >> lowres; |
|
1855 |
- linesize = s->current_picture.f.linesize[0] << field_based; |
|
1856 |
- uvlinesize = s->current_picture.f.linesize[1] << field_based; |
|
1857 |
- |
|
1858 |
- // FIXME obviously not perfect but qpel will not work in lowres anyway |
|
1859 |
- if (s->quarter_sample) { |
|
1860 |
- motion_x /= 2; |
|
1861 |
- motion_y /= 2; |
|
1862 |
- } |
|
1863 |
- |
|
1864 |
- if(field_based){ |
|
1865 |
- motion_y += (bottom_field - field_select)*((1 << lowres)-1); |
|
1866 |
- } |
|
1867 |
- |
|
1868 |
- sx = motion_x & s_mask; |
|
1869 |
- sy = motion_y & s_mask; |
|
1870 |
- src_x = s->mb_x * 2 * block_s + (motion_x >> lowres + 1); |
|
1871 |
- src_y = (mb_y * 2 * block_s >> field_based) + (motion_y >> lowres + 1); |
|
1872 |
- |
|
1873 |
- if (s->out_format == FMT_H263) { |
|
1874 |
- uvsx = ((motion_x >> 1) & s_mask) | (sx & 1); |
|
1875 |
- uvsy = ((motion_y >> 1) & s_mask) | (sy & 1); |
|
1876 |
- uvsrc_x = src_x >> 1; |
|
1877 |
- uvsrc_y = src_y >> 1; |
|
1878 |
- } else if (s->out_format == FMT_H261) { |
|
1879 |
- // even chroma mv's are full pel in H261 |
|
1880 |
- mx = motion_x / 4; |
|
1881 |
- my = motion_y / 4; |
|
1882 |
- uvsx = (2 * mx) & s_mask; |
|
1883 |
- uvsy = (2 * my) & s_mask; |
|
1884 |
- uvsrc_x = s->mb_x * block_s + (mx >> lowres); |
|
1885 |
- uvsrc_y = mb_y * block_s + (my >> lowres); |
|
1886 |
- } else { |
|
1887 |
- if(s->chroma_y_shift){ |
|
1888 |
- mx = motion_x / 2; |
|
1889 |
- my = motion_y / 2; |
|
1890 |
- uvsx = mx & s_mask; |
|
1891 |
- uvsy = my & s_mask; |
|
1892 |
- uvsrc_x = s->mb_x * block_s + (mx >> lowres + 1); |
|
1893 |
- uvsrc_y = (mb_y * block_s >> field_based) + (my >> lowres + 1); |
|
1894 |
- } else { |
|
1895 |
- if(s->chroma_x_shift){ |
|
1896 |
- //Chroma422 |
|
1897 |
- mx = motion_x / 2; |
|
1898 |
- uvsx = mx & s_mask; |
|
1899 |
- uvsy = motion_y & s_mask; |
|
1900 |
- uvsrc_y = src_y; |
|
1901 |
- uvsrc_x = s->mb_x*block_s + (mx >> (lowres+1)); |
|
1902 |
- } else { |
|
1903 |
- //Chroma444 |
|
1904 |
- uvsx = motion_x & s_mask; |
|
1905 |
- uvsy = motion_y & s_mask; |
|
1906 |
- uvsrc_x = src_x; |
|
1907 |
- uvsrc_y = src_y; |
|
1908 |
- } |
|
1909 |
- } |
|
1910 |
- } |
|
1911 |
- |
|
1912 |
- ptr_y = ref_picture[0] + src_y * linesize + src_x; |
|
1913 |
- ptr_cb = ref_picture[1] + uvsrc_y * uvlinesize + uvsrc_x; |
|
1914 |
- ptr_cr = ref_picture[2] + uvsrc_y * uvlinesize + uvsrc_x; |
|
1915 |
- |
|
1916 |
- if ((unsigned) src_x > FFMAX( h_edge_pos - (!!sx) - 2 * block_s, 0) || |
|
1917 |
- (unsigned) src_y > FFMAX((v_edge_pos >> field_based) - (!!sy) - h, 0)) { |
|
1918 |
- s->dsp.emulated_edge_mc(s->edge_emu_buffer, ptr_y, |
|
1919 |
- s->linesize, 17, 17 + field_based, |
|
1920 |
- src_x, src_y << field_based, h_edge_pos, |
|
1921 |
- v_edge_pos); |
|
1922 |
- ptr_y = s->edge_emu_buffer; |
|
1923 |
- if (!CONFIG_GRAY || !(s->flags & CODEC_FLAG_GRAY)) { |
|
1924 |
- uint8_t *uvbuf = s->edge_emu_buffer + 18 * s->linesize; |
|
1925 |
- s->dsp.emulated_edge_mc(uvbuf , ptr_cb, s->uvlinesize, 9, |
|
1926 |
- 9 + field_based, |
|
1927 |
- uvsrc_x, uvsrc_y << field_based, |
|
1928 |
- h_edge_pos >> 1, v_edge_pos >> 1); |
|
1929 |
- s->dsp.emulated_edge_mc(uvbuf + 16, ptr_cr, s->uvlinesize, 9, |
|
1930 |
- 9 + field_based, |
|
1931 |
- uvsrc_x, uvsrc_y << field_based, |
|
1932 |
- h_edge_pos >> 1, v_edge_pos >> 1); |
|
1933 |
- ptr_cb = uvbuf; |
|
1934 |
- ptr_cr = uvbuf + 16; |
|
1935 |
- } |
|
1936 |
- } |
|
1937 |
- |
|
1938 |
- // FIXME use this for field pix too instead of the obnoxious hack which changes picture.f.data |
|
1939 |
- if (bottom_field) { |
|
1940 |
- dest_y += s->linesize; |
|
1941 |
- dest_cb += s->uvlinesize; |
|
1942 |
- dest_cr += s->uvlinesize; |
|
1943 |
- } |
|
1944 |
- |
|
1945 |
- if (field_select) { |
|
1946 |
- ptr_y += s->linesize; |
|
1947 |
- ptr_cb += s->uvlinesize; |
|
1948 |
- ptr_cr += s->uvlinesize; |
|
1949 |
- } |
|
1950 |
- |
|
1951 |
- sx = (sx << 2) >> lowres; |
|
1952 |
- sy = (sy << 2) >> lowres; |
|
1953 |
- pix_op[lowres - 1](dest_y, ptr_y, linesize, h, sx, sy); |
|
1954 |
- |
|
1955 |
- if (!CONFIG_GRAY || !(s->flags & CODEC_FLAG_GRAY)) { |
|
1956 |
- uvsx = (uvsx << 2) >> lowres; |
|
1957 |
- uvsy = (uvsy << 2) >> lowres; |
|
1958 |
- if (h >> s->chroma_y_shift) { |
|
1959 |
- pix_op[op_index](dest_cb, ptr_cb, uvlinesize, h >> s->chroma_y_shift, uvsx, uvsy); |
|
1960 |
- pix_op[op_index](dest_cr, ptr_cr, uvlinesize, h >> s->chroma_y_shift, uvsx, uvsy); |
|
1961 |
- } |
|
1962 |
- } |
|
1963 |
- // FIXME h261 lowres loop filter |
|
1964 |
-} |
|
1965 |
- |
|
1966 |
-static inline void chroma_4mv_motion_lowres(MpegEncContext *s, |
|
1967 |
- uint8_t *dest_cb, uint8_t *dest_cr, |
|
1968 |
- uint8_t **ref_picture, |
|
1969 |
- h264_chroma_mc_func * pix_op, |
|
1970 |
- int mx, int my) |
|
1971 |
-{ |
|
1972 |
- const int lowres = s->avctx->lowres; |
|
1973 |
- const int op_index = FFMIN(lowres, 2); |
|
1974 |
- const int block_s = 8 >> lowres; |
|
1975 |
- const int s_mask = (2 << lowres) - 1; |
|
1976 |
- const int h_edge_pos = s->h_edge_pos >> lowres + 1; |
|
1977 |
- const int v_edge_pos = s->v_edge_pos >> lowres + 1; |
|
1978 |
- int emu = 0, src_x, src_y, offset, sx, sy; |
|
1979 |
- uint8_t *ptr; |
|
1980 |
- |
|
1981 |
- if (s->quarter_sample) { |
|
1982 |
- mx /= 2; |
|
1983 |
- my /= 2; |
|
1984 |
- } |
|
1985 |
- |
|
1986 |
- /* In case of 8X8, we construct a single chroma motion vector |
|
1987 |
- with a special rounding */ |
|
1988 |
- mx = ff_h263_round_chroma(mx); |
|
1989 |
- my = ff_h263_round_chroma(my); |
|
1990 |
- |
|
1991 |
- sx = mx & s_mask; |
|
1992 |
- sy = my & s_mask; |
|
1993 |
- src_x = s->mb_x * block_s + (mx >> lowres + 1); |
|
1994 |
- src_y = s->mb_y * block_s + (my >> lowres + 1); |
|
1995 |
- |
|
1996 |
- offset = src_y * s->uvlinesize + src_x; |
|
1997 |
- ptr = ref_picture[1] + offset; |
|
1998 |
- if (s->flags & CODEC_FLAG_EMU_EDGE) { |
|
1999 |
- if ((unsigned) src_x > FFMAX(h_edge_pos - (!!sx) - block_s, 0) || |
|
2000 |
- (unsigned) src_y > FFMAX(v_edge_pos - (!!sy) - block_s, 0)) { |
|
2001 |
- s->dsp.emulated_edge_mc(s->edge_emu_buffer, ptr, s->uvlinesize, |
|
2002 |
- 9, 9, src_x, src_y, h_edge_pos, v_edge_pos); |
|
2003 |
- ptr = s->edge_emu_buffer; |
|
2004 |
- emu = 1; |
|
2005 |
- } |
|
2006 |
- } |
|
2007 |
- sx = (sx << 2) >> lowres; |
|
2008 |
- sy = (sy << 2) >> lowres; |
|
2009 |
- pix_op[op_index](dest_cb, ptr, s->uvlinesize, block_s, sx, sy); |
|
2010 |
- |
|
2011 |
- ptr = ref_picture[2] + offset; |
|
2012 |
- if (emu) { |
|
2013 |
- s->dsp.emulated_edge_mc(s->edge_emu_buffer, ptr, s->uvlinesize, 9, 9, |
|
2014 |
- src_x, src_y, h_edge_pos, v_edge_pos); |
|
2015 |
- ptr = s->edge_emu_buffer; |
|
2016 |
- } |
|
2017 |
- pix_op[op_index](dest_cr, ptr, s->uvlinesize, block_s, sx, sy); |
|
2018 |
-} |
|
2019 |
- |
|
2020 |
-/** |
|
2021 |
- * motion compensation of a single macroblock |
|
2022 |
- * @param s context |
|
2023 |
- * @param dest_y luma destination pointer |
|
2024 |
- * @param dest_cb chroma cb/u destination pointer |
|
2025 |
- * @param dest_cr chroma cr/v destination pointer |
|
2026 |
- * @param dir direction (0->forward, 1->backward) |
|
2027 |
- * @param ref_picture array[3] of pointers to the 3 planes of the reference picture |
|
2028 |
- * @param pix_op halfpel motion compensation function (average or put normally) |
|
2029 |
- * the motion vectors are taken from s->mv and the MV type from s->mv_type |
|
2030 |
- */ |
|
2031 |
-static inline void MPV_motion_lowres(MpegEncContext *s, |
|
2032 |
- uint8_t *dest_y, uint8_t *dest_cb, |
|
2033 |
- uint8_t *dest_cr, |
|
2034 |
- int dir, uint8_t **ref_picture, |
|
2035 |
- h264_chroma_mc_func *pix_op) |
|
2036 |
-{ |
|
2037 |
- int mx, my; |
|
2038 |
- int mb_x, mb_y, i; |
|
2039 |
- const int lowres = s->avctx->lowres; |
|
2040 |
- const int block_s = 8 >>lowres; |
|
2041 |
- |
|
2042 |
- mb_x = s->mb_x; |
|
2043 |
- mb_y = s->mb_y; |
|
2044 |
- |
|
2045 |
- switch (s->mv_type) { |
|
2046 |
- case MV_TYPE_16X16: |
|
2047 |
- mpeg_motion_lowres(s, dest_y, dest_cb, dest_cr, |
|
2048 |
- 0, 0, 0, |
|
2049 |
- ref_picture, pix_op, |
|
2050 |
- s->mv[dir][0][0], s->mv[dir][0][1], |
|
2051 |
- 2 * block_s, mb_y); |
|
2052 |
- break; |
|
2053 |
- case MV_TYPE_8X8: |
|
2054 |
- mx = 0; |
|
2055 |
- my = 0; |
|
2056 |
- for (i = 0; i < 4; i++) { |
|
2057 |
- hpel_motion_lowres(s, dest_y + ((i & 1) + (i >> 1) * |
|
2058 |
- s->linesize) * block_s, |
|
2059 |
- ref_picture[0], 0, 0, |
|
2060 |
- (2 * mb_x + (i & 1)) * block_s, |
|
2061 |
- (2 * mb_y + (i >> 1)) * block_s, |
|
2062 |
- s->width, s->height, s->linesize, |
|
2063 |
- s->h_edge_pos >> lowres, s->v_edge_pos >> lowres, |
|
2064 |
- block_s, block_s, pix_op, |
|
2065 |
- s->mv[dir][i][0], s->mv[dir][i][1]); |
|
2066 |
- |
|
2067 |
- mx += s->mv[dir][i][0]; |
|
2068 |
- my += s->mv[dir][i][1]; |
|
2069 |
- } |
|
2070 |
- |
|
2071 |
- if (!CONFIG_GRAY || !(s->flags & CODEC_FLAG_GRAY)) |
|
2072 |
- chroma_4mv_motion_lowres(s, dest_cb, dest_cr, ref_picture, |
|
2073 |
- pix_op, mx, my); |
|
2074 |
- break; |
|
2075 |
- case MV_TYPE_FIELD: |
|
2076 |
- if (s->picture_structure == PICT_FRAME) { |
|
2077 |
- /* top field */ |
|
2078 |
- mpeg_motion_lowres(s, dest_y, dest_cb, dest_cr, |
|
2079 |
- 1, 0, s->field_select[dir][0], |
|
2080 |
- ref_picture, pix_op, |
|
2081 |
- s->mv[dir][0][0], s->mv[dir][0][1], |
|
2082 |
- block_s, mb_y); |
|
2083 |
- /* bottom field */ |
|
2084 |
- mpeg_motion_lowres(s, dest_y, dest_cb, dest_cr, |
|
2085 |
- 1, 1, s->field_select[dir][1], |
|
2086 |
- ref_picture, pix_op, |
|
2087 |
- s->mv[dir][1][0], s->mv[dir][1][1], |
|
2088 |
- block_s, mb_y); |
|
2089 |
- } else { |
|
2090 |
- if (s->picture_structure != s->field_select[dir][0] + 1 && |
|
2091 |
- s->pict_type != AV_PICTURE_TYPE_B && !s->first_field) { |
|
2092 |
- ref_picture = s->current_picture_ptr->f.data; |
|
2093 |
- |
|
2094 |
- } |
|
2095 |
- mpeg_motion_lowres(s, dest_y, dest_cb, dest_cr, |
|
2096 |
- 0, 0, s->field_select[dir][0], |
|
2097 |
- ref_picture, pix_op, |
|
2098 |
- s->mv[dir][0][0], |
|
2099 |
- s->mv[dir][0][1], 2 * block_s, mb_y >> 1); |
|
2100 |
- } |
|
2101 |
- break; |
|
2102 |
- case MV_TYPE_16X8: |
|
2103 |
- for (i = 0; i < 2; i++) { |
|
2104 |
- uint8_t **ref2picture; |
|
2105 |
- |
|
2106 |
- if (s->picture_structure == s->field_select[dir][i] + 1 || |
|
2107 |
- s->pict_type == AV_PICTURE_TYPE_B || s->first_field) { |
|
2108 |
- ref2picture = ref_picture; |
|
2109 |
- } else { |
|
2110 |
- ref2picture = s->current_picture_ptr->f.data; |
|
2111 |
- } |
|
2112 |
- |
|
2113 |
- mpeg_motion_lowres(s, dest_y, dest_cb, dest_cr, |
|
2114 |
- 0, 0, s->field_select[dir][i], |
|
2115 |
- ref2picture, pix_op, |
|
2116 |
- s->mv[dir][i][0], s->mv[dir][i][1] + |
|
2117 |
- 2 * block_s * i, block_s, mb_y >> 1); |
|
2118 |
- |
|
2119 |
- dest_y += 2 * block_s * s->linesize; |
|
2120 |
- dest_cb += (2 * block_s >> s->chroma_y_shift) * s->uvlinesize; |
|
2121 |
- dest_cr += (2 * block_s >> s->chroma_y_shift) * s->uvlinesize; |
|
2122 |
- } |
|
2123 |
- break; |
|
2124 |
- case MV_TYPE_DMV: |
|
2125 |
- if (s->picture_structure == PICT_FRAME) { |
|
2126 |
- for (i = 0; i < 2; i++) { |
|
2127 |
- int j; |
|
2128 |
- for (j = 0; j < 2; j++) { |
|
2129 |
- mpeg_motion_lowres(s, dest_y, dest_cb, dest_cr, |
|
2130 |
- 1, j, j ^ i, |
|
2131 |
- ref_picture, pix_op, |
|
2132 |
- s->mv[dir][2 * i + j][0], |
|
2133 |
- s->mv[dir][2 * i + j][1], |
|
2134 |
- block_s, mb_y); |
|
2135 |
- } |
|
2136 |
- pix_op = s->dsp.avg_h264_chroma_pixels_tab; |
|
2137 |
- } |
|
2138 |
- } else { |
|
2139 |
- for (i = 0; i < 2; i++) { |
|
2140 |
- mpeg_motion_lowres(s, dest_y, dest_cb, dest_cr, |
|
2141 |
- 0, 0, s->picture_structure != i + 1, |
|
2142 |
- ref_picture, pix_op, |
|
2143 |
- s->mv[dir][2 * i][0],s->mv[dir][2 * i][1], |
|
2144 |
- 2 * block_s, mb_y >> 1); |
|
2145 |
- |
|
2146 |
- // after put we make avg of the same block |
|
2147 |
- pix_op = s->dsp.avg_h264_chroma_pixels_tab; |
|
2148 |
- |
|
2149 |
- // opposite parity is always in the same |
|
2150 |
- // frame if this is second field |
|
2151 |
- if (!s->first_field) { |
|
2152 |
- ref_picture = s->current_picture_ptr->f.data; |
|
2153 |
- } |
|
2154 |
- } |
|
2155 |
- } |
|
2156 |
- break; |
|
2157 |
- default: |
|
2158 |
- assert(0); |
|
2159 |
- } |
|
2160 |
-} |
|
2161 |
- |
|
2162 | 1787 |
/** |
2163 | 1788 |
* find the lowest MB row referenced in the MVs |
2164 | 1789 |
*/ |
... | ... |
@@ -2268,7 +1893,7 @@ void ff_clean_intra_table_entries(MpegEncContext *s) |
2268 | 2268 |
*/ |
2269 | 2269 |
static av_always_inline |
2270 | 2270 |
void MPV_decode_mb_internal(MpegEncContext *s, DCTELEM block[12][64], |
2271 |
- int lowres_flag, int is_mpeg12) |
|
2271 |
+ int is_mpeg12) |
|
2272 | 2272 |
{ |
2273 | 2273 |
const int mb_xy = s->mb_y * s->mb_stride + s->mb_x; |
2274 | 2274 |
if(CONFIG_MPEG_XVMC_DECODER && s->avctx->xvmc_acceleration){ |
... | ... |
@@ -2313,8 +1938,8 @@ void MPV_decode_mb_internal(MpegEncContext *s, DCTELEM block[12][64], |
2313 | 2313 |
qpel_mc_func (*op_qpix)[16]; |
2314 | 2314 |
const int linesize = s->current_picture.f.linesize[0]; //not s->linesize as this would be wrong for field pics |
2315 | 2315 |
const int uvlinesize = s->current_picture.f.linesize[1]; |
2316 |
- const int readable= s->pict_type != AV_PICTURE_TYPE_B || s->encoding || s->avctx->draw_horiz_band || lowres_flag; |
|
2317 |
- const int block_size= lowres_flag ? 8>>s->avctx->lowres : 8; |
|
2316 |
+ const int readable= s->pict_type != AV_PICTURE_TYPE_B || s->encoding || s->avctx->draw_horiz_band; |
|
2317 |
+ const int block_size = 8; |
|
2318 | 2318 |
|
2319 | 2319 |
/* avoid copy if macroblock skipped in last frame too */ |
2320 | 2320 |
/* skip only during decoding as we might trash the buffers during encoding a bit */ |
... | ... |
@@ -2363,31 +1988,19 @@ void MPV_decode_mb_internal(MpegEncContext *s, DCTELEM block[12][64], |
2363 | 2363 |
} |
2364 | 2364 |
} |
2365 | 2365 |
|
2366 |
- if(lowres_flag){ |
|
2367 |
- h264_chroma_mc_func *op_pix = s->dsp.put_h264_chroma_pixels_tab; |
|
2368 |
- |
|
2369 |
- if (s->mv_dir & MV_DIR_FORWARD) { |
|
2370 |
- MPV_motion_lowres(s, dest_y, dest_cb, dest_cr, 0, s->last_picture.f.data, op_pix); |
|
2371 |
- op_pix = s->dsp.avg_h264_chroma_pixels_tab; |
|
2372 |
- } |
|
2373 |
- if (s->mv_dir & MV_DIR_BACKWARD) { |
|
2374 |
- MPV_motion_lowres(s, dest_y, dest_cb, dest_cr, 1, s->next_picture.f.data, op_pix); |
|
2375 |
- } |
|
2366 |
+ op_qpix= s->me.qpel_put; |
|
2367 |
+ if ((!s->no_rounding) || s->pict_type==AV_PICTURE_TYPE_B){ |
|
2368 |
+ op_pix = s->dsp.put_pixels_tab; |
|
2376 | 2369 |
}else{ |
2377 |
- op_qpix= s->me.qpel_put; |
|
2378 |
- if ((!s->no_rounding) || s->pict_type==AV_PICTURE_TYPE_B){ |
|
2379 |
- op_pix = s->dsp.put_pixels_tab; |
|
2380 |
- }else{ |
|
2381 |
- op_pix = s->dsp.put_no_rnd_pixels_tab; |
|
2382 |
- } |
|
2383 |
- if (s->mv_dir & MV_DIR_FORWARD) { |
|
2384 |
- MPV_motion(s, dest_y, dest_cb, dest_cr, 0, s->last_picture.f.data, op_pix, op_qpix); |
|
2385 |
- op_pix = s->dsp.avg_pixels_tab; |
|
2386 |
- op_qpix= s->me.qpel_avg; |
|
2387 |
- } |
|
2388 |
- if (s->mv_dir & MV_DIR_BACKWARD) { |
|
2389 |
- MPV_motion(s, dest_y, dest_cb, dest_cr, 1, s->next_picture.f.data, op_pix, op_qpix); |
|
2390 |
- } |
|
2370 |
+ op_pix = s->dsp.put_no_rnd_pixels_tab; |
|
2371 |
+ } |
|
2372 |
+ if (s->mv_dir & MV_DIR_FORWARD) { |
|
2373 |
+ MPV_motion(s, dest_y, dest_cb, dest_cr, 0, s->last_picture.f.data, op_pix, op_qpix); |
|
2374 |
+ op_pix = s->dsp.avg_pixels_tab; |
|
2375 |
+ op_qpix= s->me.qpel_avg; |
|
2376 |
+ } |
|
2377 |
+ if (s->mv_dir & MV_DIR_BACKWARD) { |
|
2378 |
+ MPV_motion(s, dest_y, dest_cb, dest_cr, 1, s->next_picture.f.data, op_pix, op_qpix); |
|
2391 | 2379 |
} |
2392 | 2380 |
} |
2393 | 2381 |
|
... | ... |
@@ -2513,12 +2126,10 @@ skip_idct: |
2513 | 2513 |
void ff_MPV_decode_mb(MpegEncContext *s, DCTELEM block[12][64]){ |
2514 | 2514 |
#if !CONFIG_SMALL |
2515 | 2515 |
if(s->out_format == FMT_MPEG1) { |
2516 |
- if(s->avctx->lowres) MPV_decode_mb_internal(s, block, 1, 1); |
|
2517 |
- else MPV_decode_mb_internal(s, block, 0, 1); |
|
2516 |
+ MPV_decode_mb_internal(s, block, 1); |
|
2518 | 2517 |
} else |
2519 | 2518 |
#endif |
2520 |
- if(s->avctx->lowres) MPV_decode_mb_internal(s, block, 1, 0); |
|
2521 |
- else MPV_decode_mb_internal(s, block, 0, 0); |
|
2519 |
+ MPV_decode_mb_internal(s, block, 0); |
|
2522 | 2520 |
} |
2523 | 2521 |
|
2524 | 2522 |
/** |
... | ... |
@@ -2593,7 +2204,7 @@ void ff_draw_horiz_band(MpegEncContext *s, int y, int h){ |
2593 | 2593 |
void ff_init_block_index(MpegEncContext *s){ //FIXME maybe rename |
2594 | 2594 |
const int linesize = s->current_picture.f.linesize[0]; //not s->linesize as this would be wrong for field pics |
2595 | 2595 |
const int uvlinesize = s->current_picture.f.linesize[1]; |
2596 |
- const int mb_size= 4 - s->avctx->lowres; |
|
2596 |
+ const int mb_size= 4; |
|
2597 | 2597 |
|
2598 | 2598 |
s->block_index[0]= s->b8_stride*(s->mb_y*2 ) - 2 + s->mb_x*2; |
2599 | 2599 |
s->block_index[1]= s->b8_stride*(s->mb_y*2 ) - 1 + s->mb_x*2; |
... | ... |
@@ -793,7 +793,7 @@ extern const enum PixelFormat ff_pixfmt_list_420[]; |
793 | 793 |
extern const enum PixelFormat ff_hwaccel_pixfmt_list_420[]; |
794 | 794 |
|
795 | 795 |
static inline void ff_update_block_index(MpegEncContext *s){ |
796 |
- const int block_size= 8>>s->avctx->lowres; |
|
796 |
+ const int block_size = 8; |
|
797 | 797 |
|
798 | 798 |
s->block_index[0]+=2; |
799 | 799 |
s->block_index[1]+=2; |
... | ... |
@@ -1216,7 +1216,6 @@ AVCodec ff_msmpeg4v1_decoder = { |
1216 | 1216 |
.close = ff_h263_decode_end, |
1217 | 1217 |
.decode = ff_h263_decode_frame, |
1218 | 1218 |
.capabilities = CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1, |
1219 |
- .max_lowres = 3, |
|
1220 | 1219 |
.long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2 Microsoft variant version 1"), |
1221 | 1220 |
.pix_fmts = ff_pixfmt_list_420, |
1222 | 1221 |
}; |
... | ... |
@@ -1230,7 +1229,6 @@ AVCodec ff_msmpeg4v2_decoder = { |
1230 | 1230 |
.close = ff_h263_decode_end, |
1231 | 1231 |
.decode = ff_h263_decode_frame, |
1232 | 1232 |
.capabilities = CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1, |
1233 |
- .max_lowres = 3, |
|
1234 | 1233 |
.long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2 Microsoft variant version 2"), |
1235 | 1234 |
.pix_fmts = ff_pixfmt_list_420, |
1236 | 1235 |
}; |
... | ... |
@@ -1244,7 +1242,6 @@ AVCodec ff_msmpeg4v3_decoder = { |
1244 | 1244 |
.close = ff_h263_decode_end, |
1245 | 1245 |
.decode = ff_h263_decode_frame, |
1246 | 1246 |
.capabilities = CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1, |
1247 |
- .max_lowres = 3, |
|
1248 | 1247 |
.long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2 Microsoft variant version 3"), |
1249 | 1248 |
.pix_fmts = ff_pixfmt_list_420, |
1250 | 1249 |
}; |
... | ... |
@@ -1258,7 +1255,6 @@ AVCodec ff_wmv1_decoder = { |
1258 | 1258 |
.close = ff_h263_decode_end, |
1259 | 1259 |
.decode = ff_h263_decode_frame, |
1260 | 1260 |
.capabilities = CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1, |
1261 |
- .max_lowres = 3, |
|
1262 | 1261 |
.long_name = NULL_IF_CONFIG_SMALL("Windows Media Video 7"), |
1263 | 1262 |
.pix_fmts = ff_pixfmt_list_420, |
1264 | 1263 |
}; |
... | ... |
@@ -326,7 +326,6 @@ static const AVOption options[]={ |
326 | 326 |
{"dts_hd_ma", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_PROFILE_DTS_HD_MA }, INT_MIN, INT_MAX, A|E, "profile"}, |
327 | 327 |
{"level", NULL, OFFSET(level), AV_OPT_TYPE_INT, {.dbl = FF_LEVEL_UNKNOWN }, INT_MIN, INT_MAX, V|A|E, "level"}, |
328 | 328 |
{"unknown", NULL, 0, AV_OPT_TYPE_CONST, {.dbl = FF_LEVEL_UNKNOWN }, INT_MIN, INT_MAX, V|A|E, "level"}, |
329 |
-{"lowres", "decode at 1= 1/2, 2=1/4, 3=1/8 resolutions", OFFSET(lowres), AV_OPT_TYPE_INT, {.dbl = 0 }, 0, INT_MAX, V|A|D}, |
|
330 | 329 |
{"skip_threshold", "frame skip threshold", OFFSET(frame_skip_threshold), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E}, |
331 | 330 |
{"skip_factor", "frame skip factor", OFFSET(frame_skip_factor), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E}, |
332 | 331 |
{"skip_exp", "frame skip exponent", OFFSET(frame_skip_exp), AV_OPT_TYPE_INT, {.dbl = DEFAULT }, INT_MIN, INT_MAX, V|E}, |
... | ... |
@@ -187,7 +187,7 @@ void ff_dsputil_init_ppc(DSPContext* c, AVCodecContext *avctx) |
187 | 187 |
} |
188 | 188 |
#endif //CONFIG_ENCODERS |
189 | 189 |
|
190 |
- if (avctx->lowres == 0 && avctx->bits_per_raw_sample <= 8) { |
|
190 |
+ if (avctx->bits_per_raw_sample <= 8) { |
|
191 | 191 |
if ((avctx->idct_algo == FF_IDCT_AUTO) || |
192 | 192 |
(avctx->idct_algo == FF_IDCT_ALTIVEC)) { |
193 | 193 |
c->idct_put = ff_idct_put_altivec; |
... | ... |
@@ -435,8 +435,7 @@ av_log(s->avctx, AV_LOG_DEBUG, "\n");*/ |
435 | 435 |
// s->obmc=1; |
436 | 436 |
// s->umvplus=1; |
437 | 437 |
s->modified_quant=1; |
438 |
- if(!s->avctx->lowres) |
|
439 |
- s->loop_filter=1; |
|
438 |
+ s->loop_filter=1; |
|
440 | 439 |
|
441 | 440 |
if(s->avctx->debug & FF_DEBUG_PICT_INFO){ |
442 | 441 |
av_log(s->avctx, AV_LOG_INFO, "num:%5d x:%2d y:%2d type:%d qscale:%2d rnd:%d\n", |
... | ... |
@@ -755,7 +754,6 @@ AVCodec ff_rv10_decoder = { |
755 | 755 |
.close = rv10_decode_end, |
756 | 756 |
.decode = rv10_decode_frame, |
757 | 757 |
.capabilities = CODEC_CAP_DR1, |
758 |
- .max_lowres = 3, |
|
759 | 758 |
.long_name = NULL_IF_CONFIG_SMALL("RealVideo 1.0"), |
760 | 759 |
.pix_fmts = ff_pixfmt_list_420, |
761 | 760 |
}; |
... | ... |
@@ -770,7 +768,6 @@ AVCodec ff_rv20_decoder = { |
770 | 770 |
.decode = rv10_decode_frame, |
771 | 771 |
.capabilities = CODEC_CAP_DR1 | CODEC_CAP_DELAY, |
772 | 772 |
.flush = ff_mpeg_flush, |
773 |
- .max_lowres = 3, |
|
774 | 773 |
.long_name = NULL_IF_CONFIG_SMALL("RealVideo 2.0"), |
775 | 774 |
.pix_fmts = ff_pixfmt_list_420, |
776 | 775 |
}; |
... | ... |
@@ -149,8 +149,8 @@ unsigned avcodec_get_edge_width(void) |
149 | 149 |
void avcodec_set_dimensions(AVCodecContext *s, int width, int height){ |
150 | 150 |
s->coded_width = width; |
151 | 151 |
s->coded_height= height; |
152 |
- s->width = -((-width )>>s->lowres); |
|
153 |
- s->height= -((-height)>>s->lowres); |
|
152 |
+ s->width = width; |
|
153 |
+ s->height = height; |
|
154 | 154 |
} |
155 | 155 |
|
156 | 156 |
#define INTERNAL_BUFFER_SIZE (32+1) |
... | ... |
@@ -239,9 +239,8 @@ void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height, |
239 | 239 |
|
240 | 240 |
*width = FFALIGN(*width , w_align); |
241 | 241 |
*height= FFALIGN(*height, h_align); |
242 |
- if(s->codec_id == CODEC_ID_H264 || s->lowres) |
|
242 |
+ if (s->codec_id == CODEC_ID_H264) |
|
243 | 243 |
*height+=2; // some of the optimized chroma MC reads one line too much |
244 |
- // which is also done in mpeg decoders with lowres > 0 |
|
245 | 244 |
|
246 | 245 |
for (i = 0; i < 4; i++) |
247 | 246 |
linesize_align[i] = STRIDE_ALIGN; |
... | ... |
@@ -844,6 +843,7 @@ int attribute_align_arg avcodec_open2(AVCodecContext *avctx, AVCodec *codec, AVD |
844 | 844 |
ret = AVERROR(EINVAL); |
845 | 845 |
goto free_and_end; |
846 | 846 |
} |
847 |
+ |
|
847 | 848 |
if (av_codec_is_encoder(avctx->codec)) { |
848 | 849 |
int i; |
849 | 850 |
if (avctx->codec->sample_fmts) { |
... | ... |
@@ -3203,7 +3203,7 @@ void ff_dsputil_init_mmx(DSPContext *c, AVCodecContext *avctx) |
3203 | 3203 |
if (mm_flags & AV_CPU_FLAG_MMX) { |
3204 | 3204 |
const int idct_algo = avctx->idct_algo; |
3205 | 3205 |
|
3206 |
- if (avctx->lowres == 0 && avctx->bits_per_raw_sample <= 8) { |
|
3206 |
+ if (avctx->bits_per_raw_sample <= 8) { |
|
3207 | 3207 |
if (idct_algo == FF_IDCT_AUTO || idct_algo == FF_IDCT_SIMPLEMMX) { |
3208 | 3208 |
c->idct_put = ff_simple_idct_put_mmx; |
3209 | 3209 |
c->idct_add = ff_simple_idct_add_mmx; |
... | ... |
@@ -1852,7 +1852,7 @@ static void mov_build_index(MOVContext *mov, AVStream *st) |
1852 | 1852 |
unsigned int stts_sample = 0; |
1853 | 1853 |
unsigned int sample_size; |
1854 | 1854 |
unsigned int distance = 0; |
1855 |
- int key_off = sc->keyframe_count && sc->keyframes[0] == 1; |
|
1855 |
+ int key_off = (sc->keyframe_count && sc->keyframes[0] > 0) || (sc->stps_data && sc->stps_data[0] > 0); |
|
1856 | 1856 |
|
1857 | 1857 |
current_dts -= sc->dts_shift; |
1858 | 1858 |
|
0 | 1 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,30 @@ |
0 |
+/* |
|
1 |
+ * This file is part of Libav. |
|
2 |
+ * |
|
3 |
+ * Libav is free software; you can redistribute it and/or |
|
4 |
+ * modify it under the terms of the GNU Lesser General Public |
|
5 |
+ * License as published by the Free Software Foundation; either |
|
6 |
+ * version 2.1 of the License, or (at your option) any later version. |
|
7 |
+ * |
|
8 |
+ * Libav is distributed in the hope that it will be useful, |
|
9 |
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
10 |
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
11 |
+ * Lesser General Public License for more details. |
|
12 |
+ * |
|
13 |
+ * You should have received a copy of the GNU Lesser General Public |
|
14 |
+ * License along with Libav; if not, write to the Free Software |
|
15 |
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
|
16 |
+ */ |
|
17 |
+ |
|
18 |
+#include "libavutil/cpu.h" |
|
19 |
+#include "config.h" |
|
20 |
+ |
|
21 |
+int ff_get_cpu_flags_arm(void) |
|
22 |
+{ |
|
23 |
+ return AV_CPU_FLAG_ARMV5TE * HAVE_ARMV5TE | |
|
24 |
+ AV_CPU_FLAG_ARMV6 * HAVE_ARMV6 | |
|
25 |
+ AV_CPU_FLAG_ARMV6T2 * HAVE_ARMV6T2 | |
|
26 |
+ AV_CPU_FLAG_VFP * HAVE_ARMVFP | |
|
27 |
+ AV_CPU_FLAG_VFPV3 * HAVE_VFPV3 | |
|
28 |
+ AV_CPU_FLAG_NEON * HAVE_NEON; |
|
29 |
+} |
0 | 30 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,32 @@ |
0 |
+/* |
|
1 |
+ * This file is part of Libav. |
|
2 |
+ * |
|
3 |
+ * Libav is free software; you can redistribute it and/or |
|
4 |
+ * modify it under the terms of the GNU Lesser General Public |
|
5 |
+ * License as published by the Free Software Foundation; either |
|
6 |
+ * version 2.1 of the License, or (at your option) any later version. |
|
7 |
+ * |
|
8 |
+ * Libav is distributed in the hope that it will be useful, |
|
9 |
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
10 |
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
11 |
+ * Lesser General Public License for more details. |
|
12 |
+ * |
|
13 |
+ * You should have received a copy of the GNU Lesser General Public |
|
14 |
+ * License along with Libav; if not, write to the Free Software |
|
15 |
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
|
16 |
+ */ |
|
17 |
+ |
|
18 |
+#ifndef AVUTIL_ARM_CPU_H |
|
19 |
+#define AVUTIL_ARM_CPU_H |
|
20 |
+ |
|
21 |
+#include "config.h" |
|
22 |
+#include "libavutil/cpu.h" |
|
23 |
+ |
|
24 |
+#define have_armv5te(flags) (HAVE_ARMV5TE && ((flags) & AV_CPU_FLAG_ARMV5TE)) |
|
25 |
+#define have_armv6(flags) (HAVE_ARMV6 && ((flags) & AV_CPU_FLAG_ARMV6)) |
|
26 |
+#define have_armv6t2(flags) (HAVE_ARMV6T2 && ((flags) & AV_CPU_FLAG_ARMV6T2)) |
|
27 |
+#define have_vfp(flags) (HAVE_ARMVFP && ((flags) & AV_CPU_FLAG_VFP)) |
|
28 |
+#define have_vfpv3(flags) (HAVE_VFPV3 && ((flags) & AV_CPU_FLAG_VFPV3)) |
|
29 |
+#define have_neon(flags) (HAVE_NEON && ((flags) & AV_CPU_FLAG_NEON)) |
|
30 |
+ |
|
31 |
+#endif |
... | ... |
@@ -31,6 +31,7 @@ int av_get_cpu_flags(void) |
31 | 31 |
if (checked) |
32 | 32 |
return flags; |
33 | 33 |
|
34 |
+ if (ARCH_ARM) flags = ff_get_cpu_flags_arm(); |
|
34 | 35 |
if (ARCH_PPC) flags = ff_get_cpu_flags_ppc(); |
35 | 36 |
if (ARCH_X86) flags = ff_get_cpu_flags_x86(); |
36 | 37 |
|
... | ... |
@@ -54,7 +55,14 @@ static const struct { |
54 | 54 |
int flag; |
55 | 55 |
const char *name; |
56 | 56 |
} cpu_flag_tab[] = { |
57 |
-#if ARCH_PPC |
|
57 |
+#if ARCH_ARM |
|
58 |
+ { AV_CPU_FLAG_ARMV5TE, "armv5te" }, |
|
59 |
+ { AV_CPU_FLAG_ARMV6, "armv6" }, |
|
60 |
+ { AV_CPU_FLAG_ARMV6T2, "armv6t2" }, |
|
61 |
+ { AV_CPU_FLAG_VFP, "vfp" }, |
|
62 |
+ { AV_CPU_FLAG_VFPV3, "vfpv3" }, |
|
63 |
+ { AV_CPU_FLAG_NEON, "neon" }, |
|
64 |
+#elif ARCH_PPC |
|
58 | 65 |
{ AV_CPU_FLAG_ALTIVEC, "altivec" }, |
59 | 66 |
#elif ARCH_X86 |
60 | 67 |
{ AV_CPU_FLAG_MMX, "mmx" }, |
... | ... |
@@ -45,6 +45,13 @@ |
45 | 45 |
#define AV_CPU_FLAG_FMA4 0x0800 ///< Bulldozer FMA4 functions |
46 | 46 |
#define AV_CPU_FLAG_ALTIVEC 0x0001 ///< standard |
47 | 47 |
|
48 |
+#define AV_CPU_FLAG_ARMV5TE (1 << 0) |
|
49 |
+#define AV_CPU_FLAG_ARMV6 (1 << 1) |
|
50 |
+#define AV_CPU_FLAG_ARMV6T2 (1 << 2) |
|
51 |
+#define AV_CPU_FLAG_VFP (1 << 3) |
|
52 |
+#define AV_CPU_FLAG_VFPV3 (1 << 4) |
|
53 |
+#define AV_CPU_FLAG_NEON (1 << 5) |
|
54 |
+ |
|
48 | 55 |
/** |
49 | 56 |
* Return the flags which specify extensions supported by the CPU. |
50 | 57 |
*/ |
... | ... |
@@ -66,6 +73,7 @@ void av_force_cpu_flags(int flags); |
66 | 66 |
attribute_deprecated void av_set_cpu_flags_mask(int mask); |
67 | 67 |
|
68 | 68 |
/* The following CPU-specific functions shall not be called directly. */ |
69 |
+int ff_get_cpu_flags_arm(void); |
|
69 | 70 |
int ff_get_cpu_flags_ppc(void); |
70 | 71 |
int ff_get_cpu_flags_x86(void); |
71 | 72 |
|