KR20180010336A - 비디오 데이터의 인코딩 및 디코딩을 위한 방법, 장치 및 시스템 - Google Patents

비디오 데이터의 인코딩 및 디코딩을 위한 방법, 장치 및 시스템 Download PDF

Info

Publication number
KR20180010336A
KR20180010336A KR1020187001866A KR20187001866A KR20180010336A KR 20180010336 A KR20180010336 A KR 20180010336A KR 1020187001866 A KR1020187001866 A KR 1020187001866A KR 20187001866 A KR20187001866 A KR 20187001866A KR 20180010336 A KR20180010336 A KR 20180010336A
Authority
KR
South Korea
Prior art keywords
block
coding unit
intra
prediction
video
Prior art date
Application number
KR1020187001866A
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 캐논 가부시끼가이샤
Publication of KR20180010336A publication Critical patent/KR20180010336A/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/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • H04N19/105Selection of the reference unit for prediction within a chosen coding or prediction mode, e.g. adaptive choice of position and number of pixels used for prediction
    • 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/593Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving spatial prediction techniques
    • 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/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • H04N19/11Selection of coding mode or of prediction mode among a plurality of spatial predictive coding modes
    • 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/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/129Scanning of coding units, e.g. zig-zag scan of transform coefficients or flexible macroblock ordering [FMO]
    • 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/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/132Sampling, masking or truncation of coding units, e.g. adaptive resampling, frame skipping, frame interpolation or high-frequency transform coefficient masking
    • 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/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/136Incoming video signal characteristics or properties
    • H04N19/137Motion inside a coding unit, e.g. average field, frame or block difference
    • 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/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/146Data rate or code amount at the encoder output
    • H04N19/147Data rate or code amount at the encoder output according to rate distortion criteria
    • 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/44Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/46Embedding additional information in the video signal during the compression process
    • H04N19/463Embedding additional information in the video signal during the compression process by compressing encoding parameters before transmission
    • 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
    • H04N19/517Processing of motion vectors by encoding
    • H04N19/52Processing of motion vectors by encoding by predictive encoding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/61Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding in combination with predictive coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/70Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards

Landscapes

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

Abstract

비디오 비트스트림으로부터 코딩 단위를 디코딩하는 방법이 기재된다. 코딩 단위는 이전에 디코딩된 샘플들을 참조한다. 디코딩될 상기 코딩 단위에 대한 이전 코딩 단위의 이전 블록 벡터가 결정된다. 이전 코딩 단위는 인트라 블록 카피를 이용하도록 구성된다. 상기 방법은, 비디오 비트스트림으로부터, 디코딩될 코딩 단위에 대한 블록 벡터 차이를 디코딩한다. 블록 벡터 차이는 이전 블록 벡터와 디코딩될 코딩 단위의 블록 벡터 사이의 차이를 나타낸다. 디코딩될 코딩 단위의 블록 벡터는 이전 블록 벡터와 블록 벡터 차이를 이용하여 결정된다. 디코딩될 코딩 단위는 상기 결정된 블록 벡터를 이용하여 선택된 레퍼런스 블록의 샘플 값들에 기초하여 디코딩된다.

Description

비디오 데이터의 인코딩 및 디코딩을 위한 방법, 장치 및 시스템{METHOD, APPARATUS AND SYSTEM FOR ENCODING AND DECODING VIDEO DATA}
본 발명은 일반적으로 디지털 비디오 신호 처리에 관한 것으로, 특히, 비디오 데이터를 인코딩 및 디코딩하기 위한 방법, 장치 및 시스템에 관한 것이다. 또한, 본 발명은 비디오 데이터를 인코딩 및 디코딩하기 위한 컴퓨터 프로그램이 기록된 컴퓨터 판독가능 매체를 포함하는 컴퓨터 프로그램 제품에 관한 것이다.
비디오 데이터의 전송 및 저장을 위한 애플리케이션을 포함하는 비디오 코딩을 위한 많은 애플리케이션이 현존한다. 많은 비디오 코딩 표준들이 또한 개발되었으며, 다른 것들도 현재 개발 중에 있다. 최근 비디오 코딩 표준에서의 개발은 "JCT-VC(Joint Collaborative Team on Video Coding)"라고 불리는 그룹을 형성하게 하였다. JCT-VC(Joint Collaborative Team on Video Coding)는 VCEG(Video Coding Experts Group)로도 알려진 ITU(International Telecommunication Union)의 통신 표준 섹터(ITU-T)의 SG16/Q6(Study Group 16, Question 6)의 멤버, 및 MPEG(Moving Picture Experts Group)로도 알려진 ISO/IEC JTC1/SC29/WG11(International Organisations for Standardisation / International Electrotechnical Commission Joint Technical Committee 1 / Subcommittee 29 / Working Group 11)의 멤버를 포함한다.
JCT-VC(Joint Collaborative Team on Video Coding)는 현저하게 "H.264/MPEG-4 AVC" 비디오 코딩 표준을 능가하는 새로운 비디오 코딩 표준을 생성했다. 새로운 비디오 코딩 표준은 "HEVC(high efficiency video coding)"라고 명명되었다. HEVC(high efficiency video coding)의 추가적 개발은, '크로마 포맷(chroma formats)'으로 알려진, 비디오 데이터에 존재한 크로마 정보의 상이한 표현들의 지원, 및 더 높은 비트-깊이들의 지원을 도입하는 것에 지향된다. HEVC(high efficiency video coding) 표준은 각각 8개의(8) 비트들과 10개의(10) 비트들의 비트-깊이를 지원하는 'Main'과 'Main10'으로 알려진 2개 프로필들을 규정한다. HEVC(high efficiency video coding) 표준에 의해 지원된 비트-깊이들을 증가시키기 위한 추가적 개발은 '범위 확대(Range extensions)' 활동의 일부로서 진행 중이다. 16개의(16) 비트들만큼 높은 비트-깊이들에 대한 지원은 JCT-VC(Joint Collaborative Team on Video Coding)에서 연구되고 있다.
비디오 데이터는 하나 이상의 컬러 채널들을 포함한다. 일반적으로 3개의 컬러 채널들이 지원받고 컬러 정보는 '컬러 공간'을 이용하여 표현된다. 다른 컬러 공간들이 또한 가능할지라도, 한 예시적 컬러 공간은 'YCbCr'로 알려진다. 'YCbCr' 컬러 공간은 컬러 정보의 고정-정밀도 표현을 가능하게 하고, 따라서 디지털 구현들에 적합하게 된다. 'YCbCr' 컬러 공간은 1개의 '루마(luma)' 채널(Y)과 2개의 '크로마(chroma)' 채널들(Cb와 Cr)을 포함한다. 각각의 컬러 채널은 특별한 비트-깊이를 가지고 있다. 비트-깊이는 비트들의 각각 컬러 채널에서 샘플들의 폭을 정의한다. 일반적으로, 컬러 채널들이 또한 상이한 비트-깊이들을 가지고 있을 수 있을지라도, 모든 컬러 채널들은 동일한 비트-깊이를 가지고 있다.
특정 비디오 코딩 표준으로 달성할 수 있는 코딩 효율의 한 가지 양태는 이용 가능한 예측 방법의 특성이다. 2차원 비디오 프레임의 압축 시퀀스를 위하여 의도된 비디오 코딩 표준에 대해서는, 3가지 타입의 예측이 존재한다: 인트라-예측(intra-prediction), 인터-예측(inter-prediction) 및 인트라 블록 카피 모드. 프레임들은 하나 이상의 블록들로 나뉘어지고, 각각의 블록은 예측의 타입들 중 하나를 이용하여 예측된다. 인트라-예측 방법은 비디오 프레임의 일부분의 콘텐츠가 동일한 비디오 프레임의 다른 부분들로부터 예측될 수 있게 한다. 인트라-예측 방법은 전형적으로 방향성 텍스처(directional texture)를 갖는 블록을 생성하며, 인트라-예측 모드에서는 텍스처를 생성하기 위한 기초로서 사용된 프레임 내의 인접 샘플 및 텍스처의 방향을 특정한다. 인터 예측 방법은 비디오 프레임 내의 블록의 콘텐츠가 이전의 비디오 프레임의 블록들로부터 예측될 수 있게 한다. 이전의 비디오 프레임들(즉, 상이할 수 있는 '디스플레이 순서'에 반대인 '디코딩 순서'로 되어 있는)은 '레퍼런스 프레임'으로서 지칭될 수 있다. 인트라 블록 카피 모드는 현재 프레임 내에 위치한 또 다른 블록으로부터 레퍼런스 블록을 만든다. 이전의 프레임이 참조에 전혀 이용 가능하지 않으므로, 비디오 프레임들의 시퀀스 내의 제1 비디오 프레임은 프레임 내의 모든 블록들에 대한 인트라-예측을 일반적으로 사용한다. 후속 비디오 프레임들은 블록들을 예측하기 위한 하나 이상의 이전의 비디오 프레임들을 이용할 수 있다.
가장 높은 코딩 효율을 획득하기 위해, 캡처된 프레임 데이터에 가장 가까운 예측 블록(predicted block)을 생성하는 예측 방법이 전형적으로 사용된다. 예측 블록과 캡처된 프레임 데이터 사이의 나머지 차이는 '잔차(residual)'로 알려져 있다. 그 차이의 이러한 공간 도메인 표현은 일반적으로 주파수 도메인 표현으로 변환된다. 일반적으로, 주파수 도메인 표현은 공간 도메인 표현에 존재하는 정보를 조밀하게 저장한다. 주파수 도메인 표현은 정수 이산 코사인 변환(DCT)과 같은, 변환을 적용한 데서 발생한 '잔차 계수'의 블록을 포함한다. 더욱이, 잔차 계수(또는 '스케일드 변환 계수')는 양자화되는데, 이는 손실을 도입하지만 또한 비트스트림에서 인코딩되도록 요구된 정보량을 더 감소시킨다. 또한 '변환 계수'로 알려진 잔차의 손실 주파수 도메인 표현(lossy frequency domain representation)이 비트스트림에 저장될 수 있다. 디코더에서 회복된 잔차에서의 손실의 양은 캡처된 프레임 데이터와 비트스트림의 사이즈에 비해 비트스트림으로부터 디코딩된 비디오 데이터의 왜곡에 영향을 미친다.
비디오 비트스트림은 인코딩된 구문 요소들의 시퀀스를 포함한다. 구문 요소들은 '구문 구조'의 계층 구성에 따라 순서화된다. 구문 구조는 구문 요소들의 세트 및 각각의 구문 요소가 코딩되는 조건들을 기술한다. 구문 구조는 구문 요소들의 계층 구성 배열들을 가능하게 하는 다른 구문 구조들을 호출할 수 있다. 구문 구조는 또한 구문 요소들의 순환적 배열들을 가능하게 하는 동일한 구문 구조의 또 다른 인스턴스를 호출할 수 있다. 각각의 구문 요소는 '컨텍스트 적응 2진 산술 코딩(context adaptive binary arithmetic coding)' 알고리즘을 이용하여 인코딩되는 하나 이상의 '빈(bin)'들로 구성된다. 주어진 빈은 '바이패스' 코딩될 수 있는데, 그런 경우에는 빈과 관련된 '컨텍스트'가 존재하지 않는다. 대안적으로, 빈은 코딩된 '컨텍스트'일 수 있는데, 그런 경우에는 빈과 관련된 컨텍스트가 존재한다. 각각의 컨텍스트 코딩된 빈은 빈과 관련된 하나의 컨텍스트를 갖는다. 컨텍스트는 하나 이상의 가능한 컨텍스트들로부터 선택된다. 컨텍스트는 메모리로부터 검색되며, 컨텍스트가 이용될 때마다, 컨텍스트는 또한 업데이트되고 메모리에 다시 저장된다. 2개 이상의 컨텍스트들이 주어진 빈에 사용될 수 있을 때, 어느 컨텍스트를 이용하는지를 결정하기 위한 규칙은 비디오 인코더와 비디오 디코더에서 적용된다. 빈을 인코딩하거나 디코딩할 때, 비트스트림의 이전의 정보는 어느 컨텍스트를 이용할지를 선택하기 위해 이용된다. 디코더의 컨텍스트 정보는 반드시 인코더의 컨텍스트 정보를 추적한다(그렇지 않으면 디코더는 인코더에 의해 생성된 비트스트림을 분석할 수 없다). 컨텍스트는 2개의 파라미터들을 포함한다: 가능성 있는 빈 값(또는 'valMPS')과 확률 레벨.
2개의 고유 값들을 가진 구문 요소들은 또한 '플래그'들로서 지칭될 수 있고, 일반적으로는 1개의 컨텍스트 코드화된 빈을 이용하여 인코딩된다. 주어진 구문 구조는 비디오 비트스트림에 포함될 수 있는 가능한 구문 요소들과 각각의 구문 요소가 비디오 비트스트림에 포함되는 환경들을 규정한다. 구문 요소의 각각 인스턴스는 비디오 비트스트림의 사이즈에 기여한다. 비디오 압축의 목적은 비디오 비트스트림을 이용하며 (손실 및 무손실 양쪽의 경우들을 포함하는) 주어진 품질 레벨에 대한 최소 사이즈(예를 들어, 바이트 단위)를 갖는 주어진 시퀀스의 표현을 가능하게 하기 위한 것이다. 동시에, 비디오 디코더들은 변함없이 비디오 비트스트림들을 실시간으로 디코딩하는 데 필요한데, 이는 이용될 수 있는 알고리즘들의 복잡도에 대해 제한을 두게 한다. 이와 같이, 알고리즘의 복잡도와 압축 성능 간의 트레이드-오프가 이루어진다. 특히, 알고리즘의 복잡도를 감소시키면서 압축 성능을 향상시키거나 유지할 수 있는 수정들이 바람직하다.
본 발명의 목적은 기존 장치의 하나 이상의 단점을 실질적으로 극복하거나, 적어도 개선하는 것이다.
본 개시내용의 한 양태에 따르면, 비디오 비트스트림으로부터의 코딩 단위 - 상기 코딩 단위는 이전에 디코딩된 샘플들을 참조함 -를 디코딩하는 방법이 제공되는데, 이 방법은 다음을 포함한다:
디코딩될 상기 코딩 단위에 대한 이전 코딩 단위 - 상기 이전 코딩 단위는 인트라 블록 카피를 이용하도록 구성됨 -의 이전 블록 벡터를 결정하는 단계;
상기 비디오 비트스트림으로부터, 디코딩될 상기 코딩 단위에 대한 블록 벡터 차이 - 상기 블록 벡터 차이는 상기 이전 블록 벡터와 디코딩될 상기 코딩 단위의 블록 벡터 사이의 차이를 나타냄 -를 디코딩하는 단계;
상기 이전 블록 벡터와 상기 블록 벡터 차이를 이용하여 디코딩될 상기 코딩 단위의 상기 블록 벡터를 결정하는 단계; 및
상기 결정된 블록 벡터를 이용하여 선택된 레퍼런스 블록의 샘플 값들에 기초하여, 디코딩될 상기 코딩 단위를 디코딩하는 단계.
본 개시내용의 또 다른 양태에 따르면, 비디오 비트스트림으로부터의 코딩 단위 - 상기 코딩 단위는 이전에 디코딩된 샘플들을 참조함 -를 디코딩하기 위한 시스템이 제공되는데, 이 시스템은 다음을 포함한다:
데이터 및 컴퓨터 프로그램을 저장하는 메모리; 및
상기 메모리에 결합된 프로세서를 포함하고, 상기 컴퓨터 프로그램은,
디코딩될 상기 코딩 단위에 대한 이전 코딩 단위 - 상기 이전 코딩 단위는 인트라 블록 카피를 이용하도록 구성됨 -의 이전 블록 벡터를 결정하고;
상기 비디오 비트스트림으로부터, 디코딩될 상기 코딩 단위에 대한 블록 벡터 차이 - 상기 블록 벡터 차이는 상기 이전 블록 벡터와 디코딩될 상기 코딩 단위의 블록 벡터 사이의 차이를 나타냄 -를 디코딩하고;
상기 이전 블록 벡터와 상기 블록 벡터 차이를 이용하여 디코딩될 상기 코딩 단위의 상기 블록 벡터를 결정하고;
상기 결정된 블록 벡터를 이용하여 선택된 레퍼런스 블록의 샘플 값들에 기초하여, 디코딩될 상기 코딩 단위를 디코딩하기 위한 명령어들을 포함한다.
본 개시내용의 또 하나의 양태에 따르면, 비디오 비트스트림으로부터의 코딩 단위 - 상기 코딩 단위는 이전에 디코딩된 샘플들을 참조함 -를 디코딩하기 위한 장치가 제공되는데, 이 장치는 다음을 포함한다:
디코딩될 상기 코딩 단위에 대한 이전 코딩 단위 - 상기 이전 코딩 단위는 인트라 블록 카피를 이용하도록 구성됨 -의 이전 블록 벡터를 결정하기 위한 수단;
상기 비디오 비트스트림으로부터, 디코딩될 상기 코딩 단위에 대한 블록 벡터 차이 - 상기 블록 벡터 차이는 상기 이전 블록 벡터와 디코딩될 상기 코딩 단위의 블록 벡터 사이의 차이를 나타냄 -를 디코딩하기 위한 수단;
상기 이전 블록 벡터와 상기 블록 벡터 차이를 이용하여 디코딩될 상기 코딩 단위의 상기 블록 벡터를 결정하기 위한 수단; 및
상기 결정된 블록 벡터를 이용하여 선택된 레퍼런스 블록의 샘플 값들에 기초하여, 디코딩될 상기 코딩 단위를 디코딩하기 위한 수단.
본 개시내용의 또 하나의 양태에 따르면, 비디오 비트스트림으로부터의 코딩 단위 - 상기 코딩 단위는 이전에 디코딩된 샘플들을 참조함 -를 디코딩하기 위한 컴퓨터 프로그램이 저장되어 있는 비일시적 컴퓨터 판독가능 매체가 제공되는데, 상기 프로그램은 다음을 포함한다:
디코딩될 상기 코딩 단위에 대한 이전 코딩 단위 - 상기 이전 코딩 단위는 인트라 블록 카피를 이용하도록 구성됨 -의 이전 블록 벡터를 결정하기 위한 코드;
상기 비디오 비트스트림으로부터, 디코딩될 상기 코딩 단위에 대한 블록 벡터 차이 - 상기 블록 벡터 차이는 상기 이전 블록 벡터와 디코딩될 상기 코딩 단위의 블록 벡터 사이의 차이를 나타냄 -를 디코딩하기 위한 코드;
상기 이전 블록 벡터와 상기 블록 벡터 차이를 이용하여 디코딩될 상기 코딩 단위의 상기 블록 벡터를 결정하기 위한 코드; 및
상기 결정된 블록 벡터를 이용하여 선택된 레퍼런스 블록의 샘플 값들에 기초하여, 디코딩될 상기 코딩 단위를 디코딩하기 위한 코드.
본 개시내용의 또 하나의 양태에 따르면, 코딩 단위를 비디오 비트스트림으로 인코딩하는 방법이 제공되는데, 이 방법은 다음을 포함한다:
인코딩될 상기 코딩 단위에 대한 이전 코딩 단위 - 상기 이전 코딩 단위는 인트라 블록 카피를 이용하도록 구성됨 -의 이전 블록 벡터를 결정하는 단계;
인코딩될 상기 코딩 단위에 대한 블록 벡터 차이 - 상기 블록 벡터 차이는 상기 이전 블록 벡터와 인코딩될 상기 코딩 단위의 블록 벡터 사이의 차이를 나타냄 -를 결정하는 단계;
상기 비디오 비트스트림으로, 인코딩될 상기 코딩 단위에 대한 상기 블록 벡터 차이를 인코딩하는 단계; 및
인코딩될 상기 코딩 단위의 상기 블록 벡터를 이용하여 선택된 레퍼런스 블록의 샘플 값들을 이용하여, 인코딩될 상기 코딩 단위를 상기 비디오 비트스트림으로 인코딩하는 단계.
본 개시내용의 또 하나의 양태에 따르면, 코딩 단위를 비디오 비트스트림으로 인코딩하기 위한 시스템이 제공되는데, 이 시스템은 다음을 포함한다:
데이터 및 컴퓨터 프로그램을 저장하는 메모리;
상기 메모리에 결합된 프로세서를 포함하고, 상기 컴퓨터 프로그램은,
인코딩될 상기 코딩 단위에 대한 이전 코딩 단위 - 상기 이전 코딩 단위는 인트라 블록 카피를 이용하도록 구성됨 -의 이전 블록 벡터를 결정하고;
인코딩될 상기 코딩 단위에 대한 블록 벡터 차이 - 상기 블록 벡터 차이는 상기 이전 블록 벡터와 인코딩될 상기 코딩 단위의 블록 벡터 사이의 차이를 나타냄 -를 결정하고;
상기 비디오 비트스트림으로, 인코딩될 상기 코딩 단위에 대한 상기 블록 벡터 차이를 인코딩하고;
인코딩될 상기 코딩 단위의 상기 블록 벡터를 이용하여 선택된 레퍼런스 블록의 샘플 값들을 이용하여, 인코딩될 상기 코딩 단위를 상기 비디오 비트스트림으로 인코딩하기 위한 명령어들을 포함한다.
본 개시내용의 또 하나의 양태에 따르면, 비디오 코딩 단위를 비트스트림으로 인코딩하기 위한 장치가 제공되는데, 이 장치는 다음을 포함한다:
인코딩될 상기 코딩 단위에 대한 이전 코딩 단위 - 상기 이전 코딩 단위는 인트라 블록 카피를 이용하도록 구성됨 -의 이전 블록 벡터를 결정하기 위한 수단;
인코딩될 상기 코딩 단위에 대한 블록 벡터 차이 - 상기 블록 벡터 차이는 상기 이전 블록 벡터와 인코딩될 상기 코딩 단위의 블록 벡터 사이의 차이를 나타냄 -를 결정하기 위한 수단;
상기 비디오 비트스트림으로, 인코딩될 상기 코딩 단위에 대한 상기 블록 벡터 차이를 인코딩하기 위한 수단; 및
인코딩될 상기 코딩 단위의 상기 블록 벡터를 이용하여 선택된 레퍼런스 블록의 샘플 값들을 이용하여, 인코딩될 상기 코딩 단위를 상기 비디오 비트스트림으로 인코딩하기 위한 수단.
본 개시내용의 또 하나의 양태에 따르면, 코딩 단위를 비디오 비트스트림으로 인코딩하기 위한 컴퓨터 프로그램이 저장되어 있는 비일시적 컴퓨터 판독가능 매체가 제공되는데, 상기 프로그램은 다음을 포함한다:
인코딩될 상기 코딩 단위에 대한 이전 코딩 단위 - 상기 이전 코딩 단위는 인트라 블록 카피를 이용하도록 구성됨 -의 이전 블록 벡터를 결정하는 단계;
인코딩될 상기 코딩 단위에 대한 블록 벡터 차이 - 상기 블록 벡터 차이는 상기 이전 블록 벡터와 인코딩될 상기 코딩 단위의 블록 벡터 사이의 차이를 나타냄 -를 결정하는 단계;
상기 비디오 비트스트림으로, 인코딩될 상기 코딩 단위에 대한 상기 블록 벡터 차이를 인코딩하는 단계; 및
인코딩될 상기 코딩 단위의 상기 블록 벡터를 이용하여 선택된 레퍼런스 블록의 샘플 값들을 이용하여, 인코딩될 상기 코딩 단위를 상기 비디오 비트스트림으로 인코딩하는 단계.
본 개시내용의 또 하나의 양태에 따르면, 비디오 비트스트림으로부터의 블록 - 상기 블록은 이전에 디코딩된 샘플들을 참조함 -를 디코딩하는 방법이 제공되는데, 이 방법은 다음을 포함한다:
상기 비디오 비트스트림으로부터 예측 모드를 결정하는 단계;
상기 결정된 예측 모드가 인트라-예측인 경우에 상기 비디오 비트스트림으로부터 인트라 블록 카피 플래그 - 상기 인트라 블록 카피 플래그는 현재 샘플들이 현재 프레임의 이전에 디코딩된 샘플들에 기초한다는 것을 나타냄 -를 디코딩하는 단계; 및
상기 이전에 디코딩된 샘플들로부터 상기 블록에 대한 샘플 값들을 결정함으로써, 상기 디코딩된 인트라 블록 카피 플래그에 기초하여, 상기 비디오 비트스트림으로부터 상기 블록을 디코딩하는 단계.
본 개시내용의 또 하나의 양태에 따르면, 비디오 비트스트림으로부터의 블록 - 상기 블록은 이전에 디코딩된 샘플들을 참조함 -를 디코딩하기 위한 시스템이 제공되는데, 이 시스템은 다음을 포함한다:
데이터 및 컴퓨터 프로그램을 저장하기 위한 메모리;
상기 메모리에 결합된 프로세서를 포함하고, 상기 컴퓨터 프로그램은,
상기 비디오 비트스트림으로부터 예측 모드를 결정하고;
상기 결정된 예측 모드가 인트라-예측인 경우에 상기 비디오 비트스트림으로부터 인트라 블록 카피 플래그 - 상기 인트라 블록 카피 플래그는 현재 샘플들이 현재 프레임의 이전에 디코딩된 샘플들에 기초한다는 것을 나타냄 -를 디코딩하고;
상기 이전에 디코딩된 샘플들로부터 상기 블록에 대한 샘플 값들을 결정함으로써, 상기 디코딩된 인트라 블록 카피 플래그에 기초하여, 상기 비디오 비트스트림으로부터 상기 블록을 디코딩하기 위한 명령어들을 포함한다.
본 개시내용의 또 하나의 양태에 따르면, 비디오 비트스트림으로부터의 블록 - 상기 블록은 이전에 디코딩된 샘플들을 참조함 -를 디코딩하기 위한 장치가 제공되는데, 이 장치는 다음을 포함한다:
상기 비디오 비트스트림으로부터 예측 모드를 결정하기 위한 수단;
상기 결정된 예측 모드가 인트라-예측인 경우에 상기 비디오 비트스트림으로부터 인트라 블록 카피 플래그 - 상기 인트라 블록 카피 플래그는 현재 샘플들이 현재 프레임의 이전에 디코딩된 샘플들에 기초한다는 것을 나타냄 -를 디코딩하기 위한 수단; 및
상기 이전에 디코딩된 샘플들로부터 상기 블록에 대한 샘플 값들을 결정함으로써, 상기 디코딩된 인트라 블록 카피 플래그에 기초하여, 상기 비디오 비트스트림으로부터 상기 블록을 디코딩하기 위한 수단.
본 개시내용의 또 하나의 양태에 따르면, 비디오 비트스트림으로부터의 블록 - 상기 블록은 이전에 디코딩된 샘플들을 참조함 -를 디코딩하는 방법을 위해 컴퓨터 프로그램이 저장되어 있는 비일시적 컴퓨터 판독가능 매체가 제공되는데, 상기 프로그램은 다음을 포함한다:
상기 비디오 비트스트림으로부터 예측 모드를 결정하기 위한 코드;
상기 결정된 예측 모드가 인트라-예측인 경우에 상기 비디오 비트스트림으로부터 인트라 블록 카피 플래그 - 상기 인트라 블록 카피 플래그는 현재 샘플들이 현재 프레임의 이전에 디코딩된 샘플들에 기초한다는 것을 나타냄 -를 디코딩하기 위한 코드; 및
상기 이전에 디코딩된 샘플들로부터 상기 블록에 대한 샘플 값들을 결정함으로써, 상기 디코딩된 인트라 블록 카피 플래그에 기초하여, 상기 비디오 비트스트림으로부터 상기 블록을 디코딩하기 위한 코드.
다른 양태들이 또한 개시된다.
이제, 본 발명의 적어도 일 실시예가 이하의 도면 및 부록을 참조하여 설명될 것이다:
도 1은 비디오 인코딩 및 디코딩 시스템을 도시하는 개략적인 블록도이다;
도 2a 및 2b는 도 1의 비디오 인코딩 및 디코딩 시스템 중 하나 또는 양자 모두가 실시될 수 있는 범용 컴퓨터 시스템의 개략적인 블록도를 형성한다;
도 3은 비디오 인코더의 기능 모듈을 도시하는 개략적인 블록도이다;
도 4는 비디오 디코더의 기능 모듈을 도시하는 개략적인 블록도이다;
도 5는 2개의 타일들과 3개의 슬라이스 세그먼트들로 나뉘어진 프레임을 도시하는 개략적 블록도이다;
도 6a는 코딩 트리 블록(CTB) 내의 스캐닝 코딩 단위(CU)들의 예시적 'Z-스캔' 순서를 도시하는 개략적 블록도이다;
도 6b는 현재 코딩 트리 블록(CTB) 내의 코딩 단위(CU)와 관련하여 인접한 코딩 트리 블록(CTB)에서 샘플들의 블록을 참조하는 예시적 블록 벡터를 도시하는 개략적 블록도이다;
도 7a는 현재 코딩 트리 블록(CTB) 내의 코딩 단위(CU)와 관련하여 인접한 코딩 트리 블록(CTB)에서 샘플들의 블록을 참조하는 예시적 블록 벡터를 도시하는 개략적 블록도이다;
도 7b는 현재 코딩 트리 블록(CTB)과 인접한 코딩 트리 블록(CTB)의 양쪽에 놓여있는 샘플들의 블록을 참조하는 예시적 블록 벡터를 도시하는 개략적 블록도이다;
도 8a는 현재 코딩 트리 블록(CTB)과 이용할 수 없는 것으로 표시된 인접한 코딩 트리 블록(CTB)의 양쪽에 놓여있는 샘플들의 블록을 참조하는 예시적 블록 벡터를 도시하는 개략적 블록도이다;
도 8b는 현재 코딩 트리 블록(CTB) 내의 샘플들의 블록을 참조하는 예시적 조정 블록 벡터를 도시하는 개략적 블록도이다;
도 8c는 참조된 샘플들의 일부가 인터-예측을 이용하여 디코딩된 샘플들의 블록을 참조하는 예시적 블록 벡터를 도시하는 개략적 블록도이다;
도 8d는 레퍼런스 블록이 현재 코딩 단위(CU) 내의 샘플들을 포함하는 샘플들의 블록을 참조하는 예시적 블록 벡터를 도시하는 개략적 블록도이다;
도 9는 코딩 단위(CU) 구문 구조를 도시하는 개략적 블록도이다;
도 10은 인코딩된 비트스트림으로 코딩 단위(CU) 구문 구조를 인코딩하는 방법을 도시하는 개략적 흐름도이다;
도 11은 인코딩된 비트스트림으로부터 코딩 단위(CU) 구문 구조를 디코딩하는 방법을 도시하는 개략적 흐름도이다;
도 12a는 코딩 단위(CU)에 대한 인트라 블록 카피 플래그를 위한 컨텍스트 선택을 도시하는 개략적 블록도이다;
도 12b는 코딩 트리 블록(CTB)의 상단에 정렬된 코딩 단위(CU)에 대한 인트라 블록 카피 플래그를 위한 컨텍스트 선택을 도시하는 개략적 블록도이다;
도 13은 도 4의 엔트로피 디코더의 기능 모듈들을 도시하는 개략적 블록도이다;
도 14는 코딩 단위(CU)에 대한 인트라 블록 카피 플래그를 디코딩하는 방법을 도시하는 개략적 흐름도이다;
도 15a는 코딩 단위(CU)에 대한 예측 모드를 결정하는 방법을 도시하는 개략적 흐름도이다;
도 15b는 코딩 단위(CU)에 대한 예측 모드를 결정하는 방법을 도시하는 개략적 흐름도이다;
도 16은 코딩 트리 블록(CTB) 내의 코딩 단위(CU)에서 잔차 쿼드-트리(RQT)를 도시하는 개략적 블록도이다;
도 17a는 인트라 블록 카피 모드를 이용하도록 구성된 코딩 단위(CU)에 대한 레퍼런스 샘플 블록을 생성하는 방법을 도시하는 개략적 흐름도이다;
도 17b는 인트라 블록 카피 모드를 이용하도록 구성된 코딩 단위(CU)에 대한 레퍼런스 샘플 블록을 생성하는 방법을 도시하는 개략적 흐름도이다;
도 17c는 인트라 블록 카피 모드를 이용하도록 구성된 코딩 단위(CU)에 대한 레퍼런스 샘플 블록을 생성하는 방법을 도시하는 개략적 흐름도이다;
도 17d는 인트라 블록 카피 모드를 이용하도록 구성된 코딩 단위(CU)에 대한 레퍼런스 샘플 블록을 생성하는 방법을 도시하는 개략적 흐름도이다;
도 18a는 블록 벡터의 원점이 현재 코딩 단위(CU) 위치와는 다른 점과 관련 있는 샘플들의 블록을 참조하는 예시적 블록 벡터를 도시하는 개략적 블록도이다;
도 18b는 인트라 블록 카피 모드를 이용하도록 구성된 연속적인 코딩 단위(CU)들 간의 예시적 블록 벡터 표현을 도시하는 개략적 블록도이다;
부록 A는 도 11의 방법에 따른 코딩 단위(CU) 구문 구조를 도시한다;
부록 B는 도 8c에 따른 블록 벡터 적합성 제한을 도시한다;
부록 C는 도 8c에 따른 인트라 블록 카피 방법을 도시한다;
부록 D는 1402-1408 단계이 생략된 도 14의 방법의 배열에 따른 intra_bc_flag를 위한 컨텍스트 선택을 도시한다.
임의의 하나 이상의 첨부 도면에서 동일한 참조 부호를 갖는 단계 및/또는 특징부를 참조하는 경우, 다른 의도가 나타나지 않는 한, 이들 단계 및/또는 특징부는 설명을 위하여 동일한 기능(들) 또는 동작(들)을 갖는다.
도 1은 비디오 인코딩 및 디코딩 시스템(100)의 기능 모듈을 도시하는 개략적인 블록도이다. 시스템(100)은 복잡도를 감소시키고, 코딩 효율을 향상시키며 오류 복원력을 향상시키기 위해 인트라 블록 카피 기술들을 활용할 수 있다. 복잡도는 시스템(100)에 존재하는 컨텍스트들의 수를 감소시킴으로써 또는 주어진 컨텍스트 코드화된 빈에 어느 컨텍스트를 이용할 지를 선택하기 위해 이용된 규칙을 간결하게 하거나 또는 제거함으로써 감소될 수 있다. 시스템(100)은 소스 디바이스(110) 및 목적지 디바이스(130)를 포함한다. 통신 채널(120)은 인코딩된 비디오 정보를 소스 디바이스(110)로부터 목적지 디바이스(130)로 통신하는 데에 이용된다. 일부 배열에 있어서, 소스 디바이스(110) 및 목적지 디바이스(130)는 각자의 이동 전화 핸드셋을 포함할 수 있으며, 이 경우에, 통신 채널(120)은 무선 채널이다. 다른 배열에 있어서, 소스 디바이스(110) 및 목적지 디바이스(130)는 비디오 회의 설비(video conferencing equipment)를 포함할 수 있으며, 이 경우에, 통신 채널(120)은 통상 인터넷 접속과 같은 유선 채널이다. 또한, 소스 디바이스(110) 및 목적지 디바이스(130)는 무선 텔레비전 방송, 케이블 텔레비전 애플리케이션, 인터넷 비디오 애플리케이션 및 인코딩된 비디오 데이터가 일부 저장 매체 또는 파일 서버 상에 캡처되는 애플리케이션을 통해 지원하는 디바이스들을 포함하는 넓은 범위의 디바이스들 중 임의의 것을 포함할 수 있다.
도 1에 도시된 바와 같이, 소스 디바이스(110)는 비디오 소스(112), 비디오 인코더(114) 및 송신기(116)를 포함한다. 비디오 소스(112)는 전형적으로 이미징 센서와 같이, 캡처된 비디오 프레임 데이터, 비일시적 기록 매체에 저장된 이전에 캡처된 비디오 시퀀스, 또는 원격 이미징 센서로부터 공급된 비디오의 소스를 포함한다. 비디오 소스(112)로서 이미징 센서를 포함할 수 있는 소스 디바이스(110)의 예들은 스마트폰, 비디오 캠코더 및 네트워크 비디오 카메라를 포함한다. 비디오 인코더(114)는 비디오 소스(112)로부터 캡처된 프레임 데이터를 인코딩된 비디오 데이터로 변환하고, 도 3을 참조하여 후술될 것이다. 인코딩된 비디오 데이터는 전형적으로 인코딩된 비디오 데이터(또는 "인코딩된 비디오 정보")로서 통신 채널(120)를 통해 송신기(116)에 의해서 전송된다. 인코딩된 비디오 데이터는 나중에 통신 채널(120)을 통해서 전송될 때까지 "플래시" 메모리 또는 하드 디스크 드라이브와 같은 소정의 저장 디바이스에 저장되는 것이 또한 가능하다.
목적지 디바이스(130)는 수신기(132), 비디오 디코더(134) 및 디스플레이 디바이스(136)를 포함한다. 수신기(132)는 인코딩된 비디오 데이터를 통신 채널(120)로부터 수신하고, 수신된 비디오 데이터를 비디오 디코더(134)로 보낸다. 그 다음, 비디오 디코더(134)는 디코딩된 프레임 데이터를 디스플레이 디바이스(136)에 출력한다. 디스플레이 디바이스(136)의 예들은 스마트폰, 태블릿 컴퓨터, 컴퓨터 모니터 또는 독립형 텔레비전 세트에서와 같이, 음극선관, 액정 디스플레이를 포함한다. 소스 디바이스(110) 및 목적지 디바이스(130) 각각의 기능이 단일 디바이스 내에서 구체화되는 것도 가능하다.
전술한 예시적인 디바이스에도 불구하고, 소스 디바이스(110) 및 목적지 디바이스(130) 각각은, 전형적으로 하드웨어 및 소프트웨어 컴포넌트의 조합을 통해, 범용 컴퓨팅 시스템 내에 구성될 수 있다. 도 2a는 다음을 포함하는 그러한 컴퓨터 시스템(200)을 설명한다: 컴퓨터 모듈(201); 키보드(202), 마우스 포인터 디바이스(203), 스캐너(226), 비디오 소스(112)로서 구성될 수 있는 카메라(227), 및 마이크로폰(280)과 같은 입력 장치들; 및 프린터(215), 디스플레이 디바이스(136)로서 구성될 수 있는 디스플레이 디바이스(214), 및 라우드스피커(217)들을 포함하는 출력 디바이스들. 외부 변복조기(모뎀) 송수신 디바이스(216)는 접속(221)을 통해서 통신 네트워크(220)에 대하여 통신을 행하기 위해 컴퓨터 모듈(201)에 의해 사용될 수도 있다. 통신 채널(120)을 나타낼 수 있는 통신 네트워크(220)는 인터넷과 같은 WAN(wide-area network), 셀룰러 원거리 통신 네트워크, 또는 사설 WAN일 수 있다. 접속(221)이 전화선인 경우, 모뎀(216)은 전통적인 "다이얼업" 모뎀일 수 있다. 또는, 접속(221)이 대용량(예컨대, 케이블) 접속인 경우, 모뎀(216)은 광역 모뎀일 수 있다. 무선 모뎀은 또한 통신 네트워크(220)에 대한 무선 접속에 사용될 수 있다. 송수신 디바이스(216)는 송신기(116) 및 수신기(132)의 기능을 제공할 수 있으며, 통신 채널(120)은 접속(221)에서 구체화될 수 있다.
컴퓨터 모듈(201)은 일반적으로 적어도 하나의 프로세서 유닛(205), 및 메모리 유닛(206)을 포함한다. 예컨대, 메모리 유닛(206)은 반도체 RAM(random access memory) 및 반도체 ROM(read only memory)을 구비할 수 있다. 컴퓨터 모듈(201)은 또한 다음을 포함하는 수많은 입/출력(I/O) 인터페이스들을 포함한다: 비디오 디스플레이(214), 라우드스피커(217)들 및 마이크로폰(280)과 연결된 오디오-비디오 인터페이스(207); 키보드(202), 마우스(203), 스캐너(226), 카메라(227)과 선택적으로 조이스틱 또는 다른 인간 인터페이스 디바이스(도시되지 않음)와 연결된 I/O 인터페이스(213); 및 외부 모뎀(216)과 프린터(215)를 위한 인터페이스(208). 일부 구현에서는, 모뎀(216)은 컴퓨터 모듈(201) 내에, 예컨대 인터페이스(208) 내에 통합될 수 있다. 컴퓨터 모듈(201)은 컴퓨터 시스템(200)이 접속(223)을 통해서 LAN(Local Area Network)이라고도 알려진 근거리 통신 네트워크(222)에 결합하는 것을 가능하게 하는 로컬 네트워크 인터페이스(211)도 구비한다. 도 2a에 도시된 바와 같이, 로컬 통신 네트워크(222)는 접속(224)을 통해서 와이드 네트워크(220)에도 결합될 수 있으며, 이것은 전형적으로, 소위 "방화벽(firewall)" 디바이스 또는 유사한 기능의 디바이스를 포함할 것이다. 로컬 네트워크 인터페이스(211)는 Ethernet™ 회로 카드, Bluetooth™ 무선 장치 또는 IEEE 802.11 무선 장치를 포함할 수 있다. 그러나, 다수의 다른 타입의 인터페이스들은 인터페이스(211)를 위해 실행될 수 있다. 로컬 네트워크 인터페이스(211)는 송신기(116) 및 수신기(132)의 기능을 제공할 수도 있으며, 통신 채널(120)은 또한 로컬 통신 네트워크(222) 내에 구체화될 수도 있다.
I/O 인터페이스(208 및 213)는 직렬 및 병렬 접속 중 하나 또는 양자 모두를 제공할 수 있으며, 전자는 전형적으로 USB(Universal Serial Bus) 표준에 따라서 구현되며, 대응하는 USB 커넥터(도시하지 않음)를 구비한다. 저장 디바이스(209)가 제공되며, 전형적으로 하드 디스크 드라이브(HDD)(210)를 포함한다. 플로피 디스크 드라이브 및 자기 테이프 드라이브(도시하지 않음)와 같은 다른 저장 디바이스 또한 사용될 수 있다. 광 디스크 드라이브(212)가 전형적으로 제공되어 비휘발성 데이터 소스로서 동작한다. 예를 들어, 광 디스크(예컨대, CD-ROM, DVD, Blu-ray Disc™M), USB-RAM, 이동식 외장 하드 드라이브, 및 플로피 디스크와 같은 이동식 메모리 디바이스들이 컴퓨터 시스템(200)에 대한 적절한 데이터의 소스로서 이용될 수도 있다. 전형적으로, HDD(210), 광 드라이브(212), 네트워크(220 및 222) 중 임의의 것이 또한 비디오 소스(112)로서 또는 디스플레이(214)를 통해서 재생을 위하여 저장될 디코딩된 비디오 데이터의 목적지로서 동작하도록 구성될 수 있다.
컴퓨터 모듈(201)의 컴포넌트(205 내지 213)는 전형적으로 상호접속된 버스(204)를 통해서 그리고 관련 기술에서 공지된 컴퓨터 시스템(200)의 통상적인 동작 모드에서 동작하게 하는 방식으로 통신한다. 예를 들어, 프로세서(205)는 접속(218)을 이용하여 시스템 버스(204)에 결합된다. 마찬가지로, 메모리(206) 및 광 디스크 드라이브(212)는 접속(219)들에 의해 시스템 버스(204)에 결합된다. 설명된 장치가 실시될 수 있는 컴퓨터의 예들은, IBM PC 및 이와 호환가능한 것, Sun SPARCstations, Apple Mac™ 또는 유사한 컴퓨터 시스템을 포함한다.
적절하거나 바람직한 경우에는, 비디오 인코더(114)와 비디오 디코더(134)는, 아래 기재된 방법들과 마찬가지로, 컴퓨터 시스템(200)을 이용하여 구현될 수 있다. 특히, 설명될 비디오 인코더(114), 비디오 디코더(134), 및 도 10, 11, 14, 15a, 15b, 17a, 17b, 17c와 17d의 방법들은 컴퓨터 시스템(200) 내에서 실행 가능한 하나 이상의 소프트웨어 애플리케이션 프로그램(233)들로서 구현될 수 있다. 비디오 인코더(114), 비디오 디코더(134) 및 상기 방법들의 단계들은 컴퓨터 시스템(200) 내에서 수행되는 소프트웨어(233) 내의 명령어(231)(도 2b 참조)에 의해서 실행된다. 소프트웨어 명령어(231)들은 각각 하나 이상의 특정 태스크를 수행하기 위한 하나 이상의 코드 모듈로서 형성될 수 있다. 소프트웨어는 2개의 별도의 부분으로 분할될 수도 있는데, 제1 부분과 대응하는 코드 모듈은 전술한 방법을 수행하고, 제2 부분과 대응하는 코드 모듈은 제1 부분과 유저 사이의 유저 인터페이스를 관리한다.
예컨대, 소프트웨어는 후술하는 저장 디바이스를 포함하는 컴퓨터 판독가능 매체에 저장될 수 있다. 소프트웨어는 컴퓨터 판독가능 매체로부터 컴퓨터 시스템(200) 내로 로딩되고, 그 후에 컴퓨터 시스템(200)에 의해서 실행된다. 컴퓨터 판독가능 매체에 기록된 그러한 소프트웨어 또는 컴퓨터 프로그램을 구비한 컴퓨터 판독가능 매체는 컴퓨터 프로그램 제품이다. 컴퓨터 시스템(200) 내에서의 컴퓨터 프로그램 제품의 사용은, 바람직하게는 비디오 인코더(114), 비디오 디코더(134) 및 상기 방법들을 구현하기에 유리한 장치에 영향을 미친다.
소프트웨어(233)는 일반적으로 HDD(210) 또는 메모리(206)에 저장된다. 소프트웨어는 컴퓨터 판독가능 매체로부터 컴퓨터 시스템(200) 내에 로딩되고, 컴퓨터 시스템(200)에 의해서 실행된다. 따라서, 예컨대, 소프트웨어(233)는 광 디스크 드라이브(212)에 의해서 판독되는 광학적으로 판독가능한 디스크 저장 매체(예컨대, CD-ROM)(225)에 저장될 수 있다.
일부 경우에서, 애플리케이션 프로그램(233)들은 사용자에게 공급되어 하나 이상의 CD-ROM(225)들 상에서 인코딩되고 상응하는 드라이브(212)를 통해 판독될 수 있거나, 대안적으로 네트워크들(220 또는 222)로부터 사용자에 의해 판독될 수 있다. 또한, 소프트웨어는 다른 컴퓨터 판독가능 매체로부터 컴퓨터 시스템(200) 내로 로딩될 수 있다. 컴퓨터 판독가능 저장 매체는 기록된 명령어 및/또는 데이터를 실행 및/또는 처리를 위하여 컴퓨터 시스템(200)에 제공하는 임의의 비일시적 유형 저장 매체를 지칭한다. 그러한 저장 매체의 예들은, 플로피 디스크, 자기 테이프, CD-ROM, DVD, 블루레이 디스크, 하드 디스크 드라이브, ROM 또는 집적 회로, USB 메모리, 자기-광 디스크, 또는 PCMCIA 카드 등의 컴퓨터 판독가능 카드를, 그러한 디바이스가 컴퓨터 모듈(201) 내부에 있는지 외부에 있는지에 관계없이, 포함한다. 소프트웨어, 애플리케이션 프로그램, 명령어 및/또는 비디오 데이터 또는 인코딩된 비디오 데이터를 컴퓨터 모듈(401)에 제공하는 데에 참여할 수도 있는 일시적이거나 무형의 컴퓨터 판독가능 전송 매체의 예들은, 또 다른 컴퓨터 또는 네트워킹된 디바이스에의 네트워크 접속, 웹사이트 등에 기록된 정보 및 이메일 전송을 포함하는 인터넷 또는 인트라넷뿐만 아니라 무선 또는 적외선 전송 채널을 포함한다.
앞서 언급된 애플리케이션 프로그램(233)의 제2 부분 및 대응하는 코드 모듈이 실행되어 하나 이상의 GUI(graphical user interface)가 디스플레이(214) 상에 제공되거나 다르게 표현되도록 구현할 수 있다. 전형적으로 키보드(202) 및 마우스(203)의 조작을 통해, 컴퓨터 시스템(200) 및 애플리케이션의 유저는, GUI(들)과 관련된 애플리케이션에 대한 커맨드 및/또는 입력의 제어를 제공하도록 인터페이스를 기능적으로 적응할 수 있는 방식으로 조작할 수 있다. 또한, 스피커(217)를 통한 스피치 프롬프트 출력 및 마이크로폰(280)을 통한 유저 보이스 커맨드 입력을 이용하는 오디오 인터페이스와 같은 다른 형태의 기능적으로 적응 가능한 유저 인터페이스가 구현될 수도 있다.
도 2b는 프로세서(205)와 "메모리"(234)의 상세한 개략적 블록도이다. 메모리(234)는 도 2a에서 컴퓨터 모듈(201)에 의해 액세스될 수 있는 모든 메모리 모듈들(HDD(209)와 반도체 메모리(206)를 포함)의 논리적 집합을 나타낸다.
컴퓨터 모듈(201)이 처음 전원이 커지면, 전원 공급 자가 테스트(POST) 프로그램(250)이 실행된다. POST 프로그램(250)은 일반적으로 도 2a의 반도체 메모리(206)의 ROM(249)에 저장된다. 소프트웨어를 저장하는 ROM(249)과 같은 하드웨어 디바이스는 펌웨어라고 불리는 경우도 있다. POST 프로그램(250)은 적절한 기능을 보장하기 위해서 컴퓨터 모듈(201) 내의 하드웨어를 검사하고, 전형적으로 프로세서(205), 메모리(234(209, 206)) 및 BIOS(basic input-output systems software) 모듈(251)을 검사하며, 또한 전형적으로 올바른 동작을 위하여 ROM(249)에 저장되어 있다. 일단 POST 프로그램(250)은 성공적으로 구동되면, BIOS(251)는 도 2a의 하드 디스크 드라이브(210)를 활성화한다. 하드 디스크 드라이브(210)의 활성화는 하드 디스크 드라이브(210) 상에 상주하는 부트스트랩 로더 프로그램(252)이 프로세서(205)를 통해 실행되게 한다. 이것은 운영체계(253)를 RAM 메모리(206) 내에 로딩하며, 그 후 운영체계(253)가 작동을 시작한다. 운영체계(253)는 프로세서 관리, 메모리 관리, 디바이스 관리, 저장 관리, 소프트웨어 애플리케이션 인터페이스 및 제네릭 유저 인터페이스(generic user interface)를 포함하는 다양한 하이 레벨 기능들을 충족시키도록 프로세서(205)에 의해 실행 가능한 시스템 레벨 애플리케이션이다.
운영체계(253)는 컴퓨터 모듈(201) 상에서 실행되고 있는 각각의 프로세스 또는 애플리케이션이 다른 프로세스에 할당된 메모리와 충돌하지 않고서 실행되기에 충분한 메모리를 가질 것을 보장하도록 메모리(234(209, 206))를 관리한다. 또한, 도 2a의 컴퓨터 시스템(200)에서 이용 가능한 상이한 타입의 메모리는, 각각의 프로세스가 효과적으로 실행될 수 있게 적절하게 이용되어야 한다. 따라서, 집합 메모리(aggregated memory)(234)는 메모리의 특정 세그먼트들이 할당되는 방법을 도시하는 것으로 의도되는 것이 아니라(달리 언급되지 않는 한), 컴퓨터 시스템(200)에 의해 액세스 가능한 메모리의 일반적인 뷰와 그것이 이용되는 방법을 제공하는 것이다.
도 2b에 도시된 바와 같이, 프로세서(205)는 제어 유닛(239), ALU(arithmetic logic unit)(240), 및 종종 캐시 메모리로 불리는 로컬 또는 내부 메모리(248)를 포함하는 많은 기능 모듈들을 포함한다. 캐시 메모리(248)는 일반적으로 수많은 저장 레지스터들(244-246)을 레지스터부에 포함한다. 하나 이상의 내부 버스(241)들은 이들 기능 모듈들을 기능적으로 상호접속한다. 프로세서(205)는 일반적으로 또한 접속(218)을 이용하여, 시스템 버스(204)를 통해 외부 디바이스들과 통신하기 위한 하나 이상의 인터페이스(242)들을 가지고 있다. 메모리(234)는 접속(219)을 이용하여 버스(204)에 결합된다.
애플리케이션 프로그램(233)은 조건 브랜치 및 루프 명령어를 포함할 수 있는 명령어(231)들의 시퀀스를 포함한다. 프로그램(233)은 또한 프로그램(233)의 실행에 사용된 데이터(232)를 포함할 수 있다. 명령어(231)들과 데이터(232)는 각각 메모리 장소들(228, 229, 230과 235, 236, 237)에 저장된다. 명령어(231)들과 메모리 장소들(228-230)의 상대적인 사이즈에 따라, 특정 명령어는 메모리 장소(230)에 도시된 명령어에 의해서 도시된 바와 같이 단일 메모리 장소에 저장될 수 있다. 대안적으로, 명령어는 메모리 장소들(228, 229)에 도시된 명령어 세그먼트에 의해서 도시된 바와 같이, 각각 별도의 메모리 장소에 저장되는 많은 부분들로 분할될 수도 있다.
통상적으로, 프로세서(205)에는 내부에서 실행되는 명령어들의 세트가 제공된다. 프로세서(205)는 후속 입력을 대기하고, 프로세서(205)는 그것에 대하여 다른 명령어들의 세트를 실행함으로써 반응한다. 각각 입력은, 완전히 도 2a에 전체적으로 도시된 바와 같이, 입력 장치들(202, 203) 중 하나 이상에 의해 생성된 데이터, 네트워크들(220, 202) 중 하나를 가로질러 외부 소스로부터 수신된 데이터, 저장 디바이스들(206, 209) 중 하나로부터 검색된 데이터 또는 상응하는 판독기(212)에 삽입된 저장 매체(225)로부터 검색된 데이터를 포함하는, 수많은 소스들 중 하나 이상으로부터 제공될 수 있다. 명령어들의 세트의 실행은 데이터의 출력을 야기하는 경우가 있다. 또한, 실행은 데이터 또는 변수를 메모리(234)에 저장하는 것을 포함하기도 한다.
비디오 인코더(114), 비디오 디코더(134) 및 상기 방법들은 메모리(234)의 대응하는 메모리 장소들(255, 256, 257)에 저장되는 입력 변수(254)들을 사용할 수도 있다. 비디오 인코더(114), 비디오 디코더(134) 및 상기 방법들은 출력 변수(261)들을 생성하며, 이들 출력 변수는 메모리(234)의 대응하는 메모리 장소들(262, 263, 264)에 저장된다. 중간 변수(258)들은 메모리 장소들(259, 260, 266 및 267)에 저장될 수 있다.
도 2b의 프로세서(205)를 참조하면, 레지스터들(244, 245, 246), ALU(arithmetic logic unit)(240), 및 제어 유닛(239)은 함께 동작하여 프로그램(233)을 구성하는 명령어 세트 내의 모든 명령어에 대한 "페치, 디코딩 및 실행" 사이클을 행하는 데에 필요한 마이크로 동작들의 시퀀스를 수행한다. 각각의 페치, 디코딩 및 실행 사이클은 다음을 포함한다:
(a) 메모리(228, 229, 230)로부터 명령어(231)를 페치하거나 판독하는 페치 동작;
(b) 제어 유닛(239)이 어느 명령어가 페치되었는지를 결정하는 디코딩 동작; 및
(c) 제어 유닛(239) 및/또는 ALU(240)가 명령어를 실행하는 실행 동작.
그 후에, 다음 명령어에 대한 추가적인 페치, 디코딩 및 실행 사이클이 실행될 수 있다. 마찬가지로, 제어 유닛(239)이 소정의 값을 메모리 장소(232)에 저장하거나 기입하는 것에 의해 저장 사이클이 실행될 수 있다.
후술되는 도 9 및 10의 방법들의 각각의 단계 또는 서브프로세스는 프로그램(233)의 하나 이상의 세그먼트와 관련되어 있고, 전형적으로 프로세서(205) 내의 레지스터 섹션(244, 245, 247), ALU(240) 및 제어 유닛(239)에 의해서 함께 동작하도록 수행되어, 프로그램(233)의 표시된 세그먼트에 대한 명령어 세트 내의 모든 명령어에 대한 사이클을 페치, 디코딩 및 실행한다.
도 3은 비디오 인코더(114)의 기능 모듈을 도시하는 개략적인 블록도이다. 도 4는 비디오 디코더(134)의 기능 모듈을 도시하는 개략적인 블록도이다. 일반적으로, 데이터는 예를 들어, 샘플들의 블록들 또는 변환 계수들의 블록들과 같은 블록들 또는 어레이들의 비디오 인코더(114)와 비디오 디코더(134)의 기능 모듈들 사이로 통과된다. 기능 모듈이 개별적 어레이 요소들(예를 들어, 샘플들 또는 변환 계수들)의 작동과 관련하여 기술되는 경우, 작동은 모든 어레이 요소들에 적용된다고 이해될 것이다.
비디오 인코더(114)와 비디오 디코더(134)는 도 2a와 2b에 도시된 바와 같이, 범용 컴퓨터 시스템(200)을 이용하여 구현될 수 있으며, 여기서 다양한 기능 모듈들은 컴퓨터 시스템(200) 내에서 전용 하드웨어에 의해 구현될 수 있다. 대안적으로, 비디오 인코더(114)와 비디오 디코더(134)의 다양한 기능 모듈들은 하드 디스크 드라이브(205) 상에 상주하는 소프트웨어 애플리케이션 프로그램(233)의 하나 이상의 소프트웨어 코드 모듈들과 같은, 컴퓨터 시스템(200) 내에서 실행 가능한 소프트웨어에 의해 구현되고 프로세서(205)에 의한 실행으로 제어될 수 있다. 또 다른 대안에서, 비디오 인코더(114)와 비디오 디코더(134)의 다양한 기능 모듈들은 전용 하드웨어와 컴퓨터 시스템(200) 내에서 실행 가능한 소프트웨어의 조합에 의해 구현될 수 있다. 비디오 인코더(114), 비디오 디코더(134) 및 상기 방법들은 대안적으로 상기 방법들의 기능 또는 부 기능을 수행하는 하나 이상의 집적 회로와 같은 전용 하드웨어에서 구현될 수 있다. 그러한 전용 하드웨어는 그래픽 프로세서, 디지털 신호 프로세서, 주문형 집적 회로(ASIC; application specific integrated circuit), 필드 프로그램 가능 게이트 어레이(FPGA; field programmable gate array) 또는 하나 이상의 마이크로프로세서 및 관련 메모리를 포함할 수 있다. 특히, 비디오 인코더(114)는 모듈들(320-350)을 포함하고 비디오 디코더(134)는 각각이 소프트웨어 애플리케이션 프로그램(233)의 하나 이상의 소프트웨어 코드 모듈로서 구현될 수 있는 모듈들(420-436)을 포함한다.
도 3의 비디오 인코더(114)는 HEVC(high efficiency video coding) 비디오 인코딩 파이프라인의 일례이지만, 여기서 설명되는 처리 스테이지를 수행하는 데에는 다른 비디오 코덱이 이용될 수도 있다. 비디오 인코더(114)는 각각의 프레임이 하나 이상의 컬러 채널들을 포함하는 일련의 프레임들과 같은 캡처된 프레임 데이터를 수신한다.
비디오 인코더(114)는 프레임 데이터(310)와 같은, 캡처된 프레임 데이터의 각각의 프레임을, 일반적으로 '코딩 트리 블록'(CTB)들로 지칭되는 영역들로 분할한다. 프레임 데이터(310)는 하나 이상의 컬러 평면들을 포함한다. 각각의 컬러 평면은 샘플들을 포함한다. 각각의 샘플은 비트-깊이(390)에 따라 사이징된 2진 워드를 점유한다. 그러므로, 가능한 샘플 값들의 범위는 비트-깊이(390)에 의해 규정된다. 예를 들어, 비트-깊이(390)가 8개(8) 비트들로 설정되면, 샘플 값들은 0개(0) 내지 255개(255)일 수 있다. 각각의 코딩 트리 블록(CTB)은 '코딩 단위'(CU)들의 집합으로의 프레임의 일부의 계층적 쿼드-트리 세분화(hierarchical quad-tree subdivision)를 포함한다. 16x16 또는 32x32와 같이, 다른 사이즈들이 가능할지라도, 코딩 트리 블록(CTB)은 일반적으로 64x64 루마 샘플들의 영역을 점유한다. 일부 경우 심지어 128x128 루마 샘플들과 같은, 코딩 트리 블록(CTB)을 위한 더 큰 사이즈들이 이용될 수도 있다. 코딩 트리 블록(CTB)은 스플릿을 통해 4개의 동일 사이즈의 영역들로 세분화되어 새로운 계층 구성 레벨을 만들 수 있다. 스플리팅은 반복적으로 적용될 수 있으므로, 쿼드-트리 계층 구성(또는 "코딩 트리")을 야기할 수 있다. 코딩 트리 블록(CTB) 측면 치수가 2의 거듭제곱(powers of two)이고 쿼드-트리 스플리팅이 폭과 높이를 반감시키기 때문에, 영역 측면 치수는 또한 2의 거듭제곱(powers of two)이다. 영역의 임의의 추가적 스플릿이 수행되지 않을 때, '코딩 단위'(CU)는 영역 내에 존재한다고 말한다. 스플릿이 코딩 트리 블록의 상위 레벨(또는 일반적으로 "최상위 레벨")에서 수행되지 않을 때, 전체 코딩 트리 블록을 점유하는 영역은 1개의 코딩 단위(CU)를 포함한다. 그와 같은 경우에서, 코딩 단위(CU)는 일반적으로 '최대 코딩 단위'(LCU)로 지칭된다. 다른 최소 사이즈들이 또한 가능하더라도(예를 들어, 16x16 루마 샘플 또는 32x32 루마 샘플), 최소 사이즈는 또한 8x8 루마 샘플에 의해 점유된 영역과 같이, 각 코딩 단위(CU)마다 존재한다. 최소 사이즈의 코딩 단위는 일반적으로 '최소 코딩 단위'(SCU)라고 칭한다. 쿼드-트리 계층 구성의 결과로서, 코딩 트리 블록(CTB)의 전체는 하나 이상의 코딩 단위(CU)들에 의해 점유된다. 각 코딩 단위(CU)는 일반적으로 '예측 단위'(PU)로 지칭된 데이터 샘플들의 하나 이상의 어레이와 관련된다. 각 코딩 단위(CU)의 예측 단위(PU)들의 다양한 배열이 가능한데, 예측 단위(PU)들이 중첩되지 않고 코딩 단위(CU)의 전체가 하나 이상의 예측 단위(PU)들에 의해 점유된다는 요건하에 가능하다. 이러한 요건은 예측 단위(PU)가 전체 프레임 영역을 커버하는 것을 보장한다. 코딩 단위(CU)와 연관된 하나 이상의 예측 단위(PU)들의 배열은 '파티션 모드'로 지칭된다.
비디오 인코더(114)는 멀티플렉서 모듈(340)로부터, 코딩 단위(CU)의 파티션 모드에 따라 예측 단위(PU)(382)를 출력함으로써 동작한다. 차분 모듈(344)은 '잔차 샘플 어레이'(360)를 생성한다. 잔차 샘플 어레이(360)는 프레임 데이터(310)의 코딩 트리 블록(CTB)의 코딩 단위(CU)로부터의 데이터 샘플들의 상응하는 2D 어레이와 예측 단위(PU)(382) 사이의 차이이다. 차이는 어레이들 내의 각각의 위치에서 상응하는 샘플들에 대해 계산된다. 차이들이 포지티브 또는 네거티브일 수 있기 때문에, 1개의 차이 샘플의 동적 범위는 1 비트를 더한 비트-깊이이다.
잔차 샘플 어레이(360)는 변환 모듈(320)에서 주파수 도메인으로 변환될 수 있다. 차분 모듈(344)로부터의 잔차 샘플 어레이(360)는 '순방향 변환'을 적용함으로써 잔차 샘플 어레이(360)를 공간 표현으로부터 주파수 도메인 표현으로 변환하는 변환 모듈(320)에 의해 수신된다. 변환 모듈(320)은 특정한 정밀도를 갖는 변환에 따라, 변환 계수를 만든다. 코딩 단위(CU)는 하나 이상의 변환 단위(TU)들로 세분화된다. 하나 이상의 변환 단위(TU)들로의 코딩 단위(CU)의 세분화는 '잔차 쿼드-트리' 또는 '잔차 쿼드-트리(RQT)' 또는 '변환 트리'로서 지칭될 수 있다.
양자화 제어 모듈(346)은 '레이트-왜곡 기준'에 따른 다양한 가능한 양자화 파라미터 값들에 대한 인코딩된 비트스트림(312)에서 요구된 비트 레이트를 테스트할 수 있다. 레이트-왜곡 기준은 인코딩된 비트스트림(312) 또는 그것의 로컬 영역의 비트 레이트와 왜곡과의 사이의 허용 가능한 트레이드-오프(trade-off)의 측정이다. 왜곡은 프레임 버퍼(332)에 존재한 프레임들과 캡처된 프레임 데이터(310) 사이의 차이의 측정이다. 왜곡 측정 방법들은 피크 신호 대 잡음비(PSNR) 또는 절대 차(SAD) 메트릭의 합계를 이용한다. 비디오 인코더(114)의 일부 배열들에서, 레이트-왜곡 기준은 루마 컬러 채널에 대한 레이트와 왜곡만을 고려하고 따라서 인코딩 결정은 루마 채널의 특성을 기초로 만들어진다. 일반적으로, 잔차 쿼드-트리(RQT)는 루마와 크로마 컬러 채널들 사이에 공유되고, 크로마 정보의 양은 루마에 비해 상대적으로 작고, 그래서 레이트-왜곡 기준에서 루마만을 고려하는 것이 적절할 수 있다.
양자화 파라미터(384)는 양자화 제어 모듈(346)로부터 출력된다. 양자화 파라미터는 비디오 데이터의 프레임에 대해 고정될 수 있거나, 프레임이 인코딩되는 바와 같이 블록 단위로 변할 수 있다. 양자화 파라미터(384)를 제어하기 위한 다른 방법들 또한 가능하다. 잔차 쿼드-트리에 대한 가능한 변환 단위(TU)들의 세트는 이용 가능한 변환 사이즈 및 코딩 단위(CU) 사이즈에 의존한다. 하나의 배열에서, 잔차 쿼드-트리는 인코딩된 비트스트림(312)에서 하위 비트율을 야기하고, 그로 인해 상위 코딩 효율을 달성한다. 보다 큰 사이즈의 변환 단위(TU)는 루마 및 크로마 컬러 채널들 모두에 대해 보다 큰 변환의 사용을 야기한다. 일반적으로, 더 큰 변환들은 잔차 샘플 어레이를 가로질러 확산된 샘플 데이터(또는 '잔차 에너지')를 갖는 잔차 샘플 어레이의 좀 더 콤팩트한 표현을 제공한다. 더 작은 변환은 일반적으로 더 큰 변환들과 비교하여 잔차 샘플 어레이의 특정한 영역들에 국부적인 잔차 에너지를 갖는 잔차 샘플 어레이의 좀 더 콤팩트한 표현을 제공한다. 그러므로, 잔차 쿼드-트리(RQT)의 많은 가능한 구성들은 HEVC(high efficiency video coding) 표준에서 잔차 샘플 어레이(360)의 높은 코딩 효율을 달성하기 위한 유용한 수단들을 제공한다.
변환 제어 모듈(348)은 잔차 쿼드-트리(RQT)의 각각의 리프 노드(leaf node)를 인코딩하는데 사용하기 위한 변환 사이즈를 선택한다. 예를 들어, 다양한 변환 사이즈들(그리고 따라서 잔차 쿼드-트리 구성 또는 변환 트리)은 테스트될 수 있고 레이트-왜곡 기준들로부터 최상의 트레이드-오프를 야기하는 변환 트리는 선택될 수 있다. 변환 사이즈(386)는 선택된 변환의 사이즈를 나타낸다. 변환 사이즈(386)는 인코딩된 비트스트림(312)에서 인코딩되고 변환 모듈(320), 양자화 모듈(322), 역양자화기 모듈(dequantiser module)(326) 및 역변환 모듈(328)에 제공된다. 변환 사이즈(386)는 교환 가능하게 변환 치수들(예를 들어, 4x4, 8x8, 16x16 또는 32x32), 변환 사이즈(예를 들어, 4, 8, 16 또는 32), 또는 변환 사이즈(예를 들어, 2, 3, 4 또는 5)의 log2에 의해 표현될 수 있다. 변환 사이즈의 특별한 표현의 수치의 값이 이용되는 환경들에서(예를 들어, 방정식으로) 필요하다고 간주된 변환 사이즈의 임의의 다른 표현으로부터의 변환은, 다음과 같은 설명에서 내재적으로 발생하는 것으로 간주될 것이다.
비디오 인코더(114)는 '변환 양자화 바이패스' 모드에서 수행하도록 구성될 수 있으며, 여기서 변환 모듈(320)과 양자화 모듈(322)가 바이패스된다. 변환 양자화 바이패스 모드에서, 비디오 인코더(114)는 인코딩된 비트스트림(312)에서 프레임 데이터(310)를 손실 없이 인코딩하기 위한 수단을 제공한다. 변환 양자화 바이패스 모드의 사용은 코딩 단위(CU) 레벨에서 제어되어, 프레임 데이터(310)의 일부들이 비디오 인코더(114)에 의해 손실 없이 인코딩되게 한다. 변환 양자화 바이패스 모드의 가용성은 '하이 레벨의 구문'을 통해 제어되어, 손실 없는 인코딩이 프레임 데이터(310)의 임의의 부분에서 요구되지 않는 경우에 변환 양자화 바이패스 모드의 시그널링 오버헤드가 제거될 수 있게 한다. 하이 레벨의 구문은 일반적으로 드물게 인코딩되고 비트스트림(312)의 속성을 설명하는데 사용되는 인코딩된 비트스트림(312)에 존재하는 구문 구조들을 지칭한다. 예를 들어, 인코딩된 비트스트림(312)의 하이 레벨의 구문 구조들은 비디오 인코더(114)와 비디오 디코더(134)에 사용된 특별한 코딩 도구들을 제한하거나 또는 달리 구성하는데 사용될 수 있다. 하이 레벨의 구문 구조들의 예들은 '시퀀스 파라미터 세트', '픽처 파라미터 세트' 및 '슬라이스 헤더'들을 포함한다.
HEVC(high efficiency video coding) 표준에 대하여, 잔차 샘플 어레이(360)의 주파수 도메인 표현으로의 변환은 변형된 이산 코사인 변환(DCT)과 같은 변환을 이용하여 구현된다. 이러한 변환에서, 변형은 승산 대신에 시프트(shift) 및 가산(addition)을 이용하여 구현을 허용한다. 그와 같은 변형들은 이산 코사인 변환(DCT)과 비교하여 감소된 구현 복잡도를 가능하게 한다. 변형된 이산 코사인 변환(DCT) 이외에, 변형된 이산 사인 변환(DST)은 또한 특정한 상황들에 사용될 수 있다. 지원된 변환 사이즈에 따라서, 다양한 사이즈의 잔차 샘플 어레이(360) 및 변환 계수(362)가 가능하다. HEVC(high efficiency video coding) 표준에서는, 32x32, 16x16, 8x8 및 4x4와 같은 사이즈를 갖는 데이터 샘플의 2D 어레이에 대하여 변환이 행해진다. 이에 의해, 변환 사이즈의 미리 정해진 세트는 비디오 인코더(114)에 이용 가능하다. 또한, 변환 사이즈의 세트는 루마 채널 및 크로마 채널 사이에서 상이할 수 있다.
2차원 변환은 일반적으로 '분리가능'하게 되도록 구성되어, 한 방향으로 데이터 샘플들의 2D 어레이에 대해(예를 들면, 행에 대해) 작동하는 1D 변환들의 제1 세트로서 구현을 가능하게 한다. 1D 변환들의 제1 세트에는 다른 방향으로 1D 변환들의 제1 세트로부터 출력된 데이터 샘플들의 2D 어레이에 대해(예를 들어, 열들에 대해) 작동하는 1D 변환의 제2 세트가 이어진다. 동일한 폭과 높이를 갖는 변환들은 일반적으로 '스퀘어 변환(square transform)'들로서 지칭된다. 다양한 폭들과 높이들을 갖는 추가 변환들이 또한 이용될 수 있고, 일반적으로 '넌-스퀘어 변환'들로서 지칭된다. 행 및 열의 1차원 변환들은 4x4 변환 모듈 또는 8x8 변환 모듈과 같이, 특정한 하드웨어 또는 소프트웨어 모듈들로 결합될 수 있다.
보다 큰 치수를 갖는 변환들은, 비록 그러한 보다 큰 치수의 변환들이 자주 이용되지는 않지만, 구현하기에 보다 많은 양의 회로를 필요로 한다. 따라서, HEVC(high efficiency video coding) 표준은 32x32 루마 샘플들의 최대 변환 사이즈를 정의한다. 변환들은 루마 및 크로마 채널들 양자 모두에 적용될 수 있다. 변환 단위(TU)들에 관한 루마 및 크로마 채널들의 핸들링 간의 차이들이 존재한다. 각각의 잔차 쿼드-트리는 1개의 코딩 단위(CU)를 점유하고, 잔차 쿼드-트리 계층 구성의 각각의 리프 노드에서 하나의 변환 단위(TU)를 포함하는 계층 구성으로의 코딩 단위(CU)의 쿼드-트리 분해(quad-tree decomposition)로서 규정된다. 각각의 변환 단위(TU)는 지원된 변환 사이즈들 중 하나에 해당하는 치수를 갖는다. 코딩 트리 블록(CTB)과 유사하게, 코딩 단위(CU) 전체가 하나 이상의 변환 단위(TU)에 의해서 점유될 필요가 있다. 잔차 쿼드-트리 계층 구성의 각각의 레벨에서 '코딩된 블록 플래그 값'은 각각의 컬러 채널에서의 변환의 가능한 존재를 신호화한다. 시그널링은 (추가 스플릿들이 존재하지 않을 때) 현재 계층 구성 레벨에서 변환의 존재를 나타낼 수 있고, 또는 낮은 계층 구성 레벨들이 결과적인 변환 단위(TU)들 간에 적어도 하나의 변환을 포함할 수 있다. 코딩된 블록 플래그 값이 0일 때, 현재 또는 하위의 계층 구성 레벨들에서의 모든 잔차 계수들은 0이라는 것으로 알려져 있다. 이런 경우에, 현재의 계층 구성 레벨 또는 하위의 계층 구성 레벨들에서 임의의 변환도 임의의 변환 단위(TU)들의 상응하는 컬러 채널에 대하여 실행되도록 요구되지 않다. 코딩된 블록 플래그 값이 1일 때, 현재 영역이 더 세분화되지 않으면, 영역은 적어도 하나의 비-제로 잔차 계수를 요구하는 변환을 포함한다. 현재 영역이 더 세분화되면, 1의 코딩된 블록 플래그 값은 각각의 결과적인 세분화된 영역이 비-제로 잔차 계수를 포함할 수 있다는 것을 나타낸다. 이러한 방식으로, 각각의 컬러 채널에 대해서, 0 이상의 변환들은 아무것도 변하지 않는 것에서부터 코딩 단위(CU)의 전체까지 변하는 코딩 단위(CU)의 영역의 일부를 커버할 수 있다. 분리 코딩된 블록 플래그 값들은 각각의 컬러 채널을 위해 존재한다. 단지 하나의 가능한 코딩된 블록 플래그 값이 있는 경우에 존재하는 경우들처럼, 각각의 코딩된 블록 플래그 값이 인코딩되도록 요구되지는 않는다.
스케일링된 변환 계수(362)는 데이터 샘플 값이 결정된 양자화 파라미터(384)에 따라, 스케일링되고 양자화되는 양자화 모듈(322)에 입력되어, 변환 계수(364)를 생성한다. 변환 계수(364)들은 잔차 샘플 어레이(360)와 같은 치수들을 갖는 값들의 어레이이다. 변환 계수(364)들은 변환이 적용될 때 잔차 샘플 어레이(360)의 주파수 도메인 표현을 제공한다. 변환이 스킵되면, 변환 계수(364)들은 잔차 샘플 어레이(360)의 공간 도메인 표현을 제공한다(즉, 양자화 모듈(322)에 의해 양자화되지만 변환 모듈(320))에 의해 변환되지 않는다). 이산 코사인 변환(DCT)에 대해서, 변환 계수(364)들의 좌상부 값은 잔차 샘플 어레이(360)에 대한 'DC' 값을 상세화하고, 'DC 계수'로 알려져 있다. DC 계수는 잔차 샘플 어레이(360)의 값들의 '평균'을 대표한다. 변환 계수(364)의 다른 값들은 잔차 샘플 어레이(360)에 대한 'AC 계수'들을 상세화한다. 스케일 및 양자화는 결정된 양자화 파라미터(384)의 값에 따라, 정밀도의 손실을 야기한다. 결정된 양자화 파라미터(384)의 상위 값은 조악한 양자화를 야기하고 따라서 더 큰 정보가 스케일링된 변환 계수(362)들로부터 손실된다. 인코딩하기 위한 정보가 더 적은 것처럼, 정보의 손실은 비디오 인코더(114)에 의해 이루어진 압축을 증가시킨다. 압축 효율의 증가는 비디오 디코더(134)로부터의 출력의 화질을 감소시키는 것을 희생으로 발생한다. 예를 들어, 디코딩된 프레임(412)들의 피크 신호 대 잡음비(PSNR)의 축소는 프레임 데이터(310)와 비교된다. 결정된 양자화 파라미터(384)는 프레임 데이터(310)의 각각의 프레임의 인코딩 동안 적응될 수 있다. 대안적으로, 결정된 양자화 파라미터(384)는 프레임 데이터(310)의 일부에 대해 고정될 수 있다. 하나의 배열에서, 결정된 양자화 파라미터(384)는 프레임 데이터(310)의 전체 프레임에 대해 고정될 수 있다. 결정된 양자화 파라미터(384)의 다른 적응들 또한 개별 값들을 가진 각각의 스케일링된 변환 계수(362)들의 양자화와 같이, 가능하다.
변환 계수(364)와 결정된 양자화 파라미터(384)는 역양자화기 모듈(326)에의 입력으로서 간주된다. 역양자화기 모듈(326)은 리스케일링된 변환 계수(366)들을 생성하기 위해 양자화 모듈(322)에 의해 실행된 스케일링을 반전시킨다. 리스케일링된 변환 계수는 변환 계수(364)들의 리스케일링된 버전들이다. 변환 계수(364), 결정된 양자화 파라미터(384), 변환 사이즈(386) 및 비트-깊이(390)는 또한 엔트로피 인코더 모듈(324)에 대한 입력으로서 간주된다. 엔트로피 인코더 모듈(324)은 인코딩된 비트스트림(312)에서 변환 계수(364)들의 값들을 인코딩한다. 인코딩된 비트스트림(312)은 또한 '비디오 비트스트림'으로서 지칭될 수 있다. 정밀도의 손실(예를 들어, 양자화 모듈(322)의 작동으로부터 유래하는) 때문에, 리스케일링된 변환 계수(366)들은 스케일링된 변환 계수(362)들에서의 원래 값들과 같지 않다. 역양자화기 모듈(326)로부터의 리스케일링된 변환 계수(366)는 그리고 나서 역변환 모듈(328)에 출력된다.
역변환 모듈(328)은 주파수 도메인으로부터 공간 도메인으로의 역변환을 행하여 리스케일링된 변환 계수 어레이(366)의 공간 도메인 표현(368)을 생성한다. 공간 도메인 표면(368)은 비디오 디코더(134)에서 생성되는 공간 도메인 표현과 실질적으로 동일하다. 그 다음, 공간 도메인 표현(368)은 합산 모듈(342)에 입력된다.
모션 추정 모듈(338)은 일반적으로 메모리(206) 내에 구성된 프레임 버퍼 모듈(332)에 저장된 프레임의 하나 이상의 세트로부터의 이전의 프레임 데이터와 프레임 데이터(310)를 비교함으로써 모션 벡터(374)를 생성한다. 프레임들의 세트들은 '레퍼런스 픽처'들로 알려지고, '레퍼런스 픽처 리스트'들에서 열거된다. 모션 벡터(374)는 그리고 나서 모션 벡터(374)로부터 유도된 공간 오프셋을 고려하면서, 프레임 버퍼 모듈(332)에 저장된 데이터 샘플들을 필터링함으로써 인터-예측된(inter-predicted) 예측 단위(PU)(376)를 생성하는 모션 보상 모듈(334)에 입력된다. 도 3에 설명되지 않았지만, 모션 벡터(374)는 또한 인코딩된 비트스트림(312)에서의 인코딩을 위해 엔트로피 인코더 모듈(324)에 전달된다. 모션 벡터들은 현재 블록을 위한 모션 벡터와 예측된 모션 벡터 사이의 차이를 나타내는 '모션 벡터 차이'(또는 '모션 벡터 델타')들로서 인코딩될 수 있다. 예측된 모션 벡터는 하나 이상의 공간적으로 또는 시간적으로 인접하는 블록들로부터 결정될 수 있다. 예측된 모션 벡터는 모션 벡터 차이를 인코딩하는 것 없이 현재 블록에 사용될 수 있다. 인코딩된 비트스트림(312)에서 모션 벡터 차이 또는 잔차 계수를 가지고 있지 않은 코딩 단위(CU)는 '스킵된' 블록으로서 지칭된다.
인트라-프레임 예측 모듈(336)은 합산 모듈(342)로부터 획득된 샘플(370)들을 이용하여 인트라-예측된(intra-predicted) 예측 단위(PU)(378)를 생성한다. 특히, 인트라-프레임 예측 모듈(336)은 현재 예측 단위(PU)에 대한 인트라-예측된 샘플들을 생성하기 위해 이미 디코딩된 인접한 블록들로부터의 샘플들을 이용한다. 인접한 블록이 이용 가능하지 않을 때(예를 들어, 프레임 경계에서) 인접한 샘플들은 참조를 위해 '이용 가능하지 않은' 것으로 간주된다. 그와 같은 경우들에서, 디폴트 값은 인접한 샘플 값들 대신에 이용될 수 있다. 일반적으로, 디폴트 값(또는 '하프-톤(half-tone)')은 비트-깊이에 의해 암시된 범위의 절반과 동일하다. 예를 들어, 비디오 인코더(114)가 8개(8)의 비트-깊이를 위해 구성될 때, 디폴트 값은 128이다. 합산 모듈(342)은 멀티플렉서 모듈(340)로부터의 예측 단위(PU)(382)와 멀티플렉서(382)의 공간 도메인 출력을 합산한다. 인트라-프레임 예측 모듈(336)은 또한 인코딩된 비트스트림(312)으로 인코딩하기 위한 엔트로피 인코더(324)에 전송된 인트라-예측 모드(380)를 생성한다.
인트라 블록 카피 모듈(350)은 예측 단위(PU)(382)에 대한 레퍼런스 블록을 생성하기 위해 다양한 블록 벡터들을 테스트한다. 레퍼런스 블록은 현재 코딩 트리 블록(CTB) 및/또는 이전 코딩 트리 블록(CTB)으로부터 획득된 샘플(370)들의 블록을 포함한다. 레퍼런스 블록은 아직 디코딩되지 않았고 따라서 샘플(370)들에 이용할 수 없는 현재 코딩 트리 블록(CTB)에서 임의의 코딩 단위(CU)들로부터의 샘플들을 포함하지 않는다.
블록 벡터는 코딩 트리 블록(CTB)들의 쌍 내의 블록을 참조하는 2차원 벡터이다. 인트라 블록 카피 모듈(350)은 내포된 루프를 이용하여 탐색을 수행함으로써 모든 유효한 블록 벡터를 테스트할 수 있다. 그러나, 더 빠른 탐색 방법들은 레퍼런스 블록의 생성시에 인트라 블록 카피 모듈(350)에 의해 이용될 수 있다. 예를 들어, 인트라 블록 카피 모듈(350)은 현재 코딩 단위(CU)에 수평으로 또는 수직적으로 정렬된 블록 벡터들을 탐색함으로써 탐색 복잡도를 줄일 수 있다. 또 다른 예에서, 거의 수평 및 거의 수직 블록 벡터들은 또한 레퍼런스 블록을 생성하기 위해 인트라 블록 카피 모듈(350)에 의해 탐색될 수 있다. 또 다른 예에서, 인트라 블록 카피 모듈(350)은 최종 블록 벡터를 생성하기 위해 블록 벡터들의 공간적 스파스 세트(a spatially sparse set of block vectors)를 테스트하고 그리고 나서 스파스 블록 벡터(sparse block vector)들 중 선택된 하나의 근방에서 정교한 검색을 수행할 수 있다.
엔트로피 코딩 블록 벡터는 비용 또는 레이트와 관련되어 있다. 블록 벡터를 엔트로피 코딩하는 한가지 방법은 모션 벡터 차이(즉, 'mvd_coding') 구문 구조를 재사용하는 것이다. 모션 벡터 차이 구문 구조는 2차원적 부호화된 벡터(two-dimensional signed vector)의 인코딩을 허용하고 따라서 블록 벡터에 적합하다. 모션 벡터 차이 구문 구조는 더 큰 크기의 벡터들보다 더 콤팩트하게 더 작은 크기의 벡터들을 인코딩한다. 따라서, 레이트 측정에서, 가까운 레퍼런스 블록들을 선택하는 쪽으로 바이어스가 도입될 수 있다.
주어진 블록 벡터는 특별한 왜곡을 갖는 특별한 레퍼런스 블록을 야기한다. 비디오 인코더(114)에 의해 테스트된 블록 벡터들 중에서, 레이트-왜곡 트레이드-오프는 인트라 블록 카피 모드에 어느 블록 벡터를 적용시킬지를 결정하기 위해 적용된다. 전체적 비율 왜곡 트레이드-오프는 인터-예측과 인트라-예측과 같은, 다른 예측 방법들에 대한 결과와 인트라 블록 카피 모드에 대한 결과를 비교할 수 있다.
예측 단위(PU)들은 인트라-예측, 인터 예측 또는 인트라 블록 카피 방법 중 어느 하나를 이용하여 생성될 수 있다. 인트라-예측 방법들은 예측 단위(PU) 내에 레퍼런스 데이터 샘플들을 생성하기 위해서 이전에 디코딩된 예측 단위(PU)에 인접한(즉, 일반적으로 예측 단위의 상부 및 좌측) 데이터 샘플들을 이용한다. 인트라-예측의 다양한 방향들이 가능하다. 한가지 배열에서, 인트라-예측의 33개(33) 방향들이 가능하다. 'DC 모드'와 '평면 모드'는 전체 35개(35) 가능한 인트라-예측 모드들을 위해 지원될 수 있다.
인터 예측 방법은 선택된 레퍼런스 프레임으로부터 블록을 참고하기 위해 모션 벡터를 이용한다. 도 3을 참조하면, 모션 추정 모듈(338) 및 모션 보상 모듈(334)은 루마 샘플의 8분의 1(1/8)의 정확도를 가지고서 모션 벡터(374)에 대하여 동작하여, 프레임 데이터(310) 내의 프레임들 사이의 모션의 정확한 모델링을 가능하게 한다. 레이트-왜곡 트레이드-오프에 따라 이용할 인트라-예측, 인터-예측 또는 인트라 블록 카피 방법이 결정될 수 있다. 최종 인코딩된 비트스트림(312)의 필요한 비트-레이트와 인트라-예측, 인터-예측 또는 인트라 블록 카피 방법 중 어느 하나에 의해 도입된 이미지 품질 왜곡의 크기 사이에서 레이트-왜곡 트레이드-오프가 이루어진다. 인트라-예측이 이용되는 경우에는, 마찬가지로 레이트-왜곡 트레이드-오프에 따라서, 가능한 인트라-예측 모드들의 세트로부터 하나의 인트라-예측 모드가 선택된다. 멀티플렉서 모듈(340)은 인트라-프레임 예측 모듈(336)로부터 인트라-예측 레퍼런스 샘플(378)들을 선택하거나, 모션 보상 블록(334)으로부터 인터-예측된 예측 단위(PU)(376)를 선택하거나, 인트라 블록 카피 모듈(350)로부터 레퍼런스 블록을 선택할 수 있다.
합산 모듈(342)은 디블록킹 필터 모듈(330)에 입력되는 합(370)을 생성한다. 디블록킹 필터 모듈(330)은 블록 경계를 따른 필터링을 행하여, 메모리(206) 내에 구성된 프레임 버퍼 모듈(332)에 기입되는 디블록킹된 샘플(372)을 생성한다. 프레임 버퍼 모듈(332)은 인터-예측된 예측 단위(PU)들에 대한 장래의 참조를 위하여 하나 이상의 과거의 프레임들로부터의 데이터를 보유하기에 충분한 용량을 갖는 버퍼이다.
HEVC(high efficiency video coding) 표준에 대하여, 엔트로피 인코더(324)에 의해서 생성된 인코딩된 비트스트림(312)은 네트워크 추상 계층(NAL) 단위들로 묘사된다. 프레임들은 하나 이상의 '슬라이스들'을 이용하여 인코딩되는데, 각각의 슬라이스는 하나 이상의 코딩 트리 블록(CTB)들을 포함한다. 슬라이스의 2가지 타입들은 규정되는데, '독립적인 슬라이스 세그먼트들'과 '종속적 슬라이스 세그먼트들'이다. 일반적으로, 프레임의 각각의 슬라이스는 하나의 NAL 단위에 포함된다. 엔트로피 인코더(324)는 집합적으로 '구문 요소'들로서 지칭되는 변환 계수(364)들, 인트라-예측 모드(380), 모션 벡터들(또는 모션 벡터 차이들) 및 다른 파라미터들을, 컨텍스트 적응 2진 산술 코딩(CABAC) 알고리즘을 수행함으로써 인코딩된 비트스트림(312)으로 인코딩한다. 구문 요소들은 '구문 구조' 내에 함께 그룹화된다. 그룹화는 계층 구조들을 기술하기 위해 재귀(recursion)를 포함할 수 있다. 인트라-예측 모드와 같은 서수 값 또는 모션 벡터와 같은 정수 값들뿐만 아니라, 구문 요소들은 또한 예를 들어 쿼드-트리 스플릿(quad-tree split)을 나타내기 위해 플래그들을 포함한다.
비디오 인코더(114)는 또한 프레임을 하나 이상의 '타일'들로 나눈다. 각각의 타일은 독립적으로 인코딩 및 디코딩되어, 비디오 인코더(114)와 비디오 디코더(134)의 병렬 구현들을 용이하게 할 수 있는 코딩 트리 블록(CTB)들의 직사각형 세트이다. 각각의 타일 내에서, 코딩 트리 블록(CTB)들은 래스터 순서로 스캐닝되고 비디오 인코더(114) 또는 비디오 디코더(134)의 단일 코어(또는 스레드) 구현은 타일들을 래스터 스캔 순서로 스캔한다. 비디오 인코더(114)와 비디오 디코더(134)의 병렬 구현을 가능하게 하기 위해, 타일 경계를 따르는 블록들의 인트라-예측은 인접한 타일 내의 블록들로부터의 샘플들을 이용하지 않을 수 있다. 이에 따라, 인접한 샘플들은 샘플 값들이 존재할지라도 인트라-예측에 이용 가능하지 않은 것으로 표시될 수 있다.
도 4의 비디오 디코더(134)가 HEVC(high efficiency video coding) 비디오 디코딩 파이프라인을 참조하여 기술되지만, 다른 비디오 코덱이 모듈들(420-436)의 처리 스테이지를 이용할 수도 있다. 인코딩된 비디오 정보는 메모리(206), 하드 디스크 드라이브(210), CD-ROM, Blu-ray™ 디스크 또는 다른 컴퓨터 판독가능 저장 매체로부터 판독될 수도 있다. 대안적으로, 인코딩된 비디오 정보는 통신 네트워크(220)에 접속된 서버와 같은 외부 소스 또는 무선 주파수 수신기로부터 수신될 수도 있다.
도 4에 도시된 바와 같이, 인코딩된 비트스트림(312)과 같은 수신된 비디오 데이터는 비디오 디코더(134)에 입력된다. 인코딩된 비트스트림(312)은 메모리(206), 하드 디스크 드라이브(210), CD-ROM, Blu-ray™ 디스크 또는 다른 컴퓨터 판독가능 저장 매체로부터 판독될 수도 있다. 대안적으로, 인코딩된 비트스트림(312)은 통신 네트워크(220)에 접속된 서버와 같은 외부 소스 또는 무선 주파수 수신기로부터 수신될 수도 있다. 인코딩된 비트스트림(312)은 디코딩될 캡처된 프레임 데이터를 나타내는 인코딩된 구문 요소를 포함한다.
인코딩된 비트스트림(312)은 인코딩된 비트스트림(312)으로부터 구문 요소를 추출하고, 이 구문 요소의 값을 비디오 디코더(134) 내의 다른 블록에 보내는 엔트로피 디코더 모듈(420)에 입력된다. 엔트로피 디코더 모듈(420)은 컨텍스트 적응 2진 산술 코딩(CABAC) 알고리즘을 적용하여 인코딩된 비트스트림(312)으로부터의 구문 요소를 디코딩한다. 디코딩된 구문 요소는 비디오 디코더(134) 내의 파라미터를 재구성하는 데에 사용된다. 파라미터들은 0 이상의 잔차 데이터 어레이(450)와 모션 벡터(452)들을 포함한다. 모션 벡터 차이들은 인코딩된 비트스트림(312)으로부터 디코딩되고 모션 벡터(452)는 디코딩된 모션 벡터 차이들로부터 유도된다.
비디오 디코더(134) 내에 재구성된 파라미터들은 또한 예측 모드(454), 양자화 파라미터(468), 변환 사이즈(470) 및 비트-깊이(472)를 포함한다. 변환 사이즈(470)는 변환 사이즈(386)에 따라 비디오 인코더(114)에 의해 인코딩된 비트스트림(312)에서 인코딩되었다. 비트-깊이(472)는 비트-깊이(390)에 따라 비디오 인코더(114)에 의해 인코딩된 비트스트림(312)에서 인코딩되었다. 양자화 파라미터(468)는 양자화 파라미터(384)에 따라 비디오 인코더(114)에 의해 인코딩된 비트스트림(312)에서 인코딩되었다. 따라서, 변환 사이즈(470)는 변환 사이즈(386)와 동일하고, 비트-깊이(472)는 비트-깊이(390)와 동일하며 양자화 파라미터(468)는 양자화 파라미터(384)와 동일하다.
잔차 데이터 어레이(450)는 역양자화기 모듈(421)로 보내지고, 모션 벡터(452)는 모션 보상 모듈(434)로 보내지며, 예측 모드(454)는 인트라-프레임 예측 모듈(426) 및 멀티플렉서(428)로 보내어진다.
도 4와 관련하여, 역양자화기 모듈(421)은 변환 계수의 형태로 재구성된 데이터(455)를 생성하기 위해 잔차 데이터 어레이(450)의 잔차 데이터의 역 스케일링을 수행한다. 역양자화기 모듈(421)은 재구성된 데이터(455)를 역변환 모듈(422)에 출력한다. 역변환 모듈(422)은 재구성된 데이터(455)(즉, 변환 계수들)를 주파수 도메인 표현으로부터 공간 도메인 표현으로 변환시키기 위해 '역변환'을 적용하여, 멀티플렉서 모듈(423)을 통해 잔차 샘플 어레이(456)를 출력한다. 역변환 모듈(422)은 역변환 모듈(328)과 동일한 동작을 수행한다. 역변환 모듈(422)은 비트-깊이(472)에 따른 비트-깊이를 갖는 변환 사이즈(470)에 따라 사이징된 역변환들을 수행하도록 구성된다. 역변환 모듈(422)에 의해 실행된 변환들은 HEVC(high efficiency video coding) 표준에 따르는 인코딩된 비트스트림(312)을 디코딩하도록 요구된 변환 사이즈들의 미리 결정된 세트로부터 선택된다.
모션 보상 모듈(434)은 엔트로피 디코더 모듈(420)로부터의, 메모리(206) 내에 구성된 프레임 버퍼 블록(432)으로부터의 레퍼런스 프레임 데이터(460)와 결합된 모션 벡터(452)를 이용하여, 예측 단위(PU)에 대한 인터-예측된 예측 단위(PU)(462)를 생성한다. 인터-예측된 예측 단위(PU)(462)는 이전에 디코딩된 프레임 데이터를 근거로 한 출력 디코딩된 프레임 데이터의 예측이다. 현재 예측 단위(PU)가 인트라-예측을 이용하여 코딩되었다는 것을 예측 모드(454)가 나타내면, 인트라-프레임 예측 모듈(426)은 예측 단위(PU)에 대한 인트라-예측된 예측 단위(PU)(464)를 생성한다. 인트라-예측된 예측 단위(PU)(464)는 공간적으로 예측 단위(PU)에 인접하는 데이터 샘플들과 또한 예측 모드(454)에 의해 공급된 예측 방향을 이용하여 생성된다. 공간적으로 인접하는 데이터 샘플은 합산 모듈(424)로부터 출력된 합(458)으로부터 얻어진다.
도 4에서 도시된 바와 같이, 비디오 디코더(134)의 인트라 블록 카피 모듈(436)은 현재 및/또는 이전 코딩 트리 블록(CTB)들로부터 샘플들의 어레이를 카피함으로써, 레퍼런스 샘플들의 블록을 생성한다. 레퍼런스 샘플들의 오프셋은 엔트로피 디코더(420)에 의해 디코딩된 블록 벡터를 현재 코딩 단위(CU)의 위치에 추가함으로써 계산된다. 멀티플렉서 모듈(428)은 현재 예측 모드(454)에 따라, 인트라 블록 카피 모듈(436)로부터 예측 단위(PU)(466) 또는 레퍼런스 블록에 대하여 인트라-예측된 예측 단위(PU)(464) 또는 인터-예측된 예측 단위(PU)(462)를 선택한다. 멀티플렉서 모듈(428)로부터 출력되는 예측 단위(PU)(466)는 합산 모듈(424)에 의해서 역 스케일 및 변환 모듈(422)로부터의 잔차 샘플 어레이(456)에 가산되어 합(458)을 생성한다. 그 다음, 합(458)은 디블록킹 필터 모듈(430), 인트라-프레임 예측 모듈(426) 및 인트라 블록 카피 모듈(436)의 각각에 입력된다. 디블록킹 필터 모듈(430)은 변환 단위(TU) 경계와 같은 데이터 블록 경계를 따라 필터링을 행하여 가시적인 결함을 매끄럽게 한다. 디블록킹 필터 모듈(430)의 출력은 메모리(206) 내에 구성된 프레임 버퍼 모듈(432)에 기입된다. 프레임 버퍼 모듈(432)은 장래의 참조를 위하여 하나 이상의 디코딩된 프레임들을 보유하기에 충분한 저장소를 제공한다. 디코딩된 프레임(412)은 프레임 버퍼 모듈(432)로부터 디스플레이 디바이스(214)의 형태일 수 있는 디스플레이 디바이스(136)와 같은 디스플레이 디바이스에도 출력된다.
도 5는 아래 설명된 것처럼 2개의 타일들과 3개의 슬라이스 세그먼트들로 나뉘어진 프레임(500)을 도시하는 개략적 블록도이다.
프레임(500)은 도 5의 그리드 셀들로서 표현되는 코딩 트리 블록(CTB)들의 어레이를 포함한다. 프레임(500)은 도 5에서 파선(516)으로 분리된 2개의 타일들로 나뉘어진다. 프레임(500)의 3개 슬라이스들은 독립적인 슬라이스 세그먼트들(502, 506 및 512)과 종속적인 슬라이스 세그먼트들(504, 508, 510 및 514)을 포함한다. 종속적인 슬라이스 세그먼트(504)는 독립적인 슬라이스 세그먼트(502)에 의존한다. 종속적인 슬라이스 세그먼트들(508과 510)은 독립적인 슬라이스 세그먼트(506)에 의존한다. 종속적인 슬라이스 세그먼트(514)는 독립적인 슬라이스 세그먼트(512)에 의존한다.
슬라이스들로의 프레임(500)의 분할은 라인(520)과 같은, 굵은 선들을 이용하여 도 5에 도시된다. 각각의 슬라이스는 라인(518)과 같은, 도 5의 파선들에 의해 도시된 것처럼 독립적인 슬라이스 세그먼트와 0 이상의 종속적인 슬라이스 세그먼트들로 나뉘어진다. 따라서, 도 5의 예에서, 1개의 슬라이스는 슬라이스 세그먼트들(502와 504)을 포함하고, 1개의 슬라이스는 슬라이스 세그먼트들(506, 508과 510)을 포함하고 1개의 슬라이스는 슬라이스 세그먼트들(512와 514)을 포함한다.
프레임(500) 내의 코딩 트리 블록(CTB)들의 스캐닝은 제1 타일이 래스터 순서로 스캐닝된 다음 제2 타일을 래스터 순서로 스캐닝하도록 순서화된다. 인트라-예측된 예측 단위(PU)들은 코딩 트리 블록(CTB)의 상단 에지 또는 좌측 에지의 하나 또는 둘 다에 정렬될 수 있다. 그와 같은 경우들에서 인트라-예측에 요구된 인접한 샘플들은 인접한 코딩 트리 블록(CTB)에 위치할 수 있다. 인접한 코딩 트리 블록(CTB)은 상이한 타일 또는 상이한 슬라이스에 속할 수 있다. 그와 같은 경우들에서, 인접한 샘플들은 액세스되지 않는다. 그 대신에, 디폴트 값이 이용된다. 디폴트 값은 이용 가능한 다른 인접한 샘플들로부터 유도될 수 있다. 일반적으로, 각각의 이용할 수 없는 인접한 샘플에 대해서, 가장 가까이 이용 가능한 인접한 샘플 값이 이용된다. 대안적으로, 디폴트 값은 비트-깊이에 의해 암시된 하프-톤 값, 즉 비트 깊이로부터 1을 감산한 결과의 2의 거듭제곱(two to the power)과 동일하게 설정될 수 있다.
도 5에 도시된 바와 같은 프레임(500)에서 타일들의 배열은 병렬 처리에 유익하다. 예를 들어, 비디오 인코더(114)는 엔트로피 인코더(324)의 다수 인스턴스들을 포함할 수 있고 비디오 디코더(134)는 엔트로피 디코더(420)의 다수 인스턴스들을 포함할 수 있다. 각각의 타일은 병행적으로 엔트로피 인코더(324)와 엔트로피 디코더(420)의 개별 인스턴스에 의해 처리될 수 있다.
도 6a는 코딩 트리 블록(CTB)(600) 내의 주사 영역들의 예시적 'Z-스캔' 순서를 도시하는 개략적 블록도이다. 코딩 트리 블록(CTB)(600)의 계층적 분해의 각각의 레벨에서, 'Z'를 닮는 스캔이 수행되고, 즉 좌측에서부터 우측까지 상부 2개의 영역들을 스캐닝하고, 그리고 나서 좌측에서부터 우측까지 하부 2개의 영역들을 스캐닝한다. 스캔은 깊이-우선 방식(depth-first manner)으로 반복적으로 적용된다. 예를 들어, 현재 계층 구성 레벨에서의 영역이 하부 계층 구성 레벨에서 추가 영역들로 세분화되면, Z-스캔은 현재 계층 구성 레벨에서 다음 영역으로 진행하기 전에 하부 계층 구성 레벨 내에 적용된다. 더 세분화되지 않은 코딩 트리 블록(CTB)의 영역들은 코딩 단위(CU)를 포함한다. 도 6a의 예에서, 코딩 트리 블록(CTB)(600)의 좌측 상단의 4개의 코딩 단위(CU)들은 Z-스캔 순서(622)에서와 같이 스캐닝되어, 도 6a의 예에서 현재 처리되고 있는 코딩 단위(CU)(626)에 도달한다. 코딩 트리 블록(CTB)(600)의 나머지는 Z-스캔 순서(624)에 따라 스캐닝될 것이다. 코딩 트리 블록(CTB)(600) 내의 이전에 디코딩된 코딩 단위(CU)들로부터의 샘플들은 인트라-예측에 이용 가능하다. 도 6a에서 사선 해칭으로 표시된 것처럼, 비디오 디코더(134)에 의해 아직 디코딩되지 않은 코딩 단위(CU)들로부터의 샘플들은 인트라-예측에 이용 가능하지 않다. 이에 따라, 비디오 인코더(114)는 또한 인트라-예측에 이용 가능하지 않은 것처럼, 아직 디코딩되지 않은 샘플들을 처리한다.
도 6b는 현재 코딩 트리 블록(CTB) 내의 코딩 단위(CU)와 관련하여 인접한 코딩 트리 블록(CTB) 내의 샘플들의 블록을 참조하는 예시적 블록 벡터(624)을 도시하는 개략적 블록도이다. 인접한 코딩 트리 블록(CTB) 내에서 참조하는 것은 현재 코딩 트리 블록(CTB) 내의 코딩 단위(CU)의 수직 위치에 의해 제한된다. 도 6b의 예에서, 프레임부(620)는 동일한 타일과 동일한 슬라이스에 속하는 2개의 코딩 트리 블록(CTB)들을 포함한다. 2개의 코딩 트리 블록(CTB)들은 현재 코딩 트리 블록(CTB)(즉, 프레임부(620)의 우반부)과 이전 코딩 트리 블록(CTB)(즉, 프레임부(620)의 좌반부)이다. 인트라 블록 카피 예측은 도 6b의 예에서 코딩 단위(CU)(622)에 적용된다. 블록 벡터(624)는 코딩 단위(CU)(622)의 위치와 관련하여 레퍼런스 블록(626)의 위치를 상세화한다. 레퍼런스 블록(626)은 샘플들에 대해 실행되는 인-루프 필터링(in-loop filtering)(예를 들어, 디블록킹) 이전의 샘플들로부터 획득된다. 그러므로, 샘플들을 레퍼런스 블록의 모든 가능한 위치들에 제공하기 위해서는, 디블록킹 이전에 현재 코딩 트리 블록(CTB)과 이전 코딩 트리 블록(CTB)의 샘플들을 버퍼링하는 것이 요구된다.
레퍼런스 샘플들에 대해 실행되는 인-루프 필터링 이전의 레퍼런스 샘플들의 사용은 인트라-예측 프로세스와 일치한다. 디블록킹 프로세스가 아직 이용 가능하지 않은 현재 코딩 단위(CU) 내의 샘플들에 대한 의존성을 도입한 것처럼, 인트라-예측 프로세스에서 인접한 샘플들은 반드시 디블록킹 전에 이용된다. 블록 벡터(624)는 코딩 단위(CU)(622)의 위치와 관련하여, 좌측 방향(수평) 변위와 상위 방향(수직) 변위로서 레퍼런스 블록(626)의 위치를 상세화한 2개의 양의 정수 값들(x,y)을 포함한다. 이에 따라, 비디오 디코더(134)에 의해 여전히 디코딩되는 현재 코딩 트리 블록(CTB)의 일부(예를 들어, 630)에 대한 의존성을 야기하는 블록 벡터를 상세화하는 것은 가능하지 않다. 예를 들어, 현재 코딩 트리 블록(CTB)의 좌상부 4분면에 코딩 단위(CU)(622)의 위치가 주어지면, 설명된 좌표 방식은 레퍼런스 블록에 대한 현재 코딩 트리 블록(CTB)의 하반부(예를 들어, 630)의 사용을 방지한다. 또한 현재 코딩 트리 블록(CTB)의 하반부(예를 들어, 630)의 사용을 방지하는 것은 이전 코딩 트리 블록(CTB)의 하반부(예를 들어, 628)의 사용을 방지한다.
블록 벡터(624)는 코딩 단위(CU)(622)의 상좌측 샘플 위치와 관련하여 레퍼런스 블록(626)의 상좌측 샘플 위치를 상세화한다. 그와 같이, 레퍼런스 블록과 현재 코딩 단위(CU)의 중첩을 야기하는 블록 벡터들은 금지된다. 예를 들어, 16x16의 코딩 단위(CU) 사이즈로 인해, (-16, 0), (0, -16), (-17, -18)과 같은 블록 벡터들이 허용되고 반면에 (0,0), (-15, -15), (-8, 0)과 같은 블록 벡터들은 금지된다. 일반적으로, 수평과 수직 변위들 둘 다가 코딩 단위(CU)의 폭과 높이 미만인 블록 벡터들은 금지된다. 추가적으로, 이전 코딩 트리 블록(CTB) 내의 레퍼런스 블록 위치에 대한 제한은 인트라 블록 카피 모듈(350)으로 제공된 이용 가능한 코딩 효율 개선의 축소를 야기한다. 이전 코딩 트리 블록(CTB)의 전체가 이용 가능한 것처럼, 이전 코딩 트리 블록(CTB) 상의 어딘가에 레퍼런스 블록 위치들을 가능하게 하기 위해 제한을 완화시키는 것은 코딩 효율을 향상시킨다.
도 7a는 현재 코딩 트리 블록(CTB) 내의 코딩 단위(CU)와 관련하여 인접한 코딩 트리 블록(CTB) 내의 샘플들의 블록을 참조하는 예시적 블록 벡터(704)을 도시하는 개략적 블록도이다. 인접한 코딩 트리 블록(CTB) 내에서 참조하는 것은 현재 코딩 트리 블록(CTB) 내의 코딩 단위(CU)의 수직 위치에 의해 제한되지 않는다. 도 6b에서와 같이, 도 7a에 도시된 예시적 프레임부(700)는 현재 코딩 트리 블록(CTB)과 이전 코딩 트리 블록(CTB)를 포함한다. 인트라 블록 카피 예측은 코딩 단위(CU)(702)에 적용된다. 블록 벡터(704)는 프레임부(700) 내에서, 레퍼런스 블록(706)의 위치를 상세화한다. 도 6b에서와 같이, 블록 벡터(706)는 레퍼런스 블록이 아직 디코딩되지 않은 현재 코딩 트리 블록(CTB)의 임의의 일부(예를 들어, 708)를 중첩하게 되면 레퍼런스 블록을 위치시키는 것이 금지된다. 블록 벡터(706)는 레퍼런스 블록이 현재 코딩 단위(CU)(702)을 중첩하게 되면 레퍼런스 블록을 위치시키는 것이 또한 금지된다. 도 6b와는 달리, 블록 벡터(704)는 x와 y축들의 양쪽에서 포지티브와 네거티브 변위를 상세화할 수 있다.
도 7b는 현재 코딩 트리 블록(CTB)과 인접한 코딩 트리 블록(CTB)의 양쪽에 놓여있는 샘플들의 블록을 참조하는 예시적 블록 벡터(724)을 도시하는 개략적 블록도이다. 도 7b의 예에서 참조하는 블록 벡터는 레퍼런스 샘플들의 블록의 우상단 코너와 관련되어 있다. 도 7a에서와 같이, 프레임부(720)는 2개의 코딩 트리 블록(CTB)들을 포함한다. 블록 벡터(724)는 도 7b의 예에서 현재 처리되고 있는 코딩 단위(CU)(722)와 관련하여 레퍼런스 블록(726)의 위치를 상세화한다. 도 7a에서와 같이, 레퍼런스 블록(726)은 코딩 단위(CU)(722) 또는 여전히 디코딩되는 현재 코딩 트리 블록(CTB)의 일부(예를 들어, 728)를 중첩하지 않을 수 있다. 도 7a와는 달리, 블록 벡터(724)는 레퍼런스 블록(726)의 우상단의 위치를 상세화한다. 예를 들어, (0, 0)의 블록 벡터는 코딩 단위(CU)에 인접한 레퍼런스 블록을 야기한다. 변수 'cu_size'가 규정될 수 있고, 코딩 단위(CU)(722)의 폭 또는 높이를 나타낸다. 그와 같은 배열들에서, 레퍼런스 블록(726)의 위치는 (-cu_size, 0)으로서 규정되는 코딩 단위(CU)(722)의 위치, 블록 벡터(724) 및 오프셋 벡터의 벡터 가법에 의해 상세화될 수 있다. 다른 오프셋 벡터들은 또한 가능하고, 예를 들어, (0, -cu_size) 또는 (-cu_size, -cu_size)이다.
도 8a는 프레임부(800) 내의 현재 코딩 트리 블록(CTB)과 인접한 코딩 트리 블록(CTB)(810)의 양쪽에 놓여있는 샘플들의 블록을 참조하는 예시적 블록 벡터(804)을 도시하는 개략적 블록도이다. 코딩 트리 블록(CTB)(810)은 이용할 수 없는 것(예를 들어, 현재 코딩 트리 블록(CTB)에 대해 상이한 타일에 속하는 것으로 인해)으로서 표시된다. 이에 따라, 레퍼런스 블록(806)은 현재 코딩 트리 블록(CTB) 내의 샘플들을 단지 이용하는 것으로 제한된다. 블록 벡터(804)는 코딩 단위(CU)(802)의 위치와 관련하여 레퍼런스 블록(806)의 위치를 상세화한다. 블록 벡터(804)는 코딩 트리 블록(CTB)(810)과 중첩하는 레퍼런스 블록을 상세화한다. 코딩 트리 블록(CTB)(810)으로부터의 샘플들이 이용 가능하지 않은 것으로 표시되면, 대안적인 값들이 레퍼런스 블록(806)의 코딩 트리 블록(CTB)(810) 일부를 채우는데 사용된다. 한가지 배열에서, 인접한 샘플들이 인트라-예측에 이용 가능하지 않을 때 이용되는 디폴트 값과 같은 디폴트 값은 레퍼런스 블록(806)의 중첩부를 채우는데 사용될 수 있다. 예를 들어, 비디오 인코더(114)가 8(8)의 비트-깊이에 대해 구성되면, 이용된 디폴트 값은 128(128)이고 10(10)의 비트-깊이를 위해 구성될 때, 이용된 디폴트 값은 512(512)이다. 레퍼런스 블록(806)의 중첩부를 채우는 다른 방법들 또한 가능하다. 예를 들어, 비디오 인코더(114)의 한가지 배열에서, 비-중첩부의 에지(즉, 현재 코딩 트리 블록(CTB) 내)에 있는 샘플 값들은 레퍼런스 블록(806)의 중첩부를 채우는데 사용될 수 있다. 비-중첩부의 에지에 있는 샘플 값들은, 현재 코딩 트리 블록(CTB)에 따른 레퍼런스 블록(806) 내의 샘플들의 좌표들을 클리핑(clipping)하며, 그로 인해 코딩 트리 블록(CTB)(810)에 대한 액세스를 금지함으로써 이용될 수 있다.
도 8b는 현재 코딩 트리 블록(CTB) 내의 샘플들의 블록을 참조하는 예시적 조정 블록 벡터(824)을 도시하는 개략적 블록도이다. 도 8b의 예에서, 조정된 블록 벡터(824)는 이용할 수 없는 것으로서 표시된 인접한 코딩 트리 블록(CTB)(830)으로부터의 임의의 샘플들을 참조하고 있지 않다. 프레임부(820)는 레퍼런스 블록(826)이 획득되는 2개의 코딩 트리 블록(CTB)들을 포함한다. 코딩 트리 블록(CTB)(830)이 레퍼런스에 이용 가능하지 않는 것으로 표시되지 않는 것처럼(예를 들어, 상이한 타일에 속하는 것으로 인해), 레퍼런스 블록(826)은 레퍼런스를 위해 코딩 트리 블록(CTB)(830)으로부터의 샘플들을 이용하지 않을 수 있다. 도 8b의 예에서, 클리핑된 블록 벡터(824)는 코딩 단위(CU)(822)와 관련하여 레퍼런스 블록(826)의 위치를 상세화한다. 비디오 인코더(114)와 비디오 디코더(134)의 한가지 배열에서, 클리핑된 블록 벡터(824)는 예를 들어, 도 8a의 블록 벡터(804)와 동일하게, 인코딩된 비트스트림(312) 내에 존재하는 블록 벡터로부터 유도될 수 있다. 인코딩된 비트스트림(312)에 존재하는 블록 벡터로부터 클리핑된 블록 벡터(824)를 유도하는 배열에서, 클리핑 동작은 레퍼런스 블록(826)이 이용 가능하지 않은 코딩 트리 블록(CTB)(830)과 중첩하지 못하게 하는데 사용될 수 있다.
도 8c는 샘플들의 블록(846)을 참조하는 예시적 블록 벡터(844)를 도시하는 개략적 블록도이며, 여기서 참조된 샘플들의 일부는 인터-예측을 이용하여 디코딩되었다. 프레임부(840)는 레퍼런스 블록(846)이 획득되는 2개의 코딩 트리 블록(CTB)들을 포함한다. 도 8c의 예에서, 비디오 인코더(114)와 비디오 디코더(134)는 '한정된 인트라-예측'을 이용하도록 구성된다. 한정된 인트라-예측은 인트라-예측 프로세스를 위한 인접한 샘플들이 다른 인트라-예측된(또는 인트라 블록 카피된) 코딩 단위(CU)들로부터 단지 획득될 수 있는 모드이다. 이에 따라, 인터-예측을 이용하여 예측된 코딩 단위(CU)들은 한정된 인트라-예측 모드가 가능해질 때 인트라-예측에 인접한 샘플들을 제공하기 위해 이용되지 않을 수 있다. 인터-예측된 코딩 단위(CU)들은 레퍼런스를 위해 이전의 프레임들에 의존한다. 일부의 경우에 이전의 프레임은 비디오 디코더(134)에 이용 가능하지 않을 수 있다(예를 들어, 통신 채널(120)의 전송 오류로 인해). 이전의 프레임이 비디오 디코더(134)에서 이용 가능한 경우들에서, 의도된 레퍼런스 블록이 이용 가능하지 않은 것처럼, 일부 다른 정보는 인터-예측된 코딩 단위(CU) 내에 채워진다. 한정된 인트라-예측은 인트라-예측된 코딩 단위(CU)들로의 전파되는 것으로부터 미싱되는 프레임들로부터 유래하는 그와 같은 잘못된 데이터를 방해를 함으로써 오류 복원력을 향상시킨다. 따라서 인터-예측된 코딩 단위(CU)들은 한정된 인트라-예측이 가능해질 때 인트라-예측된 코딩 단위(CU)들에 의해 참조에 이용 가능하지 않은 것으로 간주된다. 인트라 블록 카피 모드는 참조에 이용 가능하지 않은 것으로 인터-예측된 코딩 단위(CU)들을 간주함으로써 비슷한 제약을 갖는다. 코딩 단위(CU)에 대한 레퍼런스 샘플 블록을 생성하는 방법(1700)은 도 17a와 관련하여 아래 설명될 것이다.
인트라 블록 카피 모드를 이용하여 코딩 단위(CU)에 대한 코딩 단위(CU) 구문 구조(예를 들어, 902, 도 9 참조)를 인코딩하는 방법(1000)이 도 10과 관련하여 아래에 기재된다. 방법(1000)을 이용한 비디오 인코더(114)의 배열들은 인트라 블록 카피 모드에 대한 인터-예측된 코딩 단위(CU)들로부터의 임의의 샘플들에 액세스하게 하는 블록 벡터들을 금지할 수 있다. 방법(1000)을 이용한 배열에서, 규범적 제한이 이용될 수 있으며, 여기서 규범적 제한은 인터-예측된 블록으로부터 샘플들을 요구하는 레퍼런스 블록을 야기하는 인코딩된 비트스트림(312)에 인트라 블록 벡터가 존재하지 않을 수 있다는 것을 말한다. 방법(1000)을 이용한 배열에서, 블록 탐색 단계(1002)는 불일치 비트스트림을 야기하는 그와 같은 블록 벡터들의 탐색을 수행하지 않는다. 인터-예측된 블록으로부터의 샘플들을 요구하는 레퍼런스 블록을 야기하는 비트스트림이 '불일치(non-conforming)' 비트스트림이고 디코더들이 그와 같은 비트스트림들을 디코딩하도록 요구되지 않기 때문에, 비디오 디코더(134)는 이러한 상황이 발생하는 경우의 비규정 방식으로 작용할 수 있다. 도 8c의 블록 벡터(846)는 불일치 비트스트림을 야기하는 블록 벡터의 예이다.
비디오 인코더(114)는 불일치 비트스트림을 생성하지 않도록 구성된다. 이에 따라, 비디오 인코더(114)의 배열들은 그와 같은 불일치 블록 벡터들의 탐색을 방지하기 위해 인트라 블록 카피 모듈(350)에 로직을 포함시킬 수 있다. 비디오 인코더(114)의 한가지 배열에서, 인트라 블록 카피 모듈(350)은 (레이트-왜곡 의미에서) 테스트하기 위한 많은 상이한 블록 벡터들을 생성한다. 불일치 비트스트림을 야기하는 임의의 블록 벡터의 테스팅은 중단된다.
대안적으로, 비디오 인코더(114)의 한가지 배열에서, 디폴트 샘플 값은 인터-예측된 코딩 단위(CU)들과 중첩하는 레퍼런스 블록의 임의의 부분에 대한 샘플 값들을 제공하기 위해 이용될 수 있다. 도 8c의 예에서, 코딩 단위(CU)(848)은 인터-예측된 코딩 단위(CU)가고 한정된 인트라-예측은 코딩 단위(CU)(848)을 처리하기 위해 비디오 인코더(114)에 의해 이용된다. 그러므로, 코딩 단위(CU)(848)과 중첩하는 레퍼런스 블록(846)의 일부는 코딩 단위(CU)(848)으로부터 획득된 샘플 값들을 이용하는 대신에, 디폴트 샘플 값들을 이용한다. 8x8의 최소 코딩 단위(SCU) 사이즈로 인해, 코딩 트리 블록(CTB)의 예측 모드는 어느 코딩 단위(CU)들이 인터-예측되었는지를 나타내는 플래그들의 8x8 어레이를 요구한다. 그러한 배열에서, 인트라 블록 카피 단계(1018)와 인트라 블록 카피 단계(1140)는 디폴트 샘플 값들로 중첩부(즉, 인터-예측된 코딩 단위(CU)와 중첩)를 채우도록 수정된다.
도 8d는 샘플들의 블록을 참조하는 예시적 블록 벡터(864)를 도시하는 개략적 블록도이며, 여기서 레퍼런스 블록(866)은 현재 코딩 단위(CU)(862) 내의 샘플들을 포함한다. 프레임부(860)는 레퍼런스 블록(866)이 획득되는 2개의 코딩 트리 블록(CTB)들을 포함한다. 현재 코딩 단위(CU) 내의 샘플들이 아직 결정되지 않았기 때문에, 현재 코딩 단위(CU) 내의 샘플들은 레퍼런스 블록(866)의 일부로서 이용될 수 없다.
한가지 배열에서 디폴트 샘플 값은 이용할 수 없는 샘플 값 대신에 제공될 수 있다. 디폴트 샘플 값은 인접한 샘플들이 레퍼런스에 이용 가능하지 않는 것으로 표시될 때 인트라-예측에 대한 디폴트 샘플 값과 유사한 방식으로 유도될 수 있다. 그러한 배열에서, 인트라 블록 카피 단계(1018)와 인트라 블록 카피 단계(1140)는 디폴트 샘플 값들로 중첩부(즉, 현재 코딩 단위(CU)와 중첩)를 채우도록 수정된다. 도 9는 비트스트림(312)의 부분(900) 내의 코딩 단위(CU) 구문 구조(902)를 도시하는 개략적 블록도이다. 인코딩된 비트스트림(312)은 예를 들어, 슬라이스들, 프레임들, 종속적인 슬라이스 세그먼트들, 독립적인 슬라이스 세그먼트들 또는 타일들로 나눠지는 구문 요소들의 시퀀스들을 포함한다. 구문 요소들은 계층적 '구문 구조'들로 조직된다. 그러한 하나의 구문 구조는 코딩 단위(CU) 구문 구조(902)이다. 코딩 단위(CU) 구문 구조의 인스턴스는 슬라이스, 타일 또는 프레임에서 각각의 코딩 단위(CU)에 대해 존재한다. 코딩 단위(CU) 구문 구조의 인스턴스의 컨텍스트는 특별한 구문 요소들이 존재하는 것을 방지할 수 있다. 예를 들어, 인터-예측과 관련된 구문 요소들은 단지 인트라-예측을 이용하기 위해 나타나는 슬라이스 내에서 코딩 단위(CU) 구문 구조에 존재하지 않는다. 코딩 단위(CU) 구문 구조(902)는 인트라 블록 카피 기능이 이용 가능하고 사용되는 경우들에서 이용될 수 있다.
도 9에 도시된 바와 같이, 코딩 단위(CU) 구문 구조(902)는 다른 구문 요소들과 구문 구조들을 포함한다(예를 들어, 904 내지 918). 트랜스퀀트 바이패스 플래그(transquant bypass flag)(904)('cu_transquant_bypass_flag')는 코딩 단위(CU)에 대한 '변환 양자화 바이패스' 모드의 사용을 신호화한다. 트랜스퀀트 바이패스 플래그(904)는 하이 레벨의 구문에 존재하는 'transquant_bypass_enabled_flag'가 참인 경우에 존재한다. 트랜스퀀트 바이패스 플래그(904)는 인트라 블록 카피가 가능한 것과 상관없이 신호화되고, 따라서 인트라 블록 카피는 무손실 및 손실 코딩의 경우들 양쪽에 적용될 수 있다.
스킵 플래그(906)('cu_skip_flag')는 인터-예측일 수 있는 슬라이스들 내의 코딩 단위(CU)들에 대한 인코딩된 비트스트림(312)에 존재한다. 스킵 플래그(906) 신호들은 코딩 단위(CU)가 인터-예측된 예측 단위(PU)들을 포함하고 잔차 또는 모션 벡터 차이가 이러한 코딩 단위(CU)와 관련된 예측 단위(PU)에 대한 인코딩된 비트스트림(312)에 존재하지 않는 것을 신호화한다. 이 경우에, 예측 단위(PU) 구문 구조가 포함되며, 코딩 단위(CU)에 대한 모션 벡터가 유도되는 인접한 예측 단위(PU)를 상세화하기 위해, 하나의 구문 요소가 포함되게 할 수 있다. 스킵 플래그(906)가 코딩 단위(CU)를 스킵핑을 이용하는 것을 나타낼 때, 추가적 구문 요소들이 코딩 단위(CU) 구문 구조에 의해 포함되지 않는다. 이에 따라, 스킵 플래그(906)는 인코딩된 비트스트림(312) 내의 코딩 단위(CU)들을 표현하는 효율적인 수단을 제공한다. 스킵 플래그(906)는 잔차가 요구되지 않는 경우에(즉, 인터-예측된 레퍼런스 블록이 프레임 데이터(310)의 대응하는 부분에 매우 근접하거나 동일한 경우에) 사용 가능하다. 코딩 단위(CU)가 스킵되지 않을 때, 추가적 구문 요소들은 코딩 단위(CU)의 구성을 더 상세화하기 위해 코딩 단위(CU) 구문 구조(902)에 의해 도입된다.
예측 모드 플래그(908)(도 9의 'PMF' 또는 'pred_mode_flag')는 코딩 단위(CU)에 대한 인트라-예측 또는 인터-예측 중 어느 하나의 사용을 신호화하는데 사용된다. 인터-예측이 이용 가능하지 않은 슬라이스들 내의 코딩 단위(CU)들에 대해, 예측 모드 플래그(908)는 신호화되지 않는다. 예측 모드 플래그(908)가 코딩 단위(CU)가 인트라-예측을 이용하도록 구성되고 인트라 블록 카피 인에이블된 플래그가 참인 것을 나타내는 경우, 인트라 블록 카피 플래그(910)(또는 'intra_bc_flag')는 인코딩된 비트스트림(312)에 존재한다.
인트라 블록 카피 플래그(910)는 코딩 단위(CU)에 대한 인트라 블록 카피 모드의 사용을 신호화한다. 인트라 블록 카피 플래그(910)는 현재 샘플들이 현재 프레임의 이전에 디코딩된 샘플들에 기초한다는 것을 나타내기 위해 이용된다.
인트라 블록 카피 인에이블된 플래그는 하이 레벨의 구문으로서 인코딩된다. 파티션 모드(912) 구문 요소는, 코딩 단위(CU)가 인트라 블록 카피 모드를 이용하지 않는 경우 그리고 예측 모드 플래그가 코딩 단위(CU)에 대한 인터-예측의 사용을 나타내는 경우 또는 코딩 단위(CU) 사이즈가 최소 코딩 단위(SCU)과 동일한 경우 중 어느 한 경우(또는 둘 다 가능한 경우)에 인코딩된 비트스트림(312)에 존재한다. 파티션 모드(912)는 하나 이상의 예측 단위(PU)들로 코딩 단위(CU)의 분할을 나타낸다. 다수의 예측 단위(PU)들이 코딩 단위(CU)에 포함되는 경우에 파티션 모드(912)는 또한 코딩 단위(CU) 내의 예측 단위(PU)들의 기하학적 배열을 나타낸다. 예를 들어, 코딩 단위(CU)는 파티션 모드(912)에 의해 지정되는 코딩 단위(CU)의 수평 분할(예를 들어, 'PART 2NxN') 또는 수직 분할(예를 들어, 'PART Nx2N')에 의해, 2개의 직사각형 예측 단위(PU)들을 포함할 수 있다. 단일 예측 단위(PU)가 전체 코딩 단위(CU)를 점유하면, 파티션 모드는 'PART 2Nx2N'이다. 인트라 블록 카피 모드는 전체 코딩 단위(CU)에 적용되고 그러므로 파티션 모드는 신호화되지 않고 'PART 2Nx2N'로 암시된다. 인트라 블록 카피 모드가 사용 중이면, 블록 벡터는 블록 벡터(914)로서 인코딩되는 인코딩된 비트스트림(312)에 존재한다.
블록 벡터(914)는 코딩 단위(CU)와 관련하여 레퍼런스 블록의 위치를 상세화한다. 대안적으로, 블록 벡터(914)는 코딩 단위(CU)가 포함되는 코딩 트리 블록(CTB)과 같은, 일부 다른 엔티티와 관련하여 레퍼런스 블록의 위치를 상세화할 수 있다. 블록 벡터(914)는 수평 및 수직 오프셋을 포함하고, 이미 존재하는 구문 구조를 재사용할 수 있다. 예를 들어, '모션 벡터 차이' 구문 구조는 인코딩된 비트스트림(312) 내의 블록 벡터의 수평 및 수직 오프셋들을 인코딩하는데 사용될 수 있다.
루트 코드화 블록 플래그(916)(또는 'rqt_root_cbf')는 코딩 단위(CU) 내의 잔차 데이터의 존재를 신호화한다. 플래그(916)가 0의 값을 갖는 경우, 잔차 데이터는 코딩 단위(CU)에 존재하지 않는다. 플래그(916)가 1의 값을 갖는 경우, 코딩 단위(CU) 내에 적어도 하나의 중요한 잔차 계수가 있고 따라서 잔차 쿼드-트리(RQT)는 코딩 단위(CU) 내에 존재한다. 그와 같은 경우들에서, 변환 트리(918) 구문 구조는 인코딩된 비트스트림(312) 내의 잔차 쿼드-트리(RQT)의 최상위 계층 레벨을 인코딩한다. 변환 트리 구문 구조들과 변환 단위 구문 구조들의 추가적 인스턴스들은 코딩 단위(CU)의 잔차 쿼드-트리 계층 구성에 따라, 변환 트리(918) 구문 구조 내에 존재한다.
인트라 블록 카피 모드를 이용하여 코딩 단위(CU)에 대한 코딩 단위(CU) 구문 구조(예를 들어, 902)를 인코딩하는 방법(1000)이 지금 설명될 것이다. 방법(1000)은 비디오 인코더(114)를 구현시키는 하나 이상의 소프트웨어 코드 모듈들로서 구현될 수 있고, 그것은 하드 디스크 드라이브(210)에 상주하고 프로세서(205)에 의해 그들의 실행으로 제어된다. 방법(1000)은 인코딩된 비트스트림(312)으로 도 9의 코딩 단위(CU) 구문 구조(900)를 인코딩하기 위해 비디오 인코더(114)에 의해 이용될 수 있다.
방법(1000)은 블록 탐색 단계(1002)에서 시작하며, 여기서 프로세서(205)는 현재 전류 및/또는 이전 코딩 트리 블록(CTB) 내에서 레퍼런스 블록을 탐색하기 위해 이용된다. 하나 이상의 블록 벡터들은 단계(1002)에서 테스트되고 코딩 트리 블록(CTB)과 재구성된 샘플 데이터 간의 정합(match)은 왜곡을 측정함으로써 측정된다. 또한 단계(1002)에서, 인코딩된 비트스트림(312)에서 블록 벡터를 코딩하는 비용은 인코딩된 비트스트림(312)의 비트 레이트에 기초하여 측정된다. 테스트된 블록 벡터들 중에서, 비디오 인코더(114)에 의한 블록 벡터는 결정된 비트 레이트와 왜곡에 기초하여 비디오 인코더(114)에 의한 사용을 위해 선택된다. 선택된 블록 벡터는 메모리(206)에 저장될 수 있다. 상술한 바와 같이, 임의의 적절한 탐색 알고리즘은 단계(1002)에서 블록 벡터를 선택하기 위해 이용될 수 있다. 모든 가능한 블록 벡터들의 전체 탐색이 수행될 수 있다. 그러나, 일반적으로 전체 탐색을 수행하는 복잡도는 예를 들어, 비디오 인코더(114)의 실시간 구현들을 위해 받아들일 수 없다. 다른 탐색 방법들은 현재 코딩 단위(CU)에 수평이거나 수직인(또는 거의 수평 및 거의 수직인) 레퍼런스 블록들을 탐색하는 것과 같이, 이용될 수 있다.
코딩 단위 트랜스퀀트 바이패스 플래그 인코딩 단계(1004)에서, 엔트로피 인코더(320)는, 프로세서(205)의 실행 하에서, 메모리(206)에 저장될 수 있는 인코딩된 비트스트림(312)으로 코딩 단위 트랜스퀀트 바이패스 플래그(예를 들어, 904)를 인코딩한다. 트랜스퀀트 바이패스 플래그는 코딩 단위(CU)의 무손실 코딩이 수행되고 있을 때 1의 값을 갖고 코딩 단위(CU)의 손실 코딩이 수행되고 있을 때 0의 값을 갖는다.
그리고 나서, 코딩 단위 스킵 플래그 인코딩 단계(1006)에서, 엔트로피 인코더(320)는, 프로세서(205)의 실행 하에서, 인코딩된 비트스트림(312)으로 스킵 플래그(예를 들어, 906)를 인코딩한다. 스킵 플래그는 코딩 단위(CU)에 대한 모션 벡터 차이와 잔차의 코딩이 스킵되는 경우를 신호화한다. 코딩 단위(CU)에 대한 모션 벡터 차이와 잔차의 코딩이 스킵되면, 코딩 단위(CU)에 대한 모션 벡터는 이전 모션 벡터들로부터(예를 들어, 현재 코딩 단위(CU)에 인접한 블록들로부터) 유도된다. 또한, 잔차는 스킵된 코딩 단위(CU)들에 대한 인코딩된 비트스트림에 존재하지 않는다.
pred_mode_flag 인코딩 단계(1008)에서, 엔트로피 인코더(320)는, 프로세서(205)의 실행 하에서, 코딩 단위(CU)에 대한 예측 모드 플래그(즉, pred_mode_flag)로 예측 모드(예를 들어, 908)를 인코딩하고 예측 모드 플래그를 메모리(206)에 저장한다. 일반적으로, pred_mode_flag는 코딩 단위(CU)에 대한 인트라-예측 모드(즉, 'MODE_INTRA')와 인터-예측 모드(즉, 'MODE_INTER') 중 하나를 나타낸다. 인트라 블록 카피 모드가 사용 중일 때, 코딩 단위(CU)의 예측 모드가 'MODE_INTRABC'일지라도, pred_mode_flag는 'MODE_INTRA'로 설정될 수 있다. 그리고 나서 예측 모드 테스트 단계(1009)에서, 프로세서(205)는 코딩 단위(CU)에 대한 예측 모드를 테스트한다. 예측 모드가 인터-예측이면, 제어는 mvd_coding 인코딩 단계(1012)에 전해진다. 이 경우에, intra_bc_flag는 인코딩된 비트스트림(312)에서 인코딩되지 않는데, 이는 개선된 코딩 효율을 야기한다. 그렇지 않으면, 제어는 intra_bc_flag 인코딩 단계(1010)에 전해진다. intra_bc_flag 인코딩 단계(1010)에서, 엔트로피 인코더(320)는, 프로세서(205)의 실행 하에서, 인코딩된 비트스트림(312)으로 인트라 블록 카피 플래그(즉, intra_bc_flag)(예를 들어, 910)를 인코딩한다.
mvd_coding 인코딩 단계(1012)에서, 엔트로피 인코더(320)는, 프로세서(205)의 실행 하에서, 또한 모션 벡터 차이들을 코딩하는데 사용되는 모션 벡터 차이(즉, 'mvd_coding') 구문 구조를 이용하여 인코딩된 비트스트림(312)으로 블록 벡터를 인코딩한다. 그리고 나서, root cbf 인코딩 단계(1014)에서, 엔트로피 인코더(320)는, 프로세서(205)의 실행 하에서, 루트 코드화 블록 플래그(즉, root_cbf flag)를 인코딩된 비트스트림(312)으로 인코딩한다. root_cbf flag는 코딩 단위(CU)의 잔차 쿼드-트리(RQT)에서 적어도 하나의 변환(즉, 적어도 하나의 중요한 잔차 계수를 갖는)의 존재를 신호화한다.
그리고 나서, 변환 트리 인코딩 단계(1016)에서, 엔트로피 인코더(320)는 프로세서(205)의 실행 하에서, 루트 코드화 블록 플래그에 따라 코딩 단위(CU)에 대한 변환 트리(즉, 잔차 쿼드-트리(RQT))를 인코딩한다. 단계(1016)는 루트 코드화 블록 플래그(즉, root_cbf flag)가 잔차 쿼드-트리(RQT)에서 적어도 하나의 변환의 존재를 나타낸 경우에 수행된다.
인트라 블록 카피 단계(1018)에서, 레퍼런스 블록은 단계(1002)에서 선택된 블록 벡터를 이용하여 생성된다. 레퍼런스 블록은 샘플들의 어레이를 카피함으로써 생성된다. 샘플들의 어레이는 코딩 단위(CU) 사이즈와 동일 사이즈로 되어 있다. 레퍼런스 샘플 어레이의 위치는 현재 코딩 단위(CU)와 관련하여, 블록 벡터에 따라 오프셋된다. 레퍼런스 샘플들은 인-루프 필터링 전에 획득되고, 따라서 샘플(370)들로부터 획득된다. 단계(1018)에서 생성된 레퍼런스 블록은 프로세서(205)에 의해 메모리(206)에 저장될 수 있다.
방법(1000)은 재구성 단계(1020)에서 종결되며, 여기서 합산 모듈(342)은 재구성된 블록(즉, 샘플(370)들의 일부로서)을 결정하기 위해 잔차에 단계(1018)에 생성된 레퍼런스 블록을 추가한다. 레퍼런스 블록은 현재 코딩 단위(CU)에 사용하는 인트라 블록 카피 모드로서, 프로세서(205)의 실행 하에서, 멀티플렉서 모듈(340)에 의해 선택된다.
도 11은 인코딩된 비트스트림(312)으로부터 도 9의 코딩 단위(CU) 구문 구조(902)를 디코딩하는 방법(1100)을 도시하는 개략적 흐름도이다. 방법(1000)은 비디오 디코더(134)를 구현시키는 하나 이상의 소프트웨어 코드 모듈들로서 구현될 수 있고, 그것은 하드 디스크 드라이브(210)에 상주하고, 프로세서(205)에 의해 그들의 실행으로 제어된다. 방법(1100)은 예를 들어, 비디오 디코더(134)가 코딩 단위(CU)와 관련된 구문 요소들을 파싱할 때 비디오 디코더(134)에 의해 실행될 수 있다.
방법(1100)은 구문 요소를 디코딩하는 것으로부터 이전에 유도되었을 수 있는 값들을 갖는 변수들을 테스트한다. 구문 요소가 디코딩되지 않은 경우에, 변수들 중 하나는 일반적으로 '디스에이블된' 상태를 나타내는 디폴트 값을 갖는다. 방법(1100)은 트랜스퀀트 바이패스 인에이블된 테스트 단계(1102)에 시작하며, 여기서 프로세서(205)는 이전에 디코딩된 플래그 값(예를 들어, 'transquant_bypass_enabled_flag')를 체크함으로써, 트랜스퀀트 바이패스 모드가 코딩 단위(CU)에 이용 가능한지를 테스트하는데 사용된다. 트랜스퀀트 바이패스 모드가 이용 가능하면, 제어는 transquant_bypass_flag(예를 들어, 'cu_transquant_bypass_flag') 디코딩 단계(1104)에 전해진다. 그렇지 않으면, 제어는 슬라이스 타입 테스트 단계(1106)에 전해지고 트랜스퀀트 바이패스 모드는 이용되지 않는 것으로 암시된다.
transquant_bypass_flag 디코딩 단계(1104)에서, 엔트로피 디코더 모듈(420)은, 프로세서(205)의 실행 하에서, 인코딩된 비트스트림(312)으로부터 플래그(즉, 'cu_transquant_bypass_flag')를 디코딩한다. cu_transquant_bypass_flag는 코딩 단위(CU)가 트랜스퀀트 바이패스 모드를 이용하는 경우를 나타낸다. 이에 따라, cu_transquant_bypass_flag는 프레임 데이터(310)의 일부가 손실이 없게 표현되도록 코딩 단위(CU)와 나란히 놓이게 한다.
슬라이스 타입 테스트 단계(1106)에서, 프로세서(205)는 코딩 단위(CU)가 상주하는 슬라이스가 인트라-예측만(즉, 'slice_type == I')을 지원하거나 또는 인트라-예측과 인터-예측(즉, 'slice_type!= I') 둘 다를 지원하는지를 결정하는데 사용된다. 인트라-예측이 단지 이용 가능한 예측 메커니즘이면, 제어는 cu_skip_flag 테스트 단계(1110)에 전해진다. 그렇지 않으면, 제어는 cu_skip_flag 디코딩 단계(1108)에 전해진다.
cu_skip_flag 디코딩 단계(1108)에서, 엔트로피 디코더 모듈(420)은, 프로세서(205)의 실행 하에서, 인코딩된 비트스트림(312)으로부터 스킵 플래그('cu_skip_flag')를 디코딩한다. 스킵 플래그는 코딩 단위(CU)가 '스킵 모드'를 이용하여 코딩되는 경우를 나타낸다. '스킵 모드'에서, 모션 벡터 차이 또는 잔차 정보는 인코딩된 비트스트림(312)에 존재하지 않는다.
그리고 나서 cu_skip_flag 테스트 단계(1110)에서, 프로세서(205)는 스킵 플래그, cu_skip_flag의 값을 테스트하는데 사용된다. 스킵 플래그가 참이면, 제어는 예측 단위 단계(1112)에 전해진다. 그렇지 않으면, 제어는 슬라이스 형식 테스트 단계(1114)에 전해진다.
예측 단위 단계(1112)에서, 코딩 단위(CU)는 '스킵 모드'를 이용하도록 프로세서(205)에 의해 구성된다. 스킵 모드에서, 모션 벡터 차이와 잔차 정보는 인코딩된 비트스트림(312)으로부터 디코딩되지 않는다. 모션 벡터는 하나 이상의 인접한 블록들의 모션 벡터들로부터 유도된다. 모션 벡터로부터, 레퍼런스 샘플들의 블록은 모션 보상 모듈(434)에 의해 생성된다. 이러한 코딩 단위(CU)에 대한 잔차 정보가 있지 않기 때문에, 역양자화기 모듈(421)과 역변환 모듈(422)은 비활성적이다. 레퍼런스 샘플들은 디블로커 모듈(deblocker module)(430)에 의해 디블로킹되고 결과 샘플들은 프레임 버퍼 모듈(432)에 저장된다. 슬라이스 타입 테스트 단계(1114)에서, 프로세서(205)는 코딩 단위(CU)가 상주하는 슬라이스가 인트라-예측만(즉, 'slice_type == I')을 지원하거나 또는 인트라-예측과 인터-예측(즉, 'slice_type!= I') 둘 다를 지원하는지를 결정하는데 사용된다. 인트라-예측이 단지 이용 가능한 예측 메커니즘이면, 제어는 예측 모드 테스트 단계(1117)에 전달된다. 그렇지 않으면, 제어는 예측 모드 플래그 디코딩 단계(1116)에 전해진다.
예측 모드 플래그 단계(1116)에서, 엔트로피 디코더(420)는, 프로세서(205)의 실행 하에서, 코딩 단위(CU)에 대한 예측 모드를 결정하는데 사용하기 위해 인코딩된 비트스트림(312)으로부터 예측 모드 플래그를 디코딩한다. 예측 모드 플래그는 코딩 단위(CU)가 인트라-예측(즉, 'MODE_INTRA') 또는 인터-예측(즉, 'MODE_INTER')을 이용하는 경우를 나타낸다. 예측 모드 테스트 단계(1117)에서, 프로세서(205)는 코딩 단위(CU)의 예측 모드가 인트라-예측(즉, 'MODE_INTRA')인지를 결정하는데 사용된다. 코딩 단위(CU)의 예측 모드가 인트라-예측(즉, 'MODE_INTRA')이면, 제어는 intra_bc_enabled_flag 테스트 단계(1118)에 전해진다. 그렇지 않으면, 제어는 intra_bc_flag 테스트 단계(1122)에 전해진다.
intra_bc_enabled_flag 테스트 단계(1118)에서, 프로세서(205)는 인트라 블록 카피 모드가 플래그 값(예를 들어, 시퀀스 파라미터 세트로부터의 'intra_block_copy_enabled_flag')을 체크함으로써 코딩 단위(CU)에 사용하기 위해 이용 가능한 지를 결정하는데 사용된다. 단계(1118)에서 체크된 플래그 값은 '하이 레벨의 구문'의 일부로서 엔트로피 디코더 모듈(420)에 의해 인코딩된 비트스트림(312)으로부터 이전에 디코딩되었다. 인트라 블록 카피 모드가 이용 가능하면, 제어는 intra_bc_flag 디코딩 단계(1120)에 전해진다. 그렇지 않으면 제어는 intra_bc_flag 테스트 단계(1122)에 전해진다.
그리고 나서 intra_bc_flag 디코딩 단계(1120)에서, 엔트로피 디코더(420)는, 프로세서(205)의 실행 하에서, 코딩 단위(CU)에 대한 인트라 블록 카피 모드의 사용을 신호화한 인코딩된 비트스트림(312)으로부터 플래그(예를 들어, 'intra_bc_flag')를 디코딩하기 위해 이용된다. 인트라 블록 카피 플래그(즉, 'intra_bc_flag')는 결정된 예측 모드가 인트라-예측인 경우 인코딩된 비트스트림(312)으로부터 디코딩된다. intra_bc_flag 디코딩 단계(1120)를 수행할 때 엔트로피 디코더(420)의 작동은 도 12 및 13과 관련하여 아래에서 더 설명될 것이다.
intra_bc_flag 테스트 단계(1122)에서, 프로세서(205)는 intra_bc_flag의 값을 테스트하는데 사용된다. intra_bc_flag가 참으로 설정되면, 제어는 파티션 모드 코드화 테스트 단계(1124)에 전해진다. 그렇지 않으면, 제어는 cu_type 테스트 단계(1128)에 전해진다.
그리고 나서 파티션 모드 코드화 테스트 단계(1124)에서, 'part_mode' 구문 요소가 인코딩된 비트스트림(312)에 존재하는 상태들은 프로세서(205)의 실행 하에 테스트된다. 코딩 단위(CU) 예측 모드가 인트라-예측이 아닌(즉, mode_intra이 아닌) 경우 또는 코딩 단위(CU) 사이즈가 최소 코딩 단위(SCU) 사이즈와 동일한 경우, 제어는 part_mode 단계(1126)에 전해진다. 그렇지 않으면 제어는 cu_type 테스트 단계(1128)에 전해진다.
단계(1126)가 스킵되면, 'part_mode'는 인터-예측을 이용하여 코딩 단위(CU)들에 대해 항상 코딩된다. 인트라-예측을 이용하는 코딩 단위(CU)들에 대해, 코딩 단위(CU) 사이즈가 최소 코딩 단위(SCU) 사이즈보다 크면, 파티션 모드는 'PART 2Nx2N'이 되도록 추론된다(즉, 하나의 예측 단위(PU)는 전체 코딩 단위(CU)를 점유한다). 코딩 단위(CU) 사이즈가 최소 코딩 단위(SCU) 사이즈와 동일하면, 파티션 모드는 인코딩된 비트스트림(312)으로부터 디코딩되고, 'PART 2Nx2N' 또는 'PART_NxN' 사이에서 어느 하나를 선택한다. 'PART_NxN' 모드는 코딩 단위(CU)를 4개의 사각형 비중첩 예측 단위(PU)들로 나뉜다.
디코드 파티션 모드 단계(1126)에서, 엔트로피 디코더(420)는, 프로세서(205)의 실행 하에서, 인코딩된 비트스트림(312)으로부터 part_mode 구문 요소를 디코딩한다. 그 단계(1122)로 인해, 인트라 블록 카피 모드가 사용 중일 때 part_mode가 인코딩된 비트스트림(312)으로부터 디코딩되지 않는다는 것을 주목해야 한다. 그와 같은 경우들에서, 코딩 단위(CU)의 파티션 모드는 'PART 2Nx2N'이 되도록 추론될 수 있다.
그리고 나서 cu_type 테스트 단계(1128)에서, 코딩 단위(CU)의 예측 모드는 코딩 단위 타입 플래그, cu_type를 테스트함으로써 프로세서(205)의 실행 하에 테스트된다. 코딩 단위 타입 플래그, cu_type가 예측 모드가 인트라-예측인 것을 나타내면(즉, 'CuPredMode == MODE_INTRA'), 제어는 intra_bc_flag_test 단계(1030)에 전해진다. 그렇지 않으면, 제어는 intra_pred mode 단계(1034)에 전해진다.
intra_bc_flag 테스트 단계(1130)에서, 프로세서(205)는 인트라 블록 카피 특징이 코딩 단위(CU)에 의해 이용되는 경우를 테스트하는데 사용된다. 인트라 블록 카피 특징이 코딩 단위(CU)에 의해 이용되면, 제어는 디코드 블록 벡터 단계(1132)에 전해진다. 그렇지 않으면 제어는 intra_pred mode 단계(1134)에 전해진다.
그리고 나서 디코드 블록 벡터 단계(1132)에서, 엔트로피 디코더(420)는, 프로세서(205)의 실행 하에서, 인코딩된 비트스트림(312)으로부터 인트라 카피 모드에 대한 블록 벡터를 디코딩하기 위해 이용된다. 블록 벡터는, 달리 모션 벡터 차이들에 사용되는 'mvd_coding' 구문 구조와 같은, 기존 구문 구조를 이용하여 인코딩된 비트스트림(312)에서 일반적 인코딩된다. 그 단계(1132) 후에, 제어는 디코드 루트 코드화 블록 플래그 단계(1036)에 전해진다.
intra_pred mode 단계(1134)에서, 엔트로피 디코더(420)는, 프로세서(205)의 실행 하에서, 인코딩된 비트스트림(312)으로부터 코딩 단위(CU) 내의 각각의 예측 단위(PU)에 대한 인트라-예측 모드를 디코딩한다. 인트라-예측 모드는 35개의 가능한 모드들 중 어느 것이 코딩 단위(CU)의 각각의 예측 단위(PU)에서 인트라-예측을 수행하기 위해 이용되는지를 상세화한다.
그리고 나서 루트 코드화 블록 플래그 디코딩 단계(1136)에서, 엔트로피 디코더(420)는, 프로세서(205)의 실행 하에서, 인코딩된 비트스트림(312)으로부터 루트 코드화 블록 플래그, rqt_root_cbf를 디코딩한다. 루트 코드화 블록 플래그, rqt_root_cbf는 코딩 단위(CU)에 대한 임의의 잔차 정보가 있는 경우를 상세화한다(즉, 적어도 하나의 중요한 계수는 코딩 단위(CU) 내의 변환 단위(TU)들 중 임의의 것에 있다). 코딩 단위(CU)와 관련된 잔차 정보가 있는 경우, 디코드 변환 트리 단계(1138)에서, 엔트로피 디코더(420)는, 프로세서(205)의 실행 하에서, 인코딩된 비트스트림(312)으로부터 변환 트리(또는 '잔차 쿼드-트리')를 디코딩한다. 변환 트리는 각각의 변환 단위(TU)에 대한 잔차 쿼드-트리와 잔차 계수의 계층구조를 나타내기 위한 시그널링을 포함한다.
인트라 블록 카피 단계(1140)에서, 인트라 블록 카피 모듈(436)은, 프로세서(205)의 실행 하에서, 현재 및/또는 이전 코딩 트리 블록(CTB) 내에 위치한 샘플 값들(또는 샘플들)의 블록(또는 어레이)를 카피함으로써 레퍼런스 블록을 생성한다. 따라서, 샘플 값들은 이전에 디코딩된 샘플들로부터 레퍼런스 블록에 대해 결정된다. 레퍼런스 블록의 위치는 현재 코딩 단위(CU)의 좌표에 블록 벡터를 가산함으로써 결정된다. 인트라 블록 카피 모듈(436)은 그러므로 단계(1116)에서 디코딩된 인트라 블록 카피 플래그에 기초하여 인코딩된 비트스트림(312)으로부터 레퍼런스 블록에 대한 샘플 값들을 디코딩하기 위해 이용된다. 단계(1140)에서 샘플 값들의 블록의 카피는 인트라 블록 카피로서 지칭될 수 있다.
그리고 나서 재구성 단계(1142)에서, 예측 단위(PU)(466)(즉, 레퍼런스 블록)는, 합계(458)(즉, 재구성된 샘플들)를 생성하기 위해 합산 모듈(424)에서 잔차 샘플 어레이(456)에 추가된다. 방법(1100)은 그리고 나서 다음과 같은 단계(1142)를 종결시킨다.
도 8a와 일치하는 방법(1100)의 한가지 배열에서, 인트라 블록 카피 단계(1140)는 '디폴트 값'이 이용할 수 없는 인접한 코딩 트리 블록(CTB)에 대해 중첩되는 레퍼런스 샘플들에 사용되도록 수정된다. 이러한 배열은 도 17c와 17d와 관련하여 아래 더욱 상세히 설명된다.
도 8b와 일치하는 방법(1100)의 한가지 배열에서, 방법(1100)은 디코딩된 블록 벡터(예를 들어, 824)가 임의의 이용할 수 없는 샘플들(예를 들어, 830)이 레퍼런스 샘플 블록(예를 들어, 826)에 포함되는 것을 방지하기 위해 클리핑되도록 (예를 들어, 디코드 블록 벡터 단계(1132)에서) 수정된다.
코딩 단위(CU)에 대한 인트라 블록 카피 플래그(예를 들어, 910)에 대한 컨텍스트 선택이 이제 도 12와 관련하여 설명될 것이다. 아래 설명된 것처럼, 비디오 디코더(114)는 인접한 블록들에 대한 인트라 블록 카피 플래그의 값들과 상관없이 인트라 블록 카피 플래그에 대한 컨텍스트를 선택하도록 구성될 수 있다. 도 12의 예에서, 프레임부(1200)는 코딩 트리 블록(CTB)(1202 및 1204)과 같은, 코딩 트리 블록(CTB)들을 포함한다. 프레임부(1200) 내의 코딩 트리 블록(CTB)들은 래스터 순서로 스캐닝된다. 각각의 코딩 트리 블록(CTB)(1202 및 1204) 내의 코딩 단위(CU)들은 도 6a에 도시된 바와 같이, z-순서로 스캐닝된다. 코딩 단위(CU)(1210)은 인코딩된 비트스트림(312) 내의 intra_bc_flag에 의해 신호화될 때 인트라 블록 카피 모드를 이용한다.
intra_bc_flag는 컨텍스트 적응 2진 산술 코딩을 이용하여 코딩되는데, 컨텍스트는 3개의 가능한 컨텍스트들 중 하나로부터 선택된다. 인접한 블록들의 intra_bc_flag 값들은 어느 컨텍스트를 이용하는지를 결정하는데 사용된다. 현재 블록의 좌측(예를 들어, 1214)에 그리고 상부(예를 들어, 1212)에 인접하는 블록들이 사용되는데, 이러한 블록들은 이전에 디코딩되고 따라서 intra_bc_flag 값들은 비디오 디코더(134)에 이용 가능하다. 인접부 블록은 이용 가능하지 않으면(예를 들어, 인접부 블록이 상이한 슬라이스 또는 타일에 있거나, 현재 블록이 프레임의 에지에 있으면), 컨텍스트 선택의 목적을 위한, 인접부 블록 intra_bc_flag 값은, 0이도록 설정된다. 컨텍스트 인덱스는 0 내지 2의 값을 가지고 있고, 우측 intra_bc_flag 값에 좌측 intra_bc_flag 값을 가산함으로써 결정된다. 가산의 목적을 위해, '인에이블', '참' 또는 '세트'와 같은 intra_bc_flag 값들은 1로서 처리되고 '디스에이블', '거짓' 또는 '클리어'와 같은 intra_bc_flag 값들은 0으로 처리된다. 코딩 트리 블록(CTB)이 64x64의 사이즈를 가지고 있고 최소 코딩 단위(SCU) 사이즈가 8x8 일 때, intra_bc_flag들의 8x8 어레이는 코딩 트리 블록(CTB) 내에 존재한다. intra_bc_flag들의 8x8 어레이의 저장소는 intra_bc_flag 컨텍스트 선택의 종속성들을 충족시키기 위해 필요하다. 코딩 트리 블록(CTB)의 좌측 에지를 따라, 이전 코딩 트리 블록(CTB)의 우측 에지를 따르는 8개의 intra_bc_flag가 요구될 수 있다. 추가적으로, 코딩 트리 블록(CTB)들의 스캐닝이 래스터-스캔 방식으로 발생하면, 전체 프레임의 폭의 행을 따라 8x8 사이즈의 코딩 단위(CU)들에 충분한 intra_bc_flag들의 어레이가 '상부(above)' intra_bc_flag에 대한 의존성을 충족시키기 위해 필요하다. 예를 들어, 블록(1212)은 코딩 트리 블록(CTB)들의 이전 행에 위치하고 따라서 저장소는 블록(1212)에 해당되는 intra_bc_flag에 요구된다. 저장소는 코딩 트리 블록(CTB)들의 행을 따라 모든 가능한 블록 위치들에 대해 제공된다. 대조적으로, 블록(1220)은 코딩 트리 블록(CTB)의 상단 및 따라서 인접한 블록들(즉, 1222 및 1224)의 intra_bc_flag 값들을 따라 위치하지 않는다.
HD 이미지(즉, 1920x1080 해상도)를 위해 intra_bc_flag들을 저장하기 위한 필요한 버퍼 사이즈는 240개(240) 플래그들이다. HD 이상의 이미지 해상도들에 대해, 여러 변형들이 존재하고, 일반적으로 "4K2K"로 지칭된다. 하나의 변형은 3840x2160의 해상도를 가진 "울트라 HD" 이다. 또 다른 변형은 4096x2160의 해상도를 가진, "디지털 시네마"이다. 4K2K 해상도들을 위한 intra_bc_flag들을 저장하기 위한 필요한 버퍼 사이즈는 최대 512개의(512) 플래그들이다. intra_bc_flag들의 버퍼는 일반적으로 코딩 단위(CU)당 1번 액세스되며, 그것은 단일 플래그의 컨텍스트 인덱스를 결정하기 위한 상대적으로 하이 메모리 대역폭을 야기한다. 비디오 인코더(114)와 비디오 디코더(134)의 하드웨어 구현들에 대해, 온-칩 정적 RAM은 intra_bc_flag들을 버퍼링시키기 위해 이용될 수 있다. 비디오 인코더(114)와 비디오 디코더(134)의 소프트웨어 구현들에 대해, intra_bc_flag들의 버퍼는 L1 캐쉬 내에 상주하여, 가치 있는 캐쉬 라인들을 소모할 수 있다.
한가지 배열에서, intra_bc_flag의 컨텍스트 선택은 intra_bc_flag를 위한 단일 컨텍스트를 이용하여 단순화될 수 있다. 그와 같은 배열들은 이전에 디코딩된 intra_bc_flag 값들을 보유하기 위한 버퍼들의 제거로 인해 더 낮은 복잡도를 가지고 있다. intra_bc_flag를 위한 단일 컨텍스트를 이용하는 추가적 장점은 컨텍스트 인덱스를 결정하기 위해 감소된 메모리 액세스와 연산들의 회피를 통하여 획득된다. 일반적으로, intra_bc_flag와 같은, 구문 요소를 코딩하기 위해 이용 가능한 컨텍스트들의 수를 감소시키는 것은 코딩 효율을 감소시킨다.
방법(1000)에 의해 생성되고 방법(1100)에 의해 디코딩 가능한 인코딩된 비트스트림(312)은 단지, 인트라-예측을 이용하기 위해 나타난 코딩 단위(CU)들에 대한 intra_bc_flag를 포함한다(즉, pred_mode는 MODE_INTRA를 나타낸다). 이에 따라, 인터-예측된 코딩 단위(CU)들에 대해서, intra_bc_flag는 인코딩된 비트스트림(312)에 존재하지 않는다. 따라서 인터-예측된 코딩 단위(CU)들에 대한 코딩 효율을 위한 개선은 pred_mode 구문 요소가 코딩 단위(CU)에 대한 인트라-예측의 그 사용을 나타낼 때 인트라 블록 카피 모드를 단지 이용 가능하게 함으로써, 달성된다.
일반적으로 인트라-예측은 인터-예측에 의해 생성된 예측보다 더 높은 왜곡을 가진 예측을 생성한다. 출력 인트라-예측에서 더 큰 양의 왜곡은 수용가능 레벨로 왜곡을 더 보정하도록 요구된 잔차 정보의 양의 증가로 이어진다(즉, 양자화 파라미터로부터 유도된 것처럼). 대량의 잔차 정보는 전형적으로 인터-예측된 프레임보다 인코딩된 비트스트림(312)의 더 큰 부분을 소모하는 인트라-예측된 프레임을 야기한다. 코딩 효율에 매우 민감한 애플리케이션들을 위해서, 인터-예측은 그러므로 가능한 한 많이 이용된다. 이에 따라, 인터-예측된 코딩 단위(CU)들에 대한 intra_bc_flag의 시그널링을 제거하는 것이 유익하다.
도 13은 도 4의 엔트로피 디코더 모듈(420)의 기능 모듈들(1302, 1304, 1306 및 1308)을 도시하는 개략적 블록도이다. 엔트로피 디코더 모듈(420)의 모듈들(1302, 1304, 1306 및 1308)은 비디오 디코더 모듈(134)을 구현하는 소프트웨어 애플리케이션 프로그램(233)의 하나 이상의 소프트웨어 코드 모듈들로서 구현될 수 있다. 엔트로피 디코더 모듈(420)은 컨텍스트 적응 2진 산술 코딩을 이용한다. 인코딩된 비트스트림(312)은 2진 산술 디코더 모듈(1302)에 제공된다. 2진 산술 디코더 모듈(1302)에는 컨텍스트 메모리(1304)로부터 컨텍스트를 제공 받는다. 컨텍스트는 디코딩된 플래그(또는 '심볼')의 유사 값과 플래그에 대한 확률 레벨을 나타낸다. 컨텍스트 인덱스 결정자(1306)에 의해 제공되는 컨텍스트 인덱스에 따라 컨텍스트가 선택된다. 컨텍스트 인덱스 결정자(1306)는 인접한 코딩 단위(CU)들로부터 intra_bc_flag의 값들을 이용하여 intra_bc_flag에 대한 컨텍스트 인덱스를 결정한다.
도 14는 코딩 단위(CU)에 대한 인트라 블록 카피 플래그를 디코딩하는 방법(1400)을 도시하는 개략적 흐름도이다. 방법(1400)은 일반적으로 엔트로피 디코더 모듈(420) 또는 엔트로피 인코더 모듈(324)에 의해 실행된다. 방법(1400)은 비디오 디코더(134) 또는 비디오 인코더(114)를 구현시키는 하나 이상의 소프트웨어 코드 모듈들로서 구현될 수 있는데, 그것은 하드 디스크 드라이브(210)에 상주하고, 프로세서(205)에 의한 그들의 실행으로 제어된다. 방법(1400)은 방법(1400)이 비디오 디코더(134)에 의해 실행되는 예에 의해서 아래에 설명된다.
방법(1400)은 상부 플래그 이용 가능 테스트 단계(1402)에서 시작하는데, 여기서 프로세서(205)는 상부 블록(즉, 현재 블록에 인접하고 상부에 있는 블록) 내의 intra_bc_flag가 이용가능한(예를 들어, 'availableA' 변수를 유도하는) 경우를 테스트하는데 사용된다. 상부 블록 내의 intra_bc_flag는 '상부 플래그'로서 지칭될 수 있다. 현재 블록이 프레임의 상단에 있다면, 상부 intra_bc_flag는 이용 가능할 수 없다. 상부 블록이 현재 블록에 대해 상이한 슬라이스 세그먼트에 있다면 상부 intra_bc_flag는 이용 가능하지 않다. 상부 블록이 현재 블록에 대해 상이한 타일에 있다면 상부 intra_bc_flag는 이용 가능하지 않다. 상기 상태들이 충족되지 않으면, 상부 블록은 이용 가능하다(즉 'availableA'은 참이다).
단계(1402)에서 상부 intra_bc_flag가 이용 가능하지 않으면(즉, 'availableA'은 거짓), 제어는 좌측 플래그 이용 가능 테스트 단계(1406)에 전해진다. 그렇지 않으면, 제어는 상부 intra_bc_flag 판독 단계(1404)에 전해진다.
상부 intra_bc_flag 판독 단계(1404)에서, 현재 코딩 단위(CU) 상부의 코딩 단위(CU)에 대한 intra_bc_flag 값(즉, 'condA')는 프로세서(205)의 실행 하에서 메모리(206) 내에 구성된 플래그 캐쉬 모듈(1308)로부터 판독된다. 현재 코딩 단위(CU)가 현재 코딩 트리 블록(CTB)의 상단을 따라 정렬되면, intra_bc_flag는 현재 코딩 트리 블록(CTB) 상부의 코딩 트리 블록(CTB)들의 행에 속하는 코딩 단위(CU)로부터 판독된다. 코딩 트리 블록(CTB)들이 래스터 순서로 처리되고(하나의 타일 내에서) 최소 코딩 단위(SCU) 사이즈가 일반적으로 8x8이기 때문에, 하나의 intra_bc_flag는 프레임 폭의 8개의(8) 샘플들 모두에 대해 플래그 캐쉬 모듈(1308)에 저장된다. "4K2K" 프레임들에 대해, 최대 512개의(512) intra_bc_flag는 상부 intra_bc_flag에 대한 의존성을 충족시키기 위해 (예를 들어, 메모리(206) 내에) 버퍼링된다. intra_bc_flag들의 버퍼는 intra_bc_flag들의 버퍼가 프레임의 전체 라인(예를 들어, 작은 코딩 단위(SCU)들의 라인 또는 샘플들의 라인)에 관계된 정보를 보유하기 때문에 '라인 버퍼'로서 지칭될 수 있다.
인트라 블록 카피 플래그들이 빈번히 액세스되기 때문에(즉, 코딩 단위(CU)당 한번), 인트라 블록 카피 플래그들은 온-칩 정적 RAM에 또는 메모리(206)의 캐시 메모리에 저장될 수 있다. 플래그 캐쉬 모듈(1308) 내의 그러한 메모리는 비싸다(예를 들면, 실리콘 영역의 관점에서 또는 메모리 대역폭의 관점에서). 현재 코딩 단위(CU)가 현재 코딩 트리 블록(CTB)의 상단을 따라 정렬되지 않을 때, intra_bc_flag는 현재 코딩 트리 블록(CTB)에 속하는 코딩 단위(CU)로부터 판독된다. 코딩 단위(CU)들은 코딩 트리 블록(CTB)의 코딩 트리 계층 구성에 따라, Z-스캔 순서로 스캐닝된다.
최소 코딩 단위(SCU) 사이즈의 전체 코딩 단위(CU)들로 이루어진 코딩 트리 블록(CTB)에 대해서, 8x7(즉, 56)개 intra_bc_flag들의 어레이는 상부 intra_bc_flag에 대한 의존성을 충족시키기 위해 플래그 캐쉬 모듈(1308) 내에 요구된다. 8의 폭은 8개의 최소 코딩 단위(SCU)들로의 64개의(64) 샘플들의 코딩 트리 블록(CTB) 폭의 분할로 인한 것이다. 7의 높이는 최소 코딩 트리 단위(SCU)들의 8개의 행들로의 64개의(64) 샘플들의 코딩 트리 블록(CTB) 높이의 분할로 인한 것이다. 8 행들 중 7개는 현재 코딩 트리 블록(CTB)에 위치하고 1개의 열은 상부 코딩 트리 블록(CTB)에 위치한다(즉, 상기에서와 같이, 개별적으로 버퍼링된다).
그리고 나서 좌측 플래그 이용 가능 테스트 단계(1406)에서, 프로세서(205)는 현재 코딩 단위(CU)에 인접하고 좌측에 있는 코딩 단위(CU)에 대한 intra_bc_flag가 이용 가능한 경우를 결정하는데 사용된다. 현재 코딩 단위(CU)에 인접하고 좌측에 있는 코딩 단위(CU)에 대한 intra_bc_flag는 '좌측 플래그'로서 지칭될 수 있다. 현재 코딩 단위(CU)가 프레임의 좌측에 정렬되면, 좌측 intra_bc_flag는 이용할 수 없는 것으로 간주된다. 좌측 코딩 단위(CU)가 현재 코딩 단위(CU)와는 다른 슬라이스에 속하면, 좌측 intra_bc_flag는 이용할 수 없는 것으로 간주된다. 좌측 코딩 단위(CU)가 현재 코딩 단위(CU)와는 다른 타일에 속하면, 좌측 intra_bc_flag는 이용할 수 없는 것으로 간주된다. 이러한 상태들이 충족되지 않으면, 좌측 intra_bc_flag는 이용 가능한 것으로 간주된다(즉 'availableL'은 거짓). 좌측 intra_bc_flag가 이용할 수 없으면, 제어는 컨텍스트 인덱스 결정 단계(1410)에 전달된다. 그렇지 않으면(즉 'availableL'은 참이면), 제어는 좌측 플래그 판독 단계(1408)에 전해진다.
좌측 플래그 판독 단계(1408)에서, 현재 코딩 단위(CU)에 인접하고 좌측에 있는 코딩 단위(CU)에 대한 intra_bc_flag 값(즉, 'condL')은 프로세서(205)의 실행 하에서 판독된다(즉, 좌측 플래그 판독). 현재 코딩 단위(CU)가 현재 코딩 트리 블록(CTB)의 좌측 에지를 따라 정렬되면, intra_bc_flag는 이전 코딩 트리 블록(CTB)의 우측 에지를 따라 (최대) 8개의 최소 코딩 단위(SCU)들에 대한 intra_bc_flag 값들을 보유하는 8개의 intra_bc_flag들의 버퍼로부터 판독된다. 현재 코딩 단위(CU)가 현재 코딩 트리 블록(CTB)의 좌측 에지를 따라 정렬되지 않으면, 플래그는 현재 코딩 트리 블록(CTB) 내의 최소 코딩 단위(SCU) 사이즈의 인접한 코딩 단위(CU)들에 대한 intra_bc_flag들의 7x8 버퍼로부터 판독된다. 7x8의 버퍼 사이즈는 64x64 코딩 트리 블록(CTB)들의 '워스트 케이스(worst case)' 내의 8x8의 64개(즉 8x8 그리드) 코딩 단위(CU)들로의 분할로부터 유래하는데, 여기서 intra_bc_flag들의 7개의 열들은 현재 코딩 트리 블록(CTB) 내로부터 참조되고 intra_bc_flag들의 1개의 열은 이전(좌측) 코딩 트리 블록(CTB)으로부터 참조된다. 상부 intra_bc_flag들에 대한 8x7 intra_bc_flag 버퍼와 좌측 intra_bc_flag들에 대한 8x7 버퍼는 대부분 중첩된다. 중첩으로 인해, 단일 63개(63) 또는 64개(64) 플래그 버퍼(즉, 8x8 플래그 버퍼와 하부-우측 플래그는 액세스되지 않고, 따라서 생략될 수 있음)는 현재 코딩 트리 블록(CTB) 내의 양쪽 상부 intra_bc_flag들과 좌측 intra_bc_flag들을 제공하기 위해 플래그 캐쉬 모듈(1308) 내에 요구된다.
그리고 나서, 컨텍스트 인덱스 결정 단계(1410)에서, 현재 코딩 트리 블록(CTB)에 대한 intra_bc_flag를 위한 컨텍스트 인덱스는 프로세서(205)의 실행 하에서 결정된다. 컨텍스트 인덱스는 0(0), 1(1) 또는 2(2) 중 하나이다. 컨텍스트 메모리(1304)가 다양한 구문 요소들에 대한 컨텍스트들을 보유하는 연속 메모리일 경우, 오프셋(여기에서 더 논의되지 않음)은 메모리(206) 내에 구성된 컨텍스트 메모리(1304) 내의 intra_bc_flag에 대한 컨텍스트들의 저장소를 지적하기 위한 컨텍스트 인덱스에 내포되어 있다. 컨텍스트 인덱스는 좌측 intra_bc_flag 값과 상부 intra_bc_flag 값의 합계이다(부울 값들은 거짓에 대해 '0'으로서 그리고 참에 대해 '1'로서 해석된다). 좌측 intra_bc_flag가 이용 가능하지 않으면, 좌측 intra_bc_flag는 합계 계산에 대해 0인 것으로 간주된다. 상부 intra_bc_flag가 이용 가능하지 않으면, 상부 intra_bc_flag는 합계 계산에 대해 0인 것으로 간주된다. 컨텍스트 인덱스는 따라서 공식(condL && availableL) + (condA && availableA)로 표현될 수 있다.
컨텍스트 판독 단계(1412)에서, 컨텍스트는 프로세서(205)의 실행 하에서, 컨텍스트 메모리 모듈(1304)로부터 판독되고, 컨텍스트는 컨텍스트 인덱스 결정 단계(1410)로부터 컨텍스트 인덱스에 의해 선택된다.
그리고 나서, 빈 디코딩 단계(1414)에서, 컨텍스트는 인코딩된 비트스트림(312)으로부터 하나의 플래그(또는 '빈')를 디코딩하는데 사용된다. 디코딩된 플래그는 현재 코딩 단위(CU)에 대한 intra_bc_flag에 대응한다.
플래그 캐쉬 내 저장 단계(1416)에서, 디코딩된 플래그는 인코딩된 비트스트림(312)으로부터 연속적 intra_bc_flag들을 디코딩할 때 장래의 레퍼런스를 위해 메모리(206)내에 구성된 플래그 캐쉬 모듈(1308)에 저장된다. 또한, 컨텍스트 업데이트 단계(1418)에서, 컨텍스트는 디코딩된 플래그 값에 따라, 프로세서(205)의 실행 하에서, 업데이트된다. 컨텍스트와 관련된 확률과 가능성 있는 빈 값(즉, 'valMPS')이 업데이트된다.
그리고 나서, 컨텍스트 기입 단계(1420)에서, 업데이트된 컨텍스트는 단계(1412)에서와 같이, 동일한 컨텍스트 인덱스를 이용하여, 컨텍스트 메모리 모듈(1304)에 다시 기입된다. 단계(1420)에 이어서, 방법(1400)이 끝을 맺는다.
상술한 바와 같이, 방법(1400)은 또한 비디오 인코더(114)에 의해 실행될 수 있으며, 여기서 단계(1414)는 빈(즉, 인코딩된 비트스트림(312)에서 현재 코딩 단위(CU)에 대한 intra_bc_flag 값)을 인코딩하도록 수정된다.
방법(1400)의 한가지 대안적인 배열에서, 상부 코딩 트리 블록(CTB) 내의 인접한 코딩 단위(CU)가 이용 가능할지라도, 현재 코딩 단위(CU)가 현재 코딩 트리 블록(CTB)의 상단에 정렬될 때, 상부 intra_bc_flag가 이용할 수 없는 것으로 간주되도록 상부 intra_bc_flag 이용 가능 테스트 단계(1402)는 수정된다. 즉, 현재 코딩 트리 블록(CTB)의 상단-좌측 루마 샘플과 관련하여 현재 루마 코딩 블록의 상단-좌측 샘플을 상세화하는 코딩 단위(CU) Y-좌표(즉, yCb)가 0일 때 'availableA' = 거짓이다. 단계(1402)가 이런 방식으로 수정되는 배열에서, 코딩 트리 블록(CTB)들 전체에 걸친 종속성의 제거는 플래그 캐쉬 모듈(1308)이 최대(512) intra_bc_flag들을 위한 버퍼링을 포함할 필요가 없게 한다. 단계(1402)가 이런 방식으로 수정되는 배열에서, 코딩 단위(CU)(1210)은 컨텍스트 인덱스 결정 단계(1410)에 대해서 블록(1214)의 intra_bc_flag 값에 의존하는 반면, 코딩 단위(CU)(1220)은 컨텍스트 인덱스 결정 단계(1410)에 대해서 블록들(1222 및 1224)의 intra_bc_flag 값들에 의존한다.
방법(1400)의 또 다른 대안적인 배열에서, 상부 intra_bc_flag 이용 가능 테스트 단계(1402)와 상부 intra_bc_flag 판독 단계(1404)는 생략된다(즉, 이용 가능한 A는 항상 거짓이다). 단계들(1402 및 1404)이 생략된 배열에서, 컨텍스트 인덱스 결정 단계(1410)는 컨텍스트 인덱스가 좌측 플래그 판독 단계(1408) 로부터 얻어진 좌측 intra_bc_flag 값에만 따라 설정되기 때문에 간단하다(또는 좌측 플래그가 이용 가능하지 않은 경우에는 0). 단계들(1402 및 1404)이 생략된 배열은, intra_bc_flag에 대해 컨텍스트 메모리 모듈(1304)에서 오직 2개의 컨텍스트들만을 요구한다. 더욱이, 단계들(1402 및 1404)이 생략된 방법(1400)의 배열은, 상기 인접부(neighbour)들에 대한 최대 512 intra_bc_flag들 또는 56(56) intra_bc_flag들을 버퍼링시키기 위한 플래그 캐쉬 모듈(1308) 내의 메모리를 요구하지 않는다.
방법(1400)의 또 하나의 대안적인 배열에서, 1402-1408 단계들은 생략된다. 1402-1408 단계들이 생략된 배열들에서(즉, availableA와 availableL은 항상 거짓), 컨텍스트 인덱스 결정 단계(1410)는 단지 단일 컨텍스트가 intra_bc_flag에 사용되기 때문에 간단하다. 컨텍스트 메모리 모듈(1304)은 따라서 단일 컨텍스트에 대응하는 구문 요소에 대한 컨텍스트 하나만을 포함한다. 1402-1408 단계들이 생략된 배열들에서, 플래그 캐쉬 모듈(1308)은 현재 코딩 단위(CU)에 대한 intra_bc_flag의 컨텍스트 인덱스를 결정하기 위해서 인접한 코딩 단위(CU)들로부터의 intra_bc_flag 값들을 참조할 필요가 없기 때문에 생략될 수 있다.
도 15a는 한가지 배열에 따라, 코딩 단위(CU)에 대한 예측 모드를 결정하는 방법(1500)을 도시하는 개략적 흐름도이다. 방법(1500)은 코딩 단위(CU) 구문 구조를 파싱하는 부분으로서 비디오 디코더(134)에 의해 실행된다. 방법(1500)은 비디오 디코더(134)를 구현시키는 하나 이상의 소프트웨어 코드 모듈들로서 구현될 수 있는데, 이들은 하드 디스크 드라이브(210)에 상주하고 프로세서(205)에 의해 그들의 실행으로 제어된다.
방법(1500)은 intra_bc_flag 디코딩 단계(1502)에서 시작하고, 여기서 인트라 블록 카피 플래그는 방법(1400)에 따라서 인코딩된 비트스트림(312)으로부터 디코딩된다. 인트라 블록 카피 플래그는 코딩 단위(CU)에 대한 예측 모드를 결정하는데 사용하기 위해 인코딩된 비트스트림(312)으로부터 디코딩된다.
그리고 나서, intra_bc_flag 테스트 단계(1504)에서, 인트라 블록 카피 플래그가 1의 값을 가지고 있다면, 코딩 단위(CU)의 예측 모드는 'MODE_INTRABC'인 것으로 알려져 있고(즉, 코딩 단위(CU)에 대한 예측 모드는 인트라 블록 카피 모드이고) 제어는 샘플 값 결정 단계(1510)에 전달된다. 샘플 값 결정 단계(1510)에서, 레퍼런스 샘플 값들(또는 샘플들)의 블록은 인트라 블록 카피 모듈(436)에서 도 11의 인트라 블록 카피 단계(1140)를 수행함으로써, 프로세서(205)의 실행 하에서, 코딩 단위(CU)에 대해 결정된다.
인트라 블록 카피 플래그가 0의 값을 가지고 있다면, 제어는 pred_mode_flag 디코딩 단계(1506)에 전달된다. pred_mode_flag 디코딩 단계(1506)는 도 11의 단계(1116)를 수행함으로써 인코딩된 비트스트림(312)으로부터 예측 모드 구문 요소를 디코딩한다.
그리고 나서, pred_mode_flag 테스트 단계(1508)에서, 코딩 단위(CU)에 대한 예측 모드가 디코딩된 예측 모드 구문 요소에 따라 결정된다. 0('0')의 pred_mode_flag 값은 'MODE_INTER'을 나타내고(즉, 코딩 단위(CU)에 대한 예측 모드는 인터-예측 모드이고) 1('1')의 pred_mode_flag 값은 'MODE_INTRA'을 나타낸다(즉, 코딩 단위(CU)에 대한 예측 모드는 인트라-예측 모드이다).
도 15b는 한가지 배열에 따라, 코딩 단위(CU)에 대한 예측 모드를 결정하는 방법(1520)을 도시하는 개략적 흐름도이다. 방법(1500)은 비디오 디코더(134)를 구현시키는 파싱의 일부로 에 의해 실행된다 코딩 단위(CU) 구문 구조. 방법(1500)은 비디오 디코더(134)를 구현시키는 하나 이상의 소프트웨어 코드 모듈들로서 구현될 수 있는데, 이들은 하드 디스크 드라이브(210)에 상주하고 프로세서(205)에 의해 그들의 실행으로 제어된다.
방법(1520)은 코딩 단위(CU)의 예측 모드를 유도하기 위한 방법(1100)의 단계들의 부집합을 포함한다.
방법(1520)은 pred_mode_flag 디코딩 단계(1522)에서 시작한다. pred_mode_flag 디코딩 단계(1522)에서, 예측 모드 구문 요소는 프로세서(205)의 실행 하에서 방법(1100)의 단계(1116)를 수행함으로써 인코딩된 비트스트림(312)으로부터 디코딩된다. 상술한 바와 같이, 단계(1116)에서, 엔트로피 디코더(420)는 코딩 단위(CU)에 대한 예측 모드를 결정하는데 사용하기 위해 인코딩된 비트스트림(312)으로부터 예측 모드 플래그를 디코딩하기 위해 이용된다.
그리고 나서, pred_mode_flag 테스트 단계(1524)에서, 코딩 단위(CU)에 대한 예측 모드는 디코딩된 예측 모드 구문 요소에 따라 결정된다. 0('0')의 pred_mode_flag 값은 'MODE_INTER'을 나타내고(즉, 코딩 단위(CU)에 대한 예측 모드는 인터-예측 모드이고), 여기서 intra_bc_flag는 인코딩된 비트스트림(312)에 존재하지 않고, 따라서 방법(1520)에 의해 디코딩되지 않는다. pred_mode_flag 값이 1('1')이면 제어는 intra_bc_flag 디코딩 단계(1526)에 전달된다.
intra_bc_flag 디코딩 단계(1526)에서, 프로세서(205)는 방법(1400)에 따라 인코딩된 비트스트림(312)으로부터 인트라 블록 카피 플래그를 디코딩하기 위해 이용된다. 상술한 바와 같이, 인트라 블록 카피 플래그는 현재 샘플들이 현재 프레임의 이전에 디코딩된 샘플들에 기초하는 것을 나타내기 위해 이용된다. 그에 따라, intra_bc_flag는 pred_mode_flag가1(1)의 값을 갖는 경우 그리고 갖는 경우에만 디코딩된다. 인트라 블록 카피 플래그가 1의 값을 가지고 있다면, 코딩 단위(CU)의 예측 모드는 'MODE_INTRABC'를 할당 받는다(즉, 코딩 단위(CU)에 대한 예측 모드는 인트라 블록 카피 모드이다). 그렇지 않으면, 코딩 단위(CU)의 예측 모드는 'MODE_INTRA'를 할당 받는다(즉, 코딩 단위(CU)에 대한 예측 모드는 인트라-예측 모드이다).
그리고 나서, intra_bc_flag 테스트 단계(1528)에서, 인트라 블록 카피 플래그가 1의 값을 가지고 있다면, 코딩 단위(CU)의 예측 모드는 'MODE_INTRABC'인 것으로 알려져 있고 제어는 샘플 값 결정 단계(1530)에 전달된다. 그렇지 않으면, 코딩 단위(CU)의 예측 모드는 'MODE_INTRA'인 것으로 알려져 있다.
샘플 값 결정 단계(1530)에서, 레퍼런스 샘플 값들(또는 샘플들)의 블록은 인트라 블록 카피 모듈(436)에서 도 11의 인트라 블록 카피 단계(1140)를 수행함으로써, 프로세서(205)의 실행 하에서, 코딩 단위(CU)에 대해 결정된다. 상술한 바와 같이, 레퍼런스 샘플들의 블록은 이전에 디코딩된 샘플들로부터 레퍼런스 블록으로부터의 샘플 값들을 결정함으로써, 디코딩된 인트라 블록 카피 플래그에 기초하여 인코딩된 비트스트림(312)으로부터 디코딩된다.
인터-예측은 'MODE_INTER'로 신호화되고 인트라-예측은 'MODE_INTRA'로 신호화된다. 인트라 블록 카피 모드는 'MODE_INTRABC'로 신호화된다. 이것은 인트라 블록 카피 모드가 인트라-예측과 유사한 의미를 가져야 한다는 것을 의미하지 않는다. 인트라 블록 카피 모드는 또한 'MODE_INTERBC'로 라벨이 붙여질 수 있다. 인트라 블록 카피 모드의 의미들은 인터-예측과 인트라-예측의 각각과의 유사성을 공유하고 그리고 여기에서 요약된다:
'블록 벡터'는 레퍼런스 블록을 선택하기 위해 공간 오프셋이 현재 블록과 관련하여 적용된다는 점에서 모션 벡터와 유사하다.
'블록 벡터'는, 일시적인 오프셋이 존재하지 않고(현재 프레임을 참조하는 것으로 인해) 따라서 벡터가 일부 이전 프레임 이후로 이동된 동일한 '오브젝트'의 부분을 참조하는 것으로서 해석되지 말아야 한다는 점에서 모션 벡터와는 다르다(모션 벡터들은 일반적으로 이런 방식으로 해석된다).
인트라-블록 카피된 코딩 단위에 대한 레퍼런스 샘플들은 인트라-예측 방법의 인접한 샘플들과 유사하게, 현재 프레임으로부터 획득된다(즉, 인트라-프레임 예측).
인트라-블록 카피된 블록은, 레퍼런스가 한정된 인트라-예측에 의해 제공된 오류 복원력 특징을 감소시키는 것과 같이, 한정된 인트라-예측이 인에이블될 때 인터-예측된 샘플들을 참조해야 한다.
인트라-블록 카피된 블록에 대한 잔차 정보는 모션-보상된(인터-예측된) 블록의 것과 더 유사하고 따라서 이산 코사인 변환(DCT)들이 일반적으로 사용을 위해 바람직하고, 반면에 인트라-예측에 대해, 이산 사인 변환(DST)이 4x4 변환 블록들에 사용된다.
상기에 설명된 의미로부터, 라벨 'MODE_INTRABC'가 다소 임의적이고, 인트라-예측의 의미가 인트라 블록 카피 모드에 균일하게 적용하는 것을 의미하도록 해석되지 말아야 한다는 것을 알 수 있다.
방법들(1500 및 1520)은 인트라-예측 경우와 인터-예측 경우에 대한 예측 모드를 상세화하기 위한 구문 요소들의 배열에서 다르다. 일반적으로 인트라-예측을 이용하는 프레임들은 인코딩된 비트스트림(312)에 존재하는 대량의 잔차 정보를 갖는다. 따라서, 예측 모드의 시그널링의 오버헤드는 잔차 정보의 오버헤드와 비교하여 작다. 대조적으로, 일반적으로 인터-예측을 이용하는 프레임들은 인코딩된 비트스트림(312)에 존재하는 소량의 잔차 정보를 갖는다. 인코딩된 비트스트림(312)에 존재하는 소량의 잔차 정보는, 프레임 데이터(310)와 매우 근접하게 일치할 수 있는 공간 오프셋로 인해, 하나 이상의 레퍼런스 프레임들로부터 레퍼런스 블록을 선택하기 위한 모션 추정 모듈(338)의 능력으로 인한 것이다. 이에 따라, 매우 높은 압축 효율은 인터-예측된 프레임들 또는 코딩 단위(CU)들에 대해 달성될 수 있다. 그와 같은 경우들에서, 코딩 단위(CU)에 대한 예측 모드의 시그널링의 오버헤드는 인코딩된 비트스트림(312)에서 코딩 단위(CU)에 대한 데이터의 더 중요한 부분이 된다. 방법(1520)은 'MODE_INTER' 경우를 신호화하도록 단일 구문 요소(즉, 'pred_mode_flag')를 요구한다. 대조적으로, 방법(1500)은 'MODE_INTER' 경우를 신호화하도록 2개의 구문 요소들(즉 'intra_bc_flag'에 'pred_mode_flag'가 이어짐)을 요구한다.
단계(1402)가 수정되고, 단계들(1402 및 1404)이 생략되거나 단계들(1402-1408)이 생략되는 위에서 설명된 방법(1400)의 대안적인 배열들은, 방법(1500)의 단계(1502) 또는 방법(1520)의 단계(1526)에서 적용될 수 있다. 방법(1400)의 대안적인 배열들이 단계(1502)에서 또는 단계(1526)에 적용된 배열들에서, 컨텍스트 메모리 모듈(1304)의 메모리 용량의 축소가 달성된다.
단계(1402)가 수정되거나 단계들(1402 및 1404)이 생략되는 방법(1400)의 배열들에 대해서, 플래그 캐쉬 모듈(1308)의 메모리 용량의 축소가 달성된다. 단계들(1402-1408)이 생략되는 방법(1400)의 배열에 대해서, 플래그 캐쉬 모듈(1308)은 비디오 디코더(134) 내의 엔트로피 디코더(420)와 비디오 인코더(114) 내의 엔트로피 인코더(324)에 부재한다.
도 16은 코딩 트리 블록(CTB) 내의 코딩 단위(CU)의 잔차 쿼드-트리(RQT)(1600)를 도시하는 개략적 블록도이다. 도 16의 예에서, 32x32 코딩 단위(CU)는 잔차 쿼드-트리(RQT)(1600)를 포함한다. 잔차 쿼드-트리(RQT)(1600)는 4개의 영역들로 세분화된다. 좌하 영역은 16x16 변환(1602)을 포함한다. 우하 영역은 4개보다 많은 영역들로 개별적으로 세분화되며, 그 중 우상 영역은 8x8 변환(1604)을 포함한다. 변환은 잔차 쿼드-트리(RQT)의 임의의 '리프 노드'(즉, 더 세분화되지 않은 임의의 영역)에 존재할 수 있다. 잔차 쿼드-트리(RQT)의 리프 노드와 같은 포인트에서의 변환의 존재는 '코드화 블록 플래그들'을 이용하여 신호화된다.
비디오 인코더(114)와 비디오 디코더(134)는 2가지 타입의 변환들, 이산 사인 변환(DST)과 이산 코사인 변환(DCT)을 지원한다. 오직 하나의 사이즈의 이산 사인 변환(DST)(즉, 4x4 이산 사인 변환(DST))은 일반적으로 비디오 인코더(114)와 비디오 디코더(134)에 의해 지원된다. 이산 코사인 변환(DCT)의 다중 사이즈들은 일반적으로 4x4, 8x8, 16x16 및 32x32 이산 코사인 변환(DCT)들과 같이, 비디오 인코더(114)와 비디오 디코더(134)에 의해 지원된다. 인터-예측된 예측 단위(PU)들을 포함하는 코딩 단위(CU)의 잔차 쿼드-트리(RQT) 내의 변환 단위(TU)들에 대해, 이산 코사인 변환(DCT)들은 모든 변환들에 사용된다. 인트라-예측된 예측 단위(PU)들을 포함하는 코딩 단위(CU)의 잔차 쿼드-트리(RQT) 내의 4x4 변환 단위(TU)들에 대해서, 4x4 변환들은 루마 및 크로마 채널들에 사용된다. 인트라-예측된 예측 단위(PU)들을 포함하는 코딩 단위(CU)의 잔차 쿼드-트리(RQT) 내의 8x8 변환 단위(TU)들에 대해서, 4x4 변환들은 크로마 채널들에 사용될 수 있다. 그와 같은 경우들에서, 4x4 변환은 이산 사인 변환(DST)이다. 다른 모든 블록 사이즈들에 대해, 그리고 인터-예측된 예측 단위(PU)들을 포함하는 코딩 단위들 내의 변환 단위(TU)들에 대해서는, 이산 코사인 변환(DCT)들이 이용된다.
이산 사인 변환(DST)은 대량의 잔차 정보(즉, 공간 도메인 표현)를 가진, 특히 경계들(예를 들어, 변환 단위(TU) 경계와 예측 단위(PU) 경계)에서의 불연속적 에지들을 가진 상황들에서 잘 수행한다(즉, 콤팩트 주파수 도메인 표현을 제공한다). 대량의 잔차 정보를 가진 상황들은 인트라-예측된 예측 단위(PU)들에 대해 전형적이다.
이산 코사인 변환(DCT)는 '평활기' 공간 잔차 데이터(즉, 공간 도메인에서 사이즈의 덜 불연속적 단계들을 가진 잔차 데이터)로 잘 수행하여 더 콤팩트한 주파수 도메인 표현을 야기한다. 그와 같은 평활기 공간 잔차 데이터는 인터-예측된 예측 단위(PU)들에 전형적이다.
잔차 쿼드-트리는 최대 '깊이'를 갖는다. 최대 깊이는 코딩 단위(CU) 내에서 가능한 최대 수의 쿼드-트리 세분화들을 상세화한다. 일반적으로, 다른 최대 수들의 세분화들이 또한 가능할지라도, 최대 수의 세분화들은 3개의('3') 계층 구성 레벨들로 제한된다. 최소 변환 사이즈에 대한 제한들은 잔차 쿼드-트리의 세분화들의 계층 구성 레벨들의 수가 최대 수에 도달하는 것을 방지할 수 있다. 예를 들어, 4x4의 최소 변환 사이즈를 갖는 16x16 코딩 단위(CU)는 단지 2배(즉, 2개의 계층 구성 레벨들)로 세분화될 수 있고, 반면에 최대 3이 지정된다(예를 들어, 하이 레벨의 구문으로). 최대 깊이는 인터-예측된 코딩 단위(CU)들 내의 그리고 인트라-예측된 코딩 단위(CU)들 내의 잔차-쿼드 트리들에 대해 개별적으로 상세화된다. 인터-예측된 코딩 단위(CU)들에 대해, 'max_transform_hierarchy_depth_inter' 구문 요소는 최대 깊이를 규정하기 위해 하이 레벨의 구문 내에(예를 들어, 시퀀스 파라미터 세트 내에) 존재한다.
인트라-예측된 코딩 단위(CU)들에 대해, 'max_transform_hierarchy_depth_intra' 구문 요소는 최대 깊이를 규정하기 위해 하이 레벨의 구문 내에(예를 들어, 시퀀스 파라미터 세트 내에) 존재한다. 인트라-예측된 코딩 단위(CU)들의 최대 깊이는 'PART_NxN' 파티션 모드가 이용될 때 1씩 증가될 수 있다. 인트라 블록 카피 모드를 이용하는 코딩 단위(CU)들에 대해, 파티션 모드는 'PART_2Nx2N'인 것으로 간주된다(즉, 하나의 예측 단위(PU)는 전체 코딩 단위를 점유한다(CU)).
방법(1520)은 intra_bc_flag 테스트 단계(1528)가 인트라 블록 카피(즉, 'MODE_INTRABC')의 사용을 나타낼 때 변환 선택의 목적을 위해 'MODE_INTER'로서 파티션 모드를 처리하도록 구성될 수 있다. 'MODE_INTER'로서 파티션 모드를 처리하는 방법(1520)의 배열들에서, 코딩 단위(CU)에 대한 잔차 쿼드-트리(RQT)의 최대 깊이는 max_transform_hierarchy_depth_inter에 의해 상세화된다. 더욱이, 파티션 모드를 'MODE_INTER'로서 처리하는 방법(1520)의 배열들에서, 이산 코사인 변환(DCT)은 인트라-블록 카피 모드에 대해 구성된 코딩 단위(CU)의 잔차 쿼드-트리(RQT)에서 모든 변환 사이즈들에 대해 사용된다.
도 17a는 인트라 블록 카피 모드를 이용하도록 구성된 코딩 단위(CU)에 대한 레퍼런스 샘플 블록을 생성하는 방법(1700)을 도시하는 개략적 흐름도이다. 방법(1700)에 따라서, 레퍼런스 블록 내의 샘플들은 HEVC(high efficiency video coding)의 '한정된 인트라-예측' 특징과 관련하여 생성된다. 방법(1700)은 인트라 블록 카피 모드를 이용하도록 구성된 코딩 단위(CU)의 레퍼런스 블록을 생성할 때 비디오 인코더(114)와 비디오 디코더(134)에 의해 실행된다. 방법(1700)은 비디오 인코더(114)와 비디오 디코더(134)를 구현시키는 하나 이상의 소프트웨어 코드 모듈들로서 수행될 수 있는데, 이들은 하드 디스크 드라이브(210)에 상주하고 프로세서(205)에 의해 그들의 실행으로 제어된다.
방법(1700)에 대한 입력들은 인-루프 필터링 이전에 현재 및 이전 코딩 트리 블록(CTB)들의 블록 벡터와 샘플들을 포함한다. 방법(1700)은 한정된 인트라-예측 테스트 단계(1702)에서 시작하며, 여기서 프로세서(205)는 한정된 인트라-예측 모드가 인에이블되는 경우를 테스트하는데 사용된다(예를 들어, '픽처 파라미터 세트'와 같은, 하이 레벨의 구문에서 'constrained_intra_pred_flag' 구문 요소의 값을 테스트함으로써). 한정된 인트라-예측 모드가 인에이블되면, 제어는 샘플 예측 모드 테스트 단계(1704)에 전해진다. 그렇지 않으면, 한정된 인트라-예측 모드는 디스에이블되고 제어는 레퍼런스 샘플 카피 단계(1708)에 전해진다.
그리고 나서, 샘플 예측 모드 테스트 단계(1704)에서, 프로세서(205)는 현재 코딩 단위(CU) 내의 샘플 위치와 관련하여 블록 벡터에 의해 참조된 현재 또는 이전 코딩 트리 블록(CTB) 내의 샘플의 예측 모드를 테스트하는데 사용된다. 샘플 위치는 코딩 단위(CU) 내의 상응하는 샘플의 위치에 블록 벡터를 가산하는 벡터에 의해 획득된다. 예측 모드가 'MODE_INTRA' 또는 'MODE_INTRABC'이면, 제어는 레퍼런스 샘플 카피 단계(1708)에 전해진다. 그렇지 않으면, (즉, 예측 모드는 'MODE_INTER'이면), 제어는 디폴트 값 할당 단계(1706)에 전해진다.
디폴트 값 할당 단계(1706)에서, 디폴트 값은 프로세서(205)의 실행 하에서, 레퍼런스 블록 내의 샘플에 할당된다. 예를 들어, 인접한 샘플이 레퍼런스에 이용 가능하지 않은 것으로 표시될 때 인트라-예측에 사용된 디폴트 값은 레퍼런스 블록 내의 샘플에 디폴트 값을 할당하는데 사용될 수 있다.
레퍼런스 샘플 카피 단계(1708)에서, 현재 프레임으로부터의 샘플은 프로세서(205)의 실행 하에서, 레퍼런스 블록에 카피된다(즉, 레퍼런스 샘플 카피가 수행된다). 예를 들어, 현재 또는 이전 코딩 트리 블록(CTB) 내에 위치한 샘플은 레퍼런스 블록에 카피될 수 있다. 카피될 샘플의 위치는 현재 코딩 단위(CU) 내의 샘플 위치와 제공된 블록 벡터의 벡터 가산에 의해 결정된다.
방법(1700)의 모든 단계들은 레퍼런스 블록의 모든 샘플들에 대하여 실행될 수 있다(즉, 레퍼런스 샘플들의 2차원적 어레이에 걸쳐 반복된다). 또한, 단계(1702)는 레퍼런스 블록에 대해 한번 수행될 수 있고 단계들(1704-1708)은 레퍼런스 블록의 모든 샘플들에 대해 수행될 수 있는데, 그 단계(1704 또는 1708)는 단계(1702)의 결과에 따라서 각각의 샘플에 대해 호출된다.
도 17b는 인트라 블록 카피 모드를 이용하도록 구성된 코딩 단위(CU)에 대한 레퍼런스 샘플 블록을 생성하는 방법(1720)을 도시하는 개략적 흐름도이다. 방법(1720)에 따라서, 레퍼런스 블록 내의 샘플들은 HEVC(high efficiency video coding)의 '한정된 인트라-예측' 특징과 관련하여 생성된다.
방법(1700)은 인트라 블록 카피 모드를 이용하도록 구성된 코딩 단위(CU)의 레퍼런스 블록을 생성할 때 비디오 인코더(114)와 비디오 디코더(134)에 의해 실행된다. 다시, 방법(1700)은 비디오 인코더(114)와 비디오 디코더(134)를 구현시키는 하나 이상의 소프트웨어 코드 모듈들로서 수행될 수 있는데, 이들은 하드 디스크 드라이브(210)에 상주하고 프로세서(205)에 의해 그들의 실행으로 제어된다.
방법(1700)에 대한 입력들은 인-루프 필터링 이전에 현재 및 이전 코딩 트리 블록(CTB)들의 블록 벡터와 샘플들을 포함한다. 방법(1720)은 도 17a의 방법(1700)과 기능적으로 동일하다. 그 차이는 방법(1720)이 한정된 인트라-예측이 인에이블될 때에도 인터-예측된 코딩 단위(CU)로부터 샘플들을 액세스할 수 있다는 것이다.
방법(1720)은 레퍼런스 샘플 블록 카피 단계(1722)에서 시작된다. 레퍼런스 샘플 블록 카피 단계(1722)에서, 전체 코딩 단위(CU)(예를 들어, 842)은 프로세서(205)의 실행 하에서 레퍼런스 샘플들(예를 들어, 846)로 채워진다(즉, 레퍼런스 샘플 블록 카피가 수행된다). 레퍼런스 샘플들(예를 들어, 846)은 인트라-예측된 코딩 단위(CU)들과 인터-예측된 코딩 단위(CU)들(예를 들어, 848) 둘 다로부터의 샘플들을 포함할 수 있다.
그리고 나서, 한정된 인트라-예측 테스트 단계(1724)에서, 프로세서(205)는 한정된 인트라-예측이 도 17a의 단계(1702)에 따라 인에이블되는 경우를 테스트하는데 사용된다. 한정된 인트라-예측이 디스에이블되면, 방법(1720)은 종결된다. 그렇지 않으면, 제어는 한정된 중첩 테스트 단계(1726)에 전해진다.
한정된 중첩 테스트 단계(1726)에서, 레퍼런스 블록의 임의의 샘플이 인터-예측된 코딩 단위(CU)와 중첩되면, 방법(1720)은 종결된다. 그렇지 않으면, 방법(1720)은 부분 덮어쓰기 단계(1728)로 진행하고, 여기서 카피된 샘플들은 레퍼런스 샘플들이 인트라-예측에 이용 가능하지 않는 것으로서 표시될 때 인트라-예측 레퍼런스 샘플들에 사용된 디폴트 값과 같은, 디폴트 값으로 대체된다. 그 단계들(1726 및 1728)은 코딩 단위 내의 각각의 샘플에 걸쳐 반복되고 개별적으로 각각의 샘플을 테스트함으로써 구현될 수 있다.
도 17c는 인트라 블록 카피 모드를 이용하도록 구성된 코딩 단위(CU)에 대한 레퍼런스 샘플 블록을 생성하는 방법(1740)을 도시하는 개략적 흐름도이다. 방법(1740)은 비디오 인코더(114)와 비디오 디코더(134)를 구현시키는 하나 이상의 소프트웨어 코드 모듈들로 수행될 수 있는데, 이들은 하드 디스크 드라이브(210)에 상주하고 프로세서(205)에 의해 그들의 실행으로 제어된다. 방법(1740)은 인트라 블록 카피 모드를 이용하도록 구성된 코딩 단위(CU)의 레퍼런스 블록을 생성할 때 수행된다. 비디오 인코더(114)와 비디오 디코더(134)의 배열들은 도 8a에 도시된 바와 같이, 상이한 슬라이스들 또는 타일들로부터 코딩 트리 블록(CTB)들을 포함하는 프레임부를 처리할 때 방법(1740)을 적용할 수 있다. 방법(1740)은 코딩 단위(CU) 내의 각각의 위치에 적용된다(예를 들어, 내포된 루프를 이용하여 모든 위치들에 걸쳐 반복됨으로써).
방법(1740)은 비디오 인코더(114)를 참조하여 예로서 설명될 것이다.
방법(1740)은 동일한 슬라이스 및 타일 테스트 단계(1742)에서 시작한다.
동일한 슬라이스 및 타일 단계(1742)에서, 프로세서(205)는 현재 코딩 트리 블록(CTB)과 이전 코딩 트리 블록(CTB)의 슬라이스 및 현재 코딩 트리 블록(CTB)과 이전 코딩 트리 블록(CTB)의 타일을 테스트하는데 사용된다. 2개의 코딩 트리 블록(CTB)들이 동일한 슬라이스와 동일한 타일에 속하면, 제어는 레퍼런스 샘플 카피 단계(1746)에 전해진다. 그렇지 않으면, 제어는 디폴트 샘플 값 할당 단계(1744)에 전해진다.
디폴트 샘플 값 할당 단계(1744)에서, 비디오 인코더(114) 내의 인트라 블록 카피 모듈(350)은 레퍼런스 샘플 블록 내의 샘플 값에 디폴트 샘플 값을 할당한다. 대안적으로, 방법(1740)이 비디오 디코더(134)에 의해 실행되고 있을 경우, 비디오 디코더(134) 내의 인트라 블록 카피 모듈(436)은 단계(1744)를 수행한다.
레퍼런스 샘플 카피 단계(1746)에서, 비디오 인코더(114) 내의 인트라 블록 카피 모듈(350)은 프레임부(800)와 같은 프레임부로부터의 레퍼런스 샘플을 레퍼런스 샘플 블록에 카피한다. 대안적으로, 방법(1740)이 비디오 디코더(134)에 의해 실행되고 있을 경우, 비디오 디코더(134) 내의 인트라 블록 카피 모듈(436)은 단계(1746)를 수행한다.
방법(1740)은 그리고 나서 종결된다.
도 17d는 인트라 블록 카피 모드를 이용하도록 구성된 코딩 단위(CU)에 대한 레퍼런스 샘플 블록을 생성하는 방법(1760)을 도시하는 개략적 흐름도이다. 방법(1760)은 비디오 인코더(114)와 비디오 디코더(134)를 구현시키는 하나 이상의 소프트웨어 코드 모듈들로 수행될 수 있는데, 이들은 하드 디스크 드라이브(210)에 상주하고 프로세서(205)에 의해 그들의 실행으로 제어된다. 방법(1760)은 인트라 블록 카피 모드를 이용하도록 구성된 코딩 단위(CU)의 레퍼런스 블록을 생성할 때 수행된다. 비디오 인코더(114)와 비디오 디코더(134)는 도 8a에 도시된 바와 같이, 상이한 슬라이스들 또는 타일들로부터 코딩 트리 블록(CTB)들을 포함하는 프레임부를 처리할 때 방법(1760)을 적용할 수 있다. 방법(1760)은 비디오 인코더(114)를 참조하여 예로서 설명될 것이다. 방법(1760)은 레퍼런스 샘플 블록 카피 단계(1762)에서 시작한다.
레퍼런스 샘플 블록 카피 단계(1762)에서, 비디오 인코더(114) 내의 인트라 블록 카피 모듈(350)은 프레임부(800)와 같은 프레임부로부터의 레퍼런스 샘플들의 블록을 레퍼런스 샘플 블록에 카피한다. 카피된 레퍼런스 샘플들의 블록은 상이한 슬라이스들 또는 타일들에 속하는 코딩 트리 블록(CTB)들로부터의 레퍼런스 샘플들을 포함할 수 있다. 대안적으로, 방법(1760)이 비디오 디코더(134)에 의해 실행되고 있을 경우, 비디오 디코더(134) 내의 인트라 블록 카피 모듈(436)은 단계(1762)를 수행한다.
동일한 슬라이스 및 타일 단계(1764)에서, 프로세서(205)는 현재 코딩 트리 블록(CTB)과 이전 코딩 트리 블록(CTB)의 슬라이스 및 현재 코딩 트리 블록(CTB)과 이전 코딩 트리 블록(CTB)의 타일을 테스트한다. 2개의 코딩 트리 블록(CTB)들이 동일한 슬라이스와 동일한 타일에 속하면, 방법(1760)은 종결된다. 그렇지 않으면, 제어는 카피된 샘플들의 디폴트 샘플 값으로의 대체 단계(1766)에 전해진다.
카피된 샘플들의 디폴트 샘플 값으로의 대체 단계(1766)에서, 비디오 인코더(114) 내의 인트라 블록 카피 모듈(350)은 이전 코딩 트리 블록(CTB)에 대응하는 레퍼런스 샘플 블록 내의 위치들에 디폴트 샘플 값을 할당한다(즉, 도 8a에서 810). 대안적으로, 방법(1760)이 비디오 디코더(134)에 의해 실행되고 있을 경우, 비디오 디코더(134) 내의 인트라 블록 카피 모듈(436)은 단계(1766)를 수행한다.
방법(1760)은 그리고 나서 종결된다.
도 18a는 레퍼런스 블록(1806)을 참조하는 예시적 블록 벡터(1804)을 도시하는 개략적 블록도이며, 블록 벡터(1804)의 원점은 현재 코딩 단위(1802)(CU) 위치와는 다른 점과 관련되어 있다. 도 18a에 도시된 바와 같이, 레퍼런스 블록(1806)의 위치는 현재 코딩 트리 블록(CTB)의 좌상부 코너의 위치에 블록 벡터의 벡터 가산에 의해 결정될 수 있다. 프레임부(1800)(즉, 인-루프 필터링 이전에 현재 및 이전 코딩 트리 블록(CTB))가 로컬 저장소 내에(예를 들어, 메모리(206) 내에) 보유되는 배열들에서, 벡터 가산은 요구되지 않고 블록 벡터(1804)는 직접적으로 로컬 저장소 내의 레퍼런스 블록(1806)의 위치를 상세화한다. 도 18a의 예는 도 8a-8c와 상반되는데, 여기서 블록 벡터는 현재 코딩 단위(CU) 위치와 관련되어 있다.
현재 코딩 단위의 좌상부 코너로부터 발생하는 블록 벡터들에 대해서, 블록 벡터의 수직 변위는 [0..56]으로 제한된다. 56(56)의 최대값은 코딩 트리 블록(CTB)의 높이(즉, 64(64))로부터, 최소 코딩 단위(SCU)의 높이(즉, 8(8))를 감산함으로써 유도된다. 이에 따라, mvd_coding 구문 구조에서 수직 변위를 위한 '부호(sign)' 비트를 코딩할 필요가 없다.
블록 벡터의 수평 변위는 [-64..56]으로 제한된다. 수평 변위에 대해서, 포지티브와 네거티브 값들의 좀 더 균일한 분포는 현재 코딩 단위(CU) 위치와 관련하여 블록 벡터들에 대해서보다 예상된다. 이에 따라, 더 큰 코딩 효율은 mvd_coding 구문 구조 내에서의 수평 변위에 대한 '부호' 비트를 위한 바이패스-코드화 빈의 사용으로부터 예상될 수 있다.
도 18b는 인트라 블록 카피 모드를 이용하도록 구성된 연속적 코딩 단위(CU)들 간의 예시적 블록 벡터 표현을 도시하는 개략적 블록도이다. 도 18b의 예에서, 프레임부(1820)는 2개의 코딩 트리 블록(CTB)들을 포함한다. 도 18b에서 도시된 바와 같이, 이전 코딩 단위(CU)(1822)은 인트라 블록 카피 모드를 이용하도록 구성되며, 블록 벡터(1834)는 레퍼런스 블록(1836)을 선택하도록 구성된다. 현재 코딩 단위(CU)(1822)은 또한 인트라 블록 카피 모드를 이용하도록 구성되며, 블록 벡터(1830)는 레퍼런스 블록(1832)을 선택하도록 구성된다. 코딩 단위(CU)들의 순서는 도 6a와 관련하여 설명된 'Z-스캔' 순서와 일치한다. 도 18b의 예에서, 블록 벡터 차이(1838)는 코딩 단위(CU)(1822)과 코딩 단위(CU)(1828)의 위치에서의 차이를 고려하여, 블록 벡터(1836)과 블록 벡터(1832) 사이의 차이를 나타낸다. 코딩 단위(CU)(1828)에 대한 코딩 단위(CU) 구문 구조는 'mvd_coding' 구문 구조를 이용하여, 블록 벡터(1830) 대신에, 인코딩된 비트스트림(312)에서 블록 벡터 차이(1838)를 인코딩한다.
한가지 배열에서, 비디오 인코더(114)는 상술한 바와 같이 블록 벡터 차이(1838)를 계산하고 이 계산된 블록 벡터 차이(1838)를 인코딩된 비트스트림(114)으로 인코딩할 수 있다. 한가지 배열에서, 비디오 디코더(134)는 블록 벡터(1830)을 결정하기 위해서 인코딩된 비트스트림(312)으로부터 블록 벡터 차이(1838)를 디코딩하고 블록 벡터 차이(1838)를 블록 벡터(1834)에 가산할 수 있다. 비디오 인코더(114)와 비디오 디코더(134)의 그와 같은 배열들은, 공간적으로 가까운 인트라 블록 카피된 코딩 단위(CU)들의 블록 벡터들 사이의 상관이 인코딩된 비트스트림(312)에서 블록 벡터들을 코딩하는 효율을 높이기 위해 이용되기 때문에, 더 높은 코딩 효율을 달성한다. 그와 같은 배열들은 또한 현재 블록 벡터(예를 들어, 1830)의 계산을 위해 하나의 이전 블록 벡터(예를 들어, 1834)의 저장소를 요구한다. 이전 블록 벡터는 현재 블록 벡터에 대한 '예측자(predictor)'(즉, 초기값)이라고 생각할 수 있다. 이전 코딩 단위(CU)가 인트라 블록 카피 모드를 이용하도록 구성되지 않은 경우, 배열들은 저장된 블록 벡터를 (0, 0)으로 리셋할 수 있다. 비디오 인코더가 계산된 블록 벡터 차이(1838)를 인코딩된 비트스트림(114)으로 인코딩하는 경우와 비디오 디코더(134)가 블록 벡터 차이(1838)를 블록 벡터(1834)에 가산하는 경우의 배열들은, 현재 코딩 단위(CU)의 블록 벡터에 대한 임의의 상관을 가지고 있을 가능성이 없는 초기 코딩 단위(CU)로부터의 블록 벡터가 현재 코딩 단위(CU)에 대한 블록 벡터의 연산에 영향을 미치는 것을 방지한다.
한가지 배열에서, 현재 코딩 단위(CU)의 좌측에 인접한 및/또는 상부에 인접한 코딩 단위(CU)들의 블록 벡터가 또한 이용될 수 있다. 그러한 배열에서, 블록 벡터들에 대한 추가 저장소가 요구되는데, 이는 코딩 트리 블록(CTB)들의 이전 행으로부터의 블록 벡터들을 보유하는 코딩 트리 블록(CTB)의 상단을 따라 코딩 단위(CU)들에 대한 '상부' 블록 벡터들에 대한 '라인 버퍼'을 포함한다. 또한, 이용 가능한 블록 벡터들 중 어느 하나는 현재 코딩 단위(CU)의 블록 벡터에 대한 예측자를 제공하기 위해 이용될 수 있다. 인트라 블록 카피 모드를 이용하도록 구성된 인접한 코딩 단위(CU)들은 블록 벡터 예측을 위해 '이용 가능한 것으로' 간주된다. 인트라 블록 카피 모드를 이용하도록 구성되지 않은 인접한 코딩 단위(CU)들은 블록 벡터 예측을 위해 '이용 가능하지 않은 것으로' 간주된다. '좌측' 및 '상부' 블록 벡터들 모두가 이용 가능한 경우, 2개의 블록 벡터들의 평균은 예측자로서 이용될 수 있다. 대안적으로, 플래그는 블록 벡터들 중 어느 것을 이용할지를 상세화하기 위해 인코딩된 비트스트림(312)에서 인코딩될 수 있다. 예를 들어, 플래그가 0이면 좌측 블록 벡터가 예측자로서 이용될 수 있고 플래그가 1이면 상부 블록 벡터가 예측자로서 이용될 수 있다.
본 명세서에서 설명된 배열들은 예를 들어, 구문 요소들을 코딩하는데 필요한 컨텍스트들의 수를 감소시킴으로써 복잡도를 줄이는 방법들을 도시한다. 설명된 배열들은 예를 들어, 예측 모드 또는 코딩 단위(CU) 모드들이 전체적인 프레임 타입(예를 들어, 인터-예측 대 인트라-예측)에 대해 최적화된 방식으로 인코딩된 비트스트림(312)에 상세화되도록 구문 요소들의 순서화에 의해 그리고 블록 벡터 코딩 방법들에 의해 코딩 효율을 향상시킨다. 더욱이, 본 명세서에서 설명된 배열들은 슬라이스 경계들, 타일 경계들, 한정된 인트라-예측을 포함하는 상황들에서 인트라 블록 카피 모드 동작을 상세화함으로써 오류 복원력을 제공한다.
<산업상 이용 가능성>
설명된 배열들은 컴퓨터 및 데이터 처리 산업, 특히 비디오 신호와 같은 신호의 디코딩의 인코딩을 위한 디지털 신호 처리에 적용 가능하다.
전술한 설명은 본 발명의 일부 실시예만을 설명하고, 본 발명의 범위 및 사상으로부터 벗어나지 않고서 변형 및/또는 변경이 이루어질 수 있으며, 실시예는 예시적인 것으로, 한정적인 것이 아니다.
본 명세서의 컨텍스트에서, "포함하는"이라는 단어는 "주로 포함하지만, 반드시 단독인 것은 아닌" 또는 "갖는" 또는 "포함하는"을 의미하며, "만으로 구성되는" 것을 의미하지는 않는다. "포함한다" 및 "포함하고"와 같이 "포함하는"이라는 단어의 변형은 대응하여 변형된 의미를 가진다.
부록 A
다음과 같은 텍스트는 코딩 단위(CU) 구문 구조이다.
7.3.8.5 코딩 단위 구문
Figure pat00001
Figure pat00002
7.4.9.5 코딩 단위 의미
0과 동일한 pred_mode_flag는 현재 코딩 단위가 인터 예측 모드에서 코딩되는 것을 상세화한다. 1과 동일한 pred_mode_flag는 현재 코딩 단위가 인트라-예측 모드에서 코딩되는 것을 상세화한다. 변수 CuPredMode[x][y]는 다음과 같이 x = x0..x0 + nCbS - 1 및 y = y0..y0 + nCbS - 1에 대해 유도된다:
- pred_mode_flag가 0과 동일하면, CuPredMode[x][y]는 MODE_INTER와 동일하게 설정된다.
- 그렇지 않으면(pred_mode_flag가 1과 동일하면), intra_bc_flag가 0과 동일한 경우, CuPredMode[x][y]는 MODE_INTRA와 동일하게 설정된다.
- 그렇지 않으면(pred_mode_flag가 1과 동일하고 intra_bc_flag가 1과 동일하면), CuPredMode[x][ y]는 MODE_INTRABC와 동일하게 설정된다.
pred_mode_flag가 존재하지 않으면, 변수 CuPredMode[x][y]는 다음과 같이 x = x0..x0 + nCbS - 1 및 y = y0..y0 + nCbS - 1에 대해 유도된다:
- slice_type이 1과 동일하면, CuPredMode[x][y]는 MODE_INTRA와 동일한 것으로 추론된다.
- 그렇지 않으면(slice_type가 P 또는 B와 동일하면), cu_skip_flag[x0][y0]가 1과 동일할 때, CuPredMode[x][y]는 MODE_SKIP과 동일한 것으로 추론된다.
7.4.9.9 모션 벡터 차이 의미
변수 BvIntra[x0][y0][compIdx]는 인트라 블록 카피 예측 모드에 사용된 벡터를 상세화한다. BvIntra[x0][y0]의 값은 - 128내지 128범위를 포함할 것이다. 어레이 인덱스들 x0, y0는 픽처의 상좌측 루마 샘플과 관련하여 고려된 예측 블록의 상좌측 루마 샘플의 위치(x0, y0)를 상세화한다. 수평 블록 벡터 성분은 compIdx = 0을 할당 받고 수직 블록 벡터 성분은 compIdx = 1을 할당 받는다.
부록 A 끝
부록 B
부록 B는 도 8c에 따른 배열들에 대해 비디오 인코더(114)들과 비디오 디코더(134)들에 대한 적합성 제약을 도시한다.
constrained_intra_pred_flag가 1과 동일할 때 BvIntra[x0][y0]의 값이 레퍼런스 샘플 위치들(xRefCmp, yRefCmp)에서의 각각의 샘플이 "인트라-예측에 이용 가능한 것으로" 표시되도록 제한되는 비트스트림 적합성의 요구이다.
부록 B 끝
부록 C
부록 C는 도 8c에 따른 배열들에 대해 비디오 인코더(114)들과 비디오 디코더(134)들에 대한 적합성 제약을 도시한다.
8.4.4.2.7 인트라 블록 카피 예측 모드의 사양
변수 bitDepth는 다음과 같이 유도된다:
- cIdx가 0과 동일하면, bitDepth는 BitDepthY와 동일하게 설정된다.
- 그렇지 않으면, bitDepth는 BitDepthC와 동일하게 설정된다.
.....
예측된 샘플들의 (nTbS)x(nTbS) 어레이는, 다음과 같이 유도되고, 여기서 x, y = 0..nTbS-1이다:
- 레퍼런스 샘플 위치(xRefCmp, yRefCmp)는 다음에 의해 특정된다:
(xRefCmp, yRefCmp)=(xTbCmp+x+bv[0],yTbCmp+y+bv[1]) (8-65)
- "인트라-예측에 이용 가능한"것으로 표시된 위치(xRefCmp, yRefCmp)에서의 각각의 샘플은 predSamples[x][y]에 할당된다.
- "인트라-예측에 이용 가능하지 않는" 것으로 표시된 위치(xRefCmp, yRefCmp)에서의 각각의 샘플에서 값 1<<(bitDepth-1)은 predSamples[x][y]에 할당된다.
부록 C 끝
부록 D
9.3.2.2 컨텍스트 변수들에 대한 초기화 프로세스
표 9-4- 초기화 프로세스에서 각각의 초기화 타입에 대한 ctxIdx 및 구문 요소들의 관련
Figure pat00003
표 9-33- intra _bc_flag의 ctxIdx에 대한 initValue의 값들
Figure pat00004
9.3.4.2.2 좌측 및 상부 구문 요소들을 이용한 ctxInc의 유도 프로세스
표 9-40- 좌측 및 상부 구문 요소들을 이용한 ctxInc의 사양
Figure pat00005
부록 D 끝

Claims (32)

  1. 비디오 데이터를 비디오 비트스트림으로 인코딩하기 위한 잔차값(residual values) 결정 방법으로서,
    상기 비디오 데이터의 한정된 인트라-예측 코딩 단위(a constrained intra-predicted coding unit)에 대한 복수의 블록 벡터를 수신하는 단계와,
    수신된 상기 복수의 블록 벡터에 의해 참조되는 각각의 코딩 단위에 대한 예측 모드를 결정하는 단계와,
    선택되는 코딩 단위의 결정된 상기 예측 모드가 인트라-예측 모드 및 인트라 블록 카피 모드로 이루어지는 세트로부터인 경우, 수신된 상기 복수의 블록 벡터에 의해 참조되는 상기 코딩 단위 중 하나 이상을 선택하는 단계와,
    선택된 상기 코딩 단위의 참조 샘플에 따라 상기 한정된 인트라-예측 코딩 단위를 상기 비디오 비트스트림으로 인코딩하기 위한 잔차값을 결정하는 단계를 포함하는, 잔차값 결정 방법.
  2. 제1항에 있어서, 선택된 상기 코딩 단위의 결정된 상기 예측 모드가 인터 예측인 경우, 선택된 상기 코딩 단위의 참조 샘플에 디폴트값이 할당되는, 잔차값 결정 방법.
  3. 제1항에 있어서, 인터 예측의 결정된 예측 모드를 가지는 상기 코딩 단위는 이용가능하지 않은 것으로 표시되는, 잔차값 결정 방법.
  4. 제1항에 있어서, 상기 비디오 데이터의 현재 비디오 프레임 내의 블록의 콘텐츠가 상기 비디오 데이터의 이전 비디오 프레임 내의 블록으로부터 예측되는 경우, 상기 코딩 단위는 이용가능하지 않은 것으로 표시되는, 잔차값 결정 방법.
  5. 제1항에 있어서, 상기 한정된 인트라-예측 코딩 단위를 상기 비디오 비트스트림으로 인코딩하기 위한 상기 잔차값은 복수의 상기 블록 벡터 중, 복수의 코딩 단위 내에 위치하는 영역을 참조하는 블록 벡터를 이용하여 결정되는, 잔차값 결정 방법.
  6. 비디오 데이터를 비디오 비트스트림으로 인코딩하기 위한 잔차값 결정 시스템으로서, 상기 시스템은,
    데이터 및 컴퓨터 프로그램을 저장하기 위한 메모리와,
    상기 메모리에 결합되는 프로세서를 포함하고,
    상기 컴퓨터 프로그램은,
    상기 비디오 데이터의 한정된 인트라-예측 코딩 단위에 대한 복수의 블록 벡터를 수신하는 단계와,
    수신된 상기 복수의 블록 벡터에 의해 참조되는 각각의 코딩 단위에 대한 예측 모드를 결정하는 단계와,
    선택되는 코딩 단위의 결정된 상기 예측 모드가 인트라-예측 모드 및 인트라 블록 카피 모드로 이루어지는 세트로부터인 경우, 수신된 상기 복수의 블록 벡터에 의해 참조되는 상기 코딩 단위 중 하나 이상을 선택하는 단계와,
    선택된 상기 코딩 단위의 참조 샘플에 따라 상기 한정된 인트라-예측 코딩 단위를 상기 비디오 비트스트림으로 인코딩하기 위한 잔차값을 결정하는 단계를 위한 명령어를 포함하는, 잔차값 결정 시스템.
  7. 제6항에 있어서, 선택된 상기 코딩 단위의 결정된 상기 예측 모드가 인터 예측인 경우, 선택된 상기 코딩 단위의 참조 샘플에 디폴트값이 할당되는, 잔차값 결정 시스템.
  8. 제6항에 있어서, 인터 예측의 결정된 예측 모드를 가지는 상기 코딩 단위는 이용가능하지 않은 것으로 표시되는, 잔차값 결정 시스템.
  9. 제6항에 있어서, 상기 비디오 데이터의 현재 비디오 프레임 내의 블록의 콘텐츠가 상기 비디오 데이터의 이전 비디오 프레임 내의 블록으로부터 예측되는 경우, 상기 코딩 단위는 이용가능하지 않은 것으로 표시되는, 잔차값 결정 시스템.
  10. 제6항에 있어서, 상기 한정된 인트라-예측 코딩 단위를 상기 비디오 비트스트림으로 인코딩하기 위한 상기 잔차값은 복수의 상기 블록 벡터 중, 복수의 코딩 단위 내에 위치하는 영역을 참조하는 블록 벡터를 이용하여 결정되는, 잔차값 결정 시스템.
  11. 비디오 데이터를 비디오 비트스트림으로 인코딩하기 위한 잔차값 결정 장치로서,
    상기 비디오 데이터의 한정된 인트라-예측 코딩 단위에 대한 복수의 블록 벡터를 수신하는 수단과,
    수신된 상기 복수의 블록 벡터에 의해 참조되는 각각의 코딩 단위에 대한 예측 모드를 결정하는 수단과,
    선택되는 코딩 단위의 결정된 상기 예측 모드가 인트라-예측 모드 및 인트라 블록 카피 모드로 이루어지는 세트로부터인 경우, 수신된 상기 복수의 블록 벡터에 의해 참조되는 상기 코딩 단위 중 하나 이상을 선택하는 수단과,
    선택된 상기 코딩 단위의 참조 샘플에 따라 상기 한정된 인트라-예측 코딩 단위를 상기 비디오 비트스트림으로 인코딩하기 위한 잔차값을 결정하는 수단을 포함하는, 잔차값 결정 장치.
  12. 제11항에 있어서, 선택된 상기 코딩 단위의 결정된 상기 예측 모드가 인터 예측인 경우, 선택된 상기 코딩 단위의 참조 샘플에 디폴트값이 할당되는, 잔차값 결정 장치.
  13. 제11항에 있어서, 인터 예측의 결정된 예측 모드를 가지는 상기 코딩 단위는 이용가능하지 않은 것으로 표시되는, 잔차값 결정 장치.
  14. 제11항에 있어서, 상기 비디오 데이터의 현재 비디오 프레임 내의 블록의 콘텐츠가 상기 비디오 데이터의 이전 비디오 프레임 내의 블록으로부터 예측되는 경우, 상기 코딩 단위는 이용가능하지 않은 것으로 표시되는, 잔차값 결정 장치.
  15. 제11항에 있어서, 상기 한정된 인트라-예측 코딩 단위를 상기 비디오 비트스트림으로 인코딩하기 위한 상기 잔차값은 복수의 상기 블록 벡터 중, 복수의 코딩 단위 내에 위치하는 영역을 참조하는 블록 벡터를 이용하여 결정되는, 잔차값 결정 장치.
  16. 비디오 데이터를 비디오 비트스트림으로 인코딩하기 위한 잔차값을 결정하기 위한 컴퓨터 프로그램이 저장된 컴퓨터 판독가능 저장 매체로서, 상기 프로그램은,
    상기 비디오 데이터의 한정된 인트라-예측 코딩 단위에 대한 복수의 블록 벡터를 수신하기 위한 코드와,
    수신된 상기 복수의 블록 벡터에 의해 참조되는 각각의 코딩 단위에 대한 예측 모드를 결정하기 위한 코드와,
    선택되는 코딩 단위의 결정된 상기 예측 모드가 인트라-예측 모드 및 인트라 블록 카피 모드로 이루어지는 세트로부터인 경우, 수신된 상기 복수의 블록 벡터에 의해 참조되는 상기 코딩 단위 중 하나 이상을 선택하기 위한 코드와,
    선택된 상기 코딩 단위의 참조 샘플에 따라 상기 한정된 인트라-예측 코딩 단위를 상기 비디오 비트스트림으로 인코딩하기 위한 잔차값을 결정하기 위한 코드를 포함하는, 컴퓨터 판독가능 저장 매체.
  17. 제16항에 있어서, 선택된 상기 코딩 단위의 결정된 상기 예측 모드가 인터 예측인 경우, 선택된 상기 코딩 단위의 참조 샘플에 디폴트값이 할당되는, 컴퓨터 판독가능 저장 매체.
  18. 제16항에 있어서, 인터 예측의 결정된 예측 모드를 가지는 상기 코딩 단위는 이용가능하지 않은 것으로 표시되는, 컴퓨터 판독가능 저장 매체.
  19. 제16항에 있어서, 상기 비디오 데이터의 현재 비디오 프레임 내의 블록의 콘텐츠가 상기 비디오 데이터의 이전 비디오 프레임 내의 블록으로부터 예측되는 경우, 상기 코딩 단위는 이용가능하지 않은 것으로 표시되는, 컴퓨터 판독가능 저장 매체.
  20. 제16항에 있어서, 상기 한정된 인트라-예측 코딩 단위를 상기 비디오 비트스트림으로 인코딩하기 위한 상기 잔차값은 복수의 상기 블록 벡터 중, 복수의 코딩 단위 내에 위치하는 영역을 참조하는 블록 벡터를 이용하여 결정되는, 컴퓨터 판독가능 저장 매체.
  21. 비디오 비트스트림으로부터의 잔차값 디코딩 방법으로서,
    복수의 블록 벡터에 의해서 참조되는 각각의 코딩 단위에 대한 예측 모드에 기초하여 복수의 블록 벡터로부터 선택되는 블록 벡터를 가지는 하나 이상의 한정된 인트라-예측 코딩 단위를 포함하는 비디오 비트스트림을 수신하는 단계와,
    선택되는 코딩 단위의 결정된 상기 예측 모드가 인트라-예측 모드 및 인트라 블록 카피 모드로 이루어지는 세트로부터인 경우, 상기 복수의 블록 벡터에 의해 참조되는 상기 코딩 단위 중 하나 이상을 선택하는 단계와,
    선택된 하나 이상의 상기 코딩 단위의 참조 샘플에 따라 상기 한정된 인트라-예측 코딩 단위에 대한 잔차값을 결정하는 단계를 포함하는, 잔차값 디코딩 방법.
  22. 제21항에 있어서, 블록 벡터가 상기 비트스트림 내에 포함되는 복수의 코딩 단위 내에 위치하는 영역을 참조하는, 잔차값 디코딩 방법.
  23. 제21항에 있어서, 상기 비디오 비트스트림의 현재 비디오 프레임 내의 블록의 콘텐츠가 상기 비디오 비트스트림의 이전 비디오 프레임 내의 블록으로부터 예측되는 경우, 상기 코딩 단위는 이용가능하지 않은 것으로 표시되는, 잔차값 디코딩 방법.
  24. 비디오 비트스트림으로부터의 잔차값 디코딩 시스템으로서, 상기 시스템은,
    데이터 및 컴퓨터 프로그램을 저장하기 위한 메모리와,
    상기 메모리에 결합되는 프로세서를 포함하고, 상기 컴퓨터 프로그램은,
    복수의 블록 벡터에 의해서 참조되는 각각의 코딩 단위에 대한 예측 모드에 기초하여 복수의 블록 벡터로부터 선택되는 블록 벡터를 가지는 하나 이상의 한정된 인트라-예측 코딩 단위를 포함하는 비디오 비트스트림을 수신하는 단계와,
    선택되는 코딩 단위의 결정된 상기 예측 모드가 인트라-예측 모드 및 인트라 블록 카피 모드로 이루어지는 세트로부터인 경우, 상기 복수의 블록 벡터에 의해 참조되는 상기 코딩 단위 중 하나 이상을 선택하는 단계와,
    선택된 하나 이상의 상기 코딩 단위의 참조 샘플에 따라 상기 한정된 인트라-예측 코딩 단위에 대한 잔차값을 결정하는 단계를 위한 명령어를 포함하는, 잔차값 디코딩 시스템.
  25. 제24항에 있어서, 블록 벡터가 상기 비트스트림 내에 포함되는 복수의 코딩 단위 내에 위치하는 영역을 참조하는, 잔차값 디코딩 시스템.
  26. 제24항에 있어서, 상기 비디오 비트스트림의 현재 비디오 프레임 내의 블록의 콘텐츠가 상기 비디오 비트스트림의 이전 비디오 프레임 내의 블록으로부터 예측되는 경우, 상기 코딩 단위는 이용가능하지 않은 것으로 표시되는, 잔차값 디코딩 시스템.
  27. 비디오 비트스트림으로부터의 잔차값 디코딩 장치로서,
    복수의 블록 벡터에 의해서 참조되는 각각의 코딩 단위에 대한 예측 모드에 기초하여 복수의 블록 벡터로부터 선택되는 블록 벡터를 가지는 하나 이상의 한정된 인트라-예측 코딩 단위를 포함하는 비디오 비트스트림을 수신하는 수단과,
    선택되는 코딩 단위의 결정된 상기 예측 모드가 인트라-예측 모드 및 인트라 블록 카피 모드로 이루어지는 세트로부터인 경우, 상기 복수의 블록 벡터에 의해 참조되는 상기 코딩 단위 중 하나 이상을 선택하는 수단과,
    선택된 하나 이상의 상기 코딩 단위의 참조 샘플에 따라 상기 한정된 인트라-예측 코딩 단위에 대한 잔차값을 결정하는 수단을 포함하는, 잔차값 디코딩 장치.
  28. 제27항에 있어서, 블록 벡터가 상기 비트스트림 내에 포함되는 복수의 코딩 단위 내에 위치하는 영역을 참조하는, 잔차값 디코딩 장치.
  29. 제27항에 있어서, 상기 비디오 비트스트림의 현재 비디오 프레임 내의 블록의 콘텐츠가 상기 비디오 비트스트림의 이전 비디오 프레임 내의 블록으로부터 예측되는 경우, 상기 코딩 단위는 이용가능하지 않은 것으로 표시되는, 잔차값 디코딩 장치.
  30. 비디오 비트스트림으로 잔차값을 디코딩하기 위한 컴퓨터 프로그램이 저장된 컴퓨터 판독가능 저장 매체로서, 상기 프로그램은,
    복수의 블록 벡터에 의해서 참조되는 각각의 코딩 단위에 대한 예측 모드에 기초하여 복수의 블록 벡터로부터 선택되는 블록 벡터를 가지는 하나 이상의 한정된 인트라-예측 코딩 단위를 포함하는 비디오 비트스트림을 수신하기 위한 코드와,
    선택되는 코딩 단위의 결정된 상기 예측 모드가 인트라-예측 모드 및 인트라 블록 카피 모드로 이루어지는 세트로부터인 경우, 상기 복수의 블록 벡터에 의해 참조되는 상기 코딩 단위 중 하나 이상을 선택하기 위한 코드와,
    선택된 하나 이상의 상기 코딩 단위의 참조 샘플에 따라 상기 한정된 인트라-예측 코딩 단위에 대한 잔차값을 결정하기 위한 코드를 포함하는, 컴퓨터 판독가능 저장 매체.
  31. 제30항에 있어서, 블록 벡터가 상기 비트스트림 내에 포함되는 복수의 코딩 단위 내에 위치하는 영역을 참조하는, 컴퓨터 판독가능 저장 매체.
  32. 제30항에 있어서, 상기 비디오 비트스트림의 현재 비디오 프레임 내의 블록의 콘텐츠가 상기 비디오 비트스트림의 이전 비디오 프레임 내의 블록으로부터 예측되는 경우, 상기 코딩 단위는 이용가능하지 않은 것으로 표시되는, 컴퓨터 판독가능 저장 매체.
KR1020187001866A 2013-09-13 2014-09-12 비디오 데이터의 인코딩 및 디코딩을 위한 방법, 장치 및 시스템 KR20180010336A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
AU2013228045 2013-09-13
AU2013228045A AU2013228045A1 (en) 2013-09-13 2013-09-13 Method, apparatus and system for encoding and decoding video data
PCT/AU2014/000893 WO2015035449A1 (en) 2013-09-13 2014-09-12 Method, apparatus and system for encoding and decoding video data

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020167008916A Division KR101822765B1 (ko) 2013-09-13 2014-09-12 비디오 데이터의 인코딩 및 디코딩을 위한 방법, 장치 및 시스템

Publications (1)

Publication Number Publication Date
KR20180010336A true KR20180010336A (ko) 2018-01-30

Family

ID=52664825

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020187001866A KR20180010336A (ko) 2013-09-13 2014-09-12 비디오 데이터의 인코딩 및 디코딩을 위한 방법, 장치 및 시스템
KR1020167008916A KR101822765B1 (ko) 2013-09-13 2014-09-12 비디오 데이터의 인코딩 및 디코딩을 위한 방법, 장치 및 시스템

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020167008916A KR101822765B1 (ko) 2013-09-13 2014-09-12 비디오 데이터의 인코딩 및 디코딩을 위한 방법, 장치 및 시스템

Country Status (8)

Country Link
US (1) US20160227244A1 (ko)
EP (1) EP3044959A4 (ko)
JP (1) JP2016534660A (ko)
KR (2) KR20180010336A (ko)
CN (1) CN105532000B (ko)
AU (2) AU2013228045A1 (ko)
RU (1) RU2016113843A (ko)
WO (1) WO2015035449A1 (ko)

Families Citing this family (89)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015054812A1 (en) 2013-10-14 2015-04-23 Microsoft Technology Licensing, Llc Features of base color index map mode for video and image coding and decoding
CN105659602B (zh) 2013-10-14 2019-10-08 微软技术许可有限责任公司 用于视频和图像编码的帧内块复制预测模式的编码器侧选项
RU2654129C2 (ru) 2013-10-14 2018-05-16 МАЙКРОСОФТ ТЕКНОЛОДЖИ ЛАЙСЕНСИНГ, ЭлЭлСи Функциональные возможности режима внутреннего предсказания с блочным копированием для кодирования и декодирования видео и изображений
US10390034B2 (en) 2014-01-03 2019-08-20 Microsoft Technology Licensing, Llc Innovations in block vector prediction and estimation of reconstructed sample values within an overlap area
US10469863B2 (en) * 2014-01-03 2019-11-05 Microsoft Technology Licensing, Llc Block vector prediction in video and image coding/decoding
US11284103B2 (en) * 2014-01-17 2022-03-22 Microsoft Technology Licensing, Llc Intra block copy prediction with asymmetric partitions and encoder-side search patterns, search ranges and approaches to partitioning
US10542274B2 (en) 2014-02-21 2020-01-21 Microsoft Technology Licensing, Llc Dictionary encoding and decoding of screen content
EP3253059A1 (en) 2014-03-04 2017-12-06 Microsoft Technology Licensing, LLC Block flipping and skip mode in intra block copy prediction
AU2014202921B2 (en) * 2014-05-29 2017-02-02 Canon Kabushiki Kaisha Method, apparatus and system for de-blocking a block of video samples
CN105493505B (zh) 2014-06-19 2019-08-06 微软技术许可有限责任公司 统一的帧内块复制和帧间预测模式
US9948949B2 (en) * 2014-06-20 2018-04-17 Qualcomm Incorporated Intra block copy block vector signaling for video coding
EP4002851A1 (en) * 2014-06-20 2022-05-25 Sony Group Corporation Image encoding device and method, and image decoding device and method
US10856009B2 (en) * 2014-09-04 2020-12-01 Mediatek Inc. Method of block vector clipping and coding for screen content coding and video coding
AU2014408228B2 (en) 2014-09-30 2019-09-19 Microsoft Technology Licensing, Llc Rules for intra-picture prediction modes when wavefront parallel processing is enabled
US10602158B2 (en) * 2015-02-11 2020-03-24 Ati Technologies Ulc Method for maximizing video slice size constraint
CA2981916C (en) * 2015-04-13 2021-08-31 Mediatek, Inc. Methods of constrained intra block copy for reducing worst case bandwidth in video coding
US10444931B2 (en) 2017-05-09 2019-10-15 Google Llc Vantage generation and interactive playback
US10469873B2 (en) * 2015-04-15 2019-11-05 Google Llc Encoding and decoding virtual reality video
US10546424B2 (en) 2015-04-15 2020-01-28 Google Llc Layered content delivery for virtual and augmented reality experiences
US10540818B2 (en) 2015-04-15 2020-01-21 Google Llc Stereo image generation and interactive playback
US10440407B2 (en) 2017-05-09 2019-10-08 Google Llc Adaptive control for immersive experience delivery
US10567464B2 (en) 2015-04-15 2020-02-18 Google Llc Video compression with adaptive view-dependent lighting removal
US10419737B2 (en) 2015-04-15 2019-09-17 Google Llc Data structures and delivery methods for expediting virtual reality playback
US10412373B2 (en) 2015-04-15 2019-09-10 Google Llc Image capture for virtual reality displays
AU2016269362A1 (en) * 2015-05-28 2017-12-07 Hfi Innovation Inc. Method and apparatus for using a current picture as a reference picture
EP3304906A4 (en) * 2015-06-03 2019-04-17 MediaTek Inc. METHOD AND APPARATUS FOR ERROR PROCESSING FOR VIDEO CODING USING INTRA-BLOCK COPY MODE
TWI816224B (zh) * 2015-06-08 2023-09-21 美商Vid衡器股份有限公司 視訊解碼或編碼方法及裝置
GB2539212A (en) * 2015-06-08 2016-12-14 Canon Kk Handling of non-correct block vectors generated for intra block copy coding mode
US10659783B2 (en) 2015-06-09 2020-05-19 Microsoft Technology Licensing, Llc Robust encoding/decoding of escape-coded pixels in palette mode
AU2016299036B2 (en) 2015-07-27 2019-11-21 Hfi Innovation Inc. Method of system for video coding using intra block copy mode
JP6568306B2 (ja) * 2015-09-08 2019-08-28 聯發科技股▲ふん▼有限公司Mediatek Inc. イントラ・ブロック・コピーモードの復号化ピクチャバッファの方法およびシステム
JP6528635B2 (ja) * 2015-10-05 2019-06-12 富士通株式会社 動画像符号化装置、動画像符号化方法及び動画像符号化用コンピュータプログラム
EP3363195B1 (en) * 2015-10-19 2023-08-30 HFI Innovation Inc. Method and apparatus for decoded picture buffer management in video coding system using intra block copy
US10542258B2 (en) * 2016-01-25 2020-01-21 Google Llc Tile copying for video compression
EP3449630A4 (en) * 2016-05-28 2019-11-27 MediaTek Inc. METHOD AND APPARATUS FOR CURRENT IMAGE REFERENCING FOR VIDEO CODING
KR102421721B1 (ko) * 2016-10-10 2022-07-15 삼성전자주식회사 블록 맵을 이용하여 영상을 부호화 또는 복호화하는 방법 및 장치
JP6767691B2 (ja) * 2016-10-18 2020-10-14 パナソニックIpマネジメント株式会社 画像符号化方法、伝送方法および画像符号化装置
CN116233416A (zh) * 2017-01-16 2023-06-06 世宗大学校产学协力团 影像编码/解码方法
US10474227B2 (en) 2017-05-09 2019-11-12 Google Llc Generation of virtual reality with 6 degrees of freedom from limited viewer data
EP3643062A1 (en) * 2017-07-04 2020-04-29 Huawei Technologies Co., Ltd. Decoder side intra mode derivation (dimd) tool computational complexity reduction
EP3662666A4 (en) * 2017-09-08 2021-03-03 Mediatek Inc. METHODS AND DEVICES FOR PROCESSING IMAGES IN AN IMAGE OR VIDEO ENCODING SYSTEM
US10986349B2 (en) 2017-12-29 2021-04-20 Microsoft Technology Licensing, Llc Constraints on locations of reference blocks for intra block copy prediction
KR20210016581A (ko) 2018-06-05 2021-02-16 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드 Ibc 및 atmvp 간의 상호 작용
TWI739120B (zh) 2018-06-21 2021-09-11 大陸商北京字節跳動網絡技術有限公司 合併仿射模式與非合併仿射模式的統一拘束
CN113115046A (zh) 2018-06-21 2021-07-13 北京字节跳动网络技术有限公司 分量相关的子块分割
US10848782B2 (en) 2018-09-21 2020-11-24 Tencent America LLC Method and apparatus for video coding
US11172236B2 (en) 2018-09-21 2021-11-09 Tencent America LLC Method and apparatus for video decoding that defines a search range for a reference block indicated by a block vector
CN110944193B (zh) 2018-09-24 2023-08-11 北京字节跳动网络技术有限公司 视频编码和解码中的加权双向预测
US11317099B2 (en) * 2018-10-05 2022-04-26 Tencent America LLC Method and apparatus for signaling an offset in video coding for intra block copy and/or inter prediction
CN112913240A (zh) 2018-10-22 2021-06-04 北京字节跳动网络技术有限公司 解码器侧运动矢量推导和其他编解码工具之间的并置
WO2020094151A1 (en) 2018-11-10 2020-05-14 Beijing Bytedance Network Technology Co., Ltd. Rounding in pairwise average candidate calculations
US11310515B2 (en) * 2018-11-14 2022-04-19 Tencent America LLC Methods and apparatus for improvement for intra-inter prediction mode
CN113170106A (zh) * 2018-11-28 2021-07-23 北京字节跳动网络技术有限公司 帧内块复制模式中运动参考的扩展方法
CN113170099B (zh) 2018-11-29 2024-03-29 北京字节跳动网络技术有限公司 块内拷贝模式和帧间预测工具之间的交互
CN117880497A (zh) * 2018-11-30 2024-04-12 腾讯美国有限责任公司 用于视频编解码的方法和装置
AU2018278915A1 (en) * 2018-12-12 2020-07-02 Canon Kabushiki Kaisha Method, apparatus and system for encoding and decoding a transformed block of video samples
MX2021007374A (es) * 2018-12-18 2021-07-15 Hfi Innovation Inc Metodo y aparato de encodificacion o decodificacion de bloques de video con restricciones durante la particion de bloques.
CN113170195A (zh) * 2018-12-22 2021-07-23 北京字节跳动网络技术有限公司 具有双树分割的帧内块复制模式
CN109743576B (zh) * 2018-12-28 2020-05-12 杭州海康威视数字技术股份有限公司 编码方法、解码方法及装置
US11758132B2 (en) * 2018-12-28 2023-09-12 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Encoder and decoder, encoding method and decoding method with complexity handling for flexibly sized picture partitions
US11290734B2 (en) 2019-01-02 2022-03-29 Tencent America LLC Adaptive picture resolution rescaling for inter-prediction and display
US10701385B1 (en) * 2019-01-13 2020-06-30 Tencent America LLC Method and apparatus for reference sample memory reuse for intra picture block compensation
MX2021008449A (es) * 2019-01-15 2021-11-03 Rosedale Dynamics Llc Metodo y dispositivo de codificacion de imagen usando bandera de salto de transformacion.
US10771799B2 (en) * 2019-01-15 2020-09-08 Tencent America LLC Method and apparatus for video coding
KR20210121021A (ko) * 2019-01-31 2021-10-07 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드 어파인 모드 적응적 움직임 벡터 해상도 코딩 문맥
CN113396592B (zh) * 2019-02-02 2023-11-14 北京字节跳动网络技术有限公司 用于视频编解码中的帧内块复制的缓冲区管理
WO2020156547A1 (en) 2019-02-02 2020-08-06 Beijing Bytedance Network Technology Co., Ltd. Buffer resetting for intra block copy in video coding
US11089325B2 (en) * 2019-02-08 2021-08-10 Qualcomm Incorporated Constrained affine motion inheritance for video coding
EP3915265A4 (en) 2019-03-01 2022-06-22 Beijing Bytedance Network Technology Co., Ltd. DIRECTION-BASED PREDICTION FOR INTRA BLOCK COPY IN VIDEO CODING
CN113519158B (zh) * 2019-03-01 2024-06-18 北京字节跳动网络技术有限公司 用于视频编解码中的帧内块复制的块矢量表示
KR20210125506A (ko) 2019-03-04 2021-10-18 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드 비디오 코딩에서 인트라 블록 복사를 위한 버퍼 관리
US11012710B2 (en) 2019-03-06 2021-05-18 Tencent America LLC Techniques for intra prediction for 360 image and video coding
AU2019201649A1 (en) 2019-03-11 2020-10-01 Canon Kabushiki Kaisha Method, apparatus and system for encoding and decoding a tree of blocks of video samples
WO2020185050A1 (ko) * 2019-03-14 2020-09-17 에스케이텔레콤 주식회사 인트라 블록 복사를 이용하는 영상 부호화 및 복호화
US11252442B2 (en) * 2019-04-08 2022-02-15 Tencent America LLC Method and apparatus for video coding
US11363279B2 (en) * 2019-04-15 2022-06-14 Tencent America LLC Method and apparatus in video coding with flexible coding order
KR20210154157A (ko) * 2019-04-23 2021-12-20 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드 다중 변환 행렬의 선택 및 컨텍스트 모델링
CN113840143A (zh) * 2019-05-16 2021-12-24 华为技术有限公司 编码器、解码器以及使用ibc专用缓冲区的对应方法
EP3989545A4 (en) * 2019-06-20 2022-08-17 JVCKenwood Corporation VIDEO CODING DEVICE, VIDEO CODING METHOD, VIDEO CODING PROGRAM, VIDEO DECODING DEVICE, VIDEO DECODING METHOD AND VIDEO DECODING PROGRAM
EP3989547A4 (en) * 2019-06-21 2023-04-19 Samsung Electronics Co., Ltd. VIDEO ENCODING METHOD AND DEVICE, AND VIDEO DECODER METHOD AND DEVICE
EP3981151A4 (en) 2019-07-06 2022-08-24 Beijing Bytedance Network Technology Co., Ltd. VIRTUAL PREDICTION BUFFER FOR INTRA-BLOCK COPY IN VIDEO ENCODING
MX2022000110A (es) 2019-07-10 2022-02-10 Beijing Bytedance Network Tech Co Ltd Identificacion de muestras para la copia intra-bloque en codificacion de video.
WO2021004495A1 (en) * 2019-07-10 2021-01-14 Beijing Bytedance Network Technology Co., Ltd. Sample identification for intra block copy in video coding
CN117579816A (zh) 2019-07-11 2024-02-20 北京字节跳动网络技术有限公司 用于视频编解码中的帧内块复制的比特流一致性约束
KR20210107858A (ko) * 2019-07-11 2021-09-01 텐센트 아메리카 엘엘씨 비디오 코딩을 위한 방법 및 장치
CN114979630A (zh) * 2019-08-26 2022-08-30 腾讯科技(深圳)有限公司 数据解码方法、装置和数据编码方法、装置
EP4030762A4 (en) * 2019-09-10 2023-09-06 Samsung Electronics Co., Ltd. IMAGE DECODING DEVICE USING A SET OF TOOLS AND CORRESPONDING IMAGE DECODING METHOD, AND IMAGE ENCODING DEVICE AND CORRESPONDING IMAGE ENCODING METHOD
CN112333446B (zh) * 2020-11-03 2022-11-15 中山大学 一种帧内块复制参考块压缩方法
US11949894B2 (en) 2020-12-07 2024-04-02 Tencent America LLC Method and apparatus for string matching with reference location constraints

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090010333A1 (en) * 2006-01-31 2009-01-08 Alexandros Tourapis Method and Apparatus for Constrained Prediction for Reduced Resolution Update Mode and Complexity Scalability in Video Encoders and Decoders
US20120163457A1 (en) * 2010-12-28 2012-06-28 Viktor Wahadaniah Moving picture decoding method, moving picture coding method, moving picture decoding apparatus, moving picture coding apparatus, and moving picture coding and decoding apparatus
KR101912059B1 (ko) * 2011-01-19 2018-10-25 르네사스 일렉트로닉스 가부시키가이샤 화상 부호화 장치 및 화상 복호 장치
WO2012150849A2 (ko) * 2011-05-04 2012-11-08 한국전자통신연구원 에러에 강인한 인-루프 필터를 이용하는 영상 부호화/복호화 방법과 그에 관한 시그널링 방법
US20120314767A1 (en) * 2011-06-13 2012-12-13 Qualcomm Incorporated Border pixel padding for intra prediction in video coding
US9503715B2 (en) * 2013-08-30 2016-11-22 Qualcomm Incorporated Constrained intra prediction in video coding
US10003818B2 (en) 2013-10-11 2018-06-19 Sony Corporation Video coding system with intra prediction mechanism and method of operation thereof
TWI536811B (zh) * 2013-12-27 2016-06-01 財團法人工業技術研究院 影像處理方法與系統、解碼方法、編碼器與解碼器

Also Published As

Publication number Publication date
JP2016534660A (ja) 2016-11-04
KR101822765B1 (ko) 2018-01-26
AU2016203628A1 (en) 2016-06-16
CN105532000A (zh) 2016-04-27
AU2013228045A1 (en) 2015-04-02
EP3044959A1 (en) 2016-07-20
WO2015035449A8 (en) 2015-04-23
US20160227244A1 (en) 2016-08-04
EP3044959A4 (en) 2017-04-19
RU2016113843A (ru) 2017-10-18
WO2015035449A1 (en) 2015-03-19
KR20160052681A (ko) 2016-05-12
RU2016113843A3 (ko) 2018-06-25
AU2016203628B2 (en) 2018-05-31
CN105532000B (zh) 2019-03-01

Similar Documents

Publication Publication Date Title
KR101822765B1 (ko) 비디오 데이터의 인코딩 및 디코딩을 위한 방법, 장치 및 시스템
JP7391175B2 (ja) 復号する方法、ビデオ復号装置、符号化する方法、ビデオ符号化装置
TWI827616B (zh) 用以編碼及解碼經轉換之視訊樣本區塊的方法、設備和系統
JP7495923B2 (ja) ビデオサンプルの変換されたブロックを符号化および復号する方法、装置、およびシステム
KR20220127337A (ko) 비디오 샘플들의 블록을 인코딩 및 디코딩하기 위한 방법, 장치 및 시스템
US20240146913A1 (en) Method, apparatus and system for encoding and decoding a tree of blocks of video samples
TWI788262B (zh) 用以編碼和解碼視頻樣本之區塊樹的方法、設備及系統
US20210306679A1 (en) Method, apparatus and system for encoding and decoding a transformed block of video samples
KR20210141751A (ko) 비디오 샘플들의 블록을 인코딩 및 디코딩하기 위한 방법, 장치 및 시스템
KR20230010707A (ko) 비디오 샘플들의 블록을 인코딩 및 디코딩하기 위한 방법, 장치 및 시스템
AU2020202285A1 (en) Method, apparatus and system for encoding and decoding a block of video samples

Legal Events

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