"libmpcodecs/ad_ffmpeg.c:137:69: error: 'FF_INPUT_BUFFER_PADDING_SIZE' undeclared (first use in this function); did you mean 'AV_INPUT_BUFFER_PADDING_SIZE'?"
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9m6uRBjwRlkTQoFqVAatGJdXfiSWxJe5uKm_jgt83Xyf2xlBAxw971fd-VnFVINypF4p5r9LAH3eAdI3clS3sWl10Mcex9RpkdLJa8DfylPAJCh2P7_BYZHgRGIkTGLZ85iArvQGgcXA/s1600/1542389782_2018-11-17_DSXNx6TVfv.png)
你可以看见明显 FF 被 AV 替换了 的区别:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCm3zapYcaeRgvp7acuyS0ltEXYT7LMHkQ16w9FC-fsU0G2SjgU8CMjZoE5j97LAyzIH8eQ7GzPXJwYcEV5MIUa_2f4UHWIhpBTPDxGn5s4ogc3_K8-qzfHtBpGUMwPLrwMTR71z7FAU0/s1600/1542379871_2018-11-16_O4icSdCpxa.png)
所以这个 make 毫无悬念过关 ad_ffmpeg.c:
可是停在新的错误信息:
./libvo/videodev_mjpeg.h:133:42: error: 'BASE_VIDIOCPRIVATE' undeclared (first use in this function); did you mean 'SIOCDEVPRIVATE'?
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMD5L8L9sPQt00Mt6FTXVwZ3tzGMSBc93Dn8wjmQXEEP7X4BcE3cUxF0aCeOYWgRNf68b7N2BQYvVgVzHqNhVLsVjrF1j_rloiNfqjidCy31WlV25nlAckuQRqqOGPNtwOU-i13CLxAXQ/s1600/1542379223_2018-11-16_XM82n1p35o.png)
kdiff3 一下它与我 Ubuntu 的 include/linux/videodev.h, 可以看见明显只有左边有声明 BASE_VIDIOCPRIVATE:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSPiLpHAbpcNrG41Y5tb3EbrXhdm3pXVy8DJxmrkC1U1NPNkviBh5MnrkhcvnhmWNoqShf_WlQMeEYx9RZifJIp0NymBDvqA4nsrE527lBC8uC-vSQcOZuNloHPg1oeiWkvxXbghw99Hg/s1600/1542379413_2018-11-16_Lmz4AXbR6M.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjziYuiFBZx6veU347ZrFSUfq_qD1wZbS7Ssc1u0ObjdxCIiNAcoNsmYs_xWOby9IjNecllptKzCy9U_gGwhICVKGGPPj3SoTgaZ6ZP452lIaSWcUVN4Gv-4rDF7_06hsOk7GIMMgAlje0/s1600/1542390997_2018-11-17_1hQ9YJw4Uq.png)
想多了, 理所当然很多问题, 而且 symlink 酱换岂不造成其它 package build 有问题 ?
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi84I7bh5KCqkjcaMLoYhUFYh98ezviK34-v-41norpj6h3m0pgEq2xA6KPQAno7Z5Setkh65hcPNiZ5WyuDxKvcsjIsj_ZO8ZLyyDQpF4S_QM4RXq-fnYHe3muQOKMEQnEdhyphenhyphenUjqlKHWU/s1600/1542391568_2018-11-17_ARmYogTJeG.png)
而且尽可能用最新的内核开发文件才是王道, 所以此路不通。
既然错误信息提到 v4l 的问题, 想必 v4l 可能可以 configure:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIip2-_qDXRv5AoWYQGFtJ3stqtDWqzp3fSpId3KK0hAIz0JV3uo1FmrP33YFmpIUsCdhHbiCu16-84EoEsCzTaGrWC79dqjtQgVGvTRGdsORG3st7ZrHiGAG3vHRGd69hf9HYemYFy68/s1600/1542379020_2018-11-16_g2F7O378e3.png)
可以看见是可以 disable 的, 不过要注意的是没必要 disable v4l2, 因为如上图在 Makefile 可以看见有问题的是 tvi_v4l.c 由 v4l1 选项负责, 与 v4l2 是分开的。
所以执行 `make distclean`; `./configure --disable-tv-v4l1`; make
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVSiNNPXsX9GSRfjGjkU3VmsTVzKSGPrQNNWwwmTLyqlE2MgpOp1lYWubRlCaMBNRjAXpttpBeIcPk-vIhCkGodefAQkA-QmWUl9oBOFQ4AE9vj_iGGVRKdVviqMrc8WxXKUWFRiqmFyg/s1600/1542379608_2018-11-16_XCHGTVPDSR.png)
最后就成功了, 看到 mplayer binary 有点小感动有没有 (づ。◕‿‿◕。)づ
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSG-disCWaJvKcsbSHKbB75aD0CuRdhB2rp-Ds1Wm2e_zla3tfyI3NKTTvLI0oUEAee3fSi2nk1pvaP9Isq0Rm5jI3RJXpf6qPA3yW9shgvx3-BhjkFswYvhg38gR3ccFoYhEsTPX_fEM/s1600/1542380306_2018-11-16_ITBiWaw7bm.png)
可是如果要坚持 build `apt source mplayer` 的源代码如何 ? 如果要 build 旧版本的 mplayer 来学习公开过的安全漏洞如何 ? apt 的 changelog 也不是很准。
心动不如行动, 先 cd 回那个 apt 源代码目录。
这里先吹一下你可以重新跑 make 复制错误信息上面的 gcc 命令(有时没有, 如 make ffmpeg)或 make -n 直接复制第一行的 gcc 命令, 然后重新跑该 gcc 命令即可专注于那个错误信息, 一旦以后不再错误则表示解决了。 该 gcc 命令补上 -H 选项可以知道 include 的 hierarchy, 加上 konsole 的 regex search 可以一眼看出想要的 level。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfBEH9cppUe5k8ZdF1Oci5WbxxdSe_rz5G8mgXDxHkglL_sBOdvUVAhHJ-iiDukbjra54xy3oBrlrbuRMcWzmusbxEQLwJHhggzH5rocfx-Q1S_CBR4eqkYV3TIeTW5ZBjrDmpU07B1MU/s1600/1542380028_2018-11-16_JM3HuQd2lm.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguaB80sA33Rt73DMtWITLYP-oA89xZeLTe3xjEOqsObQrCvWDZTLKedlHpHuqooeZoIwM28lPaoidKURabIUt45J1uQAq6rtJgRw0mJq9UpvGXNvZQLnBCSk5ipqZgokHXF99hv3Cq2E8/s1600/1542380038_2018-11-16_GJDgC8HfPX.png)
然后 `grep -rn FF_INPUT_BUFFER_PADDING_SIZE ./*` 循环 grep 错误信息缺少 (FF_INPUT_BUFFER_PADDING_SIZE) 以及建议 did you mean (AV_INPUT_BUFFER_PADDING_SIZE) 的关键词:
可以看出没有 FF_INPUT_BUFFER_PADDING_SIZE 的声明但只有AV_INPUT_BUFFER_PADDING_SIZE。 也知道 APIChanges 文件提到了它们:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBhb7McO_rawsPDgsVRpNlj_-6l8v-cwLx7URMSQiJ9qS0XO5I7jNvT2_1y2gX5S62vIk_VzfSqNyQPp8qLema1Y_JDRSUj2v_mhoapotJTCjj_mSY-wSOoq4DwdY6JDrtgBW7oaoBRTo/s1600/1542380180_2018-11-16_etpnXhqaBv.png)
所以就尝试用 git 的 ffmpeg 吧。如是以前下载的确保 `git checkout master`。 首先看见的是只有 AV_INPUT_BUFFER_PADDING_SIZE 而没有 FF_INPUT_BUFFER_PADDING_SIZE:
似乎跟之前一样。 所以就 git 搜索 FF_INPUT_BUFFER_PADDING_SIZE 声明是几时从源代码删除的。
这里搜索 FF_INPUT_BUFFER_PADDING_SIZE 而不是 AV_INPUT_BUFFER_PADDING_SIZE , 是因为 AV_ 的出现不表示 FF_ 不存在, 而且修改代码理应是逐渐增加的, AV_ 不一定得等 FF_ 删了才出现。
git 第一个, 发现 AV_ 通过 merge 才有的。 这也是为什么我用 `git log -m --first-parent -S` 而不是单纯的 `git log -S`, 避免掉进其它 branch 搜索而难以锁定精准的 commit, 只搜索 master parent 的 commit 上到下一条路搜索, 而不是又上又下。
git checkout 第一个:
由于 checkout 第一个没有结果, 所以继续 checkout 第二个。 一旦有结果, 就 checkout 第一个的 "上一个日期"。
让我用程序表达正确的步骤:
while (true) {
if (search's_commit_#1 == 有) {。
直接 checkout search commit #1, 因为它表示之前不是已删除而是未出现。
} else if ( (search's_commit_#1 == 没有) && (search's_commit_#2 == 有) {
checkout search commit #1 之前日期的一个 commit。
break;
} else ( (search's_commit_#1 == 没有) && (search's_commit_#2 == 没有) {
继续找 next search's commit #3,回去上面的时候 #1 变成 #2, #2 变成 #3
, 以此类推。
}
}
简单来讲就是上到下顺序 grep 到有为止, 则取上一个 search(grep 没有的) 的上一个日期 commit (肯定 grep 有)。
根据此规则, 不能第一个 grep 不到就得到结果,因为第二个也可能没有哦。 因为表示已删除。
要注意的是 checkout 后记得 grep 一下确保是声明/定义而不是没用的 reference/comment 或其它同部分名。如 FF_INPUT_BUFFER_PADDING_SIZE_XXXXX 同部分名但其实不是我们要的, 不能当作 "有", 必须花更多时间找。 这时候可以考虑用二分搜索 narrow down。
不过这还没完, 检查声明是否有 #if 或 #ifdef 诸如此类的标识符:
有的话就要加上相关的 CFLAGS。 所以 cd 回去 mplayer, 重新 `make distclean; CFLAGS='-DFF_API_WITHOUT_PREFIX' ./configure; make` 一条龙。
可是还是有错误信息:
然后 cd 回去 mplayer, 如常 `make distclean; CFLAGS='-DFF_API_WITHOUT_PREFIX -DFF_API_DEBUG_MV' ./configure; make` 一条龙:
可是有新的错误信息:
这也一样, 先检查是否有现成的, 有的话就要加上相关的 CFLAGS, 否则才用之前的那个checkout 规则。
然后 cd 回去 mplayer, 如常 `make distclean; CFLAGS='-DFF_API_WITHOUT_PREFIX -DFF_API_DEBUG_MV -DFF_API_MOTION_EST' ./configure; make` 一条龙:
可是还是有错误信息:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFml1NWZebmraCJ1yB86bYZMoIepDZlP_9kdkp23ma6wDiy47bUOL45yipa1wOBoBWS2cGEf6wIuoC9NPeJiicIUyxmlLZja3h9pyaTIlcz70vWrdtQwZTgwPLzNdA_h-g55SShCdHC6M/s1600/1542480280_2018-11-18_r54qOarmGP.png)
lol, 这不就是开头 svn 的 'BASE_VIDIOCPRIVATE' 错误信息吗 ?
如常 `make distclean; CFLAGS='-DFF_API_WITHOUT_PREFIX -DFF_API_DEBUG_MV -DFF_API_MOTION_EST' ./configure --disable-tv-v4l1; make` 一条龙:
`Makefile:2: ffbuild/config.mak: No such file or directory`
先查找那个 directory 是几时新建的:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsaTtr0dcIP3rSwh_7fQuh328ZrXRdkbRN5QPjMbeXaBIJbGvNh5_sRKtZ16bVdHzrGGIxYi5vQ8Kx-6lXINSplSTzqw-R_s5CWstqYsJDRSn8Q8IAyRHAARK5Q4mO5tBWCjH7zgYBknA/s1600/1542482399_2018-11-18_foSXDLjMJu.png)
挺新的, 所以要 checkout 新建之前的一个 commit:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBI4eWzbFTQVgGmXRbiNHtihexckEWS_hxtu4obZgmrSIH12_oV0uhkvh_S7_nvP_MZMKaJ5L2jtImIVnKSUkSlTXnznVy-fUDV9roi9G0EbBoDCEOyZ7eI68zZJqg5ULmcWMXIwWYeCg/s1600/1542482934_2018-11-18_74ZHe8dEZs.png)
然后 cd 回去 mplayer, 如常 `make distclean; CFLAGS='-DFF_API_WITHOUT_PREFIX -DFF_API_DEBUG_MV -DFF_API_MOTION_EST' ./configure --disable-tv-v4l1; make` 一条龙, 不需要特地丢掉之前的 define, 有问题再说:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwkjtkHpJzpaeWVqlnNYPy8nAThyphenhyphenVmDwOcZCdVlKSPhyphenhyphenCQhfbWk2dNIAh1qT5cEAzv96Dw-zdU7Pk31M5Ji5RWkZkEM3rMHvzQVJCvZx3XrjXArJeybtmWm6nDIztqGamEbkw6FJS9P3s/s1600/1542483209_2018-11-18_AYGiEs3ROo.png)
还是有问题, 'fatal error: libavformat/protocol_list.c: No such file or directory`根本没这个文件:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNSmyZBvHXAouzpmRmPjVxZnsUzwgpbziFHSPORBsTVI0eZp7xhEltZ3td2z0b8pAJCTApdVpVBdWg2YsjYHugtlenfPQwOVPaRf6Kje1YLP-cD2eJnTGcU9vH0dj3ED3ndpd_hXzRMrY/s1600/1542484264_2018-11-18_sXwiWpG3u6.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBjrO3XnQD54QDWCfVaHL94aJ9Fp8n5vDQ5OrE8WZtKoszVRgiyBd6ZtN1x2S-gCyQfR-_wpfmhFUiFwCNQsWMXgPZwVZ0LoZy9pySn1bLK27bL5m-XcDh-1tj43FwBDRwi21UqnDT2Ns/s1600/1542484192_2018-11-18_IHqFAkhus4.png)
编译 ffmpeg 必须先编译 mplayer ? lol
换个角度想想, 也是对啦, 既然找不到就表示可以找出现 #include "libavformat/protocol_list.c" 之前的版本, 且可以更加贴近 apt 的真正 ffmpeg 版本。
这里提醒一下, git 有时需要 --follow 才能跟踪已改目录名字的文件。
然后 cd 回去 mplayer, 如常 `make distclean; CFLAGS='-DFF_API_WITHOUT_PREFIX -DFF_API_DEBUG_MV -DFF_API_MOTION_EST' ./configure --disable-tv-v4l1; make` 一条龙:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-ovdicuA5QKluVwmj_nG_9H5KS8pD9eP5saO6AoefJL68VY7Oha3Jj1i3oSYSpd9Qfzuuzaa13Vg43S91dBT0cuMm3tKnPj4MLMG7Ri8KGs2dbZ6NyIIeSvDP5w5K9-fWGmcGZVKKs4c/s1600/1542486320_2018-11-18_PkAMyZhRsU.png)
又有错误 `fatal error: AudioToolbox/AudioToolbox.h: No such file or directory`
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-CAAj9Jk6sg_7CgIjtZsBbFJ5riGx2TzeRtqDmQJekjem94h6fYYZdSQRZnYAoduaVAb6Zt9TJCXXNlY_gJ64p6OmxG_uizflkUXYyQ6FQKiOg_Zsuf8WC-xPQsB8OPKaRgHc5oKQkFY/s1600/1542486269_2018-11-18_ld9FlGlwMx.png)
然后 cd 回去 mplayer, 如常 `make distclean; CFLAGS='-DFF_API_WITHOUT_PREFIX -DFF_API_DEBUG_MV -DFF_API_MOTION_EST' ./configure --disable-tv-v4l1; make` 一条龙:
搞笑, 这次到 video: `fatal error: VideoToolbox/VideoToolbox.h: No such file or directory`
然后 cd 回去 mplayer, 如常 `make distclean; CFLAGS='-DFF_API_WITHOUT_PREFIX -DFF_API_DEBUG_MV -DFF_API_MOTION_EST' ./configure --disable-tv-v4l1; make` 一条龙:
仍然有错误 `undefined reference to `ff_http_averror'`
已经是最后的 build 所以不应该靠 git。 把注意力放在 undefined reference , 表示找不到的函数名 ff_http_averror 以及出现在文件名 rtsp.c, 而不需要去理会 In function `ff_rtsp_averror' 表示什么函数名使用该上面的函数。
如上图所示, 函数定义在 http.c (http.h 可以忽略), 也就是编译后的 http.o, 可是 http.o 并没有出现在 rtsp.o (使用该函数的文件是 rtsp.c) 的后方。 所以用 vim (v alias)把 http.o 加入所有 rtsp.o 的后方。 上图所示只出现在 libavformat/Makefile, 所以只需要改这个文件。
同理, rtpproto.o 也是一样做法。放在所有的 rtsp.o 后面即可。
至于 rtspdec.c 唯一一行的 rtspdec.o 已是与 rtsp.o 重合, 所以不需要再修改。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSgnD2W7IoCKxXibYmGSWLPrSogfAl70KxpeIXTsYO6DPeug6Eu0-aLAMG2Z578ZYtLhOCn9lctrY6YUApDS-T0kVokJuaV8xiTY1Esizws64mLFkAiWASFLyToC1qleEI4StfKQmYgRU/s1600/1543020761_2018-11-24_fdlTom5SdU.png)
接着再看 mss2.c 和 vc1.c, 也是同理, 区别只在于它的 Makefile 是在 libavcodec 目录而不是 libavformat 目录:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDlchncSzSaB1EjwQsfLKDW5nolCcU7IyQKO8Uto4u3p8S4QqshC9Mqcpsx6ZPwnebULBCBBWQRiKw45cSSb9d05VD1Gqy1Gxb7UrTtYJg8VRPrftWbN1g6yZ3poBJ-iekN3NEgyOGwrw/s1600/1543019580_2018-11-24_OBjHJl45Ou.png)
然后 cd 回去 mplayer, 如常 `make distclean; CFLAGS='-DFF_API_WITHOUT_PREFIX -DFF_API_DEBUG_MV -DFF_API_MOTION_EST' ./configure --disable-tv-v4l1; make` 一条龙 (可以使用 `make VERBOSE=1` 更获得详细的 log):
有新的错误 `undefined reference to `ff_udp_set_remote_url'`
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiod-lCMLy8RU8wt1Ew9_vMQ1Y1FVlDDP9QayghAkzX2u6ZcKM7vD6iBkGvbMwmC-nWnapf_S15FwqGHiK2J2fVtAWsfRIeHblcB3ZWbw-doIUYo95rak8WikruThzyKQ2wwlpEqmixBMU/s1600/1543021510_2018-11-24_EQNDMOWLt4.png)
以及 libavcodec 目录, 不过与之前不同的是需要前缀 x86/ 目录:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2X4dU1rs-oTyXgIApjvVtPHDflvYOcctmhX-MvgKwRSrqrE1NG71ObFyqlZE0WOntSzn7Rw7iR6JLFlkQyO1dFCHvkIGvWPGGU35rVkbrOZHSiZmrC9SKH2dCDWw4K9N43NSE7Hq-XEo/s1600/1543021872_2018-11-24_59wxHfj6yD.png)
然后 cd 回去 mplayer, 如常 `make distclean; CFLAGS='-DFF_API_WITHOUT_PREFIX -DFF_API_DEBUG_MV -DFF_API_MOTION_EST' ./configure --disable-tv-v4l1; make VERBOSE=1` 一条龙:
哎, 这次错误异常多, `undefined reference to `ff_vc1_v_loop_filter8_mmxext'`
不过仍然实行之前的方式:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihSRTYUJ1fxKxqDVI7yDkOZbaj3hASw3p5eWxF1CaBGU9fAn1lmBNM9DytNwIVo68JOGFSb84PABPgFGlNqc6gAon8cpx9MvoWYmSnTvn01lY_YGK4x2Uo1ZC-hJJgRFPm0OmiP8HVUAU/s1600/1543022744_2018-11-24_8jAqppAJtT.png)
如常, 只不过 grep 要确保 grep x86 目录。 .asm 与 .c 一样换成 .o:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFRJ_ackbHk-zXJw0nka3K4CoqMQAU4LREyu5WwI5eEQDCKaLspSmdkfD4TJHhqrKlwRMR7AKFFwFvq2w7_MJAgadr8NJ9r4hMKCWNT-KEbEkoFwSxoauKHYGKamn_DWPndHwAYWCgHro/s1600/1543023425_2018-11-24_i2tgclvtRX.png)
然而你会发现很奇怪的现象, 有 4 个是指向原本的文件 vc1dsp_init.c:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgXQc09RfY3krgZdPh2bd8fN-ySU5uXrQVnsj8MgN-EtV91e4GcwFEBzIacfEDJ0D_Pe2wSem1nK14XQO3BjCH1kDMrFVZW6RjWZj5gWICMP5yu7bcb5t5VtI2wtUplmMH3V5qoSB8STE/s1600/1543023784_2018-11-24_C0z7basZ4n.png)
改变 grep, 可以看出压根没有其它真正的定义却直接使用:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivpRqfXJMTf5pF3gmljpxRIbBged8wClPjZ_Vlw_WkyQQ7nPsA1rR2C6Y7sA5BdcUUdAVDEIyn5OolajxvUYl86cPZkV-6zE1R7yBtwVseFKMozX4H_Sjp6FryRRKChzf58ALy9f0wF30/s1600/1543024123_2018-11-24_IwX6Rh9uWZ.png)
必须修改它们成注释:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTd5EpR-i1n9q3SJ9RoQ18HWdDvrcBQCTo2u5jOCcTTJdFWZUTb0InWRAYhuf8HG0va0Mcpat8fm2KrG3Q78siTNMEmnTbLM9t1IVB4XdvGt0is-DCSymjKgxLd4UfR9ail46QaVyj7yE/s1600/1543023943_2018-11-24_weVHmFMLNM.png)
如常 `make distclean; CFLAGS='-DFF_API_WITHOUT_PREFIX -DFF_API_DEBUG_MV -DFF_API_MOTION_EST' ./configure --disable-tv-v4l1; make VERBOSE=1` 一条龙:
grep 可以发现只有一个说明在 .asm 定义, 其它只是照跟。 如常修改:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTHeYAvKzBbVdJiQJvGBcHJyo8tUoJSOIMOdP0e8BTW_H5Xx9u-MMbe_zpMk_4QA_EV33bNwubCkPz2g6nVeDs1C2Jq50tVfZCZjPEcvUZUuQ2QawFixCZ8bDDyQV235owlPnl4eKbvrs/s1600/1543025873_2018-11-24_cpV1ItYFIY.png)
这样一来其实之前那个不需要注释也行, 也是 .asm 分别定义 8x8, 4x8, 8x4, 4x4:
网上的一些基本解释:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJjtP5-UL16hxxFx0j0rrCLA74jbkRN0m0V-81YrKOWuMTI59Vofdju3mdudmjyK_qk-g0TWCjLlT9A8TjroII5JdRdlwHDkWqac_VTNdwsH5kyxYfl0mm6ftyiY0qe-6rutKgaSdq-1k/s1600/1543076449_2018-11-25_X3I2NHSAzd.png)
如常 `make distclean; CFLAGS='-DFF_API_WITHOUT_PREFIX -DFF_API_DEBUG_MV -DFF_API_MOTION_EST' ./configure --disable-tv-v4l1; make VERBOSE=1` 一条龙:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg0yFIfRDx5dimryNbyX_bO6M6MSzQKH7ZZwhZUB58gUbi5XM6C_2M2IDZ9xBkjYnkfg2HC9OZJ2hyBIjaJlCrN1CsSaT5pgS6eal4zqcju91RkTCZpSsIWuhUwfGsBeP6shYUJ3JNT2w/s1600/1543027575_2018-11-24_f5MqlCBrtK.png)
有点小感动有没有 (づ。◕‿‿◕。)づ
No comments:
Post a Comment