1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415 |
- /*
- * This copyright notice applies to this header file only:
- *
- * Copyright (c) 2010-2018 NVIDIA Corporation
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use,
- * copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the software, and to permit persons to whom the
- * software is furnished to do so, subject to the following
- * conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */
- /**
- * \file nvEncodeAPI.h
- * NVIDIA GPUs - beginning with the Kepler generation - contain a hardware-based encoder
- * (referred to as NVENC) which provides fully-accelerated hardware-based video encoding.
- * NvEncodeAPI provides the interface for NVIDIA video encoder (NVENC).
- * \date 2011-2018
- * This file contains the interface constants, structure definitions and function prototypes.
- */
- #ifndef _NV_ENCODEAPI_H_
- #define _NV_ENCODEAPI_H_
- #include <stdlib.h>
- #ifdef _WIN32
- #include <windows.h>
- #endif
- #ifdef _MSC_VER
- #ifndef _STDINT
- typedef __int32 int32_t;
- typedef unsigned __int32 uint32_t;
- typedef __int64 int64_t;
- typedef unsigned __int64 uint64_t;
- typedef signed char int8_t;
- typedef unsigned char uint8_t;
- typedef short int16_t;
- typedef unsigned short uint16_t;
- #endif
- #else
- #include <stdint.h>
- #endif
- #ifdef __cplusplus
- extern "C" {
- #endif
- /**
- * \addtogroup ENCODER_STRUCTURE NvEncodeAPI Data structures
- * @{
- */
- #ifdef _WIN32
- #define NVENCAPI __stdcall
- typedef RECT NVENC_RECT;
- #else
- #define NVENCAPI
- // =========================================================================================
- #ifndef GUID
- /*!
- * \struct GUID
- * Abstracts the GUID structure for non-windows platforms.
- */
- // =========================================================================================
- typedef struct
- {
- uint32_t Data1; /**< [in]: Specifies the first 8 hexadecimal digits of the GUID. */
- uint16_t Data2; /**< [in]: Specifies the first group of 4 hexadecimal digits. */
- uint16_t Data3; /**< [in]: Specifies the second group of 4 hexadecimal digits. */
- uint8_t Data4[8]; /**< [in]: Array of 8 bytes. The first 2 bytes contain the third group of 4 hexadecimal digits.
- The remaining 6 bytes contain the final 12 hexadecimal digits. */
- } GUID;
- #endif // GUID
- /**
- * \struct _NVENC_RECT
- * Defines a Rectangle. Used in ::NV_ENC_PREPROCESS_FRAME.
- */
- typedef struct _NVENC_RECT
- {
- uint32_t left; /**< [in]: X coordinate of the upper left corner of rectangular area to be specified. */
- uint32_t top; /**< [in]: Y coordinate of the upper left corner of the rectangular area to be specified. */
- uint32_t right; /**< [in]: X coordinate of the bottom right corner of the rectangular area to be specified. */
- uint32_t bottom; /**< [in]: Y coordinate of the bottom right corner of the rectangular area to be specified. */
- } NVENC_RECT;
- #endif // _WIN32
- /** @} */ /* End of GUID and NVENC_RECT structure grouping*/
- typedef void* NV_ENC_INPUT_PTR; /**< NVENCODE API input buffer */
- typedef void* NV_ENC_OUTPUT_PTR; /**< NVENCODE API output buffer*/
- typedef void* NV_ENC_REGISTERED_PTR; /**< A Resource that has been registered with NVENCODE API*/
- #define NVENCAPI_MAJOR_VERSION 8
- #define NVENCAPI_MINOR_VERSION 1
- #define NVENCAPI_VERSION (NVENCAPI_MAJOR_VERSION | (NVENCAPI_MINOR_VERSION << 24))
- /**
- * Macro to generate per-structure version for use with API.
- */
- #define NVENCAPI_STRUCT_VERSION(ver) ((uint32_t)NVENCAPI_VERSION | ((ver)<<16) | (0x7 << 28))
- #define NVENC_INFINITE_GOPLENGTH 0xffffffff
- #define NV_MAX_SEQ_HDR_LEN (512)
- // =========================================================================================
- // Encode Codec GUIDS supported by the NvEncodeAPI interface.
- // =========================================================================================
- // {6BC82762-4E63-4ca4-AA85-1E50F321F6BF}
- static const GUID NV_ENC_CODEC_H264_GUID =
- { 0x6bc82762, 0x4e63, 0x4ca4, { 0xaa, 0x85, 0x1e, 0x50, 0xf3, 0x21, 0xf6, 0xbf } };
- // {790CDC88-4522-4d7b-9425-BDA9975F7603}
- static const GUID NV_ENC_CODEC_HEVC_GUID =
- { 0x790cdc88, 0x4522, 0x4d7b, { 0x94, 0x25, 0xbd, 0xa9, 0x97, 0x5f, 0x76, 0x3 } };
- // =========================================================================================
- // * Encode Profile GUIDS supported by the NvEncodeAPI interface.
- // =========================================================================================
- // {BFD6F8E7-233C-4341-8B3E-4818523803F4}
- static const GUID NV_ENC_CODEC_PROFILE_AUTOSELECT_GUID =
- { 0xbfd6f8e7, 0x233c, 0x4341, { 0x8b, 0x3e, 0x48, 0x18, 0x52, 0x38, 0x3, 0xf4 } };
- // {0727BCAA-78C4-4c83-8C2F-EF3DFF267C6A}
- static const GUID NV_ENC_H264_PROFILE_BASELINE_GUID =
- { 0x727bcaa, 0x78c4, 0x4c83, { 0x8c, 0x2f, 0xef, 0x3d, 0xff, 0x26, 0x7c, 0x6a } };
- // {60B5C1D4-67FE-4790-94D5-C4726D7B6E6D}
- static const GUID NV_ENC_H264_PROFILE_MAIN_GUID =
- { 0x60b5c1d4, 0x67fe, 0x4790, { 0x94, 0xd5, 0xc4, 0x72, 0x6d, 0x7b, 0x6e, 0x6d } };
- // {E7CBC309-4F7A-4b89-AF2A-D537C92BE310}
- static const GUID NV_ENC_H264_PROFILE_HIGH_GUID =
- { 0xe7cbc309, 0x4f7a, 0x4b89, { 0xaf, 0x2a, 0xd5, 0x37, 0xc9, 0x2b, 0xe3, 0x10 } };
- // {7AC663CB-A598-4960-B844-339B261A7D52}
- static const GUID NV_ENC_H264_PROFILE_HIGH_444_GUID =
- { 0x7ac663cb, 0xa598, 0x4960, { 0xb8, 0x44, 0x33, 0x9b, 0x26, 0x1a, 0x7d, 0x52 } };
- // {40847BF5-33F7-4601-9084-E8FE3C1DB8B7}
- static const GUID NV_ENC_H264_PROFILE_STEREO_GUID =
- { 0x40847bf5, 0x33f7, 0x4601, { 0x90, 0x84, 0xe8, 0xfe, 0x3c, 0x1d, 0xb8, 0xb7 } };
- // {CE788D20-AAA9-4318-92BB-AC7E858C8D36}
- static const GUID NV_ENC_H264_PROFILE_SVC_TEMPORAL_SCALABILTY =
- { 0xce788d20, 0xaaa9, 0x4318, { 0x92, 0xbb, 0xac, 0x7e, 0x85, 0x8c, 0x8d, 0x36 } };
- // {B405AFAC-F32B-417B-89C4-9ABEED3E5978}
- static const GUID NV_ENC_H264_PROFILE_PROGRESSIVE_HIGH_GUID =
- { 0xb405afac, 0xf32b, 0x417b, { 0x89, 0xc4, 0x9a, 0xbe, 0xed, 0x3e, 0x59, 0x78 } };
- // {AEC1BD87-E85B-48f2-84C3-98BCA6285072}
- static const GUID NV_ENC_H264_PROFILE_CONSTRAINED_HIGH_GUID =
- { 0xaec1bd87, 0xe85b, 0x48f2, { 0x84, 0xc3, 0x98, 0xbc, 0xa6, 0x28, 0x50, 0x72 } };
- // {B514C39A-B55B-40fa-878F-F1253B4DFDEC}
- static const GUID NV_ENC_HEVC_PROFILE_MAIN_GUID =
- { 0xb514c39a, 0xb55b, 0x40fa, { 0x87, 0x8f, 0xf1, 0x25, 0x3b, 0x4d, 0xfd, 0xec } };
- // {fa4d2b6c-3a5b-411a-8018-0a3f5e3c9be5}
- static const GUID NV_ENC_HEVC_PROFILE_MAIN10_GUID =
- { 0xfa4d2b6c, 0x3a5b, 0x411a, { 0x80, 0x18, 0x0a, 0x3f, 0x5e, 0x3c, 0x9b, 0xe5 } };
- // For HEVC Main 444 8 bit and HEVC Main 444 10 bit profiles only
- // {51ec32b5-1b4c-453c-9cbd-b616bd621341}
- static const GUID NV_ENC_HEVC_PROFILE_FREXT_GUID =
- { 0x51ec32b5, 0x1b4c, 0x453c, { 0x9c, 0xbd, 0xb6, 0x16, 0xbd, 0x62, 0x13, 0x41 } };
- // =========================================================================================
- // * Preset GUIDS supported by the NvEncodeAPI interface.
- // =========================================================================================
- // {B2DFB705-4EBD-4C49-9B5F-24A777D3E587}
- static const GUID NV_ENC_PRESET_DEFAULT_GUID =
- { 0xb2dfb705, 0x4ebd, 0x4c49, { 0x9b, 0x5f, 0x24, 0xa7, 0x77, 0xd3, 0xe5, 0x87 } };
- // {60E4C59F-E846-4484-A56D-CD45BE9FDDF6}
- static const GUID NV_ENC_PRESET_HP_GUID =
- { 0x60e4c59f, 0xe846, 0x4484, { 0xa5, 0x6d, 0xcd, 0x45, 0xbe, 0x9f, 0xdd, 0xf6 } };
- // {34DBA71D-A77B-4B8F-9C3E-B6D5DA24C012}
- static const GUID NV_ENC_PRESET_HQ_GUID =
- { 0x34dba71d, 0xa77b, 0x4b8f, { 0x9c, 0x3e, 0xb6, 0xd5, 0xda, 0x24, 0xc0, 0x12 } };
- // {82E3E450-BDBB-4e40-989C-82A90DF9EF32}
- static const GUID NV_ENC_PRESET_BD_GUID =
- { 0x82e3e450, 0xbdbb, 0x4e40, { 0x98, 0x9c, 0x82, 0xa9, 0xd, 0xf9, 0xef, 0x32 } };
- // {49DF21C5-6DFA-4feb-9787-6ACC9EFFB726}
- static const GUID NV_ENC_PRESET_LOW_LATENCY_DEFAULT_GUID =
- { 0x49df21c5, 0x6dfa, 0x4feb, { 0x97, 0x87, 0x6a, 0xcc, 0x9e, 0xff, 0xb7, 0x26 } };
- // {C5F733B9-EA97-4cf9-BEC2-BF78A74FD105}
- static const GUID NV_ENC_PRESET_LOW_LATENCY_HQ_GUID =
- { 0xc5f733b9, 0xea97, 0x4cf9, { 0xbe, 0xc2, 0xbf, 0x78, 0xa7, 0x4f, 0xd1, 0x5 } };
- // {67082A44-4BAD-48FA-98EA-93056D150A58}
- static const GUID NV_ENC_PRESET_LOW_LATENCY_HP_GUID =
- { 0x67082a44, 0x4bad, 0x48fa, { 0x98, 0xea, 0x93, 0x5, 0x6d, 0x15, 0xa, 0x58 } };
- // {D5BFB716-C604-44e7-9BB8-DEA5510FC3AC}
- static const GUID NV_ENC_PRESET_LOSSLESS_DEFAULT_GUID =
- { 0xd5bfb716, 0xc604, 0x44e7, { 0x9b, 0xb8, 0xde, 0xa5, 0x51, 0xf, 0xc3, 0xac } };
- // {149998E7-2364-411d-82EF-179888093409}
- static const GUID NV_ENC_PRESET_LOSSLESS_HP_GUID =
- { 0x149998e7, 0x2364, 0x411d, { 0x82, 0xef, 0x17, 0x98, 0x88, 0x9, 0x34, 0x9 } };
- /**
- * \addtogroup ENCODER_STRUCTURE NvEncodeAPI Data structures
- * @{
- */
- /**
- * Input frame encode modes
- */
- typedef enum _NV_ENC_PARAMS_FRAME_FIELD_MODE
- {
- NV_ENC_PARAMS_FRAME_FIELD_MODE_FRAME = 0x01, /**< Frame mode */
- NV_ENC_PARAMS_FRAME_FIELD_MODE_FIELD = 0x02, /**< Field mode */
- NV_ENC_PARAMS_FRAME_FIELD_MODE_MBAFF = 0x03 /**< MB adaptive frame/field */
- } NV_ENC_PARAMS_FRAME_FIELD_MODE;
- /**
- * Rate Control Modes
- */
- typedef enum _NV_ENC_PARAMS_RC_MODE
- {
- NV_ENC_PARAMS_RC_CONSTQP = 0x0, /**< Constant QP mode */
- NV_ENC_PARAMS_RC_VBR = 0x1, /**< Variable bitrate mode */
- NV_ENC_PARAMS_RC_CBR = 0x2, /**< Constant bitrate mode */
- NV_ENC_PARAMS_RC_CBR_LOWDELAY_HQ = 0x8, /**< low-delay CBR, high quality */
- NV_ENC_PARAMS_RC_CBR_HQ = 0x10, /**< CBR, high quality (slower) */
- NV_ENC_PARAMS_RC_VBR_HQ = 0x20 /**< VBR, high quality (slower) */
- } NV_ENC_PARAMS_RC_MODE;
- /**
- * Emphasis Levels
- */
- typedef enum _NV_ENC_EMPHASIS_MAP_LEVEL
- {
- NV_ENC_EMPHASIS_MAP_LEVEL_0 = 0x0, /**< Emphasis Map Level 0, for zero Delta QP value */
- NV_ENC_EMPHASIS_MAP_LEVEL_1 = 0x1, /**< Emphasis Map Level 1, for very low Delta QP value */
- NV_ENC_EMPHASIS_MAP_LEVEL_2 = 0x2, /**< Emphasis Map Level 2, for low Delta QP value */
- NV_ENC_EMPHASIS_MAP_LEVEL_3 = 0x3, /**< Emphasis Map Level 3, for medium Delta QP value */
- NV_ENC_EMPHASIS_MAP_LEVEL_4 = 0x4, /**< Emphasis Map Level 4, for high Delta QP value */
- NV_ENC_EMPHASIS_MAP_LEVEL_5 = 0x5 /**< Emphasis Map Level 5, for very high Delta QP value */
- } NV_ENC_EMPHASIS_MAP_LEVEL;
- /**
- * QP MAP MODE
- */
- typedef enum _NV_ENC_QP_MAP_MODE
- {
- NV_ENC_QP_MAP_DISABLED = 0x0, /**< Value in NV_ENC_PIC_PARAMS::qpDeltaMap have no effect. */
- NV_ENC_QP_MAP_EMPHASIS = 0x1, /**< Value in NV_ENC_PIC_PARAMS::qpDeltaMap will be treated as Empasis level. Currently this is only supported for H264 */
- NV_ENC_QP_MAP_DELTA = 0x2, /**< Value in NV_ENC_PIC_PARAMS::qpDeltaMap will be treated as QP delta map. */
- NV_ENC_QP_MAP = 0x3, /**< Currently This is not supported. Value in NV_ENC_PIC_PARAMS::qpDeltaMap will be treated as QP value. */
- } NV_ENC_QP_MAP_MODE;
- #define NV_ENC_PARAMS_RC_VBR_MINQP (NV_ENC_PARAMS_RC_MODE)0x4 /**< Deprecated */
- #define NV_ENC_PARAMS_RC_2_PASS_QUALITY NV_ENC_PARAMS_RC_CBR_LOWDELAY_HQ /**< Deprecated */
- #define NV_ENC_PARAMS_RC_2_PASS_FRAMESIZE_CAP NV_ENC_PARAMS_RC_CBR_HQ /**< Deprecated */
- #define NV_ENC_PARAMS_RC_2_PASS_VBR NV_ENC_PARAMS_RC_VBR_HQ /**< Deprecated */
- #define NV_ENC_PARAMS_RC_CBR2 NV_ENC_PARAMS_RC_CBR /**< Deprecated */
- /**
- * Input picture structure
- */
- typedef enum _NV_ENC_PIC_STRUCT
- {
- NV_ENC_PIC_STRUCT_FRAME = 0x01, /**< Progressive frame */
- NV_ENC_PIC_STRUCT_FIELD_TOP_BOTTOM = 0x02, /**< Field encoding top field first */
- NV_ENC_PIC_STRUCT_FIELD_BOTTOM_TOP = 0x03 /**< Field encoding bottom field first */
- } NV_ENC_PIC_STRUCT;
- /**
- * Input picture type
- */
- typedef enum _NV_ENC_PIC_TYPE
- {
- NV_ENC_PIC_TYPE_P = 0x0, /**< Forward predicted */
- NV_ENC_PIC_TYPE_B = 0x01, /**< Bi-directionally predicted picture */
- NV_ENC_PIC_TYPE_I = 0x02, /**< Intra predicted picture */
- NV_ENC_PIC_TYPE_IDR = 0x03, /**< IDR picture */
- NV_ENC_PIC_TYPE_BI = 0x04, /**< Bi-directionally predicted with only Intra MBs */
- NV_ENC_PIC_TYPE_SKIPPED = 0x05, /**< Picture is skipped */
- NV_ENC_PIC_TYPE_INTRA_REFRESH = 0x06, /**< First picture in intra refresh cycle */
- NV_ENC_PIC_TYPE_UNKNOWN = 0xFF /**< Picture type unknown */
- } NV_ENC_PIC_TYPE;
- /**
- * Motion vector precisions
- */
- typedef enum _NV_ENC_MV_PRECISION
- {
- NV_ENC_MV_PRECISION_DEFAULT = 0x0, /**<Driver selects QuarterPel motion vector precision by default*/
- NV_ENC_MV_PRECISION_FULL_PEL = 0x01, /**< FullPel motion vector precision */
- NV_ENC_MV_PRECISION_HALF_PEL = 0x02, /**< HalfPel motion vector precision */
- NV_ENC_MV_PRECISION_QUARTER_PEL = 0x03 /**< QuarterPel motion vector precision */
- } NV_ENC_MV_PRECISION;
- /**
- * Input buffer formats
- */
- typedef enum _NV_ENC_BUFFER_FORMAT
- {
- NV_ENC_BUFFER_FORMAT_UNDEFINED = 0x00000000, /**< Undefined buffer format */
- NV_ENC_BUFFER_FORMAT_NV12 = 0x00000001, /**< Semi-Planar YUV [Y plane followed by interleaved UV plane] */
- NV_ENC_BUFFER_FORMAT_YV12 = 0x00000010, /**< Planar YUV [Y plane followed by V and U planes] */
- NV_ENC_BUFFER_FORMAT_IYUV = 0x00000100, /**< Planar YUV [Y plane followed by U and V planes] */
- NV_ENC_BUFFER_FORMAT_YUV444 = 0x00001000, /**< Planar YUV [Y plane followed by U and V planes] */
- NV_ENC_BUFFER_FORMAT_YUV420_10BIT = 0x00010000, /**< 10 bit Semi-Planar YUV [Y plane followed by interleaved UV plane]. Each pixel of size 2 bytes. Most Significant 10 bits contain pixel data. */
- NV_ENC_BUFFER_FORMAT_YUV444_10BIT = 0x00100000, /**< 10 bit Planar YUV444 [Y plane followed by U and V planes]. Each pixel of size 2 bytes. Most Significant 10 bits contain pixel data. */
- NV_ENC_BUFFER_FORMAT_ARGB = 0x01000000, /**< 8 bit Packed A8R8G8B8. This is a word-ordered format
- where a pixel is represented by a 32-bit word with B
- in the lowest 8 bits, G in the next 8 bits, R in the
- 8 bits after that and A in the highest 8 bits. */
- NV_ENC_BUFFER_FORMAT_ARGB10 = 0x02000000, /**< 10 bit Packed A2R10G10B10. This is a word-ordered format
- where a pixel is represented by a 32-bit word with B
- in the lowest 10 bits, G in the next 10 bits, R in the
- 10 bits after that and A in the highest 2 bits. */
- NV_ENC_BUFFER_FORMAT_AYUV = 0x04000000, /**< 8 bit Packed A8Y8U8V8. This is a word-ordered format
- where a pixel is represented by a 32-bit word with V
- in the lowest 8 bits, U in the next 8 bits, Y in the
- 8 bits after that and A in the highest 8 bits. */
- NV_ENC_BUFFER_FORMAT_ABGR = 0x10000000, /**< 8 bit Packed A8B8G8R8. This is a word-ordered format
- where a pixel is represented by a 32-bit word with R
- in the lowest 8 bits, G in the next 8 bits, B in the
- 8 bits after that and A in the highest 8 bits. */
- NV_ENC_BUFFER_FORMAT_ABGR10 = 0x20000000, /**< 10 bit Packed A2B10G10R10. This is a word-ordered format
- where a pixel is represented by a 32-bit word with R
- in the lowest 10 bits, G in the next 10 bits, B in the
- 10 bits after that and A in the highest 2 bits. */
- } NV_ENC_BUFFER_FORMAT;
- #define NV_ENC_BUFFER_FORMAT_NV12_PL NV_ENC_BUFFER_FORMAT_NV12
- #define NV_ENC_BUFFER_FORMAT_YV12_PL NV_ENC_BUFFER_FORMAT_YV12
- #define NV_ENC_BUFFER_FORMAT_IYUV_PL NV_ENC_BUFFER_FORMAT_IYUV
- #define NV_ENC_BUFFER_FORMAT_YUV444_PL NV_ENC_BUFFER_FORMAT_YUV444
- /**
- * Encoding levels
- */
- typedef enum _NV_ENC_LEVEL
- {
- NV_ENC_LEVEL_AUTOSELECT = 0,
- NV_ENC_LEVEL_H264_1 = 10,
- NV_ENC_LEVEL_H264_1b = 9,
- NV_ENC_LEVEL_H264_11 = 11,
- NV_ENC_LEVEL_H264_12 = 12,
- NV_ENC_LEVEL_H264_13 = 13,
- NV_ENC_LEVEL_H264_2 = 20,
- NV_ENC_LEVEL_H264_21 = 21,
- NV_ENC_LEVEL_H264_22 = 22,
- NV_ENC_LEVEL_H264_3 = 30,
- NV_ENC_LEVEL_H264_31 = 31,
- NV_ENC_LEVEL_H264_32 = 32,
- NV_ENC_LEVEL_H264_4 = 40,
- NV_ENC_LEVEL_H264_41 = 41,
- NV_ENC_LEVEL_H264_42 = 42,
- NV_ENC_LEVEL_H264_5 = 50,
- NV_ENC_LEVEL_H264_51 = 51,
- NV_ENC_LEVEL_H264_52 = 52,
- NV_ENC_LEVEL_HEVC_1 = 30,
- NV_ENC_LEVEL_HEVC_2 = 60,
- NV_ENC_LEVEL_HEVC_21 = 63,
- NV_ENC_LEVEL_HEVC_3 = 90,
- NV_ENC_LEVEL_HEVC_31 = 93,
- NV_ENC_LEVEL_HEVC_4 = 120,
- NV_ENC_LEVEL_HEVC_41 = 123,
- NV_ENC_LEVEL_HEVC_5 = 150,
- NV_ENC_LEVEL_HEVC_51 = 153,
- NV_ENC_LEVEL_HEVC_52 = 156,
- NV_ENC_LEVEL_HEVC_6 = 180,
- NV_ENC_LEVEL_HEVC_61 = 183,
- NV_ENC_LEVEL_HEVC_62 = 186,
- NV_ENC_TIER_HEVC_MAIN = 0,
- NV_ENC_TIER_HEVC_HIGH = 1
- } NV_ENC_LEVEL;
- /**
- * Error Codes
- */
- typedef enum _NVENCSTATUS
- {
- /**
- * This indicates that API call returned with no errors.
- */
- NV_ENC_SUCCESS,
- /**
- * This indicates that no encode capable devices were detected.
- */
- NV_ENC_ERR_NO_ENCODE_DEVICE,
- /**
- * This indicates that devices pass by the client is not supported.
- */
- NV_ENC_ERR_UNSUPPORTED_DEVICE,
- /**
- * This indicates that the encoder device supplied by the client is not
- * valid.
- */
- NV_ENC_ERR_INVALID_ENCODERDEVICE,
- /**
- * This indicates that device passed to the API call is invalid.
- */
- NV_ENC_ERR_INVALID_DEVICE,
- /**
- * This indicates that device passed to the API call is no longer available and
- * needs to be reinitialized. The clients need to destroy the current encoder
- * session by freeing the allocated input output buffers and destroying the device
- * and create a new encoding session.
- */
- NV_ENC_ERR_DEVICE_NOT_EXIST,
- /**
- * This indicates that one or more of the pointers passed to the API call
- * is invalid.
- */
- NV_ENC_ERR_INVALID_PTR,
- /**
- * This indicates that completion event passed in ::NvEncEncodePicture() call
- * is invalid.
- */
- NV_ENC_ERR_INVALID_EVENT,
- /**
- * This indicates that one or more of the parameter passed to the API call
- * is invalid.
- */
- NV_ENC_ERR_INVALID_PARAM,
- /**
- * This indicates that an API call was made in wrong sequence/order.
- */
- NV_ENC_ERR_INVALID_CALL,
- /**
- * This indicates that the API call failed because it was unable to allocate
- * enough memory to perform the requested operation.
- */
- NV_ENC_ERR_OUT_OF_MEMORY,
- /**
- * This indicates that the encoder has not been initialized with
- * ::NvEncInitializeEncoder() or that initialization has failed.
- * The client cannot allocate input or output buffers or do any encoding
- * related operation before successfully initializing the encoder.
- */
- NV_ENC_ERR_ENCODER_NOT_INITIALIZED,
- /**
- * This indicates that an unsupported parameter was passed by the client.
- */
- NV_ENC_ERR_UNSUPPORTED_PARAM,
- /**
- * This indicates that the ::NvEncLockBitstream() failed to lock the output
- * buffer. This happens when the client makes a non blocking lock call to
- * access the output bitstream by passing NV_ENC_LOCK_BITSTREAM::doNotWait flag.
- * This is not a fatal error and client should retry the same operation after
- * few milliseconds.
- */
- NV_ENC_ERR_LOCK_BUSY,
- /**
- * This indicates that the size of the user buffer passed by the client is
- * insufficient for the requested operation.
- */
- NV_ENC_ERR_NOT_ENOUGH_BUFFER,
- /**
- * This indicates that an invalid struct version was used by the client.
- */
- NV_ENC_ERR_INVALID_VERSION,
- /**
- * This indicates that ::NvEncMapInputResource() API failed to map the client
- * provided input resource.
- */
- NV_ENC_ERR_MAP_FAILED,
- /**
- * This indicates encode driver requires more input buffers to produce an output
- * bitstream. If this error is returned from ::NvEncEncodePicture() API, this
- * is not a fatal error. If the client is encoding with B frames then,
- * ::NvEncEncodePicture() API might be buffering the input frame for re-ordering.
- *
- * A client operating in synchronous mode cannot call ::NvEncLockBitstream()
- * API on the output bitstream buffer if ::NvEncEncodePicture() returned the
- * ::NV_ENC_ERR_NEED_MORE_INPUT error code.
- * The client must continue providing input frames until encode driver returns
- * ::NV_ENC_SUCCESS. After receiving ::NV_ENC_SUCCESS status the client can call
- * ::NvEncLockBitstream() API on the output buffers in the same order in which
- * it has called ::NvEncEncodePicture().
- */
- NV_ENC_ERR_NEED_MORE_INPUT,
- /**
- * This indicates that the HW encoder is busy encoding and is unable to encode
- * the input. The client should call ::NvEncEncodePicture() again after few
- * milliseconds.
- */
- NV_ENC_ERR_ENCODER_BUSY,
- /**
- * This indicates that the completion event passed in ::NvEncEncodePicture()
- * API has not been registered with encoder driver using ::NvEncRegisterAsyncEvent().
- */
- NV_ENC_ERR_EVENT_NOT_REGISTERD,
- /**
- * This indicates that an unknown internal error has occurred.
- */
- NV_ENC_ERR_GENERIC,
- /**
- * This indicates that the client is attempting to use a feature
- * that is not available for the license type for the current system.
- */
- NV_ENC_ERR_INCOMPATIBLE_CLIENT_KEY,
- /**
- * This indicates that the client is attempting to use a feature
- * that is not implemented for the current version.
- */
- NV_ENC_ERR_UNIMPLEMENTED,
- /**
- * This indicates that the ::NvEncRegisterResource API failed to register the resource.
- */
- NV_ENC_ERR_RESOURCE_REGISTER_FAILED,
- /**
- * This indicates that the client is attempting to unregister a resource
- * that has not been successfully registered.
- */
- NV_ENC_ERR_RESOURCE_NOT_REGISTERED,
- /**
- * This indicates that the client is attempting to unmap a resource
- * that has not been successfully mapped.
- */
- NV_ENC_ERR_RESOURCE_NOT_MAPPED,
- } NVENCSTATUS;
- /**
- * Encode Picture encode flags.
- */
- typedef enum _NV_ENC_PIC_FLAGS
- {
- NV_ENC_PIC_FLAG_FORCEINTRA = 0x1, /**< Encode the current picture as an Intra picture */
- NV_ENC_PIC_FLAG_FORCEIDR = 0x2, /**< Encode the current picture as an IDR picture.
- This flag is only valid when Picture type decision is taken by the Encoder
- [_NV_ENC_INITIALIZE_PARAMS::enablePTD == 1]. */
- NV_ENC_PIC_FLAG_OUTPUT_SPSPPS = 0x4, /**< Write the sequence and picture header in encoded bitstream of the current picture */
- NV_ENC_PIC_FLAG_EOS = 0x8, /**< Indicates end of the input stream */
- } NV_ENC_PIC_FLAGS;
- /**
- * Memory heap to allocate input and output buffers.
- */
- typedef enum _NV_ENC_MEMORY_HEAP
- {
- NV_ENC_MEMORY_HEAP_AUTOSELECT = 0, /**< Memory heap to be decided by the encoder driver based on the usage */
- NV_ENC_MEMORY_HEAP_VID = 1, /**< Memory heap is in local video memory */
- NV_ENC_MEMORY_HEAP_SYSMEM_CACHED = 2, /**< Memory heap is in cached system memory */
- NV_ENC_MEMORY_HEAP_SYSMEM_UNCACHED = 3 /**< Memory heap is in uncached system memory */
- } NV_ENC_MEMORY_HEAP;
- /**
- * B-frame used as reference modes
- */
- typedef enum _NV_ENC_BFRAME_REF_MODE
- {
- NV_ENC_BFRAME_REF_MODE_DISABLED = 0x0, /**< B frame is not used for reference */
- NV_ENC_BFRAME_REF_MODE_EACH = 0x1, /**< Each B-frame will be used for reference. currently not supported */
- NV_ENC_BFRAME_REF_MODE_MIDDLE = 0x2, /**< Only(Number of B-frame)/2 th B-frame will be used for reference */
- } NV_ENC_BFRAME_REF_MODE;
- /**
- * H.264 entropy coding modes.
- */
- typedef enum _NV_ENC_H264_ENTROPY_CODING_MODE
- {
- NV_ENC_H264_ENTROPY_CODING_MODE_AUTOSELECT = 0x0, /**< Entropy coding mode is auto selected by the encoder driver */
- NV_ENC_H264_ENTROPY_CODING_MODE_CABAC = 0x1, /**< Entropy coding mode is CABAC */
- NV_ENC_H264_ENTROPY_CODING_MODE_CAVLC = 0x2 /**< Entropy coding mode is CAVLC */
- } NV_ENC_H264_ENTROPY_CODING_MODE;
- /**
- * H.264 specific Bdirect modes
- */
- typedef enum _NV_ENC_H264_BDIRECT_MODE
- {
- NV_ENC_H264_BDIRECT_MODE_AUTOSELECT = 0x0, /**< BDirect mode is auto selected by the encoder driver */
- NV_ENC_H264_BDIRECT_MODE_DISABLE = 0x1, /**< Disable BDirect mode */
- NV_ENC_H264_BDIRECT_MODE_TEMPORAL = 0x2, /**< Temporal BDirect mode */
- NV_ENC_H264_BDIRECT_MODE_SPATIAL = 0x3 /**< Spatial BDirect mode */
- } NV_ENC_H264_BDIRECT_MODE;
- /**
- * H.264 specific FMO usage
- */
- typedef enum _NV_ENC_H264_FMO_MODE
- {
- NV_ENC_H264_FMO_AUTOSELECT = 0x0, /**< FMO usage is auto selected by the encoder driver */
- NV_ENC_H264_FMO_ENABLE = 0x1, /**< Enable FMO */
- NV_ENC_H264_FMO_DISABLE = 0x2, /**< Disble FMO */
- } NV_ENC_H264_FMO_MODE;
- /**
- * H.264 specific Adaptive Transform modes
- */
- typedef enum _NV_ENC_H264_ADAPTIVE_TRANSFORM_MODE
- {
- NV_ENC_H264_ADAPTIVE_TRANSFORM_AUTOSELECT = 0x0, /**< Adaptive Transform 8x8 mode is auto selected by the encoder driver*/
- NV_ENC_H264_ADAPTIVE_TRANSFORM_DISABLE = 0x1, /**< Adaptive Transform 8x8 mode disabled */
- NV_ENC_H264_ADAPTIVE_TRANSFORM_ENABLE = 0x2, /**< Adaptive Transform 8x8 mode should be used */
- } NV_ENC_H264_ADAPTIVE_TRANSFORM_MODE;
- /**
- * Stereo frame packing modes.
- */
- typedef enum _NV_ENC_STEREO_PACKING_MODE
- {
- NV_ENC_STEREO_PACKING_MODE_NONE = 0x0, /**< No Stereo packing required */
- NV_ENC_STEREO_PACKING_MODE_CHECKERBOARD = 0x1, /**< Checkerboard mode for packing stereo frames */
- NV_ENC_STEREO_PACKING_MODE_COLINTERLEAVE = 0x2, /**< Column Interleave mode for packing stereo frames */
- NV_ENC_STEREO_PACKING_MODE_ROWINTERLEAVE = 0x3, /**< Row Interleave mode for packing stereo frames */
- NV_ENC_STEREO_PACKING_MODE_SIDEBYSIDE = 0x4, /**< Side-by-side mode for packing stereo frames */
- NV_ENC_STEREO_PACKING_MODE_TOPBOTTOM = 0x5, /**< Top-Bottom mode for packing stereo frames */
- NV_ENC_STEREO_PACKING_MODE_FRAMESEQ = 0x6 /**< Frame Sequential mode for packing stereo frames */
- } NV_ENC_STEREO_PACKING_MODE;
- /**
- * Input Resource type
- */
- typedef enum _NV_ENC_INPUT_RESOURCE_TYPE
- {
- NV_ENC_INPUT_RESOURCE_TYPE_DIRECTX = 0x0, /**< input resource type is a directx9 surface*/
- NV_ENC_INPUT_RESOURCE_TYPE_CUDADEVICEPTR = 0x1, /**< input resource type is a cuda device pointer surface*/
- NV_ENC_INPUT_RESOURCE_TYPE_CUDAARRAY = 0x2, /**< input resource type is a cuda array surface */
- NV_ENC_INPUT_RESOURCE_TYPE_OPENGL_TEX = 0x3 /**< input resource type is an OpenGL texture */
- } NV_ENC_INPUT_RESOURCE_TYPE;
- /**
- * Encoder Device type
- */
- typedef enum _NV_ENC_DEVICE_TYPE
- {
- NV_ENC_DEVICE_TYPE_DIRECTX = 0x0, /**< encode device type is a directx9 device */
- NV_ENC_DEVICE_TYPE_CUDA = 0x1, /**< encode device type is a cuda device */
- NV_ENC_DEVICE_TYPE_OPENGL = 0x2 /**< encode device type is an OpenGL device.
- Use of this device type is supported only on Linux */
- } NV_ENC_DEVICE_TYPE;
- /**
- * Encoder capabilities enumeration.
- */
- typedef enum _NV_ENC_CAPS
- {
- /**
- * Maximum number of B-Frames supported.
- */
- NV_ENC_CAPS_NUM_MAX_BFRAMES,
- /**
- * Rate control modes supported.
- * \n The API return value is a bitmask of the values in NV_ENC_PARAMS_RC_MODE.
- */
- NV_ENC_CAPS_SUPPORTED_RATECONTROL_MODES,
- /**
- * Indicates HW support for field mode encoding.
- * \n 0 : Interlaced mode encoding is not supported.
- * \n 1 : Interlaced field mode encoding is supported.
- * \n 2 : Interlaced frame encoding and field mode encoding are both supported.
- */
- NV_ENC_CAPS_SUPPORT_FIELD_ENCODING,
- /**
- * Indicates HW support for monochrome mode encoding.
- * \n 0 : Monochrome mode not supported.
- * \n 1 : Monochrome mode supported.
- */
- NV_ENC_CAPS_SUPPORT_MONOCHROME,
- /**
- * Indicates HW support for FMO.
- * \n 0 : FMO not supported.
- * \n 1 : FMO supported.
- */
- NV_ENC_CAPS_SUPPORT_FMO,
- /**
- * Indicates HW capability for Quarter pel motion estimation.
- * \n 0 : QuarterPel Motion Estimation not supported.
- * \n 1 : QuarterPel Motion Estimation supported.
- */
- NV_ENC_CAPS_SUPPORT_QPELMV,
- /**
- * H.264 specific. Indicates HW support for BDirect modes.
- * \n 0 : BDirect mode encoding not supported.
- * \n 1 : BDirect mode encoding supported.
- */
- NV_ENC_CAPS_SUPPORT_BDIRECT_MODE,
- /**
- * H264 specific. Indicates HW support for CABAC entropy coding mode.
- * \n 0 : CABAC entropy coding not supported.
- * \n 1 : CABAC entropy coding supported.
- */
- NV_ENC_CAPS_SUPPORT_CABAC,
- /**
- * Indicates HW support for Adaptive Transform.
- * \n 0 : Adaptive Transform not supported.
- * \n 1 : Adaptive Transform supported.
- */
- NV_ENC_CAPS_SUPPORT_ADAPTIVE_TRANSFORM,
- /**
- * Reserved enum field.
- */
- NV_ENC_CAPS_SUPPORT_RESERVED,
- /**
- * Indicates HW support for encoding Temporal layers.
- * \n 0 : Encoding Temporal layers not supported.
- * \n 1 : Encoding Temporal layers supported.
- */
- NV_ENC_CAPS_NUM_MAX_TEMPORAL_LAYERS,
- /**
- * Indicates HW support for Hierarchical P frames.
- * \n 0 : Hierarchical P frames not supported.
- * \n 1 : Hierarchical P frames supported.
- */
- NV_ENC_CAPS_SUPPORT_HIERARCHICAL_PFRAMES,
- /**
- * Indicates HW support for Hierarchical B frames.
- * \n 0 : Hierarchical B frames not supported.
- * \n 1 : Hierarchical B frames supported.
- */
- NV_ENC_CAPS_SUPPORT_HIERARCHICAL_BFRAMES,
- /**
- * Maximum Encoding level supported (See ::NV_ENC_LEVEL for details).
- */
- NV_ENC_CAPS_LEVEL_MAX,
- /**
- * Minimum Encoding level supported (See ::NV_ENC_LEVEL for details).
- */
- NV_ENC_CAPS_LEVEL_MIN,
- /**
- * Indicates HW support for separate colour plane encoding.
- * \n 0 : Separate colour plane encoding not supported.
- * \n 1 : Separate colour plane encoding supported.
- */
- NV_ENC_CAPS_SEPARATE_COLOUR_PLANE,
- /**
- * Maximum output width supported.
- */
- NV_ENC_CAPS_WIDTH_MAX,
- /**
- * Maximum output height supported.
- */
- NV_ENC_CAPS_HEIGHT_MAX,
- /**
- * Indicates Temporal Scalability Support.
- * \n 0 : Temporal SVC encoding not supported.
- * \n 1 : Temporal SVC encoding supported.
- */
- NV_ENC_CAPS_SUPPORT_TEMPORAL_SVC,
- /**
- * Indicates Dynamic Encode Resolution Change Support.
- * Support added from NvEncodeAPI version 2.0.
- * \n 0 : Dynamic Encode Resolution Change not supported.
- * \n 1 : Dynamic Encode Resolution Change supported.
- */
- NV_ENC_CAPS_SUPPORT_DYN_RES_CHANGE,
- /**
- * Indicates Dynamic Encode Bitrate Change Support.
- * Support added from NvEncodeAPI version 2.0.
- * \n 0 : Dynamic Encode bitrate change not supported.
- * \n 1 : Dynamic Encode bitrate change supported.
- */
- NV_ENC_CAPS_SUPPORT_DYN_BITRATE_CHANGE,
- /**
- * Indicates Forcing Constant QP On The Fly Support.
- * Support added from NvEncodeAPI version 2.0.
- * \n 0 : Forcing constant QP on the fly not supported.
- * \n 1 : Forcing constant QP on the fly supported.
- */
- NV_ENC_CAPS_SUPPORT_DYN_FORCE_CONSTQP,
- /**
- * Indicates Dynamic rate control mode Change Support.
- * \n 0 : Dynamic rate control mode change not supported.
- * \n 1 : Dynamic rate control mode change supported.
- */
- NV_ENC_CAPS_SUPPORT_DYN_RCMODE_CHANGE,
- /**
- * Indicates Subframe readback support for slice-based encoding.
- * \n 0 : Subframe readback not supported.
- * \n 1 : Subframe readback supported.
- */
- NV_ENC_CAPS_SUPPORT_SUBFRAME_READBACK,
- /**
- * Indicates Constrained Encoding mode support.
- * Support added from NvEncodeAPI version 2.0.
- * \n 0 : Constrained encoding mode not supported.
- * \n 1 : Constarined encoding mode supported.
- * If this mode is supported client can enable this during initialisation.
- * Client can then force a picture to be coded as constrained picture where
- * each slice in a constrained picture will have constrained_intra_pred_flag set to 1
- * and disable_deblocking_filter_idc will be set to 2 and prediction vectors for inter
- * macroblocks in each slice will be restricted to the slice region.
- */
- NV_ENC_CAPS_SUPPORT_CONSTRAINED_ENCODING,
- /**
- * Indicates Intra Refresh Mode Support.
- * Support added from NvEncodeAPI version 2.0.
- * \n 0 : Intra Refresh Mode not supported.
- * \n 1 : Intra Refresh Mode supported.
- */
- NV_ENC_CAPS_SUPPORT_INTRA_REFRESH,
- /**
- * Indicates Custom VBV Bufer Size support. It can be used for capping frame size.
- * Support added from NvEncodeAPI version 2.0.
- * \n 0 : Custom VBV buffer size specification from client, not supported.
- * \n 1 : Custom VBV buffer size specification from client, supported.
- */
- NV_ENC_CAPS_SUPPORT_CUSTOM_VBV_BUF_SIZE,
- /**
- * Indicates Dynamic Slice Mode Support.
- * Support added from NvEncodeAPI version 2.0.
- * \n 0 : Dynamic Slice Mode not supported.
- * \n 1 : Dynamic Slice Mode supported.
- */
- NV_ENC_CAPS_SUPPORT_DYNAMIC_SLICE_MODE,
- /**
- * Indicates Reference Picture Invalidation Support.
- * Support added from NvEncodeAPI version 2.0.
- * \n 0 : Reference Picture Invalidation not supported.
- * \n 1 : Reference Picture Invalidation supported.
- */
- NV_ENC_CAPS_SUPPORT_REF_PIC_INVALIDATION,
- /**
- * Indicates support for PreProcessing.
- * The API return value is a bitmask of the values defined in ::NV_ENC_PREPROC_FLAGS
- */
- NV_ENC_CAPS_PREPROC_SUPPORT,
- /**
- * Indicates support Async mode.
- * \n 0 : Async Encode mode not supported.
- * \n 1 : Async Encode mode supported.
- */
- NV_ENC_CAPS_ASYNC_ENCODE_SUPPORT,
- /**
- * Maximum MBs per frame supported.
- */
- NV_ENC_CAPS_MB_NUM_MAX,
- /**
- * Maximum aggregate throughput in MBs per sec.
- */
- NV_ENC_CAPS_MB_PER_SEC_MAX,
- /**
- * Indicates HW support for YUV444 mode encoding.
- * \n 0 : YUV444 mode encoding not supported.
- * \n 1 : YUV444 mode encoding supported.
- */
- NV_ENC_CAPS_SUPPORT_YUV444_ENCODE,
- /**
- * Indicates HW support for lossless encoding.
- * \n 0 : lossless encoding not supported.
- * \n 1 : lossless encoding supported.
- */
- NV_ENC_CAPS_SUPPORT_LOSSLESS_ENCODE,
- /**
- * Indicates HW support for Sample Adaptive Offset.
- * \n 0 : SAO not supported.
- * \n 1 : SAO encoding supported.
- */
- NV_ENC_CAPS_SUPPORT_SAO,
- /**
- * Indicates HW support for MEOnly Mode.
- * \n 0 : MEOnly Mode not supported.
- * \n 1 : MEOnly Mode supported for I and P frames.
- * \n 2 : MEOnly Mode supported for I, P and B frames.
- */
- NV_ENC_CAPS_SUPPORT_MEONLY_MODE,
- /**
- * Indicates HW support for lookahead encoding (enableLookahead=1).
- * \n 0 : Lookahead not supported.
- * \n 1 : Lookahead supported.
- */
- NV_ENC_CAPS_SUPPORT_LOOKAHEAD,
- /**
- * Indicates HW support for temporal AQ encoding (enableTemporalAQ=1).
- * \n 0 : Temporal AQ not supported.
- * \n 1 : Temporal AQ supported.
- */
- NV_ENC_CAPS_SUPPORT_TEMPORAL_AQ,
- /**
- * Indicates HW support for 10 bit encoding.
- * \n 0 : 10 bit encoding not supported.
- * \n 1 : 10 bit encoding supported.
- */
- NV_ENC_CAPS_SUPPORT_10BIT_ENCODE,
- /**
- * Maximum number of Long Term Reference frames supported
- */
- NV_ENC_CAPS_NUM_MAX_LTR_FRAMES,
- /**
- * Indicates HW support for Weighted Predicition.
- * \n 0 : Weighted Predicition not supported.
- * \n 1 : Weighted Predicition supported.
- */
- NV_ENC_CAPS_SUPPORT_WEIGHTED_PREDICTION,
- /**
- * On managed (vGPU) platforms (Windows only), this API, in conjunction with other GRID Management APIs, can be used
- * to estimate the residual capacity of the hardware encoder on the GPU as a percentage of the total available encoder capacity.
- * This API can be called at any time; i.e. during the encode session or before opening the encode session.
- * If the available encoder capacity is returned as zero, applications may choose to switch to software encoding
- * and continue to call this API (e.g. polling once per second) until capacity becomes available.
- *
- * On baremetal (non-virtualized GPU) and linux platforms, this API always returns 100.
- */
- NV_ENC_CAPS_DYNAMIC_QUERY_ENCODER_CAPACITY,
- /**
- * Indicates B as refererence support.
- * \n 0 : B as reference is not supported.
- * \n 1 : each B-Frame as reference is supported.
- * \n 2 : only Middle B-frame as reference is supported.
- */
- NV_ENC_CAPS_SUPPORT_BFRAME_REF_MODE,
- /**
- * Indicates HW support for Emphasis Level Map based delta QP computation.
- * \n 0 : Emphasis Level Map based delta QP not supported.
- * \n 1 : Emphasis Level Map based delta QP is supported.
- */
- NV_ENC_CAPS_SUPPORT_EMPHASIS_LEVEL_MAP,
- /**
- * Reserved - Not to be used by clients.
- */
- NV_ENC_CAPS_EXPOSED_COUNT
- } NV_ENC_CAPS;
- /**
- * HEVC CU SIZE
- */
- typedef enum _NV_ENC_HEVC_CUSIZE
- {
- NV_ENC_HEVC_CUSIZE_AUTOSELECT = 0,
- NV_ENC_HEVC_CUSIZE_8x8 = 1,
- NV_ENC_HEVC_CUSIZE_16x16 = 2,
- NV_ENC_HEVC_CUSIZE_32x32 = 3,
- NV_ENC_HEVC_CUSIZE_64x64 = 4,
- }NV_ENC_HEVC_CUSIZE;
- /**
- * Input struct for querying Encoding capabilities.
- */
- typedef struct _NV_ENC_CAPS_PARAM
- {
- uint32_t version; /**< [in]: Struct version. Must be set to ::NV_ENC_CAPS_PARAM_VER */
- NV_ENC_CAPS capsToQuery; /**< [in]: Specifies the encode capability to be queried. Client should pass a member for ::NV_ENC_CAPS enum. */
- uint32_t reserved[62]; /**< [in]: Reserved and must be set to 0 */
- } NV_ENC_CAPS_PARAM;
- /** NV_ENC_CAPS_PARAM struct version. */
- #define NV_ENC_CAPS_PARAM_VER NVENCAPI_STRUCT_VERSION(1)
- /**
- * Creation parameters for input buffer.
- */
- typedef struct _NV_ENC_CREATE_INPUT_BUFFER
- {
- uint32_t version; /**< [in]: Struct version. Must be set to ::NV_ENC_CREATE_INPUT_BUFFER_VER */
- uint32_t width; /**< [in]: Input buffer width */
- uint32_t height; /**< [in]: Input buffer width */
- NV_ENC_MEMORY_HEAP memoryHeap; /**< [in]: Deprecated. Do not use */
- NV_ENC_BUFFER_FORMAT bufferFmt; /**< [in]: Input buffer format */
- uint32_t reserved; /**< [in]: Reserved and must be set to 0 */
- NV_ENC_INPUT_PTR inputBuffer; /**< [out]: Pointer to input buffer */
- void* pSysMemBuffer; /**< [in]: Pointer to existing sysmem buffer */
- uint32_t reserved1[57]; /**< [in]: Reserved and must be set to 0 */
- void* reserved2[63]; /**< [in]: Reserved and must be set to NULL */
- } NV_ENC_CREATE_INPUT_BUFFER;
- /** NV_ENC_CREATE_INPUT_BUFFER struct version. */
- #define NV_ENC_CREATE_INPUT_BUFFER_VER NVENCAPI_STRUCT_VERSION(1)
- /**
- * Creation parameters for output bitstream buffer.
- */
- typedef struct _NV_ENC_CREATE_BITSTREAM_BUFFER
- {
- uint32_t version; /**< [in]: Struct version. Must be set to ::NV_ENC_CREATE_BITSTREAM_BUFFER_VER */
- uint32_t size; /**< [in]: Deprecated. Do not use */
- NV_ENC_MEMORY_HEAP memoryHeap; /**< [in]: Deprecated. Do not use */
- uint32_t reserved; /**< [in]: Reserved and must be set to 0 */
- NV_ENC_OUTPUT_PTR bitstreamBuffer; /**< [out]: Pointer to the output bitstream buffer */
- void* bitstreamBufferPtr; /**< [out]: Reserved and should not be used */
- uint32_t reserved1[58]; /**< [in]: Reserved and should be set to 0 */
- void* reserved2[64]; /**< [in]: Reserved and should be set to NULL */
- } NV_ENC_CREATE_BITSTREAM_BUFFER;
- /** NV_ENC_CREATE_BITSTREAM_BUFFER struct version. */
- #define NV_ENC_CREATE_BITSTREAM_BUFFER_VER NVENCAPI_STRUCT_VERSION(1)
- /**
- * Structs needed for ME only mode.
- */
- typedef struct _NV_ENC_MVECTOR
- {
- int16_t mvx; /**< the x component of MV in qpel units */
- int16_t mvy; /**< the y component of MV in qpel units */
- } NV_ENC_MVECTOR;
- /**
- * Motion vector structure per macroblock for H264 motion estimation.
- */
- typedef struct _NV_ENC_H264_MV_DATA
- {
- NV_ENC_MVECTOR mv[4]; /**< up to 4 vectors for 8x8 partition */
- uint8_t mbType; /**< 0 (I), 1 (P), 2 (IPCM), 3 (B) */
- uint8_t partitionType; /**< Specifies the block partition type. 0:16x16, 1:8x8, 2:16x8, 3:8x16 */
- uint16_t reserved; /**< reserved padding for alignment */
- uint32_t mbCost;
- } NV_ENC_H264_MV_DATA;
- /**
- * Motion vector structure per CU for HEVC motion estimation.
- */
- typedef struct _NV_ENC_HEVC_MV_DATA
- {
- NV_ENC_MVECTOR mv[4]; /**< up to 4 vectors within a CU */
- uint8_t cuType; /**< 0 (I), 1(P), 2 (Skip) */
- uint8_t cuSize; /**< 0: 8x8, 1: 16x16, 2: 32x32, 3: 64x64 */
- uint8_t partitionMode; /**< The CU partition mode
- 0 (2Nx2N), 1 (2NxN), 2(Nx2N), 3 (NxN),
- 4 (2NxnU), 5 (2NxnD), 6(nLx2N), 7 (nRx2N) */
- uint8_t lastCUInCTB; /**< Marker to separate CUs in the current CTB from CUs in the next CTB */
- } NV_ENC_HEVC_MV_DATA;
- /**
- * Creation parameters for output motion vector buffer for ME only mode.
- */
- typedef struct _NV_ENC_CREATE_MV_BUFFER
- {
- uint32_t version; /**< [in]: Struct version. Must be set to NV_ENC_CREATE_MV_BUFFER_VER */
- NV_ENC_OUTPUT_PTR mvBuffer; /**< [out]: Pointer to the output motion vector buffer */
- uint32_t reserved1[255]; /**< [in]: Reserved and should be set to 0 */
- void* reserved2[63]; /**< [in]: Reserved and should be set to NULL */
- } NV_ENC_CREATE_MV_BUFFER;
- /** NV_ENC_CREATE_MV_BUFFER struct version*/
- #define NV_ENC_CREATE_MV_BUFFER_VER NVENCAPI_STRUCT_VERSION(1)
- /**
- * QP value for frames
- */
- typedef struct _NV_ENC_QP
- {
- uint32_t qpInterP;
- uint32_t qpInterB;
- uint32_t qpIntra;
- } NV_ENC_QP;
- /**
- * Rate Control Configuration Paramters
- */
- typedef struct _NV_ENC_RC_PARAMS
- {
- uint32_t version;
- NV_ENC_PARAMS_RC_MODE rateControlMode; /**< [in]: Specifies the rate control mode. Check support for various rate control modes using ::NV_ENC_CAPS_SUPPORTED_RATECONTROL_MODES caps. */
- NV_ENC_QP constQP; /**< [in]: Specifies the initial QP to be used for encoding, these values would be used for all frames if in Constant QP mode. */
- uint32_t averageBitRate; /**< [in]: Specifies the average bitrate(in bits/sec) used for encoding. */
- uint32_t maxBitRate; /**< [in]: Specifies the maximum bitrate for the encoded output. This is used for VBR and ignored for CBR mode. */
- uint32_t vbvBufferSize; /**< [in]: Specifies the VBV(HRD) buffer size. in bits. Set 0 to use the default VBV buffer size. */
- uint32_t vbvInitialDelay; /**< [in]: Specifies the VBV(HRD) initial delay in bits. Set 0 to use the default VBV initial delay .*/
- uint32_t enableMinQP :1; /**< [in]: Set this to 1 if minimum QP used for rate control. */
- uint32_t enableMaxQP :1; /**< [in]: Set this to 1 if maximum QP used for rate control. */
- uint32_t enableInitialRCQP :1; /**< [in]: Set this to 1 if user suppplied initial QP is used for rate control. */
- uint32_t enableAQ :1; /**< [in]: Set this to 1 to enable adaptive quantization (Spatial). */
- uint32_t reservedBitField1 :1; /**< [in]: Reserved bitfields and must be set to 0. */
- uint32_t enableLookahead :1; /**< [in]: Set this to 1 to enable lookahead with depth <lookaheadDepth> (if lookahead is enabled, input frames must remain available to the encoder until encode completion) */
- uint32_t disableIadapt :1; /**< [in]: Set this to 1 to disable adaptive I-frame insertion at scene cuts (only has an effect when lookahead is enabled) */
- uint32_t disableBadapt :1; /**< [in]: Set this to 1 to disable adaptive B-frame decision (only has an effect when lookahead is enabled) */
- uint32_t enableTemporalAQ :1; /**< [in]: Set this to 1 to enable temporal AQ for H.264 */
- uint32_t zeroReorderDelay :1; /**< [in]: Set this to 1 to indicate zero latency operation (no reordering delay, num_reorder_frames=0) */
- uint32_t enableNonRefP :1; /**< [in]: Set this to 1 to enable automatic insertion of non-reference P-frames (no effect if enablePTD=0) */
- uint32_t strictGOPTarget :1; /**< [in]: Set this to 1 to minimize GOP-to-GOP rate fluctuations */
- uint32_t aqStrength :4; /**< [in]: When AQ (Spatial) is enabled (i.e. NV_ENC_RC_PARAMS::enableAQ is set), this field is used to specify AQ strength. AQ strength scale is from 1 (low) - 15 (aggressive). If not set, strength is autoselected by driver. */
- uint32_t reservedBitFields :16; /**< [in]: Reserved bitfields and must be set to 0 */
- NV_ENC_QP minQP; /**< [in]: Specifies the minimum QP used for rate control. Client must set NV_ENC_CONFIG::enableMinQP to 1. */
- NV_ENC_QP maxQP; /**< [in]: Specifies the maximum QP used for rate control. Client must set NV_ENC_CONFIG::enableMaxQP to 1. */
- NV_ENC_QP initialRCQP; /**< [in]: Specifies the initial QP used for rate control. Client must set NV_ENC_CONFIG::enableInitialRCQP to 1. */
- uint32_t temporallayerIdxMask; /**< [in]: Specifies the temporal layers (as a bitmask) whose QPs have changed. Valid max bitmask is [2^NV_ENC_CAPS_NUM_MAX_TEMPORAL_LAYERS - 1] */
- uint8_t temporalLayerQP[8]; /**< [in]: Specifies the temporal layer QPs used for rate control. Temporal layer index is used as as the array index */
- uint8_t targetQuality; /**< [in]: Target CQ (Constant Quality) level for VBR mode (range 0-51 with 0-automatic) */
- uint8_t targetQualityLSB; /**< [in]: Fractional part of target quality (as 8.8 fixed point format) */
- uint16_t lookaheadDepth; /**< [in]: Maximum depth of lookahead with range 0-32 (only used if enableLookahead=1) */
- uint32_t reserved1;
- NV_ENC_QP_MAP_MODE qpMapMode; /**< [in]: This flag is used to interpret values in array pecified by NV_ENC_PIC_PARAMS::qpDeltaMap.
- Set this to NV_ENC_QP_MAP_EMPHASIS to treat values specified by NV_ENC_PIC_PARAMS::qpDeltaMap as Emphasis level Map.
- Emphasis Level can be assigned any value specified in enum NV_ENC_EMPHASIS_MAP_LEVEL.
- Emphasis Level Map is used to specify regions to be encoded at varying levels of quality.
- The hardware encoder adjusts the quantization within the image as per the provided emphasis map,
- by adjusting the quantization parameter (QP) assigned to each macroblock. This adjustment is commonly called “Delta QP”.
- The adjustment depends on the absolute QP decided by the rate control algorithm, and is applied after the rate control has decided each macroblock’s QP.
- Since the Delta QP overrides rate control, enabling emphasis level map may violate bitrate and VBV buffersize constraints.
- Emphasis level map is useful in situations when client has a priori knowledge of the image complexity (e.g. via use of NVFBC's Classification feature) and encoding those high-complexity areas at higher quality (lower QP) is important, even at the possible cost of violating bitrate/VBV buffersize constraints
- This feature is not supported when AQ( Spatial/Temporal) is enabled.
- This feature is only supported for H264 codec currently.
- Set this to NV_ENC_QP_MAP_DELTA to treat values specified by NV_ENC_PIC_PARAMS::qpDeltaMap as QPDelta. This specify QP modifier to be applied on top of the QP chosen by rate control
- Set this to NV_ENC_QP_MAP_DISABLED to ignore NV_ENC_PIC_PARAMS::qpDeltaMap values. In this case, qpDeltaMap should be set to NULL.
- Other values are reserved for future use.*/
- uint32_t reserved[7];
- } NV_ENC_RC_PARAMS;
- /** macro for constructing the version field of ::_NV_ENC_RC_PARAMS */
- #define NV_ENC_RC_PARAMS_VER NVENCAPI_STRUCT_VERSION(1)
- /**
- * \struct _NV_ENC_CONFIG_H264_VUI_PARAMETERS
- * H264 Video Usability Info parameters
- */
- typedef struct _NV_ENC_CONFIG_H264_VUI_PARAMETERS
- {
- uint32_t overscanInfoPresentFlag; /**< [in]: if set to 1 , it specifies that the overscanInfo is present */
- uint32_t overscanInfo; /**< [in]: Specifies the overscan info(as defined in Annex E of the ITU-T Specification). */
- uint32_t videoSignalTypePresentFlag; /**< [in]: If set to 1, it specifies that the videoFormat, videoFullRangeFlag and colourDescriptionPresentFlag are present. */
- uint32_t videoFormat; /**< [in]: Specifies the source video format(as defined in Annex E of the ITU-T Specification).*/
- uint32_t videoFullRangeFlag; /**< [in]: Specifies the output range of the luma and chroma samples(as defined in Annex E of the ITU-T Specification). */
- uint32_t colourDescriptionPresentFlag; /**< [in]: If set to 1, it specifies that the colourPrimaries, transferCharacteristics and colourMatrix are present. */
- uint32_t colourPrimaries; /**< [in]: Specifies color primaries for converting to RGB(as defined in Annex E of the ITU-T Specification) */
- uint32_t transferCharacteristics; /**< [in]: Specifies the opto-electronic transfer characteristics to use (as defined in Annex E of the ITU-T Specification) */
- uint32_t colourMatrix; /**< [in]: Specifies the matrix coefficients used in deriving the luma and chroma from the RGB primaries (as defined in Annex E of the ITU-T Specification). */
- uint32_t chromaSampleLocationFlag; /**< [in]: if set to 1 , it specifies that the chromaSampleLocationTop and chromaSampleLocationBot are present.*/
- uint32_t chromaSampleLocationTop; /**< [in]: Specifies the chroma sample location for top field(as defined in Annex E of the ITU-T Specification) */
- uint32_t chromaSampleLocationBot; /**< [in]: Specifies the chroma sample location for bottom field(as defined in Annex E of the ITU-T Specification) */
- uint32_t bitstreamRestrictionFlag; /**< [in]: if set to 1, it specifies the bitstream restriction parameters are present in the bitstream.*/
- uint32_t reserved[15];
- }NV_ENC_CONFIG_H264_VUI_PARAMETERS;
- typedef NV_ENC_CONFIG_H264_VUI_PARAMETERS NV_ENC_CONFIG_HEVC_VUI_PARAMETERS;
- /**
- * \struct _NVENC_EXTERNAL_ME_HINT_COUNTS_PER_BLOCKTYPE
- * External motion vector hint counts per block type.
- * H264 supports multiple hint while HEVC supports one hint for each valid candidate.
- */
- typedef struct _NVENC_EXTERNAL_ME_HINT_COUNTS_PER_BLOCKTYPE
- {
- uint32_t numCandsPerBlk16x16 : 4; /**< [in]: Supported for H264,HEVC.It Specifies the number of candidates per 16x16 block. */
- uint32_t numCandsPerBlk16x8 : 4; /**< [in]: Supported for H264 only.Specifies the number of candidates per 16x8 block. */
- uint32_t numCandsPerBlk8x16 : 4; /**< [in]: Supported for H264 only.Specifies the number of candidates per 8x16 block. */
- uint32_t numCandsPerBlk8x8 : 4; /**< [in]: Supported for H264,HEVC.Specifies the number of candidates per 8x8 block. */
- uint32_t reserved : 16; /**< [in]: Reserved for padding. */
- uint32_t reserved1[3]; /**< [in]: Reserved for future use. */
- } NVENC_EXTERNAL_ME_HINT_COUNTS_PER_BLOCKTYPE;
- /**
- * \struct _NVENC_EXTERNAL_ME_HINT
- * External Motion Vector hint structure.
- */
- typedef struct _NVENC_EXTERNAL_ME_HINT
- {
- int32_t mvx : 12; /**< [in]: Specifies the x component of integer pixel MV (relative to current MB) S12.0. */
- int32_t mvy : 10; /**< [in]: Specifies the y component of integer pixel MV (relative to current MB) S10.0 .*/
- int32_t refidx : 5; /**< [in]: Specifies the reference index (31=invalid). Current we support only 1 reference frame per direction for external hints, so \p refidx must be 0. */
- int32_t dir : 1; /**< [in]: Specifies the direction of motion estimation . 0=L0 1=L1.*/
- int32_t partType : 2; /**< [in]: Specifies the block partition type.0=16x16 1=16x8 2=8x16 3=8x8 (blocks in partition must be consecutive).*/
- int32_t lastofPart : 1; /**< [in]: Set to 1 for the last MV of (sub) partition */
- int32_t lastOfMB : 1; /**< [in]: Set to 1 for the last MV of macroblock. */
- } NVENC_EXTERNAL_ME_HINT;
- /**
- * \struct _NV_ENC_CONFIG_H264
- * H264 encoder configuration parameters
- */
- typedef struct _NV_ENC_CONFIG_H264
- {
- uint32_t enableTemporalSVC :1; /**< [in]: Set to 1 to enable SVC temporal*/
- uint32_t enableStereoMVC :1; /**< [in]: Set to 1 to enable stereo MVC*/
- uint32_t hierarchicalPFrames :1; /**< [in]: Set to 1 to enable hierarchical PFrames */
- uint32_t hierarchicalBFrames :1; /**< [in]: Set to 1 to enable hierarchical BFrames */
- uint32_t outputBufferingPeriodSEI :1; /**< [in]: Set to 1 to write SEI buffering period syntax in the bitstream */
- uint32_t outputPictureTimingSEI :1; /**< [in]: Set to 1 to write SEI picture timing syntax in the bitstream. When set for following rateControlMode : NV_ENC_PARAMS_RC_CBR, NV_ENC_PARAMS_RC_CBR_LOWDELAY_HQ,
- NV_ENC_PARAMS_RC_CBR_HQ, filler data is inserted if needed to achieve hrd bitrate */
- uint32_t outputAUD :1; /**< [in]: Set to 1 to write access unit delimiter syntax in bitstream */
- uint32_t disableSPSPPS :1; /**< [in]: Set to 1 to disable writing of Sequence and Picture parameter info in bitstream */
- uint32_t outputFramePackingSEI :1; /**< [in]: Set to 1 to enable writing of frame packing arrangement SEI messages to bitstream */
- uint32_t outputRecoveryPointSEI :1; /**< [in]: Set to 1 to enable writing of recovery point SEI message */
- uint32_t enableIntraRefresh :1; /**< [in]: Set to 1 to enable gradual decoder refresh or intra refresh. If the GOP structure uses B frames this will be ignored */
- uint32_t enableConstrainedEncoding :1; /**< [in]: Set this to 1 to enable constrainedFrame encoding where each slice in the constarined picture is independent of other slices
- Check support for constrained encoding using ::NV_ENC_CAPS_SUPPORT_CONSTRAINED_ENCODING caps. */
- uint32_t repeatSPSPPS :1; /**< [in]: Set to 1 to enable writing of Sequence and Picture parameter for every IDR frame */
- uint32_t enableVFR :1; /**< [in]: Set to 1 to enable variable frame rate. */
- uint32_t enableLTR :1; /**< [in]: Set to 1 to enable LTR (Long Term Reference) frame support. LTR can be used in two modes: "LTR Trust" mode and "LTR Per Picture" mode.
- LTR Trust mode: In this mode, ltrNumFrames pictures after IDR are automatically marked as LTR. This mode is enabled by setting ltrTrustMode = 1.
- Use of LTR Trust mode is strongly discouraged as this mode may be deprecated in future.
- LTR Per Picture mode: In this mode, client can control whether the current picture should be marked as LTR. Enable this mode by setting
- ltrTrustMode = 0 and ltrMarkFrame = 1 for the picture to be marked as LTR. This is the preferred mode
- for using LTR.
- Note that LTRs are not supported if encoding session is configured with B-frames */
- uint32_t qpPrimeYZeroTransformBypassFlag :1; /**< [in]: To enable lossless encode set this to 1, set QP to 0 and RC_mode to NV_ENC_PARAMS_RC_CONSTQP and profile to HIGH_444_PREDICTIVE_PROFILE.
- Check support for lossless encoding using ::NV_ENC_CAPS_SUPPORT_LOSSLESS_ENCODE caps. */
- uint32_t useConstrainedIntraPred :1; /**< [in]: Set 1 to enable constrained intra prediction. */
- uint32_t reservedBitFields :15; /**< [in]: Reserved bitfields and must be set to 0 */
- uint32_t level; /**< [in]: Specifies the encoding level. Client is recommended to set this to NV_ENC_LEVEL_AUTOSELECT in order to enable the NvEncodeAPI interface to select the correct level. */
- uint32_t idrPeriod; /**< [in]: Specifies the IDR interval. If not set, this is made equal to gopLength in NV_ENC_CONFIG.Low latency application client can set IDR interval to NVENC_INFINITE_GOPLENGTH so that IDR frames are not inserted automatically. */
- uint32_t separateColourPlaneFlag; /**< [in]: Set to 1 to enable 4:4:4 separate colour planes */
- uint32_t disableDeblockingFilterIDC; /**< [in]: Specifies the deblocking filter mode. Permissible value range: [0,2] */
- uint32_t numTemporalLayers; /**< [in]: Specifies max temporal layers to be used for hierarchical coding. Valid value range is [1,::NV_ENC_CAPS_NUM_MAX_TEMPORAL_LAYERS] */
- uint32_t spsId; /**< [in]: Specifies the SPS id of the sequence header */
- uint32_t ppsId; /**< [in]: Specifies the PPS id of the picture header */
- NV_ENC_H264_ADAPTIVE_TRANSFORM_MODE adaptiveTransformMode; /**< [in]: Specifies the AdaptiveTransform Mode. Check support for AdaptiveTransform mode using ::NV_ENC_CAPS_SUPPORT_ADAPTIVE_TRANSFORM caps. */
- NV_ENC_H264_FMO_MODE fmoMode; /**< [in]: Specified the FMO Mode. Check support for FMO using ::NV_ENC_CAPS_SUPPORT_FMO caps. */
- NV_ENC_H264_BDIRECT_MODE bdirectMode; /**< [in]: Specifies the BDirect mode. Check support for BDirect mode using ::NV_ENC_CAPS_SUPPORT_BDIRECT_MODE caps.*/
- NV_ENC_H264_ENTROPY_CODING_MODE entropyCodingMode; /**< [in]: Specifies the entropy coding mode. Check support for CABAC mode using ::NV_ENC_CAPS_SUPPORT_CABAC caps. */
- NV_ENC_STEREO_PACKING_MODE stereoMode; /**< [in]: Specifies the stereo frame packing mode which is to be signalled in frame packing arrangement SEI */
- uint32_t intraRefreshPeriod; /**< [in]: Specifies the interval between successive intra refresh if enableIntrarefresh is set. Requires enableIntraRefresh to be set.
- Will be disabled if NV_ENC_CONFIG::gopLength is not set to NVENC_INFINITE_GOPLENGTH. */
- uint32_t intraRefreshCnt; /**< [in]: Specifies the length of intra refresh in number of frames for periodic intra refresh. This value should be smaller than intraRefreshPeriod */
- uint32_t maxNumRefFrames; /**< [in]: Specifies the DPB size used for encoding. Setting it to 0 will let driver use the default dpb size.
- The low latency application which wants to invalidate reference frame as an error resilience tool
- is recommended to use a large DPB size so that the encoder can keep old reference frames which can be used if recent
- frames are invalidated. */
- uint32_t sliceMode; /**< [in]: This parameter in conjunction with sliceModeData specifies the way in which the picture is divided into slices
- sliceMode = 0 MB based slices, sliceMode = 1 Byte based slices, sliceMode = 2 MB row based slices, sliceMode = 3 numSlices in Picture.
- When forceIntraRefreshWithFrameCnt is set it will have priority over sliceMode setting
- When sliceMode == 0 and sliceModeData == 0 whole picture will be coded with one slice */
- uint32_t sliceModeData; /**< [in]: Specifies the parameter needed for sliceMode. For:
- sliceMode = 0, sliceModeData specifies # of MBs in each slice (except last slice)
- sliceMode = 1, sliceModeData specifies maximum # of bytes in each slice (except last slice)
- sliceMode = 2, sliceModeData specifies # of MB rows in each slice (except last slice)
- sliceMode = 3, sliceModeData specifies number of slices in the picture. Driver will divide picture into slices optimally */
- NV_ENC_CONFIG_H264_VUI_PARAMETERS h264VUIParameters; /**< [in]: Specifies the H264 video usability info pamameters */
- uint32_t ltrNumFrames; /**< [in]: Specifies the number of LTR frames. This parameter has different meaning in two LTR modes.
- In "LTR Trust" mode (ltrTrustMode = 1), encoder will mark the first ltrNumFrames base layer reference frames within each IDR interval as LTR.
- In "LTR Per Picture" mode (ltrTrustMode = 0 and ltrMarkFrame = 1), ltrNumFrames specifies maximum number of LTR frames in DPB. */
- uint32_t ltrTrustMode; /**< [in]: Specifies the LTR operating mode. See comments near NV_ENC_CONFIG_H264::enableLTR for description of the two modes.
- Set to 1 to use "LTR Trust" mode of LTR operation. Clients are discouraged to use "LTR Trust" mode as this mode may
- be deprecated in future releases.
- Set to 0 when using "LTR Per Picture" mode of LTR operation. */
- uint32_t chromaFormatIDC; /**< [in]: Specifies the chroma format. Should be set to 1 for yuv420 input, 3 for yuv444 input.
- Check support for YUV444 encoding using ::NV_ENC_CAPS_SUPPORT_YUV444_ENCODE caps.*/
- uint32_t maxTemporalLayers; /**< [in]: Specifies the max temporal layer used for hierarchical coding. */
- NV_ENC_BFRAME_REF_MODE useBFramesAsRef; /**< [in]: Specifies the B-Frame as reference mode. Check support for useBFramesAsRef mode using ::NV_ENC_CAPS_SUPPORT_BFRAME_REF_MODE caps.*/
- uint32_t reserved1[269]; /**< [in]: Reserved and must be set to 0 */
- void* reserved2[64]; /**< [in]: Reserved and must be set to NULL */
- } NV_ENC_CONFIG_H264;
- /**
- * \struct _NV_ENC_CONFIG_HEVC
- * HEVC encoder configuration parameters to be set during initialization.
- */
- typedef struct _NV_ENC_CONFIG_HEVC
- {
- uint32_t level; /**< [in]: Specifies the level of the encoded bitstream.*/
- uint32_t tier; /**< [in]: Specifies the level tier of the encoded bitstream.*/
- NV_ENC_HEVC_CUSIZE minCUSize; /**< [in]: Specifies the minimum size of luma coding unit.*/
- NV_ENC_HEVC_CUSIZE maxCUSize; /**< [in]: Specifies the maximum size of luma coding unit. Currently NVENC SDK only supports maxCUSize equal to NV_ENC_HEVC_CUSIZE_32x32.*/
- uint32_t useConstrainedIntraPred :1; /**< [in]: Set 1 to enable constrained intra prediction. */
- uint32_t disableDeblockAcrossSliceBoundary :1; /**< [in]: Set 1 to disable in loop filtering across slice boundary.*/
- uint32_t outputBufferingPeriodSEI :1; /**< [in]: Set 1 to write SEI buffering period syntax in the bitstream */
- uint32_t outputPictureTimingSEI :1; /**< [in]: Set 1 to write SEI picture timing syntax in the bitstream */
- uint32_t outputAUD :1; /**< [in]: Set 1 to write Access Unit Delimiter syntax. */
- uint32_t enableLTR :1; /**< [in]: Set to 1 to enable LTR (Long Term Reference) frame support. LTR can be used in two modes: "LTR Trust" mode and "LTR Per Picture" mode.
- LTR Trust mode: In this mode, ltrNumFrames pictures after IDR are automatically marked as LTR. This mode is enabled by setting ltrTrustMode = 1.
- Use of LTR Trust mode is strongly discouraged as this mode may be deprecated in future releases.
- LTR Per Picture mode: In this mode, client can control whether the current picture should be marked as LTR. Enable this mode by setting
- ltrTrustMode = 0 and ltrMarkFrame = 1 for the picture to be marked as LTR. This is the preferred mode
- for using LTR.
- Note that LTRs are not supported if encoding session is configured with B-frames */
- uint32_t disableSPSPPS :1; /**< [in]: Set 1 to disable VPS,SPS and PPS signalling in the bitstream. */
- uint32_t repeatSPSPPS :1; /**< [in]: Set 1 to output VPS,SPS and PPS for every IDR frame.*/
- uint32_t enableIntraRefresh :1; /**< [in]: Set 1 to enable gradual decoder refresh or intra refresh. If the GOP structure uses B frames this will be ignored */
- uint32_t chromaFormatIDC :2; /**< [in]: Specifies the chroma format. Should be set to 1 for yuv420 input, 3 for yuv444 input.*/
- uint32_t pixelBitDepthMinus8 :3; /**< [in]: Specifies pixel bit depth minus 8. Should be set to 0 for 8 bit input, 2 for 10 bit input.*/
- uint32_t reserved :18; /**< [in]: Reserved bitfields.*/
- uint32_t idrPeriod; /**< [in]: Specifies the IDR interval. If not set, this is made equal to gopLength in NV_ENC_CONFIG.Low latency application client can set IDR interval to NVENC_INFINITE_GOPLENGTH so that IDR frames are not inserted automatically. */
- uint32_t intraRefreshPeriod; /**< [in]: Specifies the interval between successive intra refresh if enableIntrarefresh is set. Requires enableIntraRefresh to be set.
- Will be disabled if NV_ENC_CONFIG::gopLength is not set to NVENC_INFINITE_GOPLENGTH. */
- uint32_t intraRefreshCnt; /**< [in]: Specifies the length of intra refresh in number of frames for periodic intra refresh. This value should be smaller than intraRefreshPeriod */
- uint32_t maxNumRefFramesInDPB; /**< [in]: Specifies the maximum number of references frames in the DPB.*/
- uint32_t ltrNumFrames; /**< [in]: This parameter has different meaning in two LTR modes.
- In "LTR Trust" mode (ltrTrustMode = 1), encoder will mark the first ltrNumFrames base layer reference frames within each IDR interval as LTR.
- In "LTR Per Picture" mode (ltrTrustMode = 0 and ltrMarkFrame = 1), ltrNumFrames specifies maximum number of LTR frames in DPB. */
- uint32_t vpsId; /**< [in]: Specifies the VPS id of the video parameter set */
- uint32_t spsId; /**< [in]: Specifies the SPS id of the sequence header */
- uint32_t ppsId; /**< [in]: Specifies the PPS id of the picture header */
- uint32_t sliceMode; /**< [in]: This parameter in conjunction with sliceModeData specifies the way in which the picture is divided into slices
- sliceMode = 0 CTU based slices, sliceMode = 1 Byte based slices, sliceMode = 2 CTU row based slices, sliceMode = 3, numSlices in Picture
- When sliceMode == 0 and sliceModeData == 0 whole picture will be coded with one slice */
- uint32_t sliceModeData; /**< [in]: Specifies the parameter needed for sliceMode. For:
- sliceMode = 0, sliceModeData specifies # of CTUs in each slice (except last slice)
- sliceMode = 1, sliceModeData specifies maximum # of bytes in each slice (except last slice)
- sliceMode = 2, sliceModeData specifies # of CTU rows in each slice (except last slice)
- sliceMode = 3, sliceModeData specifies number of slices in the picture. Driver will divide picture into slices optimally */
- uint32_t maxTemporalLayersMinus1; /**< [in]: Specifies the max temporal layer used for hierarchical coding. */
- NV_ENC_CONFIG_HEVC_VUI_PARAMETERS hevcVUIParameters; /**< [in]: Specifies the HEVC video usability info pamameters */
- uint32_t ltrTrustMode; /**< [in]: Specifies the LTR operating mode. See comments near NV_ENC_CONFIG_HEVC::enableLTR for description of the two modes.
- Set to 1 to use "LTR Trust" mode of LTR operation. Clients are discouraged to use "LTR Trust" mode as this mode may
- be deprecated in future releases.
- Set to 0 when using "LTR Per Picture" mode of LTR operation. */
- uint32_t reserved1[217]; /**< [in]: Reserved and must be set to 0.*/
- void* reserved2[64]; /**< [in]: Reserved and must be set to NULL */
- } NV_ENC_CONFIG_HEVC;
- /**
- * \struct _NV_ENC_CONFIG_H264_MEONLY
- * H264 encoder configuration parameters for ME only Mode
- *
- */
- typedef struct _NV_ENC_CONFIG_H264_MEONLY
- {
- uint32_t disablePartition16x16 :1; /**< [in]: Disable MotionEstimation on 16x16 blocks*/
- uint32_t disablePartition8x16 :1; /**< [in]: Disable MotionEstimation on 8x16 blocks*/
- uint32_t disablePartition16x8 :1; /**< [in]: Disable MotionEstimation on 16x8 blocks*/
- uint32_t disablePartition8x8 :1; /**< [in]: Disable MotionEstimation on 8x8 blocks*/
- uint32_t disableIntraSearch :1; /**< [in]: Disable Intra search during MotionEstimation*/
- uint32_t bStereoEnable :1; /**< [in]: Enable Stereo Mode for Motion Estimation where each view is independently executed*/
- uint32_t reserved :26; /**< [in]: Reserved and must be set to 0 */
- uint32_t reserved1 [255]; /**< [in]: Reserved and must be set to 0 */
- void* reserved2[64]; /**< [in]: Reserved and must be set to NULL */
- } NV_ENC_CONFIG_H264_MEONLY;
- /**
- * \struct _NV_ENC_CONFIG_HEVC_MEONLY
- * HEVC encoder configuration parameters for ME only Mode
- *
- */
- typedef struct _NV_ENC_CONFIG_HEVC_MEONLY
- {
- uint32_t reserved [256]; /**< [in]: Reserved and must be set to 0 */
- void* reserved1[64]; /**< [in]: Reserved and must be set to NULL */
- } NV_ENC_CONFIG_HEVC_MEONLY;
- /**
- * \struct _NV_ENC_CODEC_CONFIG
- * Codec-specific encoder configuration parameters to be set during initialization.
- */
- typedef union _NV_ENC_CODEC_CONFIG
- {
- NV_ENC_CONFIG_H264 h264Config; /**< [in]: Specifies the H.264-specific encoder configuration. */
- NV_ENC_CONFIG_HEVC hevcConfig; /**< [in]: Specifies the HEVC-specific encoder configuration. */
- NV_ENC_CONFIG_H264_MEONLY h264MeOnlyConfig; /**< [in]: Specifies the H.264-specific ME only encoder configuration. */
- NV_ENC_CONFIG_HEVC_MEONLY hevcMeOnlyConfig; /**< [in]: Specifies the HEVC-specific ME only encoder configuration. */
- uint32_t reserved[320]; /**< [in]: Reserved and must be set to 0 */
- } NV_ENC_CODEC_CONFIG;
- /**
- * \struct _NV_ENC_CONFIG
- * Encoder configuration parameters to be set during initialization.
- */
- typedef struct _NV_ENC_CONFIG
- {
- uint32_t version; /**< [in]: Struct version. Must be set to ::NV_ENC_CONFIG_VER. */
- GUID profileGUID; /**< [in]: Specifies the codec profile guid. If client specifies \p NV_ENC_CODEC_PROFILE_AUTOSELECT_GUID the NvEncodeAPI interface will select the appropriate codec profile. */
- uint32_t gopLength; /**< [in]: Specifies the number of pictures in one GOP. Low latency application client can set goplength to NVENC_INFINITE_GOPLENGTH so that keyframes are not inserted automatically. */
- int32_t frameIntervalP; /**< [in]: Specifies the GOP pattern as follows: \p frameIntervalP = 0: I, 1: IPP, 2: IBP, 3: IBBP If goplength is set to NVENC_INFINITE_GOPLENGTH \p frameIntervalP should be set to 1. */
- uint32_t monoChromeEncoding; /**< [in]: Set this to 1 to enable monochrome encoding for this session. */
- NV_ENC_PARAMS_FRAME_FIELD_MODE frameFieldMode; /**< [in]: Specifies the frame/field mode.
- Check support for field encoding using ::NV_ENC_CAPS_SUPPORT_FIELD_ENCODING caps.
- Using a frameFieldMode other than NV_ENC_PARAMS_FRAME_FIELD_MODE_FRAME for RGB input is not supported. */
- NV_ENC_MV_PRECISION mvPrecision; /**< [in]: Specifies the desired motion vector prediction precision. */
- NV_ENC_RC_PARAMS rcParams; /**< [in]: Specifies the rate control parameters for the current encoding session. */
- NV_ENC_CODEC_CONFIG encodeCodecConfig; /**< [in]: Specifies the codec specific config parameters through this union. */
- uint32_t reserved [278]; /**< [in]: Reserved and must be set to 0 */
- void* reserved2[64]; /**< [in]: Reserved and must be set to NULL */
- } NV_ENC_CONFIG;
- /** macro for constructing the version field of ::_NV_ENC_CONFIG */
- #define NV_ENC_CONFIG_VER (NVENCAPI_STRUCT_VERSION(7) | ( 1<<31 ))
- /**
- * \struct _NV_ENC_INITIALIZE_PARAMS
- * Encode Session Initialization parameters.
- */
- typedef struct _NV_ENC_INITIALIZE_PARAMS
- {
- uint32_t version; /**< [in]: Struct version. Must be set to ::NV_ENC_INITIALIZE_PARAMS_VER. */
- GUID encodeGUID; /**< [in]: Specifies the Encode GUID for which the encoder is being created. ::NvEncInitializeEncoder() API will fail if this is not set, or set to unsupported value. */
- GUID presetGUID; /**< [in]: Specifies the preset for encoding. If the preset GUID is set then , the preset configuration will be applied before any other parameter. */
- uint32_t encodeWidth; /**< [in]: Specifies the encode width. If not set ::NvEncInitializeEncoder() API will fail. */
- uint32_t encodeHeight; /**< [in]: Specifies the encode height. If not set ::NvEncInitializeEncoder() API will fail. */
- uint32_t darWidth; /**< [in]: Specifies the display aspect ratio Width. */
- uint32_t darHeight; /**< [in]: Specifies the display aspect ratio height. */
- uint32_t frameRateNum; /**< [in]: Specifies the numerator for frame rate used for encoding in frames per second ( Frame rate = frameRateNum / frameRateDen ). */
- uint32_t frameRateDen; /**< [in]: Specifies the denominator for frame rate used for encoding in frames per second ( Frame rate = frameRateNum / frameRateDen ). */
- uint32_t enableEncodeAsync; /**< [in]: Set this to 1 to enable asynchronous mode and is expected to use events to get picture completion notification. */
- uint32_t enablePTD; /**< [in]: Set this to 1 to enable the Picture Type Decision is be taken by the NvEncodeAPI interface. */
- uint32_t reportSliceOffsets :1; /**< [in]: Set this to 1 to enable reporting slice offsets in ::_NV_ENC_LOCK_BITSTREAM. NV_ENC_INITIALIZE_PARAMS::enableEncodeAsync must be set to 0 to use this feature. Client must set this to 0 if NV_ENC_CONFIG_H264::sliceMode is 1 on Kepler GPUs */
- uint32_t enableSubFrameWrite :1; /**< [in]: Set this to 1 to write out available bitstream to memory at subframe intervals */
- uint32_t enableExternalMEHints :1; /**< [in]: Set to 1 to enable external ME hints for the current frame. For NV_ENC_INITIALIZE_PARAMS::enablePTD=1 with B frames, programming L1 hints is optional for B frames since Client doesn't know internal GOP structure.
- NV_ENC_PIC_PARAMS::meHintRefPicDist should preferably be set with enablePTD=1. */
- uint32_t enableMEOnlyMode :1; /**< [in]: Set to 1 to enable ME Only Mode .*/
- uint32_t enableWeightedPrediction :1; /**< [in]: Set this to 1 to enable weighted prediction. Not supported if encode session is configured for B-Frames( 'frameIntervalP' in NV_ENC_CONFIG is greater than 1).*/
- uint32_t reservedBitFields :27; /**< [in]: Reserved bitfields and must be set to 0 */
- uint32_t privDataSize; /**< [in]: Reserved private data buffer size and must be set to 0 */
- void* privData; /**< [in]: Reserved private data buffer and must be set to NULL */
- NV_ENC_CONFIG* encodeConfig; /**< [in]: Specifies the advanced codec specific structure. If client has sent a valid codec config structure, it will override parameters set by the NV_ENC_INITIALIZE_PARAMS::presetGUID parameter. If set to NULL the NvEncodeAPI interface will use the NV_ENC_INITIALIZE_PARAMS::presetGUID to set the codec specific parameters.
- Client can also optionally query the NvEncodeAPI interface to get codec specific parameters for a presetGUID using ::NvEncGetEncodePresetConfig() API. It can then modify (if required) some of the codec config parameters and send down a custom config structure as part of ::_NV_ENC_INITIALIZE_PARAMS.
- Even in this case client is recommended to pass the same preset guid it has used in ::NvEncGetEncodePresetConfig() API to query the config structure; as NV_ENC_INITIALIZE_PARAMS::presetGUID. This will not override the custom config structure but will be used to determine other Encoder HW specific parameters not exposed in the API. */
- uint32_t maxEncodeWidth; /**< [in]: Maximum encode width to be used for current Encode session.
- Client should allocate output buffers according to this dimension for dynamic resolution change. If set to 0, Encoder will not allow dynamic resolution change. */
- uint32_t maxEncodeHeight; /**< [in]: Maximum encode height to be allowed for current Encode session.
- Client should allocate output buffers according to this dimension for dynamic resolution change. If set to 0, Encode will not allow dynamic resolution change. */
- NVENC_EXTERNAL_ME_HINT_COUNTS_PER_BLOCKTYPE maxMEHintCountsPerBlock[2]; /**< [in]: If Client wants to pass external motion vectors in NV_ENC_PIC_PARAMS::meExternalHints buffer it must specify the maximum number of hint candidates per block per direction for the encode session.
- The NV_ENC_INITIALIZE_PARAMS::maxMEHintCountsPerBlock[0] is for L0 predictors and NV_ENC_INITIALIZE_PARAMS::maxMEHintCountsPerBlock[1] is for L1 predictors.
- This client must also set NV_ENC_INITIALIZE_PARAMS::enableExternalMEHints to 1. */
- uint32_t reserved [289]; /**< [in]: Reserved and must be set to 0 */
- void* reserved2[64]; /**< [in]: Reserved and must be set to NULL */
- } NV_ENC_INITIALIZE_PARAMS;
- /** macro for constructing the version field of ::_NV_ENC_INITIALIZE_PARAMS */
- #define NV_ENC_INITIALIZE_PARAMS_VER (NVENCAPI_STRUCT_VERSION(5) | ( 1<<31 ))
- /**
- * \struct _NV_ENC_RECONFIGURE_PARAMS
- * Encode Session Reconfigured parameters.
- */
- typedef struct _NV_ENC_RECONFIGURE_PARAMS
- {
- uint32_t version; /**< [in]: Struct version. Must be set to ::NV_ENC_RECONFIGURE_PARAMS_VER. */
- NV_ENC_INITIALIZE_PARAMS reInitEncodeParams; /**< [in]: Encoder session re-initialization parameters.
- If reInitEncodeParams.encodeConfig is NULL and
- reInitEncodeParams.presetGUID is the same as the preset
- GUID specified on the call to NvEncInitializeEncoder(),
- EncodeAPI will continue to use the existing encode
- configuration.
- If reInitEncodeParams.encodeConfig is NULL and
- reInitEncodeParams.presetGUID is different from the preset
- GUID specified on the call to NvEncInitializeEncoder(),
- EncodeAPI will try to use the default configuration for
- the preset specified by reInitEncodeParams.presetGUID.
- In this case, reconfiguration may fail if the new
- configuration is incompatible with the existing
- configuration (e.g. the new configuration results in
- a change in the GOP structure). */
- uint32_t resetEncoder :1; /**< [in]: This resets the rate control states and other internal encoder states. This should be used only with an IDR frame.
- If NV_ENC_INITIALIZE_PARAMS::enablePTD is set to 1, encoder will force the frame type to IDR */
- uint32_t forceIDR :1; /**< [in]: Encode the current picture as an IDR picture. This flag is only valid when Picture type decision is taken by the Encoder
- [_NV_ENC_INITIALIZE_PARAMS::enablePTD == 1]. */
- uint32_t reserved :30;
- }NV_ENC_RECONFIGURE_PARAMS;
- /** macro for constructing the version field of ::_NV_ENC_RECONFIGURE_PARAMS */
- #define NV_ENC_RECONFIGURE_PARAMS_VER (NVENCAPI_STRUCT_VERSION(1) | ( 1<<31 ))
- /**
- * \struct _NV_ENC_PRESET_CONFIG
- * Encoder preset config
- */
- typedef struct _NV_ENC_PRESET_CONFIG
- {
- uint32_t version; /**< [in]: Struct version. Must be set to ::NV_ENC_PRESET_CONFIG_VER. */
- NV_ENC_CONFIG presetCfg; /**< [out]: preset config returned by the Nvidia Video Encoder interface. */
- uint32_t reserved1[255]; /**< [in]: Reserved and must be set to 0 */
- void* reserved2[64]; /**< [in]: Reserved and must be set to NULL */
- }NV_ENC_PRESET_CONFIG;
- /** macro for constructing the version field of ::_NV_ENC_PRESET_CONFIG */
- #define NV_ENC_PRESET_CONFIG_VER (NVENCAPI_STRUCT_VERSION(4) | ( 1<<31 ))
- /**
- * \struct _NV_ENC_SEI_PAYLOAD
- * User SEI message
- */
- typedef struct _NV_ENC_SEI_PAYLOAD
- {
- uint32_t payloadSize; /**< [in] SEI payload size in bytes. SEI payload must be byte aligned, as described in Annex D */
- uint32_t payloadType; /**< [in] SEI payload types and syntax can be found in Annex D of the H.264 Specification. */
- uint8_t *payload; /**< [in] pointer to user data */
- } NV_ENC_SEI_PAYLOAD;
- #define NV_ENC_H264_SEI_PAYLOAD NV_ENC_SEI_PAYLOAD
- /**
- * \struct _NV_ENC_PIC_PARAMS_H264
- * H264 specific enc pic params. sent on a per frame basis.
- */
- typedef struct _NV_ENC_PIC_PARAMS_H264
- {
- uint32_t displayPOCSyntax; /**< [in]: Specifies the display POC syntax This is required to be set if client is handling the picture type decision. */
- uint32_t reserved3; /**< [in]: Reserved and must be set to 0 */
- uint32_t refPicFlag; /**< [in]: Set to 1 for a reference picture. This is ignored if NV_ENC_INITIALIZE_PARAMS::enablePTD is set to 1. */
- uint32_t colourPlaneId; /**< [in]: Specifies the colour plane ID associated with the current input. */
- uint32_t forceIntraRefreshWithFrameCnt; /**< [in]: Forces an intra refresh with duration equal to intraRefreshFrameCnt.
- When outputRecoveryPointSEI is set this is value is used for recovery_frame_cnt in recovery point SEI message
- forceIntraRefreshWithFrameCnt cannot be used if B frames are used in the GOP structure specified */
- uint32_t constrainedFrame :1; /**< [in]: Set to 1 if client wants to encode this frame with each slice completely independent of other slices in the frame.
- NV_ENC_INITIALIZE_PARAMS::enableConstrainedEncoding should be set to 1 */
- uint32_t sliceModeDataUpdate :1; /**< [in]: Set to 1 if client wants to change the sliceModeData field to specify new sliceSize Parameter
- When forceIntraRefreshWithFrameCnt is set it will have priority over sliceMode setting */
- uint32_t ltrMarkFrame :1; /**< [in]: Set to 1 if client wants to mark this frame as LTR */
- uint32_t ltrUseFrames :1; /**< [in]: Set to 1 if client allows encoding this frame using the LTR frames specified in ltrFrameBitmap */
- uint32_t reservedBitFields :28; /**< [in]: Reserved bit fields and must be set to 0 */
- uint8_t* sliceTypeData; /**< [in]: Deprecated. */
- uint32_t sliceTypeArrayCnt; /**< [in]: Deprecated. */
- uint32_t seiPayloadArrayCnt; /**< [in]: Specifies the number of elements allocated in seiPayloadArray array. */
- NV_ENC_SEI_PAYLOAD* seiPayloadArray; /**< [in]: Array of SEI payloads which will be inserted for this frame. */
- uint32_t sliceMode; /**< [in]: This parameter in conjunction with sliceModeData specifies the way in which the picture is divided into slices
- sliceMode = 0 MB based slices, sliceMode = 1 Byte based slices, sliceMode = 2 MB row based slices, sliceMode = 3, numSlices in Picture
- When forceIntraRefreshWithFrameCnt is set it will have priority over sliceMode setting
- When sliceMode == 0 and sliceModeData == 0 whole picture will be coded with one slice */
- uint32_t sliceModeData; /**< [in]: Specifies the parameter needed for sliceMode. For:
- sliceMode = 0, sliceModeData specifies # of MBs in each slice (except last slice)
- sliceMode = 1, sliceModeData specifies maximum # of bytes in each slice (except last slice)
- sliceMode = 2, sliceModeData specifies # of MB rows in each slice (except last slice)
- sliceMode = 3, sliceModeData specifies number of slices in the picture. Driver will divide picture into slices optimally */
- uint32_t ltrMarkFrameIdx; /**< [in]: Specifies the long term referenceframe index to use for marking this frame as LTR.*/
- uint32_t ltrUseFrameBitmap; /**< [in]: Specifies the the associated bitmap of LTR frame indices to use when encoding this frame. */
- uint32_t ltrUsageMode; /**< [in]: Not supported. Reserved for future use and must be set to 0. */
- uint32_t reserved [243]; /**< [in]: Reserved and must be set to 0. */
- void* reserved2[62]; /**< [in]: Reserved and must be set to NULL. */
- } NV_ENC_PIC_PARAMS_H264;
- /**
- * \struct _NV_ENC_PIC_PARAMS_HEVC
- * HEVC specific enc pic params. sent on a per frame basis.
- */
- typedef struct _NV_ENC_PIC_PARAMS_HEVC
- {
- uint32_t displayPOCSyntax; /**< [in]: Specifies the display POC syntax This is required to be set if client is handling the picture type decision. */
- uint32_t refPicFlag; /**< [in]: Set to 1 for a reference picture. This is ignored if NV_ENC_INITIALIZE_PARAMS::enablePTD is set to 1. */
- uint32_t temporalId; /**< [in]: Specifies the temporal id of the picture */
- uint32_t forceIntraRefreshWithFrameCnt; /**< [in]: Forces an intra refresh with duration equal to intraRefreshFrameCnt.
- When outputRecoveryPointSEI is set this is value is used for recovery_frame_cnt in recovery point SEI message
- forceIntraRefreshWithFrameCnt cannot be used if B frames are used in the GOP structure specified */
- uint32_t constrainedFrame :1; /**< [in]: Set to 1 if client wants to encode this frame with each slice completely independent of other slices in the frame.
- NV_ENC_INITIALIZE_PARAMS::enableConstrainedEncoding should be set to 1 */
- uint32_t sliceModeDataUpdate :1; /**< [in]: Set to 1 if client wants to change the sliceModeData field to specify new sliceSize Parameter
- When forceIntraRefreshWithFrameCnt is set it will have priority over sliceMode setting */
- uint32_t ltrMarkFrame :1; /**< [in]: Set to 1 if client wants to mark this frame as LTR */
- uint32_t ltrUseFrames :1; /**< [in]: Set to 1 if client allows encoding this frame using the LTR frames specified in ltrFrameBitmap */
- uint32_t reservedBitFields :28; /**< [in]: Reserved bit fields and must be set to 0 */
- uint8_t* sliceTypeData; /**< [in]: Array which specifies the slice type used to force intra slice for a particular slice. Currently supported only for NV_ENC_CONFIG_H264::sliceMode == 3.
- Client should allocate array of size sliceModeData where sliceModeData is specified in field of ::_NV_ENC_CONFIG_H264
- Array element with index n corresponds to nth slice. To force a particular slice to intra client should set corresponding array element to NV_ENC_SLICE_TYPE_I
- all other array elements should be set to NV_ENC_SLICE_TYPE_DEFAULT */
- uint32_t sliceTypeArrayCnt; /**< [in]: Client should set this to the number of elements allocated in sliceTypeData array. If sliceTypeData is NULL then this should be set to 0 */
- uint32_t sliceMode; /**< [in]: This parameter in conjunction with sliceModeData specifies the way in which the picture is divided into slices
- sliceMode = 0 CTU based slices, sliceMode = 1 Byte based slices, sliceMode = 2 CTU row based slices, sliceMode = 3, numSlices in Picture
- When forceIntraRefreshWithFrameCnt is set it will have priority over sliceMode setting
- When sliceMode == 0 and sliceModeData == 0 whole picture will be coded with one slice */
- uint32_t sliceModeData; /**< [in]: Specifies the parameter needed for sliceMode. For:
- sliceMode = 0, sliceModeData specifies # of CTUs in each slice (except last slice)
- sliceMode = 1, sliceModeData specifies maximum # of bytes in each slice (except last slice)
- sliceMode = 2, sliceModeData specifies # of CTU rows in each slice (except last slice)
- sliceMode = 3, sliceModeData specifies number of slices in the picture. Driver will divide picture into slices optimally */
- uint32_t ltrMarkFrameIdx; /**< [in]: Specifies the long term reference frame index to use for marking this frame as LTR.*/
- uint32_t ltrUseFrameBitmap; /**< [in]: Specifies the associated bitmap of LTR frame indices to use when encoding this frame. */
- uint32_t ltrUsageMode; /**< [in]: Not supported. Reserved for future use and must be set to 0. */
- uint32_t seiPayloadArrayCnt; /**< [in]: Specifies the number of elements allocated in seiPayloadArray array. */
- uint32_t reserved; /**< [in]: Reserved and must be set to 0. */
- NV_ENC_SEI_PAYLOAD* seiPayloadArray; /**< [in]: Array of SEI payloads which will be inserted for this frame. */
- uint32_t reserved2 [244]; /**< [in]: Reserved and must be set to 0. */
- void* reserved3[61]; /**< [in]: Reserved and must be set to NULL. */
- } NV_ENC_PIC_PARAMS_HEVC;
- /**
- * Codec specific per-picture encoding parameters.
- */
- typedef union _NV_ENC_CODEC_PIC_PARAMS
- {
- NV_ENC_PIC_PARAMS_H264 h264PicParams; /**< [in]: H264 encode picture params. */
- NV_ENC_PIC_PARAMS_HEVC hevcPicParams; /**< [in]: HEVC encode picture params. */
- uint32_t reserved[256]; /**< [in]: Reserved and must be set to 0. */
- } NV_ENC_CODEC_PIC_PARAMS;
- /**
- * \struct _NV_ENC_PIC_PARAMS
- * Encoding parameters that need to be sent on a per frame basis.
- */
- typedef struct _NV_ENC_PIC_PARAMS
- {
- uint32_t version; /**< [in]: Struct version. Must be set to ::NV_ENC_PIC_PARAMS_VER. */
- uint32_t inputWidth; /**< [in]: Specifies the input buffer width */
- uint32_t inputHeight; /**< [in]: Specifies the input buffer height */
- uint32_t inputPitch; /**< [in]: Specifies the input buffer pitch. If pitch value is not known, set this to inputWidth. */
- uint32_t encodePicFlags; /**< [in]: Specifies bit-wise OR`ed encode pic flags. See ::NV_ENC_PIC_FLAGS enum. */
- uint32_t frameIdx; /**< [in]: Specifies the frame index associated with the input frame [optional]. */
- uint64_t inputTimeStamp; /**< [in]: Specifies presentation timestamp associated with the input picture. */
- uint64_t inputDuration; /**< [in]: Specifies duration of the input picture */
- NV_ENC_INPUT_PTR inputBuffer; /**< [in]: Specifies the input buffer pointer. Client must use a pointer obtained from ::NvEncCreateInputBuffer() or ::NvEncMapInputResource() APIs.*/
- NV_ENC_OUTPUT_PTR outputBitstream; /**< [in]: Specifies the pointer to output buffer. Client should use a pointer obtained from ::NvEncCreateBitstreamBuffer() API. */
- void* completionEvent; /**< [in]: Specifies an event to be signalled on completion of encoding of this Frame [only if operating in Asynchronous mode]. Each output buffer should be associated with a distinct event pointer. */
- NV_ENC_BUFFER_FORMAT bufferFmt; /**< [in]: Specifies the input buffer format. */
- NV_ENC_PIC_STRUCT pictureStruct; /**< [in]: Specifies structure of the input picture. */
- NV_ENC_PIC_TYPE pictureType; /**< [in]: Specifies input picture type. Client required to be set explicitly by the client if the client has not set NV_ENC_INITALIZE_PARAMS::enablePTD to 1 while calling NvInitializeEncoder. */
- NV_ENC_CODEC_PIC_PARAMS codecPicParams; /**< [in]: Specifies the codec specific per-picture encoding parameters. */
- NVENC_EXTERNAL_ME_HINT_COUNTS_PER_BLOCKTYPE meHintCountsPerBlock[2]; /**< [in]: Specifies the number of hint candidates per block per direction for the current frame. meHintCountsPerBlock[0] is for L0 predictors and meHintCountsPerBlock[1] is for L1 predictors.
- The candidate count in NV_ENC_PIC_PARAMS::meHintCountsPerBlock[lx] must never exceed NV_ENC_INITIALIZE_PARAMS::maxMEHintCountsPerBlock[lx] provided during encoder intialization. */
- NVENC_EXTERNAL_ME_HINT *meExternalHints; /**< [in]: Specifies the pointer to ME external hints for the current frame. The size of ME hint buffer should be equal to number of macroblocks * the total number of candidates per macroblock.
- The total number of candidates per MB per direction = 1*meHintCountsPerBlock[Lx].numCandsPerBlk16x16 + 2*meHintCountsPerBlock[Lx].numCandsPerBlk16x8 + 2*meHintCountsPerBlock[Lx].numCandsPerBlk8x8
- + 4*meHintCountsPerBlock[Lx].numCandsPerBlk8x8. For frames using bidirectional ME , the total number of candidates for single macroblock is sum of total number of candidates per MB for each direction (L0 and L1) */
- uint32_t reserved1[6]; /**< [in]: Reserved and must be set to 0 */
- void* reserved2[2]; /**< [in]: Reserved and must be set to NULL */
- int8_t *qpDeltaMap; /**< [in]: Specifies the pointer to signed byte array containing value per MB in raster scan order for the current picture, which will be Interperated depending on NV_ENC_RC_PARAMS::qpMapMode.
- If NV_ENC_RC_PARAMS::qpMapMode is NV_ENC_QP_MAP_DELTA , This specify QP modifier to be applied on top of the QP chosen by rate control.
- If NV_ENC_RC_PARAMS::qpMapMode is NV_ENC_QP_MAP_EMPHASIS, it specifies emphasis level map per MB. This level value along with QP chosen by rate control is used to compute the QP modifier,
- which in turn is applied on top of QP chosen by rate control.
- If NV_ENC_RC_PARAMS::qpMapMode is NV_ENC_QP_MAP_DISABLED value in qpDeltaMap will be ignored.*/
- uint32_t qpDeltaMapSize; /**< [in]: Specifies the size in bytes of qpDeltaMap surface allocated by client and pointed to by NV_ENC_PIC_PARAMS::qpDeltaMap. Surface (array) should be picWidthInMbs * picHeightInMbs */
- uint32_t reservedBitFields; /**< [in]: Reserved bitfields and must be set to 0 */
- uint16_t meHintRefPicDist[2]; /**< [in]: Specifies temporal distance for reference picture (NVENC_EXTERNAL_ME_HINT::refidx = 0) used during external ME with NV_ENC_INITALIZE_PARAMS::enablePTD = 1 . meHintRefPicDist[0] is for L0 hints and meHintRefPicDist[1] is for L1 hints.
- If not set, will internally infer distance of 1. Ignored for NV_ENC_INITALIZE_PARAMS::enablePTD = 0 */
- uint32_t reserved3[286]; /**< [in]: Reserved and must be set to 0 */
- void* reserved4[60]; /**< [in]: Reserved and must be set to NULL */
- } NV_ENC_PIC_PARAMS;
- /** Macro for constructing the version field of ::_NV_ENC_PIC_PARAMS */
- #define NV_ENC_PIC_PARAMS_VER (NVENCAPI_STRUCT_VERSION(4) | ( 1<<31 ))
- /**
- * \struct _NV_ENC_MEONLY_PARAMS
- * MEOnly parameters that need to be sent on a per motion estimation basis.
- * NV_ENC_MEONLY_PARAMS::meExternalHints is supported for H264 only.
- */
- typedef struct _NV_ENC_MEONLY_PARAMS
- {
- uint32_t version; /**< [in]: Struct version. Must be set to NV_ENC_MEONLY_PARAMS_VER.*/
- uint32_t inputWidth; /**< [in]: Specifies the input buffer width */
- uint32_t inputHeight; /**< [in]: Specifies the input buffer height */
- NV_ENC_INPUT_PTR inputBuffer; /**< [in]: Specifies the input buffer pointer. Client must use a pointer obtained from NvEncCreateInputBuffer() or NvEncMapInputResource() APIs. */
- NV_ENC_INPUT_PTR referenceFrame; /**< [in]: Specifies the reference frame pointer */
- NV_ENC_OUTPUT_PTR mvBuffer; /**< [in]: Specifies the pointer to motion vector data buffer allocated by NvEncCreateMVBuffer. Client must lock mvBuffer using ::NvEncLockBitstream() API to get the motion vector data. */
- NV_ENC_BUFFER_FORMAT bufferFmt; /**< [in]: Specifies the input buffer format. */
- void* completionEvent; /**< [in]: Specifies an event to be signalled on completion of motion estimation
- of this Frame [only if operating in Asynchronous mode].
- Each output buffer should be associated with a distinct event pointer. */
- uint32_t viewID; /**< [in]: Specifies left,right viewID if NV_ENC_CONFIG_H264_MEONLY::bStereoEnable is set.
- viewID can be 0,1 if bStereoEnable is set, 0 otherwise. */
- NVENC_EXTERNAL_ME_HINT_COUNTS_PER_BLOCKTYPE
- meHintCountsPerBlock[2]; /**< [in]: Specifies the number of hint candidates per block for the current frame. meHintCountsPerBlock[0] is for L0 predictors.
- The candidate count in NV_ENC_PIC_PARAMS::meHintCountsPerBlock[lx] must never exceed NV_ENC_INITIALIZE_PARAMS::maxMEHintCountsPerBlock[lx] provided during encoder intialization. */
- NVENC_EXTERNAL_ME_HINT *meExternalHints; /**< [in]: Specifies the pointer to ME external hints for the current frame. The size of ME hint buffer should be equal to number of macroblocks * the total number of candidates per macroblock.
- The total number of candidates per MB per direction = 1*meHintCountsPerBlock[Lx].numCandsPerBlk16x16 + 2*meHintCountsPerBlock[Lx].numCandsPerBlk16x8 + 2*meHintCountsPerBlock[Lx].numCandsPerBlk8x8
- + 4*meHintCountsPerBlock[Lx].numCandsPerBlk8x8. For frames using bidirectional ME , the total number of candidates for single macroblock is sum of total number of candidates per MB for each direction (L0 and L1) */
- uint32_t reserved1[243]; /**< [in]: Reserved and must be set to 0 */
- void* reserved2[59]; /**< [in]: Reserved and must be set to NULL */
- } NV_ENC_MEONLY_PARAMS;
- /** NV_ENC_MEONLY_PARAMS struct version*/
- #define NV_ENC_MEONLY_PARAMS_VER NVENCAPI_STRUCT_VERSION(3)
- /**
- * \struct _NV_ENC_LOCK_BITSTREAM
- * Bitstream buffer lock parameters.
- */
- typedef struct _NV_ENC_LOCK_BITSTREAM
- {
- uint32_t version; /**< [in]: Struct version. Must be set to ::NV_ENC_LOCK_BITSTREAM_VER. */
- uint32_t doNotWait :1; /**< [in]: If this flag is set, the NvEncodeAPI interface will return buffer pointer even if operation is not completed. If not set, the call will block until operation completes. */
- uint32_t ltrFrame :1; /**< [out]: Flag indicating this frame is marked as LTR frame */
- uint32_t reservedBitFields :30; /**< [in]: Reserved bit fields and must be set to 0 */
- void* outputBitstream; /**< [in]: Pointer to the bitstream buffer being locked. */
- uint32_t* sliceOffsets; /**< [in,out]: Array which receives the slice offsets. This is not supported if NV_ENC_CONFIG_H264::sliceMode is 1 on Kepler GPUs. Array size must be equal to size of frame in MBs. */
- uint32_t frameIdx; /**< [out]: Frame no. for which the bitstream is being retrieved. */
- uint32_t hwEncodeStatus; /**< [out]: The NvEncodeAPI interface status for the locked picture. */
- uint32_t numSlices; /**< [out]: Number of slices in the encoded picture. Will be reported only if NV_ENC_INITIALIZE_PARAMS::reportSliceOffsets set to 1. */
- uint32_t bitstreamSizeInBytes; /**< [out]: Actual number of bytes generated and copied to the memory pointed by bitstreamBufferPtr. */
- uint64_t outputTimeStamp; /**< [out]: Presentation timestamp associated with the encoded output. */
- uint64_t outputDuration; /**< [out]: Presentation duration associates with the encoded output. */
- void* bitstreamBufferPtr; /**< [out]: Pointer to the generated output bitstream.
- For MEOnly mode _NV_ENC_LOCK_BITSTREAM::bitstreamBufferPtr should be typecast to
- NV_ENC_H264_MV_DATA/NV_ENC_HEVC_MV_DATA pointer respectively for H264/HEVC */
- NV_ENC_PIC_TYPE pictureType; /**< [out]: Picture type of the encoded picture. */
- NV_ENC_PIC_STRUCT pictureStruct; /**< [out]: Structure of the generated output picture. */
- uint32_t frameAvgQP; /**< [out]: Average QP of the frame. */
- uint32_t frameSatd; /**< [out]: Total SATD cost for whole frame. */
- uint32_t ltrFrameIdx; /**< [out]: Frame index associated with this LTR frame. */
- uint32_t ltrFrameBitmap; /**< [out]: Bitmap of LTR frames indices which were used for encoding this frame. Value of 0 if no LTR frames were used. */
- uint32_t reserved [236]; /**< [in]: Reserved and must be set to 0 */
- void* reserved2[64]; /**< [in]: Reserved and must be set to NULL */
- } NV_ENC_LOCK_BITSTREAM;
- /** Macro for constructing the version field of ::_NV_ENC_LOCK_BITSTREAM */
- #define NV_ENC_LOCK_BITSTREAM_VER NVENCAPI_STRUCT_VERSION(1)
- /**
- * \struct _NV_ENC_LOCK_INPUT_BUFFER
- * Uncompressed Input Buffer lock parameters.
- */
- typedef struct _NV_ENC_LOCK_INPUT_BUFFER
- {
- uint32_t version; /**< [in]: Struct version. Must be set to ::NV_ENC_LOCK_INPUT_BUFFER_VER. */
- uint32_t doNotWait :1; /**< [in]: Set to 1 to make ::NvEncLockInputBuffer() a unblocking call. If the encoding is not completed, driver will return ::NV_ENC_ERR_ENCODER_BUSY error code. */
- uint32_t reservedBitFields :31; /**< [in]: Reserved bitfields and must be set to 0 */
- NV_ENC_INPUT_PTR inputBuffer; /**< [in]: Pointer to the input buffer to be locked, client should pass the pointer obtained from ::NvEncCreateInputBuffer() or ::NvEncMapInputResource API. */
- void* bufferDataPtr; /**< [out]: Pointed to the locked input buffer data. Client can only access input buffer using the \p bufferDataPtr. */
- uint32_t pitch; /**< [out]: Pitch of the locked input buffer. */
- uint32_t reserved1[251]; /**< [in]: Reserved and must be set to 0 */
- void* reserved2[64]; /**< [in]: Reserved and must be set to NULL */
- } NV_ENC_LOCK_INPUT_BUFFER;
- /** Macro for constructing the version field of ::_NV_ENC_LOCK_INPUT_BUFFER */
- #define NV_ENC_LOCK_INPUT_BUFFER_VER NVENCAPI_STRUCT_VERSION(1)
- /**
- * \struct _NV_ENC_MAP_INPUT_RESOURCE
- * Map an input resource to a Nvidia Encoder Input Buffer
- */
- typedef struct _NV_ENC_MAP_INPUT_RESOURCE
- {
- uint32_t version; /**< [in]: Struct version. Must be set to ::NV_ENC_MAP_INPUT_RESOURCE_VER. */
- uint32_t subResourceIndex; /**< [in]: Deprecated. Do not use. */
- void* inputResource; /**< [in]: Deprecated. Do not use. */
- NV_ENC_REGISTERED_PTR registeredResource; /**< [in]: The Registered resource handle obtained by calling NvEncRegisterInputResource. */
- NV_ENC_INPUT_PTR mappedResource; /**< [out]: Mapped pointer corresponding to the registeredResource. This pointer must be used in NV_ENC_PIC_PARAMS::inputBuffer parameter in ::NvEncEncodePicture() API. */
- NV_ENC_BUFFER_FORMAT mappedBufferFmt; /**< [out]: Buffer format of the outputResource. This buffer format must be used in NV_ENC_PIC_PARAMS::bufferFmt if client using the above mapped resource pointer. */
- uint32_t reserved1[251]; /**< [in]: Reserved and must be set to 0. */
- void* reserved2[63]; /**< [in]: Reserved and must be set to NULL */
- } NV_ENC_MAP_INPUT_RESOURCE;
- /** Macro for constructing the version field of ::_NV_ENC_MAP_INPUT_RESOURCE */
- #define NV_ENC_MAP_INPUT_RESOURCE_VER NVENCAPI_STRUCT_VERSION(4)
- /**
- * \struct _NV_ENC_INPUT_RESOURCE_OPENGL_TEX
- * NV_ENC_REGISTER_RESOURCE::resourceToRegister must be a pointer to a variable of this type,
- * when NV_ENC_REGISTER_RESOURCE::resourceType is NV_ENC_INPUT_RESOURCE_TYPE_OPENGL_TEX
- */
- typedef struct _NV_ENC_INPUT_RESOURCE_OPENGL_TEX
- {
- uint32_t texture; /**< [in]: The name of the texture to be used. */
- uint32_t target; /**< [in]: Accepted values are GL_TEXTURE_RECTANGLE and GL_TEXTURE_2D. */
- } NV_ENC_INPUT_RESOURCE_OPENGL_TEX;
- /**
- * \struct _NV_ENC_REGISTER_RESOURCE
- * Register a resource for future use with the Nvidia Video Encoder Interface.
- */
- typedef struct _NV_ENC_REGISTER_RESOURCE
- {
- uint32_t version; /**< [in]: Struct version. Must be set to ::NV_ENC_REGISTER_RESOURCE_VER. */
- NV_ENC_INPUT_RESOURCE_TYPE resourceType; /**< [in]: Specifies the type of resource to be registered.
- Supported values are
- ::NV_ENC_INPUT_RESOURCE_TYPE_DIRECTX,
- ::NV_ENC_INPUT_RESOURCE_TYPE_CUDADEVICEPTR,
- ::NV_ENC_INPUT_RESOURCE_TYPE_OPENGL_TEX */
- uint32_t width; /**< [in]: Input buffer Width. */
- uint32_t height; /**< [in]: Input buffer Height. */
- uint32_t pitch; /**< [in]: Input buffer Pitch. */
- uint32_t subResourceIndex; /**< [in]: Subresource Index of the DirectX resource to be registered. Should be set to 0 for other interfaces. */
- void* resourceToRegister; /**< [in]: Handle to the resource that is being registered. */
- NV_ENC_REGISTERED_PTR registeredResource; /**< [out]: Registered resource handle. This should be used in future interactions with the Nvidia Video Encoder Interface. */
- NV_ENC_BUFFER_FORMAT bufferFormat; /**< [in]: Buffer format of resource to be registered. */
- uint32_t reserved1[248]; /**< [in]: Reserved and must be set to 0. */
- void* reserved2[62]; /**< [in]: Reserved and must be set to NULL. */
- } NV_ENC_REGISTER_RESOURCE;
- /** Macro for constructing the version field of ::_NV_ENC_REGISTER_RESOURCE */
- #define NV_ENC_REGISTER_RESOURCE_VER NVENCAPI_STRUCT_VERSION(3)
- /**
- * \struct _NV_ENC_STAT
- * Encode Stats structure.
- */
- typedef struct _NV_ENC_STAT
- {
- uint32_t version; /**< [in]: Struct version. Must be set to ::NV_ENC_STAT_VER. */
- uint32_t reserved; /**< [in]: Reserved and must be set to 0 */
- NV_ENC_OUTPUT_PTR outputBitStream; /**< [out]: Specifies the pointer to output bitstream. */
- uint32_t bitStreamSize; /**< [out]: Size of generated bitstream in bytes. */
- uint32_t picType; /**< [out]: Picture type of encoded picture. See ::NV_ENC_PIC_TYPE. */
- uint32_t lastValidByteOffset; /**< [out]: Offset of last valid bytes of completed bitstream */
- uint32_t sliceOffsets[16]; /**< [out]: Offsets of each slice */
- uint32_t picIdx; /**< [out]: Picture number */
- uint32_t reserved1[233]; /**< [in]: Reserved and must be set to 0 */
- void* reserved2[64]; /**< [in]: Reserved and must be set to NULL */
- } NV_ENC_STAT;
- /** Macro for constructing the version field of ::_NV_ENC_STAT */
- #define NV_ENC_STAT_VER NVENCAPI_STRUCT_VERSION(1)
- /**
- * \struct _NV_ENC_SEQUENCE_PARAM_PAYLOAD
- * Sequence and picture paramaters payload.
- */
- typedef struct _NV_ENC_SEQUENCE_PARAM_PAYLOAD
- {
- uint32_t version; /**< [in]: Struct version. Must be set to ::NV_ENC_INITIALIZE_PARAMS_VER. */
- uint32_t inBufferSize; /**< [in]: Specifies the size of the spsppsBuffer provied by the client */
- uint32_t spsId; /**< [in]: Specifies the SPS id to be used in sequence header. Default value is 0. */
- uint32_t ppsId; /**< [in]: Specifies the PPS id to be used in picture header. Default value is 0. */
- void* spsppsBuffer; /**< [in]: Specifies bitstream header pointer of size NV_ENC_SEQUENCE_PARAM_PAYLOAD::inBufferSize. It is the client's responsibility to manage this memory. */
- uint32_t* outSPSPPSPayloadSize; /**< [out]: Size of the sequence and picture header in bytes written by the NvEncodeAPI interface to the SPSPPSBuffer. */
- uint32_t reserved [250]; /**< [in]: Reserved and must be set to 0 */
- void* reserved2[64]; /**< [in]: Reserved and must be set to NULL */
- } NV_ENC_SEQUENCE_PARAM_PAYLOAD;
- /** Macro for constructing the version field of ::_NV_ENC_SEQUENCE_PARAM_PAYLOAD */
- #define NV_ENC_SEQUENCE_PARAM_PAYLOAD_VER NVENCAPI_STRUCT_VERSION(1)
- /**
- * Event registration/unregistration parameters.
- */
- typedef struct _NV_ENC_EVENT_PARAMS
- {
- uint32_t version; /**< [in]: Struct version. Must be set to ::NV_ENC_EVENT_PARAMS_VER. */
- uint32_t reserved; /**< [in]: Reserved and must be set to 0 */
- void* completionEvent; /**< [in]: Handle to event to be registered/unregistered with the NvEncodeAPI interface. */
- uint32_t reserved1[253]; /**< [in]: Reserved and must be set to 0 */
- void* reserved2[64]; /**< [in]: Reserved and must be set to NULL */
- } NV_ENC_EVENT_PARAMS;
- /** Macro for constructing the version field of ::_NV_ENC_EVENT_PARAMS */
- #define NV_ENC_EVENT_PARAMS_VER NVENCAPI_STRUCT_VERSION(1)
- /**
- * Encoder Session Creation parameters
- */
- typedef struct _NV_ENC_OPEN_ENCODE_SESSIONEX_PARAMS
- {
- uint32_t version; /**< [in]: Struct version. Must be set to ::NV_ENC_OPEN_ENCODE_SESSION_EX_PARAMS_VER. */
- NV_ENC_DEVICE_TYPE deviceType; /**< [in]: Specified the device Type */
- void* device; /**< [in]: Pointer to client device. */
- void* reserved; /**< [in]: Reserved and must be set to 0. */
- uint32_t apiVersion; /**< [in]: API version. Should be set to NVENCAPI_VERSION. */
- uint32_t reserved1[253]; /**< [in]: Reserved and must be set to 0 */
- void* reserved2[64]; /**< [in]: Reserved and must be set to NULL */
- } NV_ENC_OPEN_ENCODE_SESSION_EX_PARAMS;
- /** Macro for constructing the version field of ::_NV_ENC_OPEN_ENCODE_SESSIONEX_PARAMS */
- #define NV_ENC_OPEN_ENCODE_SESSION_EX_PARAMS_VER NVENCAPI_STRUCT_VERSION(1)
- /** @} */ /* END ENCODER_STRUCTURE */
- /**
- * \addtogroup ENCODE_FUNC NvEncodeAPI Functions
- * @{
- */
- // NvEncOpenEncodeSession
- /**
- * \brief Opens an encoding session.
- *
- * Deprecated.
- *
- * \return
- * ::NV_ENC_ERR_INVALID_CALL\n
- *
- */
- NVENCSTATUS NVENCAPI NvEncOpenEncodeSession (void* device, uint32_t deviceType, void** encoder);
- // NvEncGetEncodeGuidCount
- /**
- * \brief Retrieves the number of supported encode GUIDs.
- *
- * The function returns the number of codec guids supported by the NvEncodeAPI
- * interface.
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [out] encodeGUIDCount
- * Number of supported encode GUIDs.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_GENERIC \n
- *
- */
- NVENCSTATUS NVENCAPI NvEncGetEncodeGUIDCount (void* encoder, uint32_t* encodeGUIDCount);
- // NvEncGetEncodeGUIDs
- /**
- * \brief Retrieves an array of supported encoder codec GUIDs.
- *
- * The function returns an array of codec guids supported by the NvEncodeAPI interface.
- * The client must allocate an array where the NvEncodeAPI interface can
- * fill the supported guids and pass the pointer in \p *GUIDs parameter.
- * The size of the array can be determined by using ::NvEncGetEncodeGUIDCount() API.
- * The Nvidia Encoding interface returns the number of codec guids it has actually
- * filled in the guid array in the \p GUIDCount parameter.
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [in] guidArraySize
- * Number of GUIDs to retrieved. Should be set to the number retrieved using
- * ::NvEncGetEncodeGUIDCount.
- * \param [out] GUIDs
- * Array of supported Encode GUIDs.
- * \param [out] GUIDCount
- * Number of supported Encode GUIDs.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_GENERIC \n
- *
- */
- NVENCSTATUS NVENCAPI NvEncGetEncodeGUIDs (void* encoder, GUID* GUIDs, uint32_t guidArraySize, uint32_t* GUIDCount);
- // NvEncGetEncodeProfileGuidCount
- /**
- * \brief Retrieves the number of supported profile GUIDs.
- *
- * The function returns the number of profile GUIDs supported for a given codec.
- * The client must first enumerate the codec guids supported by the NvEncodeAPI
- * interface. After determining the codec guid, it can query the NvEncodeAPI
- * interface to determine the number of profile guids supported for a particular
- * codec guid.
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [in] encodeGUID
- * The codec guid for which the profile guids are being enumerated.
- * \param [out] encodeProfileGUIDCount
- * Number of encode profiles supported for the given encodeGUID.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_GENERIC \n
- *
- */
- NVENCSTATUS NVENCAPI NvEncGetEncodeProfileGUIDCount (void* encoder, GUID encodeGUID, uint32_t* encodeProfileGUIDCount);
- // NvEncGetEncodeProfileGUIDs
- /**
- * \brief Retrieves an array of supported encode profile GUIDs.
- *
- * The function returns an array of supported profile guids for a particular
- * codec guid. The client must allocate an array where the NvEncodeAPI interface
- * can populate the profile guids. The client can determine the array size using
- * ::NvEncGetEncodeProfileGUIDCount() API. The client must also validiate that the
- * NvEncodeAPI interface supports the GUID the client wants to pass as \p encodeGUID
- * parameter.
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [in] encodeGUID
- * The encode guid whose profile guids are being enumerated.
- * \param [in] guidArraySize
- * Number of GUIDs to be retrieved. Should be set to the number retrieved using
- * ::NvEncGetEncodeProfileGUIDCount.
- * \param [out] profileGUIDs
- * Array of supported Encode Profile GUIDs
- * \param [out] GUIDCount
- * Number of valid encode profile GUIDs in \p profileGUIDs array.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_GENERIC \n
- *
- */
- NVENCSTATUS NVENCAPI NvEncGetEncodeProfileGUIDs (void* encoder, GUID encodeGUID, GUID* profileGUIDs, uint32_t guidArraySize, uint32_t* GUIDCount);
- // NvEncGetInputFormatCount
- /**
- * \brief Retrieve the number of supported Input formats.
- *
- * The function returns the number of supported input formats. The client must
- * query the NvEncodeAPI interface to determine the supported input formats
- * before creating the input surfaces.
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [in] encodeGUID
- * Encode GUID, corresponding to which the number of supported input formats
- * is to be retrieved.
- * \param [out] inputFmtCount
- * Number of input formats supported for specified Encode GUID.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_GENERIC \n
- */
- NVENCSTATUS NVENCAPI NvEncGetInputFormatCount (void* encoder, GUID encodeGUID, uint32_t* inputFmtCount);
- // NvEncGetInputFormats
- /**
- * \brief Retrieves an array of supported Input formats
- *
- * Returns an array of supported input formats The client must use the input
- * format to create input surface using ::NvEncCreateInputBuffer() API.
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [in] encodeGUID
- * Encode GUID, corresponding to which the number of supported input formats
- * is to be retrieved.
- *\param [in] inputFmtArraySize
- * Size input format count array passed in \p inputFmts.
- *\param [out] inputFmts
- * Array of input formats supported for this Encode GUID.
- *\param [out] inputFmtCount
- * The number of valid input format types returned by the NvEncodeAPI
- * interface in \p inputFmts array.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_GENERIC \n
- *
- */
- NVENCSTATUS NVENCAPI NvEncGetInputFormats (void* encoder, GUID encodeGUID, NV_ENC_BUFFER_FORMAT* inputFmts, uint32_t inputFmtArraySize, uint32_t* inputFmtCount);
- // NvEncGetEncodeCaps
- /**
- * \brief Retrieves the capability value for a specified encoder attribute.
- *
- * The function returns the capability value for a given encoder attribute. The
- * client must validate the encodeGUID using ::NvEncGetEncodeGUIDs() API before
- * calling this function. The encoder attribute being queried are enumerated in
- * ::NV_ENC_CAPS_PARAM enum.
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [in] encodeGUID
- * Encode GUID, corresponding to which the capability attribute is to be retrieved.
- * \param [in] capsParam
- * Used to specify attribute being queried. Refer ::NV_ENC_CAPS_PARAM for more
- * details.
- * \param [out] capsVal
- * The value corresponding to the capability attribute being queried.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_GENERIC \n
- */
- NVENCSTATUS NVENCAPI NvEncGetEncodeCaps (void* encoder, GUID encodeGUID, NV_ENC_CAPS_PARAM* capsParam, int* capsVal);
- // NvEncGetEncodePresetCount
- /**
- * \brief Retrieves the number of supported preset GUIDs.
- *
- * The function returns the number of preset GUIDs available for a given codec.
- * The client must validate the codec guid using ::NvEncGetEncodeGUIDs() API
- * before calling this function.
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [in] encodeGUID
- * Encode GUID, corresponding to which the number of supported presets is to
- * be retrieved.
- * \param [out] encodePresetGUIDCount
- * Receives the number of supported preset GUIDs.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_GENERIC \n
- *
- */
- NVENCSTATUS NVENCAPI NvEncGetEncodePresetCount (void* encoder, GUID encodeGUID, uint32_t* encodePresetGUIDCount);
- // NvEncGetEncodePresetGUIDs
- /**
- * \brief Receives an array of supported encoder preset GUIDs.
- *
- * The function returns an array of encode preset guids available for a given codec.
- * The client can directly use one of the preset guids based upon the use case
- * or target device. The preset guid chosen can be directly used in
- * NV_ENC_INITIALIZE_PARAMS::presetGUID parameter to ::NvEncEncodePicture() API.
- * Alternately client can also use the preset guid to retrieve the encoding config
- * parameters being used by NvEncodeAPI interface for that given preset, using
- * ::NvEncGetEncodePresetConfig() API. It can then modify preset config parameters
- * as per its use case and send it to NvEncodeAPI interface as part of
- * NV_ENC_INITIALIZE_PARAMS::encodeConfig parameter for NvEncInitializeEncoder()
- * API.
- *
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [in] encodeGUID
- * Encode GUID, corresponding to which the list of supported presets is to be
- * retrieved.
- * \param [in] guidArraySize
- * Size of array of preset guids passed in \p preset GUIDs
- * \param [out] presetGUIDs
- * Array of supported Encode preset GUIDs from the NvEncodeAPI interface
- * to client.
- * \param [out] encodePresetGUIDCount
- * Receives the number of preset GUIDs returned by the NvEncodeAPI
- * interface.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_GENERIC \n
- *
- */
- NVENCSTATUS NVENCAPI NvEncGetEncodePresetGUIDs (void* encoder, GUID encodeGUID, GUID* presetGUIDs, uint32_t guidArraySize, uint32_t* encodePresetGUIDCount);
- // NvEncGetEncodePresetConfig
- /**
- * \brief Returns a preset config structure supported for given preset GUID.
- *
- * The function returns a preset config structure for a given preset guid. Before
- * using this function the client must enumerate the preset guids available for
- * a given codec. The preset config structure can be modified by the client depending
- * upon its use case and can be then used to initialize the encoder using
- * ::NvEncInitializeEncoder() API. The client can use this function only if it
- * wants to modify the NvEncodeAPI preset configuration, otherwise it can
- * directly use the preset guid.
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [in] encodeGUID
- * Encode GUID, corresponding to which the list of supported presets is to be
- * retrieved.
- * \param [in] presetGUID
- * Preset GUID, corresponding to which the Encoding configurations is to be
- * retrieved.
- * \param [out] presetConfig
- * The requested Preset Encoder Attribute set. Refer ::_NV_ENC_CONFIG for
- * more details.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_INVALID_VERSION \n
- * ::NV_ENC_ERR_GENERIC \n
- *
- */
- NVENCSTATUS NVENCAPI NvEncGetEncodePresetConfig (void* encoder, GUID encodeGUID, GUID presetGUID, NV_ENC_PRESET_CONFIG* presetConfig);
- // NvEncInitializeEncoder
- /**
- * \brief Initialize the encoder.
- *
- * This API must be used to initialize the encoder. The initialization parameter
- * is passed using \p *createEncodeParams The client must send the following
- * fields of the _NV_ENC_INITIALIZE_PARAMS structure with a valid value.
- * - NV_ENC_INITIALIZE_PARAMS::encodeGUID
- * - NV_ENC_INITIALIZE_PARAMS::encodeWidth
- * - NV_ENC_INITIALIZE_PARAMS::encodeHeight
- *
- * The client can pass a preset guid directly to the NvEncodeAPI interface using
- * NV_ENC_INITIALIZE_PARAMS::presetGUID field. If the client doesn't pass
- * NV_ENC_INITIALIZE_PARAMS::encodeConfig structure, the codec specific parameters
- * will be selected based on the preset guid. The preset guid must have been
- * validated by the client using ::NvEncGetEncodePresetGUIDs() API.
- * If the client passes a custom ::_NV_ENC_CONFIG structure through
- * NV_ENC_INITIALIZE_PARAMS::encodeConfig , it will override the codec specific parameters
- * based on the preset guid. It is recommended that even if the client passes a custom config,
- * it should also send a preset guid. In this case, the preset guid passed by the client
- * will not override any of the custom config parameters programmed by the client,
- * it is only used as a hint by the NvEncodeAPI interface to determine certain encoder parameters
- * which are not exposed to the client.
- *
- * There are two modes of operation for the encoder namely:
- * - Asynchronous mode
- * - Synchronous mode
- *
- * The client can select asynchronous or synchronous mode by setting the \p
- * enableEncodeAsync field in ::_NV_ENC_INITIALIZE_PARAMS to 1 or 0 respectively.
- *\par Asynchronous mode of operation:
- * The Asynchronous mode can be enabled by setting NV_ENC_INITIALIZE_PARAMS::enableEncodeAsync to 1.
- * The client operating in asynchronous mode must allocate completion event object
- * for each output buffer and pass the completion event object in the
- * ::NvEncEncodePicture() API. The client can create another thread and wait on
- * the event object to be signalled by NvEncodeAPI interface on completion of the
- * encoding process for the output frame. This should unblock the main thread from
- * submitting work to the encoder. When the event is signalled the client can call
- * NvEncodeAPI interfaces to copy the bitstream data using ::NvEncLockBitstream()
- * API. This is the preferred mode of operation.
- *
- * NOTE: Asynchronous mode is not supported on Linux.
- *
- *\par Synchronous mode of operation:
- * The client can select synchronous mode by setting NV_ENC_INITIALIZE_PARAMS::enableEncodeAsync to 0.
- * The client working in synchronous mode can work in a single threaded or multi
- * threaded mode. The client need not allocate any event objects. The client can
- * only lock the bitstream data after NvEncodeAPI interface has returned
- * ::NV_ENC_SUCCESS from encode picture. The NvEncodeAPI interface can return
- * ::NV_ENC_ERR_NEED_MORE_INPUT error code from ::NvEncEncodePicture() API. The
- * client must not lock the output buffer in such case but should send the next
- * frame for encoding. The client must keep on calling ::NvEncEncodePicture() API
- * until it returns ::NV_ENC_SUCCESS. \n
- * The client must always lock the bitstream data in order in which it has submitted.
- * This is true for both asynchronous and synchronous mode.
- *
- *\par Picture type decision:
- * If the client is taking the picture type decision and it must disable the picture
- * type decision module in NvEncodeAPI by setting NV_ENC_INITIALIZE_PARAMS::enablePTD
- * to 0. In this case the client is required to send the picture in encoding
- * order to NvEncodeAPI by doing the re-ordering for B frames. \n
- * If the client doesn't want to take the picture type decision it can enable
- * picture type decision module in the NvEncodeAPI interface by setting
- * NV_ENC_INITIALIZE_PARAMS::enablePTD to 1 and send the input pictures in display
- * order.
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [in] createEncodeParams
- * Refer ::_NV_ENC_INITIALIZE_PARAMS for details.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_INVALID_VERSION \n
- * ::NV_ENC_ERR_GENERIC \n
- *
- */
- NVENCSTATUS NVENCAPI NvEncInitializeEncoder (void* encoder, NV_ENC_INITIALIZE_PARAMS* createEncodeParams);
- // NvEncCreateInputBuffer
- /**
- * \brief Allocates Input buffer.
- *
- * This function is used to allocate an input buffer. The client must enumerate
- * the input buffer format before allocating the input buffer resources. The
- * NV_ENC_INPUT_PTR returned by the NvEncodeAPI interface in the
- * NV_ENC_CREATE_INPUT_BUFFER::inputBuffer field can be directly used in
- * ::NvEncEncodePicture() API. The number of input buffers to be allocated by the
- * client must be at least 4 more than the number of B frames being used for encoding.
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [in,out] createInputBufferParams
- * Pointer to the ::NV_ENC_CREATE_INPUT_BUFFER structure.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_INVALID_VERSION \n
- * ::NV_ENC_ERR_GENERIC \n
- *
- */
- NVENCSTATUS NVENCAPI NvEncCreateInputBuffer (void* encoder, NV_ENC_CREATE_INPUT_BUFFER* createInputBufferParams);
- // NvEncDestroyInputBuffer
- /**
- * \brief Release an input buffers.
- *
- * This function is used to free an input buffer. If the client has allocated
- * any input buffer using ::NvEncCreateInputBuffer() API, it must free those
- * input buffers by calling this function. The client must release the input
- * buffers before destroying the encoder using ::NvEncDestroyEncoder() API.
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [in] inputBuffer
- * Pointer to the input buffer to be released.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_INVALID_VERSION \n
- * ::NV_ENC_ERR_GENERIC \n
- *
- */
- NVENCSTATUS NVENCAPI NvEncDestroyInputBuffer (void* encoder, NV_ENC_INPUT_PTR inputBuffer);
- // NvEncCreateBitstreamBuffer
- /**
- * \brief Allocates an output bitstream buffer
- *
- * This function is used to allocate an output bitstream buffer and returns a
- * NV_ENC_OUTPUT_PTR to bitstream buffer to the client in the
- * NV_ENC_CREATE_BITSTREAM_BUFFER::bitstreamBuffer field.
- * The client can only call this function after the encoder session has been
- * initialized using ::NvEncInitializeEncoder() API. The minimum number of output
- * buffers allocated by the client must be at least 4 more than the number of B
- * B frames being used for encoding. The client can only access the output
- * bitsteam data by locking the \p bitstreamBuffer using the ::NvEncLockBitstream()
- * function.
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [in,out] createBitstreamBufferParams
- * Pointer ::NV_ENC_CREATE_BITSTREAM_BUFFER for details.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_INVALID_VERSION \n
- * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n
- * ::NV_ENC_ERR_GENERIC \n
- *
- */
- NVENCSTATUS NVENCAPI NvEncCreateBitstreamBuffer (void* encoder, NV_ENC_CREATE_BITSTREAM_BUFFER* createBitstreamBufferParams);
- // NvEncDestroyBitstreamBuffer
- /**
- * \brief Release a bitstream buffer.
- *
- * This function is used to release the output bitstream buffer allocated using
- * the ::NvEncCreateBitstreamBuffer() function. The client must release the output
- * bitstreamBuffer using this function before destroying the encoder session.
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [in] bitstreamBuffer
- * Pointer to the bitstream buffer being released.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_INVALID_VERSION \n
- * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n
- * ::NV_ENC_ERR_GENERIC \n
- *
- */
- NVENCSTATUS NVENCAPI NvEncDestroyBitstreamBuffer (void* encoder, NV_ENC_OUTPUT_PTR bitstreamBuffer);
- // NvEncEncodePicture
- /**
- * \brief Submit an input picture for encoding.
- *
- * This function is used to submit an input picture buffer for encoding. The
- * encoding parameters are passed using \p *encodePicParams which is a pointer
- * to the ::_NV_ENC_PIC_PARAMS structure.
- *
- * If the client has set NV_ENC_INITIALIZE_PARAMS::enablePTD to 0, then it must
- * send a valid value for the following fields.
- * - NV_ENC_PIC_PARAMS::pictureType
- * - NV_ENC_PIC_PARAMS_H264::displayPOCSyntax (H264 only)
- * - NV_ENC_PIC_PARAMS_H264::frameNumSyntax(H264 only)
- * - NV_ENC_PIC_PARAMS_H264::refPicFlag(H264 only)
- *
- *
- *\par Asynchronous Encoding
- * If the client has enabled asynchronous mode of encoding by setting
- * NV_ENC_INITIALIZE_PARAMS::enableEncodeAsync to 1 in the ::NvEncInitializeEncoder()
- * API ,then the client must send a valid NV_ENC_PIC_PARAMS::completionEvent.
- * Incase of asynchronous mode of operation, client can queue the ::NvEncEncodePicture()
- * API commands from the main thread and then queue output buffers to be processed
- * to a secondary worker thread. Before the locking the output buffers in the
- * secondary thread , the client must wait on NV_ENC_PIC_PARAMS::completionEvent
- * it has queued in ::NvEncEncodePicture() API call. The client must always process
- * completion event and the output buffer in the same order in which they have been
- * submitted for encoding. The NvEncodeAPI interface is responsible for any
- * re-ordering required for B frames and will always ensure that encoded bitstream
- * data is written in the same order in which output buffer is submitted.
- *\code
- The below example shows how asynchronous encoding in case of 1 B frames
- ------------------------------------------------------------------------
- Suppose the client allocated 4 input buffers(I1,I2..), 4 output buffers(O1,O2..)
- and 4 completion events(E1, E2, ...). The NvEncodeAPI interface will need to
- keep a copy of the input buffers for re-ordering and it allocates following
- internal buffers (NvI1, NvI2...). These internal buffers are managed by NvEncodeAPI
- and the client is not responsible for the allocating or freeing the memory of
- the internal buffers.
- a) The client main thread will queue the following encode frame calls.
- Note the picture type is unknown to the client, the decision is being taken by
- NvEncodeAPI interface. The client should pass ::_NV_ENC_PIC_PARAMS parameter
- consisting of allocated input buffer, output buffer and output events in successive
- ::NvEncEncodePicture() API calls along with other required encode picture params.
- For example:
- 1st EncodePicture parameters - (I1, O1, E1)
- 2nd EncodePicture parameters - (I2, O2, E2)
- 3rd EncodePicture parameters - (I3, O3, E3)
- b) NvEncodeAPI SW will receive the following encode Commands from the client.
- The left side shows input from client in the form (Input buffer, Output Buffer,
- Output Event). The right hand side shows a possible picture type decision take by
- the NvEncodeAPI interface.
- (I1, O1, E1) ---P1 Frame
- (I2, O2, E2) ---B2 Frame
- (I3, O3, E3) ---P3 Frame
- c) NvEncodeAPI interface will make a copy of the input buffers to its internal
- buffersfor re-ordering. These copies are done as part of nvEncEncodePicture
- function call from the client and NvEncodeAPI interface is responsible for
- synchronization of copy operation with the actual encoding operation.
- I1 --> NvI1
- I2 --> NvI2
- I3 --> NvI3
- d) After returning from ::NvEncEncodePicture() call , the client must queue the output
- bitstream processing work to the secondary thread. The output bitstream processing
- for asynchronous mode consist of first waiting on completion event(E1, E2..)
- and then locking the output bitstream buffer(O1, O2..) for reading the encoded
- data. The work queued to the secondary thread by the client is in the following order
- (I1, O1, E1)
- (I2, O2, E2)
- (I3, O3, E3)
- Note they are in the same order in which client calls ::NvEncEncodePicture() API
- in \p step a).
- e) NvEncodeAPI interface will do the re-ordering such that Encoder HW will receive
- the following encode commands:
- (NvI1, O1, E1) ---P1 Frame
- (NvI3, O2, E2) ---P3 Frame
- (NvI2, O3, E3) ---B2 frame
- f) After the encoding operations are completed, the events will be signalled
- by NvEncodeAPI interface in the following order :
- (O1, E1) ---P1 Frame ,output bitstream copied to O1 and event E1 signalled.
- (O2, E2) ---P3 Frame ,output bitstream copied to O2 and event E2 signalled.
- (O3, E3) ---B2 Frame ,output bitstream copied to O3 and event E3 signalled.
- g) The client must lock the bitstream data using ::NvEncLockBitstream() API in
- the order O1,O2,O3 to read the encoded data, after waiting for the events
- to be signalled in the same order i.e E1, E2 and E3.The output processing is
- done in the secondary thread in the following order:
- Waits on E1, copies encoded bitstream from O1
- Waits on E2, copies encoded bitstream from O2
- Waits on E3, copies encoded bitstream from O3
- -Note the client will receive the events signalling and output buffer in the
- same order in which they have submitted for encoding.
- -Note the LockBitstream will have picture type field which will notify the
- output picture type to the clients.
- -Note the input, output buffer and the output completion event are free to be
- reused once NvEncodeAPI interfaced has signalled the event and the client has
- copied the data from the output buffer.
- * \endcode
- *
- *\par Synchronous Encoding
- * The client can enable synchronous mode of encoding by setting
- * NV_ENC_INITIALIZE_PARAMS::enableEncodeAsync to 0 in ::NvEncInitializeEncoder() API.
- * The NvEncodeAPI interface may return ::NV_ENC_ERR_NEED_MORE_INPUT error code for
- * some ::NvEncEncodePicture() API calls when NV_ENC_INITIALIZE_PARAMS::enablePTD
- * is set to 1, but the client must not treat it as a fatal error. The NvEncodeAPI
- * interface might not be able to submit an input picture buffer for encoding
- * immediately due to re-ordering for B frames. The NvEncodeAPI interface cannot
- * submit the input picture which is decided to be encoded as B frame as it waits
- * for backward reference from temporally subsequent frames. This input picture
- * is buffered internally and waits for more input picture to arrive. The client
- * must not call ::NvEncLockBitstream() API on the output buffers whose
- * ::NvEncEncodePicture() API returns ::NV_ENC_ERR_NEED_MORE_INPUT. The client must
- * wait for the NvEncodeAPI interface to return ::NV_ENC_SUCCESS before locking the
- * output bitstreams to read the encoded bitstream data. The following example
- * explains the scenario with synchronous encoding with 2 B frames.
- *\code
- The below example shows how synchronous encoding works in case of 1 B frames
- -----------------------------------------------------------------------------
- Suppose the client allocated 4 input buffers(I1,I2..), 4 output buffers(O1,O2..)
- and 4 completion events(E1, E2, ...). The NvEncodeAPI interface will need to
- keep a copy of the input buffers for re-ordering and it allocates following
- internal buffers (NvI1, NvI2...). These internal buffers are managed by NvEncodeAPI
- and the client is not responsible for the allocating or freeing the memory of
- the internal buffers.
- The client calls ::NvEncEncodePicture() API with input buffer I1 and output buffer O1.
- The NvEncodeAPI decides to encode I1 as P frame and submits it to encoder
- HW and returns ::NV_ENC_SUCCESS.
- The client can now read the encoded data by locking the output O1 by calling
- NvEncLockBitstream API.
- The client calls ::NvEncEncodePicture() API with input buffer I2 and output buffer O2.
- The NvEncodeAPI decides to encode I2 as B frame and buffers I2 by copying it
- to internal buffer and returns ::NV_ENC_ERR_NEED_MORE_INPUT.
- The error is not fatal and it notifies client that it cannot read the encoded
- data by locking the output O2 by calling ::NvEncLockBitstream() API without submitting
- more work to the NvEncodeAPI interface.
- The client calls ::NvEncEncodePicture() with input buffer I3 and output buffer O3.
- The NvEncodeAPI decides to encode I3 as P frame and it first submits I3 for
- encoding which will be used as backward reference frame for I2.
- The NvEncodeAPI then submits I2 for encoding and returns ::NV_ENC_SUCESS. Both
- the submission are part of the same ::NvEncEncodePicture() function call.
- The client can now read the encoded data for both the frames by locking the output
- O2 followed by O3 ,by calling ::NvEncLockBitstream() API.
- The client must always lock the output in the same order in which it has submitted
- to receive the encoded bitstream in correct encoding order.
- * \endcode
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [in,out] encodePicParams
- * Pointer to the ::_NV_ENC_PIC_PARAMS structure.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_INVALID_VERSION \n
- * ::NV_ENC_ERR_ENCODER_BUSY \n
- * ::NV_ENC_ERR_NEED_MORE_INPUT \n
- * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n
- * ::NV_ENC_ERR_GENERIC \n
- *
- */
- NVENCSTATUS NVENCAPI NvEncEncodePicture (void* encoder, NV_ENC_PIC_PARAMS* encodePicParams);
- // NvEncLockBitstream
- /**
- * \brief Lock output bitstream buffer
- *
- * This function is used to lock the bitstream buffer to read the encoded data.
- * The client can only access the encoded data by calling this function.
- * The pointer to client accessible encoded data is returned in the
- * NV_ENC_LOCK_BITSTREAM::bitstreamBufferPtr field. The size of the encoded data
- * in the output buffer is returned in the NV_ENC_LOCK_BITSTREAM::bitstreamSizeInBytes
- * The NvEncodeAPI interface also returns the output picture type and picture structure
- * of the encoded frame in NV_ENC_LOCK_BITSTREAM::pictureType and
- * NV_ENC_LOCK_BITSTREAM::pictureStruct fields respectively. If the client has
- * set NV_ENC_LOCK_BITSTREAM::doNotWait to 1, the function might return
- * ::NV_ENC_ERR_LOCK_BUSY if client is operating in synchronous mode. This is not
- * a fatal failure if NV_ENC_LOCK_BITSTREAM::doNotWait is set to 1. In the above case the client can
- * retry the function after few milliseconds.
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [in,out] lockBitstreamBufferParams
- * Pointer to the ::_NV_ENC_LOCK_BITSTREAM structure.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_INVALID_VERSION \n
- * ::NV_ENC_ERR_LOCK_BUSY \n
- * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n
- * ::NV_ENC_ERR_GENERIC \n
- *
- */
- NVENCSTATUS NVENCAPI NvEncLockBitstream (void* encoder, NV_ENC_LOCK_BITSTREAM* lockBitstreamBufferParams);
- // NvEncUnlockBitstream
- /**
- * \brief Unlock the output bitstream buffer
- *
- * This function is used to unlock the output bitstream buffer after the client
- * has read the encoded data from output buffer. The client must call this function
- * to unlock the output buffer which it has previously locked using ::NvEncLockBitstream()
- * function. Using a locked bitstream buffer in ::NvEncEncodePicture() API will cause
- * the function to fail.
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [in,out] bitstreamBuffer
- * bitstream buffer pointer being unlocked
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n
- * ::NV_ENC_ERR_GENERIC \n
- *
- */
- NVENCSTATUS NVENCAPI NvEncUnlockBitstream (void* encoder, NV_ENC_OUTPUT_PTR bitstreamBuffer);
- // NvLockInputBuffer
- /**
- * \brief Locks an input buffer
- *
- * This function is used to lock the input buffer to load the uncompressed YUV
- * pixel data into input buffer memory. The client must pass the NV_ENC_INPUT_PTR
- * it had previously allocated using ::NvEncCreateInputBuffer()in the
- * NV_ENC_LOCK_INPUT_BUFFER::inputBuffer field.
- * The NvEncodeAPI interface returns pointer to client accessible input buffer
- * memory in NV_ENC_LOCK_INPUT_BUFFER::bufferDataPtr field.
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [in,out] lockInputBufferParams
- * Pointer to the ::_NV_ENC_LOCK_INPUT_BUFFER structure
- *
- * \return
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_INVALID_VERSION \n
- * ::NV_ENC_ERR_LOCK_BUSY \n
- * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n
- * ::NV_ENC_ERR_GENERIC \n
- *
- */
- NVENCSTATUS NVENCAPI NvEncLockInputBuffer (void* encoder, NV_ENC_LOCK_INPUT_BUFFER* lockInputBufferParams);
- // NvUnlockInputBuffer
- /**
- * \brief Unlocks the input buffer
- *
- * This function is used to unlock the input buffer memory previously locked for
- * uploading YUV pixel data. The input buffer must be unlocked before being used
- * again for encoding, otherwise NvEncodeAPI will fail the ::NvEncEncodePicture()
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [in] inputBuffer
- * Pointer to the input buffer that is being unlocked.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_VERSION \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n
- * ::NV_ENC_ERR_GENERIC \n
- *
- *
- */
- NVENCSTATUS NVENCAPI NvEncUnlockInputBuffer (void* encoder, NV_ENC_INPUT_PTR inputBuffer);
- // NvEncGetEncodeStats
- /**
- * \brief Get encoding statistics.
- *
- * This function is used to retrieve the encoding statistics.
- * This API is not supported when encode device type is CUDA.
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [in,out] encodeStats
- * Pointer to the ::_NV_ENC_STAT structure.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n
- * ::NV_ENC_ERR_GENERIC \n
- *
- */
- NVENCSTATUS NVENCAPI NvEncGetEncodeStats (void* encoder, NV_ENC_STAT* encodeStats);
- // NvEncGetSequenceParams
- /**
- * \brief Get encoded sequence and picture header.
- *
- * This function can be used to retrieve the sequence and picture header out of
- * band. The client must call this function only after the encoder has been
- * initialized using ::NvEncInitializeEncoder() function. The client must
- * allocate the memory where the NvEncodeAPI interface can copy the bitstream
- * header and pass the pointer to the memory in NV_ENC_SEQUENCE_PARAM_PAYLOAD::spsppsBuffer.
- * The size of buffer is passed in the field NV_ENC_SEQUENCE_PARAM_PAYLOAD::inBufferSize.
- * The NvEncodeAPI interface will copy the bitstream header payload and returns
- * the actual size of the bitstream header in the field
- * NV_ENC_SEQUENCE_PARAM_PAYLOAD::outSPSPPSPayloadSize.
- * The client must call ::NvEncGetSequenceParams() function from the same thread which is
- * being used to call ::NvEncEncodePicture() function.
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [in,out] sequenceParamPayload
- * Pointer to the ::_NV_ENC_SEQUENCE_PARAM_PAYLOAD structure.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_VERSION \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n
- * ::NV_ENC_ERR_GENERIC \n
- *
- */
- NVENCSTATUS NVENCAPI NvEncGetSequenceParams (void* encoder, NV_ENC_SEQUENCE_PARAM_PAYLOAD* sequenceParamPayload);
- // NvEncRegisterAsyncEvent
- /**
- * \brief Register event for notification to encoding completion.
- *
- * This function is used to register the completion event with NvEncodeAPI
- * interface. The event is required when the client has configured the encoder to
- * work in asynchronous mode. In this mode the client needs to send a completion
- * event with every output buffer. The NvEncodeAPI interface will signal the
- * completion of the encoding process using this event. Only after the event is
- * signalled the client can get the encoded data using ::NvEncLockBitstream() function.
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [in] eventParams
- * Pointer to the ::_NV_ENC_EVENT_PARAMS structure.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_VERSION \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n
- * ::NV_ENC_ERR_GENERIC \n
- *
- */
- NVENCSTATUS NVENCAPI NvEncRegisterAsyncEvent (void* encoder, NV_ENC_EVENT_PARAMS* eventParams);
- // NvEncUnregisterAsyncEvent
- /**
- * \brief Unregister completion event.
- *
- * This function is used to unregister completion event which has been previously
- * registered using ::NvEncRegisterAsyncEvent() function. The client must unregister
- * all events before destroying the encoder using ::NvEncDestroyEncoder() function.
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [in] eventParams
- * Pointer to the ::_NV_ENC_EVENT_PARAMS structure.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_VERSION \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n
- * ::NV_ENC_ERR_GENERIC \n
- *
- */
- NVENCSTATUS NVENCAPI NvEncUnregisterAsyncEvent (void* encoder, NV_ENC_EVENT_PARAMS* eventParams);
- // NvEncMapInputResource
- /**
- * \brief Map an externally created input resource pointer for encoding.
- *
- * Maps an externally allocated input resource [using and returns a NV_ENC_INPUT_PTR
- * which can be used for encoding in the ::NvEncEncodePicture() function. The
- * mapped resource is returned in the field NV_ENC_MAP_INPUT_RESOURCE::outputResourcePtr.
- * The NvEncodeAPI interface also returns the buffer format of the mapped resource
- * in the field NV_ENC_MAP_INPUT_RESOURCE::outbufferFmt.
- * This function provides synchronization guarantee that any graphics or compute
- * work submitted on the input buffer is completed before the buffer is used for encoding.
- * The client should not access any input buffer while they are mapped by the encoder.
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [in,out] mapInputResParams
- * Pointer to the ::_NV_ENC_MAP_INPUT_RESOURCE structure.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_VERSION \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n
- * ::NV_ENC_ERR_RESOURCE_NOT_REGISTERED \n
- * ::NV_ENC_ERR_MAP_FAILED \n
- * ::NV_ENC_ERR_GENERIC \n
- *
- */
- NVENCSTATUS NVENCAPI NvEncMapInputResource (void* encoder, NV_ENC_MAP_INPUT_RESOURCE* mapInputResParams);
- // NvEncUnmapInputResource
- /**
- * \brief UnMaps a NV_ENC_INPUT_PTR which was mapped for encoding
- *
- *
- * UnMaps an input buffer which was previously mapped using ::NvEncMapInputResource()
- * API. The mapping created using ::NvEncMapInputResource() should be invalidated
- * using this API before the external resource is destroyed by the client. The client
- * must unmap the buffer after ::NvEncLockBitstream() API returns succuessfully for encode
- * work submitted using the mapped input buffer.
- *
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [in] mappedInputBuffer
- * Pointer to the NV_ENC_INPUT_PTR
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_VERSION \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n
- * ::NV_ENC_ERR_RESOURCE_NOT_REGISTERED \n
- * ::NV_ENC_ERR_RESOURCE_NOT_MAPPED \n
- * ::NV_ENC_ERR_GENERIC \n
- *
- */
- NVENCSTATUS NVENCAPI NvEncUnmapInputResource (void* encoder, NV_ENC_INPUT_PTR mappedInputBuffer);
- // NvEncDestroyEncoder
- /**
- * \brief Destroy Encoding Session
- *
- * Destroys the encoder session previously created using ::NvEncOpenEncodeSession()
- * function. The client must flush the encoder before freeing any resources. In order
- * to flush the encoder the client must pass a NULL encode picture packet and either
- * wait for the ::NvEncEncodePicture() function to return in synchronous mode or wait
- * for the flush event to be signaled by the encoder in asynchronous mode.
- * The client must free all the input and output resources created using the
- * NvEncodeAPI interface before destroying the encoder. If the client is operating
- * in asynchronous mode, it must also unregister the completion events previously
- * registered.
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_GENERIC \n
- *
- */
- NVENCSTATUS NVENCAPI NvEncDestroyEncoder (void* encoder);
- // NvEncInvalidateRefFrames
- /**
- * \brief Invalidate reference frames
- *
- * Invalidates reference frame based on the time stamp provided by the client.
- * The encoder marks any reference frames or any frames which have been reconstructed
- * using the corrupt frame as invalid for motion estimation and uses older reference
- * frames for motion estimation. The encoded forces the current frame to be encoded
- * as an intra frame if no reference frames are left after invalidation process.
- * This is useful for low latency application for error resiliency. The client
- * is recommended to set NV_ENC_CONFIG_H264::maxNumRefFrames to a large value so
- * that encoder can keep a backup of older reference frames in the DPB and can use them
- * for motion estimation when the newer reference frames have been invalidated.
- * This API can be called multiple times.
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [in] invalidRefFrameTimeStamp
- * Timestamp of the invalid reference frames which needs to be invalidated.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_GENERIC \n
- *
- */
- NVENCSTATUS NVENCAPI NvEncInvalidateRefFrames(void* encoder, uint64_t invalidRefFrameTimeStamp);
- // NvEncOpenEncodeSessionEx
- /**
- * \brief Opens an encoding session.
- *
- * Opens an encoding session and returns a pointer to the encoder interface in
- * the \p **encoder parameter. The client should start encoding process by calling
- * this API first.
- * The client must pass a pointer to IDirect3DDevice9 device or CUDA context in the \p *device parameter.
- * For the OpenGL interface, \p device must be NULL. An OpenGL context must be current when
- * calling all NvEncodeAPI functions.
- * If the creation of encoder session fails, the client must call ::NvEncDestroyEncoder API
- * before exiting.
- *
- * \param [in] openSessionExParams
- * Pointer to a ::NV_ENC_OPEN_ENCODE_SESSION_EX_PARAMS structure.
- * \param [out] encoder
- * Encode Session pointer to the NvEncodeAPI interface.
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_NO_ENCODE_DEVICE \n
- * ::NV_ENC_ERR_UNSUPPORTED_DEVICE \n
- * ::NV_ENC_ERR_INVALID_DEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_GENERIC \n
- *
- */
- NVENCSTATUS NVENCAPI NvEncOpenEncodeSessionEx (NV_ENC_OPEN_ENCODE_SESSION_EX_PARAMS *openSessionExParams, void** encoder);
- // NvEncRegisterResource
- /**
- * \brief Registers a resource with the Nvidia Video Encoder Interface.
- *
- * Registers a resource with the Nvidia Video Encoder Interface for book keeping.
- * The client is expected to pass the registered resource handle as well, while calling ::NvEncMapInputResource API.
- *
- * \param [in] encoder
- * Pointer to the NVEncodeAPI interface.
- *
- * \param [in] registerResParams
- * Pointer to a ::_NV_ENC_REGISTER_RESOURCE structure
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_VERSION \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n
- * ::NV_ENC_ERR_RESOURCE_REGISTER_FAILED \n
- * ::NV_ENC_ERR_GENERIC \n
- * ::NV_ENC_ERR_UNIMPLEMENTED \n
- *
- */
- NVENCSTATUS NVENCAPI NvEncRegisterResource (void* encoder, NV_ENC_REGISTER_RESOURCE* registerResParams);
- // NvEncUnregisterResource
- /**
- * \brief Unregisters a resource previously registered with the Nvidia Video Encoder Interface.
- *
- * Unregisters a resource previously registered with the Nvidia Video Encoder Interface.
- * The client is expected to unregister any resource that it has registered with the
- * Nvidia Video Encoder Interface before destroying the resource.
- *
- * \param [in] encoder
- * Pointer to the NVEncodeAPI interface.
- *
- * \param [in] registeredResource
- * The registered resource pointer that was returned in ::NvEncRegisterResource.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_VERSION \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n
- * ::NV_ENC_ERR_RESOURCE_NOT_REGISTERED \n
- * ::NV_ENC_ERR_GENERIC \n
- * ::NV_ENC_ERR_UNIMPLEMENTED \n
- *
- */
- NVENCSTATUS NVENCAPI NvEncUnregisterResource (void* encoder, NV_ENC_REGISTERED_PTR registeredResource);
- // NvEncReconfigureEncoder
- /**
- * \brief Reconfigure an existing encoding session.
- *
- * Reconfigure an existing encoding session.
- * The client should call this API to change/reconfigure the parameter passed during
- * NvEncInitializeEncoder API call.
- * Currently Reconfiguration of following are not supported.
- * Change in GOP structure.
- * Change in sync-Async mode.
- * Change in MaxWidth & MaxHeight.
- * Change in PTDmode.
- *
- * Resolution change is possible only if maxEncodeWidth & maxEncodeHeight of NV_ENC_INITIALIZE_PARAMS
- * is set while creating encoder session.
- *
- * \param [in] encoder
- * Pointer to the NVEncodeAPI interface.
- *
- * \param [in] reInitEncodeParams
- * Pointer to a ::NV_ENC_RECONFIGURE_PARAMS structure.
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_NO_ENCODE_DEVICE \n
- * ::NV_ENC_ERR_UNSUPPORTED_DEVICE \n
- * ::NV_ENC_ERR_INVALID_DEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_GENERIC \n
- *
- */
- NVENCSTATUS NVENCAPI NvEncReconfigureEncoder (void *encoder, NV_ENC_RECONFIGURE_PARAMS* reInitEncodeParams);
- // NvEncCreateMVBuffer
- /**
- * \brief Allocates output MV buffer for ME only mode.
- *
- * This function is used to allocate an output MV buffer. The size of the mvBuffer is
- * dependent on the frame height and width of the last ::NvEncCreateInputBuffer() call.
- * The NV_ENC_OUTPUT_PTR returned by the NvEncodeAPI interface in the
- * ::NV_ENC_CREATE_MV_BUFFER::mvBuffer field should be used in
- * ::NvEncRunMotionEstimationOnly() API.
- * Client must lock ::NV_ENC_CREATE_MV_BUFFER::mvBuffer using ::NvEncLockBitstream() API to get the motion vector data.
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [in,out] createMVBufferParams
- * Pointer to the ::NV_ENC_CREATE_MV_BUFFER structure.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_INVALID_VERSION \n
- * ::NV_ENC_ERR_GENERIC \n
- */
- NVENCSTATUS NVENCAPI NvEncCreateMVBuffer (void* encoder, NV_ENC_CREATE_MV_BUFFER* createMVBufferParams);
- // NvEncDestroyMVBuffer
- /**
- * \brief Release an output MV buffer for ME only mode.
- *
- * This function is used to release the output MV buffer allocated using
- * the ::NvEncCreateMVBuffer() function. The client must release the output
- * mvBuffer using this function before destroying the encoder session.
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [in] mvBuffer
- * Pointer to the mvBuffer being released.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_INVALID_VERSION \n
- * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n
- * ::NV_ENC_ERR_GENERIC \n
- */
- NVENCSTATUS NVENCAPI NvEncDestroyMVBuffer (void* encoder, NV_ENC_OUTPUT_PTR mvBuffer);
- // NvEncRunMotionEstimationOnly
- /**
- * \brief Submit an input picture and reference frame for motion estimation in ME only mode.
- *
- * This function is used to submit the input frame and reference frame for motion
- * estimation. The ME parameters are passed using *meOnlyParams which is a pointer
- * to ::_NV_ENC_MEONLY_PARAMS structure.
- * Client must lock ::NV_ENC_CREATE_MV_BUFFER::mvBuffer using ::NvEncLockBitstream() API to get the motion vector data.
- * to get motion vector data.
- *
- * \param [in] encoder
- * Pointer to the NvEncodeAPI interface.
- * \param [in] meOnlyParams
- * Pointer to the ::_NV_ENC_MEONLY_PARAMS structure.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
- * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
- * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
- * ::NV_ENC_ERR_OUT_OF_MEMORY \n
- * ::NV_ENC_ERR_INVALID_PARAM \n
- * ::NV_ENC_ERR_INVALID_VERSION \n
- * ::NV_ENC_ERR_NEED_MORE_INPUT \n
- * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n
- * ::NV_ENC_ERR_GENERIC \n
- */
- NVENCSTATUS NVENCAPI NvEncRunMotionEstimationOnly (void* encoder, NV_ENC_MEONLY_PARAMS* meOnlyParams);
- // NvEncodeAPIGetMaxSupportedVersion
- /**
- * \brief Get the largest NvEncodeAPI version supported by the driver.
- *
- * This function can be used by clients to determine if the driver supports
- * the NvEncodeAPI header the application was compiled with.
- *
- * \param [out] version
- * Pointer to the requested value. The 4 least significant bits in the returned
- * indicate the minor version and the rest of the bits indicate the major
- * version of the largest supported version.
- *
- * \return
- * ::NV_ENC_SUCCESS \n
- * ::NV_ENC_ERR_INVALID_PTR \n
- */
- NVENCSTATUS NVENCAPI NvEncodeAPIGetMaxSupportedVersion (uint32_t* version);
- /// \cond API PFN
- /*
- * Defines API function pointers
- */
- typedef NVENCSTATUS (NVENCAPI* PNVENCOPENENCODESESSION) (void* device, uint32_t deviceType, void** encoder);
- typedef NVENCSTATUS (NVENCAPI* PNVENCGETENCODEGUIDCOUNT) (void* encoder, uint32_t* encodeGUIDCount);
- typedef NVENCSTATUS (NVENCAPI* PNVENCGETENCODEGUIDS) (void* encoder, GUID* GUIDs, uint32_t guidArraySize, uint32_t* GUIDCount);
- typedef NVENCSTATUS (NVENCAPI* PNVENCGETENCODEPROFILEGUIDCOUNT) (void* encoder, GUID encodeGUID, uint32_t* encodeProfileGUIDCount);
- typedef NVENCSTATUS (NVENCAPI* PNVENCGETENCODEPROFILEGUIDS) (void* encoder, GUID encodeGUID, GUID* profileGUIDs, uint32_t guidArraySize, uint32_t* GUIDCount);
- typedef NVENCSTATUS (NVENCAPI* PNVENCGETINPUTFORMATCOUNT) (void* encoder, GUID encodeGUID, uint32_t* inputFmtCount);
- typedef NVENCSTATUS (NVENCAPI* PNVENCGETINPUTFORMATS) (void* encoder, GUID encodeGUID, NV_ENC_BUFFER_FORMAT* inputFmts, uint32_t inputFmtArraySize, uint32_t* inputFmtCount);
- typedef NVENCSTATUS (NVENCAPI* PNVENCGETENCODECAPS) (void* encoder, GUID encodeGUID, NV_ENC_CAPS_PARAM* capsParam, int* capsVal);
- typedef NVENCSTATUS (NVENCAPI* PNVENCGETENCODEPRESETCOUNT) (void* encoder, GUID encodeGUID, uint32_t* encodePresetGUIDCount);
- typedef NVENCSTATUS (NVENCAPI* PNVENCGETENCODEPRESETGUIDS) (void* encoder, GUID encodeGUID, GUID* presetGUIDs, uint32_t guidArraySize, uint32_t* encodePresetGUIDCount);
- typedef NVENCSTATUS (NVENCAPI* PNVENCGETENCODEPRESETCONFIG) (void* encoder, GUID encodeGUID, GUID presetGUID, NV_ENC_PRESET_CONFIG* presetConfig);
- typedef NVENCSTATUS (NVENCAPI* PNVENCINITIALIZEENCODER) (void* encoder, NV_ENC_INITIALIZE_PARAMS* createEncodeParams);
- typedef NVENCSTATUS (NVENCAPI* PNVENCCREATEINPUTBUFFER) (void* encoder, NV_ENC_CREATE_INPUT_BUFFER* createInputBufferParams);
- typedef NVENCSTATUS (NVENCAPI* PNVENCDESTROYINPUTBUFFER) (void* encoder, NV_ENC_INPUT_PTR inputBuffer);
- typedef NVENCSTATUS (NVENCAPI* PNVENCCREATEBITSTREAMBUFFER) (void* encoder, NV_ENC_CREATE_BITSTREAM_BUFFER* createBitstreamBufferParams);
- typedef NVENCSTATUS (NVENCAPI* PNVENCDESTROYBITSTREAMBUFFER) (void* encoder, NV_ENC_OUTPUT_PTR bitstreamBuffer);
- typedef NVENCSTATUS (NVENCAPI* PNVENCENCODEPICTURE) (void* encoder, NV_ENC_PIC_PARAMS* encodePicParams);
- typedef NVENCSTATUS (NVENCAPI* PNVENCLOCKBITSTREAM) (void* encoder, NV_ENC_LOCK_BITSTREAM* lockBitstreamBufferParams);
- typedef NVENCSTATUS (NVENCAPI* PNVENCUNLOCKBITSTREAM) (void* encoder, NV_ENC_OUTPUT_PTR bitstreamBuffer);
- typedef NVENCSTATUS (NVENCAPI* PNVENCLOCKINPUTBUFFER) (void* encoder, NV_ENC_LOCK_INPUT_BUFFER* lockInputBufferParams);
- typedef NVENCSTATUS (NVENCAPI* PNVENCUNLOCKINPUTBUFFER) (void* encoder, NV_ENC_INPUT_PTR inputBuffer);
- typedef NVENCSTATUS (NVENCAPI* PNVENCGETENCODESTATS) (void* encoder, NV_ENC_STAT* encodeStats);
- typedef NVENCSTATUS (NVENCAPI* PNVENCGETSEQUENCEPARAMS) (void* encoder, NV_ENC_SEQUENCE_PARAM_PAYLOAD* sequenceParamPayload);
- typedef NVENCSTATUS (NVENCAPI* PNVENCREGISTERASYNCEVENT) (void* encoder, NV_ENC_EVENT_PARAMS* eventParams);
- typedef NVENCSTATUS (NVENCAPI* PNVENCUNREGISTERASYNCEVENT) (void* encoder, NV_ENC_EVENT_PARAMS* eventParams);
- typedef NVENCSTATUS (NVENCAPI* PNVENCMAPINPUTRESOURCE) (void* encoder, NV_ENC_MAP_INPUT_RESOURCE* mapInputResParams);
- typedef NVENCSTATUS (NVENCAPI* PNVENCUNMAPINPUTRESOURCE) (void* encoder, NV_ENC_INPUT_PTR mappedInputBuffer);
- typedef NVENCSTATUS (NVENCAPI* PNVENCDESTROYENCODER) (void* encoder);
- typedef NVENCSTATUS (NVENCAPI* PNVENCINVALIDATEREFFRAMES) (void* encoder, uint64_t invalidRefFrameTimeStamp);
- typedef NVENCSTATUS (NVENCAPI* PNVENCOPENENCODESESSIONEX) (NV_ENC_OPEN_ENCODE_SESSION_EX_PARAMS *openSessionExParams, void** encoder);
- typedef NVENCSTATUS (NVENCAPI* PNVENCREGISTERRESOURCE) (void* encoder, NV_ENC_REGISTER_RESOURCE* registerResParams);
- typedef NVENCSTATUS (NVENCAPI* PNVENCUNREGISTERRESOURCE) (void* encoder, NV_ENC_REGISTERED_PTR registeredRes);
- typedef NVENCSTATUS (NVENCAPI* PNVENCRECONFIGUREENCODER) (void* encoder, NV_ENC_RECONFIGURE_PARAMS* reInitEncodeParams);
- typedef NVENCSTATUS (NVENCAPI* PNVENCCREATEMVBUFFER) (void* encoder, NV_ENC_CREATE_MV_BUFFER* createMVBufferParams);
- typedef NVENCSTATUS (NVENCAPI* PNVENCDESTROYMVBUFFER) (void* encoder, NV_ENC_OUTPUT_PTR mvBuffer);
- typedef NVENCSTATUS (NVENCAPI* PNVENCRUNMOTIONESTIMATIONONLY) (void* encoder, NV_ENC_MEONLY_PARAMS* meOnlyParams);
- /// \endcond
- /** @} */ /* END ENCODE_FUNC */
- /**
- * \ingroup ENCODER_STRUCTURE
- * NV_ENCODE_API_FUNCTION_LIST
- */
- typedef struct _NV_ENCODE_API_FUNCTION_LIST
- {
- uint32_t version; /**< [in]: Client should pass NV_ENCODE_API_FUNCTION_LIST_VER. */
- uint32_t reserved; /**< [in]: Reserved and should be set to 0. */
- PNVENCOPENENCODESESSION nvEncOpenEncodeSession; /**< [out]: Client should access ::NvEncOpenEncodeSession() API through this pointer. */
- PNVENCGETENCODEGUIDCOUNT nvEncGetEncodeGUIDCount; /**< [out]: Client should access ::NvEncGetEncodeGUIDCount() API through this pointer. */
- PNVENCGETENCODEPRESETCOUNT nvEncGetEncodeProfileGUIDCount; /**< [out]: Client should access ::NvEncGetEncodeProfileGUIDCount() API through this pointer.*/
- PNVENCGETENCODEPRESETGUIDS nvEncGetEncodeProfileGUIDs; /**< [out]: Client should access ::NvEncGetEncodeProfileGUIDs() API through this pointer. */
- PNVENCGETENCODEGUIDS nvEncGetEncodeGUIDs; /**< [out]: Client should access ::NvEncGetEncodeGUIDs() API through this pointer. */
- PNVENCGETINPUTFORMATCOUNT nvEncGetInputFormatCount; /**< [out]: Client should access ::NvEncGetInputFormatCount() API through this pointer. */
- PNVENCGETINPUTFORMATS nvEncGetInputFormats; /**< [out]: Client should access ::NvEncGetInputFormats() API through this pointer. */
- PNVENCGETENCODECAPS nvEncGetEncodeCaps; /**< [out]: Client should access ::NvEncGetEncodeCaps() API through this pointer. */
- PNVENCGETENCODEPRESETCOUNT nvEncGetEncodePresetCount; /**< [out]: Client should access ::NvEncGetEncodePresetCount() API through this pointer. */
- PNVENCGETENCODEPRESETGUIDS nvEncGetEncodePresetGUIDs; /**< [out]: Client should access ::NvEncGetEncodePresetGUIDs() API through this pointer. */
- PNVENCGETENCODEPRESETCONFIG nvEncGetEncodePresetConfig; /**< [out]: Client should access ::NvEncGetEncodePresetConfig() API through this pointer. */
- PNVENCINITIALIZEENCODER nvEncInitializeEncoder; /**< [out]: Client should access ::NvEncInitializeEncoder() API through this pointer. */
- PNVENCCREATEINPUTBUFFER nvEncCreateInputBuffer; /**< [out]: Client should access ::NvEncCreateInputBuffer() API through this pointer. */
- PNVENCDESTROYINPUTBUFFER nvEncDestroyInputBuffer; /**< [out]: Client should access ::NvEncDestroyInputBuffer() API through this pointer. */
- PNVENCCREATEBITSTREAMBUFFER nvEncCreateBitstreamBuffer; /**< [out]: Client should access ::NvEncCreateBitstreamBuffer() API through this pointer. */
- PNVENCDESTROYBITSTREAMBUFFER nvEncDestroyBitstreamBuffer; /**< [out]: Client should access ::NvEncDestroyBitstreamBuffer() API through this pointer. */
- PNVENCENCODEPICTURE nvEncEncodePicture; /**< [out]: Client should access ::NvEncEncodePicture() API through this pointer. */
- PNVENCLOCKBITSTREAM nvEncLockBitstream; /**< [out]: Client should access ::NvEncLockBitstream() API through this pointer. */
- PNVENCUNLOCKBITSTREAM nvEncUnlockBitstream; /**< [out]: Client should access ::NvEncUnlockBitstream() API through this pointer. */
- PNVENCLOCKINPUTBUFFER nvEncLockInputBuffer; /**< [out]: Client should access ::NvEncLockInputBuffer() API through this pointer. */
- PNVENCUNLOCKINPUTBUFFER nvEncUnlockInputBuffer; /**< [out]: Client should access ::NvEncUnlockInputBuffer() API through this pointer. */
- PNVENCGETENCODESTATS nvEncGetEncodeStats; /**< [out]: Client should access ::NvEncGetEncodeStats() API through this pointer. */
- PNVENCGETSEQUENCEPARAMS nvEncGetSequenceParams; /**< [out]: Client should access ::NvEncGetSequenceParams() API through this pointer. */
- PNVENCREGISTERASYNCEVENT nvEncRegisterAsyncEvent; /**< [out]: Client should access ::NvEncRegisterAsyncEvent() API through this pointer. */
- PNVENCUNREGISTERASYNCEVENT nvEncUnregisterAsyncEvent; /**< [out]: Client should access ::NvEncUnregisterAsyncEvent() API through this pointer. */
- PNVENCMAPINPUTRESOURCE nvEncMapInputResource; /**< [out]: Client should access ::NvEncMapInputResource() API through this pointer. */
- PNVENCUNMAPINPUTRESOURCE nvEncUnmapInputResource; /**< [out]: Client should access ::NvEncUnmapInputResource() API through this pointer. */
- PNVENCDESTROYENCODER nvEncDestroyEncoder; /**< [out]: Client should access ::NvEncDestroyEncoder() API through this pointer. */
- PNVENCINVALIDATEREFFRAMES nvEncInvalidateRefFrames; /**< [out]: Client should access ::NvEncInvalidateRefFrames() API through this pointer. */
- PNVENCOPENENCODESESSIONEX nvEncOpenEncodeSessionEx; /**< [out]: Client should access ::NvEncOpenEncodeSession() API through this pointer. */
- PNVENCREGISTERRESOURCE nvEncRegisterResource; /**< [out]: Client should access ::NvEncRegisterResource() API through this pointer. */
- PNVENCUNREGISTERRESOURCE nvEncUnregisterResource; /**< [out]: Client should access ::NvEncUnregisterResource() API through this pointer. */
- PNVENCRECONFIGUREENCODER nvEncReconfigureEncoder; /**< [out]: Client should access ::NvEncReconfigureEncoder() API through this pointer. */
- void* reserved1;
- PNVENCCREATEMVBUFFER nvEncCreateMVBuffer; /**< [out]: Client should access ::NvEncCreateMVBuffer API through this pointer. */
- PNVENCDESTROYMVBUFFER nvEncDestroyMVBuffer; /**< [out]: Client should access ::NvEncDestroyMVBuffer API through this pointer. */
- PNVENCRUNMOTIONESTIMATIONONLY nvEncRunMotionEstimationOnly; /**< [out]: Client should access ::NvEncRunMotionEstimationOnly API through this pointer. */
- void* reserved2[281]; /**< [in]: Reserved and must be set to NULL */
- } NV_ENCODE_API_FUNCTION_LIST;
- /** Macro for constructing the version field of ::_NV_ENCODEAPI_FUNCTION_LIST. */
- #define NV_ENCODE_API_FUNCTION_LIST_VER NVENCAPI_STRUCT_VERSION(2)
- // NvEncodeAPICreateInstance
- /**
- * \ingroup ENCODE_FUNC
- * Entry Point to the NvEncodeAPI interface.
- *
- * Creates an instance of the NvEncodeAPI interface, and populates the
- * pFunctionList with function pointers to the API routines implemented by the
- * NvEncodeAPI interface.
- *
- * \param [out] functionList
- *
- * \return
- * ::NV_ENC_SUCCESS
- * ::NV_ENC_ERR_INVALID_PTR
- */
- NVENCSTATUS NVENCAPI NvEncodeAPICreateInstance(NV_ENCODE_API_FUNCTION_LIST *functionList);
- #ifdef __cplusplus
- }
- #endif
- #endif
|