1. 2015.03.30 RGB
  2. 2015.03.23 Video - YUY2 Format
  3. 2015.03.20 [DirectShow] FORMAT_VideoInfo2
  4. 2015.03.20 [DirectShow] SetProperties()에서 E_FAIL 발생

RGB


1 bit : 흑백

2 bit : 4가지(2^2) 색상 표현 가능

4 bit : 16가지(2^4) 색상 표현 가능

8 bit : 256가지(2^8) 색상 표현 가능

16 bit : R B 5bit / G 6bit를 할당하여 표현. 하이 컬러(High Color)

24 bit : RGB 각각 8bit씩 할당. 트루 컬러(true Color)

32 bit : true Color + alpha(투명 값). RGBA라고 부름

 

-       16bit

RGB555 : 남은 1비트를 사용하지 않고 RGB에 각각 5bit씩 할당 [0RRRRRGGGGGBBBBB]

RGB565 : 16비트 구성의 1bit  사람의 눈에 가장 민감한 G에 할당 [RRRRRGGGGGGBBBBB]

 

-       32 bit 

Alpha 바이트가 앞에 오면 ARGB888 뒤에 오면 RGBA888이다 

 

-       Alpha (투과도/ 투명도)

: 색상이 얼마나 투명하거나 불투명할지를 결정하고 1일 경우 완전 불투명, 0일 경우 완전 투명으로 결정한다. 0~1 값을 가지나?

이미지의 각 픽셀의 컬러 값을 구할 때 픽셀의 컬러 값에 알파채널의 값을 곱하여 표현한다. 그래서 알파 값이 1 이면 픽셀의 컬러가 변하지 않고 그대로 출력되고 알파채널이 그것보다 낮으면 컬러가 원래의 색보다 좀 더 우중충하게 나올 것이다.

ð   두 이미지를 합칠 때 Alpha 값을 사용하게 된다
Final Fixel = ( src Color * src alpha ) + ( dest Color * (1 - src alpha))   

'media' 카테고리의 다른 글

Video - YUY2 Format  (0) 2015.03.23

Video - YUY2 Format

  

YUV 4:2:2 Format에는

-       YUY2

-       YUVY

가 있다 (권고)

 

Format

Chroma sampling

Packed or planar

Bits per channel

YUY2

4:2:2

Packed

8

 

  

-       저장 형태에 따른 YUV 종류 

http://seoduckchan.com/2014/04/06/yuv-color/#fn-231-1

 

YUV Packed format Planar format 의 종류가 있다.





Packed format Y UV가 함께 섞여 Macropixel을 이루는 종류들을 말하며

이와 대조적으로 Planar format Y, UV 정보들이 서로 다른 영역에 분리되어 저장된 포맷들을 말한다.

 




-       메모리 저장 방식

https://msdn.microsoft.com/en-us/library/windows/desktop/dd206750(v=vs.85).aspx#YUV422formats16bitsperpixel


 


Unsigned char 배열 값으로 다룰 수 있다.

첫 번째 byte는 첫 Y을 포함, 두 번째 byte는 첫 U(Cb)를 포함, 세 번째 byte는 두 번째 Y를 포함, 네 번째 byte는 첫 V(Cr)을 포함한다         

 

따라서 Y0 U0 Y1 V0으로는 2pixel을 표현할 수 있다

First pixel

U0 Y0 V0

Second pixel

Y0 Y1 V0

 

Y0 U0 Y1 V0 은 각각 1바이트씩 총 4바이트니까 32bit로 이루어져 있는데,

4바이트로 2개의 pixel이 표현 가능하므로 1개의 pixel 16bit가 필요하다고 볼 수 있다

 






-       색 표현 범위

https://msdn.microsoft.com/en-us/library/windows/desktop/bb530104(v=vs.85).aspx

 

Component

Range

Y'

16235

Cb/Cr

16240, with 128 representing zero

 

 

색을 표현하기 위한 RGB YUV의 값

Color

R

G

B

Y'

Cb

Cr

Black

0

0

0

16

128

128

Red

255

0

0

81

90

240

Green

0

255

0

145

54

34

Blue

0

0

255

41

240

110

Cyan

0

255

255

170

166

16

Magenta

255

0

255

106

202

222

Yellow

255

255

0

210

16

146

White

255

255

255

235

128

128

 

è 검정색을 표현하기 위해서 RGB에서는 각 값에 0을 주면 되지만, YUV에서는 Y = 16, U = 128, V = 128 값을 주어야 한다

 

 


'media' 카테고리의 다른 글

RGB  (0) 2015.03.30

[DirectShow] FORMAT_VideoInfo2

Video Renderer와 연결은 되고 영상 출력이 되지 않았다

 

현재 작업중인 필터에서 output핀 타입을 input핀 타입과 동일하게 만들어서 영상을 출력하고 있었는데

변환 필터에서 Input으로 받은 FormatType VideoInfo2일 때

출력 핀의 미디어 FormatTypevideoInfo2 이면 영상 출력이 되지 않았다

 

처음에는 단순히  Input FormatType VideoInfo2일 때 필터 연결을 해서 발생한 문제인줄 알았는데,

Input Format Type VideoInfo2이더라도, output mtOut->FormatType() 을 체크하지 않으면

Format TypevideoInfo로 변환되고 정상적으로 출력 되었다

 

HRESULT CEZrgb24::CheckTransform(const CMediaType *mtIn, const CMediaType *mtOut)

{

           HRESULT hr;     

           hr = CheckInputType(mtIn);

           if (FAILED(hr))

                     return hr;

 

           //// format must be a VIDEOINFOHEADER

           //if (*mtOut->FormatType() != FORMAT_VideoInfo2)//FORMAT_VideoInfo)

           //        return E_INVALIDARG;

 

           //formats must be big enough

           if (mtIn->FormatLength() < sizeof(VIDEOINFOHEADER) || mtOut->FormatLength() < sizeof(VIDEOINFOHEADER))

                     return E_INVALIDARG;

 

           return S_OK;

}

 




-       Input 포맷 타입은 FORMAT_VIDEOINFO2


-       Output 포맷 타입은 FORMAT_VIDEOINFO 

 

videoInfo 타입과 videoInfo2 타입이 무엇인지 확인해보았다

 

videoInfo2

https://msdn.microsoft.com/en-us/library/windows/desktop/dd407324(v=vs.85).aspx

 

VMR-7, VMR9 VIDEOINFOHEADER2를 즉시 제공한다 VMR 에 접속할 때 최상의 포맷을 제시한다. 이전 Video Renderer filter

VIDEOINFOHEADER2를 지원하지 않는다.

Video Renderer filter에서 VIDEOINFOHEADER2를 사용하기 위해서는 Overlay Mixer를 그래프 안에 삽입해야 한다.

 

1. decoder filter output 핀에 미디어 타입을 나열한다(EnumMediaType 메소드 이용)

2. 나열된 배열에서 첫 번째 미디어 타입을 확인한다

3. 포맷 타입이 FORMAT_VideoInfo2일 경우 output pin Overlay Mixer에 접속한다  그리고 나서 Overlay Mixer video renderer에 접속 한다

 

 

내용을 읽어보니까 그냥 Video Renderer Filter에서 videoInfo2 타입을 사용을 하려면

overlay Mixer 필터를 통해서 영상을 출력하라는 것 같다

 

아니면 VMR9을 쓰던가

 

하….

근데 VideoInfo2Overlay Mixer 연결도 안되고,

Video Mixing Renderer9으로 연결하면 연결은 되는데 화면이 안나온다

 

'media > directshow' 카테고리의 다른 글

[DirectShow] SetProperties()에서 E_FAIL 발생  (0) 2015.03.20

[DirectShow] SetProperties()에서 E_FAIL 발생

변환 필터 제작 중

 

INPUT 핀 타입을 RGB에서 YUY2로 변경 하였다

Current Media Type

Majortype

MEDIATYPE_Video

Subtype

MEDIASUBTYPE_YUY2

formattype

FORMAT_VIDEOINFO2

 

 

기존 방식과 동일하게 input으로 받는 핀의 정보를 output 핀 형식과 동일하게 사용하려는데,

 

DecideBufferSize 함수에서

할당자를 설정하는 부분인 setProperties에서 계속 E_FAIL을 반환하여

Video Renderer Output 핀 연결이 되지 않았다

 

나랑 같은 문제여서 참고함

http://microsoft.public.win32.programmer.directx.video.narkive.com/8rcTkAL3/can-t-get-yv12-media-type-to-negotiate-in-transform-filter

 

CheckTransform 함수에서 Input , output 핀의 FormatLength를 체크 함?

이걸로 문제가 해결 됨… 왜지??

 

-       Old

HRESULT CheckTransForm(const CMediaType *mtIn, const CMediaType *mtOut)

{

    if (*mtIn == *mtOut)

   return S_OK;

 return E_FAIL;

} 

 

- Now

HRESULT CheckTransForm(const CMediaType *mtIn, const CMediaType *mtOut)

{

      HRESULT hr;

hr = CheckInputType(mtIn);

if (FAILED(hr))

return hr;


// format must be a VIDEOINFOHEADER

if (*mtOut->FormatType() != FORMAT_VideoInfo)

return E_INVALIDARG;


//formats must be big enough

if (mtIn->FormatLength() < sizeof(VIDEOINFOHEADER) || mtOut->FormatLength() < sizeof(VIDEOINFOHEADER))

return E_INVALIDARG;


return S_OK; 

}


'media > directshow' 카테고리의 다른 글

[DirectShow] FORMAT_VideoInfo2  (0) 2015.03.20