h263.c 212 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286
  1. /*
  2. * H263/MPEG4 backend for ffmpeg encoder and decoder
  3. * Copyright (c) 2000,2001 Fabrice Bellard
  4. * H263+ support.
  5. * Copyright (c) 2001 Juan J. Sierralta P
  6. * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
  7. *
  8. * ac prediction encoding, B-frame support, error resilience, optimizations,
  9. * qpel decoding, gmc decoding, interlaced decoding
  10. * by Michael Niedermayer <michaelni@gmx.at>
  11. *
  12. * This file is part of FFmpeg.
  13. *
  14. * FFmpeg is free software; you can redistribute it and/or
  15. * modify it under the terms of the GNU Lesser General Public
  16. * License as published by the Free Software Foundation; either
  17. * version 2.1 of the License, or (at your option) any later version.
  18. *
  19. * FFmpeg is distributed in the hope that it will be useful,
  20. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  21. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  22. * Lesser General Public License for more details.
  23. *
  24. * You should have received a copy of the GNU Lesser General Public
  25. * License along with FFmpeg; if not, write to the Free Software
  26. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  27. */
  28. /**
  29. * @file libavcodec/h263.c
  30. * h263/mpeg4 codec.
  31. */
  32. //#define DEBUG
  33. #include <limits.h>
  34. #include "dsputil.h"
  35. #include "avcodec.h"
  36. #include "mpegvideo.h"
  37. #include "h263data.h"
  38. #include "mpeg4data.h"
  39. #include "mathops.h"
  40. #include "unary.h"
  41. //#undef NDEBUG
  42. //#include <assert.h>
  43. #define INTRA_MCBPC_VLC_BITS 6
  44. #define INTER_MCBPC_VLC_BITS 7
  45. #define CBPY_VLC_BITS 6
  46. #define MV_VLC_BITS 9
  47. #define DC_VLC_BITS 9
  48. #define SPRITE_TRAJ_VLC_BITS 6
  49. #define MB_TYPE_B_VLC_BITS 4
  50. #define TEX_VLC_BITS 9
  51. #define H263_MBTYPE_B_VLC_BITS 6
  52. #define CBPC_B_VLC_BITS 3
  53. #if CONFIG_ENCODERS
  54. static uint8_t uni_DCtab_lum_len[512];
  55. static uint8_t uni_DCtab_chrom_len[512];
  56. static uint16_t uni_DCtab_lum_bits[512];
  57. static uint16_t uni_DCtab_chrom_bits[512];
  58. static uint8_t mv_penalty[MAX_FCODE+1][MAX_MV*2+1];
  59. static uint8_t fcode_tab[MAX_MV*2+1];
  60. static uint8_t umv_fcode_tab[MAX_MV*2+1];
  61. static uint32_t uni_mpeg4_intra_rl_bits[64*64*2*2];
  62. static uint8_t uni_mpeg4_intra_rl_len [64*64*2*2];
  63. static uint32_t uni_mpeg4_inter_rl_bits[64*64*2*2];
  64. static uint8_t uni_mpeg4_inter_rl_len [64*64*2*2];
  65. static uint8_t uni_h263_intra_aic_rl_len [64*64*2*2];
  66. static uint8_t uni_h263_inter_rl_len [64*64*2*2];
  67. //#define UNI_MPEG4_ENC_INDEX(last,run,level) ((last)*128 + (run)*256 + (level))
  68. //#define UNI_MPEG4_ENC_INDEX(last,run,level) ((last)*128*64 + (run) + (level)*64)
  69. #define UNI_MPEG4_ENC_INDEX(last,run,level) ((last)*128*64 + (run)*128 + (level))
  70. /* mpeg4
  71. inter
  72. max level: 24/6
  73. max run: 53/63
  74. intra
  75. max level: 53/16
  76. max run: 29/41
  77. */
  78. #endif
  79. static uint8_t static_rl_table_store[5][2][2*MAX_RUN + MAX_LEVEL + 3];
  80. #if 0 //3IV1 is quite rare and it slows things down a tiny bit
  81. #define IS_3IV1 s->codec_tag == AV_RL32("3IV1")
  82. #else
  83. #define IS_3IV1 0
  84. #endif
  85. int h263_get_picture_format(int width, int height)
  86. {
  87. int format;
  88. if (width == 128 && height == 96)
  89. format = 1;
  90. else if (width == 176 && height == 144)
  91. format = 2;
  92. else if (width == 352 && height == 288)
  93. format = 3;
  94. else if (width == 704 && height == 576)
  95. format = 4;
  96. else if (width == 1408 && height == 1152)
  97. format = 5;
  98. else
  99. format = 7;
  100. return format;
  101. }
  102. static void show_pict_info(MpegEncContext *s){
  103. av_log(s->avctx, AV_LOG_DEBUG, "qp:%d %c size:%d rnd:%d%s%s%s%s%s%s%s%s%s %d/%d\n",
  104. s->qscale, av_get_pict_type_char(s->pict_type),
  105. s->gb.size_in_bits, 1-s->no_rounding,
  106. s->obmc ? " AP" : "",
  107. s->umvplus ? " UMV" : "",
  108. s->h263_long_vectors ? " LONG" : "",
  109. s->h263_plus ? " +" : "",
  110. s->h263_aic ? " AIC" : "",
  111. s->alt_inter_vlc ? " AIV" : "",
  112. s->modified_quant ? " MQ" : "",
  113. s->loop_filter ? " LOOP" : "",
  114. s->h263_slice_structured ? " SS" : "",
  115. s->avctx->time_base.den, s->avctx->time_base.num
  116. );
  117. }
  118. #if CONFIG_ENCODERS
  119. static void aspect_to_info(MpegEncContext * s, AVRational aspect){
  120. int i;
  121. if(aspect.num==0) aspect= (AVRational){1,1};
  122. for(i=1; i<6; i++){
  123. if(av_cmp_q(pixel_aspect[i], aspect) == 0){
  124. s->aspect_ratio_info=i;
  125. return;
  126. }
  127. }
  128. s->aspect_ratio_info= FF_ASPECT_EXTENDED;
  129. }
  130. void ff_flv_encode_picture_header(MpegEncContext * s, int picture_number)
  131. {
  132. int format;
  133. align_put_bits(&s->pb);
  134. put_bits(&s->pb, 17, 1);
  135. put_bits(&s->pb, 5, (s->h263_flv-1)); /* 0: h263 escape codes 1: 11-bit escape codes */
  136. put_bits(&s->pb, 8, (((int64_t)s->picture_number * 30 * s->avctx->time_base.num) / //FIXME use timestamp
  137. s->avctx->time_base.den) & 0xff); /* TemporalReference */
  138. if (s->width == 352 && s->height == 288)
  139. format = 2;
  140. else if (s->width == 176 && s->height == 144)
  141. format = 3;
  142. else if (s->width == 128 && s->height == 96)
  143. format = 4;
  144. else if (s->width == 320 && s->height == 240)
  145. format = 5;
  146. else if (s->width == 160 && s->height == 120)
  147. format = 6;
  148. else if (s->width <= 255 && s->height <= 255)
  149. format = 0; /* use 1 byte width & height */
  150. else
  151. format = 1; /* use 2 bytes width & height */
  152. put_bits(&s->pb, 3, format); /* PictureSize */
  153. if (format == 0) {
  154. put_bits(&s->pb, 8, s->width);
  155. put_bits(&s->pb, 8, s->height);
  156. } else if (format == 1) {
  157. put_bits(&s->pb, 16, s->width);
  158. put_bits(&s->pb, 16, s->height);
  159. }
  160. put_bits(&s->pb, 2, s->pict_type == FF_P_TYPE); /* PictureType */
  161. put_bits(&s->pb, 1, 1); /* DeblockingFlag: on */
  162. put_bits(&s->pb, 5, s->qscale); /* Quantizer */
  163. put_bits(&s->pb, 1, 0); /* ExtraInformation */
  164. if(s->h263_aic){
  165. s->y_dc_scale_table=
  166. s->c_dc_scale_table= ff_aic_dc_scale_table;
  167. }else{
  168. s->y_dc_scale_table=
  169. s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
  170. }
  171. }
  172. void h263_encode_picture_header(MpegEncContext * s, int picture_number)
  173. {
  174. int format, coded_frame_rate, coded_frame_rate_base, i, temp_ref;
  175. int best_clock_code=1;
  176. int best_divisor=60;
  177. int best_error= INT_MAX;
  178. if(s->h263_plus){
  179. for(i=0; i<2; i++){
  180. int div, error;
  181. div= (s->avctx->time_base.num*1800000LL + 500LL*s->avctx->time_base.den) / ((1000LL+i)*s->avctx->time_base.den);
  182. div= av_clip(div, 1, 127);
  183. error= FFABS(s->avctx->time_base.num*1800000LL - (1000LL+i)*s->avctx->time_base.den*div);
  184. if(error < best_error){
  185. best_error= error;
  186. best_divisor= div;
  187. best_clock_code= i;
  188. }
  189. }
  190. }
  191. s->custom_pcf= best_clock_code!=1 || best_divisor!=60;
  192. coded_frame_rate= 1800000;
  193. coded_frame_rate_base= (1000+best_clock_code)*best_divisor;
  194. align_put_bits(&s->pb);
  195. /* Update the pointer to last GOB */
  196. s->ptr_lastgob = put_bits_ptr(&s->pb);
  197. put_bits(&s->pb, 22, 0x20); /* PSC */
  198. temp_ref= s->picture_number * (int64_t)coded_frame_rate * s->avctx->time_base.num / //FIXME use timestamp
  199. (coded_frame_rate_base * (int64_t)s->avctx->time_base.den);
  200. put_sbits(&s->pb, 8, temp_ref); /* TemporalReference */
  201. put_bits(&s->pb, 1, 1); /* marker */
  202. put_bits(&s->pb, 1, 0); /* h263 id */
  203. put_bits(&s->pb, 1, 0); /* split screen off */
  204. put_bits(&s->pb, 1, 0); /* camera off */
  205. put_bits(&s->pb, 1, 0); /* freeze picture release off */
  206. format = h263_get_picture_format(s->width, s->height);
  207. if (!s->h263_plus) {
  208. /* H.263v1 */
  209. put_bits(&s->pb, 3, format);
  210. put_bits(&s->pb, 1, (s->pict_type == FF_P_TYPE));
  211. /* By now UMV IS DISABLED ON H.263v1, since the restrictions
  212. of H.263v1 UMV implies to check the predicted MV after
  213. calculation of the current MB to see if we're on the limits */
  214. put_bits(&s->pb, 1, 0); /* Unrestricted Motion Vector: off */
  215. put_bits(&s->pb, 1, 0); /* SAC: off */
  216. put_bits(&s->pb, 1, s->obmc); /* Advanced Prediction */
  217. put_bits(&s->pb, 1, 0); /* only I/P frames, no PB frame */
  218. put_bits(&s->pb, 5, s->qscale);
  219. put_bits(&s->pb, 1, 0); /* Continuous Presence Multipoint mode: off */
  220. } else {
  221. int ufep=1;
  222. /* H.263v2 */
  223. /* H.263 Plus PTYPE */
  224. put_bits(&s->pb, 3, 7);
  225. put_bits(&s->pb,3,ufep); /* Update Full Extended PTYPE */
  226. if (format == 7)
  227. put_bits(&s->pb,3,6); /* Custom Source Format */
  228. else
  229. put_bits(&s->pb, 3, format);
  230. put_bits(&s->pb,1, s->custom_pcf);
  231. put_bits(&s->pb,1, s->umvplus); /* Unrestricted Motion Vector */
  232. put_bits(&s->pb,1,0); /* SAC: off */
  233. put_bits(&s->pb,1,s->obmc); /* Advanced Prediction Mode */
  234. put_bits(&s->pb,1,s->h263_aic); /* Advanced Intra Coding */
  235. put_bits(&s->pb,1,s->loop_filter); /* Deblocking Filter */
  236. put_bits(&s->pb,1,s->h263_slice_structured); /* Slice Structured */
  237. put_bits(&s->pb,1,0); /* Reference Picture Selection: off */
  238. put_bits(&s->pb,1,0); /* Independent Segment Decoding: off */
  239. put_bits(&s->pb,1,s->alt_inter_vlc); /* Alternative Inter VLC */
  240. put_bits(&s->pb,1,s->modified_quant); /* Modified Quantization: */
  241. put_bits(&s->pb,1,1); /* "1" to prevent start code emulation */
  242. put_bits(&s->pb,3,0); /* Reserved */
  243. put_bits(&s->pb, 3, s->pict_type == FF_P_TYPE);
  244. put_bits(&s->pb,1,0); /* Reference Picture Resampling: off */
  245. put_bits(&s->pb,1,0); /* Reduced-Resolution Update: off */
  246. put_bits(&s->pb,1,s->no_rounding); /* Rounding Type */
  247. put_bits(&s->pb,2,0); /* Reserved */
  248. put_bits(&s->pb,1,1); /* "1" to prevent start code emulation */
  249. /* This should be here if PLUSPTYPE */
  250. put_bits(&s->pb, 1, 0); /* Continuous Presence Multipoint mode: off */
  251. if (format == 7) {
  252. /* Custom Picture Format (CPFMT) */
  253. aspect_to_info(s, s->avctx->sample_aspect_ratio);
  254. put_bits(&s->pb,4,s->aspect_ratio_info);
  255. put_bits(&s->pb,9,(s->width >> 2) - 1);
  256. put_bits(&s->pb,1,1); /* "1" to prevent start code emulation */
  257. put_bits(&s->pb,9,(s->height >> 2));
  258. if (s->aspect_ratio_info == FF_ASPECT_EXTENDED){
  259. put_bits(&s->pb, 8, s->avctx->sample_aspect_ratio.num);
  260. put_bits(&s->pb, 8, s->avctx->sample_aspect_ratio.den);
  261. }
  262. }
  263. if(s->custom_pcf){
  264. if(ufep){
  265. put_bits(&s->pb, 1, best_clock_code);
  266. put_bits(&s->pb, 7, best_divisor);
  267. }
  268. put_sbits(&s->pb, 2, temp_ref>>8);
  269. }
  270. /* Unlimited Unrestricted Motion Vectors Indicator (UUI) */
  271. if (s->umvplus)
  272. // put_bits(&s->pb,1,1); /* Limited according tables of Annex D */
  273. //FIXME check actual requested range
  274. put_bits(&s->pb,2,1); /* unlimited */
  275. if(s->h263_slice_structured)
  276. put_bits(&s->pb,2,0); /* no weird submodes */
  277. put_bits(&s->pb, 5, s->qscale);
  278. }
  279. put_bits(&s->pb, 1, 0); /* no PEI */
  280. if(s->h263_slice_structured){
  281. put_bits(&s->pb, 1, 1);
  282. assert(s->mb_x == 0 && s->mb_y == 0);
  283. ff_h263_encode_mba(s);
  284. put_bits(&s->pb, 1, 1);
  285. }
  286. if(s->h263_aic){
  287. s->y_dc_scale_table=
  288. s->c_dc_scale_table= ff_aic_dc_scale_table;
  289. }else{
  290. s->y_dc_scale_table=
  291. s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
  292. }
  293. }
  294. /**
  295. * Encodes a group of blocks header.
  296. */
  297. void h263_encode_gob_header(MpegEncContext * s, int mb_line)
  298. {
  299. put_bits(&s->pb, 17, 1); /* GBSC */
  300. if(s->h263_slice_structured){
  301. put_bits(&s->pb, 1, 1);
  302. ff_h263_encode_mba(s);
  303. if(s->mb_num > 1583)
  304. put_bits(&s->pb, 1, 1);
  305. put_bits(&s->pb, 5, s->qscale); /* GQUANT */
  306. put_bits(&s->pb, 1, 1);
  307. put_bits(&s->pb, 2, s->pict_type == FF_I_TYPE); /* GFID */
  308. }else{
  309. int gob_number= mb_line / s->gob_index;
  310. put_bits(&s->pb, 5, gob_number); /* GN */
  311. put_bits(&s->pb, 2, s->pict_type == FF_I_TYPE); /* GFID */
  312. put_bits(&s->pb, 5, s->qscale); /* GQUANT */
  313. }
  314. }
  315. static inline int get_block_rate(MpegEncContext * s, DCTELEM block[64], int block_last_index, uint8_t scantable[64]){
  316. int last=0;
  317. int j;
  318. int rate=0;
  319. for(j=1; j<=block_last_index; j++){
  320. const int index= scantable[j];
  321. int level= block[index];
  322. if(level){
  323. level+= 64;
  324. if((level&(~127)) == 0){
  325. if(j<block_last_index) rate+= s->intra_ac_vlc_length [UNI_AC_ENC_INDEX(j-last-1, level)];
  326. else rate+= s->intra_ac_vlc_last_length[UNI_AC_ENC_INDEX(j-last-1, level)];
  327. }else
  328. rate += s->ac_esc_length;
  329. last= j;
  330. }
  331. }
  332. return rate;
  333. }
  334. static inline int decide_ac_pred(MpegEncContext * s, DCTELEM block[6][64], int dir[6], uint8_t *st[6], int zigzag_last_index[6])
  335. {
  336. int score= 0;
  337. int i, n;
  338. int8_t * const qscale_table= s->current_picture.qscale_table;
  339. memcpy(zigzag_last_index, s->block_last_index, sizeof(int)*6);
  340. for(n=0; n<6; n++){
  341. int16_t *ac_val, *ac_val1;
  342. score -= get_block_rate(s, block[n], s->block_last_index[n], s->intra_scantable.permutated);
  343. ac_val = s->ac_val[0][0] + s->block_index[n] * 16;
  344. ac_val1= ac_val;
  345. if(dir[n]){
  346. const int xy= s->mb_x + s->mb_y*s->mb_stride - s->mb_stride;
  347. /* top prediction */
  348. ac_val-= s->block_wrap[n]*16;
  349. if(s->mb_y==0 || s->qscale == qscale_table[xy] || n==2 || n==3){
  350. /* same qscale */
  351. for(i=1; i<8; i++){
  352. const int level= block[n][s->dsp.idct_permutation[i ]];
  353. block[n][s->dsp.idct_permutation[i ]] = level - ac_val[i+8];
  354. ac_val1[i ]= block[n][s->dsp.idct_permutation[i<<3]];
  355. ac_val1[i+8]= level;
  356. }
  357. }else{
  358. /* different qscale, we must rescale */
  359. for(i=1; i<8; i++){
  360. const int level= block[n][s->dsp.idct_permutation[i ]];
  361. block[n][s->dsp.idct_permutation[i ]] = level - ROUNDED_DIV(ac_val[i + 8]*qscale_table[xy], s->qscale);
  362. ac_val1[i ]= block[n][s->dsp.idct_permutation[i<<3]];
  363. ac_val1[i+8]= level;
  364. }
  365. }
  366. st[n]= s->intra_h_scantable.permutated;
  367. }else{
  368. const int xy= s->mb_x-1 + s->mb_y*s->mb_stride;
  369. /* left prediction */
  370. ac_val-= 16;
  371. if(s->mb_x==0 || s->qscale == qscale_table[xy] || n==1 || n==3){
  372. /* same qscale */
  373. for(i=1; i<8; i++){
  374. const int level= block[n][s->dsp.idct_permutation[i<<3]];
  375. block[n][s->dsp.idct_permutation[i<<3]]= level - ac_val[i];
  376. ac_val1[i ]= level;
  377. ac_val1[i+8]= block[n][s->dsp.idct_permutation[i ]];
  378. }
  379. }else{
  380. /* different qscale, we must rescale */
  381. for(i=1; i<8; i++){
  382. const int level= block[n][s->dsp.idct_permutation[i<<3]];
  383. block[n][s->dsp.idct_permutation[i<<3]]= level - ROUNDED_DIV(ac_val[i]*qscale_table[xy], s->qscale);
  384. ac_val1[i ]= level;
  385. ac_val1[i+8]= block[n][s->dsp.idct_permutation[i ]];
  386. }
  387. }
  388. st[n]= s->intra_v_scantable.permutated;
  389. }
  390. for(i=63; i>0; i--) //FIXME optimize
  391. if(block[n][ st[n][i] ]) break;
  392. s->block_last_index[n]= i;
  393. score += get_block_rate(s, block[n], s->block_last_index[n], st[n]);
  394. }
  395. return score < 0;
  396. }
  397. static inline void restore_ac_coeffs(MpegEncContext * s, DCTELEM block[6][64], int dir[6], uint8_t *st[6], int zigzag_last_index[6])
  398. {
  399. int i, n;
  400. memcpy(s->block_last_index, zigzag_last_index, sizeof(int)*6);
  401. for(n=0; n<6; n++){
  402. int16_t *ac_val = s->ac_val[0][0] + s->block_index[n] * 16;
  403. st[n]= s->intra_scantable.permutated;
  404. if(dir[n]){
  405. /* top prediction */
  406. for(i=1; i<8; i++){
  407. block[n][s->dsp.idct_permutation[i ]] = ac_val[i+8];
  408. }
  409. }else{
  410. /* left prediction */
  411. for(i=1; i<8; i++){
  412. block[n][s->dsp.idct_permutation[i<<3]]= ac_val[i ];
  413. }
  414. }
  415. }
  416. }
  417. /**
  418. * modify qscale so that encoding is acually possible in h263 (limit difference to -2..2)
  419. */
  420. void ff_clean_h263_qscales(MpegEncContext *s){
  421. int i;
  422. int8_t * const qscale_table= s->current_picture.qscale_table;
  423. ff_init_qscale_tab(s);
  424. for(i=1; i<s->mb_num; i++){
  425. if(qscale_table[ s->mb_index2xy[i] ] - qscale_table[ s->mb_index2xy[i-1] ] >2)
  426. qscale_table[ s->mb_index2xy[i] ]= qscale_table[ s->mb_index2xy[i-1] ]+2;
  427. }
  428. for(i=s->mb_num-2; i>=0; i--){
  429. if(qscale_table[ s->mb_index2xy[i] ] - qscale_table[ s->mb_index2xy[i+1] ] >2)
  430. qscale_table[ s->mb_index2xy[i] ]= qscale_table[ s->mb_index2xy[i+1] ]+2;
  431. }
  432. if(s->codec_id != CODEC_ID_H263P){
  433. for(i=1; i<s->mb_num; i++){
  434. int mb_xy= s->mb_index2xy[i];
  435. if(qscale_table[mb_xy] != qscale_table[s->mb_index2xy[i-1]] && (s->mb_type[mb_xy]&CANDIDATE_MB_TYPE_INTER4V)){
  436. s->mb_type[mb_xy]|= CANDIDATE_MB_TYPE_INTER;
  437. }
  438. }
  439. }
  440. }
  441. /**
  442. * modify mb_type & qscale so that encoding is acually possible in mpeg4
  443. */
  444. void ff_clean_mpeg4_qscales(MpegEncContext *s){
  445. int i;
  446. int8_t * const qscale_table= s->current_picture.qscale_table;
  447. ff_clean_h263_qscales(s);
  448. if(s->pict_type== FF_B_TYPE){
  449. int odd=0;
  450. /* ok, come on, this isn't funny anymore, there's more code for handling this mpeg4 mess than for the actual adaptive quantization */
  451. for(i=0; i<s->mb_num; i++){
  452. int mb_xy= s->mb_index2xy[i];
  453. odd += qscale_table[mb_xy]&1;
  454. }
  455. if(2*odd > s->mb_num) odd=1;
  456. else odd=0;
  457. for(i=0; i<s->mb_num; i++){
  458. int mb_xy= s->mb_index2xy[i];
  459. if((qscale_table[mb_xy]&1) != odd)
  460. qscale_table[mb_xy]++;
  461. if(qscale_table[mb_xy] > 31)
  462. qscale_table[mb_xy]= 31;
  463. }
  464. for(i=1; i<s->mb_num; i++){
  465. int mb_xy= s->mb_index2xy[i];
  466. if(qscale_table[mb_xy] != qscale_table[s->mb_index2xy[i-1]] && (s->mb_type[mb_xy]&CANDIDATE_MB_TYPE_DIRECT)){
  467. s->mb_type[mb_xy]|= CANDIDATE_MB_TYPE_BIDIR;
  468. }
  469. }
  470. }
  471. }
  472. #endif //CONFIG_ENCODERS
  473. #define tab_size ((signed)FF_ARRAY_ELEMS(s->direct_scale_mv[0]))
  474. #define tab_bias (tab_size/2)
  475. void ff_mpeg4_init_direct_mv(MpegEncContext *s){
  476. int i;
  477. for(i=0; i<tab_size; i++){
  478. s->direct_scale_mv[0][i] = (i-tab_bias)*s->pb_time/s->pp_time;
  479. s->direct_scale_mv[1][i] = (i-tab_bias)*(s->pb_time-s->pp_time)/s->pp_time;
  480. }
  481. }
  482. static inline void ff_mpeg4_set_one_direct_mv(MpegEncContext *s, int mx, int my, int i){
  483. int xy= s->block_index[i];
  484. uint16_t time_pp= s->pp_time;
  485. uint16_t time_pb= s->pb_time;
  486. int p_mx, p_my;
  487. p_mx= s->next_picture.motion_val[0][xy][0];
  488. if((unsigned)(p_mx + tab_bias) < tab_size){
  489. s->mv[0][i][0] = s->direct_scale_mv[0][p_mx + tab_bias] + mx;
  490. s->mv[1][i][0] = mx ? s->mv[0][i][0] - p_mx
  491. : s->direct_scale_mv[1][p_mx + tab_bias];
  492. }else{
  493. s->mv[0][i][0] = p_mx*time_pb/time_pp + mx;
  494. s->mv[1][i][0] = mx ? s->mv[0][i][0] - p_mx
  495. : p_mx*(time_pb - time_pp)/time_pp;
  496. }
  497. p_my= s->next_picture.motion_val[0][xy][1];
  498. if((unsigned)(p_my + tab_bias) < tab_size){
  499. s->mv[0][i][1] = s->direct_scale_mv[0][p_my + tab_bias] + my;
  500. s->mv[1][i][1] = my ? s->mv[0][i][1] - p_my
  501. : s->direct_scale_mv[1][p_my + tab_bias];
  502. }else{
  503. s->mv[0][i][1] = p_my*time_pb/time_pp + my;
  504. s->mv[1][i][1] = my ? s->mv[0][i][1] - p_my
  505. : p_my*(time_pb - time_pp)/time_pp;
  506. }
  507. }
  508. #undef tab_size
  509. #undef tab_bias
  510. /**
  511. *
  512. * @return the mb_type
  513. */
  514. int ff_mpeg4_set_direct_mv(MpegEncContext *s, int mx, int my){
  515. const int mb_index= s->mb_x + s->mb_y*s->mb_stride;
  516. const int colocated_mb_type= s->next_picture.mb_type[mb_index];
  517. uint16_t time_pp;
  518. uint16_t time_pb;
  519. int i;
  520. //FIXME avoid divides
  521. // try special case with shifts for 1 and 3 B-frames?
  522. if(IS_8X8(colocated_mb_type)){
  523. s->mv_type = MV_TYPE_8X8;
  524. for(i=0; i<4; i++){
  525. ff_mpeg4_set_one_direct_mv(s, mx, my, i);
  526. }
  527. return MB_TYPE_DIRECT2 | MB_TYPE_8x8 | MB_TYPE_L0L1;
  528. } else if(IS_INTERLACED(colocated_mb_type)){
  529. s->mv_type = MV_TYPE_FIELD;
  530. for(i=0; i<2; i++){
  531. int field_select= s->next_picture.ref_index[0][s->block_index[2*i]];
  532. s->field_select[0][i]= field_select;
  533. s->field_select[1][i]= i;
  534. if(s->top_field_first){
  535. time_pp= s->pp_field_time - field_select + i;
  536. time_pb= s->pb_field_time - field_select + i;
  537. }else{
  538. time_pp= s->pp_field_time + field_select - i;
  539. time_pb= s->pb_field_time + field_select - i;
  540. }
  541. s->mv[0][i][0] = s->p_field_mv_table[i][0][mb_index][0]*time_pb/time_pp + mx;
  542. s->mv[0][i][1] = s->p_field_mv_table[i][0][mb_index][1]*time_pb/time_pp + my;
  543. s->mv[1][i][0] = mx ? s->mv[0][i][0] - s->p_field_mv_table[i][0][mb_index][0]
  544. : s->p_field_mv_table[i][0][mb_index][0]*(time_pb - time_pp)/time_pp;
  545. s->mv[1][i][1] = my ? s->mv[0][i][1] - s->p_field_mv_table[i][0][mb_index][1]
  546. : s->p_field_mv_table[i][0][mb_index][1]*(time_pb - time_pp)/time_pp;
  547. }
  548. return MB_TYPE_DIRECT2 | MB_TYPE_16x8 | MB_TYPE_L0L1 | MB_TYPE_INTERLACED;
  549. }else{
  550. ff_mpeg4_set_one_direct_mv(s, mx, my, 0);
  551. s->mv[0][1][0] = s->mv[0][2][0] = s->mv[0][3][0] = s->mv[0][0][0];
  552. s->mv[0][1][1] = s->mv[0][2][1] = s->mv[0][3][1] = s->mv[0][0][1];
  553. s->mv[1][1][0] = s->mv[1][2][0] = s->mv[1][3][0] = s->mv[1][0][0];
  554. s->mv[1][1][1] = s->mv[1][2][1] = s->mv[1][3][1] = s->mv[1][0][1];
  555. if((s->avctx->workaround_bugs & FF_BUG_DIRECT_BLOCKSIZE) || !s->quarter_sample)
  556. s->mv_type= MV_TYPE_16X16;
  557. else
  558. s->mv_type= MV_TYPE_8X8;
  559. return MB_TYPE_DIRECT2 | MB_TYPE_16x16 | MB_TYPE_L0L1; //Note see prev line
  560. }
  561. }
  562. void ff_h263_update_motion_val(MpegEncContext * s){
  563. const int mb_xy = s->mb_y * s->mb_stride + s->mb_x;
  564. //FIXME a lot of that is only needed for !low_delay
  565. const int wrap = s->b8_stride;
  566. const int xy = s->block_index[0];
  567. s->current_picture.mbskip_table[mb_xy]= s->mb_skipped;
  568. if(s->mv_type != MV_TYPE_8X8){
  569. int motion_x, motion_y;
  570. if (s->mb_intra) {
  571. motion_x = 0;
  572. motion_y = 0;
  573. } else if (s->mv_type == MV_TYPE_16X16) {
  574. motion_x = s->mv[0][0][0];
  575. motion_y = s->mv[0][0][1];
  576. } else /*if (s->mv_type == MV_TYPE_FIELD)*/ {
  577. int i;
  578. motion_x = s->mv[0][0][0] + s->mv[0][1][0];
  579. motion_y = s->mv[0][0][1] + s->mv[0][1][1];
  580. motion_x = (motion_x>>1) | (motion_x&1);
  581. for(i=0; i<2; i++){
  582. s->p_field_mv_table[i][0][mb_xy][0]= s->mv[0][i][0];
  583. s->p_field_mv_table[i][0][mb_xy][1]= s->mv[0][i][1];
  584. }
  585. s->current_picture.ref_index[0][xy ]=
  586. s->current_picture.ref_index[0][xy + 1]= s->field_select[0][0];
  587. s->current_picture.ref_index[0][xy + wrap ]=
  588. s->current_picture.ref_index[0][xy + wrap + 1]= s->field_select[0][1];
  589. }
  590. /* no update if 8X8 because it has been done during parsing */
  591. s->current_picture.motion_val[0][xy][0] = motion_x;
  592. s->current_picture.motion_val[0][xy][1] = motion_y;
  593. s->current_picture.motion_val[0][xy + 1][0] = motion_x;
  594. s->current_picture.motion_val[0][xy + 1][1] = motion_y;
  595. s->current_picture.motion_val[0][xy + wrap][0] = motion_x;
  596. s->current_picture.motion_val[0][xy + wrap][1] = motion_y;
  597. s->current_picture.motion_val[0][xy + 1 + wrap][0] = motion_x;
  598. s->current_picture.motion_val[0][xy + 1 + wrap][1] = motion_y;
  599. }
  600. if(s->encoding){ //FIXME encoding MUST be cleaned up
  601. if (s->mv_type == MV_TYPE_8X8)
  602. s->current_picture.mb_type[mb_xy]= MB_TYPE_L0 | MB_TYPE_8x8;
  603. else if(s->mb_intra)
  604. s->current_picture.mb_type[mb_xy]= MB_TYPE_INTRA;
  605. else
  606. s->current_picture.mb_type[mb_xy]= MB_TYPE_L0 | MB_TYPE_16x16;
  607. }
  608. }
  609. /**
  610. * predicts the dc.
  611. * encoding quantized level -> quantized diff
  612. * decoding quantized diff -> quantized level
  613. * @param n block index (0-3 are luma, 4-5 are chroma)
  614. * @param dir_ptr pointer to an integer where the prediction direction will be stored
  615. */
  616. static inline int ff_mpeg4_pred_dc(MpegEncContext * s, int n, int level, int *dir_ptr, int encoding)
  617. {
  618. int a, b, c, wrap, pred, scale, ret;
  619. int16_t *dc_val;
  620. /* find prediction */
  621. if (n < 4) {
  622. scale = s->y_dc_scale;
  623. } else {
  624. scale = s->c_dc_scale;
  625. }
  626. if(IS_3IV1)
  627. scale= 8;
  628. wrap= s->block_wrap[n];
  629. dc_val = s->dc_val[0] + s->block_index[n];
  630. /* B C
  631. * A X
  632. */
  633. a = dc_val[ - 1];
  634. b = dc_val[ - 1 - wrap];
  635. c = dc_val[ - wrap];
  636. /* outside slice handling (we can't do that by memset as we need the dc for error resilience) */
  637. if(s->first_slice_line && n!=3){
  638. if(n!=2) b=c= 1024;
  639. if(n!=1 && s->mb_x == s->resync_mb_x) b=a= 1024;
  640. }
  641. if(s->mb_x == s->resync_mb_x && s->mb_y == s->resync_mb_y+1){
  642. if(n==0 || n==4 || n==5)
  643. b=1024;
  644. }
  645. if (abs(a - b) < abs(b - c)) {
  646. pred = c;
  647. *dir_ptr = 1; /* top */
  648. } else {
  649. pred = a;
  650. *dir_ptr = 0; /* left */
  651. }
  652. /* we assume pred is positive */
  653. pred = FASTDIV((pred + (scale >> 1)), scale);
  654. if(encoding){
  655. ret = level - pred;
  656. }else{
  657. level += pred;
  658. ret= level;
  659. if(s->error_recognition>=3){
  660. if(level<0){
  661. av_log(s->avctx, AV_LOG_ERROR, "dc<0 at %dx%d\n", s->mb_x, s->mb_y);
  662. return -1;
  663. }
  664. if(level*scale > 2048 + scale){
  665. av_log(s->avctx, AV_LOG_ERROR, "dc overflow at %dx%d\n", s->mb_x, s->mb_y);
  666. return -1;
  667. }
  668. }
  669. }
  670. level *=scale;
  671. if(level&(~2047)){
  672. if(level<0)
  673. level=0;
  674. else if(!(s->workaround_bugs&FF_BUG_DC_CLIP))
  675. level=2047;
  676. }
  677. dc_val[0]= level;
  678. return ret;
  679. }
  680. #if CONFIG_ENCODERS
  681. /**
  682. * encodes the dc value.
  683. * @param n block index (0-3 are luma, 4-5 are chroma)
  684. */
  685. static inline void mpeg4_encode_dc(PutBitContext * s, int level, int n)
  686. {
  687. #if 1
  688. level+=256;
  689. if (n < 4) {
  690. /* luminance */
  691. put_bits(s, uni_DCtab_lum_len[level], uni_DCtab_lum_bits[level]);
  692. } else {
  693. /* chrominance */
  694. put_bits(s, uni_DCtab_chrom_len[level], uni_DCtab_chrom_bits[level]);
  695. }
  696. #else
  697. int size, v;
  698. /* find number of bits */
  699. size = 0;
  700. v = abs(level);
  701. while (v) {
  702. v >>= 1;
  703. size++;
  704. }
  705. if (n < 4) {
  706. /* luminance */
  707. put_bits(&s->pb, DCtab_lum[size][1], DCtab_lum[size][0]);
  708. } else {
  709. /* chrominance */
  710. put_bits(&s->pb, DCtab_chrom[size][1], DCtab_chrom[size][0]);
  711. }
  712. /* encode remaining bits */
  713. if (size > 0) {
  714. if (level < 0)
  715. level = (-level) ^ ((1 << size) - 1);
  716. put_bits(&s->pb, size, level);
  717. if (size > 8)
  718. put_bits(&s->pb, 1, 1);
  719. }
  720. #endif
  721. }
  722. static inline int mpeg4_get_dc_length(int level, int n){
  723. if (n < 4) {
  724. return uni_DCtab_lum_len[level + 256];
  725. } else {
  726. return uni_DCtab_chrom_len[level + 256];
  727. }
  728. }
  729. /**
  730. * encodes a 8x8 block
  731. * @param n block index (0-3 are luma, 4-5 are chroma)
  732. */
  733. static inline void mpeg4_encode_block(MpegEncContext * s, DCTELEM * block, int n, int intra_dc,
  734. uint8_t *scan_table, PutBitContext *dc_pb, PutBitContext *ac_pb)
  735. {
  736. int i, last_non_zero;
  737. #if 0 //variables for the outcommented version
  738. int code, sign, last;
  739. #endif
  740. const RLTable *rl;
  741. uint32_t *bits_tab;
  742. uint8_t *len_tab;
  743. const int last_index = s->block_last_index[n];
  744. if (s->mb_intra) { //Note gcc (3.2.1 at least) will optimize this away
  745. /* mpeg4 based DC predictor */
  746. mpeg4_encode_dc(dc_pb, intra_dc, n);
  747. if(last_index<1) return;
  748. i = 1;
  749. rl = &rl_intra;
  750. bits_tab= uni_mpeg4_intra_rl_bits;
  751. len_tab = uni_mpeg4_intra_rl_len;
  752. } else {
  753. if(last_index<0) return;
  754. i = 0;
  755. rl = &rl_inter;
  756. bits_tab= uni_mpeg4_inter_rl_bits;
  757. len_tab = uni_mpeg4_inter_rl_len;
  758. }
  759. /* AC coefs */
  760. last_non_zero = i - 1;
  761. #if 1
  762. for (; i < last_index; i++) {
  763. int level = block[ scan_table[i] ];
  764. if (level) {
  765. int run = i - last_non_zero - 1;
  766. level+=64;
  767. if((level&(~127)) == 0){
  768. const int index= UNI_MPEG4_ENC_INDEX(0, run, level);
  769. put_bits(ac_pb, len_tab[index], bits_tab[index]);
  770. }else{ //ESC3
  771. put_bits(ac_pb, 7+2+1+6+1+12+1, (3<<23)+(3<<21)+(0<<20)+(run<<14)+(1<<13)+(((level-64)&0xfff)<<1)+1);
  772. }
  773. last_non_zero = i;
  774. }
  775. }
  776. /*if(i<=last_index)*/{
  777. int level = block[ scan_table[i] ];
  778. int run = i - last_non_zero - 1;
  779. level+=64;
  780. if((level&(~127)) == 0){
  781. const int index= UNI_MPEG4_ENC_INDEX(1, run, level);
  782. put_bits(ac_pb, len_tab[index], bits_tab[index]);
  783. }else{ //ESC3
  784. put_bits(ac_pb, 7+2+1+6+1+12+1, (3<<23)+(3<<21)+(1<<20)+(run<<14)+(1<<13)+(((level-64)&0xfff)<<1)+1);
  785. }
  786. }
  787. #else
  788. for (; i <= last_index; i++) {
  789. const int slevel = block[ scan_table[i] ];
  790. if (slevel) {
  791. int level;
  792. int run = i - last_non_zero - 1;
  793. last = (i == last_index);
  794. sign = 0;
  795. level = slevel;
  796. if (level < 0) {
  797. sign = 1;
  798. level = -level;
  799. }
  800. code = get_rl_index(rl, last, run, level);
  801. put_bits(ac_pb, rl->table_vlc[code][1], rl->table_vlc[code][0]);
  802. if (code == rl->n) {
  803. int level1, run1;
  804. level1 = level - rl->max_level[last][run];
  805. if (level1 < 1)
  806. goto esc2;
  807. code = get_rl_index(rl, last, run, level1);
  808. if (code == rl->n) {
  809. esc2:
  810. put_bits(ac_pb, 1, 1);
  811. if (level > MAX_LEVEL)
  812. goto esc3;
  813. run1 = run - rl->max_run[last][level] - 1;
  814. if (run1 < 0)
  815. goto esc3;
  816. code = get_rl_index(rl, last, run1, level);
  817. if (code == rl->n) {
  818. esc3:
  819. /* third escape */
  820. put_bits(ac_pb, 1, 1);
  821. put_bits(ac_pb, 1, last);
  822. put_bits(ac_pb, 6, run);
  823. put_bits(ac_pb, 1, 1);
  824. put_sbits(ac_pb, 12, slevel);
  825. put_bits(ac_pb, 1, 1);
  826. } else {
  827. /* second escape */
  828. put_bits(ac_pb, 1, 0);
  829. put_bits(ac_pb, rl->table_vlc[code][1], rl->table_vlc[code][0]);
  830. put_bits(ac_pb, 1, sign);
  831. }
  832. } else {
  833. /* first escape */
  834. put_bits(ac_pb, 1, 0);
  835. put_bits(ac_pb, rl->table_vlc[code][1], rl->table_vlc[code][0]);
  836. put_bits(ac_pb, 1, sign);
  837. }
  838. } else {
  839. put_bits(ac_pb, 1, sign);
  840. }
  841. last_non_zero = i;
  842. }
  843. }
  844. #endif
  845. }
  846. static int mpeg4_get_block_length(MpegEncContext * s, DCTELEM * block, int n, int intra_dc,
  847. uint8_t *scan_table)
  848. {
  849. int i, last_non_zero;
  850. uint8_t *len_tab;
  851. const int last_index = s->block_last_index[n];
  852. int len=0;
  853. if (s->mb_intra) { //Note gcc (3.2.1 at least) will optimize this away
  854. /* mpeg4 based DC predictor */
  855. len += mpeg4_get_dc_length(intra_dc, n);
  856. if(last_index<1) return len;
  857. i = 1;
  858. len_tab = uni_mpeg4_intra_rl_len;
  859. } else {
  860. if(last_index<0) return 0;
  861. i = 0;
  862. len_tab = uni_mpeg4_inter_rl_len;
  863. }
  864. /* AC coefs */
  865. last_non_zero = i - 1;
  866. for (; i < last_index; i++) {
  867. int level = block[ scan_table[i] ];
  868. if (level) {
  869. int run = i - last_non_zero - 1;
  870. level+=64;
  871. if((level&(~127)) == 0){
  872. const int index= UNI_MPEG4_ENC_INDEX(0, run, level);
  873. len += len_tab[index];
  874. }else{ //ESC3
  875. len += 7+2+1+6+1+12+1;
  876. }
  877. last_non_zero = i;
  878. }
  879. }
  880. /*if(i<=last_index)*/{
  881. int level = block[ scan_table[i] ];
  882. int run = i - last_non_zero - 1;
  883. level+=64;
  884. if((level&(~127)) == 0){
  885. const int index= UNI_MPEG4_ENC_INDEX(1, run, level);
  886. len += len_tab[index];
  887. }else{ //ESC3
  888. len += 7+2+1+6+1+12+1;
  889. }
  890. }
  891. return len;
  892. }
  893. static inline int h263_get_motion_length(MpegEncContext * s, int val, int f_code){
  894. int l, bit_size, code;
  895. if (val == 0) {
  896. return mvtab[0][1];
  897. } else {
  898. bit_size = f_code - 1;
  899. /* modulo encoding */
  900. l= INT_BIT - 6 - bit_size;
  901. val = (val<<l)>>l;
  902. val--;
  903. code = (val >> bit_size) + 1;
  904. return mvtab[code][1] + 1 + bit_size;
  905. }
  906. }
  907. static inline void ff_h263_encode_motion_vector(MpegEncContext * s, int x, int y, int f_code){
  908. if(s->flags2 & CODEC_FLAG2_NO_OUTPUT){
  909. skip_put_bits(&s->pb,
  910. h263_get_motion_length(s, x, f_code)
  911. +h263_get_motion_length(s, y, f_code));
  912. }else{
  913. ff_h263_encode_motion(s, x, f_code);
  914. ff_h263_encode_motion(s, y, f_code);
  915. }
  916. }
  917. static inline int get_p_cbp(MpegEncContext * s,
  918. DCTELEM block[6][64],
  919. int motion_x, int motion_y){
  920. int cbp, i;
  921. if(s->flags & CODEC_FLAG_CBP_RD){
  922. int best_cbpy_score= INT_MAX;
  923. int best_cbpc_score= INT_MAX;
  924. int cbpc = (-1), cbpy= (-1);
  925. const int offset= (s->mv_type==MV_TYPE_16X16 ? 0 : 16) + (s->dquant ? 8 : 0);
  926. const int lambda= s->lambda2 >> (FF_LAMBDA_SHIFT - 6);
  927. for(i=0; i<4; i++){
  928. int score= inter_MCBPC_bits[i + offset] * lambda;
  929. if(i&1) score += s->coded_score[5];
  930. if(i&2) score += s->coded_score[4];
  931. if(score < best_cbpc_score){
  932. best_cbpc_score= score;
  933. cbpc= i;
  934. }
  935. }
  936. for(i=0; i<16; i++){
  937. int score= cbpy_tab[i ^ 0xF][1] * lambda;
  938. if(i&1) score += s->coded_score[3];
  939. if(i&2) score += s->coded_score[2];
  940. if(i&4) score += s->coded_score[1];
  941. if(i&8) score += s->coded_score[0];
  942. if(score < best_cbpy_score){
  943. best_cbpy_score= score;
  944. cbpy= i;
  945. }
  946. }
  947. cbp= cbpc + 4*cbpy;
  948. if ((motion_x | motion_y | s->dquant) == 0 && s->mv_type==MV_TYPE_16X16){
  949. if(best_cbpy_score + best_cbpc_score + 2*lambda >= 0)
  950. cbp= 0;
  951. }
  952. for (i = 0; i < 6; i++) {
  953. if (s->block_last_index[i] >= 0 && ((cbp >> (5 - i))&1)==0 ){
  954. s->block_last_index[i]= -1;
  955. s->dsp.clear_block(s->block[i]);
  956. }
  957. }
  958. }else{
  959. cbp= 0;
  960. for (i = 0; i < 6; i++) {
  961. if (s->block_last_index[i] >= 0)
  962. cbp |= 1 << (5 - i);
  963. }
  964. }
  965. return cbp;
  966. }
  967. static inline int get_b_cbp(MpegEncContext * s, DCTELEM block[6][64],
  968. int motion_x, int motion_y, int mb_type){
  969. int cbp=0, i;
  970. if(s->flags & CODEC_FLAG_CBP_RD){
  971. int score=0;
  972. const int lambda= s->lambda2 >> (FF_LAMBDA_SHIFT - 6);
  973. for(i=0; i<6; i++){
  974. if(s->coded_score[i] < 0){
  975. score += s->coded_score[i];
  976. cbp |= 1 << (5 - i);
  977. }
  978. }
  979. if(cbp){
  980. int zero_score= -6;
  981. if ((motion_x | motion_y | s->dquant | mb_type) == 0){
  982. zero_score-= 4; //2*MV + mb_type + cbp bit
  983. }
  984. zero_score*= lambda;
  985. if(zero_score <= score){
  986. cbp=0;
  987. }
  988. }
  989. for (i = 0; i < 6; i++) {
  990. if (s->block_last_index[i] >= 0 && ((cbp >> (5 - i))&1)==0 ){
  991. s->block_last_index[i]= -1;
  992. s->dsp.clear_block(s->block[i]);
  993. }
  994. }
  995. }else{
  996. for (i = 0; i < 6; i++) {
  997. if (s->block_last_index[i] >= 0)
  998. cbp |= 1 << (5 - i);
  999. }
  1000. }
  1001. return cbp;
  1002. }
  1003. static inline void mpeg4_encode_blocks(MpegEncContext * s, DCTELEM block[6][64], int intra_dc[6],
  1004. uint8_t **scan_table, PutBitContext *dc_pb, PutBitContext *ac_pb){
  1005. int i;
  1006. if(scan_table){
  1007. if(s->flags2 & CODEC_FLAG2_NO_OUTPUT){
  1008. for (i = 0; i < 6; i++) {
  1009. skip_put_bits(&s->pb, mpeg4_get_block_length(s, block[i], i, intra_dc[i], scan_table[i]));
  1010. }
  1011. }else{
  1012. /* encode each block */
  1013. for (i = 0; i < 6; i++) {
  1014. mpeg4_encode_block(s, block[i], i, intra_dc[i], scan_table[i], dc_pb, ac_pb);
  1015. }
  1016. }
  1017. }else{
  1018. if(s->flags2 & CODEC_FLAG2_NO_OUTPUT){
  1019. for (i = 0; i < 6; i++) {
  1020. skip_put_bits(&s->pb, mpeg4_get_block_length(s, block[i], i, 0, s->intra_scantable.permutated));
  1021. }
  1022. }else{
  1023. /* encode each block */
  1024. for (i = 0; i < 6; i++) {
  1025. mpeg4_encode_block(s, block[i], i, 0, s->intra_scantable.permutated, dc_pb, ac_pb);
  1026. }
  1027. }
  1028. }
  1029. }
  1030. static const int dquant_code[5]= {1,0,9,2,3};
  1031. void mpeg4_encode_mb(MpegEncContext * s,
  1032. DCTELEM block[6][64],
  1033. int motion_x, int motion_y)
  1034. {
  1035. int cbpc, cbpy, pred_x, pred_y;
  1036. PutBitContext * const pb2 = s->data_partitioning ? &s->pb2 : &s->pb;
  1037. PutBitContext * const tex_pb = s->data_partitioning && s->pict_type!=FF_B_TYPE ? &s->tex_pb : &s->pb;
  1038. PutBitContext * const dc_pb = s->data_partitioning && s->pict_type!=FF_I_TYPE ? &s->pb2 : &s->pb;
  1039. const int interleaved_stats= (s->flags&CODEC_FLAG_PASS1) && !s->data_partitioning ? 1 : 0;
  1040. if (!s->mb_intra) {
  1041. int i, cbp;
  1042. if(s->pict_type==FF_B_TYPE){
  1043. static const int mb_type_table[8]= {-1, 3, 2, 1,-1,-1,-1, 0}; /* convert from mv_dir to type */
  1044. int mb_type= mb_type_table[s->mv_dir];
  1045. if(s->mb_x==0){
  1046. for(i=0; i<2; i++){
  1047. s->last_mv[i][0][0]=
  1048. s->last_mv[i][0][1]=
  1049. s->last_mv[i][1][0]=
  1050. s->last_mv[i][1][1]= 0;
  1051. }
  1052. }
  1053. assert(s->dquant>=-2 && s->dquant<=2);
  1054. assert((s->dquant&1)==0);
  1055. assert(mb_type>=0);
  1056. /* nothing to do if this MB was skipped in the next P Frame */
  1057. if(s->next_picture.mbskip_table[s->mb_y * s->mb_stride + s->mb_x]){ //FIXME avoid DCT & ...
  1058. s->skip_count++;
  1059. s->mv[0][0][0]=
  1060. s->mv[0][0][1]=
  1061. s->mv[1][0][0]=
  1062. s->mv[1][0][1]= 0;
  1063. s->mv_dir= MV_DIR_FORWARD; //doesn't matter
  1064. s->qscale -= s->dquant;
  1065. // s->mb_skipped=1;
  1066. return;
  1067. }
  1068. cbp= get_b_cbp(s, block, motion_x, motion_y, mb_type);
  1069. if ((cbp | motion_x | motion_y | mb_type) ==0) {
  1070. /* direct MB with MV={0,0} */
  1071. assert(s->dquant==0);
  1072. put_bits(&s->pb, 1, 1); /* mb not coded modb1=1 */
  1073. if(interleaved_stats){
  1074. s->misc_bits++;
  1075. s->last_bits++;
  1076. }
  1077. s->skip_count++;
  1078. return;
  1079. }
  1080. put_bits(&s->pb, 1, 0); /* mb coded modb1=0 */
  1081. put_bits(&s->pb, 1, cbp ? 0 : 1); /* modb2 */ //FIXME merge
  1082. put_bits(&s->pb, mb_type+1, 1); // this table is so simple that we don't need it :)
  1083. if(cbp) put_bits(&s->pb, 6, cbp);
  1084. if(cbp && mb_type){
  1085. if(s->dquant)
  1086. put_bits(&s->pb, 2, (s->dquant>>2)+3);
  1087. else
  1088. put_bits(&s->pb, 1, 0);
  1089. }else
  1090. s->qscale -= s->dquant;
  1091. if(!s->progressive_sequence){
  1092. if(cbp)
  1093. put_bits(&s->pb, 1, s->interlaced_dct);
  1094. if(mb_type) // not direct mode
  1095. put_bits(&s->pb, 1, s->mv_type == MV_TYPE_FIELD);
  1096. }
  1097. if(interleaved_stats){
  1098. s->misc_bits+= get_bits_diff(s);
  1099. }
  1100. if(mb_type == 0){
  1101. assert(s->mv_dir & MV_DIRECT);
  1102. ff_h263_encode_motion_vector(s, motion_x, motion_y, 1);
  1103. s->b_count++;
  1104. s->f_count++;
  1105. }else{
  1106. assert(mb_type > 0 && mb_type < 4);
  1107. if(s->mv_type != MV_TYPE_FIELD){
  1108. if(s->mv_dir & MV_DIR_FORWARD){
  1109. ff_h263_encode_motion_vector(s, s->mv[0][0][0] - s->last_mv[0][0][0],
  1110. s->mv[0][0][1] - s->last_mv[0][0][1], s->f_code);
  1111. s->last_mv[0][0][0]= s->last_mv[0][1][0]= s->mv[0][0][0];
  1112. s->last_mv[0][0][1]= s->last_mv[0][1][1]= s->mv[0][0][1];
  1113. s->f_count++;
  1114. }
  1115. if(s->mv_dir & MV_DIR_BACKWARD){
  1116. ff_h263_encode_motion_vector(s, s->mv[1][0][0] - s->last_mv[1][0][0],
  1117. s->mv[1][0][1] - s->last_mv[1][0][1], s->b_code);
  1118. s->last_mv[1][0][0]= s->last_mv[1][1][0]= s->mv[1][0][0];
  1119. s->last_mv[1][0][1]= s->last_mv[1][1][1]= s->mv[1][0][1];
  1120. s->b_count++;
  1121. }
  1122. }else{
  1123. if(s->mv_dir & MV_DIR_FORWARD){
  1124. put_bits(&s->pb, 1, s->field_select[0][0]);
  1125. put_bits(&s->pb, 1, s->field_select[0][1]);
  1126. }
  1127. if(s->mv_dir & MV_DIR_BACKWARD){
  1128. put_bits(&s->pb, 1, s->field_select[1][0]);
  1129. put_bits(&s->pb, 1, s->field_select[1][1]);
  1130. }
  1131. if(s->mv_dir & MV_DIR_FORWARD){
  1132. for(i=0; i<2; i++){
  1133. ff_h263_encode_motion_vector(s, s->mv[0][i][0] - s->last_mv[0][i][0] ,
  1134. s->mv[0][i][1] - s->last_mv[0][i][1]/2, s->f_code);
  1135. s->last_mv[0][i][0]= s->mv[0][i][0];
  1136. s->last_mv[0][i][1]= s->mv[0][i][1]*2;
  1137. }
  1138. s->f_count++;
  1139. }
  1140. if(s->mv_dir & MV_DIR_BACKWARD){
  1141. for(i=0; i<2; i++){
  1142. ff_h263_encode_motion_vector(s, s->mv[1][i][0] - s->last_mv[1][i][0] ,
  1143. s->mv[1][i][1] - s->last_mv[1][i][1]/2, s->b_code);
  1144. s->last_mv[1][i][0]= s->mv[1][i][0];
  1145. s->last_mv[1][i][1]= s->mv[1][i][1]*2;
  1146. }
  1147. s->b_count++;
  1148. }
  1149. }
  1150. }
  1151. if(interleaved_stats){
  1152. s->mv_bits+= get_bits_diff(s);
  1153. }
  1154. mpeg4_encode_blocks(s, block, NULL, NULL, NULL, &s->pb);
  1155. if(interleaved_stats){
  1156. s->p_tex_bits+= get_bits_diff(s);
  1157. }
  1158. }else{ /* s->pict_type==FF_B_TYPE */
  1159. cbp= get_p_cbp(s, block, motion_x, motion_y);
  1160. if ((cbp | motion_x | motion_y | s->dquant) == 0 && s->mv_type==MV_TYPE_16X16) {
  1161. /* check if the B frames can skip it too, as we must skip it if we skip here
  1162. why didn't they just compress the skip-mb bits instead of reusing them ?! */
  1163. if(s->max_b_frames>0){
  1164. int i;
  1165. int x,y, offset;
  1166. uint8_t *p_pic;
  1167. x= s->mb_x*16;
  1168. y= s->mb_y*16;
  1169. if(x+16 > s->width) x= s->width-16;
  1170. if(y+16 > s->height) y= s->height-16;
  1171. offset= x + y*s->linesize;
  1172. p_pic= s->new_picture.data[0] + offset;
  1173. s->mb_skipped=1;
  1174. for(i=0; i<s->max_b_frames; i++){
  1175. uint8_t *b_pic;
  1176. int diff;
  1177. Picture *pic= s->reordered_input_picture[i+1];
  1178. if(pic==NULL || pic->pict_type!=FF_B_TYPE) break;
  1179. b_pic= pic->data[0] + offset;
  1180. if(pic->type != FF_BUFFER_TYPE_SHARED)
  1181. b_pic+= INPLACE_OFFSET;
  1182. diff= s->dsp.sad[0](NULL, p_pic, b_pic, s->linesize, 16);
  1183. if(diff>s->qscale*70){ //FIXME check that 70 is optimal
  1184. s->mb_skipped=0;
  1185. break;
  1186. }
  1187. }
  1188. }else
  1189. s->mb_skipped=1;
  1190. if(s->mb_skipped==1){
  1191. /* skip macroblock */
  1192. put_bits(&s->pb, 1, 1);
  1193. if(interleaved_stats){
  1194. s->misc_bits++;
  1195. s->last_bits++;
  1196. }
  1197. s->skip_count++;
  1198. return;
  1199. }
  1200. }
  1201. put_bits(&s->pb, 1, 0); /* mb coded */
  1202. cbpc = cbp & 3;
  1203. cbpy = cbp >> 2;
  1204. cbpy ^= 0xf;
  1205. if(s->mv_type==MV_TYPE_16X16){
  1206. if(s->dquant) cbpc+= 8;
  1207. put_bits(&s->pb,
  1208. inter_MCBPC_bits[cbpc],
  1209. inter_MCBPC_code[cbpc]);
  1210. put_bits(pb2, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
  1211. if(s->dquant)
  1212. put_bits(pb2, 2, dquant_code[s->dquant+2]);
  1213. if(!s->progressive_sequence){
  1214. if(cbp)
  1215. put_bits(pb2, 1, s->interlaced_dct);
  1216. put_bits(pb2, 1, 0);
  1217. }
  1218. if(interleaved_stats){
  1219. s->misc_bits+= get_bits_diff(s);
  1220. }
  1221. /* motion vectors: 16x16 mode */
  1222. h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
  1223. ff_h263_encode_motion_vector(s, motion_x - pred_x,
  1224. motion_y - pred_y, s->f_code);
  1225. }else if(s->mv_type==MV_TYPE_FIELD){
  1226. if(s->dquant) cbpc+= 8;
  1227. put_bits(&s->pb,
  1228. inter_MCBPC_bits[cbpc],
  1229. inter_MCBPC_code[cbpc]);
  1230. put_bits(pb2, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
  1231. if(s->dquant)
  1232. put_bits(pb2, 2, dquant_code[s->dquant+2]);
  1233. assert(!s->progressive_sequence);
  1234. if(cbp)
  1235. put_bits(pb2, 1, s->interlaced_dct);
  1236. put_bits(pb2, 1, 1);
  1237. if(interleaved_stats){
  1238. s->misc_bits+= get_bits_diff(s);
  1239. }
  1240. /* motion vectors: 16x8 interlaced mode */
  1241. h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
  1242. pred_y /=2;
  1243. put_bits(&s->pb, 1, s->field_select[0][0]);
  1244. put_bits(&s->pb, 1, s->field_select[0][1]);
  1245. ff_h263_encode_motion_vector(s, s->mv[0][0][0] - pred_x,
  1246. s->mv[0][0][1] - pred_y, s->f_code);
  1247. ff_h263_encode_motion_vector(s, s->mv[0][1][0] - pred_x,
  1248. s->mv[0][1][1] - pred_y, s->f_code);
  1249. }else{
  1250. assert(s->mv_type==MV_TYPE_8X8);
  1251. put_bits(&s->pb,
  1252. inter_MCBPC_bits[cbpc+16],
  1253. inter_MCBPC_code[cbpc+16]);
  1254. put_bits(pb2, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
  1255. if(!s->progressive_sequence){
  1256. if(cbp)
  1257. put_bits(pb2, 1, s->interlaced_dct);
  1258. }
  1259. if(interleaved_stats){
  1260. s->misc_bits+= get_bits_diff(s);
  1261. }
  1262. for(i=0; i<4; i++){
  1263. /* motion vectors: 8x8 mode*/
  1264. h263_pred_motion(s, i, 0, &pred_x, &pred_y);
  1265. ff_h263_encode_motion_vector(s, s->current_picture.motion_val[0][ s->block_index[i] ][0] - pred_x,
  1266. s->current_picture.motion_val[0][ s->block_index[i] ][1] - pred_y, s->f_code);
  1267. }
  1268. }
  1269. if(interleaved_stats){
  1270. s->mv_bits+= get_bits_diff(s);
  1271. }
  1272. mpeg4_encode_blocks(s, block, NULL, NULL, NULL, tex_pb);
  1273. if(interleaved_stats){
  1274. s->p_tex_bits+= get_bits_diff(s);
  1275. }
  1276. s->f_count++;
  1277. }
  1278. } else {
  1279. int cbp;
  1280. int dc_diff[6]; //dc values with the dc prediction subtracted
  1281. int dir[6]; //prediction direction
  1282. int zigzag_last_index[6];
  1283. uint8_t *scan_table[6];
  1284. int i;
  1285. for(i=0; i<6; i++){
  1286. dc_diff[i]= ff_mpeg4_pred_dc(s, i, block[i][0], &dir[i], 1);
  1287. }
  1288. if(s->flags & CODEC_FLAG_AC_PRED){
  1289. s->ac_pred= decide_ac_pred(s, block, dir, scan_table, zigzag_last_index);
  1290. if(!s->ac_pred)
  1291. restore_ac_coeffs(s, block, dir, scan_table, zigzag_last_index);
  1292. }else{
  1293. for(i=0; i<6; i++)
  1294. scan_table[i]= s->intra_scantable.permutated;
  1295. }
  1296. /* compute cbp */
  1297. cbp = 0;
  1298. for (i = 0; i < 6; i++) {
  1299. if (s->block_last_index[i] >= 1)
  1300. cbp |= 1 << (5 - i);
  1301. }
  1302. cbpc = cbp & 3;
  1303. if (s->pict_type == FF_I_TYPE) {
  1304. if(s->dquant) cbpc+=4;
  1305. put_bits(&s->pb,
  1306. intra_MCBPC_bits[cbpc],
  1307. intra_MCBPC_code[cbpc]);
  1308. } else {
  1309. if(s->dquant) cbpc+=8;
  1310. put_bits(&s->pb, 1, 0); /* mb coded */
  1311. put_bits(&s->pb,
  1312. inter_MCBPC_bits[cbpc + 4],
  1313. inter_MCBPC_code[cbpc + 4]);
  1314. }
  1315. put_bits(pb2, 1, s->ac_pred);
  1316. cbpy = cbp >> 2;
  1317. put_bits(pb2, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
  1318. if(s->dquant)
  1319. put_bits(dc_pb, 2, dquant_code[s->dquant+2]);
  1320. if(!s->progressive_sequence){
  1321. put_bits(dc_pb, 1, s->interlaced_dct);
  1322. }
  1323. if(interleaved_stats){
  1324. s->misc_bits+= get_bits_diff(s);
  1325. }
  1326. mpeg4_encode_blocks(s, block, dc_diff, scan_table, dc_pb, tex_pb);
  1327. if(interleaved_stats){
  1328. s->i_tex_bits+= get_bits_diff(s);
  1329. }
  1330. s->i_count++;
  1331. /* restore ac coeffs & last_index stuff if we messed them up with the prediction */
  1332. if(s->ac_pred)
  1333. restore_ac_coeffs(s, block, dir, scan_table, zigzag_last_index);
  1334. }
  1335. }
  1336. /**
  1337. * encodes a 8x8 block.
  1338. * @param block the 8x8 block
  1339. * @param n block index (0-3 are luma, 4-5 are chroma)
  1340. */
  1341. static void h263_encode_block(MpegEncContext * s, DCTELEM * block, int n)
  1342. {
  1343. int level, run, last, i, j, last_index, last_non_zero, sign, slevel, code;
  1344. RLTable *rl;
  1345. rl = &rl_inter;
  1346. if (s->mb_intra && !s->h263_aic) {
  1347. /* DC coef */
  1348. level = block[0];
  1349. /* 255 cannot be represented, so we clamp */
  1350. if (level > 254) {
  1351. level = 254;
  1352. block[0] = 254;
  1353. }
  1354. /* 0 cannot be represented also */
  1355. else if (level < 1) {
  1356. level = 1;
  1357. block[0] = 1;
  1358. }
  1359. if (level == 128) //FIXME check rv10
  1360. put_bits(&s->pb, 8, 0xff);
  1361. else
  1362. put_bits(&s->pb, 8, level);
  1363. i = 1;
  1364. } else {
  1365. i = 0;
  1366. if (s->h263_aic && s->mb_intra)
  1367. rl = &rl_intra_aic;
  1368. if(s->alt_inter_vlc && !s->mb_intra){
  1369. int aic_vlc_bits=0;
  1370. int inter_vlc_bits=0;
  1371. int wrong_pos=-1;
  1372. int aic_code;
  1373. last_index = s->block_last_index[n];
  1374. last_non_zero = i - 1;
  1375. for (; i <= last_index; i++) {
  1376. j = s->intra_scantable.permutated[i];
  1377. level = block[j];
  1378. if (level) {
  1379. run = i - last_non_zero - 1;
  1380. last = (i == last_index);
  1381. if(level<0) level= -level;
  1382. code = get_rl_index(rl, last, run, level);
  1383. aic_code = get_rl_index(&rl_intra_aic, last, run, level);
  1384. inter_vlc_bits += rl->table_vlc[code][1]+1;
  1385. aic_vlc_bits += rl_intra_aic.table_vlc[aic_code][1]+1;
  1386. if (code == rl->n) {
  1387. inter_vlc_bits += 1+6+8-1;
  1388. }
  1389. if (aic_code == rl_intra_aic.n) {
  1390. aic_vlc_bits += 1+6+8-1;
  1391. wrong_pos += run + 1;
  1392. }else
  1393. wrong_pos += wrong_run[aic_code];
  1394. last_non_zero = i;
  1395. }
  1396. }
  1397. i = 0;
  1398. if(aic_vlc_bits < inter_vlc_bits && wrong_pos > 63)
  1399. rl = &rl_intra_aic;
  1400. }
  1401. }
  1402. /* AC coefs */
  1403. last_index = s->block_last_index[n];
  1404. last_non_zero = i - 1;
  1405. for (; i <= last_index; i++) {
  1406. j = s->intra_scantable.permutated[i];
  1407. level = block[j];
  1408. if (level) {
  1409. run = i - last_non_zero - 1;
  1410. last = (i == last_index);
  1411. sign = 0;
  1412. slevel = level;
  1413. if (level < 0) {
  1414. sign = 1;
  1415. level = -level;
  1416. }
  1417. code = get_rl_index(rl, last, run, level);
  1418. put_bits(&s->pb, rl->table_vlc[code][1], rl->table_vlc[code][0]);
  1419. if (code == rl->n) {
  1420. if(s->h263_flv <= 1){
  1421. put_bits(&s->pb, 1, last);
  1422. put_bits(&s->pb, 6, run);
  1423. assert(slevel != 0);
  1424. if(level < 128)
  1425. put_sbits(&s->pb, 8, slevel);
  1426. else{
  1427. put_bits(&s->pb, 8, 128);
  1428. put_sbits(&s->pb, 5, slevel);
  1429. put_sbits(&s->pb, 6, slevel>>5);
  1430. }
  1431. }else{
  1432. if(level < 64) { // 7-bit level
  1433. put_bits(&s->pb, 1, 0);
  1434. put_bits(&s->pb, 1, last);
  1435. put_bits(&s->pb, 6, run);
  1436. put_sbits(&s->pb, 7, slevel);
  1437. } else {
  1438. /* 11-bit level */
  1439. put_bits(&s->pb, 1, 1);
  1440. put_bits(&s->pb, 1, last);
  1441. put_bits(&s->pb, 6, run);
  1442. put_sbits(&s->pb, 11, slevel);
  1443. }
  1444. }
  1445. } else {
  1446. put_bits(&s->pb, 1, sign);
  1447. }
  1448. last_non_zero = i;
  1449. }
  1450. }
  1451. }
  1452. /* Encode MV differences on H.263+ with Unrestricted MV mode */
  1453. static void h263p_encode_umotion(MpegEncContext * s, int val)
  1454. {
  1455. short sval = 0;
  1456. short i = 0;
  1457. short n_bits = 0;
  1458. short temp_val;
  1459. int code = 0;
  1460. int tcode;
  1461. if ( val == 0)
  1462. put_bits(&s->pb, 1, 1);
  1463. else if (val == 1)
  1464. put_bits(&s->pb, 3, 0);
  1465. else if (val == -1)
  1466. put_bits(&s->pb, 3, 2);
  1467. else {
  1468. sval = ((val < 0) ? (short)(-val):(short)val);
  1469. temp_val = sval;
  1470. while (temp_val != 0) {
  1471. temp_val = temp_val >> 1;
  1472. n_bits++;
  1473. }
  1474. i = n_bits - 1;
  1475. while (i > 0) {
  1476. tcode = (sval & (1 << (i-1))) >> (i-1);
  1477. tcode = (tcode << 1) | 1;
  1478. code = (code << 2) | tcode;
  1479. i--;
  1480. }
  1481. code = ((code << 1) | (val < 0)) << 1;
  1482. put_bits(&s->pb, (2*n_bits)+1, code);
  1483. }
  1484. }
  1485. static int h263_pred_dc(MpegEncContext * s, int n, int16_t **dc_val_ptr)
  1486. {
  1487. int x, y, wrap, a, c, pred_dc;
  1488. int16_t *dc_val;
  1489. /* find prediction */
  1490. if (n < 4) {
  1491. x = 2 * s->mb_x + (n & 1);
  1492. y = 2 * s->mb_y + ((n & 2) >> 1);
  1493. wrap = s->b8_stride;
  1494. dc_val = s->dc_val[0];
  1495. } else {
  1496. x = s->mb_x;
  1497. y = s->mb_y;
  1498. wrap = s->mb_stride;
  1499. dc_val = s->dc_val[n - 4 + 1];
  1500. }
  1501. /* B C
  1502. * A X
  1503. */
  1504. a = dc_val[(x - 1) + (y) * wrap];
  1505. c = dc_val[(x) + (y - 1) * wrap];
  1506. /* No prediction outside GOB boundary */
  1507. if(s->first_slice_line && n!=3){
  1508. if(n!=2) c= 1024;
  1509. if(n!=1 && s->mb_x == s->resync_mb_x) a= 1024;
  1510. }
  1511. /* just DC prediction */
  1512. if (a != 1024 && c != 1024)
  1513. pred_dc = (a + c) >> 1;
  1514. else if (a != 1024)
  1515. pred_dc = a;
  1516. else
  1517. pred_dc = c;
  1518. /* we assume pred is positive */
  1519. *dc_val_ptr = &dc_val[x + y * wrap];
  1520. return pred_dc;
  1521. }
  1522. void h263_encode_mb(MpegEncContext * s,
  1523. DCTELEM block[6][64],
  1524. int motion_x, int motion_y)
  1525. {
  1526. int cbpc, cbpy, i, cbp, pred_x, pred_y;
  1527. int16_t pred_dc;
  1528. int16_t rec_intradc[6];
  1529. int16_t *dc_ptr[6];
  1530. const int interleaved_stats= (s->flags&CODEC_FLAG_PASS1);
  1531. if (!s->mb_intra) {
  1532. /* compute cbp */
  1533. cbp= get_p_cbp(s, block, motion_x, motion_y);
  1534. if ((cbp | motion_x | motion_y | s->dquant | (s->mv_type - MV_TYPE_16X16)) == 0) {
  1535. /* skip macroblock */
  1536. put_bits(&s->pb, 1, 1);
  1537. if(interleaved_stats){
  1538. s->misc_bits++;
  1539. s->last_bits++;
  1540. }
  1541. s->skip_count++;
  1542. return;
  1543. }
  1544. put_bits(&s->pb, 1, 0); /* mb coded */
  1545. cbpc = cbp & 3;
  1546. cbpy = cbp >> 2;
  1547. if(s->alt_inter_vlc==0 || cbpc!=3)
  1548. cbpy ^= 0xF;
  1549. if(s->dquant) cbpc+= 8;
  1550. if(s->mv_type==MV_TYPE_16X16){
  1551. put_bits(&s->pb,
  1552. inter_MCBPC_bits[cbpc],
  1553. inter_MCBPC_code[cbpc]);
  1554. put_bits(&s->pb, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
  1555. if(s->dquant)
  1556. put_bits(&s->pb, 2, dquant_code[s->dquant+2]);
  1557. if(interleaved_stats){
  1558. s->misc_bits+= get_bits_diff(s);
  1559. }
  1560. /* motion vectors: 16x16 mode */
  1561. h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
  1562. if (!s->umvplus) {
  1563. ff_h263_encode_motion_vector(s, motion_x - pred_x,
  1564. motion_y - pred_y, 1);
  1565. }
  1566. else {
  1567. h263p_encode_umotion(s, motion_x - pred_x);
  1568. h263p_encode_umotion(s, motion_y - pred_y);
  1569. if (((motion_x - pred_x) == 1) && ((motion_y - pred_y) == 1))
  1570. /* To prevent Start Code emulation */
  1571. put_bits(&s->pb,1,1);
  1572. }
  1573. }else{
  1574. put_bits(&s->pb,
  1575. inter_MCBPC_bits[cbpc+16],
  1576. inter_MCBPC_code[cbpc+16]);
  1577. put_bits(&s->pb, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
  1578. if(s->dquant)
  1579. put_bits(&s->pb, 2, dquant_code[s->dquant+2]);
  1580. if(interleaved_stats){
  1581. s->misc_bits+= get_bits_diff(s);
  1582. }
  1583. for(i=0; i<4; i++){
  1584. /* motion vectors: 8x8 mode*/
  1585. h263_pred_motion(s, i, 0, &pred_x, &pred_y);
  1586. motion_x= s->current_picture.motion_val[0][ s->block_index[i] ][0];
  1587. motion_y= s->current_picture.motion_val[0][ s->block_index[i] ][1];
  1588. if (!s->umvplus) {
  1589. ff_h263_encode_motion_vector(s, motion_x - pred_x,
  1590. motion_y - pred_y, 1);
  1591. }
  1592. else {
  1593. h263p_encode_umotion(s, motion_x - pred_x);
  1594. h263p_encode_umotion(s, motion_y - pred_y);
  1595. if (((motion_x - pred_x) == 1) && ((motion_y - pred_y) == 1))
  1596. /* To prevent Start Code emulation */
  1597. put_bits(&s->pb,1,1);
  1598. }
  1599. }
  1600. }
  1601. if(interleaved_stats){
  1602. s->mv_bits+= get_bits_diff(s);
  1603. }
  1604. } else {
  1605. assert(s->mb_intra);
  1606. cbp = 0;
  1607. if (s->h263_aic) {
  1608. /* Predict DC */
  1609. for(i=0; i<6; i++) {
  1610. int16_t level = block[i][0];
  1611. int scale;
  1612. if(i<4) scale= s->y_dc_scale;
  1613. else scale= s->c_dc_scale;
  1614. pred_dc = h263_pred_dc(s, i, &dc_ptr[i]);
  1615. level -= pred_dc;
  1616. /* Quant */
  1617. if (level >= 0)
  1618. level = (level + (scale>>1))/scale;
  1619. else
  1620. level = (level - (scale>>1))/scale;
  1621. /* AIC can change CBP */
  1622. if (level == 0 && s->block_last_index[i] == 0)
  1623. s->block_last_index[i] = -1;
  1624. if(!s->modified_quant){
  1625. if (level < -127)
  1626. level = -127;
  1627. else if (level > 127)
  1628. level = 127;
  1629. }
  1630. block[i][0] = level;
  1631. /* Reconstruction */
  1632. rec_intradc[i] = scale*level + pred_dc;
  1633. /* Oddify */
  1634. rec_intradc[i] |= 1;
  1635. //if ((rec_intradc[i] % 2) == 0)
  1636. // rec_intradc[i]++;
  1637. /* Clipping */
  1638. if (rec_intradc[i] < 0)
  1639. rec_intradc[i] = 0;
  1640. else if (rec_intradc[i] > 2047)
  1641. rec_intradc[i] = 2047;
  1642. /* Update AC/DC tables */
  1643. *dc_ptr[i] = rec_intradc[i];
  1644. if (s->block_last_index[i] >= 0)
  1645. cbp |= 1 << (5 - i);
  1646. }
  1647. }else{
  1648. for(i=0; i<6; i++) {
  1649. /* compute cbp */
  1650. if (s->block_last_index[i] >= 1)
  1651. cbp |= 1 << (5 - i);
  1652. }
  1653. }
  1654. cbpc = cbp & 3;
  1655. if (s->pict_type == FF_I_TYPE) {
  1656. if(s->dquant) cbpc+=4;
  1657. put_bits(&s->pb,
  1658. intra_MCBPC_bits[cbpc],
  1659. intra_MCBPC_code[cbpc]);
  1660. } else {
  1661. if(s->dquant) cbpc+=8;
  1662. put_bits(&s->pb, 1, 0); /* mb coded */
  1663. put_bits(&s->pb,
  1664. inter_MCBPC_bits[cbpc + 4],
  1665. inter_MCBPC_code[cbpc + 4]);
  1666. }
  1667. if (s->h263_aic) {
  1668. /* XXX: currently, we do not try to use ac prediction */
  1669. put_bits(&s->pb, 1, 0); /* no AC prediction */
  1670. }
  1671. cbpy = cbp >> 2;
  1672. put_bits(&s->pb, cbpy_tab[cbpy][1], cbpy_tab[cbpy][0]);
  1673. if(s->dquant)
  1674. put_bits(&s->pb, 2, dquant_code[s->dquant+2]);
  1675. if(interleaved_stats){
  1676. s->misc_bits+= get_bits_diff(s);
  1677. }
  1678. }
  1679. for(i=0; i<6; i++) {
  1680. /* encode each block */
  1681. h263_encode_block(s, block[i], i);
  1682. /* Update INTRADC for decoding */
  1683. if (s->h263_aic && s->mb_intra) {
  1684. block[i][0] = rec_intradc[i];
  1685. }
  1686. }
  1687. if(interleaved_stats){
  1688. if (!s->mb_intra) {
  1689. s->p_tex_bits+= get_bits_diff(s);
  1690. s->f_count++;
  1691. }else{
  1692. s->i_tex_bits+= get_bits_diff(s);
  1693. s->i_count++;
  1694. }
  1695. }
  1696. }
  1697. #endif
  1698. void ff_h263_loop_filter(MpegEncContext * s){
  1699. int qp_c;
  1700. const int linesize = s->linesize;
  1701. const int uvlinesize= s->uvlinesize;
  1702. const int xy = s->mb_y * s->mb_stride + s->mb_x;
  1703. uint8_t *dest_y = s->dest[0];
  1704. uint8_t *dest_cb= s->dest[1];
  1705. uint8_t *dest_cr= s->dest[2];
  1706. // if(s->pict_type==FF_B_TYPE && !s->readable) return;
  1707. /*
  1708. Diag Top
  1709. Left Center
  1710. */
  1711. if(!IS_SKIP(s->current_picture.mb_type[xy])){
  1712. qp_c= s->qscale;
  1713. s->dsp.h263_v_loop_filter(dest_y+8*linesize , linesize, qp_c);
  1714. s->dsp.h263_v_loop_filter(dest_y+8*linesize+8, linesize, qp_c);
  1715. }else
  1716. qp_c= 0;
  1717. if(s->mb_y){
  1718. int qp_dt, qp_tt, qp_tc;
  1719. if(IS_SKIP(s->current_picture.mb_type[xy-s->mb_stride]))
  1720. qp_tt=0;
  1721. else
  1722. qp_tt= s->current_picture.qscale_table[xy-s->mb_stride];
  1723. if(qp_c)
  1724. qp_tc= qp_c;
  1725. else
  1726. qp_tc= qp_tt;
  1727. if(qp_tc){
  1728. const int chroma_qp= s->chroma_qscale_table[qp_tc];
  1729. s->dsp.h263_v_loop_filter(dest_y , linesize, qp_tc);
  1730. s->dsp.h263_v_loop_filter(dest_y+8, linesize, qp_tc);
  1731. s->dsp.h263_v_loop_filter(dest_cb , uvlinesize, chroma_qp);
  1732. s->dsp.h263_v_loop_filter(dest_cr , uvlinesize, chroma_qp);
  1733. }
  1734. if(qp_tt)
  1735. s->dsp.h263_h_loop_filter(dest_y-8*linesize+8 , linesize, qp_tt);
  1736. if(s->mb_x){
  1737. if(qp_tt || IS_SKIP(s->current_picture.mb_type[xy-1-s->mb_stride]))
  1738. qp_dt= qp_tt;
  1739. else
  1740. qp_dt= s->current_picture.qscale_table[xy-1-s->mb_stride];
  1741. if(qp_dt){
  1742. const int chroma_qp= s->chroma_qscale_table[qp_dt];
  1743. s->dsp.h263_h_loop_filter(dest_y -8*linesize , linesize, qp_dt);
  1744. s->dsp.h263_h_loop_filter(dest_cb-8*uvlinesize, uvlinesize, chroma_qp);
  1745. s->dsp.h263_h_loop_filter(dest_cr-8*uvlinesize, uvlinesize, chroma_qp);
  1746. }
  1747. }
  1748. }
  1749. if(qp_c){
  1750. s->dsp.h263_h_loop_filter(dest_y +8, linesize, qp_c);
  1751. if(s->mb_y + 1 == s->mb_height)
  1752. s->dsp.h263_h_loop_filter(dest_y+8*linesize+8, linesize, qp_c);
  1753. }
  1754. if(s->mb_x){
  1755. int qp_lc;
  1756. if(qp_c || IS_SKIP(s->current_picture.mb_type[xy-1]))
  1757. qp_lc= qp_c;
  1758. else
  1759. qp_lc= s->current_picture.qscale_table[xy-1];
  1760. if(qp_lc){
  1761. s->dsp.h263_h_loop_filter(dest_y, linesize, qp_lc);
  1762. if(s->mb_y + 1 == s->mb_height){
  1763. const int chroma_qp= s->chroma_qscale_table[qp_lc];
  1764. s->dsp.h263_h_loop_filter(dest_y +8* linesize, linesize, qp_lc);
  1765. s->dsp.h263_h_loop_filter(dest_cb , uvlinesize, chroma_qp);
  1766. s->dsp.h263_h_loop_filter(dest_cr , uvlinesize, chroma_qp);
  1767. }
  1768. }
  1769. }
  1770. }
  1771. static void h263_pred_acdc(MpegEncContext * s, DCTELEM *block, int n)
  1772. {
  1773. int x, y, wrap, a, c, pred_dc, scale, i;
  1774. int16_t *dc_val, *ac_val, *ac_val1;
  1775. /* find prediction */
  1776. if (n < 4) {
  1777. x = 2 * s->mb_x + (n & 1);
  1778. y = 2 * s->mb_y + (n>> 1);
  1779. wrap = s->b8_stride;
  1780. dc_val = s->dc_val[0];
  1781. ac_val = s->ac_val[0][0];
  1782. scale = s->y_dc_scale;
  1783. } else {
  1784. x = s->mb_x;
  1785. y = s->mb_y;
  1786. wrap = s->mb_stride;
  1787. dc_val = s->dc_val[n - 4 + 1];
  1788. ac_val = s->ac_val[n - 4 + 1][0];
  1789. scale = s->c_dc_scale;
  1790. }
  1791. ac_val += ((y) * wrap + (x)) * 16;
  1792. ac_val1 = ac_val;
  1793. /* B C
  1794. * A X
  1795. */
  1796. a = dc_val[(x - 1) + (y) * wrap];
  1797. c = dc_val[(x) + (y - 1) * wrap];
  1798. /* No prediction outside GOB boundary */
  1799. if(s->first_slice_line && n!=3){
  1800. if(n!=2) c= 1024;
  1801. if(n!=1 && s->mb_x == s->resync_mb_x) a= 1024;
  1802. }
  1803. if (s->ac_pred) {
  1804. pred_dc = 1024;
  1805. if (s->h263_aic_dir) {
  1806. /* left prediction */
  1807. if (a != 1024) {
  1808. ac_val -= 16;
  1809. for(i=1;i<8;i++) {
  1810. block[s->dsp.idct_permutation[i<<3]] += ac_val[i];
  1811. }
  1812. pred_dc = a;
  1813. }
  1814. } else {
  1815. /* top prediction */
  1816. if (c != 1024) {
  1817. ac_val -= 16 * wrap;
  1818. for(i=1;i<8;i++) {
  1819. block[s->dsp.idct_permutation[i ]] += ac_val[i + 8];
  1820. }
  1821. pred_dc = c;
  1822. }
  1823. }
  1824. } else {
  1825. /* just DC prediction */
  1826. if (a != 1024 && c != 1024)
  1827. pred_dc = (a + c) >> 1;
  1828. else if (a != 1024)
  1829. pred_dc = a;
  1830. else
  1831. pred_dc = c;
  1832. }
  1833. /* we assume pred is positive */
  1834. block[0]=block[0]*scale + pred_dc;
  1835. if (block[0] < 0)
  1836. block[0] = 0;
  1837. else
  1838. block[0] |= 1;
  1839. /* Update AC/DC tables */
  1840. dc_val[(x) + (y) * wrap] = block[0];
  1841. /* left copy */
  1842. for(i=1;i<8;i++)
  1843. ac_val1[i ] = block[s->dsp.idct_permutation[i<<3]];
  1844. /* top copy */
  1845. for(i=1;i<8;i++)
  1846. ac_val1[8 + i] = block[s->dsp.idct_permutation[i ]];
  1847. }
  1848. int16_t *h263_pred_motion(MpegEncContext * s, int block, int dir,
  1849. int *px, int *py)
  1850. {
  1851. int wrap;
  1852. int16_t *A, *B, *C, (*mot_val)[2];
  1853. static const int off[4]= {2, 1, 1, -1};
  1854. wrap = s->b8_stride;
  1855. mot_val = s->current_picture.motion_val[dir] + s->block_index[block];
  1856. A = mot_val[ - 1];
  1857. /* special case for first (slice) line */
  1858. if (s->first_slice_line && block<3) {
  1859. // we can't just change some MVs to simulate that as we need them for the B frames (and ME)
  1860. // and if we ever support non rectangular objects than we need to do a few ifs here anyway :(
  1861. if(block==0){ //most common case
  1862. if(s->mb_x == s->resync_mb_x){ //rare
  1863. *px= *py = 0;
  1864. }else if(s->mb_x + 1 == s->resync_mb_x && s->h263_pred){ //rare
  1865. C = mot_val[off[block] - wrap];
  1866. if(s->mb_x==0){
  1867. *px = C[0];
  1868. *py = C[1];
  1869. }else{
  1870. *px = mid_pred(A[0], 0, C[0]);
  1871. *py = mid_pred(A[1], 0, C[1]);
  1872. }
  1873. }else{
  1874. *px = A[0];
  1875. *py = A[1];
  1876. }
  1877. }else if(block==1){
  1878. if(s->mb_x + 1 == s->resync_mb_x && s->h263_pred){ //rare
  1879. C = mot_val[off[block] - wrap];
  1880. *px = mid_pred(A[0], 0, C[0]);
  1881. *py = mid_pred(A[1], 0, C[1]);
  1882. }else{
  1883. *px = A[0];
  1884. *py = A[1];
  1885. }
  1886. }else{ /* block==2*/
  1887. B = mot_val[ - wrap];
  1888. C = mot_val[off[block] - wrap];
  1889. if(s->mb_x == s->resync_mb_x) //rare
  1890. A[0]=A[1]=0;
  1891. *px = mid_pred(A[0], B[0], C[0]);
  1892. *py = mid_pred(A[1], B[1], C[1]);
  1893. }
  1894. } else {
  1895. B = mot_val[ - wrap];
  1896. C = mot_val[off[block] - wrap];
  1897. *px = mid_pred(A[0], B[0], C[0]);
  1898. *py = mid_pred(A[1], B[1], C[1]);
  1899. }
  1900. return *mot_val;
  1901. }
  1902. #if CONFIG_ENCODERS
  1903. /***************************************************/
  1904. /**
  1905. * add mpeg4 stuffing bits (01...1)
  1906. */
  1907. void ff_mpeg4_stuffing(PutBitContext * pbc)
  1908. {
  1909. int length;
  1910. put_bits(pbc, 1, 0);
  1911. length= (-put_bits_count(pbc))&7;
  1912. if(length) put_bits(pbc, length, (1<<length)-1);
  1913. }
  1914. /* must be called before writing the header */
  1915. void ff_set_mpeg4_time(MpegEncContext * s){
  1916. if(s->pict_type==FF_B_TYPE){
  1917. ff_mpeg4_init_direct_mv(s);
  1918. }else{
  1919. s->last_time_base= s->time_base;
  1920. s->time_base= s->time/s->avctx->time_base.den;
  1921. }
  1922. }
  1923. static void mpeg4_encode_gop_header(MpegEncContext * s){
  1924. int hours, minutes, seconds;
  1925. int64_t time;
  1926. put_bits(&s->pb, 16, 0);
  1927. put_bits(&s->pb, 16, GOP_STARTCODE);
  1928. time= s->current_picture_ptr->pts;
  1929. if(s->reordered_input_picture[1])
  1930. time= FFMIN(time, s->reordered_input_picture[1]->pts);
  1931. time= time*s->avctx->time_base.num;
  1932. seconds= time/s->avctx->time_base.den;
  1933. minutes= seconds/60; seconds %= 60;
  1934. hours= minutes/60; minutes %= 60;
  1935. hours%=24;
  1936. put_bits(&s->pb, 5, hours);
  1937. put_bits(&s->pb, 6, minutes);
  1938. put_bits(&s->pb, 1, 1);
  1939. put_bits(&s->pb, 6, seconds);
  1940. put_bits(&s->pb, 1, !!(s->flags&CODEC_FLAG_CLOSED_GOP));
  1941. put_bits(&s->pb, 1, 0); //broken link == NO
  1942. s->last_time_base= time / s->avctx->time_base.den;
  1943. ff_mpeg4_stuffing(&s->pb);
  1944. }
  1945. static void mpeg4_encode_visual_object_header(MpegEncContext * s){
  1946. int profile_and_level_indication;
  1947. int vo_ver_id;
  1948. if(s->avctx->profile != FF_PROFILE_UNKNOWN){
  1949. profile_and_level_indication = s->avctx->profile << 4;
  1950. }else if(s->max_b_frames || s->quarter_sample){
  1951. profile_and_level_indication= 0xF0; // adv simple
  1952. }else{
  1953. profile_and_level_indication= 0x00; // simple
  1954. }
  1955. if(s->avctx->level != FF_LEVEL_UNKNOWN){
  1956. profile_and_level_indication |= s->avctx->level;
  1957. }else{
  1958. profile_and_level_indication |= 1; //level 1
  1959. }
  1960. if(profile_and_level_indication>>4 == 0xF){
  1961. vo_ver_id= 5;
  1962. }else{
  1963. vo_ver_id= 1;
  1964. }
  1965. //FIXME levels
  1966. put_bits(&s->pb, 16, 0);
  1967. put_bits(&s->pb, 16, VOS_STARTCODE);
  1968. put_bits(&s->pb, 8, profile_and_level_indication);
  1969. put_bits(&s->pb, 16, 0);
  1970. put_bits(&s->pb, 16, VISUAL_OBJ_STARTCODE);
  1971. put_bits(&s->pb, 1, 1);
  1972. put_bits(&s->pb, 4, vo_ver_id);
  1973. put_bits(&s->pb, 3, 1); //priority
  1974. put_bits(&s->pb, 4, 1); //visual obj type== video obj
  1975. put_bits(&s->pb, 1, 0); //video signal type == no clue //FIXME
  1976. ff_mpeg4_stuffing(&s->pb);
  1977. }
  1978. static void mpeg4_encode_vol_header(MpegEncContext * s, int vo_number, int vol_number)
  1979. {
  1980. int vo_ver_id;
  1981. if (!CONFIG_MPEG4_ENCODER) return;
  1982. if(s->max_b_frames || s->quarter_sample){
  1983. vo_ver_id= 5;
  1984. s->vo_type= ADV_SIMPLE_VO_TYPE;
  1985. }else{
  1986. vo_ver_id= 1;
  1987. s->vo_type= SIMPLE_VO_TYPE;
  1988. }
  1989. put_bits(&s->pb, 16, 0);
  1990. put_bits(&s->pb, 16, 0x100 + vo_number); /* video obj */
  1991. put_bits(&s->pb, 16, 0);
  1992. put_bits(&s->pb, 16, 0x120 + vol_number); /* video obj layer */
  1993. put_bits(&s->pb, 1, 0); /* random access vol */
  1994. put_bits(&s->pb, 8, s->vo_type); /* video obj type indication */
  1995. if(s->workaround_bugs & FF_BUG_MS) {
  1996. put_bits(&s->pb, 1, 0); /* is obj layer id= no */
  1997. } else {
  1998. put_bits(&s->pb, 1, 1); /* is obj layer id= yes */
  1999. put_bits(&s->pb, 4, vo_ver_id); /* is obj layer ver id */
  2000. put_bits(&s->pb, 3, 1); /* is obj layer priority */
  2001. }
  2002. aspect_to_info(s, s->avctx->sample_aspect_ratio);
  2003. put_bits(&s->pb, 4, s->aspect_ratio_info);/* aspect ratio info */
  2004. if (s->aspect_ratio_info == FF_ASPECT_EXTENDED){
  2005. put_bits(&s->pb, 8, s->avctx->sample_aspect_ratio.num);
  2006. put_bits(&s->pb, 8, s->avctx->sample_aspect_ratio.den);
  2007. }
  2008. if(s->workaround_bugs & FF_BUG_MS) { //
  2009. put_bits(&s->pb, 1, 0); /* vol control parameters= no @@@ */
  2010. } else {
  2011. put_bits(&s->pb, 1, 1); /* vol control parameters= yes */
  2012. put_bits(&s->pb, 2, 1); /* chroma format YUV 420/YV12 */
  2013. put_bits(&s->pb, 1, s->low_delay);
  2014. put_bits(&s->pb, 1, 0); /* vbv parameters= no */
  2015. }
  2016. put_bits(&s->pb, 2, RECT_SHAPE); /* vol shape= rectangle */
  2017. put_bits(&s->pb, 1, 1); /* marker bit */
  2018. put_bits(&s->pb, 16, s->avctx->time_base.den);
  2019. if (s->time_increment_bits < 1)
  2020. s->time_increment_bits = 1;
  2021. put_bits(&s->pb, 1, 1); /* marker bit */
  2022. put_bits(&s->pb, 1, 0); /* fixed vop rate=no */
  2023. put_bits(&s->pb, 1, 1); /* marker bit */
  2024. put_bits(&s->pb, 13, s->width); /* vol width */
  2025. put_bits(&s->pb, 1, 1); /* marker bit */
  2026. put_bits(&s->pb, 13, s->height); /* vol height */
  2027. put_bits(&s->pb, 1, 1); /* marker bit */
  2028. put_bits(&s->pb, 1, s->progressive_sequence ? 0 : 1);
  2029. put_bits(&s->pb, 1, 1); /* obmc disable */
  2030. if (vo_ver_id == 1) {
  2031. put_bits(&s->pb, 1, s->vol_sprite_usage); /* sprite enable */
  2032. }else{
  2033. put_bits(&s->pb, 2, s->vol_sprite_usage); /* sprite enable */
  2034. }
  2035. put_bits(&s->pb, 1, 0); /* not 8 bit == false */
  2036. put_bits(&s->pb, 1, s->mpeg_quant); /* quant type= (0=h263 style)*/
  2037. if(s->mpeg_quant){
  2038. ff_write_quant_matrix(&s->pb, s->avctx->intra_matrix);
  2039. ff_write_quant_matrix(&s->pb, s->avctx->inter_matrix);
  2040. }
  2041. if (vo_ver_id != 1)
  2042. put_bits(&s->pb, 1, s->quarter_sample);
  2043. put_bits(&s->pb, 1, 1); /* complexity estimation disable */
  2044. s->resync_marker= s->rtp_mode;
  2045. put_bits(&s->pb, 1, s->resync_marker ? 0 : 1);/* resync marker disable */
  2046. put_bits(&s->pb, 1, s->data_partitioning ? 1 : 0);
  2047. if(s->data_partitioning){
  2048. put_bits(&s->pb, 1, 0); /* no rvlc */
  2049. }
  2050. if (vo_ver_id != 1){
  2051. put_bits(&s->pb, 1, 0); /* newpred */
  2052. put_bits(&s->pb, 1, 0); /* reduced res vop */
  2053. }
  2054. put_bits(&s->pb, 1, 0); /* scalability */
  2055. ff_mpeg4_stuffing(&s->pb);
  2056. /* user data */
  2057. if(!(s->flags & CODEC_FLAG_BITEXACT)){
  2058. put_bits(&s->pb, 16, 0);
  2059. put_bits(&s->pb, 16, 0x1B2); /* user_data */
  2060. ff_put_string(&s->pb, LIBAVCODEC_IDENT, 0);
  2061. }
  2062. }
  2063. /* write mpeg4 VOP header */
  2064. void mpeg4_encode_picture_header(MpegEncContext * s, int picture_number)
  2065. {
  2066. int time_incr;
  2067. int time_div, time_mod;
  2068. if(s->pict_type==FF_I_TYPE){
  2069. if(!(s->flags&CODEC_FLAG_GLOBAL_HEADER)){
  2070. if(s->strict_std_compliance < FF_COMPLIANCE_VERY_STRICT) //HACK, the reference sw is buggy
  2071. mpeg4_encode_visual_object_header(s);
  2072. if(s->strict_std_compliance < FF_COMPLIANCE_VERY_STRICT || picture_number==0) //HACK, the reference sw is buggy
  2073. mpeg4_encode_vol_header(s, 0, 0);
  2074. }
  2075. if(!(s->workaround_bugs & FF_BUG_MS))
  2076. mpeg4_encode_gop_header(s);
  2077. }
  2078. s->partitioned_frame= s->data_partitioning && s->pict_type!=FF_B_TYPE;
  2079. put_bits(&s->pb, 16, 0); /* vop header */
  2080. put_bits(&s->pb, 16, VOP_STARTCODE); /* vop header */
  2081. put_bits(&s->pb, 2, s->pict_type - 1); /* pict type: I = 0 , P = 1 */
  2082. assert(s->time>=0);
  2083. time_div= s->time/s->avctx->time_base.den;
  2084. time_mod= s->time%s->avctx->time_base.den;
  2085. time_incr= time_div - s->last_time_base;
  2086. assert(time_incr >= 0);
  2087. while(time_incr--)
  2088. put_bits(&s->pb, 1, 1);
  2089. put_bits(&s->pb, 1, 0);
  2090. put_bits(&s->pb, 1, 1); /* marker */
  2091. put_bits(&s->pb, s->time_increment_bits, time_mod); /* time increment */
  2092. put_bits(&s->pb, 1, 1); /* marker */
  2093. put_bits(&s->pb, 1, 1); /* vop coded */
  2094. if ( s->pict_type == FF_P_TYPE
  2095. || (s->pict_type == FF_S_TYPE && s->vol_sprite_usage==GMC_SPRITE)) {
  2096. put_bits(&s->pb, 1, s->no_rounding); /* rounding type */
  2097. }
  2098. put_bits(&s->pb, 3, 0); /* intra dc VLC threshold */
  2099. if(!s->progressive_sequence){
  2100. put_bits(&s->pb, 1, s->current_picture_ptr->top_field_first);
  2101. put_bits(&s->pb, 1, s->alternate_scan);
  2102. }
  2103. //FIXME sprite stuff
  2104. put_bits(&s->pb, 5, s->qscale);
  2105. if (s->pict_type != FF_I_TYPE)
  2106. put_bits(&s->pb, 3, s->f_code); /* fcode_for */
  2107. if (s->pict_type == FF_B_TYPE)
  2108. put_bits(&s->pb, 3, s->b_code); /* fcode_back */
  2109. }
  2110. void ff_h263_encode_motion(MpegEncContext * s, int val, int f_code)
  2111. {
  2112. int range, l, bit_size, sign, code, bits;
  2113. if (val == 0) {
  2114. /* zero vector */
  2115. code = 0;
  2116. put_bits(&s->pb, mvtab[code][1], mvtab[code][0]);
  2117. } else {
  2118. bit_size = f_code - 1;
  2119. range = 1 << bit_size;
  2120. /* modulo encoding */
  2121. l= INT_BIT - 6 - bit_size;
  2122. val = (val<<l)>>l;
  2123. sign = val>>31;
  2124. val= (val^sign)-sign;
  2125. sign&=1;
  2126. val--;
  2127. code = (val >> bit_size) + 1;
  2128. bits = val & (range - 1);
  2129. put_bits(&s->pb, mvtab[code][1] + 1, (mvtab[code][0] << 1) | sign);
  2130. if (bit_size > 0) {
  2131. put_bits(&s->pb, bit_size, bits);
  2132. }
  2133. }
  2134. }
  2135. static void init_mv_penalty_and_fcode(MpegEncContext *s)
  2136. {
  2137. int f_code;
  2138. int mv;
  2139. for(f_code=1; f_code<=MAX_FCODE; f_code++){
  2140. for(mv=-MAX_MV; mv<=MAX_MV; mv++){
  2141. int len;
  2142. if(mv==0) len= mvtab[0][1];
  2143. else{
  2144. int val, bit_size, code;
  2145. bit_size = f_code - 1;
  2146. val=mv;
  2147. if (val < 0)
  2148. val = -val;
  2149. val--;
  2150. code = (val >> bit_size) + 1;
  2151. if(code<33){
  2152. len= mvtab[code][1] + 1 + bit_size;
  2153. }else{
  2154. len= mvtab[32][1] + av_log2(code>>5) + 2 + bit_size;
  2155. }
  2156. }
  2157. mv_penalty[f_code][mv+MAX_MV]= len;
  2158. }
  2159. }
  2160. for(f_code=MAX_FCODE; f_code>0; f_code--){
  2161. for(mv=-(16<<f_code); mv<(16<<f_code); mv++){
  2162. fcode_tab[mv+MAX_MV]= f_code;
  2163. }
  2164. }
  2165. for(mv=0; mv<MAX_MV*2+1; mv++){
  2166. umv_fcode_tab[mv]= 1;
  2167. }
  2168. }
  2169. static void init_uni_dc_tab(void)
  2170. {
  2171. int level, uni_code, uni_len;
  2172. for(level=-256; level<256; level++){
  2173. int size, v, l;
  2174. /* find number of bits */
  2175. size = 0;
  2176. v = abs(level);
  2177. while (v) {
  2178. v >>= 1;
  2179. size++;
  2180. }
  2181. if (level < 0)
  2182. l= (-level) ^ ((1 << size) - 1);
  2183. else
  2184. l= level;
  2185. /* luminance */
  2186. uni_code= DCtab_lum[size][0];
  2187. uni_len = DCtab_lum[size][1];
  2188. if (size > 0) {
  2189. uni_code<<=size; uni_code|=l;
  2190. uni_len+=size;
  2191. if (size > 8){
  2192. uni_code<<=1; uni_code|=1;
  2193. uni_len++;
  2194. }
  2195. }
  2196. uni_DCtab_lum_bits[level+256]= uni_code;
  2197. uni_DCtab_lum_len [level+256]= uni_len;
  2198. /* chrominance */
  2199. uni_code= DCtab_chrom[size][0];
  2200. uni_len = DCtab_chrom[size][1];
  2201. if (size > 0) {
  2202. uni_code<<=size; uni_code|=l;
  2203. uni_len+=size;
  2204. if (size > 8){
  2205. uni_code<<=1; uni_code|=1;
  2206. uni_len++;
  2207. }
  2208. }
  2209. uni_DCtab_chrom_bits[level+256]= uni_code;
  2210. uni_DCtab_chrom_len [level+256]= uni_len;
  2211. }
  2212. }
  2213. static void init_uni_mpeg4_rl_tab(RLTable *rl, uint32_t *bits_tab, uint8_t *len_tab){
  2214. int slevel, run, last;
  2215. assert(MAX_LEVEL >= 64);
  2216. assert(MAX_RUN >= 63);
  2217. for(slevel=-64; slevel<64; slevel++){
  2218. if(slevel==0) continue;
  2219. for(run=0; run<64; run++){
  2220. for(last=0; last<=1; last++){
  2221. const int index= UNI_MPEG4_ENC_INDEX(last, run, slevel+64);
  2222. int level= slevel < 0 ? -slevel : slevel;
  2223. int sign= slevel < 0 ? 1 : 0;
  2224. int bits, len, code;
  2225. int level1, run1;
  2226. len_tab[index]= 100;
  2227. /* ESC0 */
  2228. code= get_rl_index(rl, last, run, level);
  2229. bits= rl->table_vlc[code][0];
  2230. len= rl->table_vlc[code][1];
  2231. bits=bits*2+sign; len++;
  2232. if(code!=rl->n && len < len_tab[index]){
  2233. bits_tab[index]= bits;
  2234. len_tab [index]= len;
  2235. }
  2236. /* ESC1 */
  2237. bits= rl->table_vlc[rl->n][0];
  2238. len= rl->table_vlc[rl->n][1];
  2239. bits=bits*2; len++; //esc1
  2240. level1= level - rl->max_level[last][run];
  2241. if(level1>0){
  2242. code= get_rl_index(rl, last, run, level1);
  2243. bits<<= rl->table_vlc[code][1];
  2244. len += rl->table_vlc[code][1];
  2245. bits += rl->table_vlc[code][0];
  2246. bits=bits*2+sign; len++;
  2247. if(code!=rl->n && len < len_tab[index]){
  2248. bits_tab[index]= bits;
  2249. len_tab [index]= len;
  2250. }
  2251. }
  2252. /* ESC2 */
  2253. bits= rl->table_vlc[rl->n][0];
  2254. len= rl->table_vlc[rl->n][1];
  2255. bits=bits*4+2; len+=2; //esc2
  2256. run1 = run - rl->max_run[last][level] - 1;
  2257. if(run1>=0){
  2258. code= get_rl_index(rl, last, run1, level);
  2259. bits<<= rl->table_vlc[code][1];
  2260. len += rl->table_vlc[code][1];
  2261. bits += rl->table_vlc[code][0];
  2262. bits=bits*2+sign; len++;
  2263. if(code!=rl->n && len < len_tab[index]){
  2264. bits_tab[index]= bits;
  2265. len_tab [index]= len;
  2266. }
  2267. }
  2268. /* ESC3 */
  2269. bits= rl->table_vlc[rl->n][0];
  2270. len = rl->table_vlc[rl->n][1];
  2271. bits=bits*4+3; len+=2; //esc3
  2272. bits=bits*2+last; len++;
  2273. bits=bits*64+run; len+=6;
  2274. bits=bits*2+1; len++; //marker
  2275. bits=bits*4096+(slevel&0xfff); len+=12;
  2276. bits=bits*2+1; len++; //marker
  2277. if(len < len_tab[index]){
  2278. bits_tab[index]= bits;
  2279. len_tab [index]= len;
  2280. }
  2281. }
  2282. }
  2283. }
  2284. }
  2285. static void init_uni_h263_rl_tab(RLTable *rl, uint32_t *bits_tab, uint8_t *len_tab){
  2286. int slevel, run, last;
  2287. assert(MAX_LEVEL >= 64);
  2288. assert(MAX_RUN >= 63);
  2289. for(slevel=-64; slevel<64; slevel++){
  2290. if(slevel==0) continue;
  2291. for(run=0; run<64; run++){
  2292. for(last=0; last<=1; last++){
  2293. const int index= UNI_MPEG4_ENC_INDEX(last, run, slevel+64);
  2294. int level= slevel < 0 ? -slevel : slevel;
  2295. int sign= slevel < 0 ? 1 : 0;
  2296. int bits, len, code;
  2297. len_tab[index]= 100;
  2298. /* ESC0 */
  2299. code= get_rl_index(rl, last, run, level);
  2300. bits= rl->table_vlc[code][0];
  2301. len= rl->table_vlc[code][1];
  2302. bits=bits*2+sign; len++;
  2303. if(code!=rl->n && len < len_tab[index]){
  2304. if(bits_tab) bits_tab[index]= bits;
  2305. len_tab [index]= len;
  2306. }
  2307. /* ESC */
  2308. bits= rl->table_vlc[rl->n][0];
  2309. len = rl->table_vlc[rl->n][1];
  2310. bits=bits*2+last; len++;
  2311. bits=bits*64+run; len+=6;
  2312. bits=bits*256+(level&0xff); len+=8;
  2313. if(len < len_tab[index]){
  2314. if(bits_tab) bits_tab[index]= bits;
  2315. len_tab [index]= len;
  2316. }
  2317. }
  2318. }
  2319. }
  2320. }
  2321. void h263_encode_init(MpegEncContext *s)
  2322. {
  2323. static int done = 0;
  2324. if (!done) {
  2325. done = 1;
  2326. init_uni_dc_tab();
  2327. init_rl(&rl_inter, static_rl_table_store[0]);
  2328. init_rl(&rl_intra, static_rl_table_store[1]);
  2329. init_rl(&rl_intra_aic, static_rl_table_store[2]);
  2330. init_uni_mpeg4_rl_tab(&rl_intra, uni_mpeg4_intra_rl_bits, uni_mpeg4_intra_rl_len);
  2331. init_uni_mpeg4_rl_tab(&rl_inter, uni_mpeg4_inter_rl_bits, uni_mpeg4_inter_rl_len);
  2332. init_uni_h263_rl_tab(&rl_intra_aic, NULL, uni_h263_intra_aic_rl_len);
  2333. init_uni_h263_rl_tab(&rl_inter , NULL, uni_h263_inter_rl_len);
  2334. init_mv_penalty_and_fcode(s);
  2335. }
  2336. s->me.mv_penalty= mv_penalty; //FIXME exact table for msmpeg4 & h263p
  2337. s->intra_ac_vlc_length =s->inter_ac_vlc_length = uni_h263_inter_rl_len;
  2338. s->intra_ac_vlc_last_length=s->inter_ac_vlc_last_length= uni_h263_inter_rl_len + 128*64;
  2339. if(s->h263_aic){
  2340. s->intra_ac_vlc_length = uni_h263_intra_aic_rl_len;
  2341. s->intra_ac_vlc_last_length= uni_h263_intra_aic_rl_len + 128*64;
  2342. }
  2343. s->ac_esc_length= 7+1+6+8;
  2344. // use fcodes >1 only for mpeg4 & h263 & h263p FIXME
  2345. switch(s->codec_id){
  2346. case CODEC_ID_MPEG4:
  2347. s->fcode_tab= fcode_tab;
  2348. s->min_qcoeff= -2048;
  2349. s->max_qcoeff= 2047;
  2350. s->intra_ac_vlc_length = uni_mpeg4_intra_rl_len;
  2351. s->intra_ac_vlc_last_length= uni_mpeg4_intra_rl_len + 128*64;
  2352. s->inter_ac_vlc_length = uni_mpeg4_inter_rl_len;
  2353. s->inter_ac_vlc_last_length= uni_mpeg4_inter_rl_len + 128*64;
  2354. s->luma_dc_vlc_length= uni_DCtab_lum_len;
  2355. s->chroma_dc_vlc_length= uni_DCtab_chrom_len;
  2356. s->ac_esc_length= 7+2+1+6+1+12+1;
  2357. s->y_dc_scale_table= ff_mpeg4_y_dc_scale_table;
  2358. s->c_dc_scale_table= ff_mpeg4_c_dc_scale_table;
  2359. if(s->flags & CODEC_FLAG_GLOBAL_HEADER){
  2360. s->avctx->extradata= av_malloc(1024);
  2361. init_put_bits(&s->pb, s->avctx->extradata, 1024);
  2362. if(!(s->workaround_bugs & FF_BUG_MS))
  2363. mpeg4_encode_visual_object_header(s);
  2364. mpeg4_encode_vol_header(s, 0, 0);
  2365. // ff_mpeg4_stuffing(&s->pb); ?
  2366. flush_put_bits(&s->pb);
  2367. s->avctx->extradata_size= (put_bits_count(&s->pb)+7)>>3;
  2368. }
  2369. break;
  2370. case CODEC_ID_H263P:
  2371. if(s->umvplus)
  2372. s->fcode_tab= umv_fcode_tab;
  2373. if(s->modified_quant){
  2374. s->min_qcoeff= -2047;
  2375. s->max_qcoeff= 2047;
  2376. }else{
  2377. s->min_qcoeff= -127;
  2378. s->max_qcoeff= 127;
  2379. }
  2380. break;
  2381. //Note for mpeg4 & h263 the dc-scale table will be set per frame as needed later
  2382. case CODEC_ID_FLV1:
  2383. if (s->h263_flv > 1) {
  2384. s->min_qcoeff= -1023;
  2385. s->max_qcoeff= 1023;
  2386. } else {
  2387. s->min_qcoeff= -127;
  2388. s->max_qcoeff= 127;
  2389. }
  2390. s->y_dc_scale_table=
  2391. s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
  2392. break;
  2393. default: //nothing needed - default table already set in mpegvideo.c
  2394. s->min_qcoeff= -127;
  2395. s->max_qcoeff= 127;
  2396. s->y_dc_scale_table=
  2397. s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
  2398. }
  2399. }
  2400. #endif //CONFIG_ENCODERS
  2401. /**
  2402. * predicts the ac.
  2403. * @param n block index (0-3 are luma, 4-5 are chroma)
  2404. * @param dir the ac prediction direction
  2405. */
  2406. void mpeg4_pred_ac(MpegEncContext * s, DCTELEM *block, int n,
  2407. int dir)
  2408. {
  2409. int i;
  2410. int16_t *ac_val, *ac_val1;
  2411. int8_t * const qscale_table= s->current_picture.qscale_table;
  2412. /* find prediction */
  2413. ac_val = s->ac_val[0][0] + s->block_index[n] * 16;
  2414. ac_val1 = ac_val;
  2415. if (s->ac_pred) {
  2416. if (dir == 0) {
  2417. const int xy= s->mb_x-1 + s->mb_y*s->mb_stride;
  2418. /* left prediction */
  2419. ac_val -= 16;
  2420. if(s->mb_x==0 || s->qscale == qscale_table[xy] || n==1 || n==3){
  2421. /* same qscale */
  2422. for(i=1;i<8;i++) {
  2423. block[s->dsp.idct_permutation[i<<3]] += ac_val[i];
  2424. }
  2425. }else{
  2426. /* different qscale, we must rescale */
  2427. for(i=1;i<8;i++) {
  2428. block[s->dsp.idct_permutation[i<<3]] += ROUNDED_DIV(ac_val[i]*qscale_table[xy], s->qscale);
  2429. }
  2430. }
  2431. } else {
  2432. const int xy= s->mb_x + s->mb_y*s->mb_stride - s->mb_stride;
  2433. /* top prediction */
  2434. ac_val -= 16 * s->block_wrap[n];
  2435. if(s->mb_y==0 || s->qscale == qscale_table[xy] || n==2 || n==3){
  2436. /* same qscale */
  2437. for(i=1;i<8;i++) {
  2438. block[s->dsp.idct_permutation[i]] += ac_val[i + 8];
  2439. }
  2440. }else{
  2441. /* different qscale, we must rescale */
  2442. for(i=1;i<8;i++) {
  2443. block[s->dsp.idct_permutation[i]] += ROUNDED_DIV(ac_val[i + 8]*qscale_table[xy], s->qscale);
  2444. }
  2445. }
  2446. }
  2447. }
  2448. /* left copy */
  2449. for(i=1;i<8;i++)
  2450. ac_val1[i ] = block[s->dsp.idct_permutation[i<<3]];
  2451. /* top copy */
  2452. for(i=1;i<8;i++)
  2453. ac_val1[8 + i] = block[s->dsp.idct_permutation[i ]];
  2454. }
  2455. /***********************************************/
  2456. /* decoding */
  2457. static VLC intra_MCBPC_vlc;
  2458. static VLC inter_MCBPC_vlc;
  2459. static VLC cbpy_vlc;
  2460. static VLC mv_vlc;
  2461. static VLC dc_lum, dc_chrom;
  2462. static VLC sprite_trajectory;
  2463. static VLC mb_type_b_vlc;
  2464. static VLC h263_mbtype_b_vlc;
  2465. static VLC cbpc_b_vlc;
  2466. /* init vlcs */
  2467. /* XXX: find a better solution to handle static init */
  2468. void h263_decode_init_vlc(MpegEncContext *s)
  2469. {
  2470. static int done = 0;
  2471. if (!done) {
  2472. done = 1;
  2473. INIT_VLC_STATIC(&intra_MCBPC_vlc, INTRA_MCBPC_VLC_BITS, 9,
  2474. intra_MCBPC_bits, 1, 1,
  2475. intra_MCBPC_code, 1, 1, 72);
  2476. INIT_VLC_STATIC(&inter_MCBPC_vlc, INTER_MCBPC_VLC_BITS, 28,
  2477. inter_MCBPC_bits, 1, 1,
  2478. inter_MCBPC_code, 1, 1, 198);
  2479. INIT_VLC_STATIC(&cbpy_vlc, CBPY_VLC_BITS, 16,
  2480. &cbpy_tab[0][1], 2, 1,
  2481. &cbpy_tab[0][0], 2, 1, 64);
  2482. INIT_VLC_STATIC(&mv_vlc, MV_VLC_BITS, 33,
  2483. &mvtab[0][1], 2, 1,
  2484. &mvtab[0][0], 2, 1, 538);
  2485. init_rl(&rl_inter, static_rl_table_store[0]);
  2486. init_rl(&rl_intra, static_rl_table_store[1]);
  2487. init_rl(&rvlc_rl_inter, static_rl_table_store[3]);
  2488. init_rl(&rvlc_rl_intra, static_rl_table_store[4]);
  2489. init_rl(&rl_intra_aic, static_rl_table_store[2]);
  2490. INIT_VLC_RL(rl_inter, 554);
  2491. INIT_VLC_RL(rl_intra, 554);
  2492. INIT_VLC_RL(rvlc_rl_inter, 1072);
  2493. INIT_VLC_RL(rvlc_rl_intra, 1072);
  2494. INIT_VLC_RL(rl_intra_aic, 554);
  2495. INIT_VLC_STATIC(&dc_lum, DC_VLC_BITS, 10 /* 13 */,
  2496. &DCtab_lum[0][1], 2, 1,
  2497. &DCtab_lum[0][0], 2, 1, 512);
  2498. INIT_VLC_STATIC(&dc_chrom, DC_VLC_BITS, 10 /* 13 */,
  2499. &DCtab_chrom[0][1], 2, 1,
  2500. &DCtab_chrom[0][0], 2, 1, 512);
  2501. INIT_VLC_STATIC(&sprite_trajectory, SPRITE_TRAJ_VLC_BITS, 15,
  2502. &sprite_trajectory_tab[0][1], 4, 2,
  2503. &sprite_trajectory_tab[0][0], 4, 2, 128);
  2504. INIT_VLC_STATIC(&mb_type_b_vlc, MB_TYPE_B_VLC_BITS, 4,
  2505. &mb_type_b_tab[0][1], 2, 1,
  2506. &mb_type_b_tab[0][0], 2, 1, 16);
  2507. INIT_VLC_STATIC(&h263_mbtype_b_vlc, H263_MBTYPE_B_VLC_BITS, 15,
  2508. &h263_mbtype_b_tab[0][1], 2, 1,
  2509. &h263_mbtype_b_tab[0][0], 2, 1, 80);
  2510. INIT_VLC_STATIC(&cbpc_b_vlc, CBPC_B_VLC_BITS, 4,
  2511. &cbpc_b_tab[0][1], 2, 1,
  2512. &cbpc_b_tab[0][0], 2, 1, 8);
  2513. }
  2514. }
  2515. /**
  2516. * Get the GOB height based on picture height.
  2517. */
  2518. int ff_h263_get_gob_height(MpegEncContext *s){
  2519. if (s->height <= 400)
  2520. return 1;
  2521. else if (s->height <= 800)
  2522. return 2;
  2523. else
  2524. return 4;
  2525. }
  2526. int ff_h263_decode_mba(MpegEncContext *s)
  2527. {
  2528. int i, mb_pos;
  2529. for(i=0; i<6; i++){
  2530. if(s->mb_num-1 <= ff_mba_max[i]) break;
  2531. }
  2532. mb_pos= get_bits(&s->gb, ff_mba_length[i]);
  2533. s->mb_x= mb_pos % s->mb_width;
  2534. s->mb_y= mb_pos / s->mb_width;
  2535. return mb_pos;
  2536. }
  2537. void ff_h263_encode_mba(MpegEncContext *s)
  2538. {
  2539. int i, mb_pos;
  2540. for(i=0; i<6; i++){
  2541. if(s->mb_num-1 <= ff_mba_max[i]) break;
  2542. }
  2543. mb_pos= s->mb_x + s->mb_width*s->mb_y;
  2544. put_bits(&s->pb, ff_mba_length[i], mb_pos);
  2545. }
  2546. /**
  2547. * decodes the group of blocks header or slice header.
  2548. * @return <0 if an error occurred
  2549. */
  2550. static int h263_decode_gob_header(MpegEncContext *s)
  2551. {
  2552. unsigned int val, gfid, gob_number;
  2553. int left;
  2554. /* Check for GOB Start Code */
  2555. val = show_bits(&s->gb, 16);
  2556. if(val)
  2557. return -1;
  2558. /* We have a GBSC probably with GSTUFF */
  2559. skip_bits(&s->gb, 16); /* Drop the zeros */
  2560. left= get_bits_left(&s->gb);
  2561. //MN: we must check the bits left or we might end in a infinite loop (or segfault)
  2562. for(;left>13; left--){
  2563. if(get_bits1(&s->gb)) break; /* Seek the '1' bit */
  2564. }
  2565. if(left<=13)
  2566. return -1;
  2567. if(s->h263_slice_structured){
  2568. if(get_bits1(&s->gb)==0)
  2569. return -1;
  2570. ff_h263_decode_mba(s);
  2571. if(s->mb_num > 1583)
  2572. if(get_bits1(&s->gb)==0)
  2573. return -1;
  2574. s->qscale = get_bits(&s->gb, 5); /* SQUANT */
  2575. if(get_bits1(&s->gb)==0)
  2576. return -1;
  2577. gfid = get_bits(&s->gb, 2); /* GFID */
  2578. }else{
  2579. gob_number = get_bits(&s->gb, 5); /* GN */
  2580. s->mb_x= 0;
  2581. s->mb_y= s->gob_index* gob_number;
  2582. gfid = get_bits(&s->gb, 2); /* GFID */
  2583. s->qscale = get_bits(&s->gb, 5); /* GQUANT */
  2584. }
  2585. if(s->mb_y >= s->mb_height)
  2586. return -1;
  2587. if(s->qscale==0)
  2588. return -1;
  2589. return 0;
  2590. }
  2591. static inline void memsetw(short *tab, int val, int n)
  2592. {
  2593. int i;
  2594. for(i=0;i<n;i++)
  2595. tab[i] = val;
  2596. }
  2597. #if CONFIG_ENCODERS
  2598. void ff_mpeg4_init_partitions(MpegEncContext *s)
  2599. {
  2600. uint8_t *start= put_bits_ptr(&s->pb);
  2601. uint8_t *end= s->pb.buf_end;
  2602. int size= end - start;
  2603. int pb_size = (((intptr_t)start + size/3)&(~3)) - (intptr_t)start;
  2604. int tex_size= (size - 2*pb_size)&(~3);
  2605. set_put_bits_buffer_size(&s->pb, pb_size);
  2606. init_put_bits(&s->tex_pb, start + pb_size , tex_size);
  2607. init_put_bits(&s->pb2 , start + pb_size + tex_size, pb_size);
  2608. }
  2609. void ff_mpeg4_merge_partitions(MpegEncContext *s)
  2610. {
  2611. const int pb2_len = put_bits_count(&s->pb2 );
  2612. const int tex_pb_len= put_bits_count(&s->tex_pb);
  2613. const int bits= put_bits_count(&s->pb);
  2614. if(s->pict_type==FF_I_TYPE){
  2615. put_bits(&s->pb, 19, DC_MARKER);
  2616. s->misc_bits+=19 + pb2_len + bits - s->last_bits;
  2617. s->i_tex_bits+= tex_pb_len;
  2618. }else{
  2619. put_bits(&s->pb, 17, MOTION_MARKER);
  2620. s->misc_bits+=17 + pb2_len;
  2621. s->mv_bits+= bits - s->last_bits;
  2622. s->p_tex_bits+= tex_pb_len;
  2623. }
  2624. flush_put_bits(&s->pb2);
  2625. flush_put_bits(&s->tex_pb);
  2626. set_put_bits_buffer_size(&s->pb, s->pb2.buf_end - s->pb.buf);
  2627. ff_copy_bits(&s->pb, s->pb2.buf , pb2_len);
  2628. ff_copy_bits(&s->pb, s->tex_pb.buf, tex_pb_len);
  2629. s->last_bits= put_bits_count(&s->pb);
  2630. }
  2631. #endif //CONFIG_ENCODERS
  2632. int ff_mpeg4_get_video_packet_prefix_length(MpegEncContext *s){
  2633. switch(s->pict_type){
  2634. case FF_I_TYPE:
  2635. return 16;
  2636. case FF_P_TYPE:
  2637. case FF_S_TYPE:
  2638. return s->f_code+15;
  2639. case FF_B_TYPE:
  2640. return FFMAX3(s->f_code, s->b_code, 2) + 15;
  2641. default:
  2642. return -1;
  2643. }
  2644. }
  2645. #if CONFIG_ENCODERS
  2646. void ff_mpeg4_encode_video_packet_header(MpegEncContext *s)
  2647. {
  2648. int mb_num_bits= av_log2(s->mb_num - 1) + 1;
  2649. put_bits(&s->pb, ff_mpeg4_get_video_packet_prefix_length(s), 0);
  2650. put_bits(&s->pb, 1, 1);
  2651. put_bits(&s->pb, mb_num_bits, s->mb_x + s->mb_y*s->mb_width);
  2652. put_bits(&s->pb, s->quant_precision, s->qscale);
  2653. put_bits(&s->pb, 1, 0); /* no HEC */
  2654. }
  2655. #endif //CONFIG_ENCODERS
  2656. /**
  2657. * check if the next stuff is a resync marker or the end.
  2658. * @return 0 if not
  2659. */
  2660. static inline int mpeg4_is_resync(MpegEncContext *s){
  2661. int bits_count= get_bits_count(&s->gb);
  2662. int v= show_bits(&s->gb, 16);
  2663. if(s->workaround_bugs&FF_BUG_NO_PADDING){
  2664. return 0;
  2665. }
  2666. while(v<=0xFF){
  2667. if(s->pict_type==FF_B_TYPE || (v>>(8-s->pict_type)!=1) || s->partitioned_frame)
  2668. break;
  2669. skip_bits(&s->gb, 8+s->pict_type);
  2670. bits_count+= 8+s->pict_type;
  2671. v= show_bits(&s->gb, 16);
  2672. }
  2673. if(bits_count + 8 >= s->gb.size_in_bits){
  2674. v>>=8;
  2675. v|= 0x7F >> (7-(bits_count&7));
  2676. if(v==0x7F)
  2677. return 1;
  2678. }else{
  2679. if(v == ff_mpeg4_resync_prefix[bits_count&7]){
  2680. int len;
  2681. GetBitContext gb= s->gb;
  2682. skip_bits(&s->gb, 1);
  2683. align_get_bits(&s->gb);
  2684. for(len=0; len<32; len++){
  2685. if(get_bits1(&s->gb)) break;
  2686. }
  2687. s->gb= gb;
  2688. if(len>=ff_mpeg4_get_video_packet_prefix_length(s))
  2689. return 1;
  2690. }
  2691. }
  2692. return 0;
  2693. }
  2694. static void mpeg4_decode_sprite_trajectory(MpegEncContext * s, GetBitContext *gb)
  2695. {
  2696. int i;
  2697. int a= 2<<s->sprite_warping_accuracy;
  2698. int rho= 3-s->sprite_warping_accuracy;
  2699. int r=16/a;
  2700. const int vop_ref[4][2]= {{0,0}, {s->width,0}, {0, s->height}, {s->width, s->height}}; // only true for rectangle shapes
  2701. int d[4][2]={{0,0}, {0,0}, {0,0}, {0,0}};
  2702. int sprite_ref[4][2];
  2703. int virtual_ref[2][2];
  2704. int w2, h2, w3, h3;
  2705. int alpha=0, beta=0;
  2706. int w= s->width;
  2707. int h= s->height;
  2708. int min_ab;
  2709. for(i=0; i<s->num_sprite_warping_points; i++){
  2710. int length;
  2711. int x=0, y=0;
  2712. length= get_vlc2(gb, sprite_trajectory.table, SPRITE_TRAJ_VLC_BITS, 3);
  2713. if(length){
  2714. x= get_xbits(gb, length);
  2715. }
  2716. if(!(s->divx_version==500 && s->divx_build==413)) skip_bits1(gb); /* marker bit */
  2717. length= get_vlc2(gb, sprite_trajectory.table, SPRITE_TRAJ_VLC_BITS, 3);
  2718. if(length){
  2719. y=get_xbits(gb, length);
  2720. }
  2721. skip_bits1(gb); /* marker bit */
  2722. s->sprite_traj[i][0]= d[i][0]= x;
  2723. s->sprite_traj[i][1]= d[i][1]= y;
  2724. }
  2725. for(; i<4; i++)
  2726. s->sprite_traj[i][0]= s->sprite_traj[i][1]= 0;
  2727. while((1<<alpha)<w) alpha++;
  2728. while((1<<beta )<h) beta++; // there seems to be a typo in the mpeg4 std for the definition of w' and h'
  2729. w2= 1<<alpha;
  2730. h2= 1<<beta;
  2731. // Note, the 4th point isn't used for GMC
  2732. if(s->divx_version==500 && s->divx_build==413){
  2733. sprite_ref[0][0]= a*vop_ref[0][0] + d[0][0];
  2734. sprite_ref[0][1]= a*vop_ref[0][1] + d[0][1];
  2735. sprite_ref[1][0]= a*vop_ref[1][0] + d[0][0] + d[1][0];
  2736. sprite_ref[1][1]= a*vop_ref[1][1] + d[0][1] + d[1][1];
  2737. sprite_ref[2][0]= a*vop_ref[2][0] + d[0][0] + d[2][0];
  2738. sprite_ref[2][1]= a*vop_ref[2][1] + d[0][1] + d[2][1];
  2739. } else {
  2740. sprite_ref[0][0]= (a>>1)*(2*vop_ref[0][0] + d[0][0]);
  2741. sprite_ref[0][1]= (a>>1)*(2*vop_ref[0][1] + d[0][1]);
  2742. sprite_ref[1][0]= (a>>1)*(2*vop_ref[1][0] + d[0][0] + d[1][0]);
  2743. sprite_ref[1][1]= (a>>1)*(2*vop_ref[1][1] + d[0][1] + d[1][1]);
  2744. sprite_ref[2][0]= (a>>1)*(2*vop_ref[2][0] + d[0][0] + d[2][0]);
  2745. sprite_ref[2][1]= (a>>1)*(2*vop_ref[2][1] + d[0][1] + d[2][1]);
  2746. }
  2747. /* sprite_ref[3][0]= (a>>1)*(2*vop_ref[3][0] + d[0][0] + d[1][0] + d[2][0] + d[3][0]);
  2748. sprite_ref[3][1]= (a>>1)*(2*vop_ref[3][1] + d[0][1] + d[1][1] + d[2][1] + d[3][1]); */
  2749. // this is mostly identical to the mpeg4 std (and is totally unreadable because of that ...)
  2750. // perhaps it should be reordered to be more readable ...
  2751. // the idea behind this virtual_ref mess is to be able to use shifts later per pixel instead of divides
  2752. // so the distance between points is converted from w&h based to w2&h2 based which are of the 2^x form
  2753. virtual_ref[0][0]= 16*(vop_ref[0][0] + w2)
  2754. + ROUNDED_DIV(((w - w2)*(r*sprite_ref[0][0] - 16*vop_ref[0][0]) + w2*(r*sprite_ref[1][0] - 16*vop_ref[1][0])),w);
  2755. virtual_ref[0][1]= 16*vop_ref[0][1]
  2756. + ROUNDED_DIV(((w - w2)*(r*sprite_ref[0][1] - 16*vop_ref[0][1]) + w2*(r*sprite_ref[1][1] - 16*vop_ref[1][1])),w);
  2757. virtual_ref[1][0]= 16*vop_ref[0][0]
  2758. + ROUNDED_DIV(((h - h2)*(r*sprite_ref[0][0] - 16*vop_ref[0][0]) + h2*(r*sprite_ref[2][0] - 16*vop_ref[2][0])),h);
  2759. virtual_ref[1][1]= 16*(vop_ref[0][1] + h2)
  2760. + ROUNDED_DIV(((h - h2)*(r*sprite_ref[0][1] - 16*vop_ref[0][1]) + h2*(r*sprite_ref[2][1] - 16*vop_ref[2][1])),h);
  2761. switch(s->num_sprite_warping_points)
  2762. {
  2763. case 0:
  2764. s->sprite_offset[0][0]= 0;
  2765. s->sprite_offset[0][1]= 0;
  2766. s->sprite_offset[1][0]= 0;
  2767. s->sprite_offset[1][1]= 0;
  2768. s->sprite_delta[0][0]= a;
  2769. s->sprite_delta[0][1]= 0;
  2770. s->sprite_delta[1][0]= 0;
  2771. s->sprite_delta[1][1]= a;
  2772. s->sprite_shift[0]= 0;
  2773. s->sprite_shift[1]= 0;
  2774. break;
  2775. case 1: //GMC only
  2776. s->sprite_offset[0][0]= sprite_ref[0][0] - a*vop_ref[0][0];
  2777. s->sprite_offset[0][1]= sprite_ref[0][1] - a*vop_ref[0][1];
  2778. s->sprite_offset[1][0]= ((sprite_ref[0][0]>>1)|(sprite_ref[0][0]&1)) - a*(vop_ref[0][0]/2);
  2779. s->sprite_offset[1][1]= ((sprite_ref[0][1]>>1)|(sprite_ref[0][1]&1)) - a*(vop_ref[0][1]/2);
  2780. s->sprite_delta[0][0]= a;
  2781. s->sprite_delta[0][1]= 0;
  2782. s->sprite_delta[1][0]= 0;
  2783. s->sprite_delta[1][1]= a;
  2784. s->sprite_shift[0]= 0;
  2785. s->sprite_shift[1]= 0;
  2786. break;
  2787. case 2:
  2788. s->sprite_offset[0][0]= (sprite_ref[0][0]<<(alpha+rho))
  2789. + (-r*sprite_ref[0][0] + virtual_ref[0][0])*(-vop_ref[0][0])
  2790. + ( r*sprite_ref[0][1] - virtual_ref[0][1])*(-vop_ref[0][1])
  2791. + (1<<(alpha+rho-1));
  2792. s->sprite_offset[0][1]= (sprite_ref[0][1]<<(alpha+rho))
  2793. + (-r*sprite_ref[0][1] + virtual_ref[0][1])*(-vop_ref[0][0])
  2794. + (-r*sprite_ref[0][0] + virtual_ref[0][0])*(-vop_ref[0][1])
  2795. + (1<<(alpha+rho-1));
  2796. s->sprite_offset[1][0]= ( (-r*sprite_ref[0][0] + virtual_ref[0][0])*(-2*vop_ref[0][0] + 1)
  2797. +( r*sprite_ref[0][1] - virtual_ref[0][1])*(-2*vop_ref[0][1] + 1)
  2798. +2*w2*r*sprite_ref[0][0]
  2799. - 16*w2
  2800. + (1<<(alpha+rho+1)));
  2801. s->sprite_offset[1][1]= ( (-r*sprite_ref[0][1] + virtual_ref[0][1])*(-2*vop_ref[0][0] + 1)
  2802. +(-r*sprite_ref[0][0] + virtual_ref[0][0])*(-2*vop_ref[0][1] + 1)
  2803. +2*w2*r*sprite_ref[0][1]
  2804. - 16*w2
  2805. + (1<<(alpha+rho+1)));
  2806. s->sprite_delta[0][0]= (-r*sprite_ref[0][0] + virtual_ref[0][0]);
  2807. s->sprite_delta[0][1]= (+r*sprite_ref[0][1] - virtual_ref[0][1]);
  2808. s->sprite_delta[1][0]= (-r*sprite_ref[0][1] + virtual_ref[0][1]);
  2809. s->sprite_delta[1][1]= (-r*sprite_ref[0][0] + virtual_ref[0][0]);
  2810. s->sprite_shift[0]= alpha+rho;
  2811. s->sprite_shift[1]= alpha+rho+2;
  2812. break;
  2813. case 3:
  2814. min_ab= FFMIN(alpha, beta);
  2815. w3= w2>>min_ab;
  2816. h3= h2>>min_ab;
  2817. s->sprite_offset[0][0]= (sprite_ref[0][0]<<(alpha+beta+rho-min_ab))
  2818. + (-r*sprite_ref[0][0] + virtual_ref[0][0])*h3*(-vop_ref[0][0])
  2819. + (-r*sprite_ref[0][0] + virtual_ref[1][0])*w3*(-vop_ref[0][1])
  2820. + (1<<(alpha+beta+rho-min_ab-1));
  2821. s->sprite_offset[0][1]= (sprite_ref[0][1]<<(alpha+beta+rho-min_ab))
  2822. + (-r*sprite_ref[0][1] + virtual_ref[0][1])*h3*(-vop_ref[0][0])
  2823. + (-r*sprite_ref[0][1] + virtual_ref[1][1])*w3*(-vop_ref[0][1])
  2824. + (1<<(alpha+beta+rho-min_ab-1));
  2825. s->sprite_offset[1][0]= (-r*sprite_ref[0][0] + virtual_ref[0][0])*h3*(-2*vop_ref[0][0] + 1)
  2826. + (-r*sprite_ref[0][0] + virtual_ref[1][0])*w3*(-2*vop_ref[0][1] + 1)
  2827. + 2*w2*h3*r*sprite_ref[0][0]
  2828. - 16*w2*h3
  2829. + (1<<(alpha+beta+rho-min_ab+1));
  2830. s->sprite_offset[1][1]= (-r*sprite_ref[0][1] + virtual_ref[0][1])*h3*(-2*vop_ref[0][0] + 1)
  2831. + (-r*sprite_ref[0][1] + virtual_ref[1][1])*w3*(-2*vop_ref[0][1] + 1)
  2832. + 2*w2*h3*r*sprite_ref[0][1]
  2833. - 16*w2*h3
  2834. + (1<<(alpha+beta+rho-min_ab+1));
  2835. s->sprite_delta[0][0]= (-r*sprite_ref[0][0] + virtual_ref[0][0])*h3;
  2836. s->sprite_delta[0][1]= (-r*sprite_ref[0][0] + virtual_ref[1][0])*w3;
  2837. s->sprite_delta[1][0]= (-r*sprite_ref[0][1] + virtual_ref[0][1])*h3;
  2838. s->sprite_delta[1][1]= (-r*sprite_ref[0][1] + virtual_ref[1][1])*w3;
  2839. s->sprite_shift[0]= alpha + beta + rho - min_ab;
  2840. s->sprite_shift[1]= alpha + beta + rho - min_ab + 2;
  2841. break;
  2842. }
  2843. /* try to simplify the situation */
  2844. if( s->sprite_delta[0][0] == a<<s->sprite_shift[0]
  2845. && s->sprite_delta[0][1] == 0
  2846. && s->sprite_delta[1][0] == 0
  2847. && s->sprite_delta[1][1] == a<<s->sprite_shift[0])
  2848. {
  2849. s->sprite_offset[0][0]>>=s->sprite_shift[0];
  2850. s->sprite_offset[0][1]>>=s->sprite_shift[0];
  2851. s->sprite_offset[1][0]>>=s->sprite_shift[1];
  2852. s->sprite_offset[1][1]>>=s->sprite_shift[1];
  2853. s->sprite_delta[0][0]= a;
  2854. s->sprite_delta[0][1]= 0;
  2855. s->sprite_delta[1][0]= 0;
  2856. s->sprite_delta[1][1]= a;
  2857. s->sprite_shift[0]= 0;
  2858. s->sprite_shift[1]= 0;
  2859. s->real_sprite_warping_points=1;
  2860. }
  2861. else{
  2862. int shift_y= 16 - s->sprite_shift[0];
  2863. int shift_c= 16 - s->sprite_shift[1];
  2864. for(i=0; i<2; i++){
  2865. s->sprite_offset[0][i]<<= shift_y;
  2866. s->sprite_offset[1][i]<<= shift_c;
  2867. s->sprite_delta[0][i]<<= shift_y;
  2868. s->sprite_delta[1][i]<<= shift_y;
  2869. s->sprite_shift[i]= 16;
  2870. }
  2871. s->real_sprite_warping_points= s->num_sprite_warping_points;
  2872. }
  2873. }
  2874. /**
  2875. * decodes the next video packet.
  2876. * @return <0 if something went wrong
  2877. */
  2878. static int mpeg4_decode_video_packet_header(MpegEncContext *s)
  2879. {
  2880. int mb_num_bits= av_log2(s->mb_num - 1) + 1;
  2881. int header_extension=0, mb_num, len;
  2882. /* is there enough space left for a video packet + header */
  2883. if( get_bits_count(&s->gb) > s->gb.size_in_bits-20) return -1;
  2884. for(len=0; len<32; len++){
  2885. if(get_bits1(&s->gb)) break;
  2886. }
  2887. if(len!=ff_mpeg4_get_video_packet_prefix_length(s)){
  2888. av_log(s->avctx, AV_LOG_ERROR, "marker does not match f_code\n");
  2889. return -1;
  2890. }
  2891. if(s->shape != RECT_SHAPE){
  2892. header_extension= get_bits1(&s->gb);
  2893. //FIXME more stuff here
  2894. }
  2895. mb_num= get_bits(&s->gb, mb_num_bits);
  2896. if(mb_num>=s->mb_num){
  2897. av_log(s->avctx, AV_LOG_ERROR, "illegal mb_num in video packet (%d %d) \n", mb_num, s->mb_num);
  2898. return -1;
  2899. }
  2900. if(s->pict_type == FF_B_TYPE){
  2901. while(s->next_picture.mbskip_table[ s->mb_index2xy[ mb_num ] ]) mb_num++;
  2902. if(mb_num >= s->mb_num) return -1; // slice contains just skipped MBs which where already decoded
  2903. }
  2904. s->mb_x= mb_num % s->mb_width;
  2905. s->mb_y= mb_num / s->mb_width;
  2906. if(s->shape != BIN_ONLY_SHAPE){
  2907. int qscale= get_bits(&s->gb, s->quant_precision);
  2908. if(qscale)
  2909. s->chroma_qscale=s->qscale= qscale;
  2910. }
  2911. if(s->shape == RECT_SHAPE){
  2912. header_extension= get_bits1(&s->gb);
  2913. }
  2914. if(header_extension){
  2915. int time_increment;
  2916. int time_incr=0;
  2917. while (get_bits1(&s->gb) != 0)
  2918. time_incr++;
  2919. check_marker(&s->gb, "before time_increment in video packed header");
  2920. time_increment= get_bits(&s->gb, s->time_increment_bits);
  2921. check_marker(&s->gb, "before vop_coding_type in video packed header");
  2922. skip_bits(&s->gb, 2); /* vop coding type */
  2923. //FIXME not rect stuff here
  2924. if(s->shape != BIN_ONLY_SHAPE){
  2925. skip_bits(&s->gb, 3); /* intra dc vlc threshold */
  2926. //FIXME don't just ignore everything
  2927. if(s->pict_type == FF_S_TYPE && s->vol_sprite_usage==GMC_SPRITE){
  2928. mpeg4_decode_sprite_trajectory(s, &s->gb);
  2929. av_log(s->avctx, AV_LOG_ERROR, "untested\n");
  2930. }
  2931. //FIXME reduced res stuff here
  2932. if (s->pict_type != FF_I_TYPE) {
  2933. int f_code = get_bits(&s->gb, 3); /* fcode_for */
  2934. if(f_code==0){
  2935. av_log(s->avctx, AV_LOG_ERROR, "Error, video packet header damaged (f_code=0)\n");
  2936. }
  2937. }
  2938. if (s->pict_type == FF_B_TYPE) {
  2939. int b_code = get_bits(&s->gb, 3);
  2940. if(b_code==0){
  2941. av_log(s->avctx, AV_LOG_ERROR, "Error, video packet header damaged (b_code=0)\n");
  2942. }
  2943. }
  2944. }
  2945. }
  2946. //FIXME new-pred stuff
  2947. return 0;
  2948. }
  2949. void ff_mpeg4_clean_buffers(MpegEncContext *s)
  2950. {
  2951. int c_wrap, c_xy, l_wrap, l_xy;
  2952. l_wrap= s->b8_stride;
  2953. l_xy= (2*s->mb_y-1)*l_wrap + s->mb_x*2 - 1;
  2954. c_wrap= s->mb_stride;
  2955. c_xy= (s->mb_y-1)*c_wrap + s->mb_x - 1;
  2956. #if 0
  2957. /* clean DC */
  2958. memsetw(s->dc_val[0] + l_xy, 1024, l_wrap*2+1);
  2959. memsetw(s->dc_val[1] + c_xy, 1024, c_wrap+1);
  2960. memsetw(s->dc_val[2] + c_xy, 1024, c_wrap+1);
  2961. #endif
  2962. /* clean AC */
  2963. memset(s->ac_val[0] + l_xy, 0, (l_wrap*2+1)*16*sizeof(int16_t));
  2964. memset(s->ac_val[1] + c_xy, 0, (c_wrap +1)*16*sizeof(int16_t));
  2965. memset(s->ac_val[2] + c_xy, 0, (c_wrap +1)*16*sizeof(int16_t));
  2966. /* clean MV */
  2967. // we can't clear the MVs as they might be needed by a b frame
  2968. // memset(s->motion_val + l_xy, 0, (l_wrap*2+1)*2*sizeof(int16_t));
  2969. // memset(s->motion_val, 0, 2*sizeof(int16_t)*(2 + s->mb_width*2)*(2 + s->mb_height*2));
  2970. s->last_mv[0][0][0]=
  2971. s->last_mv[0][0][1]=
  2972. s->last_mv[1][0][0]=
  2973. s->last_mv[1][0][1]= 0;
  2974. }
  2975. /**
  2976. * finds the next resync_marker
  2977. * @param p pointer to buffer to scan
  2978. * @param end pointer to the end of the buffer
  2979. * @return pointer to the next resync_marker, or end if none was found
  2980. */
  2981. const uint8_t *ff_h263_find_resync_marker(const uint8_t *restrict p, const uint8_t * restrict end)
  2982. {
  2983. assert(p < end);
  2984. end-=2;
  2985. p++;
  2986. for(;p<end; p+=2){
  2987. if(!*p){
  2988. if (!p[-1] && p[1]) return p - 1;
  2989. else if(!p[ 1] && p[2]) return p;
  2990. }
  2991. }
  2992. return end+2;
  2993. }
  2994. /**
  2995. * decodes the group of blocks / video packet header.
  2996. * @return bit position of the resync_marker, or <0 if none was found
  2997. */
  2998. int ff_h263_resync(MpegEncContext *s){
  2999. int left, pos, ret;
  3000. if(s->codec_id==CODEC_ID_MPEG4){
  3001. skip_bits1(&s->gb);
  3002. align_get_bits(&s->gb);
  3003. }
  3004. if(show_bits(&s->gb, 16)==0){
  3005. pos= get_bits_count(&s->gb);
  3006. if(s->codec_id==CODEC_ID_MPEG4)
  3007. ret= mpeg4_decode_video_packet_header(s);
  3008. else
  3009. ret= h263_decode_gob_header(s);
  3010. if(ret>=0)
  3011. return pos;
  3012. }
  3013. //OK, it's not where it is supposed to be ...
  3014. s->gb= s->last_resync_gb;
  3015. align_get_bits(&s->gb);
  3016. left= get_bits_left(&s->gb);
  3017. for(;left>16+1+5+5; left-=8){
  3018. if(show_bits(&s->gb, 16)==0){
  3019. GetBitContext bak= s->gb;
  3020. pos= get_bits_count(&s->gb);
  3021. if(s->codec_id==CODEC_ID_MPEG4)
  3022. ret= mpeg4_decode_video_packet_header(s);
  3023. else
  3024. ret= h263_decode_gob_header(s);
  3025. if(ret>=0)
  3026. return pos;
  3027. s->gb= bak;
  3028. }
  3029. skip_bits(&s->gb, 8);
  3030. }
  3031. return -1;
  3032. }
  3033. static int h263_decode_motion(MpegEncContext * s, int pred, int f_code)
  3034. {
  3035. int code, val, sign, shift, l;
  3036. code = get_vlc2(&s->gb, mv_vlc.table, MV_VLC_BITS, 2);
  3037. if (code == 0)
  3038. return pred;
  3039. if (code < 0)
  3040. return 0xffff;
  3041. sign = get_bits1(&s->gb);
  3042. shift = f_code - 1;
  3043. val = code;
  3044. if (shift) {
  3045. val = (val - 1) << shift;
  3046. val |= get_bits(&s->gb, shift);
  3047. val++;
  3048. }
  3049. if (sign)
  3050. val = -val;
  3051. val += pred;
  3052. /* modulo decoding */
  3053. if (!s->h263_long_vectors) {
  3054. l = INT_BIT - 5 - f_code;
  3055. val = (val<<l)>>l;
  3056. } else {
  3057. /* horrible h263 long vector mode */
  3058. if (pred < -31 && val < -63)
  3059. val += 64;
  3060. if (pred > 32 && val > 63)
  3061. val -= 64;
  3062. }
  3063. return val;
  3064. }
  3065. /**
  3066. * gets the average motion vector for a GMC MB.
  3067. * @param n either 0 for the x component or 1 for y
  3068. * @returns the average MV for a GMC MB
  3069. */
  3070. static inline int get_amv(MpegEncContext *s, int n){
  3071. int x, y, mb_v, sum, dx, dy, shift;
  3072. int len = 1 << (s->f_code + 4);
  3073. const int a= s->sprite_warping_accuracy;
  3074. if(s->workaround_bugs & FF_BUG_AMV)
  3075. len >>= s->quarter_sample;
  3076. if(s->real_sprite_warping_points==1){
  3077. if(s->divx_version==500 && s->divx_build==413)
  3078. sum= s->sprite_offset[0][n] / (1<<(a - s->quarter_sample));
  3079. else
  3080. sum= RSHIFT(s->sprite_offset[0][n]<<s->quarter_sample, a);
  3081. }else{
  3082. dx= s->sprite_delta[n][0];
  3083. dy= s->sprite_delta[n][1];
  3084. shift= s->sprite_shift[0];
  3085. if(n) dy -= 1<<(shift + a + 1);
  3086. else dx -= 1<<(shift + a + 1);
  3087. mb_v= s->sprite_offset[0][n] + dx*s->mb_x*16 + dy*s->mb_y*16;
  3088. sum=0;
  3089. for(y=0; y<16; y++){
  3090. int v;
  3091. v= mb_v + dy*y;
  3092. //XXX FIXME optimize
  3093. for(x=0; x<16; x++){
  3094. sum+= v>>shift;
  3095. v+= dx;
  3096. }
  3097. }
  3098. sum= RSHIFT(sum, a+8-s->quarter_sample);
  3099. }
  3100. if (sum < -len) sum= -len;
  3101. else if (sum >= len) sum= len-1;
  3102. return sum;
  3103. }
  3104. /**
  3105. * decodes the dc value.
  3106. * @param n block index (0-3 are luma, 4-5 are chroma)
  3107. * @param dir_ptr the prediction direction will be stored here
  3108. * @return the quantized dc
  3109. */
  3110. static inline int mpeg4_decode_dc(MpegEncContext * s, int n, int *dir_ptr)
  3111. {
  3112. int level, code;
  3113. if (n < 4)
  3114. code = get_vlc2(&s->gb, dc_lum.table, DC_VLC_BITS, 1);
  3115. else
  3116. code = get_vlc2(&s->gb, dc_chrom.table, DC_VLC_BITS, 1);
  3117. if (code < 0 || code > 9 /* && s->nbit<9 */){
  3118. av_log(s->avctx, AV_LOG_ERROR, "illegal dc vlc\n");
  3119. return -1;
  3120. }
  3121. if (code == 0) {
  3122. level = 0;
  3123. } else {
  3124. if(IS_3IV1){
  3125. if(code==1)
  3126. level= 2*get_bits1(&s->gb)-1;
  3127. else{
  3128. if(get_bits1(&s->gb))
  3129. level = get_bits(&s->gb, code-1) + (1<<(code-1));
  3130. else
  3131. level = -get_bits(&s->gb, code-1) - (1<<(code-1));
  3132. }
  3133. }else{
  3134. level = get_xbits(&s->gb, code);
  3135. }
  3136. if (code > 8){
  3137. if(get_bits1(&s->gb)==0){ /* marker */
  3138. if(s->error_recognition>=2){
  3139. av_log(s->avctx, AV_LOG_ERROR, "dc marker bit missing\n");
  3140. return -1;
  3141. }
  3142. }
  3143. }
  3144. }
  3145. return ff_mpeg4_pred_dc(s, n, level, dir_ptr, 0);
  3146. }
  3147. /**
  3148. * decodes first partition.
  3149. * @return number of MBs decoded or <0 if an error occurred
  3150. */
  3151. static int mpeg4_decode_partition_a(MpegEncContext *s){
  3152. int mb_num;
  3153. static const int8_t quant_tab[4] = { -1, -2, 1, 2 };
  3154. /* decode first partition */
  3155. mb_num=0;
  3156. s->first_slice_line=1;
  3157. for(; s->mb_y<s->mb_height; s->mb_y++){
  3158. ff_init_block_index(s);
  3159. for(; s->mb_x<s->mb_width; s->mb_x++){
  3160. const int xy= s->mb_x + s->mb_y*s->mb_stride;
  3161. int cbpc;
  3162. int dir=0;
  3163. mb_num++;
  3164. ff_update_block_index(s);
  3165. if(s->mb_x == s->resync_mb_x && s->mb_y == s->resync_mb_y+1)
  3166. s->first_slice_line=0;
  3167. if(s->pict_type==FF_I_TYPE){
  3168. int i;
  3169. do{
  3170. if(show_bits_long(&s->gb, 19)==DC_MARKER){
  3171. return mb_num-1;
  3172. }
  3173. cbpc = get_vlc2(&s->gb, intra_MCBPC_vlc.table, INTRA_MCBPC_VLC_BITS, 2);
  3174. if (cbpc < 0){
  3175. av_log(s->avctx, AV_LOG_ERROR, "cbpc corrupted at %d %d\n", s->mb_x, s->mb_y);
  3176. return -1;
  3177. }
  3178. }while(cbpc == 8);
  3179. s->cbp_table[xy]= cbpc & 3;
  3180. s->current_picture.mb_type[xy]= MB_TYPE_INTRA;
  3181. s->mb_intra = 1;
  3182. if(cbpc & 4) {
  3183. ff_set_qscale(s, s->qscale + quant_tab[get_bits(&s->gb, 2)]);
  3184. }
  3185. s->current_picture.qscale_table[xy]= s->qscale;
  3186. s->mbintra_table[xy]= 1;
  3187. for(i=0; i<6; i++){
  3188. int dc_pred_dir;
  3189. int dc= mpeg4_decode_dc(s, i, &dc_pred_dir);
  3190. if(dc < 0){
  3191. av_log(s->avctx, AV_LOG_ERROR, "DC corrupted at %d %d\n", s->mb_x, s->mb_y);
  3192. return -1;
  3193. }
  3194. dir<<=1;
  3195. if(dc_pred_dir) dir|=1;
  3196. }
  3197. s->pred_dir_table[xy]= dir;
  3198. }else{ /* P/S_TYPE */
  3199. int mx, my, pred_x, pred_y, bits;
  3200. int16_t * const mot_val= s->current_picture.motion_val[0][s->block_index[0]];
  3201. const int stride= s->b8_stride*2;
  3202. try_again:
  3203. bits= show_bits(&s->gb, 17);
  3204. if(bits==MOTION_MARKER){
  3205. return mb_num-1;
  3206. }
  3207. skip_bits1(&s->gb);
  3208. if(bits&0x10000){
  3209. /* skip mb */
  3210. if(s->pict_type==FF_S_TYPE && s->vol_sprite_usage==GMC_SPRITE){
  3211. s->current_picture.mb_type[xy]= MB_TYPE_SKIP | MB_TYPE_16x16 | MB_TYPE_GMC | MB_TYPE_L0;
  3212. mx= get_amv(s, 0);
  3213. my= get_amv(s, 1);
  3214. }else{
  3215. s->current_picture.mb_type[xy]= MB_TYPE_SKIP | MB_TYPE_16x16 | MB_TYPE_L0;
  3216. mx=my=0;
  3217. }
  3218. mot_val[0 ]= mot_val[2 ]=
  3219. mot_val[0+stride]= mot_val[2+stride]= mx;
  3220. mot_val[1 ]= mot_val[3 ]=
  3221. mot_val[1+stride]= mot_val[3+stride]= my;
  3222. if(s->mbintra_table[xy])
  3223. ff_clean_intra_table_entries(s);
  3224. continue;
  3225. }
  3226. cbpc = get_vlc2(&s->gb, inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2);
  3227. if (cbpc < 0){
  3228. av_log(s->avctx, AV_LOG_ERROR, "cbpc corrupted at %d %d\n", s->mb_x, s->mb_y);
  3229. return -1;
  3230. }
  3231. if(cbpc == 20)
  3232. goto try_again;
  3233. s->cbp_table[xy]= cbpc&(8+3); //8 is dquant
  3234. s->mb_intra = ((cbpc & 4) != 0);
  3235. if(s->mb_intra){
  3236. s->current_picture.mb_type[xy]= MB_TYPE_INTRA;
  3237. s->mbintra_table[xy]= 1;
  3238. mot_val[0 ]= mot_val[2 ]=
  3239. mot_val[0+stride]= mot_val[2+stride]= 0;
  3240. mot_val[1 ]= mot_val[3 ]=
  3241. mot_val[1+stride]= mot_val[3+stride]= 0;
  3242. }else{
  3243. if(s->mbintra_table[xy])
  3244. ff_clean_intra_table_entries(s);
  3245. if(s->pict_type==FF_S_TYPE && s->vol_sprite_usage==GMC_SPRITE && (cbpc & 16) == 0)
  3246. s->mcsel= get_bits1(&s->gb);
  3247. else s->mcsel= 0;
  3248. if ((cbpc & 16) == 0) {
  3249. /* 16x16 motion prediction */
  3250. h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
  3251. if(!s->mcsel){
  3252. mx = h263_decode_motion(s, pred_x, s->f_code);
  3253. if (mx >= 0xffff)
  3254. return -1;
  3255. my = h263_decode_motion(s, pred_y, s->f_code);
  3256. if (my >= 0xffff)
  3257. return -1;
  3258. s->current_picture.mb_type[xy]= MB_TYPE_16x16 | MB_TYPE_L0;
  3259. } else {
  3260. mx = get_amv(s, 0);
  3261. my = get_amv(s, 1);
  3262. s->current_picture.mb_type[xy]= MB_TYPE_16x16 | MB_TYPE_GMC | MB_TYPE_L0;
  3263. }
  3264. mot_val[0 ]= mot_val[2 ] =
  3265. mot_val[0+stride]= mot_val[2+stride]= mx;
  3266. mot_val[1 ]= mot_val[3 ]=
  3267. mot_val[1+stride]= mot_val[3+stride]= my;
  3268. } else {
  3269. int i;
  3270. s->current_picture.mb_type[xy]= MB_TYPE_8x8 | MB_TYPE_L0;
  3271. for(i=0;i<4;i++) {
  3272. int16_t *mot_val= h263_pred_motion(s, i, 0, &pred_x, &pred_y);
  3273. mx = h263_decode_motion(s, pred_x, s->f_code);
  3274. if (mx >= 0xffff)
  3275. return -1;
  3276. my = h263_decode_motion(s, pred_y, s->f_code);
  3277. if (my >= 0xffff)
  3278. return -1;
  3279. mot_val[0] = mx;
  3280. mot_val[1] = my;
  3281. }
  3282. }
  3283. }
  3284. }
  3285. }
  3286. s->mb_x= 0;
  3287. }
  3288. return mb_num;
  3289. }
  3290. /**
  3291. * decode second partition.
  3292. * @return <0 if an error occurred
  3293. */
  3294. static int mpeg4_decode_partition_b(MpegEncContext *s, int mb_count){
  3295. int mb_num=0;
  3296. static const int8_t quant_tab[4] = { -1, -2, 1, 2 };
  3297. s->mb_x= s->resync_mb_x;
  3298. s->first_slice_line=1;
  3299. for(s->mb_y= s->resync_mb_y; mb_num < mb_count; s->mb_y++){
  3300. ff_init_block_index(s);
  3301. for(; mb_num < mb_count && s->mb_x<s->mb_width; s->mb_x++){
  3302. const int xy= s->mb_x + s->mb_y*s->mb_stride;
  3303. mb_num++;
  3304. ff_update_block_index(s);
  3305. if(s->mb_x == s->resync_mb_x && s->mb_y == s->resync_mb_y+1)
  3306. s->first_slice_line=0;
  3307. if(s->pict_type==FF_I_TYPE){
  3308. int ac_pred= get_bits1(&s->gb);
  3309. int cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
  3310. if(cbpy<0){
  3311. av_log(s->avctx, AV_LOG_ERROR, "cbpy corrupted at %d %d\n", s->mb_x, s->mb_y);
  3312. return -1;
  3313. }
  3314. s->cbp_table[xy]|= cbpy<<2;
  3315. s->current_picture.mb_type[xy] |= ac_pred*MB_TYPE_ACPRED;
  3316. }else{ /* P || S_TYPE */
  3317. if(IS_INTRA(s->current_picture.mb_type[xy])){
  3318. int dir=0,i;
  3319. int ac_pred = get_bits1(&s->gb);
  3320. int cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
  3321. if(cbpy<0){
  3322. av_log(s->avctx, AV_LOG_ERROR, "I cbpy corrupted at %d %d\n", s->mb_x, s->mb_y);
  3323. return -1;
  3324. }
  3325. if(s->cbp_table[xy] & 8) {
  3326. ff_set_qscale(s, s->qscale + quant_tab[get_bits(&s->gb, 2)]);
  3327. }
  3328. s->current_picture.qscale_table[xy]= s->qscale;
  3329. for(i=0; i<6; i++){
  3330. int dc_pred_dir;
  3331. int dc= mpeg4_decode_dc(s, i, &dc_pred_dir);
  3332. if(dc < 0){
  3333. av_log(s->avctx, AV_LOG_ERROR, "DC corrupted at %d %d\n", s->mb_x, s->mb_y);
  3334. return -1;
  3335. }
  3336. dir<<=1;
  3337. if(dc_pred_dir) dir|=1;
  3338. }
  3339. s->cbp_table[xy]&= 3; //remove dquant
  3340. s->cbp_table[xy]|= cbpy<<2;
  3341. s->current_picture.mb_type[xy] |= ac_pred*MB_TYPE_ACPRED;
  3342. s->pred_dir_table[xy]= dir;
  3343. }else if(IS_SKIP(s->current_picture.mb_type[xy])){
  3344. s->current_picture.qscale_table[xy]= s->qscale;
  3345. s->cbp_table[xy]= 0;
  3346. }else{
  3347. int cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
  3348. if(cbpy<0){
  3349. av_log(s->avctx, AV_LOG_ERROR, "P cbpy corrupted at %d %d\n", s->mb_x, s->mb_y);
  3350. return -1;
  3351. }
  3352. if(s->cbp_table[xy] & 8) {
  3353. ff_set_qscale(s, s->qscale + quant_tab[get_bits(&s->gb, 2)]);
  3354. }
  3355. s->current_picture.qscale_table[xy]= s->qscale;
  3356. s->cbp_table[xy]&= 3; //remove dquant
  3357. s->cbp_table[xy]|= (cbpy^0xf)<<2;
  3358. }
  3359. }
  3360. }
  3361. if(mb_num >= mb_count) return 0;
  3362. s->mb_x= 0;
  3363. }
  3364. return 0;
  3365. }
  3366. /**
  3367. * decodes the first & second partition
  3368. * @return <0 if error (and sets error type in the error_status_table)
  3369. */
  3370. int ff_mpeg4_decode_partitions(MpegEncContext *s)
  3371. {
  3372. int mb_num;
  3373. const int part_a_error= s->pict_type==FF_I_TYPE ? (DC_ERROR|MV_ERROR) : MV_ERROR;
  3374. const int part_a_end = s->pict_type==FF_I_TYPE ? (DC_END |MV_END) : MV_END;
  3375. mb_num= mpeg4_decode_partition_a(s);
  3376. if(mb_num<0){
  3377. ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, part_a_error);
  3378. return -1;
  3379. }
  3380. if(s->resync_mb_x + s->resync_mb_y*s->mb_width + mb_num > s->mb_num){
  3381. av_log(s->avctx, AV_LOG_ERROR, "slice below monitor ...\n");
  3382. ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, part_a_error);
  3383. return -1;
  3384. }
  3385. s->mb_num_left= mb_num;
  3386. if(s->pict_type==FF_I_TYPE){
  3387. while(show_bits(&s->gb, 9) == 1)
  3388. skip_bits(&s->gb, 9);
  3389. if(get_bits_long(&s->gb, 19)!=DC_MARKER){
  3390. av_log(s->avctx, AV_LOG_ERROR, "marker missing after first I partition at %d %d\n", s->mb_x, s->mb_y);
  3391. return -1;
  3392. }
  3393. }else{
  3394. while(show_bits(&s->gb, 10) == 1)
  3395. skip_bits(&s->gb, 10);
  3396. if(get_bits(&s->gb, 17)!=MOTION_MARKER){
  3397. av_log(s->avctx, AV_LOG_ERROR, "marker missing after first P partition at %d %d\n", s->mb_x, s->mb_y);
  3398. return -1;
  3399. }
  3400. }
  3401. ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, part_a_end);
  3402. if( mpeg4_decode_partition_b(s, mb_num) < 0){
  3403. if(s->pict_type==FF_P_TYPE)
  3404. ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, DC_ERROR);
  3405. return -1;
  3406. }else{
  3407. if(s->pict_type==FF_P_TYPE)
  3408. ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x-1, s->mb_y, DC_END);
  3409. }
  3410. return 0;
  3411. }
  3412. /**
  3413. * decodes a block.
  3414. * @return <0 if an error occurred
  3415. */
  3416. static inline int mpeg4_decode_block(MpegEncContext * s, DCTELEM * block,
  3417. int n, int coded, int intra, int rvlc)
  3418. {
  3419. int level, i, last, run;
  3420. int dc_pred_dir;
  3421. RLTable * rl;
  3422. RL_VLC_ELEM * rl_vlc;
  3423. const uint8_t * scan_table;
  3424. int qmul, qadd;
  3425. //Note intra & rvlc should be optimized away if this is inlined
  3426. if(intra) {
  3427. if(s->use_intra_dc_vlc){
  3428. /* DC coef */
  3429. if(s->partitioned_frame){
  3430. level = s->dc_val[0][ s->block_index[n] ];
  3431. if(n<4) level= FASTDIV((level + (s->y_dc_scale>>1)), s->y_dc_scale);
  3432. else level= FASTDIV((level + (s->c_dc_scale>>1)), s->c_dc_scale);
  3433. dc_pred_dir= (s->pred_dir_table[s->mb_x + s->mb_y*s->mb_stride]<<n)&32;
  3434. }else{
  3435. level = mpeg4_decode_dc(s, n, &dc_pred_dir);
  3436. if (level < 0)
  3437. return -1;
  3438. }
  3439. block[0] = level;
  3440. i = 0;
  3441. }else{
  3442. i = -1;
  3443. ff_mpeg4_pred_dc(s, n, 0, &dc_pred_dir, 0);
  3444. }
  3445. if (!coded)
  3446. goto not_coded;
  3447. if(rvlc){
  3448. rl = &rvlc_rl_intra;
  3449. rl_vlc = rvlc_rl_intra.rl_vlc[0];
  3450. }else{
  3451. rl = &rl_intra;
  3452. rl_vlc = rl_intra.rl_vlc[0];
  3453. }
  3454. if (s->ac_pred) {
  3455. if (dc_pred_dir == 0)
  3456. scan_table = s->intra_v_scantable.permutated; /* left */
  3457. else
  3458. scan_table = s->intra_h_scantable.permutated; /* top */
  3459. } else {
  3460. scan_table = s->intra_scantable.permutated;
  3461. }
  3462. qmul=1;
  3463. qadd=0;
  3464. } else {
  3465. i = -1;
  3466. if (!coded) {
  3467. s->block_last_index[n] = i;
  3468. return 0;
  3469. }
  3470. if(rvlc) rl = &rvlc_rl_inter;
  3471. else rl = &rl_inter;
  3472. scan_table = s->intra_scantable.permutated;
  3473. if(s->mpeg_quant){
  3474. qmul=1;
  3475. qadd=0;
  3476. if(rvlc){
  3477. rl_vlc = rvlc_rl_inter.rl_vlc[0];
  3478. }else{
  3479. rl_vlc = rl_inter.rl_vlc[0];
  3480. }
  3481. }else{
  3482. qmul = s->qscale << 1;
  3483. qadd = (s->qscale - 1) | 1;
  3484. if(rvlc){
  3485. rl_vlc = rvlc_rl_inter.rl_vlc[s->qscale];
  3486. }else{
  3487. rl_vlc = rl_inter.rl_vlc[s->qscale];
  3488. }
  3489. }
  3490. }
  3491. {
  3492. OPEN_READER(re, &s->gb);
  3493. for(;;) {
  3494. UPDATE_CACHE(re, &s->gb);
  3495. GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2, 0);
  3496. if (level==0) {
  3497. /* escape */
  3498. if(rvlc){
  3499. if(SHOW_UBITS(re, &s->gb, 1)==0){
  3500. av_log(s->avctx, AV_LOG_ERROR, "1. marker bit missing in rvlc esc\n");
  3501. return -1;
  3502. }; SKIP_CACHE(re, &s->gb, 1);
  3503. last= SHOW_UBITS(re, &s->gb, 1); SKIP_CACHE(re, &s->gb, 1);
  3504. run= SHOW_UBITS(re, &s->gb, 6); LAST_SKIP_CACHE(re, &s->gb, 6);
  3505. SKIP_COUNTER(re, &s->gb, 1+1+6);
  3506. UPDATE_CACHE(re, &s->gb);
  3507. if(SHOW_UBITS(re, &s->gb, 1)==0){
  3508. av_log(s->avctx, AV_LOG_ERROR, "2. marker bit missing in rvlc esc\n");
  3509. return -1;
  3510. }; SKIP_CACHE(re, &s->gb, 1);
  3511. level= SHOW_UBITS(re, &s->gb, 11); SKIP_CACHE(re, &s->gb, 11);
  3512. if(SHOW_UBITS(re, &s->gb, 5)!=0x10){
  3513. av_log(s->avctx, AV_LOG_ERROR, "reverse esc missing\n");
  3514. return -1;
  3515. }; SKIP_CACHE(re, &s->gb, 5);
  3516. level= level * qmul + qadd;
  3517. level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1); LAST_SKIP_CACHE(re, &s->gb, 1);
  3518. SKIP_COUNTER(re, &s->gb, 1+11+5+1);
  3519. i+= run + 1;
  3520. if(last) i+=192;
  3521. }else{
  3522. int cache;
  3523. cache= GET_CACHE(re, &s->gb);
  3524. if(IS_3IV1)
  3525. cache ^= 0xC0000000;
  3526. if (cache&0x80000000) {
  3527. if (cache&0x40000000) {
  3528. /* third escape */
  3529. SKIP_CACHE(re, &s->gb, 2);
  3530. last= SHOW_UBITS(re, &s->gb, 1); SKIP_CACHE(re, &s->gb, 1);
  3531. run= SHOW_UBITS(re, &s->gb, 6); LAST_SKIP_CACHE(re, &s->gb, 6);
  3532. SKIP_COUNTER(re, &s->gb, 2+1+6);
  3533. UPDATE_CACHE(re, &s->gb);
  3534. if(IS_3IV1){
  3535. level= SHOW_SBITS(re, &s->gb, 12); LAST_SKIP_BITS(re, &s->gb, 12);
  3536. }else{
  3537. if(SHOW_UBITS(re, &s->gb, 1)==0){
  3538. av_log(s->avctx, AV_LOG_ERROR, "1. marker bit missing in 3. esc\n");
  3539. return -1;
  3540. }; SKIP_CACHE(re, &s->gb, 1);
  3541. level= SHOW_SBITS(re, &s->gb, 12); SKIP_CACHE(re, &s->gb, 12);
  3542. if(SHOW_UBITS(re, &s->gb, 1)==0){
  3543. av_log(s->avctx, AV_LOG_ERROR, "2. marker bit missing in 3. esc\n");
  3544. return -1;
  3545. }; LAST_SKIP_CACHE(re, &s->gb, 1);
  3546. SKIP_COUNTER(re, &s->gb, 1+12+1);
  3547. }
  3548. #if 0
  3549. if(s->error_recognition >= FF_ER_COMPLIANT){
  3550. const int abs_level= FFABS(level);
  3551. if(abs_level<=MAX_LEVEL && run<=MAX_RUN){
  3552. const int run1= run - rl->max_run[last][abs_level] - 1;
  3553. if(abs_level <= rl->max_level[last][run]){
  3554. av_log(s->avctx, AV_LOG_ERROR, "illegal 3. esc, vlc encoding possible\n");
  3555. return -1;
  3556. }
  3557. if(s->error_recognition > FF_ER_COMPLIANT){
  3558. if(abs_level <= rl->max_level[last][run]*2){
  3559. av_log(s->avctx, AV_LOG_ERROR, "illegal 3. esc, esc 1 encoding possible\n");
  3560. return -1;
  3561. }
  3562. if(run1 >= 0 && abs_level <= rl->max_level[last][run1]){
  3563. av_log(s->avctx, AV_LOG_ERROR, "illegal 3. esc, esc 2 encoding possible\n");
  3564. return -1;
  3565. }
  3566. }
  3567. }
  3568. }
  3569. #endif
  3570. if (level>0) level= level * qmul + qadd;
  3571. else level= level * qmul - qadd;
  3572. if((unsigned)(level + 2048) > 4095){
  3573. if(s->error_recognition > FF_ER_COMPLIANT){
  3574. if(level > 2560 || level<-2560){
  3575. av_log(s->avctx, AV_LOG_ERROR, "|level| overflow in 3. esc, qp=%d\n", s->qscale);
  3576. return -1;
  3577. }
  3578. }
  3579. level= level<0 ? -2048 : 2047;
  3580. }
  3581. i+= run + 1;
  3582. if(last) i+=192;
  3583. } else {
  3584. /* second escape */
  3585. #if MIN_CACHE_BITS < 20
  3586. LAST_SKIP_BITS(re, &s->gb, 2);
  3587. UPDATE_CACHE(re, &s->gb);
  3588. #else
  3589. SKIP_BITS(re, &s->gb, 2);
  3590. #endif
  3591. GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2, 1);
  3592. i+= run + rl->max_run[run>>7][level/qmul] +1; //FIXME opt indexing
  3593. level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
  3594. LAST_SKIP_BITS(re, &s->gb, 1);
  3595. }
  3596. } else {
  3597. /* first escape */
  3598. #if MIN_CACHE_BITS < 19
  3599. LAST_SKIP_BITS(re, &s->gb, 1);
  3600. UPDATE_CACHE(re, &s->gb);
  3601. #else
  3602. SKIP_BITS(re, &s->gb, 1);
  3603. #endif
  3604. GET_RL_VLC(level, run, re, &s->gb, rl_vlc, TEX_VLC_BITS, 2, 1);
  3605. i+= run;
  3606. level = level + rl->max_level[run>>7][(run-1)&63] * qmul;//FIXME opt indexing
  3607. level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
  3608. LAST_SKIP_BITS(re, &s->gb, 1);
  3609. }
  3610. }
  3611. } else {
  3612. i+= run;
  3613. level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1);
  3614. LAST_SKIP_BITS(re, &s->gb, 1);
  3615. }
  3616. if (i > 62){
  3617. i-= 192;
  3618. if(i&(~63)){
  3619. av_log(s->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
  3620. return -1;
  3621. }
  3622. block[scan_table[i]] = level;
  3623. break;
  3624. }
  3625. block[scan_table[i]] = level;
  3626. }
  3627. CLOSE_READER(re, &s->gb);
  3628. }
  3629. not_coded:
  3630. if (intra) {
  3631. if(!s->use_intra_dc_vlc){
  3632. block[0] = ff_mpeg4_pred_dc(s, n, block[0], &dc_pred_dir, 0);
  3633. i -= i>>31; //if(i == -1) i=0;
  3634. }
  3635. mpeg4_pred_ac(s, block, n, dc_pred_dir);
  3636. if (s->ac_pred) {
  3637. i = 63; /* XXX: not optimal */
  3638. }
  3639. }
  3640. s->block_last_index[n] = i;
  3641. return 0;
  3642. }
  3643. /**
  3644. * decode partition C of one MB.
  3645. * @return <0 if an error occurred
  3646. */
  3647. static int mpeg4_decode_partitioned_mb(MpegEncContext *s, DCTELEM block[6][64])
  3648. {
  3649. int cbp, mb_type;
  3650. const int xy= s->mb_x + s->mb_y*s->mb_stride;
  3651. mb_type= s->current_picture.mb_type[xy];
  3652. cbp = s->cbp_table[xy];
  3653. s->use_intra_dc_vlc= s->qscale < s->intra_dc_threshold;
  3654. if(s->current_picture.qscale_table[xy] != s->qscale){
  3655. ff_set_qscale(s, s->current_picture.qscale_table[xy] );
  3656. }
  3657. if (s->pict_type == FF_P_TYPE || s->pict_type==FF_S_TYPE) {
  3658. int i;
  3659. for(i=0; i<4; i++){
  3660. s->mv[0][i][0] = s->current_picture.motion_val[0][ s->block_index[i] ][0];
  3661. s->mv[0][i][1] = s->current_picture.motion_val[0][ s->block_index[i] ][1];
  3662. }
  3663. s->mb_intra = IS_INTRA(mb_type);
  3664. if (IS_SKIP(mb_type)) {
  3665. /* skip mb */
  3666. for(i=0;i<6;i++)
  3667. s->block_last_index[i] = -1;
  3668. s->mv_dir = MV_DIR_FORWARD;
  3669. s->mv_type = MV_TYPE_16X16;
  3670. if(s->pict_type==FF_S_TYPE && s->vol_sprite_usage==GMC_SPRITE){
  3671. s->mcsel=1;
  3672. s->mb_skipped = 0;
  3673. }else{
  3674. s->mcsel=0;
  3675. s->mb_skipped = 1;
  3676. }
  3677. }else if(s->mb_intra){
  3678. s->ac_pred = IS_ACPRED(s->current_picture.mb_type[xy]);
  3679. }else if(!s->mb_intra){
  3680. // s->mcsel= 0; //FIXME do we need to init that
  3681. s->mv_dir = MV_DIR_FORWARD;
  3682. if (IS_8X8(mb_type)) {
  3683. s->mv_type = MV_TYPE_8X8;
  3684. } else {
  3685. s->mv_type = MV_TYPE_16X16;
  3686. }
  3687. }
  3688. } else { /* I-Frame */
  3689. s->mb_intra = 1;
  3690. s->ac_pred = IS_ACPRED(s->current_picture.mb_type[xy]);
  3691. }
  3692. if (!IS_SKIP(mb_type)) {
  3693. int i;
  3694. s->dsp.clear_blocks(s->block[0]);
  3695. /* decode each block */
  3696. for (i = 0; i < 6; i++) {
  3697. if(mpeg4_decode_block(s, block[i], i, cbp&32, s->mb_intra, s->rvlc) < 0){
  3698. av_log(s->avctx, AV_LOG_ERROR, "texture corrupted at %d %d %d\n", s->mb_x, s->mb_y, s->mb_intra);
  3699. return -1;
  3700. }
  3701. cbp+=cbp;
  3702. }
  3703. }
  3704. /* per-MB end of slice check */
  3705. if(--s->mb_num_left <= 0){
  3706. if(mpeg4_is_resync(s))
  3707. return SLICE_END;
  3708. else
  3709. return SLICE_NOEND;
  3710. }else{
  3711. if(mpeg4_is_resync(s)){
  3712. const int delta= s->mb_x + 1 == s->mb_width ? 2 : 1;
  3713. if(s->cbp_table[xy+delta])
  3714. return SLICE_END;
  3715. }
  3716. return SLICE_OK;
  3717. }
  3718. }
  3719. /* Decodes RVLC of H.263+ UMV */
  3720. static int h263p_decode_umotion(MpegEncContext * s, int pred)
  3721. {
  3722. int code = 0, sign;
  3723. if (get_bits1(&s->gb)) /* Motion difference = 0 */
  3724. return pred;
  3725. code = 2 + get_bits1(&s->gb);
  3726. while (get_bits1(&s->gb))
  3727. {
  3728. code <<= 1;
  3729. code += get_bits1(&s->gb);
  3730. }
  3731. sign = code & 1;
  3732. code >>= 1;
  3733. code = (sign) ? (pred - code) : (pred + code);
  3734. dprintf(s->avctx,"H.263+ UMV Motion = %d\n", code);
  3735. return code;
  3736. }
  3737. /**
  3738. * read the next MVs for OBMC. yes this is a ugly hack, feel free to send a patch :)
  3739. */
  3740. static void preview_obmc(MpegEncContext *s){
  3741. GetBitContext gb= s->gb;
  3742. int cbpc, i, pred_x, pred_y, mx, my;
  3743. int16_t *mot_val;
  3744. const int xy= s->mb_x + 1 + s->mb_y * s->mb_stride;
  3745. const int stride= s->b8_stride*2;
  3746. for(i=0; i<4; i++)
  3747. s->block_index[i]+= 2;
  3748. for(i=4; i<6; i++)
  3749. s->block_index[i]+= 1;
  3750. s->mb_x++;
  3751. assert(s->pict_type == FF_P_TYPE);
  3752. do{
  3753. if (get_bits1(&s->gb)) {
  3754. /* skip mb */
  3755. mot_val = s->current_picture.motion_val[0][ s->block_index[0] ];
  3756. mot_val[0 ]= mot_val[2 ]=
  3757. mot_val[0+stride]= mot_val[2+stride]= 0;
  3758. mot_val[1 ]= mot_val[3 ]=
  3759. mot_val[1+stride]= mot_val[3+stride]= 0;
  3760. s->current_picture.mb_type[xy]= MB_TYPE_SKIP | MB_TYPE_16x16 | MB_TYPE_L0;
  3761. goto end;
  3762. }
  3763. cbpc = get_vlc2(&s->gb, inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2);
  3764. }while(cbpc == 20);
  3765. if(cbpc & 4){
  3766. s->current_picture.mb_type[xy]= MB_TYPE_INTRA;
  3767. }else{
  3768. get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
  3769. if (cbpc & 8) {
  3770. if(s->modified_quant){
  3771. if(get_bits1(&s->gb)) skip_bits(&s->gb, 1);
  3772. else skip_bits(&s->gb, 5);
  3773. }else
  3774. skip_bits(&s->gb, 2);
  3775. }
  3776. if ((cbpc & 16) == 0) {
  3777. s->current_picture.mb_type[xy]= MB_TYPE_16x16 | MB_TYPE_L0;
  3778. /* 16x16 motion prediction */
  3779. mot_val= h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
  3780. if (s->umvplus)
  3781. mx = h263p_decode_umotion(s, pred_x);
  3782. else
  3783. mx = h263_decode_motion(s, pred_x, 1);
  3784. if (s->umvplus)
  3785. my = h263p_decode_umotion(s, pred_y);
  3786. else
  3787. my = h263_decode_motion(s, pred_y, 1);
  3788. mot_val[0 ]= mot_val[2 ]=
  3789. mot_val[0+stride]= mot_val[2+stride]= mx;
  3790. mot_val[1 ]= mot_val[3 ]=
  3791. mot_val[1+stride]= mot_val[3+stride]= my;
  3792. } else {
  3793. s->current_picture.mb_type[xy]= MB_TYPE_8x8 | MB_TYPE_L0;
  3794. for(i=0;i<4;i++) {
  3795. mot_val = h263_pred_motion(s, i, 0, &pred_x, &pred_y);
  3796. if (s->umvplus)
  3797. mx = h263p_decode_umotion(s, pred_x);
  3798. else
  3799. mx = h263_decode_motion(s, pred_x, 1);
  3800. if (s->umvplus)
  3801. my = h263p_decode_umotion(s, pred_y);
  3802. else
  3803. my = h263_decode_motion(s, pred_y, 1);
  3804. if (s->umvplus && (mx - pred_x) == 1 && (my - pred_y) == 1)
  3805. skip_bits1(&s->gb); /* Bit stuffing to prevent PSC */
  3806. mot_val[0] = mx;
  3807. mot_val[1] = my;
  3808. }
  3809. }
  3810. }
  3811. end:
  3812. for(i=0; i<4; i++)
  3813. s->block_index[i]-= 2;
  3814. for(i=4; i<6; i++)
  3815. s->block_index[i]-= 1;
  3816. s->mb_x--;
  3817. s->gb= gb;
  3818. }
  3819. static void h263_decode_dquant(MpegEncContext *s){
  3820. static const int8_t quant_tab[4] = { -1, -2, 1, 2 };
  3821. if(s->modified_quant){
  3822. if(get_bits1(&s->gb))
  3823. s->qscale= modified_quant_tab[get_bits1(&s->gb)][ s->qscale ];
  3824. else
  3825. s->qscale= get_bits(&s->gb, 5);
  3826. }else
  3827. s->qscale += quant_tab[get_bits(&s->gb, 2)];
  3828. ff_set_qscale(s, s->qscale);
  3829. }
  3830. static int h263_decode_block(MpegEncContext * s, DCTELEM * block,
  3831. int n, int coded)
  3832. {
  3833. int code, level, i, j, last, run;
  3834. RLTable *rl = &rl_inter;
  3835. const uint8_t *scan_table;
  3836. GetBitContext gb= s->gb;
  3837. scan_table = s->intra_scantable.permutated;
  3838. if (s->h263_aic && s->mb_intra) {
  3839. rl = &rl_intra_aic;
  3840. i = 0;
  3841. if (s->ac_pred) {
  3842. if (s->h263_aic_dir)
  3843. scan_table = s->intra_v_scantable.permutated; /* left */
  3844. else
  3845. scan_table = s->intra_h_scantable.permutated; /* top */
  3846. }
  3847. } else if (s->mb_intra) {
  3848. /* DC coef */
  3849. if(s->codec_id == CODEC_ID_RV10){
  3850. #if CONFIG_RV10_DECODER
  3851. if (s->rv10_version == 3 && s->pict_type == FF_I_TYPE) {
  3852. int component, diff;
  3853. component = (n <= 3 ? 0 : n - 4 + 1);
  3854. level = s->last_dc[component];
  3855. if (s->rv10_first_dc_coded[component]) {
  3856. diff = rv_decode_dc(s, n);
  3857. if (diff == 0xffff)
  3858. return -1;
  3859. level += diff;
  3860. level = level & 0xff; /* handle wrap round */
  3861. s->last_dc[component] = level;
  3862. } else {
  3863. s->rv10_first_dc_coded[component] = 1;
  3864. }
  3865. } else {
  3866. level = get_bits(&s->gb, 8);
  3867. if (level == 255)
  3868. level = 128;
  3869. }
  3870. #endif
  3871. }else{
  3872. level = get_bits(&s->gb, 8);
  3873. if((level&0x7F) == 0){
  3874. av_log(s->avctx, AV_LOG_ERROR, "illegal dc %d at %d %d\n", level, s->mb_x, s->mb_y);
  3875. if(s->error_recognition >= FF_ER_COMPLIANT)
  3876. return -1;
  3877. }
  3878. if (level == 255)
  3879. level = 128;
  3880. }
  3881. block[0] = level;
  3882. i = 1;
  3883. } else {
  3884. i = 0;
  3885. }
  3886. if (!coded) {
  3887. if (s->mb_intra && s->h263_aic)
  3888. goto not_coded;
  3889. s->block_last_index[n] = i - 1;
  3890. return 0;
  3891. }
  3892. retry:
  3893. for(;;) {
  3894. code = get_vlc2(&s->gb, rl->vlc.table, TEX_VLC_BITS, 2);
  3895. if (code < 0){
  3896. av_log(s->avctx, AV_LOG_ERROR, "illegal ac vlc code at %dx%d\n", s->mb_x, s->mb_y);
  3897. return -1;
  3898. }
  3899. if (code == rl->n) {
  3900. /* escape */
  3901. if (s->h263_flv > 1) {
  3902. int is11 = get_bits1(&s->gb);
  3903. last = get_bits1(&s->gb);
  3904. run = get_bits(&s->gb, 6);
  3905. if(is11){
  3906. level = get_sbits(&s->gb, 11);
  3907. } else {
  3908. level = get_sbits(&s->gb, 7);
  3909. }
  3910. } else {
  3911. last = get_bits1(&s->gb);
  3912. run = get_bits(&s->gb, 6);
  3913. level = (int8_t)get_bits(&s->gb, 8);
  3914. if(level == -128){
  3915. if (s->codec_id == CODEC_ID_RV10) {
  3916. /* XXX: should patch encoder too */
  3917. level = get_sbits(&s->gb, 12);
  3918. }else{
  3919. level = get_bits(&s->gb, 5);
  3920. level |= get_sbits(&s->gb, 6)<<5;
  3921. }
  3922. }
  3923. }
  3924. } else {
  3925. run = rl->table_run[code];
  3926. level = rl->table_level[code];
  3927. last = code >= rl->last;
  3928. if (get_bits1(&s->gb))
  3929. level = -level;
  3930. }
  3931. i += run;
  3932. if (i >= 64){
  3933. if(s->alt_inter_vlc && rl == &rl_inter && !s->mb_intra){
  3934. //Looks like a hack but no, it's the way it is supposed to work ...
  3935. rl = &rl_intra_aic;
  3936. i = 0;
  3937. s->gb= gb;
  3938. s->dsp.clear_block(block);
  3939. goto retry;
  3940. }
  3941. av_log(s->avctx, AV_LOG_ERROR, "run overflow at %dx%d i:%d\n", s->mb_x, s->mb_y, s->mb_intra);
  3942. return -1;
  3943. }
  3944. j = scan_table[i];
  3945. block[j] = level;
  3946. if (last)
  3947. break;
  3948. i++;
  3949. }
  3950. not_coded:
  3951. if (s->mb_intra && s->h263_aic) {
  3952. h263_pred_acdc(s, block, n);
  3953. i = 63;
  3954. }
  3955. s->block_last_index[n] = i;
  3956. return 0;
  3957. }
  3958. static int h263_skip_b_part(MpegEncContext *s, int cbp)
  3959. {
  3960. DECLARE_ALIGNED(16, DCTELEM, dblock[64]);
  3961. int i, mbi;
  3962. /* we have to set s->mb_intra to zero to decode B-part of PB-frame correctly
  3963. * but real value should be restored in order to be used later (in OBMC condition)
  3964. */
  3965. mbi = s->mb_intra;
  3966. s->mb_intra = 0;
  3967. for (i = 0; i < 6; i++) {
  3968. if (h263_decode_block(s, dblock, i, cbp&32) < 0)
  3969. return -1;
  3970. cbp+=cbp;
  3971. }
  3972. s->mb_intra = mbi;
  3973. return 0;
  3974. }
  3975. static int h263_get_modb(GetBitContext *gb, int pb_frame, int *cbpb)
  3976. {
  3977. int c, mv = 1;
  3978. if (pb_frame < 3) { // h.263 Annex G and i263 PB-frame
  3979. c = get_bits1(gb);
  3980. if (pb_frame == 2 && c)
  3981. mv = !get_bits1(gb);
  3982. } else { // h.263 Annex M improved PB-frame
  3983. mv = get_unary(gb, 0, 4) + 1;
  3984. c = mv & 1;
  3985. mv = !!(mv & 2);
  3986. }
  3987. if(c)
  3988. *cbpb = get_bits(gb, 6);
  3989. return mv;
  3990. }
  3991. int ff_h263_decode_mb(MpegEncContext *s,
  3992. DCTELEM block[6][64])
  3993. {
  3994. int cbpc, cbpy, i, cbp, pred_x, pred_y, mx, my, dquant;
  3995. int16_t *mot_val;
  3996. const int xy= s->mb_x + s->mb_y * s->mb_stride;
  3997. int cbpb = 0, pb_mv_count = 0;
  3998. assert(!s->h263_pred);
  3999. if (s->pict_type == FF_P_TYPE) {
  4000. do{
  4001. if (get_bits1(&s->gb)) {
  4002. /* skip mb */
  4003. s->mb_intra = 0;
  4004. for(i=0;i<6;i++)
  4005. s->block_last_index[i] = -1;
  4006. s->mv_dir = MV_DIR_FORWARD;
  4007. s->mv_type = MV_TYPE_16X16;
  4008. s->current_picture.mb_type[xy]= MB_TYPE_SKIP | MB_TYPE_16x16 | MB_TYPE_L0;
  4009. s->mv[0][0][0] = 0;
  4010. s->mv[0][0][1] = 0;
  4011. s->mb_skipped = !(s->obmc | s->loop_filter);
  4012. goto end;
  4013. }
  4014. cbpc = get_vlc2(&s->gb, inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2);
  4015. if (cbpc < 0){
  4016. av_log(s->avctx, AV_LOG_ERROR, "cbpc damaged at %d %d\n", s->mb_x, s->mb_y);
  4017. return -1;
  4018. }
  4019. }while(cbpc == 20);
  4020. s->dsp.clear_blocks(s->block[0]);
  4021. dquant = cbpc & 8;
  4022. s->mb_intra = ((cbpc & 4) != 0);
  4023. if (s->mb_intra) goto intra;
  4024. if(s->pb_frame && get_bits1(&s->gb))
  4025. pb_mv_count = h263_get_modb(&s->gb, s->pb_frame, &cbpb);
  4026. cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
  4027. if(s->alt_inter_vlc==0 || (cbpc & 3)!=3)
  4028. cbpy ^= 0xF;
  4029. cbp = (cbpc & 3) | (cbpy << 2);
  4030. if (dquant) {
  4031. h263_decode_dquant(s);
  4032. }
  4033. s->mv_dir = MV_DIR_FORWARD;
  4034. if ((cbpc & 16) == 0) {
  4035. s->current_picture.mb_type[xy]= MB_TYPE_16x16 | MB_TYPE_L0;
  4036. /* 16x16 motion prediction */
  4037. s->mv_type = MV_TYPE_16X16;
  4038. h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
  4039. if (s->umvplus)
  4040. mx = h263p_decode_umotion(s, pred_x);
  4041. else
  4042. mx = h263_decode_motion(s, pred_x, 1);
  4043. if (mx >= 0xffff)
  4044. return -1;
  4045. if (s->umvplus)
  4046. my = h263p_decode_umotion(s, pred_y);
  4047. else
  4048. my = h263_decode_motion(s, pred_y, 1);
  4049. if (my >= 0xffff)
  4050. return -1;
  4051. s->mv[0][0][0] = mx;
  4052. s->mv[0][0][1] = my;
  4053. if (s->umvplus && (mx - pred_x) == 1 && (my - pred_y) == 1)
  4054. skip_bits1(&s->gb); /* Bit stuffing to prevent PSC */
  4055. } else {
  4056. s->current_picture.mb_type[xy]= MB_TYPE_8x8 | MB_TYPE_L0;
  4057. s->mv_type = MV_TYPE_8X8;
  4058. for(i=0;i<4;i++) {
  4059. mot_val = h263_pred_motion(s, i, 0, &pred_x, &pred_y);
  4060. if (s->umvplus)
  4061. mx = h263p_decode_umotion(s, pred_x);
  4062. else
  4063. mx = h263_decode_motion(s, pred_x, 1);
  4064. if (mx >= 0xffff)
  4065. return -1;
  4066. if (s->umvplus)
  4067. my = h263p_decode_umotion(s, pred_y);
  4068. else
  4069. my = h263_decode_motion(s, pred_y, 1);
  4070. if (my >= 0xffff)
  4071. return -1;
  4072. s->mv[0][i][0] = mx;
  4073. s->mv[0][i][1] = my;
  4074. if (s->umvplus && (mx - pred_x) == 1 && (my - pred_y) == 1)
  4075. skip_bits1(&s->gb); /* Bit stuffing to prevent PSC */
  4076. mot_val[0] = mx;
  4077. mot_val[1] = my;
  4078. }
  4079. }
  4080. } else if(s->pict_type==FF_B_TYPE) {
  4081. int mb_type;
  4082. const int stride= s->b8_stride;
  4083. int16_t *mot_val0 = s->current_picture.motion_val[0][ 2*(s->mb_x + s->mb_y*stride) ];
  4084. int16_t *mot_val1 = s->current_picture.motion_val[1][ 2*(s->mb_x + s->mb_y*stride) ];
  4085. // const int mv_xy= s->mb_x + 1 + s->mb_y * s->mb_stride;
  4086. //FIXME ugly
  4087. mot_val0[0 ]= mot_val0[2 ]= mot_val0[0+2*stride]= mot_val0[2+2*stride]=
  4088. mot_val0[1 ]= mot_val0[3 ]= mot_val0[1+2*stride]= mot_val0[3+2*stride]=
  4089. mot_val1[0 ]= mot_val1[2 ]= mot_val1[0+2*stride]= mot_val1[2+2*stride]=
  4090. mot_val1[1 ]= mot_val1[3 ]= mot_val1[1+2*stride]= mot_val1[3+2*stride]= 0;
  4091. do{
  4092. mb_type= get_vlc2(&s->gb, h263_mbtype_b_vlc.table, H263_MBTYPE_B_VLC_BITS, 2);
  4093. if (mb_type < 0){
  4094. av_log(s->avctx, AV_LOG_ERROR, "b mb_type damaged at %d %d\n", s->mb_x, s->mb_y);
  4095. return -1;
  4096. }
  4097. mb_type= h263_mb_type_b_map[ mb_type ];
  4098. }while(!mb_type);
  4099. s->mb_intra = IS_INTRA(mb_type);
  4100. if(HAS_CBP(mb_type)){
  4101. s->dsp.clear_blocks(s->block[0]);
  4102. cbpc = get_vlc2(&s->gb, cbpc_b_vlc.table, CBPC_B_VLC_BITS, 1);
  4103. if(s->mb_intra){
  4104. dquant = IS_QUANT(mb_type);
  4105. goto intra;
  4106. }
  4107. cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
  4108. if (cbpy < 0){
  4109. av_log(s->avctx, AV_LOG_ERROR, "b cbpy damaged at %d %d\n", s->mb_x, s->mb_y);
  4110. return -1;
  4111. }
  4112. if(s->alt_inter_vlc==0 || (cbpc & 3)!=3)
  4113. cbpy ^= 0xF;
  4114. cbp = (cbpc & 3) | (cbpy << 2);
  4115. }else
  4116. cbp=0;
  4117. assert(!s->mb_intra);
  4118. if(IS_QUANT(mb_type)){
  4119. h263_decode_dquant(s);
  4120. }
  4121. if(IS_DIRECT(mb_type)){
  4122. s->mv_dir = MV_DIR_FORWARD | MV_DIR_BACKWARD | MV_DIRECT;
  4123. mb_type |= ff_mpeg4_set_direct_mv(s, 0, 0);
  4124. }else{
  4125. s->mv_dir = 0;
  4126. s->mv_type= MV_TYPE_16X16;
  4127. //FIXME UMV
  4128. if(USES_LIST(mb_type, 0)){
  4129. int16_t *mot_val= h263_pred_motion(s, 0, 0, &mx, &my);
  4130. s->mv_dir = MV_DIR_FORWARD;
  4131. mx = h263_decode_motion(s, mx, 1);
  4132. my = h263_decode_motion(s, my, 1);
  4133. s->mv[0][0][0] = mx;
  4134. s->mv[0][0][1] = my;
  4135. mot_val[0 ]= mot_val[2 ]= mot_val[0+2*stride]= mot_val[2+2*stride]= mx;
  4136. mot_val[1 ]= mot_val[3 ]= mot_val[1+2*stride]= mot_val[3+2*stride]= my;
  4137. }
  4138. if(USES_LIST(mb_type, 1)){
  4139. int16_t *mot_val= h263_pred_motion(s, 0, 1, &mx, &my);
  4140. s->mv_dir |= MV_DIR_BACKWARD;
  4141. mx = h263_decode_motion(s, mx, 1);
  4142. my = h263_decode_motion(s, my, 1);
  4143. s->mv[1][0][0] = mx;
  4144. s->mv[1][0][1] = my;
  4145. mot_val[0 ]= mot_val[2 ]= mot_val[0+2*stride]= mot_val[2+2*stride]= mx;
  4146. mot_val[1 ]= mot_val[3 ]= mot_val[1+2*stride]= mot_val[3+2*stride]= my;
  4147. }
  4148. }
  4149. s->current_picture.mb_type[xy]= mb_type;
  4150. } else { /* I-Frame */
  4151. do{
  4152. cbpc = get_vlc2(&s->gb, intra_MCBPC_vlc.table, INTRA_MCBPC_VLC_BITS, 2);
  4153. if (cbpc < 0){
  4154. av_log(s->avctx, AV_LOG_ERROR, "I cbpc damaged at %d %d\n", s->mb_x, s->mb_y);
  4155. return -1;
  4156. }
  4157. }while(cbpc == 8);
  4158. s->dsp.clear_blocks(s->block[0]);
  4159. dquant = cbpc & 4;
  4160. s->mb_intra = 1;
  4161. intra:
  4162. s->current_picture.mb_type[xy]= MB_TYPE_INTRA;
  4163. if (s->h263_aic) {
  4164. s->ac_pred = get_bits1(&s->gb);
  4165. if(s->ac_pred){
  4166. s->current_picture.mb_type[xy]= MB_TYPE_INTRA | MB_TYPE_ACPRED;
  4167. s->h263_aic_dir = get_bits1(&s->gb);
  4168. }
  4169. }else
  4170. s->ac_pred = 0;
  4171. if(s->pb_frame && get_bits1(&s->gb))
  4172. pb_mv_count = h263_get_modb(&s->gb, s->pb_frame, &cbpb);
  4173. cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
  4174. if(cbpy<0){
  4175. av_log(s->avctx, AV_LOG_ERROR, "I cbpy damaged at %d %d\n", s->mb_x, s->mb_y);
  4176. return -1;
  4177. }
  4178. cbp = (cbpc & 3) | (cbpy << 2);
  4179. if (dquant) {
  4180. h263_decode_dquant(s);
  4181. }
  4182. pb_mv_count += !!s->pb_frame;
  4183. }
  4184. while(pb_mv_count--){
  4185. h263_decode_motion(s, 0, 1);
  4186. h263_decode_motion(s, 0, 1);
  4187. }
  4188. /* decode each block */
  4189. for (i = 0; i < 6; i++) {
  4190. if (h263_decode_block(s, block[i], i, cbp&32) < 0)
  4191. return -1;
  4192. cbp+=cbp;
  4193. }
  4194. if(s->pb_frame && h263_skip_b_part(s, cbpb) < 0)
  4195. return -1;
  4196. if(s->obmc && !s->mb_intra){
  4197. if(s->pict_type == FF_P_TYPE && s->mb_x+1<s->mb_width && s->mb_num_left != 1)
  4198. preview_obmc(s);
  4199. }
  4200. end:
  4201. /* per-MB end of slice check */
  4202. {
  4203. int v= show_bits(&s->gb, 16);
  4204. if(get_bits_count(&s->gb) + 16 > s->gb.size_in_bits){
  4205. v>>= get_bits_count(&s->gb) + 16 - s->gb.size_in_bits;
  4206. }
  4207. if(v==0)
  4208. return SLICE_END;
  4209. }
  4210. return SLICE_OK;
  4211. }
  4212. int ff_mpeg4_decode_mb(MpegEncContext *s,
  4213. DCTELEM block[6][64])
  4214. {
  4215. int cbpc, cbpy, i, cbp, pred_x, pred_y, mx, my, dquant;
  4216. int16_t *mot_val;
  4217. static int8_t quant_tab[4] = { -1, -2, 1, 2 };
  4218. const int xy= s->mb_x + s->mb_y * s->mb_stride;
  4219. assert(s->h263_pred);
  4220. if (s->pict_type == FF_P_TYPE || s->pict_type==FF_S_TYPE) {
  4221. do{
  4222. if (get_bits1(&s->gb)) {
  4223. /* skip mb */
  4224. s->mb_intra = 0;
  4225. for(i=0;i<6;i++)
  4226. s->block_last_index[i] = -1;
  4227. s->mv_dir = MV_DIR_FORWARD;
  4228. s->mv_type = MV_TYPE_16X16;
  4229. if(s->pict_type==FF_S_TYPE && s->vol_sprite_usage==GMC_SPRITE){
  4230. s->current_picture.mb_type[xy]= MB_TYPE_SKIP | MB_TYPE_GMC | MB_TYPE_16x16 | MB_TYPE_L0;
  4231. s->mcsel=1;
  4232. s->mv[0][0][0]= get_amv(s, 0);
  4233. s->mv[0][0][1]= get_amv(s, 1);
  4234. s->mb_skipped = 0;
  4235. }else{
  4236. s->current_picture.mb_type[xy]= MB_TYPE_SKIP | MB_TYPE_16x16 | MB_TYPE_L0;
  4237. s->mcsel=0;
  4238. s->mv[0][0][0] = 0;
  4239. s->mv[0][0][1] = 0;
  4240. s->mb_skipped = 1;
  4241. }
  4242. goto end;
  4243. }
  4244. cbpc = get_vlc2(&s->gb, inter_MCBPC_vlc.table, INTER_MCBPC_VLC_BITS, 2);
  4245. if (cbpc < 0){
  4246. av_log(s->avctx, AV_LOG_ERROR, "cbpc damaged at %d %d\n", s->mb_x, s->mb_y);
  4247. return -1;
  4248. }
  4249. }while(cbpc == 20);
  4250. s->dsp.clear_blocks(s->block[0]);
  4251. dquant = cbpc & 8;
  4252. s->mb_intra = ((cbpc & 4) != 0);
  4253. if (s->mb_intra) goto intra;
  4254. if(s->pict_type==FF_S_TYPE && s->vol_sprite_usage==GMC_SPRITE && (cbpc & 16) == 0)
  4255. s->mcsel= get_bits1(&s->gb);
  4256. else s->mcsel= 0;
  4257. cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1) ^ 0x0F;
  4258. cbp = (cbpc & 3) | (cbpy << 2);
  4259. if (dquant) {
  4260. ff_set_qscale(s, s->qscale + quant_tab[get_bits(&s->gb, 2)]);
  4261. }
  4262. if((!s->progressive_sequence) && (cbp || (s->workaround_bugs&FF_BUG_XVID_ILACE)))
  4263. s->interlaced_dct= get_bits1(&s->gb);
  4264. s->mv_dir = MV_DIR_FORWARD;
  4265. if ((cbpc & 16) == 0) {
  4266. if(s->mcsel){
  4267. s->current_picture.mb_type[xy]= MB_TYPE_GMC | MB_TYPE_16x16 | MB_TYPE_L0;
  4268. /* 16x16 global motion prediction */
  4269. s->mv_type = MV_TYPE_16X16;
  4270. mx= get_amv(s, 0);
  4271. my= get_amv(s, 1);
  4272. s->mv[0][0][0] = mx;
  4273. s->mv[0][0][1] = my;
  4274. }else if((!s->progressive_sequence) && get_bits1(&s->gb)){
  4275. s->current_picture.mb_type[xy]= MB_TYPE_16x8 | MB_TYPE_L0 | MB_TYPE_INTERLACED;
  4276. /* 16x8 field motion prediction */
  4277. s->mv_type= MV_TYPE_FIELD;
  4278. s->field_select[0][0]= get_bits1(&s->gb);
  4279. s->field_select[0][1]= get_bits1(&s->gb);
  4280. h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
  4281. for(i=0; i<2; i++){
  4282. mx = h263_decode_motion(s, pred_x, s->f_code);
  4283. if (mx >= 0xffff)
  4284. return -1;
  4285. my = h263_decode_motion(s, pred_y/2, s->f_code);
  4286. if (my >= 0xffff)
  4287. return -1;
  4288. s->mv[0][i][0] = mx;
  4289. s->mv[0][i][1] = my;
  4290. }
  4291. }else{
  4292. s->current_picture.mb_type[xy]= MB_TYPE_16x16 | MB_TYPE_L0;
  4293. /* 16x16 motion prediction */
  4294. s->mv_type = MV_TYPE_16X16;
  4295. h263_pred_motion(s, 0, 0, &pred_x, &pred_y);
  4296. mx = h263_decode_motion(s, pred_x, s->f_code);
  4297. if (mx >= 0xffff)
  4298. return -1;
  4299. my = h263_decode_motion(s, pred_y, s->f_code);
  4300. if (my >= 0xffff)
  4301. return -1;
  4302. s->mv[0][0][0] = mx;
  4303. s->mv[0][0][1] = my;
  4304. }
  4305. } else {
  4306. s->current_picture.mb_type[xy]= MB_TYPE_8x8 | MB_TYPE_L0;
  4307. s->mv_type = MV_TYPE_8X8;
  4308. for(i=0;i<4;i++) {
  4309. mot_val = h263_pred_motion(s, i, 0, &pred_x, &pred_y);
  4310. mx = h263_decode_motion(s, pred_x, s->f_code);
  4311. if (mx >= 0xffff)
  4312. return -1;
  4313. my = h263_decode_motion(s, pred_y, s->f_code);
  4314. if (my >= 0xffff)
  4315. return -1;
  4316. s->mv[0][i][0] = mx;
  4317. s->mv[0][i][1] = my;
  4318. mot_val[0] = mx;
  4319. mot_val[1] = my;
  4320. }
  4321. }
  4322. } else if(s->pict_type==FF_B_TYPE) {
  4323. int modb1; // first bit of modb
  4324. int modb2; // second bit of modb
  4325. int mb_type;
  4326. s->mb_intra = 0; //B-frames never contain intra blocks
  4327. s->mcsel=0; // ... true gmc blocks
  4328. if(s->mb_x==0){
  4329. for(i=0; i<2; i++){
  4330. s->last_mv[i][0][0]=
  4331. s->last_mv[i][0][1]=
  4332. s->last_mv[i][1][0]=
  4333. s->last_mv[i][1][1]= 0;
  4334. }
  4335. }
  4336. /* if we skipped it in the future P Frame than skip it now too */
  4337. s->mb_skipped= s->next_picture.mbskip_table[s->mb_y * s->mb_stride + s->mb_x]; // Note, skiptab=0 if last was GMC
  4338. if(s->mb_skipped){
  4339. /* skip mb */
  4340. for(i=0;i<6;i++)
  4341. s->block_last_index[i] = -1;
  4342. s->mv_dir = MV_DIR_FORWARD;
  4343. s->mv_type = MV_TYPE_16X16;
  4344. s->mv[0][0][0] = 0;
  4345. s->mv[0][0][1] = 0;
  4346. s->mv[1][0][0] = 0;
  4347. s->mv[1][0][1] = 0;
  4348. s->current_picture.mb_type[xy]= MB_TYPE_SKIP | MB_TYPE_16x16 | MB_TYPE_L0;
  4349. goto end;
  4350. }
  4351. modb1= get_bits1(&s->gb);
  4352. if(modb1){
  4353. mb_type= MB_TYPE_DIRECT2 | MB_TYPE_SKIP | MB_TYPE_L0L1; //like MB_TYPE_B_DIRECT but no vectors coded
  4354. cbp=0;
  4355. }else{
  4356. modb2= get_bits1(&s->gb);
  4357. mb_type= get_vlc2(&s->gb, mb_type_b_vlc.table, MB_TYPE_B_VLC_BITS, 1);
  4358. if(mb_type<0){
  4359. av_log(s->avctx, AV_LOG_ERROR, "illegal MB_type\n");
  4360. return -1;
  4361. }
  4362. mb_type= mb_type_b_map[ mb_type ];
  4363. if(modb2) cbp= 0;
  4364. else{
  4365. s->dsp.clear_blocks(s->block[0]);
  4366. cbp= get_bits(&s->gb, 6);
  4367. }
  4368. if ((!IS_DIRECT(mb_type)) && cbp) {
  4369. if(get_bits1(&s->gb)){
  4370. ff_set_qscale(s, s->qscale + get_bits1(&s->gb)*4 - 2);
  4371. }
  4372. }
  4373. if(!s->progressive_sequence){
  4374. if(cbp)
  4375. s->interlaced_dct= get_bits1(&s->gb);
  4376. if(!IS_DIRECT(mb_type) && get_bits1(&s->gb)){
  4377. mb_type |= MB_TYPE_16x8 | MB_TYPE_INTERLACED;
  4378. mb_type &= ~MB_TYPE_16x16;
  4379. if(USES_LIST(mb_type, 0)){
  4380. s->field_select[0][0]= get_bits1(&s->gb);
  4381. s->field_select[0][1]= get_bits1(&s->gb);
  4382. }
  4383. if(USES_LIST(mb_type, 1)){
  4384. s->field_select[1][0]= get_bits1(&s->gb);
  4385. s->field_select[1][1]= get_bits1(&s->gb);
  4386. }
  4387. }
  4388. }
  4389. s->mv_dir = 0;
  4390. if((mb_type & (MB_TYPE_DIRECT2|MB_TYPE_INTERLACED)) == 0){
  4391. s->mv_type= MV_TYPE_16X16;
  4392. if(USES_LIST(mb_type, 0)){
  4393. s->mv_dir = MV_DIR_FORWARD;
  4394. mx = h263_decode_motion(s, s->last_mv[0][0][0], s->f_code);
  4395. my = h263_decode_motion(s, s->last_mv[0][0][1], s->f_code);
  4396. s->last_mv[0][1][0]= s->last_mv[0][0][0]= s->mv[0][0][0] = mx;
  4397. s->last_mv[0][1][1]= s->last_mv[0][0][1]= s->mv[0][0][1] = my;
  4398. }
  4399. if(USES_LIST(mb_type, 1)){
  4400. s->mv_dir |= MV_DIR_BACKWARD;
  4401. mx = h263_decode_motion(s, s->last_mv[1][0][0], s->b_code);
  4402. my = h263_decode_motion(s, s->last_mv[1][0][1], s->b_code);
  4403. s->last_mv[1][1][0]= s->last_mv[1][0][0]= s->mv[1][0][0] = mx;
  4404. s->last_mv[1][1][1]= s->last_mv[1][0][1]= s->mv[1][0][1] = my;
  4405. }
  4406. }else if(!IS_DIRECT(mb_type)){
  4407. s->mv_type= MV_TYPE_FIELD;
  4408. if(USES_LIST(mb_type, 0)){
  4409. s->mv_dir = MV_DIR_FORWARD;
  4410. for(i=0; i<2; i++){
  4411. mx = h263_decode_motion(s, s->last_mv[0][i][0] , s->f_code);
  4412. my = h263_decode_motion(s, s->last_mv[0][i][1]/2, s->f_code);
  4413. s->last_mv[0][i][0]= s->mv[0][i][0] = mx;
  4414. s->last_mv[0][i][1]= (s->mv[0][i][1] = my)*2;
  4415. }
  4416. }
  4417. if(USES_LIST(mb_type, 1)){
  4418. s->mv_dir |= MV_DIR_BACKWARD;
  4419. for(i=0; i<2; i++){
  4420. mx = h263_decode_motion(s, s->last_mv[1][i][0] , s->b_code);
  4421. my = h263_decode_motion(s, s->last_mv[1][i][1]/2, s->b_code);
  4422. s->last_mv[1][i][0]= s->mv[1][i][0] = mx;
  4423. s->last_mv[1][i][1]= (s->mv[1][i][1] = my)*2;
  4424. }
  4425. }
  4426. }
  4427. }
  4428. if(IS_DIRECT(mb_type)){
  4429. if(IS_SKIP(mb_type))
  4430. mx=my=0;
  4431. else{
  4432. mx = h263_decode_motion(s, 0, 1);
  4433. my = h263_decode_motion(s, 0, 1);
  4434. }
  4435. s->mv_dir = MV_DIR_FORWARD | MV_DIR_BACKWARD | MV_DIRECT;
  4436. mb_type |= ff_mpeg4_set_direct_mv(s, mx, my);
  4437. }
  4438. s->current_picture.mb_type[xy]= mb_type;
  4439. } else { /* I-Frame */
  4440. do{
  4441. cbpc = get_vlc2(&s->gb, intra_MCBPC_vlc.table, INTRA_MCBPC_VLC_BITS, 2);
  4442. if (cbpc < 0){
  4443. av_log(s->avctx, AV_LOG_ERROR, "I cbpc damaged at %d %d\n", s->mb_x, s->mb_y);
  4444. return -1;
  4445. }
  4446. }while(cbpc == 8);
  4447. dquant = cbpc & 4;
  4448. s->mb_intra = 1;
  4449. intra:
  4450. s->ac_pred = get_bits1(&s->gb);
  4451. if(s->ac_pred)
  4452. s->current_picture.mb_type[xy]= MB_TYPE_INTRA | MB_TYPE_ACPRED;
  4453. else
  4454. s->current_picture.mb_type[xy]= MB_TYPE_INTRA;
  4455. cbpy = get_vlc2(&s->gb, cbpy_vlc.table, CBPY_VLC_BITS, 1);
  4456. if(cbpy<0){
  4457. av_log(s->avctx, AV_LOG_ERROR, "I cbpy damaged at %d %d\n", s->mb_x, s->mb_y);
  4458. return -1;
  4459. }
  4460. cbp = (cbpc & 3) | (cbpy << 2);
  4461. s->use_intra_dc_vlc= s->qscale < s->intra_dc_threshold;
  4462. if (dquant) {
  4463. ff_set_qscale(s, s->qscale + quant_tab[get_bits(&s->gb, 2)]);
  4464. }
  4465. if(!s->progressive_sequence)
  4466. s->interlaced_dct= get_bits1(&s->gb);
  4467. s->dsp.clear_blocks(s->block[0]);
  4468. /* decode each block */
  4469. for (i = 0; i < 6; i++) {
  4470. if (mpeg4_decode_block(s, block[i], i, cbp&32, 1, 0) < 0)
  4471. return -1;
  4472. cbp+=cbp;
  4473. }
  4474. goto end;
  4475. }
  4476. /* decode each block */
  4477. for (i = 0; i < 6; i++) {
  4478. if (mpeg4_decode_block(s, block[i], i, cbp&32, 0, 0) < 0)
  4479. return -1;
  4480. cbp+=cbp;
  4481. }
  4482. end:
  4483. /* per-MB end of slice check */
  4484. if(s->codec_id==CODEC_ID_MPEG4){
  4485. if(mpeg4_is_resync(s)){
  4486. const int delta= s->mb_x + 1 == s->mb_width ? 2 : 1;
  4487. if(s->pict_type==FF_B_TYPE && s->next_picture.mbskip_table[xy + delta])
  4488. return SLICE_OK;
  4489. return SLICE_END;
  4490. }
  4491. }
  4492. return SLICE_OK;
  4493. }
  4494. /* most is hardcoded. should extend to handle all h263 streams */
  4495. int h263_decode_picture_header(MpegEncContext *s)
  4496. {
  4497. int format, width, height, i;
  4498. uint32_t startcode;
  4499. align_get_bits(&s->gb);
  4500. startcode= get_bits(&s->gb, 22-8);
  4501. for(i= get_bits_left(&s->gb); i>24; i-=8) {
  4502. startcode = ((startcode << 8) | get_bits(&s->gb, 8)) & 0x003FFFFF;
  4503. if(startcode == 0x20)
  4504. break;
  4505. }
  4506. if (startcode != 0x20) {
  4507. av_log(s->avctx, AV_LOG_ERROR, "Bad picture start code\n");
  4508. return -1;
  4509. }
  4510. /* temporal reference */
  4511. i = get_bits(&s->gb, 8); /* picture timestamp */
  4512. if( (s->picture_number&~0xFF)+i < s->picture_number)
  4513. i+= 256;
  4514. s->current_picture_ptr->pts=
  4515. s->picture_number= (s->picture_number&~0xFF) + i;
  4516. /* PTYPE starts here */
  4517. if (get_bits1(&s->gb) != 1) {
  4518. /* marker */
  4519. av_log(s->avctx, AV_LOG_ERROR, "Bad marker\n");
  4520. return -1;
  4521. }
  4522. if (get_bits1(&s->gb) != 0) {
  4523. av_log(s->avctx, AV_LOG_ERROR, "Bad H263 id\n");
  4524. return -1; /* h263 id */
  4525. }
  4526. skip_bits1(&s->gb); /* split screen off */
  4527. skip_bits1(&s->gb); /* camera off */
  4528. skip_bits1(&s->gb); /* freeze picture release off */
  4529. format = get_bits(&s->gb, 3);
  4530. /*
  4531. 0 forbidden
  4532. 1 sub-QCIF
  4533. 10 QCIF
  4534. 7 extended PTYPE (PLUSPTYPE)
  4535. */
  4536. if (format != 7 && format != 6) {
  4537. s->h263_plus = 0;
  4538. /* H.263v1 */
  4539. width = h263_format[format][0];
  4540. height = h263_format[format][1];
  4541. if (!width)
  4542. return -1;
  4543. s->pict_type = FF_I_TYPE + get_bits1(&s->gb);
  4544. s->h263_long_vectors = get_bits1(&s->gb);
  4545. if (get_bits1(&s->gb) != 0) {
  4546. av_log(s->avctx, AV_LOG_ERROR, "H263 SAC not supported\n");
  4547. return -1; /* SAC: off */
  4548. }
  4549. s->obmc= get_bits1(&s->gb); /* Advanced prediction mode */
  4550. s->unrestricted_mv = s->h263_long_vectors || s->obmc;
  4551. s->pb_frame = get_bits1(&s->gb);
  4552. s->chroma_qscale= s->qscale = get_bits(&s->gb, 5);
  4553. skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */
  4554. s->width = width;
  4555. s->height = height;
  4556. s->avctx->sample_aspect_ratio= (AVRational){12,11};
  4557. s->avctx->time_base= (AVRational){1001, 30000};
  4558. } else {
  4559. int ufep;
  4560. /* H.263v2 */
  4561. s->h263_plus = 1;
  4562. ufep = get_bits(&s->gb, 3); /* Update Full Extended PTYPE */
  4563. /* ufep other than 0 and 1 are reserved */
  4564. if (ufep == 1) {
  4565. /* OPPTYPE */
  4566. format = get_bits(&s->gb, 3);
  4567. dprintf(s->avctx, "ufep=1, format: %d\n", format);
  4568. s->custom_pcf= get_bits1(&s->gb);
  4569. s->umvplus = get_bits1(&s->gb); /* Unrestricted Motion Vector */
  4570. if (get_bits1(&s->gb) != 0) {
  4571. av_log(s->avctx, AV_LOG_ERROR, "Syntax-based Arithmetic Coding (SAC) not supported\n");
  4572. }
  4573. s->obmc= get_bits1(&s->gb); /* Advanced prediction mode */
  4574. s->h263_aic = get_bits1(&s->gb); /* Advanced Intra Coding (AIC) */
  4575. s->loop_filter= get_bits1(&s->gb);
  4576. s->unrestricted_mv = s->umvplus || s->obmc || s->loop_filter;
  4577. s->h263_slice_structured= get_bits1(&s->gb);
  4578. if (get_bits1(&s->gb) != 0) {
  4579. av_log(s->avctx, AV_LOG_ERROR, "Reference Picture Selection not supported\n");
  4580. }
  4581. if (get_bits1(&s->gb) != 0) {
  4582. av_log(s->avctx, AV_LOG_ERROR, "Independent Segment Decoding not supported\n");
  4583. }
  4584. s->alt_inter_vlc= get_bits1(&s->gb);
  4585. s->modified_quant= get_bits1(&s->gb);
  4586. if(s->modified_quant)
  4587. s->chroma_qscale_table= ff_h263_chroma_qscale_table;
  4588. skip_bits(&s->gb, 1); /* Prevent start code emulation */
  4589. skip_bits(&s->gb, 3); /* Reserved */
  4590. } else if (ufep != 0) {
  4591. av_log(s->avctx, AV_LOG_ERROR, "Bad UFEP type (%d)\n", ufep);
  4592. return -1;
  4593. }
  4594. /* MPPTYPE */
  4595. s->pict_type = get_bits(&s->gb, 3);
  4596. switch(s->pict_type){
  4597. case 0: s->pict_type= FF_I_TYPE;break;
  4598. case 1: s->pict_type= FF_P_TYPE;break;
  4599. case 2: s->pict_type= FF_P_TYPE;s->pb_frame = 3;break;
  4600. case 3: s->pict_type= FF_B_TYPE;break;
  4601. case 7: s->pict_type= FF_I_TYPE;break; //ZYGO
  4602. default:
  4603. return -1;
  4604. }
  4605. skip_bits(&s->gb, 2);
  4606. s->no_rounding = get_bits1(&s->gb);
  4607. skip_bits(&s->gb, 4);
  4608. /* Get the picture dimensions */
  4609. if (ufep) {
  4610. if (format == 6) {
  4611. /* Custom Picture Format (CPFMT) */
  4612. s->aspect_ratio_info = get_bits(&s->gb, 4);
  4613. dprintf(s->avctx, "aspect: %d\n", s->aspect_ratio_info);
  4614. /* aspect ratios:
  4615. 0 - forbidden
  4616. 1 - 1:1
  4617. 2 - 12:11 (CIF 4:3)
  4618. 3 - 10:11 (525-type 4:3)
  4619. 4 - 16:11 (CIF 16:9)
  4620. 5 - 40:33 (525-type 16:9)
  4621. 6-14 - reserved
  4622. */
  4623. width = (get_bits(&s->gb, 9) + 1) * 4;
  4624. skip_bits1(&s->gb);
  4625. height = get_bits(&s->gb, 9) * 4;
  4626. dprintf(s->avctx, "\nH.263+ Custom picture: %dx%d\n",width,height);
  4627. if (s->aspect_ratio_info == FF_ASPECT_EXTENDED) {
  4628. /* aspected dimensions */
  4629. s->avctx->sample_aspect_ratio.num= get_bits(&s->gb, 8);
  4630. s->avctx->sample_aspect_ratio.den= get_bits(&s->gb, 8);
  4631. }else{
  4632. s->avctx->sample_aspect_ratio= pixel_aspect[s->aspect_ratio_info];
  4633. }
  4634. } else {
  4635. width = h263_format[format][0];
  4636. height = h263_format[format][1];
  4637. s->avctx->sample_aspect_ratio= (AVRational){12,11};
  4638. }
  4639. if ((width == 0) || (height == 0))
  4640. return -1;
  4641. s->width = width;
  4642. s->height = height;
  4643. if(s->custom_pcf){
  4644. int gcd;
  4645. s->avctx->time_base.den= 1800000;
  4646. s->avctx->time_base.num= 1000 + get_bits1(&s->gb);
  4647. s->avctx->time_base.num*= get_bits(&s->gb, 7);
  4648. if(s->avctx->time_base.num == 0){
  4649. av_log(s, AV_LOG_ERROR, "zero framerate\n");
  4650. return -1;
  4651. }
  4652. gcd= av_gcd(s->avctx->time_base.den, s->avctx->time_base.num);
  4653. s->avctx->time_base.den /= gcd;
  4654. s->avctx->time_base.num /= gcd;
  4655. }else{
  4656. s->avctx->time_base= (AVRational){1001, 30000};
  4657. }
  4658. }
  4659. if(s->custom_pcf){
  4660. skip_bits(&s->gb, 2); //extended Temporal reference
  4661. }
  4662. if (ufep) {
  4663. if (s->umvplus) {
  4664. if(get_bits1(&s->gb)==0) /* Unlimited Unrestricted Motion Vectors Indicator (UUI) */
  4665. skip_bits1(&s->gb);
  4666. }
  4667. if(s->h263_slice_structured){
  4668. if (get_bits1(&s->gb) != 0) {
  4669. av_log(s->avctx, AV_LOG_ERROR, "rectangular slices not supported\n");
  4670. }
  4671. if (get_bits1(&s->gb) != 0) {
  4672. av_log(s->avctx, AV_LOG_ERROR, "unordered slices not supported\n");
  4673. }
  4674. }
  4675. }
  4676. s->qscale = get_bits(&s->gb, 5);
  4677. }
  4678. s->mb_width = (s->width + 15) / 16;
  4679. s->mb_height = (s->height + 15) / 16;
  4680. s->mb_num = s->mb_width * s->mb_height;
  4681. if (s->pb_frame) {
  4682. skip_bits(&s->gb, 3); /* Temporal reference for B-pictures */
  4683. if (s->custom_pcf)
  4684. skip_bits(&s->gb, 2); //extended Temporal reference
  4685. skip_bits(&s->gb, 2); /* Quantization information for B-pictures */
  4686. }
  4687. /* PEI */
  4688. while (get_bits1(&s->gb) != 0) {
  4689. skip_bits(&s->gb, 8);
  4690. }
  4691. if(s->h263_slice_structured){
  4692. if (get_bits1(&s->gb) != 1) {
  4693. av_log(s->avctx, AV_LOG_ERROR, "SEPB1 marker missing\n");
  4694. return -1;
  4695. }
  4696. ff_h263_decode_mba(s);
  4697. if (get_bits1(&s->gb) != 1) {
  4698. av_log(s->avctx, AV_LOG_ERROR, "SEPB2 marker missing\n");
  4699. return -1;
  4700. }
  4701. }
  4702. s->f_code = 1;
  4703. if(s->h263_aic){
  4704. s->y_dc_scale_table=
  4705. s->c_dc_scale_table= ff_aic_dc_scale_table;
  4706. }else{
  4707. s->y_dc_scale_table=
  4708. s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
  4709. }
  4710. if(s->avctx->debug&FF_DEBUG_PICT_INFO){
  4711. show_pict_info(s);
  4712. }
  4713. if (s->pict_type == FF_I_TYPE && s->codec_tag == AV_RL32("ZYGO")){
  4714. int i,j;
  4715. for(i=0; i<85; i++) av_log(s->avctx, AV_LOG_DEBUG, "%d", get_bits1(&s->gb));
  4716. av_log(s->avctx, AV_LOG_DEBUG, "\n");
  4717. for(i=0; i<13; i++){
  4718. for(j=0; j<3; j++){
  4719. int v= get_bits(&s->gb, 8);
  4720. v |= get_sbits(&s->gb, 8)<<8;
  4721. av_log(s->avctx, AV_LOG_DEBUG, " %5d", v);
  4722. }
  4723. av_log(s->avctx, AV_LOG_DEBUG, "\n");
  4724. }
  4725. for(i=0; i<50; i++) av_log(s->avctx, AV_LOG_DEBUG, "%d", get_bits1(&s->gb));
  4726. }
  4727. return 0;
  4728. }
  4729. static int mpeg4_decode_gop_header(MpegEncContext * s, GetBitContext *gb){
  4730. int hours, minutes, seconds;
  4731. hours= get_bits(gb, 5);
  4732. minutes= get_bits(gb, 6);
  4733. skip_bits1(gb);
  4734. seconds= get_bits(gb, 6);
  4735. s->time_base= seconds + 60*(minutes + 60*hours);
  4736. skip_bits1(gb);
  4737. skip_bits1(gb);
  4738. return 0;
  4739. }
  4740. static int decode_vol_header(MpegEncContext *s, GetBitContext *gb){
  4741. int width, height, vo_ver_id;
  4742. /* vol header */
  4743. skip_bits(gb, 1); /* random access */
  4744. s->vo_type= get_bits(gb, 8);
  4745. if (get_bits1(gb) != 0) { /* is_ol_id */
  4746. vo_ver_id = get_bits(gb, 4); /* vo_ver_id */
  4747. skip_bits(gb, 3); /* vo_priority */
  4748. } else {
  4749. vo_ver_id = 1;
  4750. }
  4751. s->aspect_ratio_info= get_bits(gb, 4);
  4752. if(s->aspect_ratio_info == FF_ASPECT_EXTENDED){
  4753. s->avctx->sample_aspect_ratio.num= get_bits(gb, 8); // par_width
  4754. s->avctx->sample_aspect_ratio.den= get_bits(gb, 8); // par_height
  4755. }else{
  4756. s->avctx->sample_aspect_ratio= pixel_aspect[s->aspect_ratio_info];
  4757. }
  4758. if ((s->vol_control_parameters=get_bits1(gb))) { /* vol control parameter */
  4759. int chroma_format= get_bits(gb, 2);
  4760. if(chroma_format!=CHROMA_420){
  4761. av_log(s->avctx, AV_LOG_ERROR, "illegal chroma format\n");
  4762. }
  4763. s->low_delay= get_bits1(gb);
  4764. if(get_bits1(gb)){ /* vbv parameters */
  4765. get_bits(gb, 15); /* first_half_bitrate */
  4766. skip_bits1(gb); /* marker */
  4767. get_bits(gb, 15); /* latter_half_bitrate */
  4768. skip_bits1(gb); /* marker */
  4769. get_bits(gb, 15); /* first_half_vbv_buffer_size */
  4770. skip_bits1(gb); /* marker */
  4771. get_bits(gb, 3); /* latter_half_vbv_buffer_size */
  4772. get_bits(gb, 11); /* first_half_vbv_occupancy */
  4773. skip_bits1(gb); /* marker */
  4774. get_bits(gb, 15); /* latter_half_vbv_occupancy */
  4775. skip_bits1(gb); /* marker */
  4776. }
  4777. }else{
  4778. // set low delay flag only once the smartest? low delay detection won't be overriden
  4779. if(s->picture_number==0)
  4780. s->low_delay=0;
  4781. }
  4782. s->shape = get_bits(gb, 2); /* vol shape */
  4783. if(s->shape != RECT_SHAPE) av_log(s->avctx, AV_LOG_ERROR, "only rectangular vol supported\n");
  4784. if(s->shape == GRAY_SHAPE && vo_ver_id != 1){
  4785. av_log(s->avctx, AV_LOG_ERROR, "Gray shape not supported\n");
  4786. skip_bits(gb, 4); //video_object_layer_shape_extension
  4787. }
  4788. check_marker(gb, "before time_increment_resolution");
  4789. s->avctx->time_base.den = get_bits(gb, 16);
  4790. if(!s->avctx->time_base.den){
  4791. av_log(s->avctx, AV_LOG_ERROR, "time_base.den==0\n");
  4792. return -1;
  4793. }
  4794. s->time_increment_bits = av_log2(s->avctx->time_base.den - 1) + 1;
  4795. if (s->time_increment_bits < 1)
  4796. s->time_increment_bits = 1;
  4797. check_marker(gb, "before fixed_vop_rate");
  4798. if (get_bits1(gb) != 0) { /* fixed_vop_rate */
  4799. s->avctx->time_base.num = get_bits(gb, s->time_increment_bits);
  4800. }else
  4801. s->avctx->time_base.num = 1;
  4802. s->t_frame=0;
  4803. if (s->shape != BIN_ONLY_SHAPE) {
  4804. if (s->shape == RECT_SHAPE) {
  4805. skip_bits1(gb); /* marker */
  4806. width = get_bits(gb, 13);
  4807. skip_bits1(gb); /* marker */
  4808. height = get_bits(gb, 13);
  4809. skip_bits1(gb); /* marker */
  4810. if(width && height && !(s->width && s->codec_tag == AV_RL32("MP4S"))){ /* they should be non zero but who knows ... */
  4811. s->width = width;
  4812. s->height = height;
  4813. }
  4814. }
  4815. s->progressive_sequence=
  4816. s->progressive_frame= get_bits1(gb)^1;
  4817. s->interlaced_dct=0;
  4818. if(!get_bits1(gb) && (s->avctx->debug & FF_DEBUG_PICT_INFO))
  4819. av_log(s->avctx, AV_LOG_INFO, "MPEG4 OBMC not supported (very likely buggy encoder)\n"); /* OBMC Disable */
  4820. if (vo_ver_id == 1) {
  4821. s->vol_sprite_usage = get_bits1(gb); /* vol_sprite_usage */
  4822. } else {
  4823. s->vol_sprite_usage = get_bits(gb, 2); /* vol_sprite_usage */
  4824. }
  4825. if(s->vol_sprite_usage==STATIC_SPRITE) av_log(s->avctx, AV_LOG_ERROR, "Static Sprites not supported\n");
  4826. if(s->vol_sprite_usage==STATIC_SPRITE || s->vol_sprite_usage==GMC_SPRITE){
  4827. if(s->vol_sprite_usage==STATIC_SPRITE){
  4828. s->sprite_width = get_bits(gb, 13);
  4829. skip_bits1(gb); /* marker */
  4830. s->sprite_height= get_bits(gb, 13);
  4831. skip_bits1(gb); /* marker */
  4832. s->sprite_left = get_bits(gb, 13);
  4833. skip_bits1(gb); /* marker */
  4834. s->sprite_top = get_bits(gb, 13);
  4835. skip_bits1(gb); /* marker */
  4836. }
  4837. s->num_sprite_warping_points= get_bits(gb, 6);
  4838. if(s->num_sprite_warping_points > 3){
  4839. av_log(s->avctx, AV_LOG_ERROR, "%d sprite_warping_points\n", s->num_sprite_warping_points);
  4840. s->num_sprite_warping_points= 0;
  4841. return -1;
  4842. }
  4843. s->sprite_warping_accuracy = get_bits(gb, 2);
  4844. s->sprite_brightness_change= get_bits1(gb);
  4845. if(s->vol_sprite_usage==STATIC_SPRITE)
  4846. s->low_latency_sprite= get_bits1(gb);
  4847. }
  4848. // FIXME sadct disable bit if verid!=1 && shape not rect
  4849. if (get_bits1(gb) == 1) { /* not_8_bit */
  4850. s->quant_precision = get_bits(gb, 4); /* quant_precision */
  4851. if(get_bits(gb, 4)!=8) av_log(s->avctx, AV_LOG_ERROR, "N-bit not supported\n"); /* bits_per_pixel */
  4852. if(s->quant_precision!=5) av_log(s->avctx, AV_LOG_ERROR, "quant precision %d\n", s->quant_precision);
  4853. } else {
  4854. s->quant_precision = 5;
  4855. }
  4856. // FIXME a bunch of grayscale shape things
  4857. if((s->mpeg_quant=get_bits1(gb))){ /* vol_quant_type */
  4858. int i, v;
  4859. /* load default matrixes */
  4860. for(i=0; i<64; i++){
  4861. int j= s->dsp.idct_permutation[i];
  4862. v= ff_mpeg4_default_intra_matrix[i];
  4863. s->intra_matrix[j]= v;
  4864. s->chroma_intra_matrix[j]= v;
  4865. v= ff_mpeg4_default_non_intra_matrix[i];
  4866. s->inter_matrix[j]= v;
  4867. s->chroma_inter_matrix[j]= v;
  4868. }
  4869. /* load custom intra matrix */
  4870. if(get_bits1(gb)){
  4871. int last=0;
  4872. for(i=0; i<64; i++){
  4873. int j;
  4874. v= get_bits(gb, 8);
  4875. if(v==0) break;
  4876. last= v;
  4877. j= s->dsp.idct_permutation[ ff_zigzag_direct[i] ];
  4878. s->intra_matrix[j]= v;
  4879. s->chroma_intra_matrix[j]= v;
  4880. }
  4881. /* replicate last value */
  4882. for(; i<64; i++){
  4883. int j= s->dsp.idct_permutation[ ff_zigzag_direct[i] ];
  4884. s->intra_matrix[j]= last;
  4885. s->chroma_intra_matrix[j]= last;
  4886. }
  4887. }
  4888. /* load custom non intra matrix */
  4889. if(get_bits1(gb)){
  4890. int last=0;
  4891. for(i=0; i<64; i++){
  4892. int j;
  4893. v= get_bits(gb, 8);
  4894. if(v==0) break;
  4895. last= v;
  4896. j= s->dsp.idct_permutation[ ff_zigzag_direct[i] ];
  4897. s->inter_matrix[j]= v;
  4898. s->chroma_inter_matrix[j]= v;
  4899. }
  4900. /* replicate last value */
  4901. for(; i<64; i++){
  4902. int j= s->dsp.idct_permutation[ ff_zigzag_direct[i] ];
  4903. s->inter_matrix[j]= last;
  4904. s->chroma_inter_matrix[j]= last;
  4905. }
  4906. }
  4907. // FIXME a bunch of grayscale shape things
  4908. }
  4909. if(vo_ver_id != 1)
  4910. s->quarter_sample= get_bits1(gb);
  4911. else s->quarter_sample=0;
  4912. if(!get_bits1(gb)){
  4913. int pos= get_bits_count(gb);
  4914. int estimation_method= get_bits(gb, 2);
  4915. if(estimation_method<2){
  4916. if(!get_bits1(gb)){
  4917. s->cplx_estimation_trash_i += 8*get_bits1(gb); //opaque
  4918. s->cplx_estimation_trash_i += 8*get_bits1(gb); //transparent
  4919. s->cplx_estimation_trash_i += 8*get_bits1(gb); //intra_cae
  4920. s->cplx_estimation_trash_i += 8*get_bits1(gb); //inter_cae
  4921. s->cplx_estimation_trash_i += 8*get_bits1(gb); //no_update
  4922. s->cplx_estimation_trash_i += 8*get_bits1(gb); //upampling
  4923. }
  4924. if(!get_bits1(gb)){
  4925. s->cplx_estimation_trash_i += 8*get_bits1(gb); //intra_blocks
  4926. s->cplx_estimation_trash_p += 8*get_bits1(gb); //inter_blocks
  4927. s->cplx_estimation_trash_p += 8*get_bits1(gb); //inter4v_blocks
  4928. s->cplx_estimation_trash_i += 8*get_bits1(gb); //not coded blocks
  4929. }
  4930. if(!check_marker(gb, "in complexity estimation part 1")){
  4931. skip_bits_long(gb, pos - get_bits_count(gb));
  4932. goto no_cplx_est;
  4933. }
  4934. if(!get_bits1(gb)){
  4935. s->cplx_estimation_trash_i += 8*get_bits1(gb); //dct_coeffs
  4936. s->cplx_estimation_trash_i += 8*get_bits1(gb); //dct_lines
  4937. s->cplx_estimation_trash_i += 8*get_bits1(gb); //vlc_syms
  4938. s->cplx_estimation_trash_i += 4*get_bits1(gb); //vlc_bits
  4939. }
  4940. if(!get_bits1(gb)){
  4941. s->cplx_estimation_trash_p += 8*get_bits1(gb); //apm
  4942. s->cplx_estimation_trash_p += 8*get_bits1(gb); //npm
  4943. s->cplx_estimation_trash_b += 8*get_bits1(gb); //interpolate_mc_q
  4944. s->cplx_estimation_trash_p += 8*get_bits1(gb); //forwback_mc_q
  4945. s->cplx_estimation_trash_p += 8*get_bits1(gb); //halfpel2
  4946. s->cplx_estimation_trash_p += 8*get_bits1(gb); //halfpel4
  4947. }
  4948. if(!check_marker(gb, "in complexity estimation part 2")){
  4949. skip_bits_long(gb, pos - get_bits_count(gb));
  4950. goto no_cplx_est;
  4951. }
  4952. if(estimation_method==1){
  4953. s->cplx_estimation_trash_i += 8*get_bits1(gb); //sadct
  4954. s->cplx_estimation_trash_p += 8*get_bits1(gb); //qpel
  4955. }
  4956. }else
  4957. av_log(s->avctx, AV_LOG_ERROR, "Invalid Complexity estimation method %d\n", estimation_method);
  4958. }else{
  4959. no_cplx_est:
  4960. s->cplx_estimation_trash_i=
  4961. s->cplx_estimation_trash_p=
  4962. s->cplx_estimation_trash_b= 0;
  4963. }
  4964. s->resync_marker= !get_bits1(gb); /* resync_marker_disabled */
  4965. s->data_partitioning= get_bits1(gb);
  4966. if(s->data_partitioning){
  4967. s->rvlc= get_bits1(gb);
  4968. }
  4969. if(vo_ver_id != 1) {
  4970. s->new_pred= get_bits1(gb);
  4971. if(s->new_pred){
  4972. av_log(s->avctx, AV_LOG_ERROR, "new pred not supported\n");
  4973. skip_bits(gb, 2); /* requested upstream message type */
  4974. skip_bits1(gb); /* newpred segment type */
  4975. }
  4976. s->reduced_res_vop= get_bits1(gb);
  4977. if(s->reduced_res_vop) av_log(s->avctx, AV_LOG_ERROR, "reduced resolution VOP not supported\n");
  4978. }
  4979. else{
  4980. s->new_pred=0;
  4981. s->reduced_res_vop= 0;
  4982. }
  4983. s->scalability= get_bits1(gb);
  4984. if (s->scalability) {
  4985. GetBitContext bak= *gb;
  4986. int ref_layer_id;
  4987. int ref_layer_sampling_dir;
  4988. int h_sampling_factor_n;
  4989. int h_sampling_factor_m;
  4990. int v_sampling_factor_n;
  4991. int v_sampling_factor_m;
  4992. s->hierachy_type= get_bits1(gb);
  4993. ref_layer_id= get_bits(gb, 4);
  4994. ref_layer_sampling_dir= get_bits1(gb);
  4995. h_sampling_factor_n= get_bits(gb, 5);
  4996. h_sampling_factor_m= get_bits(gb, 5);
  4997. v_sampling_factor_n= get_bits(gb, 5);
  4998. v_sampling_factor_m= get_bits(gb, 5);
  4999. s->enhancement_type= get_bits1(gb);
  5000. if( h_sampling_factor_n==0 || h_sampling_factor_m==0
  5001. || v_sampling_factor_n==0 || v_sampling_factor_m==0){
  5002. s->scalability=0;
  5003. *gb= bak;
  5004. }else
  5005. av_log(s->avctx, AV_LOG_ERROR, "scalability not supported\n");
  5006. // bin shape stuff FIXME
  5007. }
  5008. }
  5009. return 0;
  5010. }
  5011. /**
  5012. * decodes the user data stuff in the header.
  5013. * Also initializes divx/xvid/lavc_version/build.
  5014. */
  5015. static int decode_user_data(MpegEncContext *s, GetBitContext *gb){
  5016. char buf[256];
  5017. int i;
  5018. int e;
  5019. int ver = 0, build = 0, ver2 = 0, ver3 = 0;
  5020. char last;
  5021. for(i=0; i<255 && get_bits_count(gb) < gb->size_in_bits; i++){
  5022. if(show_bits(gb, 23) == 0) break;
  5023. buf[i]= get_bits(gb, 8);
  5024. }
  5025. buf[i]=0;
  5026. /* divx detection */
  5027. e=sscanf(buf, "DivX%dBuild%d%c", &ver, &build, &last);
  5028. if(e<2)
  5029. e=sscanf(buf, "DivX%db%d%c", &ver, &build, &last);
  5030. if(e>=2){
  5031. s->divx_version= ver;
  5032. s->divx_build= build;
  5033. s->divx_packed= e==3 && last=='p';
  5034. if(s->divx_packed && !s->showed_packed_warning) {
  5035. av_log(s->avctx, AV_LOG_WARNING, "Invalid and inefficient vfw-avi packed B frames detected\n");
  5036. s->showed_packed_warning=1;
  5037. }
  5038. }
  5039. /* ffmpeg detection */
  5040. e=sscanf(buf, "FFmpe%*[^b]b%d", &build)+3;
  5041. if(e!=4)
  5042. e=sscanf(buf, "FFmpeg v%d.%d.%d / libavcodec build: %d", &ver, &ver2, &ver3, &build);
  5043. if(e!=4){
  5044. e=sscanf(buf, "Lavc%d.%d.%d", &ver, &ver2, &ver3)+1;
  5045. if (e>1)
  5046. build= (ver<<16) + (ver2<<8) + ver3;
  5047. }
  5048. if(e!=4){
  5049. if(strcmp(buf, "ffmpeg")==0){
  5050. s->lavc_build= 4600;
  5051. }
  5052. }
  5053. if(e==4){
  5054. s->lavc_build= build;
  5055. }
  5056. /* Xvid detection */
  5057. e=sscanf(buf, "XviD%d", &build);
  5058. if(e==1){
  5059. s->xvid_build= build;
  5060. }
  5061. return 0;
  5062. }
  5063. static int decode_vop_header(MpegEncContext *s, GetBitContext *gb){
  5064. int time_incr, time_increment;
  5065. s->pict_type = get_bits(gb, 2) + FF_I_TYPE; /* pict type: I = 0 , P = 1 */
  5066. if(s->pict_type==FF_B_TYPE && s->low_delay && s->vol_control_parameters==0 && !(s->flags & CODEC_FLAG_LOW_DELAY)){
  5067. av_log(s->avctx, AV_LOG_ERROR, "low_delay flag incorrectly, clearing it\n");
  5068. s->low_delay=0;
  5069. }
  5070. s->partitioned_frame= s->data_partitioning && s->pict_type!=FF_B_TYPE;
  5071. if(s->partitioned_frame)
  5072. s->decode_mb= mpeg4_decode_partitioned_mb;
  5073. else
  5074. s->decode_mb= ff_mpeg4_decode_mb;
  5075. time_incr=0;
  5076. while (get_bits1(gb) != 0)
  5077. time_incr++;
  5078. check_marker(gb, "before time_increment");
  5079. if(s->time_increment_bits==0 || !(show_bits(gb, s->time_increment_bits+1)&1)){
  5080. av_log(s->avctx, AV_LOG_ERROR, "hmm, seems the headers are not complete, trying to guess time_increment_bits\n");
  5081. for(s->time_increment_bits=1 ;s->time_increment_bits<16; s->time_increment_bits++){
  5082. if ( s->pict_type == FF_P_TYPE
  5083. || (s->pict_type == FF_S_TYPE && s->vol_sprite_usage==GMC_SPRITE)) {
  5084. if((show_bits(gb, s->time_increment_bits+6)&0x37) == 0x30) break;
  5085. }else
  5086. if((show_bits(gb, s->time_increment_bits+5)&0x1F) == 0x18) break;
  5087. }
  5088. av_log(s->avctx, AV_LOG_ERROR, "my guess is %d bits ;)\n",s->time_increment_bits);
  5089. }
  5090. if(IS_3IV1) time_increment= get_bits1(gb); //FIXME investigate further
  5091. else time_increment= get_bits(gb, s->time_increment_bits);
  5092. if(s->pict_type!=FF_B_TYPE){
  5093. s->last_time_base= s->time_base;
  5094. s->time_base+= time_incr;
  5095. s->time= s->time_base*s->avctx->time_base.den + time_increment;
  5096. if(s->workaround_bugs&FF_BUG_UMP4){
  5097. if(s->time < s->last_non_b_time){
  5098. s->time_base++;
  5099. s->time+= s->avctx->time_base.den;
  5100. }
  5101. }
  5102. s->pp_time= s->time - s->last_non_b_time;
  5103. s->last_non_b_time= s->time;
  5104. }else{
  5105. s->time= (s->last_time_base + time_incr)*s->avctx->time_base.den + time_increment;
  5106. s->pb_time= s->pp_time - (s->last_non_b_time - s->time);
  5107. if(s->pp_time <=s->pb_time || s->pp_time <= s->pp_time - s->pb_time || s->pp_time<=0){
  5108. return FRAME_SKIPPED;
  5109. }
  5110. ff_mpeg4_init_direct_mv(s);
  5111. if(s->t_frame==0) s->t_frame= s->pb_time;
  5112. if(s->t_frame==0) s->t_frame=1; // 1/0 protection
  5113. s->pp_field_time= ( ROUNDED_DIV(s->last_non_b_time, s->t_frame)
  5114. - ROUNDED_DIV(s->last_non_b_time - s->pp_time, s->t_frame))*2;
  5115. s->pb_field_time= ( ROUNDED_DIV(s->time, s->t_frame)
  5116. - ROUNDED_DIV(s->last_non_b_time - s->pp_time, s->t_frame))*2;
  5117. if(!s->progressive_sequence){
  5118. if(s->pp_field_time <= s->pb_field_time || s->pb_field_time <= 1)
  5119. return FRAME_SKIPPED;
  5120. }
  5121. }
  5122. if(s->avctx->time_base.num)
  5123. s->current_picture_ptr->pts= (s->time + s->avctx->time_base.num/2) / s->avctx->time_base.num;
  5124. else
  5125. s->current_picture_ptr->pts= AV_NOPTS_VALUE;
  5126. if(s->avctx->debug&FF_DEBUG_PTS)
  5127. av_log(s->avctx, AV_LOG_DEBUG, "MPEG4 PTS: %"PRId64"\n", s->current_picture_ptr->pts);
  5128. check_marker(gb, "before vop_coded");
  5129. /* vop coded */
  5130. if (get_bits1(gb) != 1){
  5131. if(s->avctx->debug&FF_DEBUG_PICT_INFO)
  5132. av_log(s->avctx, AV_LOG_ERROR, "vop not coded\n");
  5133. return FRAME_SKIPPED;
  5134. }
  5135. if (s->shape != BIN_ONLY_SHAPE && ( s->pict_type == FF_P_TYPE
  5136. || (s->pict_type == FF_S_TYPE && s->vol_sprite_usage==GMC_SPRITE))) {
  5137. /* rounding type for motion estimation */
  5138. s->no_rounding = get_bits1(gb);
  5139. } else {
  5140. s->no_rounding = 0;
  5141. }
  5142. //FIXME reduced res stuff
  5143. if (s->shape != RECT_SHAPE) {
  5144. if (s->vol_sprite_usage != 1 || s->pict_type != FF_I_TYPE) {
  5145. int width, height, hor_spat_ref, ver_spat_ref;
  5146. width = get_bits(gb, 13);
  5147. skip_bits1(gb); /* marker */
  5148. height = get_bits(gb, 13);
  5149. skip_bits1(gb); /* marker */
  5150. hor_spat_ref = get_bits(gb, 13); /* hor_spat_ref */
  5151. skip_bits1(gb); /* marker */
  5152. ver_spat_ref = get_bits(gb, 13); /* ver_spat_ref */
  5153. }
  5154. skip_bits1(gb); /* change_CR_disable */
  5155. if (get_bits1(gb) != 0) {
  5156. skip_bits(gb, 8); /* constant_alpha_value */
  5157. }
  5158. }
  5159. //FIXME complexity estimation stuff
  5160. if (s->shape != BIN_ONLY_SHAPE) {
  5161. skip_bits_long(gb, s->cplx_estimation_trash_i);
  5162. if(s->pict_type != FF_I_TYPE)
  5163. skip_bits_long(gb, s->cplx_estimation_trash_p);
  5164. if(s->pict_type == FF_B_TYPE)
  5165. skip_bits_long(gb, s->cplx_estimation_trash_b);
  5166. s->intra_dc_threshold= mpeg4_dc_threshold[ get_bits(gb, 3) ];
  5167. if(!s->progressive_sequence){
  5168. s->top_field_first= get_bits1(gb);
  5169. s->alternate_scan= get_bits1(gb);
  5170. }else
  5171. s->alternate_scan= 0;
  5172. }
  5173. if(s->alternate_scan){
  5174. ff_init_scantable(s->dsp.idct_permutation, &s->inter_scantable , ff_alternate_vertical_scan);
  5175. ff_init_scantable(s->dsp.idct_permutation, &s->intra_scantable , ff_alternate_vertical_scan);
  5176. ff_init_scantable(s->dsp.idct_permutation, &s->intra_h_scantable, ff_alternate_vertical_scan);
  5177. ff_init_scantable(s->dsp.idct_permutation, &s->intra_v_scantable, ff_alternate_vertical_scan);
  5178. } else{
  5179. ff_init_scantable(s->dsp.idct_permutation, &s->inter_scantable , ff_zigzag_direct);
  5180. ff_init_scantable(s->dsp.idct_permutation, &s->intra_scantable , ff_zigzag_direct);
  5181. ff_init_scantable(s->dsp.idct_permutation, &s->intra_h_scantable, ff_alternate_horizontal_scan);
  5182. ff_init_scantable(s->dsp.idct_permutation, &s->intra_v_scantable, ff_alternate_vertical_scan);
  5183. }
  5184. if(s->pict_type == FF_S_TYPE && (s->vol_sprite_usage==STATIC_SPRITE || s->vol_sprite_usage==GMC_SPRITE)){
  5185. mpeg4_decode_sprite_trajectory(s, gb);
  5186. if(s->sprite_brightness_change) av_log(s->avctx, AV_LOG_ERROR, "sprite_brightness_change not supported\n");
  5187. if(s->vol_sprite_usage==STATIC_SPRITE) av_log(s->avctx, AV_LOG_ERROR, "static sprite not supported\n");
  5188. }
  5189. if (s->shape != BIN_ONLY_SHAPE) {
  5190. s->chroma_qscale= s->qscale = get_bits(gb, s->quant_precision);
  5191. if(s->qscale==0){
  5192. av_log(s->avctx, AV_LOG_ERROR, "Error, header damaged or not MPEG4 header (qscale=0)\n");
  5193. return -1; // makes no sense to continue, as there is nothing left from the image then
  5194. }
  5195. if (s->pict_type != FF_I_TYPE) {
  5196. s->f_code = get_bits(gb, 3); /* fcode_for */
  5197. if(s->f_code==0){
  5198. av_log(s->avctx, AV_LOG_ERROR, "Error, header damaged or not MPEG4 header (f_code=0)\n");
  5199. return -1; // makes no sense to continue, as the MV decoding will break very quickly
  5200. }
  5201. }else
  5202. s->f_code=1;
  5203. if (s->pict_type == FF_B_TYPE) {
  5204. s->b_code = get_bits(gb, 3);
  5205. }else
  5206. s->b_code=1;
  5207. if(s->avctx->debug&FF_DEBUG_PICT_INFO){
  5208. av_log(s->avctx, AV_LOG_DEBUG, "qp:%d fc:%d,%d %s size:%d pro:%d alt:%d top:%d %spel part:%d resync:%d w:%d a:%d rnd:%d vot:%d%s dc:%d ce:%d/%d/%d\n",
  5209. s->qscale, s->f_code, s->b_code,
  5210. s->pict_type == FF_I_TYPE ? "I" : (s->pict_type == FF_P_TYPE ? "P" : (s->pict_type == FF_B_TYPE ? "B" : "S")),
  5211. gb->size_in_bits,s->progressive_sequence, s->alternate_scan, s->top_field_first,
  5212. s->quarter_sample ? "q" : "h", s->data_partitioning, s->resync_marker, s->num_sprite_warping_points,
  5213. s->sprite_warping_accuracy, 1-s->no_rounding, s->vo_type, s->vol_control_parameters ? " VOLC" : " ", s->intra_dc_threshold, s->cplx_estimation_trash_i, s->cplx_estimation_trash_p, s->cplx_estimation_trash_b);
  5214. }
  5215. if(!s->scalability){
  5216. if (s->shape!=RECT_SHAPE && s->pict_type!=FF_I_TYPE) {
  5217. skip_bits1(gb); // vop shape coding type
  5218. }
  5219. }else{
  5220. if(s->enhancement_type){
  5221. int load_backward_shape= get_bits1(gb);
  5222. if(load_backward_shape){
  5223. av_log(s->avctx, AV_LOG_ERROR, "load backward shape isn't supported\n");
  5224. }
  5225. }
  5226. skip_bits(gb, 2); //ref_select_code
  5227. }
  5228. }
  5229. /* detect buggy encoders which don't set the low_delay flag (divx4/xvid/opendivx)*/
  5230. // note we cannot detect divx5 without b-frames easily (although it's buggy too)
  5231. if(s->vo_type==0 && s->vol_control_parameters==0 && s->divx_version==0 && s->picture_number==0){
  5232. av_log(s->avctx, AV_LOG_ERROR, "looks like this file was encoded with (divx4/(old)xvid/opendivx) -> forcing low_delay flag\n");
  5233. s->low_delay=1;
  5234. }
  5235. s->picture_number++; // better than pic number==0 always ;)
  5236. s->y_dc_scale_table= ff_mpeg4_y_dc_scale_table; //FIXME add short header support
  5237. s->c_dc_scale_table= ff_mpeg4_c_dc_scale_table;
  5238. if(s->workaround_bugs&FF_BUG_EDGE){
  5239. s->h_edge_pos= s->width;
  5240. s->v_edge_pos= s->height;
  5241. }
  5242. return 0;
  5243. }
  5244. /**
  5245. * decode mpeg4 headers
  5246. * @return <0 if no VOP found (or a damaged one)
  5247. * FRAME_SKIPPED if a not coded VOP is found
  5248. * 0 if a VOP is found
  5249. */
  5250. int ff_mpeg4_decode_picture_header(MpegEncContext * s, GetBitContext *gb)
  5251. {
  5252. int startcode, v;
  5253. /* search next start code */
  5254. align_get_bits(gb);
  5255. if(s->codec_tag == AV_RL32("WV1F") && show_bits(gb, 24) == 0x575630){
  5256. skip_bits(gb, 24);
  5257. if(get_bits(gb, 8) == 0xF0)
  5258. goto end;
  5259. }
  5260. startcode = 0xff;
  5261. for(;;) {
  5262. if(get_bits_count(gb) >= gb->size_in_bits){
  5263. if(gb->size_in_bits==8 && (s->divx_version || s->xvid_build)){
  5264. av_log(s->avctx, AV_LOG_ERROR, "frame skip %d\n", gb->size_in_bits);
  5265. return FRAME_SKIPPED; //divx bug
  5266. }else
  5267. return -1; //end of stream
  5268. }
  5269. /* use the bits after the test */
  5270. v = get_bits(gb, 8);
  5271. startcode = ((startcode << 8) | v) & 0xffffffff;
  5272. if((startcode&0xFFFFFF00) != 0x100)
  5273. continue; //no startcode
  5274. if(s->avctx->debug&FF_DEBUG_STARTCODE){
  5275. av_log(s->avctx, AV_LOG_DEBUG, "startcode: %3X ", startcode);
  5276. if (startcode<=0x11F) av_log(s->avctx, AV_LOG_DEBUG, "Video Object Start");
  5277. else if(startcode<=0x12F) av_log(s->avctx, AV_LOG_DEBUG, "Video Object Layer Start");
  5278. else if(startcode<=0x13F) av_log(s->avctx, AV_LOG_DEBUG, "Reserved");
  5279. else if(startcode<=0x15F) av_log(s->avctx, AV_LOG_DEBUG, "FGS bp start");
  5280. else if(startcode<=0x1AF) av_log(s->avctx, AV_LOG_DEBUG, "Reserved");
  5281. else if(startcode==0x1B0) av_log(s->avctx, AV_LOG_DEBUG, "Visual Object Seq Start");
  5282. else if(startcode==0x1B1) av_log(s->avctx, AV_LOG_DEBUG, "Visual Object Seq End");
  5283. else if(startcode==0x1B2) av_log(s->avctx, AV_LOG_DEBUG, "User Data");
  5284. else if(startcode==0x1B3) av_log(s->avctx, AV_LOG_DEBUG, "Group of VOP start");
  5285. else if(startcode==0x1B4) av_log(s->avctx, AV_LOG_DEBUG, "Video Session Error");
  5286. else if(startcode==0x1B5) av_log(s->avctx, AV_LOG_DEBUG, "Visual Object Start");
  5287. else if(startcode==0x1B6) av_log(s->avctx, AV_LOG_DEBUG, "Video Object Plane start");
  5288. else if(startcode==0x1B7) av_log(s->avctx, AV_LOG_DEBUG, "slice start");
  5289. else if(startcode==0x1B8) av_log(s->avctx, AV_LOG_DEBUG, "extension start");
  5290. else if(startcode==0x1B9) av_log(s->avctx, AV_LOG_DEBUG, "fgs start");
  5291. else if(startcode==0x1BA) av_log(s->avctx, AV_LOG_DEBUG, "FBA Object start");
  5292. else if(startcode==0x1BB) av_log(s->avctx, AV_LOG_DEBUG, "FBA Object Plane start");
  5293. else if(startcode==0x1BC) av_log(s->avctx, AV_LOG_DEBUG, "Mesh Object start");
  5294. else if(startcode==0x1BD) av_log(s->avctx, AV_LOG_DEBUG, "Mesh Object Plane start");
  5295. else if(startcode==0x1BE) av_log(s->avctx, AV_LOG_DEBUG, "Still Texture Object start");
  5296. else if(startcode==0x1BF) av_log(s->avctx, AV_LOG_DEBUG, "Texture Spatial Layer start");
  5297. else if(startcode==0x1C0) av_log(s->avctx, AV_LOG_DEBUG, "Texture SNR Layer start");
  5298. else if(startcode==0x1C1) av_log(s->avctx, AV_LOG_DEBUG, "Texture Tile start");
  5299. else if(startcode==0x1C2) av_log(s->avctx, AV_LOG_DEBUG, "Texture Shape Layer start");
  5300. else if(startcode==0x1C3) av_log(s->avctx, AV_LOG_DEBUG, "stuffing start");
  5301. else if(startcode<=0x1C5) av_log(s->avctx, AV_LOG_DEBUG, "reserved");
  5302. else if(startcode<=0x1FF) av_log(s->avctx, AV_LOG_DEBUG, "System start");
  5303. av_log(s->avctx, AV_LOG_DEBUG, " at %d\n", get_bits_count(gb));
  5304. }
  5305. if(startcode >= 0x120 && startcode <= 0x12F){
  5306. if(decode_vol_header(s, gb) < 0)
  5307. return -1;
  5308. }
  5309. else if(startcode == USER_DATA_STARTCODE){
  5310. decode_user_data(s, gb);
  5311. }
  5312. else if(startcode == GOP_STARTCODE){
  5313. mpeg4_decode_gop_header(s, gb);
  5314. }
  5315. else if(startcode == VOP_STARTCODE){
  5316. break;
  5317. }
  5318. align_get_bits(gb);
  5319. startcode = 0xff;
  5320. }
  5321. end:
  5322. if(s->flags& CODEC_FLAG_LOW_DELAY)
  5323. s->low_delay=1;
  5324. s->avctx->has_b_frames= !s->low_delay;
  5325. return decode_vop_header(s, gb);
  5326. }
  5327. /* don't understand why they choose a different header ! */
  5328. int intel_h263_decode_picture_header(MpegEncContext *s)
  5329. {
  5330. int format;
  5331. /* picture header */
  5332. if (get_bits_long(&s->gb, 22) != 0x20) {
  5333. av_log(s->avctx, AV_LOG_ERROR, "Bad picture start code\n");
  5334. return -1;
  5335. }
  5336. s->picture_number = get_bits(&s->gb, 8); /* picture timestamp */
  5337. if (get_bits1(&s->gb) != 1) {
  5338. av_log(s->avctx, AV_LOG_ERROR, "Bad marker\n");
  5339. return -1; /* marker */
  5340. }
  5341. if (get_bits1(&s->gb) != 0) {
  5342. av_log(s->avctx, AV_LOG_ERROR, "Bad H263 id\n");
  5343. return -1; /* h263 id */
  5344. }
  5345. skip_bits1(&s->gb); /* split screen off */
  5346. skip_bits1(&s->gb); /* camera off */
  5347. skip_bits1(&s->gb); /* freeze picture release off */
  5348. format = get_bits(&s->gb, 3);
  5349. if (format != 7) {
  5350. av_log(s->avctx, AV_LOG_ERROR, "Intel H263 free format not supported\n");
  5351. return -1;
  5352. }
  5353. s->h263_plus = 0;
  5354. s->pict_type = FF_I_TYPE + get_bits1(&s->gb);
  5355. s->unrestricted_mv = get_bits1(&s->gb);
  5356. s->h263_long_vectors = s->unrestricted_mv;
  5357. if (get_bits1(&s->gb) != 0) {
  5358. av_log(s->avctx, AV_LOG_ERROR, "SAC not supported\n");
  5359. return -1; /* SAC: off */
  5360. }
  5361. s->obmc= get_bits1(&s->gb);
  5362. s->pb_frame = get_bits1(&s->gb);
  5363. if(format == 7){
  5364. format = get_bits(&s->gb, 3);
  5365. if(format == 0 || format == 7){
  5366. av_log(s->avctx, AV_LOG_ERROR, "Wrong Intel H263 format\n");
  5367. return -1;
  5368. }
  5369. if(get_bits(&s->gb, 2))
  5370. av_log(s->avctx, AV_LOG_ERROR, "Bad value for reserved field\n");
  5371. s->loop_filter = get_bits1(&s->gb);
  5372. if(get_bits1(&s->gb))
  5373. av_log(s->avctx, AV_LOG_ERROR, "Bad value for reserved field\n");
  5374. if(get_bits1(&s->gb))
  5375. s->pb_frame = 2;
  5376. if(get_bits(&s->gb, 5))
  5377. av_log(s->avctx, AV_LOG_ERROR, "Bad value for reserved field\n");
  5378. if(get_bits(&s->gb, 5) != 1)
  5379. av_log(s->avctx, AV_LOG_ERROR, "Invalid marker\n");
  5380. }
  5381. if(format == 6){
  5382. int ar = get_bits(&s->gb, 4);
  5383. skip_bits(&s->gb, 9); // display width
  5384. skip_bits1(&s->gb);
  5385. skip_bits(&s->gb, 9); // display height
  5386. if(ar == 15){
  5387. skip_bits(&s->gb, 8); // aspect ratio - width
  5388. skip_bits(&s->gb, 8); // aspect ratio - height
  5389. }
  5390. }
  5391. s->chroma_qscale= s->qscale = get_bits(&s->gb, 5);
  5392. skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */
  5393. if(s->pb_frame){
  5394. skip_bits(&s->gb, 3); //temporal reference for B-frame
  5395. skip_bits(&s->gb, 2); //dbquant
  5396. }
  5397. /* PEI */
  5398. while (get_bits1(&s->gb) != 0) {
  5399. skip_bits(&s->gb, 8);
  5400. }
  5401. s->f_code = 1;
  5402. s->y_dc_scale_table=
  5403. s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
  5404. if(s->avctx->debug&FF_DEBUG_PICT_INFO)
  5405. show_pict_info(s);
  5406. return 0;
  5407. }
  5408. int flv_h263_decode_picture_header(MpegEncContext *s)
  5409. {
  5410. int format, width, height;
  5411. /* picture header */
  5412. if (get_bits_long(&s->gb, 17) != 1) {
  5413. av_log(s->avctx, AV_LOG_ERROR, "Bad picture start code\n");
  5414. return -1;
  5415. }
  5416. format = get_bits(&s->gb, 5);
  5417. if (format != 0 && format != 1) {
  5418. av_log(s->avctx, AV_LOG_ERROR, "Bad picture format\n");
  5419. return -1;
  5420. }
  5421. s->h263_flv = format+1;
  5422. s->picture_number = get_bits(&s->gb, 8); /* picture timestamp */
  5423. format = get_bits(&s->gb, 3);
  5424. switch (format) {
  5425. case 0:
  5426. width = get_bits(&s->gb, 8);
  5427. height = get_bits(&s->gb, 8);
  5428. break;
  5429. case 1:
  5430. width = get_bits(&s->gb, 16);
  5431. height = get_bits(&s->gb, 16);
  5432. break;
  5433. case 2:
  5434. width = 352;
  5435. height = 288;
  5436. break;
  5437. case 3:
  5438. width = 176;
  5439. height = 144;
  5440. break;
  5441. case 4:
  5442. width = 128;
  5443. height = 96;
  5444. break;
  5445. case 5:
  5446. width = 320;
  5447. height = 240;
  5448. break;
  5449. case 6:
  5450. width = 160;
  5451. height = 120;
  5452. break;
  5453. default:
  5454. width = height = 0;
  5455. break;
  5456. }
  5457. if(avcodec_check_dimensions(s->avctx, width, height))
  5458. return -1;
  5459. s->width = width;
  5460. s->height = height;
  5461. s->pict_type = FF_I_TYPE + get_bits(&s->gb, 2);
  5462. s->dropable= s->pict_type > FF_P_TYPE;
  5463. if (s->dropable)
  5464. s->pict_type = FF_P_TYPE;
  5465. skip_bits1(&s->gb); /* deblocking flag */
  5466. s->chroma_qscale= s->qscale = get_bits(&s->gb, 5);
  5467. s->h263_plus = 0;
  5468. s->unrestricted_mv = 1;
  5469. s->h263_long_vectors = 0;
  5470. /* PEI */
  5471. while (get_bits1(&s->gb) != 0) {
  5472. skip_bits(&s->gb, 8);
  5473. }
  5474. s->f_code = 1;
  5475. if(s->avctx->debug & FF_DEBUG_PICT_INFO){
  5476. av_log(s->avctx, AV_LOG_DEBUG, "%c esc_type:%d, qp:%d num:%d\n",
  5477. s->dropable ? 'D' : av_get_pict_type_char(s->pict_type), s->h263_flv-1, s->qscale, s->picture_number);
  5478. }
  5479. s->y_dc_scale_table=
  5480. s->c_dc_scale_table= ff_mpeg1_dc_scale_table;
  5481. return 0;
  5482. }