CN105684036B - 并行的硬件块处理流水线和软件块处理流水线 - Google Patents

并行的硬件块处理流水线和软件块处理流水线 Download PDF

Info

Publication number
CN105684036B
CN105684036B CN201480052886.2A CN201480052886A CN105684036B CN 105684036 B CN105684036 B CN 105684036B CN 201480052886 A CN201480052886 A CN 201480052886A CN 105684036 B CN105684036 B CN 105684036B
Authority
CN
China
Prior art keywords
block
stage
assembly line
piece
configuration
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.)
Active
Application number
CN201480052886.2A
Other languages
English (en)
Other versions
CN105684036A (zh
Inventor
J·E·欧尔
T·J·米莱
郑主恩
N·巴伽瓦
G·科泰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Apple Inc
Original Assignee
Apple Computer Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Apple Computer Inc filed Critical Apple Computer Inc
Publication of CN105684036A publication Critical patent/CN105684036A/zh
Application granted granted Critical
Publication of CN105684036B publication Critical patent/CN105684036B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/436Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation using parallelised computational arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/43Hardware specially adapted for motion estimation or compensation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/43Hardware specially adapted for motion estimation or compensation
    • H04N19/433Hardware specially adapted for motion estimation or compensation characterised by techniques for memory access
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/513Processing of motion vectors

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Image Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Image Generation (AREA)

Abstract

本发明公开了一种包括并行运行的软件流水线和硬件流水线的块处理流水线。软件流水线比硬件流水线提前至少一个块而运行。流水线的阶段可各自包括对该阶段处的当前块执行一个或多个操作的硬件流水线部件。流水线的至少一个阶段还可包括软件流水线部件,该软件流水线部件在硬件部件正在处理当前块时确定流水线的该阶段处的硬件部件的用于处理下一个块的配置。软件流水线部件可根据与从流水线的上游阶段获取的下一个块相关的信息来确定该配置。软件流水线部件还可获取和使用与先前在该阶段处处理的块相关的信息。

Description

并行的硬件块处理流水线和软件块处理流水线
技术领域
本公开整体涉及视频处理或图像处理,并且更具体地涉及用于在块处理流水线中处理数字视频帧的方法和装置。
背景技术
包括但不限于个人计算机系统、台式计算机系统、膝上型电脑和笔记本式计算机、平板电脑或平板设备、数码相机、数字视频录像机、和移动电话或智能电话的各种设备可包括可实施视频处理方法的软件和/或硬件。例如,设备可包括可根据一个或多个视频处理方法接收和处理来自一个或多个源的数字视频输入并输出经处理的视频帧的装置(例如集成电路 (IC)诸如片上系统(SOC)、或IC的子系统)。又如,可在设备上实施可根据一个或多个视频处理方法接收和处理来自一个或多个源的数字视频输入并输出经处理的视频帧的软件程序。例如,如图1所示的视频编码器 10代表装置或者软件程序,其中数字视频输入(输入帧90)根据视频编码方法被编码或转化为另一种格式(输出帧92),例如压缩视频格式诸如 H.264/高级视频编码(AVC)格式(也被称为MPEG 4第10部分)。装置或软件程序诸如视频编码器10可包括多个功能部件或单元、以及至例如视频输入源和外部存储器的外部接口。
在一些视频处理方法中,为了执行处理,每个输入视频帧90被分成像素块(例如16×16像素块)的行和列,例如如图2所示的,图2示出了被分成144个16×16像素块的示例性192×192像素帧。输入视频帧90的每个块分别被处理,并且在处理完成时经处理的块被组合以形成输出视频帧 92。这可被称为块处理方法。通常,块处理方法按扫描顺序来处理块,如图2所示的,开始于帧的第一行的第一个块(图示为块0),顺序地处理该行中的块,然后在行完成时在下一行的第一个块处继续进行处理。
块处理方法可包括顺序地被施加到视频帧中的每个块的多个处理步骤或操作。为了实施此类块处理方法,装置或软件程序(诸如视频编码器 10)可包括或实施块处理流水线40。块处理流水线40可包括两个或更多个阶段,其中每个阶段实施块处理方法的步骤或操作中的一者或多者。图1 示出了实施至少包括阶段42A至42C的示例性块处理流水线40的示例性视频编码器10。块被输入到流水线40的阶段42A,根据由阶段42A实施的一个或多个操作来进行处理,并且结果被输出到下一阶段42B(或被最后一个阶段42输出作为最终输出)。下一阶段42B处理该块,而下一个块被输入到前一阶段42A以进行处理。因此,块沿着流水线从一个阶段移动到下一阶段,其中每个阶段每次处理一个块,并且多个阶段同时处理不同的块。通常,块按扫描顺序被输入到块处理流水线40并由块处理流水线40 处理,如图2所示。例如在图1中,图2所示的帧的第一行的第一个块 (块0)位于阶段42C处,第二个块(块1)位于阶段42B处,并且第三个块(块2)位于阶段42A处。要输入到块处理流水线40的下一个块将是第一行中的第四个块。
H.264/高级视频编码(AVC)
H.264/AVC(被正式称为ITU-T建议书H.264,也被称为MPEG-4第 10部分)是ITU-T(国际电信联盟-电信标准化局)视频编码专家组 (VCEG)与ISO/IEC JTC1动态图像专家组(MPEG)一起开发的面向块的基于运动补偿的编解码标准。H.264/AVC标准被ITU-T公布于标题为“ITU-T Recommendation H.264:Advanced video coding for generic audiovisualservices”的文档中。这个文档也可被称为H.264建议书。
发明内容
本发明公开了块处理方法和装置的实施例,其中块处理流水线包括并行运行的软件流水线和硬件流水线。然而,软件流水线比硬件流水线提前一个或多个块而运行。流水线的阶段可各自包括对该阶段处的当前块执行一个或多个操作的硬件流水线部件。流水线的至少一个阶段还可包括软件流水线部件,该软件流水线部件在硬件部件正在处理当前块时确定流水线的该阶段处的硬件部件的用于处理即将到来的块(例如下一个块)的配置。在至少一些实施例中,阶段处的软件流水线部件可根据从流水线的上游阶段获取的与下一个块相关的信息来确定该阶段处的用于处理该下一个块的配置。在至少一些实施例中,软件流水线部件还可获取和使用与先前在该阶段处处理的块相关的用于确定用于处理下一个块的配置的信息。在至少一些实施例中,阶段处的软件流水线部件可获取来自该阶段处的对一个或多个块的处理的信息,并将该信息传回到流水线的一个或多个上游阶段,以针对对当前块或即将到来的块的处理来配置那些上游阶段。此外,在至少一些实施例中,流水线末尾处或末尾附近的软件流水线部件可将块处理结果或统计值传回到流水线开头处或开头附近的另一软件流水线部件,以用于在流水线中处理即将到来的块。
在至少一些实施例中,阶段处的软件流水线部件从上游阶段接收下一个块的块信息。软件流水线部件还可接收来自先前在该阶段处处理的帧的块的信息。软件流水线部件可根据所接收的块的信息来确定该块的配置,将块的配置写到配置存储器,并设置GO位或者以其他方式发信号通知该阶段处的硬件流水线部件下一个块的配置在配置存储器中准备就绪。软件流水线部件然后可将该块的块信息推送到下游阶段。
该阶段处的硬件流水线部件从前一阶段接收块。如果硬件流水线部件准备好处理下一个块,下一个块在存储器中准备就绪,并且软件流水线部件已发信号通知硬件流水线部件下一个块的配置在配置存储器中准备就绪,则硬件流水线部件可开始处理下一个块。硬件流水线部件根据配置存储器中的配置来设置用于处理下一个块的配置,并发信号通知软件流水线部件该配置存储器可供使用。硬件流水线部件然后根据该块的配置来处理该块,并将经处理的块写到下一阶段。
流水线中的阶段处的软件流水线部件和硬件流水线部件的上述操作可在该阶段处重复,直到输入帧中的所有块已在该阶段处被处理。
附图说明
图1示出了包括按扫描顺序处理来自输入帧的块的常规块处理流水线的示例性视频编码器。
图2示出了来自视频帧的块的常规扫描顺序处理。
图3是根据至少一些实施例的用于实施软件流水线和硬件流水线的示例性块处理流水线的高级框图。
图4A至图4C根据至少一些实施例示出了在用于实施软件流水线和硬件流水线的示例性块处理流水线中的阶段处处理该块。
图5根据至少一些实施例示出了用于实施软件流水线和硬件流水线的示例性块处理流水线,其中软件流水线跳过至少一个阶段。
图6根据至少一些实施例示出了用于实施软件流水线和硬件流水线的示例性块处理流水线,其中至少一个阶段包括多个流水线单元。
图7根据至少一些实施例示出了可在用于实施软件流水线和硬件流水线的块处理流水线的阶段处使用的示例性流水线单元的部件。
图8A和8B是根据至少一些实施例的在块处理流水线中并行操作的软件流水线和硬件流水线的操作的方法的流程图。
图9根据至少一些实施例示出了帧中的当前块的相邻块,并且还示出了用于块的骑士(Knight)顺序处理方法。
图10A和10B根据至少一些实施例图解地示出了包括用于确定下一个块的算法的骑士顺序处理方法。
图11A和11B是根据至少一些实施例的用于块处理流水线的骑士顺序处理方法的高级流程图。
图12根据至少一些实施例示出了可在当前四行缓冲器中进行高速缓存的根据骑士顺序处理方法在流水线中处理的四行的一部分。
图13根据至少一些实施例图解地示出了根据骑士顺序处理方法处理的当前四行中的块,以及可在先前四行缓冲器中进行高速缓存的前一个四行的最后一行中的相邻块。
图14是根据至少一些实施例的用于在块处理流水线中处理块的方法的流程图,其中相邻块数据在流水线的阶段处的本地缓冲器中进行高速缓存。
图15A和15B是根据至少一些实施例的可在用于实施本文所述的块处理方法和装置中的一者或多者的块处理流水线的阶段处使用的示例性流水线处理单元的框图。
图15C示出了单个处理器可与一组两个或更多个流水线单元相关联。
图16是根据至少一些实施例的可由用于实施本文所述的块处理方法和装置中的一者或多者的块处理流水线所实施的示例性块处理方法的一般操作的高级框图。
图17是根据至少一些实施例的示例性视频编码器装置的框图。
图18是片上系统(SOC)的一个实施例的框图。
图19是系统的一个实施例的框图。
尽管本发明易受各种修改形式和替代形式的影响,但其具体实施例在附图中以举例的方式示出并且将在本文中详细描述。然而,应当理解,附图及对附图的详细描述并非旨在将本发明限制于所公开的特定形式,而正相反,其目的在于覆盖落在由所附权利要求所限定的本发明的实质和范围内的所有修改形式、等同形式和替代形式。如在整个本专利申请中所使用的那样,以允许的意义(即,意味着具有可能性)而非强制的意义(即,意味着必须)使用“可以”一词。类似地,字词“包括”(“include”“including”和“includes”)意味着包括但不限于。
各种单元、电路或其他部件可被描述为“被配置为”执行一项或多项任务。在此类上下文中,“被配置为”是通常意味着“具有”在操作期间执行一项或多项任务的“电路”的结构的宽泛表述。如此,即使在单元/电路/部件当前未接通时,单元/电路/部件也可被配置为执行该任务。通常,形成与“被配置为”对应的结构的电路可包括硬件电路。类似地,为了描述中方便,可将各种单元/电路/部件描述为执行一项或多项任务。此类描述应当被解释成包括短语“被配置为”。表述被配置为执行一项或多项任务的单元/电路/部件明确地旨在对该单元/电路/部件不援引35U.S.C.§112,第六段的解释。
具体实施方式
在以下描述中示出了许多具体细节,以提供对本发明的彻底理解。然而,本领域的普通技术人员将认识到,可在没有这些具体细节的情况下实践本发明。在一些情况下,未详细示出熟知的电路、结构和技术,以免模糊本发明。
描述了用于在块处理流水线中处理数字视频帧的方法和装置的各种实施例。在本文中在视频处理的上下文中通常描述块处理方法和装置的实施例,其中输入视频帧被细分成元素块(例如16×16像素块、32×32像素块、或64×64像素块)并根据元素块进行处理。在本文中描述了包括块处理流水线并且可实施块处理方法和装置中的一者或多者的示例性H.264视频编码器的实施例。H.264视频编码器将输入视频帧从输入格式转化为H.264/高级视频编码(AVC)标准(H.264建议书)中所述的H.264/AVC格式。图 16示出示例性H.264视频编码器的示例性块处理流水线,并且图17示出包括块处理流水线的示例性H.264视频编码器。然而,块处理方法和装置的实施例可在用于其他视频编码格式的编码器中使用,例如在将输入视频帧从输入格式转化为HEVC(高效率视频编码)标准中所述的HEVC格式的 HEVC视频编码器的块处理流水线中使用。其他可使用块处理方法和装置的实施例的视频编码器可包括但不限于H.263视频编码器、MPEG-2视频编码器、MPEG-4视频编码器、和JPEG-2000视频编码器。然而,应当指出,块处理方法和装置的实施例可在任何块处理流水线中使用,包括但不限于以一种格式输入的数字视频帧在其中被编码或转化为另一格式的各种其他视频编码器和/或解码器(可被称为编解码器)中实施的块处理流水线。还要指出,块处理方法和装置可在视频编码器的软件具体实施和/或硬件具体实施中使用。除了视频编码器/解码器之外,本文所述的块处理方法和装置可在来自视频帧或静态数字图像的块在其中被处理的各种其他应用程序中使用,例如在用于处理各种图像处理应用程序中的静态数字图像的流水线中使用。因此,应当理解,本文所使用的术语“帧”或“视频帧”也可被用来指代任何数字图像。
本文所述的块处理方法和装置的实施例可在两个或更多个并行块处理流水线中实施。例如,2个、4个、8个或更多个流水线可被配置为并行运行,其中每个流水线处理输入视频帧的四行,例如以根据骑士顺序输入的块进行处理。
在本文中在视频处理的上下文中通常描述块处理方法和装置的实施例,其中输入帧被细分成图像元素(被称为像素)的块并根据图像元素的块进行处理,具体地为被称为例如在H.264编码中使用的宏块的16×16像素块。然而,实施例可应用于处理其他尺寸和几何形状或其他元素的块的流水线中。例如,HEVC编码使用可在16×16像素到64×64像素的范围内变化的被称为编码树单元(CTU)的块。在一些具体实施诸如H.264编码器中,输入到流水线的块可被称为宏块,每个宏块包括可在流水线的阶段处单独处理的两个或更多块或部分。例如,针对按YUV(例如YUV420格式)或YCbCr(例如YCbCr 4:2:0格式、4:2:2格式或4:4:4格式)色彩空间编码的输入视频帧,宏块可由可在流水线的阶段处单独处理的色度和亮度元素的单独块构成。除了根据元素块(例如像素块)在流水线中处理帧的应用程序之外,块处理方法和装置可应用于数字图像(例如视频帧或静态图像)在其中由单个元素(例如单个像素)处理的应用程序中。
并行的硬件块处理流水线和软件块处理流水线
本公开描述了块处理方法和装置的实施例,其中块处理流水线包括并行运行的软件流水线和硬件流水线。然而,软件流水线比硬件流水线提前一个或多个块而运行。流水线的阶段可各自包括对该阶段处的当前块执行一个或多个操作的硬件流水线部件(例如电路)。流水线的至少一个阶段还可包括软件流水线部件,该软件流水线部件在硬件部件正在处理当前块时确定流水线的该阶段处的硬件部件的用于处理即将到来的块(例如下一个块)的配置。软件流水线部件可至少包括处理器。在至少一些实施例中,阶段处的软件流水线部件可根据从流水线的上游阶段获取的与下一个块相关的信息来确定该阶段处的用于处理该下一个块的配置。在至少一些实施例中,软件流水线部件还可获取和使用与先前在该阶段处处理的块相关的用于确定用于处理下一个块的配置的信息。在至少一些实施例中,软件流水线还可“预测”(上游)一个或多个块,以获取可在确定该阶段处的用于处理下一个块的配置的过程中使用的来自即将到来的块的信息。软件流水线部件可生成在确定配置的过程中使用的对一个或多个块的统计。在至少一些实施例中,阶段处的软件流水线部件可获取来自该阶段处的对一个或多个块的处理的信息,并将该信息传回到流水线的一个或多个上游阶段,以针对对当前块或即将到来的块的处理来配置那些上游阶段。此外,在至少一些实施例中,流水线末尾处或末尾附近的软件流水线部件可将块处理结果或统计值传回到流水线开头处或开头附近的另一软件流水线部件,以用于在流水线中处理即将到来的块。
由阶段处的软件流水线部件获取的并且用于确定该阶段处的用于处理下一个块的配置的块信息可例如包括与该块相关和/或与一个或多个其他块相关的各种统计值。在下面提供可在一些实施例中使用但并非旨在进行限制的块统计值的一些实例:
·像素和(s)。
·像素平方和(s2)。
·块方差(可由s和s2来估计,例如var=s2-(s)^2)。
·水平梯度和竖直梯度(Gx和Gy)。
·Gx和Gy的梯度直方图。
由各个阶段处的硬件流水线部件执行的操作可不同,因此该阶段处的硬件流水线部件的配置可不同。因此,阶段处的软件流水线部件可根据阶段处的相应硬件流水线部件来确定和设置特定配置参数。然而,可在阶段处由软件流水线部件基于信息分析来确定和设置的配置参数的一般性实例在下面给出,并且并非旨在进行限制。
流水线的一个或多个阶段可执行操作,以确定用于处理给定块中的像素的最佳模式。在特定阶段处,硬件流水线部件可接收来自一个或多个上游阶段的信息(并且可能还有来自一个或多个下游阶段的反馈),并使用该信息来选择多个模式中的特定模式。阶段处的软件流水线部件可接收、生成、并分析与块相关的统计值(例如块方差),并根据分析来设置一个或多个配置参数,以例如在块方差高的情况下使得硬件流水线部件尝试多种模式,或者在块方差低的情况下使得硬件部件朝向一个或多个特定模式。
在至少一些实施例中,应用实施并行的软件硬件流水线和硬件流水线的块处理流水线可根据骑士顺序将块输入到流水线中并在流水线中处理该块,如标题为骑士顺序处理的部分中所述的。然而,在一些实施例中可使用其他块输入和处理顺序。在至少一些实施例中,应用实施并行的软件硬件流水线和硬件流水线的块处理流水线的至少一个阶段可实施一个或多个本地缓冲器,以用于对该阶段处的相邻块的数据进行高速缓存,如在标题为 相邻块数据进行高速缓存的部分中所述的。
图3是根据至少一些实施例的用于实施软件流水线302和硬件流水线304的示例性块处理流水线300的高级框图。软件流水线302和硬件流水线 304并行处理来自帧的块,其中软件流水线302比硬件流水线304提前至少一个块。流水线300可包括多个阶段320,每个阶段被配置为对来自帧(例如视频帧)的像素块执行一个或多个操作。这些阶段(图3中的阶段320A 和320B)中的至少一些阶段可各自包括至少一个流水线单元330,该至少一个流水线单元330包括软件流水线部件322和硬件流水线部件326。每个流水线单元330的硬件流水线部件326可在硬件流水线304中对当前在阶段320处的块执行块处理方法的一个或多个特定操作。在给定流水线单元 330的硬件流水线部件326正在工作于阶段320处的当前块时,阶段320处的流水线单元330的软件流水线部件322可针对对即将到来的块(其可以是下一个块)的处理来预先配置硬件流水线部件326。因此,软件流水线 302比硬件流水线304提前一个或多个块而操作。
例如,如图3所示,在阶段320B处,硬件流水线部件326B当前正在处理块i,而软件流水线部件326B正在配置硬件流水线部件326B以处理块 i+1,并且在阶段320A处,硬件流水线部件326A当前正在处理块i+1,而软件流水线部件322A正在配置硬件流水线部件326A以处理块i+2。
阶段320处的流水线单元330的软件流水线部件322可根据即将到来的块(例如下一个块)的信息来确定相应流水线单元330的硬件流水线部件326处的用于处理该块的配置。块的信息可至少包括从上游阶段接收的块信息。在至少一些实施例中,信息还可包括来自先前在阶段320处进行处理的一个或多个块的反馈信息。软件流水线部件322可根据所确定的配置针对对该块的处理来预先配置阶段320处的流水线单元330的硬件流水线部件326,例如通过设置耦接到硬件流水线部件326的一组寄存器或其他存储器中的一个或多个配置值来进行预先配置。一旦流水线单元330的硬件流水线部件326处的用于对该块进行处理的配置准备就绪,软件流水线部件322便可发信号通知流水线单元330的硬件流水线部件326。假设硬件流水线部件326已完成对前一个块的处理并且下一个块可供硬件流水线部件326使用(例如准备好被从其输入缓冲器读取),则流水线单元330的硬件流水线部件326可开始根据由流水线330的软件流水线部件322所确定和预先配置的块的配置来处理下一个块。
在至少一些实施例中,流水线的初始阶段310可将块信息输入到软件流水线302并将块输入到硬件流水线304。初始阶段310可例如经由直接存储器存取(DMA)从外部存储器获取块输入,并在块缓冲部件312中缓冲该块。块缓冲部件312可具有保持一个块、两个块或更多个块的能力。例如在一些实施例中,块缓冲部件312可能够缓冲16个块。在至少一些实施例中,块缓冲部件312可在初始阶段310开始向硬件流水线304输入块之前缓冲用于至硬件流水线304的输入的一个块、两个块或更多个块。在至少一些实施例中,一旦初始阶段310开始向硬件流水线304输入块,初始阶段310便可在流水线单元330A准备好接收下一个块时将下一个块从块缓冲部件312写到阶段320A处的流水线单元330A的硬件流水线部件326A的缓冲存储器。初始阶段310可继续获取帧的块输入,将块缓冲到块缓冲部件312,并将块输入到硬件流水线304,直到帧中的所有块被处理。
初始阶段310处的块分析部件314可对当前在块缓冲部件312中缓冲的一个或多个块(包括要输入到硬件流水线304的下一个块)执行一个或多个分析功能,以生成下一个块的块信息。块信息可例如包括一个或多个块统计值。可被生成的块统计值的一些非限制性实例先前被提供。一旦针对下一个块生成了块信息,初始阶段310便可将块信息发送到流水线300 的阶段320A处的流水线单元330A的软件流水线部件322A。块分析部件 314可继续生成块信息并将块信息输入到软件流水线302,直到帧中的所有块被处理。
在至少一些实施例中,每个流水线单元330的软件流水线部件322可包括用于缓冲一个、两个、或更多个即将到来的块的块信息的存储器。在至少一些实施例中,每个流水线单元330的硬件流水线部件326可包括用于存储要在阶段320处处理的一个或多个块的存储器。在至少一些实施例中,存储器可以是双缓冲器,使得在硬件流水线部件326正在从存储器中读取当前块时,前一阶段可将下一个块写到存储器。
在至少一些实施例中,流水线单元330的软件流水线部件322可将每个块的块信息推送到下游阶段320处的流水线单元330的软件流水线部件 322,使得下游阶段320处的软件流水线部件322可配置该阶段处的相应硬件流水线部件326。在至少一些实施例中,阶段320处的流水线单元330的软件流水线部件322在完成阶段320处的用于处理块的预先配置之前不将该块的块信息推送到下游阶段320。在至少一些实施例中,在将块的块信息推送到下游阶段320之前,块信息可根据阶段320处可用的信息来进行更新。
一旦阶段320处的硬件流水线部件326已完成对块的处理,则经处理的块可被发送至下一阶段320处的硬件流水线部件326以进行处理。下一阶段320处的硬件流水线部件326可将该块保持在其存储器中,直到硬件流水线部件326已完成对当前块的处理并且已接收到来自阶段320处的流水线单元330的软件流水线部件322的用于对块进行处理的配置准备就绪的信号。需要指出,经处理的块反而可被流水线300的最后一个阶段320 写到流水线300外部的存储器。
图4A至图4C根据至少一些实施例示出了用于实施软件流水线和硬件流水线的示例性块处理流水线中的阶段的流水线单元处的对块的处理。图 4A至4C示出了可在包括软件流水线部件322和硬件流水线部件326的块处理流水线中的阶段处使用的流水线单元330。流水线单元330的硬件流水线部件326可在硬件流水线304中对当前在该阶段处的块执行块处理方法的一个或多个特定操作。在硬件流水线部件326正在工作于当前块时,流水线单元330的软件流水线部件322可针对对即将到来的块(例如下一个块)的处理来预先配置硬件流水线部件326。因此,流水线单元330的软件流水线部件322比流水线单元330的硬件流水线部件326提前至少一个块而操作。
流水线单元330还可包括配置存储器(在图4A至4C中被图示为配置存储器324A和324B)。配置存储器例如可以是一组硬件寄存器。如图4A 至4C所示,在至少一些实施例中,配置存储器可被分成两个存储器(配置存储器324A和324B),使得流水线单元330的软件流水线部件322可在硬件流水线部件326正在从其他存储器进行读取时向一个存储器进行写入。配置存储器例如可以是被分成活动寄存器的子组和影子寄存器的子组的一组寄存器,其中软件流水线部件322将下一个块的配置写到活动寄存器的子组中,硬件流水线部件326从影子寄存器的子组读取当前块的配置。在至少一些实施例中,软件流水线部件322可对配置存储器324A和 324B中的任一个配置存储器进行写入,并且硬件流水线部件326可从配置存储器324A和324B中的任一个配置存储器进行读取;这两个部件均可在存储器324之间进行切换,其中软件流水线部件322在硬件流水线部件326 正从其他配置存储器进行读取时对一个配置存储器进行写入。另选地,在一些实施例中,软件流水线部件322可对配置存储器324中的仅一个配置存储器(例如配置存储器324A)进行写入,并且硬件流水线部件326可仅从其他配置存储器324(例如配置存储器324B)进行读取;当硬件流水线部件326准备好用于新配置并且该配置准备就绪时,该配置可从配置存储器324A复制到配置存储器324B。需要指出的是,也可实施仅使用单个配置存储器或者使用多于两个配置存储器的实施例。
图4A示出了初始状态处的阶段的流水线单元330。软件流水线部件 322从上游阶段接收要在该阶段处理的来自帧的第一个块(块i)的块信息。硬件流水线部件326当前并没有正在处理块。软件流水线部件322根据所接收的块信息来确定用于处理块i的配置,并将该配置写到配置存储器 324A。软件流水线部件322发信号通知流水线单元330的硬件流水线部件 326该块i的配置准备就绪,例如通过设置GO位或标志来进行通知。
图4B示出了下一周期处的流水线单元330。软件流水线部件322将块 i的块信息推送到下游阶段。硬件流水线部件326接收块i并根据配置存储器324A中的配置来处理块i。软件流水线部件322接收要在该阶段处理的下一个块(块i+1)的块信息。软件流水线部件322根据所接收的块信息来确定用于处理块i+1的配置,并将该配置写到配置存储器324B。软件流水线部件322发信号通知硬件流水线部件326该块i+1的配置准备就绪,例如通过设置GO位或标志来进行通知。
图4B示出了下一周期处的流水线单元330。软件流水线部件322将块 i+1的块信息推送到下游阶段。硬件流水线部件326接收块i+1并根据配置存储器324B中的配置来处理块i+1。软件流水线部件322接收要在该阶段处理的下一个块(块i+2)的块信息。软件流水线部件322根据所接收的块信息来确定用于处理块i+2的配置,并将该配置写到配置存储器324A。软件流水线部件322发信号通知硬件流水线部件326该块i+2的配置准备就绪,例如通过设置GO位或标志来进行通知。
图4C还示出了来自阶段处的先前处理的块的信息可被该阶段处的软件流水线部件322获取并被用于确定将由该阶段处的硬件流水线部件326处理的下一个块的配置。硬件流水线部件326在前一周期处完成对块i的处理,如图4B所示的,并且在图4C处,现在正在处理块i+1。因此,来自该阶段处的对块i的处理的信息可供使用,并且可被反馈回到该阶段处的流水线单元330的软件流水线部件322。来自该阶段处的对块i的处理的信息可与从上游阶段接收的块i+2的块信息结合使用,以确定块i+2的配置。因此,来自阶段处的对块的处理的信息的反馈可以是针对比正针对其生成配置的块提前两个块的块。
另选地,在一些具体实施中,软件流水线部件322可等待由该阶段处的硬件流水线部件326完成对当前块的处理,并使用该信息来确定下一个块的配置。在这种情况下,来自阶段处的对块的处理的信息的反馈可以是针对比正针对其生成配置的块仅提前一个块的块。
图5根据至少一些实施例示出了用于实施软件流水线和硬件流水线的示例性块处理流水线300,其中软件流水线跳过至少一个阶段。在一些流水线具体实施中,流水线300的一个或多个流水线单元330可包括不需要动态配置的硬件流水线部件326。图5示出了三个阶段320A、320B和 320C。阶段320A包括具有软件流水线部件322A和硬件流水线部件326A两者的流水线单元330A,并且阶段320C包括具有软件流水线部件322B和硬件流水线部件326C两者的流水线单元330C。然而,阶段320B包括具有不需要动态配置的硬件流水线部件326B的流水线单元330B,因为部件326 对块执行的一个或多个操作针对所有块是相同的。因此,流水线单元330B 不利用软件流水线部件322。
如图5所示,阶段320A处的硬件流水线部件326A当前正在处理块 i+2,而阶段320A处的软件流水线部件322A正在针对阶段320A处的对下一个块(i+3)的处理来确定和设置配置。阶段320B处的硬件流水线部件 326B当前正在处理块i+1。阶段320C处的硬件流水线部件326C当前正在处理块i,而阶段320C处的软件流水线部件322B正在针对阶段320A处的对下一个块(i+1)的处理来确定和设置配置。在至少一些实施例中,一旦阶段320A完成用于对块i+2进行处理的配置,块i+2的块信息可从软件流水线部件322A向下游推送到软件流水线部件322B,并且在软件流水线部件322B处缓冲,直到软件流水线部件322B准备好配置硬件流水线部件 322C以处理块i+2。另选地,阶段320B可包括缓冲器,块信息从阶段 320A推送到该缓冲器,并且块信息从该缓冲器推送到阶段320C。作为另一替代形式,阶段320A可缓冲其被完成的块信息,直到阶段320C针对该信息准备就绪。
图6根据至少一些实施例示出了用于实施软件流水线和硬件流水线的示例性块处理流水线300,其中至少一个阶段包括多个流水线单元。如图6 所示,阶段320A包括具有软件流水线部件322A和硬件流水线部件326A 的单个流水线单元330A,并且阶段320C包括具有软件流水线部件322C和硬件流水线部件326D的单个流水线单元330C。然而,阶段320B包括两个流水线单元330B和330C。流水线单元330B包括软件流水线部件322B和硬件流水线部件326B。流水线单元330C仅包括硬件流水线部件326C。在硬件流水线304中,来自阶段320A处的流水线单元330A的块或部分块经过阶段320B的硬件流水线部件326B和硬件流水线部件326C两者,这两个硬件流水线部件将经处理的块或部分块输出到阶段320C中的流水线单元 330D的硬件流水线部件326D。在软件流水线302中,块信息从阶段320A 处的软件流水线单元322A传递到阶段320B处的软件流水线单元322B,并且从阶段320B处的软件流水线单元322B传递到阶段320C处的软件流水线单元322C。
虽然没有示出,但在一些具体实施中,阶段可包括具有软件流水线部件322和硬件流水线部件336两者的两个或更多个流水线单元330。在这种情况下,上游阶段可将块信息馈送到阶段320处的每个流水线单元的软件流水线部件322。然而,在至少一些实施例中,软件流水线部件322中的仅一个软件流水线部件可将块信息推送到下游阶段320处的流水线单元330 的软件流水线部件322。
图7根据至少一些实施例示出了可在用于实施软件流水线和硬件流水线的块处理流水线的阶段处使用的示例性流水线单元的部件。如图7所示,流水线单元400的硬件流水线部件404可至少包括存储器432和单元内核430。单元内核430可以是被配置为在块处理流水线的特定阶段处对块或块的部分执行特定操作的部件(例如电路)。存储器432例如可以是允许单元内核430在下一个块的数据正被从前一流水线单元写到存储器432 时从存储器432读取和处理块的数据的双缓冲存储器。
如图7所示,除了包括存储器432和单元内核430的硬件流水线部件 404之外,流水线单元400还可包括至少具有处理器410和存储器412的软件流水线部件402。处理器410例如可以是移动处理器或M级处理器。处理器410例如可被配置为根据在软件流水线部件402处接收的块信息来确定和设置用于将在硬件流水线单元404处处理的下一个块的配置。在至少一些实施例中,处理器410还可被配置为例如具有低级固件微码,以允许由各个应用程序的块处理流水线实施的算法的灵活性。
在至少一些实施例中,软件流水线部件402可被配置为从流水线的先前(上游)阶段接收块信息并将块信息发送到流水线的后续(下游)阶段。此外,流水线的最后一个阶段处的软件流水线部件402可被配置为将反馈数据发送到流水线的上游阶段(例如第一阶段)。在至少一些实施例中,软件流水线部件402还可接收先前被流水线单元400的硬件流水线部件404处理的块的信息。
软件流水线部件402可将从流水线的上游阶段接收的块信息在存储器 412中缓冲,并将块信息从存储器412推送到流水线的下游阶段。在至少一些实施例中,存储器412可以是双缓冲存储器,使得上游阶段可在处理器 410正在从存储器412访问前一个块的块信息时将下一个块的块信息推送到软件流水线部件402。在一些实施例中,存储器412可能够缓冲多于两组的块信息,例如在先前阶段不包括由图5中的阶段320B所示的软件流水线部件的情况下。
处理器410可从存储器412读取下一个块的块信息,并根据块信息确定下一个块的配置。在至少一些实施例中,处理器410还可接收先前由流水线单元400的硬件流水线部件404处理的块的信息,并在确定下一个块的配置的过程中使用该信息。
如图7所示,流水线单元400还可包括软件流水线部件402与硬件流水线部件404之间的接口406。在至少一些实施例中,接口406可以是一组寄存器。然而,需要指出,接口406可以其他方式来实施。在图7所示的流水线单元400中,接口406至少包括配置存储器420A、配置存储器420B 和GO 422。在至少一些实施例中,处理器410可对配置存储器420A和 420B中的任一个配置存储器进行写入,并且单元内核430可从配置存储器 420A和420B中的任一个配置存储器进行读取;处理器410和单元内核430 可在这两个存储器420之间进行切换,其中处理器410在单元内核430正在从其他配置存储器进行读取时对一个配置存储器进行写入。另选地,在一些实施例中,处理器410可对配置存储器420的仅一个配置存储器(例如配置存储器420A)进行写入,并且单元内核430可仅从其他配置存储器 420(例如配置存储器420B)进行读取;当单元内核430准备好用于新配置并且该配置准备就绪时,该配置可从配置存储器420A复制到配置存储器 420B。需要指出的是,也可实施仅使用单个配置存储器或者使用多于两个配置存储器的实施例。
GO 422例如可被实施为寄存器或其他存储器中的一个或多个位,或者可以其他方式来实施。在至少一些实施例中,当处理器410完成下一个块的配置并且已利用该配置设置配置存储器420(例如配置存储器420A) 时,处理器410可设置GO 422以发信号通知单元内核430该下一个块的配置在配置存储器420(例如配置存储器420A)中准备就绪。如果对当前块的处理完成并且下一个块在存储器432中准备就绪,则一旦针对下一个块设置了GO 422,单元内核430便可开始处理下一个块。否则,单元内核 430可等待,直到对当前块的处理完成和/或下一个块在存储器432中准备就绪。需要指出,初始地(针对流水线中的第一个块),在处理器410针对第一个块配置该阶段时在该阶段处没有任何块正在被处理,因此单元内核430可一旦针对第一个块设置了GO 422并且第一个块在存储器432中准备就绪,便开始处理第一个块。一旦单元内核430完成配置存储器420中的配置,单元内核430便可清除GO 422以发信号通知处理器410该配置存储器420可供用于接收下一个块的配置。
图8A和8B是根据至少一些实施例的在块处理流水线中并行操作来处理来自帧的块的软件流水线和硬件流水线的操作的方法的流程图。图8A示出了软件流水线的阶段处的操作,并且图8B示出了硬件流水线的该阶段处的操作。需要指出,软件流水线比硬件流水线提前至少一个块而运行。
参考图8A,如500处所示,阶段处的软件流水线部件接收块信息。块信息可包括从上游阶段接收的块信息、和/或从下游阶段接收的块信息。在至少一些实施例中,软件流水线部件还可接收来自先前在该阶段处理的帧的块的信息。一个块、两个块或更多个块的块信息可在软件流水线部件的本地存储器中缓冲。如返回到元素500的箭头所示的,只要在该帧中存在要被处理块的,元素500便可迭代执行。
如502处所示,一旦下一个块的块信息在该阶段处准备就绪,软件流水线部件便可根据所接收的该块的信息来确定该块的配置。如504处所示,软件流水线部件可将该块的配置写到该阶段的配置存储器。如506处所示的,软件流水线部件可设置GO位或以其他方式发信号通知该阶段处的硬件流水线部件该下一个块的配置在配置存储器中准备就绪。如506处所示,软件流水线部件然后可将该块的块信息推送到下游阶段。在510 处,如果有来自该帧的更多块要在该阶段处进行处理,则软件流水线方法可返回到元素502,以开始为下一个块配置硬件流水线部件。否则,该阶段处的对该帧的处理完成并且该方法结束。
参考图8B,阶段处的硬件流水线部件从前一阶段接收要处理的块。块信息可在硬件流水线部件的本地存储器中缓冲。在至少一些实施例中,本地存储器可以是双缓冲存储器,使得在硬件流水线部件正在处理来自存储器的当前块时,前一阶段可将下一个块写到该阶段。如返回到元素550的箭头所示的,只要在该帧中存在要被处理的块,元素550便可迭代执行。
在552处,如果硬件流水线部件当前并没有正在处理块,下一个块在存储器中准备就绪,并且软件流水线部件已发信号通知硬件流水线部件该下一个块的配置在配置存储器中准备就绪(例如通过设置GO位或标志来进行通知),则硬件流水线部件可开始处理下一个块。在至少一些实施例中,如果这三个条件中的任一个条件没有被满足,则硬件流水线部件等待,直到所有这三个条件均被满足。然而,需要指出,针对要处理的帧中的第一个块,当在硬件流水线部件处接收第一个块以进行处理时,在硬件流水线部件处将没有当前块正在被处理。
如果所有必要的条件均被满足,则如554所示,硬件流水线部件根据配置存储器中的配置来设置用于处理下一个块的配置。如556处所示,硬件流水线部件清除GO位或以其他方式发信号通知软件流水线部件该配置存储器可供使用。如558所示,硬件流水线部件根据块的配置来处理该块。如560处所示,硬件流水线部件将经处理的块写到下一阶段。作为另外一种选择,在最后一个阶段处,经处理的块可被写到存储器,例如经由直接存储器存取(DMA)被写到外部存储器。在562处,如果存在来自该帧的更多的块要在该阶段处进行处理,则硬件流水线方法可返回到元素 552,以在所有条件均满足时开始处理下一个块。否则,该阶段处的对该帧的处理完成并且该方法结束。
需要指出,在由阶段处的硬件流水线部件执行图8B的元素554至560 之前,由该阶段处的软件流水线部件针对帧中的初始块来执行图8A的元素 502至元素508。之后,在由硬件流水线部件执行图8B的元素554至元素 560以处理当前块时,该阶段处的软件流水线部件执行图8A的元素502至元素508以针对下一个块来配置硬件流水线部件。
骑士顺序处理
描述了块处理方法和装置的实施例,其中不是如常规方法中那样在流水线中根据扫描顺序来处理该块,而是块根据在本文中被称为“骑士顺序”的顺序来被输入到流水线并在流水线中被处理。骑士顺序是指国际象棋中骑士的移动,其中骑士向下移动一行并向左移动两列。然而需要指出,本文所使用的“骑士顺序”更一般性地涵盖向下一行并向左p列的移动,其中p可以是2但并非必然是2。
骑士顺序处理方法可提供流水线中的相邻块之间的间隔(一个或多个阶段),这例如有利于从流水线处理第一个块的下游阶段向流水线处理依赖于来自第一个块的数据的第二个块的上游阶段的数据反馈。块处理流水线的一个或多个阶段在处理给定块时可能需要来自一个或多个其他相邻块的信息。图9示出了可能需要来自其的信息的当前块(m,n)的相邻块:左相邻块(m-1,n);上相邻块(m,n-1);左上相邻块(m-1,n-1);右上相邻块(m+1,n-1);和右右上相邻块(m+2,n-1)。对来自一个或多个相邻块的信息的这些需要可被称为依赖性。例如参考图9,可能需要来自块(m,n)的左相邻块的信息来对该块执行特定操作。在骑士顺序处理方法中,不是将块(m+1,n)紧接着块(m,n)输入到流水线中,相反,输入到流水线的下一个块是块(m- 2,n+1)。按骑士顺序而不是按扫描顺序将块输入到流水线中提供了流水线中的行上的相邻块之间的间隔(例如一个或多个阶段)。
在骑士顺序处理方法的至少一些实施例中,输入帧中的块的行可被分成四个行的集合,在本文中称为四行,其中骑士顺序处理方法受四行边界约束。参考图9,在使用具有骑士顺序处理的四行边界时,块(m-1,n)在块 (m,n)被输入到流水线时将在下游四个阶段,并且块(m,n)在块(m+1,n)被输入到流水线时将在下游四个阶段。因此,行上相邻的块将在流水线中间隔开四个阶段。因此,在对依赖于左相邻块信息的块执行操作的阶段处,左相邻块的信息比在按扫描顺序处理块的情况下更可能以更少的延迟而容易得到。除了对左相邻块的依赖性之外,块处理方法的一个或多个操作可能依赖于来自前一(或上一)行的相邻块,诸如图9所示的上相邻块、左上相邻块、右上相邻块、以及右右上相邻块。具有四行约束的骑士顺序处理方法提供了相邻块信息的定域性,可利用该定域性来提供在每个阶段处的在相对小的缓冲器中的对该相邻块数据的本地高速缓存。
在至少一些实施例中,用于根据使用四行约束的骑士顺序处理方法确定要输入到流水线的下一个块的基本算法如下:
如果不在四行的底行上:
则下一个块是向左两列向下一行(-2,+1)。
否则,如果在四行的底行处:
则下一个块是向右七列向上三行(+7,-3)。
然而,骑士顺序处理方法也可以除了向左两个块向下一个块(-2,+1)之外的其他间距来实施。例如,不是向左两个块向下一个块,该方法可被实施为向左三个块向下一个块来行进,以获取下一个块。又如,该方法可被实施为向左一个块向下一个块(-1,+1)来行进,以获取下一个块。此外,骑士顺序处理方法可以除了四行(四个行)约束之外的其他行约束来实施。换言之,在实施例中可使用至少两个行的行群组来约束骑士顺序处理方法。假设r为用于约束骑士顺序处理方法的行的数量,则该算法可被概括为:
如果不在行群组的底行上:
则下一个块是向左p列向下一行(-p,+1)。
否则,如果在行群组的底行处:
则下一个块是向右q列向上(r-1)行(+q,-(r-1))。
改变p的值将影响q的值,而不会影响来自流水线中的行的相邻块之间的间距,而是将影响给定块与其其他相邻块(例如其左上相邻块、上相邻块、和右上相邻块)之间的间距。具体地,需要指出,使用间距(-1,+1) 将导致块与其对角线(右上)相邻块在流水线的相邻阶段处同时进行处理。因此,可使用至少向左两个块的间距,使得对角线相邻块在块处理流水线的相邻阶段处不同时进行处理。改变r的值将影响q的值,将影响来自流水线中的行的相邻块之间的间距,并且将影响块与其其他相邻块(例如其左上相邻块、上相邻块、和右上相邻块)之间的间距。
用于确定下一个块的以上算法可从初始块开始。在到达另一个四行之前的一个四行的末尾时,该算法跳到下一个四行的第一个块,然后在一些周期上在该四行与下一个四行之间交叉,从而得到来自该四行的末尾的一些块与来自下一个四行的开头的一些块的交织。换言之,骑士顺序处理方法对待这些四行就好像它们是首尾相连地被布置那样。为了避免算法复杂以及为了在流水线中保持块间距的一致性,至少一些实施例可利用无效块来填塞第一个四行的开头和最后一个四行的末尾。无效块可被定义为在帧边界之外以及被输入到流水线中但不包含有效帧数据因此不在阶段处被处理的块。用于确定下一个块的算法因此可从初始块开始,该初始块可以是第一个四行的顶行中的第一个块或者是第一个四行的顶行中的第一个块左边的无效块,继续对所有这些四行进行处理,并且在最后一个四行的末尾处继续,直到最后一个四行的最后一个块已被输入到流水线中。在帧的开头和末尾处在流水线中将有气泡,但来自流水线中的帧的有效块的间距将始终保持一致。在一些实施例中,作为利用无效块填塞视频帧的最后一个四行的末尾的替代形式,视频帧的最后一个四行可与块处理流水线中要处理的下一视频帧的第一行重叠。
图10A和10B根据至少一些实施例图解地示出骑士顺序处理方法。为了简明起见,这些附图使用被分成144个16×16像素块的示例性192×192 像素帧,其具有12行和12列的块。然而,应当指出,骑士顺序处理方法可应用于任何尺寸的输入视频帧。在图10A中,示例性帧被分成多行和多列的块。块的这些行被分成各自包括四个行的三个四行。第一个四行的最后三行在左边被填塞有无效块,并且最后一个(第三个)四行的前三行在右边被填塞有无效块。在这个实例中,块中的数字代表块根据骑士顺序处理方法被输入到块处理流水线的顺序,从块0(第一个四行的顶行中的第一个块)开始。块0被输入到流水线的第一阶段,并且当第一阶段准备好用于另一个块时,通过向左两列向下一行行进得到用于输入的下一个块(图 10A中的块1),该方法继续进行。重复这个模式,直到到达这个四行的底部。在这个四行的底部处,该方法向右七列向上三行行进得到下一个块。这继续,直到帧中的所有块(以及图10A中所示的所有无效块)被输入到流水线中。当到达一个四行的末尾时,如果在该四行之后存在另一个四行,则输入算法前进到下一个四行的开头。在这个实例中,在块47被输入之后,该方法前进到块48(第二个四行的顶行中的第一个块)。如从块47 向块44右边的被标记为48的虚线框的虚线箭头所示的,第二个四行的顶行的第一个块(块48)被视为就如同直接在第一个四行的顶行的最后一个块(块44)右边那样,因此从块47通过向右七列向上三行行进而到达。换言之,骑士顺序处理方法将该四行视为就如同它们是首尾相连地布置那样,其中无效块在每个末尾处,如图10B所示。因此,用于确定下一个块的算法在整个帧上保持相同。
在一些实施例中,第一个四行中的每个行可被填塞有另外的无效块,例如被填塞有两个另外的无效块。不是如图10A所示从第一个四行的顶行中的第一个块开始,对流水线的输入可开始于第一个四行的顶行中的第一个块左边的第一个无效块。
图11A和11B是根据至少一些实施例的用于块处理流水线的骑士顺序处理方法的高级流程图。在图11A中,如3100所示,根据通过骑士顺序处理方法实施的用于确定下一个输入块的算法来确定下一个块。如3102所示,块被输入到流水线,例如经由直接存储器存取(DMA)来从存储器输入到流水线。如3104所示,只要有块要被处理,元素3100和3102的输入过程便继续进行。被元素3100和3102输入到流水线的每个块在流水线中被处理,如3106所示。每个块首先被输入到流水线的第一阶段、被处理、被输出到第二阶段、被处理、以此类推。当块从流水线的一个阶段移动到下一阶段时,该阶段可开始处理流水线中的下一个块。因此,输入块穿过流水线的各个阶段,其中每个阶段一次处理一个块。如3108所示,一旦块已被流水线的最后一个阶段处理,经处理的块便被输出,例如经由直接存储器存取(DMA)被输出到存储器。
图11B是可通过骑士顺序处理方法实施的用于确定下一输入块的示例性算法的流程图,并且在图11A所示的元素3100上展开。图11B假设帧被分成多个四行,并且用于确定下一个帧的算法是如果不在一个四行的底行上则向左两列向下一行(-2,+1),而如果在底行上则向右七列向上三行(+7,- 3)。然而,也可使用其他行分组和/或间隔算法。在3150处,如果在帧的开头,则该方法获取初始块,如3152处所示的。如果不是帧的开头,则在 3154处,如果是该四行的最后一行,则下一个块是向右七列向上三行,如 3156处所示的。如果不是该四行的最后一行,则下一个块是向左两列向下一行,如3158处所示的。
对相邻块数据进行高速缓存
在块处理流水线的阶段处执行的一个或多个操作可能依赖于前一(或上一)行的块中的一个或多个相邻块,诸如上相邻块、左上相邻块、右上相邻块、和右右上相邻块、以及左相邻块,如图9所示。具有四行约束的骑士顺序处理方法提供了相邻块信息的定域性,可利用该定域性来提供在流水线的每个阶段处在相对小的本地缓冲器中对相邻块数据的本地高速缓存。在至少一些实施例中,本地缓冲器可使用SRAM(静态随机存取存储器)技术来实施。然而,本地缓冲器在一些实施例中也可使用其他存储器技术来实施。
需要指出,帧的第一列中的块不具有左相邻块或左上相邻块,最后一列中的块不具有右上相邻块或右右上相邻块,并且倒数第二列中的块不具有右右上相邻块。因此,针对使用来自这些相邻块位置的信息的块处理方法,本地缓冲器中的用于相对于那些列中的块的这些相邻块位置的信息不是有效的,并且在流水线的阶段中处理那些列中的块的过程中不被使用。此外,第一个四行的顶行上面没有行,因此这个行中的块不具有上相邻块、左上相邻块、右上相邻块、和右右上相邻块。
在实施骑士顺序处理方法的块处理流水线的至少一些实施例中,可在流水线的一个或多个阶段中的每个阶段处实施大小足以对当前四行上的C 个最新近处理的块进行高速缓存的第一缓冲器。这个缓冲器可被称为当前四行缓冲器,并且例如可被实施为圆形FIFO缓冲器。在至少一些实施例中,C可被确定,使得缓冲器包括根据用于确定下一个块的算法和用于约束骑士顺序方法的行群组大小的与该阶段处的当前块的左上相邻块对应的条目。缓冲器还可包括根据该算法的与当前块的右右上相邻块、左相邻块、右上相邻块、和上相邻块对应的条目。在处理块时,在该块的相邻块信息在当前四行缓冲器中有效的情况下,阶段可访问当前四行缓冲器以获取该块的相邻块信息。需要指出,一些块处理方法可能不需要左上相邻块信息,并且当前四行缓冲器在这些具体实施中可更小。
当阶段完成了对块的处理时,该块的信息被写到当前四行缓冲器中的最后位置,从而覆写该块的左上相邻块的位置处的条目,因此使缓冲器准备要在该阶段处处理的下一个块。需要指出,初始在帧的开头处,由于还没有处理该帧中的任何块,因此在当前四行缓冲器中没有任何信息,从而将不会在缓冲器中覆写任何块信息,直到缓冲器被填充。当下一个块在该阶段处时,缓冲器中的前一个块的信息是该块的右右上相邻块的信息。
例如,使用四行边界以及用于确定下一个块的算法(其中如果不是在四行的底行上,则下一个块是向左两列向下一行),C=13将足以包括当前块的左上相邻块,因为当前块与其左上相邻块之间的间距是13。图12根据至少一些实施例示出了可在当前四行缓冲器中进行高速缓存的根据骑士顺序处理方法在流水线中处理的四行的一部分。块19代表阶段处的当前块。暗色块代表该阶段最新近处理的13个块。需要指出,在时间上距离块19 最远的块是其左上相邻块(块6),而在时间上最近的块是其右右上相邻块 (块9)。
对于四行的顶行中的块,上一行中的相邻块的信息不在当前四行缓冲器中。在第一个四行的顶行上面没有行,而对于所有其他四行,顶行上面的行是前一个四行的底行。因此,当前四行缓冲器包括四行的顶行中的所有块(除了不具有左相邻块的第一个块)的左相邻块信息,但不包括该四行的顶行中的块的左上相邻块信息、上相邻块信息、右上相邻块信息、和右右上相邻块信息。为了为这些四行的顶行上的块提供相邻块信息,可在流水线的一个或多个阶段处实施大小足以保持来自前一个四行的最后一行的所需相邻块的信息的第二缓冲器。这个缓冲器可被称为先前四行缓冲器,并且例如可被实施为圆形FIFO缓冲器。先前四行缓冲器中的条目的数量以及在先前四行缓冲器中进行高速缓存的具体相邻块的数量可取决于由块处理流水线实施的具体块处理方法的要求。在至少一些实施例中,在根据骑士顺序处理方法处理四行时,该四行的底行上的每个块的信息可被写到外部存储器,例如在该块位于流水线的最后一个阶段处时。对于四行的顶行中的每个块,可例如在流水线的第一阶段处从外部存储器读取相邻块 (例如右右上相邻块)数据。这个相邻块信息可与来自顶行的对应块一起沿流水线向下传递到其他阶段。
图13根据至少一些实施例图解地示出根据骑士顺序处理方法处理的当前四行中的块,以及前一个四行的最后一行中的相邻块。块A、A+4、 A+8、和A+12根据骑士顺序处理方法在前一个四行中进行处理。块A首先被处理,块A+4在四个周期后被处理,以此类推。块B代表当前位于流水线的特定阶段处的当前四行上的块。块B-1(B减1)至B-13(B减13)代表在当前四行中的该阶段处最新近处理的13个块。来自这些块的信息目前可在该阶段的当前四行缓冲器中进行高速缓存,其中B-1作为最新近的条目并且B-13作为最老的条目。B-4是块B的左相邻块。然而,块B的左上相邻块(块A)、上相邻块(块A+4)、右上相邻块(块A+8)、和右右上相邻块(块A+12)位于前一个四行的底行上,并且不被包括在块B的当前四行缓冲器中。在至少一些实施例中,为了为当前四行的顶行上的块提供相邻块信息(例如左上相邻块信息、上相邻块信息、右上相邻块信息和右右上相邻块信息),可在流水线的一个或多个阶段中的每个阶段处实施先前四行缓冲器。在处理四行时,该四行的底行上的每个块的信息例如由流水线的最后一个阶段写到外部存储器中的相邻块数据结构。在处理下一个四行的顶行的块时,前一个四行的底行中是相邻块的信息例如由流水线的第一阶段从外部存储器读取,并与顶行块一起沿流水线向下传递至其他阶段。在至少一些实施例中,顶行中的块的右右上相邻块的信息从外部存储器读取。在至少一些实施例中,先前四行缓冲器是圆形缓冲器,并且先前四行缓冲器中的最老的条目被从外部存储器读取的相邻块信息替代。在各种实施例中,底行中的块被写到的并且从中读取相邻块信息的外部存储器可以是最后一个阶段外部的流水线部件的存储器、用于实施流水线的视频编码器的存储器、或者视频编码器外部的存储器。然而在一些实施例中,存储器可以是流水线的最后一个阶段的本地存储器。至少一些实施例可包括用于控制行之间的对外部存储器的读取和写入以避免覆写外部存储器中的数据的互锁机制。
图14是根据至少一些实施例的用于在块处理流水线中处理块的方法的流程图,其中相邻块数据在流水线的阶段处的本地缓冲器中进行高速缓存。例如,图14所示的方法可在图11A的元素3106处使用,以处理根据在图11A的元素3100、3102和3104处所示的骑士顺序处理方法输入到流水线的块。在图14中,块被输入到流水线。在4200处,在流水线的第一阶段处,如果块在四行的顶行上,则该块的相邻块数据可从外部存储器 (例如经由DMA)读入到如4202处所示的先前四行缓冲器中。在至少一些实施例中,相邻块数据对应于前一个四行的底行上的当前块的右右上相邻块。如4204处所示,块然后在当前阶段处被处理。如果该阶段处的操作为了处理该块需要相邻块信息,则该阶段可使用当前四行缓冲器中和/或先前四行缓冲器中的相邻块信息来执行该操作。如果该块在四行的顶行上,则从先前四行缓冲器获取至少一些相邻块信息;否则可从当前四行缓冲器获取相邻块信息。如4206所示,关于当前块的信息可被写到该阶段处的当前四行缓冲器,以供用于后续块。信息可覆写当前四行缓冲器中的最老的条目。
在4208处,如果还有更多的阶段,则该块可被发送到下一阶段,如 4210处所示。在4212处,来自先前四行缓冲器的相邻块信息也可被发送到下一阶段。在至少一些实施例中,这个相邻块数据只在当前块位于四行的顶行上时才被发送至下一阶段。元素4204至4212可重复,直到该块到达流水线的最后一个阶段并由流水线的最后一个阶段进行处理。在4208处,如果没有更多的阶段,则对流水线中的该块的处理完成。在4214处,如果该块在四行的底行上,则该块的信息(例如经由DMA)被写到外部存储器,以被读取作为下一个四行的顶行中的块的相邻块数据。此外,所有经处理的有效块被输出,如图11A的元素3108所示的。
示例性流水线单元
图15A至15C是根据至少一些实施例的可在实施本文所述的块处理方法和装置中的一者或多者的块处理流水线的阶段处使用的示例性流水线处理单元的框图。例如,图15A和15B所示的流水线单元5000A和/或5000B 中的一个或多个流水线单元可在图16所示的示例性块处理流水线的每个阶段处被用。需要指出,图15A至15C并非旨在进行限制:流水线处理单元可包括比图中所示的部件或特征更多或更少的部件和特征。
如图15A所示,流水线单元5000A可至少包括存储器5010和单元内核5020。单元内核5020可以是被配置为在块处理流水线的特定阶段处对块或块的一部分执行特定操作的部件(例如电路)。存储器5010例如可以是允许单元内核5020在下一个块的数据正被从前一流水线单元写到存储器 5010时从存储器5010读取数据和处理来自存储器5010的块的数据的双缓冲存储器。
如图15B所示,除了图15A所示的存储器5010和单元内核5020之外,流水线单元5000B还可包括处理器5030。该处理器5030例如可以是移动处理器或M级处理器。块处理流水线的流水线单元5000B中的处理器 5030例如可用于以块边界来控制块处理流水线。流水线单元5000B中的处理器5030可被配置为例如具有低级固件微码,以允许由各个应用程序的块处理流水线实施的算法的灵活性。在至少一些实施例中,流水线中的流水线单元5000B的处理器5030可被配置为从先前(上游)流水线单元5000B 的处理器5030接收数据并向后续(下游)流水线单元5000B的处理器 5030发送数据。此外,流水线的最后一个阶段处的流水线单元5000B的处理器5030可被配置为将反馈数据发送至流水线的第一阶段处的流水线单元 5000B的处理器5030。
如图15A和15B所示的,流水线单元5000A或5000B可被配置为例如根据直接存储器存取(DMA)来访问外部存储器。此外,流水线单元 5000A或5000B可被配置为将信息传回到流水线的一个或多个先前(上游)阶段和/或接收从流水线的一个或多个后续(下游)阶段传回的信息。此外,流水线单元5000A或5000B可被配置为将信息向前传到流水线的一个或多个后续(下游)阶段和/或接收从流水线的一个或多个先前(上游) 阶段向前传来的信息。
如图15C所示,图15A所示的两个或更多个单元5000A可被分组在一起并被配置为执行流水线中的操作。可使用单个处理器5030来控制和/或配置流水线单元5000A。
示例性块处理流水线
图16是根据至少一些实施例的可由可实施本文所述的块处理方法和装置中一者或多者的块处理流水线按阶段实施的针对H.264编码的示例性块处理方法6000的一般操作的高级框图。用于实施块处理方法6000的块处理流水线例如可被实施为被配置为将输入视频帧从输入格式转换为H.264/ 高级视频编码(AVC)标准中所述的H.264/AVC格式的H.264视频编码器装置的部件。H.264/AVC标准被ITU-T公布于标题为“ITU-T RecommendationH.264:Advanced video coding for generic audiovisual services”的文档中,该文档可被称为H.264建议书。示例性输入视频格式是在YCbCr色彩空间中编码的1080p(1920×1080像素,2.1兆像素)。然而,其他输入视频格式也可使用视频编码器装置中的流水线的实施例被编码为H.264。
视频编码器装置例如可被实施为集成电路(IC)或IC上的子系统诸如片上系统(SOC)。在至少一些实施例中,视频编码器装置可至少包括流水线部件、处理器部件(例如低功率多核处理器)、和使装置的功能部件互连的总线子系统或结构。视频编码器装置的处理器部件例如可执行流水线的帧级控制诸如速率控制,执行流水线配置,以及经由驱动器来与应用程序软件进行接口连接。流水线部件可实施多个处理阶段,每个处理阶段被配置为执行图16所示的操作中的一个或多个操作中的一部分或全部,每个阶段包括一个或多个处理单元。流水线中的处理单元中的至少一个处理单元可包括例如可在宏块级处配置相应阶段处的处理单元的参数的处理器部件(例如M级处理器)。视频编码器装置可包括其他功能部件或单元诸如存储器部件以及例如至一个或多个视频输入源和外部存储器的外部接口。视频编码器装置的示例性视频输入源可包括但不限于以下各项中的一者或多者:用于原始视频输入处理的视频摄像机、用于重新编码/编码变换的解码器装置、闪存存储器或其他存储器、以及JPEG解码器。在图15中示出了示例性视频编码器装置。在图16中示出了包括视频编码器装置的示例性SOC。虽然相对于用于实施具有骑士顺序处理的块处理方法6000的块处理流水线的硬件具体实施一般性地描述了实施例,但应当指出,具有骑士顺序处理的块处理方法6000可由以软件实施的块处理流水线来实施。
用于实施图16所示的方法6000的流水线可根据H.264标准来处理来自输入视频帧的16×16像素宏块,每个宏块包括可在流水线的阶段处分别进行处理的两个或更多个块或部分。输入视频帧例如可在YCbCr色彩空间中进行编码;每个宏块可由可在流水线的阶段处单独进行处理的色度和亮度元素的单独块构成。用于实施块处理方法6000的流水线可从存储器接收输入宏块并将经处理的宏块输出至存储器。存储器可包括视频编码器装置的存储器和/或视频编码器装置外部的存储器。在至少一些实施例中,存储器可被流水线根据需要进行访问,例如经由直接存储器存取(DMA)进行访问。在至少一些实施例中,存储器可被实施为具有在流水线和外部存储器之间实施的高速缓存存储器的多级存储器。例如在一些具体实施中,一个或多个四行可从外部存储器被读取并被高速缓存到高速缓存存储器以供流水线访问,以减少对外部存储器的读取的次数。
下面简要描述可由流水线在阶段中执行的图16所示的示例性H.264视频编码器方法6000的一般操作、以及通过流水线的一般数据流。方法6000 的一般操作中的每个一般操作可由流水线的一个或多个阶段处的一个或多个流水线单元来实施。图 15A 至 15C 中示出了示例性流水线单元。还应当指出,图16所示的每个一般操作可被细分为可由流水线的一个阶段、两个阶段或更多个阶段处的流水线单元实施的两个或更多个操作。然而,图16所示的操作中的两个或更多个操作可在流水线的同一阶段处执行。流水线中的每个阶段一次处理一个宏块,因此这些操作中的两个或更多个操作可同时操作于当前位于相应阶段处的相同宏块。需要指出,流水线可执行与图16所示及下文所述的操作相比更多、更少或不同的操作。
宏块输入
在至少一些实施例中,宏块输入6002可由流水线的初始阶段执行。在至少一些实施例中,宏块输入6002例如经由DMA从存储器接收亮度和色度像素,对输入像素计算由流水线的下游阶段中的固件使用的统计值,并缓冲输入宏块以使得固件能够预取。输入宏块像素数据及对应的统计值被缓冲并被发送至流水线的用于实施帧内估计和帧间估计6010操作的一个或多个下游阶段。在至少一些实施例中,针对输入像素和统计值维持最多至 16个宏块的输入缓冲器。宏块像素数据及对应的统计值可根据上文参考图 3至8B所述的骑士顺序输入算法而被输入到流水线的下游阶段。
在至少一些实施例中,宏块输入6002以四行边界从存储器读取来自前一个四行的底行的相邻块数据,并将相邻块数据传送至至少一个下游阶段。
帧内估计和帧间估计
帧内估计和帧间估计6010操作可确定要在对输入到流水线的宏块进行编码的过程中使用的先前编码的像素的块。在H.264视频编码中,每个宏块可使用当前帧内已编码的像素块来进行编码。确定这些块的过程可被称为帧内估计或简称为内估计。然而,宏块也可使用来自一个或多个先前编码的帧(被称为参考帧)的像素块来进行编码。寻找参考帧中的匹配像素块的过程可被称为帧间估计,或更一般性地被称为运动估计。帧内估计和帧间估计6010操作可被细分为可在流水线的一个阶段、两个阶段、或更多个阶段处执行的两个或更多个子操作,其中每个阶段处的一个或多个部件或流水线单元被配置为执行特定子操作。
在至少一些实施例中,宏块输入6002以四行边界从存储器读取来自前一个四行的底行的相邻块数据,并将相邻块数据传送至帧内估计和帧间估计6010,例如传送至帧内估计部件。此外,运动补偿和重构6030,例如亮度重构部件可将相邻块数据作为反馈传送至帧内估计和帧间估计6010,例如传送至帧内估计部件。
运动估计
在至少一些实施例中,为了执行运动估计,流水线可对于要搜索的每个参考帧包括运动估计引擎的实例。每个运动估计引擎仅搜索一个参考帧。在至少一些实施例中,每个运动估计引擎可包括低分辨率运动估计部件、全像素运动估计部件、和子像素运动估计部件。在至少一些实施例中,每个运动估计引擎的这三个部件可在流水线的不同阶段处被实施。在至少一些实施例中,每个运动估计引擎还可包括根据需要从存储器读取参考帧数据和存储来自存储器的参考帧数据的存储器部件。在至少一些实施例中,处理器的单个实例管理运动估计引擎的所有实例。在至少一些实施例中,处理器可使用预测的并且同一位置的运动矢量来确定一个或多个候选者,并将这些候选者输入到运动估计引擎的全像素运动估计部件。
在至少一些实施例中,每个运动估计引擎的低分辨率运动估计部件对相应参考帧的缩小的低分辨率版本执行穷举搜索,以生成候选者。在至少一些实施例中,全像素运动估计部件使用来自低分辨率运动估计部件的候选者来对全尺寸像素执行搜索。在至少一些实施例中,子像素运动估计部件使用从全像素运动估计部件接收的最佳候选者来对半像素和四分之一像素执行搜索。在一些实施例中,可基于在流水线的上游阶段处执行的直接模式估计的结果而禁用全像素运动估计和子像素运动估计。在至少一些实施例中,每个运动估计引擎将结果数据输出至模式判断6020。
在至少一些实施例中,运动估计还可包括直接模式估计部件,该直接模式估计部件接收同一位置的运动矢量数据以及空间运动矢量数据并计算直接/跳过模式成本,其将该直接/跳过模式成本提供至模式判断6020。基于该结果,直接模式估计部件可禁用全像素运动估计和子像素运动估计。
内估计
在至少一些实施例中,流水线的内估计部件执行内模式选择,以确定可在对当前宏块进行编码的过程中使用的当前帧内的已编码的像素块。在至少一些实施例中,内估计部件仅针对亮度执行内模式选择。在这些实施例中,色度内估计由流水线的下游阶段处的色度重构部件来执行。在至少一些实施例中,内估计部件可针对宏块中的两个或更多个块或部分(例如 4×4块、8×8块、4×8块、8×4块、16×8块、和/或8×16块)中的每一者独立地执行内估计。对于每个块,首先从相邻块提取预测像素(相邻块可在帧中的当前宏块之外或者在当前宏块内)。对于当前块中的每一个预测模式,通过根据相邻像素生成预测块、计算模式成本、并将模式成本与该块的最低成本进行比较来评估当前模式的成本。一旦所有预测模式均被评估并且确定了最佳模式,便可针对最佳模式执行重构,使得所重构的像素可用于预测宏块内的未来块。内估计部件可将最佳内模式信息传递至模式判断6020。
在至少一些实施例中,宏块输入6002以四行边界从存储器读取前一个四行的底行的相邻块数据,并将相邻块数据传送至内估计部件。在至少一些实施例中,至少一个下游阶段(例如下游阶段处的亮度重构部件)可将相邻块数据传回到内估计部件。
模式判断
在至少一些实施例中,模式判断6020可由在用于实施帧内估计和帧间估计6010操作的一个或多个阶段下游的流水线的阶段处的模式判断部件来实施。然而,在一些实施例中,模式判断6020操作可被细分为可在流水线的一个阶段、两个阶段、或更多个阶段处执行的两个或更多个子操作,其中每个阶段处的一个或多个部件或流水线单元被配置为执行特定子操作。在至少一些实施例中,模式判断6020部件接收来自内估计的最佳内模式、来自直接模式估计的直接/跳过模式成本、和来自运动估计引擎的运动矢量候选者。在至少一些实施例中,模式判断部件计算双向模式的附加成本并确定最佳宏块类型,包括宏块部分、子部分、预测方向和参考帧索引。在至少一些实施例中,模式判断6020部件还执行所有运动矢量预测。运动矢量预测结果可在模式判断期间估计运动矢量速率时使用。在至少一些实施例中,运动矢量预测结果也可从运动判断6020部件反馈到运动估计,例如以供在直接模式估计和运动矢量速率估计过程中使用。
运动补偿和重构
在至少一些实施例中,运动补偿和重构6030操作可被细分为可在流水线的一个阶段、两个阶段、或更多个阶段处执行的两个或更多个子操作,其中每个阶段处的一个或多个部件或流水线单元被配置为执行特定子操作。例如,在一些实施例中,运动补偿和重构6030可被细分为亮度运动补偿和重构以及色度运动补偿和重构。在至少一些实施例中,运动补偿和重构6030的这些子操作中的每个子操作可由流水线的一个或多个阶段处的一个或多个部件或流水线单元执行。
亮度运动补偿和重构
在至少一些实施例中,流水线的亮度运动补偿部件从模式判断6020接收最佳模式和对应运动矢量。如前所述,每个运动估计引擎可包括从存储器读取参考帧数据和存储来自存储器的参考帧数据的存储器部件。如果最佳模式被帧间预测,则亮度运动补偿部件从运动估计引擎请求与运动矢量对应的参考帧宏块。运动估计引擎根据请求大小返回经过子像素插值的 4×4块或8×8块。亮度运动补偿部件然后将这些块组合成预测宏块。亮度运动补偿部件然后对预测宏块应用加权预测,以生成最终宏块预测,该最终宏块预测然后被传递至亮度重构部件。
在至少一些实施例中,流水线的亮度重构部件执行针对亮度的宏块重构,包括内预测(在至少一些实施例中,亮度运动补偿部件执行帧间预测)、正变换和量化(FTQ)、和逆变换和量化(ITQ)。
在至少一些实施例中,基于来自模式判断6020的最佳模式,从亮度运动补偿部件传递帧间预测宏块,或者由亮度重构部件执行内预测以生成预测块。在内模式中,按块(扫描)顺序执行预测,因为为了未来块的预测,需要来自相邻块的重构像素。然后从预测块中减去输入块,以生成残余块。这个残余像素数据通过由亮度重构部件实施的FTQ技术来变换和量化。系数数据被发送至由亮度重构部件实施的ITQ技术,并且还可向下游发送至CAVLC编码。ITQ技术生成重构后的残余像素块。预测块被加到残余块,以生成重构块。重构的像素可向下游传递至解块滤波器。在至少一些实施例中,重构的像素还可被传回到帧内估计和帧间估计6010的帧内估计部件,以用于当前宏块内的未来块的预测。
色度运动补偿和重构
在至少一些实施例中,色度重构在两个阶段中执行。在第一阶段中,基于输入宏块类型、运动矢量、和参考帧索引来从存储器读取帧间预测所需要的色度参考块。然后应用子像素插值和加权预测来生成预测宏块。在第二阶段中,执行色度帧内预测和色度帧内/帧间FTQ/ITQ。这允许一个附加流水线阶段加载色度预测像素数据。由于运动估计不搜索色度像素,因此色度预测数据从外部存储器读取并且可能具有大的延迟。在至少一些实施例中,色度运动补偿部件执行第一阶段,而色度重构部件执行第二阶段。
在至少一些实施例中,色度运动补偿部件生成预测块,该预测块包括针对Cb色度块和Cr色度块的子像素插值;尺寸基于部分尺寸和色度格式。全尺寸色度块对于色度格式4:2:0、4:2:2和4:4:4分别为8×8像素、 8×16像素、或16×16像素。在至少一些实施例中,色度运动补偿部件可从(流水线)外部存储器预取和高速缓存色度预测像素。在至少一些实施例中,可基于模式判断6020结果来读取参考数据。色度运动补偿部件执行子像素插值,以生成预测块。模式判断6020提供宏块类型和子类型、每个部分的参考帧索引和对应的运动矢量。预测被输出至色度重构部件。
在至少一些实施例中,色度重构部件针对帧间模式和帧内模式执行色度预测、色度帧内估计和色度重构。对于色度格式4:2:0和4:2:2,执行帧内色度估计和预测。在至少一些实施例中,色度帧内估计在这个阶段处执行,而不是在帧内估计和帧间估计6010处执行,从而重构像素可在估计过程期间使用。在至少一些实施例中,如果最佳模式在帧内,则可基于最佳帧内色度模式来执行帧内色度估计,并且可使用四个帧内色度模式中的一种帧内色度模式来执行帧内预测。对于帧间宏块,从色度运动补偿接收帧间色度预测像素。对于色度格式4:4:4,使用亮度帧内预测模式来生成色度块预测,并且以与亮度相同的方式执行帧间色度预测。因此,色度重构概念性地包括用于重构4:4:4色度格式的色度的4:2:0和4:2:2色度重构和亮度重构。
CAVLC编码和解块
在至少一些实施例中,可由流水线的最后一个阶段处的一个或多个部件执行CAVLC编码和解块。在至少一些实施例中,流水线的解块滤波器部件从色度重构部件接收重构亮度和色度像素,并根据H.264建议书来执行解块滤波。结果可被输出到存储器。
在至少一些实施例中,流水线的CAVLC编码部件从色度重构部件至少接收亮度和色度量化系数、相邻块数据、和色度重构结果,并生成至存储器的CAVLC(上下文自适应变长编码)编码的输出流。
在至少一些实施例中,解块滤波器部件和CAVLC编码部件以四行边界将四行的底行的相邻块数据写到存储器。对于下一个四行的顶行,宏块输入6002然后可以四行边界从存储器读取该相邻块数据,并将该相邻块数据传递至流水线的至少一个下游阶段。
代码转换器
在至少一些实施例中,转换编码操作可由代码转换器6050执行。代码转换器可被实施为流水线的功能部件或者被实施为流水线外部的功能部件。在至少一些实施例中,代码转换器6050可执行由流水线输出的CAVLC(上下文自适应变长编码)编码的流到CABAC(上下文自适应二进制算术编码)编码的流的存储器到存储器转换。
在至少一些实施例中,流水线可按除了扫描顺序之外的顺序进行编码,例如本文前面所述的骑士顺序。然而最终,H.264视频编码器的经编码的位流应当按常规的宏块扫描顺序来传输。在至少一些实施例中,将宏块输出从骑士顺序重新排序为扫描顺序通过CAVLC编码部件将经编码的数据写到四个不同的输出缓冲器来实现,每个输出缓冲器对应于一个宏块行。在四行的末尾,每个行缓冲器将包含相应行的经编码的宏块的扫描顺序流。代码转换器6050处理对每个行的开头和末尾的拼接,以在宏块行边界处生成连续流。在至少一些实施例中,流水线可将元数据嵌在CAVLC 输出流中,以有利于代码转换器6050对行的拼接。
示例性视频编码器装置
图17是根据至少一些实施例的示例性视频编码器装置7000的框图。视频编码器装置7000例如可被实施为集成电路(IC)或IC上的子系统诸如片上系统(SOC)。在至少一些实施例中,视频编码器装置7000可包括流水线7040部件、处理器7010部件(例如低功率多核处理器)、存储器管理单元(MMU)7020、DMA 7030、和使装置的功能部件互连的互连器 7050诸如总线子系统或结构。视频编码器装置7000的处理器7010部件例如可执行流水线7040的帧级控制诸如速率控制,执行流水线7040配置 (包括流水线7040内的各个流水线单元的配置),并经由驱动器与应用程序软件进行接口连接,以例如用于视频编码器7000配置。MMU7020可用作至外部存储器的接口,以例如用于流式传输视频输入和/或输出。流水线 7040部件可经由DMA 7030通过MMU 7020来访问存储器。在一些实施例中,视频编码器装置7000可包括图17中未示出的其他功能部件或单元,或者包括比图17中所示更少的功能部件。在图16中示出了可由流水线 7040实施的示例性块处理方法。在图18中示出了可包括至少一个视频编码器装置7000的示例性片上系统(SOC)。
示例性片上系统(SOC)
现在转到图18,其示出了可包括具有可实施图3至图17所示的块处理方法和装置中的一者或多者的块处理流水线的视频编码器装置的至少一个实例的片上系统(SOC)8000的一个实施例的框图。SOC 8000被图示为耦接到存储器8800。如名字所暗示的,SOC 8000的部件可集成到作为集成电路“芯片”的单个半导体衬底上。在一些实施例中,这些部件可在系统中的两个或更多个分立芯片上实施。然而,在本文中将使用SOC 8000作为一个实例。在所示实施例中,SOC 8000的部件包括中央处理单元(CPU)复合件8020、片上外围部件8040A-8040B(更简洁地被称为“外围设备”)、存储器控制器(MC)8030、视频编码器7000(其自身可被视为外围部件)、和通信结构8010。部件8020,8030,8040A-8040B和7000可全部耦接到通信结构8010。存储器控制器8030可在使用期间耦接到存储器 8800,并且外围设备8040B可在使用期间耦接到外部接口8900。在所示实施例中,CPU复合件8020包括一个或多个处理器(P)8024和二级(L2) 高速缓存8022。
外围设备8040A-8040B可以是被包括在SOC 8000中的附加硬件功能的任何集合。例如,外围设备8040A-8040B可包括视频外围设备,诸如被配置为处理来自相机或其他图像传感器的图像捕捉数据的图像信号处理器、被配置为在一个或多个显示设备上显示视频数据的显示控制器、图形处理单元(GPU)、视频编码器/解码器、缩放器、旋转器、混合器等。外围设备可包括音频外围设备,诸如麦克风、扬声器、至麦克风和扬声器的接口、音频处理器、数字信号处理器、混合器等。外围设备可包括用于 SOC 8000外部的各种接口8900的外围设备接口控制器(例如外围设备 8040B),该外围设备包括接口诸如通用串行总线(USB)、外围部件互连 (PCI)(包括PCI高速(PCIe))、串行和并行端口等等。外围设备可包括联网外围设备诸如媒体访问控制器(MAC)。可包括任何硬件的集合。
更具体地,在图18中,SOC 8000可包括视频编码器7000部件的至少一个实例,例如图17所示的包括用于实施图16所示的块处理方法6000的块处理流水线7040部件的视频编码器7000。视频编码器7000可以是可被配置为将输入视频帧从输入格式转换为H.264/高级视频编码(AVC)标准中所述的H.264/AVC格式的H.264视频编码器装置。块处理流水线7040可实施本文中参考图3至图16所述的块处理方法和装置中的一者或多者。
CPU复合件8020可包括用作SOC 8000的CPU的一个或多个CPU处理器8024。系统的CPU包括执行系统主要控制软件诸如操作系统的一个或多个处理器。通常,由CPU在使用期间执行的软件可控制系统的其他部件来实现所期望的系统功能。处理器8024还可执行其他软件诸如应用程序。该应用程序可提供用户功能,并且可依赖于操作系统以进行低级设备控制。因此,处理器8024也可被称为应用处理器。CPU复合件8020还可包括其他硬件,诸如L2高速缓存8022和/或至系统的其他部件的接口(例如至通信结构8010的接口)。通常,处理器可包括被配置为执行在由处理器实施的指令集架构中定义的指令的任何电路和/或微码。响应于执行指令而由处理器操作的指令和数据通常可被存储在存储器8800中,尽管某些指令可被定义为也用于对外围设备进行直接处理器访问。处理器可涵盖在具有作为片上系统(SOC 8000)或其他集成水平的集成电路的其他部件上实施的处理器内核。处理器还可包括分立的微处理器、处理器内核和/或集成到多芯片模块具体实施中的微处理器、被实施为多个集成电路的处理器等等。
存储器控制器8030通常可包括用于接收来自SOC 8000的其他部件的存储器操作并访问存储器8800以完成存储器操作的电路。存储器控制器 8030可被配置为访问任何类型的存储器8800。例如,存储器8800可以是静态随机存取存储器(SRAM)、动态RAM(DRAM)诸如包括双倍数据速率(DDR、DDR2、DDR3、等)DRAM的同步DRAM(SDRAM)。可支持 DDR DRAM的低功率/移动版本(例如LPDDR、mDDR等等)。存储器控制器8030可包括存储器操作队列,以用于对这些操作进行排序(并且可能重新排序),并将这些操作呈现至存储器8800。存储器控制器8030还可包括用于存储等待写到存储器的写数据和等待返回至存储器操作的源的读数据的数据缓冲器。在一些实施例中,存储器控制器8030可包括用于存储最近访问的存储器数据的存储器高速缓存。例如,在SOC具体实施中,存储器高速缓存可通过在预期很快要再次访问的情况下避免从存储器8800重新访问数据来降低SOC中的功率消耗。在一些情况下,存储器缓存也可被称为系统高速缓存,其与私有高速缓存(诸如L2高速缓存8022或处理器8024中的高速缓存)不同,该私有高速缓存只服务于某些部件。此外,在一些实施例中,系统高速缓存不需要位于存储器控制器8030内。
在一个实施例中,存储器8800可以芯片上芯片配置或封装上封装配置来与SOC8000一起被封装。也可使用SOC 8000和存储器8800的多芯片模块配置。此类配置可比向系统中其他部件(例如向端点16A-16B)的传输相对更安全(在数据可观测性方面)。因此,受保护的数据可未经加密地驻留在存储器8800中,而受保护的数据可被加密以在SOC 8000与外部端点之间进行交换。
通信结构8010可以是用于在SOC 8000的部件间进行通信的通任何信互连器和协议。通信结构8010可基于总线,该总线包括共享总线配置、交叉开关配置、和具有桥的分层总线。通信结构8010也可基于分组,并且可以是具有桥的分层、交叉开关、点到点、或其他互连器。
应当指出,SOC 8000的部件的数量(以及图18中所示的那些部件的子部件的数量,诸如在CPU复合件8020内)在不同实施例中可以是不同的。可存在比图18中所示的数量更多或更少的每个部件/子部件。
示例性系统
图19是系统9000的一个实施例的框图。在所示的实施例中,系统 9000包括耦接到外部存储器8800和一个或多个外部外围设备9020的SOC 8000的至少一个实例。提供向SOC8000供应供电电压以及向存储器8800 和/或外围设备9020供应一个或多个供电电压的功率管理单元(PMU) 9010。在一些实施例中,可包括SOC 8000的多于一个实例(也可包括多于一个存储器8800)。
根据系统9000的类型,外围设备9020可包括任何期望的电路。例如,在一个实施例中,系统9000可以是移动设备(例如个人数字助理 (PDA)、智能电话等),并且外围设备9020可包括用于各种类型的无线通信的设备,诸如wifi、蓝牙、蜂窝、全球定位系统等。外围设备9020还可包括附加存储装置,该附加存储装置包括RAM存储装置、固态存储装置或磁盘存储装置。外围设备9020可包括用户界面设备(诸如包括触摸显示屏或多点触摸显示屏的显示屏)、键盘或其他输入设备、麦克风、扬声器等。在其他实施例中,系统9000可以是任何类型的计算系统(例如台式个人计算机、膝上型电脑、工作站、网络机顶盒等)。
外部储存器8800可以包括任何类型的存储器。例如,外部存储器 8800可以是SRAM、动态RAM(DRAM)(诸如同步DRAM (SDRAM))、双倍数据速率(DDR、DDR2、DDR3等)SDRAM、RAMBUS DRAM、低功率版本的DDR DRAM(例如LPDDR、mDDR等) 等等。外部存储器8800可包括存储器设备可被安装到的一个或多个存储器模块,诸如单列存储器模块(SIMM)、双列存储器模块(DIMM)等。另选地,外部存储器8800可包括以芯片上芯片配置或封装上封装具体实施被安装在SOC 8000上的一个或多个存储器设备。
在不同的实施例中,本文所述的方法可在软件、硬件或它们的组合中实现。此外,可改变方法的方框次序,可对各种要素进行添加、重新排序、组合、省略、修改等。对于受益于本公开的本领域的技术人员,显然可作出各种修改和改变。本文所述的各种实施例旨在为例示的而非限制性的。许多变型、修改、添加和改进是可能的。因此,可针对在本文中被描述为单个实例的部件提供多个实例。各种部件、操作和数据存储装置之间的界限在一定程度上是任意性的,并且在具体例示性配置的上下文中例示了特定操作。设想了功能的其他分配,它们可落在所附权利要求的范围内。最后,被呈现为示例性配置中的分立部件的结构和功能可被实现为组合结构或部件。这些和其他变型、修改、添加和改进可落在所附权利要求所限定的实施例的范围内。

Claims (20)

1.一种装置,包括:
块处理流水线,所述块处理流水线包括多个阶段,其中所述块处理流水线的所述多个阶段中的一个或多个阶段各自包括软件流水线的部件和硬件流水线的部件,其中所述软件流水线和所述硬件流水线被配置为并行处理来自帧的像素块;
其中所述一个或多个阶段中的每个阶段处的所述软件流水线部件被配置为根据所获取的所述块的信息来迭代地确定用于在所述每个阶段的所述硬件流水线部件处处理所述块的配置;
其中所述一个或多个阶段中的每个阶段处的所述硬件流水线部件被配置为根据由所述每个阶段处的所述软件流水线部件所确定的用于处理所述块的所述配置来迭代地处理所述块;并且
其中所述一个或多个阶段中的每个阶段处的所述硬件流水线部件在所述每个阶段处的所述软件流水线部件正在根据所获取的即将到来的块的信息来确定将由所述每个阶段处的所述硬件流水线部件处理的所述即将到来的块的配置时,根据由所述每个阶段处的所述软件流水线部件先前根据所获取的当前块的信息所确定的用于处理所述当前块的配置来处理所述阶段处的所述当前块。
2.根据权利要求1所述的装置,其中所述一个或多个阶段中的每个阶段处的所述软件流水线部件被进一步配置为从所述块处理流水线的上游阶段接收所述块的所述信息的至少一部分。
3.根据权利要求1所述的装置,其中所述块的所述信息包括来自由所述阶段处的所述硬件流水线部件先前处理的块的信息。
4.根据权利要求1所述的装置,其中所述软件流水线部件中的至少一个软件流水线部件被进一步配置为将所述块的所述信息输出到所述块处理流水线的下游阶段。
5.根据权利要求1所述的装置,其中所述一个或多个阶段中的每个阶段处的所述硬件流水线部件被进一步配置为:
从所述块处理流水线的前一阶段接收要处理的所述块;以及
将经处理的块输出到所述块处理流水线的下一阶段或输出到外部存储器。
6.根据权利要求1所述的装置,其中所述块处理流水线包括初始阶段,所述初始阶段被配置为:
缓冲用于至所述硬件流水线的输入的块;
针对所缓冲的块中的一个或多个块来计算块统计值;以及
将所述块统计值输入到所述块处理流水线的下游阶段处的软件流水线部件作为所述块的信息。
7.根据权利要求1所述的装置,其中每个阶段处的所述软件流水线部件被配置为针对将由所述阶段处的所述硬件流水线部件处理的每个块:
根据所获取的所述块的信息来确定所述阶段的所述硬件流水线部件处的用于处理所述块的特定配置;
将所述配置写到配置存储器;以及
发信号通知所述阶段处的所述硬件流水线部件所述配置在所述配置存储器中准备就绪。
8.根据权利要求7所述的装置,其中所述阶段处的所述硬件流水线部件被配置为:
检测来自所述阶段处的所述软件流水线部件的所述信号;
从所述配置存储器访问所述配置;
发信号通知所述软件流水线部件所述配置存储器被清空;以及
根据来自所述配置存储器的所述配置来处理所述块。
9.根据权利要求8所述的装置,其中所述软件流水线部件被配置为在所述硬件流水线部件从所述配置存储器的第二部分访问当前块的配置时将下一个块的配置写到所述配置存储器的第一部分。
10.一种方法,包括:
由块处理流水线的阶段处的软件流水线部件获取将由所述阶段处的硬件流水线部件处理的像素块的信息,其中所述块处理流水线在并行的软件流水线和硬件流水线中处理来自帧的像素块,其中所述块处理流水线的多个阶段中的一个或多个阶段各自包括软件流水线部件和硬件流水线部件;
由所述软件流水线部件根据所获取的所述块的信息来确定所述硬件流水线部件处的用于处理所述块的配置;以及
根据所确定的所述块的配置来在所述硬件流水线部件处处理所述块;
其中所述硬件流水线部件在所述软件流水线部件正在根据所获取的即将到来的块的信息来确定将由所述硬件流水线部件处理的所述即将到来的块的配置时,根据由所述软件流水线部件根据所获取的所述块的信息所确定的所述块的所述配置来处理所述块。
11.根据权利要求10所述的方法,其中所述块的所述信息包括从所述块处理流水线的上游阶段接收的块信息。
12.根据权利要求10所述的方法,其中所述块的所述信息进一步包括来自由所述阶段处的所述硬件流水线部件先前处理的另一个块的信息。
13.根据权利要求10所述的方法,还包括:
由所述软件流水线部件将所述块的所述配置写到配置存储器;以及
由所述硬件流水线部件响应于发信号通知所述硬件流水线部件所述块的所述配置准备就绪而从所述配置存储器读取所述块的所述配置。
14.根据权利要求13所述的方法,还包括在所述读取之后发信号通知所述软件流水线部件所述配置存储器被清空。
15.一种设备,包括:
存储器;和
被配置为处理视频帧并将经处理的视频帧作为帧数据存储到所述存储器的装置,所述装置包括实施多个阶段的块处理流水线,所述多个阶段各自包括一个或多个流水线单元,每个流水线单元被配置为对穿过所述流水线的来自帧的像素块执行一个或多个操作;
其中所述块处理流水线中的所述流水线单元中的一个或多个流水线单元各自被配置为:
根据当前配置来在所述流水线单元的单元内核处处理当前块;
根据所获取的下一个块的信息来确定所述单元内核处的用于处理所述下一个块的配置;以及
根据所述下一个块的所述配置来在所述单元内核处处理所述下一个块;
其中所述流水线单元在所述流水线单元的所述单元内核根据所述当前配置来处理所述当前块时根据所获取的所述下一个块的信息来确定所述单元内核处的用于处理所述下一个块的所述配置。
16.根据权利要求15所述的设备,其中所述下一个块的所述信息包括从所述块处理流水线的上游处理单元接收的信息和来自由所述处理单元先前处理的块的信息。
17.根据权利要求15所述的设备,其中所述一个或多个流水线单元中的至少一个流水线单元被进一步配置为将经处理的块输出到所述块处理流水线的下一阶段,并将经处理的块的信息输出到所述块处理流水线的下游阶段。
18.根据权利要求15所述的设备,其中所述一个或多个流水线单元中的每个流水线单元被进一步配置为将所述单元内核处的用于处理所述下一个块的所述配置存储到配置存储器,其中所述单元内核被配置为:
响应于所述流水线单元中的一个或多个流水线单元发信号通知所述单元内核用于处理所述下一个块的所述配置准备就绪,从所述配置存储器读取所述配置;以及
发信号通知所述流水线单元所述配置存储器被清空。
19.根据权利要求18所述的设备,其中所述确定和所述发信号通知由相应流水线单元的处理器执行。
20.根据权利要求15所述的设备,其中每个帧被细分成像素块的行,其中所述装置被配置为将来自每个帧的所述块输入到所述块处理流水线,使得行上的相邻块不同时位于所述流水线的相邻阶段处。
CN201480052886.2A 2013-09-27 2014-08-20 并行的硬件块处理流水线和软件块处理流水线 Active CN105684036B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/039,729 2013-09-27
US14/039,729 US9215472B2 (en) 2013-09-27 2013-09-27 Parallel hardware and software block processing pipelines
PCT/US2014/051799 WO2015047601A1 (en) 2013-09-27 2014-08-20 Parallel hardware and software block processing pipelines

Publications (2)

Publication Number Publication Date
CN105684036A CN105684036A (zh) 2016-06-15
CN105684036B true CN105684036B (zh) 2019-01-22

Family

ID=51539325

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201480052886.2A Active CN105684036B (zh) 2013-09-27 2014-08-20 并行的硬件块处理流水线和软件块处理流水线

Country Status (7)

Country Link
US (1) US9215472B2 (zh)
JP (1) JP6225250B2 (zh)
KR (1) KR101834901B1 (zh)
CN (1) CN105684036B (zh)
DE (1) DE112014004432T5 (zh)
TW (1) TWI533209B (zh)
WO (1) WO2015047601A1 (zh)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10313683B2 (en) * 2014-08-30 2019-06-04 Apple Inc. Video encoder with context switching
US9626286B2 (en) * 2014-10-03 2017-04-18 Sandisk Technologies Llc Hardware and firmware paths for performing memory read processes
US10218983B2 (en) 2015-09-30 2019-02-26 Apple Inc. Adapting mode decisions in video encoder
US20170164041A1 (en) * 2015-12-07 2017-06-08 Le Holdings (Beijing) Co., Ltd. Method and electronic device for playing videos
US10728546B2 (en) 2016-02-05 2020-07-28 Apple Inc. Sample adaptive offset systems and methods
US10460642B2 (en) 2016-06-30 2019-10-29 Apple Inc. Noise reduction in LED sensing circuit for electronic display
US20180122038A1 (en) * 2016-10-28 2018-05-03 Qualcomm Incorporated Multi-layer fetch during composition
KR20180080463A (ko) 2017-01-04 2018-07-12 삼성전자주식회사 반도체 장치 및 반도체 장치의 동작 방법
CN107483948A (zh) * 2017-09-18 2017-12-15 郑州云海信息技术有限公司 一种webp压缩处理中像素宏块处理方法
CN112313951A (zh) * 2018-06-28 2021-02-02 苹果公司 低延迟视频编码和传输的速率控制
WO2020006291A1 (en) 2018-06-28 2020-01-02 Apple Inc. Priority-based video encoding and transmission
CN112313954A (zh) 2018-06-28 2021-02-02 苹果公司 视频编码系统
US10812823B2 (en) 2018-07-11 2020-10-20 Apple Inc. Global motion vector video encoding systems and methods
US11330296B2 (en) 2020-09-14 2022-05-10 Apple Inc. Systems and methods for encoding image data
US11206415B1 (en) 2020-09-14 2021-12-21 Apple Inc. Selectable transcode engine systems and methods
US11778211B2 (en) 2021-09-16 2023-10-03 Apple Inc. Parallel video parsing for video decoder processing

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101390397A (zh) * 2006-02-24 2009-03-18 微软公司 加速视频编码
CN101673391A (zh) * 2008-09-09 2010-03-17 索尼株式会社 流水线化的图像处理引擎

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6005624A (en) 1996-12-20 1999-12-21 Lsi Logic Corporation System and method for performing motion compensation using a skewed tile storage format for improved efficiency
JP3007612B2 (ja) * 1997-09-01 2000-02-07 松下電器産業株式会社 マイクロコントローラ、データ処理システム及びタスクスイッチの制御方法
US8284844B2 (en) 2002-04-01 2012-10-09 Broadcom Corporation Video decoding system supporting multiple standards
KR100846778B1 (ko) 2002-07-16 2008-07-16 삼성전자주식회사 복수개의 주사 패턴을 이용한 부호화 방법, 복호화 방법,및 그 장치
GB0323284D0 (en) 2003-10-04 2003-11-05 Koninkl Philips Electronics Nv Method and apparatus for processing image data
KR20050078099A (ko) 2004-01-30 2005-08-04 삼성전자주식회사 적응적으로 키 프레임을 삽입하는 비디오 코딩 장치 및 방법
US7558428B2 (en) * 2004-09-13 2009-07-07 Microsoft Corporation Accelerated video encoding using a graphics processing unit
US7822116B2 (en) 2005-04-14 2010-10-26 Broadcom Corporation Method and system for rate estimation in a video encoder
US8537111B2 (en) 2006-02-08 2013-09-17 Oblong Industries, Inc. Control system for navigating a principal dimension of a data space
US7768520B2 (en) 2006-05-03 2010-08-03 Ittiam Systems (P) Ltd. Hierarchical tiling of data for efficient data access in high performance video applications
US7725745B2 (en) * 2006-12-19 2010-05-25 Intel Corporation Power aware software pipelining for hardware accelerators
US20080170611A1 (en) * 2007-01-17 2008-07-17 Srikrishna Ramaswamy Configurable functional multi-processing architecture for video processing
US8213511B2 (en) 2007-04-30 2012-07-03 Texas Instruments Incorporated Video encoder software architecture for VLIW cores incorporating inter prediction and intra prediction
JP2009134391A (ja) * 2007-11-29 2009-06-18 Renesas Technology Corp ストリーム処理装置、ストリーム処理方法及びデータ処理システム
US8320448B2 (en) 2008-11-28 2012-11-27 Microsoft Corporation Encoder with multiple re-entry and exit points
US9179166B2 (en) 2008-12-05 2015-11-03 Nvidia Corporation Multi-protocol deblock engine core system and method
US20120076207A1 (en) 2008-12-31 2012-03-29 Advanced Micro Devices, Inc. Multiple-candidate motion estimation with advanced spatial filtering of differential motion vectors
US20120099657A1 (en) 2009-07-06 2012-04-26 Takeshi Tanaka Image decoding device, image coding device, image decoding method, image coding method, program, and integrated circuit
US8379718B2 (en) 2009-09-02 2013-02-19 Sony Computer Entertainment Inc. Parallel digital picture encoding
US8488673B2 (en) 2009-09-09 2013-07-16 Telefonaktiebolaget Lm Ericsson (Publ) Latency rate distortion optimisation
US9190012B2 (en) * 2009-12-23 2015-11-17 Ati Technologies Ulc Method and system for improving display underflow using variable HBLANK
US8879619B2 (en) 2010-07-15 2014-11-04 Sharp Laboratories Of America, Inc. Method of parallel video coding based on scan order
US8532383B1 (en) 2010-09-16 2013-09-10 Pixia Corp. Method of processing a viewport within large format imagery
US9288496B2 (en) 2010-12-03 2016-03-15 Qualcomm Incorporated Video coding using function-based scan order for transform coefficients
US9288500B2 (en) 2011-05-12 2016-03-15 Texas Instruments Incorporated Luma-based chroma intra-prediction for video coding
US20130003857A1 (en) 2011-06-29 2013-01-03 General Instrument Corporation Methods and system for using a scan coding pattern during inter coding
US9332259B2 (en) 2012-01-18 2016-05-03 Qualcomm Incorporated Indication of use of wavefront parallel processing in video coding
US9807385B2 (en) 2012-01-19 2017-10-31 Futurewei Technologies, Inc. Simplification of mode dependent intra smoothing
TWI775701B (zh) 2012-01-20 2022-08-21 美商Ge影像壓縮有限公司 允許平行處理之編碼器、解碼器、傳送解多工器、系統、儲存媒體、方法及電腦程式
US9179144B2 (en) * 2012-11-28 2015-11-03 Cisco Technology, Inc. Fast switching hybrid video decoder
US10349069B2 (en) * 2012-12-11 2019-07-09 Sony Interactive Entertainment Inc. Software hardware hybrid video encoder

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101390397A (zh) * 2006-02-24 2009-03-18 微软公司 加速视频编码
CN101673391A (zh) * 2008-09-09 2010-03-17 索尼株式会社 流水线化的图像处理引擎

Also Published As

Publication number Publication date
CN105684036A (zh) 2016-06-15
JP2016537845A (ja) 2016-12-01
KR20160065900A (ko) 2016-06-09
JP6225250B2 (ja) 2017-11-01
US20150092854A1 (en) 2015-04-02
DE112014004432T5 (de) 2016-06-16
TWI533209B (zh) 2016-05-11
WO2015047601A1 (en) 2015-04-02
KR101834901B1 (ko) 2018-03-08
TW201528135A (zh) 2015-07-16
US9215472B2 (en) 2015-12-15

Similar Documents

Publication Publication Date Title
CN105684036B (zh) 并行的硬件块处理流水线和软件块处理流水线
Tikekar et al. A 249-Mpixel/s HEVC video-decoder chip for 4K ultra-HD applications
US9843813B2 (en) Delayed chroma processing in block processing pipelines
US9292899B2 (en) Reference frame data prefetching in block processing pipelines
US9351003B2 (en) Context re-mapping in CABAC encoder
US10757437B2 (en) Motion estimation in block processing pipelines
US9762919B2 (en) Chroma cache architecture in block processing pipelines
US9473778B2 (en) Skip thresholding in pipelined video encoders
US9224186B2 (en) Memory latency tolerance in block processing pipelines
US20150085921A1 (en) Reducing quantization artifacts using neighbor-based weighted dithering
US9571846B2 (en) Data storage and access in block processing pipelines
US9218639B2 (en) Processing order in block processing pipelines
US9224187B2 (en) Wavefront order to scan order synchronization
Abeydeera et al. 4K real-time HEVC decoder on an FPGA
US9299122B2 (en) Neighbor context processing in block processing pipelines
US9305325B2 (en) Neighbor context caching in block processing pipelines
TWI583180B (zh) 具有上下文切換之視訊編碼器
Tikekar et al. Decoder hardware architecture for HEVC
Juvekar Algorithms, architectures and circuits for low power HEVC codecs

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