java 板


LINE

我抓了一包 Intel/DVI ADPCM coder/decoder. 改写成JAVA版本, 效率异常的糟糕.. 如果改成 JNI 呼叫,效率会比较好吗? 有没有人可以给我建议~~ http://www.cs.columbia.edu/~gskc/Code/AdvancedInternetServices/SoundNoiseRatio/dvi_adpcm.c 我改的code: static void adpcm_decoder(byte[] in_data_ptr, int sidx, short[] out_data_ptr, int len, ADPCMState state) { int val_pred; // Predicted value int vp_diff; // Current change to val_pred int code; // 包含sign与delta... int step; // Stepsize int index; // Current step change index int input_buffer = 0; // place to keep next 4-bit value // 为了抑制最佳化警告... boolean buffer_step; // toggle between output_buffer/output int s = sidx, d = 0; // val_pred=state->ValPrev; val_pred = state.ValPrev << 3; index = state.Index; // step=StepSizeTable[index]; step = StepSizeTable[index] << 3; for (buffer_step = false; len > 0; len--) { // Step 1 - get the delta value if (buffer_step) code = input_buffer & 0xF; else { input_buffer = in_data_ptr[s++]; code = (input_buffer >> 4) & 0xF; } buffer_step = !buffer_step; // Step 2 - Find new index value (for later) index += IndexTable[code]; index = BOUND(index, 0, 88); // Step 3 - Compute difference and new predicted value // Computes vp_diff=(delta+0.5)*step/4, but see comment // in adpcm_coder. vp_diff = step >> 3; if ((code & 0x04) != 0) vp_diff += step; if ((code & 0x02) != 0) vp_diff += step >> 1; if ((code & 0x01) != 0) vp_diff += step >> 2; if ((code & 0x08) != 0) val_pred -= vp_diff; else val_pred += vp_diff; // Step 4 - clamp output value // BOUND( val_pred, -32768, 32767 ); val_pred = BOUND(val_pred, -32768 * 8, 32767 * 8); // Step 5 - Update step value // step=StepSizeTable[index]; step = StepSizeTable[index] << 3; // Step 6 - Output value // *out_data_ptr++=val_pred; out_data_ptr[d++] = (short)((int)val_pred >> 3); } } public static int DecodeADPCM(byte[] src_data_ptr, int idx, short[] dest_buf_ptr, int dest_buf_size) { int data_count; ADPCMState state = new ADPCMState(); data_count = Tools.ToInt(src_data_ptr, idx + 0); state.ValPrev = Tools.ToInt(src_data_ptr, idx + 4); state.Index = Tools.ToInt(src_data_ptr, idx + 8); if (dest_buf_size < data_count * 2) return -1; adpcm_decoder(src_data_ptr, idx + 4 * 3, dest_buf_ptr, data_count, state); data_count *= 2; return data_count; } -- 开发 Andorid app... --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.70.208.163
1F:→ nosrep:糟糕的定义是,decode的时间超过资料的播放时间.. 03/03 22:37
2F:→ nosrep:Android的JNI移植性问题会很差吗? 03/03 23:15
※ 编辑: nosrep 来自: 61.70.208.163 (03/04 00:03)
3F:推 LaPass:那种东西最好用jni.... 03/04 02:42
4F:推 PsMonkey:先不说别的,光肉眼扫过去就看到好几个常数相乘... 03/04 08:10
5F:→ iterator:编译阶段就会先将常数相乘转为数字了 03/04 13:52
6F:→ PsMonkey:喔喔喔... 已经进步到这种程度了阿 [被殴死] 03/04 16:23
7F:→ tkcn:说的应该是 literal 吧? constrant 是 static final .. 03/04 18:07
8F:→ nosrep:不过看来在java我也没法让他有更快的速度了 03/07 00:07
9F:→ WPC001:会... JNI就会跟原本C的效率差不多 (废话...) 03/10 08:34







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP