row.h 186 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309
  1. /*
  2. * Copyright 2011 The LibYuv Project Authors. All rights reserved.
  3. *
  4. * Use of this source code is governed by a BSD-style license
  5. * that can be found in the LICENSE file in the root of the source
  6. * tree. An additional intellectual property rights grant can be found
  7. * in the file PATENTS. All contributing project authors may
  8. * be found in the AUTHORS file in the root of the source tree.
  9. */
  10. #ifndef INCLUDE_LIBYUV_ROW_H_
  11. #define INCLUDE_LIBYUV_ROW_H_
  12. #include <stdlib.h> // For malloc.
  13. #include "libyuv/basic_types.h"
  14. #ifdef __cplusplus
  15. namespace libyuv {
  16. extern "C" {
  17. #endif
  18. #if defined(__pnacl__) || defined(__CLR_VER) || \
  19. (defined(__native_client__) && defined(__x86_64__)) || \
  20. (defined(__i386__) && !defined(__SSE__) && !defined(__clang__))
  21. #define LIBYUV_DISABLE_X86
  22. #endif
  23. #if defined(__native_client__)
  24. #define LIBYUV_DISABLE_NEON
  25. #endif
  26. // MemorySanitizer does not support assembly code yet. http://crbug.com/344505
  27. #if defined(__has_feature)
  28. #if __has_feature(memory_sanitizer)
  29. #define LIBYUV_DISABLE_X86
  30. #endif
  31. #endif
  32. // clang >= 3.5.0 required for Arm64.
  33. #if defined(__clang__) && defined(__aarch64__) && !defined(LIBYUV_DISABLE_NEON)
  34. #if (__clang_major__ < 3) || (__clang_major__ == 3 && (__clang_minor__ < 5))
  35. #define LIBYUV_DISABLE_NEON
  36. #endif // clang >= 3.5
  37. #endif // __clang__
  38. // GCC >= 4.7.0 required for AVX2.
  39. #if defined(__GNUC__) && (defined(__x86_64__) || defined(__i386__))
  40. #if (__GNUC__ > 4) || (__GNUC__ == 4 && (__GNUC_MINOR__ >= 7))
  41. #define GCC_HAS_AVX2 1
  42. #endif // GNUC >= 4.7
  43. #endif // __GNUC__
  44. // clang >= 3.4.0 required for AVX2.
  45. #if defined(__clang__) && (defined(__x86_64__) || defined(__i386__))
  46. #if (__clang_major__ > 3) || (__clang_major__ == 3 && (__clang_minor__ >= 4))
  47. #define CLANG_HAS_AVX2 1
  48. #endif // clang >= 3.4
  49. #endif // __clang__
  50. // clang >= 6.0.0 required for AVX512.
  51. #if defined(__clang__) && (defined(__x86_64__) || defined(__i386__))
  52. // clang in xcode follows a different versioning scheme.
  53. // TODO(fbarchard): fix xcode 9 ios b/789.
  54. #if (__clang_major__ >= 7) && !defined(__APPLE__)
  55. #define CLANG_HAS_AVX512 1
  56. #endif // clang >= 7
  57. #endif // __clang__
  58. // Visual C 2012 required for AVX2.
  59. #if defined(_M_IX86) && !defined(__clang__) && defined(_MSC_VER) && \
  60. _MSC_VER >= 1700
  61. #define VISUALC_HAS_AVX2 1
  62. #endif // VisualStudio >= 2012
  63. // The following are available on all x86 platforms:
  64. #if !defined(LIBYUV_DISABLE_X86) && \
  65. (defined(_M_IX86) || defined(__x86_64__) || defined(__i386__))
  66. // Conversions:
  67. #define HAS_ABGRTOUVROW_SSSE3
  68. #define HAS_ABGRTOYROW_SSSE3
  69. #define HAS_ARGB1555TOARGBROW_SSE2
  70. #define HAS_ARGB4444TOARGBROW_SSE2
  71. #define HAS_ARGBEXTRACTALPHAROW_SSE2
  72. #define HAS_ARGBSETROW_X86
  73. #define HAS_ARGBSHUFFLEROW_SSSE3
  74. #define HAS_ARGBTOARGB1555ROW_SSE2
  75. #define HAS_ARGBTOARGB4444ROW_SSE2
  76. #define HAS_ARGBTORAWROW_SSSE3
  77. #define HAS_ARGBTORGB24ROW_SSSE3
  78. #define HAS_ARGBTORGB565DITHERROW_SSE2
  79. #define HAS_ARGBTORGB565ROW_SSE2
  80. #define HAS_ARGBTOUV444ROW_SSSE3
  81. #define HAS_ARGBTOUVJROW_SSSE3
  82. #define HAS_ARGBTOUVROW_SSSE3
  83. #define HAS_ARGBTOYJROW_SSSE3
  84. #define HAS_ARGBTOYROW_SSSE3
  85. #define HAS_BGRATOUVROW_SSSE3
  86. #define HAS_BGRATOYROW_SSSE3
  87. #define HAS_COPYROW_ERMS
  88. #define HAS_COPYROW_SSE2
  89. #define HAS_H422TOARGBROW_SSSE3
  90. #define HAS_HALFFLOATROW_SSE2
  91. #define HAS_I400TOARGBROW_SSE2
  92. #define HAS_I422TOARGB1555ROW_SSSE3
  93. #define HAS_I422TOARGB4444ROW_SSSE3
  94. #define HAS_I422TOARGBROW_SSSE3
  95. #define HAS_I422TORGB24ROW_SSSE3
  96. #define HAS_I422TORGB565ROW_SSSE3
  97. #define HAS_I422TORGBAROW_SSSE3
  98. #define HAS_I422TOUYVYROW_SSE2
  99. #define HAS_I422TOYUY2ROW_SSE2
  100. #define HAS_I444TOARGBROW_SSSE3
  101. #define HAS_J400TOARGBROW_SSE2
  102. #define HAS_J422TOARGBROW_SSSE3
  103. #define HAS_MERGEUVROW_SSE2
  104. #define HAS_MIRRORROW_SSSE3
  105. #define HAS_MIRRORUVROW_SSSE3
  106. #define HAS_NV12TOARGBROW_SSSE3
  107. #define HAS_NV12TORGB24ROW_SSSE3
  108. #define HAS_NV12TORGB565ROW_SSSE3
  109. #define HAS_NV21TOARGBROW_SSSE3
  110. #define HAS_NV21TORGB24ROW_SSSE3
  111. #define HAS_RAWTOARGBROW_SSSE3
  112. #define HAS_RAWTORGB24ROW_SSSE3
  113. #define HAS_RAWTOYROW_SSSE3
  114. #define HAS_RGB24TOARGBROW_SSSE3
  115. #define HAS_RGB24TOYROW_SSSE3
  116. #define HAS_RGB24TOYJROW_SSSE3
  117. #define HAS_RAWTOYJROW_SSSE3
  118. #define HAS_RGB565TOARGBROW_SSE2
  119. #define HAS_RGBATOUVROW_SSSE3
  120. #define HAS_RGBATOYROW_SSSE3
  121. #define HAS_SETROW_ERMS
  122. #define HAS_SETROW_X86
  123. #define HAS_SPLITUVROW_SSE2
  124. #define HAS_UYVYTOARGBROW_SSSE3
  125. #define HAS_UYVYTOUV422ROW_SSE2
  126. #define HAS_UYVYTOUVROW_SSE2
  127. #define HAS_UYVYTOYROW_SSE2
  128. #define HAS_YUY2TOARGBROW_SSSE3
  129. #define HAS_YUY2TOUV422ROW_SSE2
  130. #define HAS_YUY2TOUVROW_SSE2
  131. #define HAS_YUY2TOYROW_SSE2
  132. // Effects:
  133. #define HAS_ARGBADDROW_SSE2
  134. #define HAS_ARGBAFFINEROW_SSE2
  135. #define HAS_ARGBATTENUATEROW_SSSE3
  136. #define HAS_ARGBBLENDROW_SSSE3
  137. #define HAS_ARGBCOLORMATRIXROW_SSSE3
  138. #define HAS_ARGBCOLORTABLEROW_X86
  139. #define HAS_ARGBCOPYALPHAROW_SSE2
  140. #define HAS_ARGBCOPYYTOALPHAROW_SSE2
  141. #define HAS_ARGBGRAYROW_SSSE3
  142. #define HAS_ARGBLUMACOLORTABLEROW_SSSE3
  143. #define HAS_ARGBMIRRORROW_SSE2
  144. #define HAS_ARGBMULTIPLYROW_SSE2
  145. #define HAS_ARGBPOLYNOMIALROW_SSE2
  146. #define HAS_ARGBQUANTIZEROW_SSE2
  147. #define HAS_ARGBSEPIAROW_SSSE3
  148. #define HAS_ARGBSHADEROW_SSE2
  149. #define HAS_ARGBSUBTRACTROW_SSE2
  150. #define HAS_ARGBUNATTENUATEROW_SSE2
  151. #define HAS_BLENDPLANEROW_SSSE3
  152. #define HAS_COMPUTECUMULATIVESUMROW_SSE2
  153. #define HAS_CUMULATIVESUMTOAVERAGEROW_SSE2
  154. #define HAS_INTERPOLATEROW_SSSE3
  155. #define HAS_RGBCOLORTABLEROW_X86
  156. #define HAS_SOBELROW_SSE2
  157. #define HAS_SOBELTOPLANEROW_SSE2
  158. #define HAS_SOBELXROW_SSE2
  159. #define HAS_SOBELXYROW_SSE2
  160. #define HAS_SOBELYROW_SSE2
  161. // The following functions fail on gcc/clang 32 bit with fpic and framepointer.
  162. // caveat: clangcl uses row_win.cc which works.
  163. #if defined(__x86_64__) || !defined(__pic__) || defined(__clang__) || \
  164. defined(_MSC_VER)
  165. // TODO(fbarchard): fix build error on android_full_debug=1
  166. // https://code.google.com/p/libyuv/issues/detail?id=517
  167. #define HAS_I422ALPHATOARGBROW_SSSE3
  168. #endif
  169. #endif
  170. // The following are available on all x86 platforms, but
  171. // require VS2012, clang 3.4 or gcc 4.7.
  172. #if !defined(LIBYUV_DISABLE_X86) && \
  173. (defined(VISUALC_HAS_AVX2) || defined(CLANG_HAS_AVX2) || \
  174. defined(GCC_HAS_AVX2))
  175. #define HAS_ARGBCOPYALPHAROW_AVX2
  176. #define HAS_ARGBCOPYYTOALPHAROW_AVX2
  177. #define HAS_ARGBEXTRACTALPHAROW_AVX2
  178. #define HAS_ARGBMIRRORROW_AVX2
  179. #define HAS_ARGBPOLYNOMIALROW_AVX2
  180. #define HAS_ARGBSHUFFLEROW_AVX2
  181. #define HAS_ARGBTORGB565DITHERROW_AVX2
  182. #define HAS_ARGBTOUVJROW_AVX2
  183. #define HAS_ARGBTOUVROW_AVX2
  184. #define HAS_ARGBTOYJROW_AVX2
  185. #define HAS_ARGBTOYROW_AVX2
  186. #define HAS_RGB24TOYJROW_AVX2
  187. #define HAS_RAWTOYJROW_AVX2
  188. #define HAS_COPYROW_AVX
  189. #define HAS_H422TOARGBROW_AVX2
  190. #define HAS_HALFFLOATROW_AVX2
  191. // #define HAS_HALFFLOATROW_F16C // Enable to test halffloat cast
  192. #define HAS_I400TOARGBROW_AVX2
  193. #define HAS_I422TOARGB1555ROW_AVX2
  194. #define HAS_I422TOARGB4444ROW_AVX2
  195. #define HAS_I422TOARGBROW_AVX2
  196. #define HAS_I422TORGB24ROW_AVX2
  197. #define HAS_I422TORGB565ROW_AVX2
  198. #define HAS_I422TORGBAROW_AVX2
  199. #define HAS_I444TOARGBROW_AVX2
  200. #define HAS_INTERPOLATEROW_AVX2
  201. #define HAS_J422TOARGBROW_AVX2
  202. #define HAS_MERGEUVROW_AVX2
  203. #define HAS_MIRRORROW_AVX2
  204. #define HAS_NV12TOARGBROW_AVX2
  205. #define HAS_NV12TORGB24ROW_AVX2
  206. #define HAS_NV12TORGB565ROW_AVX2
  207. #define HAS_NV21TOARGBROW_AVX2
  208. #define HAS_NV21TORGB24ROW_AVX2
  209. #define HAS_SPLITUVROW_AVX2
  210. #define HAS_UYVYTOARGBROW_AVX2
  211. #define HAS_UYVYTOUV422ROW_AVX2
  212. #define HAS_UYVYTOUVROW_AVX2
  213. #define HAS_UYVYTOYROW_AVX2
  214. #define HAS_YUY2TOARGBROW_AVX2
  215. #define HAS_YUY2TOUV422ROW_AVX2
  216. #define HAS_YUY2TOUVROW_AVX2
  217. #define HAS_YUY2TOYROW_AVX2
  218. // Effects:
  219. #define HAS_ARGBADDROW_AVX2
  220. #define HAS_ARGBATTENUATEROW_AVX2
  221. #define HAS_ARGBMULTIPLYROW_AVX2
  222. #define HAS_ARGBSUBTRACTROW_AVX2
  223. #define HAS_ARGBUNATTENUATEROW_AVX2
  224. #define HAS_BLENDPLANEROW_AVX2
  225. #if defined(__x86_64__) || !defined(__pic__) || defined(__clang__) || \
  226. defined(_MSC_VER)
  227. // TODO(fbarchard): fix build error on android_full_debug=1
  228. // https://code.google.com/p/libyuv/issues/detail?id=517
  229. #define HAS_I422ALPHATOARGBROW_AVX2
  230. #endif
  231. #endif
  232. // The following are available for AVX2 Visual C and clangcl 32 bit:
  233. // TODO(fbarchard): Port to gcc.
  234. #if !defined(LIBYUV_DISABLE_X86) && defined(_M_IX86) && defined(_MSC_VER) && \
  235. (defined(VISUALC_HAS_AVX2) || defined(CLANG_HAS_AVX2))
  236. #define HAS_ARGB1555TOARGBROW_AVX2
  237. #define HAS_ARGB4444TOARGBROW_AVX2
  238. #define HAS_ARGBTOARGB1555ROW_AVX2
  239. #define HAS_ARGBTOARGB4444ROW_AVX2
  240. #define HAS_ARGBTORGB565ROW_AVX2
  241. #define HAS_J400TOARGBROW_AVX2
  242. #define HAS_RGB565TOARGBROW_AVX2
  243. #endif
  244. // The following are also available on x64 Visual C.
  245. #if !defined(LIBYUV_DISABLE_X86) && defined(_MSC_VER) && defined(_M_X64) && \
  246. (!defined(__clang__) || defined(__SSSE3__))
  247. #define HAS_I422ALPHATOARGBROW_SSSE3
  248. #define HAS_I422TOARGBROW_SSSE3
  249. #endif
  250. // The following are available for gcc/clang x86 platforms:
  251. // TODO(fbarchard): Port to Visual C
  252. #if !defined(LIBYUV_DISABLE_X86) && \
  253. (defined(__x86_64__) || (defined(__i386__) && !defined(_MSC_VER)))
  254. #define HAS_ABGRTOAR30ROW_SSSE3
  255. #define HAS_ARGBTOAR30ROW_SSSE3
  256. #define HAS_CONVERT16TO8ROW_SSSE3
  257. #define HAS_CONVERT8TO16ROW_SSE2
  258. // I210 is for H010. 2 = 422. I for 601 vs H for 709.
  259. #define HAS_I210TOAR30ROW_SSSE3
  260. #define HAS_I210TOARGBROW_SSSE3
  261. #define HAS_I422TOAR30ROW_SSSE3
  262. #define HAS_MERGERGBROW_SSSE3
  263. #define HAS_RAWTORGBAROW_SSSE3
  264. #define HAS_RGBATOYJROW_SSSE3
  265. #define HAS_SPLITRGBROW_SSSE3
  266. #define HAS_SWAPUVROW_SSSE3
  267. #endif
  268. // The following are available for AVX2 gcc/clang x86 platforms:
  269. // TODO(fbarchard): Port to Visual C
  270. #if !defined(LIBYUV_DISABLE_X86) && \
  271. (defined(__x86_64__) || (defined(__i386__) && !defined(_MSC_VER))) && \
  272. (defined(CLANG_HAS_AVX2) || defined(GCC_HAS_AVX2))
  273. #define HAS_ABGRTOAR30ROW_AVX2
  274. #define HAS_ABGRTOUVROW_AVX2
  275. #define HAS_ABGRTOYROW_AVX2
  276. #define HAS_ARGBTOAR30ROW_AVX2
  277. #define HAS_ARGBTORAWROW_AVX2
  278. #define HAS_ARGBTORGB24ROW_AVX2
  279. #define HAS_CONVERT16TO8ROW_AVX2
  280. #define HAS_CONVERT8TO16ROW_AVX2
  281. #define HAS_I210TOAR30ROW_AVX2
  282. #define HAS_I210TOARGBROW_AVX2
  283. #define HAS_I422TOAR30ROW_AVX2
  284. #define HAS_I422TOUYVYROW_AVX2
  285. #define HAS_I422TOYUY2ROW_AVX2
  286. #define HAS_MERGEUVROW_16_AVX2
  287. #define HAS_MULTIPLYROW_16_AVX2
  288. #define HAS_RGBATOYJROW_AVX2
  289. #define HAS_SWAPUVROW_AVX2
  290. // TODO(fbarchard): Fix AVX2 version of YUV24
  291. // #define HAS_NV21TOYUV24ROW_AVX2
  292. #endif
  293. // The following are available for AVX512 clang x86 platforms:
  294. // TODO(fbarchard): Port to GCC and Visual C
  295. // TODO(fbarchard): re-enable HAS_ARGBTORGB24ROW_AVX512VBMI. Issue libyuv:789
  296. #if !defined(LIBYUV_DISABLE_X86) && \
  297. (defined(__x86_64__) || (defined(__i386__) && !defined(_MSC_VER))) && \
  298. (defined(CLANG_HAS_AVX512))
  299. #define HAS_ARGBTORGB24ROW_AVX512VBMI
  300. #endif
  301. // The following are available on Neon platforms:
  302. #if !defined(LIBYUV_DISABLE_NEON) && \
  303. (defined(__aarch64__) || defined(__ARM_NEON__) || defined(LIBYUV_NEON))
  304. #define HAS_ABGRTOUVROW_NEON
  305. #define HAS_ABGRTOYROW_NEON
  306. #define HAS_ARGB1555TOARGBROW_NEON
  307. #define HAS_ARGB1555TOUVROW_NEON
  308. #define HAS_ARGB1555TOYROW_NEON
  309. #define HAS_ARGB4444TOARGBROW_NEON
  310. #define HAS_ARGB4444TOUVROW_NEON
  311. #define HAS_ARGB4444TOYROW_NEON
  312. #define HAS_ARGBEXTRACTALPHAROW_NEON
  313. #define HAS_ARGBSETROW_NEON
  314. #define HAS_ARGBTOARGB1555ROW_NEON
  315. #define HAS_ARGBTOARGB4444ROW_NEON
  316. #define HAS_ARGBTORAWROW_NEON
  317. #define HAS_ARGBTORGB24ROW_NEON
  318. #define HAS_ARGBTORGB565DITHERROW_NEON
  319. #define HAS_ARGBTORGB565ROW_NEON
  320. #define HAS_ARGBTOUV444ROW_NEON
  321. #define HAS_ARGBTOUVJROW_NEON
  322. #define HAS_ARGBTOUVROW_NEON
  323. #define HAS_ARGBTOYJROW_NEON
  324. #define HAS_RGBATOYJROW_NEON
  325. #define HAS_ARGBTOYROW_NEON
  326. #define HAS_AYUVTOUVROW_NEON
  327. #define HAS_AYUVTOVUROW_NEON
  328. #define HAS_AYUVTOYROW_NEON
  329. #define HAS_BGRATOUVROW_NEON
  330. #define HAS_BGRATOYROW_NEON
  331. #define HAS_BYTETOFLOATROW_NEON
  332. #define HAS_COPYROW_NEON
  333. #define HAS_HALFFLOATROW_NEON
  334. #define HAS_I400TOARGBROW_NEON
  335. #define HAS_I422ALPHATOARGBROW_NEON
  336. #define HAS_I422TOARGB1555ROW_NEON
  337. #define HAS_I422TOARGB4444ROW_NEON
  338. #define HAS_I422TOARGBROW_NEON
  339. #define HAS_I422TORGB24ROW_NEON
  340. #define HAS_I422TORGB565ROW_NEON
  341. #define HAS_I422TORGBAROW_NEON
  342. #define HAS_I422TOUYVYROW_NEON
  343. #define HAS_I422TOYUY2ROW_NEON
  344. #define HAS_I444TOARGBROW_NEON
  345. #define HAS_J400TOARGBROW_NEON
  346. #define HAS_MERGEUVROW_NEON
  347. #define HAS_MIRRORROW_NEON
  348. #define HAS_MIRRORUVROW_NEON
  349. #define HAS_NV12TOARGBROW_NEON
  350. #define HAS_NV12TORGB24ROW_NEON
  351. #define HAS_NV12TORGB565ROW_NEON
  352. #define HAS_NV21TOARGBROW_NEON
  353. #define HAS_NV21TORGB24ROW_NEON
  354. #define HAS_NV21TOYUV24ROW_NEON
  355. #define HAS_RAWTOARGBROW_NEON
  356. #define HAS_RAWTORGBAROW_NEON
  357. #define HAS_RAWTORGB24ROW_NEON
  358. #define HAS_RAWTOUVROW_NEON
  359. #define HAS_RAWTOYROW_NEON
  360. #define HAS_RAWTOYJROW_NEON
  361. #define HAS_RGB24TOARGBROW_NEON
  362. #define HAS_RGB24TOUVROW_NEON
  363. #define HAS_RGB24TOYROW_NEON
  364. #define HAS_RGB24TOYJROW_NEON
  365. #define HAS_RGB565TOARGBROW_NEON
  366. #define HAS_RGB565TOUVROW_NEON
  367. #define HAS_RGB565TOYROW_NEON
  368. #define HAS_RGBATOUVROW_NEON
  369. #define HAS_RGBATOYROW_NEON
  370. #define HAS_SETROW_NEON
  371. #define HAS_SPLITRGBROW_NEON
  372. #define HAS_SPLITUVROW_NEON
  373. #define HAS_SWAPUVROW_NEON
  374. #define HAS_UYVYTOARGBROW_NEON
  375. #define HAS_UYVYTOUV422ROW_NEON
  376. #define HAS_UYVYTOUVROW_NEON
  377. #define HAS_UYVYTOYROW_NEON
  378. #define HAS_YUY2TOARGBROW_NEON
  379. #define HAS_YUY2TOUV422ROW_NEON
  380. #define HAS_YUY2TOUVROW_NEON
  381. #define HAS_YUY2TOYROW_NEON
  382. // Effects:
  383. #define HAS_ARGBADDROW_NEON
  384. #define HAS_ARGBATTENUATEROW_NEON
  385. #define HAS_ARGBBLENDROW_NEON
  386. #define HAS_ARGBCOLORMATRIXROW_NEON
  387. #define HAS_ARGBGRAYROW_NEON
  388. #define HAS_ARGBMIRRORROW_NEON
  389. #define HAS_ARGBMULTIPLYROW_NEON
  390. #define HAS_ARGBQUANTIZEROW_NEON
  391. #define HAS_ARGBSEPIAROW_NEON
  392. #define HAS_ARGBSHADEROW_NEON
  393. #define HAS_ARGBSHUFFLEROW_NEON
  394. #define HAS_ARGBSUBTRACTROW_NEON
  395. #define HAS_INTERPOLATEROW_NEON
  396. #define HAS_SOBELROW_NEON
  397. #define HAS_SOBELTOPLANEROW_NEON
  398. #define HAS_SOBELXROW_NEON
  399. #define HAS_SOBELXYROW_NEON
  400. #define HAS_SOBELYROW_NEON
  401. #endif
  402. // The following are available on AArch64 platforms:
  403. #if !defined(LIBYUV_DISABLE_NEON) && defined(__aarch64__)
  404. #define HAS_SCALESUMSAMPLES_NEON
  405. #define HAS_GAUSSROW_F32_NEON
  406. #define HAS_GAUSSCOL_F32_NEON
  407. #endif
  408. #if !defined(LIBYUV_DISABLE_MSA) && defined(__mips_msa)
  409. #define HAS_ABGRTOUVROW_MSA
  410. #define HAS_ABGRTOYROW_MSA
  411. #define HAS_ARGB1555TOARGBROW_MSA
  412. #define HAS_ARGB1555TOUVROW_MSA
  413. #define HAS_ARGB1555TOYROW_MSA
  414. #define HAS_ARGB4444TOARGBROW_MSA
  415. #define HAS_ARGBADDROW_MSA
  416. #define HAS_ARGBATTENUATEROW_MSA
  417. #define HAS_ARGBBLENDROW_MSA
  418. #define HAS_ARGBCOLORMATRIXROW_MSA
  419. #define HAS_ARGBEXTRACTALPHAROW_MSA
  420. #define HAS_ARGBGRAYROW_MSA
  421. #define HAS_ARGBMIRRORROW_MSA
  422. #define HAS_ARGBMULTIPLYROW_MSA
  423. #define HAS_ARGBQUANTIZEROW_MSA
  424. #define HAS_ARGBSEPIAROW_MSA
  425. #define HAS_ARGBSETROW_MSA
  426. #define HAS_ARGBSHADEROW_MSA
  427. #define HAS_ARGBSHUFFLEROW_MSA
  428. #define HAS_ARGBSUBTRACTROW_MSA
  429. #define HAS_ARGBTOARGB1555ROW_MSA
  430. #define HAS_ARGBTOARGB4444ROW_MSA
  431. #define HAS_ARGBTORAWROW_MSA
  432. #define HAS_ARGBTORGB24ROW_MSA
  433. #define HAS_ARGBTORGB565DITHERROW_MSA
  434. #define HAS_ARGBTORGB565ROW_MSA
  435. #define HAS_ARGBTOUV444ROW_MSA
  436. #define HAS_ARGBTOUVJROW_MSA
  437. #define HAS_ARGBTOUVROW_MSA
  438. #define HAS_ARGBTOYJROW_MSA
  439. #define HAS_ARGBTOYROW_MSA
  440. #define HAS_BGRATOUVROW_MSA
  441. #define HAS_BGRATOYROW_MSA
  442. #define HAS_HALFFLOATROW_MSA
  443. #define HAS_I400TOARGBROW_MSA
  444. #define HAS_I422ALPHATOARGBROW_MSA
  445. #define HAS_I422TOARGBROW_MSA
  446. #define HAS_I422TORGB24ROW_MSA
  447. #define HAS_I422TORGBAROW_MSA
  448. #define HAS_I422TOUYVYROW_MSA
  449. #define HAS_I422TOYUY2ROW_MSA
  450. #define HAS_I444TOARGBROW_MSA
  451. #define HAS_I422TOARGB1555ROW_MSA
  452. #define HAS_I422TORGB565ROW_MSA
  453. #define HAS_INTERPOLATEROW_MSA
  454. #define HAS_J400TOARGBROW_MSA
  455. #define HAS_MERGEUVROW_MSA
  456. #define HAS_MIRRORROW_MSA
  457. #define HAS_MIRRORUVROW_MSA
  458. #define HAS_NV12TOARGBROW_MSA
  459. #define HAS_NV12TORGB565ROW_MSA
  460. #define HAS_NV21TOARGBROW_MSA
  461. #define HAS_RAWTOARGBROW_MSA
  462. #define HAS_RAWTORGB24ROW_MSA
  463. #define HAS_RAWTOUVROW_MSA
  464. #define HAS_RAWTOYROW_MSA
  465. #define HAS_RGB24TOARGBROW_MSA
  466. #define HAS_RGB24TOUVROW_MSA
  467. #define HAS_RGB24TOYROW_MSA
  468. #define HAS_RGB565TOARGBROW_MSA
  469. #define HAS_RGB565TOUVROW_MSA
  470. #define HAS_RGB565TOYROW_MSA
  471. #define HAS_RGBATOUVROW_MSA
  472. #define HAS_RGBATOYROW_MSA
  473. #define HAS_SETROW_MSA
  474. #define HAS_SOBELROW_MSA
  475. #define HAS_SOBELTOPLANEROW_MSA
  476. #define HAS_SOBELXROW_MSA
  477. #define HAS_SOBELXYROW_MSA
  478. #define HAS_SOBELYROW_MSA
  479. #define HAS_SPLITUVROW_MSA
  480. #define HAS_UYVYTOARGBROW_MSA
  481. #define HAS_UYVYTOUVROW_MSA
  482. #define HAS_UYVYTOYROW_MSA
  483. #define HAS_YUY2TOARGBROW_MSA
  484. #define HAS_YUY2TOUV422ROW_MSA
  485. #define HAS_YUY2TOUVROW_MSA
  486. #define HAS_YUY2TOYROW_MSA
  487. #endif
  488. #if !defined(LIBYUV_DISABLE_MMI) && defined(_MIPS_ARCH_LOONGSON3A)
  489. #define HAS_ABGRTOUVROW_MMI
  490. #define HAS_ABGRTOYROW_MMI
  491. #define HAS_ARGB1555TOARGBROW_MMI
  492. #define HAS_ARGB1555TOUVROW_MMI
  493. #define HAS_ARGB1555TOYROW_MMI
  494. #define HAS_ARGB4444TOARGBROW_MMI
  495. #define HAS_ARGB4444TOUVROW_MMI
  496. #define HAS_ARGB4444TOYROW_MMI
  497. #define HAS_ARGBADDROW_MMI
  498. #define HAS_ARGBATTENUATEROW_MMI
  499. #define HAS_ARGBBLENDROW_MMI
  500. #define HAS_ARGBCOLORMATRIXROW_MMI
  501. #define HAS_ARGBCOPYALPHAROW_MMI
  502. #define HAS_ARGBCOPYYTOALPHAROW_MMI
  503. #define HAS_ARGBEXTRACTALPHAROW_MMI
  504. #define HAS_ARGBGRAYROW_MMI
  505. #define HAS_ARGBMIRRORROW_MMI
  506. #define HAS_ARGBMULTIPLYROW_MMI
  507. #define HAS_ARGBSEPIAROW_MMI
  508. #define HAS_ARGBSETROW_MMI
  509. #define HAS_ARGBSHADEROW_MMI
  510. #define HAS_ARGBSHUFFLEROW_MMI
  511. #define HAS_ARGBSUBTRACTROW_MMI
  512. #define HAS_ARGBTOARGB1555ROW_MMI
  513. #define HAS_ARGBTOARGB4444ROW_MMI
  514. #define HAS_ARGBTORAWROW_MMI
  515. #define HAS_ARGBTORGB24ROW_MMI
  516. #define HAS_ARGBTORGB565DITHERROW_MMI
  517. #define HAS_ARGBTORGB565ROW_MMI
  518. #define HAS_ARGBTOUV444ROW_MMI
  519. #define HAS_ARGBTOUVJROW_MMI
  520. #define HAS_ARGBTOUVROW_MMI
  521. #define HAS_ARGBTOYJROW_MMI
  522. #define HAS_ARGBTOYROW_MMI
  523. #define HAS_BGRATOUVROW_MMI
  524. #define HAS_BGRATOYROW_MMI
  525. #define HAS_BLENDPLANEROW_MMI
  526. #define HAS_COMPUTECUMULATIVESUMROW_MMI
  527. #define HAS_CUMULATIVESUMTOAVERAGEROW_MMI
  528. #define HAS_HALFFLOATROW_MMI
  529. #define HAS_I400TOARGBROW_MMI
  530. #define HAS_I422TOUYVYROW_MMI
  531. #define HAS_I422TOYUY2ROW_MMI
  532. #define HAS_I422TOARGBROW_MMI
  533. #define HAS_I444TOARGBROW_MMI
  534. #define HAS_INTERPOLATEROW_MMI
  535. #define HAS_J400TOARGBROW_MMI
  536. #define HAS_MERGERGBROW_MMI
  537. #define HAS_MERGEUVROW_MMI
  538. #define HAS_MIRRORROW_MMI
  539. #define HAS_MIRRORUVROW_MMI
  540. #define HAS_RAWTOARGBROW_MMI
  541. #define HAS_RAWTORGB24ROW_MMI
  542. #define HAS_RAWTOUVROW_MMI
  543. #define HAS_RAWTOYROW_MMI
  544. #define HAS_RGB24TOARGBROW_MMI
  545. #define HAS_RGB24TOUVROW_MMI
  546. #define HAS_RGB24TOYROW_MMI
  547. #define HAS_RGB565TOARGBROW_MMI
  548. #define HAS_RGB565TOUVROW_MMI
  549. #define HAS_RGB565TOYROW_MMI
  550. #define HAS_RGBATOUVROW_MMI
  551. #define HAS_RGBATOYROW_MMI
  552. #define HAS_SOBELROW_MMI
  553. #define HAS_SOBELTOPLANEROW_MMI
  554. #define HAS_SOBELXROW_MMI
  555. #define HAS_SOBELXYROW_MMI
  556. #define HAS_SOBELYROW_MMI
  557. #define HAS_SPLITRGBROW_MMI
  558. #define HAS_SPLITUVROW_MMI
  559. #define HAS_UYVYTOUVROW_MMI
  560. #define HAS_UYVYTOYROW_MMI
  561. #define HAS_YUY2TOUV422ROW_MMI
  562. #define HAS_YUY2TOUVROW_MMI
  563. #define HAS_YUY2TOYROW_MMI
  564. #define HAS_I210TOARGBROW_MMI
  565. #define HAS_I422TOARGB4444ROW_MMI
  566. #define HAS_I422TOARGB1555ROW_MMI
  567. #define HAS_I422TORGB565ROW_MMI
  568. #define HAS_NV21TORGB24ROW_MMI
  569. #define HAS_NV12TORGB24ROW_MMI
  570. #define HAS_I422ALPHATOARGBROW_MMI
  571. #define HAS_I422TORGB24ROW_MMI
  572. #define HAS_NV12TOARGBROW_MMI
  573. #define HAS_NV21TOARGBROW_MMI
  574. #define HAS_NV12TORGB565ROW_MMI
  575. #define HAS_YUY2TOARGBROW_MMI
  576. #define HAS_UYVYTOARGBROW_MMI
  577. #define HAS_I422TORGBAROW_MMI
  578. #endif
  579. #if defined(_MSC_VER) && !defined(__CLR_VER) && !defined(__clang__)
  580. #if defined(VISUALC_HAS_AVX2)
  581. #define SIMD_ALIGNED(var) __declspec(align(32)) var
  582. #else
  583. #define SIMD_ALIGNED(var) __declspec(align(16)) var
  584. #endif
  585. typedef __declspec(align(16)) int16_t vec16[8];
  586. typedef __declspec(align(16)) int32_t vec32[4];
  587. typedef __declspec(align(16)) float vecf32[4];
  588. typedef __declspec(align(16)) int8_t vec8[16];
  589. typedef __declspec(align(16)) uint16_t uvec16[8];
  590. typedef __declspec(align(16)) uint32_t uvec32[4];
  591. typedef __declspec(align(16)) uint8_t uvec8[16];
  592. typedef __declspec(align(32)) int16_t lvec16[16];
  593. typedef __declspec(align(32)) int32_t lvec32[8];
  594. typedef __declspec(align(32)) int8_t lvec8[32];
  595. typedef __declspec(align(32)) uint16_t ulvec16[16];
  596. typedef __declspec(align(32)) uint32_t ulvec32[8];
  597. typedef __declspec(align(32)) uint8_t ulvec8[32];
  598. #elif !defined(__pnacl__) && (defined(__GNUC__) || defined(__clang__))
  599. // Caveat GCC 4.2 to 4.7 have a known issue using vectors with const.
  600. #if defined(CLANG_HAS_AVX2) || defined(GCC_HAS_AVX2)
  601. #define SIMD_ALIGNED(var) var __attribute__((aligned(32)))
  602. #else
  603. #define SIMD_ALIGNED(var) var __attribute__((aligned(16)))
  604. #endif
  605. typedef int16_t __attribute__((vector_size(16))) vec16;
  606. typedef int32_t __attribute__((vector_size(16))) vec32;
  607. typedef float __attribute__((vector_size(16))) vecf32;
  608. typedef int8_t __attribute__((vector_size(16))) vec8;
  609. typedef uint16_t __attribute__((vector_size(16))) uvec16;
  610. typedef uint32_t __attribute__((vector_size(16))) uvec32;
  611. typedef uint8_t __attribute__((vector_size(16))) uvec8;
  612. typedef int16_t __attribute__((vector_size(32))) lvec16;
  613. typedef int32_t __attribute__((vector_size(32))) lvec32;
  614. typedef int8_t __attribute__((vector_size(32))) lvec8;
  615. typedef uint16_t __attribute__((vector_size(32))) ulvec16;
  616. typedef uint32_t __attribute__((vector_size(32))) ulvec32;
  617. typedef uint8_t __attribute__((vector_size(32))) ulvec8;
  618. #else
  619. #define SIMD_ALIGNED(var) var
  620. typedef int16_t vec16[8];
  621. typedef int32_t vec32[4];
  622. typedef float vecf32[4];
  623. typedef int8_t vec8[16];
  624. typedef uint16_t uvec16[8];
  625. typedef uint32_t uvec32[4];
  626. typedef uint8_t uvec8[16];
  627. typedef int16_t lvec16[16];
  628. typedef int32_t lvec32[8];
  629. typedef int8_t lvec8[32];
  630. typedef uint16_t ulvec16[16];
  631. typedef uint32_t ulvec32[8];
  632. typedef uint8_t ulvec8[32];
  633. #endif
  634. #if defined(__aarch64__)
  635. // This struct is for Arm64 color conversion.
  636. struct YuvConstants {
  637. uvec16 kUVToRB;
  638. uvec16 kUVToRB2;
  639. uvec16 kUVToG;
  640. uvec16 kUVToG2;
  641. vec16 kUVBiasBGR;
  642. vec32 kYToRgb;
  643. };
  644. #elif defined(__arm__)
  645. // This struct is for ArmV7 color conversion.
  646. struct YuvConstants {
  647. uvec8 kUVToRB;
  648. uvec8 kUVToG;
  649. vec16 kUVBiasBGR;
  650. vec32 kYToRgb;
  651. };
  652. #else
  653. // This struct is for Intel color conversion.
  654. struct YuvConstants {
  655. int8_t kUVToB[32];
  656. int8_t kUVToG[32];
  657. int8_t kUVToR[32];
  658. int16_t kUVBiasB[16];
  659. int16_t kUVBiasG[16];
  660. int16_t kUVBiasR[16];
  661. int16_t kYToRgb[16];
  662. };
  663. // Offsets into YuvConstants structure
  664. #define KUVTOB 0
  665. #define KUVTOG 32
  666. #define KUVTOR 64
  667. #define KUVBIASB 96
  668. #define KUVBIASG 128
  669. #define KUVBIASR 160
  670. #define KYTORGB 192
  671. #endif
  672. // Conversion matrix for YUV to RGB
  673. extern const struct YuvConstants SIMD_ALIGNED(kYuvI601Constants); // BT.601
  674. extern const struct YuvConstants SIMD_ALIGNED(kYuvJPEGConstants); // JPeg
  675. extern const struct YuvConstants SIMD_ALIGNED(kYuvH709Constants); // BT.709
  676. extern const struct YuvConstants SIMD_ALIGNED(kYuv2020Constants); // BT.2020
  677. // Conversion matrix for YVU to BGR
  678. extern const struct YuvConstants SIMD_ALIGNED(kYvuI601Constants); // BT.601
  679. extern const struct YuvConstants SIMD_ALIGNED(kYvuJPEGConstants); // JPeg
  680. extern const struct YuvConstants SIMD_ALIGNED(kYvuH709Constants); // BT.709
  681. extern const struct YuvConstants SIMD_ALIGNED(kYvu2020Constants); // BT.2020
  682. #define IS_ALIGNED(p, a) (!((uintptr_t)(p) & ((a)-1)))
  683. #define align_buffer_64(var, size) \
  684. uint8_t* var##_mem = (uint8_t*)(malloc((size) + 63)); /* NOLINT */ \
  685. uint8_t* var = (uint8_t*)(((intptr_t)(var##_mem) + 63) & ~63) /* NOLINT */
  686. #define free_aligned_buffer_64(var) \
  687. free(var##_mem); \
  688. var = 0
  689. #if defined(__APPLE__) || defined(__x86_64__) || defined(__llvm__)
  690. #define OMITFP
  691. #else
  692. #define OMITFP __attribute__((optimize("omit-frame-pointer")))
  693. #endif
  694. // NaCL macros for GCC x86 and x64.
  695. #if defined(__native_client__)
  696. #define LABELALIGN ".p2align 5\n"
  697. #else
  698. #define LABELALIGN
  699. #endif
  700. // Intel Code Analizer markers. Insert IACA_START IACA_END around code to be
  701. // measured and then run with iaca -64 libyuv_unittest.
  702. // IACA_ASM_START amd IACA_ASM_END are equivalents that can be used within
  703. // inline assembly blocks.
  704. // example of iaca:
  705. // ~/iaca-lin64/bin/iaca.sh -64 -analysis LATENCY out/Release/libyuv_unittest
  706. #if defined(__x86_64__) || defined(__i386__)
  707. #define IACA_ASM_START \
  708. ".byte 0x0F, 0x0B\n" \
  709. " movl $111, %%ebx\n" \
  710. ".byte 0x64, 0x67, 0x90\n"
  711. #define IACA_ASM_END \
  712. " movl $222, %%ebx\n" \
  713. ".byte 0x64, 0x67, 0x90\n" \
  714. ".byte 0x0F, 0x0B\n"
  715. #define IACA_SSC_MARK(MARK_ID) \
  716. __asm__ __volatile__("\n\t movl $" #MARK_ID \
  717. ", %%ebx" \
  718. "\n\t .byte 0x64, 0x67, 0x90" \
  719. : \
  720. : \
  721. : "memory");
  722. #define IACA_UD_BYTES __asm__ __volatile__("\n\t .byte 0x0F, 0x0B");
  723. #else /* Visual C */
  724. #define IACA_UD_BYTES \
  725. { __asm _emit 0x0F __asm _emit 0x0B }
  726. #define IACA_SSC_MARK(x) \
  727. { __asm mov ebx, x __asm _emit 0x64 __asm _emit 0x67 __asm _emit 0x90 }
  728. #define IACA_VC64_START __writegsbyte(111, 111);
  729. #define IACA_VC64_END __writegsbyte(222, 222);
  730. #endif
  731. #define IACA_START \
  732. { \
  733. IACA_UD_BYTES \
  734. IACA_SSC_MARK(111) \
  735. }
  736. #define IACA_END \
  737. { \
  738. IACA_SSC_MARK(222) \
  739. IACA_UD_BYTES \
  740. }
  741. void I444ToARGBRow_NEON(const uint8_t* src_y,
  742. const uint8_t* src_u,
  743. const uint8_t* src_v,
  744. uint8_t* dst_argb,
  745. const struct YuvConstants* yuvconstants,
  746. int width);
  747. void I422ToARGBRow_NEON(const uint8_t* src_y,
  748. const uint8_t* src_u,
  749. const uint8_t* src_v,
  750. uint8_t* dst_argb,
  751. const struct YuvConstants* yuvconstants,
  752. int width);
  753. void I422AlphaToARGBRow_NEON(const uint8_t* src_y,
  754. const uint8_t* src_u,
  755. const uint8_t* src_v,
  756. const uint8_t* src_a,
  757. uint8_t* dst_argb,
  758. const struct YuvConstants* yuvconstants,
  759. int width);
  760. void I422ToARGBRow_NEON(const uint8_t* src_y,
  761. const uint8_t* src_u,
  762. const uint8_t* src_v,
  763. uint8_t* dst_argb,
  764. const struct YuvConstants* yuvconstants,
  765. int width);
  766. void I422ToRGBARow_NEON(const uint8_t* src_y,
  767. const uint8_t* src_u,
  768. const uint8_t* src_v,
  769. uint8_t* dst_rgba,
  770. const struct YuvConstants* yuvconstants,
  771. int width);
  772. void I422ToRGB24Row_NEON(const uint8_t* src_y,
  773. const uint8_t* src_u,
  774. const uint8_t* src_v,
  775. uint8_t* dst_rgb24,
  776. const struct YuvConstants* yuvconstants,
  777. int width);
  778. void I422ToRGB565Row_NEON(const uint8_t* src_y,
  779. const uint8_t* src_u,
  780. const uint8_t* src_v,
  781. uint8_t* dst_rgb565,
  782. const struct YuvConstants* yuvconstants,
  783. int width);
  784. void I422ToARGB1555Row_NEON(const uint8_t* src_y,
  785. const uint8_t* src_u,
  786. const uint8_t* src_v,
  787. uint8_t* dst_argb1555,
  788. const struct YuvConstants* yuvconstants,
  789. int width);
  790. void I422ToARGB4444Row_NEON(const uint8_t* src_y,
  791. const uint8_t* src_u,
  792. const uint8_t* src_v,
  793. uint8_t* dst_argb4444,
  794. const struct YuvConstants* yuvconstants,
  795. int width);
  796. void NV12ToARGBRow_NEON(const uint8_t* src_y,
  797. const uint8_t* src_uv,
  798. uint8_t* dst_argb,
  799. const struct YuvConstants* yuvconstants,
  800. int width);
  801. void NV12ToRGB565Row_NEON(const uint8_t* src_y,
  802. const uint8_t* src_uv,
  803. uint8_t* dst_rgb565,
  804. const struct YuvConstants* yuvconstants,
  805. int width);
  806. void NV21ToARGBRow_NEON(const uint8_t* src_y,
  807. const uint8_t* src_vu,
  808. uint8_t* dst_argb,
  809. const struct YuvConstants* yuvconstants,
  810. int width);
  811. void NV12ToRGB24Row_NEON(const uint8_t* src_y,
  812. const uint8_t* src_uv,
  813. uint8_t* dst_rgb24,
  814. const struct YuvConstants* yuvconstants,
  815. int width);
  816. void NV21ToRGB24Row_NEON(const uint8_t* src_y,
  817. const uint8_t* src_vu,
  818. uint8_t* dst_rgb24,
  819. const struct YuvConstants* yuvconstants,
  820. int width);
  821. void NV21ToYUV24Row_NEON(const uint8_t* src_y,
  822. const uint8_t* src_vu,
  823. uint8_t* dst_yuv24,
  824. int width);
  825. void YUY2ToARGBRow_NEON(const uint8_t* src_yuy2,
  826. uint8_t* dst_argb,
  827. const struct YuvConstants* yuvconstants,
  828. int width);
  829. void UYVYToARGBRow_NEON(const uint8_t* src_uyvy,
  830. uint8_t* dst_argb,
  831. const struct YuvConstants* yuvconstants,
  832. int width);
  833. void I444ToARGBRow_MSA(const uint8_t* src_y,
  834. const uint8_t* src_u,
  835. const uint8_t* src_v,
  836. uint8_t* dst_argb,
  837. const struct YuvConstants* yuvconstants,
  838. int width);
  839. void I444ToARGBRow_MMI(const uint8_t* src_y,
  840. const uint8_t* src_u,
  841. const uint8_t* src_v,
  842. uint8_t* dst_argb,
  843. const struct YuvConstants* yuvconstants,
  844. int width);
  845. void I422ToARGBRow_MSA(const uint8_t* src_y,
  846. const uint8_t* src_u,
  847. const uint8_t* src_v,
  848. uint8_t* dst_argb,
  849. const struct YuvConstants* yuvconstants,
  850. int width);
  851. void I422ToRGBARow_MSA(const uint8_t* src_y,
  852. const uint8_t* src_u,
  853. const uint8_t* src_v,
  854. uint8_t* dst_argb,
  855. const struct YuvConstants* yuvconstants,
  856. int width);
  857. void I422ToARGBRow_MMI(const uint8_t* src_y,
  858. const uint8_t* src_u,
  859. const uint8_t* src_v,
  860. uint8_t* dst_argb,
  861. const struct YuvConstants* yuvconstants,
  862. int width);
  863. void I422AlphaToARGBRow_MSA(const uint8_t* src_y,
  864. const uint8_t* src_u,
  865. const uint8_t* src_v,
  866. const uint8_t* src_a,
  867. uint8_t* dst_argb,
  868. const struct YuvConstants* yuvconstants,
  869. int width);
  870. void I422ToRGB24Row_MSA(const uint8_t* src_y,
  871. const uint8_t* src_u,
  872. const uint8_t* src_v,
  873. uint8_t* dst_argb,
  874. const struct YuvConstants* yuvconstants,
  875. int width);
  876. void I422ToRGB565Row_MSA(const uint8_t* src_y,
  877. const uint8_t* src_u,
  878. const uint8_t* src_v,
  879. uint8_t* dst_rgb565,
  880. const struct YuvConstants* yuvconstants,
  881. int width);
  882. void I422ToARGB4444Row_MSA(const uint8_t* src_y,
  883. const uint8_t* src_u,
  884. const uint8_t* src_v,
  885. uint8_t* dst_argb4444,
  886. const struct YuvConstants* yuvconstants,
  887. int width);
  888. void I422ToARGB1555Row_MSA(const uint8_t* src_y,
  889. const uint8_t* src_u,
  890. const uint8_t* src_v,
  891. uint8_t* dst_argb1555,
  892. const struct YuvConstants* yuvconstants,
  893. int width);
  894. void NV12ToARGBRow_MSA(const uint8_t* src_y,
  895. const uint8_t* src_uv,
  896. uint8_t* dst_argb,
  897. const struct YuvConstants* yuvconstants,
  898. int width);
  899. void NV12ToRGB565Row_MSA(const uint8_t* src_y,
  900. const uint8_t* src_uv,
  901. uint8_t* dst_rgb565,
  902. const struct YuvConstants* yuvconstants,
  903. int width);
  904. void NV21ToARGBRow_MSA(const uint8_t* src_y,
  905. const uint8_t* src_vu,
  906. uint8_t* dst_argb,
  907. const struct YuvConstants* yuvconstants,
  908. int width);
  909. void YUY2ToARGBRow_MSA(const uint8_t* src_yuy2,
  910. uint8_t* dst_argb,
  911. const struct YuvConstants* yuvconstants,
  912. int width);
  913. void UYVYToARGBRow_MSA(const uint8_t* src_uyvy,
  914. uint8_t* dst_argb,
  915. const struct YuvConstants* yuvconstants,
  916. int width);
  917. void ARGBToYRow_AVX2(const uint8_t* src_argb, uint8_t* dst_y, int width);
  918. void ARGBToYRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  919. void ABGRToYRow_AVX2(const uint8_t* src_abgr, uint8_t* dst_y, int width);
  920. void ABGRToYRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  921. void ARGBToYRow_SSSE3(const uint8_t* src_argb, uint8_t* dst_y, int width);
  922. void ARGBToYJRow_AVX2(const uint8_t* src_argb, uint8_t* dst_y, int width);
  923. void ARGBToYJRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  924. void ARGBToYJRow_SSSE3(const uint8_t* src_argb, uint8_t* dst_y, int width);
  925. void RGBAToYJRow_AVX2(const uint8_t* src_rgba, uint8_t* dst_y, int width);
  926. void RGBAToYJRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  927. void RGBAToYJRow_SSSE3(const uint8_t* src_rgba, uint8_t* dst_y, int width);
  928. void BGRAToYRow_SSSE3(const uint8_t* src_bgra, uint8_t* dst_y, int width);
  929. void ABGRToYRow_SSSE3(const uint8_t* src_abgr, uint8_t* dst_y, int width);
  930. void RGBAToYRow_SSSE3(const uint8_t* src_rgba, uint8_t* dst_y, int width);
  931. void RGB24ToYRow_SSSE3(const uint8_t* src_rgb24, uint8_t* dst_y, int width);
  932. void RGB24ToYJRow_SSSE3(const uint8_t* src_rgb24, uint8_t* dst_y, int width);
  933. void RAWToYRow_SSSE3(const uint8_t* src_raw, uint8_t* dst_y, int width);
  934. void RAWToYJRow_SSSE3(const uint8_t* src_raw, uint8_t* dst_y, int width);
  935. void RGB24ToYJRow_AVX2(const uint8_t* src_rgb24, uint8_t* dst_y, int width);
  936. void RAWToYJRow_AVX2(const uint8_t* src_raw, uint8_t* dst_y, int width);
  937. void ARGBToYRow_NEON(const uint8_t* src_argb, uint8_t* dst_y, int width);
  938. void ARGBToYJRow_NEON(const uint8_t* src_argb, uint8_t* dst_y, int width);
  939. void RGBAToYJRow_NEON(const uint8_t* src_rgba, uint8_t* dst_y, int width);
  940. void ARGBToYRow_MSA(const uint8_t* src_argb0, uint8_t* dst_y, int width);
  941. void ARGBToYJRow_MSA(const uint8_t* src_argb0, uint8_t* dst_y, int width);
  942. void ARGBToYRow_MMI(const uint8_t* src_argb0, uint8_t* dst_y, int width);
  943. void ARGBToYJRow_MMI(const uint8_t* src_argb0, uint8_t* dst_y, int width);
  944. void ARGBToUV444Row_NEON(const uint8_t* src_argb,
  945. uint8_t* dst_u,
  946. uint8_t* dst_v,
  947. int width);
  948. void ARGBToUVRow_NEON(const uint8_t* src_argb,
  949. int src_stride_argb,
  950. uint8_t* dst_u,
  951. uint8_t* dst_v,
  952. int width);
  953. void ARGBToUV444Row_MSA(const uint8_t* src_argb,
  954. uint8_t* dst_u,
  955. uint8_t* dst_v,
  956. int width);
  957. void ARGBToUVRow_MSA(const uint8_t* src_argb,
  958. int src_stride_argb,
  959. uint8_t* dst_u,
  960. uint8_t* dst_v,
  961. int width);
  962. void ARGBToUV444Row_MMI(const uint8_t* src_argb,
  963. uint8_t* dst_u,
  964. uint8_t* dst_v,
  965. int width);
  966. void ARGBToUVRow_MMI(const uint8_t* src_argb,
  967. int src_stride_argb,
  968. uint8_t* dst_u,
  969. uint8_t* dst_v,
  970. int width);
  971. void ARGBToUVJRow_NEON(const uint8_t* src_argb,
  972. int src_stride_argb,
  973. uint8_t* dst_u,
  974. uint8_t* dst_v,
  975. int width);
  976. void BGRAToUVRow_NEON(const uint8_t* src_bgra,
  977. int src_stride_bgra,
  978. uint8_t* dst_u,
  979. uint8_t* dst_v,
  980. int width);
  981. void ABGRToUVRow_NEON(const uint8_t* src_abgr,
  982. int src_stride_abgr,
  983. uint8_t* dst_u,
  984. uint8_t* dst_v,
  985. int width);
  986. void RGBAToUVRow_NEON(const uint8_t* src_rgba,
  987. int src_stride_rgba,
  988. uint8_t* dst_u,
  989. uint8_t* dst_v,
  990. int width);
  991. void RGB24ToUVRow_NEON(const uint8_t* src_rgb24,
  992. int src_stride_rgb24,
  993. uint8_t* dst_u,
  994. uint8_t* dst_v,
  995. int width);
  996. void RAWToUVRow_NEON(const uint8_t* src_raw,
  997. int src_stride_raw,
  998. uint8_t* dst_u,
  999. uint8_t* dst_v,
  1000. int width);
  1001. void RGB565ToUVRow_NEON(const uint8_t* src_rgb565,
  1002. int src_stride_rgb565,
  1003. uint8_t* dst_u,
  1004. uint8_t* dst_v,
  1005. int width);
  1006. void ARGB1555ToUVRow_NEON(const uint8_t* src_argb1555,
  1007. int src_stride_argb1555,
  1008. uint8_t* dst_u,
  1009. uint8_t* dst_v,
  1010. int width);
  1011. void ARGB4444ToUVRow_NEON(const uint8_t* src_argb4444,
  1012. int src_stride_argb4444,
  1013. uint8_t* dst_u,
  1014. uint8_t* dst_v,
  1015. int width);
  1016. void ARGBToUVJRow_MSA(const uint8_t* src_rgb,
  1017. int src_stride_rgb,
  1018. uint8_t* dst_u,
  1019. uint8_t* dst_v,
  1020. int width);
  1021. void BGRAToUVRow_MSA(const uint8_t* src_rgb,
  1022. int src_stride_rgb,
  1023. uint8_t* dst_u,
  1024. uint8_t* dst_v,
  1025. int width);
  1026. void ABGRToUVRow_MSA(const uint8_t* src_rgb,
  1027. int src_stride_rgb,
  1028. uint8_t* dst_u,
  1029. uint8_t* dst_v,
  1030. int width);
  1031. void RGBAToUVRow_MSA(const uint8_t* src_rgb,
  1032. int src_stride_rgb,
  1033. uint8_t* dst_u,
  1034. uint8_t* dst_v,
  1035. int width);
  1036. void RGB24ToUVRow_MSA(const uint8_t* src_rgb,
  1037. int src_stride_rgb,
  1038. uint8_t* dst_u,
  1039. uint8_t* dst_v,
  1040. int width);
  1041. void RAWToUVRow_MSA(const uint8_t* src_rgb,
  1042. int src_stride_rgb,
  1043. uint8_t* dst_u,
  1044. uint8_t* dst_v,
  1045. int width);
  1046. void RGB565ToUVRow_MSA(const uint8_t* src_rgb565,
  1047. int src_stride_rgb565,
  1048. uint8_t* dst_u,
  1049. uint8_t* dst_v,
  1050. int width);
  1051. void ARGB1555ToUVRow_MSA(const uint8_t* src_argb1555,
  1052. int src_stride_argb1555,
  1053. uint8_t* dst_u,
  1054. uint8_t* dst_v,
  1055. int width);
  1056. void ARGBToUVJRow_MMI(const uint8_t* src_rgb,
  1057. int src_stride_rgb,
  1058. uint8_t* dst_u,
  1059. uint8_t* dst_v,
  1060. int width);
  1061. void BGRAToUVRow_MMI(const uint8_t* src_rgb,
  1062. int src_stride_rgb,
  1063. uint8_t* dst_u,
  1064. uint8_t* dst_v,
  1065. int width);
  1066. void ABGRToUVRow_MMI(const uint8_t* src_rgb,
  1067. int src_stride_rgb,
  1068. uint8_t* dst_u,
  1069. uint8_t* dst_v,
  1070. int width);
  1071. void RGBAToUVRow_MMI(const uint8_t* src_rgb,
  1072. int src_stride_rgb,
  1073. uint8_t* dst_u,
  1074. uint8_t* dst_v,
  1075. int width);
  1076. void RGB24ToUVRow_MMI(const uint8_t* src_rgb,
  1077. int src_stride_rgb,
  1078. uint8_t* dst_u,
  1079. uint8_t* dst_v,
  1080. int width);
  1081. void RAWToUVRow_MMI(const uint8_t* src_rgb,
  1082. int src_stride_rgb,
  1083. uint8_t* dst_u,
  1084. uint8_t* dst_v,
  1085. int width);
  1086. void RGB565ToUVRow_MMI(const uint8_t* src_rgb565,
  1087. int src_stride_rgb565,
  1088. uint8_t* dst_u,
  1089. uint8_t* dst_v,
  1090. int width);
  1091. void ARGB1555ToUVRow_MMI(const uint8_t* src_argb1555,
  1092. int src_stride_argb1555,
  1093. uint8_t* dst_u,
  1094. uint8_t* dst_v,
  1095. int width);
  1096. void ARGB4444ToUVRow_MMI(const uint8_t* src_argb4444,
  1097. int src_stride_argb4444,
  1098. uint8_t* dst_u,
  1099. uint8_t* dst_v,
  1100. int width);
  1101. void BGRAToYRow_NEON(const uint8_t* src_bgra, uint8_t* dst_y, int width);
  1102. void ABGRToYRow_NEON(const uint8_t* src_abgr, uint8_t* dst_y, int width);
  1103. void RGBAToYRow_NEON(const uint8_t* src_rgba, uint8_t* dst_y, int width);
  1104. void RGB24ToYRow_NEON(const uint8_t* src_rgb24, uint8_t* dst_y, int width);
  1105. void RGB24ToYJRow_NEON(const uint8_t* src_rgb24, uint8_t* dst_yj, int width);
  1106. void RAWToYRow_NEON(const uint8_t* src_raw, uint8_t* dst_y, int width);
  1107. void RAWToYJRow_NEON(const uint8_t* src_raw, uint8_t* dst_yj, int width);
  1108. void RGB565ToYRow_NEON(const uint8_t* src_rgb565, uint8_t* dst_y, int width);
  1109. void ARGB1555ToYRow_NEON(const uint8_t* src_argb1555,
  1110. uint8_t* dst_y,
  1111. int width);
  1112. void ARGB4444ToYRow_NEON(const uint8_t* src_argb4444,
  1113. uint8_t* dst_y,
  1114. int width);
  1115. void BGRAToYRow_MSA(const uint8_t* src_argb, uint8_t* dst_y, int width);
  1116. void ABGRToYRow_MSA(const uint8_t* src_argb, uint8_t* dst_y, int width);
  1117. void RGBAToYRow_MSA(const uint8_t* src_argb, uint8_t* dst_y, int width);
  1118. void RGB24ToYRow_MSA(const uint8_t* src_argb, uint8_t* dst_y, int width);
  1119. void RAWToYRow_MSA(const uint8_t* src_argb, uint8_t* dst_y, int width);
  1120. void RGB565ToYRow_MSA(const uint8_t* src_rgb565, uint8_t* dst_y, int width);
  1121. void ARGB1555ToYRow_MSA(const uint8_t* src_argb1555, uint8_t* dst_y, int width);
  1122. void BGRAToYRow_MMI(const uint8_t* src_argb, uint8_t* dst_y, int width);
  1123. void ABGRToYRow_MMI(const uint8_t* src_argb, uint8_t* dst_y, int width);
  1124. void RGBAToYRow_MMI(const uint8_t* src_argb, uint8_t* dst_y, int width);
  1125. void RGB24ToYRow_MMI(const uint8_t* src_argb, uint8_t* dst_y, int width);
  1126. void RAWToYRow_MMI(const uint8_t* src_argb, uint8_t* dst_y, int width);
  1127. void RGB565ToYRow_MMI(const uint8_t* src_rgb565, uint8_t* dst_y, int width);
  1128. void ARGB1555ToYRow_MMI(const uint8_t* src_argb1555, uint8_t* dst_y, int width);
  1129. void ARGB4444ToYRow_MMI(const uint8_t* src_argb4444, uint8_t* dst_y, int width);
  1130. void ARGBToYRow_C(const uint8_t* src_argb, uint8_t* dst_y, int width);
  1131. void ARGBToYJRow_C(const uint8_t* src_argb, uint8_t* dst_y, int width);
  1132. void RGBAToYJRow_C(const uint8_t* src_argb0, uint8_t* dst_y, int width);
  1133. void BGRAToYRow_C(const uint8_t* src_argb, uint8_t* dst_y, int width);
  1134. void ABGRToYRow_C(const uint8_t* src_argb, uint8_t* dst_y, int width);
  1135. void RGBAToYRow_C(const uint8_t* src_argb, uint8_t* dst_y, int width);
  1136. void RGB24ToYRow_C(const uint8_t* src_argb, uint8_t* dst_y, int width);
  1137. void RGB24ToYJRow_C(const uint8_t* src_argb, uint8_t* dst_yj, int width);
  1138. void RAWToYRow_C(const uint8_t* src_argb, uint8_t* dst_y, int width);
  1139. void RAWToYJRow_C(const uint8_t* src_argb, uint8_t* dst_yj, int width);
  1140. void RGB565ToYRow_C(const uint8_t* src_rgb565, uint8_t* dst_y, int width);
  1141. void ARGB1555ToYRow_C(const uint8_t* src_argb1555, uint8_t* dst_y, int width);
  1142. void ARGB4444ToYRow_C(const uint8_t* src_argb4444, uint8_t* dst_y, int width);
  1143. void ARGBToYRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1144. void ARGBToYJRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1145. void RGBAToYJRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1146. void BGRAToYRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1147. void ABGRToYRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1148. void RGBAToYRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1149. void RGB24ToYRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1150. void RGB24ToYJRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1151. void RAWToYRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1152. void RAWToYJRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1153. void RGB24ToYJRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1154. void RAWToYJRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1155. void ARGBToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1156. void ARGBToYJRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1157. void RGBAToYJRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1158. void BGRAToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1159. void ABGRToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1160. void RGBAToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1161. void RGB24ToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1162. void RGB24ToYJRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1163. void RAWToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1164. void RAWToYJRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1165. void RGB565ToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1166. void ARGB1555ToYRow_Any_NEON(const uint8_t* src_ptr,
  1167. uint8_t* dst_ptr,
  1168. int width);
  1169. void ARGB4444ToYRow_Any_NEON(const uint8_t* src_ptr,
  1170. uint8_t* dst_ptr,
  1171. int width);
  1172. void BGRAToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1173. void ABGRToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1174. void RGBAToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1175. void ARGBToYJRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1176. void ARGBToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1177. void RGB24ToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1178. void RAWToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1179. void RGB565ToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1180. void ARGB1555ToYRow_Any_MSA(const uint8_t* src_ptr,
  1181. uint8_t* dst_ptr,
  1182. int width);
  1183. void BGRAToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1184. void ABGRToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1185. void RGBAToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1186. void ARGBToYJRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1187. void ARGBToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1188. void RGB24ToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1189. void RAWToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1190. void RGB565ToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1191. void ARGB1555ToYRow_Any_MMI(const uint8_t* src_ptr,
  1192. uint8_t* dst_ptr,
  1193. int width);
  1194. void ARGB4444ToYRow_Any_MMI(const uint8_t* src_ptr,
  1195. uint8_t* dst_ptr,
  1196. int width);
  1197. void ARGBToUVRow_AVX2(const uint8_t* src_argb,
  1198. int src_stride_argb,
  1199. uint8_t* dst_u,
  1200. uint8_t* dst_v,
  1201. int width);
  1202. void ABGRToUVRow_AVX2(const uint8_t* src_abgr,
  1203. int src_stride_abgr,
  1204. uint8_t* dst_u,
  1205. uint8_t* dst_v,
  1206. int width);
  1207. void ARGBToUVJRow_AVX2(const uint8_t* src_argb,
  1208. int src_stride_argb,
  1209. uint8_t* dst_u,
  1210. uint8_t* dst_v,
  1211. int width);
  1212. void ARGBToUVRow_SSSE3(const uint8_t* src_argb,
  1213. int src_stride_argb,
  1214. uint8_t* dst_u,
  1215. uint8_t* dst_v,
  1216. int width);
  1217. void ARGBToUVJRow_SSSE3(const uint8_t* src_argb,
  1218. int src_stride_argb,
  1219. uint8_t* dst_u,
  1220. uint8_t* dst_v,
  1221. int width);
  1222. void BGRAToUVRow_SSSE3(const uint8_t* src_bgra,
  1223. int src_stride_bgra,
  1224. uint8_t* dst_u,
  1225. uint8_t* dst_v,
  1226. int width);
  1227. void ABGRToUVRow_SSSE3(const uint8_t* src_abgr,
  1228. int src_stride_abgr,
  1229. uint8_t* dst_u,
  1230. uint8_t* dst_v,
  1231. int width);
  1232. void RGBAToUVRow_SSSE3(const uint8_t* src_rgba,
  1233. int src_stride_rgba,
  1234. uint8_t* dst_u,
  1235. uint8_t* dst_v,
  1236. int width);
  1237. void ARGBToUVRow_Any_AVX2(const uint8_t* src_ptr,
  1238. int src_stride_ptr,
  1239. uint8_t* dst_u,
  1240. uint8_t* dst_v,
  1241. int width);
  1242. void ABGRToUVRow_Any_AVX2(const uint8_t* src_ptr,
  1243. int src_stride_ptr,
  1244. uint8_t* dst_u,
  1245. uint8_t* dst_v,
  1246. int width);
  1247. void ARGBToUVJRow_Any_AVX2(const uint8_t* src_ptr,
  1248. int src_stride_ptr,
  1249. uint8_t* dst_u,
  1250. uint8_t* dst_v,
  1251. int width);
  1252. void ARGBToUVRow_Any_SSSE3(const uint8_t* src_ptr,
  1253. int src_stride_ptr,
  1254. uint8_t* dst_u,
  1255. uint8_t* dst_v,
  1256. int width);
  1257. void ARGBToUVJRow_Any_SSSE3(const uint8_t* src_ptr,
  1258. int src_stride_ptr,
  1259. uint8_t* dst_u,
  1260. uint8_t* dst_v,
  1261. int width);
  1262. void BGRAToUVRow_Any_SSSE3(const uint8_t* src_ptr,
  1263. int src_stride_ptr,
  1264. uint8_t* dst_u,
  1265. uint8_t* dst_v,
  1266. int width);
  1267. void ABGRToUVRow_Any_SSSE3(const uint8_t* src_ptr,
  1268. int src_stride_ptr,
  1269. uint8_t* dst_u,
  1270. uint8_t* dst_v,
  1271. int width);
  1272. void RGBAToUVRow_Any_SSSE3(const uint8_t* src_ptr,
  1273. int src_stride_ptr,
  1274. uint8_t* dst_u,
  1275. uint8_t* dst_v,
  1276. int width);
  1277. void ARGBToUV444Row_Any_NEON(const uint8_t* src_ptr,
  1278. uint8_t* dst_u,
  1279. uint8_t* dst_v,
  1280. int width);
  1281. void ARGBToUVRow_Any_NEON(const uint8_t* src_ptr,
  1282. int src_stride_ptr,
  1283. uint8_t* dst_u,
  1284. uint8_t* dst_v,
  1285. int width);
  1286. void ARGBToUV444Row_Any_MSA(const uint8_t* src_ptr,
  1287. uint8_t* dst_u,
  1288. uint8_t* dst_v,
  1289. int width);
  1290. void ARGBToUVRow_Any_MSA(const uint8_t* src_ptr,
  1291. int src_stride_ptr,
  1292. uint8_t* dst_u,
  1293. uint8_t* dst_v,
  1294. int width);
  1295. void ARGBToUV444Row_Any_MMI(const uint8_t* src_ptr,
  1296. uint8_t* dst_u,
  1297. uint8_t* dst_v,
  1298. int width);
  1299. void ARGBToUVRow_Any_MMI(const uint8_t* src_ptr,
  1300. int src_stride_ptr,
  1301. uint8_t* dst_u,
  1302. uint8_t* dst_v,
  1303. int width);
  1304. void ARGBToUVJRow_Any_NEON(const uint8_t* src_ptr,
  1305. int src_stride_ptr,
  1306. uint8_t* dst_u,
  1307. uint8_t* dst_v,
  1308. int width);
  1309. void BGRAToUVRow_Any_NEON(const uint8_t* src_ptr,
  1310. int src_stride_ptr,
  1311. uint8_t* dst_u,
  1312. uint8_t* dst_v,
  1313. int width);
  1314. void ABGRToUVRow_Any_NEON(const uint8_t* src_ptr,
  1315. int src_stride_ptr,
  1316. uint8_t* dst_u,
  1317. uint8_t* dst_v,
  1318. int width);
  1319. void RGBAToUVRow_Any_NEON(const uint8_t* src_ptr,
  1320. int src_stride_ptr,
  1321. uint8_t* dst_u,
  1322. uint8_t* dst_v,
  1323. int width);
  1324. void RGB24ToUVRow_Any_NEON(const uint8_t* src_ptr,
  1325. int src_stride_ptr,
  1326. uint8_t* dst_u,
  1327. uint8_t* dst_v,
  1328. int width);
  1329. void RAWToUVRow_Any_NEON(const uint8_t* src_ptr,
  1330. int src_stride_ptr,
  1331. uint8_t* dst_u,
  1332. uint8_t* dst_v,
  1333. int width);
  1334. void RGB565ToUVRow_Any_NEON(const uint8_t* src_ptr,
  1335. int src_stride_ptr,
  1336. uint8_t* dst_u,
  1337. uint8_t* dst_v,
  1338. int width);
  1339. void ARGB1555ToUVRow_Any_NEON(const uint8_t* src_ptr,
  1340. int src_stride_ptr,
  1341. uint8_t* dst_u,
  1342. uint8_t* dst_v,
  1343. int width);
  1344. void ARGB4444ToUVRow_Any_NEON(const uint8_t* src_ptr,
  1345. int src_stride_ptr,
  1346. uint8_t* dst_u,
  1347. uint8_t* dst_v,
  1348. int width);
  1349. void ARGBToUVJRow_Any_MSA(const uint8_t* src_ptr,
  1350. int src_stride_ptr,
  1351. uint8_t* dst_u,
  1352. uint8_t* dst_v,
  1353. int width);
  1354. void BGRAToUVRow_Any_MSA(const uint8_t* src_ptr,
  1355. int src_stride_ptr,
  1356. uint8_t* dst_u,
  1357. uint8_t* dst_v,
  1358. int width);
  1359. void ABGRToUVRow_Any_MSA(const uint8_t* src_ptr,
  1360. int src_stride_ptr,
  1361. uint8_t* dst_u,
  1362. uint8_t* dst_v,
  1363. int width);
  1364. void RGBAToUVRow_Any_MSA(const uint8_t* src_ptr,
  1365. int src_stride_ptr,
  1366. uint8_t* dst_u,
  1367. uint8_t* dst_v,
  1368. int width);
  1369. void RGB24ToUVRow_Any_MSA(const uint8_t* src_ptr,
  1370. int src_stride_ptr,
  1371. uint8_t* dst_u,
  1372. uint8_t* dst_v,
  1373. int width);
  1374. void RAWToUVRow_Any_MSA(const uint8_t* src_ptr,
  1375. int src_stride_ptr,
  1376. uint8_t* dst_u,
  1377. uint8_t* dst_v,
  1378. int width);
  1379. void RGB565ToUVRow_Any_MSA(const uint8_t* src_ptr,
  1380. int src_stride_ptr,
  1381. uint8_t* dst_u,
  1382. uint8_t* dst_v,
  1383. int width);
  1384. void ARGB1555ToUVRow_Any_MSA(const uint8_t* src_ptr,
  1385. int src_stride_ptr,
  1386. uint8_t* dst_u,
  1387. uint8_t* dst_v,
  1388. int width);
  1389. void ARGBToUVJRow_Any_MMI(const uint8_t* src_ptr,
  1390. int src_stride_ptr,
  1391. uint8_t* dst_u,
  1392. uint8_t* dst_v,
  1393. int width);
  1394. void BGRAToUVRow_Any_MMI(const uint8_t* src_ptr,
  1395. int src_stride_ptr,
  1396. uint8_t* dst_u,
  1397. uint8_t* dst_v,
  1398. int width);
  1399. void ABGRToUVRow_Any_MMI(const uint8_t* src_ptr,
  1400. int src_stride_ptr,
  1401. uint8_t* dst_u,
  1402. uint8_t* dst_v,
  1403. int width);
  1404. void RGBAToUVRow_Any_MMI(const uint8_t* src_ptr,
  1405. int src_stride_ptr,
  1406. uint8_t* dst_u,
  1407. uint8_t* dst_v,
  1408. int width);
  1409. void RGB24ToUVRow_Any_MMI(const uint8_t* src_ptr,
  1410. int src_stride_ptr,
  1411. uint8_t* dst_u,
  1412. uint8_t* dst_v,
  1413. int width);
  1414. void RAWToUVRow_Any_MMI(const uint8_t* src_ptr,
  1415. int src_stride_ptr,
  1416. uint8_t* dst_u,
  1417. uint8_t* dst_v,
  1418. int width);
  1419. void RGB565ToUVRow_Any_MMI(const uint8_t* src_ptr,
  1420. int src_stride_ptr,
  1421. uint8_t* dst_u,
  1422. uint8_t* dst_v,
  1423. int width);
  1424. void ARGB1555ToUVRow_Any_MMI(const uint8_t* src_ptr,
  1425. int src_stride_ptr,
  1426. uint8_t* dst_u,
  1427. uint8_t* dst_v,
  1428. int width);
  1429. void ARGB4444ToUVRow_Any_MMI(const uint8_t* src_ptr,
  1430. int src_stride_ptr,
  1431. uint8_t* dst_u,
  1432. uint8_t* dst_v,
  1433. int width);
  1434. void ARGBToUVRow_C(const uint8_t* src_rgb,
  1435. int src_stride_rgb,
  1436. uint8_t* dst_u,
  1437. uint8_t* dst_v,
  1438. int width);
  1439. void ARGBToUVJRow_C(const uint8_t* src_rgb,
  1440. int src_stride_rgb,
  1441. uint8_t* dst_u,
  1442. uint8_t* dst_v,
  1443. int width);
  1444. void ARGBToUVRow_C(const uint8_t* src_rgb,
  1445. int src_stride_rgb,
  1446. uint8_t* dst_u,
  1447. uint8_t* dst_v,
  1448. int width);
  1449. void ARGBToUVJRow_C(const uint8_t* src_rgb,
  1450. int src_stride_rgb,
  1451. uint8_t* dst_u,
  1452. uint8_t* dst_v,
  1453. int width);
  1454. void BGRAToUVRow_C(const uint8_t* src_rgb,
  1455. int src_stride_rgb,
  1456. uint8_t* dst_u,
  1457. uint8_t* dst_v,
  1458. int width);
  1459. void ABGRToUVRow_C(const uint8_t* src_rgb,
  1460. int src_stride_rgb,
  1461. uint8_t* dst_u,
  1462. uint8_t* dst_v,
  1463. int width);
  1464. void RGBAToUVRow_C(const uint8_t* src_rgb,
  1465. int src_stride_rgb,
  1466. uint8_t* dst_u,
  1467. uint8_t* dst_v,
  1468. int width);
  1469. void RGB24ToUVRow_C(const uint8_t* src_rgb,
  1470. int src_stride_rgb,
  1471. uint8_t* dst_u,
  1472. uint8_t* dst_v,
  1473. int width);
  1474. void RAWToUVRow_C(const uint8_t* src_rgb,
  1475. int src_stride_rgb,
  1476. uint8_t* dst_u,
  1477. uint8_t* dst_v,
  1478. int width);
  1479. void RGB565ToUVRow_C(const uint8_t* src_rgb565,
  1480. int src_stride_rgb565,
  1481. uint8_t* dst_u,
  1482. uint8_t* dst_v,
  1483. int width);
  1484. void ARGB1555ToUVRow_C(const uint8_t* src_argb1555,
  1485. int src_stride_argb1555,
  1486. uint8_t* dst_u,
  1487. uint8_t* dst_v,
  1488. int width);
  1489. void ARGB4444ToUVRow_C(const uint8_t* src_argb4444,
  1490. int src_stride_argb4444,
  1491. uint8_t* dst_u,
  1492. uint8_t* dst_v,
  1493. int width);
  1494. void ARGBToUV444Row_SSSE3(const uint8_t* src_argb,
  1495. uint8_t* dst_u,
  1496. uint8_t* dst_v,
  1497. int width);
  1498. void ARGBToUV444Row_Any_SSSE3(const uint8_t* src_ptr,
  1499. uint8_t* dst_u,
  1500. uint8_t* dst_v,
  1501. int width);
  1502. void ARGBToUV444Row_C(const uint8_t* src_argb,
  1503. uint8_t* dst_u,
  1504. uint8_t* dst_v,
  1505. int width);
  1506. void MirrorRow_AVX2(const uint8_t* src, uint8_t* dst, int width);
  1507. void MirrorRow_SSSE3(const uint8_t* src, uint8_t* dst, int width);
  1508. void MirrorRow_NEON(const uint8_t* src, uint8_t* dst, int width);
  1509. void MirrorRow_MSA(const uint8_t* src, uint8_t* dst, int width);
  1510. void MirrorRow_MMI(const uint8_t* src, uint8_t* dst, int width);
  1511. void MirrorRow_C(const uint8_t* src, uint8_t* dst, int width);
  1512. void MirrorRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1513. void MirrorRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1514. void MirrorRow_Any_SSE2(const uint8_t* src, uint8_t* dst, int width);
  1515. void MirrorRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1516. void MirrorRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1517. void MirrorRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1518. void MirrorUVRow_SSSE3(const uint8_t* src,
  1519. uint8_t* dst_u,
  1520. uint8_t* dst_v,
  1521. int width);
  1522. void MirrorUVRow_NEON(const uint8_t* src_uv,
  1523. uint8_t* dst_u,
  1524. uint8_t* dst_v,
  1525. int width);
  1526. void MirrorUVRow_MSA(const uint8_t* src_uv,
  1527. uint8_t* dst_u,
  1528. uint8_t* dst_v,
  1529. int width);
  1530. void MirrorUVRow_MMI(const uint8_t* src_uv,
  1531. uint8_t* dst_u,
  1532. uint8_t* dst_v,
  1533. int width);
  1534. void MirrorUVRow_C(const uint8_t* src_uv,
  1535. uint8_t* dst_u,
  1536. uint8_t* dst_v,
  1537. int width);
  1538. void ARGBMirrorRow_AVX2(const uint8_t* src, uint8_t* dst, int width);
  1539. void ARGBMirrorRow_SSE2(const uint8_t* src, uint8_t* dst, int width);
  1540. void ARGBMirrorRow_NEON(const uint8_t* src, uint8_t* dst, int width);
  1541. void ARGBMirrorRow_MSA(const uint8_t* src, uint8_t* dst, int width);
  1542. void ARGBMirrorRow_MMI(const uint8_t* src, uint8_t* dst, int width);
  1543. void ARGBMirrorRow_C(const uint8_t* src, uint8_t* dst, int width);
  1544. void ARGBMirrorRow_Any_AVX2(const uint8_t* src_ptr,
  1545. uint8_t* dst_ptr,
  1546. int width);
  1547. void ARGBMirrorRow_Any_SSE2(const uint8_t* src_ptr,
  1548. uint8_t* dst_ptr,
  1549. int width);
  1550. void ARGBMirrorRow_Any_NEON(const uint8_t* src_ptr,
  1551. uint8_t* dst_ptr,
  1552. int width);
  1553. void ARGBMirrorRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1554. void ARGBMirrorRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1555. void SplitUVRow_C(const uint8_t* src_uv,
  1556. uint8_t* dst_u,
  1557. uint8_t* dst_v,
  1558. int width);
  1559. void SplitUVRow_SSE2(const uint8_t* src_uv,
  1560. uint8_t* dst_u,
  1561. uint8_t* dst_v,
  1562. int width);
  1563. void SplitUVRow_AVX2(const uint8_t* src_uv,
  1564. uint8_t* dst_u,
  1565. uint8_t* dst_v,
  1566. int width);
  1567. void SplitUVRow_NEON(const uint8_t* src_uv,
  1568. uint8_t* dst_u,
  1569. uint8_t* dst_v,
  1570. int width);
  1571. void SplitUVRow_MSA(const uint8_t* src_uv,
  1572. uint8_t* dst_u,
  1573. uint8_t* dst_v,
  1574. int width);
  1575. void SplitUVRow_MMI(const uint8_t* src_uv,
  1576. uint8_t* dst_u,
  1577. uint8_t* dst_v,
  1578. int width);
  1579. void SplitUVRow_Any_SSE2(const uint8_t* src_ptr,
  1580. uint8_t* dst_u,
  1581. uint8_t* dst_v,
  1582. int width);
  1583. void SplitUVRow_Any_AVX2(const uint8_t* src_ptr,
  1584. uint8_t* dst_u,
  1585. uint8_t* dst_v,
  1586. int width);
  1587. void SplitUVRow_Any_NEON(const uint8_t* src_ptr,
  1588. uint8_t* dst_u,
  1589. uint8_t* dst_v,
  1590. int width);
  1591. void SplitUVRow_Any_MSA(const uint8_t* src_ptr,
  1592. uint8_t* dst_u,
  1593. uint8_t* dst_v,
  1594. int width);
  1595. void SplitUVRow_Any_MMI(const uint8_t* src_ptr,
  1596. uint8_t* dst_u,
  1597. uint8_t* dst_v,
  1598. int width);
  1599. void MergeUVRow_C(const uint8_t* src_u,
  1600. const uint8_t* src_v,
  1601. uint8_t* dst_uv,
  1602. int width);
  1603. void MergeUVRow_SSE2(const uint8_t* src_u,
  1604. const uint8_t* src_v,
  1605. uint8_t* dst_uv,
  1606. int width);
  1607. void MergeUVRow_AVX2(const uint8_t* src_u,
  1608. const uint8_t* src_v,
  1609. uint8_t* dst_uv,
  1610. int width);
  1611. void MergeUVRow_NEON(const uint8_t* src_u,
  1612. const uint8_t* src_v,
  1613. uint8_t* dst_uv,
  1614. int width);
  1615. void MergeUVRow_MSA(const uint8_t* src_u,
  1616. const uint8_t* src_v,
  1617. uint8_t* dst_uv,
  1618. int width);
  1619. void MergeUVRow_MMI(const uint8_t* src_u,
  1620. const uint8_t* src_v,
  1621. uint8_t* dst_uv,
  1622. int width);
  1623. void MergeUVRow_Any_SSE2(const uint8_t* y_buf,
  1624. const uint8_t* uv_buf,
  1625. uint8_t* dst_ptr,
  1626. int width);
  1627. void MergeUVRow_Any_AVX2(const uint8_t* y_buf,
  1628. const uint8_t* uv_buf,
  1629. uint8_t* dst_ptr,
  1630. int width);
  1631. void MergeUVRow_Any_NEON(const uint8_t* y_buf,
  1632. const uint8_t* uv_buf,
  1633. uint8_t* dst_ptr,
  1634. int width);
  1635. void MergeUVRow_Any_MSA(const uint8_t* y_buf,
  1636. const uint8_t* uv_buf,
  1637. uint8_t* dst_ptr,
  1638. int width);
  1639. void MergeUVRow_Any_MMI(const uint8_t* y_buf,
  1640. const uint8_t* uv_buf,
  1641. uint8_t* dst_ptr,
  1642. int width);
  1643. void SplitRGBRow_C(const uint8_t* src_rgb,
  1644. uint8_t* dst_r,
  1645. uint8_t* dst_g,
  1646. uint8_t* dst_b,
  1647. int width);
  1648. void SplitRGBRow_SSSE3(const uint8_t* src_rgb,
  1649. uint8_t* dst_r,
  1650. uint8_t* dst_g,
  1651. uint8_t* dst_b,
  1652. int width);
  1653. void SplitRGBRow_NEON(const uint8_t* src_rgb,
  1654. uint8_t* dst_r,
  1655. uint8_t* dst_g,
  1656. uint8_t* dst_b,
  1657. int width);
  1658. void SplitRGBRow_MMI(const uint8_t* src_rgb,
  1659. uint8_t* dst_r,
  1660. uint8_t* dst_g,
  1661. uint8_t* dst_b,
  1662. int width);
  1663. void SplitRGBRow_Any_SSSE3(const uint8_t* src_ptr,
  1664. uint8_t* dst_r,
  1665. uint8_t* dst_g,
  1666. uint8_t* dst_b,
  1667. int width);
  1668. void SplitRGBRow_Any_NEON(const uint8_t* src_ptr,
  1669. uint8_t* dst_r,
  1670. uint8_t* dst_g,
  1671. uint8_t* dst_b,
  1672. int width);
  1673. void SplitRGBRow_Any_MMI(const uint8_t* src_ptr,
  1674. uint8_t* dst_r,
  1675. uint8_t* dst_g,
  1676. uint8_t* dst_b,
  1677. int width);
  1678. void MergeRGBRow_C(const uint8_t* src_r,
  1679. const uint8_t* src_g,
  1680. const uint8_t* src_b,
  1681. uint8_t* dst_rgb,
  1682. int width);
  1683. void MergeRGBRow_SSSE3(const uint8_t* src_r,
  1684. const uint8_t* src_g,
  1685. const uint8_t* src_b,
  1686. uint8_t* dst_rgb,
  1687. int width);
  1688. void MergeRGBRow_NEON(const uint8_t* src_r,
  1689. const uint8_t* src_g,
  1690. const uint8_t* src_b,
  1691. uint8_t* dst_rgb,
  1692. int width);
  1693. void MergeRGBRow_MMI(const uint8_t* src_r,
  1694. const uint8_t* src_g,
  1695. const uint8_t* src_b,
  1696. uint8_t* dst_rgb,
  1697. int width);
  1698. void MergeRGBRow_Any_SSSE3(const uint8_t* y_buf,
  1699. const uint8_t* u_buf,
  1700. const uint8_t* v_buf,
  1701. uint8_t* dst_ptr,
  1702. int width);
  1703. void MergeRGBRow_Any_NEON(const uint8_t* src_r,
  1704. const uint8_t* src_g,
  1705. const uint8_t* src_b,
  1706. uint8_t* dst_rgb,
  1707. int width);
  1708. void MergeRGBRow_Any_MMI(const uint8_t* src_r,
  1709. const uint8_t* src_g,
  1710. const uint8_t* src_b,
  1711. uint8_t* dst_rgb,
  1712. int width);
  1713. void MergeUVRow_16_C(const uint16_t* src_u,
  1714. const uint16_t* src_v,
  1715. uint16_t* dst_uv,
  1716. int scale, /* 64 for 10 bit */
  1717. int width);
  1718. void MergeUVRow_16_AVX2(const uint16_t* src_u,
  1719. const uint16_t* src_v,
  1720. uint16_t* dst_uv,
  1721. int scale,
  1722. int width);
  1723. void MultiplyRow_16_AVX2(const uint16_t* src_y,
  1724. uint16_t* dst_y,
  1725. int scale,
  1726. int width);
  1727. void MultiplyRow_16_C(const uint16_t* src_y,
  1728. uint16_t* dst_y,
  1729. int scale,
  1730. int width);
  1731. void Convert8To16Row_C(const uint8_t* src_y,
  1732. uint16_t* dst_y,
  1733. int scale,
  1734. int width);
  1735. void Convert8To16Row_SSE2(const uint8_t* src_y,
  1736. uint16_t* dst_y,
  1737. int scale,
  1738. int width);
  1739. void Convert8To16Row_AVX2(const uint8_t* src_y,
  1740. uint16_t* dst_y,
  1741. int scale,
  1742. int width);
  1743. void Convert8To16Row_Any_SSE2(const uint8_t* src_ptr,
  1744. uint16_t* dst_ptr,
  1745. int scale,
  1746. int width);
  1747. void Convert8To16Row_Any_AVX2(const uint8_t* src_ptr,
  1748. uint16_t* dst_ptr,
  1749. int scale,
  1750. int width);
  1751. void Convert16To8Row_C(const uint16_t* src_y,
  1752. uint8_t* dst_y,
  1753. int scale,
  1754. int width);
  1755. void Convert16To8Row_SSSE3(const uint16_t* src_y,
  1756. uint8_t* dst_y,
  1757. int scale,
  1758. int width);
  1759. void Convert16To8Row_AVX2(const uint16_t* src_y,
  1760. uint8_t* dst_y,
  1761. int scale,
  1762. int width);
  1763. void Convert16To8Row_Any_SSSE3(const uint16_t* src_ptr,
  1764. uint8_t* dst_ptr,
  1765. int scale,
  1766. int width);
  1767. void Convert16To8Row_Any_AVX2(const uint16_t* src_ptr,
  1768. uint8_t* dst_ptr,
  1769. int scale,
  1770. int width);
  1771. void CopyRow_SSE2(const uint8_t* src, uint8_t* dst, int width);
  1772. void CopyRow_AVX(const uint8_t* src, uint8_t* dst, int width);
  1773. void CopyRow_ERMS(const uint8_t* src, uint8_t* dst, int width);
  1774. void CopyRow_NEON(const uint8_t* src, uint8_t* dst, int width);
  1775. void CopyRow_MIPS(const uint8_t* src, uint8_t* dst, int count);
  1776. void CopyRow_C(const uint8_t* src, uint8_t* dst, int count);
  1777. void CopyRow_Any_SSE2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1778. void CopyRow_Any_AVX(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1779. void CopyRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  1780. void CopyRow_16_C(const uint16_t* src, uint16_t* dst, int count);
  1781. void ARGBCopyAlphaRow_C(const uint8_t* src, uint8_t* dst, int width);
  1782. void ARGBCopyAlphaRow_SSE2(const uint8_t* src, uint8_t* dst, int width);
  1783. void ARGBCopyAlphaRow_AVX2(const uint8_t* src, uint8_t* dst, int width);
  1784. void ARGBCopyAlphaRow_MMI(const uint8_t* src, uint8_t* dst, int width);
  1785. void ARGBCopyAlphaRow_Any_SSE2(const uint8_t* src_ptr,
  1786. uint8_t* dst_ptr,
  1787. int width);
  1788. void ARGBCopyAlphaRow_Any_AVX2(const uint8_t* src_ptr,
  1789. uint8_t* dst_ptr,
  1790. int width);
  1791. void ARGBCopyAlphaRow_Any_MMI(const uint8_t* src_ptr,
  1792. uint8_t* dst_ptr,
  1793. int width);
  1794. void ARGBExtractAlphaRow_C(const uint8_t* src_argb, uint8_t* dst_a, int width);
  1795. void ARGBExtractAlphaRow_SSE2(const uint8_t* src_argb,
  1796. uint8_t* dst_a,
  1797. int width);
  1798. void ARGBExtractAlphaRow_AVX2(const uint8_t* src_argb,
  1799. uint8_t* dst_a,
  1800. int width);
  1801. void ARGBExtractAlphaRow_NEON(const uint8_t* src_argb,
  1802. uint8_t* dst_a,
  1803. int width);
  1804. void ARGBExtractAlphaRow_MSA(const uint8_t* src_argb,
  1805. uint8_t* dst_a,
  1806. int width);
  1807. void ARGBExtractAlphaRow_MMI(const uint8_t* src_argb,
  1808. uint8_t* dst_a,
  1809. int width);
  1810. void ARGBExtractAlphaRow_Any_SSE2(const uint8_t* src_ptr,
  1811. uint8_t* dst_ptr,
  1812. int width);
  1813. void ARGBExtractAlphaRow_Any_AVX2(const uint8_t* src_ptr,
  1814. uint8_t* dst_ptr,
  1815. int width);
  1816. void ARGBExtractAlphaRow_Any_NEON(const uint8_t* src_ptr,
  1817. uint8_t* dst_ptr,
  1818. int width);
  1819. void ARGBExtractAlphaRow_Any_MSA(const uint8_t* src_ptr,
  1820. uint8_t* dst_ptr,
  1821. int width);
  1822. void ARGBExtractAlphaRow_Any_MMI(const uint8_t* src_ptr,
  1823. uint8_t* dst_ptr,
  1824. int width);
  1825. void ARGBCopyYToAlphaRow_C(const uint8_t* src, uint8_t* dst, int width);
  1826. void ARGBCopyYToAlphaRow_SSE2(const uint8_t* src, uint8_t* dst, int width);
  1827. void ARGBCopyYToAlphaRow_AVX2(const uint8_t* src, uint8_t* dst, int width);
  1828. void ARGBCopyYToAlphaRow_MMI(const uint8_t* src, uint8_t* dst, int width);
  1829. void ARGBCopyYToAlphaRow_Any_SSE2(const uint8_t* src_ptr,
  1830. uint8_t* dst_ptr,
  1831. int width);
  1832. void ARGBCopyYToAlphaRow_Any_AVX2(const uint8_t* src_ptr,
  1833. uint8_t* dst_ptr,
  1834. int width);
  1835. void ARGBCopyYToAlphaRow_Any_MMI(const uint8_t* src_ptr,
  1836. uint8_t* dst_ptr,
  1837. int width);
  1838. void SetRow_C(uint8_t* dst, uint8_t v8, int width);
  1839. void SetRow_MSA(uint8_t* dst, uint8_t v8, int width);
  1840. void SetRow_X86(uint8_t* dst, uint8_t v8, int width);
  1841. void SetRow_ERMS(uint8_t* dst, uint8_t v8, int width);
  1842. void SetRow_NEON(uint8_t* dst, uint8_t v8, int width);
  1843. void SetRow_Any_X86(uint8_t* dst_ptr, uint8_t v32, int width);
  1844. void SetRow_Any_NEON(uint8_t* dst_ptr, uint8_t v32, int width);
  1845. void ARGBSetRow_C(uint8_t* dst_argb, uint32_t v32, int width);
  1846. void ARGBSetRow_X86(uint8_t* dst_argb, uint32_t v32, int width);
  1847. void ARGBSetRow_NEON(uint8_t* dst, uint32_t v32, int width);
  1848. void ARGBSetRow_Any_NEON(uint8_t* dst_ptr, uint32_t v32, int width);
  1849. void ARGBSetRow_MSA(uint8_t* dst_argb, uint32_t v32, int width);
  1850. void ARGBSetRow_Any_MSA(uint8_t* dst_ptr, uint32_t v32, int width);
  1851. void ARGBSetRow_MMI(uint8_t* dst_argb, uint32_t v32, int width);
  1852. void ARGBSetRow_Any_MMI(uint8_t* dst_ptr, uint32_t v32, int width);
  1853. // ARGBShufflers for BGRAToARGB etc.
  1854. void ARGBShuffleRow_C(const uint8_t* src_argb,
  1855. uint8_t* dst_argb,
  1856. const uint8_t* shuffler,
  1857. int width);
  1858. void ARGBShuffleRow_SSSE3(const uint8_t* src_argb,
  1859. uint8_t* dst_argb,
  1860. const uint8_t* shuffler,
  1861. int width);
  1862. void ARGBShuffleRow_AVX2(const uint8_t* src_argb,
  1863. uint8_t* dst_argb,
  1864. const uint8_t* shuffler,
  1865. int width);
  1866. void ARGBShuffleRow_NEON(const uint8_t* src_argb,
  1867. uint8_t* dst_argb,
  1868. const uint8_t* shuffler,
  1869. int width);
  1870. void ARGBShuffleRow_MSA(const uint8_t* src_argb,
  1871. uint8_t* dst_argb,
  1872. const uint8_t* shuffler,
  1873. int width);
  1874. void ARGBShuffleRow_MMI(const uint8_t* src_argb,
  1875. uint8_t* dst_argb,
  1876. const uint8_t* shuffler,
  1877. int width);
  1878. void ARGBShuffleRow_Any_SSSE3(const uint8_t* src_ptr,
  1879. uint8_t* dst_ptr,
  1880. const uint8_t* param,
  1881. int width);
  1882. void ARGBShuffleRow_Any_AVX2(const uint8_t* src_ptr,
  1883. uint8_t* dst_ptr,
  1884. const uint8_t* param,
  1885. int width);
  1886. void ARGBShuffleRow_Any_NEON(const uint8_t* src_ptr,
  1887. uint8_t* dst_ptr,
  1888. const uint8_t* param,
  1889. int width);
  1890. void ARGBShuffleRow_Any_MSA(const uint8_t* src_ptr,
  1891. uint8_t* dst_ptr,
  1892. const uint8_t* param,
  1893. int width);
  1894. void ARGBShuffleRow_Any_MMI(const uint8_t* src_ptr,
  1895. uint8_t* dst_ptr,
  1896. const uint8_t* param,
  1897. int width);
  1898. void RGB24ToARGBRow_SSSE3(const uint8_t* src_rgb24,
  1899. uint8_t* dst_argb,
  1900. int width);
  1901. void RAWToARGBRow_SSSE3(const uint8_t* src_raw, uint8_t* dst_argb, int width);
  1902. void RAWToRGBARow_SSSE3(const uint8_t* src_raw, uint8_t* dst_rgba, int width);
  1903. void RAWToRGB24Row_SSSE3(const uint8_t* src_raw, uint8_t* dst_rgb24, int width);
  1904. void RGB565ToARGBRow_SSE2(const uint8_t* src, uint8_t* dst, int width);
  1905. void ARGB1555ToARGBRow_SSE2(const uint8_t* src, uint8_t* dst, int width);
  1906. void ARGB4444ToARGBRow_SSE2(const uint8_t* src, uint8_t* dst, int width);
  1907. void RGB565ToARGBRow_AVX2(const uint8_t* src_rgb565,
  1908. uint8_t* dst_argb,
  1909. int width);
  1910. void ARGB1555ToARGBRow_AVX2(const uint8_t* src_argb1555,
  1911. uint8_t* dst_argb,
  1912. int width);
  1913. void ARGB4444ToARGBRow_AVX2(const uint8_t* src_argb4444,
  1914. uint8_t* dst_argb,
  1915. int width);
  1916. void RGB24ToARGBRow_NEON(const uint8_t* src_rgb24,
  1917. uint8_t* dst_argb,
  1918. int width);
  1919. void RGB24ToARGBRow_MSA(const uint8_t* src_rgb24, uint8_t* dst_argb, int width);
  1920. void RGB24ToARGBRow_MMI(const uint8_t* src_rgb24, uint8_t* dst_argb, int width);
  1921. void RAWToARGBRow_NEON(const uint8_t* src_raw, uint8_t* dst_argb, int width);
  1922. void RAWToRGBARow_NEON(const uint8_t* src_raw, uint8_t* dst_rgba, int width);
  1923. void RAWToARGBRow_MSA(const uint8_t* src_raw, uint8_t* dst_argb, int width);
  1924. void RAWToARGBRow_MMI(const uint8_t* src_raw, uint8_t* dst_argb, int width);
  1925. void RAWToRGB24Row_NEON(const uint8_t* src_raw, uint8_t* dst_rgb24, int width);
  1926. void RAWToRGB24Row_MSA(const uint8_t* src_raw, uint8_t* dst_rgb24, int width);
  1927. void RAWToRGB24Row_MMI(const uint8_t* src_raw, uint8_t* dst_rgb24, int width);
  1928. void RGB565ToARGBRow_NEON(const uint8_t* src_rgb565,
  1929. uint8_t* dst_argb,
  1930. int width);
  1931. void RGB565ToARGBRow_MSA(const uint8_t* src_rgb565,
  1932. uint8_t* dst_argb,
  1933. int width);
  1934. void RGB565ToARGBRow_MMI(const uint8_t* src_rgb565,
  1935. uint8_t* dst_argb,
  1936. int width);
  1937. void ARGB1555ToARGBRow_NEON(const uint8_t* src_argb1555,
  1938. uint8_t* dst_argb,
  1939. int width);
  1940. void ARGB1555ToARGBRow_MSA(const uint8_t* src_argb1555,
  1941. uint8_t* dst_argb,
  1942. int width);
  1943. void ARGB1555ToARGBRow_MMI(const uint8_t* src_argb1555,
  1944. uint8_t* dst_argb,
  1945. int width);
  1946. void ARGB4444ToARGBRow_NEON(const uint8_t* src_argb4444,
  1947. uint8_t* dst_argb,
  1948. int width);
  1949. void ARGB4444ToARGBRow_MSA(const uint8_t* src_argb4444,
  1950. uint8_t* dst_argb,
  1951. int width);
  1952. void ARGB4444ToARGBRow_MMI(const uint8_t* src_argb4444,
  1953. uint8_t* dst_argb,
  1954. int width);
  1955. void RGB24ToARGBRow_C(const uint8_t* src_rgb24, uint8_t* dst_argb, int width);
  1956. void RAWToARGBRow_C(const uint8_t* src_raw, uint8_t* dst_argb, int width);
  1957. void RAWToRGBARow_C(const uint8_t* src_raw, uint8_t* dst_rgba, int width);
  1958. void RAWToRGB24Row_C(const uint8_t* src_raw, uint8_t* dst_rgb24, int width);
  1959. void RGB565ToARGBRow_C(const uint8_t* src_rgb565, uint8_t* dst_argb, int width);
  1960. void ARGB1555ToARGBRow_C(const uint8_t* src_argb1555,
  1961. uint8_t* dst_argb,
  1962. int width);
  1963. void ARGB4444ToARGBRow_C(const uint8_t* src_argb4444,
  1964. uint8_t* dst_argb,
  1965. int width);
  1966. void AR30ToARGBRow_C(const uint8_t* src_ar30, uint8_t* dst_argb, int width);
  1967. void AR30ToABGRRow_C(const uint8_t* src_ar30, uint8_t* dst_abgr, int width);
  1968. void ARGBToAR30Row_C(const uint8_t* src_argb, uint8_t* dst_ar30, int width);
  1969. void AR30ToAB30Row_C(const uint8_t* src_ar30, uint8_t* dst_ab30, int width);
  1970. void RGB24ToARGBRow_Any_SSSE3(const uint8_t* src_ptr,
  1971. uint8_t* dst_ptr,
  1972. int width);
  1973. void RAWToARGBRow_Any_SSSE3(const uint8_t* src_ptr,
  1974. uint8_t* dst_ptr,
  1975. int width);
  1976. void RAWToRGBARow_Any_SSSE3(const uint8_t* src_ptr,
  1977. uint8_t* dst_ptr,
  1978. int width);
  1979. void RAWToRGB24Row_Any_SSSE3(const uint8_t* src_ptr,
  1980. uint8_t* dst_ptr,
  1981. int width);
  1982. void RGB565ToARGBRow_Any_SSE2(const uint8_t* src_ptr,
  1983. uint8_t* dst_ptr,
  1984. int width);
  1985. void ARGB1555ToARGBRow_Any_SSE2(const uint8_t* src_ptr,
  1986. uint8_t* dst_ptr,
  1987. int width);
  1988. void ARGB4444ToARGBRow_Any_SSE2(const uint8_t* src_ptr,
  1989. uint8_t* dst_ptr,
  1990. int width);
  1991. void RGB565ToARGBRow_Any_AVX2(const uint8_t* src_ptr,
  1992. uint8_t* dst_ptr,
  1993. int width);
  1994. void ARGB1555ToARGBRow_Any_AVX2(const uint8_t* src_ptr,
  1995. uint8_t* dst_ptr,
  1996. int width);
  1997. void ARGB4444ToARGBRow_Any_AVX2(const uint8_t* src_ptr,
  1998. uint8_t* dst_ptr,
  1999. int width);
  2000. void RGB24ToARGBRow_Any_NEON(const uint8_t* src_ptr,
  2001. uint8_t* dst_ptr,
  2002. int width);
  2003. void RGB24ToARGBRow_Any_MSA(const uint8_t* src_ptr,
  2004. uint8_t* dst_ptr,
  2005. int width);
  2006. void RGB24ToARGBRow_Any_MMI(const uint8_t* src_ptr,
  2007. uint8_t* dst_ptr,
  2008. int width);
  2009. void RAWToARGBRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  2010. void RAWToRGBARow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  2011. void RAWToARGBRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  2012. void RAWToARGBRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  2013. void RAWToRGB24Row_Any_NEON(const uint8_t* src_ptr,
  2014. uint8_t* dst_ptr,
  2015. int width);
  2016. void RAWToRGB24Row_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  2017. void RAWToRGB24Row_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  2018. void RGB565ToARGBRow_Any_NEON(const uint8_t* src_ptr,
  2019. uint8_t* dst_ptr,
  2020. int width);
  2021. void RGB565ToARGBRow_Any_MSA(const uint8_t* src_ptr,
  2022. uint8_t* dst_ptr,
  2023. int width);
  2024. void RGB565ToARGBRow_Any_MMI(const uint8_t* src_ptr,
  2025. uint8_t* dst_ptr,
  2026. int width);
  2027. void ARGB1555ToARGBRow_Any_NEON(const uint8_t* src_ptr,
  2028. uint8_t* dst_ptr,
  2029. int width);
  2030. void ARGB1555ToARGBRow_Any_MSA(const uint8_t* src_ptr,
  2031. uint8_t* dst_ptr,
  2032. int width);
  2033. void ARGB1555ToARGBRow_Any_MMI(const uint8_t* src_ptr,
  2034. uint8_t* dst_ptr,
  2035. int width);
  2036. void ARGB4444ToARGBRow_Any_NEON(const uint8_t* src_ptr,
  2037. uint8_t* dst_ptr,
  2038. int width);
  2039. void ARGB4444ToARGBRow_Any_MSA(const uint8_t* src_ptr,
  2040. uint8_t* dst_ptr,
  2041. int width);
  2042. void ARGB4444ToARGBRow_Any_MMI(const uint8_t* src_ptr,
  2043. uint8_t* dst_ptr,
  2044. int width);
  2045. void ARGBToRGB24Row_SSSE3(const uint8_t* src, uint8_t* dst, int width);
  2046. void ARGBToRAWRow_SSSE3(const uint8_t* src, uint8_t* dst, int width);
  2047. void ARGBToRGB565Row_SSE2(const uint8_t* src, uint8_t* dst, int width);
  2048. void ARGBToARGB1555Row_SSE2(const uint8_t* src, uint8_t* dst, int width);
  2049. void ARGBToARGB4444Row_SSE2(const uint8_t* src, uint8_t* dst, int width);
  2050. void ABGRToAR30Row_SSSE3(const uint8_t* src, uint8_t* dst, int width);
  2051. void ARGBToAR30Row_SSSE3(const uint8_t* src, uint8_t* dst, int width);
  2052. void ARGBToRAWRow_AVX2(const uint8_t* src, uint8_t* dst, int width);
  2053. void ARGBToRGB24Row_AVX2(const uint8_t* src, uint8_t* dst, int width);
  2054. void ARGBToRGB24Row_AVX512VBMI(const uint8_t* src, uint8_t* dst, int width);
  2055. void ARGBToRGB565DitherRow_C(const uint8_t* src_argb,
  2056. uint8_t* dst_rgb,
  2057. const uint32_t dither4,
  2058. int width);
  2059. void ARGBToRGB565DitherRow_SSE2(const uint8_t* src,
  2060. uint8_t* dst,
  2061. const uint32_t dither4,
  2062. int width);
  2063. void ARGBToRGB565DitherRow_AVX2(const uint8_t* src,
  2064. uint8_t* dst,
  2065. const uint32_t dither4,
  2066. int width);
  2067. void ARGBToRGB565Row_AVX2(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
  2068. void ARGBToARGB1555Row_AVX2(const uint8_t* src_argb,
  2069. uint8_t* dst_rgb,
  2070. int width);
  2071. void ARGBToARGB4444Row_AVX2(const uint8_t* src_argb,
  2072. uint8_t* dst_rgb,
  2073. int width);
  2074. void ABGRToAR30Row_AVX2(const uint8_t* src, uint8_t* dst, int width);
  2075. void ARGBToAR30Row_AVX2(const uint8_t* src, uint8_t* dst, int width);
  2076. void ARGBToRGB24Row_NEON(const uint8_t* src_argb,
  2077. uint8_t* dst_rgb24,
  2078. int width);
  2079. void ARGBToRAWRow_NEON(const uint8_t* src_argb, uint8_t* dst_raw, int width);
  2080. void ARGBToRGB565Row_NEON(const uint8_t* src_argb,
  2081. uint8_t* dst_rgb565,
  2082. int width);
  2083. void ARGBToARGB1555Row_NEON(const uint8_t* src_argb,
  2084. uint8_t* dst_argb1555,
  2085. int width);
  2086. void ARGBToARGB4444Row_NEON(const uint8_t* src_argb,
  2087. uint8_t* dst_argb4444,
  2088. int width);
  2089. void ARGBToRGB565DitherRow_NEON(const uint8_t* src_argb,
  2090. uint8_t* dst_rgb,
  2091. const uint32_t dither4,
  2092. int width);
  2093. void ARGBToRGB24Row_MSA(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
  2094. void ARGBToRAWRow_MSA(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
  2095. void ARGBToRGB565Row_MSA(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
  2096. void ARGBToARGB1555Row_MSA(const uint8_t* src_argb,
  2097. uint8_t* dst_rgb,
  2098. int width);
  2099. void ARGBToARGB4444Row_MSA(const uint8_t* src_argb,
  2100. uint8_t* dst_rgb,
  2101. int width);
  2102. void ARGBToRGB565DitherRow_MSA(const uint8_t* src_argb,
  2103. uint8_t* dst_rgb,
  2104. const uint32_t dither4,
  2105. int width);
  2106. void ARGBToRGB24Row_MMI(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
  2107. void ARGBToRAWRow_MMI(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
  2108. void ARGBToRGB565Row_MMI(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
  2109. void ARGBToARGB1555Row_MMI(const uint8_t* src_argb,
  2110. uint8_t* dst_rgb,
  2111. int width);
  2112. void ARGBToARGB4444Row_MMI(const uint8_t* src_argb,
  2113. uint8_t* dst_rgb,
  2114. int width);
  2115. void ARGBToRGB565DitherRow_MMI(const uint8_t* src_argb,
  2116. uint8_t* dst_rgb,
  2117. const uint32_t dither4,
  2118. int width);
  2119. void ARGBToRGBARow_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
  2120. void ARGBToRGB24Row_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
  2121. void ARGBToRAWRow_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
  2122. void ARGBToRGB565Row_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
  2123. void ARGBToARGB1555Row_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
  2124. void ARGBToARGB4444Row_C(const uint8_t* src_argb, uint8_t* dst_rgb, int width);
  2125. void ABGRToAR30Row_C(const uint8_t* src_abgr, uint8_t* dst_ar30, int width);
  2126. void ARGBToAR30Row_C(const uint8_t* src_argb, uint8_t* dst_ar30, int width);
  2127. void J400ToARGBRow_SSE2(const uint8_t* src_y, uint8_t* dst_argb, int width);
  2128. void J400ToARGBRow_AVX2(const uint8_t* src_y, uint8_t* dst_argb, int width);
  2129. void J400ToARGBRow_NEON(const uint8_t* src_y, uint8_t* dst_argb, int width);
  2130. void J400ToARGBRow_MSA(const uint8_t* src_y, uint8_t* dst_argb, int width);
  2131. void J400ToARGBRow_MMI(const uint8_t* src_y, uint8_t* dst_argb, int width);
  2132. void J400ToARGBRow_C(const uint8_t* src_y, uint8_t* dst_argb, int width);
  2133. void J400ToARGBRow_Any_SSE2(const uint8_t* src_ptr,
  2134. uint8_t* dst_ptr,
  2135. int width);
  2136. void J400ToARGBRow_Any_AVX2(const uint8_t* src_ptr,
  2137. uint8_t* dst_ptr,
  2138. int width);
  2139. void J400ToARGBRow_Any_NEON(const uint8_t* src_ptr,
  2140. uint8_t* dst_ptr,
  2141. int width);
  2142. void J400ToARGBRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  2143. void J400ToARGBRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  2144. void I444ToARGBRow_C(const uint8_t* src_y,
  2145. const uint8_t* src_u,
  2146. const uint8_t* src_v,
  2147. uint8_t* rgb_buf,
  2148. const struct YuvConstants* yuvconstants,
  2149. int width);
  2150. void I422ToARGBRow_C(const uint8_t* src_y,
  2151. const uint8_t* src_u,
  2152. const uint8_t* src_v,
  2153. uint8_t* rgb_buf,
  2154. const struct YuvConstants* yuvconstants,
  2155. int width);
  2156. void I422ToAR30Row_C(const uint8_t* src_y,
  2157. const uint8_t* src_u,
  2158. const uint8_t* src_v,
  2159. uint8_t* rgb_buf,
  2160. const struct YuvConstants* yuvconstants,
  2161. int width);
  2162. void I210ToAR30Row_C(const uint16_t* src_y,
  2163. const uint16_t* src_u,
  2164. const uint16_t* src_v,
  2165. uint8_t* rgb_buf,
  2166. const struct YuvConstants* yuvconstants,
  2167. int width);
  2168. void I210ToARGBRow_C(const uint16_t* src_y,
  2169. const uint16_t* src_u,
  2170. const uint16_t* src_v,
  2171. uint8_t* rgb_buf,
  2172. const struct YuvConstants* yuvconstants,
  2173. int width);
  2174. void I422AlphaToARGBRow_C(const uint8_t* src_y,
  2175. const uint8_t* src_u,
  2176. const uint8_t* src_v,
  2177. const uint8_t* src_a,
  2178. uint8_t* rgb_buf,
  2179. const struct YuvConstants* yuvconstants,
  2180. int width);
  2181. void NV12ToARGBRow_C(const uint8_t* src_y,
  2182. const uint8_t* src_uv,
  2183. uint8_t* rgb_buf,
  2184. const struct YuvConstants* yuvconstants,
  2185. int width);
  2186. void NV12ToRGB565Row_C(const uint8_t* src_y,
  2187. const uint8_t* src_uv,
  2188. uint8_t* dst_rgb565,
  2189. const struct YuvConstants* yuvconstants,
  2190. int width);
  2191. void NV21ToARGBRow_C(const uint8_t* src_y,
  2192. const uint8_t* src_vu,
  2193. uint8_t* rgb_buf,
  2194. const struct YuvConstants* yuvconstants,
  2195. int width);
  2196. void NV12ToRGB24Row_C(const uint8_t* src_y,
  2197. const uint8_t* src_uv,
  2198. uint8_t* rgb_buf,
  2199. const struct YuvConstants* yuvconstants,
  2200. int width);
  2201. void NV21ToRGB24Row_C(const uint8_t* src_y,
  2202. const uint8_t* src_vu,
  2203. uint8_t* rgb_buf,
  2204. const struct YuvConstants* yuvconstants,
  2205. int width);
  2206. void NV21ToYUV24Row_C(const uint8_t* src_y,
  2207. const uint8_t* src_vu,
  2208. uint8_t* dst_yuv24,
  2209. int width);
  2210. void YUY2ToARGBRow_C(const uint8_t* src_yuy2,
  2211. uint8_t* rgb_buf,
  2212. const struct YuvConstants* yuvconstants,
  2213. int width);
  2214. void UYVYToARGBRow_C(const uint8_t* src_uyvy,
  2215. uint8_t* rgb_buf,
  2216. const struct YuvConstants* yuvconstants,
  2217. int width);
  2218. void I422ToRGBARow_C(const uint8_t* src_y,
  2219. const uint8_t* src_u,
  2220. const uint8_t* src_v,
  2221. uint8_t* rgb_buf,
  2222. const struct YuvConstants* yuvconstants,
  2223. int width);
  2224. void I422ToRGB24Row_C(const uint8_t* src_y,
  2225. const uint8_t* src_u,
  2226. const uint8_t* src_v,
  2227. uint8_t* rgb_buf,
  2228. const struct YuvConstants* yuvconstants,
  2229. int width);
  2230. void I422ToARGB4444Row_C(const uint8_t* src_y,
  2231. const uint8_t* src_u,
  2232. const uint8_t* src_v,
  2233. uint8_t* dst_argb4444,
  2234. const struct YuvConstants* yuvconstants,
  2235. int width);
  2236. void I422ToARGB1555Row_C(const uint8_t* src_y,
  2237. const uint8_t* src_u,
  2238. const uint8_t* src_v,
  2239. uint8_t* dst_argb1555,
  2240. const struct YuvConstants* yuvconstants,
  2241. int width);
  2242. void I422ToRGB565Row_C(const uint8_t* src_y,
  2243. const uint8_t* src_u,
  2244. const uint8_t* src_v,
  2245. uint8_t* dst_rgb565,
  2246. const struct YuvConstants* yuvconstants,
  2247. int width);
  2248. void I422ToARGBRow_AVX2(const uint8_t* y_buf,
  2249. const uint8_t* u_buf,
  2250. const uint8_t* v_buf,
  2251. uint8_t* dst_argb,
  2252. const struct YuvConstants* yuvconstants,
  2253. int width);
  2254. void I422ToRGBARow_AVX2(const uint8_t* y_buf,
  2255. const uint8_t* u_buf,
  2256. const uint8_t* v_buf,
  2257. uint8_t* dst_argb,
  2258. const struct YuvConstants* yuvconstants,
  2259. int width);
  2260. void I444ToARGBRow_SSSE3(const uint8_t* y_buf,
  2261. const uint8_t* u_buf,
  2262. const uint8_t* v_buf,
  2263. uint8_t* dst_argb,
  2264. const struct YuvConstants* yuvconstants,
  2265. int width);
  2266. void I444ToARGBRow_AVX2(const uint8_t* y_buf,
  2267. const uint8_t* u_buf,
  2268. const uint8_t* v_buf,
  2269. uint8_t* dst_argb,
  2270. const struct YuvConstants* yuvconstants,
  2271. int width);
  2272. void I444ToARGBRow_SSSE3(const uint8_t* y_buf,
  2273. const uint8_t* u_buf,
  2274. const uint8_t* v_buf,
  2275. uint8_t* dst_argb,
  2276. const struct YuvConstants* yuvconstants,
  2277. int width);
  2278. void I444ToARGBRow_AVX2(const uint8_t* y_buf,
  2279. const uint8_t* u_buf,
  2280. const uint8_t* v_buf,
  2281. uint8_t* dst_argb,
  2282. const struct YuvConstants* yuvconstants,
  2283. int width);
  2284. void I422ToARGBRow_SSSE3(const uint8_t* y_buf,
  2285. const uint8_t* u_buf,
  2286. const uint8_t* v_buf,
  2287. uint8_t* dst_argb,
  2288. const struct YuvConstants* yuvconstants,
  2289. int width);
  2290. void I422ToAR30Row_SSSE3(const uint8_t* y_buf,
  2291. const uint8_t* u_buf,
  2292. const uint8_t* v_buf,
  2293. uint8_t* dst_ar30,
  2294. const struct YuvConstants* yuvconstants,
  2295. int width);
  2296. void I210ToAR30Row_SSSE3(const uint16_t* y_buf,
  2297. const uint16_t* u_buf,
  2298. const uint16_t* v_buf,
  2299. uint8_t* dst_ar30,
  2300. const struct YuvConstants* yuvconstants,
  2301. int width);
  2302. void I210ToARGBRow_SSSE3(const uint16_t* y_buf,
  2303. const uint16_t* u_buf,
  2304. const uint16_t* v_buf,
  2305. uint8_t* dst_argb,
  2306. const struct YuvConstants* yuvconstants,
  2307. int width);
  2308. void I422ToAR30Row_AVX2(const uint8_t* y_buf,
  2309. const uint8_t* u_buf,
  2310. const uint8_t* v_buf,
  2311. uint8_t* dst_ar30,
  2312. const struct YuvConstants* yuvconstants,
  2313. int width);
  2314. void I210ToARGBRow_AVX2(const uint16_t* y_buf,
  2315. const uint16_t* u_buf,
  2316. const uint16_t* v_buf,
  2317. uint8_t* dst_argb,
  2318. const struct YuvConstants* yuvconstants,
  2319. int width);
  2320. void I210ToAR30Row_AVX2(const uint16_t* y_buf,
  2321. const uint16_t* u_buf,
  2322. const uint16_t* v_buf,
  2323. uint8_t* dst_ar30,
  2324. const struct YuvConstants* yuvconstants,
  2325. int width);
  2326. void I422AlphaToARGBRow_SSSE3(const uint8_t* y_buf,
  2327. const uint8_t* u_buf,
  2328. const uint8_t* v_buf,
  2329. const uint8_t* a_buf,
  2330. uint8_t* dst_argb,
  2331. const struct YuvConstants* yuvconstants,
  2332. int width);
  2333. void I422AlphaToARGBRow_AVX2(const uint8_t* y_buf,
  2334. const uint8_t* u_buf,
  2335. const uint8_t* v_buf,
  2336. const uint8_t* a_buf,
  2337. uint8_t* dst_argb,
  2338. const struct YuvConstants* yuvconstants,
  2339. int width);
  2340. void NV12ToARGBRow_SSSE3(const uint8_t* y_buf,
  2341. const uint8_t* uv_buf,
  2342. uint8_t* dst_argb,
  2343. const struct YuvConstants* yuvconstants,
  2344. int width);
  2345. void NV12ToARGBRow_AVX2(const uint8_t* y_buf,
  2346. const uint8_t* uv_buf,
  2347. uint8_t* dst_argb,
  2348. const struct YuvConstants* yuvconstants,
  2349. int width);
  2350. void NV12ToRGB24Row_SSSE3(const uint8_t* src_y,
  2351. const uint8_t* src_uv,
  2352. uint8_t* dst_rgb24,
  2353. const struct YuvConstants* yuvconstants,
  2354. int width);
  2355. void NV21ToRGB24Row_SSSE3(const uint8_t* src_y,
  2356. const uint8_t* src_vu,
  2357. uint8_t* dst_rgb24,
  2358. const struct YuvConstants* yuvconstants,
  2359. int width);
  2360. void NV12ToRGB565Row_SSSE3(const uint8_t* src_y,
  2361. const uint8_t* src_uv,
  2362. uint8_t* dst_rgb565,
  2363. const struct YuvConstants* yuvconstants,
  2364. int width);
  2365. void NV12ToRGB24Row_AVX2(const uint8_t* src_y,
  2366. const uint8_t* src_uv,
  2367. uint8_t* dst_rgb24,
  2368. const struct YuvConstants* yuvconstants,
  2369. int width);
  2370. void NV21ToRGB24Row_AVX2(const uint8_t* src_y,
  2371. const uint8_t* src_vu,
  2372. uint8_t* dst_rgb24,
  2373. const struct YuvConstants* yuvconstants,
  2374. int width);
  2375. void NV21ToYUV24Row_AVX2(const uint8_t* src_y,
  2376. const uint8_t* src_vu,
  2377. uint8_t* dst_yuv24,
  2378. int width);
  2379. void NV12ToRGB565Row_AVX2(const uint8_t* src_y,
  2380. const uint8_t* src_uv,
  2381. uint8_t* dst_rgb565,
  2382. const struct YuvConstants* yuvconstants,
  2383. int width);
  2384. void NV21ToARGBRow_SSSE3(const uint8_t* y_buf,
  2385. const uint8_t* vu_buf,
  2386. uint8_t* dst_argb,
  2387. const struct YuvConstants* yuvconstants,
  2388. int width);
  2389. void NV21ToARGBRow_AVX2(const uint8_t* y_buf,
  2390. const uint8_t* vu_buf,
  2391. uint8_t* dst_argb,
  2392. const struct YuvConstants* yuvconstants,
  2393. int width);
  2394. void YUY2ToARGBRow_SSSE3(const uint8_t* yuy2_buf,
  2395. uint8_t* dst_argb,
  2396. const struct YuvConstants* yuvconstants,
  2397. int width);
  2398. void UYVYToARGBRow_SSSE3(const uint8_t* uyvy_buf,
  2399. uint8_t* dst_argb,
  2400. const struct YuvConstants* yuvconstants,
  2401. int width);
  2402. void YUY2ToARGBRow_AVX2(const uint8_t* yuy2_buf,
  2403. uint8_t* dst_argb,
  2404. const struct YuvConstants* yuvconstants,
  2405. int width);
  2406. void UYVYToARGBRow_AVX2(const uint8_t* uyvy_buf,
  2407. uint8_t* dst_argb,
  2408. const struct YuvConstants* yuvconstants,
  2409. int width);
  2410. void I422ToRGBARow_SSSE3(const uint8_t* y_buf,
  2411. const uint8_t* u_buf,
  2412. const uint8_t* v_buf,
  2413. uint8_t* dst_rgba,
  2414. const struct YuvConstants* yuvconstants,
  2415. int width);
  2416. void I422ToARGB4444Row_SSSE3(const uint8_t* src_y,
  2417. const uint8_t* src_u,
  2418. const uint8_t* src_v,
  2419. uint8_t* dst_argb4444,
  2420. const struct YuvConstants* yuvconstants,
  2421. int width);
  2422. void I422ToARGB4444Row_AVX2(const uint8_t* src_y,
  2423. const uint8_t* src_u,
  2424. const uint8_t* src_v,
  2425. uint8_t* dst_argb4444,
  2426. const struct YuvConstants* yuvconstants,
  2427. int width);
  2428. void I422ToARGB1555Row_SSSE3(const uint8_t* src_y,
  2429. const uint8_t* src_u,
  2430. const uint8_t* src_v,
  2431. uint8_t* dst_argb1555,
  2432. const struct YuvConstants* yuvconstants,
  2433. int width);
  2434. void I422ToARGB1555Row_AVX2(const uint8_t* src_y,
  2435. const uint8_t* src_u,
  2436. const uint8_t* src_v,
  2437. uint8_t* dst_argb1555,
  2438. const struct YuvConstants* yuvconstants,
  2439. int width);
  2440. void I422ToRGB565Row_SSSE3(const uint8_t* src_y,
  2441. const uint8_t* src_u,
  2442. const uint8_t* src_v,
  2443. uint8_t* dst_rgb565,
  2444. const struct YuvConstants* yuvconstants,
  2445. int width);
  2446. void I422ToRGB565Row_AVX2(const uint8_t* src_y,
  2447. const uint8_t* src_u,
  2448. const uint8_t* src_v,
  2449. uint8_t* dst_rgb565,
  2450. const struct YuvConstants* yuvconstants,
  2451. int width);
  2452. void I422ToRGB24Row_SSSE3(const uint8_t* y_buf,
  2453. const uint8_t* u_buf,
  2454. const uint8_t* v_buf,
  2455. uint8_t* dst_rgb24,
  2456. const struct YuvConstants* yuvconstants,
  2457. int width);
  2458. void I422ToRGB24Row_AVX2(const uint8_t* src_y,
  2459. const uint8_t* src_u,
  2460. const uint8_t* src_v,
  2461. uint8_t* dst_rgb24,
  2462. const struct YuvConstants* yuvconstants,
  2463. int width);
  2464. void I422ToARGBRow_Any_AVX2(const uint8_t* y_buf,
  2465. const uint8_t* u_buf,
  2466. const uint8_t* v_buf,
  2467. uint8_t* dst_ptr,
  2468. const struct YuvConstants* yuvconstants,
  2469. int width);
  2470. void I422ToRGBARow_Any_AVX2(const uint8_t* y_buf,
  2471. const uint8_t* u_buf,
  2472. const uint8_t* v_buf,
  2473. uint8_t* dst_ptr,
  2474. const struct YuvConstants* yuvconstants,
  2475. int width);
  2476. void I444ToARGBRow_Any_SSSE3(const uint8_t* y_buf,
  2477. const uint8_t* u_buf,
  2478. const uint8_t* v_buf,
  2479. uint8_t* dst_ptr,
  2480. const struct YuvConstants* yuvconstants,
  2481. int width);
  2482. void I444ToARGBRow_Any_AVX2(const uint8_t* y_buf,
  2483. const uint8_t* u_buf,
  2484. const uint8_t* v_buf,
  2485. uint8_t* dst_ptr,
  2486. const struct YuvConstants* yuvconstants,
  2487. int width);
  2488. void I422ToARGBRow_Any_SSSE3(const uint8_t* y_buf,
  2489. const uint8_t* u_buf,
  2490. const uint8_t* v_buf,
  2491. uint8_t* dst_ptr,
  2492. const struct YuvConstants* yuvconstants,
  2493. int width);
  2494. void I422ToAR30Row_Any_SSSE3(const uint8_t* y_buf,
  2495. const uint8_t* u_buf,
  2496. const uint8_t* v_buf,
  2497. uint8_t* dst_ptr,
  2498. const struct YuvConstants* yuvconstants,
  2499. int width);
  2500. void I210ToAR30Row_Any_SSSE3(const uint16_t* y_buf,
  2501. const uint16_t* u_buf,
  2502. const uint16_t* v_buf,
  2503. uint8_t* dst_ptr,
  2504. const struct YuvConstants* yuvconstants,
  2505. int width);
  2506. void I210ToARGBRow_Any_SSSE3(const uint16_t* y_buf,
  2507. const uint16_t* u_buf,
  2508. const uint16_t* v_buf,
  2509. uint8_t* dst_ptr,
  2510. const struct YuvConstants* yuvconstants,
  2511. int width);
  2512. void I422ToAR30Row_Any_AVX2(const uint8_t* y_buf,
  2513. const uint8_t* u_buf,
  2514. const uint8_t* v_buf,
  2515. uint8_t* dst_ptr,
  2516. const struct YuvConstants* yuvconstants,
  2517. int width);
  2518. void I210ToARGBRow_Any_AVX2(const uint16_t* y_buf,
  2519. const uint16_t* u_buf,
  2520. const uint16_t* v_buf,
  2521. uint8_t* dst_ptr,
  2522. const struct YuvConstants* yuvconstants,
  2523. int width);
  2524. void I210ToAR30Row_Any_AVX2(const uint16_t* y_buf,
  2525. const uint16_t* u_buf,
  2526. const uint16_t* v_buf,
  2527. uint8_t* dst_ptr,
  2528. const struct YuvConstants* yuvconstants,
  2529. int width);
  2530. void I422AlphaToARGBRow_Any_SSSE3(const uint8_t* y_buf,
  2531. const uint8_t* u_buf,
  2532. const uint8_t* v_buf,
  2533. const uint8_t* a_buf,
  2534. uint8_t* dst_ptr,
  2535. const struct YuvConstants* yuvconstants,
  2536. int width);
  2537. void I422AlphaToARGBRow_Any_AVX2(const uint8_t* y_buf,
  2538. const uint8_t* u_buf,
  2539. const uint8_t* v_buf,
  2540. const uint8_t* a_buf,
  2541. uint8_t* dst_ptr,
  2542. const struct YuvConstants* yuvconstants,
  2543. int width);
  2544. void NV12ToARGBRow_Any_SSSE3(const uint8_t* y_buf,
  2545. const uint8_t* uv_buf,
  2546. uint8_t* dst_ptr,
  2547. const struct YuvConstants* yuvconstants,
  2548. int width);
  2549. void NV12ToARGBRow_Any_AVX2(const uint8_t* y_buf,
  2550. const uint8_t* uv_buf,
  2551. uint8_t* dst_ptr,
  2552. const struct YuvConstants* yuvconstants,
  2553. int width);
  2554. void NV21ToARGBRow_Any_SSSE3(const uint8_t* y_buf,
  2555. const uint8_t* uv_buf,
  2556. uint8_t* dst_ptr,
  2557. const struct YuvConstants* yuvconstants,
  2558. int width);
  2559. void NV21ToARGBRow_Any_AVX2(const uint8_t* y_buf,
  2560. const uint8_t* uv_buf,
  2561. uint8_t* dst_ptr,
  2562. const struct YuvConstants* yuvconstants,
  2563. int width);
  2564. void NV12ToRGB24Row_Any_SSSE3(const uint8_t* y_buf,
  2565. const uint8_t* uv_buf,
  2566. uint8_t* dst_ptr,
  2567. const struct YuvConstants* yuvconstants,
  2568. int width);
  2569. void NV21ToRGB24Row_Any_SSSE3(const uint8_t* y_buf,
  2570. const uint8_t* uv_buf,
  2571. uint8_t* dst_ptr,
  2572. const struct YuvConstants* yuvconstants,
  2573. int width);
  2574. void NV12ToRGB24Row_Any_AVX2(const uint8_t* y_buf,
  2575. const uint8_t* uv_buf,
  2576. uint8_t* dst_ptr,
  2577. const struct YuvConstants* yuvconstants,
  2578. int width);
  2579. void NV21ToRGB24Row_Any_AVX2(const uint8_t* y_buf,
  2580. const uint8_t* uv_buf,
  2581. uint8_t* dst_ptr,
  2582. const struct YuvConstants* yuvconstants,
  2583. int width);
  2584. void NV21ToYUV24Row_Any_AVX2(const uint8_t* src_y,
  2585. const uint8_t* src_vu,
  2586. uint8_t* dst_yuv24,
  2587. int width);
  2588. void NV12ToRGB565Row_Any_SSSE3(const uint8_t* y_buf,
  2589. const uint8_t* uv_buf,
  2590. uint8_t* dst_ptr,
  2591. const struct YuvConstants* yuvconstants,
  2592. int width);
  2593. void NV12ToRGB565Row_Any_AVX2(const uint8_t* y_buf,
  2594. const uint8_t* uv_buf,
  2595. uint8_t* dst_ptr,
  2596. const struct YuvConstants* yuvconstants,
  2597. int width);
  2598. void YUY2ToARGBRow_Any_SSSE3(const uint8_t* src_ptr,
  2599. uint8_t* dst_ptr,
  2600. const struct YuvConstants* yuvconstants,
  2601. int width);
  2602. void UYVYToARGBRow_Any_SSSE3(const uint8_t* src_ptr,
  2603. uint8_t* dst_ptr,
  2604. const struct YuvConstants* yuvconstants,
  2605. int width);
  2606. void YUY2ToARGBRow_Any_AVX2(const uint8_t* src_ptr,
  2607. uint8_t* dst_ptr,
  2608. const struct YuvConstants* yuvconstants,
  2609. int width);
  2610. void UYVYToARGBRow_Any_AVX2(const uint8_t* src_ptr,
  2611. uint8_t* dst_ptr,
  2612. const struct YuvConstants* yuvconstants,
  2613. int width);
  2614. void I422ToRGBARow_Any_SSSE3(const uint8_t* y_buf,
  2615. const uint8_t* u_buf,
  2616. const uint8_t* v_buf,
  2617. uint8_t* dst_ptr,
  2618. const struct YuvConstants* yuvconstants,
  2619. int width);
  2620. void I422ToARGB4444Row_Any_SSSE3(const uint8_t* y_buf,
  2621. const uint8_t* u_buf,
  2622. const uint8_t* v_buf,
  2623. uint8_t* dst_ptr,
  2624. const struct YuvConstants* yuvconstants,
  2625. int width);
  2626. void I422ToARGB4444Row_Any_AVX2(const uint8_t* y_buf,
  2627. const uint8_t* u_buf,
  2628. const uint8_t* v_buf,
  2629. uint8_t* dst_ptr,
  2630. const struct YuvConstants* yuvconstants,
  2631. int width);
  2632. void I422ToARGB1555Row_Any_SSSE3(const uint8_t* y_buf,
  2633. const uint8_t* u_buf,
  2634. const uint8_t* v_buf,
  2635. uint8_t* dst_ptr,
  2636. const struct YuvConstants* yuvconstants,
  2637. int width);
  2638. void I422ToARGB1555Row_Any_AVX2(const uint8_t* y_buf,
  2639. const uint8_t* u_buf,
  2640. const uint8_t* v_buf,
  2641. uint8_t* dst_ptr,
  2642. const struct YuvConstants* yuvconstants,
  2643. int width);
  2644. void I422ToRGB565Row_Any_SSSE3(const uint8_t* y_buf,
  2645. const uint8_t* u_buf,
  2646. const uint8_t* v_buf,
  2647. uint8_t* dst_ptr,
  2648. const struct YuvConstants* yuvconstants,
  2649. int width);
  2650. void I422ToRGB565Row_Any_AVX2(const uint8_t* y_buf,
  2651. const uint8_t* u_buf,
  2652. const uint8_t* v_buf,
  2653. uint8_t* dst_ptr,
  2654. const struct YuvConstants* yuvconstants,
  2655. int width);
  2656. void I422ToRGB24Row_Any_SSSE3(const uint8_t* y_buf,
  2657. const uint8_t* u_buf,
  2658. const uint8_t* v_buf,
  2659. uint8_t* dst_ptr,
  2660. const struct YuvConstants* yuvconstants,
  2661. int width);
  2662. void I422ToRGB24Row_Any_AVX2(const uint8_t* y_buf,
  2663. const uint8_t* u_buf,
  2664. const uint8_t* v_buf,
  2665. uint8_t* dst_ptr,
  2666. const struct YuvConstants* yuvconstants,
  2667. int width);
  2668. void I400ToARGBRow_C(const uint8_t* src_y, uint8_t* rgb_buf, int width);
  2669. void I400ToARGBRow_SSE2(const uint8_t* y_buf, uint8_t* dst_argb, int width);
  2670. void I400ToARGBRow_AVX2(const uint8_t* y_buf, uint8_t* dst_argb, int width);
  2671. void I400ToARGBRow_NEON(const uint8_t* src_y, uint8_t* dst_argb, int width);
  2672. void I400ToARGBRow_MSA(const uint8_t* src_y, uint8_t* dst_argb, int width);
  2673. void I400ToARGBRow_MMI(const uint8_t* src_y, uint8_t* dst_argb, int width);
  2674. void I400ToARGBRow_Any_SSE2(const uint8_t* src_ptr,
  2675. uint8_t* dst_ptr,
  2676. int width);
  2677. void I400ToARGBRow_Any_AVX2(const uint8_t* src_ptr,
  2678. uint8_t* dst_ptr,
  2679. int width);
  2680. void I400ToARGBRow_Any_NEON(const uint8_t* src_ptr,
  2681. uint8_t* dst_ptr,
  2682. int width);
  2683. void I400ToARGBRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  2684. void I400ToARGBRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  2685. // ARGB preattenuated alpha blend.
  2686. void ARGBBlendRow_SSSE3(const uint8_t* src_argb0,
  2687. const uint8_t* src_argb1,
  2688. uint8_t* dst_argb,
  2689. int width);
  2690. void ARGBBlendRow_NEON(const uint8_t* src_argb0,
  2691. const uint8_t* src_argb1,
  2692. uint8_t* dst_argb,
  2693. int width);
  2694. void ARGBBlendRow_MSA(const uint8_t* src_argb0,
  2695. const uint8_t* src_argb1,
  2696. uint8_t* dst_argb,
  2697. int width);
  2698. void ARGBBlendRow_MMI(const uint8_t* src_argb0,
  2699. const uint8_t* src_argb1,
  2700. uint8_t* dst_argb,
  2701. int width);
  2702. void ARGBBlendRow_C(const uint8_t* src_argb0,
  2703. const uint8_t* src_argb1,
  2704. uint8_t* dst_argb,
  2705. int width);
  2706. // Unattenuated planar alpha blend.
  2707. void BlendPlaneRow_SSSE3(const uint8_t* src0,
  2708. const uint8_t* src1,
  2709. const uint8_t* alpha,
  2710. uint8_t* dst,
  2711. int width);
  2712. void BlendPlaneRow_Any_SSSE3(const uint8_t* y_buf,
  2713. const uint8_t* u_buf,
  2714. const uint8_t* v_buf,
  2715. uint8_t* dst_ptr,
  2716. int width);
  2717. void BlendPlaneRow_AVX2(const uint8_t* src0,
  2718. const uint8_t* src1,
  2719. const uint8_t* alpha,
  2720. uint8_t* dst,
  2721. int width);
  2722. void BlendPlaneRow_Any_AVX2(const uint8_t* y_buf,
  2723. const uint8_t* u_buf,
  2724. const uint8_t* v_buf,
  2725. uint8_t* dst_ptr,
  2726. int width);
  2727. void BlendPlaneRow_MMI(const uint8_t* src0,
  2728. const uint8_t* src1,
  2729. const uint8_t* alpha,
  2730. uint8_t* dst,
  2731. int width);
  2732. void BlendPlaneRow_Any_MMI(const uint8_t* y_buf,
  2733. const uint8_t* u_buf,
  2734. const uint8_t* v_buf,
  2735. uint8_t* dst_ptr,
  2736. int width);
  2737. void BlendPlaneRow_C(const uint8_t* src0,
  2738. const uint8_t* src1,
  2739. const uint8_t* alpha,
  2740. uint8_t* dst,
  2741. int width);
  2742. // ARGB multiply images. Same API as Blend, but these require
  2743. // pointer and width alignment for SSE2.
  2744. void ARGBMultiplyRow_C(const uint8_t* src_argb0,
  2745. const uint8_t* src_argb1,
  2746. uint8_t* dst_argb,
  2747. int width);
  2748. void ARGBMultiplyRow_SSE2(const uint8_t* src_argb0,
  2749. const uint8_t* src_argb1,
  2750. uint8_t* dst_argb,
  2751. int width);
  2752. void ARGBMultiplyRow_Any_SSE2(const uint8_t* y_buf,
  2753. const uint8_t* uv_buf,
  2754. uint8_t* dst_ptr,
  2755. int width);
  2756. void ARGBMultiplyRow_AVX2(const uint8_t* src_argb0,
  2757. const uint8_t* src_argb1,
  2758. uint8_t* dst_argb,
  2759. int width);
  2760. void ARGBMultiplyRow_Any_AVX2(const uint8_t* y_buf,
  2761. const uint8_t* uv_buf,
  2762. uint8_t* dst_ptr,
  2763. int width);
  2764. void ARGBMultiplyRow_NEON(const uint8_t* src_argb0,
  2765. const uint8_t* src_argb1,
  2766. uint8_t* dst_argb,
  2767. int width);
  2768. void ARGBMultiplyRow_Any_NEON(const uint8_t* y_buf,
  2769. const uint8_t* uv_buf,
  2770. uint8_t* dst_ptr,
  2771. int width);
  2772. void ARGBMultiplyRow_MSA(const uint8_t* src_argb0,
  2773. const uint8_t* src_argb1,
  2774. uint8_t* dst_argb,
  2775. int width);
  2776. void ARGBMultiplyRow_Any_MSA(const uint8_t* y_buf,
  2777. const uint8_t* uv_buf,
  2778. uint8_t* dst_ptr,
  2779. int width);
  2780. void ARGBMultiplyRow_MMI(const uint8_t* src_argb0,
  2781. const uint8_t* src_argb1,
  2782. uint8_t* dst_argb,
  2783. int width);
  2784. void ARGBMultiplyRow_Any_MMI(const uint8_t* y_buf,
  2785. const uint8_t* uv_buf,
  2786. uint8_t* dst_ptr,
  2787. int width);
  2788. // ARGB add images.
  2789. void ARGBAddRow_C(const uint8_t* src_argb0,
  2790. const uint8_t* src_argb1,
  2791. uint8_t* dst_argb,
  2792. int width);
  2793. void ARGBAddRow_SSE2(const uint8_t* src_argb0,
  2794. const uint8_t* src_argb1,
  2795. uint8_t* dst_argb,
  2796. int width);
  2797. void ARGBAddRow_Any_SSE2(const uint8_t* y_buf,
  2798. const uint8_t* uv_buf,
  2799. uint8_t* dst_ptr,
  2800. int width);
  2801. void ARGBAddRow_AVX2(const uint8_t* src_argb0,
  2802. const uint8_t* src_argb1,
  2803. uint8_t* dst_argb,
  2804. int width);
  2805. void ARGBAddRow_Any_AVX2(const uint8_t* y_buf,
  2806. const uint8_t* uv_buf,
  2807. uint8_t* dst_ptr,
  2808. int width);
  2809. void ARGBAddRow_NEON(const uint8_t* src_argb0,
  2810. const uint8_t* src_argb1,
  2811. uint8_t* dst_argb,
  2812. int width);
  2813. void ARGBAddRow_Any_NEON(const uint8_t* y_buf,
  2814. const uint8_t* uv_buf,
  2815. uint8_t* dst_ptr,
  2816. int width);
  2817. void ARGBAddRow_MSA(const uint8_t* src_argb0,
  2818. const uint8_t* src_argb1,
  2819. uint8_t* dst_argb,
  2820. int width);
  2821. void ARGBAddRow_Any_MSA(const uint8_t* y_buf,
  2822. const uint8_t* uv_buf,
  2823. uint8_t* dst_ptr,
  2824. int width);
  2825. void ARGBAddRow_MMI(const uint8_t* src_argb0,
  2826. const uint8_t* src_argb1,
  2827. uint8_t* dst_argb,
  2828. int width);
  2829. void ARGBAddRow_Any_MMI(const uint8_t* y_buf,
  2830. const uint8_t* uv_buf,
  2831. uint8_t* dst_ptr,
  2832. int width);
  2833. // ARGB subtract images. Same API as Blend, but these require
  2834. // pointer and width alignment for SSE2.
  2835. void ARGBSubtractRow_C(const uint8_t* src_argb0,
  2836. const uint8_t* src_argb1,
  2837. uint8_t* dst_argb,
  2838. int width);
  2839. void ARGBSubtractRow_SSE2(const uint8_t* src_argb0,
  2840. const uint8_t* src_argb1,
  2841. uint8_t* dst_argb,
  2842. int width);
  2843. void ARGBSubtractRow_Any_SSE2(const uint8_t* y_buf,
  2844. const uint8_t* uv_buf,
  2845. uint8_t* dst_ptr,
  2846. int width);
  2847. void ARGBSubtractRow_AVX2(const uint8_t* src_argb0,
  2848. const uint8_t* src_argb1,
  2849. uint8_t* dst_argb,
  2850. int width);
  2851. void ARGBSubtractRow_Any_AVX2(const uint8_t* y_buf,
  2852. const uint8_t* uv_buf,
  2853. uint8_t* dst_ptr,
  2854. int width);
  2855. void ARGBSubtractRow_NEON(const uint8_t* src_argb0,
  2856. const uint8_t* src_argb1,
  2857. uint8_t* dst_argb,
  2858. int width);
  2859. void ARGBSubtractRow_Any_NEON(const uint8_t* y_buf,
  2860. const uint8_t* uv_buf,
  2861. uint8_t* dst_ptr,
  2862. int width);
  2863. void ARGBSubtractRow_MSA(const uint8_t* src_argb0,
  2864. const uint8_t* src_argb1,
  2865. uint8_t* dst_argb,
  2866. int width);
  2867. void ARGBSubtractRow_Any_MSA(const uint8_t* y_buf,
  2868. const uint8_t* uv_buf,
  2869. uint8_t* dst_ptr,
  2870. int width);
  2871. void ARGBSubtractRow_MMI(const uint8_t* src_argb0,
  2872. const uint8_t* src_argb1,
  2873. uint8_t* dst_argb,
  2874. int width);
  2875. void ARGBSubtractRow_Any_MMI(const uint8_t* y_buf,
  2876. const uint8_t* uv_buf,
  2877. uint8_t* dst_ptr,
  2878. int width);
  2879. void ARGBToRGB24Row_Any_SSSE3(const uint8_t* src_ptr,
  2880. uint8_t* dst_ptr,
  2881. int width);
  2882. void ARGBToRAWRow_Any_SSSE3(const uint8_t* src_ptr,
  2883. uint8_t* dst_ptr,
  2884. int width);
  2885. void ARGBToRGB565Row_Any_SSE2(const uint8_t* src_ptr,
  2886. uint8_t* dst_ptr,
  2887. int width);
  2888. void ARGBToARGB1555Row_Any_SSE2(const uint8_t* src_ptr,
  2889. uint8_t* dst_ptr,
  2890. int width);
  2891. void ARGBToARGB4444Row_Any_SSE2(const uint8_t* src_ptr,
  2892. uint8_t* dst_ptr,
  2893. int width);
  2894. void ABGRToAR30Row_Any_SSSE3(const uint8_t* src_ptr,
  2895. uint8_t* dst_ptr,
  2896. int width);
  2897. void ARGBToAR30Row_Any_SSSE3(const uint8_t* src_ptr,
  2898. uint8_t* dst_ptr,
  2899. int width);
  2900. void ARGBToRAWRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  2901. void ARGBToRGB24Row_Any_AVX2(const uint8_t* src_ptr,
  2902. uint8_t* dst_ptr,
  2903. int width);
  2904. void ARGBToRGB24Row_Any_AVX512VBMI(const uint8_t* src_ptr,
  2905. uint8_t* dst_ptr,
  2906. int width);
  2907. void ARGBToRGB565DitherRow_Any_SSE2(const uint8_t* src_ptr,
  2908. uint8_t* dst_ptr,
  2909. const uint32_t param,
  2910. int width);
  2911. void ARGBToRGB565DitherRow_Any_AVX2(const uint8_t* src_ptr,
  2912. uint8_t* dst_ptr,
  2913. const uint32_t param,
  2914. int width);
  2915. void ARGBToRGB565Row_Any_AVX2(const uint8_t* src_ptr,
  2916. uint8_t* dst_ptr,
  2917. int width);
  2918. void ARGBToARGB1555Row_Any_AVX2(const uint8_t* src_ptr,
  2919. uint8_t* dst_ptr,
  2920. int width);
  2921. void ARGBToARGB4444Row_Any_AVX2(const uint8_t* src_ptr,
  2922. uint8_t* dst_ptr,
  2923. int width);
  2924. void ABGRToAR30Row_Any_AVX2(const uint8_t* src_ptr,
  2925. uint8_t* dst_ptr,
  2926. int width);
  2927. void ARGBToAR30Row_Any_AVX2(const uint8_t* src_ptr,
  2928. uint8_t* dst_ptr,
  2929. int width);
  2930. void ARGBToRGB24Row_Any_NEON(const uint8_t* src_ptr,
  2931. uint8_t* dst_ptr,
  2932. int width);
  2933. void ARGBToRAWRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  2934. void ARGBToRGB565Row_Any_NEON(const uint8_t* src_ptr,
  2935. uint8_t* dst_ptr,
  2936. int width);
  2937. void ARGBToARGB1555Row_Any_NEON(const uint8_t* src_ptr,
  2938. uint8_t* dst_ptr,
  2939. int width);
  2940. void ARGBToARGB4444Row_Any_NEON(const uint8_t* src_ptr,
  2941. uint8_t* dst_ptr,
  2942. int width);
  2943. void ARGBToRGB565DitherRow_Any_NEON(const uint8_t* src_ptr,
  2944. uint8_t* dst_ptr,
  2945. const uint32_t param,
  2946. int width);
  2947. void ARGBToRGB24Row_Any_MSA(const uint8_t* src_ptr,
  2948. uint8_t* dst_ptr,
  2949. int width);
  2950. void ARGBToRAWRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  2951. void ARGBToRGB565Row_Any_MSA(const uint8_t* src_ptr,
  2952. uint8_t* dst_ptr,
  2953. int width);
  2954. void ARGBToARGB1555Row_Any_MSA(const uint8_t* src_ptr,
  2955. uint8_t* dst_ptr,
  2956. int width);
  2957. void ARGBToARGB4444Row_Any_MSA(const uint8_t* src_ptr,
  2958. uint8_t* dst_ptr,
  2959. int width);
  2960. void ARGBToRGB565DitherRow_Any_MSA(const uint8_t* src_ptr,
  2961. uint8_t* dst_ptr,
  2962. const uint32_t param,
  2963. int width);
  2964. void ARGBToRGB24Row_Any_MMI(const uint8_t* src_ptr,
  2965. uint8_t* dst_ptr,
  2966. int width);
  2967. void ARGBToRAWRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  2968. void ARGBToRGB565Row_Any_MMI(const uint8_t* src_ptr,
  2969. uint8_t* dst_ptr,
  2970. int width);
  2971. void ARGBToARGB1555Row_Any_MMI(const uint8_t* src_ptr,
  2972. uint8_t* dst_ptr,
  2973. int width);
  2974. void ARGBToARGB4444Row_Any_MMI(const uint8_t* src_ptr,
  2975. uint8_t* dst_ptr,
  2976. int width);
  2977. void ARGBToRGB565DitherRow_Any_MMI(const uint8_t* src_ptr,
  2978. uint8_t* dst_ptr,
  2979. const uint32_t param,
  2980. int width);
  2981. void I444ToARGBRow_Any_NEON(const uint8_t* y_buf,
  2982. const uint8_t* u_buf,
  2983. const uint8_t* v_buf,
  2984. uint8_t* dst_ptr,
  2985. const struct YuvConstants* yuvconstants,
  2986. int width);
  2987. void I422ToARGBRow_Any_NEON(const uint8_t* y_buf,
  2988. const uint8_t* u_buf,
  2989. const uint8_t* v_buf,
  2990. uint8_t* dst_ptr,
  2991. const struct YuvConstants* yuvconstants,
  2992. int width);
  2993. void I422AlphaToARGBRow_Any_NEON(const uint8_t* y_buf,
  2994. const uint8_t* u_buf,
  2995. const uint8_t* v_buf,
  2996. const uint8_t* a_buf,
  2997. uint8_t* dst_ptr,
  2998. const struct YuvConstants* yuvconstants,
  2999. int width);
  3000. void I422ToRGBARow_Any_NEON(const uint8_t* y_buf,
  3001. const uint8_t* u_buf,
  3002. const uint8_t* v_buf,
  3003. uint8_t* dst_ptr,
  3004. const struct YuvConstants* yuvconstants,
  3005. int width);
  3006. void I422ToRGB24Row_Any_NEON(const uint8_t* y_buf,
  3007. const uint8_t* u_buf,
  3008. const uint8_t* v_buf,
  3009. uint8_t* dst_ptr,
  3010. const struct YuvConstants* yuvconstants,
  3011. int width);
  3012. void I422ToARGB4444Row_Any_NEON(const uint8_t* y_buf,
  3013. const uint8_t* u_buf,
  3014. const uint8_t* v_buf,
  3015. uint8_t* dst_ptr,
  3016. const struct YuvConstants* yuvconstants,
  3017. int width);
  3018. void I422ToARGB1555Row_Any_NEON(const uint8_t* y_buf,
  3019. const uint8_t* u_buf,
  3020. const uint8_t* v_buf,
  3021. uint8_t* dst_ptr,
  3022. const struct YuvConstants* yuvconstants,
  3023. int width);
  3024. void I422ToRGB565Row_Any_NEON(const uint8_t* y_buf,
  3025. const uint8_t* u_buf,
  3026. const uint8_t* v_buf,
  3027. uint8_t* dst_ptr,
  3028. const struct YuvConstants* yuvconstants,
  3029. int width);
  3030. void NV12ToARGBRow_Any_NEON(const uint8_t* y_buf,
  3031. const uint8_t* uv_buf,
  3032. uint8_t* dst_ptr,
  3033. const struct YuvConstants* yuvconstants,
  3034. int width);
  3035. void NV21ToARGBRow_Any_NEON(const uint8_t* y_buf,
  3036. const uint8_t* uv_buf,
  3037. uint8_t* dst_ptr,
  3038. const struct YuvConstants* yuvconstants,
  3039. int width);
  3040. void NV12ToRGB24Row_Any_NEON(const uint8_t* y_buf,
  3041. const uint8_t* uv_buf,
  3042. uint8_t* dst_ptr,
  3043. const struct YuvConstants* yuvconstants,
  3044. int width);
  3045. void NV21ToRGB24Row_Any_NEON(const uint8_t* y_buf,
  3046. const uint8_t* uv_buf,
  3047. uint8_t* dst_ptr,
  3048. const struct YuvConstants* yuvconstants,
  3049. int width);
  3050. void NV21ToYUV24Row_Any_NEON(const uint8_t* src_y,
  3051. const uint8_t* src_vu,
  3052. uint8_t* dst_yuv24,
  3053. int width);
  3054. void NV12ToRGB565Row_Any_NEON(const uint8_t* y_buf,
  3055. const uint8_t* uv_buf,
  3056. uint8_t* dst_ptr,
  3057. const struct YuvConstants* yuvconstants,
  3058. int width);
  3059. void YUY2ToARGBRow_Any_NEON(const uint8_t* src_ptr,
  3060. uint8_t* dst_ptr,
  3061. const struct YuvConstants* yuvconstants,
  3062. int width);
  3063. void UYVYToARGBRow_Any_NEON(const uint8_t* src_ptr,
  3064. uint8_t* dst_ptr,
  3065. const struct YuvConstants* yuvconstants,
  3066. int width);
  3067. void I444ToARGBRow_Any_MSA(const uint8_t* y_buf,
  3068. const uint8_t* u_buf,
  3069. const uint8_t* v_buf,
  3070. uint8_t* dst_ptr,
  3071. const struct YuvConstants* yuvconstants,
  3072. int width);
  3073. void I444ToARGBRow_Any_MMI(const uint8_t* y_buf,
  3074. const uint8_t* u_buf,
  3075. const uint8_t* v_buf,
  3076. uint8_t* dst_ptr,
  3077. const struct YuvConstants* yuvconstants,
  3078. int width);
  3079. void I422ToARGBRow_Any_MSA(const uint8_t* y_buf,
  3080. const uint8_t* u_buf,
  3081. const uint8_t* v_buf,
  3082. uint8_t* dst_ptr,
  3083. const struct YuvConstants* yuvconstants,
  3084. int width);
  3085. void I422ToARGBRow_Any_MMI(const uint8_t* y_buf,
  3086. const uint8_t* u_buf,
  3087. const uint8_t* v_buf,
  3088. uint8_t* dst_ptr,
  3089. const struct YuvConstants* yuvconstants,
  3090. int width);
  3091. void I422ToRGBARow_Any_MSA(const uint8_t* y_buf,
  3092. const uint8_t* u_buf,
  3093. const uint8_t* v_buf,
  3094. uint8_t* dst_ptr,
  3095. const struct YuvConstants* yuvconstants,
  3096. int width);
  3097. void I422AlphaToARGBRow_Any_MSA(const uint8_t* y_buf,
  3098. const uint8_t* u_buf,
  3099. const uint8_t* v_buf,
  3100. const uint8_t* a_buf,
  3101. uint8_t* dst_ptr,
  3102. const struct YuvConstants* yuvconstants,
  3103. int width);
  3104. void I422ToRGB24Row_Any_MSA(const uint8_t* y_buf,
  3105. const uint8_t* u_buf,
  3106. const uint8_t* v_buf,
  3107. uint8_t* dst_ptr,
  3108. const struct YuvConstants* yuvconstants,
  3109. int width);
  3110. void I422ToRGB565Row_Any_MSA(const uint8_t* y_buf,
  3111. const uint8_t* u_buf,
  3112. const uint8_t* v_buf,
  3113. uint8_t* dst_ptr,
  3114. const struct YuvConstants* yuvconstants,
  3115. int width);
  3116. void I422ToARGB4444Row_Any_MSA(const uint8_t* y_buf,
  3117. const uint8_t* u_buf,
  3118. const uint8_t* v_buf,
  3119. uint8_t* dst_ptr,
  3120. const struct YuvConstants* yuvconstants,
  3121. int width);
  3122. void I422ToARGB1555Row_Any_MSA(const uint8_t* y_buf,
  3123. const uint8_t* u_buf,
  3124. const uint8_t* v_buf,
  3125. uint8_t* dst_ptr,
  3126. const struct YuvConstants* yuvconstants,
  3127. int width);
  3128. void NV12ToARGBRow_Any_MSA(const uint8_t* y_buf,
  3129. const uint8_t* uv_buf,
  3130. uint8_t* dst_ptr,
  3131. const struct YuvConstants* yuvconstants,
  3132. int width);
  3133. void NV12ToRGB565Row_Any_MSA(const uint8_t* y_buf,
  3134. const uint8_t* uv_buf,
  3135. uint8_t* dst_ptr,
  3136. const struct YuvConstants* yuvconstants,
  3137. int width);
  3138. void NV21ToARGBRow_Any_MSA(const uint8_t* y_buf,
  3139. const uint8_t* uv_buf,
  3140. uint8_t* dst_ptr,
  3141. const struct YuvConstants* yuvconstants,
  3142. int width);
  3143. void YUY2ToARGBRow_Any_MSA(const uint8_t* src_ptr,
  3144. uint8_t* dst_ptr,
  3145. const struct YuvConstants* yuvconstants,
  3146. int width);
  3147. void UYVYToARGBRow_Any_MSA(const uint8_t* src_ptr,
  3148. uint8_t* dst_ptr,
  3149. const struct YuvConstants* yuvconstants,
  3150. int width);
  3151. void YUY2ToYRow_AVX2(const uint8_t* src_yuy2, uint8_t* dst_y, int width);
  3152. void YUY2ToUVRow_AVX2(const uint8_t* src_yuy2,
  3153. int stride_yuy2,
  3154. uint8_t* dst_u,
  3155. uint8_t* dst_v,
  3156. int width);
  3157. void YUY2ToUV422Row_AVX2(const uint8_t* src_yuy2,
  3158. uint8_t* dst_u,
  3159. uint8_t* dst_v,
  3160. int width);
  3161. void YUY2ToYRow_SSE2(const uint8_t* src_yuy2, uint8_t* dst_y, int width);
  3162. void YUY2ToUVRow_SSE2(const uint8_t* src_yuy2,
  3163. int stride_yuy2,
  3164. uint8_t* dst_u,
  3165. uint8_t* dst_v,
  3166. int width);
  3167. void YUY2ToUV422Row_SSE2(const uint8_t* src_yuy2,
  3168. uint8_t* dst_u,
  3169. uint8_t* dst_v,
  3170. int width);
  3171. void YUY2ToYRow_NEON(const uint8_t* src_yuy2, uint8_t* dst_y, int width);
  3172. void YUY2ToUVRow_NEON(const uint8_t* src_yuy2,
  3173. int stride_yuy2,
  3174. uint8_t* dst_u,
  3175. uint8_t* dst_v,
  3176. int width);
  3177. void YUY2ToUV422Row_NEON(const uint8_t* src_yuy2,
  3178. uint8_t* dst_u,
  3179. uint8_t* dst_v,
  3180. int width);
  3181. void YUY2ToYRow_MSA(const uint8_t* src_yuy2, uint8_t* dst_y, int width);
  3182. void YUY2ToYRow_MMI(const uint8_t* src_yuy2, uint8_t* dst_y, int width);
  3183. void YUY2ToUVRow_MSA(const uint8_t* src_yuy2,
  3184. int src_stride_yuy2,
  3185. uint8_t* dst_u,
  3186. uint8_t* dst_v,
  3187. int width);
  3188. void YUY2ToUVRow_MMI(const uint8_t* src_yuy2,
  3189. int src_stride_yuy2,
  3190. uint8_t* dst_u,
  3191. uint8_t* dst_v,
  3192. int width);
  3193. void YUY2ToUV422Row_MSA(const uint8_t* src_yuy2,
  3194. uint8_t* dst_u,
  3195. uint8_t* dst_v,
  3196. int width);
  3197. void YUY2ToUV422Row_MMI(const uint8_t* src_yuy2,
  3198. uint8_t* dst_u,
  3199. uint8_t* dst_v,
  3200. int width);
  3201. void YUY2ToYRow_C(const uint8_t* src_yuy2, uint8_t* dst_y, int width);
  3202. void YUY2ToUVRow_C(const uint8_t* src_yuy2,
  3203. int src_stride_yuy2,
  3204. uint8_t* dst_u,
  3205. uint8_t* dst_v,
  3206. int width);
  3207. void YUY2ToUV422Row_C(const uint8_t* src_yuy2,
  3208. uint8_t* dst_u,
  3209. uint8_t* dst_v,
  3210. int width);
  3211. void YUY2ToYRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  3212. void YUY2ToUVRow_Any_AVX2(const uint8_t* src_ptr,
  3213. int src_stride_ptr,
  3214. uint8_t* dst_u,
  3215. uint8_t* dst_v,
  3216. int width);
  3217. void YUY2ToUV422Row_Any_AVX2(const uint8_t* src_ptr,
  3218. uint8_t* dst_u,
  3219. uint8_t* dst_v,
  3220. int width);
  3221. void YUY2ToYRow_Any_SSE2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  3222. void YUY2ToUVRow_Any_SSE2(const uint8_t* src_ptr,
  3223. int src_stride_ptr,
  3224. uint8_t* dst_u,
  3225. uint8_t* dst_v,
  3226. int width);
  3227. void YUY2ToUV422Row_Any_SSE2(const uint8_t* src_ptr,
  3228. uint8_t* dst_u,
  3229. uint8_t* dst_v,
  3230. int width);
  3231. void YUY2ToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  3232. void YUY2ToUVRow_Any_NEON(const uint8_t* src_ptr,
  3233. int src_stride_ptr,
  3234. uint8_t* dst_u,
  3235. uint8_t* dst_v,
  3236. int width);
  3237. void YUY2ToUV422Row_Any_NEON(const uint8_t* src_ptr,
  3238. uint8_t* dst_u,
  3239. uint8_t* dst_v,
  3240. int width);
  3241. void YUY2ToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  3242. void YUY2ToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  3243. void YUY2ToUVRow_Any_MSA(const uint8_t* src_ptr,
  3244. int src_stride_ptr,
  3245. uint8_t* dst_u,
  3246. uint8_t* dst_v,
  3247. int width);
  3248. void YUY2ToUVRow_Any_MMI(const uint8_t* src_ptr,
  3249. int src_stride_ptr,
  3250. uint8_t* dst_u,
  3251. uint8_t* dst_v,
  3252. int width);
  3253. void YUY2ToUV422Row_Any_MSA(const uint8_t* src_ptr,
  3254. uint8_t* dst_u,
  3255. uint8_t* dst_v,
  3256. int width);
  3257. void YUY2ToUV422Row_Any_MMI(const uint8_t* src_ptr,
  3258. uint8_t* dst_u,
  3259. uint8_t* dst_v,
  3260. int width);
  3261. void UYVYToYRow_AVX2(const uint8_t* src_uyvy, uint8_t* dst_y, int width);
  3262. void UYVYToUVRow_AVX2(const uint8_t* src_uyvy,
  3263. int stride_uyvy,
  3264. uint8_t* dst_u,
  3265. uint8_t* dst_v,
  3266. int width);
  3267. void UYVYToUV422Row_AVX2(const uint8_t* src_uyvy,
  3268. uint8_t* dst_u,
  3269. uint8_t* dst_v,
  3270. int width);
  3271. void UYVYToYRow_SSE2(const uint8_t* src_uyvy, uint8_t* dst_y, int width);
  3272. void UYVYToUVRow_SSE2(const uint8_t* src_uyvy,
  3273. int stride_uyvy,
  3274. uint8_t* dst_u,
  3275. uint8_t* dst_v,
  3276. int width);
  3277. void UYVYToUV422Row_SSE2(const uint8_t* src_uyvy,
  3278. uint8_t* dst_u,
  3279. uint8_t* dst_v,
  3280. int width);
  3281. void UYVYToYRow_AVX2(const uint8_t* src_uyvy, uint8_t* dst_y, int width);
  3282. void UYVYToUVRow_AVX2(const uint8_t* src_uyvy,
  3283. int stride_uyvy,
  3284. uint8_t* dst_u,
  3285. uint8_t* dst_v,
  3286. int width);
  3287. void UYVYToUV422Row_AVX2(const uint8_t* src_uyvy,
  3288. uint8_t* dst_u,
  3289. uint8_t* dst_v,
  3290. int width);
  3291. void UYVYToYRow_NEON(const uint8_t* src_uyvy, uint8_t* dst_y, int width);
  3292. void UYVYToUVRow_NEON(const uint8_t* src_uyvy,
  3293. int stride_uyvy,
  3294. uint8_t* dst_u,
  3295. uint8_t* dst_v,
  3296. int width);
  3297. void UYVYToUV422Row_NEON(const uint8_t* src_uyvy,
  3298. uint8_t* dst_u,
  3299. uint8_t* dst_v,
  3300. int width);
  3301. void UYVYToYRow_MSA(const uint8_t* src_uyvy, uint8_t* dst_y, int width);
  3302. void UYVYToYRow_MMI(const uint8_t* src_uyvy, uint8_t* dst_y, int width);
  3303. void UYVYToUVRow_MSA(const uint8_t* src_uyvy,
  3304. int src_stride_uyvy,
  3305. uint8_t* dst_u,
  3306. uint8_t* dst_v,
  3307. int width);
  3308. void UYVYToUVRow_MMI(const uint8_t* src_uyvy,
  3309. int src_stride_uyvy,
  3310. uint8_t* dst_u,
  3311. uint8_t* dst_v,
  3312. int width);
  3313. void UYVYToUV422Row_MSA(const uint8_t* src_uyvy,
  3314. uint8_t* dst_u,
  3315. uint8_t* dst_v,
  3316. int width);
  3317. void UYVYToUV422Row_MMI(const uint8_t* src_uyvy,
  3318. uint8_t* dst_u,
  3319. uint8_t* dst_v,
  3320. int width);
  3321. void UYVYToYRow_C(const uint8_t* src_uyvy, uint8_t* dst_y, int width);
  3322. void UYVYToUVRow_C(const uint8_t* src_uyvy,
  3323. int src_stride_uyvy,
  3324. uint8_t* dst_u,
  3325. uint8_t* dst_v,
  3326. int width);
  3327. void UYVYToUV422Row_C(const uint8_t* src_uyvy,
  3328. uint8_t* dst_u,
  3329. uint8_t* dst_v,
  3330. int width);
  3331. void UYVYToYRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  3332. void UYVYToUVRow_Any_AVX2(const uint8_t* src_ptr,
  3333. int src_stride_ptr,
  3334. uint8_t* dst_u,
  3335. uint8_t* dst_v,
  3336. int width);
  3337. void UYVYToUV422Row_Any_AVX2(const uint8_t* src_ptr,
  3338. uint8_t* dst_u,
  3339. uint8_t* dst_v,
  3340. int width);
  3341. void UYVYToYRow_Any_SSE2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  3342. void UYVYToUVRow_Any_SSE2(const uint8_t* src_ptr,
  3343. int src_stride_ptr,
  3344. uint8_t* dst_u,
  3345. uint8_t* dst_v,
  3346. int width);
  3347. void UYVYToUV422Row_Any_SSE2(const uint8_t* src_ptr,
  3348. uint8_t* dst_u,
  3349. uint8_t* dst_v,
  3350. int width);
  3351. void UYVYToYRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  3352. void UYVYToUVRow_Any_NEON(const uint8_t* src_ptr,
  3353. int src_stride_ptr,
  3354. uint8_t* dst_u,
  3355. uint8_t* dst_v,
  3356. int width);
  3357. void UYVYToUV422Row_Any_NEON(const uint8_t* src_ptr,
  3358. uint8_t* dst_u,
  3359. uint8_t* dst_v,
  3360. int width);
  3361. void UYVYToYRow_Any_MSA(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  3362. void UYVYToYRow_Any_MMI(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  3363. void UYVYToUVRow_Any_MSA(const uint8_t* src_ptr,
  3364. int src_stride_ptr,
  3365. uint8_t* dst_u,
  3366. uint8_t* dst_v,
  3367. int width);
  3368. void UYVYToUVRow_Any_MMI(const uint8_t* src_ptr,
  3369. int src_stride_ptr,
  3370. uint8_t* dst_u,
  3371. uint8_t* dst_v,
  3372. int width);
  3373. void UYVYToUV422Row_Any_MSA(const uint8_t* src_ptr,
  3374. uint8_t* dst_u,
  3375. uint8_t* dst_v,
  3376. int width);
  3377. void UYVYToUV422Row_Any_MMI(const uint8_t* src_ptr,
  3378. uint8_t* dst_u,
  3379. uint8_t* dst_v,
  3380. int width);
  3381. void SwapUVRow_C(const uint8_t* src_uv, uint8_t* dst_vu, int width);
  3382. void SwapUVRow_NEON(const uint8_t* src_uv, uint8_t* dst_vu, int width);
  3383. void SwapUVRow_Any_NEON(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  3384. void SwapUVRow_SSSE3(const uint8_t* src_uv, uint8_t* dst_vu, int width);
  3385. void SwapUVRow_Any_SSSE3(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  3386. void SwapUVRow_AVX2(const uint8_t* src_uv, uint8_t* dst_vu, int width);
  3387. void SwapUVRow_Any_AVX2(const uint8_t* src_ptr, uint8_t* dst_ptr, int width);
  3388. void AYUVToYRow_C(const uint8_t* src_ayuv, uint8_t* dst_y, int width);
  3389. void AYUVToUVRow_C(const uint8_t* src_ayuv,
  3390. int stride_ayuv,
  3391. uint8_t* dst_uv,
  3392. int width);
  3393. void AYUVToVURow_C(const uint8_t* src_ayuv,
  3394. int stride_ayuv,
  3395. uint8_t* dst_vu,
  3396. int width);
  3397. void AYUVToYRow_NEON(const uint8_t* src_ayuv, uint8_t* dst_y, int width);
  3398. void AYUVToUVRow_NEON(const uint8_t* src_ayuv,
  3399. int stride_ayuv,
  3400. uint8_t* dst_uv,
  3401. int width);
  3402. void AYUVToVURow_NEON(const uint8_t* src_ayuv,
  3403. int stride_ayuv,
  3404. uint8_t* dst_vu,
  3405. int width);
  3406. void AYUVToYRow_Any_NEON(const uint8_t* src_ayuv, uint8_t* dst_y, int width);
  3407. void AYUVToUVRow_Any_NEON(const uint8_t* src_ayuv,
  3408. int stride_ayuv,
  3409. uint8_t* dst_uv,
  3410. int width);
  3411. void AYUVToVURow_Any_NEON(const uint8_t* src_ayuv,
  3412. int stride_ayuv,
  3413. uint8_t* dst_vu,
  3414. int width);
  3415. void I422ToYUY2Row_C(const uint8_t* src_y,
  3416. const uint8_t* src_u,
  3417. const uint8_t* src_v,
  3418. uint8_t* dst_frame,
  3419. int width);
  3420. void I422ToUYVYRow_C(const uint8_t* src_y,
  3421. const uint8_t* src_u,
  3422. const uint8_t* src_v,
  3423. uint8_t* dst_frame,
  3424. int width);
  3425. void I422ToYUY2Row_SSE2(const uint8_t* src_y,
  3426. const uint8_t* src_u,
  3427. const uint8_t* src_v,
  3428. uint8_t* dst_yuy2,
  3429. int width);
  3430. void I422ToUYVYRow_SSE2(const uint8_t* src_y,
  3431. const uint8_t* src_u,
  3432. const uint8_t* src_v,
  3433. uint8_t* dst_uyvy,
  3434. int width);
  3435. void I422ToYUY2Row_Any_SSE2(const uint8_t* y_buf,
  3436. const uint8_t* u_buf,
  3437. const uint8_t* v_buf,
  3438. uint8_t* dst_ptr,
  3439. int width);
  3440. void I422ToUYVYRow_Any_SSE2(const uint8_t* y_buf,
  3441. const uint8_t* u_buf,
  3442. const uint8_t* v_buf,
  3443. uint8_t* dst_ptr,
  3444. int width);
  3445. void I422ToYUY2Row_AVX2(const uint8_t* src_y,
  3446. const uint8_t* src_u,
  3447. const uint8_t* src_v,
  3448. uint8_t* dst_yuy2,
  3449. int width);
  3450. void I422ToUYVYRow_AVX2(const uint8_t* src_y,
  3451. const uint8_t* src_u,
  3452. const uint8_t* src_v,
  3453. uint8_t* dst_uyvy,
  3454. int width);
  3455. void I422ToYUY2Row_Any_AVX2(const uint8_t* y_buf,
  3456. const uint8_t* u_buf,
  3457. const uint8_t* v_buf,
  3458. uint8_t* dst_ptr,
  3459. int width);
  3460. void I422ToUYVYRow_Any_AVX2(const uint8_t* y_buf,
  3461. const uint8_t* u_buf,
  3462. const uint8_t* v_buf,
  3463. uint8_t* dst_ptr,
  3464. int width);
  3465. void I422ToYUY2Row_NEON(const uint8_t* src_y,
  3466. const uint8_t* src_u,
  3467. const uint8_t* src_v,
  3468. uint8_t* dst_yuy2,
  3469. int width);
  3470. void I422ToUYVYRow_NEON(const uint8_t* src_y,
  3471. const uint8_t* src_u,
  3472. const uint8_t* src_v,
  3473. uint8_t* dst_uyvy,
  3474. int width);
  3475. void I422ToYUY2Row_Any_NEON(const uint8_t* y_buf,
  3476. const uint8_t* u_buf,
  3477. const uint8_t* v_buf,
  3478. uint8_t* dst_ptr,
  3479. int width);
  3480. void I422ToUYVYRow_Any_NEON(const uint8_t* y_buf,
  3481. const uint8_t* u_buf,
  3482. const uint8_t* v_buf,
  3483. uint8_t* dst_ptr,
  3484. int width);
  3485. void I422ToYUY2Row_MSA(const uint8_t* src_y,
  3486. const uint8_t* src_u,
  3487. const uint8_t* src_v,
  3488. uint8_t* dst_yuy2,
  3489. int width);
  3490. void I422ToYUY2Row_MMI(const uint8_t* src_y,
  3491. const uint8_t* src_u,
  3492. const uint8_t* src_v,
  3493. uint8_t* dst_yuy2,
  3494. int width);
  3495. void I422ToUYVYRow_MSA(const uint8_t* src_y,
  3496. const uint8_t* src_u,
  3497. const uint8_t* src_v,
  3498. uint8_t* dst_uyvy,
  3499. int width);
  3500. void I422ToUYVYRow_MMI(const uint8_t* src_y,
  3501. const uint8_t* src_u,
  3502. const uint8_t* src_v,
  3503. uint8_t* dst_uyvy,
  3504. int width);
  3505. void I422ToYUY2Row_Any_MSA(const uint8_t* y_buf,
  3506. const uint8_t* u_buf,
  3507. const uint8_t* v_buf,
  3508. uint8_t* dst_ptr,
  3509. int width);
  3510. void I422ToYUY2Row_Any_MMI(const uint8_t* y_buf,
  3511. const uint8_t* u_buf,
  3512. const uint8_t* v_buf,
  3513. uint8_t* dst_ptr,
  3514. int width);
  3515. void I422ToUYVYRow_Any_MSA(const uint8_t* y_buf,
  3516. const uint8_t* u_buf,
  3517. const uint8_t* v_buf,
  3518. uint8_t* dst_ptr,
  3519. int width);
  3520. void I422ToUYVYRow_Any_MMI(const uint8_t* y_buf,
  3521. const uint8_t* u_buf,
  3522. const uint8_t* v_buf,
  3523. uint8_t* dst_ptr,
  3524. int width);
  3525. // Effects related row functions.
  3526. void ARGBAttenuateRow_C(const uint8_t* src_argb, uint8_t* dst_argb, int width);
  3527. void ARGBAttenuateRow_SSSE3(const uint8_t* src_argb,
  3528. uint8_t* dst_argb,
  3529. int width);
  3530. void ARGBAttenuateRow_AVX2(const uint8_t* src_argb,
  3531. uint8_t* dst_argb,
  3532. int width);
  3533. void ARGBAttenuateRow_NEON(const uint8_t* src_argb,
  3534. uint8_t* dst_argb,
  3535. int width);
  3536. void ARGBAttenuateRow_MSA(const uint8_t* src_argb,
  3537. uint8_t* dst_argb,
  3538. int width);
  3539. void ARGBAttenuateRow_MMI(const uint8_t* src_argb,
  3540. uint8_t* dst_argb,
  3541. int width);
  3542. void ARGBAttenuateRow_Any_SSSE3(const uint8_t* src_ptr,
  3543. uint8_t* dst_ptr,
  3544. int width);
  3545. void ARGBAttenuateRow_Any_AVX2(const uint8_t* src_ptr,
  3546. uint8_t* dst_ptr,
  3547. int width);
  3548. void ARGBAttenuateRow_Any_NEON(const uint8_t* src_ptr,
  3549. uint8_t* dst_ptr,
  3550. int width);
  3551. void ARGBAttenuateRow_Any_MSA(const uint8_t* src_ptr,
  3552. uint8_t* dst_ptr,
  3553. int width);
  3554. void ARGBAttenuateRow_Any_MMI(const uint8_t* src_ptr,
  3555. uint8_t* dst_ptr,
  3556. int width);
  3557. // Inverse table for unattenuate, shared by C and SSE2.
  3558. extern const uint32_t fixed_invtbl8[256];
  3559. void ARGBUnattenuateRow_C(const uint8_t* src_argb,
  3560. uint8_t* dst_argb,
  3561. int width);
  3562. void ARGBUnattenuateRow_SSE2(const uint8_t* src_argb,
  3563. uint8_t* dst_argb,
  3564. int width);
  3565. void ARGBUnattenuateRow_AVX2(const uint8_t* src_argb,
  3566. uint8_t* dst_argb,
  3567. int width);
  3568. void ARGBUnattenuateRow_Any_SSE2(const uint8_t* src_ptr,
  3569. uint8_t* dst_ptr,
  3570. int width);
  3571. void ARGBUnattenuateRow_Any_AVX2(const uint8_t* src_ptr,
  3572. uint8_t* dst_ptr,
  3573. int width);
  3574. void ARGBGrayRow_C(const uint8_t* src_argb, uint8_t* dst_argb, int width);
  3575. void ARGBGrayRow_SSSE3(const uint8_t* src_argb, uint8_t* dst_argb, int width);
  3576. void ARGBGrayRow_NEON(const uint8_t* src_argb, uint8_t* dst_argb, int width);
  3577. void ARGBGrayRow_MSA(const uint8_t* src_argb, uint8_t* dst_argb, int width);
  3578. void ARGBGrayRow_MMI(const uint8_t* src_argb, uint8_t* dst_argb, int width);
  3579. void ARGBSepiaRow_C(uint8_t* dst_argb, int width);
  3580. void ARGBSepiaRow_SSSE3(uint8_t* dst_argb, int width);
  3581. void ARGBSepiaRow_NEON(uint8_t* dst_argb, int width);
  3582. void ARGBSepiaRow_MSA(uint8_t* dst_argb, int width);
  3583. void ARGBSepiaRow_MMI(uint8_t* dst_argb, int width);
  3584. void ARGBColorMatrixRow_C(const uint8_t* src_argb,
  3585. uint8_t* dst_argb,
  3586. const int8_t* matrix_argb,
  3587. int width);
  3588. void ARGBColorMatrixRow_SSSE3(const uint8_t* src_argb,
  3589. uint8_t* dst_argb,
  3590. const int8_t* matrix_argb,
  3591. int width);
  3592. void ARGBColorMatrixRow_NEON(const uint8_t* src_argb,
  3593. uint8_t* dst_argb,
  3594. const int8_t* matrix_argb,
  3595. int width);
  3596. void ARGBColorMatrixRow_MSA(const uint8_t* src_argb,
  3597. uint8_t* dst_argb,
  3598. const int8_t* matrix_argb,
  3599. int width);
  3600. void ARGBColorMatrixRow_MMI(const uint8_t* src_argb,
  3601. uint8_t* dst_argb,
  3602. const int8_t* matrix_argb,
  3603. int width);
  3604. void ARGBColorTableRow_C(uint8_t* dst_argb,
  3605. const uint8_t* table_argb,
  3606. int width);
  3607. void ARGBColorTableRow_X86(uint8_t* dst_argb,
  3608. const uint8_t* table_argb,
  3609. int width);
  3610. void RGBColorTableRow_C(uint8_t* dst_argb,
  3611. const uint8_t* table_argb,
  3612. int width);
  3613. void RGBColorTableRow_X86(uint8_t* dst_argb,
  3614. const uint8_t* table_argb,
  3615. int width);
  3616. void ARGBQuantizeRow_C(uint8_t* dst_argb,
  3617. int scale,
  3618. int interval_size,
  3619. int interval_offset,
  3620. int width);
  3621. void ARGBQuantizeRow_SSE2(uint8_t* dst_argb,
  3622. int scale,
  3623. int interval_size,
  3624. int interval_offset,
  3625. int width);
  3626. void ARGBQuantizeRow_NEON(uint8_t* dst_argb,
  3627. int scale,
  3628. int interval_size,
  3629. int interval_offset,
  3630. int width);
  3631. void ARGBQuantizeRow_MSA(uint8_t* dst_argb,
  3632. int scale,
  3633. int interval_size,
  3634. int interval_offset,
  3635. int width);
  3636. void ARGBShadeRow_C(const uint8_t* src_argb,
  3637. uint8_t* dst_argb,
  3638. int width,
  3639. uint32_t value);
  3640. void ARGBShadeRow_SSE2(const uint8_t* src_argb,
  3641. uint8_t* dst_argb,
  3642. int width,
  3643. uint32_t value);
  3644. void ARGBShadeRow_NEON(const uint8_t* src_argb,
  3645. uint8_t* dst_argb,
  3646. int width,
  3647. uint32_t value);
  3648. void ARGBShadeRow_MSA(const uint8_t* src_argb,
  3649. uint8_t* dst_argb,
  3650. int width,
  3651. uint32_t value);
  3652. void ARGBShadeRow_MMI(const uint8_t* src_argb,
  3653. uint8_t* dst_argb,
  3654. int width,
  3655. uint32_t value);
  3656. // Used for blur.
  3657. void CumulativeSumToAverageRow_SSE2(const int32_t* topleft,
  3658. const int32_t* botleft,
  3659. int width,
  3660. int area,
  3661. uint8_t* dst,
  3662. int count);
  3663. void ComputeCumulativeSumRow_SSE2(const uint8_t* row,
  3664. int32_t* cumsum,
  3665. const int32_t* previous_cumsum,
  3666. int width);
  3667. void ComputeCumulativeSumRow_MMI(const uint8_t* row,
  3668. int32_t* cumsum,
  3669. const int32_t* previous_cumsum,
  3670. int width);
  3671. void CumulativeSumToAverageRow_C(const int32_t* tl,
  3672. const int32_t* bl,
  3673. int w,
  3674. int area,
  3675. uint8_t* dst,
  3676. int count);
  3677. void ComputeCumulativeSumRow_C(const uint8_t* row,
  3678. int32_t* cumsum,
  3679. const int32_t* previous_cumsum,
  3680. int width);
  3681. LIBYUV_API
  3682. void ARGBAffineRow_C(const uint8_t* src_argb,
  3683. int src_argb_stride,
  3684. uint8_t* dst_argb,
  3685. const float* uv_dudv,
  3686. int width);
  3687. LIBYUV_API
  3688. void ARGBAffineRow_SSE2(const uint8_t* src_argb,
  3689. int src_argb_stride,
  3690. uint8_t* dst_argb,
  3691. const float* src_dudv,
  3692. int width);
  3693. // Used for I420Scale, ARGBScale, and ARGBInterpolate.
  3694. void InterpolateRow_C(uint8_t* dst_ptr,
  3695. const uint8_t* src_ptr,
  3696. ptrdiff_t src_stride,
  3697. int width,
  3698. int source_y_fraction);
  3699. void InterpolateRow_SSSE3(uint8_t* dst_ptr,
  3700. const uint8_t* src_ptr,
  3701. ptrdiff_t src_stride,
  3702. int dst_width,
  3703. int source_y_fraction);
  3704. void InterpolateRow_AVX2(uint8_t* dst_ptr,
  3705. const uint8_t* src_ptr,
  3706. ptrdiff_t src_stride,
  3707. int dst_width,
  3708. int source_y_fraction);
  3709. void InterpolateRow_NEON(uint8_t* dst_ptr,
  3710. const uint8_t* src_ptr,
  3711. ptrdiff_t src_stride,
  3712. int dst_width,
  3713. int source_y_fraction);
  3714. void InterpolateRow_MSA(uint8_t* dst_ptr,
  3715. const uint8_t* src_ptr,
  3716. ptrdiff_t src_stride,
  3717. int width,
  3718. int source_y_fraction);
  3719. void InterpolateRow_MMI(uint8_t* dst_ptr,
  3720. const uint8_t* src_ptr,
  3721. ptrdiff_t src_stride,
  3722. int width,
  3723. int source_y_fraction);
  3724. void InterpolateRow_Any_NEON(uint8_t* dst_ptr,
  3725. const uint8_t* src_ptr,
  3726. ptrdiff_t src_stride_ptr,
  3727. int width,
  3728. int source_y_fraction);
  3729. void InterpolateRow_Any_SSSE3(uint8_t* dst_ptr,
  3730. const uint8_t* src_ptr,
  3731. ptrdiff_t src_stride_ptr,
  3732. int width,
  3733. int source_y_fraction);
  3734. void InterpolateRow_Any_AVX2(uint8_t* dst_ptr,
  3735. const uint8_t* src_ptr,
  3736. ptrdiff_t src_stride_ptr,
  3737. int width,
  3738. int source_y_fraction);
  3739. void InterpolateRow_Any_MSA(uint8_t* dst_ptr,
  3740. const uint8_t* src_ptr,
  3741. ptrdiff_t src_stride_ptr,
  3742. int width,
  3743. int source_y_fraction);
  3744. void InterpolateRow_Any_MMI(uint8_t* dst_ptr,
  3745. const uint8_t* src_ptr,
  3746. ptrdiff_t src_stride_ptr,
  3747. int width,
  3748. int source_y_fraction);
  3749. void InterpolateRow_16_C(uint16_t* dst_ptr,
  3750. const uint16_t* src_ptr,
  3751. ptrdiff_t src_stride,
  3752. int width,
  3753. int source_y_fraction);
  3754. // Sobel images.
  3755. void SobelXRow_C(const uint8_t* src_y0,
  3756. const uint8_t* src_y1,
  3757. const uint8_t* src_y2,
  3758. uint8_t* dst_sobelx,
  3759. int width);
  3760. void SobelXRow_SSE2(const uint8_t* src_y0,
  3761. const uint8_t* src_y1,
  3762. const uint8_t* src_y2,
  3763. uint8_t* dst_sobelx,
  3764. int width);
  3765. void SobelXRow_NEON(const uint8_t* src_y0,
  3766. const uint8_t* src_y1,
  3767. const uint8_t* src_y2,
  3768. uint8_t* dst_sobelx,
  3769. int width);
  3770. void SobelXRow_MSA(const uint8_t* src_y0,
  3771. const uint8_t* src_y1,
  3772. const uint8_t* src_y2,
  3773. uint8_t* dst_sobelx,
  3774. int width);
  3775. void SobelXRow_MMI(const uint8_t* src_y0,
  3776. const uint8_t* src_y1,
  3777. const uint8_t* src_y2,
  3778. uint8_t* dst_sobelx,
  3779. int width);
  3780. void SobelYRow_C(const uint8_t* src_y0,
  3781. const uint8_t* src_y1,
  3782. uint8_t* dst_sobely,
  3783. int width);
  3784. void SobelYRow_SSE2(const uint8_t* src_y0,
  3785. const uint8_t* src_y1,
  3786. uint8_t* dst_sobely,
  3787. int width);
  3788. void SobelYRow_NEON(const uint8_t* src_y0,
  3789. const uint8_t* src_y1,
  3790. uint8_t* dst_sobely,
  3791. int width);
  3792. void SobelYRow_MSA(const uint8_t* src_y0,
  3793. const uint8_t* src_y1,
  3794. uint8_t* dst_sobely,
  3795. int width);
  3796. void SobelYRow_MMI(const uint8_t* src_y0,
  3797. const uint8_t* src_y1,
  3798. uint8_t* dst_sobely,
  3799. int width);
  3800. void SobelRow_C(const uint8_t* src_sobelx,
  3801. const uint8_t* src_sobely,
  3802. uint8_t* dst_argb,
  3803. int width);
  3804. void SobelRow_SSE2(const uint8_t* src_sobelx,
  3805. const uint8_t* src_sobely,
  3806. uint8_t* dst_argb,
  3807. int width);
  3808. void SobelRow_NEON(const uint8_t* src_sobelx,
  3809. const uint8_t* src_sobely,
  3810. uint8_t* dst_argb,
  3811. int width);
  3812. void SobelRow_MSA(const uint8_t* src_sobelx,
  3813. const uint8_t* src_sobely,
  3814. uint8_t* dst_argb,
  3815. int width);
  3816. void SobelRow_MMI(const uint8_t* src_sobelx,
  3817. const uint8_t* src_sobely,
  3818. uint8_t* dst_argb,
  3819. int width);
  3820. void SobelToPlaneRow_C(const uint8_t* src_sobelx,
  3821. const uint8_t* src_sobely,
  3822. uint8_t* dst_y,
  3823. int width);
  3824. void SobelToPlaneRow_SSE2(const uint8_t* src_sobelx,
  3825. const uint8_t* src_sobely,
  3826. uint8_t* dst_y,
  3827. int width);
  3828. void SobelToPlaneRow_NEON(const uint8_t* src_sobelx,
  3829. const uint8_t* src_sobely,
  3830. uint8_t* dst_y,
  3831. int width);
  3832. void SobelToPlaneRow_MSA(const uint8_t* src_sobelx,
  3833. const uint8_t* src_sobely,
  3834. uint8_t* dst_y,
  3835. int width);
  3836. void SobelToPlaneRow_MMI(const uint8_t* src_sobelx,
  3837. const uint8_t* src_sobely,
  3838. uint8_t* dst_y,
  3839. int width);
  3840. void SobelXYRow_C(const uint8_t* src_sobelx,
  3841. const uint8_t* src_sobely,
  3842. uint8_t* dst_argb,
  3843. int width);
  3844. void SobelXYRow_SSE2(const uint8_t* src_sobelx,
  3845. const uint8_t* src_sobely,
  3846. uint8_t* dst_argb,
  3847. int width);
  3848. void SobelXYRow_NEON(const uint8_t* src_sobelx,
  3849. const uint8_t* src_sobely,
  3850. uint8_t* dst_argb,
  3851. int width);
  3852. void SobelXYRow_MSA(const uint8_t* src_sobelx,
  3853. const uint8_t* src_sobely,
  3854. uint8_t* dst_argb,
  3855. int width);
  3856. void SobelXYRow_MMI(const uint8_t* src_sobelx,
  3857. const uint8_t* src_sobely,
  3858. uint8_t* dst_argb,
  3859. int width);
  3860. void SobelRow_Any_SSE2(const uint8_t* y_buf,
  3861. const uint8_t* uv_buf,
  3862. uint8_t* dst_ptr,
  3863. int width);
  3864. void SobelRow_Any_NEON(const uint8_t* y_buf,
  3865. const uint8_t* uv_buf,
  3866. uint8_t* dst_ptr,
  3867. int width);
  3868. void SobelRow_Any_MSA(const uint8_t* y_buf,
  3869. const uint8_t* uv_buf,
  3870. uint8_t* dst_ptr,
  3871. int width);
  3872. void SobelRow_Any_MMI(const uint8_t* y_buf,
  3873. const uint8_t* uv_buf,
  3874. uint8_t* dst_ptr,
  3875. int width);
  3876. void SobelToPlaneRow_Any_SSE2(const uint8_t* y_buf,
  3877. const uint8_t* uv_buf,
  3878. uint8_t* dst_ptr,
  3879. int width);
  3880. void SobelToPlaneRow_Any_NEON(const uint8_t* y_buf,
  3881. const uint8_t* uv_buf,
  3882. uint8_t* dst_ptr,
  3883. int width);
  3884. void SobelToPlaneRow_Any_MSA(const uint8_t* y_buf,
  3885. const uint8_t* uv_buf,
  3886. uint8_t* dst_ptr,
  3887. int width);
  3888. void SobelToPlaneRow_Any_MMI(const uint8_t* y_buf,
  3889. const uint8_t* uv_buf,
  3890. uint8_t* dst_ptr,
  3891. int width);
  3892. void SobelXYRow_Any_SSE2(const uint8_t* y_buf,
  3893. const uint8_t* uv_buf,
  3894. uint8_t* dst_ptr,
  3895. int width);
  3896. void SobelXYRow_Any_NEON(const uint8_t* y_buf,
  3897. const uint8_t* uv_buf,
  3898. uint8_t* dst_ptr,
  3899. int width);
  3900. void SobelXYRow_Any_MSA(const uint8_t* y_buf,
  3901. const uint8_t* uv_buf,
  3902. uint8_t* dst_ptr,
  3903. int width);
  3904. void SobelXYRow_Any_MMI(const uint8_t* y_buf,
  3905. const uint8_t* uv_buf,
  3906. uint8_t* dst_ptr,
  3907. int width);
  3908. void ARGBPolynomialRow_C(const uint8_t* src_argb,
  3909. uint8_t* dst_argb,
  3910. const float* poly,
  3911. int width);
  3912. void ARGBPolynomialRow_SSE2(const uint8_t* src_argb,
  3913. uint8_t* dst_argb,
  3914. const float* poly,
  3915. int width);
  3916. void ARGBPolynomialRow_AVX2(const uint8_t* src_argb,
  3917. uint8_t* dst_argb,
  3918. const float* poly,
  3919. int width);
  3920. // Scale and convert to half float.
  3921. void HalfFloatRow_C(const uint16_t* src, uint16_t* dst, float scale, int width);
  3922. void HalfFloatRow_SSE2(const uint16_t* src,
  3923. uint16_t* dst,
  3924. float scale,
  3925. int width);
  3926. void HalfFloatRow_Any_SSE2(const uint16_t* src_ptr,
  3927. uint16_t* dst_ptr,
  3928. float param,
  3929. int width);
  3930. void HalfFloatRow_AVX2(const uint16_t* src,
  3931. uint16_t* dst,
  3932. float scale,
  3933. int width);
  3934. void HalfFloatRow_Any_AVX2(const uint16_t* src_ptr,
  3935. uint16_t* dst_ptr,
  3936. float param,
  3937. int width);
  3938. void HalfFloatRow_F16C(const uint16_t* src,
  3939. uint16_t* dst,
  3940. float scale,
  3941. int width);
  3942. void HalfFloatRow_Any_F16C(const uint16_t* src,
  3943. uint16_t* dst,
  3944. float scale,
  3945. int width);
  3946. void HalfFloat1Row_F16C(const uint16_t* src,
  3947. uint16_t* dst,
  3948. float scale,
  3949. int width);
  3950. void HalfFloat1Row_Any_F16C(const uint16_t* src,
  3951. uint16_t* dst,
  3952. float scale,
  3953. int width);
  3954. void HalfFloatRow_NEON(const uint16_t* src,
  3955. uint16_t* dst,
  3956. float scale,
  3957. int width);
  3958. void HalfFloatRow_Any_NEON(const uint16_t* src_ptr,
  3959. uint16_t* dst_ptr,
  3960. float param,
  3961. int width);
  3962. void HalfFloat1Row_NEON(const uint16_t* src,
  3963. uint16_t* dst,
  3964. float scale,
  3965. int width);
  3966. void HalfFloat1Row_Any_NEON(const uint16_t* src_ptr,
  3967. uint16_t* dst_ptr,
  3968. float param,
  3969. int width);
  3970. void HalfFloatRow_MSA(const uint16_t* src,
  3971. uint16_t* dst,
  3972. float scale,
  3973. int width);
  3974. void HalfFloatRow_Any_MSA(const uint16_t* src_ptr,
  3975. uint16_t* dst_ptr,
  3976. float param,
  3977. int width);
  3978. void ByteToFloatRow_C(const uint8_t* src, float* dst, float scale, int width);
  3979. void ByteToFloatRow_NEON(const uint8_t* src,
  3980. float* dst,
  3981. float scale,
  3982. int width);
  3983. void ByteToFloatRow_Any_NEON(const uint8_t* src_ptr,
  3984. float* dst_ptr,
  3985. float param,
  3986. int width);
  3987. void ARGBLumaColorTableRow_C(const uint8_t* src_argb,
  3988. uint8_t* dst_argb,
  3989. int width,
  3990. const uint8_t* luma,
  3991. uint32_t lumacoeff);
  3992. void ARGBLumaColorTableRow_SSSE3(const uint8_t* src_argb,
  3993. uint8_t* dst_argb,
  3994. int width,
  3995. const uint8_t* luma,
  3996. uint32_t lumacoeff);
  3997. float ScaleMaxSamples_C(const float* src, float* dst, float scale, int width);
  3998. float ScaleMaxSamples_NEON(const float* src,
  3999. float* dst,
  4000. float scale,
  4001. int width);
  4002. float ScaleSumSamples_C(const float* src, float* dst, float scale, int width);
  4003. float ScaleSumSamples_NEON(const float* src,
  4004. float* dst,
  4005. float scale,
  4006. int width);
  4007. void ScaleSamples_C(const float* src, float* dst, float scale, int width);
  4008. void ScaleSamples_NEON(const float* src, float* dst, float scale, int width);
  4009. void I210ToARGBRow_MMI(const uint16_t* src_y,
  4010. const uint16_t* src_u,
  4011. const uint16_t* src_v,
  4012. uint8_t* rgb_buf,
  4013. const struct YuvConstants* yuvconstants,
  4014. int width);
  4015. void I422ToRGBARow_MMI(const uint8_t* src_y,
  4016. const uint8_t* src_u,
  4017. const uint8_t* src_v,
  4018. uint8_t* dst_argb,
  4019. const struct YuvConstants* yuvconstants,
  4020. int width);
  4021. void I422AlphaToARGBRow_MMI(const uint8_t* src_y,
  4022. const uint8_t* src_u,
  4023. const uint8_t* src_v,
  4024. const uint8_t* src_a,
  4025. uint8_t* dst_argb,
  4026. const struct YuvConstants* yuvconstants,
  4027. int width);
  4028. void I422ToRGB24Row_MMI(const uint8_t* src_y,
  4029. const uint8_t* src_u,
  4030. const uint8_t* src_v,
  4031. uint8_t* dst_argb,
  4032. const struct YuvConstants* yuvconstants,
  4033. int width);
  4034. void I422ToRGB565Row_MMI(const uint8_t* src_y,
  4035. const uint8_t* src_u,
  4036. const uint8_t* src_v,
  4037. uint8_t* dst_rgb565,
  4038. const struct YuvConstants* yuvconstants,
  4039. int width);
  4040. void I422ToARGB4444Row_MMI(const uint8_t* src_y,
  4041. const uint8_t* src_u,
  4042. const uint8_t* src_v,
  4043. uint8_t* dst_argb4444,
  4044. const struct YuvConstants* yuvconstants,
  4045. int width);
  4046. void I422ToARGB1555Row_MMI(const uint8_t* src_y,
  4047. const uint8_t* src_u,
  4048. const uint8_t* src_v,
  4049. uint8_t* dst_argb1555,
  4050. const struct YuvConstants* yuvconstants,
  4051. int width);
  4052. void NV12ToARGBRow_MMI(const uint8_t* src_y,
  4053. const uint8_t* src_uv,
  4054. uint8_t* dst_argb,
  4055. const struct YuvConstants* yuvconstants,
  4056. int width);
  4057. void NV12ToRGB565Row_MMI(const uint8_t* src_y,
  4058. const uint8_t* src_uv,
  4059. uint8_t* dst_rgb565,
  4060. const struct YuvConstants* yuvconstants,
  4061. int width);
  4062. void NV21ToARGBRow_MMI(const uint8_t* src_y,
  4063. const uint8_t* src_vu,
  4064. uint8_t* dst_argb,
  4065. const struct YuvConstants* yuvconstants,
  4066. int width);
  4067. void NV12ToRGB24Row_MMI(const uint8_t* src_y,
  4068. const uint8_t* src_uv,
  4069. uint8_t* dst_rgb24,
  4070. const struct YuvConstants* yuvconstants,
  4071. int width);
  4072. void NV21ToRGB24Row_MMI(const uint8_t* src_y,
  4073. const uint8_t* src_vu,
  4074. uint8_t* dst_rgb24,
  4075. const struct YuvConstants* yuvconstants,
  4076. int width);
  4077. void YUY2ToARGBRow_MMI(const uint8_t* src_yuy2,
  4078. uint8_t* dst_argb,
  4079. const struct YuvConstants* yuvconstants,
  4080. int width);
  4081. void UYVYToARGBRow_MMI(const uint8_t* src_uyvy,
  4082. uint8_t* dst_argb,
  4083. const struct YuvConstants* yuvconstants,
  4084. int width);
  4085. void I210ToARGBRow_Any_MMI(const uint16_t* y_buf,
  4086. const uint16_t* u_buf,
  4087. const uint16_t* v_buf,
  4088. uint8_t* dst_ptr,
  4089. const struct YuvConstants* yuvconstants,
  4090. int width);
  4091. void I422ToRGBARow_Any_MMI(const uint8_t* y_buf,
  4092. const uint8_t* u_buf,
  4093. const uint8_t* v_buf,
  4094. uint8_t* dst_ptr,
  4095. const struct YuvConstants* yuvconstants,
  4096. int width);
  4097. void I422AlphaToARGBRow_Any_MMI(const uint8_t* y_buf,
  4098. const uint8_t* u_buf,
  4099. const uint8_t* v_buf,
  4100. const uint8_t* a_buf,
  4101. uint8_t* dst_ptr,
  4102. const struct YuvConstants* yuvconstants,
  4103. int width);
  4104. void I422ToRGB24Row_Any_MMI(const uint8_t* y_buf,
  4105. const uint8_t* u_buf,
  4106. const uint8_t* v_buf,
  4107. uint8_t* dst_ptr,
  4108. const struct YuvConstants* yuvconstants,
  4109. int width);
  4110. void I422ToRGB565Row_Any_MMI(const uint8_t* y_buf,
  4111. const uint8_t* u_buf,
  4112. const uint8_t* v_buf,
  4113. uint8_t* dst_ptr,
  4114. const struct YuvConstants* yuvconstants,
  4115. int width);
  4116. void I422ToARGB4444Row_Any_MMI(const uint8_t* y_buf,
  4117. const uint8_t* u_buf,
  4118. const uint8_t* v_buf,
  4119. uint8_t* dst_ptr,
  4120. const struct YuvConstants* yuvconstants,
  4121. int width);
  4122. void I422ToARGB1555Row_Any_MMI(const uint8_t* y_buf,
  4123. const uint8_t* u_buf,
  4124. const uint8_t* v_buf,
  4125. uint8_t* dst_ptr,
  4126. const struct YuvConstants* yuvconstants,
  4127. int width);
  4128. void NV12ToARGBRow_Any_MMI(const uint8_t* y_buf,
  4129. const uint8_t* uv_buf,
  4130. uint8_t* dst_ptr,
  4131. const struct YuvConstants* yuvconstants,
  4132. int width);
  4133. void NV12ToRGB565Row_Any_MMI(const uint8_t* y_buf,
  4134. const uint8_t* uv_buf,
  4135. uint8_t* dst_ptr,
  4136. const struct YuvConstants* yuvconstants,
  4137. int width);
  4138. void NV21ToARGBRow_Any_MMI(const uint8_t* y_buf,
  4139. const uint8_t* uv_buf,
  4140. uint8_t* dst_ptr,
  4141. const struct YuvConstants* yuvconstants,
  4142. int width);
  4143. void NV12ToRGB24Row_Any_MMI(const uint8_t* y_buf,
  4144. const uint8_t* uv_buf,
  4145. uint8_t* dst_ptr,
  4146. const struct YuvConstants* yuvconstants,
  4147. int width);
  4148. void NV21ToRGB24Row_Any_MMI(const uint8_t* y_buf,
  4149. const uint8_t* uv_buf,
  4150. uint8_t* dst_ptr,
  4151. const struct YuvConstants* yuvconstants,
  4152. int width);
  4153. void YUY2ToARGBRow_Any_MMI(const uint8_t* src_ptr,
  4154. uint8_t* dst_ptr,
  4155. const struct YuvConstants* yuvconstants,
  4156. int width);
  4157. void UYVYToARGBRow_Any_MMI(const uint8_t* src_ptr,
  4158. uint8_t* dst_ptr,
  4159. const struct YuvConstants* yuvconstants,
  4160. int width);
  4161. void GaussRow_F32_NEON(const float* src, float* dst, int width);
  4162. void GaussRow_F32_C(const float* src, float* dst, int width);
  4163. void GaussCol_F32_NEON(const float* src0,
  4164. const float* src1,
  4165. const float* src2,
  4166. const float* src3,
  4167. const float* src4,
  4168. float* dst,
  4169. int width);
  4170. void GaussCol_F32_C(const float* src0,
  4171. const float* src1,
  4172. const float* src2,
  4173. const float* src3,
  4174. const float* src4,
  4175. float* dst,
  4176. int width);
  4177. #ifdef __cplusplus
  4178. } // extern "C"
  4179. } // namespace libyuv
  4180. #endif
  4181. #endif // INCLUDE_LIBYUV_ROW_H_