首页 > 编程知识 正文

nodevideo模板码,nodevideo4.1

时间:2023-05-04 11:58:34 阅读:115458 作者:1345

为了了解Nvidia Jetson视频解码过程,在搜索代码时发现解码器是类视频源的派生类。 因此,我们首先决定看看视频源是如何定义的

搜索后,发现videoSource.h、videoSource.cpp位于目录/home/jetson/jetson-inference/utils/video中。

1 .视频源的定义首先看看视频源. h的内容。

classvideosource { public : staticvideosource * create (constvideooptionsoptions ); staticvideosource * create (const char * uri,constvideooptionsoptions=video options (); staticvideosource * create (const char * uri,const commandLine cmdLine ); staticvideosource * create (const char * uri,const int argc,char** argv ); staticvideosource * create (constintargc,char** argv,int positionArg=-1 ); staticvideosource * create (constcommandlinecmdline,int positionArg=-1 ); 虚拟到视频源(; 静态在线常数char * usage () return video _ source _ usage _ string; } templatetypenametboolcapture (t * * image,uint64_t timeout=UINT64_MAX ) returncapture () void** ) image,image 虚拟bool open (; 虚拟语音关闭(; 在线bool is streaming () const { return mStreaming; }在线单元32 _ tget width (const ) returnmoptions.width; }在线uint 32 _ tget height (const ) returnmoptions.height; }inline uint32_t GetFrameRate () const ) returnmoptions.framerate; }在线常数uri get resource () const ) returnmoptions.resource; } inlineconstvideooptionsgetoptions () const{ return mOptions; }virtual inline uint32_t GetType () const{ return 0; }inlineboolistype(uint32_ttype ) const (return ) type==gettype ) ); }模板类型名称t bool istype () const ) returnistype ) t3360:type; } inlineconstchar * type tostr (const ) returntype tostr (gettype ); } staticconstchar * type tostr (uint 32 _ ttype ); 保护性:视频源(一致视频选项选项选项); bool mStreaming; 视频选项移动; (; 视频源是抽象类。 方法bool Capture (…()=0是抽象方法,因此派生类必须自己实现。 让我们分析一下这个抽象类的主要内容。

2. Create函数创建视频源的一个实例。 因为视频源是抽象类,所以其实现方法必须利用派生类。 看看Create的代码,很像个小流氓呢。 '引用了gstCamera.h、gstDecoder.h等模块。 但是,这也给我们带来很多便利。 毕竟,camera、decoder等代码不需要我们用手敲。

3. Capture Open,不要在Close说明上浪费时间,现在来看看Capture的功能吧。 一共声明了两个Capture函数。 第一个竟然是利用模板定义的,定义如下。

templatetypenametboolcapture (t * * image,uint64_t timeout=UINT64_MAX )返回捕获((void * * ) image,image } 已翻译源代码注释:

此模板化版本的Capture ()支持以下图像格式:

uchar3(image_RGB8) uchar4) image_RGBA8 ) float3) image_RGB32f ) float4) image_RGBA32f )图像格式会根据这些类型自动如果在其他类型中使用此重载,则在静态编译时会发生错误。

@param[out] image输出指针设置为包含图像的内存。

此接口的视频选项:如果zerocopy标志设置为true,则内存将分配给映射的CPU/GPU内存,可以通过CPU和CUDA访问。 否则,只能通过CUDA访问。 @ param [ in ]等待捕获time out图像,然后返回超时(毫秒)。 UINT64_ MAX超时值(默认值)将永远等待,如果帧未立即准备好,则立即返回0的超时值。 如果捕获了@帧,则返回true;如果发生错误或超时,则返回false。【特别说明】

重要的事情说三遍,上面的说明,再重复一遍:

如果此接口的videoOptions:zeroCopy标志设置为true,则内存在映射的CPU/GPU内存中分配,可以从CPU和CUDA访问。否则,只能从CUDA访问。

这里的接口是指抽象类视频源。 因为c抽象系统是其他编程语言中的接口。 本说明显示了视频解码的存储位置。 仅在CPU/GPU共享内存和GPU内存这两种情况下。 在Jetson中,视频源不会将视频帧存储在CPU的专用内存中。

读到这里,我想我知道了如何使用Jetson对视频流进行解码。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。