~ubuntu-branches/ubuntu/quantal/libav/quantal-updates

« back to all changes in this revision

Viewing changes to libavcodec/vc1dsp.c

  • Committer: Package Import Robot
  • Author(s): Micah Gersten
  • Date: 2012-03-21 21:18:24 UTC
  • mfrom: (1.2.10)
  • Revision ID: package-import@ubuntu.com-20120321211824-n63p3v3s99q3mxrb
Tags: 4:0.8.1-0ubuntu1
* New upstream bug and security fix release (FFe: LP: #960949)
  - fixes the following CVEs:
    CVE-2012-0848, CVE-2012-0853, CVE-2012-0858, CVE-2011-3929,
    CVE-2011-3936, CVE-2011-3937, CVE-2011-3940, CVE-2011-3945,
    CVE-2011-3947, CVE-2011-3951, CVE-2011-3952

* Pull fix from Debian git to fix installation of avserver.conf and
  recordshow.sh into libav-tools; Thanks to Julien Cristau for spotting this!
  - update debian/rules

Show diffs side-by-side

added added

removed removed

Lines of Context:
139
139
 * @see 8.6
140
140
 */
141
141
static av_always_inline int vc1_filter_line(uint8_t* src, int stride, int pq){
142
 
    uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
143
 
 
144
142
    int a0 = (2*(src[-2*stride] - src[ 1*stride]) - 5*(src[-1*stride] - src[ 0*stride]) + 4) >> 3;
145
143
    int a0_sign = a0 >> 31;        /* Store sign */
146
144
    a0 = (a0 ^ a0_sign) - a0_sign; /* a0 = FFABS(a0); */
163
161
                else{
164
162
                    d = FFMIN(d, clip);
165
163
                    d = (d ^ d_sign) - d_sign;          /* Restore sign */
166
 
                    src[-1*stride] = cm[src[-1*stride] - d];
167
 
                    src[ 0*stride] = cm[src[ 0*stride] + d];
 
164
                    src[-1*stride] = av_clip_uint8(src[-1*stride] - d);
 
165
                    src[ 0*stride] = av_clip_uint8(src[ 0*stride] + d);
168
166
                }
169
167
                return 1;
170
168
            }
234
232
{
235
233
    int i;
236
234
    int dc = block[0];
237
 
    const uint8_t *cm;
238
235
    dc = (3 * dc +  1) >> 1;
239
236
    dc = (3 * dc + 16) >> 5;
240
 
    cm = ff_cropTbl + MAX_NEG_CROP + dc;
241
237
    for(i = 0; i < 8; i++){
242
 
        dest[0] = cm[dest[0]];
243
 
        dest[1] = cm[dest[1]];
244
 
        dest[2] = cm[dest[2]];
245
 
        dest[3] = cm[dest[3]];
246
 
        dest[4] = cm[dest[4]];
247
 
        dest[5] = cm[dest[5]];
248
 
        dest[6] = cm[dest[6]];
249
 
        dest[7] = cm[dest[7]];
 
238
        dest[0] = av_clip_uint8(dest[0] + dc);
 
239
        dest[1] = av_clip_uint8(dest[1] + dc);
 
240
        dest[2] = av_clip_uint8(dest[2] + dc);
 
241
        dest[3] = av_clip_uint8(dest[3] + dc);
 
242
        dest[4] = av_clip_uint8(dest[4] + dc);
 
243
        dest[5] = av_clip_uint8(dest[5] + dc);
 
244
        dest[6] = av_clip_uint8(dest[6] + dc);
 
245
        dest[7] = av_clip_uint8(dest[7] + dc);
250
246
        dest += linesize;
251
247
    }
252
248
}
326
322
{
327
323
    int i;
328
324
    int dc = block[0];
329
 
    const uint8_t *cm;
330
325
    dc = ( 3 * dc +  1) >> 1;
331
326
    dc = (17 * dc + 64) >> 7;
332
 
    cm = ff_cropTbl + MAX_NEG_CROP + dc;
333
327
    for(i = 0; i < 4; i++){
334
 
        dest[0] = cm[dest[0]];
335
 
        dest[1] = cm[dest[1]];
336
 
        dest[2] = cm[dest[2]];
337
 
        dest[3] = cm[dest[3]];
338
 
        dest[4] = cm[dest[4]];
339
 
        dest[5] = cm[dest[5]];
340
 
        dest[6] = cm[dest[6]];
341
 
        dest[7] = cm[dest[7]];
 
328
        dest[0] = av_clip_uint8(dest[0] + dc);
 
329
        dest[1] = av_clip_uint8(dest[1] + dc);
 
330
        dest[2] = av_clip_uint8(dest[2] + dc);
 
331
        dest[3] = av_clip_uint8(dest[3] + dc);
 
332
        dest[4] = av_clip_uint8(dest[4] + dc);
 
333
        dest[5] = av_clip_uint8(dest[5] + dc);
 
334
        dest[6] = av_clip_uint8(dest[6] + dc);
 
335
        dest[7] = av_clip_uint8(dest[7] + dc);
342
336
        dest += linesize;
343
337
    }
344
338
}
348
342
    int i;
349
343
    register int t1,t2,t3,t4,t5,t6,t7,t8;
350
344
    DCTELEM *src, *dst;
351
 
    const uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
352
345
 
353
346
    src = block;
354
347
    dst = block;
388
381
        t3 = 22 * src[ 8] + 10 * src[24];
389
382
        t4 = 22 * src[24] - 10 * src[ 8];
390
383
 
391
 
        dest[0*linesize] = cm[dest[0*linesize] + ((t1 + t3) >> 7)];
392
 
        dest[1*linesize] = cm[dest[1*linesize] + ((t2 - t4) >> 7)];
393
 
        dest[2*linesize] = cm[dest[2*linesize] + ((t2 + t4) >> 7)];
394
 
        dest[3*linesize] = cm[dest[3*linesize] + ((t1 - t3) >> 7)];
 
384
        dest[0*linesize] = av_clip_uint8(dest[0*linesize] + ((t1 + t3) >> 7));
 
385
        dest[1*linesize] = av_clip_uint8(dest[1*linesize] + ((t2 - t4) >> 7));
 
386
        dest[2*linesize] = av_clip_uint8(dest[2*linesize] + ((t2 + t4) >> 7));
 
387
        dest[3*linesize] = av_clip_uint8(dest[3*linesize] + ((t1 - t3) >> 7));
395
388
 
396
389
        src ++;
397
390
        dest++;
404
397
{
405
398
    int i;
406
399
    int dc = block[0];
407
 
    const uint8_t *cm;
408
400
    dc = (17 * dc +  4) >> 3;
409
401
    dc = (12 * dc + 64) >> 7;
410
 
    cm = ff_cropTbl + MAX_NEG_CROP + dc;
411
402
    for(i = 0; i < 8; i++){
412
 
        dest[0] = cm[dest[0]];
413
 
        dest[1] = cm[dest[1]];
414
 
        dest[2] = cm[dest[2]];
415
 
        dest[3] = cm[dest[3]];
 
403
        dest[0] = av_clip_uint8(dest[0] + dc);
 
404
        dest[1] = av_clip_uint8(dest[1] + dc);
 
405
        dest[2] = av_clip_uint8(dest[2] + dc);
 
406
        dest[3] = av_clip_uint8(dest[3] + dc);
416
407
        dest += linesize;
417
408
    }
418
409
}
422
413
    int i;
423
414
    register int t1,t2,t3,t4,t5,t6,t7,t8;
424
415
    DCTELEM *src, *dst;
425
 
    const uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
426
416
 
427
417
    src = block;
428
418
    dst = block;
458
448
        t3 =  9 * src[ 8] - 16 * src[24] +  4 * src[40] + 15 * src[56];
459
449
        t4 =  4 * src[ 8] -  9 * src[24] + 15 * src[40] - 16 * src[56];
460
450
 
461
 
        dest[0*linesize] = cm[dest[0*linesize] + ((t5 + t1) >> 7)];
462
 
        dest[1*linesize] = cm[dest[1*linesize] + ((t6 + t2) >> 7)];
463
 
        dest[2*linesize] = cm[dest[2*linesize] + ((t7 + t3) >> 7)];
464
 
        dest[3*linesize] = cm[dest[3*linesize] + ((t8 + t4) >> 7)];
465
 
        dest[4*linesize] = cm[dest[4*linesize] + ((t8 - t4 + 1) >> 7)];
466
 
        dest[5*linesize] = cm[dest[5*linesize] + ((t7 - t3 + 1) >> 7)];
467
 
        dest[6*linesize] = cm[dest[6*linesize] + ((t6 - t2 + 1) >> 7)];
468
 
        dest[7*linesize] = cm[dest[7*linesize] + ((t5 - t1 + 1) >> 7)];
 
451
        dest[0*linesize] = av_clip_uint8(dest[0*linesize] + ((t5 + t1) >> 7));
 
452
        dest[1*linesize] = av_clip_uint8(dest[1*linesize] + ((t6 + t2) >> 7));
 
453
        dest[2*linesize] = av_clip_uint8(dest[2*linesize] + ((t7 + t3) >> 7));
 
454
        dest[3*linesize] = av_clip_uint8(dest[3*linesize] + ((t8 + t4) >> 7));
 
455
        dest[4*linesize] = av_clip_uint8(dest[4*linesize] + ((t8 - t4 + 1) >> 7));
 
456
        dest[5*linesize] = av_clip_uint8(dest[5*linesize] + ((t7 - t3 + 1) >> 7));
 
457
        dest[6*linesize] = av_clip_uint8(dest[6*linesize] + ((t6 - t2 + 1) >> 7));
 
458
        dest[7*linesize] = av_clip_uint8(dest[7*linesize] + ((t5 - t1 + 1) >> 7));
469
459
 
470
460
        src ++;
471
461
        dest++;
478
468
{
479
469
    int i;
480
470
    int dc = block[0];
481
 
    const uint8_t *cm;
482
471
    dc = (17 * dc +  4) >> 3;
483
472
    dc = (17 * dc + 64) >> 7;
484
 
    cm = ff_cropTbl + MAX_NEG_CROP + dc;
485
473
    for(i = 0; i < 4; i++){
486
 
        dest[0] = cm[dest[0]];
487
 
        dest[1] = cm[dest[1]];
488
 
        dest[2] = cm[dest[2]];
489
 
        dest[3] = cm[dest[3]];
 
474
        dest[0] = av_clip_uint8(dest[0] + dc);
 
475
        dest[1] = av_clip_uint8(dest[1] + dc);
 
476
        dest[2] = av_clip_uint8(dest[2] + dc);
 
477
        dest[3] = av_clip_uint8(dest[3] + dc);
490
478
        dest += linesize;
491
479
    }
492
480
}
496
484
    int i;
497
485
    register int t1,t2,t3,t4;
498
486
    DCTELEM *src, *dst;
499
 
    const uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
500
487
 
501
488
    src = block;
502
489
    dst = block;
522
509
        t3 = 22 * src[ 8] + 10 * src[24];
523
510
        t4 = 22 * src[24] - 10 * src[ 8];
524
511
 
525
 
        dest[0*linesize] = cm[dest[0*linesize] + ((t1 + t3) >> 7)];
526
 
        dest[1*linesize] = cm[dest[1*linesize] + ((t2 - t4) >> 7)];
527
 
        dest[2*linesize] = cm[dest[2*linesize] + ((t2 + t4) >> 7)];
528
 
        dest[3*linesize] = cm[dest[3*linesize] + ((t1 - t3) >> 7)];
 
512
        dest[0*linesize] = av_clip_uint8(dest[0*linesize] + ((t1 + t3) >> 7));
 
513
        dest[1*linesize] = av_clip_uint8(dest[1*linesize] + ((t2 - t4) >> 7));
 
514
        dest[2*linesize] = av_clip_uint8(dest[2*linesize] + ((t2 + t4) >> 7));
 
515
        dest[3*linesize] = av_clip_uint8(dest[3*linesize] + ((t1 - t3) >> 7));
529
516
 
530
517
        src ++;
531
518
        dest++;