在ADSP-BF561上使用x264(3):正确性验证

快乐虾

http://blog.csdn.net/lights_joy/

[email protected]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文适用于

ADSP-BF561

Visual DSP++ 5.0 (update 7)

x264-snapshot-20091118-2245

 

 

 

 

 

欢迎转载,但请保留作者信息

 

移植完成后就需要进行正确性验证了。

首先将561CCLK调整到600MSCLK调整到100M,再打开编译器的优化。

因为希望达到adi264编码库的水平,因此直接采用adi264编码库中提供的测试视频做为输入源,用下面的参数调用x264进行压缩:

     x264 -o my.264 f://media//enc-demo-320x240.eyuv

这是一段320x240YV12格式的视频,共300帧。

不想第一次运行发生了一个错误:

       Device 0:a: x264 [info]: 320x240 (given by file name) @ 25.00 fps

       x264 [info]: using cpu capabilities: none!

       x264 [error]: MV cost test failed: x264 has been miscompiled!

       x264 [error]: x264_encoder_open failed

查了下原因,错误发生在计算mv_cost的时候:

int x264_analyse_init_costs( x264_t *h, int qp )

{

…………

    for( i = 0; i <= 2*4*2048; i++ )

    {

        h->cost_mv[lambda][-i] =

        h->cost_mv[lambda][i]  = lambda * (log2f(i+1)*2 + 0.718f + !!i) + .5f;

}

…………

}

在这里,由于vdsp没有直接提供log2f函数,这是我们自己添加的,编译器自然没有看到log2f的函数声明,因而自以为是地认为它将返回一个整数,故此计算出错。

config.h里加上函数声明:

extern float log2f(float x);

OK了。

接下来运行:

       Device 0:a: x264 [info]: 320x240 (given by file name) @ 25.00 fps

       x264 [info]: using cpu capabilities: none!

       x264 [info]: profile High, level 1.3

       [0.3%] 1/301 frames, 5076.14 fps, 5612.40 kb/s, eta 0:00:00 

       [0.7%] 2/301 frames, 8230.45 fps, 3359.50 kb/s, eta 0:00:00 

       [1.0%] 3/301 frames, 11235.96 fps, 2274.20 kb/s, eta 0:00:00 

显然,这里的帧率和码率的计算是错误的,原因在于x264使用了一个叫x264_mdate的函数来计算时间:

int64_t x264_mdate( void )

{

#ifndef __MINGW32__

    struct timeval tv_date;

    gettimeofday( &tv_date, NULL );

    return( (int64_t) tv_date.tv_sec * 1000000 + (int64_t) tv_date.tv_usec );

#else

    struct _timeb tb;

    _ftime(&tb);

    return ((int64_t)tb.time * (1000) + (int64_t)tb.millitm) * (1000);

#endif

     return 0;

}

显然我们在这里犯了错误,由于在系统中这个函数的作用仅仅是计算时间差做为依据,因而我们用clock代替它:

int64_t x264_mdate( void )

{

     return clock() / CCLK;

}

clock函数将返回自程序启动以来的tick数,我们将之除以内核的运行频率(以M为单位),自然就得到了自程序启动以来的微秒数。

再运行:

       Device 0:a: x264 [info]: 320x240 (given by file name) @ 25.00 fps

       x264 [info]: using cpu capabilities: none!

       x264 [info]: profile High, level 1.3

       [0.3%] 1/301 frames, 0.00 fps, 5612.40 kb/s, eta 19:42:44 

       [0.7%] 2/301 frames, 0.01 fps, 3359.50 kb/s, eta 12:07:15 

       [1.0%] 3/301 frames, 0.01 fps, 2274.20 kb/s, eta 8:51:35 

       [1.3%] 4/301 frames, 0.01 fps, 1951.05 kb/s, eta 8:32:14 

………………

       [49.5%] 149/301 frames, 0.01 fps, 689.16 kb/s, eta 2:52:01 

       [49.8%] 150/301 frames, 0.01 fps, 692.47 kb/s, eta 2:51:29 

       [50.2%] 151/301 frames, 0.01 fps, 687.98 kb/s, eta 2:49:39 

       [50.5%] 152/301 frames, 0.01 fps, 692.33 kb/s, eta 2:49:05 

…………………

       [89.7%] 270/301 frames, 0.01 fps, 823.95 kb/s, eta 0:35:07 

       [90.0%] 271/301 frames, 0.01 fps, 820.94 kb/s, eta 0:33:55 

       [90.4%] 272/301 frames, 0.01 fps, 824.79 kb/s, eta 0:32:49 

…………..

       [99.3%] 299/301 frames, 0.01 fps, 817.51 kb/s, eta 0:02:13 

       [99.7%] 300/301 frames, 0.01 fps, 814.85 kb/s, eta 0:01:06 

       [100.0%] 301/301 frames, 0.02 fps, 812.22 kb/s, eta 0:00:00 

                                                                                     

       x264 [info]: frame I:2     Avg QP:19.15  size: 32354

       x264 [info]: frame P:156   Avg QP:22.17  size:  6896

       x264 [info]: frame B:143   Avg QP:27.90  size:   573

       x264 [info]: consecutive B-frames:  5.7% 90.3%  4.0%  0.0%

       x264 [info]: mb I  I16..4:  0.5% 30.3% 69.2%

       x264 [info]: mb P  I16..4:  0.0%  0.1%  0.2%  P16..4: 39.7% 24.8% 29.0%  0.0%  0.0%    skip: 6.1%

       x264 [info]: mb B  I16..4:  0.0%  0.0%  0.0%  B16..8: 24.7%  1.1%  2.6%  direct: 7.2%  skip:64.5%  L0:40.6% L1:34.6% BI:24.8%

       x264 [info]: 8x8 transform intra:30.9% inter:29.9%

       x264 [info]: coded y,uvDC,uvAC intra: 99.7% 100.0% 98.4% inter: 38.7% 39.1% 31.5%

       x264 [info]: i16 v,h,dc,p:  0%  0%  0% 100%

       x264 [info]: i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 11% 10% 14% 12% 10%  8%  7% 13% 15%

       x264 [info]: i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 14%  9% 11% 11% 10% 11%  8% 12% 13%

       x264 [info]: Weighted P-Frames: Y:0.0%

       x264 [info]: ref P L0: 49.8% 25.6%  9.7% 14.9%

       x264 [info]: ref B L0: 79.9% 20.1%

       x264 [info]: kb/s:812.22

      

       encoded 301 frames, 0.02 fps, 812.22 kb/s

这个速度不是一般的慢。

vlc对生成的my.264进行解码,一切OK

 

再用baseline profile跑一下:

     x264 profile baseline -o my.264 f://media//enc-demo-320x240.eyuv

       Device 0:a: x264 [info]: 320x240 (given by file name) @ 25.00 fps

       x264 [info]: using cpu capabilities: none!

       x264 [info]: profile Baseline, level 1.3

       [0.3%] 1/301 frames, 0.03 fps, 5262.60 kb/s, eta 3:07:48 

       [0.7%] 2/301 frames, 0.04 fps, 2975.30 kb/s, eta 2:00:19 

       [1.0%] 3/301 frames, 0.05 fps, 2289.33 kb/s, eta 1:47:20 

……………

       [99.3%] 299/301 frames, 0.06 fps, 1089.09 kb/s, eta 0:00:31 

       [99.7%] 300/301 frames, 0.06 fps, 1085.47 kb/s, eta 0:00:15 

       [100.0%] 301/301 frames, 0.06 fps, 1081.88 kb/s, eta 0:00:00 

                                                                                     

       x264 [info]: frame I:2     Avg QP:20.08  size: 30999

       x264 [info]: frame P:299   Avg QP:23.04  size:  5238

       x264 [info]: mb I  I16..4:  2.3%  0.0% 97.7%

       x264 [info]: mb P  I16..4:  0.0%  0.0%  0.1%  P16..4: 46.6% 22.8% 15.0%  0.0%  0.0%    skip:15.5%

       x264 [info]: coded y,uvDC,uvAC intra: 99.6% 100.0% 98.9% inter: 51.1% 55.4% 44.2%

       x264 [info]: i16 v,h,dc,p:  0%  0% 67% 33%

       x264 [info]: i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 14% 10% 11% 12%  9% 10%  8% 13% 13%

       x264 [info]: ref P L0: 65.3% 16.3% 18.4%

       x264 [info]: kb/s:1081.88

      

       encoded 301 frames, 0.06 fps, 1081.88 kb/s

300帧图像编码完成总共用了 0x294 * 2^32 CYCLE

 

现在我们有了一个可以正确运行的版本,虽然它很慢。

下面我们先针对baseline profile进行优化。

 

 

近日,我家6岁的小姑娘参加了第六届POP全国少儿英语风采大赛,拉票进行中(2011-6-15前)。

请帮忙点击新东方网站的链接:

http://popdasai.xdf.cn/toupiao.php?do=space&uid=4237

投她一票,谢谢!

1       参考资料

ADSP-BF561软件优化(2):移植x264(2009-11-19)

ADSP-BF561软件优化(1):开篇(2009-11-18)

 

 

 

 

你可能感兴趣的:(优化,struct,File,lambda,float,编译器)