应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

ffmpeg的AVOption模块介绍

  AVOption提供一个通用系统,用于在任意结构体里声明选项。一个选项可以有帮忙文本,类型和可能的值范围。选项可以枚举,读写。
  AVOption结构体如下:AVOptiontypedefstructAVOption{constcharname;shortEnglishhelptexttodoWhataboutotherlanguages?constcharhelp;Theoffsetrelativetothecontextstructurewheretheoptionvalueisstored。Itshouldbe0fornamedconstants。intoffset;enumAVOptionTypetype;thedefaultvalueforscalaroptionsunion{int64ti64;doubledbl;constcharstr;TODOthoseareunusednowAVRationalq;}defaultval;doublemin;minimumvalidvaluefortheoptiondoublemax;maximumvalidvaluefortheoptionintflags;标记宏被我省略了。。。Thelogicalunittowhichtheoptionbelongs。Nonconstantoptionsandcorrespondingnamedconstantssharethesameunit。MaybeNULL。constcharunit;}AVOption;
  AVClass结构体如下:DescribetheclassofanAVClasscontextstructure。ThatisanarbitrarystructofwhichthefirstfieldisapointertoanAVClassstruct(e。g。AVCodecContext,AVFormatContextetc。)。typedefstructAVClass{Thenameoftheclass;usuallyitisthesamenameasthecontextstructuretypetowhichtheAVClassisassociated。constcharclassname;Apointertoafunctionwhichreturnsthenameofacontextinstancectxassociatedwiththeclass。constchar(itemname)(voidctx);apointertothefirstoptionspecifiedintheclassifanyorNULLseeavsetdefaultoptions()conststructAVOptionoption;LIBAVUTILVERSIONwithwhichthisstructurewascreated。Thisisusedtoallowfieldstobeaddedwithoutrequiringmajorversionbumpseverywhere。intversion;Offsetinthestructurewherelogleveloffsetisstored。0meansthereisnosuchvariableintlogleveloffsetoffset;Offsetinthestructurewhereapointertotheparentcontextforloggingisstored。ForexampleadecodercouldpassitsAVCodecContexttoevalassuchaparentcontext,whichanavlog()implementationcouldthenleveragetodisplaytheparentcontext。TheoffsetcanbeNULL。intparentlogcontextoffset;Categoryusedforvisualization(likecolor)Thisisonlysetifthecategoryisequalforallobjectsusingthisclass。availablesinceversion(5116568100)AVClassCategorycategory;Callbacktoreturnthecategory。availablesinceversion(5116598100)AVClassCategory(getcategory)(voidctx);Callbacktoreturnthesupportedallowedranges。availablesinceversion(52。12)int(queryranges)(structAVOptionRanges,voidobj,constcharkey,intflags);ReturnnextAVOptionsenabledchildorNULLvoid(childnext)(voidobj,voidprev);IterateovertheAVClassescorrespondingtopotentialAVOptionsenabledchildren。paramiterpointertoopaqueiterationstate。ThecallermustinitializeitertoNULLbeforethefirstcall。returnAVClassforthenextAVOptionsenabledchildorNULLiftherearenomoresuchchildren。noteThedifferencebetweenchildnextandthisisthatchildnextiteratesoveralreadyexistingobjects,whilechildclassiterateiteratesoverallpossiblechildren。conststructAVClass(childclassiterate)(voiditer);}AVClass;AVOption实现
  这部分描述如何向一个结构体添加AVOption支持。
  所有和AVOption相关的信息存储在一个叫AVClass的结构体中。因此结构体的第一个成员应该是指向AVClass的指针。AVClass的option成员必须指向一个静态的AVOption数组,数组以NULL结尾。
  每个AVOption选项必须有一个非空的名字,一个类型,一个默认的值;对于值类型的AVOption也必须有一个允许的值范围;包含一个偏移量,指定结构体中和这个选项关联的字段的位置;AVOption中其他字段不是必须的,按情况赋值。
  下面的例子展示了带AVOption支持的结构体:typedefstructteststruct{constAVClassclass;intintopt;charstropt;uint8tbinopt;intbinlen;}teststruct;staticconstAVOptiontestoptions〔〕{{testint,Thisisatestoptionofinttype。,offsetof(teststruct,intopt),AVOPTTYPEINT,{。i641},INTMIN,INTMAX},{teststr,Thisisatestoptionofstringtype。,offsetof(teststruct,stropt),AVOPTTYPESTRING},{testbin,Thisisatestoptionofbinarytype。,offsetof(teststruct,binopt),AVOPTTYPEBINARY},{NULL},};staticconstAVClasstestclass{。classnametestclass,。itemnameavdefaultitemname,。optiontestoptions,。versionLIBAVUTILVERSIONINT,};
  当你分配结构体时,要确保AVClass指针指向正确的值,avoptsetdefaults函数可以用来初始化。之后,该结构体就可以与AVOptionAPI一起使用了。
  继续上面的例子,我们展示结构体的构造和释放:teststructallocteststruct(void){teststructretavmallocz(sizeof(ret));retclasstestclass;avoptsetdefaults(ret);returnret;}voidfreeteststruct(teststructfoo){avoptfree(foo);avfreep(foo);}AVOption嵌套
  可能存在支持AVOption的结构体包含另一个支持AVOption的结构体
  (比如AVCodecContext可以导出通用选项,然而它的privdata字段可以导出codec相关的选项)。在这种情况下,可以设置父结构体导出一个子结构体的选项,为了实现这个功能,只要在父结构体的AVClass中实现AVClass。childnext()函数和AVClass。childclassiterate函数。
  假设上面的teststruct结构体现在包含一个childstruct成员:typedefstructchildstruct{AVClassclass;intflagsopt;}childstruct;staticconstAVOptionchildopts〔〕{{testflags,Thisisatestoptionofflagstype。,offsetof(childstruct,flagsopt),AVOPTTYPEFLAGS,{。i640},INTMIN,INTMAX},{NULL},};staticconstAVClasschildclass{。classnamechildclass,。itemnameavdefaultitemname,。optionchildopts,。versionLIBAVUTILVERSIONINT,};voidchildnext(voidobj,voidprev){teststructtobj;if(!prevtchildstruct)returntchildstruct;returnNULL;}constAVClasschildclassiterate(voiditer){constAVClassciter?NULL:childclass;iter(void)(uintptrt)c;returnc;}
  将childnext和childclassiterate放入testclass中:staticconstAVClasstestclass{。classnametestclass,。itemnameavdefaultitemname,。optiontestoptions,。childnextchildnext,。childclassiteratechildclassiterate,。versionLIBAVUTILVERSIONINT,};
  现在可以通过teststruct访问childstruct的选项。
  从上面的例子中,可能不清楚为什么同时需要childnext和childclassiterate,区别是childnext会遍历实际存在的对象,而childclassiterate会遍历所有可能的子类。比如如果AVCodecContext被初始化为使用具有私有选项的编解码器,那么它的childnext会返回AVCodecContext。privdata并结束遍历。而AVCodecContext。avclass中的childclassiterate会遍历所有具有私有选项的可用编解码器。命名常量
  可以为选项创建命名常量。
  只需设置选项的unit字段,并将常量本身创建为AVOPTTYPECONST类型的选项,其unit字段设置为相同的字符串。它们的defaultval字段应该包含命名常量的值。
  例如,要为上面的testflags选项添加一些命名常量,请将以下内容放入childopts数组中:{testflags,Thisisatestoptionofflagstype。,offsetof(childstruct,flagsopt),AVOPTTYPEFLAGS,{。i640},INTMIN,INTMAX,。unittestunit},{flag1,Thisisaflagwithvalue16,0,AVOPTTYPECONST,{。i6416},0,0,。unittestunit},AVOption使用
  本节讨论如何在支持AVOption的结构体中访问选项。支持AVOption的结构体有libavcodec模块的AVCodecContext以及libavformat模块的AVFormatContext等。检查AVOption
  检查选项的基本函数是avoptnext()和avoptfind(),前者遍历一个对象定义的所有选项,后者搜索具有给定名称的选项。
  嵌套的情况会更复杂一些。一个支持AVOption的结构体可能包含另一个支持AVOption的结构体。将AVOPTSEARCHCHILDREN标志传递给avoptfind()将使函数递归地搜索包含的结构体。
  对于枚举,基本上有两种情况。第一种情况是当你想要获得结构及其子结构上可能存在的所有选项时(例如在构造文档时)。在这种情况下,你应该在父结构的AVClass上递归调用avoptchildclassiterate()。第二种情况是,当你有一个已经初始化的结构,你想要从它获得所有可以实际写入或读取的选项。在这种情况下,您应该递归调用avoptchildnext(),并在结果上调用avoptnext()。读写AVOption
  在设置选项时,通常会直接从用户处读取字符串。在这种情况下,简单地将其传递给avoptset()就足够了。对于非字符串类型的选项,avoptset()将根据选项类型解析字符串。
  类似地,avoptget()将读取任何选项类型并将其转换为字符串并返回。别忘了字符串是已分配的,所以你必须用avfree()释放它。
  在某些情况下,将所有选项放入AVDictionary并在其上调用avoptsetdict()可能更方便。
  一个具体的例子是lavflavc中的formatcodecopen函数,它以一个填充options的字典作为参数。

共建卫生城市共享健康成果天才儿童?小心是阿斯伯格综合征!在孤独症谱系障碍的孩子中,有一部分人因为在孩童早期被发现有某方面特长,而被称为天才儿童。8岁的远航(化名),虽然也属于这个被叫做阿斯伯格综合征儿童的特殊群体里,但他没有凭……吉利收购魅族后华为该明白了没有汽车企业愿意交出灵魂吉利收购魅族吉利收购魅族沉寂许久的手机市场终于传来第一个重大消息国产汽车巨头吉利旗下星纪时代科技有限公司正式收购魅族手机79。09的股权成为最大股东,与此同时原持有49。……大家棕子香香厨房!你知道的有几种?棕子香,香厨房。艾叶香,香满堂。桃枝插在大门上,出门一望麦儿黄。这儿端阳,那儿端阳,处处都端阳。童谣中的端阳,也称端午节,是中国的传统节日。各地均有丰富多彩的习俗,如赛龙舟、吃……此6A非彼6A,不同厂家线材混用还能快充吗?前言一直以来,大家都有个疑惑不同品牌的6A数据线到底能不能通用?尤其是近来,越来越多的手机支持百瓦以上的充电功率,6A线开始成为各种手机的标配,打开手机官网配件页面……贝克汉姆女儿小七逛街买衣服,与新嫂子感情深厚,搞怪拍照似姐妹贝克汉姆作为国际上有名的大球星,又拥有着超高的颜值,加上妻子也是顶级白富美,在时尚领域这块算是佼佼者,更是设计师,所以两人的婚姻更像是天造地设的一对,婚后两人拥有三个儿子和一个……男人养生应该怎么做?男性由于需要承受工作和家庭的压力,随着年龄的增长,现在许多男性朋友出现了性功能问题。甚至有些青少年朋友由于生活不规律、不检点而导致身体出现亚健康。这些会给男性朋友带来一定的烦恼……五大联赛之英超2022夏窗重要引援汇总(2022。08。04【英超转会简述】上游球队传统TOP6球队中,切尔西由于更换老板和之前受制裁续约不力,夏窗损失最大。伦敦双雄阿森纳、热刺进补人员最多,下季争四可能性高。曼城和利物浦由于各自引入强……路亚打黑记,软虫曲柄钩,上午搞了俩台钓的装备不少,基本上都是整装货,如三米六的竿,五米四的竿等等,大包小包好几包,加上钓箱的话,用一个小车是够推的。路亚的装备看似不多,提两根竿挎一小包就能勇闯天涯海角,冬钓大海……影像和游戏发烧友看过来,4月新手机爆款不断,小米ROG各奉献作为人们日常生活中的刚需,每个人对手机的要求都不一样。对高端手机用户来说,除了最基本的外观设计,拍照和游戏应该是平时使用频率最高的两大场景。眼下4月份就有分别对这两方面有所侧重……王传福开的这一炮,炸懵了大家作者:张是之3月29日,比亚迪董事长王传福在投资者沟通会上,分享了他对自动驾驶的看法,都是扯淡,都是忽悠,就是一场皇帝的新装,自动驾驶只是被资本裹挟和炒作的一个概念,最终……脖脚并用的小米手环8要来了,价格多少你会买来挂脖子还是脚丫子小米手环8将于4月18日晚7点发布,全新快拆结构,带来新的佩戴模式;你关注哪些功能,首发多少钱你愿意买来当项链使,评论区告诉我。接下来我们说说目前同步到的最新信息:小米手……42岁蔡依林身材火辣,穿低胸开叉裙露美腿,1米5穿出一米八的近日,42岁的蔡依林再次以性感火辣的形象亮相,穿着低胸裙开叉到大腿根1米5的造型,展现出一米八的气场,引起了大量网友的热议。蔡依林一直以来都是华语乐坛中备受瞩目的女歌手之……
女人为什么要生孩子,自我折磨吗?第一次那么难过,女孩子为什么要嫁人,要去别人家,人为什么要结婚,为什么一定要生孩子,孩子没教育好,是妈妈的错,可从未想过我也有自己的想法和追求。活着太累了,我想躺到泥土里。……忘喝孟婆汤,英国8个月大男婴开口第一句话竟是好吧兄弟在牙牙学语时,婴儿学会的第一个词通常不是妈妈就是爸爸。但最近,一名8个月大婴儿说的第一句话,震惊到了他的爸爸妈妈,不是爸爸、妈妈这样的词,他说的第一句是好吧兄弟(alright……Fami通新一周销量榜宝可梦晶灿钻石明亮珍珠五连冠Fami通公开新一周日本软硬件(12131219)销量排行榜,《宝可梦晶灿钻石明亮珍珠》以11万的销量排第一,《马力欧派对:超级巨星》第二,其余游戏和上周基份相同,就名次上有些……小米继承华为宏愿,在芯片技术研发上不断突破,撑起自主研发大旗小米即将发布的小米12搭载了它的自研澎湃P1充电芯片,至此它已研发了三颗芯片,覆盖了手机芯片的三个行业,成为国产手机企业当中自研芯片仅次于华为的芯片企业,显示出它撑起自主研发大……沉浮Steam测试今日开启!脑洞造船趣味闯关扬帆一起浪!国产海洋沙盒建造游戏《沉浮》将于12月24日12月31日启动Steam特邀测试,开放船新的物理搭建、单人闯关、海域探险及多人对战等特色体验,玩家可前往商店页免费获取……向往的生活,张子枫的穿搭合集,姐妹们,学起来随着真人秀节目《向往的生活》开播至第六季,不少网友被子枫妹妹圈粉,穿搭,颜值都在线的00后小花,甜美的造型,谁能不爱呢?一起来看看妹妹的穿搭吧!现放上一组最新一集的穿搭照……开国中将,毛泽东的第一任警卫排长,湘江血战绝命后卫师幸存者,文章世森王司倩2014年10月全军政治工作会议期间,习近平总书记在瞻仰古田会议旧址时,深情讲述了闽西六千子弟喋血湘江的故事。在那场惊心动魄的血战中,担负掩护任务的红34师……晋彩缤纷线上游园互动H5正式发布,一键获取山西春游指南经历了半个月的封控管理,山西迎来了有序解封的好消息,但解封不解防,不聚集不懈怠,为了不负大好春光,近日,山西省文化和旅游厅策划推出了《晋彩缤纷线上游园》互动H5,邀您一起线上游……智能投影新标杆,坚果N1Pro有多香?我来告诉你前言在当初装修的时候,家里客厅就选择不做固定的电视背景,而是选择留白,因为我想给家里的影音娱乐设备选择投影。这几年也更多人从传统电视转变到选择投影设备,可以拥有更大的观看……辽宁VS广厦G1四年轮回!辽篮家底厚冲击开门红郭艾伦PK孙铭北京时间4月20日19:35,CBA总决赛迎来第一场比赛,双方对阵的球队是辽宁本钢PK浙江广厦控股!两支球队是本赛季常规赛的一二名,季后赛14决赛和半决赛没有丢一局,闯进总决赛……22岁篮坛精英冲击NBA,特训三分8中8!试训独行侠,联手东北京时间6月12日,目前有多位中国篮坛小将正在准备2022年NBA选秀,其中就包括22岁的上海男篮球员郭昊文,此前郭昊文已经先后试训过魔术、湖人两支NBA球队。据悉,当地时间6……前端开发网站推荐作为前端开发,这27个网站可能会助你开发1、DevDocsDevDocs将不同语言、框架和库的AP都I汇聚到了一个网页上,你可以直接在一个页面进行搜索。https:devdocs。io缺点就是网站的……
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网