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… 순서