컨텍스트 적응형 가변 길이 코딩

Context-adaptive variable-length coding

컨텍스트 적응형 가변 길이 코딩(CAVLC)H.264/MPEG-4 AVC 비디오 인코딩에 사용되는 엔트로피 코딩의 한 형태다. 그것은 거의 모든 엔트로피 코더와 마찬가지로 본질적으로 무손실 압축 기술이다. H.264/MPEG-4 AVC에서는 잔차, 지그재그 순서, 변환 계수 블록을 인코딩하는 데 사용된다. 문맥 기반 적응형 바이너리 산술 부호화(CABAC)에 대한 대안이다. CAVLC는 데이터를 상당히 효과적으로 압축하지는 않지만 CABAC보다 디코딩하는 데 상당히 적은 처리량을 요구한다. CAVLC는 기준선 및 확장 프로파일에서 지원되지 않는 CABAC와는 달리 모든 H.264 프로파일에서 지원된다.

CAVLC는 4×4 (및 2×2) 블록의 변환 계수를 순서에 따라 나머지 지그재그 블록을 인코딩하는 데 사용된다. CAVLC는 정량화된 4×4 블록의 몇 가지 특성을 활용하도록 설계되었다.

  • 예측, 변환, 정량화 후 블럭은 일반적으로 희박하다(대부분 0을 포함한다).
  • 지그재그 스캔 후 0이 아닌 가장 높은 계수는 +/- 1. CAVLC는 콤팩트한 방식으로 고주파수 +/-1 계수의 수를 신호한다.
  • 인접 블록의 0이 아닌 계수 수는 상관 관계가 있다. 계수 개수는 조회 표를 사용하여 인코딩된다. 조회 테이블의 선택은 인접 블록의 0이 아닌 계수 개수에 따라 달라진다.
  • 0이 아닌 계수의 수준(규모)은 재주문된 배열(DC 계수 근처)의 시작 부분에서 더 높고 더 높은 주파수 쪽으로 더 낮은 경향이 있다. CAVLC는 최근 코드화된 레벨 크기에 따라 "레벨" 파라미터에 대한 VLC 조회 테이블의 선택을 조정하여 이를 활용한다.

코드화된 요소

인코딩 및 전송이 필요한 파라미터는 다음 표를 포함한다.

매개변수 설명
매크로블록형 코드화된 각 매크로 블록에 대한 예측 방법
코드화된 블록 패턴 매크로 블록 내에 코드화된 계수를 포함하는 블럭을 나타냄
Quantizer 매개 변수 참조 프레임 이전 QP 값에서 델타 값으로 전송됨
기준프레임지수 상호 예측을 위한 기준 프레임 식별
모션 벡터 예측 모션 벡터와의 차이(mvd)로 전송됨
잔차자료 각 4×4 또는 2×2 블록에 대한 계수 데이터

CAVLC 예제

요소 가치 코드
coeff_properties TotalCoeffs=5, T1s=3 0000100
T1 기호(4) + 0
T1 기호(3) - 1
T1 기호(2) - 1
레벨(1) +1 (Level_VLC0 사용) 1
레벨(0) +3(Level_VLC1 사용) 0010
토탈제로스 3 111
run_before(4) ZerosLeft=3; run_before=1 10
run_before(3) ZerosLeft=2; run_before=0 1
run_before(2) ZerosLeft=2; run_before=0 1
run_before(1) ZerosLeft=2; run_before=1 01
run_before(0) ZerosLeft=1; run_before=1 코드 필요 없음. 마지막 계수
코드 요소 가치 출력 배열
0000100 coeff_properties 총 Coeffs=5, T1s=3 비어 있음
0 T1 기호 + 1
1 T1 기호 - −1, 1
1 T1 기호 - −1, −1, 1
1 레벨 +1 1, −1, −1, 1
0010 레벨 +3 3, 1, −1, −1, 1
111 토탈제로스 3 3, 1, −1, −1, 1
10 전에 실행하다. 1 3, 1, −1, −1, 0, 1
1 전에 실행하다. 0 3, 1, −1, −1, 0, 1
1 전에 실행하다. 0 3, 1, −1, −1, 0, 1
01 전에 실행하다. 1 3, 0, 1, −1, −1, 0, 1

다음의 모든 예에서 Num-VLC0 표를 coeff_token 인코딩에 사용한다고 가정한다.

4x4CAVLC.svg

0, 3, 0, 1, -1, -1, 0, 0… TotalCoeffs = 5 (최대 주파수[4]에서 최저 주파수[0]로 색인화됨)

TotalZeros = 3

T1s = 3(사실상 후행은 4개가 있지만 3개만 "특수 케이스"로 인코딩할 수 있음)

인코딩:

이 블록의 전송 비트스트림은 00001000111001011101101101101101이다.

디코딩: 출력 배열이 아래와 같이 디코딩된 값에서 "빌트업"된다. 각 단계에서 출력 배열에 추가된 값은 밑줄이 그어져 있다.

디코더가 두 개의 0을 삽입했지만, TotalZeros는 3과 같으므로 다른 1 0이 가장 낮은 계수 앞에 삽입되어 최종 출력 배열이 0, 3, 0, 1, -1, 0, 1이 된다.

참고 항목

외부 링크