xylophone21 最近的时间轴更新
xylophone21

xylophone21

V2EX 第 65655 号会员,加入于 2014-06-19 16:32:42 +08:00
今日活跃度排名 9182
xylophone21 最近回复了
2 天前
回复了 cxp 创建的主题 问与答 程序员如何比较规范的整理资料
》》但是苦于不同平台的不同代码,记录的时候总会产生分支

这个是你代码没有把相同的流程统一,而是 DRY 了,文档是无从解决的
当然,这不是你的问题,你们公司选择了直接使用 SDK,在上面修改。而不是自己实现 SDK,把硬件差异抽象出来。

如果一定要解决,我建议是整理协议这些更稳固的东西,而不是整理 SDK,你正在整理的 SDK,可能就是别人抱怨的 x 山
如果一定要整理,那就只能忍着,想想你在整理 x 山就好了
可以看一看钉钉是怎么防虚拟定位打卡的
传统的
1. 客户端各种加密,防止非官方 App
2.客户端各种检测,防止 root 、虚拟机等模拟 GPS
以及比较狠的
1. [传说] 发现问题不报错,但是在后台标记,等着管理员找你
31 天前
回复了 FATEQiang 创建的主题 Android Android 单元测试如何规范
@ahao99 然而在 Android 端,一般来说业务并不是很多?
用 golang 吧
score 越大,可能性越高

```c
static int mov_probe(const AVProbeData *p)
{
int64_t offset;
uint32_t tag;
int score = 0;
int moov_offset = -1;

/* check file header */
offset = 0;
for (;;) {
int64_t size;
int minsize = 8;
/* ignore invalid offset */
if ((offset + 8ULL) > (unsigned int)p->buf_size)
break;
size = AV_RB32(p->buf + offset);
if (size == 1 && offset + 16 <= (unsigned int)p->buf_size) {
size = AV_RB64(p->buf+offset + 8);
minsize = 16;
} else if (size == 0) {
size = p->buf_size - offset;
}
if (size < minsize) {
offset += 4;
continue;
}
tag = AV_RL32(p->buf + offset + 4);
switch(tag) {
/* check for obvious tags */
case MKTAG('m','o','o','v'):
moov_offset = offset + 4;
case MKTAG('m','d','a','t'):
case MKTAG('p','n','o','t'): /* detect movs with preview pics like ew.mov and april.mov */
case MKTAG('u','d','t','a'): /* Packet Video PVAuthor adds this and a lot of more junk */
case MKTAG('f','t','y','p'):
if (tag == MKTAG('f','t','y','p') &&
( AV_RL32(p->buf + offset + 8) == MKTAG('j','p','2',' ')
|| AV_RL32(p->buf + offset + 8) == MKTAG('j','p','x',' ')
)) {
score = FFMAX(score, 5);
} else {
score = AVPROBE_SCORE_MAX;
}
break;
/* those are more common words, so rate then a bit less */
case MKTAG('e','d','i','w'): /* xdcam files have reverted first tags */
case MKTAG('w','i','d','e'):
case MKTAG('f','r','e','e'):
case MKTAG('j','u','n','k'):
case MKTAG('p','i','c','t'):
score = FFMAX(score, AVPROBE_SCORE_MAX - 5);
break;
case MKTAG(0x82,0x82,0x7f,0x7d):
case MKTAG('s','k','i','p'):
case MKTAG('u','u','i','d'):
case MKTAG('p','r','f','l'):
/* if we only find those cause probedata is too small at least rate them */
score = FFMAX(score, AVPROBE_SCORE_EXTENSION);
break;
}
if (size > INT64_MAX - offset)
break;
offset += size;
}
if (score > AVPROBE_SCORE_MAX - 50 && moov_offset != -1) {
/* moov atom in the header - we should make sure that this is not a
* MOV-packed MPEG-PS */
offset = moov_offset;

while (offset < (p->buf_size - 16)) { /* Sufficient space */
/* We found an actual hdlr atom */
if (AV_RL32(p->buf + offset ) == MKTAG('h','d','l','r') &&
AV_RL32(p->buf + offset + 8) == MKTAG('m','h','l','r') &&
AV_RL32(p->buf + offset + 12) == MKTAG('M','P','E','G')) {
av_log(NULL, AV_LOG_WARNING, "Found media data tag MPEG indicating this is a MOV-packed MPEG-PS.\n");
/* We found a media handler reference atom describing an
* MPEG-PS-in-MOV, return a
* low score to force expanding the probe window until
* mpegps_probe finds what it needs */
return 5;
} else {
/* Keep looking */
offset += 2;
}
}
}

return score;
}
```
ffmpeg
43 天前
回复了 KageroY 创建的主题 C# VScode 配置 c 语言环境求助
是的,实际工作中很少看到有人用 codeblocks
43 天前
回复了 KageroY 创建的主题 C# VScode 配置 c 语言环境求助
C/C++主流的还是 gcc/clang + cmake ( gn 其实也很不错,不过还稍微小众一点) + gdb/lldb,这些搞明白后再配 vscode 就很好理解,建议用 clangd + compile_commands.json + CodeLLDB.

codeblocks 哪一套,除非是即学即抛,否则后面还是要转到前面去的;之于 VisualStudio,C#它不香吗
54 天前
回复了 icemanpro 创建的主题 C++ 如何将 list 的值传给函数的可变参数?
依稀记得多年前是用汇编搞定的
关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2156 人在线   最高记录 5497   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 15ms · UTC 11:02 · PVG 19:02 · LAX 04:02 · JFK 07:02
♥ Do have faith in what you're doing.