专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

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的字典作为参数。

俞敏洪25万套课桌椅捐给农村光运费就花了近6000万新东方成功转型电商带货之后,创始人俞敏洪近段时间在网络上的人气高涨。近日,在一次公开演讲中,俞敏洪再次提及捐献课桌椅的事情。日前,俞敏洪在由亚布力论坛承办的德胜门大讲堂上发表演讲。首届GBIC粤港澳大湾区高峰论坛在广州召开首届GBIC粤港澳大湾区高峰论坛在广州召开黄爱弟摄中新网广州3月3日电(郭军黄爱弟)3月3日,2023年GBIC粤港澳大湾区高峰论坛在广州召开。与会专家围绕如何发挥粤港澳大湾区多方农夫山泉公布新一届董事监事候选人名单潮新闻钱江晚报记者鲁佳3月3日晚间,潮新闻钱江晚报记者获悉,农夫山泉股份有限公司(以下简称农夫山泉)发布新一届董事会和监事会的候选人名单。公告显示,换届后钟睒睒将继续担任董事长兼总你是想卖一辈子糖水呢,还是想抓住机会来改变世界?你是想卖一辈子糖水呢,还是想抓住机会来改变世界?1983年,乔布斯对时任百事可乐公司总裁的斯卡利说到。1982年底,时任苹果公司总裁的迈克马库拉表示,太累了,不想干了。马库拉有自己2022云南各区县GDP沾益超文山,马龙连超10县,昆明6地进入前十经过大神的整理,云南129个区县市的GDP全部出炉。这是云南省所有区县市的GDP成绩单,能够直观地反映云南省各州市县域经济的活跃程度,对云南省县域经济的研究有重要指导意义。云南省G广州南沙打造精明增长的高质量样本新华社广州3月3日电(记者陈凯星马晓澄周颖)力争全年地区生产总值增长10以上规上工业产值增长16以上固定资产投资增长30以上这是广州市南沙区定下的2023年发展目标。高速增长背后,王瑜出任青银金租董事长获批中国网财经3月3日讯今日,银保监会官网公布批复信息显示,王瑜出任青银金租董事长一职,获青岛银保监局核准,批复时间为2023年3月2日。以下是相关批复正文青银保监复202344号青岛美国对华大基因等28个中国实体实施出口限制,外交部表示坚决反对财经晚6点财经新闻外交部回应美国对28个中国实体实施出口限制据环球网报道,针对美国商务部近日以国家安全为由对28个中国实体实施出口限制一事,外交部发言人毛宁周五表示,这是美国捏造借口不择手段突发!涉嫌严重违法警花凌娅被查,吸毒,预感不妙主动投案自首今天突然株洲市公安局原党委委员副局长,现任株洲市公安局二级高级警长凌娅涉嫌严重违纪违法,主动投案的新闻冲上了热搜,然而她的事件更是让人汗颜,让人咂舌,百思不得其解,令人匪夷所思。大3部影片定档520,你最想看哪一部现代快报讯(记者李艺蘅丁梦莎)近日,由小松菜奈坂口健太郎主演的电影余生那些年官宣定档5月20日,至此今年520档已有3部新片定档,其余两部分别是国产爱情片请别相信她和这么多年。你最对比赌王最美千金何超莲三任男友,才发现窦骁颜值情商应该排第一近日,演员窦骁和赌王最美千金何超莲好事将近的消息冲上热搜。苦熬四年的窦骁终于是熬出了头!给这段关系结了个果。豪门女婿的头衔看来是要坐实了!而在窦骁没遇到赌王女儿何超莲之前,何超莲曾
荣耀Magic5系列详细参数对比三个版本之间的差别大吗谁值得购买荣耀Magic5系列发布了,共有3个版本,分别是Magic5Pro和至臻版,在参数上面会有些差别,那么,三个版本之间的差别大吗哪个值得购买?下面小编就带来介绍。荣耀Magic5系列如果你想满命满精角色,建议抽取角色1。八重神子,无视地形,无缝eee,大世界深渊解放双手的超s角色,有了狐狸都说好,楼主本人大世界用她超过夜天后。2。夜兰,双e蒸发二十万,跑路超快,值得拥有的超s角色。3。散兵,抛最大沙漠中唯一的城市,生活着2万人,周边300公里被黄沙覆盖说起塔克拉玛干沙漠,很多人都会想到一个词死亡之海,这是一个非常可怕的词,如果有人要去沙漠旅游,那么他将会非常的害怕,因为沙漠中有着非常多的危险。在沙漠中还有着很多的毒虫,如果去了沙华为P60创新到什么程度?为啥是最强鸿蒙手机?跟你一起揭晓!如果没什么意外,华为P60系列手机将在3月23日,华为新品发布会上发布,同时到来的还有平板手表耳机等产品,而从各种消息都显示,华为P60系列手机创新非常足,被数码圈誉为鸿蒙系统最强成毅的斑秃,杨颖的后背,明星忘了P的镜中照,暴露了真实的自己国外时装周如火如荼地举行着,国内的明星也纷纷盛装出席,以最好的姿态面对大众。男星成毅也亮相时装周,一头蓬松茂密的头发,有几分倜傥的感觉,和之前底线里的发量有着较大的差距。(时装周)推荐五款宝藏软件,身为宝藏男孩和宝藏女孩的你,不试一下吗?今天带来五款宝藏软件,身为宝藏男孩和宝藏女孩的你们,不试一下吗?1。EPUB阅读器StarreaStarrea是一款Windows平台的EPUB电子书阅读器,它虽然只支持一个平台,一文读懂PLC过程映像区和外设地址(一)什么是过程映像区?当我们在用户程序中对输入(I)和输出(Q)地址区进行寻址时,CPU并不直接访问信号模块,而是访问CPU系统存储器中的存储区。该存储区就是过程映像区。该区域分春暖花开,快来打卡武昌江滩的这片宝藏园区!每逢节假日武昌江滩五期园区都会迎来大量游客开阔的观江视野优美的绿化园地丰富的游乐设施精美的景观样式让这里成为市民游客青睐的热门休闲场地这里绝对值得三两好友一起踏青赏景拍照游玩武昌区名震中世纪的圣殿骑士团宝藏究竟在何方?1119年,法国几个破落骑士,为保护朝圣者,保卫第次十字军东征中建立的耶路撒冷拉丁王国,发起成立了一个宗教军事修会。由于该修会总部设在耶路撒冷犹太教圣殿,所以叫做圣殿骑士团。圣殿骑女儿遭受多次侵害,隐忍8年将父亲送进监狱,母亲看完监控大哭头条创作挑战赛大家好,我是敏敏教育说。人们都说儿大避母,女大避父。但是在许多家长的眼中,孩子仿佛永远长不大,永远都需要自己的照顾,虽然在孩子小的时候,家长对孩子亲吻来表达自己对孩子单亲父亲强迫给女儿洗澡,亲情频繁跨越界限,毁了多少人三观头条创作挑战赛大家好,欢迎来到闫说教育。人们在谈到孩子的教育时,都会想到儿大避母,女大避父这句话,也就是说,当孩子的年龄到达一定的界限后,家长就应该跟孩子保持好距离,即便是再宠爱孩
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网