192脳7/32脳1/632等于7 54等于23多少?

240脳1/6_百度知道2/3十1/3十1/6十…十1/192求简便方法_百度知道我是来唱反调的。&br&剧情里的那些硬伤也不提了。&br&单说这套被吹捧上天的“规矩”跟情怀。&br&&br&其实是看到这种价值观的电影在号称理性民主思想前卫尊重人权的知乎获得口径如此统一的夸赞实在有点瞠目结舌。&br&真是双标得可以。&br&这里面的六爷,瞧不起女人,看不上孩子,结了婚了还在外面混结果坑死了自己媳妇,时刻以长辈自居,知道有债要还可一旦还不起就开始耍流氓跟人约架,蔑视西医,讲究什么“身体发肤受之父母”&br&这里面哪条放到知乎不会被喷成狗?&br&&br&&br&一条一条说。&br&&br&知乎上之前有句话被点了很多赞,大概意思是:一个人获得尊重不是因为他有多大年纪是什么身份,而是要看他做了什么。&br&六爷在胡同里有些作为,被人尊重几句就不说了,他跑到别人家,咣咣咣地砸开门,一言不发走到人家里,到处溜达着看,换你你不毛你不气啊,人嘴上骂两句,这边就动上手了,还顺便教做人,说什么你爹妈没教你好好说话教你规矩吗?&br&请问私闯民宅是你家规矩啊?&br&&br&自己儿子把人女朋友睡了,知道自己理亏了,不报警,要去私了。说这是规矩。&br&一来二去就找人凑钱(我就不说他开始为了赎人找许晴借钱顺便脱人裤子的流氓行径了),借钱靠什么的,就靠过去那点情谊跟面子,后来诸发小中有个人发达了,一眼看出他不是来叙旧的(废话现在人都这么忙谁他妈没事儿跑来叙旧啊,你突然收到一个许久没联系的同学的短信你就该知道这货要结婚了是问你来随份子钱的),人生意忙,也没多说什么,把钱给他了。他还不乐意了,觉得没受到应有的尊重。&br&合着借钱给你还得求你啊?&br&借钱给你还得照顾你面子跟自尊心?&br&人是老板,不用为自己公司,为公司员工负责啊,就他妈得为你一人负责啊?&br&&br&他别的那些兄弟发小没肯借钱给他,你站在主角的立场肯定觉得人不仗义,可如果换一下,某天你爹的老基友来了张嘴就是十万八万的,你能乐意?&br&&br&他在医院拒绝治疗(第二次是拒绝手术,这最后死了就不赖别人了),这在知乎上当成“你见过那个作死的病人”的答案写,稍加笔墨,肯定又是好几千赞。&br&&br&后来去还钱,猪队友把人车直接给磨了…………&br&他知道自己赔不起钱,就直接要动手,还说什么按北京的规矩来去颐和园后面的野湖上约架……&br&我他妈真是服了………………&br&几百万的价钱是一场架就能解决的?&br&什么都诉诸武力这是哪个年代的规矩跟价值观?&br&人家同意你就赶快磕头谢恩吧好吗?&br&(唉唉前两天那个如何评价原配带人打小三那个题都怎么说的来着?)&br&&br&后来人家姑娘被他这股英气折服了,连钱带人给送回来了。&br&&b&这时候按照他的“规矩”不是应该大义凛然地说:姑娘,人你留下,钱你送回去,我儿子划了人车了,这钱我该赔。&/b&&br&&b&可是呢?然后呢?&/b&&br&&b&他他妈居然收下了?&/b&&br&&b&你规矩呢?&/b&&br&&b&就值这十万?&/b&&br&&br&&br&后来他那些马仔骗自己兄弟说要不行了,快来见最后一面吧,人一个个都拖家带口的年纪不小了,让他们来替你打架,还是骗来的。&br&合适吗?&br&合适吗?&br&合适吗?&br&&br&最后,一个说把只偷钱不拿人身份证的小偷誉为“讲究”的人,去跟中纪委举报贪污,而且手里面还只有张几千万人民币的对账单。&br&说服力在哪儿?&br&还非说“举报”跟“报警”不一样。&br&我真是…………&br&&br&哎算了你们开心就好。&br&&br&最最后:&br&1.六爷整个人,他只贯彻他自己的规矩,丝毫不顾及别人。觉得自己这个年纪要获得应有的尊重。一旦有不如意的地方脸上就写满了“这都是世界的错”,觉得这世道变了,觉得“哎呀呀人怎么能这样?”&br&他还觉得自己挺体面…………&br&这么大年纪还这么中二,也他妈不嫌丢人,知不知道害臊啊?&br&&br&2.李易峰那个角色是必不可少的,可他倒是换成谁都行。来来去去就等着眼睛吼啊叫啊晃啊……&br&相比之下吴亦凡倒是挺好地完成了任务——当然也因为这种眼神中闪烁着“这不是我想要的生活”的富二代比较模板,演起来不难。&br&&br&3.吴亦凡看的那本书是《边城浪子》,小李飞刀系列的第二部。不是《小李飞刀》……&br&诸位爷不要再显摆你们有文化了好吗?&br&&b&给诸位爷科普一下,没有《小李飞刀》这本书,讲李寻欢的事儿的那本书叫《多情剑客无情剑》或者《风云第一刀》。没有哪本书名叫《小李飞刀》的,哎,捉急。&br&&/b&&br&4.你们高呼什么六爷有情有义有讲究,请问回家后看到胡同口那些满嘴脏话动手动脚不讲道理的北京人,好感度会上升吗?不知道“不是老人变坏了而是坏人变老了”说的是谁吗?&br&&br&别的不说了。
我是来唱反调的。 剧情里的那些硬伤也不提了。 单说这套被吹捧上天的“规矩”跟情怀。 其实是看到这种价值观的电影在号称理性民主思想前卫尊重人权的知乎获得口径如此统一的夸赞实在有点瞠目结舌。 真是双标得可以。 这里面的六爷,瞧不起女人,看不上孩子…
更新:&br&我接触到的所谓“开发秘话”大多是小公司的视点,但是就我力所能及的范围内补充一下吧。&br&添加了大公司的开发环境以及Debug方法。&br&&br&---------------------------------------------------&br&&br&我在日本就读专门学校时,我的老师正是那个年代的程序员,前世嘉家用机部门部长,从SG-1000年代走过来的老人,本人有幸从老师口中得知了许多知识,结合我自己的知识,就让我稍微讲讲吧。&br&&br&这位 &a data-hash=&8d9ff2eab2f161adc85a38& href=&///people/8d9ff2eab2f161adc85a38& class=&member_mention& data-editable=&true& data-title=&@平机王作者& data-hovercard=&p$b$8d9ff2eab2f161adc85a38&&@平机王作者&/a& 观察能力相当了得,发现了游戏中的素材复用等细节,但是很明显对游戏开发的技术细节并不了解,写了很多但是其中谬误却不少。比如“卡机死机”……在那个年代,没有操作系统,程序绝对不可能“耗尽资源”而死机,一个正常的程序无论经历多长时间总会完成指定的操作,进入下一个循环。&br&这里就简单讲一下游戏编程和普通软件编程的区别。普通软件的业务流程通常是,启动,处理业务,结束这么一套流程。但是游戏的本质则是无限循环,程序启动之后就会进入所谓的“主循环”,除非玩家主动退出(在那个年代甚至都没有退出这个功能),就会永远的循环下去。当然,每个循环肯定要给玩家不同的反馈,不然一动不动不就是死机了么。&br&而死机的理由通常不外乎三种:CPU执行了一个它不认识的机器码/执行了HCF指令(Halt and Catch fire),试图读取/写入一个不存在的内存地址导致CPU总线挂掉,或者在某个子程序之中陷入无限循环无法跳出,导致永远无法进入下一个循环。&br&&br&&a data-hash=&5b4c4c4b09f8e4bd715f23& href=&///people/5b4c4c4b09f8e4bd715f23& class=&member_mention& data-editable=&true& data-title=&@孟德尔& data-hovercard=&p$b$5b4c4c4b09f8e4bd715f23&&@孟德尔&/a&
书记的答案比较贴切的描述了当时的制作场景(要结合评论观看),但是并没有涉及细节。不免让人有种“欲求不满”之感,于是下面就是一些干货了。 &br&&br&最开始,请记住初代FC的发售日是1983年7月。&br&&br&制作游戏,首先需要有策划,这个阶段通常就是在纸面上进行一些设计,确定美术风格,固化设定,探讨各方面的可行性。和今日的游戏开发差不多,当然,那个时代的想象力也是受到了一定的限制的……&br&&br&拍板之后,就会开始写“仕样书”(对应英语Specification),详细确定具体细节,以便日后程序员实现。当然,也有跳过这一步直接开始制作的,那个年代条件有限,全才比较多,程序员懂美术懂音乐司空见惯,游戏策划师本人就是主程序员的事情也不少见。&br&理想状态下,自然是完整的企划书,仕样书,美术素材,音乐素材一切就绪之后开始写程序,不过这是不可能的……所以通常大家会并行推进工作。&br&&br&程序方面,想耍高级语言那是不可能的,6502的性能实在捉鸡,编译出来的C代码跑起来那速度,画面太美不敢想象,只能手写汇编。而同样是汇编,和今日的汇编相比起来那就是地狱级难度。为什么?最开始的时候,那帮苦逼程序员手里是没有宏汇编器的!&br&这意味着什么?&br&举个栗子,在今天非常常见的汇编代码写法(以x86为例):&br&&div class=&highlight&&&pre&&code class=&language-text&&push teststr
call _printf
add esp, 4
xor eax, eax
teststr : db 'Hello World!'
&/code&&/pre&&/div&现代的汇编器会自动计算出teststr所在的内存地址,并转换成16进制数替换掉push后面的teststr。但是在那个年代,这根本就是天方夜谭,你需要在那里留空,代码全部写好之后检查一下字节数,然后自己计算地址,写入留空的地方,这是一件非常蛋疼的事情,那个年代的程序员需要克服的“Human Error”比今天的程序员们要多得多。到80年代后期,宏编译器普及之后程序员们可算从计算地狱之中解放了出来……&br&当然也不会有什么随时随地Debug执行一下看看效果之类的说法,想要看效果,就必须把写好的程序和临时素材烧进EPROM里面(那个年代EEPROM也是稀罕货,可编程ROM基本都是一次性的,这都是成本,也直接阻止了程序员们的大部分“试试看”的想法),在实机上执行。&br&需要Debug的信息么,就自己输出到画面上,于是就会产生游戏完成的时候程序员忘了把Debug模式删掉导致一些奇怪的秘籍的诞生……&br&而硬件Debugger是SFC才有的,彼时已经1990年,是FC发售的7年之后了……&br&&br&真正财大气粗的公司,对,我说的就是那些街机大佬出身的,比如说NAMCO。&br&他们在开发的时候一是硬件资源充足,他们可以用小型机写代码!他们能用VAX!那个年代这根本就是大杀器,都可以用软件或者一些外围硬件做各种模拟器(Emulation Probe)。那个年代硬件结构也相对简单,任天堂并没有做任何硬件保护,这帮人完全可以彻底分析硬件,然后用比如HP 64000之类的硬件开发平台,配上自己做的一些硬件模拟器,那开发效率自然是刚刚的。这些公司对FC硬件架构吃透之后,甚至可以自己开发第三方的MMC(内存映射控制器,可以让FC通过切换BANK的方式寻址多于64K的地址空间),并添加一系列音频增强功能!&br&二是人力资源充足。我是说那种站在那个年代的角度的“上古程序员”。他们莫说汇编了,70年代做开发的时候都是直接手写二进制代码!你都能手写二进制代码了,在什么平台上写代码还重要么……我的老师就讲过这方面的趣事,他是1981年进入了世嘉公司,那个时候幸运的是已经普及了汇编工具,他在写代码的时候遇到了一个BUG,盯着汇编好的二进制代码发呆,旁边的前辈过来看了看他的屏幕,指着一串数字说“你这里写错了,应该写成abcd....”,听的我老师一愣一愣的。&br&那个年代程序员在现代角度来说一个个都是开挂神人……&br&还有一些中大型公司,他们可以买一些当年被称作ROM模拟器玩意,通过串口把数据传输到板子上运行。比那些小型机,硬件开发平台之类的便宜很多,但是依然不是小型公司能买得起的……&br&&br&美术方面,正如 &a class=&internal& href=&/people/kan-tang-jun-27&&阚唐君&/a& 所说,由于游戏画面的特殊性(通常是一个固定的背景,上面有一些能够活动的物体),所以FC的画面是背景+活动快构成的。而这些背景和活动快则是由一个个8x8像素的Tile构成的。而且由于屏幕分辨率的低下(256x224)、以及固定调色板的彩色模式(只有固定的54种颜色可以使用),所以艺术家们只能通过像素艺术(Pixel Art)来表达自己的想法。&br&而画画这种事情并不需要在目标机器上进行,财大气粗的公司可以选择一些图形工作站,比如施乐的一些高档货色,那个年代的程序员们也比较热衷于造轮子,弄台苹果2,接个彩电,写个画点阵图的程序也未尝不可。无论如何,只要图画出来,并且能够转换为FC的PPU(图像处理器)能够识别的数据就可以了。&br&当年KID公司的作曲家盐田信之(如果我没记错的话)在博客上讲述过在接SFC外包的时候,看到发行商公司里面有三台NeXT来做图形制作,看的直流口水,要借还不给,只能自己搞一些简陋的工具凑合的趣事。&br&正由于这些苦难,好不容易做好的一些漂亮的效果通常就都会复用了,无论是图像还是音频。反正都是公司财产,还能增加开发效率,何乐而不为。&br&&br&声音上,那个声音“生成”芯片(也就是凭空生成波形的,并不是通过合成PCM采样来播放音乐的)作为主流的年代,MML似乎成为了一种既定标准,当然,它易于被程序处理,简洁易记等特点也决定了程序员们不会在这方面造一些不必要的轮子。MML是一种音乐记述语言,是一种文本化的乐谱。当年诺基亚的铃声编辑也是MML的一个变种。&br&作曲家用MML写好音乐之后,程序员就会把它转换成自己的音频引擎能够识别的二进制格式,合并到游戏数据之中。当然,也有作曲家本人负责音频引擎编写的猛者,比如Tim Follin大神……&br&当然,FC有一个DPCM通道,不过在那个ROM容量捉襟见肘的年代,一是不会太奢侈,二是那解析度只有1bit,效果也不会太好,适合一些简单的音频,比如军鼓什么的。&br&FC嘛,只有那么些个通道(2方波,1三角波,1噪音),想要达到一些好的效果就需要一些创意了。比如如果作曲家本人对合成器的知识比较深,可以玩出一些花样,比如Tim Follin大神把三角波和噪音硬生生玩成了TB303的感觉……&br&&br&于是,现在程序,图像,声音都有了,剩下来的就是烧进ROM里,接到机器上,Debug!&br&而Death March什么的那个年代也很常见,这个跟现代没什么区别,基本上都是临近发布的那段时间没日没夜加班加点赶工。&br&&br&好了,Bug没了,到了截止日期了,Master掉,提着软盘去任天堂,点头哈腰三鞠躬,毕恭毕敬的把数据双手呈上交给老任,忍受着任天堂人员的傲慢无礼,顺便被狠宰一刀(要掏一大笔钱作为“生产费”,老任绝对不会帮你垫付),为了游戏大卖时的收入,忍气吞声熬过这一切,再点头哈腰“阿里加多撒有哪啦”,180转身,走出任天堂大门,多走几步,吐出一口浊气,往地上“呸”的吐一口痰,骂一句“八格牙路”,就一切搞定了!&br&当然,那些接外包的小公司不用去受这窝囊气,把数据丢给发行商,让他们去折腾就完事了。&br&&br&于是,一个游戏从企划到发售应该是写全了吧……我也没想到会写这么多,或许有一些漏掉的地方,可以在评论中指出来,我会补充进答案之中。&br&&br&感谢你能耐心的读完这么长的回答,谢谢!&br&&br&谢谢大家的赞!我第一次有这么多赞我太感动了TwT&br&&br&百赞了!!!OwO
更新: 我接触到的所谓“开发秘话”大多是小公司的视点,但是就我力所能及的范围内补充一下吧。 添加了大公司的开发环境以及Debug方法。 --------------------------------------------------- 我在日本就读专门学校时,我的老师正是那个年代的程序员,前世…
有几个问题:&br&1. 字节序问题,当然现在一般arm也是用和x86一样的字节序,但也有可能不一样&br&2. SIMD问题,x86下的SSE MMX指令在arm上没有,要用NEON重新实现这些算法&br&3. 性能问题,arm的计算能力不如x86,有些在x86上运行性能还可以的软件,到arm上要重新做优化&br&4. 个别bug,比如arm和x86调用函数的方式,参数传递入栈的方式不一样,有些小的栈溢出问题在x86上没事到了arm就崩溃了。&br&5. 第三方库,不是所有第三方的库都有arm版,或者也能在arm下编译的。
有几个问题: 1. 字节序问题,当然现在一般arm也是用和x86一样的字节序,但也有可能不一样 2. SIMD问题,x86下的SSE MMX指令在arm上没有,要用NEON重新实现这些算法 3. 性能问题,arm的计算能力不如x86,有些在x86上运行性能还可以的软件,到arm上要重新做…
赚钱的行业就是总需求大,而从业人员少,这种行业很多但都有进入壁垒,所谓壁垒就是 政策 资金 技术,普通人知道也没用,没门路没资金没技术,知道也干不了。
赚钱的行业就是总需求大,而从业人员少,这种行业很多但都有进入壁垒,所谓壁垒就是 政策 资金 技术,普通人知道也没用,没门路没资金没技术,知道也干不了。
能做到领导人这个位子,思维能力都差不多,当思维能力一定的情况下,单位时间内说出的话的包含的信息量就差不多,这个输出信息量是无法超于自身的思维能力的,否则就表现为语无伦次胡说八道了。&br&&br&那么问题就清楚了,因为中文的信息密度大,单位音节包含的信息量要比英文多得多。&br&同样含义的话,用中文写下来字符数要少得多,读起来音节数也要少。&br&如果中文演讲语速和英文一样,那么演讲者自己思维就跟不上了,台下听众也跟不上,做同传的那位恐怕想死的感觉都有了。&br&&br&有个很好的例子,就是马云,要承认他的演讲口才思维能力,都是顶级的,而且他英文相当不错,可以对比他的中英文演讲,就会发现,英文语速快,音节密度高。&br&&a href=&///?target=http%3A///v_show/id_XMjM3NTcyNDYw.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&马云哥比亚大学 商学院 英文 演讲&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A///v_show/id_XODM2NzgyOTM2.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&马云乌镇40分钟演讲&i class=&icon-external&&&/i&&/a&&br&&br&另外个例子,陆克文,这个算是西方领导人了,而且他中文相当好,可以对比下他分别用中英文演讲的情况。
能做到领导人这个位子,思维能力都差不多,当思维能力一定的情况下,单位时间内说出的话的包含的信息量就差不多,这个输出信息量是无法超于自身的思维能力的,否则就表现为语无伦次胡说八道了。 那么问题就清楚了,因为中文的信息密度大,单位音节包含的信…
这个问题都问了两年多了,没有很好的回答,我最近正好搞定了iOS的硬解码 H.264,借这个问题来分享下经验。&br&&br&其实至少从iPhone4开始,苹果就是支持硬件解码了,但是硬解码API一直是私有API,不开放给开发者使用,只有越狱才能使用,正常的App如果想提交到AppStore是不允许使用私有API的。&br&&br&从iOS8开始,可能是苹果想通了,开放了硬解码和硬编码API,就是名为 VideoToolbox.framework的API,需要用iOS 8以后才能使用,iOS 7.x上还不行。&br&&br&这套硬解码API是几个纯C函数,在任何OC或者 C++代码里都可以使用。&br&&br&首先要把 VideoToolbox.framework 添加到工程里,并且包含以下头文件。&br&&p&#include &VideoToolbox/VideoToolbox.h&&/p&&br&&p&解码主要需要以下三个函数&/p&&p&VTDecompressionSessionCreate 创建解码 session&/p&&p&VTDecompressionSessionDecodeFrame 解码一个frame&/p&&p&VTDecompressionSessionInvalidate 销毁解码 session&/p&&br&&p&首先要创建 decode session,方法如下:&/p&&div class=&highlight&&&pre&&code class=&language-c&&
&span class=&n&&OSStatus&/span& &span class=&n&&status&/span& &span class=&o&&=&/span& &span class=&n&&VTDecompressionSessionCreate&/span&&span class=&p&&(&/span&&span class=&n&&kCFAllocatorDefault&/span&&span class=&p&&,&/span&
&span class=&n&&decoderFormatDescription&/span&&span class=&p&&,&/span&
&span class=&nb&&NULL&/span&&span class=&p&&,&/span& &span class=&n&&attrs&/span&&span class=&p&&,&/span&
&span class=&o&&&&/span&&span class=&n&&callBackRecord&/span&&span class=&p&&,&/span&
&span class=&o&&&&/span&&span class=&n&&deocderSession&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&&br&&p&其中 decoderFormatDescription 是 CMVideoFormatDescriptionRef 类型的视频格式描述,这个需要用H.264的 sps 和 pps数据来创建,调用以下函数创建 decoderFormatDescription&/p&&p&CMVideoFormatDescriptionCreateFromH264ParameterSets&/p&&p&需要注意的是,这里用的 sps和pps数据是不包含“00 00 00 01”的start code的。&/p&&br&&p&attr是传递给decode session的属性词典&/p&&div class=&highlight&&&pre&&code class=&language-c&&
&span class=&n&&CFDictionaryRef&/span& &span class=&n&&attrs&/span& &span class=&o&&=&/span& &span class=&nb&&NULL&/span&&span class=&p&&;&/span&
&span class=&k&&const&/span& &span class=&kt&&void&/span& &span class=&o&&*&/span&&span class=&n&&keys&/span&&span class=&p&&[]&/span& &span class=&o&&=&/span& &span class=&p&&{&/span& &span class=&n&&kCVPixelBufferPixelFormatTypeKey&/span& &span class=&p&&};&/span&
&span class=&c1&&//
kCVPixelFormatType_420YpCbCr8Planar is YUV420&/span&
&span class=&c1&&//
kCVPixelFormatType_420YpCbCr8BiPlanarFullRange is NV12&/span&
&span class=&kt&&uint32_t&/span& &span class=&n&&v&/span& &span class=&o&&=&/span& &span class=&n&&kCVPixelFormatType_420YpCbCr8BiPlanarFullRange&/span&&span class=&p&&;&/span&
&span class=&k&&const&/span& &span class=&kt&&void&/span& &span class=&o&&*&/span&&span class=&n&&values&/span&&span class=&p&&[]&/span& &span class=&o&&=&/span& &span class=&p&&{&/span& &span class=&n&&CFNumberCreate&/span&&span class=&p&&(&/span&&span class=&nb&&NULL&/span&&span class=&p&&,&/span& &span class=&n&&kCFNumberSInt32Type&/span&&span class=&p&&,&/span& &span class=&o&&&&/span&&span class=&n&&v&/span&&span class=&p&&)&/span& &span class=&p&&};&/span&
&span class=&n&&attrs&/span& &span class=&o&&=&/span& &span class=&n&&CFDictionaryCreate&/span&&span class=&p&&(&/span&&span class=&nb&&NULL&/span&&span class=&p&&,&/span& &span class=&n&&keys&/span&&span class=&p&&,&/span& &span class=&n&&values&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&nb&&NULL&/span&&span class=&p&&,&/span& &span class=&nb&&NULL&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&&p&其中重要的属性就一个,kCVPixelBufferPixelFormatTypeKey,指定解码后的图像格式,必须指定成NV12,苹果的硬解码器只支持NV12。&/p&&br&callBackRecord 是用来指定回调函数的,解码器支持异步模式,解码后会调用这里的回调函数。&br&&br&如果 decoderSession创建成功就可以开始解码了。&br&&div class=&highlight&&&pre&&code class=&language-c&&
&span class=&n&&VTDecodeFrameFlags&/span& &span class=&n&&flags&/span& &span class=&o&&=&/span& &span class=&mi&&0&/span&&span class=&p&&;&/span&
&span class=&c1&&//kVTDecodeFrame_EnableTemporalProcessing | kVTDecodeFrame_EnableAsynchronousD&/span&
&span class=&n&&VTDecodeInfoFlags&/span& &span class=&n&&flagOut&/span& &span class=&o&&=&/span& &span class=&mi&&0&/span&&span class=&p&&;&/span&
&span class=&n&&CVPixelBufferRef&/span& &span class=&n&&outputPixelBuffer&/span& &span class=&o&&=&/span& &span class=&nb&&NULL&/span&&span class=&p&&;&/span&
&span class=&n&&OSStatus&/span& &span class=&n&&decodeStatus&/span& &span class=&o&&=&/span& &span class=&n&&VTDecompressionSessionDecodeFrame&/span&&span class=&p&&(&/span&&span class=&n&&deocderSession&/span&&span class=&p&&,&/span&
&span class=&n&&sampleBuffer&/span&&span class=&p&&,&/span&
&span class=&n&&flags&/span&&span class=&p&&,&/span&
&span class=&o&&&&/span&&span class=&n&&outputPixelBuffer&/span&&span class=&p&&,&/span&
&span class=&o&&&&/span&&span class=&n&&flagOut&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&其中 flags 用0 表示使用同步解码,这样比较简单。&br&其中 sampleBuffer是输入的H.264视频数据,每次输入一个frame。&br&先用CMBlockBufferCreateWithMemoryBlock 从H.264数据创建一个CMBlockBufferRef实例。&br&然后用 CMSampleBufferCreateReady创建CMSampleBufferRef实例。&br&这里要注意的是,传入的H.264数据需要Mp4风格的,就是开始的四个字节是数据的长度而不是“00 00 00 01”的start code,四个字节的长度是big-endian的。&br&一般来说从 视频里读出的数据都是 “00 00 00 01”开头的,这里需要自己转换下。&br&&br&解码成功之后,outputPixelBuffer里就是一帧 NV12格式的YUV图像了。&br&如果想获取YUV的数据可以通过&br&&div class=&highlight&&&pre&&code class=&language-c&&
&span class=&n&&CVPixelBufferLockBaseAddress&/span&&span class=&p&&(&/span&&span class=&n&&outputPixelBuffer&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&);&/span&
&span class=&kt&&void&/span& &span class=&o&&*&/span&&span class=&n&&baseAddress&/span& &span class=&o&&=&/span& &span class=&n&&CVPixelBufferGetBaseAddress&/span&&span class=&p&&(&/span&&span class=&n&&outputPixelBuffer&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&&p&获得图像数据的指针,需要说明baseAddress并不是指向YUV数据,而是指向一个CVPlanarPixelBufferInfo_YCbCrBiPlanar结构体,结构体里记录了两个plane的offset和pitch。&/p&&br&&p&但是如果想把视频播放出来是不需要去读取YUV数据的,因为CVPixelBufferRef是可以直接转换成OpenGL的Texture或者UIImage的。&/p&&p&调用CVOpenGLESTextureCacheCreateTextureFromImage,可以直接创建OpenGL Texture&/p&&br&&p&从 CVPixelBufferRef 创建 UIImage&/p&&div class=&highlight&&&pre&&code class=&language-c&&
&span class=&n&&CIImage&/span& &span class=&o&&*&/span&&span class=&n&&ciImage&/span& &span class=&o&&=&/span& &span class=&p&&[&/span&&span class=&n&&CIImage&/span& &span class=&nl&&imageWithCVPixelBuffer&/span&&span class=&p&&:&/span&&span class=&n&&pixelBuffer&/span&&span class=&p&&];&/span&
&span class=&n&&UIImage&/span& &span class=&o&&*&/span&&span class=&n&&uiImage&/span& &span class=&o&&=&/span& &span class=&p&&[&/span&&span class=&n&&UIImage&/span& &span class=&nl&&imageWithCIImage&/span&&span class=&p&&:&/span&&span class=&n&&ciImage&/span&&span class=&p&&];&/span&
&/code&&/pre&&/div&&br&&p&解码完成后销毁 decoder session&/p&&p&VTDecompressionSessionInvalidate(deocderSession)&/p&&br&&p&硬解码的基本流程就是这样了,如果需要成功解码播放视频还需要一些H.264视频格式,YUV图像格式,OpenGL等基础知识。&/p&&br&&p&还是有很多小细节要处理的,无法在这里一一说明了,有人有问题可以在评论里讨论。&/p&&p&从解码到播放,大约1000行代码左右,主要是OpenGL渲染的代码比较多。&/p&&br&&p&苹果官方的示例代码:&/p&&p&&a href=&///?target=https%3A///wwdc/resources/sample-code/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&WWDC - Apple Developer&i class=&icon-external&&&/i&&/a&&/p&&br&&p&苹果的例子下载链接实效了,我也找不到那个例子,我自己写了一个。&/p&&p&&a href=&///?target=https%3A///stevenyao/iOSHardwareDecoder& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&stevenyao/iOSHardwareDecoder · GitHub&i class=&icon-external&&&/i&&/a&&/p&
这个问题都问了两年多了,没有很好的回答,我最近正好搞定了iOS的硬解码 H.264,借这个问题来分享下经验。 其实至少从iPhone4开始,苹果就是支持硬件解码了,但是硬解码API一直是私有API,不开放给开发者使用,只有越狱才能使用,正常的App如果想提交到AppS…
用一个专门的 make系统来维护工程文件,比如CMake 或者 qmake&br&这样你就可以精确控制对工程配置的修改,然后分别生成 的 project,分别编译。&br&&br&平时在2013上开发测试,发布前用2005编译验证,然后手工把工程文件的改动合并到公司的2005工程。&br&&br&2013两大优点, C++11支持,方便的代码提醒自动完成。&br&&br&前一个你不可能用,后一个可以装个 VisualAssist解决,我个人觉得从编辑体验上来讲,装了VA的2008比默认的2013还好用。
用一个专门的 make系统来维护工程文件,比如CMake 或者 qmake 这样你就可以精确控制对工程配置的修改,然后分别生成 的 project,分别编译。 平时在2013上开发测试,发布前用2005编译验证,然后手工把工程文件的改动合并到公司的2005工程。 2013…
我们先假设某人在音视频方面是零基础,也没学过任何数字信号处理相关知识,数学基础基本是高中水准,但是熟悉 C/C++ 开发,至少熟悉某一个平台下的编译调试IDE。&br&&br&着重研究两个开源项目 ffmpeg 和 webRTC,主要看ffmpeg的视频部分和webRTC的音频部分。&br&&br&首先,从视频解码入手,这个最简单,调用 ffmpeg视频解码的基本代码只有100行左右,具体可以参考 &a data-hash=&65ee22f587db90daf924a33& href=&///people/65ee22f587db90daf924a33& class=&member_mention& data-hovercard=&p$b$65ee22f587db90daf924a33&&@雷霄骅&/a&
的blog,有详细示例和说明。视频解码只要搞懂h.264就好了,80%+场景都是这个编码格式了,了解基本的 H.264 的 sps pps NAL等文件格式概念,了解YUV图像格式原理,了解YUV到RGB的转换,这样就可以做图像渲染,可以实现一个简单的视频播放器。 &br&&br&然后,学习视频编码,建议从x264入手,一个简单的调用x264的编码代码也不到100行。编码比解码复杂在于,解码是不需要配置什么参数的,而编码有大量参数需要配置,初期只要了解几个基本概念就好了,比如 帧速率, 常用流控方式
ABR CRF,GOP,I/B/P Frame分别是什么意思。&br&&br&音频部分的编解码和视频差不多,初期只需要了解两种编码器EAAC+和Silk,了解 声道,采样率等概念,了解 Wave文件格式。可以做一个简单音频播放器。&br&&br&音频复杂的地方不是编解码,而是音效,看下 webRTC里的 Audio Processing module,理解以下几个概念,去噪NS,消回声AEC,静音检测VAD,自动增益控制AGC,webRTC内置的这几个算法虽然不是最好的,但是可以解决90%+的问题了,值得学习下。&br&&br&学到了这里需要思考个问题了,自己是想走工程路线还是算法路线,如果是算法路线,那么必须要去学数学了,数字信号处理背后是大量的数学基础理论。如果是工程路线,那么要去学习跨平台开发,学习多个平台下音视频的采集,播放和处理,学习多平台下汇编语言优化。&br&&br&音视频是个水很深的领域,学一辈子都学不完,但这个领域有个好处,就是知识更新速度比较慢,学的东西不容易被淘汰,经验的积累非常重要。
我们先假设某人在音视频方面是零基础,也没学过任何数字信号处理相关知识,数学基础基本是高中水准,但是熟悉 C/C++ 开发,至少熟悉某一个平台下的编译调试IDE。 着重研究两个开源项目 ffmpeg 和 webRTC,主要看ffmpeg的视频部分和webRTC的音频部分。 首先…
会,大经济形势不好,这个已经很明显了,互联网业也不可能独善其身,多少要有些影响。&br&即使某些公司的业务不太受这个影响,也会借这个机会做些调整,这时候调整来自内外部的阻力会小很多,大形势不好嘛,迫不得已啦。&br&&br&这种事不是第一次也不会是最后一次,2000年互联网泡沫破裂,08年金融危机时都发生过,坚持下就过去了。&br&&br&这种事对应届生来说,说重要也不重要,重要的是机会不重要的是薪水。08年金融危机导致外企大规模紧缩,基本都大幅削减了招聘,甚至冻结了headcount,这就导致大批优秀人才不得已投身国内互联网企业,最近几年BAT风光无限,小米360崛起,想想08年那批真是塞翁失马焉知非福啊。这次不过是轮到了国内互联网巨头罢了,同样这也给了中小企业笼络人才的机会。&br&&br&互联网竞争本质上是人才的竞争,观察人才流动方向基本就能预测几年后的走势。有时候这种流动是主动的,有时候也是被迫的。比如,08年后moto,nokia,索爱,北电,西门子等通信业巨头相继倒掉,国内手机公司就如雨后春笋了,背后的原因之一就是人才流动。2两年前手游还都是2D为主,忽然间3D制作就流行起来了,背后是做端游的人们在转型。&br&&br&人生很长,职场生涯一般也有40年左右,不可能总是一帆风顺,好三年坏三年是常态,好的时候抓住,坏的时候忍住。利用这两年时间好好经营下自己,完善知识结构,积累某个行业的经验,锻炼下身体,几年后好日子来的时候机会是属于那些经验丰富技术好,身体强壮精力旺盛的人的。&br&&br&我为什么对未来有信心呢?因为基于一点,目前互联网行业的巨头基本都是70后创立的,未来10年该轮到80后表演了,80后可有两亿多人呢,不可能就这么无声无息过去的。当80后站在舞台中央的时候,整个产业会迎来一次新的飞跃。
会,大经济形势不好,这个已经很明显了,互联网业也不可能独善其身,多少要有些影响。 即使某些公司的业务不太受这个影响,也会借这个机会做些调整,这时候调整来自内外部的阻力会小很多,大形势不好嘛,迫不得已啦。 这种事不是第一次也不会是最后一次,20…
对于买一套房子自己住的人来说,房价暴跌也无所谓,只要整体经济还在平稳增长,工作收入稳定就行。&br&&br&重点是要年轻,要有一项有竞争力的职业技能。即使出现经济危机,也不会持续太久,坚持几年就过去了,中国经济长期看还是可持续崩溃的,不会一下就崩完。&br&&br&年轻人努力点勤奋点,五倍的薪水增长不是遥不可及的,个人的成长其实是远超整体经济的增长速度的。&br&&br&租房子看起来便宜,但是生活质量是不如买的房子的,不是房子平米数楼层一样带来的生活质量就一样的,想达到一样的生活质量租房只会更贵,另外房东加租比央行加息狠多了。真正长期租房的会明白。&br&&br&年轻能买房尽量还是买,经济上有了压力才有动力,25-35岁是积累职业技能最好的时间,没有压力的话很容易玩玩闹闹就过去了。&br&&br&无论创业 投资 还是周游世界 精彩的人生都注定是属于极少数的,属于大多数人的人生是要稳稳当当在职场工作40年安全退休,学会过好一个普通人生,别得瑟,别作死,背负个房贷可以有效预防自我毁灭。
对于买一套房子自己住的人来说,房价暴跌也无所谓,只要整体经济还在平稳增长,工作收入稳定就行。 重点是要年轻,要有一项有竞争力的职业技能。即使出现经济危机,也不会持续太久,坚持几年就过去了,中国经济长期看还是可持续崩溃的,不会一下就崩完。 年…
已有帐号?
无法登录?
社交帐号登录
7984 人关注
224 条内容
382 条内容
1365 人关注
3099 人关注

我要回帖

更多关于 192.168.32.168 8002 的文章

 

随机推荐