Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 4 MPEG-2 부호기 전체 구조와 알고리즘 ( 4.6 ~ 4.10 )

Similar presentations


Presentation on theme: "Chapter 4 MPEG-2 부호기 전체 구조와 알고리즘 ( 4.6 ~ 4.10 )"— Presentation transcript:

1 Chapter 4 MPEG-2 부호기 전체 구조와 알고리즘 ( 4.6 ~ 4.10 )
알기 쉬운 MPEG - 2 Chapter 4 MPEG-2 부호기 전체 구조와 알고리즘 ( 4.6 ~ 4.10 ) 2003 SUMMER SEMINAR Software and System Lab. 이좌형

2 Chapter 4.6 ~ 4.10 4.6 init() 초기화 과정 4.7 프레임 재순서화 4.8 프레임과 필드 설정
4.7 프레임 재순서화 4.8 프레임과 필드 설정 4.9 초기 프레임 설정 4.10 움직임 예측

3 MPEG – 2 부호기의 전체구조

4 Init() 초기화 과정

5 Init() 초기화 과정

6 Main() int main(argc,argv) int argc;char *argv[]; { if (argc!=3)
printf("\n%s, %s\n",version,author); printf("Usage: mpeg2encode in.par out.m2v\n"); exit(0); } readparmfile(argv[1]); /* read parameter file */ readquantmat(); /* read quantization matrices */ if (!(outfile=fopen(argv[2],"wb"))) /* open output file */ sprintf(errortext,"Couldn't create output file %s",argv[2]); error(errortext); init(); putseq(); fclose(outfile); fclose(statfile); return 0;

7 Init() static void init() { int i, size;
static int block_count_tab[3] = {6,8,12}; initbits(); init_fdct(); init_idct(); /* round picture dimensions to nearest multiple of 16 or 32 */ mb_width = (horizontal_size+15)/16; mb_height = prog_seq ? (vertical_size+15)/16 : 2*((vertical_size+31)/32); mb_height2 = fieldpic ? mb_height>>1 : mb_height; /* for field pictures */ width = 16*mb_width; height = 16*mb_height; chrom_width = (chroma_format==CHROMA444) ? width : width>>1; chrom_height = (chroma_format!=CHROMA420) ? height : height>>1; height2 = fieldpic ? height>>1 : height; width2 = fieldpic ? width<<1 : width; chrom_width2 = fieldpic ? chrom_width<<1 : chrom_width; block_count = block_count_tab[chroma_format-1];

8 메모리 공간 할당 for (i=0; i<3; i++) {
size = (i==0) ? width*height : chrom_width*chrom_height; if (!(newrefframe[i] = (unsigned char *)malloc(size))) error("malloc failed\n"); if (!(oldrefframe[i] = (unsigned char *)malloc(size))) if (!(auxframe[i] = (unsigned char *)malloc(size))) if (!(neworgframe[i] = (unsigned char *)malloc(size))) if (!(oldorgframe[i] = (unsigned char *)malloc(size))) if (!(auxorgframe[i] = (unsigned char *)malloc(size))) if (!(predframe[i] = (unsigned char *)malloc(size))) }

9 매크로 블록 할당 및 파일오픈 mbinfo = (struct mbinfo *)malloc(mb_width*mb_height2*sizeof(struct mbinfo)); if (!mbinfo) error("malloc failed\n"); blocks = (short (*)[64])malloc(mb_width*mb_height2*block_count*sizeof(short [64])); if (!blocks) /* open statistics output file */ if (statname[0]=='-') statfile = stdout; else if (!(statfile = fopen(statname,"w"))) { sprintf(errortext,"Couldn't create statistics output file %s",statname); error(errortext); }

10 프레임 재순서화 부호기 입력 I B B P B B P B B I B B P B B 코딩된 비트 스트림 I P B B P B B I P B B

11 프레임 번호 계산 for (i=0; i<nframes; i++) /* loop through all frames in encoding/decoding order */ { if (i==0 || (i-1)%M==0) /* I or P frame */ /* f: frame number in display order */ f = (i==0) ? 0 : i+M-1; if (f>=nframes) f = nframes - 1; } else /* B frame */ f = i - 1; pict_type = B_TYPE;

12 프레임 읽기 sprintf(name,tplorg,f+frame0); readframe(name,neworg);
void readframe(fname,frame) { switch (inputtype) case T_Y_U_V: read_y_u_v(fname,frame); break; } static void read_y_u_v(fname,frame) char name[128]; FILE *fd; sprintf(name,"%s.Y",fname); if (!(fd = fopen(name,"rb"))) { sprintf(errortext,"Couldn't open %s\n",name); error(errortext); } for (i=0; i<vertical_size; i++) fread(frame[0]+i*width,1,horizontal_size,fd); fclose(fd);

13 프레임 번호 계산 예 I, P frame f = (i==0) ? 0 : i+M-1 B frame f = i - 1
Example 1 - M = 3, i = 0  I frame - 0 == 0 f = 0 Example 2 - M = 3, i = 1  P frame – 1  f = 3 Example 3 - M = 3, i = 2  B frame - I – 1  f = 1

14 프레임과 필드 설정 순차주사와 격행주사 프레임 구조와 필드 구조 프레임 예측과 필드 예측 프레임 DCT와 필드 DCT

15 순차주사와 격행주사

16 프레임 DCT와 필드 DCT

17 Read Frame void readframe(fname,frame) { switch (inputtype)
case T_Y_U_V: read_y_u_v(fname,frame); case T_YUV: read_yuv(fname,frame); case T_PPM: read_ppm(fname,frame); default: break; }

18 Motion Estimation

19 Estimation

20 움직임 예측용 파라미터 파일 1 /* top_field_first */
/* frame_pred_frame_dct (I P B) */ /* concealment_motion_vectors (I P B) */ /* q_scale_type (I P B) */ /* intra_vlc_format (I P B)*/ /* alternate_scan (I P B) */ /* repeat_first_field */ /* progressive_frame */ /* P: forw_hor_f_code forw_vert_f_code search_width/height */ /* B1: forw_hor_f_code forw_vert_f_code search_width/height */ /* B1: back_hor_f_code back_vert_f_code search_width/height */ /* B2: forw_hor_f_code forw_vert_f_code search_width/height */ /* B2: back_hor_f_code back_vert_f_code search_width/height */

21 움직임 예측시 함수호출 관계

22 프레임 예측 과정

23 프레임 예측의 전체 구조

24 I 픽쳐 움직임 예측과정

25 P 픽쳐 움직임 예측 과정

26 B 픽쳐 움직임 예측 과정

27 전탐색 블록 매칭 알고리즘

28 프레임과 필드 픽쳐구조

29 프레임과 필드 움직임 예측

30 필드 예측

31 I 픽쳐와 P 픽쳐의 필드 예측

32 B 픽쳐의 필드 예측


Download ppt "Chapter 4 MPEG-2 부호기 전체 구조와 알고리즘 ( 4.6 ~ 4.10 )"

Similar presentations


Ads by Google