Next generation Video coding을 둘러보다가, CABAC에 대한 논문들을 많이 보았는데, 도대체 CABAC이란 무엇인가? 이는 우리가 요즘 흔히 사용되는 H.264/AVC에서부터 그 시작을 찾을 수 있다.
H.264는 Joint Video Team (JVT)이라 하여, MPEG group과 ITU-T가 협동하여 만든 Video Coding Standard이다. 각 그룹에서는 이 표준을 서로 다르게 부르지만, Joint하여 표준을 제정했으므로 그 내용은 동일하여, H.264/AVC라고 한꺼번에 표기하여 부른다고 한다.
MPEG Group : MPEG-4 Part-10 / Advanced Video Coding (AVC)
ITU-T : H.264
우리가 컴퓨터에서 사용하는 Video file은 작은 용량을 유지하면서 높은 화질을 제공하기 위해서 여러가지 기법이 동원되는데, 일반적인 Video Decoder의 과정은 아래와 같다.
즉, 01000100111.... 등으로 encoded bit가 들어오게 되면, 먼저 이를 entropy decoding을 통해서 필요한 정보들로 해석한 후, 이를 Motion compensation, intra prediction, inverse quantization 의 과정들을 진행한 후, 이를 종합하여 최종적으로 이미지 정보로 출력하게 된다.
이 때, H.264/AVC의 2가지 표준은 Entropy decoding단에서 바뀌게 되는데
entropy_coding_mode가 1이면 Context-based Adaptive Binary Arithmetic Coding (CABAC) 이 사용되고, 0이면 Varible-Length Coding (VLC)가 사용된다.
CABAC에서 사용되는 Adaptive Arithmetic Coding은 앞서 포스팅한 Arithmetic Coding을 기반한 알고리즘이 사용되며 보다 자세한 기술적인 부분은 아래의 논문을 읽을 것을 추천한다.
"Context-Based Adaptive Binary Arithmetic Coding in the H.264/AVC Video Compression Standard," Detlev Marpe, Heiko Schwarz, and Thomas Wiegand, IEEE Transaction on circuits and systems for video technology, Vol. 13, No. 7, July 2003.