다음의 설명은 비디오 코덱 및 비트스트림 신택스 내의 슬라이스 레이어의 구현에 관한 것으로서, 이것은 유연하고, 에러-탄력성과 압축 효율성의 효율적인 결합을 제공하도록 설계된다. 슬라이스 레이어 코딩의 예시적인 적용은 이미지 또는 비디오 인코더 및 디코더에 있다. 따라서, 슬라이스 레이어 코딩은 일반화된 이미지 또는 비디오 인코더 및 디코더의 문맥으로 설명되지만, 다르게, 이하에 설명된 이 예시적인 비트스트림 신택스과는 세부적으로 다를 수 있는 여러 다른 이미지 및 비디오 코덱의 비트스트림 신택스으로 통합될 수 있다.
1. 일반화된 비디오 인코더 및 디코더
도 1은 일반화된 비디오 인코더(100)의 블럭도이고, 도 2는 WMV9/VC-9 변환이 통합될 수 있는 일반화된 비디오 디코더(200)의 블럭도이다.
인코더 및 디코더 내의 모듈들 간의 도시된 관계는 인코더 및 디코더 내의 정보의 주요 흐름을 나타내며, 단순화를 위해 다른 관계는 도시되지 않는다. 특히, 도 1 및 도 2는 보통, 비디오 시퀀스, 프레임, 매크로블럭, 블럭 등에 사용된 인코더 설정, 모드, 테이블 등을 나타내는 보조 정보를 도시하지 않는다. 그러한 보조 정보는 일반적으로, 보조 정보의 엔트로피 인코딩 후에, 출력 비트스트림 내에 송신된다. 출력 비트스트림의 포맷은 윈도우 미디어 비디오 포맷 또는 다른 포맷일 수 있다.
인코더(100) 및 디코더(200)는 블럭-기반이고, 각각의 매크로블럭이 4개의 8×8 휘도 블럭(때때로, 하나의 16×16 매크로블럭으로서 다루어짐) 및 2개의 8×8 색도 블럭을 포함하는 4:2:0의 매크로블럭 포맷을 사용한다. 다르게, 인코더(100) 및 디코더(200)는 오브젝트-기반이거나, 상이한 매크로블럭 또는 블럭 포맷을 사용하거나, 8×8 블럭 및 16×16 매크로블럭과는 다른 크기 또는 구성의 픽셀들의 집합에 대한 동작을 수행한다.
요구된 압축의 구현 및 유형에 따라, 인코더 또는 디코더의 모듈이 추가되거나, 생략되거나, 복수의 모듈들로 분리되거나, 다른 모듈들과 결합되거나/되고 유사한 모듈로 대체될 수 있다. 다른 실시예에서, 상이한 모듈 및/또는 다른 구성의 모듈을 갖는 인코더 또는 디코더는 설명된 기술들 중 하나 이상을 수행한다.
A. 비디오 인코더
도 1은 일반적인 비디오 인코더 시스템(100)의 블럭도이다. 인코더 시스템(100)은 현재의 프레임(105)을 포함하는 비디오 프레임의 시퀀스를 수신하고, 출력으로서 압축된 비디오 정보(195)를 생성한다. 비디오 인코더의 특정 실시예는 일반적으로 일반 인코더(100)의 변환 또는 보충된 버전을 사용한다.
인코더 시스템(100)은 예측된 프레임 및 키 프레임을 압축한다. 표현을 위해, 도 1은 인코더 시스템(100)을 통한 키 프레임에 대한 경로, 및 순방향-예측된 프레임에 대한 경로를 도시한다. 인코더 시스템(100)의 컴포넌트들 중 다수는 키 프레임과 예측된 프레임 둘 다를 압축하는 데 사용된다. 그러한 컴포넌트에 의해 수행되는 정확한 동작은 압축되는 정보의 유형에 따라 다를 수 있다.
(p-프레임, 양방향 예측을 위한 b-프레임, 또는 인터-코딩된 프레임이라고도 불리는) 예측된 프레임은 하나 이상의 다른 프레임으로부터의 예측(또는 차이)에 관하여 표현된다. 예측 레지듀얼은 예측된 프레임과 원래의 프레임 간의 차이이다. 반대로, (i-프레임, 인트라-코딩된 프레임이라고도 불리는) 키 프레임은 다른 프레임에 대한 참조없이 압축된다.
현재의 프레임(105)이 순방향-예측된 프레임이면, 움직임 측정기(110)는 프레임 저장소(120) 내에 버퍼링된 재구성된 이전의 프레임(125)인 기준 프레임을 참조하여 현재의 프레임(105)의 픽셀들의 매크로블럭 또는 다른 집합의 움직임을 측정한다. 다른 실시예에서, 기준 프레임은 나중의 프레임일 수도 있고, 현재의 프레임은 양방향으로 예측될 수도 있다. 움직임 측정기(110)는 움직임 벡터와 같은 움직임 정보(115)를 보조 정보로서 출력한다. 움직임 보상기(130)는 움직임 정보(115)를 재구성된 이전의 프레임(125)에 적용하여, 움직임-보상된 현재의 프레임(135)을 형성한다. 그러나, 예측은 거의 완벽하지 않으며, 움직임-보상된 현재의 프레임(135)과 원래의 현재의 프레임(105) 간의 차이는 예측 레지듀얼(145)이다. 다르게, 움직임 측정기와 움직임 보상기는 다른 유형의 움직임 측정/보상을 적용한다.
주파수 변환기(160)는 공간 영역의 비디오 정보를 주파수 영역(즉, 스펙트 럼)의 데이터로 변환한다. 블럭-기반의 비디오 프레임에 대해, 주파수 변환기(160)는 이산 코사인 변환("DCT")과 유사한 속성을 갖는 다음의 섹션에서 설명되는 변환을 적용한다. 몇몇 실시예에서, 주파수 변환기(160)는 키 프레임에 대한 공간적 예측 레지듀얼의 블럭에 주파수 변환을 적용한다. 주파수 변환기(160)는 8×8, 8×4, 4×8 또는 다른 크기의 주파수 변환을 적용할 수 있다.
그 후, 양자화기(170)가 스펙트럼 데이터 계수의 블럭을 양자화한다. 양자화기는 프레임별로 또는 다른 기준으로 변하는 단계 폭(step-size)을 갖는 스펙트럼 데이터에 균일한 스칼라 양자화를 적용한다. 다르게, 양자화기는 다른 유형의 양자화, 예를 들어, 비균일형, 벡터형 또는 비적응형 양자화를 스펙트럼 데이터 계수에 적용하거나, 주파수 변환을 사용하지 않는 인코더 시스템에서 공간 영역 데이터를 직접 양자화한다. 적응형 양자화 외에, 인코더(100)는 레이트 제어를 위해 프레임 드로핑(frame dropping), 적응형 필터링 또는 다른 기술을 사용할 수 있다.
후속적인 움직임 측정/보상을 위해 재구성된 현재의 프레임이 필요하면, 역 양자화기(176)는 양자화된 스펙트럼 데이터 계수에 대해 역 양자화를 수행한다. 역 주파수 변환기(166)는 주파수 변환기(160)의 동작의 역을 수행하여, (예측된 프레임에 대한) 재구성된 예측 레지듀얼 또는 재구성된 키 프레임을 생성한다. 현재의 프레임(105)이 키 프레임이면, 재구성된 키 프레임은 재구성된 현재의 프레임(도시되지 않음)으로서 취해진다. 현재의 프레임(105)이 예측된 프레임이면, 재구성된 예측 레지듀얼은 움직임-보상된 현재의 프레임(135)에 추가되어 재구성된 현재의 프레임을 형성한다. 프레임 저장소(120)는 다음의 프레임을 예측하는 데 사 용하기 위해 그 재구성된 현재의 프레임을 버퍼링한다. 몇몇 실시예에서, 인코더는 블럭해제 필터(deblocking filter)를 재구성된 프레임에 적용하여, 프레임의 블럭 내의 불연속을 적응적으로 평활화한다.
엔트로피 코더(180)는 양자화(170)의 출력 뿐만 아니라 특정 보조 정보(예를 들어, 움직임 정보(115), 양자화 단계 폭)도 압축한다. 일반적인 엔트로피 코딩 기술은 연산 코딩, 미분 코딩, 허프만 코딩, 런-렝스(run-length) 코딩, LZ 코딩, 사전 코딩 및 상술된 것의 결합을 포함한다. 엔트로피 코더(180)는 일반적으로, 서로 다른 종류의 정보(예를 들어, DC 계수, AC 계수, 다른 유형의 보조 정보)에 대해 서로 다른 코딩 기술을 사용하고, 특정 코딩 기술 내의 복수의 코드 테이블들 중에서 선택할 수 있다.
엔트로피 코더(180)는 압축된 비디오 정보(195)를 버퍼(190) 내에 넣는다. 버퍼 레벨 표시자는 비트 레이트 적응적 모듈에 피드백된다. 압축된 비디오 정보(195)는 고정적인 또는 상대적으로 고정적인 비트 레이트로 버퍼(190)로부터 고갈(deplete)되거나, 그러한 비트 레이트로 후속적인 스트리밍을 위해 저장된다. 다르게, 인코더 시스템(100)은 압축 직후에, 압축된 비디오 정보를 스트리밍한다.
버퍼(190) 이전 또는 이후에, 압축된 비디오 정보(195)는 네트워크를 통한 전송을 위해 채널 코딩될 수 있다. 채널 코딩은 압축된 비디오 정보(195)에 에러 검출 및 정정 데이터를 적용할 수 있다.
B. 비디오 디코더
도 2는 일반적인 비디오 디코더 시스템(200)의 블럭도이다. 디코더 시스템 (200)은 압축된 비디오 프레임의 시퀀스에 관한 정보(295)를 수신하고, 재구성된 프레임(205)을 포함하는 출력을 생성한다. 비디오 디코더의 특정 실시예는 일반적으로, 일반 디코더(200)의 변환 또는 보충된 버전을 사용한다.
디코더 시스템(200)은 예측된 프레임 및 키 프레임을 압축해제한다. 표현을 위해, 도 2는 디코더 시스템(200)을 통한 키 프레임에 대한 경로, 및 순방향-예측된 프레임에 대한 경로를 도시한다. 디코더 시스템(200)의 컴포넌트들 다수는 키 프레임과 예측된 프레임 둘 다를 압축하는 데 사용된다. 그러한 컴포넌트에 의해 수행되는 정확한 동작은 압축되는 정보의 유형에 따라 다를 수 있다.
버퍼(290)는 압축된 비디오 시퀀스에 관한 정보(295)를 수신하고, 수신된 정보가 엔트로피 디코더(280)에 이용가능하게 한다. 버퍼(290)는 일반적으로, 시간에 대해 매우 고정적인 레이트로 정보를 수신하며, 대역폭 또는 전송의 단기 변화를 평활화하기 위해 지터 버퍼(jitter buffer)를 포함한다. 버퍼(290)는 재생 버퍼 및 그 외의 버퍼도 포함할 수 있다. 다르게, 버퍼(290)는 변하는 레이트로 정보를 수신한다. 버퍼(290) 이전 또는 이후에, 압축된 비디오 정보는 에러 검출 및 정정을 위해 채널 디코딩되고 프로세싱될 수 있다.
엔트로피 디코더(280)는 일반적으로, 인코더 내에서 수행된 엔트로피 인코딩의 역을 적용하면서, 엔트로피-코딩된 양자화된 데이터 뿐만 아니라 엔트로피-코딩된 보조 정보(예를 들어, 움직임 정보, 양자화 단계 폭)도 엔트로피 디코딩한다. 엔트로피 디코딩 기술은 연산 디코딩, 미분 디코딩, 허프만 디코딩, 런-렝스 디코딩, LZ 디코딩, 사전 디코딩 및 상술된 것들의 결합을 포함한다. 엔트로피 디코더 (280)는 자주, 서로 다른 종류의 정보(예를 들어, DC 계수, AC 계수, 서로 다른 유형의 보조 정보)에 대해 서로 다른 디코딩 기술을 사용하며, 특정 디코딩 기술 내의 복수의 코드 테이블들 중에서 선택할 수 있다.
재구성될 프레임(205)이 순방향-예측된 프레임인 경우, 움직임 보상기(230)는 움직임 정보(215)를 기준 프레임(225)에 적용하여, 재구성될 프레임(205)의 예측(235)을 형성한다. 예를 들어, 움직임 보상기(230)는 매크로블럭 움직임 벡터를 이용하여 기준 프레임(225) 내의 매크로블럭을 찾는다. 프레임 버퍼(220)는 기준 프레임으로서 사용하기 위해 이전의 재구성된 프레임을 저장한다. 다르게, 움직임 보상기는 다른 유형의 움직임 보상을 적용한다. 움직임 보상기에 의한 예측은 거의 완벽하지 않기 때문에, 디코더(200)는 예측 레지듀얼도 재구성한다.
디코더가 후속적인 움직임 보상을 위해 재구성된 프레임을 필요로할 때, 프레임 저장소(220)는 다음의 프레임을 예측하는 데 사용하기 위해 그 재구성된 프레임을 버퍼링한다. 몇몇 실시예에서, 인코더는 재구성된 프레임에 블럭해제 필터를 적용하여, 프레임의 블럭 내의 불연속을 적응적으로 평활화한다.
역 양자화기(270)는 엔트로피-디코딩된 데이터를 역 양자화한다. 일반적으로, 역 양자화기는 프레임별 또는 다른 기준으로 변하는 단계 폭을 갖는 엔트로피-디코딩된 데이터에 균일한, 스칼라 역 양자화를 적용한다. 다르게, 역 양자화기는 다른 유형의 역 양자화, 예를 들어, 비균일형, 벡터형 또는 비적응형 양자화를 데이터에 적용하거나, 직접, 역 주파수 변환을 이용하지 않는 디코더 시스템 내의 공간 영역의 데이터를 역 양자화한다.
역 주파수 변환기(260)는 양자화된, 주파수 영역의 데이터를 공간 영역의 비디오 정보로 변환한다. 블럭-기반의 비디오 프레임에 대해서, 역 주파수 변환기(260)는 다음의 섹션에서 설명되는 역 변환을 적용한다. 몇몇 실시예에서, 역 주파수 변환기(260)는 키 프레임에 대한 공간 예측 레지듀얼의 블럭에 역 주파수 변환을 적용한다. 역 주파수 변환기(260)는 8×8, 8×4, 4×8 또는 다른 크기의 역 주파수 변환을 적용할 수 있다.
2. 슬라이스 레이어 코딩
배경기술 섹션에서 설명한 바와 같이, 패킷 손실 및 전송 에러로 인한 디코딩 실패를 방지하거나 최소화하는 한가지 기술은, 소정의 종래의 비디오 코덱 표준으로 제공된 슬라이스와 같은 독립적으로 디코딩가능한 부분적 픽처 유닛 내의 코딩을 통해 추가적인 리던던시를 제공하는 것이다. 일반적으로, 슬라이스는 매크로블럭의 하나 이상의 인접하는 로우들을 포함하는 픽처의 일부분이다.
슬라이스의 주요 도전들 중 하나는, 코덱이 에러 탄력성과 압축 간의 올바른 협정(trade off)을 성취할 수 있게 하는 것이다. 그 이유는, 몇몇 비디오 코덱 적용 또는 사용 시나리오는 상당한 양의 패킷 손실을 극복해야 하기 때문에, 에러 탄력성을 매우 중시한다는 것이다. 다른 적용에서는 매우 낮은 에러 탄력성을 요구하는 반면, 효율적인 압축을 요구한다. 본 명세서에 설명된 비디오 코덱의 비트스트림 신택스의 구현에서, 신택스는 슬라이스 레이어, 또는 탄력성과 효율성의 최적의 선택이 성취될 수 있도록 설계된 다른 부분적 픽처 유닛 레이어를 통합한다. 이 능력은 다음의 방식으로 성취된다.
A) 인트라-슬라이스의 완벽한 재구성 : 예시된 신택스의 슬라이스-레이어는, 루프-필터링과 같은 동작 및 오버랩이 슬라이스들에 걸쳐 기능하지 않도록 설계되었다. 따라서, 슬라이스의 매크로블럭들 모두가 인트라-코딩되는 경우, 및 그 슬라이스에 대응하는 픽처 헤더가 알려지는 경우, 그 슬라이스는 픽처의 다른 슬라이스들(구역들) 내의 에러에 관계없이, 에러없이 정확하게 재구성될 수 있다. 이것은 인트라-슬라이스의 완벽한(에러없는) 재구성을 허용하고, 상당한 에러 탄력성 능력을 제공한다.
B) 프레임 헤더를 반복하는 낮은 비용의 방법 : 픽처 헤더 정보의 반복은 디코더에서 픽처 헤더가 수신될 가능성을 증가시키지만, 압축 효율을 감소시키는 희생이 따른다. 설명된 슬라이스-레이어 신택스는 1-비트 플래그를 이용하여 슬라이스에서 픽처 헤더가 전송되는지를 시그널링한다. 이것은 인코더가 다수의 슬라이스와, 픽처 헤더가 재전송되는 특정 슬라이스 둘 다를 선택할 수 있게 한다.
A. 신택스 계층(syntax hierarchy)
더 상세하게, 설명된 비디오 코덱 신택스는, 비디오 시퀀스의 각각의 프레임을 도 3에 도시된 3개의 기본 계층 레이어들인 픽처(310), 매크로블럭(340) 및 블럭(350)으로 압축해제하는 계층 신택스 구조를 이용하여 비디오를 나타낸다. 픽처(310)는 휘도(Y) 채널(330) 및 색도(Cr 및 Cb) 채널(331 내지 332)을 포함한다. 픽처 레이어(310)는 매크로블럭(340)의 로우들로 구성된다. 각각의 매크로블럭은 일반적으로, 6개의 블럭, 즉, 휘도 레이어로부터의 2×2 블록 그룹, 및 색도 채널 각각으로부터의 블럭을 포함한다. (도시된 비디오 코덱 신택스에서 4×8, 8×4 및 4×4 변환 블럭도 사용될 수 있지만) 블럭은 일반적으로, 변환-기반의 인코딩을 위해 변환이 적용되는 8×8 휘도 또는 색도 샘플을 포함한다.
또한, 슬라이스 레이어(320)라고 불리는 선택적인 네번째 레이어는 픽처 레이어(310)와 매크로블럭 레이어(340) 간에 존재할 수 있다. 슬라이스는 래스터 주사 순서로 주사되는 매크로블럭의 하나 이상의 인접한 로우들을 포함하도록 정의된다. 따라서, 픽처(310)는 슬라이스들(320)로 압축해제될 수 있고, 슬라이스들(320)은 매크로블럭들(340)로 압축될 수 있다. 이 설명된 비디오 코덱 신택스에서, 슬라이스는 항상, 로우의 첫번째 매크로블럭에서 시작하고, 동일하거나 다른 로우의 마지막 매크로블럭에서 끝난다. 따라서, 슬라이스는 정수개의 완전한 로우를 포함한다. 또한, 픽처 및 슬라이스는 항상, 이 설명된 비디오 코덱 비트스트림 신택스에서 바이트-정렬되고, 이하에 설명되는 독립적인 디코딩가능한 유닛(IDU)으로 전송된다. 새로운 픽처 또는 슬라이스는 이하에 약술되는 시작-코드를 통해 검출된다.
B. 슬라이스 레이어 정의
슬라이스는 래스터-주사 순서로 주사되는 매크로블럭의 하나 이상의 인접하는 로우들을 나타낸다. 설명된 신택스의 슬라이스 레이어는 선택적이며, 단일의 독립적인 디코딩가능한 유닛(IDU)으로서 픽처를 코딩함으로써 스킵(skip)될 수 있다. 픽처가 복수의 IDU로 코딩될 때, 슬라이스가 사용된다. 슬라이스는 항상, 로우 내의 첫번째 매크로블럭에서 시작하고, 동일하거나 다른 로우 내의 마지막 매크로블럭에서 끝난다는 것을 유념한다. 따라서, 슬라이스는 정수개의 완전한 로우를 포함한다. 슬라이스는 항상 바이트-정렬되고, 각각의 슬라이스는 서로 다른 IDU로 전송된다. 새로운 슬라이스의 시작은 이하에 약술되는 시작-코드에 대한 검색을 통해 검출된다.
새로운 슬라이스가 시작될 때, 움직임 벡터 예측자, AC 및 DC 계수에 대한 예측자, 및 양자화 파라미터에 대한 예측자가 재설정된다. 다시 말하면, 예측에 관련하여, 슬라이스 내의 매크로블럭의 첫번째 로우는 픽처 내의 매크로블럭의 첫번째 로우인 것으로 간주된다. 이것은 예측자 내에 인터-슬라이스 의존성이 존재하지 않을 것을 보장한다. 또한, 슬라이스가 사용될 때, 모든 비트 평면 정보는, 각각의 매크로블럭이 자기 자신의 로컬 정보를 포함할 것을 보장하는 미가공 모드로 전달된다.
C. 슬라이스 레이어 신택스 구조
도 4 및 도 5를 참조하면, 압축된 비디오 비트스트림(도 1의 195)은 압축된 순차 비디오 프레임 또는 다른 픽처(예를 들어, 인터페이스 프레임 또는 인터레이스 필드 포맷 픽처)의 시퀀스에 관한 정보를 포함한다. 비트스트림은 도 2의 디코더(200)와 같은 디코더에 의해 디코딩되는 몇몇 계층적 레이어들로 조직된다. 가장 높은 레이어는 시퀀스 레이어이며, 이것은 프레임의 전체 시퀀스에 관한 정보를 갖는다. 또한, (앞서 요약한 바와 같이) 각각의 압축된 비디오 프레임은 3개의 계층적 레이어들, 즉, (상단에서 하단으로) 픽처, 매크로블럭 및 블럭; 및 선택적으로 픽처와 매크로블럭 레이어 간의 슬라이스 레이어로 구조화되는 데이터로 구성된다.
도 4는 픽처 레이어(도 5의 500)에 관한 데이터가 후속하는 시퀀스 헤더(410)를 포함하는 시퀀스 레이어(400)에 대한 신택스 도면이다. 시퀀스 헤더(410)는 디코더에 의해 프로세싱되고 시퀀스를 디코딩하는 데 사용되는 몇몇 시퀀스-레벨의 엘리먼트를 포함한다.
도 5는 인터레이스 인트라-코딩된 프레임("인터페이스 I-프레임")에 대한 픽처 레이어(500)에 대한 신택스 도면이다. 순차 I-프레임, P-프레임 및 B-프레임과 같은 다른 픽처에 대한 신택스 도면은 다수의 유사한 신택스 엘리먼트들을 갖는다. 픽처 레이어(500)는 매크로블럭 레이어(520)에 관한 데이터가 후속하는 픽처 헤더(510)를 포함한다. 픽처 헤더(510)는 디코더에 의해 프로세싱되고 대응하는 프레임을 디코딩하는 데 사용되는 몇몇 픽처-레벨의 엘리먼트들을 포함한다. 그러한 엘리먼트들 중 몇몇은 그것의 존재가 시퀀스-레벨의 엘리먼트 또는 앞선 픽처-레벨의 엘리먼트에 의해 시그널링되거나 암시되는 경우에만 존재한다.
도 6은 매크로블럭 레이어(520)에 관한 데이터가 후속하는 슬라이스 헤더(610)를 포함하는 슬라이스 레이어(600)에 대한 신택스 도면이다. 슬라이스 헤더(610)를 구성하는 엘리먼트는 다음의 표 1에도 도시된 바와 같이, 슬라이스 주소(SLICE_ADDR) 엘리먼트(620) 및 픽처 헤더 존재 플래그(PIC_HEADER_FLAG) 엘리먼트(630)를 포함한다.
슬라이스 주소 엘리먼트(620)는 고정-길이의 9-비트 신택스 엘리먼트이다. 슬라이스 내의 첫번째 매크로블럭 로우의 로우주소는 이 신택스 엘리먼트 내에 바이너리 인코딩된다. 설명된 구현에서, 이 신택스 엘리먼트의 범위는 1에서 511까 지이며, 여기서, 최대 픽처 크기 8192는 최대 512개의 매크로블럭 로우들에 대응한다.
PIC_HEADER_FLAG(630)는 슬라이스 헤더 내에 존재하는 1-비트의 신택스 엘리먼트이다. PIC_HEADER_FLAG=0이면, 픽처 헤더 정보는 슬라이스 헤더 내에서 반복되지 않는다. PIC_HEADER_FLAG=1이면, 이 슬라이스를 포함하는 픽처 레이어 내에 나타나는 픽처 헤더(도 5의 510)의 정보는 슬라이스 헤더 내에서 반복된다.
슬라이스-레이어 비트스트림
SLICE() { |
비트 개수 |
|
SLICE_ADDR |
9 |
|
PIC_HEADER_FLAG |
1 |
|
if(PIC_HEADER_FLAG == 1 { |
|
|
PICTURE_LAYER() |
|
|
} |
|
|
for('all macroblocks') { |
|
|
MB_LAYER() |
|
|
} |
|
|
} |
|
|
3. 독립적으로 디코딩가능한 유닛 시작 코드
설명된 비디오 인코더/디코더의 비트스트림 신택스에서, 압축된 비디오 데이터의 독립적으로 디코딩가능한 유닛(IDU)은 시작 코드(SC; start code)라고 불리는 식별자로 시작한다. IDU는 단일의 픽처, 슬라이스(즉, 픽처 내의 매크로블럭들의 그룹), 픽처들의 그룹(GOP), 또는 시퀀스 헤더를 참조할 수 있다.
시작 코드는 고유한 3-바이트의 시작 코드 프리픽스(SCP; start code prefix) 및 1-바이트의 시작 코드 서픽스(SCS; start code suffix)로 구성된 4 바이트의 시퀀스이다. SCP는 3 바이트(0x000001)의 고유한 시퀀스이다. SCS는 시작 코드를 후속하는 IDU의 타입을 식별하는 데 사용된다. 예를 들어, 픽처 이전의 시작 코드의 서픽스는 슬라이스 이전의 시작 코드의 서픽스와는 다르다. 시작 코드는 항상 바이트-정렬된다.
캡슐화 메커니즘(EM; encapsulation mechanism)은 비트스트림 내의 시작 코드 프리픽스의 에뮬레이션을 방지하기 위해 기술된다. 캡슐화 이전의 압축된 데이터는 미가공의 독립적으로 디코딩가능한 유닛(RIDU)라고 불리지만, 캡슐화된 IDU(EIDU)는 캡슐화 이후의 데이터를 나타낸다.
다음의 섹션은 시작 코드 및 캡슐화가 어떻게 동작하는지에 관한 인코더-측의 관점을 제공한다. 섹션 E.2는 디코더에서 시작 코드 및 EIDU의 검출을 지정한다. 섹션 E.3은 EIDU로부터의 RIDU의 추출을 다룬다. 섹션 E.4는 다양한 IDU 타입들에 대한 시작 코드 서픽스를 지정한다.
A. 시작 코드 및 캡슐화 - 인코더 관점
EIDU를 획득하기 위한 RIDU의 캡슐화가 이하에 설명된다.
단계 1 : RIDU의 끝에 추적용 "1" 비트가 추가된다. 이제, EM은 IDU가 바이트-정렬된 위치에서 끝나도록, IDU의 끝에 0 내지 7의 비트를 첨부한다. 이러한 "채워넣기(stuffing)" 비트의 값은 "0"이다. 결과적으로, 이 단계의 끝에서, IDU는 정수 개수의 바이트로 나타나는데, 이 때, IDU의 마지막 바이트는 0 값의 바이트일 수 없다. 결과로서 생긴 바이트의 스트링은 IDU의 페이로드 바이트라고 불린다.
단계 2 : 3-바이트의 시작 코드 프리픽스(0x000001), 및 IDU 타입을 식별하는 적절한 시작 코드 서픽스는 EIDU의 시작부에 배치된다.
단계 3 : 후속하는 에뮬레이션 방지 프로세스를 통해 IDU의 페이로드 바이트를 처리함으로써 EIDU의 나머지가 형성된다. IDU 내의 시작 코드 프리픽스의 에뮬레이션은 바이트-채워넣기를 통해 제거된다. 에뮬레이션 방지 프로세스는 다음의 동작과 같다.
1) 연속적인 0x00 값의 2 바이트와 (LSB 값에 상관없이) 그 6개의 MSB 내에 0값을 포함하는 1바이트의 순서로 이루어진 페이로드 내의 각 스트링을, 0x00 값의 2바이트, 0x03 값의 1바이트 및 본래의 3바이트 데이터 스트링의 마지막 바이트와 동일한 1바이트의 순서로 이루어진 스트링으로 교체한다. 이 프로세스는 표 2에 도시된다.
에뮬레이션 방지 패턴 교체
교체될 패턴 |
교체 패턴 |
0x00, 0x00, 0x00 |
0x00, 0x00, 0x03, 0x00 |
0x00, 0x00, 0x01 |
0x00, 0x00, 0x03, 0x01 |
0x00, 0x00, 0x02 |
0x00, 0x00, 0x03, 0x02 |
0x00, 0x00, 0x03 |
0x00, 0x00, 0x03, 0x03 |
단계 3 : 3-바이트의 시작 코드 프리픽스(0x000001), 및 IDU 타입을 식별하는 적절한 시작 코드 서픽스는 IDU의 시작부에 첨부된다. 결과로서 생긴 페이로드는 캡슐화된 IDU이다.
인코더는 또한, EIDU의 끝 이후에, 임의의 개수의 0 값의 채워넣기 바이트를 삽입하는 것이 허용된다. 동등하게, 임의의 개수의 0 값의 채워넣기 바이트는 시작 코드 프리픽스 이전에 삽입될 수 있다. 시작 코드는 이들 0 값의 채워넣기 바이트가 존재하더라도 디코더에 의해 검출될 수 있도록 구조화된다. H.320과 같은 임의의 전송 환경에서, 인코더는 이러한 특징을 이용하여, 요구 시, 별도의 0 값의 채워넣기 바이트를 삽입할 수 있으며, 이것은 바이트 경계에의 의도된 비트스트림의 정렬의 추적을 잃었더라도, 디코더가 시작-코드의 위치를 빨리 되찾을 수 있게 할 수 있다. 또한, 이들 0 값의 채워넣기 바이트는 비트스트림을 스플라이싱(splicing), 고정적인 비트-레이트 채널을 채우는 등에도 유용하다. 시작 코드 이전, 또는 EIDU의 끝의 0 값의 채워넣기 바이트는 캡슐화 메커니즘을 통해 프로세싱되지 않고, RIDU 데이터만이 그러한 프로세싱을 요구한다.
B. 시작 코드 및 EIDU의 검출
EIDU의 검출은 시작 코드 프리픽스에 대한 검색으로 시작한다.
바이트-정렬된 위치에서부터 시작하는 시작 코드의 검출. 바이트-정렬을 상실할 수 없거나, 바이트 정렬이 설정되었던 디코더에서, 다음과 같이 시작 코드 검출이 수행된다.
1. 0x00 값의 2 이상의 바이트 다음에 0x01 값의 바이트가 후속하는 스트링이 발견될 때마다, 시작 코드 프리픽스 검출이 선언된다.
2개의 연속적인 시작-코드 프리픽스가 검출될 때, 그들 간의 페이로드 비트스트림은 새로운 EIDU로서 선언된다.
디코더 내의 바이트 정렬의 상실 후의 시작 코드의 검출. (몇몇 전송 환경에서 발생할 수 있는 바와 같이) 바이트-정렬을 상실한 디코더에서, 시작-코드 프리픽스 검출 및 바이트-정렬 검출은 다음과 같이 수행된다. 0x00 값의 3 이상의 바이트의 스트링이 발견되고, 그 다음에 임의의 0이 아닌 바이트가 후속한다는 것이 발견될 때마다, 시작 코드 프리픽스 검출이 선언되고, 0이 아닌 바이트 내의 첫번째의 0이 아닌 비트가 바이트-정렬된 시작 코드의 마지막 비트가 되도록 바이트 정렬이 복구되는 것으로 이해된다.
C. EIDU로부터의 RIDU의 추출
캡슐화된 IDU로부터의 미가공의 IDU의 추출이 이하에 설명된다.
단계 1 : 시작-코드 서픽스는 IDU의 타입을 식별하는 데 사용된다.
단계 2 : 제1 단계는 EIDU의 끝에서 0값의 채워넣기 바이트를 삭제하는 것이다. 이 단계 후에, IDU의 마지막 바이트는 0이 아닌 값을 가져야 한다.
단계 3 : 에뮬레이션 방지에 사용된 바이트가 검출되고 삭제된다. 이 프로세스는 다음과 같다.
0x00 값의 2 바이트의 스트링에 0x03의 바이트가 후속할 때마다, 0x03의 바이트는 에뮬레이션 방지 바이트인 것으로 이해되고 폐기된다.
이 프로세스는 표 3에 도시된다.
에뮬레이션 방지 데이터의 디코더 제거
교체할 패턴 |
교체 패턴 |
0x00, 0x00, 0x03, 0x00 |
0x00, 0x00, 0x00 |
0x00, 0x00, 0x03, 0x01 |
0x00, 0x00, 0x01 |
0x00, 0x00, 0x03, 0x02 |
0x00, 0x00, 0x02 |
0x00, 0x00, 0x03, 0x03 |
0x00, 0x00, 0x03 |
다음의 바이트 패턴이 비트스트림 내에 나타내는 경우, 에러 상태를 나타낸다(디코더에 의한 적절한 바이트 정렬의 상실은 에러 상태로 간주된다는 것을 유념).
a) 0x00 값의 2 바이트 다음에, 0x02의 바이트가 후속하는 스트링은 에러 상태를 나타낸다.
b) 0x00 값의 3 이상의 바이트의 스트링은 0x01의 바이트가 후속하지 않는 경우, 에러 상태이다(0의 2 이상의 바이트에 0x01 값의 바이트가 후속하고, 바이트 정렬이 상실되지 않은 경우, 후속하는 시작 코드의 검출이 선언된다는 것을 유념).
c) 0x00 값의 2 바이트 다음에, 0x03 값의 바이트가 후속하고, 그 다음에, 0x00, 0x01, 0x02, 또는 0x03 중 하나가 아닌 바이트가 후속하는 스트링.
단계 4 : IDU의 마지막 바이트에서 마지막의 0이 아닌 비트가 식별되고, 그 0이 아닌 비트, 및 후속하는 "0" 비트들 모두가 폐기된다. 결과는 미가공의 IDU이다.
D. IDU 타입에 대한 시작-코드 서픽스
다양한 IDU 타입에 대한 시작 코드 서픽스는 표 4에 표시된다.
다양한 IDU 타입에 대한 시작 코드 서픽스
시작 코드 서픽스 |
IDU 타입 |
0x00 |
SMPTE Reserved |
0x01-0x09 |
SMPTE Reserved |
0x0A |
End-of-Sequence |
0X0B |
Slice |
0x0C |
Field |
0x0D |
Frame |
0x0E |
Entry-point Header |
0x0F |
Sequence Header |
0x10-0x1A |
SMPTE Reserved |
0x1B |
Slice Level User Data |
0x1C |
Field Level User Data |
0x1D |
Frame Level User Data |
0x1E |
Entry-point Level User Data |
0x1F |
Sequence Level User Data |
0x20-0x7F |
SMPTE Reserved |
0x80-0xFF |
Forbidden |
SequenceHeader 서픽스는 시퀀스 헤더(도 4의 410)를 포함하는 IDU를 식별하기 위해 송신된다.
Entry-point Header 서픽스는 엔트리-포인트 헤더를 포함하는 IDU를 식별하기 위해 송신된다.
Picture 서픽스는 픽처(도 3의 320) 및 픽처 헤더(도 5의 510)를 포함하는 IDU를 식별하기 위해 송신된다.
Field 서픽스는 2개의 분리된 필드로서 코딩되는 픽처의 두번째 필드를 포함하는 IDU를 식별하기 위해 송신된다.
Slice 서픽스는 슬라이스(도 3의 320) 및 슬라이스 헤더(도 6의 610)를 포함하는 IDU를 식별하기 위해 송신된다.
시퀀스, 엔트리-포인트, 프레임, 필드 및 슬라이스 레벨의 사용자 데이터 서픽스는 각각, 시퀀스, 엔트리-포인트, 프레임, 필드 및 슬라이스에 관련된 임의의 사용자 정의된 데이터를 전송하는 데 사용된다.
"End-of-sequence"는 현재의 시퀀스가 끝났음을 나타내는 선택적인 서픽스이며, 이 시퀀스에 대한 더 이상의 데이터는 전송되지 않을 것이다. "end-of-sequence"의 전송은 존재할 수 있지만, 시퀀스의 끝은 다음의 시퀀스의 헤더로부터 참조될 것임을 유념한다.
4. 슬라이스 레이어 독립
도시된 슬라이스 레이어(도 3의 320)는 독립적인 디코딩가능성 및 독립적인 재구성도 성취한다. 이것은, 슬라이스가 픽처(도 3의 310)의 다른 구역에서의 전송 에러 또는 패킷 분실과 관계없이, 디코더에서 에러없이 재구성될 수 있게 한다.
A. 독립적인 디코딩가능성
슬라이스 레이어(320)의 컨텐츠는 픽처의 다른 슬라이스 또는 구역 내의 픽처 컨텐츠와 독립적으로 디코딩된다. 새로운 슬라이스가 시작할 때, 인코더(100) 및 디코더(200)는 움직임 벡터 예측자, AC 및 DC 계수에 대한 예측자, 및 양자화 파라미터에 대한 예측자를 재설정한다. 다시 말하면, 예측과 관련하여, 슬라이스 내의 매크로블럭의 첫번째 로우는 픽처 내의 매크로블럭의 첫번째 로우인 것처럼 다루어진다. 이것은 계측자 내에 어떤 인터-슬라이스 의존성도 없음을 보장한다. 또한, 슬라이스가 사용될 때, (움직임 벡터 모드, 및 예측자에 대한 플래그와 같은) 픽처 레이어에서 (예를 들어, 비트 평면 코딩을 사용하여) 달리 코딩되는 매크로블럭 레벨의 정보는 변환 계수와 같은 다른 매크로블럭 레벨의 정보와 함께 로컬로 포함된다. 이것은 각각의 슬라이스가 독립적으로(즉, 픽처의 다른 슬라이스로부터 디코딩된 데이터에 의존하지 않고서) 디코딩될 수 있게 한다.
B. 독립적인 재구성
또한, 슬라이스의 재구성 프로세스는 픽처 내의 임의의 다른 슬라이스(예를 들어, 인접한 슬라이스)의 재구성과 독립적으로 수행된다. 따라서, 픽처 내의 인접한 슬라이스들 간의 경계에 걸쳐 달리 적용될 (상술된 인루프 블럭해제 또는 오버랩 필터링과 같은) 어떤 프로세스도 허용되지 않는다. 다시 말하면, 각각의 슬라이스의 상단 및 하단 매크로블럭 로우는, 그러한 경계 프로세스에 픽처의 상단 및 하단 매크로블럭 로우가 존재하는 것처럼 다루어진다.
오버랩 평활화
오버랩된 변환은 블럭 경계에 걸쳐 정보를 교환하는 수정된 블럭 기반의 변환이다. 잘 설계된 오버랩된 변환으로, 블럭킹 현상은 최소화될 수 있다. 인트라 블럭에 대해, 예시된 비디오 코덱은 8×8 블럭 변환을 필터링 동작(오버랩 평활화라고 불림)과 연결함으로써, 오버랩된 변환을 시뮬레이트한다. 분리된 2개의 인트라 블럭이 평활화되는 8×8 블럭의 가장자리(사실상, 오버랩된 변환)는 이 인터페이스에서 구현된다. 단, 오버랩 평활화는 어떤 경우에도 슬라이스 경계에 결쳐 수행되지 않는다.
시퀀스 레이어 신택스 엘리먼트 OVERLAP(도 4의 420)이 1로 설정되는 경우, 필터링 동작은 루미넌트와 색도 둘 다의 채널에 대해, 2개의 이웃하는 인트라 블럭의 가장자리에 걸쳐 조건부로 수행될 수 있다. 이 필터링 동작(오버랩 평활화라고 불림)은 프레임을 디코딩하는 것에 후속하여, 인루프 블럭해제 이전에 수행된다. 그러나, 오버랩 평활화는 전체 프레임을 디코딩한 후에 평활화하는 것과 기능적으로 동일하기 때문에, 관련된 매크로블럭 슬라이스가 디코딩된 후에 수행될 수 있다.
도 7은 I 블럭을 갖는 P-프레임의 일부분에 대해 수행되는 오버랩 평활화의 예를 도시한다. 이것은 휘도 또는 색도 채널일 수 있다. I 블럭은 회색이고(또는 망상선(crosshatch)으로 되어 있고), P 블럭은 흰색이다. 이 도시에서, 오버랩 평활화가 적용되는 가장자리 인터페이스는 망상선 패턴으로 표시된다. 오버랩 평활화는 분리시키는 경계의 양쪽의 2개의 픽셀에 적용된다. 본 명세서에서는 프레임의 우측 하단 구역이 예로서 도시된다. 픽셀은 개별 셀들을 차지하고, 블럭은 굵은 선으로 분리되어 있다. 진한 원은 양 방향으로 필터링되는 2×2 픽셀 코너 서브블럭을 표시한다.
도 7의 하부 도면은 4개의 라벨 붙여진 픽셀을 도시하는데, a0 및 a1는 수직 블럭 가장자리의 좌측에 있고, b1 및 b0은 수직 블럭 가장자리의 우측에 있다. 상부 도면은 수평의 가장자리에 걸쳐 있는 p0, p1, q1 및 q0으로 표시된 픽셀을 도시한다. 다음의 섹션은 이들 4개의 픽셀 위치에 적용되는 필터를 설명한다.
오버랩 평활화는 언클램핑된(unclamped) 16 비트 재구성에 대해 수행된다. 이것은, 오버랩 평활화에 관련된 순방향 프로세스가 픽셀 값에 대한 허용가능한 8비트 범위를 넘어서는 범위 확장에 이를 수 있기 때문에 필요하다. 오버랩 평탄화의 결과는 8비트까지로 클램핑되고, 나머지 픽셀들은 오버랩 평활화에 상관없게 된다.
수직 가장자리(상술된 예의 픽셀 a0, a1, b1, b0)가 우선 필터링되고, 다음으로 수평의 가장자리(픽셀 p0, p1, q1, q0)가 필터링된다. 필터링의 첫번째 단계(수직 가장자리 평활화) 다음의 중간 결과는 16비트에 저장된다. 어느 가장자리에든 걸쳐 있는 4개의 픽셀들에 적용되는 코어 필터(core filter)는 이하에 제공된다.
필터링되는 원래의 픽셀은 (x0, x1, x2, x3)이다. r0 및 r1은 라운딩(rounding) 파라미터이며, 이것은 3 및 4의 값을 교대로 취하여, 통계적으로 편향되지 않은 라운딩을 보장한다. 원래의 값은 구현하기에 명백히 용이한 엔트리를 갖는 매트릭스에 의해 필터링된다. 이들 값은 라운딩 인자를 추가한 후에, 3 비트만큼 비트 시프팅되어, 필터링된 출력 (y0, y1, y2, y3)을 제공한다.
수평과 수직 가장자리 필터 둘 다에 대해, 블럭 내의 숫자매김이 1에서 시작한다는 가정 하에, 라운딩 값은 홀수-인덱싱된 컬럼과 로우 대해 각각 r0=4, r1=3이다. 짝수-인덱싱된 컬럼/로우에 대해서는, r0=3 및 r1=4이다. 필터링은 제자리(in-place) 16비트 동작으로서 정의되며, 따라서, 원래의 픽셀은 평활화 후에 오버라이트된다. 수직의 가장자리 필터링에 있어서, 픽셀 (a0, a1, b1, b0)은 (x0, x1, x2, x3)에 대응하고, (x0, x1, x2, x3)은 (y0, y1, y2, y3)으로 필터링된다. 마찬가지로, 수평의 가장자리 필터링에 있어서, 각각 (p0, p1, q1, q0)과 대응을 이룬다.
도 7에서 진한 원으로 표시된 2×2 코너 내의 픽셀은 양방향으로 필터링된다. 필터링의 순서는 그들의 최종 값을 결정하기 때문에, 비트 정확도를 위해 순서(수직 가장자리 필터링 다음에는 수평 가장자리 필터링)를 유지하는 것이 중요하다. 개념 상, 클램핑은 양방향 필터링 스테이지에 후속하여, 필터링되는 모든 픽셀들에 대해 수행되는 것이다. 그러나, 필터링에 클램핑을 결합하는 몇몇 계산상의 이점이 있을 수 있다.
인루프 블럭해제 필터링
루프 필터링은 블럭 경계에서 비디오 인코더/디코더에 의해 불연속을 평활화하도록 수행되는 프로세스이다. 시퀀스 레이어 신택스 엘리먼트 LOOPFILTER(도 4의 430)가 1로 설정되면, 필터링 동작은 각각의 재구성된 프레임에 대해 수행된다. 이 필터링 동작은 재구성된 프레임을 움직임 예측 코딩에 대한 기준으로서 이용하기 전에 수행된다.
루프 필터링의 목적은 블럭 경계에서의 불연속을 평활화하는 것이기 때문에, 필터링 프로세스는 이웃하는 블럭들에 접해있는 픽셀들에 대해 동작한다. P 픽처에 대해, 블럭 경계는 8×8 역 변환이 사용되는지, 8×4 역 변환이 사용되는지, 4×8 역 변환이 사용되는지에 따라 매 4번째, 8번째, 12번째 등의 픽셀 로우 또는 컬럼에서 발생할 수 있다. I 픽처에 대해, 필터링은 8번째, 16번째, 24번째 등의 픽셀 로우 및 컬럼에서 발생한다.
I 픽처에 대해, 모든 8×8 블럭 경계에서 블럭해제 필터링이 수행되지만, 예외적으로, 슬라이스 경계(픽처 가장자리와 유사하게 다루어짐)에서는 블럭해제 필터링이 수행되지 않는다. 도 8 및 도 9는 I-픽처 프레임의 수평 및 수직 접경 구역에 따라 필터링되는 픽셀들을 도시한다. 도면은 성분(루마, Cr 또는 Cb) 평면의 상단 좌측 코너를 도시한다. 십자가는 픽셀을 표시하고, 원으로 둘러싸인 십자가는 필터링되는 픽셀을 표시한다.
도면이 나타내는 바와 같이, 픽처 또는 슬라이스의 상단 수평 라인 및 첫번째 수직 라인은 필터링되지 않는다. 도시되지는 않았지만, 픽처 또는 슬라이스의 하단 수평 라인 및 마지막 수직 라인도 필터링되지 않는다. 더 공식적인 표현으로, 수평 라인 (7,8), (15,16), ..., ((N-1)*8-1, (N-1)*8)이 필터링되고, 수직 라인 (7,8), (15,16), ..., ((M-1)*8-1, (M-1)*8)이 필터링되며, 여기서, N은 평면 내의 수평의 8×8 블럭의 개수이고(N*8은 수평의 프레임 크기), M은 프레임 내의 수직의 8×8 블럭의 개수이다(M*8은 수직의 프레임 크기).
픽셀이 필터링되는 순서는 중요하다. 프레임 내의 모든 수평의 경계 라인이 먼저 필터링되고, 다음으로, 수직의 경계 라인이 필터링된다.
P 픽처에 대해, 블럭은 인트라 또는 인터-코딩될 수 있다. 인트라-코딩된 블럭은 항상, 8×8 변환을 이용하여 샘플을 변환하고, 8×8 블럭 경계는 항상 필터링된다. 인터-코딩된 블럭은 8×8, 8×4, 4×8 또는 4×4 역 변환을 이용하여 레지듀얼 에러를 나타내는 샘플을 형성할 수 있다. 이웃하는 블럭의 상태에 따라, 현재의 블럭과 이웃하는 블럭 간의 경계는 필터링될 수도 있고 필터링되지 않을 수도 있다. 어느 경우든, 픽처 또는 슬라이스의 경계 가장자리는 필터링되지 않는다.
필터 동작
이 섹션은 상술된 바와 같이, I 및 P 프레임 내의 블럭 경계 픽셀에 대해 수행되는 필터링 동작을 설명한다.
로우 또는 컬럼 내에서 필터링될 연속적인 픽셀의 최소 개수는 4이고, 로우 또는 컬럼 내의 픽셀의 총 개수는 항상 4의 배수일 것이므로, 필터링 동작은 4개의 픽셀의 세그먼트에 대해 수행된다.
예를 들어, 2개의 블럭들 간의 수직 경계를 형성하는 8개의 픽셀 쌍이 필터링되면, 그 8개의 픽셀은 도 12에 도시된 바와 같이, 2개의 4-픽셀 세그먼트(1100)로 나뉘어 진다. 각각의 4-픽셀 세그먼트에서, X로 표시된 세번째 픽셀 쌍이 우선 필터링된다. 이 필터 동작의 결과는 이하에 설명되는 바와 같이, 세그먼트 내의 다른 3개의 픽셀도 필터링되는지를 결정한다.
도 10은 세번째 픽셀 쌍에 대해 수행된 필터링 동작에 사용되는 픽셀(1200)을 도시한다. 픽셀 P4 및 P5는 필터 동작에서 변경될 수 있는 픽셀 쌍이다.
도 13의 의사코드(1300)는 각각의 세그먼트 내의 세번째 픽셀 쌍에 대해 수행된 필터링 동작을 도시한다. filter_other_3_pixels 값은 세그먼트 내의 남아있는 3개의 픽셀 쌍도 필터링되는지를 나타낸다. filter_other_3_pixels가 참이면, 다른 3개의 픽셀 쌍은 필터링된다. filter_other_3_pixels가 거짓이면, 그것들은 필터링되지 않고, 필터링 동작은 다음의 4-픽셀 세그먼트로 진행한다. 의사코드(도 14의 1400)는 filter_other_3_pixels가 참인 경우 첫번째, 두번째 및 네번째 픽셀 쌍에 대해 수행되는 필터링 동작을 도시한다.
이 섹션은 예시의 목적 상, 수직 경계를 사용하였다. 수평의 경계 픽셀을 필터링하는 데 동일한 동작이 사용된다.
5. 컴퓨팅 환경
슬라이스 레이어 코딩의 상술된 구현은 다른 예들 중에 컴퓨터; 이미지 및 비디오 레코딩, 전송 및 수신 장치; 휴대용 비디오 플레이어; 비디오 회의; 웹 비디오 스트리밍 어플리케이션 등을 포함하는 이미지 및 비디오 시그널 프로세싱이 수행되는 다양한 장치들 중 임의의 장치에 대해 수행될 수 있다. 이미지 및 비디오 코딩 기술은 하드웨어 회로(예를 들어, ASIC, FPGA 등의 회로) 뿐만 아니라, 도 10에 도시된 것과 같은 컴퓨터 또는 다른 컴퓨팅 환경 내에서(중앙 프로세싱 유닛(CPU) 상에서 실행되는지, 전용 그래픽 프로세서 상에서 실행되는지, 비디오 카드 상에서 실행되는지 등에 상관없이) 실행되는 이미지 및 비디오 프로세싱 소프트웨어로 구현될 수 있다.
도 10은 설명된 슬라이스 레이어 코딩이 구현될 수 있는 적합한 컴퓨팅 환경(1000)의 일반화된 예를 도시한다. 본 발명은 다양한 범용 또는 특수 목적 컴퓨팅 환경에서 구현될 수 있기 때문에, 컴퓨팅 환경(1000)은 본 발명의 용도 또는 기능의 범위에 대해 어떤 제한을 제시하는 것으로 의도되지 않는다.
도 10을 참조하면, 컴퓨팅 환경(1000)은 적어도 하나의 프로세싱 유닛(1010) 및 메모리(1020)를 포함한다. 도 10에서, 이 가장 기본적인 구성(1030)은 점선 내에 포함된다. 프로세싱 유닛(1010)은 컴퓨터-실행가능 명령어들을 실행하고, 실제 또는 가상 프로세서일 수 있다. 멀티-프로세싱 시스템에서, 프로세싱 능력을 증가시키기 위해, 복수의 프로세싱 유닛들이 컴퓨터-실행가능 명령어들을 실행한다. 메모리(1020)는 휘발성 메모리(예를 들어, 레지스터, 캐시, RAM), 비휘발성 메모리(예를 들어, ROM, EEPROM, 플래시 메모리 등) 또는 이 둘의 임의의 결합일 수 있다. 메모리(1020)는 설명된 슬라이스 레이어 코딩을 구현하는 소프트웨어(1080)를 저장한다.
컴퓨팅 환경은 추가적 특징을 가질 수 있다. 예를 들어, 컴퓨팅 환경(1000)은 저장장치(1040), 하나 이상의 입력 장치(1050), 하나 이상의 출력 장치(1060) 및 하나 이상의 통신 접속부(1070)를 포함한다. 버스, 제어기 또는 네트워크와 같은 상호접속 메커니즘(도시되지 않음)은 컴퓨팅 환경(1000)의 컴포넌트들을 상호접속시킨다. 일반적으로, 오퍼레이팅 시스템 소프트웨어(도시되지 않음)는 컴퓨팅 환경(1000) 내에서 실행되는 다른 소프트웨어에 오퍼레이팅 환경을 제공하고, 컴퓨팅 환경(1000)의 컴포넌트들의 활동을 조정한다.
저장장치(1040)는 분리형 또는 비분리형일 수 있고, 자기 디스크, 자기 테이프 또는 카세트, CD-ROM, CD-RW, DVD, 또는 정보를 저장하는 데 사용될 수 있고 컴퓨팅 환경(1000) 내에서 액세스될 수 있는 임의의 다른 매체를 포함한다. 저장장치(1040)는 슬라이스 레이어 코딩을 수행하는 오디오 인코더를 구현하는 소프트웨어(1080)에 대한 명령어들을 저장한다.
입력 장치(들)(1050)는 키보드, 마우스, 펜 또는 트랙볼, 음성 입력 장치, 스캐닝 장치, 또는 컴퓨팅 환경(1000)에 입력을 제공하는 다른 장치와 같은 터치 입력 장치일 수 있다. 오디오에 대해, 입력 장치(들)(1050)는 사운드 카드, 또는 아날로그 또는 디지털 형태로 오디오 입력을 수용하는 유사한 장치, 또는 컴퓨팅 환경에 오디오 샘플을 제공하는 CD-ROM 판독기일 수 있다. 출력 장치(들)(1060)는 디스플레이, 프린터, 스피커, CD-라이터, 또는 컴퓨팅 환경(1000)으로부터의 출력을 제공하는 다른 장치일 수 있다.
통신 접속부(들)(1070)는 통신 매체를 통한 다른 컴퓨팅 엔티티로의 통신을 가능하게 한다. 통신 매체는 컴퓨터-실행가능한 명령어, 압축된 오디오 또는 비디오 정보, 또는 다른 데이터를 변조된 데이터 신호로 변환한다. 변조된 데이터 신호는 신호 내에 정보를 인코딩하는 방식으로 설정 또는 변경된 특징들 중 하나 이상을 갖는 신호이다. 예를 들어, 통신 매체는 전자, 광, RF, 적외선, 음향 또는 다른 반송파로 구현된 유선 또는 무선 기술을 포함하지만, 이것으로 제한되지 않는다.
본 명세서의 슬라이스 레이어 코딩/디코딩 기술은 컴퓨터-판독가능 매체의 일반 문맥으로 설명될 수 있다. 컴퓨터-판독가능 매체는 컴퓨팅 환경 내에서 액세스될 수 있는 임의의 이용가능한 매체이다. 예를 들어, 컴퓨팅 환경(1000)에서, 컴퓨터-판독가능 매체는 메모리(1020), 저장장치(1040), 통신 매체 및 상술된 것들의 임의의 결합을 포함하지만, 이것으로 제한되지 않는다.
본 명세서의 슬라이스 레이어 코딩은 대상이 되는 실제 또는 가상 프로세서 상의 컴퓨팅 환경에서 실행되는 프로그램 모듈 내에 포함된 것과 같은 컴퓨터 실행가능 명령어의 일반적 문맥으로 설명될 수 있다. 일반적으로, 프로그램 모듈로는 특정 태스크를 수행하거나 특정 추상 데이터 타입을 구현하는 루틴, 프로그램, 라이브러리, 오브젝트, 클래스, 컴포넌트, 데이터 구조 등이 있다. 프로그램 모듈의 기능은 여러 실시예에서 요구되는 대로, 프로그램 모듈들 사이에서 결합 또는 분리될 수 있다. 프로그램 모듈에 대한 컴퓨터-실행가능 명령어들은 로컬 또는 분산 컴퓨팅 환경 내에서 실행될 수 있다.
표현의 목적 상, 상세한 설명은 "결정한다", "생성한다", "조정한다" 및 "적용한다"와 같은 용어를 사용하여, 컴퓨팅 환경에서의 컴퓨터 동작을 설명한다. 이러한 용어는 컴퓨터에 의해 수행되는 동작에 대한 고레벨의 추상이며, 인간에 의해 수행되는 동작과 혼동해서는 안된다. 이러한 용어에 대응하는 실제 컴퓨터 동작은 구현에 따라 다르다.
본 발명의 원리가 적용될 수 있는 다수의 가능한 실시예의 관점에서, 다음의 청구범위 및 그 동등물의 범위 및 취지 내에 포함될 수 있는 모든 그러한 실시예를 본 발명으로서 주장한다.