QP

VVC视频编码标准化过程即将完成

余生长醉 提交于 2020-03-03 15:21:36
2020年VVC视频编码进入标准化最后阶段,有望在年底正式成为国际标准。 文 / Christian Feldmann 译 / 元宝 原文 https://bitmovin.com/compression-standards-vvc-2020/ 2020年是属于VVC的一年,至少是在标准化的最后阶段。在最近一次布鲁塞尔会议举行之后,VVC委员会的草案获得了通过。因此,VVC有望在2020年底最终成为国际标准。这也意味着标准化过程正在慢慢地接近尾声,标准草案没有添加任何新的主要特性。然而,标准化是一个持续进行的过程,包括对文本的清理和错误修复、对现有工具的简化以及高级语法的完成。 那么,VVC到底有什么新特性呢?对于视频编码来说,这是一次真正的革命吗?简而言之:不是的。虽然它在技术上非常先进,但它也只是HEVC的一个进化产物。它仍然使用基于块的混合视频编码方法,这是自H.261 (1988年起)以来所有主要视频编码标准的基础概念。在这个概念中,视频的每一帧都被分割成块,然后按顺序依次去处理所有块。 在解码器端,解码器会在一次循环中处理每一个块,循环从码流的熵解码开始。然后对解码后的变换系数进行反量化和反变换运算。输出是像素域中的误差信号,然后进入编码循环,并添加到预测信号中。有两种预测类型:帧间预测和帧内预测。帧间预测是从先前编码的图像中复制块(运动补偿)

2020教你深入理解Golang之channel

与世无争的帅哥 提交于 2020-02-27 00:13:41
前言 Golang在并发编程上有两大利器,分别是 channel 和 goroutine ,这篇文章我们先聊聊 channel 。熟悉Golang的人都知道一句名言:“使用通信来共享内存,而不是通过共享内存来通信”。这句话有两层意思,Go语言确实在 sync 包中提供了传统的锁机制,但更推荐使用 channel 来解决并发问题。这篇文章会先从 channel 的用法、 channel 的原理两部分对 channel 做一个较为深入的探究。 channel用法 什么是channel 从字面上看, channel 的意思大概就是管道的意思。 channel 是一种go协程用以接收或发送消息的安全的消息队列, channel 就像两个go协程之间的导管,来实现各种资源的同步。可以用下图示意: channel 的用法很简单: func main () { ch := make ( chan int , 1 ) // 创建一个类型为int,缓冲区大小为1的channel ch <- 2 // 将2发送到ch n, ok := <- ch // n接收从ch发出的值 if ok { fmt.Println(n) // 2 } close (ch) // 关闭channel } 使用 channel 时有几个注意点: 向一个 nil channel 发送消息,会一直阻塞; 向一个已经关闭的

一线攻城狮实战经验:RDMA,好用却又很难用?

大兔子大兔子 提交于 2020-02-26 13:32:52
势不可挡的 RDMA 如今,服务器的网络带宽越来越高。当网络带宽迈过万兆这条线后,操作系统用于处理网络IO的开销就越来越难以忽视。在一些网络IO密集的业务中,操作系统本身成为了网络通信的瓶颈,这不仅会导致调用时延的增加(尤其是长尾),还会影响到服务的整体吞吐。 相对于网络带宽的发展速度,CPU性能的发展停滞是导致上述问题的主要原因。 因此,想从根本上解决CPU参与网络传输的低效问题,就要更多地借助专用芯片的能力,RDMA高性能网络势不可挡。 RDMA(Remote Direct Memory Access),可以简单理解为网卡完全绕过CPU实现两个服务器之间的内存数据交换。其作为一种硬件实现的网络传输技术,可以大幅提升网络传输效率,帮助网络IO密集的业务(比如分布式存储、分布式数据库等)获得更低的时延以及更高的吞吐。 具体来说,RDMA技术的应用要借助支持RDMA功能的网卡以及相应的驱动程序。由下图所示,一旦应用程序分配好资源,其可以直接把要发送的数据所在的内存地址和长度信息交给网卡。网卡从内存中拉取数据,由硬件完成报文封装,然后发送给对应的接收端。接收端收到RDMA报文后,直接由硬件解封装,取出数据后,直接放在应用程序预先指定的内存位置。 **由于整个IO过程无需CPU参与,无需操作系统内核参与,没有系统调用,没有中断,也无需内存拷贝,因此RDMA网络传输可以做到极高的性能。*

QP移植

徘徊边缘 提交于 2020-02-10 02:08:30
  以 STM32 平台为例,该单片机的 ARM Cortex-M 系列内核正是被 QP 长期支持,所以 QP 在 ARM Cortex-M 系列内核上已经有长时间的应用验证。   在配套书籍 PSICC2 中的例程为 QP 最原始的版本 4.0.00 (只有 IAR 例程,当然,可以修改汇编文件 qk_port.s 使适用于其他编译器),当前( 2017/04/01 )最新版本是 5.8.2 (直接支持 gnu 、 iar 、 arm 的编译器),以下都是使用最新版本为例。(看过从 4.0.00 至 5.8.2 版本的 Revision History ,官方修复了不少 bug )。 qpc5.8.2 文件夹与文件: qpc\ | +-3rd_party\ - 与硬件相关, stm32f4 、 stm32f7 、 tms 等 mcu 驱动程序,一般不需要移植,用我们以往常用的(包括 CMSIS 标准 (ARM Cortex) 、具体 MCU 型号相关的 lib 的 .c/.h ) | +-source\ -qp 框架的源文件 (src.c) ,直接复制移植 | +-include\ -qp 框架的头文件 (src.h) ,直接复制移植 | +-ports\ - 存放着跟 mcu 内核、 qp 调度方式、编译器相关的接口函数,根据需要选择合适的文件夹 | | +-arm7-9\ |

【转】SpringMVC源码分析和一些常用最佳实践

喜你入骨 提交于 2019-12-15 18:48:00
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 源地址 http://neoremind.com/2016/02/springmvc%E7%9A%84%E4%B8%80%E4%BA%9B%E5%B8%B8%E7%94%A8%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5/ 文章写得非常好,转过来学习下 前言 本文分两部分,第一部分剖析SpringMVC的源代码,看看一个请求响应是如何处理,第二部分主要介绍一些使用中的最佳实践,这些best practices有些比较common,有些比较tricky,旨在展示一个框架的活力以及一些能在日常项目中能够应用的技巧,这些技巧的线索都可以在第一部分的代码剖析中找到,所以读读源代码对于使用好任何框架都是非常有帮助的,正所谓“知其然,还要知其所以然”。 另外,本文中所涉及的Spring版本是3.1.2RELEASE。 Part 1. SpringMVC请求响应模型 SpringMVC一直活跃在后端MVC框架的最前沿,很多web系统都是构建在此之上。最常见就是编写一个Controller,代码片段如下: @RequestMapping(value = "/getTemplateInfo", method = RequestMethod.GET) @ResponseBody public

电磁兼容入门篇之辐射发射(辐射骚扰)试验

北慕城南 提交于 2019-12-05 07:12:10
今天我们一起学习的是四个EMI测试项之一:辐射发射(RE),较前两篇相比的话,今天可能会有一点点深度,不过不用担心,我们先做一个了解,等到测试时或测试后再回过来结合本文,就能掌握的更深刻,或许还会有些特殊的感触! 好了,接下来进入正题,辐射发射(RE)测试是EMC的重要测试项之一,也是问题最多、最不容易通过的项目。不同类型的设备进行辐射发射测试时都需选取相应的产品标准,按照不同的设备等级和分类,来确定被测试设备(EUT)的测量限值和测试需求。本篇文章主要从定义、试验目的、试验设备、试验方法、试验配置等方面展开,后面也会结合具体例子说明。 1. 定义 辐射:辐射是能量以电磁波形式由源发射到空间的现象。虽然我们看不到摸不着,但就像空气一样,我们知道它是切实存在的,比如我们日常生活中经常说的手机辐射、电脑辐射等。 辐射发射:辐射发射指电子、电气产品或系统由其内部电路工作时向其周围空间发射的电磁波。这个发射是通过空气作为传播路径而不是导线(包括信号线和电源线),既然称之为发射,那么肯定相对而言在其周围空间就有接收物体或设备存在。 2. 试验目的 辐射发射(RE)试验主要测试电子、电气设备或系统在正常工作时自身对外界的辐射干扰强度,包括来自电路板、机箱、电缆及连接线等所有部件的辐射骚扰。 通过将试验测量值与限值比较来判断EUT的辐射发射是否合格,测量值低于限值则PASS,反之则FAIL 。