row.h 189 KB

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