KR20150057790A - 웨이브-프런트 어프로치에 기초한 비디오 프레임의 병렬 처리 방법 - Google Patents

웨이브-프런트 어프로치에 기초한 비디오 프레임의 병렬 처리 방법 Download PDF

Info

Publication number
KR20150057790A
KR20150057790A KR1020130141572A KR20130141572A KR20150057790A KR 20150057790 A KR20150057790 A KR 20150057790A KR 1020130141572 A KR1020130141572 A KR 1020130141572A KR 20130141572 A KR20130141572 A KR 20130141572A KR 20150057790 A KR20150057790 A KR 20150057790A
Authority
KR
South Korea
Prior art keywords
tile
decoding
row
encoding
tiles
Prior art date
Application number
KR1020130141572A
Other languages
English (en)
Inventor
스리니바스 레디 에레갈라
권녕규
Original Assignee
삼성전자주식회사
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 삼성전자주식회사 filed Critical 삼성전자주식회사
Priority to KR1020130141572A priority Critical patent/KR20150057790A/ko
Priority to US14/532,373 priority patent/US20150139334A1/en
Publication of KR20150057790A publication Critical patent/KR20150057790A/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/96Tree coding, e.g. quad-tree coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • 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

Landscapes

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

Abstract

본 발명의 실시 예에 따른 비디오 프레임의 병렬 처리 방법은, 상기 비디오 프레임을 래스터 스캔(raster scan) 방향에 수직 방향으로 N 개의 타일로 분할하는 단계; 및 상기 N 개의 타일들 각각에 포함된 코딩 트리 블록들을 제 1 행부터 제 m 행까지 순차적으로 상기 래스터 스캔 방향에 따라 부호화 또는 복호화하는 단계를 포함하되, 제 K 타일의 부호화 또는 복호화는(K는 2 이상, 상기 N 이하의 자연수), 제 K-1 타일의 제 1 행에 포함된 코딩 트리 블록들에 대한 부호화 또는 복호화가 완료되는 시점에 시작될 수 있다. 본 발명에 의하면, 비디오 프레임의 병렬 처리 속도 및 효율을 향상시킬 수 있다.

Description

웨이브-프런트 어프로치에 기초한 비디오 프레임의 병렬 처리 방법{PARALLEL PROCESSING METHOD OF A VODEO FRAME BASED ON WAVE-FRONT APPROACH}
본 발명은 비디오 프레임을 병렬 처리하는 방법에 관한 것으로, 보다 상세하게는, 멀티 코어 프로세서 기반 하에서 비디오 프레임을 인코딩 또는 디코딩하는 방법에 관한 것이다.
최근 CCD 이미지 센서(Charge Coupled Device Image Sensor), CMOS 이미지 센서(CMOS Image Sensor; CMOS) 등과 같은 이미지 센서들의 기술이 발전하면서, 이미지 센서에 의해 촬영되는 데이터의 용량이 증가하고 있다. 즉, HD(high definition) 또는 UHD(ultra high definition) 등과 같은 고해상도/고화질 영상을 요구하는 환경으로 변화하고 있다.
그러나, 현재 가장 우수한 압축 효율을 가진 표준 압축 기술들 중 하나인 H.264/MPEG-4 AVC에 의하더라도, 그러한 방대한 데이터를 처리하는데 상당한 비용 및 시간이 발생하므로, 새로운 압축 기술들이 연구되어 왔다.
그 중 하나인, 고효율 비디오 코딩(high efficiency video coding; HEVC)은 H.264/MPEG-4 AVC의 성공에 힘입어 개발에 착수된 차세대 동영상 부호화 기술이다. 기존에 H.264/MPEG-4 AVC를 개발했던 ISO/IEC MPEG(moving picture experts group) 과 ITU-T VCEG(video coding experts group)이 JCT-VC(joint collaborative team on video coding)를 결성하여, 기존의 압축 기술보다 2배 이상의 압축률을 갖는 HEVC 표준화 작업을 해 왔고, 얼마전 ITU는 HEVC를 차세대 동영상 부호화 기술 표준안으로 최종 승인하였다.
HEVC는 기존의 비디오 압축 코덱들과 같이 하이브리드 코딩 구조를 사용하지만, MPEG-2부터 H.264/AVC에 이르기까지 압축의 기본 단위로 사용되었던 매크로 블록(macro block)을 사용하지 않고, 코딩 트리 블록(coding tree block; CTB)을 사용한다. CTB는 기존의 16×16 픽셀의 매크로 블록과 달리 크기가 고정적이지 않고 가변적이기 때문에 다양한 해상도의 영상을 보다 효과적으로 코딩 가능하게 한다.
이처럼 지속적으로 복잡도가 증가하는 비디오 코덱을 처리하기 위해서는 고성능 프로세서가 필수적인데, 단순히 프로세서의 클럭 수를 증가시키는 것으로는 한계가 있으므로, 멀티코어 프로세서에 의한 처리가 각광받고 있다.
본 발명의 목적은 HEVC 환경 하에서, 비디오 프레임에 대하여 멀티 코어 프로세서에 의한 병렬 처리를 실행하여 인코딩 또는 디코딩 효율을 향상시키고, 처리 시간을 단축시키는 방법을 제공하는데 있다.
본 발명의 실시 예에 따른, m×n 개의 코딩 트리 블록(coding-tree block)들을 포함하는 비디오 프레임의 병렬 처리 방법은, 상기 비디오 프레임을 래스터 스캔(raster scan) 방향에 수직 방향으로 N 개의 타일로 분할하는 단계; 및 상기 N 개의 타일들 각각에 포함된 코딩 트리 블록들을 제 1 행부터 제 m 행까지 순차적으로 상기 래스터 스캔 방향에 따라 부호화 또는 복호화 하는 단계를 포함하되, 제 K 타일의 부호화 또는 복호화는(K는 2 이상, 상기 N 이하의 자연수), 제 K-1 타일의 제 1 행에 포함된 코딩 트리 블록들에 대한 부호화 또는 복호화가 완료되는 시점에 시작될 수 있다.
실시 예로써, 상기 제 K 타일의 부호화 또는 복호화는 상기 제 K-1 타일의 제 2 행에 포함된 코딩 트리 블록들에 대한 부호화 또는 복호화가 시작됨과 동시에 시작될 수 있다.
다른 실시 예로써, 상기 제 K-1 타일의 상기 제 1 행에 포함된 코딩 트리 블록들 중 마지막에 부호화 또는 복호화 되는 코딩 트리 블록과 상기 제 K 타일의 상기 제 1 행에 포함된 코딩 트리 블록들 중 처음 부호화 또는 복호화 되는 코딩 트리 블록은 서로 인접할 수 있다.
또 다른 실시 예로써, 상기 제 K-1 타일 및 상기 제 K 타일에 각각 속하고 서로 인접한 코딩 트리 블록들 중, 상기 제 K-1 타일에 속하는 코딩 트리 블록에 포함된 이웃 정보(neighboring information)는 프로세서 내의 복수의 코어(core)들 사이에 연결된 로컬 메모리들을 통하여 상기 제 K 타일로 전달될 수 있다.
또 다른 실시 예로써, 상기 N이 프로세서 내의 복수의 코어(core)들의 개수와 동일한 경우, 각각의 타일들은 상기 각각의 코어들에 의해 부호화 또는 복호화 될 수 있다.
또 다른 실시 예로써, 상기 N이 프로세서 내의 복수의 코어(core)들의 개수(이하, C)보다 큰 경우, 제 C+1 타일 내지 제 N 타일은, 제 1 내지 제 C 타일 각각에 대한 부호화 또는 복호화가 완료되는 시점에, 제 1 내지 제 C 코어에 의해 순서대로 각각 부호화 또는 복호화 될 수 있다.
또 다른 실시 예로써, 상기 제 K-1 타일 및 상기 제 K 타일에 각각 속하고 서로 인접한 코딩 트리 블록들 중, 상기 제 K-1 타일에 포함된 이웃 정보(neighboring information)는 복수의 코어들과 공통으로 연결된 메모리를 통하여 상기 제 K 타일로 전송될 수 있다.
또 다른 실시 예로써, 상기 복수의 메모리 버퍼들은 휘발성 메모리 장치일 수 있다.
또 다른 실시 예로써, 상기 부호화 또는 복호화 하는 단계는, 상기 N 개의 타일들 각각에 포함된 상기 코딩 트리 블록들에 대해 디블로킹 필터링(deblocking filtering; DF)을 실행하는 단계; 및 샘플 적응적 오프셋(sample adaptive offset; SAO) 필터링을 실행하는 단계를 포함할 수 있다.
또 다른 실시 예로써, 상기 부호화 또는 복호화 하는 단계는 적응적 루프 필터링(adaptive loop filtering; ALF)을 하는 단계를 더 포함할 수 있다.
본 발명의 다른 실시 예에 따른, 복수의 코딩 트리 블록(coding-tree block)들을 포함하는 비디오 프레임의 병렬 처리 방법은, 상기 비디오 프레임을 래스터 스캔(raster scan) 방향으로 M 개의 행 및 상기 래스터 스캔 방향에 수직 방향으로 N 개의 열로 분할하여, M×N 개의 타일들을 생성하는 단계; 및 상기 M×N 개의 타일들 각각에 포함된 코딩 트리 블록들을 순차적으로 상기 래스터 스캔 방향에 따라 부호화 또는 복호화 하는 단계를 포함하되, 제 J 행, 제 K 열에 위치하는 [J:K] (J는 상기 M 이하, K는 N 이하의 자연수) 타일의 부호화 또는 복호화는, [J:K-1] 타일의 제 1 행에 포함된 코딩 트리 블록들에 대한 부호화 또는 복호화가 완료되는 시점에 시작될 수 있다.
실시 예로써, 상기 [J:K] 타일의 부호화 또는 복호화는 상기 [J:K-1] 타일의 제 2 행에 포함된 코딩 트리 블록들에 대한 부호화 또는 복호화가 시작됨과 동시에 시작될 수 있다.
다른 실시 예로써, 상기 [J:K-1] 타일의 상기 제 1 행에 포함된 코딩 트리 블록들 중 마지막에 부호화 또는 복호화 되는 코딩 트리 블록과, 상기 [J:K] 타일의 상기 제 1 행에 포함된 코딩 트리 블록들 중 처음 부호화 또는 복호화 되는 코딩 트리 블록은, 서로 인접할 수 있다.
또 다른 실시 예로써, 상기 타일들의 개수(M×N)가 프로세서 내의 복수의 코어(core)들의 개수와 동일한 경우, [J+1:K] 타일의 부호화 또는 복호화는, 상기 [J:K] 타일의 마지막 행에 포함된 코딩 트리 블록들 중 적어도 하나의 코딩 트리 블록에 대한 부호화 또는 복호화가 완료되는 시점에 시작될 수 있다.
또 다른 실시 예로써, 상기 타일들의 개수(M×N)가 프로세서 내의 복수의 코어(core)들의 개수보다 큰 경우, 상기 복수의 타일들은 [1:1] 타일부터 래스터 스캔 방향으로 상기 복수의 코어들에 의해 각각 할당되어 부호화 또는 복호화 되고, 할당되지 않은 타일들은, 상기 할당된 복수의 타일들 각각에 대한 부호화 또는 복호화가 완료되는 시점에, 상기 부호화 또는 복호화가 완료된 타일을 부호화 또는 복호화 하였던 코어에 의해, 래스터 스캔 방향에 따라 순서대로 부호화 또는 복호화 될 수 있다.
본 발명에 의하면 비디오 프레임을 특정 영역(타일)들로 나누고, 복수의 코어들이 복수의 타일들에 대해 각각 병렬 처리를 실행함으로써, 인코딩 및 디코딩 효율을 높이고, 처리 시간을 단축시킬 수 있다.
도 1은 HEVC를 기반으로 하는 비디오 프레임을 인코딩하는 일반적인 인코더를 보여주는 블록도이다.
도 2는 도 1에 도시된 인-루프 필터(In-loop filter)를 상세하게 보여주는 블록도이다.
도 3은 HEVC를 기반으로 하여 인코딩된 비디오 데이터를 디코딩하는 일반적인 디코더를 보여주는 블록도이다.
도 4는 비디오 프레임의 병렬 처리 과정에서, 타일들 사이에 발생하는 루프 필터 의존성을 보여주는 도면이다.
도 5는 본 발명의 실시 예에 따른 비디오 프레임을 병렬 처리하는 방법을 보여주는 도면이다.
도 6은 본 발명의 실시 예에 따른 비디오 프레임을 병렬 처리하는 방법을 시간의 흐름에 따라 보여주는 도면이다.
도 7은 본 발명의 다른 실시 예에 따른 비디오 프레임을 병렬 처리하는 방법을 보여주는 도면이다.
도 8은 본 발명의 또 다른 실시 예에 따른 비디오 프레임을 병렬 처리하는 방법을 보여주는 도면이다.
도 9는 본 발명의 또 다른 실시 예에 따른 비디오 프레임을 병렬 처리하는 방법을 보여주는 도면이다.
도 10은 본 발명의 실시 예에 따른 비디오 프레임을 병렬 처리하는 방법에 있어서, 코어-간 통신 메커니즘을 구현하기 위한 프로세서의 구성을 보여주는 블록도이다.
도 11은 본 발명의 다른 실시 예에 따른 비디오 프레임을 병렬 처리하는 방법에 있어서, 이웃 정보를 전달하기 위한 시스템을 보여주는 도면이다.
도 12는 본 발명의 실시 예에 따른 멀티미디어 장치를 보여주는 블록도이다.
도 13은 본 발명의 실시 예에 따른 휴대용 단말기를 보여주는 블록도이다.
앞의 일반적인 설명 및 다음의 상세한 설명 모두 예시적이라는 것이 이해되어야하며, 청구된 발명의 부가적인 설명이 제공되는 것으로 여겨져야 한다. 참조 부호들이 본 발명의 바람직한 실시 예들에 상세히 표시되어 있으며, 그것의 예들이 참조 도면들에 표시되어 있다. 가능한 어떤 경우에도, 동일한 참조 번호들이 동일한 또는 유사한 부분을 참조하기 위해서 설명 및 도면들에 사용된다.
아래에서, 비디오 프레임을 병렬 처리하는 방법이 본 발명의 특징 및 기능을 설명하기 위한 한 예로서 사용된다. 하지만, 이 기술 분야에 정통한 사람은 여기에 기재된 내용에 따라 본 발명의 다른 이점들 및 성능을 쉽게 이해할 수 있을 것이다. 본 발명은 다른 실시 예들을 통해 또한, 구현되거나 적용될 수 있을 것이다. 게다가, 상세한 설명은 본 발명의 범위, 기술적 사상 그리고 다른 목적으로부터 상당히 벗어나지 않고 관점 및 용도에 따라 수정되거나 변경될 수 있다.
실시 예의 설명에 있어서, 각 층의 "위(상)/아래(하)(on/under)"에 형성되는 것으로 기재되는 경우에 있어, 위(상)/아래(하)는 직접적으로(directly) 또는 다른 층을 개재하여(indirectly) 형성되는 것을 모두 포함한다. 한 요소 또는 층이 다른 요소 또는 층에 "연결되는", "결합 되는", 또는 "인접하는" 것으로 언급되는 때에는, 다른 요소 또는 층에 직접적으로 연결되거나, 결합 되거나, 또는 인접하는 것일 수 있고, 혹은 그 사이에 끼워지는 요소 또는 층이 존재할 수 있음이 이해될 것이다.
이하, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자가 본 발명의 기술적 사상을 용이하게 실시할 수 있도록 본 발명의 실시 예를 첨부된 도면을 참조하여 설명할 것이다.
도 1은 HEVC를 기반으로 하는 비디오 프레임을 인코딩(부호화)하는 일반적인 인코더(100)를 보여주는 블록도이다.
도 1을 참조하여, 인코더(100)는 움직임 추정부(Motion estimation)(110), 움직임 보상부(Motion compensation)(115), 인트라 예측부(Intra-prediction)(120), 가산기(125 및 165), 변환부(Transformation; T)(130), 양자화부(Quantization; Q)(140), 역 양자화 부(Inverse quantization; Q-1)(150), 역 변환부(Inverse transforamtion; T-1)(160), 인-루프 필터(In-Loop Filter)(170), 디코디드 픽쳐 버퍼(Decoded Picture Buffer)(180), 및 엔트로피 인코더(Entropy Encoder)(190)를 포함할 수 있다.
HEVC의 일반적인 인코딩 과정은 다음과 같다. 개략적으로 설명하면, 비디오 데이터(Input signal)를 인코딩하기 위해, 비디오 프레임들은 개별적으로 인코딩 가능한 복수의 블록(예를 들어, 매크로 블록(Macro Block; MB) 또는 코딩 트리 블록(Coding Tree Block; CTB))들로 분할될 수 있다. 이러한 분할 과정은 중앙 처리 장치(Central Processing Unit; CPU)에 내장된 코어에 의해 실행되거나, 그래픽 처리 장치(Graphics Processing Unit; GPU)에 내장된 코어에 의해 실행될 수 있다. 그리고, 현재 프레임과 동일한 프레임 상의 인접한 블록에 기초한 인트라 예측(Intra-Pridiction), 및 이전 프레임의 블록에 기초한 인터 예측(Inter-Prediction)을 합산하여, 이를 변환 및 양자화하는 과정을 거쳐 인코딩을 실행할 수 있다.
움직임 추정부(110)는 인터 예측을 실행하기 위해 현재의 프레임과 이전 프레임을 비교할 수 있다. 비교 결과에 따라, 움직임 추정부(110)는 현재의 프레임의 블록 중에서 이전의 프레임의 블록과 가장 유사한 블록을 검출할 수 있다. 움직임 추정부(110)는 검출 결과에 기초하여, 현재의 프레임의 블록과 이전 프레임에서 검출된 블록 사이의 위치 관계를 가리키는 모션 벡터(Motion Vectors)를 생성할 수 있다. 움직임 보상부(115)는 움직임 추정에 의해 검출된 예측 영상(즉, 현재 프레임과 이전 프레임의 차분에 해당하는 영상)을 획득하여 가산기(125 및 165)로 전송될 수 있다.
인트라 예측부(120)는 현재 프레임의 블록의 예측 영상을 예측하고자 하는 블록과 공간적으로 인접한 블록들에서 찾는 인트라 예측(Intra-Prediction)을 실행할 수 있다. 이때, 예측하고자 하는 블록과 인접한 블록들은 동일한 프레임 상에서 인접해 있다. 인트라 예측에 의해 생성된 현재 블록에 대한 예측 블록은 가산기(125 및 165)로 전송될 수 있다.
가산기(125)는 인터 예측 및 인트라 예측에 의해 생성된 예측 블록들을 합산하고, 합산된 예측 블록들과 현재 블록들의 차분에 해당하는 레지듀얼 블록(residual block)을 생성할 수 있다.
변환부(130), 및 양자화부(140)는 레지듀얼 블록에 대하여 변환(Transformation) 및 양자화(Quantization)를 각각 실행할 수 있고, 그 결과 변환 계수(Transform Coefficient)가 생성될 수 있다.
역 양자화 부(150) 및 역 변환부(160)는 앞서 설명된 인터 예측(Inter-Prediction)에 사용되는 블록들을 얻기 위해, 변환 및 양자화된 레지듀얼 블록을 복원시킬 수 있다. 복원된 레지듀얼 블록은 인-루프 필터(170) 및 디코디드 픽쳐 버퍼(180)을 거쳐 움직임 보상부(115)로 전송될 수 있다. 인-루프 필터(170)에 대해서는 도 2에서 상세하게 설명될 것이다.
엔트로피 인코더(190)는 움직임 추정부에서 생성된 모션 벡터들(Motion Vectors), 그리고 변환 및 양자화에 의해 생성된 변환 계수(Transform Coefficient)를 수신하고, 엔트로피 부호화하여 비트스트림(Bitstream)을 출력할 수 있다. 엔트로피 인코딩 과정은 무손실 인코딩 과정으로써, 예를 들어, 허프만 블록 인코딩(Huffman block encoding)에 의해 실행될 수 있다.
도 2는 도 1에 도시된 인-루프 필터(In-loop filter)(170)를 상세하게 보여주는 블록도이다. HEVC 인-루프 필터(170)는 디블로킹 필터(Deblocking Filter; DF)(172) 및 샘플 적응적 오프셋(Sample Adaptive Offset; SAO) 필터(174)를 포함할 수 있다. 그러나, 본 발명을 적용하는 목적 및 응용에 따라 HEVC 이외의 비디오 압축 기술에 적용되는 경우, 적응적 루프 필터(Adaptive Loop Filter; ALF)(176) 등의 추가적인 필터링 과정을 더 포함할 수 있다. 종래 H.264/AVC 표준 하에서의 인-루프 필터는 디블로킹 필터만을 포함하였으나, 최근 표준화된 H.265/HEVC 표준 하에서는 샘플 적응적 오프셋 필터를 더 포함하여 화질을 향상시킬 수 있을 뿐만 아니라 압축 효율을 향상시킬 수 있게 되었다. 디블로킹 필터(172)는 블록의 경계에서 나타나는 블록화 현상을 디블로킹 필터링 과정을 통하여 제거할 수 있다. 그리고, 샘플 적응적 오프셋 필터(174) 또는 적응적 루프 필터(176)는 필터링 과정을 통하여 화질을 향상시킬 수 있다. 인-루프 필터(170)에서의 필터링 과정은 인코딩 또는 디코딩 과정시 실행될 수 있다.
인-루프 필터링은 HEVC 표준 하에서, 디블로킹(Deblocking) 및 샘플 적응적 오프셋(Sample Adaptive Offset) 순서로 실행될 수 있다. 그러나, 본 발명을 적용하는 목적 및 응용에 따라 HEVC 이외의 비디오 압축 기술에 적용되어 적응적 루프 필터(176)를 더 포함하는 경우에 있어서, HE(High Efficiency) 조건인 경우 적응적 루프 필터링(Adaptive Loop Filtering) 과정을 더 포함할 수 있다. 그리고, LC(Low Complexity) 조건인 경우 적응적 루프 필터링은 제외되고, 디블로킹 및 샘플 적응적 오프셋 순서로 실행될 수 있다.
디블로킹 필터(172)는 변환 및 양자화에 따른 블록화 현상(Blocking Artifact) 현상을 제거하는 동작을 수행할 수 있다. 복원된 영상은 블록 단위로 처리되기 때문에 블록 경계 부분에의 노이즈를 제거할 필요가 있다. 디블로킹은 블록들 사이의 경계에 대해 저대역 통과 필터링(Low Pass Filtering)을 선택적으로 실행하는 동작일 수 있다.
샘플 적응적 오프셋 필터(Sample Adaptive Offset)(174)는 현재 블록의 오프셋 값을 연산할 수 있다. 샘플 적응적 오프셋 필터(174)는 양자화 등의 인코딩 과정을 통해 발생하는 원본 프레임과 복원된 프레임 간의 왜곡을 화소(Sample) 단위의 오프셋을 통해 보상함으로써, 주관적 화질 및 인코딩(또는 압축) 효율을 향상시킬 수 있다. 특히, 왜곡의 정도가 다른 화소를 구분해 서로 다른 오프셋을 적용하는 적응적인 오프셋 보상 방법을 사용함으로써 왜곡을 효율적으로 줄일 수 있다. 디블로킹 필터(172)와는 달리, 샘플 적응적 오프셋은 원본 프레임과 복원된 프레임 간의 차이를 직접 계산하므로 주관적 화질뿐만 아니라 객관적 화질(Peak Signal to Noise Ratio; PSNR)도 향상시킬 수 있다.
본 발명을 적용하는 목적 및 응용에 따라 HEVC 이외의 비디오 압축 기술에 적용되어 적응적 루프 필터(Adaptive Loop Filter; ALF)(176)를 더 포함할 수 있다. 적응적 루프 필터(176)는 양자화 등의 인코딩 과정에서 발생하는 정보의 손실을 보상할 수 있다. 적응적 루프 필터(176)는 적응적 오프셋을 적용한 후에 적용될 수 있으며, HE(High Efficiency)의 경우에만 적용되도록 할 수 있다.
도 3은 HEVC를 기반으로 하여 인코딩된 비디오 데이터를 디코딩(복호화)하는 일반적인 디코더(200)를 보여주는 블록도이다.
도 1을 참조하여, 디코더(200)는 엔트로피 디코더(Entropy decoder)(210), 양자화 부(Inverse quantization; Q-1)(220), 역 변환부(Inverse transformation; T-1)(230), 가산기(240), 인-루프 필터(In-Loop Filter)(250), 프레임 메모리(Frame memory)(260), 인트라 예측부(Intra-prediction)(270), 및 움직임 보상부(Motion compensation)(280)를 포함할 수 있다. 각 구성 요소들의 동작에 관한 상세한 설명은, 앞서 도 1 및 도 2에서 설명된 것과 같으므로 생략하거나 간략히 설명하기로 한다.
엔트로피 디코더(210)는 입력된 비트스트림(Bitstream)에 대하여 무손실 디코딩을 실행할 수 있다. 무손실 디코딩은 허프만 블록 디코딩(huffman block decoding), 산술 복호화(arithmetic decoding), 또는 가변 길이 복호화(variable length decoding) 등에 의해 실행될 수 있다.
역 양자화부(220) 및 역 변환부(230)는 디코딩된 비트스트림을 역 양자화 및 역 변환 과정을 통하여 복원시킬 수 있다. 복원된 영상 데이터는 인트라 예측부(270) 및 움직임 보상부(280)에 의한 보상을 거친 후, 인-루프 필터(250)에서의 필터링 과정을 거칠 수 있다. 인-루프 필터(250)는 도 2에 도시된 바와 같이, 디블로킹 필터(Deblocking Filter; DF), 샘플 적응적 오프셋(Sample Adaptive Offset; SAO) 필터, 및 적응적 루프 필터(Adaptive Loop Filter; ALF)를 포함할 수 있다.
프레임 메모리(Frame memory)(260)은 필터링된 데이터를 보상하도록, 인트라 예측부(270) 및 움직임 보상부(280)로 전달하기 위한 임시 버퍼 역할을 실행할 수 있다. 그리고, 움직임 보상부(280), 가산기(240), 인-루프 필터(250), 및 프레임 메모리(260)을 거쳐, 영상 데이터는 디코딩된 영상(Decoded Picture)의 형태로써 최종적으로 출력될 수 있다.
도 4는 비디오 프레임의 병렬 처리 과정에서, 타일(Tile)들 사이에 발생하는 루프 필터 의존성(Loop Filter Dependency)을 보여주는 도면이다.
타일이란 HEVC(high efficiency video coding; HEVC)에서 채택된 것으로써, 비디오 프레임을 독립적으로 디코딩 가능한 영역으로 나눈 것이다. 타일은 헤더 정보(Header Information)를 가지고 인코딩될 수 있다. 타일은 복수의 코딩 트리 블록(Coding Tree Block; CTB)을 포함할 수 있다. HEVC는 기존의 비디오 압축 코덱들과 같이 하이브리드 코딩 구조를 사용하지만, MPEG-2부터 H.264/AVC에 이르기까지의 압축의 기본 블록 단위로 사용되었던 매크로 블록을 사용하지 않고 코딩 트리 블록(CTB)을 사용한다. CTB는 기존 코덱에서 사용하던 16×16 픽셀의 매크로블록(Macro Block)과 달리 크기가 가변적이기 때문에, 다양한 해상도의 영상을 보다 효과적으로 코딩할 수 있다.
래스터 스캔 코딩(raster scan coding)이란 래스터 스캔(Raster Scan) 순서에 따라 코딩 트리 블록들에 대해 순차적으로 인코딩 또는 디코딩(부/복호화)을 실행하는 것을 의미한다. 즉, 하나의 코딩 트리 블록에 대해 변환, 양자화, 역 변환, 역 양자화, 및 특히 타일 경계에서 실행되는 인-루프 필터링 등의 과정을 통하여 인코딩 또는 디코딩 처리가 완료되면, 래스터 스캔 순서에 따라 인접한 코딩 트리 블록에 대해 인코딩 또는 디코딩 처리가 실행되는 것을 의미한다.
웨이브 프런트 어프로치(Wave-Front Approach)란 래스터 스캔 순서에 따라 인코딩 또는 디코딩(부/복호화)을 진행하되, 행 단위로 일정한 딜레이(delay)를 주고 순차적으로 인코딩 또는 디코딩(부/복호화)을 실행하는 것을 의미한다.
일반적으로 복수의 타일들 각각은 독립적으로 디코딩 가능하다. 그러나, 타일들이 인접하는 경계에 있는 CTB들은, 인접한 타일들에 포함된 이웃 정보(Neighboring Information)를 이용하여 인-루프 필터링 과정을 실행하기 때문에 타일들 간의 의존성을 완전히 제거할 수 없다.
예를 들어, 도 4를 참조하여, 래스터 스캔(Raster Scan) 방향은 좌측에서 우측 방향이라 가정한다. 타일 1의 코딩 트리 블록(CTB) 0부터 웨이브 프런트 어프로치가 실행되므로, CTB 0, 1, 2, 3, 4, 5, 6... 순서대로 처리될 수 있다. 그리고, 타일 2의 웨이브 프런트 어프로치는 CTB 12, 13, 14, 15, 16... 순서대로 실행될 수 있다. 타일은 독립적으로 디코딩 가능한 영역이지만, 타일 1과 타일 2 사이의 경계에서 인-루프 필터링을 수행하기 위해서는 타일 1의 CTB 3에 대한 처리가 필수적으로 선행되어야 한다. 도 1 및 도 3을 참조하면, 인-루프 필터(240)에 의해 실행되는 인-루프 필터링(In-Loop Filtering) 과정이 부/복호화 과정에서 가장 마지막으로 실행되기 때문에(비록 프레임 메모리(260)가 있긴 하지만 움직임 보상을 위한 버퍼이므로 제외), 하나의 CTB에 대한 처리가 완료되어야 다음 CTB의 처리가 시작될 수 있기 때문이다. 타일 2의 웨이브 프런트 어프로치는 CTB 12부터 실행되는데, CTB 12를 처리하기 위한 이웃 정보를 CTB 3이 가지고 있기 때문이다.
타일 4의 경우도 마찬가지이다. 타일 4의 웨이브 프런트 어프로치는 36, 37, 38, 39, 40... 순서대로 실행될 수 있다. CTB 36을 처리하기 위해서는 CTB 8의 처리가 필수적으로 선행되어야 한다. 마찬가지로, CTB 37, 38, 39를 처리하기 위해서는 각각 CTB 9, 10, 11의 처리가 선행되어야 한다. 타일들이 비록 독립적으로 디코딩 가능하다고 하더라도, 인-루프 필터링를 실행하는데 있어서 발생하는 타일들 간에 서로 영향을 미치는 의존성(즉, 타일들 경계에서의 인-루프 필터링 과정에서의 의존성)은 멀티 프로세서를 이용한 병렬 처리의 효율을 감소시키는 원인이 되고 있다.
도 5는 본 발명의 실시 예에 따른 비디오 프레임을 병렬 처리하는 방법을 보여주는 도면이다.
도 2를 참조하여, 비디오 프레임을 4개의 타일들로 분할하고, 각각의 타일들은 6×2개의 CTB들로 분할된다고 가정하자. 결국 비디오 프레임은 8×6 개의 CTB들을 포함한다. 그리고, 이하 'm×n 지점'이라 함은 m행 n열에 위치한다는 것을 의미한다고 가정한다. 그리고, 이하 설명될 인코딩 또는 디코딩 과정은 코덱 회로 및 그래픽 처리 장치(Graphics Processing Unit; GPU)에 내장된 코어에 의해 실행될 수 있다. 그러나, 그래픽 처리 장치가 구비되지 않은 경우이거나, 코덱 회로가 구비되지 않은 동영상 포맷의 경우라면, 해당 포맷을 처리하는 소프트웨어가 그래픽 처리 장치에 로딩(loading)되어 소프트웨어적으로 처리되거나, 중앙 처리 장치(Graphics Processing Unit; GPU)에 의해 소프트웨어적으로도 처리될 수도 있다(도 12 참조).
일반적인 병렬 처리 방법에 의하면, 도 5에 도시된 비디오 프레임은 타일 1부터 타일 4까지 래스터 스캔 순서에 따라 순차적으로 인코딩 또는 디코딩을 실행한다. 우선 타일 1의 1열의 1×1 지점에 위치한 코딩 트리 블록(CTB)을 처리하고 1×2 지점에 위치한 CTB를 처리한다. 그 후, 2×1 지점에 위치한 CTB를 처리하고, 2×2 지점에 위치한 CTB를 처리한다. 이렇게 순차적으로 1열부터 6행까지 인코딩 또는 디코딩이 완료되면, 타일 2의 제 1 행부터 제 6 행까지 인코딩 또는 디코딩을 실행한다. 그리고, 순차적으로 타일 3 및 타일 4에 대한 인코딩 또는 디코딩이 완료되면, 현재 프레임에 대한 처리 과정이 완료되고 다음 프레임에 대한 인코딩 또는 디코딩을 실행한다.
본 발명의 실시 예에 따른 비디오 프레임의 병렬 처리 방법에 의하면, 비디오 프레임을, 프로세서의 코어(Core)의 개수만큼 분할하고, 복수의 코어들이 각각의 타일들에 대하여 웨이브 프런트 어프로치를 실행하여, 모든 타일들에 대해 동시에 병렬 처리를 실행할 수 있다. 이때, 상기 분할 과정은 CPU 또는 GPU에 내장된 코어에 의해 수행될 수 있으며, 비디오 프레임을 병렬 처리하는 코어는 CPU 또는 GPU에 내장된 코어를 의미할 수 있다. 예를 들어, 코어의 개수가 4개 라고 가정하면, 비디오 프레임을 4개로 나누고, 각각의 타일들을 코어 1 내지 코어 4가 웨이브 프런트 어프로치를 실행한다. 그리고, 현재 프레임에 대해 웨이브 프런트 어프로치를 실행하는 시점을 T1이라고 하자.
T1 시점에서 코어 1은 타일 1의 제 1 행에 포함된 코딩 트리 블록(CTB)들에 대해 래스터 스캔(Raster Scan) 방향에 따라 순차적으로 인코딩 또는 디코딩을 실행한다. 타일 1의 제 1 행에 배치된 CTB들(각각, 1×1 지점 및 1×2 지점에 위치)은 T2 시점에 처리가 완료된다. 타일 1의 제 1 행에 배치된 CTB들에 대한 처리가 완료되면, 코어 1은 타일 1의 제 2 행에 포함된 CTB들(각각, 2×1 지점 및 2×2 지점에 위치)에 대한 인코딩 또는 디코딩을 실행할 준비가 되고, 코어 2는 타일 2의 제 1 행에 포함된 CTB들(각각, 1×3 지점 및 1×4 지점에 위치)에 대한 인코딩 또는 디코딩을 실행할 준비가 된다. 1×2 지점에 위치한 CTB는 1×3 지점에 위치한 CTB를 처리하는데 필요한 이웃 정보를 포함하고 있기 때문이다. 예를 들어, 이웃 정보는 화소값 및/또는 샘플 적응적 오프셋(Sample Adaptive Offset; SAO) 정보 등을 포함할 수 있다.
이웃 정보는 코어-간 통신 메커니즘(Inter-Core Communication Mechanism)에 의해 인접한 다른 타일에 속하는 CTB로 전송될 수 있다. 코어-간 통신 메커니즘은 코어들 사이에 이웃 정보를 전달하기 위한 별도의 로컬 메모리(Local Memory)(예를 들어, 도 10에 도시된 320-1 내지 320-(N-1)) 장치를 둠으로써 구현될 수 있다. 로컬 메모리는 복수의 코어들 사이에 모두 배치될 필요는 없으며, 이웃 정보의 전달이 이루어지는 코어들 사이에만 배치될 수 있다. 예를 들어, 코어 1과 코어 2 사이, 코어 2와 코어 3 사이, 코어 3과 코어 4 사이에 각각 3개가 배치될 수 있다. 로컬 메모리는, 실시 예에 따라서, DRAM, SRAM 등과 같은 휘발성 메모리 장치일 수 있다. 또는, 이웃 정보는 코어-간 통신 메커니즘이 아닌, 코어들 사이에 공통으로 연결된 메모리(예를 들어, 도 11에 도시된 420)를 통하여 인접한 코어로 전송될 수 있다. 메모리는, 실시 예에 따라서, DRAM, SRAM 등과 같은 휘발성 메모리 장치일 수 있다.
이후, T2 시점에서, 코어 1은 타일 1의 제 2 행에 포함된 CTB들(각각, 2×1 지점 및 2×2 지점에 위치)에 대해 래스터 스캔 방향에 따라 순차적으로 인코딩 또는 디코딩을 실행하고, 코어 2는 타일 2의 제 1 행에 포함된 CTB들(각각, 1×3 지점 및 1×4 지점에 위치)에 대해 래스터 스캔 방향에 따라 순차적으로 인코딩 또는 디코딩을 실행한다. 즉, 인접한 타일(T2 시점의 경우 타일 1에 해당)로부터 이웃 정보를 전송받는 타일(T2 시점의 경우 타일 2에 해당)에 대한 인코딩 또는 디코딩 처리 시간은, 하나의 타일의 하나의 행에 포함된 CTB들에 대해 인코딩 또는 디코딩을 실행하는 시간만큼 지연(delay)되는 것이다. 다시 말하면, T2 시점에서 T3 시점에 이르기까지, 타일 1 및 타일 2에 포함된 CTB들에 대한 병렬 처리(Parallel Processing)가 실행되는 것이다.
T3 시점에서 타일 1의 제 2 행 및 타일 2의 제 1 행에 포함된 CTB들에 대한 인코딩 또는 디코딩이 완료되면, 코어 1은 타일 1의 제 3 행에 포함된 CTB들(각각, 3×1 지점 및 3×2 지점에 위치)에 대해 대한 인코딩 또는 디코딩을 실행할 준비가 되고, 코어 2는 타일 2의 제 2 행에 포함된 CTB들(각각, 2×3 지점 및 2×4 지점에 위치)에 대한 인코딩 또는 디코딩을 실행할 준비가 되고, 코어 3은 타일 3의 제 1 행에 포함된 CTB들(각각, 1×5 지점 및 1×6 지점에 위치)에 대한 인코딩 또는 디코딩을 실행할 준비가 된다. 2×2 지점에 위치한 CTB는 2×3 지점에 위치한 CTB를 처리하는데 필요한 이웃 정보를 포함하고 있고, 1×4 지점에 위치한 CTB는 1×5 지점에 위치한 CTB를 처리하는데 필요한 이웃 정보를 포함하고 있기 때문이다. 예를 들어, 이웃 정보는 화소값 및/또는 샘플 적응적 오프셋(Sample Adaptive Offset; SAO) 정보 등을 포함할 수 있다.
이웃 정보는 코어-간 통신 메커니즘에 의해 인접한 타일의 CTB로 전송되거나, 복수의 코어들과 공통으로 연결된 메모리를 통하여 전송될 수 있다. 이에 대한 상세한 설명은 상술한 바와 같으므로 생략하기로 한다.
T3 시점에서, 코어 1은 타일 1의 제 3 행에 포함된 CTB들(각각, 3×1 지점 및 3×2 지점에 위치)에 대해 래스터 스캔 방향에 따라 순차적으로 인코딩 또는 디코딩을 실행하고, 코어 2는 타일 2의 제 2 행에 포함된 CTB들(각각, 2×3 지점 및 2×4 지점에 위치)에 대해 래스터 스캔 방향에 따라 순차적으로 인코딩 또는 디코딩을 실행하고, 코어 3은 타일 3의 제 1 행에 포함된 CTB들(각각, 1×5 지점 및 1×6 지점에 위치)에 대해 래스터 스캔 방향에 따라 순차적으로 인코딩 또는 디코딩을 실행한다. 즉, T3 시점에서 T4 시점에 이르기까지 타일 1, 타일 2, 및 타일 3에 포함된 CTB들에 대해 병렬 처리가 실행되는 것이다.
T4 시점에서 타일 1의 제 3 행, 타일 2의 제 2 행, 및 타일 3의 제 1 행에 포함된 CTB들에 대한 병렬 처리가 완료되면, 코어 1은 타일 1의 제 4 행에 포함된 CTB들(각각, 4×1 지점 및 4×2 지점에 위치)에 대해 대한 인코딩 또는 디코딩을 실행할 준비가 되고, 코어 2는 타일 2의 제 3 행에 포함된 CTB들(각각, 3×3 지점 및 3×4 지점에 위치)에 대한 인코딩 또는 디코딩을 실행할 준비가 되고, 코어 3은 타일 3의 제 2 행에 포함된 CTB들(각각, 2×5 지점 및 2×6 지점에 위치)에 대한 인코딩 또는 디코딩을 실행할 준비가 되고, 코어 4는 타일 4의 제 1 행에 포함된 CTB들(각각, 1×7 지점 및 1×8 지점에 위치)에 대한 인코딩 또는 디코딩을 실행할 준비가 된다. 3×2 지점에 위치한 CTB는 3×3 지점에 위치한 CTB를 처리하는데 필요한 이웃 정보를 포함하고 있고, 2×4 지점에 위치한 CTB는 2×5 지점에 위치한 CTB를 처리하는데 필요한 이웃 정보를 포함하고 있고, 1×6 지점에 위치한 CTB는 1×7 지점에 위치한 CTB를 처리하는데 필요한 이웃 정보를 포함하고 있기 때문이다. 예를 들어, 이웃 정보는 화소값 및/또는 샘플 적응적 오프셋(Sample Adaptive Offset; SAO) 정보 등을 포함할 수 있다.
이웃 정보는 코어-간 통신 메커니즘에 의해 인접한 타일의 CTB로 전송되거나, 복수의 코어들과 공통으로 연결된 메모리를 통하여 전송될 수 있다. 이에 대한 상세한 설명은 상술한 바와 같으므로 생략하기로 한다.
T4 시점에서, 코어 1은 타일 1의 제 4 행에 포함된 CTB들(각각, 4×1 지점 및 4×2 지점에 위치)에 대해 래스터 스캔 방향에 따라 순차적으로 인코딩 또는 디코딩을 실행하고, 코어 2는 타일 2의 제 3 행에 포함된 CTB들(각각, 3×3 지점 및 3×4 지점에 위치)에 대해 래스터 스캔 방향에 따라 순차적으로 인코딩 또는 디코딩을 실행하고, 코어 3은 타일 3의 제 2 행에 포함된 CTB들(각각, 2×5 지점 및 2×6 지점에 위치)에 대해 래스터 스캔 방향에 따라 순차적으로 인코딩 또는 디코딩을 실행하고, 코어 4는 타일 4의 제 1 행에 포함된 CTB들(각각, 1×7 지점 및 1×8 지점에 위치)에 대해 래스터 스캔 방향에 따라 순차적으로 인코딩 또는 디코딩을 실행한다. 즉, T4 시점에서 T5 시점에 이르기까지, 타일 1, 타일 2, 타일 3, 및 타일 4에 대해 병렬 처리가 실행되는 것이다.
이후, 시간이 흐름에 따라, 코어 1 내지 코어 4는 각각 타일 1 내지 타일 4에 대해 래스터 스캔 방향에 따라 순차적으로 웨이브 프런트 어프로치를 실행한다. 이때, 타일 1 내지 타일 4에 대해 병렬 처리가 실행된다.
그리고, T7 시점에 타일 1에 대한 인코딩 또는 디코딩이 완료되면, T7 시점에서 T8 시점에 이르기까지, 타일 2의 제 6 행, 타일 3의 제 5행, 그리고 타일 4의 제 4행에 포함된 CTB들에 대해 병렬 처리가 실행된다.
이후, T8 시점에서 T9 시점에 이르기까지, 타일 3의 제 6행 및 타일 4의 제 5 행에 대한 병렬 처리가 실행되고, T9 시점에 이르면 타일 4에 대한 웨이브 프런트 어프로치가 시작된다. T10 시점에 타일 4에 대한 인코딩 또는 디코딩이 완료됨으로써 현재 프레임에 대한 모든 처리가 마무리되면, 다음 프레임에 대해 처리가 실행된다. 즉, 인접한 타일로부터 이웃 정보를 전송받는 타일에 대한 처리 시간은, 하나의 타일의 하나의 행에 포함된 CTB들에 대해 웨이브 프런트 어프로치를 실행하는 시간만큼 지연(delay)되는 것이다.
일반적인 병렬 처리 방법에 따라 필터링을 실행한다면, 하나의 타일에 대해 처리를 완료하는데 필요한 시간인 T6의 6배인 T24(미도시)에 이르러야 하나의 프레임에 대해 처리를 완료할 수 있다. 그러나, 본 발명에 따라 각각의 타일들에 대해 병렬 처리(Parallel Processing)를 실행하면, T10-T1 정도의 시간을 필요로 하므로, 처리 시간을 단축할 수 있어서, 상당한 연산량을 요구하는 복잡한 데이터의 처리에 있어서도 효율적으로 인코딩 및 디코딩을 실행할 수 있다.
그러나, 본 발명의 실시 예에 따른 비디오 프레임의 병렬 처리 방법에 의하면, 비디오 프레임을 프레임을 코어(Core)의 개수의 정수 배 만큼 복수의 타일들로 분할할 수도 있고, 코어의 개수보다 많게 또는 적게 분할할 수도 있음은 자명하다. 다만, 분할된 타일의 개수가 코어의 개수보다 적다면, 병렬 처리를 수행하지 않는 코어가 있으므로 효율성이 저하될 것이다. 예를 들어, 프로세서의 개수가 4개라고 가정하면, 비디오 프레임을 8개의 타일들로 나누거나, 10개로 나눌 수도 있다. 비디오 프레임을 8개의 타일들로 나누는 경우, 4개의 타일들을 4개의 코어가 각각 나누어 처리한 후, 나머지 4 개의 타일들을 4개의 코어가 각각 처리하여 하나의 프레임에 대한 부/복호화가 가능하다. 비디오 프레임을 10개의 타일들로 나누는 경우, 4개의 타일들을 4개의 코어가 각각 나누어 처리한 후, 나머지 4 개의 타일들을 4개의 코어가 각각 처리하고, 나머지 2개의 타일들을 2개의 코어가 처리하여 하나의 프레임에 대한 부/복호화를 실행할 수 있다.
도 6은 본 발명의 실시 예에 따른 비디오 프레임을 병렬 처리하는 방법을 시간의 흐름에 따라 보여주는 도면이다. 웨이브 프런트 어프로치에 따라 각각의 타일들을 시차를 두고 병렬적으로 처리하므로, 이를 파이프라인 다이어그램(Pipeline Diagram)이라고도 한다.
도 6을 참조하여, 웨이브 프런트 어프로치를 실행하는 프로세서의 코어 개수를 N이라고 하고, 비디오 프레임의 코딩 트리 블록은 m 개의 행으로 이루어져 있다고 가정하자. 그러면, 프로세서의 코어 개수에 따라 현재의 프레임을 N개의 타일들로 분할하고, 코어 1 내지 코어 N은 각각 분할된 타일 1 내지 타일 N에 대해 각각 병렬 처리를 실행한다. 현재의 비디오 프레임에 대해 웨이브 프런트 어프로치가 실행되는 시점을 T1이라 하자.
T1 시점에서, 코어 1은 타일 1의 제 1 행에 포함된 코딩 트리 블록(CTB)들에 대해 인코딩 또는 디코딩을 실행한다. T2 시점에서 타일 1의 제 1 행에 포함된 CTB들에 대한 처리가 완료되면, 코어 1 및 코어 2는 타일 1의 제 2 행 및, 타일 2의 제 1 행에 대해 인코딩 또는 디코딩을 실행할 준비가 된다.
T2 시점에서, 코어 1은 타일 1의 제 2 행에 포함된 CTB들에 대해 래스터 스캔 방향에 따라 순차적으로 인코딩 또는 디코딩을 실행하고, 코어 2는 타일 2의 제 1 행에 포함된 CTB들에 대해 래스터 스캔 방향에 따라 순차적으로 인코딩 또는 디코딩을 실행한다. 즉, 타일 1의 제 2 행 및 타일 2의 제 1 행에 대해 병렬 처리가 실행되는 것이다. 이때, 타일 1의 제 1 행과 타일 2의 제 1 행이 인접한 부분에 있는 CTB들 중, 타일 1에 속한 CTB에 저장된 이웃 정보는 코어-간 통신 메커니즘(Inter-Core Communication Mechanism)에 의해 타일 2에 속한 인접한 CTB로 전송될 수 있다.
코어-간 통신 메커니즘은 전술한 바와 같으므로 생략하기로 한다.
T3 시점에서, 코어 1은 타일 1의 제 3 행에 포함된 CTB들에 대해 래스터 스캔 방향에 따라 순차적으로 인코딩 또는 디코딩을 실행하고, 코어 2는 타일 2의 제 2 행에 포함된 CTB들에 대해 래스터 스캔 방향에 따라 순차적으로 인코딩 또는 디코딩을 실행하고, 코어 3은 타일 3의 제 1 행에 포함된 CTB들에 대해 래스터 스캔 방향에 따라 순차적으로 인코딩 또는 디코딩을 실행한다. 즉, 타일 1의 제 3행, 타일 2의 제 2 행, 및 타일 3의 제 1 행에 대해 병렬 처리가 실행되는 것이다. 이때, 타일 1의 제 2 행과 타일 2의 제 2 행이 인접한 부분에 있는 CTB들 중, 타일 1에 속한 CTB에 저장된 이웃 정보는 코어-간 통신 메커니즘(Inter-Core Communication Mechanism)에 의해 타일 2에 속한 인접한 CTB로 전송될 수 있다. 타일 2의 제 1 행과 타일 3의 제 1 행이 인접한 부분에 있는 CTB들의 경우도 마찬가지이다.
시간의 흐름에 따라 순차적으로 인코딩 또는 디코딩이 진행되면, T(m+1) 시점에서 타일 1에 대한 처리는 완료된다. 이후 병렬 처리 과정이 진행됨에 따라, 복수의 타일들에 대해 순차적으로 병렬 처리가 완료되며, T(N+m) 시점에 이르면 타일 N에 대한 처리가 완료됨으로써 현재 프레임에 대한 모든 인코딩 또는 디코딩이 완료된다.
일반적인 웨이브 프런트 어프로치 방법에 따라 필터링을 실행한다면, 하나의 타일에 대해 웨이브 프런트 어프로치를 완료하는데 필요한 시간인 Tm의 N배의 시간 동안 웨이브 프런트 어프로치를 실행해야 하나의 프레임에 대한 처리를 완료할 수 있다. 그러나, 본 발명에 의하면, T(N+m-1) 정도의 시간을 필요로 하므로, 처리 시간을 단축할 수 있어서, 상당한 연산량을 요구하는 복잡한 데이터를 효율적으로 처리하고, 처리 시간을 단축할 수 있다.
도 7은 본 발명의 다른 실시 예에 따른 비디오 프레임을 병렬 처리하는 방법을 보여주는 도면이다. 이하, 도면에서 어둡게 음영 처리된 CTB들은 인코딩 또는 디코딩이 완료된 부분을 의미한다. 도 7을 참조하여, 비디오 프레임을 래스터 스캔 방향에 수직인 방향(즉, 도면에서 세로 방향)으로만 분할하지 않고, 래스터 스캔 방향(즉, 도면에서 가로 방향) 및 래스터 스캔 방향에 수직인 방향으로 동시에 분할할 수도 있다.
도 7을 참조하여, 프로세서의 개수가 8개 이고, 비디오 프레임을 2행 4열로 전체 8개의 타일들로 나누어 병렬 처리를 실행할 수 있다. 그리고, 타일 1 내지 타일 8을 각각 코어 1 내지 코어 8에 할당되어 인코딩 또는 디코딩 처리될 수 있다. 앞서 설명한 바와 같이, HEVC 기반의 데이터에서는, 프레임을 동일한 픽셀 사이즈를 갖는 매크로블록(Macro Block)으로 일률적으로 분할하는 것이 아니고, 데이터의 양, 복잡도 등등에 따라서, 그 크기를 다양하게 할 수 있는 코딩 트리 블록(Coding-Tree Block; CTB) 단위로 분할하기 때문이다. 따라서, 코딩 트리 블록에 포함된 데이터의 양 및 복잡도 등등에 따라, 독립적으로 디코딩할 수 있는 영역인 타일을 분할하는 방법도 다양해질 수 있기 때문이다.
현재의 프레임에 대해 병렬 처리를 실행하는 시점을 T1 시점이라고 하자. T1 시점에서 코어 1은 타일 1의 제 1 행에 포함된 코딩 트리 블록(CTB)들에 대해 래스터 스캔(Raster Scan) 방향에 따라 순차적으로 인코딩 또는 디코딩을 실행한다. 타일 1의 제 1 행에 배치된 CTB들(각각, 1×1 지점 내지 1×4 지점에 위치)은 T5 시점에 인코딩 또는 디코딩이 완료된다. 타일 1의 제 1 행에 배치된 CTB들에 대한 인코딩 또는 디코딩이 완료되면, 코어 1은 타일 1의 제 2 행에 포함된 CTB들(각각, 2×1 지점 내지 2×4 지점에 위치)에 대한 인코딩 또는 디코딩을 실행할 준비가 되고, 코어 2는 타일 2의 제 1 행에 포함된 CTB들(각각, 1×5 지점 내지 1×8 지점에 위치)에 대한 인코딩 또는 디코딩을 실행할 준비가 된다. 1×4 지점에 위치한 CTB는 1×5 지점에 위치한 CTB를 처리하는데 필요한 이웃 정보를 포함하고 있기 때문이다. 예를 들어, 이웃 정보는 화소값 및/또는 샘플 적응적 오프셋(Sample Adaptive Offset; SAO) 정보 등을 포함할 수 있다.
T5 시점에서, 타일 1의 제 1 행에 포함된 CTB들에 대한 인코딩 또는 디코딩 완료되면, 코어 1 및 코어 2는 각각 타일 1의 제 2 행에 포함된 CTB들 및, 타일 2의 제 1 행에 포함된 CTB들에 대해 래스터 스캔 방향에 따라 순차적으로 인코딩 또는 디코딩을 실행한다. 즉, 타일 1의 제 2 행 및 타일 2의 제 1 행에 포함된 CTB들에 대한 병렬 처리가 실행되는 것이다. 타일 1과 타일 2가 인접하는 부분에 배치된 CTB들 중 타일 1에 속하는 CTB(1×4 지점에 위치)에 포함된 이웃 정보는 코어-간 통신 메커니즘에 의해 타일 2에 속하는 CTB(1×5 지점에 위치)로 전송될 수 있다. 예를 들어, 코어-간 통신 메커니즘은 복수의 코어들 사이에 배치된 로컬 메모리(Local Memory)(예를 들어, 도 10에 도시된 320-1 내지 320-(N-1))들을 배치함으로써 구현될 수 있다. 로컬 메모리는, 실시 예에 따라서, DRAM, SRAM 등과 같은 휘발성 메모리 장치일 수 있다. 또는, 이웃 정보는 코어-간 통신 메커니즘이 아닌, 코어들 사이에 공통으로 연결된 메모리(예를 들어, 도 11에 도시된 420)를 통하여 인접한 코어로 전송될 수 있다. 메모리는, 실시 예에 따라서, DRAM, SRAM 등과 같은 휘발성 메모리 장치일 수 있다.
T9 시점에서, 타일 1의 제 2 행에 포함된 CTB들 및 타일 2의 제 1 행에 포함된 CTB들에 대한 병렬 처리가 완료되면, 코어 1 내지 코어 3은 각각 타일 1의 제 3 행에 포함된 CTB들, 타일 2의 제 2 행에 포함된 CTB들, 및 타일 3의 제 1 행에 포함된 CTB들에 대한 인코딩 또는 디코딩이 래스터 스캔 방향에 따라 순차적으로 실행된다.
이후, 시간이 흐름에 따라 T22 시점에서 타일 1의 마지막 행에 포함된 첫 번째 CTB(즉, 6×1 지점에 위치한 CTB)에 대한 병렬 처리가 완료되면, 코어 5는 타일 5에 대한 인코딩 또는 디코딩을 실행할 수 있는 상태가 된다. 왜냐하면, 타일간의 의존성에 의하더라도 6×1 지점에 위치한 CTB의 인코딩 또는 디코딩이 완료되면, 7×1 지점에 위치한 CTB는 인코딩 또는 디코딩 처리될 수 있는 상태가 되기 때문이다. 따라서, T22에서 6×1 지점에 위치한 CTB의 인코딩 또는 디코딩이 완료됨과 동시에 7×1 지점에 위치한 CTB의 인코딩 또는 디코딩이 시작될 수 있다. 이와 유사하게, T26 시점에서, 6×5 지점에 위치하는 타일 2에 포함된 CTB에 대한 인코딩 또는 디코딩이 완료됨과 동시에, 7×5 지점에 위치하는 타일 6에 포함된 CTB에 대한 인코딩 또는 디코딩이 실행될 수 있다. 그리고, 7×9 및 7×13 지점에 위치하는 CTB들도 마찬가지이다. 이와 같이 래스터 스캔 방향(도면에서 가로 방향)으로 분할하면 처리 속도를 더욱 향상시킬 수 있다.
도 8은 본 발명의 또 다른 실시 예에 따른 비디오 프레임을 병렬 처리하는 방법을 보여주는 도면이다. 도 8을 참조하여, 코어의 개수는 5개이고, 현재의 프레임은 8개의 타일들로 분할되었다고 가정하자.
앞서 설명한 바와 유사하게, 코어 1 내지 코어 4는 타일 1 내지 타일 4에 대해 각각 인코딩 또는 디코딩을 실행한다. 그리고, T22 시점에서 6×1 지점에 위치하는 CTB에 대한 인코딩 또는 디코딩이 완료되면, 7×1 지점에 위치한 CTB에 대한 인코딩 또는 디코딩이 코어 5에 의해 실행될 수 있다.
그러나, 이와 같이 코어의 개수가 분할된 타일들의 개수보다 작은 경우라면, 6×5 지점에 위치한 CTB에 대한 인코딩 또는 디코딩이 완료된다 하더라도 7×5 지점에 위치한 CTB에 대한 인코딩 또는 디코딩을 실행할 수 없다. 코어 2는 타일 2에 대한 인코딩 또는 디코딩을 실행하고 있기 때문에 T29에 이르러서 타일 2에 대한 모든 처리가 완료되어야 비로소 타일 6에 대한 인코딩 또는 디코딩 처리를 실행할 수 있기 때문이다. 타일 7 및 타일 8의 경우도 이와 마찬가지이다.
도 9는 본 발명의 또 다른 실시 예에 따른 비디오 프레임을 병렬 처리하는 방법을 보여주는 도면이다. 도 9를 참조하여, 코어의 개수는 3개이고 현재의 프레임은 4개의 타일들로 래스터 스캔 방향에 수직 방향으로만 분할되었다고 가정하자.
앞서 설명된 바와 마찬가지로, T5 시점에서, 1×5 지점에 위치하는 CTB 및 2×1 지점에 위치하는 CTB에 대한 인코딩 또는 디코딩이 시작된다. 그리고, T9 시점에서, 1×9 지점에 위치하는 CTB 및 2×5 지점에 위치하는 CTB에 대한 인코딩 또는 디코딩이 시작된다.
그러나, T13 시점에 1×13 지점에 위치하는 CTB에 대한 인코딩 또는 디코딩은 실행될 수 없는데, 이는 코어 1 내지 코어 3 모두 각각 타일 1 내지 타일 3을 처리하고 있기 때문이다. 따라서, 이러한 경우에는, 타일 1에 대한 모든 인코딩 또는 디코딩이 완료되는 시점인 T49에 이르러서야 비로소 타일 4에 대한 인코딩 또는 디코딩을 실행할 수 있다.
도 10은 본 발명의 실시 예에 따른 비디오 프레임을 병렬 처리하는 방법에 있어서, 코어-간 통신 메커니즘(Inter-Core Communication Mechanism)을 구현하기 위한 프로세서의 구성을 보여주는 블록도이다. 여기서 프로세싱 유닛은 CPU 또는 GPU를 의미할 수 있다. GPU 및 코덱 회로가 구비된 경우라면, 프로세싱 유닛은 GPU를 의미하지만, GPU가 구비되지 않은 경우라면, CPU에 의해 인코딩 또는 디코딩 과정이 소프트웨어적으로 처리되는 경우를 의미할 수 있다. 프로세싱 유닛은 복수의 코어들(310-1 내지 310-N), 및 복수의 로컬 메모리들(320-1 내지 320-(N-1))을 포함할 수 있다. 이들 복수의 로컬 메모리들에 의해 코어-간 통신 메커니즘이 구현될 수 있다. 로컬 메모리는 복수의 코어들 사이에 모두 배치될 필요는 없으며, 이웃 정보의 전달이 이루어지는 코어들 사이에만 배치될 수 있다. 예를 들어, 코어 1과 코어 2 사이, 코어 2와 코어 3 사이,...및 코어 N-1과 코어 N 사이에 각각 N-1개가 배치될 수 있다. 로컬 메모리는, 실시 예에 따라서, DRAM, SRAM 등과 같은 휘발성 메모리 장치일 수 있다. 그리고 프로세서는 시스템 버스(330)를 통하여 다른 장치들과 데이터를 주고받을 수 있다.
도 11은 본 발명의 다른 실시 예에 따른 비디오 프레임을 병렬 처리하는 방법에 있어서, 이웃 정보를 전달하기 위한 시스템(300)을 보여주는 도면이다. 이웃 정보를 전달하는 시스템(300)은 프로세싱 유닛, 메모리(420), 및 시스템 버스(430)를 포함할 수 있다. 이웃 정보는 코어-간 통신 메커니즘이 아닌, 코어들(410-1 내지 410-N) 사이에 공통으로 연결된 메모리(420)를 통하여 인접한 코어로 전송될 수 있다. 메모리는, 실시 예에 따라서, DRAM, SRAM 등과 같은 휘발성 메모리 장치일 수 있다. 그리고 프로세싱 유닛은 시스템 버스(430)을 통하여 다른 장치들과 데이터를 주고받을 수 있다.
도 12는 본 발명의 실시 예에 따른 멀티미디어 장치(1000)를 보여주는 블록도이다.
도 12를 참조하여, 멀티미디어 장치(1000)는 중앙 처리 장치(Central Processing Unit; CPU)(1100), 그래픽 처리 장치(Graphics Processing Unit; GPU)(1200), 비디오 코덱(1300), 메모리(1400), 모뎀(1500), 불휘발성 메모리장치(1600), 유저 인터페이스(1700), 및/또는 시스템 버스(1800)를 포함할 수 있다. CPU(1100)는 복수의 코어들을 포함할 수 있으며, 각각의 코어들은 멀티미디어 장치(1000)의 구성요소 각각에 대한 전반적인 작업을 실행할 수 있다. 비록 도면에는 GPU(1200) 및 비디오 코덱(1300)이 모두 구비된 것으로 도시되었지만, 이들이 구비되지 않은 시스템인 경우, CPU(1100)는 본 명세서에서 설명된 병렬 처리 작업을 소프트웨어적으로 실행할 수 있다.
GPU(1200) 및 비디오 코덱(1300)은 영상 처리에 관련된 전반적인 작업을 실행할 수 있다. GPU(1200)에 포함된 복수의 코어들은 본 발명의 실시 예에 따라 비디오 프레임을 복수의 타일들로 나눈 후, 각각의 타일들에 대한 병렬 처리를 실행할 수 있다.
메모리(1400)는 CPU(1100)와 통신할 수 있다. 메모리(1400)는 CPU(1100) 또는 멀티미디어 장치(1000)의 동작 메모리(또는 메인 메모리)일 수 있다. 메모리(1400)는 SRAM(Static RAM), DRAM(Dynamic RAM), SDRAM(Synchronous DRAM) 등과 같은 휘발성 메모리, 또는 플래시 메모리, PRAM(Phase-change RAM), MRAM (Magnetic RAM), RRAM(Resistive RAM), FRAM(Ferroelectric RAM) 등과 같은 불휘발성 메모리를 포함할 수 있다.
모뎀(1500)은 CPU(1100)의 제어에 따라 외부 장치와 통신을 수행할 수 있다. 예를 들어, 모뎀(1500)은 외부 장치와 유선 또는 무선 통신을 수행할 수 있다. 모뎀(1500)은 LTE (Long Term Evolution), 와이맥스(WiMax), GSM (Global System for Mobile communcation), CDMA (Code Division Multiple Access), 블루투스(Bluetooth), NFC (Near Field Communication), 와이파이(WiFi), RFID (Radio Frequency IDentification) 등과 같은 다양한 무선 통신 방식들, 또는 USB (Universal Serial Bus), SATA (Serial AT Attachment), SCSI (Small Computer Small Interface), 파이어와이어(Firewire), PCI (Peripheral Component Interconnection) 등과 같은 다양한 유선 통신 방식들 중 적어도 하나에 기반하여 통신을 수행할 수 있다.
NVM(1600)은 멀티미디어 장치(1000)에서 장기적으로 저장하고자 하는 데이터를 저장할 수 있다. NVM(1600)은 하드 디스크 드라이브(Hard Disk Drive; HDD) 또는 플래시 메모리, PRAM(Phase-change RAM), MRAM(Magnetic RAM), RRAM(Resistive RAM), FRAM(Ferroelectric RAM) 등과 같은 비휘발성 메모리를 포함할 수 있다.
사용자 인터페이스(1700)는 CPU(1100)의 제어에 따라 사용자와 통신할 수 있다. 예를 들어, 사용자 인터페이스(1700)는 키보드, 키패드, 버튼, 터치 패널, 터치 스크린, 터치 패드, 터치 볼, 카메라, 마이크, 자이로스코프 센서, 진동 센서, 등과 같은 사용자 입력 인터페이스들을 포함할 수 있다. 사용자 인터페이스(1700)는 LCD (Liquid Crystal Display), OLED (Organic Light Emitting Diode) 표시 장치, AMOLED (Active Matrix OLED) 표시 장치, LED, 스피커, 모터 등과 같은 사용자 출력 인터페이스들을 포함할 수 있다.
예시적으로, 사용자 인터페이스(1700)는 이미지 센서와 같은 영상 촬영 장치와 LCD, AMOLED와 같은 영상 표시 장치를 포함할 수 있다. 또는, 사용자 인터페이스(1700)는 이미지 센서와 같은 영상 촬영 장치를 포함하지 않고, LCD, AMOLED와 같은 영상 표시 장치를 포함할 수도 있다.
도 13은 본 발명의 실시 예에 따른 휴대용 단말기를 보여주는 블록도이다. 도 13을 참조하면, 본 발명의 실시 예에 따른 휴대용 단말기(2000)는 이미지 처리부(2100), 무선 송수신부(2200), 오디오 처리부(2300), 이미지 파일 생성부(2400), 불휘발성 메모리 장치(2500), 사용자 인터페이스(2600), 그리고 컨트롤러(2700)를 포함할 수 있다.
이미지 처리부(2100)는 렌즈(2110), 이미지 센서(2120), 이미지 프로세서(2130), 그리고 디스플레이부(2140)를 포함할 수 있다. 무선 송수신부(2200)는 안테나(2210), 트랜시버(2220), 모뎀(2230)을 포함할 수 있다. 오디오 처리부(2300)는 오디오 프로세서(2310), 마이크(2320), 그리고 스피커(2330)를 포함할 수 있다.
컨트롤러(2700)는 본 발명의 실시 예에 따라 구동되는 CPU, GPU, 및 코덱 회로 등을 포함할 수 있다. GPU 및 코덱 회로, 또는 CPU에 의해 비디오 프레임을 병렬 처리하는 방법에 대해서는 전술한 바와 같으므로 자세한 설명은 생략하기로 한다.
컨트롤러(2700)는 다양한 형태들의 패키지를 이용하여 실장될 수 있다. 예를 들면, 컨트롤러(2700)는 PoP(Package on Package), Ball grid arrays(BGAs), Chip scale packages(CSPs), Plastic Leaded Chip Carrier(PLCC), Plastic Dual In-Line Package(PDIP), Die in Waffle Pack, Die in Wafer Form, Chip On Board(COB), Ceramic Dual In-Line Package(CERDIP), Plastic Metric Quad Flat Pack(MQFP), Thin Quad Flatpack(TQFP), Small Outline(SOIC), Shrink Small Outline Package(SSOP), Thin Small Outline(TSOP), System In Package(SIP), Multi Chip Package(MCP), Wafer-level Fabricated Package(WFP), Wafer-Level Processed Stack Package(WSP), 등과 같은 패키지들을 이용하여 실장 될 수 있다.
본 발명의 범위 또는 기술적 사상을 벗어나지 않고 본 발명의 구조가 다양하게 수정되거나 변경될 수 있음은 이 분야에 숙련된 자들에게 자명하다. 상술한 내용을 고려하여 볼 때, 만약 본 발명의 수정 및 변경이 아래의 청구항들 및 동등물의 범주 내에 속한다면, 본 발명이 이 발명의 변경 및 수정을 포함하는 것으로 여겨진다.
100: 인코더 110: 움직임 추정부
115: 움직임 보상부 120: 인트라 예측부
125: 가산기 130: 변환부
140: 양자화부 150: 역 양자화부
160: 역 변환부 165: 가산기
170: 인-루프 필터 172: 디블로킹 필터
174: 샘플 적응적 오프셋 필터 176: 적응적 루프 필터
180: 디코디드 픽쳐 버퍼 190: 엔트로피 인코더
200: 디코더 210: 엔트로피 디코더
220: 양자화 부 230: 역 변환부
240: 가산기 250: 인-루프 필터
260: 프레임 메모리 270: 인트라 예측부
280: 움직임 보상부

Claims (10)

  1. m×n 개의 코딩 트리 블록(coding-tree block)들을 포함하는 비디오 프레임의 병렬 처리 방법에 있어서:
    상기 비디오 프레임을 래스터 스캔(raster scan) 방향에 수직 방향으로 N 개의 타일로 분할하는 단계; 및
    상기 N 개의 타일들 각각에 포함된 코딩 트리 블록들을 제 1 행부터 제 m 행까지 순차적으로 상기 래스터 스캔 방향에 따라 부호화 또는 복호화하는 단계를 포함하되,
    제 K 타일에 대한 부호화 또는 복호화는(K는 2 이상, 상기 N 이하의 자연수), 제 K-1 타일의 제 1 행에 포함된 코딩 트리 블록들에 대한 부호화 또는 복호화가 완료되는 시점에 시작되는 비디오 프레임의 병렬 처리 방법.
  2. 제 1 항에 있어서,
    상기 제 K 타일에 대한 부호화 또는 복호화는 상기 제 K-1 타일의 제 2 행에 포함된 코딩 트리 블록들에 대한 부호화 또는 복호화가 시작됨과 동시에 시작되는 비디오 프레임의 병렬 처리 방법.
  3. 제 2 항에 있어서,
    상기 제 K-1 타일의 상기 제 1 행에 포함된 코딩 트리 블록들 중 마지막에 부호화 또는 복호화 되는 코딩 트리 블록과 상기 제 K 타일의 상기 제 1 행에 포함된 코딩 트리 블록들 중 처음 부호화 또는 복호화 되는 코딩 트리 블록은 서로 인접하는 비디오 프레임의 병렬 처리 방법.
  4. 제 3 항에 있어서,
    상기 제 K-1 타일 및 상기 제 K 타일에 각각 속하고 서로 인접한 코딩 트리 블록들 중, 상기 제 K-1 타일에 속하는 코딩 트리 블록에 포함된 이웃 정보(neighboring information)는 프로세서 내의 복수의 코어(core)들 사이에 연결된 로컬 메모리들을 통하여 상기 제 K 타일에 속하는 코딩 트리 블록으로 전송되는 비디오 프레임의 병렬 처리 방법.
  5. 제 3 항에 있어서,
    상기 N이 프로세서 내의 복수의 코어(core)들의 개수와 동일한 경우, 각각의 타일들은 상기 각각의 코어들에 의해 부호화 또는 복호화되는 비디오 프레임의 병렬 처리 방법.
  6. 복수의 코딩 트리 블록(coding-tree block)들을 포함하는 비디오 프레임의 병렬 처리 방법에 있어서:
    상기 비디오 프레임을 래스터 스캔(raster scan) 방향으로 M 개의 행 및 상기 래스터 스캔 방향에 수직 방향으로 N 개의 열로 분할하여, M×N 개의 타일들을 생성하는 단계; 및
    상기 M×N 개의 타일들 각각에 포함된 코딩 트리 블록들을 상기 래스터 스캔 방향에 따라 순차적으로 부호화 또는 복호화하는 단계를 포함하되,
    제 J 행, 제 K 열에 위치하는 [J:K] (J는 상기 M 이하, K는 N 이하의 자연수) 타일의 부호화 또는 복호화는, [J:K-1] 타일의 제 1 행에 포함된 코딩 트리 블록들에 대한 부호화 또는 복호화가 완료되는 시점에 시작되는 비디오 프레임의 병렬 처리 방법.
  7. 제 6 항에 있어서,
    상기 [J:K] 타일의 부호화 또는 복호화는 상기 [J:K-1] 타일의 제 2 행에 포함된 코딩 트리 블록들에 대한 부호화 또는 복호화가 시작됨과 동시에 시작되는 비디오 프레임의 병렬 처리 방법.
  8. 제 7 항에 있어서,
    상기 [J:K-1] 타일의 상기 제 1 행에 포함된 코딩 트리 블록들 중 마지막에 부호화 또는 복호화 되는 코딩 트리 블록과, 상기 [J:K] 타일의 상기 제 1 행에 포함된 코딩 트리 블록들 중 처음 부호화 또는 복호화 되는 코딩 트리 블록은, 서로 인접하는 비디오 프레임의 병렬 처리 방법.
  9. 제 8 항에 있어서,
    상기 타일들의 개수(M×N)가 프로세서 내의 복수의 코어(core)들의 개수와 동일한 경우, [J+1:K] 타일의 부호화 또는 복호화는, 상기 [J:K] 타일의 마지막 행에 포함된 코딩 트리 블록들 중 적어도 하나의 코딩 트리 블록에 대한 부호화 또는 복호화가 완료되는 시점에 시작하는 비디오 프레임의 병렬 처리 방법.
  10. 제 8 항에 있어서,
    상기 타일들의 개수(M×N)가 프로세서 내의 복수의 코어(core)들의 개수보다 큰 경우, 상기 복수의 타일들은 [1:1] 타일부터 래스터 스캔 방향으로 상기 복수의 코어들에 의해 각각 할당되어 부호화 또는 복호화 되고,
    할당되지 않은 타일들은, 상기 할당된 복수의 타일들 각각에 대한 부호화 또는 복호화가 완료되는 시점에, 상기 부호화 또는 복호화가 완료된 타일을 부호화 또는 복호화하였던 코어에 의해, 래스터 스캔 방향에 따라 순서대로 부호화 또는 복호화되는 비디오 프레임의 병렬 처리 방법.
KR1020130141572A 2013-11-20 2013-11-20 웨이브-프런트 어프로치에 기초한 비디오 프레임의 병렬 처리 방법 KR20150057790A (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020130141572A KR20150057790A (ko) 2013-11-20 2013-11-20 웨이브-프런트 어프로치에 기초한 비디오 프레임의 병렬 처리 방법
US14/532,373 US20150139334A1 (en) 2013-11-20 2014-11-04 Method for parallel processing of a video frame based on wave-front approach

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020130141572A KR20150057790A (ko) 2013-11-20 2013-11-20 웨이브-프런트 어프로치에 기초한 비디오 프레임의 병렬 처리 방법

Publications (1)

Publication Number Publication Date
KR20150057790A true KR20150057790A (ko) 2015-05-28

Family

ID=53173285

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020130141572A KR20150057790A (ko) 2013-11-20 2013-11-20 웨이브-프런트 어프로치에 기초한 비디오 프레임의 병렬 처리 방법

Country Status (2)

Country Link
US (1) US20150139334A1 (ko)
KR (1) KR20150057790A (ko)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150228106A1 (en) * 2014-02-13 2015-08-13 Vixs Systems Inc. Low latency video texture mapping via tight integration of codec engine with 3d graphics engine
JP6272194B2 (ja) * 2014-09-24 2018-01-31 株式会社日立情報通信エンジニアリング 動画像符号化装置、動画像復号装置、および動画像符号化・復号化方法
US10277913B2 (en) * 2014-10-22 2019-04-30 Samsung Electronics Co., Ltd. Application processor for performing real time in-loop filtering, method thereof and system including the same
JP6613618B2 (ja) * 2015-05-20 2019-12-04 株式会社ソシオネクスト 画像処理装置および画像処理方法
CN104954808B (zh) * 2015-06-17 2018-03-23 福州瑞芯微电子股份有限公司 一种基于编码树单元CTU buffer实现轮转操作方法及系统
CN106358042B (zh) * 2015-07-17 2020-10-09 恩智浦美国有限公司 使用视频图像的帧间预测的并行解码器
US10034026B2 (en) 2016-04-22 2018-07-24 Akila Subramaniam Device for and method of enabling the processing of a video stream
US10873754B2 (en) 2017-12-12 2020-12-22 Coherent Logix, Incorporated Low latency video codec and transmission with parallel processing

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4053345B2 (ja) * 2002-04-25 2008-02-27 シャープ株式会社 画像処理方法および画像処理装置、それを備える画像形成装置ならびにプログラムおよび記録媒体
US8369356B2 (en) * 2007-03-21 2013-02-05 Qualcomm Incorporated Dynamic management of receiver resources
US9300976B2 (en) * 2011-01-14 2016-03-29 Cisco Technology, Inc. Video encoder/decoder, method and computer program product that process tiles of video data
US8990435B2 (en) * 2011-01-17 2015-03-24 Mediatek Inc. Method and apparatus for accessing data of multi-tile encoded picture stored in buffering apparatus
US20130107973A1 (en) * 2011-10-28 2013-05-02 Qualcomm Incorporated Loop filtering control over tile boundaries
US9154787B2 (en) * 2012-01-19 2015-10-06 Qualcomm Incorporated Sub-block level parallel video coding
US9612949B2 (en) * 2013-06-13 2017-04-04 Arm Limited Memory allocation in a multi-core processing system based on a threshold amount of memory
US20150003520A1 (en) * 2013-06-26 2015-01-01 Texas Instruments Incorporated Hevc video encoder and decoder for multi-core

Also Published As

Publication number Publication date
US20150139334A1 (en) 2015-05-21

Similar Documents

Publication Publication Date Title
KR20150057790A (ko) 웨이브-프런트 어프로치에 기초한 비디오 프레임의 병렬 처리 방법
RU2696252C1 (ru) Вывод опорных значений режима и кодирование и декодирование информации, представляющей режимы предсказания
US10051273B2 (en) Video decoder and video decoding method
JP6281851B2 (ja) 画像復号化装置、画像符号化装置、画像復号化方法、画像符号化方法、プログラムおよび集積回路
US8000388B2 (en) Parallel processing apparatus for video compression
CN109565587B (zh) 具有上下文解码和重构旁路的视频编码的方法和系统
TWI512673B (zh) 視頻解碼方法及電腦可讀媒介
KR20150090206A (ko) 차세대 비디오를 위한 코딩을 위한 콘텐츠 적응적 파라메트릭 변환
WO2013067435A1 (en) Differential pulse code modulation intra prediction for high efficiency video coding
TWI776071B (zh) 用以編碼及解碼視訊取樣之轉換區塊的方法、設備和系統
WO2011048764A1 (ja) 復号装置、復号方法、プログラム、及び集積回路
JP2006157925A (ja) パイプラインデブロッキングフィルタ
US10070139B2 (en) Multimedia codec, application processor including the same, and method of operating the application processor
WO2021196035A1 (zh) 视频编码的方法和装置
US10951900B2 (en) Speeding up small block intra-prediction in video coding
US20160165235A1 (en) Method of encoding image data, encoder using the method, and application processor including the encoder
JP2006165699A (ja) 画像符号化装置および画像符号化方法
KR102299573B1 (ko) 실시간으로 인-루프 필터링을 수행할 수 있는 애플리케이션 프로세서, 이의 작동 방법, 및 이를 포함하는 시스템

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid