【源码编译安装tbb】【golang源码阅读技巧】【全房通源码】pstream源码

时间:2024-11-26 21:20:29 编辑:valgrind源码 来源:防网易云源码

1.为什么@Resource出错
2.FFmpeg源码分析: AVStream码流
3.优秀的 Verilog/FPGA开源项目介绍(十)- H.264和H.265
4.java,System.out.println();

pstream源码

为什么@Resource出错

       看spring2.0源码中的 InputStreamResource类中的isOpen() 方法:

       /

**

        * This implementation always returns <code>true</code>.

        */

        public boolean isOpen() {

        return true;

        }

       这个方法永远返回true。

        再看这个方法:

       /

**

        * Detects which kind of validation to perform on the XML file identified

        * by the supplied { @link Resource}. If the

        * file has a <code>DOCTYPE</code> definition then DTD validation is used

        * otherwise XSD validation is assumed.

        */

        protected int detectValidationMode(Resource resource) {

        if (resource.isOpen()) {

        throw new BeanDefinitionStoreException(

        "Passed-in Resource [" + resource + "] contains an open stream: " +

        "cannot determine validation mode automatically. Either pass in a Resource " +

        "that is able to create fresh streams, or explicitly specify the validationMode " +

        "on your XmlBeanDefinitionReader instance.");

        }

        ... ...

        }

        由于resource.isOpen()永远返回true,所以这里会抛出异常。我的理解是:InputStreamResource是直指向输入流InputStream的,在构造InputStreamResource时,我们要加载的源码编译安装tbb资源第一次被打开后, 即InputStreamResource的getInputStream()方法调用后, 不允许再次读取资源对应的InputStream。下面是getInputStream()方法,可以看到,InputStreamResource用私有的属性 read来标记输入流是否被读取过, 若读取过一次, 再次读取会抛异常的。

       /

**

        * This implementation throws IllegalStateException if attempting to

        * read the underlying stream multiple times.

        */

        public InputStream getInputStream() throws IOException, IllegalStateException {

        if (this.read) {

        throw new IllegalStateException("InputStream has already been read - " +

        "do not use InputStreamResource if a stream needs to be read multiple times");

        }

        this.read = true;

        return this.inputStream;

        }

        然而从spring2.0开始,为了支持xml schema,需要再次读取资源以检查配置文件是否遵循了DTD 和 xml schema, 又由于当前被打开的资源不能被多次读取, 以致异常抛出。从下面spring源码中关于InputStreamResource类的说明中可以看到,作者强烈建议不要使用InputStreamResource,golang源码阅读技巧 而是尽量使用替代者ByteArrayResource、ClassPathResource、FileSystemResource、UrlResource等来加载xml等资源。

        InputStreamResource类是为给定的InputStream而准备的Resource接口的实现。它只有在没有其它合适的Resource接口实现类可用时才使用。而且,只要有可能就尽量使用ByteArrayResource或者其它基于文件的Resource实现。与其它Resource实现不同的是,这是个已经打开资源的描述符(因此isOpen()函数返回 true)。如果你需要在其它位置保持这个资源的描述符或者多次读取一个流,请不要使用它。

       /

**

        * { @link Resource} implementation for a given InputStream. Should only

        * be used if no specific Resource implementation is applicable.

        * In particular, prefer { @link ByteArrayResource} or any of the

        * file-based Resource implementations where possible.

       

*

        * <p>In contrast to other Resource implementations, this is a descriptor

        * for an <i>already opened</i> resource - therefore returning "true" from

        * <code>isOpen()</code>. Do not use it if you need to keep the resource

        * descriptor somewhere, or if you need to read a stream multiple times.

       

*

        * @author Juergen Hoeller

        * @since ..

        * @see ByteArrayResource

        * @see ClassPathResource

        * @see FileSystemResource

        * @see UrlResource

        */

        public class InputStreamResource extends AbstractResource { ...}

       引一段springsource站网友的解释, 供参考:

        This is caused by Spring 2.0's new support for XML schema: We need to sneak into the file to find out whether it's based on our DTD or our schema now. Simply assuming the DTD as default in that case could cause strange exceptions in the XML parser that would only arise with such an InputStream specified.

        The recommended solution is the same as the general resource loading recommendation of the past two years:Do not use InputStreamResource unless explicitly necessary.

FFmpeg源码分析: AVStream码流

       在AVCodecContext结构体中,AVStream数组存储着所有视频、音频和字幕流的信息。每个码流包含时间基、时长、索引数组、全房通源码编解码器参数、dts和元数据。索引数组用于保存帧数据包的offset、size、timestamp和flag,方便进行seek定位。

       让我们通过ffprobe查看mp4文件的码流信息。该文件包含5个码流,是双音轨双字幕文件。第一个是video,编码为h,帧率为.fps,分辨率为x,像素格式为yuvp。第二个和第三个都是audio,编码为aac,采样率为,立体声,语言分别为印地语和英语。源码制作play音乐第四个和第五个都是subtitle,语言为英语,编码器为mov_text和mov_text。

       调试实时数据显示,stream数组包含以下信息:codec_type(媒体类型)、codec_id、bit_rate、profile、level、width、height、sample_rate、channels等编解码器参数。

       我们关注AVCodecContext的编解码器参数,例如codec_type、codec_id、bit_rate、profile、level、召唤神龙源码分析width、height、sample_rate和channels。具体参数如下:codec_type - 视频/音频/字幕;codec_id - 编码器ID;bit_rate - 位率;profile - 编码器配置文件;level - 编码器级别;width - 宽度;height - 高度;sample_rate - 采样率;channels - 音道数。

       AVStream内部的nb_index_entries(索引数组长度)和index_entries(索引数组)记录着offset、size、timestamp、flags和min_distance信息。在seek操作中,通过二分查找timestamp数组来定位指定时间戳对应的帧。seek模式有previous、next、nearest,通常使用previous模式向前查找。

       时间基time_base在ffmpeg中用于计算时间戳。在rational.h中,AVRational结构体定义为一个有理数,用于时间计算。要将时间戳转换为真实时间,只需将num分子除以den分母。

优秀的 Verilog/FPGA开源项目介绍(十)- H.和H.

       H.是ITU-TVCEG在H.之后推出的新视频编码标准,它在保留H.某些技术的基础上,对相关技术进行了改进。H.采用了先进技术,以优化码流、编码质量、延时和算法复杂度之间的关系,旨在提高压缩效率、鲁棒性和错误恢复能力,减少实时延时和信道获取时间,降低复杂度。

       H.,即MPEG-4第十部分,是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT)提出的高度压缩数字视频编解码器标准。H.的最大优势是其高数据压缩比率,在同等图像质量的条件下,其压缩比是MPEG-2的2倍以上,是MPEG-4的1.5~2倍。

       H.旨在在有限带宽下传输更高质量的网络视频,仅需原先的一半带宽即可播放相同质量的视频。这意味着,我们的智能手机、平板机等移动设备将能够直接在线播放p的全高清视频。H.标准也同时支持4K(×)和8K(×)超高清视频。

       H.与H.的不同之处在于,H.在H.的基础上进行了改进,包括帧内预测、帧间预测、转换、量化、去区块滤波器和熵编码等模块。H.的编码架构大致上与H.相似,但整体被分为三个基本单位:编码单位(CU)、预测单位(PU)和转换单位(TU)。

       复旦大学H./H.开源IP,包括H. Video Encoder IP Core,是由复旦大学专用集成电路与系统国家重点实验室(State Key Lab of ASIC & System,Fudan University)视频图像处理实验室(VIP Lab)范益波教授研究团队开发完成,并开放源代码。

       开源地址:openasic.org

       关于上板验证,网站上有相关的验证板卡代码,如下:

       github上的开源H.,开源地址:github.com/tishi/h...

       用verilog和system verilog编写,在FPGA板上用Xilinx ZYNQ验证,运行最高MHZ。

       内容:文件夹“src”包含所有解码源文件。文件夹“tb”包含测试台文件,ext_ram_.v使用axi3接口模拟ddr。文件夹“pli_fputc”是verilog pli,用于在运行模拟时将输出bin写入文件。

       使用方法:模拟:将所有测试平台和源代码文件添加到您的模拟项目源中,例如modelsim。将测试文件in.放到您的模拟项目文件夹中。然后运行,例如,对于modelsim,运行“vsim -pli pli_fputc.dll bitstream_tb”。输出是out.yuv和一些日志文件。

       在FPGA板上运行:将“src”文件夹中的源文件添加到您的FPGA项目中。顶部文件是decode_stream.sv。两个接口,stream_mem_xxx用于将H比特流馈送到解码器。

       github上的开源H.,开源地址:github.com/aiminickwong...

       无介绍

       说明:第一个项目由复旦大学专用集成电路与系统国家重点实验室(State Key Lab of ASIC & System,Fudan University)视频图像处理实验室(VIP Lab)推出,不论项目完成度还是文档说明,都非常详细,同时上面给的是该项目的论坛,论坛上有相关工作人员维护,活跃度很高,适合去学习使用。

       后面两个项目,碎碎并没验证过,但是感觉不怎么靠谱,README完整度不高,有兴趣的可以去看看。

       最后,还是感谢各个大佬开源的项目,让我们受益匪浅。后面有什么感兴趣方面的项目,大家可以在后台留言或者加微信留言,今天就到这,我是爆肝的碎碎思,期待下期文章与你相见。

       优秀的 Verilog/FPGA开源项目介绍(九)- DP(增改版)

       优秀的 Verilog/FPGA开源项目介绍(八)- HDMI

       优秀的 Verilog/FPGA开源项目介绍(七)- CAN通信

       介绍一些新手入门FPGA的优秀网站(新增2)

       优秀的 Verilog/FPGA开源项目介绍(六)- MIPI

       优秀的 Verilog/FPGA开源项目介绍(五)- USB通信

       优秀的 Verilog/FPGA开源项目介绍(四)- Ethernet

       优秀的 Verilog/FPGA开源项目介绍(三)- 大厂的项目

       优秀的 Verilog/FPGA开源项目介绍(二)-RISC-V

       优秀的 Verilog/FPGA开源项目介绍(一)-PCIe通信

java,System.out.println();

       out是System提供的用于标准输出的流,在没有重定向的情况下,会直接打印到终端,而println这个方式实际上是PrintStream类提供的功能

       é‡å®šå‘错误输出在jdk中有一段说明:

       é€šå¸¸ï¼Œæ­¤æµå¯¹åº”于显示器输出或者由主机环境或用户指定的另一个输出目标。按照惯例,此输出流用于显示错误消息,或者显示那些即使用户输出流(变量 out 的值)已经重定向到通常不被连续监视的某一文件或其他目标,也应该立刻引起用户注意的其他信息。