CubieBoard中文论坛

 找回密码
 立即注册
搜索
热搜: unable
查看: 17572|回复: 12

求解,请版主急看,需要H264的全志编码库libh264enc.a的代码

[复制链接]
发表于 2013-5-25 18:28:43 | 显示全部楼层 |阅读模式
由于本人正在做H264相关的程序,因为用查了相关的A10资料,知道A10提供H264的硬编码方式,之前测试用x264软方式在cubieboard上编码,cpu占用率98%,太高了,无法承受,所以需要用A10的硬编码方式,首先现在H264是主流的编码方式,经过我的寻找论坛上没有一个人用硬编码方式,这个让我很奇怪,首先主流的编码方式不用的话,这块会有技术瓶颈,根据全志A10的官方git,只提供了android和armel平台的这个libh264enc.a文件,但是由于cubieboard发现的保准版linux系统为linaro 1.1 是armhf平台的,所以无法使用这个库,而且因为android的视频方面的很多能力不支持,所以首先放弃android平台的的视频开发,那么因为官方的cubiebaord给的这个linaro 1.1还是非常稳定和强大的,所以还是喜欢在这个上边开发,但是苦于没有这个全志提供的H264的硬编码库很是郁闷,所以请各方搞视频的人注意了,首先希望版主联系官方全志获取这个库的代码,或者是armhf平带的这个库和头文件,否则很耽误视频开放方面的研究和进展!相关全志的代码请看:https://github.com/linux-sunxi/cedarx-libs/tree/master/libcedarv    没有对armhf平台很好的支持!
回复

使用道具 举报

发表于 2013-5-27 09:25:36 | 显示全部楼层
晚看了,顶啊啊啊啊啊
回复 支持 反对

使用道具 举报

发表于 2013-5-27 14:30:10 | 显示全部楼层
LZ,等你贡献了,移植一下吧,让大家都用上
回复 支持 反对

使用道具 举报

发表于 2013-7-15 11:37:27 | 显示全部楼层
nand和cedarx都是allwinner较为封闭的2个东西,支持很有限的。
回复 支持 反对

使用道具 举报

发表于 2014-2-23 21:16:19 | 显示全部楼层
  1. int __fastcall H264EncOpen(struct_v10 **a1)
  2. {
  3.   signed __int16 v2; // [sp+10Ch] [bp-30h]@2
  4.   unsigned int v3; // [sp+110h] [bp-2Ch]@5
  5.   struct_v10 **v4; // [sp+114h] [bp-28h]@1
  6.   unsigned int v5; // [sp+11Ch] [bp-20h]@7
  7.   signed int v6; // [sp+11Ch] [bp-20h]@13
  8.   signed int v7; // [sp+120h] [bp-1Ch]@7
  9.   signed int i; // [sp+124h] [bp-18h]@7
  10.   signed int j; // [sp+124h] [bp-18h]@13
  11.   struct_v10 *v10; // [sp+128h] [bp-14h]@1

  12.   v4 = a1;
  13.   v10 = *a1;
  14.   if ( *a1 )
  15.   {
  16.     v10->dword120 = cedar_sys_phymalloc_map(0x800000, 1024);
  17.     if ( v10->dword120 )
  18.     {
  19.       v10->dword124 = cedarv_address_vir2phy(v10->dword120);
  20.       v10->dword128 = v10->dword124 + 0x7FFFFF;
  21.       v10->dword130 = 0;
  22.       v10->dword12C = 0;
  23.       v10->wordB8 = 2;
  24.       v10->wordBA = 2;
  25.       v3 = v10->dword80;
  26.       if ( v3 <= 0x14 && (1 << v3) & 0x160000 )
  27.       {
  28.         v10->word2 = v10->word7C;
  29.         v10->word0 = v10->word7E;
  30.         v10->byte4 &= 0xFCu;
  31.         v10->byte4 &= 0xF3u;
  32.         v10->byte4 &= 0x8Fu;
  33.         v10->byte4 &= 0x7Fu;
  34.         v10->byte5 = v10->byte1CD5 & 1 | v10->byte5 & 0xFE;
  35.         v10->byte5 &= 0xFDu;
  36.         v10->byte5 = 4 * (v10->byte1CD6 & 3) | v10->byte5 & 0xF3;
  37.         v10->byte5 = 16 * (v10->byte1CD8 & 3) | v10->byte5 & 0xCF;
  38.         v10->byte5 &= 0x3Fu;
  39.         v10->byte6 = v10->dword1CDC & 0xF | v10->byte6 & 0xF0;
  40.         v10->byte6 = 16 * (v10->dword1CE0 & 0xF) | v10->byte6 & 0xF;
  41.         v10->byte7 &= 0x80u;
  42.         v10->byte7 |= 0x80u;
  43.         v10->byte8 = v10->dwordB0 & 0x3F | v10->byte8 & 0xC0;
  44.         v10->byte8 &= 0x3Fu;
  45.         v10->byte9 = v10->dwordB0 & 0x3F | v10->byte9 & 0xC0;
  46.         v10->byte9 &= 0x3Fu;
  47.         v10->byteA = v10->byte1CE4 & 7 | v10->byteA & 0xF8;
  48.         *(_WORD *)&v10->byteA &= 7u;
  49.         v10->byteC &= 0xFEu;
  50.         v10->byteC = v10->byteC & 0xFD | 4;
  51.         v10->byteC &= 0xF7u;
  52.         v10->byteC &= 0xEFu;
  53.         v10->byteC &= 0xDFu;
  54.         v10->byteC &= 0x3Fu;
  55.         v10->byteD |= 1u;
  56.         *(_DWORD *)&v10->byteC &= 0x1FFu;
  57.         v10->byte14 &= 0xF0u;
  58.         v10->byte14 &= 0xFu;
  59.         v10->byte15 &= 0xC0u;
  60.         v10->byte15 &= 0x3Fu;
  61.         v10->byte16 &= 0xFCu;
  62.         *(_WORD *)&v10->byte16 &= 3u;
  63.         v10->dword20 = 0;
  64.         v5 = ((v10->dword74 + 31) & 0xFFFFFFE0) * ((v10->dword78 + 31) & 0xFFFFFFE0);
  65.         v7 = (signed int)(((v10->dword74 + 31) & 0xFFFFFFE0) * ((v10->dword78 + 63) & 0xFFFFFFC0)) >> 1;
  66.         for ( i = 0; v10->wordB8 > i; ++i )
  67.         {
  68.           *((_DWORD *)&v10->byte4 + i + 46) = cedar_sys_phymalloc_map(v5 + v7, 1024);
  69.           if ( !*((_DWORD *)&v10->byte4 + i + 46) )
  70.             return -3;
  71.           *((_DWORD *)&v10->word0 + i + 52) = cedarv_address_vir2phy(*((_DWORD *)&v10->byte4 + i + 46));
  72.           *((_DWORD *)&v10->byte4 + i + 56) = *((_DWORD *)&v10->word0 + i + 52) + v5;
  73.         }
  74.         v6 = (signed int)(((v10->dword74 + 63) & 0xFFFFFFC0) * ((v10->dword78 + 63) & 0xFFFFFFC0)) >> 2;
  75.         for ( j = 0; v10->wordBA > j; ++j )
  76.         {
  77.           *((_DWORD *)&v10->word0 + j + 62) = cedar_sys_phymalloc_map(v6, 1024);
  78.           if ( !*((_DWORD *)&v10->word0 + j + 62) )
  79.             return -3;
  80.           *((_DWORD *)&v10->byte4 + j + 66) = cedarv_address_vir2phy(*((_DWORD *)&v10->word0 + j + 62));
  81.         }
  82.         v10->dword134 = cedar_sys_phymalloc_map(2 * v10->dword74, 1024);
  83.         if ( v10->dword134 )
  84.         {
  85.           v10->dword60 = cedarv_address_vir2phy(v10->dword134);
  86.           v10->word64 = 1;
  87.           v10->word66 = 1;
  88.           rcInitSequence(v10);
  89.           initPoc(v10);
  90.           (*(void (__fastcall **)(struct_v10 *))&v4[1]->byte4)(v4[1]);
  91.           v2 = 0;
  92.         }
  93.         else
  94.         {
  95.           v2 = -3;
  96.         }
  97.       }
  98.       else
  99.       {
  100.         v2 = -1;
  101.       }
  102.     }
  103.     else
  104.     {
  105.       v2 = -1;
  106.     }
  107.   }
  108.   else
  109.   {
  110.     v2 = -1;
  111.   }
  112.   return v2;
  113. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2014-2-23 21:17:21 | 显示全部楼层
  1. int __fastcall H264EncIoCtrl(int a1, int a2, struct_a3 *a3)
  2. {
  3.   signed __int16 v4; // [sp+4h] [bp-28h]@2
  4.   struct_v5_1 *v5; // [sp+1Ch] [bp-10h]@1

  5.   v5 = *(struct_v5_1 **)a1;
  6.   if ( *(_DWORD *)a1 )
  7.   {
  8.     switch ( a2 )
  9.     {
  10.       case 3:
  11.         if ( a3->dword0 )
  12.         {
  13.           if ( a3->dword0 == 1 )
  14.             *(_DWORD *)(a1 + 36) = a3->dword4;
  15.         }
  16.         else
  17.         {
  18.           *(_DWORD *)(a1 + 32) = a3->dword4;
  19.         }
  20.         break;
  21.       case 4:
  22.         v5->word64 = 1;
  23.         v5->word66 = 1;
  24.         v5->dword68 = 0;
  25.         v5->dwordB4 = 18;
  26.         rcInitSequence(v5);
  27.         initPoc(v5);
  28.         break;
  29.       case 2:
  30.         v5->dword94 = a3->dwordC;
  31.         v5->dword80 = a3->dword10;
  32.         v5->dword84 = a3->dword14;
  33.         v5->dwordA4 = a3->word1A;
  34.         v5->dwordA0 = a3->word18;
  35.         v5->dword90 = a3->dword1C;
  36.         v5->dword6C = a3->dword4;
  37.         v5->dword70 = a3->dword8;
  38.         v5->dword74 = (v5->dword6C + 15) & 0xFFFFFFF0;
  39.         v5->dword78 = (v5->dword70 + 15) & 0xFFFFFFF0;
  40.         v5->word7C = v5->dword74 >> 4;
  41.         v5->word7E = v5->dword78 >> 4;
  42.         v5->dword88 = a3->dword20;
  43.         break;
  44.     }
  45.     v4 = 0;
  46.   }
  47.   else
  48.   {
  49.     v4 = -1;
  50.   }
  51.   return v4;
  52. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2014-2-23 21:18:08 | 显示全部楼层
  1. void *__fastcall H264EncInit(int a1)
  2. {
  3.   void *v2; // [sp+0h] [bp-1Ch]@2
  4.   struct_s *s; // [sp+Ch] [bp-10h]@3
  5.   struct_v5_2 *v5; // [sp+10h] [bp-Ch]@5
  6.   int v6; // [sp+14h] [bp-8h]@7

  7.   MACC_REGS_BASE = cedarv_get_macc_base_address();
  8.   if ( MACC_REGS_BASE )
  9.   {
  10.     cedarv_reset_ve_core();
  11.     *(_DWORD *)a1 = 0;
  12.     s = (struct_s *)malloc(0x28u);
  13.     if ( s )
  14.     {
  15.       memset(s, 0, 0x28u);
  16.       v5 = (struct_v5_2 *)malloc(0x22E8u);
  17.       if ( v5 )
  18.       {
  19.         memset(v5, 0, 0x22E8u);
  20.         s->pvoid0 = v5;
  21.         v6 = H264IspInit(a1);
  22.         if ( v6 && *(_DWORD *)a1 != -1 )
  23.         {
  24.           s->dword4 = v6;
  25.           s->dword8 = H264EncOpen;
  26.           s->dwordC = H264EncClose;
  27.           s->dword10 = H264EncEncode;
  28.           s->dword14 = H264EncIoCtrl;
  29.           s->dword18 = H264EncGetBsInfo;
  30.           s->dword1C = H264EncReleaseBsInfo;
  31.           v5->dword68 = 0;
  32.           v5->dwordB4 = 18;
  33.           v5->dword90 = 0x400000;
  34.           v5->dword94 = 25;
  35.           v5->dword88 = 25;
  36.           v5->dword8C = 0;
  37.           v5->byte1CE9 = 1;
  38.           v5->dword9C = 1;
  39.           v5->dwordA0 = 45;
  40.           v5->dwordA4 = 10;
  41.           v5->dwordA8 = 2;
  42.           v5->dwordAC = 30;
  43.           v5->dwordB0 = 30;
  44.           v5->byte1CCC = 77;
  45.           v5->byte1CCD = 41;
  46.           v5->byte1CCE = 4;
  47.           v5->byte1CCF = 8;
  48.           v5->byte1CD4 = 0;
  49.           v5->byte1CE7 = 1;
  50.           v5->byte1CE8 = 1;
  51.           v5->byte1CD5 = 1;
  52.           v5->byte1CD6 = 1;
  53.           v5->byte1CD7 = 0;
  54.           v5->byte1CD8 = 0;
  55.           v5->dword1CDC = 0;
  56.           v5->dword1CE0 = 0;
  57.           v5->byte1CE4 = 4;
  58.           v5->byte1CE5 = 0;
  59.           v2 = s;
  60.         }
  61.         else
  62.         {
  63.           free(s->pvoid0);
  64.           free(s);
  65.           v2 = 0;
  66.         }
  67.       }
  68.       else
  69.       {
  70.         free(s);
  71.         v2 = 0;
  72.       }
  73.     }
  74.     else
  75.     {
  76.       v2 = 0;
  77.     }
  78.   }
  79.   else
  80.   {
  81.     v2 = 0;
  82.   }
  83.   return v2;
  84. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2014-2-23 21:22:04 | 显示全部楼层
  1. int __fastcall H264EncEncode(struct_a1 *a1)
  2. {
  3.   struct_v1 *v1; // ST5C_4@14
  4.   __int16 v2; // ST4A_2@14
  5.   struct_v3 *v3; // ST5C_4@15
  6.   int v4; // r1@29
  7.   int v5; // r2@44
  8.   char *v6; // r3@44
  9.   char *v7; // r2@45
  10.   struct_v1 *v8; // ST5C_4@54
  11.   int v9; // r1@68
  12.   int v10; // r2@83
  13.   char *v11; // r3@83
  14.   char *v12; // r2@84
  15.   signed __int16 v14; // [sp+2Ch] [bp-48h]@2
  16.   int v15; // [sp+30h] [bp-44h]@10
  17.   unsigned int v17; // [sp+40h] [bp-34h]@36
  18.   int v18; // [sp+40h] [bp-34h]@37
  19.   unsigned int v19; // [sp+40h] [bp-34h]@75
  20.   int v20; // [sp+40h] [bp-34h]@76
  21.   signed int i; // [sp+44h] [bp-30h]@15
  22.   signed int j; // [sp+44h] [bp-30h]@20
  23.   signed int k; // [sp+44h] [bp-30h]@54
  24.   signed int l; // [sp+44h] [bp-30h]@59
  25.   struct_v25 *v25; // [sp+54h] [bp-20h]@1
  26.   int v26; // [sp+58h] [bp-1Ch]@1

  27.   v25 = a1->pstruct_v250;
  28.   v26 = *(_DWORD *)a1->pstruct_v14;
  29.   MACC_REGS_BASE->dword0 = 11;
  30.   if ( v25 )
  31.   {
  32.     pthread_mutex_lock((pthread_mutex_t *)&mutex_lock);
  33.     if ( (unsigned int)v25->byte98A <= 0x7C && v25->dword12C <= 0x600000u )
  34.     {
  35.       pthread_mutex_unlock((pthread_mutex_t *)&mutex_lock);
  36.       if ( !a1->pfunc20(0, &v25->gap134[4]) )
  37.       {
  38.         if ( v25->dword14C )
  39.         {
  40.           v25->dword68 = 0;
  41.           v25->dwordB4 = 18;
  42.         }
  43.         v25->dword22E0 = 0;
  44.         v15 = v25->dword22E0;
  45.         if ( v15 == 1 )
  46.         {
  47.           *(_BYTE *)(v26 + 4) |= 0x20u;
  48.           v1 = a1->pstruct_v14;
  49.           v1->pfuncC(a1->pstruct_v14, 2, v25);
  50.           v1->pfuncC(v1, 8, (struct_v25 *)&v25->gap134[4]);
  51.           v1->pfuncC(v1, 3, (struct_v25 *)&v25->gap134[4]);
  52.           v1->pfuncC(v1, 5, (struct_v25 *)&v25->gap134[4]);
  53.           v2 = v1->pfunc10((int)v1);
  54.         }
  55.         else if ( v15 == 2 )
  56.         {
  57.           *(_BYTE *)(v26 + 4) |= 0x20u;
  58.           v3 = (struct_v3 *)a1->pstruct_v14;
  59.           v3->pfuncC((int)a1->pstruct_v14, 8, (struct_v25 *)&v25->gap134[4]);
  60.           v3->pfuncC((int)v3, 2, v25);
  61.           v3->pfuncC((int)v3, 3, (struct_v25 *)&v25->gap134[4]);
  62.           v3->pfuncC((int)v3, 5, (struct_v25 *)&v25->gap134[4]);
  63.           for ( i = 0; v25->wordB8 > i; ++i )
  64.           {
  65.             if ( !v25->gap15C[i + 28] )
  66.             {
  67.               v25->byte17E = i;
  68.               break;
  69.             }
  70.           }
  71.           for ( j = 0; v25->wordBA > j; ++j )
  72.           {
  73.             if ( !v25->gap17F[j] )
  74.             {
  75.               v25->byte185 = j;
  76.               break;
  77.             }
  78.           }
  79.           MACC_REGS_BASE->dwordB88 = 8 * v25->dword130;
  80.           MACC_REGS_BASE->dwordB80 = v25->dword124;
  81.           MACC_REGS_BASE->dwordB84 = v25->dword128;
  82.           MACC_REGS_BASE->dwordB8C = 8 * (v25->dword130 - v25->dword12C + 0x800000);
  83.           MACC_REGS_BASE->dwordBA0 = *(_DWORD *)&v25->gap0[4 * (v25->byte17D + 52)];
  84.           MACC_REGS_BASE->dwordBA4 = *(&v25->dword4 + v25->byte17D + 56);
  85.           MACC_REGS_BASE->dwordBB0 = *(_DWORD *)&v25->gap0[4 * (v25->byte17E + 52)];
  86.           MACC_REGS_BASE->dwordBB4 = *(&v25->dword4 + v25->byte17E + 56);
  87.           MACC_REGS_BASE->dwordBB8 = *(&v25->dword4 + v25->byte184 + 66);
  88.           MACC_REGS_BASE->dwordBBC = *(&v25->dword4 + v25->byte185 + 66);
  89.           if ( v25->dwordB4 == 18 )
  90.             v25->byte1CEA = 2;
  91.           else
  92.             v25->byte1CEA = LOBYTE(v25->dwordB4);
  93.           if ( v25->dwordB4 == 18 )
  94.           {
  95.             v4 = v25->dword1D00;
  96.             if ( v4 < *(_DWORD *)((char *)&loc_1CF8 + (_DWORD)v25) )
  97.               v4 = *(_DWORD *)((char *)&loc_1CF8 + (_DWORD)v25);
  98.             v25->dword1D00 = v4;
  99.             *(_DWORD *)((char *)&loc_1CFC + (_DWORD)v25) = *(_DWORD *)((char *)&loc_1CF8 + (_DWORD)v25);
  100.           }
  101.           getPoc(v25);
  102.           rcInitPic(v25);
  103.           if ( v25->word64 )
  104.           {
  105.             BYTE3(v25->dword4) |= 0x80u;
  106.             MACC_REGS_BASE->dwordB04 = v25->dword4;
  107.             v25->dword990 = InitSPS(a1);
  108.             v25->dword994 = InitPPS(a1);
  109.             v25->word64 = 0;
  110.           }
  111.           MACC_REGS_BASE->dwordB14 |= 0xFu;
  112.           StartSlice(a1);
  113.           if ( a1->pfunc24(0, 0) )
  114.             return -2;
  115.           g_ve_status = MACC_REGS_BASE->dwordB1C;
  116.           MACC_REGS_BASE->dwordB1C = g_ve_status;
  117.           v25->dword24 = MACC_REGS_BASE->dwordB50;
  118.           v25->dword28 = MACC_REGS_BASE->dwordB54;
  119.           v25->dword2C = MACC_REGS_BASE->dwordB58;
  120.           v25->dword30 = MACC_REGS_BASE->dwordB5C;
  121.           v17 = MACC_REGS_BASE->dwordB90 >> 3;
  122.           if ( v25->dword130 > v17 )
复制代码
回复 支持 反对

使用道具 举报

发表于 2014-2-23 21:22:26 | 显示全部楼层

  1.             v18 = v25->dword130 - v17;
  2.           else
  3.             v18 = v17 - v25->dword130;
  4.           *(_DWORD *)((char *)&loc_1D14 + (_DWORD)v25) = v18;
  5.           if ( v25->word66 == 1 )
  6.             *(_DWORD *)((char *)&loc_1D14 + (_DWORD)v25) -= v25->dword990 + v25->dword994;
  7.           *(_DWORD *)((char *)&loc_1D14 + (_DWORD)v25) *= 8;
  8.           rcUpdatePic(v25);
  9.           pthread_mutex_lock((pthread_mutex_t *)&mutex_lock);
  10.           *(_DWORD *)&v25->gap0[4 * (v25->byte989 + 98)] = v25->dword130;
  11.           *(_DWORD *)&v25->gap0[4 * (v25->byte989 + 226)] = v18;
  12.           if ( v18 & 0x1F )
  13.             v18 = v18 - (v18 & 0x1F) + 32;
  14.           if ( v25->dword158 )
  15.           {
  16.             v5 = v25->dword154;
  17.             v6 = &v25->gap0[8 * (v25->byte989 + 177)];
  18.             *(_DWORD *)v6 = v25->dword150;
  19.             *((_DWORD *)v6 + 1) = v5;
  20.           }
  21.           else
  22.           {
  23.             v7 = &v25->gap0[8 * (v25->byte989 + 177)];
  24.             *(_DWORD *)v7 = -1;
  25.             *((_DWORD *)v7 + 1) = -1;
  26.           }
  27.           v25->dword12C += v18;
  28.           v25->dword130 += v18;
  29.           if ( v25->dword130 > 0x7FFFFFu )
  30.             v25->dword130 -= 0x800000;
  31.           ++v25->byte989;
  32.           if ( v25->byte989 == 128 )
  33.             v25->byte989 = 0;
  34.           ++v25->byte98A;
  35.           ++v25->byte98B;
  36.           pthread_mutex_unlock((pthread_mutex_t *)&mutex_lock);
  37.           v25->gap15C[v25->byte17D + 28] = 0;
  38.           v25->byte17D = v25->byte17E;
  39.           v25->gap15C[v25->byte17D + 28] = 1;
  40.           v25->gap17F[v25->byte184] = 0;
  41.           v25->byte184 = v25->byte185;
  42.           v25->gap17F[v25->byte184] = 1;
  43.           ++v25->dword68;
  44.           if ( v25->dword68 == v25->dword88 )
  45.           {
  46.             v25->dword68 = 0;
  47.             v25->dwordB4 = 18;
  48.           }
  49.           else
  50.           {
  51.             v25->dwordB4 = 0;
  52.           }
  53.           ++*(_DWORD *)((char *)&loc_1D10 + (_DWORD)v25);
  54.           *(_DWORD *)((char *)&loc_1D10 + (_DWORD)v25) &= (1 << v25->byte1CCE) - 1;
  55.           ++*(_DWORD *)((char *)&loc_1CF8 + (_DWORD)v25);
  56.         }
  57.         else if ( !v15 )
  58.         {
  59.           *(_BYTE *)(v26 + 4) &= 0xDFu;
  60.           v8 = a1->pstruct_v14;
  61.           v8->pfuncC(a1->pstruct_v14, 8, (struct_v25 *)&v25->gap134[4]);
  62.           v8->pfuncC(v8, 2, v25);
  63.           v8->pfuncC(v8, 3, (struct_v25 *)&v25->gap134[4]);
  64.           v8->pfuncC(v8, 5, (struct_v25 *)&v25->gap134[4]);
  65.           for ( k = 0; v25->wordB8 > k; ++k )
  66.           {
  67.             if ( !v25->gap15C[k + 28] )
  68.             {
  69.               v25->byte17E = k;
  70.               break;
  71.             }
  72.           }
  73.           for ( l = 0; v25->wordBA > l; ++l )
  74.           {
  75.             if ( !v25->gap17F[l] )
  76.             {
  77.               v25->byte185 = l;
  78.               break;
  79.             }
  80.           }
  81.           MACC_REGS_BASE->dwordB88 = 8 * v25->dword130;
  82.           MACC_REGS_BASE->dwordB80 = v25->dword124;
  83.           MACC_REGS_BASE->dwordB84 = v25->dword128;
  84.           MACC_REGS_BASE->dwordB8C = 8 * (v25->dword130 - v25->dword12C + 0x800000);
  85.           MACC_REGS_BASE->dwordBA0 = *(_DWORD *)&v25->gap0[4 * (v25->byte17D + 52)];
  86.           MACC_REGS_BASE->dwordBA4 = *(&v25->dword4 + v25->byte17D + 56);
  87.           MACC_REGS_BASE->dwordBB0 = *(_DWORD *)&v25->gap0[4 * (v25->byte17E + 52)];
  88.           MACC_REGS_BASE->dwordBB4 = *(&v25->dword4 + v25->byte17E + 56);
  89.           MACC_REGS_BASE->dwordBB8 = *(&v25->dword4 + v25->byte184 + 66);
  90.           MACC_REGS_BASE->dwordBBC = *(&v25->dword4 + v25->byte185 + 66);
  91.           if ( v25->dwordB4 == 18 )
  92.             v25->byte1CEA = 2;
  93.           else
  94.             v25->byte1CEA = LOBYTE(v25->dwordB4);
  95.           if ( v25->dwordB4 == 18 )
  96.           {
  97.             v9 = v25->dword1D00;
  98.             if ( v9 < *(_DWORD *)((char *)&loc_1CF8 + (_DWORD)v25) )
  99.               v9 = *(_DWORD *)((char *)&loc_1CF8 + (_DWORD)v25);
  100.             v25->dword1D00 = v9;
  101.             *(_DWORD *)((char *)&loc_1CFC + (_DWORD)v25) = *(_DWORD *)((char *)&loc_1CF8 + (_DWORD)v25);
  102.           }
  103.           getPoc(v25);
  104.           rcInitPic(v25);
  105.           if ( v25->word64 )
  106.           {
  107.             BYTE3(v25->dword4) |= 0x80u;
  108.             MACC_REGS_BASE->dwordB04 = v25->dword4;
  109.             v25->dword990 = InitSPS(a1);
  110.             v25->dword994 = InitPPS(a1);
  111.             v25->word64 = 0;
  112.           }
  113.           MACC_REGS_BASE->dwordB14 |= 0xFu;
  114.           StartSlice(a1);
  115.           if ( a1->pfunc24(0, 0) )
  116.             return -2;
  117.           g_ve_status = MACC_REGS_BASE->dwordB1C;
  118.           MACC_REGS_BASE->dwordB1C = g_ve_status;
  119.           v25->dword24 = MACC_REGS_BASE->dwordB50;
  120.           v25->dword28 = MACC_REGS_BASE->dwordB54;
  121.           v25->dword2C = MACC_REGS_BASE->dwordB58;
  122.           v25->dword30 = MACC_REGS_BASE->dwordB5C;
  123.           v19 = MACC_REGS_BASE->dwordB90 >> 3;
  124.           if ( v25->dword130 > v19 )
  125.             v20 = v25->dword130 - v19;
  126.           else
  127.             v20 = v19 - v25->dword130;
  128.           *(_DWORD *)((char *)&loc_1D14 + (_DWORD)v25) = v20;
  129.           if ( v25->word66 == 1 )
  130.             *(_DWORD *)((char *)&loc_1D14 + (_DWORD)v25) -= v25->dword990 + v25->dword994;
  131.           *(_DWORD *)((char *)&loc_1D14 + (_DWORD)v25) *= 8;
  132.           rcUpdatePic(v25);
  133.           pthread_mutex_lock((pthread_mutex_t *)&mutex_lock);
  134.           *(_DWORD *)&v25->gap0[4 * (v25->byte989 + 98)] = v25->dword130;
  135.           *(_DWORD *)&v25->gap0[4 * (v25->byte989 + 226)] = v20;
  136.           if ( v20 & 0x1F )
  137.             v20 = v20 - (v20 & 0x1F) + 32;
  138.           if ( v25->dword158 )
  139.           {
  140.             v10 = v25->dword154;
  141.             v11 = &v25->gap0[8 * (v25->byte989 + 177)];
  142.             *(_DWORD *)v11 = v25->dword150;
  143.             *((_DWORD *)v11 + 1) = v10;
  144.           }
  145.           else
  146.           {
  147.             v12 = &v25->gap0[8 * (v25->byte989 + 177)];
  148.             *(_DWORD *)v12 = -1;
  149.             *((_DWORD *)v12 + 1) = -1;
  150.           }
  151.           v25->dword12C += v20;
  152.           v25->dword130 += v20;
  153.           if ( v25->dword130 > 0x7FFFFFu )
  154.             v25->dword130 -= 0x800000;
  155.           ++v25->byte989;
  156.           if ( v25->byte989 == 128 )
  157.             v25->byte989 = 0;
  158.           ++v25->byte98A;
  159.           ++v25->byte98B;
  160.           pthread_mutex_unlock((pthread_mutex_t *)&mutex_lock);
  161.           v25->gap15C[v25->byte17D + 28] = 0;
  162.           v25->byte17D = v25->byte17E;
  163.           v25->gap15C[v25->byte17D + 28] = 1;
  164.           v25->gap17F[v25->byte184] = 0;
  165.           v25->byte184 = v25->byte185;
  166.           v25->gap17F[v25->byte184] = 1;
  167.           ++v25->dword68;
  168.           if ( v25->dword68 == v25->dword88 )
  169.           {
  170.             v25->dword68 = 0;
  171.             v25->dwordB4 = 18;
  172.           }
  173.           else
  174.           {
  175.             v25->dwordB4 = 0;
  176.           }
  177.           ++*(_DWORD *)((char *)&loc_1D10 + (_DWORD)v25);
  178.           *(_DWORD *)((char *)&loc_1D10 + (_DWORD)v25) &= (1 << v25->byte1CCE) - 1;
  179.           ++*(_DWORD *)((char *)&loc_1CF8 + (_DWORD)v25);
  180.         }
  181.         return 0;
  182.       }
  183.       v14 = -1;
  184.     }
  185.     else
  186.     {
  187.       pthread_mutex_unlock((pthread_mutex_t *)&mutex_lock);
  188.       v14 = -3;
  189.     }
  190.   }
  191.   else
  192.   {
  193.     v14 = -1;
  194.   }
  195.   return v14;
  196. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2014-2-25 09:41:07 | 显示全部楼层
wsgtrsys 发表于 2014-2-23 21:22

请问一下是  支持armhf 平台的吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|粤ICP备13051116号|cubie.cc---深刻的嵌入式技术讨论社区

GMT+8, 2024-5-2 15:15 , Processed in 0.032247 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc. | Style by Coxxs

返回顶部