CN105263021B - 一种基于uvd的hevc视频解码方法 - Google Patents
一种基于uvd的hevc视频解码方法 Download PDFInfo
- Publication number
- CN105263021B CN105263021B CN201510671074.2A CN201510671074A CN105263021B CN 105263021 B CN105263021 B CN 105263021B CN 201510671074 A CN201510671074 A CN 201510671074A CN 105263021 B CN105263021 B CN 105263021B
- Authority
- CN
- China
- Prior art keywords
- uvd
- hevc
- decoding
- video
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
本发明公开的一种基于UVD的HEVC视频解码方法,包含以下顺序的步骤:利用AMD Media SDK 1.1对AMD异构计算平台中的UVD视频硬解码模块进行调用,将接收到的HEVC视频数据进行解析和处理后投放到UVD中,同时不断从UVD中获取解码后图像并推送出去。本发明的视频解码方法,提高了HEVC视频解码的效率,支持高质量HEVC视频的实时解码,并且使用了通用图像数据传输方法,具有更好的通用性和兼容性,对AMD异构计算平台下的HEVC视频解码有重要的实践指导价值。
Description
技术领域
本发明涉及视频解码领域,特别涉及一种基于UVD的HEVC视频解码方法。
背景技术
DirectShow是针对基于微软Windows平台的流媒体应用的框架,能完美提供高质量的多媒体流的数据采集和回放处理。它能为常见的高性能多媒体应用如文件播放器、TV和DVD播放器、视频编辑软件、格式转换器、音视频采集软件、解码器、编码器、数字信号处理器等提供完美的解决方案。DirectShow支持丰富的流媒体数据格式和压缩格式,包括ASF、MPEG、AVI、MP3、WAV音频文件等,和ACC、DV、H.264、MJPEG-1、MPEG-2等压缩格式。DirectShow的出现,一方面帮助简化了多媒体应用开发过程中涉及的播放、格式转换、捕获等任务;同时它还提供了可定制的解决方案来访问底层流媒体架构,开发人员甚至还可以通过创建自己的DirectShow组件来支持不同的新格式和定制处理效果。
高效率视频编码(High Efficiency Video Coding,简称HEVC)是一种视频压缩标准,被视为是ITU-T H.264/MPEG-4AVC标准的继任者。2004年开始由ISO/IEC MovingPicture Experts Group(MPEG)和ITU-T Video Coding Experts Group(VCEG)作为ISO/IEC 23008-2MPEG-H Part 2或称作ITU-T H.265开始制定。第一版的HEVC/H.265视频压缩标准在2013年4月13日被接受为国际电信联盟(ITU-T)的正式标准。HEVC被认为不仅提升视频质量,同时也能达到H.264/MPEG-4AVC两倍之压缩率(等同于同样画面质量下比特率减少了50%),可支持4K分辨率甚至到超高清电视(UHDTV),最高分辨率可达到8192×4320(8K分辨率)。HEVC能够显著减少文件的存储和分发成本,为更高清晰度的内容进入消费层应用铺平了道路。
FFmpeg是一个集录制、转换、音视频编解码功能为一体的、完整的开源解决方案,采用LGPL或GPL许可证,包含了非常先进的音视频编解码库libavcodec。FFmpeg是音视频编解码领域的权威项目,其中对于HEVC解码,其提供了软件解码方法和基于DXVA2的硬件加速解码方法。开源项目LAVFilters将FFmpeg的大部分解码功能封装为DirectShow Filter。软件解码方法虽通用性和兼容性较好,但其解码效率和CPU计算资源占用较高;而硬件解码方法虽解码效率相对较高,但对图像数据传输有特殊要求,其通用性和兼容性较差。
发明内容
本发明的目的在于克服现有技术的缺点与不足,提供一种基于UVD的HEVC视频解码方法,针对Windows桌面系统进行设计,基于DirectShow系统将HEVC视频解码功能封装为一个DirectShow Filter。
本发明的目的通过以下的技术方案实现:
一种基于UVD的HEVC视频解码方法,包含以下顺序的步骤:
利用AMD Media SDK 1.1对AMD异构计算平台中的UVD视频硬解码模块进行调用,将接收到的HEVC视频数据进行解析和处理后投放到UVD中,同时不断从UVD中获取解码后图像并推送出去。
所述的UVD视频硬解码模块为基于UVD的HEVC解码功能的DirectShow Filter,DirectShow Filter命名为UVD HEVC Decoder,属于Transform Filter,其具有一个输入Pin和一个输出Pin,主媒体类型均为视频流MEDIATYPE_Video;在UVD HEVC Decoder中,输入Pin暂时仅接受HEVC视频的两种媒体类型(MEDIASUBTYPE_HEVC和MEDIASUBTYPE_HVC1)的上游输出Pin与之连接,输出Pin仅提供MEDIASUBTYPE_NV12一种媒体类型的输出Pin连接;UVD HEVC Decoder的整体对外功能为接收从上游Filter输入的HEVC视频流,并将其解码为YUV 4:2:0图像数据的NV12格式码流,输出到下游Filter中。
所述的UVD HEVC Decoder继承自DirectShow Filter的基类库中CtransformFilter,利用其中的输入和输出Pin实现Pin的连接和数据传输和其他DirectShow Filter基本功能的实现,数据传输方式属于Push模式。
所述的利用AMD Media SDK 1.1对AMD异构计算平台中的UVD视频硬解码模块进行调用,具体包含以下步骤:
(1)初始化UVD:调用Media SDK相关API,创建AMF上下文和AMF HEVC硬件解码器;之后以AMF上下文和解码器作为初始化参数创建解码流输出线程;
(2)将视频流输入到UVD:将接收到的视频流数据封装成AMFData类型数据,并设置时间戳信息;之后将封装好的AMFData数据输入到UVD解码器中;如果解码器中的输入队列已满,则循环等待并尝试输入,直到将视频流数据输入到UVD解码器中后返回。若解码器中的输入队列已满,则循环等待并尝试输入,直到将视频流数据输入到UVD解码器中后返回,对上游Filter的数据传输起到阻塞的效果。
所述的不断从UVD中获取解码后图像并推送出去,具体如下:
A、OutputThread类定义
OutputThread类继承AMFThread类,AMFThread类的定义与实现在AMD Media SDK的示例代码中通用类集中。OutputThread类中有三个指针成员属性,将用来分别指向AMF上下文对象和AMF解码器对象和HEVCDecoder对象。其中成员函数Run是OutputThread对象线程启动后会调用执行的线程计算逻辑函数。
B、解码图像输出
OutputThread对象线程启动后,其成员函数Run将会被调用执行;
在Run函数中,不断循环访问AMF解码器对象指针指向的UVD解码器,尝试从中取出解码图像;如果从UVD解码器中取出的数据非空,即成功取出解码图像,则将解码图像数据从显存转换到系统内存中存放,并转换成AMFSurface类型;之后根据输出媒体类型创建一个输出Sample,根据解码图像数据中的时间戳信息设置输出Sample的时间戳,并将解码图像数据从AMFSurface对象中复制填充到输出Sample对象中;
最后将封装好的输出Sample对象通过输出Pin传输到下游Filter中;如果从UVD解码器中取出的数据为空,即仍未有解码数据输出,则循环等待并进行下一次尝试从UVD解码器中取出解码数据;如果访问UVD解码器取出解码数据时遇到文件结束符,并返回AMF_EOF值,则结束循环,Run函数将返回,线程将会终结。
本发明与现有技术相比,具有如下优点和有益效果:
在传统的HEVC视频解码方法中,软件解码方法虽通用性和兼容性较好,但其解码效率和CPU计算资源占用较高;而硬件解码方法虽解码效率相对较高,但对图像数据传输有特殊要求,其通用性和兼容性较差。相比之下,本发明利用AMD异构计算平台中的UVD视频硬解码模块,对HEVC视频进行高效实时解码,并且使用了通用图像数据传输方法,具有较高的HEVC解码效率和更好的通用性和兼容性。
本发明利用AMD异构计算平台中的UVD视频硬解码模块,对HEVC视频进行高效实时解码,充分利用了异构计算平台中的计算资源,降低了CPU资源的占用和总体功耗。本专利提高了HEVC视频解码的效率,支持高质量HEVC视频的实时解码,并且使用了通用图像数据传输方法,具有更好的通用性和兼容性,对AMD异构计算平台下的HEVC视频解码有重要的实践指导价值。
附图说明
图1为UVD HEVC Decoder的功能示意图。
图2为UVD HEVC Decoder的输入线程工作流程图。
图3为UVD HEVC Decoder的输出线程工作流程图。
具体实施方式
下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。
一种基于UVD的HEVC视频解码方法,包含以下顺序的步骤:
利用AMD Media SDK 1.1对AMD异构计算平台中的UVD视频硬解码模块进行调用,将接收到的HEVC视频数据进行解析和处理后投放到UVD中,同时不断从UVD中获取解码后图像并推送出去。
具体如下:
(一)HEVC视频解码Filter设计
基于UVD的HEVC解码功能的DirectShow Filter命名为“UVD HEVC Decoder”,属于Transform Filter,具有一个输入Pin和一个输出Pin,主媒体类型均为视频流MEDIATYPE_Video。如图1,在UVD HEVC Decoder中,输入Pin暂时仅接受HEVC视频的两种媒体类型(MEDIASUBTYPE_HEVC和MEDIASUBTYPE_HVC1)的上游输出Pin与之连接,输出Pin仅提供MEDIASUBTYPE_NV12一种媒体类型的输出Pin连接。UVD HEVC Decoder的整体对外功能为接收从上游Filter输入的HEVC视频流,并将其解码为YUV4:2:0图像数据的NV12格式码流,输出到下游Filter中。
UVD HEVC Decoder继承自DirectShow Filter的基类库中的Ctransform Filter,利用其中的输入和输出Pin实现Pin的连接和数据传输和其他DirectShow Filter基本功能的实现,数据传输方式属于Push模式。
继承自CTransformFilter的媒体Transform Filter的基本开发中,除了实现CTransformFilter中的4个纯虚函数CheckInputType、CheckTransform、DecideBufferSize、GetMediaType外,只需根据媒体转换需求改写Transform函数,在其中实现媒体转换逻辑即可。但这种方式实现的媒体转换Filter的媒体转换过程只有一个线程在运行,此线程来自于上游Filter调用本Filter的Receive函数。在CTransformFilter的Receive函数实现中,会调用Transform函数进行媒体转换,等待媒体转换完毕,Transform函数返回后,将输出的Sample通过输出Pin传递到下游Filter中。这种实现要求每次从上游Filter接收到一个Sample后都能产生一个输出Sample传递到下游Filter中,这与视频解码过程的工作方式并不适配。视频解码过程中除了需要之前已经重构的参考图像外,还需要输入多个Frame才能重构一幅完整的图像,而这些Frame可能被上游Filter封装在多个Sample中进行数据传递。所以不能采用改写Transform函数的方式来实现HEVC解码过程。
UVD HEVC Decoder通过改写Receive函数实现自定义数据接收方式和媒体转换流程。UVD HEVC Decoder通过AMD Media SDK中的API,使用UVD视频硬件解码模块对输入HEVC视频流进行硬件解码。在解码过程中,除了UVD解码器线程外,还有两个线程在运行。一个线程在此称之为输入线程,负责接收从上游Filter传递的Sample数据,并进行媒体类型检查和数据解析等预处理后,将Sample中的HEVC视频流数据和相关信息传输到UVD解码器中;另一个线程在此称之为输出线程,负责不断从UVD解码器中获取解码输出的图像数据,并将其根据输出媒体类型封装为Sample后,将Sample传递到下游Filter中。输入线程直接利用上游Filter调用本Filter中的Receive函数的线程,输出线程在UVD HEVC Decoder被创建时的初始化过程中被创建并初始化,在UVD HEVC Decoder从上游Filter接收到第一个Sample后被启动。
输入线程调用Receive函数后的处理流程如图2所示。从上游Filter接收到Sample后,先从输入Pin获取Sample的相关属性信息,检查其是否为媒体流数据,如果Sample不是媒体流数据,则将Sample通过输出Pin直接传递到下游Filter中让其处理。对于媒体流数据的Sample,检查其媒体类型是否与当前设置的媒体类型是否相符。如果Sample的媒体类型与当前设置的媒体类型不相符则需要进行动态媒体类型变化处理,先等待UVD解码器中的所有解码输出的图像数据都输出完毕后,根据Sample的媒体类型重新设置媒体类型。如果Sample的媒体类型与当前设置的媒体类型相符,则无需做额外处理。之后解析Sample的数据,从中获取HEVC视频流数据和相关信息,再将这些数据和信息不断尝试传输到UVD解码器中。直到成功将HEVC视频流数据传输到UVD解码器中后Receive函数对上游Filter返回成功信息。这样做可以使得UVD解码器的输入队列缓冲区已满的时候,对上游Filter的数据传输起到阻塞作用。
输出线程启动后的处理逻辑如图3所示。循环不断地尝试从UVD解码器中获取解码输出的图像数据,直到UVD解码器返回文件结束信息时,结束循环并终止线程。当成功从UVD解码器中获取到解码输出的图像数据,则将图像数据从显存里取回到系统内存中,并根据输出媒体类型将其封装成Sample。最后将封装好的Sample通过输出Pin传递到下游Filter中,并进入下一次尝试从UVD解码器中获取解码输出的图像数据的循环中。
(二)UVD的调用
初始化89′#
调用Media SDK相关API,创建AMF上下文和AMF HEVC硬件解码器。之后以AMF上下文和解码器作为初始化参数创建解码流输出线程。
将视频流输入到89′#
将接收到的视频流数据封装成AMFData类型数据,并设置时间戳信息。之后将封装好的AMFData数据输入到UVD解码器中。如果解码器中的输入队列已满,则循环等待并尝试输入,直到将视频流数据输入到UVD解码器中后返回,对上游Filter的数据传输起到阻塞的效果。
(三)推送输出数据OutputThread类定义
OutputThread类继承AMFThread类,AMFThread类的定义与实现在AMD Media SDK的示例代码中通用类集中。OutputThread类中有三个指针成员属性,将用来分别指向AMF上下文对象和AMF解码器对象和HEVCDecoder对象。其中成员函数Run是OutputThread对象线程启动后会调用执行的线程计算逻辑函数。
解码图像输出#
OutputThread对象线程启动后,其成员函数Run将会被调用执行。在Run函数中,不断循环访问AMF解码器对象指针指向的UVD解码器,尝试从中取出解码图像。如果从UVD解码器中取出的数据非空,即成功取出解码图像,则将解码图像数据从显存转换到系统内存中存放,并转换成AMFSurface类型。之后根据输出媒体类型创建一个输出Sample,根据解码图像数据中的时间戳信息设置输出Sample的时间戳,并将解码图像数据从AMFSurface对象中复制填充到输出Sample对象中。最后将封装好的输出Sample对象通过输出Pin传输到下游Filter中。如果从UVD解码器中取出的数据为空,即仍未有解码数据输出,则循环等待并进行下一次尝试从UVD解码器中取出解码数据。如果访问UVD解码器取出解码数据时遇到文件结束符,并返回AMF_EOF值,则结束循环,Run函数将返回,线程将会终结。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。
Claims (4)
1.一种基于UVD的HEVC视频解码方法,其特征在于,包含以下顺序的步骤:
利用AMD Media SDK 1.1对AMD异构计算平台中的UVD视频硬解码模块进行调用,将接收到的HEVC视频数据进行解析和处理后投放到UVD中,同时不断从UVD中获取解码后图像并推送出去;
所述的不断从UVD中获取解码后图像并推送出去,具体如下:
OutputThread对象线程启动后,其成员函数Run将会被调用执行;
在Run函数中,不断循环访问AMF解码器对象指针指向的UVD解码器,尝试从中取出解码图像;如果从UVD解码器中取出的数据非空,即成功取出解码图像,则将解码图像数据从显存转换到系统内存中存放,并转换成AMFSurface类型;之后根据输出媒体类型创建一个输出Sample,根据解码图像数据中的时间戳信息设置输出Sample的时间戳,并将解码图像数据从AMFSurface对象中复制填充到输出Sample对象中;
最后将封装好的输出Sample对象通过输出Pin传输到下游Filter中;如果从UVD解码器中取出的数据为空,即仍未有解码数据输出,则循环等待并进行下一次尝试从UVD解码器中取出解码数据;如果访问UVD解码器取出解码数据时遇到文件结束符,并返回AMF_EOF值,则结束循环,Run函数将返回,线程将会终结。
2.根据权利要求1所述的基于UVD的HEVC视频解码方法,其特征在于,所述的UVD视频硬解码模块为基于UVD的HEVC解码功能的DirectShow Filter,DirectShow Filter命名为UVDHEVC Decoder,属于Transform Filter,其具有一个输入Pin和一个输出Pin,主媒体类型均为视频MEDIATYPE_Video;在UVD HEVC Decoder中,输入Pin暂时仅接受HEVC视频的两种媒体类型的上游输出Pin与之连接,输出Pin仅提供MEDIASUBTYPE_NV12一种媒体类型的输出Pin连接;UVD HEVC Decoder的整体对外功能为接收从上游Filter输入的HEVC视频流,并将其解码为YUV 4:2:0图像数据的NV12格式码流,输出到下游Filter中。
3.根据权利要求2所述的基于UVD的HEVC视频解码方法,其特征在于,所述的UVD HEVCDecoder继承自DirectShow Filter的基类库中Ctransform Filter,利用其中的输入和输出Pin实现Pin的连接和数据传输和其他DirectShowFilter基本功能的实现,数据传输方式属于Push模式。
4.根据权利要求1所述的基于UVD的HEVC视频解码方法,其特征在于,所述的利用AMDMedia SDK 1.1对AMD异构计算平台中的UVD视频硬解码模块进行调用,具体包含以下步骤:
(1)初始化UVD:调用Media SDK相关API,创建AMF上下文和AMF HEVC硬件解码器;之后以AMF上下文和解码器作为初始化参数创建解码流输出线程;
(2)将视频流输入到UVD:将接收到的视频流数据封装成AMFData类型数据,并设置时间戳信息;之后将封装好的AMFData数据输入到UVD解码器中;如果解码器中的输入队列已满,则循环等待并尝试输入,直到将视频流数据输入到UVD解码器中后返回。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510671074.2A CN105263021B (zh) | 2015-10-13 | 2015-10-13 | 一种基于uvd的hevc视频解码方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510671074.2A CN105263021B (zh) | 2015-10-13 | 2015-10-13 | 一种基于uvd的hevc视频解码方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105263021A CN105263021A (zh) | 2016-01-20 |
CN105263021B true CN105263021B (zh) | 2018-04-13 |
Family
ID=55102501
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510671074.2A Expired - Fee Related CN105263021B (zh) | 2015-10-13 | 2015-10-13 | 一种基于uvd的hevc视频解码方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105263021B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105959797A (zh) * | 2016-05-25 | 2016-09-21 | 青岛海信电器股份有限公司 | 一种视频解码方法及数字电视 |
CN110022480B (zh) * | 2018-01-09 | 2022-03-25 | 武汉斗鱼网络科技有限公司 | 一种基于amd显卡的h265硬件编码方法及直播平台 |
CN110832875B (zh) * | 2018-07-23 | 2022-02-22 | 深圳市大疆创新科技有限公司 | 视频处理方法、终端设备、机器可读存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101783941A (zh) * | 2009-09-15 | 2010-07-21 | 上海海事大学 | 一种基于ip网络的实时视频传输方法 |
CN102377985A (zh) * | 2010-08-07 | 2012-03-14 | 浙江工业大学 | 移动视频监控系统的媒体模块 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2777273B1 (en) * | 2011-11-11 | 2019-09-04 | GE Video Compression, LLC | Efficient multi-view coding using depth-map estimate for a dependent view |
-
2015
- 2015-10-13 CN CN201510671074.2A patent/CN105263021B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101783941A (zh) * | 2009-09-15 | 2010-07-21 | 上海海事大学 | 一种基于ip网络的实时视频传输方法 |
CN102377985A (zh) * | 2010-08-07 | 2012-03-14 | 浙江工业大学 | 移动视频监控系统的媒体模块 |
Non-Patent Citations (3)
Title |
---|
785G直击HTPC平台——捷波悍马HZ02主板;朱宝贵;《电脑知识与技术(经验技巧)》;20100205;115 * |
基于DirectShow的H.264视频流过滤器的设计与实现;鲁漫红;《计算机技术》;20090531;第9卷(第9期);2347-2350 * |
朱宝贵.785G直击HTPC平台——捷波悍马HZ02主板.《 电脑知识与技术(经验技巧)》.2010,115. * |
Also Published As
Publication number | Publication date |
---|---|
CN105263021A (zh) | 2016-01-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102404624B (zh) | 一种数字机顶盒用支持硬件解码的全格式媒体播放器 | |
US20190320002A1 (en) | Video transcoding method and apparatus, a server system, and storage medium | |
CN105430408B (zh) | 一种基于Intel、AMD和Nvidia三平台的H264硬件解码系统 | |
CN105900445B (zh) | 用于动态自适应流式传输的稳健实况操作的方法和装置 | |
CN105491387B (zh) | 一种基于Intel、AMD和Nvidia三平台的H264硬件编码系统 | |
CN101262610B (zh) | 一种便携式终端上avs-ts节目的播放系统 | |
CN109155875A (zh) | 用于对定时媒体数据进行封装和解析的方法、装置和计算机程序 | |
CN105263021B (zh) | 一种基于uvd的hevc视频解码方法 | |
CN105049920A (zh) | 一种多媒体文件的录制方法和装置 | |
CN103081488B (zh) | 发信号通知用于特技模式视频表示的视频样本 | |
CN101917612A (zh) | 一种流媒体视频编码方法及装置 | |
CN102377985A (zh) | 移动视频监控系统的媒体模块 | |
CN112165653B (zh) | 一种视频播放方法、装置及设备 | |
CN105049904A (zh) | 一种多媒体文件的播放方法和装置 | |
CN102263942A (zh) | 一种分级视频转码装置和方法 | |
CN106993197A (zh) | 一种基于编码器的丢帧方法 | |
US20240080487A1 (en) | Method, apparatus for processing media data, computer device and storage medium | |
CN104768053A (zh) | 一种基于流分解和流重组的格式转换方法及系统 | |
CN107229516A (zh) | 一种数据处理方法及装置 | |
CN109151571A (zh) | 数字电视中基于GStreamer框架的流媒体播放器提升画质的方法 | |
CN110868610B (zh) | 流媒体传输方法、装置、服务器及存储介质 | |
CN101916219A (zh) | 一种片上多核网络处理器流媒体演示平台 | |
CN106792111A (zh) | 一种使用ffmpeg接口录制直播网站视频的方法及装置 | |
CN100591140C (zh) | 一种在视频中显示字幕的方法 | |
CN208079286U (zh) | 一种4k超清转码卡 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20180413 Termination date: 20211013 |
|
CF01 | Termination of patent right due to non-payment of annual fee |