기본 콘텐츠로 건너뛰기

I,P,B 프레임



정화상으로 압축된 프레임을 I 프레임, 예측만을 한 프레임을 P 프레임, 보간을 한 프레임을 B 프레임이라 한다. 
엠펙 비디오는 이들 세 종류의 프레임들이 일정한 패턴으로 섞인 것이다.
I-프레임(Intra-coded frame)
데이타 스트림의 어느 위치에도 올 수 있으며, 데이타의 임의 접근을 위해 사용되며, 다른 이미지들의 참조 없이 부호화된다. I-프레임은 정화상 압축방법(JPEG)을 이용하지만, JPEG과는 달리 MPEG에서는 실시간으로 압축이 이루어진다. I-프레임의 압축은 MPEG에서는 가장 낮은 압출률을 보인다 I-프레임은 매크로 블럭내에서 지정된 8*8 블럭으로 나눈 후, DCT 기법을 사용한 후, DC계수는 DPCM방법으로 부호화하는데, 연속한 블럭 사이의 차이값을 계산한 후 가변 길이 코딩을 사용하여 변환한다. .
P-프레임(Predictive-coded frame)
부호화와 복호화를 행할 때 이전의 I-프레임 정보와 이전의 P-프레임의 정보를 사용한다. P-프레임은 연속되는 이미지들의 전체 이미지가 바뀌는 것이 아니라 이미지의 블럭들이 옆으로 이동한다는 점에 착안한 것이다. 즉, 움직임이 있는 경우 앞화면에 있는 물체 자체의 모양에는 큰 변화없이 옆으로 이동하는 경우가 대부분이므로, 이전의 화면과 현재의 화면의 차이가 매우 적은 것을 이용하여 차이값만을 부호화하는 것이다.
B-프레임(Bidirectional-coded frame)
부호화와 복호화를 행할 때 이전, 이후의 I-프레임과 P-프레임 모두를 사용한다. B-프레임을 사용하면 높은 압축률을 얻을 수 있다. B-프레임은 이전의 I-또는 P-프레임과 B-프레임 이후의 I-또는 P-프레임의 차이값을 가진다.

I-프레임으로 시작하는 연속적인 화상들의 집합을 GOP(Group Of Picture)라고 한다. 아래그림은 화상들의 GOP를 나타내는 것이다.

B-프레임을 사용하기 때문에 MPEG 코드 데이타 스트림의 순서는 실재 복호화 되는 순서와는 다를 수 있다. 즉, 연관된 B-프레임후에 출력될 P-프레임은 B-프레임의 복원시에 필요하므로 P-프레임이 먼저 복원되어야 한다. 이것은 양단간 지연을 야기시킨다. 이에 대한 예는 다음과 같다. 
화면 출력 순서
프레임의 종류B B I B B P B B P B B P
프레임 번호0 1 2 3 4 5 6 7 8 9 10 11


복호화 순서
프레임의 종류I B B P B B P B B P B B
프레임 번호2 0 1 5 3 4 8 6 7 11 9 10

위의 예에서 프레임 번호가 2번인 I- 프레임이 먼저 복호화되고, 그 I-프레임의 정보를 가지고 프레임 번호 0, 1인 B-프레임을 복호화 한다. 3,4번의 B-프레임을 복호화하기 위해서는 2번의 I-프레임과 5번의 P-프레임이 필요하므로 3,4번을 복호화하기 전에 5번 P-프레임을 복호화하는 것이다. 이와 같은 방법으로 10번의 B-프레임까지 복호화한다. 

댓글

이 블로그의 인기 게시물

UNIX C errno 정리( 에러 번호 )

#define EPERM   1   /* Operation not permitted      */ #define ENOENT  2   /* No such file or directory        */ #define ESRCH   3   /* No such process          */ #define EINTR   4   /* interrupted system call      */ #define EIO 5   /* I/O error                */ #define ENXIO   6   /* No such device or address        */ #define E2BIG   7   /* Arg list too long            */ #define ENOEXEC 8   /* Exec format error            */ #define EBADF   9   /* Bad file descriptor          */ #define ECHILD  10  /* No child processes           */ #define EAGAIN  11  /* Resource temporarily unavailable */ #define ENOMEM  12  /* Not enough space         */ #define EACCES  13  /* Permission denied            */ #define EFAULT  14  /* Bad address              */ #define ENOTBLK 15  /* Block device required        */ #define EBUSY   16  /* Resource busy            */ #define EEXIST  17  /* File exists              */ #define EXDEV   18  /* Improper link            */ #define ENODEV  19  /* No such

Baud Rate 와 Bit Rate 의 차이점

출처 - http://solvline.com/technical_info/tech_note_view.php?no=22&fno=&PHPSESSID=f5f096a5b1090ca017552de78745b8aa 1. Bit Rate 와 Baud Rate 의 정의 1.1 Bit Rate 정의 비트 레이트 (Bit Rate) 는 초당 얼마나 많은 데이터 비트 (‘1’ 또는 ‘ 0’) 를 전송할 수 있는가를 나타내는 말이다 . 또 우리가 자주 쓰는 BPS 라는 말이 있는데 이는 Bit Per Second 로서 초당 보낼 수 있는 비트의 수를 나타낸다 . 이는 모뎀의 전송속도를 측정하는 단위로 사용되어 졌다 . 일반적으로 28,800 모뎀이라면 28,800bps 의 전송속도를 나타내는 것이다 . 예를 들어 , 2400bit/second(bps) 라면 초당 2400 개의 비트 정보를 전달할 수 있다는 뜻이다 . 이는 반대로 이야기하면 1 비트 정보를 보내기 위해서 416.6us 의 시간 (1s/2400bit) 이 필요하다는 이야기이다 . 1.2 Baud Rate 보 레이트 (Baud Rate) 는 초당 얼마나 많은 심볼 (Symbol, 의미 있는 데이터 묶음 ) 을 전송할 수 있는가를 나타내는 말이다 . 이는 이론적인 통신 단위로 초당 신호 (Signal) 요소의 수 를 나타낸다 . 만약 하나의 신호요소가 2 비트로 구성되어 있는 경우라면 보는 BPS 의 반이 된다 . 즉 , 1 보 동안 2 비트가 전송된다 . 일반적으로 신호를 1 비트로 여긴다면 BPS 와 같은 단위가 된다 . 심볼이란 말은 의미 있는 데이터 비트의 묶음이다 . 일반적으로 시리얼 통신에서는 데이터 비트가 8-bit 를 사용하므로 이를 하나의 심볼이라고 이야기 할 수 있다 . 1 개의 symbol ( 또는 character) 는 8 개의 bit 정보와 같다 . 예를 들어 , 2400 baud rate 를 갖는다는 말은 1 초에 2400 개의

[C언어] epoll 설명

출처 -  http://biscuit.cafe24.com/moniwiki/wiki.php/epoll 1  준비 2  socket 프로그래밍 기본 3  비동기 입출력 (Asyncronous I/O) & 입출력 다중화 (I/O Multiplexing) 4  select 5  select 와  poll  그리고 epoll. 그 차이 6  epoll 프로그래밍 흐름 7  epoll 함수들 8  epoll References 빈폴도 아니고, 이폴이란 대체 무엇일까? 당신은 서버한대로 몇 명의 동시접속자를 수용할 수 있습니까? 최근에 인터넷에 떠돌아다니는  c10k_problem 은 대당 10K, 즉 1만명의 동시접속(concurrent users)을 받아보자는 문제다. 서버 프로그래밍을 해 본 사람이라면 이게 그리 만만한 문제가 아니라는 것을 직감할 듯 --; 요즘의 Massive 온라인게임은 '분산처리'가 기본이라 한 대에서 많은 이용자를 커버하기보다는 여러대가 하나의 세트로써 구성하는 것이 인기가 있고 다수의 커넥션보다는 소수 커넥션에서의 대용량 전송이 더 중요한 요소이기도 하다. c10k problem에 나또한 관심을 가지게 되었고, epoll 이 최근 급부상하는 솔루션으로 인기가 있다기에 한 번 파보자 하고 결심하고 이 글을 시작했다. 마침 wiki에도 관심이 있던 차라, wiki 공부도 할 겸해서 epoll 을 연구하는 과정을 이 wiki에 담아 보고자 한다. 1  준비  # * 누구를 위한 epoll 인가? epoll은 '한 대의 서버에서 아주많은 동시접속자를 처리하기 위한 수단'이다. 이미 당신이 그 수단을 알고 있다면 - epoll 이건 아니건 - 이 글은 별로 도움이 안될듯하다. 동시접속자가 천명을 넘지않는다면 구닥다리 방법을 이용하는 것과 큰 차이가 없으리라 본다. 또한, epoll은  Linux 프로그래머의 도구 이다. M$ wind