Overview

Request 2278 (accepted)

update internal ffmpeg to version 2.8.3

Submit package home:enzokiel:...hes:Multimedia / avidemux3 to package Multimedia / avidemux3

avidemux3.changes Changed
x
 
1
@@ -1,4 +1,9 @@
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
@@ -16,7 +16,7 @@
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
@@ -1,6 +1,87 @@
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
@@ -31,7 +112,7 @@
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
@@ -1,1 +1,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
@@ -1,1 +1,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
@@ -5240,7 +5240,7 @@
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
@@ -31,7 +31,7 @@
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
@@ -1205,9 +1205,9 @@
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
@@ -839,6 +839,21 @@
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
@@ -2447,6 +2447,9 @@
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
@@ -2462,6 +2465,7 @@
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
@@ -2889,6 +2889,11 @@
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
@@ -940,7 +940,7 @@
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
@@ -169,6 +169,10 @@
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
@@ -188,6 +192,10 @@
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
@@ -208,7 +216,10 @@
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
@@ -397,7 +408,8 @@
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
@@ -70,6 +70,7 @@
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
@@ -177,6 +178,7 @@
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
@@ -1032,6 +1034,7 @@
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
@@ -1412,7 +1415,7 @@
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
@@ -1449,6 +1452,12 @@
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
@@ -1458,6 +1467,7 @@
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
@@ -113,7 +113,7 @@
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
@@ -51,7 +51,7 @@
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
@@ -64,6 +64,9 @@
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
@@ -56,7 +56,7 @@
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
@@ -74,7 +74,8 @@
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
@@ -190,7 +191,8 @@
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
@@ -141,6 +141,12 @@
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
@@ -642,9 +648,18 @@
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
@@ -666,6 +681,12 @@
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
@@ -123,7 +123,7 @@
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
@@ -348,11 +348,11 @@
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
@@ -346,7 +346,7 @@
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
@@ -65,7 +65,7 @@
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
@@ -108,7 +108,7 @@
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
@@ -381,14 +381,19 @@
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
@@ -413,7 +418,7 @@
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
@@ -442,7 +447,7 @@
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
@@ -675,7 +680,7 @@
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
@@ -189,6 +189,10 @@
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
@@ -66,7 +66,7 @@
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
@@ -80,10 +80,15 @@
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
@@ -408,6 +408,7 @@
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
@@ -568,7 +569,7 @@
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
@@ -939,6 +940,7 @@
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
@@ -413,6 +413,10 @@
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
@@ -440,6 +444,10 @@
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
@@ -2026,6 +2026,7 @@
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
@@ -2042,7 +2043,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
@@ -1097,6 +1097,7 @@
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
@@ -1177,6 +1178,15 @@
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
@@ -2362,9 +2372,11 @@
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
@@ -834,6 +834,10 @@
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
@@ -417,8 +417,8 @@
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
@@ -30,6 +30,7 @@
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
@@ -310,7 +311,7 @@
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
@@ -28,6 +28,7 @@
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
@@ -210,9 +211,17 @@
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
@@ -450,7 +459,7 @@
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
@@ -174,21 +174,21 @@
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
@@ -197,8 +197,8 @@
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
@@ -208,8 +208,8 @@
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
@@ -30,6 +30,7 @@
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
@@ -279,6 +280,10 @@
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
@@ -826,10 +831,10 @@
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
@@ -1809,8 +1814,10 @@
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
@@ -1868,6 +1875,10 @@
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
@@ -534,7 +534,7 @@
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
@@ -623,7 +623,7 @@
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
@@ -662,7 +662,7 @@
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
@@ -708,7 +708,7 @@
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
@@ -42,7 +42,7 @@
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
@@ -57,7 +57,7 @@
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
@@ -164,6 +164,8 @@
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
@@ -82,11 +82,33 @@
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
@@ -94,6 +116,21 @@
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
@@ -319,6 +319,26 @@
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
@@ -335,6 +355,27 @@
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
@@ -4,6 +4,7 @@
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
@@ -25,6 +26,1011 @@
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
@@ -276,3 +1282,1219 @@
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
@@ -98,6 +98,15 @@
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
@@ -112,9 +121,7 @@
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
@@ -267,7 +274,6 @@
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
@@ -275,6 +281,11 @@
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
@@ -1093,7 +1104,10 @@
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
@@ -1161,7 +1175,10 @@
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
@@ -1953,7 +1953,7 @@
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
@@ -815,6 +815,7 @@
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
@@ -565,8 +565,8 @@
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
@@ -585,7 +585,7 @@
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
@@ -663,7 +663,10 @@
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
@@ -1012,7 +1015,7 @@
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
@@ -1052,6 +1055,8 @@
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
@@ -137,6 +137,7 @@
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
@@ -670,6 +670,10 @@
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
@@ -632,7 +632,7 @@
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
@@ -656,7 +656,7 @@
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
@@ -3490,7 +3490,7 @@
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
@@ -164,7 +164,7 @@
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
@@ -1623,6 +1623,11 @@
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
@@ -194,8 +194,12 @@
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
@@ -251,12 +255,15 @@
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
@@ -205,7 +205,7 @@
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
@@ -314,7 +314,7 @@
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
@@ -73,6 +73,8 @@
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
@@ -110,6 +112,13 @@
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
@@ -135,6 +144,11 @@
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
@@ -205,16 +219,29 @@
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
@@ -352,6 +379,60 @@
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
@@ -525,6 +606,14 @@
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
@@ -534,6 +623,12 @@
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
@@ -557,6 +652,7 @@
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
@@ -642,6 +738,14 @@
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
@@ -720,6 +824,8 @@
179
                     seg->url_offset = 0;
180
                     seg_offset = 0;
181
                 }
182
+
183
+                seg->init_section = cur_init_section;
184
             }
185
         }
186
     }
187
@@ -733,17 +839,22 @@
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
@@ -866,12 +977,13 @@
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
@@ -892,7 +1004,6 @@
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
@@ -924,7 +1035,7 @@
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
@@ -938,7 +1049,7 @@
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
@@ -958,20 +1069,10 @@
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
@@ -979,9 +1080,6 @@
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
@@ -999,14 +1097,12 @@
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
@@ -1055,11 +1151,70 @@
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
@@ -1080,6 +1235,7 @@
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
@@ -1133,7 +1289,14 @@
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
@@ -1145,7 +1308,15 @@
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
@@ -1613,6 +1784,7 @@
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
@@ -103,6 +103,7 @@
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
@@ -197,6 +198,7 @@
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
@@ -54,7 +54,7 @@
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
@@ -3088,6 +3088,7 @@
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
@@ -3294,7 +3294,7 @@
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
@@ -3312,15 +3312,6 @@
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
@@ -3334,24 +3325,33 @@
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
@@ -3541,7 +3541,106 @@
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
@@ -3799,6 +3898,7 @@
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
@@ -3922,9 +4022,9 @@
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
@@ -4529,6 +4629,52 @@
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
@@ -4539,19 +4685,11 @@
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
@@ -4629,12 +4767,41 @@
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
@@ -42,6 +42,9 @@
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
@@ -54,7 +57,7 @@
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
@@ -374,12 +377,21 @@
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
@@ -420,7 +432,7 @@
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
@@ -434,6 +446,8 @@
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
@@ -461,7 +475,7 @@
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
@@ -841,6 +841,7 @@
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
@@ -1776,6 +1776,16 @@
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
@@ -19,7 +19,8 @@
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
@@ -321,6 +322,7 @@
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
@@ -378,7 +380,6 @@
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
@@ -398,9 +399,6 @@
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
@@ -446,6 +444,12 @@
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
@@ -523,10 +527,12 @@
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
@@ -534,10 +540,15 @@
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
@@ -1251,14 +1262,15 @@
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
@@ -1293,10 +1305,12 @@
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
@@ -2036,6 +2050,9 @@
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
@@ -2654,6 +2671,8 @@
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
@@ -2668,6 +2687,8 @@
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
@@ -184,9 +184,14 @@
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
@@ -1136,7 +1136,6 @@
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
@@ -1156,7 +1155,7 @@
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
@@ -1167,7 +1166,6 @@
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
@@ -3139,7 +3139,7 @@
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
@@ -549,16 +549,17 @@
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
@@ -126,6 +126,8 @@
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
@@ -144,14 +146,15 @@
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
@@ -76,6 +76,17 @@
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
@@ -77,6 +77,9 @@
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
@@ -97,6 +97,48 @@
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
@@ -36,7 +36,7 @@
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
@@ -90,7 +90,7 @@
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
@@ -98,7 +98,10 @@
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
@@ -108,20 +111,27 @@
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
@@ -143,7 +153,12 @@
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
@@ -163,7 +178,9 @@
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
@@ -231,6 +231,10 @@
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
@@ -61,6 +61,7 @@
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
@@ -366,16 +366,16 @@
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
@@ -1,9 +1,9 @@
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
@@ -1,3 +1,3 @@
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
@@ -1,3 +1,3 @@
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
@@ -1,3 +1,3 @@
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
@@ -1,48 +1,48 @@
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
@@ -1,53 +1,53 @@
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

Request History
enzokiel's avatar

enzokiel created request over 9 years ago

update internal ffmpeg to version 2.8.3


enzokiel's avatar

enzokiel accepted request over 9 years ago

OK