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

Slides:



Advertisements
Similar presentations
Tcl/Tk 민 인학 한국 Tcl/Tk 커뮤니티.
Advertisements

YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
제6장 조건문.
프로그래밍1 및 실습 (C언어) - 3장 기본자료형 (3.6부터 끝까지) -
어서와 Java는 처음이지! 제3장선택과 반복.
Vision System Lab, Sang-Hun Han
제 3 장 변수와 자료형.
Implement of Input and Interaction
Project #2-2. Pintos User Program
C++ Espresso 제1장 기초 사항.
Image & Video processing
제 8 장  파서 생성기 YACC 사용하기.
Chap 4. MPEG-2 부호기 전체 구조와 알고리즘
Chap 1. MPEG-2 서론 Chap 2. MPEG-2 기본 압축 알고리즘
Linux System Programming
C로 쉽게 풀어쓴 자료구조 © Copyright 생능출판사 2011
C로 쉽게 풀어쓴 자료구조 © Copyright 생능출판사 2005
Department of Computer Engineering
08. 디바이스 드라이버의 읽기와 쓰기 김진홍
Linux System Programming
Chapter 03 배열, 구조체, 포인터.
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
조 병 규 Software Quality Lab. 한국교통대학교
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
CHAP 3:배열, 구조체, 포인터.
제15장 파일 입출력 문자열을 출력하는 여러가지 방법 (15-2쪽) 문자열만 처리하는 입출력 함수
6장 비연결형 지향 프로토콜 Database Lab 강 우 석.
자료 구조: Chapter 3 (2)구조체, 포인터
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
Chapter 1 디지털 영상처리의 개념.
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express.
Department of Computer Engineering
AVR - Chapter 15 황 지 연.
Step Motor Device Driver
07. 디바이스 드라이버의 초기화와 종료 김진홍
제3장 스택과 큐.
Chapter 06. 선택문.
(ioctl, mmap, fsync&flush)
임베디드 실습 # LED, 7’Segment 제어
Department of Computer Engineering
제 3 장 상수와 변수
10장 C 표준 파일 입출력 子曰 學而時習(실습?)之 不亦悅乎.
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
adopted from KNK C Programming : A Modern Approach
Computer Graphics OpenGL 설치 및 설정
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
제2장 제어구조와 배열 if-else 문에 대하여 학습한다. 중첩 if-else 문에 대하여 학습한다.
19. 함수 포인터와 void 포인터.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Chapter 4 컬러( COLOR ).
제어문 & 반복문 C스터디 2주차.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
Java의 정석 제 4 장 조건문과 반복문 Java 정석 남궁성 강의
Stepper Motor 디바이스 드라이버
자바 5.0 프로그래밍.
Fflush 사용이유 및 방법 [이유] 키보드에서 입력된 내용은 입력버퍼에 저장되었다가 Enter 키가 들어오면 프로그램으로 전달됨 이 때 입력버퍼에 있는 Enter 키도 프로그램으로 전달됨 그러므로 아래와 같은 프로그램에서 문자 하나를 입력해도 Enter키도 입력된 것으로.
C 코드최적화 세명대학교 AI연구실 양승조.
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express Slide 1 (of 28)
Chapter 08 조건문.
3. 모듈 (5장. 모듈).
컴퓨터 프로그래밍 기초 - 11th : 파일 입출력 및 구조체 -
구조체(struct)와 공용체(union)
argc, argv 의 사용방법 #include <stdio.h>
06. 디바이스의 등록과 해제 김진홍
C 13장. 입출력 라이브러리 #include <stdio.h> int main(void) { int num;
printf("Global Korea\n");
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
Choi Younghwan CSE HUFS
Presentation transcript:

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

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

MPEG – 2 부호기의 전체구조

Init() 초기화 과정

Init() 초기화 과정

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;

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];

메모리 공간 할당 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))) }

매크로 블록 할당 및 파일오픈 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); }

프레임 재순서화 부호기 입력 - 0 1 2 3 4 5 6 7 8 9 10 11 I B B P B B P B B I B B P B B 코딩된 비트 스트림 - 0 1 2 3 4 5 6 7 8 9 10 I P B B P B B I P B B

프레임 번호 계산 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;

프레임 읽기 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);

프레임 번호 계산 예 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 + 3 – 1  f = 3 Example 3 - M = 3, i = 2  B frame - I – 1  f = 1

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

순차주사와 격행주사

프레임 DCT와 필드 DCT

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; }

Motion Estimation

Estimation

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

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

프레임 예측 과정

프레임 예측의 전체 구조

I 픽쳐 움직임 예측과정

P 픽쳐 움직임 예측 과정

B 픽쳐 움직임 예측 과정

전탐색 블록 매칭 알고리즘

프레임과 필드 픽쳐구조

프레임과 필드 움직임 예측

필드 예측

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

B 픽쳐의 필드 예측