5.8 블록 복호화 ~ 5.12 디스플레이

Download Report

Transcript 5.8 블록 복호화 ~ 5.12 디스플레이

5.8 블록 복호화 ~ 5.12 디스플레이
방철석
블록 복호화
블록의 개수
블록 초기화
스케일러빌러티가 존재하지 않으면 복호
인터면 (B,P 프레임)
인트라면 (I 프레임)
블록 복호화
블록 복호화


인트라의 DC 계수는 따로 처리
인트라의 AC, 인터의 DC, AC 같은 방식
인트라 블록의 DC 계수



dc_dct_differential 값을 이용해 차이 값 dct_diff
를 구하여 이를 예측 값에 더한 값이 실제적인 DC
계수 값
DC 계수 복호화와 AC 계수 복호화로 구분
val = ( dc_dct_pred[0] += getDClum());
블록 복호화
인트라 AC 계수와 인터 DC, AC 계수
Intra_vlc_format
0
1
인트라 블록들
(macroblock_intra=1)
VLC 1 <표 5.33>
VLC 2 <표 5.37>
인트라가 아닌 블록들
(macroblock_intra=0)
VLC 1 <표 5.33>
VLC 1 <표 5.33>
- 가변길이 부호화 테이블
<표 5.33> ~ <표 5.40>page 388. ~ page 397.
- 복호화 되는 값들의 세가지 유형
1.
블록의 끝 : 블록 내에서 복호화 할 코드가 없음
2.
가변길이 코드
3.
고정길이 코드
인터 블록 복호화
AC 계수만 처리
end_of_block

64개의 데이터를 모두 처리하면 블록의 끝
이라는 표시
실질적인 픽처 생성
움직임 보상이 끝난 후 마지막 처리과정
차이값을 전송하기 때문에 복호화한 영상과
더하여 원 영상을 만듦
saturate, idtc, addblock, sumblock
불일치 제어



오류를 줄이는 방법
실수 연산 결과를 반올림을 통한 정수화
P type 매크로 132번 반복전에 I type 으로 교체
IDCT 블록 부호화
역DCT 식에 의해 역DCT를 수행
IDCT 초기화
void init_idct() {
iclp=iclip + 512;
for(I=-512; I<512; I++)
iclp[I]=(I<-256) ? –256 : ((I>255) ? 255 : I );
}
역DCT 처리 과정

Idctref()와 idct() 의 두 가지 형태로 나눠짐
addblock()
IDCT 이후의 마지막 수행 과정
부호기에서 DPCM 으로 영상을 생성

이전영상의 차이 값과 현재 영상의 픽셀 값
을 더하여 원 영상을 만드는 과정이 필요함
디스플레이
디더링




출력 시스템에 맞게 변환하는 과정
Y, Cb, Cr -> RGB 로 재배열
4x4 디더링 행렬의 형태로 처리
BMP 형태로 바꾸어 I,B,B,P,B,B… 순서