Overview
avidemux3.changes
Changed
x
1
2
-------------------------------------------------------------------
3
+Sat Dec 05 12:23:17 UTC 2015 - joerg.lorenzen@ki.tng.de
4
+
5
+- update internal ffmpeg to version 2.8.3
6
+
7
+-------------------------------------------------------------------
8
Fri Nov 20 07:00:02 UTC 2015 - olaf@aepfle.de
9
10
- Set group permissions for included ffmpeg libs
11
avidemux3.spec
Changed
10
1
2
#
3
4
5
-%define ffmpeg_version 2.8.1
6
+%define ffmpeg_version 2.8.3
7
8
Name: avidemux3
9
Summary: Graphical video editing and transcoding tool
10
ffmpeg-2.8.1.tar.bz2/Changelog -> ffmpeg-2.8.3.tar.bz2/Changelog
Changed
98
1
2
Entries are sorted chronologically from oldest to youngest within each release,
3
releases are sorted from youngest to oldest.
4
5
+version 2.8.3
6
+- avcodec/cabac: Check initial cabac decoder state
7
+- avcodec/cabac_functions: Fix "left shift of negative value -31767"
8
+- avcodec/h264_slice: Limit max_contexts when slice_context_count is initialized
9
+- rtmpcrypt: Do the xtea decryption in little endian mode
10
+- avformat/matroskadec: Check subtitle stream before dereferencing
11
+- avcodec/pngdec: Replace assert by request for sample for unsupported TRNS cases
12
+- avformat/utils: Do not init parser if probing is unfinished
13
+- avcodec/jpeg2000dec: Fix potential integer overflow with tile dimensions
14
+- avcodec/jpeg2000: Use av_image_check_size() in ff_jpeg2000_init_component()
15
+- avcodec/wmaprodec: Check for overread in decode_packet()
16
+- avcodec/smacker: Check that the data size is a multiple of a sample vector
17
+- avcodec/takdec: Skip last p2 sample (which is unused)
18
+- avcodec/dxtory: Fix input size check in dxtory_decode_v1_410()
19
+- avcodec/dxtory: Fix input size check in dxtory_decode_v1_420()
20
+- avcodec/error_resilience: avoid accessing previous or next frames tables beyond height
21
+- avcodec/dpx: Move need_align to act per line
22
+- avcodec/flashsv: Check size before updating it
23
+- avcodec/ivi: Check image dimensions
24
+- avcodec/utils: Better check for channels in av_get_audio_frame_duration()
25
+- avcodec/jpeg2000dec: Check for duplicate SIZ marker
26
+- aacsbr: don't call sbr_dequant twice without intermediate read_sbr_data
27
+- hqx: correct type and size check of info_offset
28
+- mxfdec: check edit_rate also for physical_track
29
+- avcodec/jpeg2000: Change coord to 32bit to support larger than 32k width or height
30
+- avcodec/jpeg2000dec: Check SIZ dimensions to be within the supported range
31
+- avcodec/jpeg2000: Check comp coords to be within the supported size
32
+- mpegvideo: clear overread in clear_context
33
+- avcodec/avrndec: Use the AVFrame format instead of the context
34
+- dds: disable palette flag for compressed images
35
+- dds: validate compressed source buffer size
36
+- dds: validate source buffer size before copying
37
+- dvdsubdec: validate offset2 similar to offset1
38
+- brstm: reject negative sample rate
39
+- aacps: avoid division by zero in stereo_processing
40
+- softfloat: assert when the argument of av_sqrt_sf is negative
41
+
42
+version 2.8.2
43
+- various fixes in the aac_fixed decoder
44
+- various fixes in softfloat
45
+- swresample/resample: increase precision for compensation
46
+- lavf/mov: add support for sidx fragment indexes
47
+- avformat/mxfenc: Only store user comment related tags when needed
48
+- tests/fate/avformat: Fix fate-lavf
49
+- doc/ffmpeg: Clarify that the sdp_file option requires an rtp output.
50
+- ffmpeg: Don't try and write sdp info if none of the outputs had an rtp format.
51
+- apng: use correct size for output buffer
52
+- jvdec: avoid unsigned overflow in comparison
53
+- avcodec/jpeg2000dec: Clip all tile coordinates
54
+- avcodec/microdvddec: Check for string end in 'P' case
55
+- avcodec/dirac_parser: Fix undefined memcpy() use
56
+- avformat/xmv: Discard remainder of packet on error
57
+- avformat/xmv: factor return check out of if/else
58
+- avcodec/mpeg12dec: Do not call show_bits() with invalid bits
59
+- avcodec/faxcompr: Add missing runs check in decode_uncompressed()
60
+- libavutil/channel_layout: Check strtol*() for failure
61
+- avformat/mpegts: Only start probing data streams within probe_packets
62
+- avcodec/hevc_ps: Check chroma_format_idc
63
+- avcodec/ffv1dec: Check for 0 quant tables
64
+- avcodec/mjpegdec: Reinitialize IDCT on BPP changes
65
+- avcodec/mjpegdec: Check index in ljpeg_decode_yuv_scan() before using it
66
+- avutil/file_open: avoid file handle inheritance on Windows
67
+- avcodec/h264_slice: Disable slice threads if there are multiple access units in a packet
68
+- avformat/hls: update cookies on setcookie response
69
+- opusdec: Don't run vector_fmul_scalar on zero length arrays
70
+- avcodec/opusdec: Fix extra samples read index
71
+- avcodec/ffv1: Initialize vlc_state on allocation
72
+- avcodec/ffv1dec: update progress in case of broken pointer chains
73
+- avcodec/ffv1dec: Clear slice coordinates if they are invalid or slice header decoding fails for other reasons
74
+- rtsp: Allow $ as interleaved packet indicator before a complete response header
75
+- videodsp: don't overread edges in vfix3 emu_edge.
76
+- avformat/mp3dec: improve junk skipping heuristic
77
+- concatdec: fix file_start_time calculation regression
78
+- avcodec: loongson optimize h264dsp idct and loop filter with mmi
79
+- avcodec/jpeg2000dec: Clear properties in jpeg2000_dec_cleanup() too
80
+- avformat/hls: add support for EXT-X-MAP
81
+- avformat/hls: fix segment selection regression on track changes of live streams
82
+- configure: Require libkvazaar < 0.7.
83
+- avcodec/vp8: Do not use num_coeff_partitions in thread/buffer setup
84
+
85
+
86
version 2.8.1:
87
- swscale: fix ticket #4881
88
- doc: fix spelling errors
89
90
- dnxhddec: decode and use interlace mb flag
91
- swscale: fix ticket #4877
92
- avcodec/rangecoder: Check e
93
-- avcodec/ffv1: seperate slice_count from max_slice_count
94
+- avcodec/ffv1: separate slice_count from max_slice_count
95
- swscale: fix ticket 4850
96
- cmdutils: Filter dst/srcw/h
97
- avutil/log: fix zero length gnu_printf format string warning
98
ffmpeg-2.8.1.tar.bz2/RELEASE -> ffmpeg-2.8.3.tar.bz2/RELEASE
Changed
4
1
2
-2.8.1
3
+2.8.3
4
ffmpeg-2.8.1.tar.bz2/VERSION -> ffmpeg-2.8.3.tar.bz2/VERSION
Changed
4
1
2
-2.8.1
3
+2.8.3
4
ffmpeg-2.8.1.tar.bz2/configure -> ffmpeg-2.8.3.tar.bz2/configure
Changed
10
1
2
check_lib "${gsm_hdr}" gsm_create -lgsm && break;
3
done || die "ERROR: libgsm not found"; }
4
enabled libilbc && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc
5
-enabled libkvazaar && require_pkg_config kvazaar kvazaar.h kvz_api_get
6
+enabled libkvazaar && require_pkg_config "kvazaar < 0.7.0" kvazaar.h kvz_api_get
7
enabled libmfx && require_pkg_config libmfx "mfx/mfxvideo.h" MFXInit
8
enabled libmodplug && require_pkg_config libmodplug libmodplug/modplug.h ModPlug_Load
9
enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame
10
ffmpeg-2.8.1.tar.bz2/doc/Doxyfile -> ffmpeg-2.8.3.tar.bz2/doc/Doxyfile
Changed
10
1
2
# This could be handy for archiving the generated documentation or
3
# if some version control system is used.
4
5
-PROJECT_NUMBER = 2.8.1
6
+PROJECT_NUMBER = 2.8.3
7
8
# With the PROJECT_LOGO tag one can specify a logo or icon that is included
9
# in the documentation. The maximum height of the logo should not exceed 55
10
ffmpeg-2.8.1.tar.bz2/doc/ffmpeg.texi -> ffmpeg-2.8.3.tar.bz2/doc/ffmpeg.texi
Changed
13
1
2
specified to @command{ffserver} but can be to @command{ffmpeg}.
3
4
@item -sdp_file @var{file} (@emph{global})
5
-Print sdp information to @var{file}.
6
+Print sdp information for an output stream to @var{file}.
7
This allows dumping sdp information when at least one output isn't an
8
-rtp stream.
9
+rtp stream. (Requires at least one of the output formats to be rtp).
10
11
@item -discard (@emph{input})
12
Allows discarding specific streams or frames of streams at the demuxer.
13
ffmpeg-2.8.1.tar.bz2/doc/muxers.texi -> ffmpeg-2.8.3.tar.bz2/doc/muxers.texi
Changed
23
1
2
-y out.ts
3
@end example
4
5
+@section mxf, mxf_d10
6
+
7
+MXF muxer.
8
+
9
+@subsection Options
10
+
11
+The muxer options are:
12
+
13
+@table @option
14
+@item store_user_comments @var{bool}
15
+Set if user comments should be stored if available or never.
16
+IRT D-10 does not allow user comments. The default is thus to write them for
17
+mxf but not for mxf_d10
18
+@end table
19
+
20
@section null
21
22
Null muxer.
23
ffmpeg-2.8.1.tar.bz2/ffmpeg.c -> ffmpeg-2.8.3.tar.bz2/ffmpeg.c
Changed
19
1
2
}
3
}
4
5
+ if (!j)
6
+ goto fail;
7
+
8
av_sdp_create(avc, j, sdp, sizeof(sdp));
9
10
if (!sdp_filename) {
11
12
}
13
}
14
15
+fail:
16
av_freep(&avc);
17
}
18
19
ffmpeg-2.8.1.tar.bz2/libavcodec/aacdec_template.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/aacdec_template.c
Changed
13
1
2
3
spectral_to_sample(ac, samples);
4
5
+ if (!ac->frame->data[0] && samples) {
6
+ av_log(avctx, AV_LOG_ERROR, "no frame data found\n");
7
+ return AVERROR_INVALIDDATA;
8
+ }
9
+
10
ac->frame->nb_samples = samples;
11
ac->frame->sample_rate = avctx->sample_rate;
12
*got_frame_ptr = 1;
13
ffmpeg-2.8.1.tar.bz2/libavcodec/aacps.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/aacps.c
Changed
10
1
2
LOCAL_ALIGNED_16(INTFLOAT, h_step, [2], [4]);
3
int start = ps->border_position[e];
4
int stop = ps->border_position[e+1];
5
- INTFLOAT width = Q30(1.f) / (stop - start);
6
+ INTFLOAT width = Q30(1.f) / ((stop - start) ? (stop - start) : 1);
7
#if USE_FIXED
8
width <<= 1;
9
#endif
10
ffmpeg-2.8.1.tar.bz2/libavcodec/aacsbr_fixed.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/aacsbr_fixed.c
Changed
45
1
2
else
3
temp1.mant = 0x20000000;
4
temp1.exp = (temp1.exp >> 1) + 1;
5
+ if (temp1.exp > 66) { // temp1 > 1E20
6
+ av_log(NULL, AV_LOG_ERROR, "envelope scalefactor overflow in dequant\n");
7
+ temp1 = FLOAT_1;
8
+ }
9
10
temp2.exp = (pan_offset - sbr->data[1].env_facs[e][k].mant) * alpha;
11
if (temp2.exp & 1)
12
13
temp1.exp = NOISE_FLOOR_OFFSET - \
14
sbr->data[0].noise_facs[e][k].mant + 2;
15
temp1.mant = 0x20000000;
16
+ if (temp1.exp > 66) { // temp1 > 1E20
17
+ av_log(NULL, AV_LOG_ERROR, "envelope scalefactor overflow in dequant\n");
18
+ temp1 = FLOAT_1;
19
+ }
20
temp2.exp = 12 - sbr->data[1].noise_facs[e][k].mant + 1;
21
temp2.mant = 0x20000000;
22
fac = av_div_sf(temp1, av_add_sf(FLOAT_1, temp2));
23
24
else
25
temp1.mant = 0x20000000;
26
temp1.exp = (temp1.exp >> 1) + 1;
27
-
28
+ if (temp1.exp > 66) { // temp1 > 1E20
29
+ av_log(NULL, AV_LOG_ERROR, "envelope scalefactor overflow in dequant\n");
30
+ temp1 = FLOAT_1;
31
+ }
32
sbr->data[ch].env_facs[e][k] = temp1;
33
}
34
for (e = 1; e <= sbr->data[ch].bs_num_noise; e++)
35
36
int delta = !((e == e_a[1]) || (e == e_a[0]));
37
for (k = 0; k < sbr->n_lim; k++) {
38
SoftFloat gain_boost, gain_max;
39
- SoftFloat sum[2] = { { 0, 0}, { 0, 0 } };
40
+ SoftFloat sum[2];
41
+ sum[0] = sum[1] = FLOAT_0;
42
for (m = sbr->f_tablelim[k] - sbr->kx[1]; m < sbr->f_tablelim[k + 1] - sbr->kx[1]; m++) {
43
const SoftFloat temp = av_div_sf(sbr->e_origmapped[e][m],
44
av_add_sf(FLOAT_1, sbr->q_mapped[e][m]));
45
ffmpeg-2.8.1.tar.bz2/libavcodec/aacsbr_template.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/aacsbr_template.c
Changed
55
1
2
/** Places SBR in pure upsampling mode. */
3
static void sbr_turnoff(SpectralBandReplication *sbr) {
4
sbr->start = 0;
5
+ sbr->ready_for_dequant = 0;
6
// Init defults used in pure upsampling mode
7
sbr->kx[1] = 32; //Typo in spec, kx' inits to 32
8
sbr->m[1] = 0;
9
10
SpectrumParameters old_spectrum_params;
11
12
sbr->start = 1;
13
+ sbr->ready_for_dequant = 0;
14
15
// Save last spectrum parameters variables to compare to new ones
16
memcpy(&old_spectrum_params, &sbr->spectrum_params, sizeof(SpectrumParameters));
17
18
unsigned int cnt = get_bits_count(gb);
19
20
sbr->id_aac = id_aac;
21
+ sbr->ready_for_dequant = 1;
22
23
if (id_aac == TYPE_SCE || id_aac == TYPE_CCE) {
24
if (read_sbr_single_channel_element(ac, sbr, gb)) {
25
26
27
for (p = 0; p < sbr->n[ch_data->bs_freq_res[e + 1]]; p++) {
28
#if USE_FIXED
29
- SoftFloat sum = { 0, 0 };
30
+ SoftFloat sum = FLOAT_0;
31
const SoftFloat den = av_int2sf(0x20000000 / (env_size * (table[p + 1] - table[p])), 29);
32
for (k = table[p]; k < table[p + 1]; k++) {
33
sum = av_add_sf(sum, sbr->dsp.sum_square(X_high[k] + ilb, iub - ilb));
34
35
sbr_turnoff(sbr);
36
}
37
38
+ if (sbr->start && !sbr->ready_for_dequant) {
39
+ av_log(ac->avctx, AV_LOG_ERROR,
40
+ "No quantized data read for sbr_dequant.\n");
41
+ sbr_turnoff(sbr);
42
+ }
43
+
44
if (!sbr->kx_and_m_pushed) {
45
sbr->kx[0] = sbr->kx[1];
46
sbr->m[0] = sbr->m[1];
47
48
49
if (sbr->start) {
50
sbr_dequant(sbr, id_aac);
51
+ sbr->ready_for_dequant = 0;
52
}
53
for (ch = 0; ch < nch; ch++) {
54
/* decode channel */
55
ffmpeg-2.8.1.tar.bz2/libavcodec/avrndec.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/avrndec.c
Changed
10
1
2
int shift = p->height - avctx->height;
3
int subsample_h, subsample_v;
4
5
- av_pix_fmt_get_chroma_sub_sample(avctx->pix_fmt, &subsample_h, &subsample_v);
6
+ av_pix_fmt_get_chroma_sub_sample(p->format, &subsample_h, &subsample_v);
7
8
p->data[0] += p->linesize[0] * shift;
9
if (p->data[2]) {
10
ffmpeg-2.8.1.tar.bz2/libavcodec/cabac.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/cabac.c
Changed
20
1
2
*
3
* @param buf_size size of buf in bits
4
*/
5
-void ff_init_cabac_decoder(CABACContext *c, const uint8_t *buf, int buf_size){
6
+int ff_init_cabac_decoder(CABACContext *c, const uint8_t *buf, int buf_size){
7
c->bytestream_start=
8
c->bytestream= buf;
9
c->bytestream_end= buf + buf_size;
10
11
#endif
12
c->low+= ((*c->bytestream++)<<2) + 2;
13
c->range= 0x1FE;
14
+ if ((c->range<<(CABAC_BITS+1)) < c->low)
15
+ return AVERROR_INVALIDDATA;
16
+ return 0;
17
}
18
19
void ff_init_cabac_states(void)
20
ffmpeg-2.8.1.tar.bz2/libavcodec/cabac.h -> ffmpeg-2.8.3.tar.bz2/libavcodec/cabac.h
Changed
10
1
2
}CABACContext;
3
4
void ff_init_cabac_encoder(CABACContext *c, uint8_t *buf, int buf_size);
5
-void ff_init_cabac_decoder(CABACContext *c, const uint8_t *buf, int buf_size);
6
+int ff_init_cabac_decoder(CABACContext *c, const uint8_t *buf, int buf_size);
7
void ff_init_cabac_states(void);
8
9
#endif /* AVCODEC_CABAC_H */
10
ffmpeg-2.8.1.tar.bz2/libavcodec/cabac_functions.h -> ffmpeg-2.8.3.tar.bz2/libavcodec/cabac_functions.h
Changed
21
1
2
3
#ifndef get_cabac_inline
4
static void refill2(CABACContext *c){
5
- int i, x;
6
+ int i;
7
+ unsigned x;
8
9
x= c->low ^ (c->low-1);
10
i= 7 - ff_h264_norm_shift[x>>(CABAC_BITS-1)];
11
12
#endif
13
if ((int) (c->bytestream_end - ptr) < n)
14
return NULL;
15
- ff_init_cabac_decoder(c, ptr + n, c->bytestream_end - ptr - n);
16
+ if (ff_init_cabac_decoder(c, ptr + n, c->bytestream_end - ptr - n) < 0)
17
+ return NULL;
18
19
return ptr;
20
}
21
ffmpeg-2.8.1.tar.bz2/libavcodec/dds.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/dds.c
Changed
46
1
2
normal_map = flags & DDPF_NORMALMAP;
3
fourcc = bytestream2_get_le32(gbc);
4
5
+ if (ctx->compressed && ctx->paletted) {
6
+ av_log(avctx, AV_LOG_WARNING,
7
+ "Disabling invalid palette flag for compressed dds.\n");
8
+ ctx->paletted = 0;
9
+ }
10
+
11
bpp = bytestream2_get_le32(gbc); // rgbbitcount
12
r = bytestream2_get_le32(gbc); // rbitmask
13
g = bytestream2_get_le32(gbc); // gbitmask
14
15
return ret;
16
17
if (ctx->compressed) {
18
+ int size = (avctx->coded_height / TEXTURE_BLOCK_H) *
19
+ (avctx->coded_width / TEXTURE_BLOCK_W) * ctx->tex_ratio;
20
ctx->slice_count = av_clip(avctx->thread_count, 1,
21
avctx->coded_height / TEXTURE_BLOCK_H);
22
23
+ if (bytestream2_get_bytes_left(gbc) < size) {
24
+ av_log(avctx, AV_LOG_ERROR,
25
+ "Compressed Buffer is too small (%d < %d).\n",
26
+ bytestream2_get_bytes_left(gbc), size);
27
+ return AVERROR_INVALIDDATA;
28
+ }
29
+
30
/* Use the decompress function on the texture, one block per thread. */
31
ctx->tex_data = gbc->buffer;
32
avctx->execute2(avctx, decompress_texture_thread, frame, NULL, ctx->slice_count);
33
34
frame->palette_has_changed = 1;
35
}
36
37
+ if (bytestream2_get_bytes_left(gbc) < frame->height * linesize) {
38
+ av_log(avctx, AV_LOG_ERROR, "Buffer is too small (%d < %d).\n",
39
+ bytestream2_get_bytes_left(gbc), frame->height * linesize);
40
+ return AVERROR_INVALIDDATA;
41
+ }
42
+
43
av_image_copy_plane(frame->data[0], frame->linesize[0],
44
gbc->buffer, linesize,
45
linesize, frame->height);
46
ffmpeg-2.8.1.tar.bz2/libavcodec/dirac_parser.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/dirac_parser.c
Changed
10
1
2
DiracParseContext *pc = s->priv_data;
3
4
if (pc->overread_index) {
5
- memcpy(pc->buffer, pc->buffer + pc->overread_index,
6
+ memmove(pc->buffer, pc->buffer + pc->overread_index,
7
pc->index - pc->overread_index);
8
pc->index -= pc->overread_index;
9
pc->overread_index = 0;
10
ffmpeg-2.8.1.tar.bz2/libavcodec/dpx.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/dpx.c
Changed
15
1
2
// For 12 bit, ignore alpha
3
if (elements == 4)
4
buf += 2;
5
- // Jump to next aligned position
6
- buf += need_align;
7
}
8
for (i = 0; i < 3; i++)
9
ptr[i] += p->linesize[i];
10
+ // Jump to next aligned position
11
+ buf += need_align;
12
}
13
break;
14
case 16:
15
ffmpeg-2.8.1.tar.bz2/libavcodec/dvdsubdec.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/dvdsubdec.c
Changed
10
1
2
}
3
}
4
the_end:
5
- if (offset1 >= 0) {
6
+ if (offset1 >= 0 && offset2 >= 0) {
7
int w, h;
8
uint8_t *bitmap;
9
10
ffmpeg-2.8.1.tar.bz2/libavcodec/dxtory.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/dxtory.c
Changed
19
1
2
uint8_t *Y1, *Y2, *Y3, *Y4, *U, *V;
3
int ret;
4
5
- if (src_size < avctx->width * avctx->height * 9LL / 8) {
6
+ if (src_size < FFALIGN(avctx->width, 4) * FFALIGN(avctx->height, 4) * 9LL / 8) {
7
av_log(avctx, AV_LOG_ERROR, "packet too small\n");
8
return AVERROR_INVALIDDATA;
9
}
10
11
uint8_t *Y1, *Y2, *U, *V;
12
int ret;
13
14
- if (src_size < avctx->width * avctx->height * 3LL / 2) {
15
+ if (src_size < FFALIGN(avctx->width, 2) * FFALIGN(avctx->height, 2) * 3LL / 2) {
16
av_log(avctx, AV_LOG_ERROR, "packet too small\n");
17
return AVERROR_INVALIDDATA;
18
}
19
ffmpeg-2.8.1.tar.bz2/libavcodec/error_resilience.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/error_resilience.c
Changed
50
1
2
#define MV_UNCHANGED 1
3
const int mb_stride = s->mb_stride;
4
const int mb_width = s->mb_width;
5
- const int mb_height = s->mb_height;
6
+ int mb_height = s->mb_height;
7
int i, depth, num_avail;
8
int mb_x, mb_y, mot_step, mot_stride;
9
10
+ if (s->last_pic.f && s->last_pic.f->data[0])
11
+ mb_height = FFMIN(mb_height, (s->last_pic.f->height+15)>>4);
12
+ if (s->next_pic.f && s->next_pic.f->data[0])
13
+ mb_height = FFMIN(mb_height, (s->next_pic.f->height+15)>>4);
14
+
15
set_mv_strides(s, &mot_step, &mot_stride);
16
17
num_avail = 0;
18
- for (i = 0; i < s->mb_num; i++) {
19
+ for (i = 0; i < mb_width * mb_height; i++) {
20
const int mb_xy = s->mb_index2xy[i];
21
int f = 0;
22
int error = s->error_status_table[mb_xy];
23
24
25
if ((!(s->avctx->error_concealment&FF_EC_GUESS_MVS)) ||
26
num_avail <= mb_width / 2) {
27
- for (mb_y = 0; mb_y < s->mb_height; mb_y++) {
28
+ for (mb_y = 0; mb_y < mb_height; mb_y++) {
29
for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
30
const int mb_xy = mb_x + mb_y * s->mb_stride;
31
int mv_dir = (s->last_pic.f && s->last_pic.f->data[0]) ? MV_DIR_FORWARD : MV_DIR_BACKWARD;
32
33
int score_sum = 0;
34
35
changed = 0;
36
- for (mb_y = 0; mb_y < s->mb_height; mb_y++) {
37
+ for (mb_y = 0; mb_y < mb_height; mb_y++) {
38
for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
39
const int mb_xy = mb_x + mb_y * s->mb_stride;
40
int mv_predictor[8][2] = { { 0 } };
41
42
if (none_left)
43
return;
44
45
- for (i = 0; i < s->mb_num; i++) {
46
+ for (i = 0; i < mb_width * mb_height; i++) {
47
int mb_xy = s->mb_index2xy[i];
48
if (fixed[mb_xy])
49
fixed[mb_xy] = MV_FROZEN;
50
ffmpeg-2.8.1.tar.bz2/libavcodec/faxcompr.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/faxcompr.c
Changed
12
1
2
*mode = !*mode;
3
if (newmode != *mode) { //FIXME CHECK
4
*(*runs)++ = 0;
5
+ if (*runs >= runend) {
6
+ av_log(avctx, AV_LOG_ERROR, "uncompressed run overrun\n");
7
+ return AVERROR_INVALIDDATA;
8
+ }
9
*mode = newmode;
10
}
11
return 0;
12
ffmpeg-2.8.1.tar.bz2/libavcodec/ffv1.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/ffv1.c
Changed
30
1
2
3
av_cold int ff_ffv1_init_slice_state(FFV1Context *f, FFV1Context *fs)
4
{
5
- int j;
6
+ int j, i;
7
8
fs->plane_count = f->plane_count;
9
fs->transparency = f->transparency;
10
11
if (!p->state)
12
return AVERROR(ENOMEM);
13
} else {
14
- if (!p->vlc_state)
15
- p->vlc_state = av_malloc_array(p->context_count, sizeof(VlcState));
16
- if (!p->vlc_state)
17
- return AVERROR(ENOMEM);
18
+ if (!p->vlc_state) {
19
+ p->vlc_state = av_mallocz_array(p->context_count, sizeof(VlcState));
20
+ if (!p->vlc_state)
21
+ return AVERROR(ENOMEM);
22
+ for (i = 0; i < p->context_count; i++) {
23
+ p->vlc_state[i].error_sum = 4;
24
+ p->vlc_state[i].count = 1;
25
+ }
26
+ }
27
}
28
}
29
30
ffmpeg-2.8.1.tar.bz2/libavcodec/ffv1dec.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/ffv1dec.c
Changed
26
1
2
if (ff_ffv1_init_slice_state(f, fs) < 0)
3
return AVERROR(ENOMEM);
4
if (decode_slice_header(f, fs) < 0) {
5
+ fs->slice_x = fs->slice_y = fs->slice_height = fs->slice_width = 0;
6
fs->slice_damaged = 1;
7
return AVERROR_INVALIDDATA;
8
}
9
10
}
11
12
f->quant_table_count = get_symbol(c, state, 0);
13
- if (f->quant_table_count > (unsigned)MAX_QUANT_TABLES)
14
+ if (f->quant_table_count > (unsigned)MAX_QUANT_TABLES || !f->quant_table_count)
15
return AVERROR_INVALIDDATA;
16
17
for (i = 0; i < f->quant_table_count; i++) {
18
19
else v = buf_p - c->bytestream_start;
20
if (buf_p - c->bytestream_start < v) {
21
av_log(avctx, AV_LOG_ERROR, "Slice pointer chain broken\n");
22
+ ff_thread_report_progress(&f->picture, INT_MAX, 0);
23
return AVERROR_INVALIDDATA;
24
}
25
buf_p -= v;
26
ffmpeg-2.8.1.tar.bz2/libavcodec/flashsv.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/flashsv.c
Changed
23
1
2
}
3
4
if (has_diff) {
5
+ if (size < 3) {
6
+ av_log(avctx, AV_LOG_ERROR, "size too small for diff\n");
7
+ return AVERROR_INVALIDDATA;
8
+ }
9
if (!s->keyframe) {
10
av_log(avctx, AV_LOG_ERROR,
11
"Inter frame without keyframe\n");
12
13
int row = get_bits(&gb, 8);
14
av_log(avctx, AV_LOG_DEBUG, "%dx%d zlibprime_curr %dx%d\n",
15
i, j, col, row);
16
+ if (size < 3) {
17
+ av_log(avctx, AV_LOG_ERROR, "size too small for zlibprime_curr\n");
18
+ return AVERROR_INVALIDDATA;
19
+ }
20
size -= 2;
21
avpriv_request_sample(avctx, "zlibprime_curr");
22
return AVERROR_PATCHWELCOME;
23
ffmpeg-2.8.1.tar.bz2/libavcodec/h264_cabac.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/h264_cabac.c
Changed
20
1
2
const int mb_size = ff_h264_mb_sizes[h->sps.chroma_format_idc] *
3
h->sps.bit_depth_luma >> 3;
4
const uint8_t *ptr;
5
+ int ret;
6
7
// We assume these blocks are very rare so we do not optimize it.
8
// FIXME The two following lines get the bitstream position in the cabac
9
10
sl->intra_pcm_ptr = ptr;
11
ptr += mb_size;
12
13
- ff_init_cabac_decoder(&sl->cabac, ptr, sl->cabac.bytestream_end - ptr);
14
+ ret = ff_init_cabac_decoder(&sl->cabac, ptr, sl->cabac.bytestream_end - ptr);
15
+ if (ret < 0)
16
+ return ret;
17
18
// All blocks are present
19
h->cbp_table[mb_xy] = 0xf7ef;
20
ffmpeg-2.8.1.tar.bz2/libavcodec/h264_slice.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/h264_slice.c
Changed
38
1
2
nb_slices = max_slices;
3
}
4
h->slice_context_count = nb_slices;
5
+ h->max_contexts = FFMIN(h->max_contexts, nb_slices);
6
7
if (!HAVE_THREADS || !(h->avctx->active_thread_type & FF_THREAD_SLICE)) {
8
ret = ff_h264_slice_context_init(h, &h->slice_ctx[0]);
9
10
av_log(h->avctx, AV_LOG_ERROR, "Too many fields\n");
11
return AVERROR_INVALIDDATA;
12
}
13
+ if (h->max_contexts > 1) {
14
+ if (!h->single_decode_warning) {
15
+ av_log(h->avctx, AV_LOG_WARNING, "Cannot decode multiple access units as slice threads\n");
16
+ h->single_decode_warning = 1;
17
+ }
18
+ h->max_contexts = 1;
19
+ return SLICE_SINGLETHREAD;
20
+ }
21
+
22
if (h->cur_pic_ptr && FIELD_PICTURE(h) && h->first_field) {
23
ret = ff_h264_field_end(h, h->slice_ctx, 1);
24
h->current_slice = 0;
25
26
align_get_bits(&sl->gb);
27
28
/* init cabac */
29
- ff_init_cabac_decoder(&sl->cabac,
30
+ ret = ff_init_cabac_decoder(&sl->cabac,
31
sl->gb.buffer + get_bits_count(&sl->gb) / 8,
32
(get_bits_left(&sl->gb) + 7) / 8);
33
+ if (ret < 0)
34
+ return ret;
35
36
ff_h264_init_cabac_states(h, sl);
37
38
ffmpeg-2.8.1.tar.bz2/libavcodec/hevc_ps.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/hevc_ps.c
Changed
12
1
2
}
3
4
sps->chroma_format_idc = get_ue_golomb_long(gb);
5
+ if (sps->chroma_format_idc > 3U) {
6
+ av_log(avctx, AV_LOG_ERROR, "chroma_format_idc %d is invalid\n", sps->chroma_format_idc);
7
+ return AVERROR_INVALIDDATA;
8
+ }
9
10
if (sps->chroma_format_idc == 3)
11
sps->separate_colour_plane_flag = get_bits1(gb);
12
ffmpeg-2.8.1.tar.bz2/libavcodec/hqx.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/hqx.c
Changed
12
1
2
3
info_tag = AV_RL32(src);
4
if (info_tag == MKTAG('I', 'N', 'F', 'O')) {
5
- int info_offset = AV_RL32(src + 4);
6
- if (info_offset > UINT32_MAX - 8 || info_offset + 8 > avpkt->size) {
7
+ unsigned info_offset = AV_RL32(src + 4);
8
+ if (info_offset > INT_MAX || info_offset + 8 > avpkt->size) {
9
av_log(avctx, AV_LOG_ERROR,
10
"Invalid INFO header offset: 0x%08"PRIX32" is too large.\n",
11
info_offset);
12
ffmpeg-2.8.1.tar.bz2/libavcodec/ivi.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/ivi.c
Changed
18
1
2
3
#define BITSTREAM_READER_LE
4
#include "libavutil/attributes.h"
5
+#include "libavutil/imgutils.h"
6
#include "libavutil/timer.h"
7
#include "avcodec.h"
8
#include "get_bits.h"
9
10
11
ivi_free_buffers(planes);
12
13
- if (cfg->pic_width < 1 || cfg->pic_height < 1 ||
14
+ if (av_image_check_size(cfg->pic_width, cfg->pic_height, 0, NULL) < 0 ||
15
cfg->luma_bands < 1 || cfg->chroma_bands < 1)
16
return AVERROR_INVALIDDATA;
17
18
ffmpeg-2.8.1.tar.bz2/libavcodec/jpeg2000.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/jpeg2000.c
Changed
37
1
2
#include "libavutil/attributes.h"
3
#include "libavutil/avassert.h"
4
#include "libavutil/common.h"
5
+#include "libavutil/imgutils.h"
6
#include "libavutil/mem.h"
7
#include "avcodec.h"
8
#include "jpeg2000.h"
9
10
codsty->nreslevels2decode - 1,
11
codsty->transform))
12
return ret;
13
- // component size comp->coord is uint16_t so ir cannot overflow
14
+
15
+ if (av_image_check_size(comp->coord[0][1] - comp->coord[0][0],
16
+ comp->coord[1][1] - comp->coord[1][0], 0, avctx))
17
+ return AVERROR_INVALIDDATA;
18
csize = (comp->coord[0][1] - comp->coord[0][0]) *
19
(comp->coord[1][1] - comp->coord[1][0]);
20
+ if (comp->coord[0][1] - comp->coord[0][0] > 32768 ||
21
+ comp->coord[1][1] - comp->coord[1][0] > 32768) {
22
+ av_log(avctx, AV_LOG_ERROR, "component size too large\n");
23
+ return AVERROR_PATCHWELCOME;
24
+ }
25
26
if (codsty->transform == FF_DWT97) {
27
csize += AV_INPUT_BUFFER_PADDING_SIZE / sizeof(*comp->f_data);
28
29
return AVERROR(ENOMEM);
30
for (cblkno = 0; cblkno < nb_codeblocks; cblkno++) {
31
Jpeg2000Cblk *cblk = prec->cblk + cblkno;
32
- uint16_t Cx0, Cy0;
33
+ int Cx0, Cy0;
34
35
/* Compute coordinates of codeblocks */
36
/* Compute Cx0*/
37
ffmpeg-2.8.1.tar.bz2/libavcodec/jpeg2000.h -> ffmpeg-2.8.3.tar.bz2/libavcodec/jpeg2000.h
Changed
50
1
2
int nb_terminationsinc;
3
int data_start[JPEG2000_MAX_PASSES];
4
Jpeg2000Pass passes[JPEG2000_MAX_PASSES];
5
- uint16_t coord[2][2]; // border coordinates {{x0, x1}, {y0, y1}}
6
+ int coord[2][2]; // border coordinates {{x0, x1}, {y0, y1}}
7
} Jpeg2000Cblk; // code block
8
9
typedef struct Jpeg2000Prec {
10
- uint16_t nb_codeblocks_width;
11
- uint16_t nb_codeblocks_height;
12
+ int nb_codeblocks_width;
13
+ int nb_codeblocks_height;
14
Jpeg2000TgtNode *zerobits;
15
Jpeg2000TgtNode *cblkincl;
16
Jpeg2000Cblk *cblk;
17
int decoded_layers;
18
- uint16_t coord[2][2]; // border coordinates {{x0, x1}, {y0, y1}}
19
+ int coord[2][2]; // border coordinates {{x0, x1}, {y0, y1}}
20
} Jpeg2000Prec; // precinct
21
22
typedef struct Jpeg2000Band {
23
- uint16_t coord[2][2]; // border coordinates {{x0, x1}, {y0, y1}}
24
+ int coord[2][2]; // border coordinates {{x0, x1}, {y0, y1}}
25
uint16_t log2_cblk_width, log2_cblk_height;
26
int i_stepsize; // quantization stepsize
27
float f_stepsize; // quantization stepsize
28
29
30
typedef struct Jpeg2000ResLevel {
31
uint8_t nbands;
32
- uint16_t coord[2][2]; // border coordinates {{x0, x1}, {y0, y1}}
33
- uint16_t num_precincts_x, num_precincts_y; // number of precincts in x/y direction
34
+ int coord[2][2]; // border coordinates {{x0, x1}, {y0, y1}}
35
+ int num_precincts_x, num_precincts_y; // number of precincts in x/y direction
36
uint8_t log2_prec_width, log2_prec_height; // exponent of precinct size
37
Jpeg2000Band *band;
38
} Jpeg2000ResLevel; // resolution level
39
40
DWTContext dwt;
41
float *f_data;
42
int *i_data;
43
- uint16_t coord[2][2]; // border coordinates {{x0, x1}, {y0, y1}} -- can be reduced with lowres option
44
- uint16_t coord_o[2][2]; // border coordinates {{x0, x1}, {y0, y1}} -- original values from jpeg2000 headers
45
+ int coord[2][2]; // border coordinates {{x0, x1}, {y0, y1}} -- can be reduced with lowres option
46
+ int coord_o[2][2]; // border coordinates {{x0, x1}, {y0, y1}} -- original values from jpeg2000 headers
47
} Jpeg2000Component;
48
49
/* misc tools */
50
ffmpeg-2.8.1.tar.bz2/libavcodec/jpeg2000dec.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/jpeg2000dec.c
Changed
57
1
2
#include "libavutil/attributes.h"
3
#include "libavutil/avassert.h"
4
#include "libavutil/common.h"
5
+#include "libavutil/imgutils.h"
6
#include "libavutil/opt.h"
7
#include "libavutil/pixdesc.h"
8
#include "avcodec.h"
9
10
avpriv_request_sample(s->avctx, "Support for image offsets");
11
return AVERROR_PATCHWELCOME;
12
}
13
+ if (av_image_check_size(s->width, s->height, 0, s->avctx)) {
14
+ avpriv_request_sample(s->avctx, "Large Dimensions");
15
+ return AVERROR_PATCHWELCOME;
16
+ }
17
18
if (ncomponents <= 0) {
19
av_log(s->avctx, AV_LOG_ERROR, "Invalid number of components: %d\n",
20
21
if (!tile->comp)
22
return AVERROR(ENOMEM);
23
24
- tile->coord[0][0] = FFMAX(tilex * s->tile_width + s->tile_offset_x, s->image_offset_x);
25
- tile->coord[0][1] = FFMIN((tilex + 1) * s->tile_width + s->tile_offset_x, s->width);
26
- tile->coord[1][0] = FFMAX(tiley * s->tile_height + s->tile_offset_y, s->image_offset_y);
27
- tile->coord[1][1] = FFMIN((tiley + 1) * s->tile_height + s->tile_offset_y, s->height);
28
+ tile->coord[0][0] = av_clip(tilex * (int64_t)s->tile_width + s->tile_offset_x, s->image_offset_x, s->width);
29
+ tile->coord[0][1] = av_clip((tilex + 1) * (int64_t)s->tile_width + s->tile_offset_x, s->image_offset_x, s->width);
30
+ tile->coord[1][0] = av_clip(tiley * (int64_t)s->tile_height + s->tile_offset_y, s->image_offset_y, s->height);
31
+ tile->coord[1][1] = av_clip((tiley + 1) * (int64_t)s->tile_height + s->tile_offset_y, s->image_offset_y, s->height);
32
33
for (compno = 0; compno < s->ncomponents; compno++) {
34
Jpeg2000Component *comp = tile->comp + compno;
35
36
av_freep(&s->tile);
37
memset(s->codsty, 0, sizeof(s->codsty));
38
memset(s->qntsty, 0, sizeof(s->qntsty));
39
+ memset(s->properties, 0, sizeof(s->properties));
40
memset(&s->poc , 0, sizeof(s->poc));
41
s->numXtiles = s->numYtiles = 0;
42
+ s->ncomponents = 0;
43
}
44
45
static int jpeg2000_read_main_headers(Jpeg2000DecoderContext *s)
46
47
48
switch (marker) {
49
case JPEG2000_SIZ:
50
+ if (s->ncomponents) {
51
+ av_log(s->avctx, AV_LOG_ERROR, "Duplicate SIZ\n");
52
+ return AVERROR_INVALIDDATA;
53
+ }
54
ret = get_siz(s);
55
if (!s->tile)
56
s->numXtiles = s->numYtiles = 0;
57
ffmpeg-2.8.1.tar.bz2/libavcodec/jpeg2000dwt.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/jpeg2000dwt.c
Changed
37
1
2
data[i] = (data[i] + ((1<<I_PRESHIFT)>>1)) >> I_PRESHIFT;
3
}
4
5
-int ff_jpeg2000_dwt_init(DWTContext *s, uint16_t border[2][2],
6
+int ff_jpeg2000_dwt_init(DWTContext *s, int border[2][2],
7
int decomp_levels, int type)
8
{
9
int i, j, lev = decomp_levels, maxlen,
10
11
12
#define MAX_W 256
13
14
-static int test_dwt(int *array, int *ref, uint16_t border[2][2], int decomp_levels, int type, int max_diff) {
15
+static int test_dwt(int *array, int *ref, int border[2][2], int decomp_levels, int type, int max_diff) {
16
int ret, j;
17
DWTContext s1={{{0}}}, *s= &s1;
18
int64_t err2 = 0;
19
20
return 0;
21
}
22
23
-static int test_dwtf(float *array, float *ref, uint16_t border[2][2], int decomp_levels, float max_diff) {
24
+static int test_dwtf(float *array, float *ref, int border[2][2], int decomp_levels, float max_diff) {
25
int ret, j;
26
DWTContext s1={{{0}}}, *s= &s1;
27
double err2 = 0;
28
29
int main(void) {
30
AVLFG prng;
31
int i,j;
32
- uint16_t border[2][2];
33
+ int border[2][2];
34
int ret, decomp_levels;
35
36
av_lfg_init(&prng, 1);
37
ffmpeg-2.8.1.tar.bz2/libavcodec/jpeg2000dwt.h -> ffmpeg-2.8.3.tar.bz2/libavcodec/jpeg2000dwt.h
Changed
19
1
2
3
typedef struct DWTContext {
4
/// line lengths { horizontal, vertical } in consecutive decomposition levels
5
- uint16_t linelen[FF_DWT_MAX_DECLVLS][2];
6
+ int linelen[FF_DWT_MAX_DECLVLS][2];
7
uint8_t mod[FF_DWT_MAX_DECLVLS][2]; ///< coordinates (x0, y0) of decomp. levels mod 2
8
uint8_t ndeclevels; ///< number of decomposition levels
9
uint8_t type; ///< 0 for 9/7; 1 for 5/3
10
11
* @param decomp_levels number of decomposition levels
12
* @param type 0 for DWT 9/7; 1 for DWT 5/3
13
*/
14
-int ff_jpeg2000_dwt_init(DWTContext *s, uint16_t border[2][2],
15
+int ff_jpeg2000_dwt_init(DWTContext *s, int border[2][2],
16
int decomp_levels, int type);
17
18
int ff_dwt_encode(DWTContext *s, void *t);
19
ffmpeg-2.8.1.tar.bz2/libavcodec/microdvddec.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/microdvddec.c
Changed
10
1
2
3
/* Position */
4
case 'P':
5
+ if (!*s)
6
+ break;
7
tag.persistent = MICRODVD_PERSISTENT_ON;
8
tag.data1 = (*s++ == '1');
9
if (*s != '}')
10
ffmpeg-2.8.1.tar.bz2/libavcodec/mips/h264dsp_init_mips.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/mips/h264dsp_init_mips.c
Changed
60
1
2
#endif // #if HAVE_MSA
3
4
#if HAVE_MMI
5
-static av_cold void h264dsp_init_mmi(H264DSPContext * c,
6
- const int bit_depth,
7
- const int chroma_format_idc)
8
+static av_cold void h264dsp_init_mmi(H264DSPContext * c, const int bit_depth,
9
+ const int chroma_format_idc)
10
{
11
if (bit_depth == 8) {
12
+ c->h264_add_pixels4_clear = ff_h264_add_pixels4_8_mmi;
13
+ c->h264_idct_add = ff_h264_idct_add_8_mmi;
14
+ c->h264_idct8_add = ff_h264_idct8_add_8_mmi;
15
+ c->h264_idct_dc_add = ff_h264_idct_dc_add_8_mmi;
16
+ c->h264_idct8_dc_add = ff_h264_idct8_dc_add_8_mmi;
17
+ c->h264_idct_add16 = ff_h264_idct_add16_8_mmi;
18
+ c->h264_idct_add16intra = ff_h264_idct_add16intra_8_mmi;
19
+ c->h264_idct8_add4 = ff_h264_idct8_add4_8_mmi;
20
+
21
+ if (chroma_format_idc <= 1)
22
+ c->h264_idct_add8 = ff_h264_idct_add8_8_mmi;
23
+ else
24
+ c->h264_idct_add8 = ff_h264_idct_add8_422_8_mmi;
25
+
26
+ c->h264_luma_dc_dequant_idct = ff_h264_luma_dc_dequant_idct_8_mmi;
27
+
28
+ if (chroma_format_idc <= 1)
29
+ c->h264_chroma_dc_dequant_idct =
30
+ ff_h264_chroma_dc_dequant_idct_8_mmi;
31
+ else
32
+ c->h264_chroma_dc_dequant_idct =
33
+ ff_h264_chroma422_dc_dequant_idct_8_mmi;
34
+
35
c->weight_h264_pixels_tab[0] = ff_h264_weight_pixels16_8_mmi;
36
c->weight_h264_pixels_tab[1] = ff_h264_weight_pixels8_8_mmi;
37
c->weight_h264_pixels_tab[2] = ff_h264_weight_pixels4_8_mmi;
38
39
c->biweight_h264_pixels_tab[0] = ff_h264_biweight_pixels16_8_mmi;
40
c->biweight_h264_pixels_tab[1] = ff_h264_biweight_pixels8_8_mmi;
41
c->biweight_h264_pixels_tab[2] = ff_h264_biweight_pixels4_8_mmi;
42
+
43
+ c->h264_v_loop_filter_chroma = ff_deblock_v_chroma_8_mmi;
44
+ c->h264_v_loop_filter_chroma_intra = ff_deblock_v_chroma_intra_8_mmi;
45
+
46
+ if (chroma_format_idc <= 1) {
47
+ c->h264_h_loop_filter_chroma =
48
+ ff_deblock_h_chroma_8_mmi;
49
+ c->h264_h_loop_filter_chroma_intra =
50
+ ff_deblock_h_chroma_intra_8_mmi;
51
+ }
52
+
53
+ c->h264_v_loop_filter_luma = ff_deblock_v_luma_8_mmi;
54
+ c->h264_v_loop_filter_luma_intra = ff_deblock_v_luma_intra_8_mmi;
55
+ c->h264_h_loop_filter_luma = ff_deblock_h_luma_8_mmi;
56
+ c->h264_h_loop_filter_luma_intra = ff_deblock_h_luma_intra_8_mmi;
57
}
58
}
59
#endif /* HAVE_MMI */
60
ffmpeg-2.8.1.tar.bz2/libavcodec/mips/h264dsp_mips.h -> ffmpeg-2.8.3.tar.bz2/libavcodec/mips/h264dsp_mips.h
Changed
56
1
2
void ff_vp8_pred16x16_127_dc_8_msa(uint8_t *src, ptrdiff_t stride);
3
void ff_vp8_pred16x16_129_dc_8_msa(uint8_t *src, ptrdiff_t stride);
4
5
+void ff_h264_add_pixels4_8_mmi(uint8_t *_dst, int16_t *_src, int stride);
6
+void ff_h264_idct_add_8_mmi(uint8_t *dst, int16_t *block, int stride);
7
+void ff_h264_idct8_add_8_mmi(uint8_t *dst, int16_t *block, int stride);
8
+void ff_h264_idct_dc_add_8_mmi(uint8_t *dst, int16_t *block, int stride);
9
+void ff_h264_idct8_dc_add_8_mmi(uint8_t *dst, int16_t *block, int stride);
10
+void ff_h264_idct_add16_8_mmi(uint8_t *dst, const int *block_offset,
11
+ int16_t *block, int stride, const uint8_t nnzc[15*8]);
12
+void ff_h264_idct_add16intra_8_mmi(uint8_t *dst, const int *block_offset,
13
+ int16_t *block, int stride, const uint8_t nnzc[15*8]);
14
+void ff_h264_idct8_add4_8_mmi(uint8_t *dst, const int *block_offset,
15
+ int16_t *block, int stride, const uint8_t nnzc[15*8]);
16
+void ff_h264_idct_add8_8_mmi(uint8_t **dest, const int *block_offset,
17
+ int16_t *block, int stride, const uint8_t nnzc[15*8]);
18
+void ff_h264_idct_add8_422_8_mmi(uint8_t **dest, const int *block_offset,
19
+ int16_t *block, int stride, const uint8_t nnzc[15*8]);
20
+void ff_h264_luma_dc_dequant_idct_8_mmi(int16_t *output, int16_t *input,
21
+ int qmul);
22
+void ff_h264_chroma_dc_dequant_idct_8_mmi(int16_t *block, int qmul);
23
+void ff_h264_chroma422_dc_dequant_idct_8_mmi(int16_t *block, int qmul);
24
+
25
void ff_h264_weight_pixels16_8_mmi(uint8_t *block, int stride, int height,
26
int log2_denom, int weight, int offset);
27
void ff_h264_biweight_pixels16_8_mmi(uint8_t *dst, uint8_t *src,
28
29
int stride, int height, int log2_denom, int weightd, int weights,
30
int offset);
31
32
+void ff_deblock_v_chroma_8_mmi(uint8_t *pix, int stride, int alpha, int beta,
33
+ int8_t *tc0);
34
+void ff_deblock_v_chroma_intra_8_mmi(uint8_t *pix, int stride, int alpha,
35
+ int beta);
36
+void ff_deblock_h_chroma_8_mmi(uint8_t *pix, int stride, int alpha, int beta,
37
+ int8_t *tc0);
38
+void ff_deblock_h_chroma_intra_8_mmi(uint8_t *pix, int stride, int alpha,
39
+ int beta);
40
+void ff_deblock_v_luma_8_mmi(uint8_t *pix, int stride, int alpha, int beta,
41
+ int8_t *tc0);
42
+void ff_deblock_v_luma_intra_8_mmi(uint8_t *pix, int stride, int alpha,
43
+ int beta);
44
+void ff_deblock_h_luma_8_mmi(uint8_t *pix, int stride, int alpha, int beta,
45
+ int8_t *tc0);
46
+void ff_deblock_h_luma_intra_8_mmi(uint8_t *pix, int stride, int alpha,
47
+ int beta);
48
+void ff_deblock_v8_luma_8_mmi(uint8_t *pix, int stride, int alpha, int beta,
49
+ int8_t *tc0);
50
+void ff_deblock_v8_luma_intra_8_mmi(uint8_t *pix, int stride, int alpha,
51
+ int beta);
52
+
53
void ff_put_h264_qpel16_mc00_mmi(uint8_t *dst, const uint8_t *src,
54
ptrdiff_t dst_stride);
55
void ff_put_h264_qpel16_mc10_mmi(uint8_t *dst, const uint8_t *src,
56
ffmpeg-2.8.1.tar.bz2/libavcodec/mips/h264dsp_mmi.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/mips/h264dsp_mmi.c
Changed
2241
1
2
* Copyright (c) 2015 Loongson Technology Corporation Limited
3
* Copyright (c) 2015 Zhou Xiaoyong <zhouxiaoyong@loongson.cn>
4
* Zhang Shuangshuang <zhangshuangshuang@ict.ac.cn>
5
+ * Heiher <r@hev.cc>
6
*
7
* This file is part of FFmpeg.
8
*
9
10
#include "libavcodec/bit_depth_template.c"
11
#include "h264dsp_mips.h"
12
13
+void ff_h264_add_pixels4_8_mmi(uint8_t *dst, int16_t *src, int stride)
14
+{
15
+ __asm__ volatile (
16
+ "xor $f0, $f0, $f0 \r\n"
17
+ "ldc1 $f2, 0(%[src]) \r\n"
18
+ "ldc1 $f4, 8(%[src]) \r\n"
19
+ "ldc1 $f6, 16(%[src]) \r\n"
20
+ "ldc1 $f8, 24(%[src]) \r\n"
21
+ "lwc1 $f10, 0(%[dst0]) \r\n"
22
+ "lwc1 $f12, 0(%[dst1]) \r\n"
23
+ "lwc1 $f14, 0(%[dst2]) \r\n"
24
+ "lwc1 $f16, 0(%[dst3]) \r\n"
25
+ "punpcklbh $f10, $f10, $f0 \r\n"
26
+ "punpcklbh $f12, $f12, $f0 \r\n"
27
+ "punpcklbh $f14, $f14, $f0 \r\n"
28
+ "punpcklbh $f16, $f16, $f0 \r\n"
29
+ "paddh $f2, $f2, $f10 \r\n"
30
+ "paddh $f4, $f4, $f12 \r\n"
31
+ "paddh $f6, $f6, $f14 \r\n"
32
+ "paddh $f8, $f8, $f16 \r\n"
33
+ "packushb $f2, $f2, $f0 \r\n"
34
+ "packushb $f4, $f4, $f0 \r\n"
35
+ "packushb $f6, $f6, $f0 \r\n"
36
+ "packushb $f8, $f8, $f0 \r\n"
37
+ "swc1 $f2, 0(%[dst0]) \r\n"
38
+ "swc1 $f4, 0(%[dst1]) \r\n"
39
+ "swc1 $f6, 0(%[dst2]) \r\n"
40
+ "swc1 $f8, 0(%[dst3]) \r\n"
41
+ ::[dst0]"r"(dst),[dst1]"r"(dst+stride),[dst2]"r"(dst+2*stride),
42
+ [dst3]"r"(dst+3*stride),[src]"r"(src)
43
+ : "$f0","$f2","$f4","$f6","$f8","$f10","$f12","$f14","$f16"
44
+ );
45
+
46
+ memset(src, 0, 32);
47
+}
48
+
49
+void ff_h264_idct_add_8_mmi(uint8_t *dst, int16_t *block, int stride)
50
+{
51
+ __asm__ volatile (
52
+ "dli $8, 1 \r\n"
53
+ "ldc1 $f0, 0(%[block]) \r\n"
54
+ "dmtc1 $8, $f16 \r\n"
55
+ "ldc1 $f2, 8(%[block]) \r\n"
56
+ "dli $8, 6 \r\n"
57
+ "ldc1 $f4, 16(%[block]) \r\n"
58
+ "dmtc1 $8, $f18 \r\n"
59
+ "psrah $f8, $f2, $f16 \r\n"
60
+ "ldc1 $f6, 24(%[block]) \r\n"
61
+ "psrah $f10, $f6, $f16 \r\n"
62
+ "psubh $f8, $f8, $f6 \r\n"
63
+ "paddh $f10, $f10, $f2 \r\n"
64
+ "paddh $f20, $f4, $f0 \r\n"
65
+ "psubh $f0, $f0, $f4 \r\n"
66
+ "paddh $f22, $f10, $f20 \r\n"
67
+ "psubh $f4, $f20, $f10 \r\n"
68
+ "paddh $f20, $f8, $f0 \r\n"
69
+ "psubh $f0, $f0, $f8 \r\n"
70
+ "punpckhhw $f2, $f22, $f20 \r\n"
71
+ "punpcklhw $f10, $f22, $f20 \r\n"
72
+ "punpckhhw $f8, $f0, $f4 \r\n"
73
+ "punpcklhw $f0, $f0, $f4 \r\n"
74
+ "punpckhwd $f4, $f10, $f0 \r\n"
75
+ "punpcklwd $f10, $f10, $f0 \r\n"
76
+ "punpcklwd $f20, $f2, $f8 \r\n"
77
+ "punpckhwd $f0, $f2, $f8 \r\n"
78
+ "paddh $f10, $f10, %[ff_pw_32] \r\n"
79
+ "psrah $f8, $f4, $f16 \r\n"
80
+ "psrah $f6, $f0, $f16 \r\n"
81
+ "psubh $f8, $f8, $f0 \r\n"
82
+ "paddh $f6, $f6, $f4 \r\n"
83
+ "paddh $f2, $f20, $f10 \r\n"
84
+ "psubh $f10, $f10, $f20 \r\n"
85
+ "paddh $f20, $f6, $f2 \r\n"
86
+ "psubh $f2, $f2, $f6 \r\n"
87
+ "paddh $f22, $f8, $f10 \r\n"
88
+ "xor $f14, $f14, $f14 \r\n"
89
+ "psubh $f10, $f10, $f8 \r\n"
90
+ "sdc1 $f14, 0(%[block]) \r\n"
91
+ "sdc1 $f14, 8(%[block]) \r\n"
92
+ "sdc1 $f14, 16(%[block]) \r\n"
93
+ "sdc1 $f14, 24(%[block]) \r\n"
94
+ "lwc1 $f4, 0(%[dst]) \r\n"
95
+ "psrah $f6, $f20, $f18 \r\n"
96
+ "gslwxc1 $f0, 0(%[dst], %[stride]) \r\n"
97
+ "psrah $f8, $f22, $f18 \r\n"
98
+ "punpcklbh $f4, $f4, $f14 \r\n"
99
+ "punpcklbh $f0, $f0, $f14 \r\n"
100
+ "paddh $f4, $f4, $f6 \r\n"
101
+ "paddh $f0, $f0, $f8 \r\n"
102
+ "packushb $f4, $f4, $f14 \r\n"
103
+ "packushb $f0, $f0, $f14 \r\n"
104
+ "swc1 $f4, 0(%[dst]) \r\n"
105
+ "gsswxc1 $f0, 0(%[dst], %[stride]) \r\n"
106
+ "daddu %[dst], %[dst], %[stride] \r\n"
107
+ "daddu %[dst], %[dst], %[stride] \r\n"
108
+ "lwc1 $f4, 0(%[dst]) \r\n"
109
+ "psrah $f10, $f10, $f18 \r\n"
110
+ "gslwxc1 $f0, 0(%[dst], %[stride]) \r\n"
111
+ "psrah $f2, $f2, $f18 \r\n"
112
+ "punpcklbh $f4, $f4, $f14 \r\n"
113
+ "punpcklbh $f0, $f0, $f14 \r\n"
114
+ "paddh $f4, $f4, $f10 \r\n"
115
+ "paddh $f0, $f0, $f2 \r\n"
116
+ "packushb $f4, $f4, $f14 \r\n"
117
+ "swc1 $f4, 0(%[dst]) \r\n"
118
+ "packushb $f0, $f0, $f14 \r\n"
119
+ "gsswxc1 $f0, 0(%[dst], %[stride]) \r\n"
120
+ ::[dst]"r"(dst),[block]"r"(block),[stride]"r"((uint64_t)stride),
121
+ [ff_pw_32]"f"(ff_pw_32)
122
+ : "$8","$f0","$f2","$f4","$f6","$f8","$f10","$f12","$f14","$f16",
123
+ "$f18","$f20","$f22"
124
+ );
125
+
126
+ memset(block, 0, 32);
127
+}
128
+
129
+void ff_h264_idct8_add_8_mmi(uint8_t *dst, int16_t *block, int stride)
130
+{
131
+ __asm__ volatile (
132
+ "lhu $10, 0x0(%[block]) \r\n"
133
+ "daddiu $29, $29, -0x20 \r\n"
134
+ "daddiu $10, $10, 0x20 \r\n"
135
+ "ldc1 $f2, 0x10(%[block]) \r\n"
136
+ "sh $10, 0x0(%[block]) \r\n"
137
+ "ldc1 $f4, 0x20(%[block]) \r\n"
138
+ "dli $10, 0x1 \r\n"
139
+ "ldc1 $f6, 0x30(%[block]) \r\n"
140
+ "dmtc1 $10, $f16 \r\n"
141
+ "ldc1 $f10, 0x50(%[block]) \r\n"
142
+ "ldc1 $f12, 0x60(%[block]) \r\n"
143
+ "ldc1 $f14, 0x70(%[block]) \r\n"
144
+ "mov.d $f0, $f2 \r\n"
145
+ "psrah $f2, $f2, $f16 \r\n"
146
+ "psrah $f8, $f10, $f16 \r\n"
147
+ "paddh $f2, $f2, $f0 \r\n"
148
+ "paddh $f8, $f8, $f10 \r\n"
149
+ "paddh $f2, $f2, $f10 \r\n"
150
+ "paddh $f8, $f8, $f14 \r\n"
151
+ "paddh $f2, $f2, $f6 \r\n"
152
+ "psubh $f8, $f8, $f0 \r\n"
153
+ "psubh $f0, $f0, $f6 \r\n"
154
+ "psubh $f10, $f10, $f6 \r\n"
155
+ "psrah $f6, $f6, $f16 \r\n"
156
+ "paddh $f0, $f0, $f14 \r\n"
157
+ "psubh $f10, $f10, $f14 \r\n"
158
+ "psrah $f14, $f14, $f16 \r\n"
159
+ "psubh $f0, $f0, $f6 \r\n"
160
+ "dli $10, 0x2 \r\n"
161
+ "psubh $f10, $f10, $f14 \r\n"
162
+ "dmtc1 $10, $f18 \r\n"
163
+ "mov.d $f14, $f2 \r\n"
164
+ "psrah $f2, $f2, $f18 \r\n"
165
+ "psrah $f6, $f8, $f18 \r\n"
166
+ "paddh $f6, $f6, $f0 \r\n"
167
+ "psrah $f0, $f0, $f18 \r\n"
168
+ "paddh $f2, $f2, $f10 \r\n"
169
+ "psrah $f10, $f10, $f18 \r\n"
170
+ "psubh $f0, $f0, $f8 \r\n"
171
+ "psubh $f14, $f14, $f10 \r\n"
172
+ "mov.d $f10, $f12 \r\n"
173
+ "psrah $f12, $f12, $f16 \r\n"
174
+ "psrah $f8, $f4, $f16 \r\n"
175
+ "paddh $f12, $f12, $f4 \r\n"
176
+ "psubh $f8, $f8, $f10 \r\n"
177
+ "ldc1 $f4, 0x0(%[block]) \r\n"
178
+ "ldc1 $f10, 0x40(%[block]) \r\n"
179
+ "paddh $f10, $f10, $f4 \r\n"
180
+ "paddh $f4, $f4, $f4 \r\n"
181
+ "paddh $f12, $f12, $f10 \r\n"
182
+ "psubh $f4, $f4, $f10 \r\n"
183
+ "paddh $f10, $f10, $f10 \r\n"
184
+ "paddh $f8, $f8, $f4 \r\n"
185
+ "psubh $f10, $f10, $f12 \r\n"
186
+ "paddh $f4, $f4, $f4 \r\n"
187
+ "paddh $f14, $f14, $f12 \r\n"
188
+ "psubh $f4, $f4, $f8 \r\n"
189
+ "paddh $f12, $f12, $f12 \r\n"
190
+ "paddh $f0, $f0, $f8 \r\n"
191
+ "psubh $f12, $f12, $f14 \r\n"
192
+ "paddh $f8, $f8, $f8 \r\n"
193
+ "paddh $f6, $f6, $f4 \r\n"
194
+ "psubh $f8, $f8, $f0 \r\n"
195
+ "paddh $f4, $f4, $f4 \r\n"
196
+ "paddh $f2, $f2, $f10 \r\n"
197
+ "psubh $f4, $f4, $f6 \r\n"
198
+ "paddh $f10, $f10, $f10 \r\n"
199
+ "sdc1 $f12, 0x0(%[block]) \r\n"
200
+ "psubh $f10, $f10, $f2 \r\n"
201
+ "punpckhhw $f12, $f14, $f0 \r\n"
202
+ "punpcklhw $f14, $f14, $f0 \r\n"
203
+ "punpckhhw $f0, $f6, $f2 \r\n"
204
+ "punpcklhw $f6, $f6, $f2 \r\n"
205
+ "punpckhwd $f2, $f14, $f6 \r\n"
206
+ "punpcklwd $f14, $f14, $f6 \r\n"
207
+ "punpckhwd $f6, $f12, $f0 \r\n"
208
+ "punpcklwd $f12, $f12, $f0 \r\n"
209
+ "ldc1 $f0, 0x0(%[block]) \r\n"
210
+ "sdc1 $f14, 0x0($29) \r\n"
211
+ "sdc1 $f2, 0x10($29) \r\n"
212
+ "dmfc1 $8, $f12 \r\n"
213
+ "dmfc1 $11, $f6 \r\n"
214
+ "punpckhhw $f6, $f10, $f4 \r\n"
215
+ "punpcklhw $f10, $f10, $f4 \r\n"
216
+ "punpckhhw $f4, $f8, $f0 \r\n"
217
+ "punpcklhw $f8, $f8, $f0 \r\n"
218
+ "punpckhwd $f0, $f10, $f8 \r\n"
219
+ "punpcklwd $f10, $f10, $f8 \r\n"
220
+ "punpckhwd $f8, $f6, $f4 \r\n"
221
+ "punpcklwd $f6, $f6, $f4 \r\n"
222
+ "sdc1 $f10, 0x8($29) \r\n"
223
+ "sdc1 $f0, 0x18($29) \r\n"
224
+ "dmfc1 $9, $f6 \r\n"
225
+ "dmfc1 $12, $f8 \r\n"
226
+ "ldc1 $f2, 0x18(%[block]) \r\n"
227
+ "ldc1 $f12, 0x28(%[block]) \r\n"
228
+ "ldc1 $f4, 0x38(%[block]) \r\n"
229
+ "ldc1 $f0, 0x58(%[block]) \r\n"
230
+ "ldc1 $f6, 0x68(%[block]) \r\n"
231
+ "ldc1 $f8, 0x78(%[block]) \r\n"
232
+ "mov.d $f14, $f2 \r\n"
233
+ "psrah $f10, $f0, $f16 \r\n"
234
+ "psrah $f2, $f2, $f16 \r\n"
235
+ "paddh $f10, $f10, $f0 \r\n"
236
+ "paddh $f2, $f2, $f14 \r\n"
237
+ "paddh $f10, $f10, $f8 \r\n"
238
+ "paddh $f2, $f2, $f0 \r\n"
239
+ "psubh $f10, $f10, $f14 \r\n"
240
+ "paddh $f2, $f2, $f4 \r\n"
241
+ "psubh $f14, $f14, $f4 \r\n"
242
+ "psubh $f0, $f0, $f4 \r\n"
243
+ "psrah $f4, $f4, $f16 \r\n"
244
+ "paddh $f14, $f14, $f8 \r\n"
245
+ "psubh $f0, $f0, $f8 \r\n"
246
+ "psrah $f8, $f8, $f16 \r\n"
247
+ "psubh $f14, $f14, $f4 \r\n"
248
+ "psubh $f0, $f0, $f8 \r\n"
249
+ "mov.d $f8, $f2 \r\n"
250
+ "psrah $f4, $f10, $f18 \r\n"
251
+ "psrah $f2, $f2, $f18 \r\n"
252
+ "paddh $f4, $f4, $f14 \r\n"
253
+ "psrah $f14, $f14, $f18 \r\n"
254
+ "paddh $f2, $f2, $f0 \r\n"
255
+ "psrah $f0, $f0, $f18 \r\n"
256
+ "psubh $f14, $f14, $f10 \r\n"
257
+ "psubh $f8, $f8, $f0 \r\n"
258
+ "mov.d $f0, $f6 \r\n"
259
+ "psrah $f6, $f6, $f16 \r\n"
260
+ "psrah $f10, $f12, $f16 \r\n"
261
+ "paddh $f6, $f6, $f12 \r\n"
262
+ "psubh $f10, $f10, $f0 \r\n"
263
+ "ldc1 $f12, 0x8(%[block]) \r\n"
264
+ "ldc1 $f0, 0x48(%[block]) \r\n"
265
+ "paddh $f0, $f0, $f12 \r\n"
266
+ "paddh $f12, $f12, $f12 \r\n"
267
+ "paddh $f6, $f6, $f0 \r\n"
268
+ "psubh $f12, $f12, $f0 \r\n"
269
+ "paddh $f0, $f0, $f0 \r\n"
270
+ "paddh $f10, $f10, $f12 \r\n"
271
+ "psubh $f0, $f0, $f6 \r\n"
272
+ "paddh $f12, $f12, $f12 \r\n"
273
+ "paddh $f8, $f8, $f6 \r\n"
274
+ "psubh $f12, $f12, $f10 \r\n"
275
+ "paddh $f6, $f6, $f6 \r\n"
276
+ "paddh $f14, $f14, $f10 \r\n"
277
+ "psubh $f6, $f6, $f8 \r\n"
278
+ "paddh $f10, $f10, $f10 \r\n"
279
+ "paddh $f4, $f4, $f12 \r\n"
280
+ "psubh $f10, $f10, $f14 \r\n"
281
+ "paddh $f12, $f12, $f12 \r\n"
282
+ "paddh $f2, $f2, $f0 \r\n"
283
+ "psubh $f12, $f12, $f4 \r\n"
284
+ "paddh $f0, $f0, $f0 \r\n"
285
+ "sdc1 $f6, 0x8(%[block]) \r\n"
286
+ "psubh $f0, $f0, $f2 \r\n"
287
+ "punpckhhw $f6, $f8, $f14 \r\n"
288
+ "punpcklhw $f8, $f8, $f14 \r\n"
289
+ "punpckhhw $f14, $f4, $f2 \r\n"
290
+ "punpcklhw $f4, $f4, $f2 \r\n"
291
+ "punpckhwd $f2, $f8, $f4 \r\n"
292
+ "punpcklwd $f8, $f8, $f4 \r\n"
293
+ "punpckhwd $f4, $f6, $f14 \r\n"
294
+ "punpcklwd $f6, $f6, $f14 \r\n"
295
+ "ldc1 $f14, 0x8(%[block]) \r\n"
296
+ "dmfc1 $13, $f8 \r\n"
297
+ "dmfc1 $15, $f2 \r\n"
298
+ "mov.d $f24, $f6 \r\n"
299
+ "mov.d $f28, $f4 \r\n"
300
+ "punpckhhw $f4, $f0, $f12 \r\n"
301
+ "punpcklhw $f0, $f0, $f12 \r\n"
302
+ "punpckhhw $f12, $f10, $f14 \r\n"
303
+ "punpcklhw $f10, $f10, $f14 \r\n"
304
+ "punpckhwd $f14, $f0, $f10 \r\n"
305
+ "punpcklwd $f0, $f0, $f10 \r\n"
306
+ "punpckhwd $f10, $f4, $f12 \r\n"
307
+ "punpcklwd $f4, $f4, $f12 \r\n"
308
+ "dmfc1 $14, $f0 \r\n"
309
+ "mov.d $f22, $f14 \r\n"
310
+ "mov.d $f26, $f4 \r\n"
311
+ "mov.d $f30, $f10 \r\n"
312
+ "daddiu $10, %[dst], 0x4 \r\n"
313
+ "dmtc1 $15, $f14 \r\n"
314
+ "dmtc1 $11, $f12 \r\n"
315
+ "ldc1 $f2, 0x10($29) \r\n"
316
+ "dmtc1 $8, $f6 \r\n"
317
+ "mov.d $f8, $f2 \r\n"
318
+ "psrah $f2, $f2, $f16 \r\n"
319
+ "psrah $f0, $f14, $f16 \r\n"
320
+ "paddh $f2, $f2, $f8 \r\n"
321
+ "paddh $f0, $f0, $f14 \r\n"
322
+ "paddh $f2, $f2, $f14 \r\n"
323
+ "paddh $f0, $f0, $f28 \r\n"
324
+ "paddh $f2, $f2, $f12 \r\n"
325
+ "psubh $f0, $f0, $f8 \r\n"
326
+ "psubh $f8, $f8, $f12 \r\n"
327
+ "psubh $f14, $f14, $f12 \r\n"
328
+ "psrah $f12, $f12, $f16 \r\n"
329
+ "paddh $f8, $f8, $f28 \r\n"
330
+ "psubh $f14, $f14, $f28 \r\n"
331
+ "psrah $f10, $f28, $f16 \r\n"
332
+ "psubh $f8, $f8, $f12 \r\n"
333
+ "psubh $f14, $f14, $f10 \r\n"
334
+ "mov.d $f10, $f2 \r\n"
335
+ "psrah $f2, $f2, $f18 \r\n"
336
+ "psrah $f12, $f0, $f18 \r\n"
337
+ "paddh $f2, $f2, $f14 \r\n"
338
+ "paddh $f12, $f12, $f8 \r\n"
339
+ "psrah $f8, $f8, $f18 \r\n"
340
+ "psrah $f14, $f14, $f18 \r\n"
341
+ "psubh $f8, $f8, $f0 \r\n"
342
+ "psubh $f10, $f10, $f14 \r\n"
343
+ "mov.d $f14, $f24 \r\n"
344
+ "psrah $f4, $f24, $f16 \r\n"
345
+ "psrah $f0, $f6, $f16 \r\n"
346
+ "paddh $f4, $f4, $f6 \r\n"
347
+ "psubh $f0, $f0, $f14 \r\n"
348
+ "ldc1 $f6, 0x0($29) \r\n"
349
+ "dmtc1 $13, $f14 \r\n"
350
+ "paddh $f14, $f14, $f6 \r\n"
351
+ "paddh $f6, $f6, $f6 \r\n"
352
+ "paddh $f4, $f4, $f14 \r\n"
353
+ "psubh $f6, $f6, $f14 \r\n"
354
+ "paddh $f14, $f14, $f14 \r\n"
355
+ "paddh $f0, $f0, $f6 \r\n"
356
+ "psubh $f14, $f14, $f4 \r\n"
357
+ "paddh $f6, $f6, $f6 \r\n"
358
+ "paddh $f10, $f10, $f4 \r\n"
359
+ "psubh $f6, $f6, $f0 \r\n"
360
+ "paddh $f4, $f4, $f4 \r\n"
361
+ "paddh $f8, $f8, $f0 \r\n"
362
+ "psubh $f4, $f4, $f10 \r\n"
363
+ "paddh $f0, $f0, $f0 \r\n"
364
+ "paddh $f12, $f12, $f6 \r\n"
365
+ "psubh $f0, $f0, $f8 \r\n"
366
+ "paddh $f6, $f6, $f6 \r\n"
367
+ "paddh $f2, $f2, $f14 \r\n"
368
+ "psubh $f6, $f6, $f12 \r\n"
369
+ "paddh $f14, $f14, $f14 \r\n"
370
+ "sdc1 $f6, 0x0($29) \r\n"
371
+ "psubh $f14, $f14, $f2 \r\n"
372
+ "sdc1 $f0, 0x10($29) \r\n"
373
+ "dmfc1 $8, $f4 \r\n"
374
+ "xor $f4, $f4, $f4 \r\n"
375
+ "sdc1 $f4, 0x0(%[block]) \r\n"
376
+ "sdc1 $f4, 0x8(%[block]) \r\n"
377
+ "sdc1 $f4, 0x10(%[block]) \r\n"
378
+ "sdc1 $f4, 0x18(%[block]) \r\n"
379
+ "sdc1 $f4, 0x20(%[block]) \r\n"
380
+ "sdc1 $f4, 0x28(%[block]) \r\n"
381
+ "sdc1 $f4, 0x30(%[block]) \r\n"
382
+ "sdc1 $f4, 0x38(%[block]) \r\n"
383
+ "sdc1 $f4, 0x40(%[block]) \r\n"
384
+ "sdc1 $f4, 0x48(%[block]) \r\n"
385
+ "sdc1 $f4, 0x50(%[block]) \r\n"
386
+ "sdc1 $f4, 0x58(%[block]) \r\n"
387
+ "sdc1 $f4, 0x60(%[block]) \r\n"
388
+ "sdc1 $f4, 0x68(%[block]) \r\n"
389
+ "sdc1 $f4, 0x70(%[block]) \r\n"
390
+ "sdc1 $f4, 0x78(%[block]) \r\n"
391
+ "dli $11, 0x6 \r\n"
392
+ "lwc1 $f6, 0x0(%[dst]) \r\n"
393
+ "dmtc1 $11, $f20 \r\n"
394
+ "gslwxc1 $f0, 0x0(%[dst], %[stride]) \r\n"
395
+ "psrah $f10, $f10, $f20 \r\n"
396
+ "psrah $f8, $f8, $f20 \r\n"
397
+ "punpcklbh $f6, $f6, $f4 \r\n"
398
+ "punpcklbh $f0, $f0, $f4 \r\n"
399
+ "paddh $f6, $f6, $f10 \r\n"
400
+ "paddh $f0, $f0, $f8 \r\n"
401
+ "packushb $f6, $f6, $f4 \r\n"
402
+ "packushb $f0, $f0, $f4 \r\n"
403
+ "swc1 $f6, 0x0(%[dst]) \r\n"
404
+ "gsswxc1 $f0, 0x0(%[dst], %[stride]) \r\n"
405
+ "daddu %[dst], %[dst], %[stride] \r\n"
406
+ "daddu %[dst], %[dst], %[stride] \r\n"
407
+ "lwc1 $f6, 0x0(%[dst]) \r\n"
408
+ "gslwxc1 $f0, 0x0(%[dst], %[stride]) \r\n"
409
+ "psrah $f12, $f12, $f20 \r\n"
410
+ "psrah $f2, $f2, $f20 \r\n"
411
+ "punpcklbh $f6, $f6, $f4 \r\n"
412
+ "punpcklbh $f0, $f0, $f4 \r\n"
413
+ "paddh $f6, $f6, $f12 \r\n"
414
+ "paddh $f0, $f0, $f2 \r\n"
415
+ "packushb $f6, $f6, $f4 \r\n"
416
+ "packushb $f0, $f0, $f4 \r\n"
417
+ "swc1 $f6, 0x0(%[dst]) \r\n"
418
+ "gsswxc1 $f0, 0x0(%[dst], %[stride]) \r\n"
419
+ "ldc1 $f10, 0x0($29) \r\n"
420
+ "ldc1 $f8, 0x10($29) \r\n"
421
+ "dmtc1 $8, $f12 \r\n"
422
+ "daddu %[dst], %[dst], %[stride] \r\n"
423
+ "daddu %[dst], %[dst], %[stride] \r\n"
424
+ "lwc1 $f6, 0x0(%[dst]) \r\n"
425
+ "gslwxc1 $f0, 0x0(%[dst], %[stride]) \r\n"
426
+ "psrah $f14, $f14, $f20 \r\n"
427
+ "psrah $f10, $f10, $f20 \r\n"
428
+ "punpcklbh $f6, $f6, $f4 \r\n"
429
+ "punpcklbh $f0, $f0, $f4 \r\n"
430
+ "paddh $f6, $f6, $f14 \r\n"
431
+ "paddh $f0, $f0, $f10 \r\n"
432
+ "packushb $f6, $f6, $f4 \r\n"
433
+ "packushb $f0, $f0, $f4 \r\n"
434
+ "swc1 $f6, 0x0(%[dst]) \r\n"
435
+ "gsswxc1 $f0, 0x0(%[dst], %[stride]) \r\n"
436
+ "daddu %[dst], %[dst], %[stride] \r\n"
437
+ "daddu %[dst], %[dst], %[stride] \r\n"
438
+ "lwc1 $f6, 0x0(%[dst]) \r\n"
439
+ "gslwxc1 $f0, 0x0(%[dst], %[stride]) \r\n"
440
+ "psrah $f8, $f8, $f20 \r\n"
441
+ "psrah $f12, $f12, $f20 \r\n"
442
+ "punpcklbh $f6, $f6, $f4 \r\n"
443
+ "punpcklbh $f0, $f0, $f4 \r\n"
444
+ "paddh $f6, $f6, $f8 \r\n"
445
+ "paddh $f0, $f0, $f12 \r\n"
446
+ "packushb $f6, $f6, $f4 \r\n"
447
+ "packushb $f0, $f0, $f4 \r\n"
448
+ "swc1 $f6, 0x0(%[dst]) \r\n"
449
+ "gsswxc1 $f0, 0x0(%[dst], %[stride]) \r\n"
450
+ "dmtc1 $12, $f2 \r\n"
451
+ "dmtc1 $9, $f12 \r\n"
452
+ "ldc1 $f8, 0x18($29) \r\n"
453
+ "mov.d $f10, $f8 \r\n"
454
+ "psrah $f8, $f8, $f16 \r\n"
455
+ "psrah $f14, $f22, $f16 \r\n"
456
+ "paddh $f14, $f14, $f22 \r\n"
457
+ "paddh $f8, $f8, $f10 \r\n"
458
+ "paddh $f14, $f14, $f30 \r\n"
459
+ "paddh $f8, $f8, $f22 \r\n"
460
+ "psubh $f14, $f14, $f10 \r\n"
461
+ "paddh $f8, $f8, $f2 \r\n"
462
+ "psubh $f10, $f10, $f2 \r\n"
463
+ "psubh $f6, $f22, $f2 \r\n"
464
+ "psrah $f2, $f2, $f16 \r\n"
465
+ "paddh $f10, $f10, $f30 \r\n"
466
+ "psubh $f6, $f6, $f30 \r\n"
467
+ "psrah $f4, $f30, $f16 \r\n"
468
+ "psubh $f10, $f10, $f2 \r\n"
469
+ "psubh $f6, $f6, $f4 \r\n"
470
+ "mov.d $f4, $f8 \r\n"
471
+ "psrah $f8, $f8, $f18 \r\n"
472
+ "psrah $f2, $f14, $f18 \r\n"
473
+ "paddh $f8, $f8, $f6 \r\n"
474
+ "paddh $f2, $f2, $f10 \r\n"
475
+ "psrah $f10, $f10, $f18 \r\n"
476
+ "psrah $f6, $f6, $f18 \r\n"
477
+ "psubh $f10, $f10, $f14 \r\n"
478
+ "psubh $f4, $f4, $f6 \r\n"
479
+ "mov.d $f6, $f26 \r\n"
480
+ "psrah $f0, $f26, $f16 \r\n"
481
+ "psrah $f14, $f12, $f16 \r\n"
482
+ "paddh $f0, $f0, $f12 \r\n"
483
+ "psubh $f14, $f14, $f6 \r\n"
484
+ "ldc1 $f12, 0x8($29) \r\n"
485
+ "dmtc1 $14, $f6 \r\n"
486
+ "paddh $f6, $f6, $f12 \r\n"
487
+ "paddh $f12, $f12, $f12 \r\n"
488
+ "paddh $f0, $f0, $f6 \r\n"
489
+ "psubh $f12, $f12, $f6 \r\n"
490
+ "paddh $f6, $f6, $f6 \r\n"
491
+ "paddh $f14, $f14, $f12 \r\n"
492
+ "psubh $f6, $f6, $f0 \r\n"
493
+ "paddh $f12, $f12, $f12 \r\n"
494
+ "paddh $f4, $f4, $f0 \r\n"
495
+ "psubh $f12, $f12, $f14 \r\n"
496
+ "paddh $f0, $f0, $f0 \r\n"
497
+ "paddh $f10, $f10, $f14 \r\n"
498
+ "psubh $f0, $f0, $f4 \r\n"
499
+ "paddh $f14, $f14, $f14 \r\n"
500
+ "paddh $f2, $f2, $f12 \r\n"
501
+ "psubh $f14, $f14, $f10 \r\n"
502
+ "paddh $f12, $f12, $f12 \r\n"
503
+ "paddh $f8, $f8, $f6 \r\n"
504
+ "psubh $f12, $f12, $f2 \r\n"
505
+ "paddh $f6, $f6, $f6 \r\n"
506
+ "sdc1 $f12, 0x8($29) \r\n"
507
+ "psubh $f6, $f6, $f8 \r\n"
508
+ "sdc1 $f14, 0x18($29) \r\n"
509
+ "dmfc1 $9, $f0 \r\n"
510
+ "xor $f0, $f0, $f0 \r\n"
511
+ "lwc1 $f12, 0x0($10) \r\n"
512
+ "gslwxc1 $f14, 0x0($10, %[stride]) \r\n"
513
+ "psrah $f4, $f4, $f20 \r\n"
514
+ "psrah $f10, $f10, $f20 \r\n"
515
+ "punpcklbh $f12, $f12, $f0 \r\n"
516
+ "punpcklbh $f14, $f14, $f0 \r\n"
517
+ "paddh $f12, $f12, $f4 \r\n"
518
+ "paddh $f14, $f14, $f10 \r\n"
519
+ "packushb $f12, $f12, $f0 \r\n"
520
+ "packushb $f14, $f14, $f0 \r\n"
521
+ "swc1 $f12, 0x0($10) \r\n"
522
+ "gsswxc1 $f14, 0x0($10, %[stride]) \r\n"
523
+ "daddu $10, $10, %[stride] \r\n"
524
+ "daddu $10, $10, %[stride] \r\n"
525
+ "lwc1 $f12, 0x0($10) \r\n"
526
+ "gslwxc1 $f14, 0x0($10, %[stride]) \r\n"
527
+ "psrah $f2, $f2, $f20 \r\n"
528
+ "psrah $f8, $f8, $f20 \r\n"
529
+ "punpcklbh $f12, $f12, $f0 \r\n"
530
+ "punpcklbh $f14, $f14, $f0 \r\n"
531
+ "paddh $f12, $f12, $f2 \r\n"
532
+ "paddh $f14, $f14, $f8 \r\n"
533
+ "packushb $f12, $f12, $f0 \r\n"
534
+ "packushb $f14, $f14, $f0 \r\n"
535
+ "swc1 $f12, 0x0($10) \r\n"
536
+ "gsswxc1 $f14, 0x0($10, %[stride]) \r\n"
537
+ "ldc1 $f4, 0x8($29) \r\n"
538
+ "ldc1 $f10, 0x18($29) \r\n"
539
+ "daddu $10, $10, %[stride] \r\n"
540
+ "dmtc1 $9, $f2 \r\n"
541
+ "daddu $10, $10, %[stride] \r\n"
542
+ "lwc1 $f12, 0x0($10) \r\n"
543
+ "gslwxc1 $f14, 0x0($10, %[stride]) \r\n"
544
+ "psrah $f6, $f6, $f20 \r\n"
545
+ "psrah $f4, $f4, $f20 \r\n"
546
+ "punpcklbh $f12, $f12, $f0 \r\n"
547
+ "punpcklbh $f14, $f14, $f0 \r\n"
548
+ "paddh $f12, $f12, $f6 \r\n"
549
+ "paddh $f14, $f14, $f4 \r\n"
550
+ "packushb $f12, $f12, $f0 \r\n"
551
+ "packushb $f14, $f14, $f0 \r\n"
552
+ "swc1 $f12, 0x0($10) \r\n"
553
+ "gsswxc1 $f14, 0x0($10, %[stride]) \r\n"
554
+ "daddu $10, $10, %[stride] \r\n"
555
+ "daddu $10, $10, %[stride] \r\n"
556
+ "lwc1 $f12, 0x0($10) \r\n"
557
+ "gslwxc1 $f14, 0x0($10, %[stride]) \r\n"
558
+ "psrah $f10, $f10, $f20 \r\n"
559
+ "psrah $f2, $f2, $f20 \r\n"
560
+ "punpcklbh $f12, $f12, $f0 \r\n"
561
+ "punpcklbh $f14, $f14, $f0 \r\n"
562
+ "paddh $f12, $f12, $f10 \r\n"
563
+ "paddh $f14, $f14, $f2 \r\n"
564
+ "packushb $f12, $f12, $f0 \r\n"
565
+ "packushb $f14, $f14, $f0 \r\n"
566
+ "swc1 $f12, 0x0($10) \r\n"
567
+ "gsswxc1 $f14, 0x0($10, %[stride]) \r\n"
568
+ "daddiu $29, $29, 0x20 \r\n"
569
+ ::[dst]"r"(dst),[block]"r"(block),[stride]"r"((uint64_t)stride)
570
+ :"$8","$9","$10","$11","$12","$13","$14","$15","$29","$f0","$f2","$f4",
571
+ "$f8","$f10","$f12","$f14","$f16","$f18","$f20","$f22","$f24","$f26",
572
+ "$f28","$f30"
573
+ );
574
+
575
+ memset(block, 0, 128);
576
+}
577
+
578
+void ff_h264_idct_dc_add_8_mmi(uint8_t *dst, int16_t *block, int stride)
579
+{
580
+ __asm__ volatile (
581
+ "lh $8, 0x0(%[block]) \r\n"
582
+ "sd $0, 0x0(%[block]) \r\n"
583
+ "daddiu $8, $8, 0x20 \r\n"
584
+ "daddu $10, %[stride], %[stride] \r\n"
585
+ "dsra $8, $8, 0x6 \r\n"
586
+ "xor $f2, $f2, $f2 \r\n"
587
+ "mtc1 $8, $f0 \r\n"
588
+ "pshufh $f0, $f0, $f2 \r\n"
589
+ "daddu $8, $10, %[stride] \r\n"
590
+ "psubh $f2, $f2, $f0 \r\n"
591
+ "packushb $f0, $f0, $f0 \r\n"
592
+ "packushb $f2, $f2, $f2 \r\n"
593
+ "lwc1 $f4, 0x0(%[dst]) \r\n"
594
+ "gslwxc1 $f6, 0x0(%[dst], %[stride]) \r\n"
595
+ "gslwxc1 $f8, 0x0(%[dst], $10) \r\n"
596
+ "gslwxc1 $f10, 0x0(%[dst], $8) \r\n"
597
+ "paddusb $f4, $f4, $f0 \r\n"
598
+ "paddusb $f6, $f6, $f0 \r\n"
599
+ "paddusb $f8, $f8, $f0 \r\n"
600
+ "paddusb $f10, $f10, $f0 \r\n"
601
+ "psubusb $f4, $f4, $f2 \r\n"
602
+ "psubusb $f6, $f6, $f2 \r\n"
603
+ "psubusb $f8, $f8, $f2 \r\n"
604
+ "psubusb $f10, $f10, $f2 \r\n"
605
+ "swc1 $f4, 0x0(%[dst]) \r\n"
606
+ "gsswxc1 $f6, 0x0(%[dst], %[stride]) \r\n"
607
+ "gsswxc1 $f8, 0x0(%[dst], $10) \r\n"
608
+ "gsswxc1 $f10, 0x0(%[dst], $8) \r\n"
609
+ ::[dst]"r"(dst),[block]"r"(block),[stride]"r"((uint64_t)stride)
610
+ : "$8","$10","$f0","$f2","$f4","$f6","$f8","$f10"
611
+ );
612
+}
613
+
614
+void ff_h264_idct8_dc_add_8_mmi(uint8_t *dst, int16_t *block, int stride)
615
+{
616
+ __asm__ volatile (
617
+ "lh $8, 0x0(%[block]) \r\n"
618
+ "sd $0, 0x0(%[block]) \r\n"
619
+ "daddiu $8, $8, 0x20 \r\n"
620
+ "daddu $10, %[stride], %[stride] \r\n"
621
+ "dsra $8, $8, 0x6 \r\n"
622
+ "xor $f2, $f2, $f2 \r\n"
623
+ "mtc1 $8, $f0 \r\n"
624
+ "pshufh $f0, $f0, $f2 \r\n"
625
+ "daddu $8, $10, %[stride] \r\n"
626
+ "psubh $f2, $f2, $f0 \r\n"
627
+ "packushb $f0, $f0, $f0 \r\n"
628
+ "packushb $f2, $f2, $f2 \r\n"
629
+ "ldc1 $f4, 0x0(%[dst]) \r\n"
630
+ "gsldxc1 $f6, 0x0(%[dst], %[stride]) \r\n"
631
+ "gsldxc1 $f8, 0x0(%[dst], $10) \r\n"
632
+ "gsldxc1 $f10, 0x0(%[dst], $8) \r\n"
633
+ "paddusb $f4, $f4, $f0 \r\n"
634
+ "paddusb $f6, $f6, $f0 \r\n"
635
+ "paddusb $f8, $f8, $f0 \r\n"
636
+ "paddusb $f10, $f10, $f0 \r\n"
637
+ "psubusb $f4, $f4, $f2 \r\n"
638
+ "psubusb $f6, $f6, $f2 \r\n"
639
+ "psubusb $f8, $f8, $f2 \r\n"
640
+ "psubusb $f10, $f10, $f2 \r\n"
641
+ "sdc1 $f4, 0x0(%[dst]) \r\n"
642
+ "gssdxc1 $f6, 0x0(%[dst], %[stride]) \r\n"
643
+ "gssdxc1 $f8, 0x0(%[dst], $10) \r\n"
644
+ "daddu $9, $10, $10 \r\n"
645
+ "gssdxc1 $f10, 0x0(%[dst], $8) \r\n"
646
+ "daddu %[dst], %[dst], $9 \r\n"
647
+ "ldc1 $f4, 0x0(%[dst]) \r\n"
648
+ "gsldxc1 $f6, 0x0(%[dst], %[stride]) \r\n"
649
+ "gsldxc1 $f8, 0x0(%[dst], $10) \r\n"
650
+ "gsldxc1 $f10, 0x0(%[dst], $8) \r\n"
651
+ "paddusb $f4, $f4, $f0 \r\n"
652
+ "paddusb $f6, $f6, $f0 \r\n"
653
+ "paddusb $f8, $f8, $f0 \r\n"
654
+ "paddusb $f10, $f10, $f0 \r\n"
655
+ "psubusb $f4, $f4, $f2 \r\n"
656
+ "psubusb $f6, $f6, $f2 \r\n"
657
+ "psubusb $f8, $f8, $f2 \r\n"
658
+ "psubusb $f10, $f10, $f2 \r\n"
659
+ "sdc1 $f4, 0x0(%[dst]) \r\n"
660
+ "gssdxc1 $f6, 0x0(%[dst], %[stride]) \r\n"
661
+ "gssdxc1 $f8, 0x0(%[dst], $10) \r\n"
662
+ "gssdxc1 $f10, 0x0(%[dst], $8) \r\n"
663
+ ::[dst]"r"(dst),[block]"r"(block),[stride]"r"((uint64_t)stride)
664
+ : "$8","$9","$10","$f0","$f2","$f4","$f6","$f8","$f10"
665
+ );
666
+}
667
+
668
+void ff_h264_idct_add16_8_mmi(uint8_t *dst, const int *block_offset,
669
+ int16_t *block, int stride, const uint8_t nnzc[15*8])
670
+{
671
+ int i;
672
+ for(i=0; i<16; i++){
673
+ int nnz = nnzc[ scan8[i] ];
674
+ if(nnz){
675
+ if(nnz==1 && ((int16_t*)block)[i*16])
676
+ ff_h264_idct_dc_add_8_mmi(dst + block_offset[i], block + i*16,
677
+ stride);
678
+ else
679
+ ff_h264_idct_add_8_mmi(dst + block_offset[i], block + i*16,
680
+ stride);
681
+ }
682
+ }
683
+}
684
+
685
+void ff_h264_idct_add16intra_8_mmi(uint8_t *dst, const int *block_offset,
686
+ int16_t *block, int stride, const uint8_t nnzc[15*8])
687
+{
688
+ int i;
689
+ for(i=0; i<16; i++){
690
+ if(nnzc[ scan8[i] ])
691
+ ff_h264_idct_add_8_mmi(dst + block_offset[i], block + i*16, stride);
692
+ else if(((int16_t*)block)[i*16])
693
+ ff_h264_idct_dc_add_8_mmi(dst + block_offset[i], block + i*16,
694
+ stride);
695
+ }
696
+}
697
+
698
+void ff_h264_idct8_add4_8_mmi(uint8_t *dst, const int *block_offset,
699
+ int16_t *block, int stride, const uint8_t nnzc[15*8])
700
+{
701
+ int i;
702
+ for(i=0; i<16; i+=4){
703
+ int nnz = nnzc[ scan8[i] ];
704
+ if(nnz){
705
+ if(nnz==1 && ((int16_t*)block)[i*16])
706
+ ff_h264_idct8_dc_add_8_mmi(dst + block_offset[i],
707
+ block + i*16, stride);
708
+ else
709
+ ff_h264_idct8_add_8_mmi(dst + block_offset[i], block + i*16,
710
+ stride);
711
+ }
712
+ }
713
+}
714
+
715
+void ff_h264_idct_add8_8_mmi(uint8_t **dest, const int *block_offset,
716
+ int16_t *block, int stride, const uint8_t nnzc[15*8])
717
+{
718
+ int i, j;
719
+ for(j=1; j<3; j++){
720
+ for(i=j*16; i<j*16+4; i++){
721
+ if(nnzc[ scan8[i] ])
722
+ ff_h264_idct_add_8_mmi(dest[j-1] + block_offset[i],
723
+ block + i*16, stride);
724
+ else if(((int16_t*)block)[i*16])
725
+ ff_h264_idct_dc_add_8_mmi(dest[j-1] + block_offset[i],
726
+ block + i*16, stride);
727
+ }
728
+ }
729
+}
730
+
731
+void ff_h264_idct_add8_422_8_mmi(uint8_t **dest, const int *block_offset,
732
+ int16_t *block, int stride, const uint8_t nnzc[15*8])
733
+{
734
+ int i, j;
735
+
736
+ for(j=1; j<3; j++){
737
+ for(i=j*16; i<j*16+4; i++){
738
+ if(nnzc[ scan8[i] ])
739
+ ff_h264_idct_add_8_mmi(dest[j-1] + block_offset[i],
740
+ block + i*16, stride);
741
+ else if(((int16_t*)block)[i*16])
742
+ ff_h264_idct_dc_add_8_mmi(dest[j-1] + block_offset[i],
743
+ block + i*16, stride);
744
+ }
745
+ }
746
+
747
+ for(j=1; j<3; j++){
748
+ for(i=j*16+4; i<j*16+8; i++){
749
+ if(nnzc[ scan8[i+4] ])
750
+ ff_h264_idct_add_8_mmi(dest[j-1] + block_offset[i+4],
751
+ block + i*16, stride);
752
+ else if(((int16_t*)block)[i*16])
753
+ ff_h264_idct_dc_add_8_mmi(dest[j-1] + block_offset[i+4],
754
+ block + i*16, stride);
755
+ }
756
+ }
757
+}
758
+
759
+void ff_h264_luma_dc_dequant_idct_8_mmi(int16_t *output, int16_t *input,
760
+ int qmul)
761
+{
762
+ __asm__ volatile (
763
+ ".set noreorder \r\n"
764
+ "dli $10, 0x8 \r\n"
765
+ "ldc1 $f6, 0x18(%[input]) \r\n"
766
+ "dmtc1 $10, $f16 \r\n"
767
+ "ldc1 $f4, 0x10(%[input]) \r\n"
768
+ "dli $10, 0x20 \r\n"
769
+ "ldc1 $f2, 0x8(%[input]) \r\n"
770
+ "dmtc1 $10, $f18 \r\n"
771
+ "ldc1 $f0, 0x0(%[input]) \r\n"
772
+ "mov.d $f8, $f6 \r\n"
773
+ "paddh $f6, $f6, $f4 \r\n"
774
+ "psubh $f4, $f4, $f8 \r\n"
775
+ "mov.d $f8, $f2 \r\n"
776
+ "paddh $f2, $f2, $f0 \r\n"
777
+ "psubh $f0, $f0, $f8 \r\n"
778
+ "mov.d $f8, $f6 \r\n"
779
+ "paddh $f6, $f6, $f2 \r\n"
780
+ "psubh $f2, $f2, $f8 \r\n"
781
+ "mov.d $f8, $f4 \r\n"
782
+ "paddh $f4, $f4, $f0 \r\n"
783
+ "psubh $f0, $f0, $f8 \r\n"
784
+ "mov.d $f8, $f6 \r\n"
785
+ "punpcklhw $f6, $f6, $f2 \r\n"
786
+ "punpckhhw $f8, $f8, $f2 \r\n"
787
+ "punpckhhw $f2, $f0, $f4 \r\n"
788
+ "punpcklhw $f0, $f0, $f4 \r\n"
789
+ "punpckhwd $f4, $f6, $f0 \r\n"
790
+ "punpcklwd $f6, $f6, $f0 \r\n"
791
+ "mov.d $f0, $f8 \r\n"
792
+ "punpcklwd $f8, $f8, $f2 \r\n"
793
+ "punpckhwd $f0, $f0, $f2 \r\n"
794
+ "mov.d $f2, $f0 \r\n"
795
+ "paddh $f0, $f0, $f8 \r\n"
796
+ "psubh $f8, $f8, $f2 \r\n"
797
+ "mov.d $f2, $f4 \r\n"
798
+ "paddh $f4, $f4, $f6 \r\n"
799
+ "psubh $f6, $f6, $f2 \r\n"
800
+ "mov.d $f2, $f0 \r\n"
801
+ "paddh $f0, $f0, $f4 \r\n"
802
+ "psubh $f4, $f4, $f2 \r\n"
803
+ "mov.d $f2, $f8 \r\n"
804
+ "daddiu $10, %[qmul], -0x7fff \r\n"
805
+ "paddh $f8, $f8, $f6 \r\n"
806
+ "bgtz $10, 1f \r\n"
807
+ "psubh $f6, $f6, $f2 \r\n"
808
+ "ori $10, $0, 0x80 \r\n"
809
+ "dsll $10, $10, 0x10 \r\n"
810
+ "punpckhhw $f2, $f0, %[ff_pw_1] \r\n"
811
+ "daddu %[qmul], %[qmul], $10 \r\n"
812
+ "punpcklhw $f0, $f0, %[ff_pw_1] \r\n"
813
+ "punpckhhw $f10, $f4, %[ff_pw_1] \r\n"
814
+ "punpcklhw $f4, $f4, %[ff_pw_1] \r\n"
815
+ "mtc1 %[qmul], $f14 \r\n"
816
+ "punpcklwd $f14, $f14, $f14 \r\n"
817
+ "pmaddhw $f0, $f0, $f14 \r\n"
818
+ "pmaddhw $f4, $f4, $f14 \r\n"
819
+ "pmaddhw $f2, $f2, $f14 \r\n"
820
+ "pmaddhw $f10, $f10, $f14 \r\n"
821
+ "psraw $f0, $f0, $f16 \r\n"
822
+ "psraw $f4, $f4, $f16 \r\n"
823
+ "psraw $f2, $f2, $f16 \r\n"
824
+ "psraw $f10, $f10, $f16 \r\n"
825
+ "packsswh $f0, $f0, $f2 \r\n"
826
+ "packsswh $f4, $f4, $f10 \r\n"
827
+ "mfc1 $9, $f0 \r\n"
828
+ "dsrl $f0, $f0, $f18 \r\n"
829
+ "mfc1 %[input], $f0 \r\n"
830
+ "sh $9, 0x0(%[output]) \r\n"
831
+ "sh %[input], 0x80(%[output]) \r\n"
832
+ "dsrl $9, $9, 0x10 \r\n"
833
+ "dsrl %[input], %[input], 0x10 \r\n"
834
+ "sh $9, 0x20(%[output]) \r\n"
835
+ "sh %[input], 0xa0(%[output]) \r\n"
836
+ "mfc1 $9, $f4 \r\n"
837
+ "dsrl $f4, $f4, $f18 \r\n"
838
+ "mfc1 %[input], $f4 \r\n"
839
+ "sh $9, 0x40(%[output]) \r\n"
840
+ "sh %[input], 0xc0(%[output]) \r\n"
841
+ "dsrl $9, $9, 0x10 \r\n"
842
+ "dsrl %[input], %[input], 0x10 \r\n"
843
+ "sh $9, 0x60(%[output]) \r\n"
844
+ "sh %[input], 0xe0(%[output]) \r\n"
845
+ "punpckhhw $f2, $f6, %[ff_pw_1] \r\n"
846
+ "punpcklhw $f6, $f6, %[ff_pw_1] \r\n"
847
+ "punpckhhw $f10, $f8, %[ff_pw_1] \r\n"
848
+ "punpcklhw $f8, $f8, %[ff_pw_1] \r\n"
849
+ "mtc1 %[qmul], $f14 \r\n"
850
+ "punpcklwd $f14, $f14, $f14 \r\n"
851
+ "pmaddhw $f6, $f6, $f14 \r\n"
852
+ "pmaddhw $f8, $f8, $f14 \r\n"
853
+ "pmaddhw $f2, $f2, $f14 \r\n"
854
+ "pmaddhw $f10, $f10, $f14 \r\n"
855
+ "psraw $f6, $f6, $f16 \r\n"
856
+ "psraw $f8, $f8, $f16 \r\n"
857
+ "psraw $f2, $f2, $f16 \r\n"
858
+ "psraw $f10, $f10, $f16 \r\n"
859
+ "packsswh $f6, $f6, $f2 \r\n"
860
+ "packsswh $f8, $f8, $f10 \r\n"
861
+ "mfc1 $9, $f6 \r\n"
862
+ "dsrl $f6, $f6, $f18 \r\n"
863
+ "mfc1 %[input], $f6 \r\n"
864
+ "sh $9, 0x100(%[output]) \r\n"
865
+ "sh %[input], 0x180(%[output]) \r\n"
866
+ "dsrl $9, $9, 0x10 \r\n"
867
+ "dsrl %[input], %[input], 0x10 \r\n"
868
+ "sh $9, 0x120(%[output]) \r\n"
869
+ "sh %[input], 0x1a0(%[output]) \r\n"
870
+ "mfc1 $9, $f8 \r\n"
871
+ "dsrl $f8, $f8, $f18 \r\n"
872
+ "mfc1 %[input], $f8 \r\n"
873
+ "sh $9, 0x140(%[output]) \r\n"
874
+ "sh %[input], 0x1c0(%[output]) \r\n"
875
+ "dsrl $9, $9, 0x10 \r\n"
876
+ "dsrl %[input], %[input], 0x10 \r\n"
877
+ "sh $9, 0x160(%[output]) \r\n"
878
+ "jr $31 \r\n"
879
+ "sh %[input], 0x1e0(%[output]) \r\n"
880
+ "1: \r\n"
881
+ "ori $10, $0, 0x1f \r\n"
882
+ "clz $9, %[qmul] \r\n"
883
+ "ori %[input], $0, 0x7 \r\n"
884
+ "dsubu $9, $10, $9 \r\n"
885
+ "ori $10, $0, 0x80 \r\n"
886
+ "dsll $10, $10, 0x10 \r\n"
887
+ "daddu %[qmul], %[qmul], $10 \r\n"
888
+ "dsubu $10, $9, %[input] \r\n"
889
+ "movn $9, %[input], $10 \r\n"
890
+ "daddiu %[input], %[input], 0x1 \r\n"
891
+ "andi $10, $9, 0xff \r\n"
892
+ "dsrlv %[qmul], %[qmul], $10 \r\n"
893
+ "dsubu %[input], %[input], $9 \r\n"
894
+ "mtc1 %[input], $f12 \r\n"
895
+ "punpckhhw $f2, $f0, %[ff_pw_1] \r\n"
896
+ "punpcklhw $f0, $f0, %[ff_pw_1] \r\n"
897
+ "punpckhhw $f10, $f4, %[ff_pw_1] \r\n"
898
+ "punpcklhw $f4, $f4, %[ff_pw_1] \r\n"
899
+ "mtc1 %[qmul], $f14 \r\n"
900
+ "punpcklwd $f14, $f14, $f14 \r\n"
901
+ "pmaddhw $f0, $f0, $f14 \r\n"
902
+ "pmaddhw $f4, $f4, $f14 \r\n"
903
+ "pmaddhw $f2, $f2, $f14 \r\n"
904
+ "pmaddhw $f10, $f10, $f14 \r\n"
905
+ "psraw $f0, $f0, $f12 \r\n"
906
+ "psraw $f4, $f4, $f12 \r\n"
907
+ "psraw $f2, $f2, $f12 \r\n"
908
+ "psraw $f10, $f10, $f12 \r\n"
909
+ "packsswh $f0, $f0, $f2 \r\n"
910
+ "packsswh $f4, $f4, $f10 \r\n"
911
+ "mfc1 $9, $f0 \r\n"
912
+ "dsrl $f0, $f0, $f18 \r\n"
913
+ "sh $9, 0x0(%[output]) \r\n"
914
+ "mfc1 %[input], $f0 \r\n"
915
+ "dsrl $9, $9, 0x10 \r\n"
916
+ "sh %[input], 0x80(%[output]) \r\n"
917
+ "sh $9, 0x20(%[output]) \r\n"
918
+ "dsrl %[input], %[input], 0x10 \r\n"
919
+ "mfc1 $9, $f4 \r\n"
920
+ "sh %[input], 0xa0(%[output]) \r\n"
921
+ "dsrl $f4, $f4, $f18 \r\n"
922
+ "sh $9, 0x40(%[output]) \r\n"
923
+ "mfc1 %[input], $f4 \r\n"
924
+ "dsrl $9, $9, 0x10 \r\n"
925
+ "sh %[input], 0xc0(%[output]) \r\n"
926
+ "sh $9, 0x60(%[output]) \r\n"
927
+ "dsrl %[input], %[input], 0x10 \r\n"
928
+ "sh %[input], 0xe0(%[output]) \r\n"
929
+ "punpckhhw $f2, $f6, %[ff_pw_1] \r\n"
930
+ "punpcklhw $f6, $f6, %[ff_pw_1] \r\n"
931
+ "punpckhhw $f10, $f8, %[ff_pw_1] \r\n"
932
+ "punpcklhw $f8, $f8, %[ff_pw_1] \r\n"
933
+ "mtc1 %[qmul], $f14 \r\n"
934
+ "punpcklwd $f14, $f14, $f14 \r\n"
935
+ "pmaddhw $f6, $f6, $f14 \r\n"
936
+ "pmaddhw $f8, $f8, $f14 \r\n"
937
+ "pmaddhw $f2, $f2, $f14 \r\n"
938
+ "pmaddhw $f10, $f10, $f14 \r\n"
939
+ "psraw $f6, $f6, $f12 \r\n"
940
+ "psraw $f8, $f8, $f12 \r\n"
941
+ "psraw $f2, $f2, $f12 \r\n"
942
+ "psraw $f10, $f10, $f12 \r\n"
943
+ "packsswh $f6, $f6, $f2 \r\n"
944
+ "packsswh $f8, $f8, $f10 \r\n"
945
+ "mfc1 $9, $f6 \r\n"
946
+ "dsrl $f6, $f6, $f18 \r\n"
947
+ "mfc1 %[input], $f6 \r\n"
948
+ "sh $9, 0x100(%[output]) \r\n"
949
+ "sh %[input], 0x180(%[output]) \r\n"
950
+ "dsrl $9, $9, 0x10 \r\n"
951
+ "dsrl %[input], %[input], 0x10 \r\n"
952
+ "sh $9, 0x120(%[output]) \r\n"
953
+ "sh %[input], 0x1a0(%[output]) \r\n"
954
+ "mfc1 $9, $f8 \r\n"
955
+ "dsrl $f8, $f8, $f18 \r\n"
956
+ "mfc1 %[input], $f8 \r\n"
957
+ "sh $9, 0x140(%[output]) \r\n"
958
+ "sh %[input], 0x1c0(%[output]) \r\n"
959
+ "dsrl $9, $9, 0x10 \r\n"
960
+ "dsrl %[input], %[input], 0x10 \r\n"
961
+ "sh $9, 0x160(%[output]) \r\n"
962
+ "sh %[input], 0x1e0(%[output]) \r\n"
963
+ ".set reorder \r\n"
964
+ ::[output]"r"(output),[input]"r"(input),[qmul]"r"((uint64_t)qmul),
965
+ [ff_pw_1]"f"(ff_pw_1)
966
+ : "$9","$10","$f0","$f2","$f4","$f6","$f8","$f10","$f12","$f14","$f16",
967
+ "$f18"
968
+ );
969
+}
970
+
971
+void ff_h264_chroma422_dc_dequant_idct_8_mmi(int16_t *block, int qmul)
972
+{
973
+ int temp[8];
974
+ int t[8];
975
+
976
+ temp[0] = block[0] + block[16];
977
+ temp[1] = block[0] - block[16];
978
+ temp[2] = block[32] + block[48];
979
+ temp[3] = block[32] - block[48];
980
+ temp[4] = block[64] + block[80];
981
+ temp[5] = block[64] - block[80];
982
+ temp[6] = block[96] + block[112];
983
+ temp[7] = block[96] - block[112];
984
+
985
+ t[0] = temp[0] + temp[4] + temp[2] + temp[6];
986
+ t[1] = temp[0] - temp[4] + temp[2] - temp[6];
987
+ t[2] = temp[0] - temp[4] - temp[2] + temp[6];
988
+ t[3] = temp[0] + temp[4] - temp[2] - temp[6];
989
+ t[4] = temp[1] + temp[5] + temp[3] + temp[7];
990
+ t[5] = temp[1] - temp[5] + temp[3] - temp[7];
991
+ t[6] = temp[1] - temp[5] - temp[3] + temp[7];
992
+ t[7] = temp[1] + temp[5] - temp[3] - temp[7];
993
+
994
+ block[ 0]= (t[0]*qmul + 128) >> 8;
995
+ block[ 32]= (t[1]*qmul + 128) >> 8;
996
+ block[ 64]= (t[2]*qmul + 128) >> 8;
997
+ block[ 96]= (t[3]*qmul + 128) >> 8;
998
+ block[ 16]= (t[4]*qmul + 128) >> 8;
999
+ block[ 48]= (t[5]*qmul + 128) >> 8;
1000
+ block[ 80]= (t[6]*qmul + 128) >> 8;
1001
+ block[112]= (t[7]*qmul + 128) >> 8;
1002
+}
1003
+
1004
+void ff_h264_chroma_dc_dequant_idct_8_mmi(int16_t *block, int qmul)
1005
+{
1006
+ int a,b,c,d;
1007
+
1008
+ d = block[0] - block[16];
1009
+ a = block[0] + block[16];
1010
+ b = block[32] - block[48];
1011
+ c = block[32] + block[48];
1012
+ block[0] = ((a+c)*qmul) >> 7;
1013
+ block[16]= ((d+b)*qmul) >> 7;
1014
+ block[32]= ((a-c)*qmul) >> 7;
1015
+ block[48]= ((d-b)*qmul) >> 7;
1016
+}
1017
+
1018
void ff_h264_weight_pixels16_8_mmi(uint8_t *block, int stride,
1019
int height, int log2_denom, int weight, int offset)
1020
{
1021
1022
);
1023
}
1024
}
1025
+
1026
+static void inline chroma_inter_body_mmi(uint8_t *pix, int stride,
1027
+ int alpha, int beta, int8_t *tc0)
1028
+{
1029
+ __asm__ volatile (
1030
+ "xor $f16, $f16, $f16 \r\n"
1031
+ "mtc1 %[alpha], $f8 \r\n"
1032
+ "mtc1 %[beta], $f10 \r\n"
1033
+ "pshufh $f8, $f8, $f16 \r\n"
1034
+ "pshufh $f10, $f10, $f16 \r\n"
1035
+ "packushb $f8, $f8, $f8 \r\n"
1036
+ "packushb $f10, $f10, $f10 \r\n"
1037
+ "psubusb $f12, $f4, $f2 \r\n"
1038
+ "psubusb $f14, $f2, $f4 \r\n"
1039
+ "or $f14, $f14, $f12 \r\n"
1040
+ "psubusb $f14, $f14, $f8 \r\n"
1041
+ "psubusb $f12, $f2, $f0 \r\n"
1042
+ "psubusb $f8, $f0, $f2 \r\n"
1043
+ "or $f8, $f8, $f12 \r\n"
1044
+ "psubusb $f8, $f8, $f10 \r\n"
1045
+ "or $f14, $f14, $f8 \r\n"
1046
+ "psubusb $f12, $f4, $f6 \r\n"
1047
+ "psubusb $f8, $f6, $f4 \r\n"
1048
+ "or $f8, $f8, $f12 \r\n"
1049
+ "psubusb $f8, $f8, $f10 \r\n"
1050
+ "or $f14, $f14, $f8 \r\n"
1051
+ "xor $f12, $f12, $f12 \r\n"
1052
+ "pcmpeqb $f14, $f14, $f12 \r\n"
1053
+ "lwc1 $f12, 0x0(%[tc0]) \r\n"
1054
+ "punpcklbh $f12, $f12, $f12 \r\n"
1055
+ "and $f14, $f14, $f12 \r\n"
1056
+ "pcmpeqb $f8, $f8, $f8 \r\n"
1057
+ "xor $f10, $f2, $f4 \r\n"
1058
+ "xor $f6, $f6, $f8 \r\n"
1059
+ "and $f10, $f10, %[ff_pb_1] \r\n"
1060
+ "pavgb $f6, $f6, $f0 \r\n"
1061
+ "xor $f8, $f8, $f2 \r\n"
1062
+ "pavgb $f6, $f6, %[ff_pb_3] \r\n"
1063
+ "pavgb $f8, $f8, $f4 \r\n"
1064
+ "pavgb $f6, $f6, $f10 \r\n"
1065
+ "paddusb $f6, $f6, $f8 \r\n"
1066
+ "psubusb $f12, %[ff_pb_A1], $f6 \r\n"
1067
+ "psubusb $f6, $f6, %[ff_pb_A1] \r\n"
1068
+ "pminub $f12, $f12, $f14 \r\n"
1069
+ "pminub $f6, $f6, $f14 \r\n"
1070
+ "psubusb $f2, $f2, $f12 \r\n"
1071
+ "psubusb $f4, $f4, $f6 \r\n"
1072
+ "paddusb $f2, $f2, $f6 \r\n"
1073
+ "paddusb $f4, $f4, $f12 \r\n"
1074
+ ::[pix]"r"(pix),[stride]"r"((int64_t)stride),
1075
+ [alpha]"r"((int64_t)alpha),[beta]"r"((int64_t)beta),[tc0]"r"(tc0),
1076
+ [ff_pb_1]"f"(ff_pb_1),[ff_pb_3]"f"(ff_pb_3),[ff_pb_A1]"f"(ff_pb_A1)
1077
+ : "$f0","$f2","$f4","$f6","$f8","$f10","$f12","$f14","$f16"
1078
+ );
1079
+}
1080
+
1081
+static void inline chroma_intra_body_mmi(uint8_t *pix, int stride,
1082
+ int alpha, int beta)
1083
+{
1084
+ __asm__ volatile (
1085
+ "xor $f16, $f16, $f16 \r\n"
1086
+ "mtc1 %[alpha], $f8 \r\n"
1087
+ "mtc1 %[beta], $f10 \r\n"
1088
+ "pshufh $f8, $f8, $f16 \r\n"
1089
+ "pshufh $f10, $f10, $f16 \r\n"
1090
+ "packushb $f8, $f8, $f8 \r\n"
1091
+ "packushb $f10, $f10, $f10 \r\n"
1092
+ "psubusb $f12, $f4, $f2 \r\n"
1093
+ "psubusb $f14, $f2, $f4 \r\n"
1094
+ "or $f14, $f14, $f12 \r\n"
1095
+ "psubusb $f14, $f14, $f8 \r\n"
1096
+ "psubusb $f12, $f2, $f0 \r\n"
1097
+ "psubusb $f8, $f0, $f2 \r\n"
1098
+ "or $f8, $f8, $f12 \r\n"
1099
+ "psubusb $f8, $f8, $f10 \r\n"
1100
+ "or $f14, $f14, $f8 \r\n"
1101
+ "psubusb $f12, $f4, $f6 \r\n"
1102
+ "psubusb $f8, $f6, $f4 \r\n"
1103
+ "or $f8, $f8, $f12 \r\n"
1104
+ "psubusb $f8, $f8, $f10 \r\n"
1105
+ "or $f14, $f14, $f8 \r\n"
1106
+ "xor $f12, $f12, $f12 \r\n"
1107
+ "pcmpeqb $f14, $f14, $f12 \r\n"
1108
+ "mov.d $f10, $f2 \r\n"
1109
+ "mov.d $f12, $f4 \r\n"
1110
+ "xor $f8, $f2, $f6 \r\n"
1111
+ "and $f8, $f8, %[ff_pb_1] \r\n"
1112
+ "pavgb $f2, $f2, $f6 \r\n"
1113
+ "psubusb $f2, $f2, $f8 \r\n"
1114
+ "pavgb $f2, $f2, $f0 \r\n"
1115
+ "xor $f8, $f4, $f0 \r\n"
1116
+ "and $f8, $f8, %[ff_pb_1] \r\n"
1117
+ "pavgb $f4, $f4, $f0 \r\n"
1118
+ "psubusb $f4, $f4, $f8 \r\n"
1119
+ "pavgb $f4, $f4, $f6 \r\n"
1120
+ "psubb $f2, $f2, $f10 \r\n"
1121
+ "psubb $f4, $f4, $f12 \r\n"
1122
+ "and $f2, $f2, $f14 \r\n"
1123
+ "and $f4, $f4, $f14 \r\n"
1124
+ "paddb $f2, $f2, $f10 \r\n"
1125
+ "paddb $f4, $f4, $f12 \r\n"
1126
+ ::[pix]"r"(pix),[stride]"r"((int64_t)stride),
1127
+ [alpha]"r"((int64_t)alpha),[beta]"r"((int64_t)beta),
1128
+ [ff_pb_1]"f"(ff_pb_1)
1129
+ : "$f0","$f2","$f4","$f8","$f10","$f12","$f14","$f16"
1130
+ );
1131
+}
1132
+
1133
+void ff_deblock_v8_luma_8_mmi(uint8_t *pix, int stride, int alpha, int beta,
1134
+ int8_t *tc0)
1135
+{
1136
+ __asm__ volatile (
1137
+ "daddu $8, %[stride], %[stride] \r\n"
1138
+ "xor $f16, $f16, $f16 \r\n"
1139
+ "daddu $9, %[stride], $8 \r\n"
1140
+ "daddiu %[alpha], %[alpha], -0x1 \r\n"
1141
+ "dsubu $9, $0, $9 \r\n"
1142
+ "daddiu %[beta], %[beta], -0x1 \r\n"
1143
+ "daddu $9, $9, %[pix] \r\n"
1144
+ "ldc1 $f4, 0x0(%[pix]) \r\n"
1145
+ "gsldxc1 $f0, 0x0($9, %[stride]) \r\n"
1146
+ "gsldxc1 $f2, 0x0($9, $8) \r\n"
1147
+ "gsldxc1 $f6, 0x0(%[pix], %[stride]) \r\n"
1148
+ "mtc1 %[alpha], $f8 \r\n"
1149
+ "mtc1 %[beta], $f10 \r\n"
1150
+ "pshufh $f8, $f8, $f16 \r\n"
1151
+ "pshufh $f10, $f10, $f16 \r\n"
1152
+ "packushb $f8, $f8, $f8 \r\n"
1153
+ "packushb $f10, $f10, $f10 \r\n"
1154
+ "psubusb $f12, $f4, $f2 \r\n"
1155
+ "psubusb $f14, $f2, $f4 \r\n"
1156
+ "or $f14, $f14, $f12 \r\n"
1157
+ "psubusb $f12, $f2, $f0 \r\n"
1158
+ "psubusb $f14, $f14, $f8 \r\n"
1159
+ "psubusb $f8, $f0, $f2 \r\n"
1160
+ "or $f8, $f8, $f12 \r\n"
1161
+ "psubusb $f12, $f4, $f6 \r\n"
1162
+ "psubusb $f8, $f8, $f10 \r\n"
1163
+ "or $f14, $f14, $f8 \r\n"
1164
+ "psubusb $f8, $f6, $f4 \r\n"
1165
+ "or $f8, $f8, $f12 \r\n"
1166
+ "psubusb $f8, $f8, $f10 \r\n"
1167
+ "or $f14, $f14, $f8 \r\n"
1168
+ "pcmpeqb $f14, $f14, $f16 \r\n"
1169
+ "pcmpeqb $f6, $f6, $f6 \r\n"
1170
+ "gslwlc1 $f8, 0x3(%[tc0]) \r\n"
1171
+ "gslwrc1 $f8, 0x0(%[tc0]) \r\n"
1172
+ "punpcklbh $f8, $f8, $f8 \r\n"
1173
+ "punpcklbh $f18, $f8, $f8 \r\n"
1174
+ "pcmpgtb $f8, $f18, $f6 \r\n"
1175
+ "ldc1 $f6, 0x0($9) \r\n"
1176
+ "and $f20, $f8, $f14 \r\n"
1177
+ "psubusb $f14, $f6, $f2 \r\n"
1178
+ "psubusb $f12, $f2, $f6 \r\n"
1179
+ "psubusb $f14, $f14, $f10 \r\n"
1180
+ "psubusb $f12, $f12, $f10 \r\n"
1181
+ "pcmpeqb $f12, $f12, $f14 \r\n"
1182
+ "and $f12, $f12, $f20 \r\n"
1183
+ "and $f8, $f20, $f18 \r\n"
1184
+ "psubb $f14, $f8, $f12 \r\n"
1185
+ "and $f12, $f12, $f8 \r\n"
1186
+ "pavgb $f8, $f2, $f4 \r\n"
1187
+ "ldc1 $f22, 0x0($9) \r\n"
1188
+ "pavgb $f6, $f6, $f8 \r\n"
1189
+ "xor $f8, $f8, $f22 \r\n"
1190
+ "and $f8, $f8, %[ff_pb_1] \r\n"
1191
+ "psubusb $f6, $f6, $f8 \r\n"
1192
+ "psubusb $f8, $f0, $f12 \r\n"
1193
+ "paddusb $f12, $f12, $f0 \r\n"
1194
+ "pmaxub $f6, $f6, $f8 \r\n"
1195
+ "pminub $f6, $f6, $f12 \r\n"
1196
+ "gssdxc1 $f6, 0x0($9, %[stride]) \r\n"
1197
+ "gsldxc1 $f8, 0x0(%[pix], $8) \r\n"
1198
+ "psubusb $f6, $f8, $f4 \r\n"
1199
+ "psubusb $f12, $f4, $f8 \r\n"
1200
+ "psubusb $f6, $f6, $f10 \r\n"
1201
+ "psubusb $f12, $f12, $f10 \r\n"
1202
+ "pcmpeqb $f12, $f12, $f6 \r\n"
1203
+ "and $f12, $f12, $f20 \r\n"
1204
+ "psubb $f14, $f14, $f12 \r\n"
1205
+ "and $f10, $f18, $f12 \r\n"
1206
+ "gsldxc1 $f6, 0x0(%[pix], %[stride]) \r\n"
1207
+ "pavgb $f12, $f2, $f4 \r\n"
1208
+ "gsldxc1 $f22, 0x0(%[pix], $8) \r\n"
1209
+ "pavgb $f8, $f8, $f12 \r\n"
1210
+ "xor $f12, $f12, $f22 \r\n"
1211
+ "and $f12, $f12, %[ff_pb_1] \r\n"
1212
+ "psubusb $f8, $f8, $f12 \r\n"
1213
+ "psubusb $f12, $f6, $f10 \r\n"
1214
+ "paddusb $f10, $f10, $f6 \r\n"
1215
+ "pmaxub $f8, $f8, $f12 \r\n"
1216
+ "pminub $f8, $f8, $f10 \r\n"
1217
+ "gssdxc1 $f8, 0x0(%[pix], %[stride]) \r\n"
1218
+ "xor $f10, $f2, $f4 \r\n"
1219
+ "pcmpeqb $f8, $f8, $f8 \r\n"
1220
+ "and $f10, $f10, %[ff_pb_1] \r\n"
1221
+ "xor $f6, $f6, $f8 \r\n"
1222
+ "xor $f8, $f8, $f2 \r\n"
1223
+ "pavgb $f6, $f6, $f0 \r\n"
1224
+ "pavgb $f6, $f6, %[ff_pb_3] \r\n"
1225
+ "pavgb $f8, $f8, $f4 \r\n"
1226
+ "pavgb $f6, $f6, $f10 \r\n"
1227
+ "paddusb $f6, $f6, $f8 \r\n"
1228
+ "psubusb $f12, %[ff_pb_A1], $f6 \r\n"
1229
+ "psubusb $f6, $f6, %[ff_pb_A1] \r\n"
1230
+ "pminub $f12, $f12, $f14 \r\n"
1231
+ "pminub $f6, $f6, $f14 \r\n"
1232
+ "psubusb $f2, $f2, $f12 \r\n"
1233
+ "psubusb $f4, $f4, $f6 \r\n"
1234
+ "paddusb $f2, $f2, $f6 \r\n"
1235
+ "paddusb $f4, $f4, $f12 \r\n"
1236
+ "gssdxc1 $f2, 0x0($9, $8) \r\n"
1237
+ "sdc1 $f4, 0x0(%[pix]) \r\n"
1238
+ ::[pix]"r"(pix),[stride]"r"((int64_t)stride),
1239
+ [alpha]"r"((int64_t)alpha),[beta]"r"((int64_t)beta),[tc0]"r"(tc0),
1240
+ [ff_pb_1]"f"(ff_pb_1),[ff_pb_3]"f"(ff_pb_3),[ff_pb_A1]"f"(ff_pb_A1)
1241
+ : "$8","$9","$f0","$f2","$f4","$f6","$f8","$f10","$f12","$f14","$f16",
1242
+ "$f18","$f20","$f22"
1243
+ );
1244
+}
1245
+
1246
+void ff_deblock_v8_luma_intra_8_mmi(uint8_t *pix, int stride, int alpha,
1247
+ int beta)
1248
+{
1249
+ uint64_t stack[0xa];
1250
+
1251
+ __asm__ volatile (
1252
+ "ori $8, $0, 0x1 \r\n"
1253
+ "xor $f30, $f30, $f30 \r\n"
1254
+ "dmtc1 $8, $f16 \r\n"
1255
+ "dsll $8, %[stride], 2 \r\n"
1256
+ "daddu $10, %[stride], %[stride] \r\n"
1257
+ "daddiu %[alpha], %[alpha], -0x1 \r\n"
1258
+ "dsll $f20, $f16, $f16 \r\n"
1259
+ "bltz %[alpha], 1f \r\n"
1260
+ "daddu $9, $10, %[stride] \r\n"
1261
+ "daddiu %[beta], %[beta], -0x1 \r\n"
1262
+ "bltz %[beta], 1f \r\n"
1263
+ "dsubu $8, $0, $8 \r\n"
1264
+ "daddu $8, $8, %[pix] \r\n"
1265
+ "ldc1 $f4, 0x0(%[pix]) \r\n"
1266
+ "gsldxc1 $f0, 0x0($8, $10) \r\n"
1267
+ "gsldxc1 $f2, 0x0($8, $9) \r\n"
1268
+ "gsldxc1 $f6, 0x0(%[pix], %[stride]) \r\n"
1269
+ "mtc1 %[alpha], $f8 \r\n"
1270
+ "mtc1 %[beta], $f10 \r\n"
1271
+ "pshufh $f8, $f8, $f30 \r\n"
1272
+ "pshufh $f10, $f10, $f30 \r\n"
1273
+ "packushb $f8, $f8, $f8 \r\n"
1274
+ "psubusb $f12, $f4, $f2 \r\n"
1275
+ "psubusb $f14, $f2, $f4 \r\n"
1276
+ "packushb $f10, $f10, $f10 \r\n"
1277
+ "or $f14, $f14, $f12 \r\n"
1278
+ "sdc1 $f8, 0x10+%[stack] \r\n"
1279
+ "psubusb $f14, $f14, $f8 \r\n"
1280
+ "psubusb $f12, $f2, $f0 \r\n"
1281
+ "psubusb $f8, $f0, $f2 \r\n"
1282
+ "or $f8, $f8, $f12 \r\n"
1283
+ "psubusb $f8, $f8, $f10 \r\n"
1284
+ "or $f14, $f14, $f8 \r\n"
1285
+ "psubusb $f12, $f4, $f6 \r\n"
1286
+ "psubusb $f8, $f6, $f4 \r\n"
1287
+ "or $f8, $f8, $f12 \r\n"
1288
+ "psubusb $f8, $f8, $f10 \r\n"
1289
+ "or $f14, $f14, $f8 \r\n"
1290
+ "xor $f12, $f12, $f12 \r\n"
1291
+ "ldc1 $f8, 0x10+%[stack] \r\n"
1292
+ "pcmpeqb $f14, $f14, $f12 \r\n"
1293
+ "sdc1 $f14, 0x20+%[stack] \r\n"
1294
+ "pavgb $f8, $f8, $f30 \r\n"
1295
+ "psubusb $f14, $f4, $f2 \r\n"
1296
+ "pavgb $f8, $f8, %[ff_pb_1] \r\n"
1297
+ "psubusb $f12, $f2, $f4 \r\n"
1298
+ "psubusb $f14, $f14, $f8 \r\n"
1299
+ "psubusb $f12, $f12, $f8 \r\n"
1300
+ "ldc1 $f28, 0x20+%[stack] \r\n"
1301
+ "pcmpeqb $f12, $f12, $f14 \r\n"
1302
+ "and $f12, $f12, $f28 \r\n"
1303
+ "gsldxc1 $f28, 0x0($8, %[stride]) \r\n"
1304
+ "psubusb $f14, $f28, $f2 \r\n"
1305
+ "psubusb $f8, $f2, $f28 \r\n"
1306
+ "psubusb $f14, $f14, $f10 \r\n"
1307
+ "psubusb $f8, $f8, $f10 \r\n"
1308
+ "pcmpeqb $f8, $f8, $f14 \r\n"
1309
+ "and $f8, $f8, $f12 \r\n"
1310
+ "gsldxc1 $f26, 0x0(%[pix], $10) \r\n"
1311
+ "sdc1 $f8, 0x30+%[stack] \r\n"
1312
+ "psubusb $f14, $f26, $f4 \r\n"
1313
+ "psubusb $f8, $f4, $f26 \r\n"
1314
+ "psubusb $f14, $f14, $f10 \r\n"
1315
+ "psubusb $f8, $f8, $f10 \r\n"
1316
+ "pcmpeqb $f8, $f8, $f14 \r\n"
1317
+ "and $f8, $f8, $f12 \r\n"
1318
+ "sdc1 $f8, 0x40+%[stack] \r\n"
1319
+ "pavgb $f8, $f28, $f0 \r\n"
1320
+ "pavgb $f10, $f2, $f4 \r\n"
1321
+ "pavgb $f8, $f8, $f10 \r\n"
1322
+ "sdc1 $f10, 0x10+%[stack] \r\n"
1323
+ "paddb $f12, $f28, $f0 \r\n"
1324
+ "paddb $f14, $f2, $f4 \r\n"
1325
+ "paddb $f12, $f12, $f14 \r\n"
1326
+ "mov.d $f14, $f12 \r\n"
1327
+ "sdc1 $f12, 0x0+%[stack] \r\n"
1328
+ "psrlh $f12, $f12, $f16 \r\n"
1329
+ "pavgb $f12, $f12, $f30 \r\n"
1330
+ "xor $f12, $f12, $f8 \r\n"
1331
+ "and $f12, $f12, %[ff_pb_1] \r\n"
1332
+ "psubb $f8, $f8, $f12 \r\n"
1333
+ "pavgb $f10, $f28, $f6 \r\n"
1334
+ "psubb $f12, $f28, $f6 \r\n"
1335
+ "paddb $f14, $f14, $f14 \r\n"
1336
+ "psubb $f14, $f14, $f12 \r\n"
1337
+ "and $f12, $f12, %[ff_pb_1] \r\n"
1338
+ "psubb $f10, $f10, $f12 \r\n"
1339
+ "ldc1 $f24, 0x10+%[stack] \r\n"
1340
+ "pavgb $f10, $f10, $f0 \r\n"
1341
+ "psrlh $f14, $f14, $f20 \r\n"
1342
+ "pavgb $f10, $f10, $f24 \r\n"
1343
+ "pavgb $f14, $f14, $f30 \r\n"
1344
+ "xor $f14, $f14, $f10 \r\n"
1345
+ "and $f14, $f14, %[ff_pb_1] \r\n"
1346
+ "psubb $f10, $f10, $f14 \r\n"
1347
+ "xor $f14, $f2, $f6 \r\n"
1348
+ "pavgb $f12, $f2, $f6 \r\n"
1349
+ "and $f14, $f14, %[ff_pb_1] \r\n"
1350
+ "psubb $f12, $f12, $f14 \r\n"
1351
+ "ldc1 $f24, 0x30+%[stack] \r\n"
1352
+ "pavgb $f12, $f12, $f0 \r\n"
1353
+ "ldc1 $f22, 0x20+%[stack] \r\n"
1354
+ "xor $f10, $f10, $f12 \r\n"
1355
+ "xor $f12, $f12, $f2 \r\n"
1356
+ "and $f10, $f10, $f24 \r\n"
1357
+ "and $f12, $f12, $f22 \r\n"
1358
+ "xor $f10, $f10, $f12 \r\n"
1359
+ "xor $f10, $f10, $f2 \r\n"
1360
+ "gssdxc1 $f10, 0x0($8, $9) \r\n"
1361
+ "ldc1 $f10, 0x0($8) \r\n"
1362
+ "paddb $f12, $f28, $f10 \r\n"
1363
+ "pavgb $f10, $f10, $f28 \r\n"
1364
+ "ldc1 $f22, 0x0+%[stack] \r\n"
1365
+ "pavgb $f10, $f10, $f8 \r\n"
1366
+ "paddb $f12, $f12, $f12 \r\n"
1367
+ "paddb $f12, $f12, $f22 \r\n"
1368
+ "psrlh $f12, $f12, $f20 \r\n"
1369
+ "pavgb $f12, $f12, $f30 \r\n"
1370
+ "xor $f12, $f12, $f10 \r\n"
1371
+ "and $f12, $f12, %[ff_pb_1] \r\n"
1372
+ "ldc1 $f22, 0x30+%[stack] \r\n"
1373
+ "psubb $f10, $f10, $f12 \r\n"
1374
+ "xor $f8, $f8, $f0 \r\n"
1375
+ "xor $f10, $f10, $f28 \r\n"
1376
+ "and $f8, $f8, $f22 \r\n"
1377
+ "and $f10, $f10, $f22 \r\n"
1378
+ "xor $f8, $f8, $f0 \r\n"
1379
+ "xor $f10, $f10, $f28 \r\n"
1380
+ "gssdxc1 $f8, 0x0($8, $10) \r\n"
1381
+ "gssdxc1 $f10, 0x0($8, %[stride]) \r\n"
1382
+ "pavgb $f8, $f26, $f6 \r\n"
1383
+ "pavgb $f10, $f4, $f2 \r\n"
1384
+ "pavgb $f8, $f8, $f10 \r\n"
1385
+ "sdc1 $f10, 0x10+%[stack] \r\n"
1386
+ "paddb $f12, $f26, $f6 \r\n"
1387
+ "paddb $f14, $f4, $f2 \r\n"
1388
+ "paddb $f12, $f12, $f14 \r\n"
1389
+ "mov.d $f14, $f12 \r\n"
1390
+ "sdc1 $f12, 0x0+%[stack] \r\n"
1391
+ "psrlh $f12, $f12, $f16 \r\n"
1392
+ "pavgb $f12, $f12, $f30 \r\n"
1393
+ "xor $f12, $f12, $f8 \r\n"
1394
+ "and $f12, $f12, %[ff_pb_1] \r\n"
1395
+ "psubb $f8, $f8, $f12 \r\n"
1396
+ "pavgb $f10, $f26, $f0 \r\n"
1397
+ "paddb $f14, $f14, $f14 \r\n"
1398
+ "psubb $f12, $f26, $f0 \r\n"
1399
+ "psubb $f14, $f14, $f12 \r\n"
1400
+ "and $f12, $f12, %[ff_pb_1] \r\n"
1401
+ "psubb $f10, $f10, $f12 \r\n"
1402
+ "ldc1 $f22, 0x10+%[stack] \r\n"
1403
+ "pavgb $f10, $f10, $f6 \r\n"
1404
+ "pavgb $f10, $f10, $f22 \r\n"
1405
+ "psrlh $f14, $f14, $f20 \r\n"
1406
+ "pavgb $f14, $f14, $f30 \r\n"
1407
+ "xor $f14, $f14, $f10 \r\n"
1408
+ "and $f14, $f14, %[ff_pb_1] \r\n"
1409
+ "psubb $f10, $f10, $f14 \r\n"
1410
+ "xor $f14, $f4, $f0 \r\n"
1411
+ "pavgb $f12, $f4, $f0 \r\n"
1412
+ "and $f14, $f14, %[ff_pb_1] \r\n"
1413
+ "ldc1 $f22, 0x40+%[stack] \r\n"
1414
+ "psubb $f12, $f12, $f14 \r\n"
1415
+ "ldc1 $f24, 0x20+%[stack] \r\n"
1416
+ "pavgb $f12, $f12, $f6 \r\n"
1417
+ "xor $f10, $f10, $f12 \r\n"
1418
+ "xor $f12, $f12, $f4 \r\n"
1419
+ "and $f10, $f10, $f22 \r\n"
1420
+ "and $f12, $f12, $f24 \r\n"
1421
+ "xor $f10, $f10, $f12 \r\n"
1422
+ "xor $f10, $f10, $f4 \r\n"
1423
+ "sdc1 $f10, 0x0(%[pix]) \r\n"
1424
+ "gsldxc1 $f10, 0x0(%[pix], $9) \r\n"
1425
+ "paddb $f12, $f26, $f10 \r\n"
1426
+ "pavgb $f10, $f10, $f26 \r\n"
1427
+ "ldc1 $f22, 0x0+%[stack] \r\n"
1428
+ "pavgb $f10, $f10, $f8 \r\n"
1429
+ "paddb $f12, $f12, $f12 \r\n"
1430
+ "paddb $f12, $f12, $f22 \r\n"
1431
+ "psrlh $f12, $f12, $f20 \r\n"
1432
+ "pavgb $f12, $f12, $f30 \r\n"
1433
+ "xor $f12, $f12, $f10 \r\n"
1434
+ "and $f12, $f12, %[ff_pb_1] \r\n"
1435
+ "ldc1 $f22, 0x40+%[stack] \r\n"
1436
+ "psubb $f10, $f10, $f12 \r\n"
1437
+ "xor $f8, $f8, $f6 \r\n"
1438
+ "xor $f10, $f10, $f26 \r\n"
1439
+ "and $f8, $f8, $f22 \r\n"
1440
+ "and $f10, $f10, $f22 \r\n"
1441
+ "xor $f8, $f8, $f6 \r\n"
1442
+ "xor $f10, $f10, $f26 \r\n"
1443
+ "gssdxc1 $f8, 0x0(%[pix], %[stride]) \r\n"
1444
+ "gssdxc1 $f10, 0x0(%[pix], $10) \r\n"
1445
+ "1: \r\n"
1446
+ ::[pix]"r"(pix),[stride]"r"((int64_t)stride),
1447
+ [alpha]"r"((int64_t)alpha),[beta]"r"((int64_t)beta),
1448
+ [stack]"m"(stack[0]),[ff_pb_1]"f"(ff_pb_1)
1449
+ : "$8","$9","$10","$f0","$f2","$f4","$f6","$f8","$f10","$f12","$f14",
1450
+ "$f16","$f18","$f20","$f22","$f24","$f26","$f28","$f30"
1451
+ );
1452
+}
1453
+
1454
+void ff_deblock_v_chroma_8_mmi(uint8_t *pix, int stride, int alpha, int beta,
1455
+ int8_t *tc0)
1456
+{
1457
+ __asm__ volatile (
1458
+ "daddiu %[alpha], %[alpha], -0x1 \r\n"
1459
+ "daddiu %[beta], %[beta], -0x1 \r\n"
1460
+ "or $16, $0, %[pix] \r\n"
1461
+ "dsubu $16, $16, %[stride] \r\n"
1462
+ "dsubu $16, $16, %[stride] \r\n"
1463
+ "ldc1 $f0, 0x0($16) \r\n"
1464
+ "gsldxc1 $f2, 0x0($16, %[stride]) \r\n"
1465
+ "ldc1 $f4, 0x0(%[pix]) \r\n"
1466
+ "gsldxc1 $f6, 0x0(%[pix], %[stride]) \r\n"
1467
+ : [pix]"+r"(pix),[stride]"+r"(stride),[alpha]"+r"(alpha),
1468
+ [beta]"+r"(beta)
1469
+ : [tc0]"r"(tc0)
1470
+ : "$16","$f2","$f4"
1471
+ );
1472
+
1473
+ chroma_inter_body_mmi(pix, stride, alpha, beta, tc0);
1474
+
1475
+ __asm__ volatile (
1476
+ "gssdxc1 $f2, 0x0($16, %[stride]) \r\n"
1477
+ "sdc1 $f4, 0x0(%[pix]) \r\n"
1478
+ ::[pix]"r"(pix),[stride]"r"((int64_t)stride)
1479
+ : "$16","$f2","$f4"
1480
+ );
1481
+}
1482
+
1483
+void ff_deblock_v_chroma_intra_8_mmi(uint8_t *pix, int stride, int alpha,
1484
+ int beta)
1485
+{
1486
+ __asm__ volatile (
1487
+ "daddiu %[alpha], %[alpha], -0x1 \r\n"
1488
+ "daddiu %[beta], %[beta], -0x1 \r\n"
1489
+ "or $16, $0, %[pix] \r\n"
1490
+ "dsubu $16, $16, %[stride] \r\n"
1491
+ "dsubu $16, $16, %[stride] \r\n"
1492
+ "ldc1 $f0, 0x0($16) \r\n"
1493
+ "gsldxc1 $f2, 0x0($16, %[stride]) \r\n"
1494
+ "ldc1 $f4, 0x0(%[pix]) \r\n"
1495
+ "gsldxc1 $f6, 0x0(%[pix], %[stride]) \r\n"
1496
+ : [pix]"+r"(pix),[stride]"+r"(stride),[alpha]"+r"(alpha),
1497
+ [beta]"+r"(beta)
1498
+ ::"$16","$f0","$f2","$f4","$f6"
1499
+ );
1500
+
1501
+ chroma_intra_body_mmi(pix, stride, alpha, beta);
1502
+
1503
+ __asm__ volatile (
1504
+ "gssdxc1 $f2, 0x0($16, %[stride]) \r\n"
1505
+ "sdc1 $f4, 0x0(%[pix]) \r\n"
1506
+ ::[pix]"r"(pix),[stride]"r"((int64_t)stride)
1507
+ : "$16","$f2","$f4"
1508
+ );
1509
+}
1510
+
1511
+void ff_deblock_h_chroma_8_mmi(uint8_t *pix, int stride, int alpha, int beta,
1512
+ int8_t *tc0)
1513
+{
1514
+ __asm__ volatile (
1515
+ "daddiu %[alpha], %[alpha], -0x1 \r\n"
1516
+ "daddiu %[beta], %[beta], -0x1 \r\n"
1517
+ "daddu $16, %[stride], %[stride] \r\n"
1518
+ "daddiu %[pix], %[pix], -0x2 \r\n"
1519
+ "daddu $17, $16, %[stride] \r\n"
1520
+ "daddu $19, $16, $16 \r\n"
1521
+ "or $18, $0, %[pix] \r\n"
1522
+ "daddu %[pix], %[pix], $17 \r\n"
1523
+ "gslwlc1 $f0, 0x3($18) \r\n"
1524
+ "daddu $12, $18, %[stride] \r\n"
1525
+ "gslwrc1 $f0, 0x0($18) \r\n"
1526
+ "gslwlc1 $f4, 0x3($12) \r\n"
1527
+ "daddu $13, $18, $16 \r\n"
1528
+ "gslwrc1 $f4, 0x0($12) \r\n"
1529
+ "gslwlc1 $f2, 0x3($13) \r\n"
1530
+ "gslwrc1 $f2, 0x0($13) \r\n"
1531
+ "gslwlc1 $f6, 0x3(%[pix]) \r\n"
1532
+ "gslwrc1 $f6, 0x0(%[pix]) \r\n"
1533
+ "punpcklbh $f0, $f0, $f4 \r\n"
1534
+ "punpcklbh $f2, $f2, $f6 \r\n"
1535
+ "daddu $12, %[pix], %[stride] \r\n"
1536
+ "punpckhhw $f4, $f0, $f2 \r\n"
1537
+ "punpcklhw $f0, $f0, $f2 \r\n"
1538
+ "gslwlc1 $f8, 0x3($12) \r\n"
1539
+ "daddu $13, %[pix], $16 \r\n"
1540
+ "gslwrc1 $f8, 0x0($12) \r\n"
1541
+ "gslwlc1 $f12, 0x3($13) \r\n"
1542
+ "daddu $12, %[pix], $17 \r\n"
1543
+ "gslwrc1 $f12, 0x0($13) \r\n"
1544
+ "gslwlc1 $f10, 0x3($12) \r\n"
1545
+ "daddu $13, %[pix], $19 \r\n"
1546
+ "gslwrc1 $f10, 0x0($12) \r\n"
1547
+ "gslwlc1 $f14, 0x3($13) \r\n"
1548
+ "gslwrc1 $f14, 0x0($13) \r\n"
1549
+ "punpcklbh $f8, $f8, $f12 \r\n"
1550
+ "punpcklbh $f10, $f10, $f14 \r\n"
1551
+ "mov.d $f12, $f8 \r\n"
1552
+ "punpcklhw $f8, $f8, $f10 \r\n"
1553
+ "punpckhhw $f12, $f12, $f10 \r\n"
1554
+ "punpckhwd $f2, $f0, $f8 \r\n"
1555
+ "punpckhwd $f6, $f4, $f12 \r\n"
1556
+ "punpcklwd $f0, $f0, $f8 \r\n"
1557
+ "punpcklwd $f4, $f4, $f12 \r\n"
1558
+ "mov.d $f20, $f0 \r\n"
1559
+ "mov.d $f22, $f6 \r\n"
1560
+ : [pix]"+r"(pix),[stride]"+r"(stride),[alpha]"+r"(alpha),
1561
+ [beta]"+r"(beta)
1562
+ ::"$12","$13","$16","$17","$18","$19","$f0","$f2","$f4","$f6","$f8",
1563
+ "$f10","$f12","$f14","$f20","$f22"
1564
+ );
1565
+
1566
+ chroma_inter_body_mmi(pix, stride, alpha, beta, tc0);
1567
+
1568
+ __asm__ volatile (
1569
+ "punpckhwd $f8, $f20, $f20 \r\n"
1570
+ "punpckhwd $f10, $f2, $f2 \r\n"
1571
+ "punpckhwd $f12, $f4, $f4 \r\n"
1572
+ "punpcklbh $f0, $f20, $f2 \r\n"
1573
+ "punpcklbh $f4, $f4, $f22 \r\n"
1574
+ "punpcklhw $f2, $f0, $f4 \r\n"
1575
+ "punpckhhw $f0, $f0, $f4 \r\n"
1576
+ "gsswlc1 $f2, 0x3($18) \r\n"
1577
+ "gsswrc1 $f2, 0x0($18) \r\n"
1578
+ "daddu $12, $18, %[stride] \r\n"
1579
+ "punpckhwd $f2, $f2, $f2 \r\n"
1580
+ "gsswlc1 $f2, 0x3($12) \r\n"
1581
+ "daddu $13, $18, $16 \r\n"
1582
+ "gsswrc1 $f2, 0x0($12) \r\n"
1583
+ "gsswlc1 $f0, 0x3($13) \r\n"
1584
+ "gsswrc1 $f0, 0x0($13) \r\n"
1585
+ "punpckhwd $f0, $f0, $f0 \r\n"
1586
+ "punpckhwd $f6, $f22, $f22 \r\n"
1587
+ "gsswlc1 $f0, 0x3(%[pix]) \r\n"
1588
+ "gsswrc1 $f0, 0x0(%[pix]) \r\n"
1589
+ "punpcklbh $f8, $f8, $f10 \r\n"
1590
+ "punpcklbh $f12, $f12, $f6 \r\n"
1591
+ "daddu $12, %[pix], %[stride] \r\n"
1592
+ "punpcklhw $f10, $f8, $f12 \r\n"
1593
+ "punpckhhw $f8, $f8, $f12 \r\n"
1594
+ "gsswlc1 $f10, 0x3($12) \r\n"
1595
+ "gsswrc1 $f10, 0x0($12) \r\n"
1596
+ "punpckhwd $f10, $f10, $f10 \r\n"
1597
+ "daddu $12, %[pix], $16 \r\n"
1598
+ "daddu $13, %[pix], $17 \r\n"
1599
+ "gsswlc1 $f10, 0x3($12) \r\n"
1600
+ "gsswrc1 $f10, 0x0($12) \r\n"
1601
+ "gsswlc1 $f8, 0x3($13) \r\n"
1602
+ "daddu $12, %[pix], $19 \r\n"
1603
+ "punpckhwd $f20, $f8, $f8 \r\n"
1604
+ "gsswrc1 $f8, 0x0($13) \r\n"
1605
+ "gsswlc1 $f20, 0x3($12) \r\n"
1606
+ "gsswrc1 $f20, 0x0($12) \r\n"
1607
+ ::[pix]"r"(pix),[stride]"r"((int64_t)stride)
1608
+ : "$12","$13","$16","$17","$18","$19","$f0","$f2","$f4","$f6","$f8",
1609
+ "$f10","$f12","$f20"
1610
+ );
1611
+}
1612
+
1613
+void ff_deblock_h_chroma_intra_8_mmi(uint8_t *pix, int stride, int alpha,
1614
+ int beta)
1615
+{
1616
+ __asm__ volatile (
1617
+ "daddiu %[alpha], %[alpha], -0x1 \r\n"
1618
+ "daddiu %[beta], %[beta], -0x1 \r\n"
1619
+ "daddu $16, %[stride], %[stride] \r\n"
1620
+ "daddiu %[pix], %[pix], -0x2 \r\n"
1621
+ "daddu $17, $16, %[stride] \r\n"
1622
+ "daddu $19, $16, $16 \r\n"
1623
+ "or $18, $0, %[pix] \r\n"
1624
+ "daddu %[pix], %[pix], $17 \r\n"
1625
+ "gslwlc1 $f0, 0x3($18) \r\n"
1626
+ "daddu $12, $18, %[stride] \r\n"
1627
+ "gslwrc1 $f0, 0x0($18) \r\n"
1628
+ "gslwlc1 $f4, 0x3($12) \r\n"
1629
+ "daddu $13, $18, $16 \r\n"
1630
+ "gslwrc1 $f4, 0x0($12) \r\n"
1631
+ "gslwlc1 $f2, 0x3($13) \r\n"
1632
+ "gslwrc1 $f2, 0x0($13) \r\n"
1633
+ "gslwlc1 $f6, 0x3(%[pix]) \r\n"
1634
+ "gslwrc1 $f6, 0x0(%[pix]) \r\n"
1635
+ "punpcklbh $f0, $f0, $f4 \r\n"
1636
+ "punpcklbh $f2, $f2, $f6 \r\n"
1637
+ "daddu $12, %[pix], %[stride] \r\n"
1638
+ "punpckhhw $f4, $f0, $f2 \r\n"
1639
+ "punpcklhw $f0, $f0, $f2 \r\n"
1640
+ "gslwlc1 $f8, 0x3($12) \r\n"
1641
+ "daddu $13, %[pix], $16 \r\n"
1642
+ "gslwrc1 $f8, 0x0($12) \r\n"
1643
+ "gslwlc1 $f12, 0x3($13) \r\n"
1644
+ "daddu $12, %[pix], $17 \r\n"
1645
+ "gslwrc1 $f12, 0x0($13) \r\n"
1646
+ "gslwlc1 $f10, 0x3($12) \r\n"
1647
+ "daddu $13, %[pix], $19 \r\n"
1648
+ "gslwrc1 $f10, 0x0($12) \r\n"
1649
+ "gslwlc1 $f14, 0x3($13) \r\n"
1650
+ "gslwrc1 $f14, 0x0($13) \r\n"
1651
+ "punpcklbh $f8, $f8, $f12 \r\n"
1652
+ "punpcklbh $f10, $f10, $f14 \r\n"
1653
+ "mov.d $f12, $f8 \r\n"
1654
+ "punpcklhw $f8, $f8, $f10 \r\n"
1655
+ "punpckhhw $f12, $f12, $f10 \r\n"
1656
+ "punpckhwd $f2, $f0, $f8 \r\n"
1657
+ "punpckhwd $f6, $f4, $f12 \r\n"
1658
+ "punpcklwd $f0, $f0, $f8 \r\n"
1659
+ "punpcklwd $f4, $f4, $f12 \r\n"
1660
+ : [pix]"+r"(pix),[stride]"+r"(stride),[alpha]"+r"(alpha),
1661
+ [beta]"+r"(beta)
1662
+ ::"$12","$13","$16","$17","$18","$19","$f0","$f2","$f4","$f6","$f8",
1663
+ "$f10","$f12","$f14","$f20","$f22"
1664
+ );
1665
+
1666
+ chroma_intra_body_mmi(pix, stride, alpha, beta);
1667
+
1668
+ __asm__ volatile (
1669
+ "punpckhwd $f8, $f0, $f0 \r\n"
1670
+ "punpckhwd $f10, $f2, $f2 \r\n"
1671
+ "punpckhwd $f12, $f4, $f4 \r\n"
1672
+ "punpcklbh $f0, $f0, $f2 \r\n"
1673
+ "punpcklbh $f4, $f4, $f6 \r\n"
1674
+ "punpcklhw $f2, $f0, $f4 \r\n"
1675
+ "punpckhhw $f0, $f0, $f4 \r\n"
1676
+ "gsswlc1 $f2, 0x3($18) \r\n"
1677
+ "gsswrc1 $f2, 0x0($18) \r\n"
1678
+ "daddu $12, $18, %[stride] \r\n"
1679
+ "punpckhwd $f2, $f2, $f2 \r\n"
1680
+ "gsswlc1 $f2, 0x3($12) \r\n"
1681
+ "daddu $13, $18, $16 \r\n"
1682
+ "gsswrc1 $f2, 0x0($12) \r\n"
1683
+ "gsswlc1 $f0, 0x3($13) \r\n"
1684
+ "gsswrc1 $f0, 0x0($13) \r\n"
1685
+ "punpckhwd $f0, $f0, $f0 \r\n"
1686
+ "punpckhwd $f6, $f6, $f6 \r\n"
1687
+ "gsswlc1 $f0, 0x3(%[pix]) \r\n"
1688
+ "gsswrc1 $f0, 0x0(%[pix]) \r\n"
1689
+ "punpcklbh $f8, $f8, $f10 \r\n"
1690
+ "punpcklbh $f12, $f12, $f6 \r\n"
1691
+ "daddu $12, %[pix], %[stride] \r\n"
1692
+ "punpcklhw $f10, $f8, $f12 \r\n"
1693
+ "punpckhhw $f8, $f8, $f12 \r\n"
1694
+ "gsswlc1 $f10, 0x3($12) \r\n"
1695
+ "gsswrc1 $f10, 0x0($12) \r\n"
1696
+ "punpckhwd $f10, $f10, $f10 \r\n"
1697
+ "daddu $12, %[pix], $16 \r\n"
1698
+ "daddu $13, %[pix], $17 \r\n"
1699
+ "gsswlc1 $f10, 0x3($12) \r\n"
1700
+ "gsswrc1 $f10, 0x0($12) \r\n"
1701
+ "gsswlc1 $f8, 0x3($13) \r\n"
1702
+ "daddu $12, %[pix], $19 \r\n"
1703
+ "punpckhwd $f20, $f8, $f8 \r\n"
1704
+ "gsswrc1 $f8, 0x0($13) \r\n"
1705
+ "gsswlc1 $f20, 0x3($12) \r\n"
1706
+ "gsswrc1 $f20, 0x0($12) \r\n"
1707
+ ::[pix]"r"(pix),[stride]"r"((int64_t)stride)
1708
+ : "$12","$13","$16","$17","$18","$19","$f0","$f2","$f4","$f6","$f8",
1709
+ "$f10","$f12","$f20"
1710
+ );
1711
+}
1712
+
1713
+void ff_deblock_v_luma_8_mmi(uint8_t *pix, int stride, int alpha, int beta,
1714
+ int8_t *tc0)
1715
+{
1716
+ if ((tc0[0] & tc0[1]) >= 0)
1717
+ ff_deblock_v8_luma_8_mmi(pix + 0, stride, alpha, beta, tc0);
1718
+ if ((tc0[2] & tc0[3]) >= 0)
1719
+ ff_deblock_v8_luma_8_mmi(pix + 8, stride, alpha, beta, tc0 + 2);
1720
+}
1721
+
1722
+void ff_deblock_v_luma_intra_8_mmi(uint8_t *pix, int stride, int alpha,
1723
+ int beta)
1724
+{
1725
+ ff_deblock_v8_luma_intra_8_mmi(pix + 0, stride, alpha, beta);
1726
+ ff_deblock_v8_luma_intra_8_mmi(pix + 8, stride, alpha, beta);
1727
+}
1728
+
1729
+void ff_deblock_h_luma_8_mmi(uint8_t *pix, int stride, int alpha, int beta,
1730
+ int8_t *tc0)
1731
+{
1732
+ uint64_t stack[0xd];
1733
+
1734
+ __asm__ volatile (
1735
+ "daddu $15, %[stride], %[stride] \r\n"
1736
+ "daddiu $8, %[pix], -0x4 \r\n"
1737
+ "daddu $9, %[stride], $15 \r\n"
1738
+ "gsldlc1 $f0, 0x7($8) \r\n"
1739
+ "gsldrc1 $f0, 0x0($8) \r\n"
1740
+ "daddu $12, $8, %[stride] \r\n"
1741
+ "daddu $10, $8, $9 \r\n"
1742
+ "gsldlc1 $f2, 0x7($12) \r\n"
1743
+ "daddu $11, $8, $15 \r\n"
1744
+ "gsldrc1 $f2, 0x0($12) \r\n"
1745
+ "gsldlc1 $f4, 0x7($11) \r\n"
1746
+ "gsldrc1 $f4, 0x0($11) \r\n"
1747
+ "gsldlc1 $f6, 0x7($10) \r\n"
1748
+ "daddu $12, $10, %[stride] \r\n"
1749
+ "gsldrc1 $f6, 0x0($10) \r\n"
1750
+ "gsldlc1 $f8, 0x7($12) \r\n"
1751
+ "daddu $11, $10, $15 \r\n"
1752
+ "gsldrc1 $f8, 0x0($12) \r\n"
1753
+ "gsldlc1 $f10, 0x7($11) \r\n"
1754
+ "daddu $12, $10, $9 \r\n"
1755
+ "gsldrc1 $f10, 0x0($11) \r\n"
1756
+ "gsldlc1 $f12, 0x7($12) \r\n"
1757
+ "gsldrc1 $f12, 0x0($12) \r\n"
1758
+ "daddu $14, $15, $15 \r\n"
1759
+ "punpckhbh $f14, $f0, $f2 \r\n"
1760
+ "punpcklbh $f0, $f0, $f2 \r\n"
1761
+ "punpckhbh $f2, $f4, $f6 \r\n"
1762
+ "punpcklbh $f4, $f4, $f6 \r\n"
1763
+ "punpckhbh $f6, $f8, $f10 \r\n"
1764
+ "punpcklbh $f8, $f8, $f10 \r\n"
1765
+ "daddu $12, $10, $14 \r\n"
1766
+ "sdc1 $f2, 0x10+%[stack] \r\n"
1767
+ "gsldlc1 $f16, 0x7($12) \r\n"
1768
+ "gsldrc1 $f16, 0x0($12) \r\n"
1769
+ "daddu $13, $14, $14 \r\n"
1770
+ "punpckhbh $f10, $f12, $f16 \r\n"
1771
+ "punpcklbh $f12, $f12, $f16 \r\n"
1772
+ "punpckhhw $f2, $f0, $f4 \r\n"
1773
+ "punpcklhw $f0, $f0, $f4 \r\n"
1774
+ "punpckhhw $f4, $f8, $f12 \r\n"
1775
+ "punpcklhw $f8, $f8, $f12 \r\n"
1776
+ "ldc1 $f16, 0x10+%[stack] \r\n"
1777
+ "punpckhwd $f0, $f0, $f8 \r\n"
1778
+ "sdc1 $f0, 0x0+%[stack] \r\n"
1779
+ "punpckhhw $f12, $f14, $f16 \r\n"
1780
+ "punpcklhw $f14, $f14, $f16 \r\n"
1781
+ "punpckhhw $f0, $f6, $f10 \r\n"
1782
+ "punpcklhw $f6, $f6, $f10 \r\n"
1783
+ "punpcklwd $f12, $f12, $f0 \r\n"
1784
+ "punpckhwd $f10, $f14, $f6 \r\n"
1785
+ "punpcklwd $f14, $f14, $f6 \r\n"
1786
+ "punpckhwd $f6, $f2, $f4 \r\n"
1787
+ "punpcklwd $f2, $f2, $f4 \r\n"
1788
+ "sdc1 $f2, 0x10+%[stack] \r\n"
1789
+ "sdc1 $f6, 0x20+%[stack] \r\n"
1790
+ "sdc1 $f14, 0x30+%[stack] \r\n"
1791
+ "sdc1 $f10, 0x40+%[stack] \r\n"
1792
+ "sdc1 $f12, 0x50+%[stack] \r\n"
1793
+ "daddu $8, $8, $13 \r\n"
1794
+ "daddu $10, $10, $13 \r\n"
1795
+ "gsldlc1 $f0, 0x7($8) \r\n"
1796
+ "daddu $12, $8, %[stride] \r\n"
1797
+ "gsldrc1 $f0, 0x0($8) \r\n"
1798
+ "gsldlc1 $f2, 0x7($12) \r\n"
1799
+ "daddu $11, $8, $15 \r\n"
1800
+ "gsldrc1 $f2, 0x0($12) \r\n"
1801
+ "gsldlc1 $f4, 0x7($11) \r\n"
1802
+ "gsldrc1 $f4, 0x0($11) \r\n"
1803
+ "gsldlc1 $f6, 0x7($10) \r\n"
1804
+ "daddu $12, $10, %[stride] \r\n"
1805
+ "gsldrc1 $f6, 0x0($10) \r\n"
1806
+ "gsldlc1 $f8, 0x7($12) \r\n"
1807
+ "daddu $11, $10, $15 \r\n"
1808
+ "gsldrc1 $f8, 0x0($12) \r\n"
1809
+ "gsldlc1 $f10, 0x7($11) \r\n"
1810
+ "daddu $12, $10, $9 \r\n"
1811
+ "gsldrc1 $f10, 0x0($11) \r\n"
1812
+ "gsldlc1 $f12, 0x7($12) \r\n"
1813
+ "gsldrc1 $f12, 0x0($12) \r\n"
1814
+ "punpckhbh $f14, $f0, $f2 \r\n"
1815
+ "punpcklbh $f0, $f0, $f2 \r\n"
1816
+ "punpckhbh $f2, $f4, $f6 \r\n"
1817
+ "punpcklbh $f4, $f4, $f6 \r\n"
1818
+ "punpckhbh $f6, $f8, $f10 \r\n"
1819
+ "punpcklbh $f8, $f8, $f10 \r\n"
1820
+ "daddu $12, $10, $14 \r\n"
1821
+ "sdc1 $f2, 0x18+%[stack] \r\n"
1822
+ "gsldlc1 $f16, 0x7($12) \r\n"
1823
+ "gsldrc1 $f16, 0x0($12) \r\n"
1824
+ "punpckhhw $f2, $f0, $f4 \r\n"
1825
+ "punpckhbh $f10, $f12, $f16 \r\n"
1826
+ "punpcklbh $f12, $f12, $f16 \r\n"
1827
+ "punpcklhw $f0, $f0, $f4 \r\n"
1828
+ "punpckhhw $f4, $f8, $f12 \r\n"
1829
+ "punpcklhw $f8, $f8, $f12 \r\n"
1830
+ "punpckhwd $f0, $f0, $f8 \r\n"
1831
+ "ldc1 $f16, 0x18+%[stack] \r\n"
1832
+ "sdc1 $f0, 0x8+%[stack] \r\n"
1833
+ "punpckhhw $f12, $f14, $f16 \r\n"
1834
+ "punpcklhw $f14, $f14, $f16 \r\n"
1835
+ "punpckhhw $f0, $f6, $f10 \r\n"
1836
+ "punpcklhw $f6, $f6, $f10 \r\n"
1837
+ "punpckhwd $f10, $f14, $f6 \r\n"
1838
+ "punpcklwd $f14, $f14, $f6 \r\n"
1839
+ "punpckhwd $f6, $f2, $f4 \r\n"
1840
+ "punpcklwd $f2, $f2, $f4 \r\n"
1841
+ "punpcklwd $f12, $f12, $f0 \r\n"
1842
+ "sdc1 $f2, 0x18+%[stack] \r\n"
1843
+ "sdc1 $f6, 0x28+%[stack] \r\n"
1844
+ "sdc1 $f14, 0x38+%[stack] \r\n"
1845
+ "sdc1 $f10, 0x48+%[stack] \r\n"
1846
+ "sdc1 $f12, 0x58+%[stack] \r\n"
1847
+ ::[pix]"r"(pix),[stride]"r"((int64_t)stride),[stack]"m"(stack[0])
1848
+ : "$8","$9","$10","$11","$12","$13","$14","$15","$f0","$f2","$f4",
1849
+ "$f6","$f8","$f10","$f12","$f14","$f16"
1850
+ );
1851
+
1852
+ ff_deblock_v_luma_8_mmi((uint8_t *) &stack[6], 0x10, alpha, beta, tc0);
1853
+
1854
+ __asm__ volatile (
1855
+ "daddu $15, %[stride], %[stride] \r\n"
1856
+ "daddiu $8, %[pix], -0x2 \r\n"
1857
+ "daddu $14, $15, $15 \r\n"
1858
+ "daddu $9, $15, %[stride] \r\n"
1859
+ "daddu $13, $14, $14 \r\n"
1860
+ "daddu $10, $8, $9 \r\n"
1861
+ "ldc1 $f0, 0x10+%[stack] \r\n"
1862
+ "ldc1 $f2, 0x20+%[stack] \r\n"
1863
+ "ldc1 $f4, 0x30+%[stack] \r\n"
1864
+ "ldc1 $f6, 0x40+%[stack] \r\n"
1865
+ "punpckhwd $f8, $f0, $f0 \r\n"
1866
+ "punpckhwd $f10, $f2, $f2 \r\n"
1867
+ "punpckhwd $f12, $f4, $f4 \r\n"
1868
+ "punpcklbh $f0, $f0, $f2 \r\n"
1869
+ "punpcklbh $f4, $f4, $f6 \r\n"
1870
+ "punpcklhw $f2, $f0, $f4 \r\n"
1871
+ "punpckhhw $f0, $f0, $f4 \r\n"
1872
+ "gsswlc1 $f2, 0x3($8) \r\n"
1873
+ "gsswrc1 $f2, 0x0($8) \r\n"
1874
+ "daddu $12, $8, %[stride] \r\n"
1875
+ "punpckhwd $f2, $f2, $f2 \r\n"
1876
+ "daddu $11, $8, $15 \r\n"
1877
+ "gsswlc1 $f2, 0x3($12) \r\n"
1878
+ "gsswrc1 $f2, 0x0($12) \r\n"
1879
+ "gsswlc1 $f0, 0x3($11) \r\n"
1880
+ "gsswrc1 $f0, 0x0($11) \r\n"
1881
+ "punpckhwd $f0, $f0, $f0 \r\n"
1882
+ "punpckhwd $f6, $f6, $f6 \r\n"
1883
+ "gsswlc1 $f0, 0x3($10) \r\n"
1884
+ "gsswrc1 $f0, 0x0($10) \r\n"
1885
+ "punpcklbh $f8, $f8, $f10 \r\n"
1886
+ "punpcklbh $f12, $f12, $f6 \r\n"
1887
+ "punpcklhw $f10, $f8, $f12 \r\n"
1888
+ "daddu $12, $10, %[stride] \r\n"
1889
+ "punpckhhw $f8, $f8, $f12 \r\n"
1890
+ "gsswlc1 $f10, 0x3($12) \r\n"
1891
+ "gsswrc1 $f10, 0x0($12) \r\n"
1892
+ "daddu $12, $10, $15 \r\n"
1893
+ "punpckhwd $f10, $f10, $f10 \r\n"
1894
+ "daddu $11, $10, $9 \r\n"
1895
+ "gsswlc1 $f10, 0x3($12) \r\n"
1896
+ "gsswrc1 $f10, 0x0($12) \r\n"
1897
+ "gsswlc1 $f8, 0x3($11) \r\n"
1898
+ "gsswrc1 $f8, 0x0($11) \r\n"
1899
+ "daddu $12, $10, $14 \r\n"
1900
+ "punpckhwd $f8, $f8, $f8 \r\n"
1901
+ "daddu $8, $8, $13 \r\n"
1902
+ "gsswlc1 $f8, 0x3($12) \r\n"
1903
+ "gsswrc1 $f8, 0x0($12) \r\n"
1904
+ "daddu $10, $10, $13 \r\n"
1905
+ "ldc1 $f0, 0x18+%[stack] \r\n"
1906
+ "ldc1 $f2, 0x28+%[stack] \r\n"
1907
+ "ldc1 $f4, 0x38+%[stack] \r\n"
1908
+ "ldc1 $f6, 0x48+%[stack] \r\n"
1909
+ "daddu $15, %[stride], %[stride] \r\n"
1910
+ "punpckhwd $f8, $f0, $f0 \r\n"
1911
+ "daddu $14, $15, $15 \r\n"
1912
+ "punpckhwd $f10, $f2, $f2 \r\n"
1913
+ "punpckhwd $f12, $f4, $f4 \r\n"
1914
+ "punpcklbh $f0, $f0, $f2 \r\n"
1915
+ "punpcklbh $f4, $f4, $f6 \r\n"
1916
+ "daddu $12, $8, %[stride] \r\n"
1917
+ "punpcklhw $f2, $f0, $f4 \r\n"
1918
+ "punpckhhw $f0, $f0, $f4 \r\n"
1919
+ "gsswlc1 $f2, 0x3($8) \r\n"
1920
+ "gsswrc1 $f2, 0x0($8) \r\n"
1921
+ "punpckhwd $f2, $f2, $f2 \r\n"
1922
+ "daddu $11, $8, $15 \r\n"
1923
+ "gsswlc1 $f2, 0x3($12) \r\n"
1924
+ "gsswrc1 $f2, 0x0($12) \r\n"
1925
+ "gsswlc1 $f0, 0x3($11) \r\n"
1926
+ "gsswrc1 $f0, 0x0($11) \r\n"
1927
+ "punpckhwd $f0, $f0, $f0 \r\n"
1928
+ "punpckhwd $f6, $f6, $f6 \r\n"
1929
+ "gsswlc1 $f0, 0x3($10) \r\n"
1930
+ "gsswrc1 $f0, 0x0($10) \r\n"
1931
+ "punpcklbh $f8, $f8, $f10 \r\n"
1932
+ "punpcklbh $f12, $f12, $f6 \r\n"
1933
+ "daddu $12, $10, %[stride] \r\n"
1934
+ "punpcklhw $f10, $f8, $f12 \r\n"
1935
+ "punpckhhw $f8, $f8, $f12 \r\n"
1936
+ "gsswlc1 $f10, 0x3($12) \r\n"
1937
+ "gsswrc1 $f10, 0x0($12) \r\n"
1938
+ "daddu $12, $10, $15 \r\n"
1939
+ "punpckhwd $f10, $f10, $f10 \r\n"
1940
+ "daddu $11, $10, $9 \r\n"
1941
+ "gsswlc1 $f10, 0x3($12) \r\n"
1942
+ "gsswrc1 $f10, 0x0($12) \r\n"
1943
+ "gsswlc1 $f8, 0x3($11) \r\n"
1944
+ "gsswrc1 $f8, 0x0($11) \r\n"
1945
+ "daddu $12, $10, $14 \r\n"
1946
+ "punpckhwd $f8, $f8, $f8 \r\n"
1947
+ "gsswlc1 $f8, 0x3($12) \r\n"
1948
+ "gsswrc1 $f8, 0x0($12) \r\n"
1949
+ ::[pix]"r"(pix),[stride]"r"((int64_t)stride),[stack]"m"(stack[0])
1950
+ : "$8","$9","$10","$11","$12","$13","$14","$15","$f0","$f2","$f4",
1951
+ "$f6","$f8","$f10","$f12","$f14","$f16"
1952
+ );
1953
+}
1954
+
1955
+void ff_deblock_h_luma_intra_8_mmi(uint8_t *pix, int stride, int alpha,
1956
+ int beta)
1957
+{
1958
+ uint64_t ptmp[0x11];
1959
+ uint64_t pdat[4];
1960
+
1961
+ __asm__ volatile (
1962
+ "daddu $12, %[stride], %[stride] \r\n"
1963
+ "daddiu $10, %[pix], -0x4 \r\n"
1964
+ "daddu $11, $12, %[stride] \r\n"
1965
+ "daddu $13, $12, $12 \r\n"
1966
+ "daddu $9, $10, $11 \r\n"
1967
+ "daddu $8, $10, %[stride] \r\n"
1968
+ "gsldlc1 $f0, 0x7($10) \r\n"
1969
+ "gsldrc1 $f0, 0x0($10) \r\n"
1970
+ "daddu $14, $10, $12 \r\n"
1971
+ "gsldlc1 $f2, 0x7($8) \r\n"
1972
+ "gsldrc1 $f2, 0x0($8) \r\n"
1973
+ "gsldlc1 $f4, 0x7($14) \r\n"
1974
+ "gsldrc1 $f4, 0x0($14) \r\n"
1975
+ "daddu $8, $9, %[stride] \r\n"
1976
+ "gsldlc1 $f6, 0x7($9) \r\n"
1977
+ "gsldrc1 $f6, 0x0($9) \r\n"
1978
+ "daddu $14, $9, $12 \r\n"
1979
+ "gsldlc1 $f8, 0x7($8) \r\n"
1980
+ "gsldrc1 $f8, 0x0($8) \r\n"
1981
+ "daddu $8, $9, $11 \r\n"
1982
+ "gsldlc1 $f10, 0x7($14) \r\n"
1983
+ "gsldrc1 $f10, 0x0($14) \r\n"
1984
+ "gsldlc1 $f12, 0x7($8) \r\n"
1985
+ "gsldrc1 $f12, 0x0($8) \r\n"
1986
+ "daddu $8, $9, $13 \r\n"
1987
+ "punpckhbh $f14, $f0, $f2 \r\n"
1988
+ "punpcklbh $f0, $f0, $f2 \r\n"
1989
+ "punpckhbh $f2, $f4, $f6 \r\n"
1990
+ "punpcklbh $f4, $f4, $f6 \r\n"
1991
+ "punpckhbh $f6, $f8, $f10 \r\n"
1992
+ "punpcklbh $f8, $f8, $f10 \r\n"
1993
+ "gsldlc1 $f16, 0x7($8) \r\n"
1994
+ "gsldrc1 $f16, 0x0($8) \r\n"
1995
+ "punpckhbh $f10, $f12, $f16 \r\n"
1996
+ "punpcklbh $f12, $f12, $f16 \r\n"
1997
+ "sdc1 $f6, 0x0+%[ptmp] \r\n"
1998
+ "punpckhhw $f6, $f0, $f4 \r\n"
1999
+ "punpcklhw $f0, $f0, $f4 \r\n"
2000
+ "punpckhhw $f4, $f8, $f12 \r\n"
2001
+ "punpcklhw $f8, $f8, $f12 \r\n"
2002
+ "punpckhhw $f12, $f14, $f2 \r\n"
2003
+ "punpcklhw $f14, $f14, $f2 \r\n"
2004
+ "sdc1 $f4, 0x20+%[ptmp] \r\n"
2005
+ "ldc1 $f4, 0x0+%[ptmp] \r\n"
2006
+ "punpckhhw $f2, $f4, $f10 \r\n"
2007
+ "punpcklhw $f4, $f4, $f10 \r\n"
2008
+ "punpckhwd $f10, $f0, $f8 \r\n"
2009
+ "punpcklwd $f0, $f0, $f8 \r\n"
2010
+ "punpckhwd $f8, $f14, $f4 \r\n"
2011
+ "punpcklwd $f14, $f14, $f4 \r\n"
2012
+ "sdc1 $f0, 0x0+%[ptmp] \r\n"
2013
+ "sdc1 $f10, 0x10+%[ptmp] \r\n"
2014
+ "sdc1 $f14, 0x40+%[ptmp] \r\n"
2015
+ "sdc1 $f8, 0x50+%[ptmp] \r\n"
2016
+ "ldc1 $f16, 0x20+%[ptmp] \r\n"
2017
+ "punpckhwd $f0, $f6, $f16 \r\n"
2018
+ "punpcklwd $f6, $f6, $f16 \r\n"
2019
+ "punpckhwd $f10, $f12, $f2 \r\n"
2020
+ "punpcklwd $f12, $f12, $f2 \r\n"
2021
+ "daddu $8, $13, $13 \r\n"
2022
+ "sdc1 $f6, 0x20+%[ptmp] \r\n"
2023
+ "sdc1 $f0, 0x30+%[ptmp] \r\n"
2024
+ "sdc1 $f12, 0x60+%[ptmp] \r\n"
2025
+ "sdc1 $f10, 0x70+%[ptmp] \r\n"
2026
+ "daddu $10, $10, $8 \r\n"
2027
+ "daddu $9, $9, $8 \r\n"
2028
+ "daddu $8, $10, %[stride] \r\n"
2029
+ "gsldlc1 $f0, 0x7($10) \r\n"
2030
+ "gsldrc1 $f0, 0x0($10) \r\n"
2031
+ "daddu $14, $10, $12 \r\n"
2032
+ "gsldlc1 $f2, 0x7($8) \r\n"
2033
+ "gsldrc1 $f2, 0x0($8) \r\n"
2034
+ "gsldlc1 $f4, 0x7($14) \r\n"
2035
+ "gsldrc1 $f4, 0x0($14) \r\n"
2036
+ "daddu $8, $9, %[stride] \r\n"
2037
+ "gsldlc1 $f6, 0x7($9) \r\n"
2038
+ "gsldrc1 $f6, 0x0($9) \r\n"
2039
+ "daddu $14, $9, $12 \r\n"
2040
+ "gsldlc1 $f8, 0x7($8) \r\n"
2041
+ "gsldrc1 $f8, 0x0($8) \r\n"
2042
+ "daddu $8, $9, $11 \r\n"
2043
+ "gsldlc1 $f10, 0x7($14) \r\n"
2044
+ "gsldrc1 $f10, 0x0($14) \r\n"
2045
+ "gsldlc1 $f12, 0x7($8) \r\n"
2046
+ "gsldrc1 $f12, 0x0($8) \r\n"
2047
+ "daddu $8, $9, $13 \r\n"
2048
+ "punpckhbh $f14, $f0, $f2 \r\n"
2049
+ "punpcklbh $f0, $f0, $f2 \r\n"
2050
+ "punpckhbh $f2, $f4, $f6 \r\n"
2051
+ "punpcklbh $f4, $f4, $f6 \r\n"
2052
+ "punpckhbh $f6, $f8, $f10 \r\n"
2053
+ "punpcklbh $f8, $f8, $f10 \r\n"
2054
+ "gsldlc1 $f16, 0x7($8) \r\n"
2055
+ "gsldrc1 $f16, 0x0($8) \r\n"
2056
+ "punpckhbh $f10, $f12, $f16 \r\n"
2057
+ "punpcklbh $f12, $f12, $f16 \r\n"
2058
+ "sdc1 $f6, 0x8+%[ptmp] \r\n"
2059
+ "punpckhhw $f6, $f0, $f4 \r\n"
2060
+ "punpcklhw $f0, $f0, $f4 \r\n"
2061
+ "punpckhhw $f4, $f8, $f12 \r\n"
2062
+ "punpcklhw $f8, $f8, $f12 \r\n"
2063
+ "punpckhhw $f12, $f14, $f2 \r\n"
2064
+ "punpcklhw $f14, $f14, $f2 \r\n"
2065
+ "sdc1 $f4, 0x28+%[ptmp] \r\n"
2066
+ "ldc1 $f4, 0x8+%[ptmp] \r\n"
2067
+ "punpckhhw $f2, $f4, $f10 \r\n"
2068
+ "punpcklhw $f4, $f4, $f10 \r\n"
2069
+ "punpckhwd $f10, $f0, $f8 \r\n"
2070
+ "punpcklwd $f0, $f0, $f8 \r\n"
2071
+ "punpckhwd $f8, $f14, $f4 \r\n"
2072
+ "punpcklwd $f14, $f14, $f4 \r\n"
2073
+ "sdc1 $f0, 0x8+%[ptmp] \r\n"
2074
+ "sdc1 $f10, 0x18+%[ptmp] \r\n"
2075
+ "sdc1 $f14, 0x48+%[ptmp] \r\n"
2076
+ "sdc1 $f8, 0x58+%[ptmp] \r\n"
2077
+ "ldc1 $f16, 0x28+%[ptmp] \r\n"
2078
+ "punpckhwd $f0, $f6, $f16 \r\n"
2079
+ "punpcklwd $f6, $f6, $f16 \r\n"
2080
+ "punpckhwd $f10, $f12, $f2 \r\n"
2081
+ "punpcklwd $f12, $f12, $f2 \r\n"
2082
+ "sdc1 $f6, 0x28+%[ptmp] \r\n"
2083
+ "sdc1 $f0, 0x38+%[ptmp] \r\n"
2084
+ "sdc1 $f12, 0x68+%[ptmp] \r\n"
2085
+ "sdc1 $f10, 0x78+%[ptmp] \r\n"
2086
+ "sd $10, 0x00+%[pdat] \r\n"
2087
+ "sd $11, 0x08+%[pdat] \r\n"
2088
+ "sd $12, 0x10+%[pdat] \r\n"
2089
+ "sd $13, 0x18+%[pdat] \r\n"
2090
+ ::[pix]"r"(pix),[stride]"r"((uint64_t)stride),[ptmp]"m"(ptmp[0]),
2091
+ [pdat]"m"(pdat[0])
2092
+ : "$8","$9","$10","$11","$12","$13","$14","$f0","$f2","$f4","$f6",
2093
+ "$f8","$f10","$f12","$f14","$f16"
2094
+ );
2095
+
2096
+ ff_deblock_v_luma_intra_8_mmi((uint8_t *) &ptmp[8], 0x10, alpha, beta);
2097
+
2098
+ __asm__ volatile (
2099
+ "ld $10, 0x00+%[pdat] \r\n"
2100
+ "ld $11, 0x08+%[pdat] \r\n"
2101
+ "ld $12, 0x10+%[pdat] \r\n"
2102
+ "ld $13, 0x18+%[pdat] \r\n"
2103
+ "daddu $9, $10, $11 \r\n"
2104
+ "ldc1 $f0, 0x8+%[ptmp] \r\n"
2105
+ "ldc1 $f2, 0x18+%[ptmp] \r\n"
2106
+ "ldc1 $f4, 0x28+%[ptmp] \r\n"
2107
+ "ldc1 $f6, 0x38+%[ptmp] \r\n"
2108
+ "ldc1 $f8, 0x48+%[ptmp] \r\n"
2109
+ "ldc1 $f10, 0x58+%[ptmp] \r\n"
2110
+ "ldc1 $f12, 0x68+%[ptmp] \r\n"
2111
+ "punpckhbh $f14, $f0, $f2 \r\n"
2112
+ "punpcklbh $f0, $f0, $f2 \r\n"
2113
+ "punpckhbh $f2, $f4, $f6 \r\n"
2114
+ "punpcklbh $f4, $f4, $f6 \r\n"
2115
+ "punpckhbh $f6, $f8, $f10 \r\n"
2116
+ "punpcklbh $f8, $f8, $f10 \r\n"
2117
+ "ldc1 $f16, 0x78+%[ptmp] \r\n"
2118
+ "punpckhbh $f10, $f12, $f16 \r\n"
2119
+ "punpcklbh $f12, $f12, $f16 \r\n"
2120
+ "gssdlc1 $f6, 0x7($10) \r\n"
2121
+ "gssdrc1 $f6, 0x0($10) \r\n"
2122
+ "daddu $8, $10, $12 \r\n"
2123
+ "punpckhhw $f6, $f0, $f4 \r\n"
2124
+ "punpcklhw $f0, $f0, $f4 \r\n"
2125
+ "punpckhhw $f4, $f8, $f12 \r\n"
2126
+ "punpcklhw $f8, $f8, $f12 \r\n"
2127
+ "punpckhhw $f12, $f14, $f2 \r\n"
2128
+ "punpcklhw $f14, $f14, $f2 \r\n"
2129
+ "gssdlc1 $f4, 0x7($8) \r\n"
2130
+ "gssdrc1 $f4, 0x0($8) \r\n"
2131
+ "gsldlc1 $f4, 0x7($10) \r\n"
2132
+ "gsldrc1 $f4, 0x0($10) \r\n"
2133
+ "punpckhhw $f2, $f4, $f10 \r\n"
2134
+ "punpcklhw $f4, $f4, $f10 \r\n"
2135
+ "punpckhwd $f10, $f0, $f8 \r\n"
2136
+ "punpcklwd $f0, $f0, $f8 \r\n"
2137
+ "punpckhwd $f8, $f14, $f4 \r\n"
2138
+ "punpcklwd $f14, $f14, $f4 \r\n"
2139
+ "daddu $8, $10, %[stride] \r\n"
2140
+ "gssdlc1 $f0, 0x7($10) \r\n"
2141
+ "gssdrc1 $f0, 0x0($10) \r\n"
2142
+ "daddu $14, $9, %[stride] \r\n"
2143
+ "gssdlc1 $f10, 0x7($8) \r\n"
2144
+ "gssdrc1 $f10, 0x0($8) \r\n"
2145
+ "daddu $8, $9, $12 \r\n"
2146
+ "gssdlc1 $f14, 0x7($14) \r\n"
2147
+ "gssdrc1 $f14, 0x0($14) \r\n"
2148
+ "daddu $14, $10, $12 \r\n"
2149
+ "gssdlc1 $f8, 0x7($8) \r\n"
2150
+ "gssdrc1 $f8, 0x0($8) \r\n"
2151
+ "gsldlc1 $f16, 0x7($14) \r\n"
2152
+ "gsldrc1 $f16, 0x0($14) \r\n"
2153
+ "daddu $8, $10, $12 \r\n"
2154
+ "punpckhwd $f0, $f6, $f16 \r\n"
2155
+ "punpcklwd $f6, $f6, $f16 \r\n"
2156
+ "punpckhwd $f10, $f12, $f2 \r\n"
2157
+ "punpcklwd $f12, $f12, $f2 \r\n"
2158
+ "gssdlc1 $f6, 0x7($8) \r\n"
2159
+ "gssdrc1 $f6, 0x0($8) \r\n"
2160
+ "daddu $8, $9, $11 \r\n"
2161
+ "gssdlc1 $f0, 0x7($9) \r\n"
2162
+ "gssdrc1 $f0, 0x0($9) \r\n"
2163
+ "daddu $14, $9, $13 \r\n"
2164
+ "gssdlc1 $f12, 0x7($8) \r\n"
2165
+ "gssdrc1 $f12, 0x0($8) \r\n"
2166
+ "daddu $8, $13, $13 \r\n"
2167
+ "gssdlc1 $f10, 0x7($14) \r\n"
2168
+ "gssdrc1 $f10, 0x0($14) \r\n"
2169
+ "dsubu $10, $10, $8 \r\n"
2170
+ "dsubu $9, $9, $8 \r\n"
2171
+ "ldc1 $f0, 0x0+%[ptmp] \r\n"
2172
+ "ldc1 $f2, 0x10+%[ptmp] \r\n"
2173
+ "ldc1 $f4, 0x20+%[ptmp] \r\n"
2174
+ "ldc1 $f6, 0x30+%[ptmp] \r\n"
2175
+ "ldc1 $f8, 0x40+%[ptmp] \r\n"
2176
+ "ldc1 $f10, 0x50+%[ptmp] \r\n"
2177
+ "ldc1 $f12, 0x60+%[ptmp] \r\n"
2178
+ "punpckhbh $f14, $f0, $f2 \r\n"
2179
+ "punpcklbh $f0, $f0, $f2 \r\n"
2180
+ "punpckhbh $f2, $f4, $f6 \r\n"
2181
+ "punpcklbh $f4, $f4, $f6 \r\n"
2182
+ "punpckhbh $f6, $f8, $f10 \r\n"
2183
+ "punpcklbh $f8, $f8, $f10 \r\n"
2184
+ "ldc1 $f16, 0x70+%[ptmp] \r\n"
2185
+ "punpckhbh $f10, $f12, $f16 \r\n"
2186
+ "punpcklbh $f12, $f12, $f16 \r\n"
2187
+ "gssdlc1 $f6, 0x7($10) \r\n"
2188
+ "gssdrc1 $f6, 0x0($10) \r\n"
2189
+ "daddu $8, $10, $12 \r\n"
2190
+ "punpckhhw $f6, $f0, $f4 \r\n"
2191
+ "punpcklhw $f0, $f0, $f4 \r\n"
2192
+ "punpckhhw $f4, $f8, $f12 \r\n"
2193
+ "punpcklhw $f8, $f8, $f12 \r\n"
2194
+ "punpckhhw $f12, $f14, $f2 \r\n"
2195
+ "punpcklhw $f14, $f14, $f2 \r\n"
2196
+ "gssdlc1 $f4, 0x7($8) \r\n"
2197
+ "gssdrc1 $f4, 0x0($8) \r\n"
2198
+ "gsldlc1 $f4, 0x7($10) \r\n"
2199
+ "gsldrc1 $f4, 0x0($10) \r\n"
2200
+ "punpckhhw $f2, $f4, $f10 \r\n"
2201
+ "punpcklhw $f4, $f4, $f10 \r\n"
2202
+ "punpckhwd $f10, $f0, $f8 \r\n"
2203
+ "punpcklwd $f0, $f0, $f8 \r\n"
2204
+ "punpckhwd $f8, $f14, $f4 \r\n"
2205
+ "punpcklwd $f14, $f14, $f4 \r\n"
2206
+ "daddu $8, $10, %[stride] \r\n"
2207
+ "gssdlc1 $f0, 0x7($10) \r\n"
2208
+ "gssdrc1 $f0, 0x0($10) \r\n"
2209
+ "daddu $14, $9, %[stride] \r\n"
2210
+ "gssdlc1 $f10, 0x7($8) \r\n"
2211
+ "gssdrc1 $f10, 0x0($8) \r\n"
2212
+ "daddu $8, $9, $12 \r\n"
2213
+ "gssdlc1 $f14, 0x7($14) \r\n"
2214
+ "gssdrc1 $f14, 0x0($14) \r\n"
2215
+ "daddu $14, $10, $12 \r\n"
2216
+ "gssdlc1 $f8, 0x7($8) \r\n"
2217
+ "gssdrc1 $f8, 0x0($8) \r\n"
2218
+ "gsldlc1 $f16, 0x7($14) \r\n"
2219
+ "gsldrc1 $f16, 0x0($14) \r\n"
2220
+ "daddu $8, $10, $12 \r\n"
2221
+ "punpckhwd $f0, $f6, $f16 \r\n"
2222
+ "punpcklwd $f6, $f6, $f16 \r\n"
2223
+ "punpckhwd $f10, $f12, $f2 \r\n"
2224
+ "punpcklwd $f12, $f12, $f2 \r\n"
2225
+ "gssdlc1 $f6, 0x7($8) \r\n"
2226
+ "gssdrc1 $f6, 0x0($8) \r\n"
2227
+ "daddu $8, $9, $11 \r\n"
2228
+ "gssdlc1 $f0, 0x7($9) \r\n"
2229
+ "gssdrc1 $f0, 0x0($9) \r\n"
2230
+ "daddu $14, $9, $13 \r\n"
2231
+ "gssdlc1 $f12, 0x7($8) \r\n"
2232
+ "gssdrc1 $f12, 0x0($8) \r\n"
2233
+ "gssdlc1 $f10, 0x7($14) \r\n"
2234
+ "gssdrc1 $f10, 0x0($14) \r\n"
2235
+ ::[pix]"r"(pix),[stride]"r"((uint64_t)stride),[ptmp]"m"(ptmp[0]),
2236
+ [pdat]"m"(pdat[0])
2237
+ : "$8","$9","$10","$11","$12","$13","$14","$f0","$f2","$f4","$f6",
2238
+ "$f8","$f10","$f12","$f14","$f16"
2239
+ );
2240
+}
2241
ffmpeg-2.8.1.tar.bz2/libavcodec/mjpegdec.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/mjpegdec.c
Changed
72
1
2
av_log(s->avctx, AV_LOG_INFO, "AVID: len:%d %d\n", len, len > 14 ? buf[12] : -1);
3
}
4
5
+static void init_idct(AVCodecContext *avctx)
6
+{
7
+ MJpegDecodeContext *s = avctx->priv_data;
8
+
9
+ ff_idctdsp_init(&s->idsp, avctx);
10
+ ff_init_scantable(s->idsp.idct_permutation, &s->scantable,
11
+ ff_zigzag_direct);
12
+}
13
+
14
av_cold int ff_mjpeg_decode_init(AVCodecContext *avctx)
15
{
16
MJpegDecodeContext *s = avctx->priv_data;
17
18
s->avctx = avctx;
19
ff_blockdsp_init(&s->bdsp, avctx);
20
ff_hpeldsp_init(&s->hdsp, avctx->flags);
21
- ff_idctdsp_init(&s->idsp, avctx);
22
- ff_init_scantable(s->idsp.idct_permutation, &s->scantable,
23
- ff_zigzag_direct);
24
+ init_idct(avctx);
25
s->buffer_size = 0;
26
s->buffer = NULL;
27
s->start_code = -1;
28
29
30
/* XXX: verify len field validity */
31
len = get_bits(&s->gb, 16);
32
- s->avctx->bits_per_raw_sample =
33
bits = get_bits(&s->gb, 8);
34
35
if (bits > 16 || bits < 1) {
36
37
return AVERROR_INVALIDDATA;
38
}
39
40
+ if (s->avctx->bits_per_raw_sample != bits) {
41
+ av_log(s->avctx, AV_LOG_INFO, "Changeing bps to %d\n", bits);
42
+ s->avctx->bits_per_raw_sample = bits;
43
+ init_idct(s->avctx);
44
+ }
45
if (s->pegasus_rct)
46
bits = 9;
47
if (bits == 9 && !s->pegasus_rct)
48
49
dc = mjpeg_decode_dc(s, s->dc_index[i]);
50
if(dc == 0xFFFFF)
51
return -1;
52
- if(bits<=8){
53
+ if ( h * mb_x + x >= s->width
54
+ || v * mb_y + y >= s->height) {
55
+ // Nothing to do
56
+ } else if (bits<=8) {
57
ptr = s->picture_ptr->data[c] + (linesize * (v * mb_y + y)) + (h * mb_x + x); //FIXME optimize this crap
58
if(y==0 && toprow){
59
if(x==0 && leftcol){
60
61
dc = mjpeg_decode_dc(s, s->dc_index[i]);
62
if(dc == 0xFFFFF)
63
return -1;
64
- if(bits<=8){
65
+ if ( h * mb_x + x >= s->width
66
+ || v * mb_y + y >= s->height) {
67
+ // Nothing to do
68
+ } else if (bits<=8) {
69
ptr = s->picture_ptr->data[c] +
70
(linesize * (v * mb_y + y)) +
71
(h * mb_x + x); //FIXME optimize this crap
72
ffmpeg-2.8.1.tar.bz2/libavcodec/mpeg12dec.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/mpeg12dec.c
Changed
10
1
2
(left && show_bits(&s->gb, FFMIN(left, 23)) && !is_d10) ||
3
((avctx->err_recognition & (AV_EF_BITSTREAM | AV_EF_AGGRESSIVE)) && left > 8)) {
4
av_log(avctx, AV_LOG_ERROR, "end mismatch left=%d %0X\n",
5
- left, show_bits(&s->gb, FFMIN(left, 23)));
6
+ left, left>0 ? show_bits(&s->gb, FFMIN(left, 23)) : 0);
7
return AVERROR_INVALIDDATA;
8
} else
9
goto eos;
10
ffmpeg-2.8.1.tar.bz2/libavcodec/mpegvideo.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/mpegvideo.c
Changed
9
1
2
3
s->parse_context.buffer = NULL;
4
s->parse_context.buffer_size = 0;
5
+ s->parse_context.overread = 0;
6
s->bitstream_buffer = NULL;
7
s->allocated_bitstream_buffer_size = 0;
8
s->picture = NULL;
9
ffmpeg-2.8.1.tar.bz2/libavcodec/opusdec.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/opusdec.c
Changed
21
1
2
if (buffer_samples) {
3
float *buf[2] = { c->out[2 * i + 0] ? c->out[2 * i + 0] : (float*)frame->extended_data[0],
4
c->out[2 * i + 1] ? c->out[2 * i + 1] : (float*)frame->extended_data[0] };
5
- buf[0] += buffer_samples;
6
- buf[1] += buffer_samples;
7
+ buf[0] += decoded_samples;
8
+ buf[1] += decoded_samples;
9
ret = av_audio_fifo_write(c->sync_buffers[i], (void**)buf, buffer_samples);
10
if (ret < 0)
11
return ret;
12
13
memset(frame->extended_data[i], 0, frame->linesize[0]);
14
}
15
16
- if (c->gain_i) {
17
+ if (c->gain_i && decoded_samples > 0) {
18
c->fdsp->vector_fmul_scalar((float*)frame->extended_data[i],
19
(float*)frame->extended_data[i],
20
c->gain, FFALIGN(decoded_samples, 8));
21
ffmpeg-2.8.1.tar.bz2/libavcodec/pngdec.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/pngdec.c
Changed
31
1
2
break;
3
4
default:
5
- av_assert0(0);
6
+ avpriv_request_sample(avctx, "bit depth %d "
7
+ "and color type %d with TRNS",
8
+ s->bit_depth, s->color_type);
9
+ return AVERROR_INVALIDDATA;
10
}
11
12
s->bpp += byte_depth;
13
14
for (x = s->x_offset; x < s->x_offset + s->cur_w; ++x, foreground += s->bpp, background += s->bpp) {
15
size_t b;
16
uint8_t foreground_alpha, background_alpha, output_alpha;
17
- uint8_t output[4];
18
+ uint8_t output[10];
19
20
// Since we might be blending alpha onto alpha, we use the following equations:
21
// output_alpha = foreground_alpha + (1 - foreground_alpha) * background_alpha
22
23
24
output_alpha = foreground_alpha + FAST_DIV255((255 - foreground_alpha) * background_alpha);
25
26
+ av_assert0(s->bpp <= 10);
27
+
28
for (b = 0; b < s->bpp - 1; ++b) {
29
if (output_alpha == 0) {
30
output[b] = 0;
31
ffmpeg-2.8.1.tar.bz2/libavcodec/sbr.h -> ffmpeg-2.8.3.tar.bz2/libavcodec/sbr.h
Changed
9
1
2
struct SpectralBandReplication {
3
int sample_rate;
4
int start;
5
+ int ready_for_dequant;
6
int id_aac;
7
int reset;
8
SpectrumParameters spectrum_params;
9
ffmpeg-2.8.1.tar.bz2/libavcodec/smacker.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/smacker.c
Changed
12
1
2
3
/* get output buffer */
4
frame->nb_samples = unp_size / (avctx->channels * (bits + 1));
5
+ if (unp_size % (avctx->channels * (bits + 1))) {
6
+ av_log(avctx, AV_LOG_ERROR, "unp_size %d is odd\n", unp_size);
7
+ return AVERROR(EINVAL);
8
+ }
9
if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
10
return ret;
11
samples = (int16_t *)frame->data[0];
12
ffmpeg-2.8.1.tar.bz2/libavcodec/takdec.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/takdec.c
Changed
19
1
2
for (; length2 > 0; length2 -= tmp) {
3
tmp = FFMIN(length2, x);
4
5
- for (i = 0; i < tmp; i++)
6
+ for (i = 0; i < tmp - (tmp == length2); i++)
7
s->residues[filter_order + i] = *p2++ >> dshift;
8
9
for (i = 0; i < tmp; i++) {
10
11
*p1++ = v;
12
}
13
14
- memcpy(s->residues, &s->residues[tmp], 2 * filter_order);
15
+ memmove(s->residues, &s->residues[tmp], 2 * filter_order);
16
}
17
18
emms_c();
19
ffmpeg-2.8.1.tar.bz2/libavcodec/utils.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/utils.c
Changed
10
1
2
return frame_bytes * 8 / bps;
3
}
4
5
- if (ch > 0) {
6
+ if (ch > 0 && ch < INT_MAX/16) {
7
/* calc from frame_bytes and channels */
8
switch (id) {
9
case AV_CODEC_ID_ADPCM_AFC:
10
ffmpeg-2.8.1.tar.bz2/libavcodec/vp8.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/vp8.c
Changed
10
1
2
s->mb_height = (s->avctx->coded_height + 15) / 16;
3
4
s->mb_layout = is_vp7 || avctx->active_thread_type == FF_THREAD_SLICE &&
5
- FFMIN(s->num_coeff_partitions, avctx->thread_count) > 1;
6
+ avctx->thread_count > 1;
7
if (!s->mb_layout) { // Frame threading and one thread
8
s->macroblocks_base = av_mallocz((s->mb_width + s->mb_height * 2 + 1) *
9
sizeof(*s->macroblocks));
10
ffmpeg-2.8.1.tar.bz2/libavcodec/wmaprodec.c -> ffmpeg-2.8.3.tar.bz2/libavcodec/wmaprodec.c
Changed
13
1
2
s->packet_done = 1;
3
}
4
5
+ if (remaining_bits(s, gb) < 0) {
6
+ av_log(avctx, AV_LOG_ERROR, "Overread %d\n", -remaining_bits(s, gb));
7
+ s->packet_loss = 1;
8
+ }
9
+
10
if (s->packet_done && !s->packet_loss &&
11
remaining_bits(s, gb) > 0) {
12
/** save the rest of the data so that it can be decoded
13
ffmpeg-2.8.1.tar.bz2/libavcodec/x86/videodsp.asm -> ffmpeg-2.8.3.tar.bz2/libavcodec/x86/videodsp.asm
Changed
34
1
2
%elif (%2-%%off) == 2
3
mov valw, [srcq+%2-2]
4
%elifidn %1, body
5
- mov vald, [srcq+%2-3]
6
-%else
7
+ mov valb, [srcq+%2-1]
8
+ sal vald, 16
9
+ mov valw, [srcq+%2-3]
10
+%elifidn %1, bottom
11
+ movd mm %+ %%mmx_idx, [srcq+%2-4]
12
+%else ; top
13
movd mm %+ %%mmx_idx, [srcq+%2-3]
14
%endif
15
%endif ; (%2-%%off) >= 1
16
17
mov [dstq+%2-2], valw
18
%elifidn %1, body
19
mov [dstq+%2-3], valw
20
- shr vald, 16
21
+ sar vald, 16
22
mov [dstq+%2-1], valb
23
%else
24
movd vald, mm %+ %%mmx_idx
25
+%ifidn %1, bottom
26
+ sar vald, 8
27
+%endif
28
mov [dstq+%2-3], valw
29
- shr vald, 16
30
+ sar vald, 16
31
mov [dstq+%2-1], valb
32
%endif
33
%endif ; (%2-%%off) >= 1
34
ffmpeg-2.8.1.tar.bz2/libavformat/brstm.c -> ffmpeg-2.8.3.tar.bz2/libavformat/brstm.c
Changed
10
1
2
avio_skip(s->pb, 1); // padding
3
4
st->codec->sample_rate = bfstm ? read32(s) : read16(s);
5
- if (!st->codec->sample_rate)
6
+ if (st->codec->sample_rate <= 0)
7
return AVERROR_INVALIDDATA;
8
9
if (!bfstm)
10
ffmpeg-2.8.1.tar.bz2/libavformat/concatdec.c -> ffmpeg-2.8.3.tar.bz2/libavformat/concatdec.c
Changed
10
1
2
file->start_time = !fileno ? 0 :
3
cat->files[fileno - 1].start_time +
4
cat->files[fileno - 1].duration;
5
- file->file_start_time = (avf->start_time == AV_NOPTS_VALUE) ? 0 : avf->start_time;
6
+ file->file_start_time = (cat->avf->start_time == AV_NOPTS_VALUE) ? 0 : cat->avf->start_time;
7
file->file_inpoint = (file->inpoint == AV_NOPTS_VALUE) ? file->file_start_time : file->inpoint;
8
if ((ret = match_streams(avf)) < 0)
9
return ret;
10
ffmpeg-2.8.1.tar.bz2/libavformat/hls.c -> ffmpeg-2.8.3.tar.bz2/libavformat/hls.c
Changed
422
1
2
char *key;
3
enum KeyType key_type;
4
uint8_t iv[16];
5
+ /* associated Media Initialization Section, treated as a segment */
6
+ struct segment *init_section;
7
};
8
9
struct rendition;
10
11
int64_t cur_seg_offset;
12
int64_t last_load_time;
13
14
+ /* Currently active Media Initialization Section */
15
+ struct segment *cur_init_section;
16
+ uint8_t *init_sec_buf;
17
+ unsigned int init_sec_buf_size;
18
+ unsigned int init_sec_data_len;
19
+ unsigned int init_sec_buf_read_offset;
20
+
21
char key_url[MAX_URL_SIZE];
22
uint8_t key[16];
23
24
25
* multiple (playlist-less) renditions associated with them. */
26
int n_renditions;
27
struct rendition **renditions;
28
+
29
+ /* Media Initialization Sections (EXT-X-MAP) associated with this
30
+ * playlist, if any. */
31
+ int n_init_sections;
32
+ struct segment **init_sections;
33
};
34
35
/*
36
37
pls->n_segments = 0;
38
}
39
40
+static void free_init_section_list(struct playlist *pls)
41
+{
42
+ int i;
43
+ for (i = 0; i < pls->n_init_sections; i++) {
44
+ av_freep(&pls->init_sections[i]->url);
45
+ av_freep(&pls->init_sections[i]);
46
+ }
47
+ av_freep(&pls->init_sections);
48
+ pls->n_init_sections = 0;
49
+}
50
+
51
static void free_playlist_list(HLSContext *c)
52
{
53
int i;
54
for (i = 0; i < c->n_playlists; i++) {
55
struct playlist *pls = c->playlists[i];
56
free_segment_list(pls);
57
+ free_init_section_list(pls);
58
av_freep(&pls->renditions);
59
av_freep(&pls->id3_buf);
60
av_dict_free(&pls->id3_initial);
61
ff_id3v2_free_extra_meta(&pls->id3_deferred_extra);
62
+ av_freep(&pls->init_sec_buf);
63
av_free_packet(&pls->pkt);
64
av_freep(&pls->pb.buffer);
65
if (pls->input)
66
67
}
68
}
69
70
+struct init_section_info {
71
+ char uri[MAX_URL_SIZE];
72
+ char byterange[32];
73
+};
74
+
75
+static struct segment *new_init_section(struct playlist *pls,
76
+ struct init_section_info *info,
77
+ const char *url_base)
78
+{
79
+ struct segment *sec;
80
+ char *ptr;
81
+ char tmp_str[MAX_URL_SIZE];
82
+
83
+ if (!info->uri[0])
84
+ return NULL;
85
+
86
+ sec = av_mallocz(sizeof(*sec));
87
+ if (!sec)
88
+ return NULL;
89
+
90
+ ff_make_absolute_url(tmp_str, sizeof(tmp_str), url_base, info->uri);
91
+ sec->url = av_strdup(tmp_str);
92
+ if (!sec->url) {
93
+ av_free(sec);
94
+ return NULL;
95
+ }
96
+
97
+ if (info->byterange[0]) {
98
+ sec->size = atoi(info->byterange);
99
+ ptr = strchr(info->byterange, '@');
100
+ if (ptr)
101
+ sec->url_offset = atoi(ptr+1);
102
+ } else {
103
+ /* the entire file is the init section */
104
+ sec->size = -1;
105
+ }
106
+
107
+ dynarray_add(&pls->init_sections, &pls->n_init_sections, sec);
108
+
109
+ return sec;
110
+}
111
+
112
+static void handle_init_section_args(struct init_section_info *info, const char *key,
113
+ int key_len, char **dest, int *dest_len)
114
+{
115
+ if (!strncmp(key, "URI=", key_len)) {
116
+ *dest = info->uri;
117
+ *dest_len = sizeof(info->uri);
118
+ } else if (!strncmp(key, "BYTERANGE=", key_len)) {
119
+ *dest = info->byterange;
120
+ *dest_len = sizeof(info->byterange);
121
+ }
122
+}
123
+
124
struct rendition_info {
125
char type[16];
126
char uri[MAX_URL_SIZE];
127
128
return ret;
129
}
130
131
+static void update_options(char **dest, const char *name, void *src)
132
+{
133
+ av_freep(dest);
134
+ av_opt_get(src, name, 0, (uint8_t**)dest);
135
+ if (*dest && !strlen(*dest))
136
+ av_freep(dest);
137
+}
138
+
139
static int open_url(HLSContext *c, URLContext **uc, const char *url, AVDictionary *opts)
140
{
141
AVDictionary *tmp = NULL;
142
143
av_dict_copy(&tmp, opts, 0);
144
145
ret = ffurl_open(uc, url, AVIO_FLAG_READ, c->interrupt_callback, &tmp);
146
+ if( ret >= 0) {
147
+ // update cookies on http response with setcookies.
148
+ URLContext *u = *uc;
149
+ update_options(&c->cookies, "cookies", u->priv_data);
150
+ av_dict_set(&opts, "cookies", c->cookies, 0);
151
+ }
152
153
av_dict_free(&tmp);
154
155
156
uint8_t *new_url = NULL;
157
struct variant_info variant_info;
158
char tmp_str[MAX_URL_SIZE];
159
+ struct segment *cur_init_section = NULL;
160
161
if (!in) {
162
#if 1
163
164
pls->type = PLS_TYPE_EVENT;
165
else if (!strcmp(ptr, "VOD"))
166
pls->type = PLS_TYPE_VOD;
167
+ } else if (av_strstart(line, "#EXT-X-MAP:", &ptr)) {
168
+ struct init_section_info info = {{0}};
169
+ ret = ensure_playlist(c, &pls, url);
170
+ if (ret < 0)
171
+ goto fail;
172
+ ff_parse_key_value(ptr, (ff_parse_key_val_cb) handle_init_section_args,
173
+ &info);
174
+ cur_init_section = new_init_section(pls, &info, url);
175
} else if (av_strstart(line, "#EXT-X-ENDLIST", &ptr)) {
176
if (pls)
177
pls->finished = 1;
178
179
seg->url_offset = 0;
180
seg_offset = 0;
181
}
182
+
183
+ seg->init_section = cur_init_section;
184
}
185
}
186
}
187
188
return ret;
189
}
190
191
+static struct segment *current_segment(struct playlist *pls)
192
+{
193
+ return pls->segments[pls->cur_seq_no - pls->start_seq_no];
194
+}
195
+
196
enum ReadFromURLMode {
197
READ_NORMAL,
198
READ_COMPLETE,
199
};
200
201
/* read from URLContext, limiting read to current segment */
202
-static int read_from_url(struct playlist *pls, uint8_t *buf, int buf_size,
203
+static int read_from_url(struct playlist *pls, struct segment *seg,
204
+ uint8_t *buf, int buf_size,
205
enum ReadFromURLMode mode)
206
{
207
int ret;
208
- struct segment *seg = pls->segments[pls->cur_seq_no - pls->start_seq_no];
209
210
/* limit read if the segment was only a part of a file */
211
if (seg->size >= 0)
212
213
int bytes;
214
int id3_buf_pos = 0;
215
int fill_buf = 0;
216
+ struct segment *seg = current_segment(pls);
217
218
/* gather all the id3 tags */
219
while (1) {
220
/* see if we can retrieve enough data for ID3 header */
221
if (*len < ID3v2_HEADER_SIZE && buf_size >= ID3v2_HEADER_SIZE) {
222
- bytes = read_from_url(pls, buf + *len, ID3v2_HEADER_SIZE - *len, READ_COMPLETE);
223
+ bytes = read_from_url(pls, seg, buf + *len, ID3v2_HEADER_SIZE - *len, READ_COMPLETE);
224
if (bytes > 0) {
225
226
if (bytes == ID3v2_HEADER_SIZE - *len)
227
228
break;
229
230
if (ff_id3v2_match(buf, ID3v2_DEFAULT_MAGIC)) {
231
- struct segment *seg = pls->segments[pls->cur_seq_no - pls->start_seq_no];
232
int64_t maxsize = seg->size >= 0 ? seg->size : 1024*1024;
233
int taglen = ff_id3v2_tag_len(buf);
234
int tag_got_bytes = FFMIN(taglen, *len);
235
236
237
if (remaining > 0) {
238
/* read the rest of the tag in */
239
- if (read_from_url(pls, pls->id3_buf + id3_buf_pos, remaining, READ_COMPLETE) != remaining)
240
+ if (read_from_url(pls, seg, pls->id3_buf + id3_buf_pos, remaining, READ_COMPLETE) != remaining)
241
break;
242
id3_buf_pos += remaining;
243
av_log(pls->ctx, AV_LOG_DEBUG, "Stripped additional %d HLS ID3 bytes\n", remaining);
244
245
246
/* re-fill buffer for the caller unless EOF */
247
if (*len >= 0 && (fill_buf || *len == 0)) {
248
- bytes = read_from_url(pls, buf + *len, buf_size - *len, READ_NORMAL);
249
+ bytes = read_from_url(pls, seg, buf + *len, buf_size - *len, READ_NORMAL);
250
251
/* ignore error if we already had some data */
252
if (bytes >= 0)
253
254
pls->is_id3_timestamped = (pls->id3_mpegts_timestamp != AV_NOPTS_VALUE);
255
}
256
257
-static void update_options(char **dest, const char *name, void *src)
258
-{
259
- av_freep(dest);
260
- av_opt_get(src, name, 0, (uint8_t**)dest);
261
- if (*dest && !strlen(*dest))
262
- av_freep(dest);
263
-}
264
-
265
-static int open_input(HLSContext *c, struct playlist *pls)
266
+static int open_input(HLSContext *c, struct playlist *pls, struct segment *seg)
267
{
268
AVDictionary *opts = NULL;
269
- AVDictionary *opts2 = NULL;
270
int ret;
271
- struct segment *seg = pls->segments[pls->cur_seq_no - pls->start_seq_no];
272
273
// broker prior HTTP options that should be consistent across requests
274
av_dict_set(&opts, "user-agent", c->user_agent, 0);
275
276
av_dict_set(&opts, "headers", c->headers, 0);
277
av_dict_set(&opts, "seekable", "0", 0);
278
279
- // Same opts for key request (ffurl_open mutilates the opts so it cannot be used twice)
280
- av_dict_copy(&opts2, opts, 0);
281
-
282
if (seg->size >= 0) {
283
/* try to restrict the HTTP request to the part we want
284
* (if this is in fact a HTTP request) */
285
286
char iv[33], key[33], url[MAX_URL_SIZE];
287
if (strcmp(seg->key, pls->key_url)) {
288
URLContext *uc;
289
- if (open_url(pls->parent->priv_data, &uc, seg->key, opts2) == 0) {
290
+ if (open_url(pls->parent->priv_data, &uc, seg->key, opts) == 0) {
291
if (ffurl_read_complete(uc, pls->key, sizeof(pls->key))
292
!= sizeof(pls->key)) {
293
av_log(NULL, AV_LOG_ERROR, "Unable to read key file %s\n",
294
seg->key);
295
}
296
- update_options(&c->cookies, "cookies", uc->priv_data);
297
- av_dict_set(&opts, "cookies", c->cookies, 0);
298
ffurl_close(uc);
299
} else {
300
av_log(NULL, AV_LOG_ERROR, "Unable to open key file %s\n",
301
302
303
cleanup:
304
av_dict_free(&opts);
305
- av_dict_free(&opts2);
306
pls->cur_seg_offset = 0;
307
return ret;
308
}
309
310
+static int update_init_section(struct playlist *pls, struct segment *seg)
311
+{
312
+ static const int max_init_section_size = 1024*1024;
313
+ HLSContext *c = pls->parent->priv_data;
314
+ int64_t sec_size;
315
+ int64_t urlsize;
316
+ int ret;
317
+
318
+ if (seg->init_section == pls->cur_init_section)
319
+ return 0;
320
+
321
+ pls->cur_init_section = NULL;
322
+
323
+ if (!seg->init_section)
324
+ return 0;
325
+
326
+ /* this will clobber playlist URLContext stuff, so this should be
327
+ * called between segments only */
328
+ ret = open_input(c, pls, seg->init_section);
329
+ if (ret < 0) {
330
+ av_log(pls->parent, AV_LOG_WARNING,
331
+ "Failed to open an initialization section in playlist %d\n",
332
+ pls->index);
333
+ return ret;
334
+ }
335
+
336
+ if (seg->init_section->size >= 0)
337
+ sec_size = seg->init_section->size;
338
+ else if ((urlsize = ffurl_size(pls->input)) >= 0)
339
+ sec_size = urlsize;
340
+ else
341
+ sec_size = max_init_section_size;
342
+
343
+ av_log(pls->parent, AV_LOG_DEBUG,
344
+ "Downloading an initialization section of size %"PRId64"\n",
345
+ sec_size);
346
+
347
+ sec_size = FFMIN(sec_size, max_init_section_size);
348
+
349
+ av_fast_malloc(&pls->init_sec_buf, &pls->init_sec_buf_size, sec_size);
350
+
351
+ ret = read_from_url(pls, seg->init_section, pls->init_sec_buf,
352
+ pls->init_sec_buf_size, READ_COMPLETE);
353
+ ffurl_close(pls->input);
354
+ pls->input = NULL;
355
+
356
+ if (ret < 0)
357
+ return ret;
358
+
359
+ pls->cur_init_section = seg->init_section;
360
+ pls->init_sec_data_len = ret;
361
+ pls->init_sec_buf_read_offset = 0;
362
+
363
+ /* spec says audio elementary streams do not have media initialization
364
+ * sections, so there should be no ID3 timestamps */
365
+ pls->is_id3_timestamped = 0;
366
+
367
+ return 0;
368
+}
369
+
370
static int64_t default_reload_interval(struct playlist *pls)
371
{
372
return pls->n_segments > 0 ?
373
374
375
if (!v->input) {
376
int64_t reload_interval;
377
+ struct segment *seg;
378
379
/* Check that the playlist is still needed before opening a new
380
* segment. */
381
382
goto reload;
383
}
384
385
- ret = open_input(c, v);
386
+ seg = current_segment(v);
387
+
388
+ /* load/update Media Initialization Section, if any */
389
+ ret = update_init_section(v, seg);
390
+ if (ret)
391
+ return ret;
392
+
393
+ ret = open_input(c, v, seg);
394
if (ret < 0) {
395
if (ff_check_interrupt(c->interrupt_callback))
396
return AVERROR_EXIT;
397
398
just_opened = 1;
399
}
400
401
- ret = read_from_url(v, buf, buf_size, READ_NORMAL);
402
+ if (v->init_sec_buf_read_offset < v->init_sec_data_len) {
403
+ /* Push init section out first before first actual segment */
404
+ int copy_size = FFMIN(v->init_sec_data_len - v->init_sec_buf_read_offset, buf_size);
405
+ memcpy(buf, v->init_sec_buf, copy_size);
406
+ v->init_sec_buf_read_offset += copy_size;
407
+ return copy_size;
408
+ }
409
+
410
+ ret = read_from_url(v, current_segment(v), buf, buf_size, READ_NORMAL);
411
if (ret > 0) {
412
if (just_opened && v->is_id3_timestamped != 0) {
413
/* Intercept ID3 tags here, elementary audio streams are required
414
415
int ret, i, minplaylist = -1;
416
417
recheck_discard_flags(s, c->first_packet);
418
+ c->first_packet = 0;
419
420
for (i = 0; i < c->n_playlists; i++) {
421
struct playlist *pls = c->playlists[i];
422
ffmpeg-2.8.1.tar.bz2/libavformat/isom.h -> ffmpeg-2.8.3.tar.bz2/libavformat/isom.h
Changed
17
1
2
typedef struct MOVFragmentIndexItem {
3
int64_t moof_offset;
4
int64_t time;
5
+ int headers_read;
6
} MOVFragmentIndexItem;
7
8
typedef struct MOVFragmentIndex {
9
10
int has_looked_for_mfra;
11
MOVFragmentIndex** fragment_index_data;
12
unsigned fragment_index_count;
13
+ int fragment_index_complete;
14
int atom_depth;
15
unsigned int aax_mode; ///< 'aax' file has been detected
16
uint8_t file_key[20];
17
ffmpeg-2.8.1.tar.bz2/libavformat/jvdec.c -> ffmpeg-2.8.3.tar.bz2/libavformat/jvdec.c
Changed
10
1
2
3
static int read_probe(AVProbeData *pd)
4
{
5
- if (pd->buf[0] == 'J' && pd->buf[1] == 'V' && strlen(MAGIC) <= pd->buf_size - 4 &&
6
+ if (pd->buf[0] == 'J' && pd->buf[1] == 'V' && strlen(MAGIC) + 4 <= pd->buf_size &&
7
!memcmp(pd->buf + 4, MAGIC, strlen(MAGIC)))
8
return AVPROBE_SCORE_MAX;
9
return 0;
10
ffmpeg-2.8.1.tar.bz2/libavformat/matroskadec.c -> ffmpeg-2.8.3.tar.bz2/libavformat/matroskadec.c
Changed
9
1
2
tracks[i].audio.buf_timecode = AV_NOPTS_VALUE;
3
tracks[i].end_timecode = 0;
4
if (tracks[i].type == MATROSKA_TRACK_TYPE_SUBTITLE &&
5
+ tracks[i].stream &&
6
tracks[i].stream->discard != AVDISCARD_ALL) {
7
index_sub = av_index_search_timestamp(
8
tracks[i].stream, st->index_entries[index].timestamp,
9
ffmpeg-2.8.1.tar.bz2/libavformat/mov.c -> ffmpeg-2.8.3.tar.bz2/libavformat/mov.c
Changed
321
1
2
MOVFragment *frag = &c->fragment;
3
MOVTrackExt *trex = NULL;
4
MOVFragmentIndex* index = NULL;
5
- int flags, track_id, i;
6
+ int flags, track_id, i, found = 0;
7
8
avio_r8(pb); /* version */
9
flags = avio_rb24(pb);
10
11
av_log(c->fc, AV_LOG_ERROR, "could not find corresponding trex\n");
12
return AVERROR_INVALIDDATA;
13
}
14
- for (i = 0; i < c->fragment_index_count; i++) {
15
- MOVFragmentIndex* candidate = c->fragment_index_data[i];
16
- if (candidate->track_id == frag->track_id) {
17
- av_log(c->fc, AV_LOG_DEBUG,
18
- "found fragment index for track %u\n", frag->track_id);
19
- index = candidate;
20
- break;
21
- }
22
- }
23
24
frag->base_data_offset = flags & MOV_TFHD_BASE_DATA_OFFSET ?
25
avio_rb64(pb) : flags & MOV_TFHD_DEFAULT_BASE_IS_MOOF ?
26
27
frag->flags = flags & MOV_TFHD_DEFAULT_FLAGS ?
28
avio_rb32(pb) : trex->flags;
29
frag->time = AV_NOPTS_VALUE;
30
- if (index) {
31
- int i, found = 0;
32
- for (i = index->current_item; i < index->item_count; i++) {
33
- if (frag->implicit_offset == index->items[i].moof_offset) {
34
- av_log(c->fc, AV_LOG_DEBUG, "found fragment index entry "
35
- "for track %u and moof_offset %"PRId64"\n",
36
- frag->track_id, index->items[i].moof_offset);
37
- frag->time = index->items[i].time;
38
- index->current_item = i + 1;
39
- found = 1;
40
+ for (i = 0; i < c->fragment_index_count; i++) {
41
+ int j;
42
+ MOVFragmentIndex* candidate = c->fragment_index_data[i];
43
+ if (candidate->track_id == frag->track_id) {
44
+ av_log(c->fc, AV_LOG_DEBUG,
45
+ "found fragment index for track %u\n", frag->track_id);
46
+ index = candidate;
47
+ for (j = index->current_item; j < index->item_count; j++) {
48
+ if (frag->implicit_offset == index->items[j].moof_offset) {
49
+ av_log(c->fc, AV_LOG_DEBUG, "found fragment index entry "
50
+ "for track %u and moof_offset %"PRId64"\n",
51
+ frag->track_id, index->items[j].moof_offset);
52
+ frag->time = index->items[j].time;
53
+ index->current_item = j + 1;
54
+ found = 1;
55
+ break;
56
+ }
57
}
58
- }
59
- if (!found) {
60
- av_log(c->fc, AV_LOG_WARNING, "track %u has a fragment index "
61
- "but it doesn't have an (in-order) entry for moof_offset "
62
- "%"PRId64"\n", frag->track_id, frag->implicit_offset);
63
+ if (found)
64
+ break;
65
}
66
}
67
+ if (index && !found) {
68
+ av_log(c->fc, AV_LOG_DEBUG, "track %u has a fragment index but "
69
+ "it doesn't have an (in-order) entry for moof_offset "
70
+ "%"PRId64"\n", frag->track_id, frag->implicit_offset);
71
+ }
72
av_log(c->fc, AV_LOG_TRACE, "frag flags 0x%x\n", frag->flags);
73
return 0;
74
}
75
76
return AVERROR_EOF;
77
78
frag->implicit_offset = offset;
79
- st->duration = sc->track_end = dts + sc->time_offset;
80
+
81
+ sc->track_end = dts + sc->time_offset;
82
+ if (st->duration < sc->track_end)
83
+ st->duration = sc->track_end;
84
+
85
+ return 0;
86
+}
87
+
88
+static int mov_read_sidx(MOVContext *c, AVIOContext *pb, MOVAtom atom)
89
+{
90
+ int64_t offset = avio_tell(pb) + atom.size, pts;
91
+ uint8_t version;
92
+ unsigned i, track_id;
93
+ AVStream *st = NULL;
94
+ MOVStreamContext *sc;
95
+ MOVFragmentIndex *index = NULL;
96
+ MOVFragmentIndex **tmp;
97
+ AVRational timescale;
98
+
99
+ version = avio_r8(pb);
100
+ if (version > 1) {
101
+ avpriv_request_sample(c->fc, "sidx version %u", version);
102
+ return AVERROR_PATCHWELCOME;
103
+ }
104
+
105
+ avio_rb24(pb); // flags
106
+
107
+ track_id = avio_rb32(pb); // Reference ID
108
+ for (i = 0; i < c->fc->nb_streams; i++) {
109
+ if (c->fc->streams[i]->id == track_id) {
110
+ st = c->fc->streams[i];
111
+ break;
112
+ }
113
+ }
114
+ if (!st) {
115
+ av_log(c->fc, AV_LOG_ERROR, "could not find corresponding track id %d\n", track_id);
116
+ return AVERROR_INVALIDDATA;
117
+ }
118
+
119
+ sc = st->priv_data;
120
+
121
+ timescale = av_make_q(1, avio_rb32(pb));
122
+
123
+ if (version == 0) {
124
+ pts = avio_rb32(pb);
125
+ offset += avio_rb32(pb);
126
+ } else {
127
+ pts = avio_rb64(pb);
128
+ offset += avio_rb64(pb);
129
+ }
130
+
131
+ avio_rb16(pb); // reserved
132
+
133
+ index = av_mallocz(sizeof(MOVFragmentIndex));
134
+ if (!index)
135
+ return AVERROR(ENOMEM);
136
+
137
+ index->track_id = track_id;
138
+
139
+ index->item_count = avio_rb16(pb);
140
+ index->items = av_mallocz_array(index->item_count, sizeof(MOVFragmentIndexItem));
141
+
142
+ if (!index->items) {
143
+ av_freep(&index);
144
+ return AVERROR(ENOMEM);
145
+ }
146
+
147
+ for (i = 0; i < index->item_count; i++) {
148
+ uint32_t size = avio_rb32(pb);
149
+ uint32_t duration = avio_rb32(pb);
150
+ if (size & 0x80000000) {
151
+ avpriv_request_sample(c->fc, "sidx reference_type 1");
152
+ av_freep(&index->items);
153
+ av_freep(&index);
154
+ return AVERROR_PATCHWELCOME;
155
+ }
156
+ avio_rb32(pb); // sap_flags
157
+ index->items[i].moof_offset = offset;
158
+ index->items[i].time = av_rescale_q(pts, st->time_base, timescale);
159
+ offset += size;
160
+ pts += duration;
161
+ }
162
+
163
+ st->duration = sc->track_end = pts;
164
+
165
+ tmp = av_realloc_array(c->fragment_index_data,
166
+ c->fragment_index_count + 1,
167
+ sizeof(MOVFragmentIndex*));
168
+ if (!tmp) {
169
+ av_freep(&index->items);
170
+ av_freep(&index);
171
+ return AVERROR(ENOMEM);
172
+ }
173
+
174
+ c->fragment_index_data = tmp;
175
+ c->fragment_index_data[c->fragment_index_count++] = index;
176
+
177
+ if (offset == avio_size(pb))
178
+ c->fragment_index_complete = 1;
179
+
180
return 0;
181
}
182
183
184
{ MKTAG('a','l','a','c'), mov_read_alac }, /* alac specific atom */
185
{ MKTAG('a','v','c','C'), mov_read_glbl },
186
{ MKTAG('p','a','s','p'), mov_read_pasp },
187
+{ MKTAG('s','i','d','x'), mov_read_sidx },
188
{ MKTAG('s','t','b','l'), mov_read_default },
189
{ MKTAG('s','t','c','o'), mov_read_stco },
190
{ MKTAG('s','t','p','s'), mov_read_stps },
191
192
return err;
193
}
194
if (c->found_moov && c->found_mdat &&
195
- ((!pb->seekable || c->fc->flags & AVFMT_FLAG_IGNIDX) ||
196
+ ((!pb->seekable || c->fc->flags & AVFMT_FLAG_IGNIDX || c->fragment_index_complete) ||
197
start_pos + a.size == avio_size(pb))) {
198
- if (!pb->seekable || c->fc->flags & AVFMT_FLAG_IGNIDX)
199
+ if (!pb->seekable || c->fc->flags & AVFMT_FLAG_IGNIDX || c->fragment_index_complete)
200
c->next_root_atom = start_pos + a.size;
201
c->atom_depth --;
202
return 0;
203
204
return 1;
205
}
206
207
+static int mov_switch_root(AVFormatContext *s, int64_t target)
208
+{
209
+ MOVContext *mov = s->priv_data;
210
+ int i, j;
211
+ int already_read = 0;
212
+
213
+ if (avio_seek(s->pb, target, SEEK_SET) != target) {
214
+ av_log(mov->fc, AV_LOG_ERROR, "root atom offset 0x%"PRIx64": partial file\n", target);
215
+ return AVERROR_INVALIDDATA;
216
+ }
217
+
218
+ mov->next_root_atom = 0;
219
+
220
+ for (i = 0; i < mov->fragment_index_count; i++) {
221
+ MOVFragmentIndex *index = mov->fragment_index_data[i];
222
+ int found = 0;
223
+ for (j = 0; j < index->item_count; j++) {
224
+ MOVFragmentIndexItem *item = &index->items[j];
225
+ if (found) {
226
+ mov->next_root_atom = item->moof_offset;
227
+ break; // Advance to next index in outer loop
228
+ } else if (item->moof_offset == target) {
229
+ index->current_item = FFMIN(j, index->current_item);
230
+ if (item->headers_read)
231
+ already_read = 1;
232
+ item->headers_read = 1;
233
+ found = 1;
234
+ }
235
+ }
236
+ if (!found)
237
+ index->current_item = 0;
238
+ }
239
+
240
+ if (already_read)
241
+ return 0;
242
+
243
+ mov->found_mdat = 0;
244
+
245
+ if (mov_read_default(mov, s->pb, (MOVAtom){ AV_RL32("root"), INT64_MAX }) < 0 ||
246
+ avio_feof(s->pb))
247
+ return AVERROR_EOF;
248
+ av_log(s, AV_LOG_TRACE, "read fragments, offset 0x%"PRIx64"\n", avio_tell(s->pb));
249
+
250
+ return 1;
251
+}
252
+
253
static int mov_read_packet(AVFormatContext *s, AVPacket *pkt)
254
{
255
MOVContext *mov = s->priv_data;
256
257
mov->fc = s;
258
retry:
259
sample = mov_find_next_sample(s, &st);
260
- if (!sample) {
261
- mov->found_mdat = 0;
262
+ if (!sample || (mov->next_root_atom && sample->pos > mov->next_root_atom)) {
263
if (!mov->next_root_atom)
264
return AVERROR_EOF;
265
- if (avio_seek(s->pb, mov->next_root_atom, SEEK_SET) != mov->next_root_atom) {
266
- av_log(mov->fc, AV_LOG_ERROR, "next root atom offset 0x%"PRIx64": partial file\n", mov->next_root_atom);
267
- return AVERROR_INVALIDDATA;
268
- }
269
- mov->next_root_atom = 0;
270
- if (mov_read_default(mov, s->pb, (MOVAtom){ AV_RL32("root"), INT64_MAX }) < 0 ||
271
- avio_feof(s->pb))
272
- return AVERROR_EOF;
273
- av_log(s, AV_LOG_TRACE, "read fragments, offset 0x%"PRIx64"\n", avio_tell(s->pb));
274
+ if ((ret = mov_switch_root(s, mov->next_root_atom)) < 0)
275
+ return ret;
276
goto retry;
277
}
278
sc = st->priv_data;
279
280
return 0;
281
}
282
283
+static int mov_seek_fragment(AVFormatContext *s, AVStream *st, int64_t timestamp)
284
+{
285
+ MOVContext *mov = s->priv_data;
286
+ int i, j;
287
+
288
+ if (!mov->fragment_index_complete)
289
+ return 0;
290
+
291
+ for (i = 0; i < mov->fragment_index_count; i++) {
292
+ if (mov->fragment_index_data[i]->track_id == st->id) {
293
+ MOVFragmentIndex *index = index = mov->fragment_index_data[i];
294
+ for (j = index->item_count - 1; j >= 0; j--) {
295
+ if (index->items[j].time <= timestamp) {
296
+ if (index->items[j].headers_read)
297
+ return 0;
298
+
299
+ return mov_switch_root(s, index->items[j].moof_offset);
300
+ }
301
+ }
302
+ }
303
+ }
304
+
305
+ return 0;
306
+}
307
+
308
static int mov_seek_stream(AVFormatContext *s, AVStream *st, int64_t timestamp, int flags)
309
{
310
MOVStreamContext *sc = st->priv_data;
311
int sample, time_sample;
312
int i;
313
314
+ int ret = mov_seek_fragment(s, st, timestamp);
315
+ if (ret < 0)
316
+ return ret;
317
+
318
sample = av_index_search_timestamp(st, timestamp, flags);
319
av_log(s, AV_LOG_TRACE, "stream %d, timestamp %"PRId64", sample %d\n", st->index, timestamp, sample);
320
if (sample < 0 && st->nb_index_entries && timestamp < st->index_entries[0].timestamp)
321
ffmpeg-2.8.1.tar.bz2/libavformat/mp3dec.c -> ffmpeg-2.8.3.tar.bz2/libavformat/mp3dec.c
Changed
73
1
2
3
#define XING_TOC_COUNT 100
4
5
+#define SAME_HEADER_MASK \
6
+ (0xffe00000 | (3 << 17) | (3 << 10) | (3 << 19))
7
+
8
typedef struct {
9
AVClass *class;
10
int64_t filesize;
11
12
int is_cbr;
13
} MP3DecContext;
14
15
-static int check(AVIOContext *pb, int64_t pos);
16
+static int check(AVIOContext *pb, int64_t pos, uint32_t *header);
17
18
/* mp3 read */
19
20
21
22
off = avio_tell(s->pb);
23
for (i = 0; i < 64 * 1024; i++) {
24
+ uint32_t header, header2;
25
+ int frame_size;
26
if (!(i&1023))
27
ffio_ensure_seekback(s->pb, i + 1024 + 4);
28
- if (check(s->pb, off + i) >= 0) {
29
- av_log(s, AV_LOG_INFO, "Skipping %d bytes of junk at %"PRId64".\n", i, off);
30
- avio_seek(s->pb, off + i, SEEK_SET);
31
- break;
32
+ frame_size = check(s->pb, off + i, &header);
33
+ if (frame_size > 0) {
34
+ avio_seek(s->pb, off, SEEK_SET);
35
+ ffio_ensure_seekback(s->pb, i + 1024 + frame_size + 4);
36
+ if (check(s->pb, off + i + frame_size, &header2) >= 0 &&
37
+ (header & SAME_HEADER_MASK) == (header2 & SAME_HEADER_MASK))
38
+ {
39
+ av_log(s, AV_LOG_INFO, "Skipping %d bytes of junk at %"PRId64".\n", i, off);
40
+ avio_seek(s->pb, off + i, SEEK_SET);
41
+ break;
42
+ }
43
}
44
avio_seek(s->pb, off, SEEK_SET);
45
}
46
47
48
#define SEEK_WINDOW 4096
49
50
-static int check(AVIOContext *pb, int64_t pos)
51
+static int check(AVIOContext *pb, int64_t pos, uint32_t *ret_header)
52
{
53
int64_t ret = avio_seek(pb, pos, SEEK_SET);
54
unsigned header;
55
56
if (avpriv_mpegaudio_decode_header(&sd, header) == 1)
57
return -1;
58
59
+ if (ret_header)
60
+ *ret_header = header;
61
return sd.frame_size;
62
}
63
64
65
continue;
66
67
for(j=0; j<MIN_VALID; j++) {
68
- ret = check(s->pb, pos);
69
+ ret = check(s->pb, pos, NULL);
70
if(ret < 0)
71
break;
72
if ((target_pos - pos)*dir <= 0 && abs(MIN_VALID/2-j) < score) {
73
ffmpeg-2.8.1.tar.bz2/libavformat/mpegts.c -> ffmpeg-2.8.3.tar.bz2/libavformat/mpegts.c
Changed
9
1
2
if ((st->codec->codec_id == AV_CODEC_ID_NONE ||
3
(st->request_probe > 0 && st->request_probe < AVPROBE_SCORE_STREAM_RETRY / 5)) &&
4
!avcodec_is_open(st->codec) &&
5
+ st->probe_packets > 0 &&
6
stream_type == STREAM_TYPE_PRIVATE_DATA) {
7
st->codec->codec_type = AVMEDIA_TYPE_DATA;
8
st->codec->codec_id = AV_CODEC_ID_BIN_DATA;
9
ffmpeg-2.8.1.tar.bz2/libavformat/mxfdec.c -> ffmpeg-2.8.3.tar.bz2/libavformat/mxfdec.c
Changed
18
1
2
continue;
3
}
4
5
+ if (physical_track->edit_rate.num <= 0 ||
6
+ physical_track->edit_rate.den <= 0) {
7
+ av_log(mxf->fc, AV_LOG_WARNING,
8
+ "Invalid edit rate (%d/%d) found on structural"
9
+ " component #%d, defaulting to 25/1\n",
10
+ physical_track->edit_rate.num,
11
+ physical_track->edit_rate.den, i);
12
+ physical_track->edit_rate = (AVRational){25, 1};
13
+ }
14
+
15
for (k = 0; k < physical_track->sequence->structural_components_count; k++) {
16
if (!(mxf_tc = mxf_resolve_timecode_component(mxf, &physical_track->sequence->structural_components_refs[k])))
17
continue;
18
ffmpeg-2.8.1.tar.bz2/libavformat/mxfenc.c -> ffmpeg-2.8.3.tar.bz2/libavformat/mxfenc.c
Changed
144
1
2
* License along with FFmpeg; if not, write to the Free Software
3
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
4
*
5
- * signal_standard, color_siting and klv_fill_key version fixes sponsored by NOA GmbH
6
+ * signal_standard, color_siting, store_user_comments and klv_fill_key version
7
+ * fixes sponsored by NOA GmbH
8
*/
9
10
/*
11
12
int signal_standard;
13
uint32_t tagged_value_count;
14
AVRational audio_edit_rate;
15
+ int store_user_comments;
16
} MXFContext;
17
18
static const uint8_t uuid_base[] = { 0xAD,0xAB,0x44,0x24,0x2f,0x25,0x4d,0xc7,0x92,0xff,0x29,0xbd };
19
20
{ 0x4404, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x07,0x02,0x01,0x10,0x02,0x05,0x00,0x00}}, /* Package Modified Date */
21
{ 0x4402, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x01,0x01,0x03,0x03,0x02,0x01,0x00,0x00,0x00}}, /* Package Name */
22
{ 0x4403, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x06,0x01,0x01,0x04,0x06,0x05,0x00,0x00}}, /* Tracks Strong reference array */
23
- { 0x4406, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x03,0x02,0x01,0x02,0x0C,0x00,0x00,0x00}}, /* User Comments */
24
{ 0x4701, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x06,0x01,0x01,0x04,0x02,0x03,0x00,0x00}}, /* Descriptor */
25
// Track
26
{ 0x4801, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x01,0x07,0x01,0x01,0x00,0x00,0x00,0x00}}, /* Track ID */
27
28
{ 0x1501, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x07,0x02,0x01,0x03,0x01,0x05,0x00,0x00}}, /* Start Time Code */
29
{ 0x1502, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x04,0x04,0x01,0x01,0x02,0x06,0x00,0x00}}, /* Rounded Time Code Base */
30
{ 0x1503, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x01,0x04,0x04,0x01,0x01,0x05,0x00,0x00,0x00}}, /* Drop Frame */
31
- // Tagged Value
32
- { 0x5001, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x03,0x02,0x01,0x02,0x09,0x01,0x00,0x00}}, /* Name */
33
- { 0x5003, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x03,0x02,0x01,0x02,0x0A,0x01,0x00,0x00}}, /* Value */
34
// File Descriptor
35
{ 0x3F01, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x04,0x06,0x01,0x01,0x04,0x06,0x0B,0x00,0x00}}, /* Sub Descriptors reference array */
36
{ 0x3006, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x05,0x06,0x01,0x01,0x03,0x05,0x00,0x00,0x00}}, /* Linked Track ID */
37
38
{ 0x3D0A, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x05,0x04,0x02,0x03,0x02,0x01,0x00,0x00,0x00}}, /* Block Align */
39
};
40
41
+static const MXFLocalTagPair mxf_user_comments_local_tag[] = {
42
+ { 0x4406, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x03,0x02,0x01,0x02,0x0C,0x00,0x00,0x00}}, /* User Comments */
43
+ { 0x5001, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x03,0x02,0x01,0x02,0x09,0x01,0x00,0x00}}, /* Name */
44
+ { 0x5003, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x03,0x02,0x01,0x02,0x0A,0x01,0x00,0x00}}, /* Value */
45
+};
46
+
47
static void mxf_write_uuid(AVIOContext *pb, enum MXFMetadataSetType type, int value)
48
{
49
avio_write(pb, uuid_base, 12);
50
51
52
static void mxf_write_primer_pack(AVFormatContext *s)
53
{
54
+ MXFContext *mxf = s->priv_data;
55
AVIOContext *pb = s->pb;
56
int local_tag_number, i = 0;
57
58
local_tag_number = FF_ARRAY_ELEMS(mxf_local_tag_batch);
59
+ local_tag_number += mxf->store_user_comments * FF_ARRAY_ELEMS(mxf_user_comments_local_tag);
60
61
avio_write(pb, primer_pack_key, 16);
62
klv_encode_ber_length(pb, local_tag_number * 18 + 8);
63
64
avio_wb32(pb, local_tag_number); // local_tag num
65
avio_wb32(pb, 18); // item size, always 18 according to the specs
66
67
- for (i = 0; i < local_tag_number; i++) {
68
+ for (i = 0; i < FF_ARRAY_ELEMS(mxf_local_tag_batch); i++) {
69
avio_wb16(pb, mxf_local_tag_batch[i].local_tag);
70
avio_write(pb, mxf_local_tag_batch[i].uid, 16);
71
}
72
+ if (mxf->store_user_comments)
73
+ for (i = 0; i < FF_ARRAY_ELEMS(mxf_user_comments_local_tag); i++) {
74
+ avio_wb16(pb, mxf_user_comments_local_tag[i].local_tag);
75
+ avio_write(pb, mxf_user_comments_local_tag[i].uid, 16);
76
+ }
77
}
78
79
static void mxf_write_local_tag(AVIOContext *pb, int size, int tag)
80
81
int user_comment_count = 0;
82
83
if (type == MaterialPackage) {
84
- user_comment_count = mxf_write_user_comments(s, s->metadata);
85
+ if (mxf->store_user_comments)
86
+ user_comment_count = mxf_write_user_comments(s, s->metadata);
87
mxf_write_metadata_key(pb, 0x013600);
88
PRINT_KEY(s, "Material Package key", pb->buf_ptr - 16);
89
- klv_encode_ber_length(pb, 104 + name_size + (16*track_count) + (16*user_comment_count));
90
+ klv_encode_ber_length(pb, 92 + name_size + (16*track_count) + (16*user_comment_count) + 12*mxf->store_user_comments);
91
} else {
92
mxf_write_metadata_key(pb, 0x013700);
93
PRINT_KEY(s, "Source Package key", pb->buf_ptr - 16);
94
- klv_encode_ber_length(pb, 124 + name_size + (16*track_count)); // 20 bytes length for descriptor reference
95
+ klv_encode_ber_length(pb, 112 + name_size + (16*track_count) + 12*mxf->store_user_comments); // 20 bytes length for descriptor reference
96
}
97
98
// write uid
99
100
mxf_write_uuid(pb, type == MaterialPackage ? Track : Track + TypeBottom, i);
101
102
// write user comment refs
103
- mxf_write_local_tag(pb, user_comment_count*16 + 8, 0x4406);
104
- mxf_write_refs_count(pb, user_comment_count);
105
- for (i = 0; i < user_comment_count; i++)
106
- mxf_write_uuid(pb, TaggedValue, mxf->tagged_value_count - user_comment_count + i);
107
+ if (mxf->store_user_comments) {
108
+ mxf_write_local_tag(pb, user_comment_count*16 + 8, 0x4406);
109
+ mxf_write_refs_count(pb, user_comment_count);
110
+ for (i = 0; i < user_comment_count; i++)
111
+ mxf_write_uuid(pb, TaggedValue, mxf->tagged_value_count - user_comment_count + i);
112
+ }
113
114
// write multiple descriptor reference
115
if (type == SourcePackage) {
116
117
return -1;
118
}
119
120
+ if (!av_dict_get(s->metadata, "comment_", NULL, AV_DICT_IGNORE_SUFFIX))
121
+ mxf->store_user_comments = 0;
122
+
123
for (i = 0; i < s->nb_streams; i++) {
124
AVStream *st = s->streams[i];
125
MXFStreamContext *sc = av_mallocz(sizeof(*sc));
126
127
128
static const AVOption mxf_options[] = {
129
MXF_COMMON_OPTIONS
130
+ { "store_user_comments", "",
131
+ offsetof(MXFContext, store_user_comments), AV_OPT_TYPE_INT, {.i64 = 1}, 0, 1, AV_OPT_FLAG_ENCODING_PARAM},
132
{ NULL },
133
};
134
135
136
{ "d10_channelcount", "Force/set channelcount in generic sound essence descriptor",
137
offsetof(MXFContext, channel_count), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 8, AV_OPT_FLAG_ENCODING_PARAM},
138
MXF_COMMON_OPTIONS
139
+ { "store_user_comments", "",
140
+ offsetof(MXFContext, store_user_comments), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, AV_OPT_FLAG_ENCODING_PARAM},
141
{ NULL },
142
};
143
144
ffmpeg-2.8.1.tar.bz2/libavformat/rtmpcrypt.c -> ffmpeg-2.8.3.tar.bz2/libavformat/rtmpcrypt.c
Changed
17
1
2
static void rtmpe8_sig(const uint8_t *in, uint8_t *out, int key_id)
3
{
4
struct AVXTEA ctx;
5
+ uint8_t tmpbuf[8];
6
7
av_xtea_init(&ctx, rtmpe8_keys[key_id]);
8
- av_xtea_crypt(&ctx, out, in, 1, NULL, 0);
9
+ AV_WB32(tmpbuf, AV_RL32(in));
10
+ AV_WB32(tmpbuf + 4, AV_RL32(in + 4));
11
+ av_xtea_crypt(&ctx, tmpbuf, tmpbuf, 1, NULL, 0);
12
+ AV_WL32(out, AV_RB32(tmpbuf));
13
+ AV_WL32(out + 4, AV_RB32(tmpbuf + 4));
14
}
15
16
static void rtmpe9_sig(const uint8_t *in, uint8_t *out, int key_id)
17
ffmpeg-2.8.1.tar.bz2/libavformat/rtsp.c -> ffmpeg-2.8.3.tar.bz2/libavformat/rtsp.c
Changed
26
1
2
unsigned char ch;
3
const char *p;
4
int ret, content_length, line_count = 0, request = 0;
5
- int first_line = 1;
6
unsigned char *content = NULL;
7
8
start:
9
10
return AVERROR_EOF;
11
if (ch == '\n')
12
break;
13
- if (ch == '$' && first_line && q == buf) {
14
+ if (ch == '$' && q == buf) {
15
if (return_on_interleaved_data) {
16
return 1;
17
} else
18
19
}
20
}
21
*q = '\0';
22
- first_line = 0;
23
24
av_log(s, AV_LOG_TRACE, "line='%s'\n", buf);
25
26
ffmpeg-2.8.1.tar.bz2/libavformat/utils.c -> ffmpeg-2.8.3.tar.bz2/libavformat/utils.c
Changed
10
1
2
st->codec->time_base = st->time_base;
3
}
4
// only for the split stuff
5
- if (!st->parser && !(ic->flags & AVFMT_FLAG_NOPARSE)) {
6
+ if (!st->parser && !(ic->flags & AVFMT_FLAG_NOPARSE) && st->request_probe <= 0) {
7
st->parser = av_parser_init(st->codec->codec_id);
8
if (st->parser) {
9
if (st->need_parsing == AVSTREAM_PARSE_HEADERS) {
10
ffmpeg-2.8.1.tar.bz2/libavformat/xmv.c -> ffmpeg-2.8.3.tar.bz2/libavformat/xmv.c
Changed
24
1
2
/* Fetch a video frame */
3
4
result = xmv_fetch_video_packet(s, pkt);
5
- if (result)
6
- return result;
7
-
8
} else {
9
/* Fetch an audio frame */
10
11
result = xmv_fetch_audio_packet(s, pkt, xmv->current_stream - 1);
12
- if (result)
13
- return result;
14
}
15
+ if (result) {
16
+ xmv->current_stream = 0;
17
+ xmv->video.current_frame = xmv->video.frame_count;
18
+ return result;
19
+ }
20
+
21
22
/* Increase our counters */
23
if (++xmv->current_stream >= xmv->stream_count) {
24
ffmpeg-2.8.1.tar.bz2/libavutil/channel_layout.c -> ffmpeg-2.8.3.tar.bz2/libavutil/channel_layout.c
Changed
28
1
2
strlen(channel_names[i].name) == name_len &&
3
!memcmp(channel_names[i].name, name, name_len))
4
return (int64_t)1 << i;
5
+
6
+ errno = 0;
7
i = strtol(name, &end, 10);
8
9
#if FF_API_GET_CHANNEL_LAYOUT_COMPAT
10
11
}
12
} else {
13
#endif
14
- if ((end + 1 - name == name_len && *end == 'c'))
15
+ if (!errno && (end + 1 - name == name_len && *end == 'c'))
16
return av_get_default_channel_layout(i);
17
#if FF_API_GET_CHANNEL_LAYOUT_COMPAT
18
}
19
#endif
20
21
+ errno = 0;
22
layout = strtoll(name, &end, 0);
23
- if (end - name == name_len)
24
+ if (!errno && end - name == name_len)
25
return FFMAX(layout, 0);
26
return 0;
27
}
28
ffmpeg-2.8.1.tar.bz2/libavutil/common.h -> ffmpeg-2.8.3.tar.bz2/libavutil/common.h
Changed
19
1
2
*/
3
#define FFNABS(a) ((a) <= 0 ? (a) : (-(a)))
4
5
+/**
6
+ * Comparator.
7
+ * For two numerical expressions x and y, gives 1 if x > y, -1 if x < y, and 0
8
+ * if x == y. This is useful for instance in a qsort comparator callback.
9
+ * Furthermore, compilers are able to optimize this to branchless code, and
10
+ * there is no risk of overflow with signed types.
11
+ * As with many macros, this evaluates its argument multiple times, it thus
12
+ * must not have a side-effect.
13
+ */
14
+#define FFDIFFSIGN(x,y) (((x)>(y)) - ((x)<(y)))
15
+
16
#define FFMAX(a,b) ((a) > (b) ? (a) : (b))
17
#define FFMAX3(a,b,c) FFMAX(FFMAX(a,b),c)
18
#define FFMIN(a,b) ((a) > (b) ? (b) : (a))
19
ffmpeg-2.8.1.tar.bz2/libavutil/file_open.c -> ffmpeg-2.8.3.tar.bz2/libavutil/file_open.c
Changed
11
1
2
#ifdef O_CLOEXEC
3
flags |= O_CLOEXEC;
4
#endif
5
+#ifdef O_NOINHERIT
6
+ flags |= O_NOINHERIT;
7
+#endif
8
9
fd = open(filename, flags, mode);
10
#if HAVE_FCNTL
11
ffmpeg-2.8.1.tar.bz2/libavutil/softfloat.c -> ffmpeg-2.8.3.tar.bz2/libavutil/softfloat.c
Changed
50
1
2
sf1 = av_int2sf(0xE0000001, 0);
3
printf("test4 softfloat: %.10lf (0x%08x %d)\n", (double)av_sf2double(sf1), sf1.mant, sf1.exp);
4
5
+
6
+ sf1 = (SoftFloat){ 0x20000000, MIN_EXP };
7
+ sf1 = av_mul_sf(sf1, sf1);
8
+ printf("test5 softfloat: %.10lf (0x%08x %d)\n", (double)av_sf2double(sf1), sf1.mant, sf1.exp);
9
+
10
+ sf1 = (SoftFloat){ 0x20000000, MIN_EXP };
11
+ sf2 = (SoftFloat){ 0x20000000, MAX_EXP };
12
+ i = av_cmp_sf(sf1, sf2);
13
+ j = av_cmp_sf(sf2, sf1);
14
+ sf1 = av_div_sf(sf1, sf2);
15
+ printf("test6 softfloat: %.10lf (0x%08x %d) %d %d\n", (double)av_sf2double(sf1), sf1.mant, sf1.exp, i, j);
16
+
17
+ for(i= -50; i<50; i++) {
18
+ sf1= av_int2sf(i, 0);
19
+ for(j= -50; j<50; j++) {
20
+ int c;
21
+ sf2= av_int2sf(j, 0);
22
+ c = av_cmp_sf(sf1, sf2);
23
+ if (FFDIFFSIGN(i,j) != c && (FFDIFFSIGN(i,j)^c)<0) {
24
+ printf("av_cmp_sf failed at %d %d as %X\n", i, j, c);
25
+ }
26
+ c = av_gt_sf(sf1, sf2);
27
+ if ((i>j) != c) {
28
+ printf("av_gt_sf failed at %d %d as %X\n", i, j, c);
29
+ }
30
+ }
31
+ sf1 = av_int2sf(1, i);
32
+ for(j = -50; j < 50; j++) {
33
+ int c;
34
+ sf2 = av_int2sf(1, j);
35
+ c = av_cmp_sf(sf2, sf1);
36
+ if (FFDIFFSIGN(i,j) != c && (FFDIFFSIGN(i,j)^c) < 0) {
37
+ printf("av_cmp_sf failed2 at %d %d as %X\n", i, j, c);
38
+ }
39
+ c = av_gt_sf(sf1, sf2);
40
+ if ((i<j) != c) {
41
+ printf("av_gt_sf failed2 at %d %d as %X\n", i, j, c);
42
+ }
43
+ }
44
+ }
45
+
46
+
47
for(i= 0; i<4*36; i++){
48
int s, c;
49
double errs, errc;
50
ffmpeg-2.8.1.tar.bz2/libavutil/softfloat.h -> ffmpeg-2.8.3.tar.bz2/libavutil/softfloat.h
Changed
89
1
2
int32_t exp;
3
}SoftFloat;
4
5
-static const SoftFloat FLOAT_0 = { 0, 0};
6
+static const SoftFloat FLOAT_0 = { 0, MIN_EXP};
7
static const SoftFloat FLOAT_05 = { 0x20000000, 0};
8
static const SoftFloat FLOAT_1 = { 0x20000000, 1};
9
static const SoftFloat FLOAT_EPSILON = { 0x29F16B12, -16};
10
11
}
12
13
/**
14
- * @return Will not be more denormalized than a+b. So if either input is
15
+ * @return Will not be more denormalized than a*b. So if either input is
16
* normalized, then the output will not be worse then the other input.
17
* If both are normalized, then the output will be normalized.
18
*/
19
20
a.exp += b.exp;
21
av_assert2((int32_t)((a.mant * (int64_t)b.mant) >> ONE_BITS) == (a.mant * (int64_t)b.mant) >> ONE_BITS);
22
a.mant = (a.mant * (int64_t)b.mant) >> ONE_BITS;
23
- return av_normalize1_sf((SoftFloat){a.mant, a.exp - 1});
24
+ a = av_normalize1_sf((SoftFloat){a.mant, a.exp - 1});
25
+ if (!a.mant || a.exp < MIN_EXP)
26
+ return FLOAT_0;
27
+ return a;
28
}
29
30
/**
31
32
static inline av_const SoftFloat av_div_sf(SoftFloat a, SoftFloat b){
33
a.exp -= b.exp;
34
a.mant = ((int64_t)a.mant<<(ONE_BITS+1)) / b.mant;
35
- return av_normalize1_sf(a);
36
+ a = av_normalize1_sf(a);
37
+ if (!a.mant || a.exp < MIN_EXP)
38
+ return FLOAT_0;
39
+ return a;
40
}
41
42
static inline av_const int av_cmp_sf(SoftFloat a, SoftFloat b){
43
int t= a.exp - b.exp;
44
- if(t<0) return (a.mant >> (-t)) - b.mant ;
45
- else return a.mant - (b.mant >> t);
46
+ if (t <-31) return - b.mant ;
47
+ else if (t < 0) return (a.mant >> (-t)) - b.mant ;
48
+ else if (t < 32) return a.mant - (b.mant >> t);
49
+ else return a.mant ;
50
}
51
52
static inline av_const int av_gt_sf(SoftFloat a, SoftFloat b)
53
{
54
int t= a.exp - b.exp;
55
- if(t<0) return (a.mant >> (-t)) > b.mant ;
56
- else return a.mant > (b.mant >> t);
57
+ if (t <-31) return 0 > b.mant ;
58
+ else if (t < 0) return (a.mant >> (-t)) > b.mant ;
59
+ else if (t < 32) return a.mant > (b.mant >> t);
60
+ else return a.mant > 0 ;
61
}
62
63
static inline av_const SoftFloat av_add_sf(SoftFloat a, SoftFloat b){
64
65
* @returns a SoftFloat with value v * 2^frac_bits
66
*/
67
static inline av_const SoftFloat av_int2sf(int v, int frac_bits){
68
- return av_normalize_sf((SoftFloat){v, ONE_BITS + 1 - frac_bits});
69
+ int exp_offset = 0;
70
+ if(v == INT_MIN){
71
+ exp_offset = 1;
72
+ v>>=1;
73
+ }
74
+ return av_normalize_sf(av_normalize1_sf((SoftFloat){v, ONE_BITS + 1 - frac_bits + exp_offset}));
75
}
76
77
/**
78
79
int tabIndex, rem;
80
81
if (val.mant == 0)
82
- val.exp = 0;
83
+ val.exp = MIN_EXP;
84
+ else if (val.mant < 0)
85
+ abort();
86
else
87
{
88
tabIndex = (val.mant - 0x20000000) >> 20;
89
ffmpeg-2.8.1.tar.bz2/libswresample/resample.c -> ffmpeg-2.8.3.tar.bz2/libswresample/resample.c
Changed
12
1
2
c->compensation_distance= 0;
3
if(!av_reduce(&c->src_incr, &c->dst_incr, out_rate, in_rate * (int64_t)phase_count, INT32_MAX/2))
4
goto error;
5
+ while (c->dst_incr < (1<<20) && c->src_incr < (1<<20)) {
6
+ c->dst_incr *= 2;
7
+ c->src_incr *= 2;
8
+ }
9
c->ideal_dst_incr = c->dst_incr;
10
c->dst_incr_div = c->dst_incr / c->src_incr;
11
c->dst_incr_mod = c->dst_incr % c->src_incr;
12
ffmpeg-2.8.1.tar.bz2/tests/fate/avformat.mak -> ffmpeg-2.8.3.tar.bz2/tests/fate/avformat.mak
Changed
9
1
2
3
$(FATE_LAVF): $(AREF) $(VREF)
4
$(FATE_LAVF): CMD = lavftest
5
+$(FATE_LAVF): CMP =
6
7
FATE_AVCONV += $(FATE_LAVF)
8
fate-lavf: $(FATE_LAVF)
9
ffmpeg-2.8.1.tar.bz2/tests/fate/libswresample.mak -> ffmpeg-2.8.3.tar.bz2/tests/fate/libswresample.mak
Changed
22
1
2
fate-swr-resample_async-$(3)-$(1)-$(2): REF = tests/data/asynth-$(1)-1.wav
3
endef
4
5
-fate-swr-resample_async-fltp-44100-8000: CMP_TARGET = 4031.48
6
+fate-swr-resample_async-fltp-44100-8000: CMP_TARGET = 4020.62
7
fate-swr-resample_async-fltp-44100-8000: SIZE_TOLERANCE = 529200 - 20310
8
9
-fate-swr-resample_async-fltp-8000-44100: CMP_TARGET = 11185.34
10
+fate-swr-resample_async-fltp-8000-44100: CMP_TARGET = 11186.69
11
fate-swr-resample_async-fltp-8000-44100: SIZE_TOLERANCE = 96000 - 20344
12
13
-fate-swr-resample_async-s16p-44100-8000: CMP_TARGET = 4031.59
14
+fate-swr-resample_async-s16p-44100-8000: CMP_TARGET = 4020.73
15
fate-swr-resample_async-s16p-44100-8000: SIZE_TOLERANCE = 529200 - 20310
16
17
-fate-swr-resample_async-s16p-8000-44100: CMP_TARGET = 11185.65
18
+fate-swr-resample_async-s16p-8000-44100: CMP_TARGET = 11187.01
19
fate-swr-resample_async-s16p-8000-44100: SIZE_TOLERANCE = 96000 - 20344
20
21
$(call CROSS_TEST,$(SAMPLERATES),ARESAMPLE,s16p,s16le,s16)
22
ffmpeg-2.8.1.tar.bz2/tests/ref/lavf/mxf -> ffmpeg-2.8.3.tar.bz2/tests/ref/lavf/mxf
Changed
17
1
2
-030961ae56ab1c264390fd5ef0a95069 *./tests/data/lavf/lavf.mxf
3
-525881 ./tests/data/lavf/lavf.mxf
4
+6d00bf68ec95d0aac959defccdb0190e *./tests/data/lavf/lavf.mxf
5
+525369 ./tests/data/lavf/lavf.mxf
6
./tests/data/lavf/lavf.mxf CRC=0xdbfff6f1
7
-b90dc91dee50a24c8b20a08a063f501a *./tests/data/lavf/lavf.mxf
8
-561209 ./tests/data/lavf/lavf.mxf
9
+0bbdd13de78db8ab9314f083b7da0f30 *./tests/data/lavf/lavf.mxf
10
+560697 ./tests/data/lavf/lavf.mxf
11
./tests/data/lavf/lavf.mxf CRC=0x11a6178e
12
-a0cfffed795686127061feae8cde07d1 *./tests/data/lavf/lavf.mxf
13
-525881 ./tests/data/lavf/lavf.mxf
14
+462f95f19b3e0fd119a204a96eb6f424 *./tests/data/lavf/lavf.mxf
15
+525369 ./tests/data/lavf/lavf.mxf
16
./tests/data/lavf/lavf.mxf CRC=0xdbfff6f1
17
ffmpeg-2.8.1.tar.bz2/tests/ref/lavf/mxf_d10 -> ffmpeg-2.8.3.tar.bz2/tests/ref/lavf/mxf_d10
Changed
6
1
2
-9b5bad981e08fa3eaeb9de818762218c *./tests/data/lavf/lavf.mxf_d10
3
+73c0cb416548c33d0651c59519a8f7e2 *./tests/data/lavf/lavf.mxf_d10
4
5330989 ./tests/data/lavf/lavf.mxf_d10
5
./tests/data/lavf/lavf.mxf_d10 CRC=0x6c74d488
6
ffmpeg-2.8.1.tar.bz2/tests/ref/lavf/mxf_opatom -> ffmpeg-2.8.3.tar.bz2/tests/ref/lavf/mxf_opatom
Changed
6
1
2
-6cab8f702746ca7184c608b4c06a224b *./tests/data/lavf/lavf.mxf_opatom
3
+2205907020248f73876eaad745d2f5b5 *./tests/data/lavf/lavf.mxf_opatom
4
4717113 ./tests/data/lavf/lavf.mxf_opatom
5
./tests/data/lavf/lavf.mxf_opatom CRC=0xbdd696b9
6
ffmpeg-2.8.1.tar.bz2/tests/ref/lavf/mxf_opatom_audio -> ffmpeg-2.8.3.tar.bz2/tests/ref/lavf/mxf_opatom_audio
Changed
7
1
2
-6c6064f154688e455ec494d425b525f5 *./tests/data/lavf/lavf.mxf_opatom_audio
3
-102457 ./tests/data/lavf/lavf.mxf_opatom_audio
4
+d4ad5a0faf410a9d9e99b3328143e89d *./tests/data/lavf/lavf.mxf_opatom_audio
5
+101945 ./tests/data/lavf/lavf.mxf_opatom_audio
6
./tests/data/lavf/lavf.mxf_opatom_audio CRC=0xd155c6ff
7
ffmpeg-2.8.1.tar.bz2/tests/ref/seek/lavf-mxf -> ffmpeg-2.8.3.tar.bz2/tests/ref/seek/lavf-mxf
Changed
72
1
2
-ret: 0 st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos: 6656 size: 24801
3
+ret: 0 st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos: 6144 size: 24801
4
ret: 0 st:-1 flags:0 ts:-1.000000
5
-ret: 0 st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos: 6656 size: 24801
6
+ret: 0 st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos: 6144 size: 24801
7
ret: 0 st:-1 flags:1 ts: 1.894167
8
-ret: 0 st: 0 flags:1 dts: 0.840000 pts: 0.960000 pos: 460800 size: 24711
9
+ret: 0 st: 0 flags:1 dts: 0.840000 pts: 0.960000 pos: 460288 size: 24711
10
ret: 0 st: 0 flags:0 ts: 0.800000
11
-ret: 0 st: 0 flags:1 dts: 0.840000 pts: 0.960000 pos: 460800 size: 24711
12
+ret: 0 st: 0 flags:1 dts: 0.840000 pts: 0.960000 pos: 460288 size: 24711
13
ret: 0 st: 0 flags:1 ts:-0.320000
14
-ret: 0 st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos: 6656 size: 24801
15
+ret: 0 st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos: 6144 size: 24801
16
ret:-1 st: 1 flags:0 ts: 2.576667
17
ret: 0 st: 1 flags:1 ts: 1.470833
18
-ret: 0 st: 0 flags:1 dts: 0.840000 pts: 0.960000 pos: 460800 size: 24711
19
+ret: 0 st: 0 flags:1 dts: 0.840000 pts: 0.960000 pos: 460288 size: 24711
20
ret: 0 st:-1 flags:0 ts: 0.365002
21
-ret: 0 st: 0 flags:1 dts: 0.360000 pts: 0.480000 pos: 211968 size: 24786
22
+ret: 0 st: 0 flags:1 dts: 0.360000 pts: 0.480000 pos: 211456 size: 24786
23
ret: 0 st:-1 flags:1 ts:-0.740831
24
-ret: 0 st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos: 6656 size: 24801
25
+ret: 0 st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos: 6144 size: 24801
26
ret:-1 st: 0 flags:0 ts: 2.160000
27
ret: 0 st: 0 flags:1 ts: 1.040000
28
-ret: 0 st: 0 flags:1 dts: 0.840000 pts: 0.960000 pos: 460800 size: 24711
29
+ret: 0 st: 0 flags:1 dts: 0.840000 pts: 0.960000 pos: 460288 size: 24711
30
ret: 0 st: 1 flags:0 ts:-0.058333
31
-ret: 0 st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos: 6656 size: 24801
32
+ret: 0 st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos: 6144 size: 24801
33
ret: 0 st: 1 flags:1 ts: 2.835833
34
-ret: 0 st: 0 flags:1 dts: 0.840000 pts: 0.960000 pos: 460800 size: 24711
35
+ret: 0 st: 0 flags:1 dts: 0.840000 pts: 0.960000 pos: 460288 size: 24711
36
ret:-1 st:-1 flags:0 ts: 1.730004
37
ret: 0 st:-1 flags:1 ts: 0.624171
38
-ret: 0 st: 0 flags:1 dts: 0.360000 pts: 0.480000 pos: 211968 size: 24786
39
+ret: 0 st: 0 flags:1 dts: 0.360000 pts: 0.480000 pos: 211456 size: 24786
40
ret: 0 st: 0 flags:0 ts:-0.480000
41
-ret: 0 st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos: 6656 size: 24801
42
+ret: 0 st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos: 6144 size: 24801
43
ret: 0 st: 0 flags:1 ts: 2.400000
44
-ret: 0 st: 0 flags:1 dts: 0.840000 pts: 0.960000 pos: 460800 size: 24711
45
+ret: 0 st: 0 flags:1 dts: 0.840000 pts: 0.960000 pos: 460288 size: 24711
46
ret:-1 st: 1 flags:0 ts: 1.306667
47
ret: 0 st: 1 flags:1 ts: 0.200833
48
-ret: 0 st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos: 6656 size: 24801
49
+ret: 0 st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos: 6144 size: 24801
50
ret: 0 st:-1 flags:0 ts:-0.904994
51
-ret: 0 st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos: 6656 size: 24801
52
+ret: 0 st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos: 6144 size: 24801
53
ret: 0 st:-1 flags:1 ts: 1.989173
54
-ret: 0 st: 0 flags:1 dts: 0.840000 pts: 0.960000 pos: 460800 size: 24711
55
+ret: 0 st: 0 flags:1 dts: 0.840000 pts: 0.960000 pos: 460288 size: 24711
56
ret: 0 st: 0 flags:0 ts: 0.880000
57
-ret: 0 st: 0 flags:1 dts: 0.840000 pts: 0.960000 pos: 460800 size: 24711
58
+ret: 0 st: 0 flags:1 dts: 0.840000 pts: 0.960000 pos: 460288 size: 24711
59
ret: 0 st: 0 flags:1 ts:-0.240000
60
-ret: 0 st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos: 6656 size: 24801
61
+ret: 0 st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos: 6144 size: 24801
62
ret:-1 st: 1 flags:0 ts: 2.671667
63
ret: 0 st: 1 flags:1 ts: 1.565833
64
-ret: 0 st: 0 flags:1 dts: 0.840000 pts: 0.960000 pos: 460800 size: 24711
65
+ret: 0 st: 0 flags:1 dts: 0.840000 pts: 0.960000 pos: 460288 size: 24711
66
ret: 0 st:-1 flags:0 ts: 0.460008
67
-ret: 0 st: 0 flags:1 dts: 0.360000 pts: 0.480000 pos: 211968 size: 24786
68
+ret: 0 st: 0 flags:1 dts: 0.360000 pts: 0.480000 pos: 211456 size: 24786
69
ret: 0 st:-1 flags:1 ts:-0.645825
70
-ret: 0 st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos: 6656 size: 24801
71
+ret: 0 st: 0 flags:1 dts:-0.040000 pts: 0.000000 pos: 6144 size: 24801
72
ffmpeg-2.8.1.tar.bz2/tests/ref/seek/lavf-mxf_opatom_audio -> ffmpeg-2.8.3.tar.bz2/tests/ref/seek/lavf-mxf_opatom_audio
Changed
82
1
2
-ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 5145 size: 3840
3
+ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 4633 size: 3840
4
ret: 0 st:-1 flags:0 ts:-1.000000
5
-ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 5145 size: 3840
6
+ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 4633 size: 3840
7
ret: 0 st:-1 flags:1 ts: 1.894167
8
-ret: 0 st: 0 flags:1 dts: 0.999979 pts: 0.999979 pos: 101143 size: 2
9
+ret: 0 st: 0 flags:1 dts: 0.999979 pts: 0.999979 pos: 100631 size: 2
10
ret: 0 st: 0 flags:0 ts: 0.788333
11
-ret: 0 st: 0 flags:1 dts: 0.788333 pts: 0.788333 pos: 80825 size: 3840
12
+ret: 0 st: 0 flags:1 dts: 0.788333 pts: 0.788333 pos: 80313 size: 3840
13
ret: 0 st: 0 flags:1 ts:-0.317500
14
-ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 5145 size: 3840
15
+ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 4633 size: 3840
16
ret: 0 st:-1 flags:0 ts: 2.576668
17
-ret: 0 st: 0 flags:1 dts: 0.999979 pts: 0.999979 pos: 101143 size: 2
18
+ret: 0 st: 0 flags:1 dts: 0.999979 pts: 0.999979 pos: 100631 size: 2
19
ret: 0 st:-1 flags:1 ts: 1.470835
20
-ret: 0 st: 0 flags:1 dts: 0.999979 pts: 0.999979 pos: 101143 size: 2
21
+ret: 0 st: 0 flags:1 dts: 0.999979 pts: 0.999979 pos: 100631 size: 2
22
ret: 0 st: 0 flags:0 ts: 0.365000
23
-ret: 0 st: 0 flags:1 dts: 0.365000 pts: 0.365000 pos: 40185 size: 3840
24
+ret: 0 st: 0 flags:1 dts: 0.365000 pts: 0.365000 pos: 39673 size: 3840
25
ret: 0 st: 0 flags:1 ts:-0.740833
26
-ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 5145 size: 3840
27
+ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 4633 size: 3840
28
ret: 0 st:-1 flags:0 ts: 2.153336
29
-ret: 0 st: 0 flags:1 dts: 0.999979 pts: 0.999979 pos: 101143 size: 2
30
+ret: 0 st: 0 flags:1 dts: 0.999979 pts: 0.999979 pos: 100631 size: 2
31
ret: 0 st:-1 flags:1 ts: 1.047503
32
-ret: 0 st: 0 flags:1 dts: 0.999979 pts: 0.999979 pos: 101143 size: 2
33
+ret: 0 st: 0 flags:1 dts: 0.999979 pts: 0.999979 pos: 100631 size: 2
34
ret: 0 st: 0 flags:0 ts:-0.058333
35
-ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 5145 size: 3840
36
+ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 4633 size: 3840
37
ret: 0 st: 0 flags:1 ts: 2.835833
38
-ret: 0 st: 0 flags:1 dts: 0.999979 pts: 0.999979 pos: 101143 size: 2
39
+ret: 0 st: 0 flags:1 dts: 0.999979 pts: 0.999979 pos: 100631 size: 2
40
ret: 0 st:-1 flags:0 ts: 1.730004
41
-ret: 0 st: 0 flags:1 dts: 0.999979 pts: 0.999979 pos: 101143 size: 2
42
+ret: 0 st: 0 flags:1 dts: 0.999979 pts: 0.999979 pos: 100631 size: 2
43
ret: 0 st:-1 flags:1 ts: 0.624171
44
-ret: 0 st: 0 flags:1 dts: 0.624167 pts: 0.624167 pos: 65065 size: 3840
45
+ret: 0 st: 0 flags:1 dts: 0.624167 pts: 0.624167 pos: 64553 size: 3840
46
ret: 0 st: 0 flags:0 ts:-0.481667
47
-ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 5145 size: 3840
48
+ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 4633 size: 3840
49
ret: 0 st: 0 flags:1 ts: 2.412500
50
-ret: 0 st: 0 flags:1 dts: 0.999979 pts: 0.999979 pos: 101143 size: 2
51
+ret: 0 st: 0 flags:1 dts: 0.999979 pts: 0.999979 pos: 100631 size: 2
52
ret: 0 st:-1 flags:0 ts: 1.306672
53
-ret: 0 st: 0 flags:1 dts: 0.999979 pts: 0.999979 pos: 101143 size: 2
54
+ret: 0 st: 0 flags:1 dts: 0.999979 pts: 0.999979 pos: 100631 size: 2
55
ret: 0 st:-1 flags:1 ts: 0.200839
56
-ret: 0 st: 0 flags:1 dts: 0.200833 pts: 0.200833 pos: 24425 size: 3840
57
+ret: 0 st: 0 flags:1 dts: 0.200833 pts: 0.200833 pos: 23913 size: 3840
58
ret: 0 st: 0 flags:0 ts:-0.905000
59
-ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 5145 size: 3840
60
+ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 4633 size: 3840
61
ret: 0 st: 0 flags:1 ts: 1.989167
62
-ret: 0 st: 0 flags:1 dts: 0.999979 pts: 0.999979 pos: 101143 size: 2
63
+ret: 0 st: 0 flags:1 dts: 0.999979 pts: 0.999979 pos: 100631 size: 2
64
ret: 0 st:-1 flags:0 ts: 0.883340
65
-ret: 0 st: 0 flags:1 dts: 0.883333 pts: 0.883333 pos: 89945 size: 3840
66
+ret: 0 st: 0 flags:1 dts: 0.883333 pts: 0.883333 pos: 89433 size: 3840
67
ret: 0 st:-1 flags:1 ts:-0.222493
68
-ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 5145 size: 3840
69
+ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 4633 size: 3840
70
ret: 0 st: 0 flags:0 ts: 2.671667
71
-ret: 0 st: 0 flags:1 dts: 0.999979 pts: 0.999979 pos: 101143 size: 2
72
+ret: 0 st: 0 flags:1 dts: 0.999979 pts: 0.999979 pos: 100631 size: 2
73
ret: 0 st: 0 flags:1 ts: 1.565833
74
-ret: 0 st: 0 flags:1 dts: 0.999979 pts: 0.999979 pos: 101143 size: 2
75
+ret: 0 st: 0 flags:1 dts: 0.999979 pts: 0.999979 pos: 100631 size: 2
76
ret: 0 st:-1 flags:0 ts: 0.460008
77
-ret: 0 st: 0 flags:1 dts: 0.460000 pts: 0.460000 pos: 49305 size: 3840
78
+ret: 0 st: 0 flags:1 dts: 0.460000 pts: 0.460000 pos: 48793 size: 3840
79
ret: 0 st:-1 flags:1 ts:-0.645825
80
-ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 5145 size: 3840
81
+ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 4633 size: 3840
82
Refresh
No build results available
Refresh
No rpmlint results available
Login required, please
login
or
signup
in order to comment
Request History
enzokiel created request over 9 years ago
update internal ffmpeg to version 2.8.3
enzokiel accepted request over 9 years ago
OK