'2010/02'에 해당되는 글 2건

  1. 2010.02.25 HOONS.NET 20회 정기 세미나 RIA(Rich Interactive Application) (1)
  2. 2010.02.09 YUV Player 만들기 (6)

- 일시 : 2010년 02월 25일(목) 19시 00분
- 장소 : 포스코센터 5층 (한국마이크로소프트)
- 참가비 : 삼천원+α (수익금 전액은 후원처 요셉의원에 기부됩니다.)
- 세미나 신청: http://www.hoons.kr/Seminar/Join.aspx 
세미나 Agenda
19:00~19:20
등 록
19:20-19:40
다시 생각해보는 UX와 RIA / 공인석
19:40-20:40
포토라이트 시즌2: 웹캠과의 만남 / 최다은, 김동욱
20:40~20:55
휴식
20:55-22:00
WPF 3D 기초부터 활용까지 / 전호진 이동규
22:00~
Q&A / 경품추첨
발표 내용 소개

다시 생각해보는 UX와 RIA / 공인석
2007년 무렵으로 기억합니다. WPF가 발표되고 WPF/E가 실버라이트로 이름을 바꾸어 발표되면서 마이크로소프트도 본격적으로 RIA시장에 뛰어들게 된 시기였죠. 물론 그 때까지도 UX란 단어와 RIA라는 단어는 수도 없이 많이 사용되었고 갑론을박이 많았지만 닷넷 세상에서는 바로 이 즈음이 시작이었습니다. 그 당시에는 제목에 RIA를 달고 나온 세미나가 참 많았는데, 어느 순간부터 세미나에 RIA란 단어가 사라지고 그 자리를 UX가 채우기 시작했습니다. 이제는 UX나 RIA란 단어를 모르면 트렌드에 뒤처지는 사람으로 취급 받을지도 모른다는 생각도 듭니다. 그런데, 우리는 과연 이 단어의 의미를 생각하면서 사용하고 있을까요? 최근에는 UX와 RIA라는 용어를 전혀 의미에 맞지 않게 사용하는 경우를 상당히 자주 보면서 이런 질문을 떠올려 봅니다. 이번 세션에서는 2010년, 실버라이트가 발표된지 벌써 햇수로 4년이 지난 이 시점에서 UX와 RIA를 다시 한번 조명하고 향후 RIA 개발과 UX에 대해 간단하게 브리핑해 봅니다.
포토라이트 시즌2: 웹캠과의 만남 / 최다은, 김동욱
이용자의 정보 생산ㆍ선택능력, 정보 소비 욕구가 커지면서 블로그 등 개인미디어 서비스 이용이 크게 증가하고 있다. 네티즌들이 블로그 및 미니홈피에 게재하는 글이나 사진 컨텐츠 제작이 용이해진 이유중 하나로 디지털카메라, 카메라 폰, 웹캠의 보급 등 배포도구의 간편화를 들 수 있다. 이번에 출시된 실버라이트 4는 웹캠기능을 추가함으로써 인터넷이라는 미디어 환경에서 사용자에게 더욱 편하면서도 풍성한 WEB문서의 작성을 지원하고 있다. 이에 이번 세미나에서는 실버라이트 4에서 어떻게 웹캠기능을 구현 할 수 있는지, "포토라이트 시즌2"를 통해 살펴보고자 한다.
WPF 3D 기초부터 활용까지 / 전호진, 이동규
최근들어 게임, 에니메이션, 영화분야에서도 3D를 사용한 사례가 점점 늘어나면서 사람들의 관심도 점점 높아지고있다. 이에 3D 어플리케이션 개발도 활발해 지고 있다. 3D에 대한 관심은 많지만 비교적 어려운 개념으로 인해 정작 3D 인터페이스를 활용한 응용프로그램은 찾아보기 힘들다. 또한 기본적인 3D 개념을 이해하고 WPF 3D를 유연하게 다루는 개발자는 많지 않아 보인다. 이번 섹션에서 WPF 3D의 기본 개념부터 차근차근 짚어 보고 실전에서 활용 할 수 있는 방법을 알아 본다.

진행자 소개
공인석 / 실버라이트 시삽

HOONS닷넷 실버라이트 분야 시삽을 맡고 있고, 실버라이트가 소개된 이래로 실버라이트에 매진해 왔다. 유령회사 공도소프트라는 블로그를 통하여 기술 자료, 컬럼, 강좌 등을 진행하고 있으며 훈스닷넷을 비롯한 실버라이트 관련 커뮤니티 활성화에 기여하고 있다.

최다은 / 실버라이트 시삽

HOONS닷넷 실버라이트 시삽이며, 야간학부 3학년에 재학중으로 셀러던트의 길을 걷고 있는 중이다. Asp.net 개발 경력을 계속 쌓아 왔으며, Nunit을 이용한 단위테스트에 관심이 많다. 실버라이트로 다양한 어플리케이션을 만들어 보는것이 목표이다. 부족한 내공을 쌓기 위해 늘 노력하는 자세를 잊지 않으려고 한다. 밤하늘을 바라보며 수많은 별들을 사진으로 담는 여행가를 꿈꾸기도 한다.
김동욱 / 실버라이트 시삽

Silverlight를 통해 다양한 프로젝트를 개발해 왔으며 HOONS닷넷에서는 커뮤니티 시삽을 맡고 있다. 지금은 개발자들이 쉴수 있고 또, 편히 놀수 있는 공간과 만남을 위해 노력하고 있다
전호진 / WPF 시삽

현재 HOONS닷넷 커뮤니티 WPF시삽으로 활동하고 있으며 닷넷 전반적인 기술에 관심이 많다. 아는것은 설명하면서 늘어난다는 생각으로 개인블로그(Life is dynmic :: http://crynut84.tistory.com)를 운영하고 있으며, 특히 최근에는 동영상 압축(Codex)과 영상처리에 집중하고 있다. 또한 항상 긍적적인 마인드를 가지고자 '맨날맑음'이라는 닉네임을 사용한다.
이동규 / WPF 시삽

현재 MSP(Microsoft Student Partners)로 활동중에 있으며, 닷넷 기술에 매우 많은 관심을 가지고 있다. 새로운 신기술을 굉장히 좋아하며 그것을 바로 활용하여 새로운것을 만드는것을 좋아한다.
세미나 장소

한국 마이크로소프트 - 포스코 센터 5층



 
경품안내
확정 후 업데이트 예정

Posted by 맨날맑음

댓글을 달아 주세요

  1. 손효일 2010.03.22 19:18  댓글주소  수정/삭제  댓글쓰기

    안녕하세요..^^
    저번에 선문대에서 종합설계로 하셨던 멀티터치 테이블을 이용해서 저희도 종합설계를 하려고 합니다.!
    그래서 멀티터치회의테이블 하드웨어를 다시 정비하려고 하는데 코팅을 업체에다가 맡기면 더 좋을 거라는 이야기가 있어서요..^^
    혹시 그 업체가 어디인지 알려주실 수 없습니까?
    부탁 드리겠습니다..^^
    제 메일 주소는 shiyp@hanmail.net
    싸이 블로그 주소는 http://www.cyworld.com/shiyp1 입니다..^^
    다시한번 꼭 부탁드릴께요...^^

YUV Player 만들기

Project 2010. 2. 9. 22:26

안녕하세요? 맨날맑음 입니다.

 

YUV 시퀀스를 재생하기 위해서 Raw Data Displayer(RDisp)라는 프로그램을 사용 하였습니다. 카이스트에서 한국사람이 개발한 프로그램인데요. 여러개의 파일을 동시에 재생하고, 여러가지 YUV 포맷을 지원하여 매우 잘 사용하고 있었습니다.


- Fig1. RDisp -

저도 몇달전쯤 심심하던차에 YUV Player를 만들어 보려고 시도해 보았습니다. 사실 Color Space에 대한 명확한 이해와 레퍼런스가 부족하여 몇일을 걸려 완성했는데요..(사실 아직 문제점이 많습니다) 만들면서 발생한 문제점과 만드는 방법을 포스팅하려 합니다.

 

#1. YUV Plyaer를 만들기 위한 준비

개발환경

IDE : Microsoft Visual Studio 2008

언어 : Visual C#

프레임워크 : .NET Framework 2.0

출력 형식 : Windows Form

제가 닷넷을 선택하고 윈폼으로 프로젝트를 한 이유는 간단합니다. MFC나 기타 다른 방법이 있을 테지만 닷넷이 제일 익숙하기 떄문이었습니다. –_-; 그냥 플레이어의 알고리즘만 익히자는 취지도 이 선택에 한 몫 했습니다.

 

막상 Player를 만드려고 보니 YUV를 어떻게 화면에 뿌려줄까? 라는 의문이 들었습니다. YUV를 바로 화면에 뿌릴 수 있는 방법은 애당초 없습니다. 컴퓨터 화면은 RGB포맷을 사용하기 때문이죠. 그렇습니다. YUV를 RGB로 바꿔야 합니다.

 

YUV Player의 프로세싱 과정

1. YUV 데이터를 읽어 온다.
2. RGB로 변환한다.
3. RGB에 Bitmap 헤더 정보를 입혀 Bitmap으로 변경한다.
4. Bitmap을 fps에 따라 적당한 속도로 화면에 뿌려준다.

대충 위와같은 과정을 거치게 됩니다.

 

YUV와 RGB에 관한 지식이 필요합니다. 이전 포스팅 중 http://crynut84.tistory.com/56를 참고 하시면 관련 내용을 알 수 있습니다.그리고 위키(http://en.wikipedia.org/wiki/YUV)를 보시면 좀 더 자세한 정보를 얻을 수 있습니다.

 

#2. YUV –> RGB

public Color YUVtoRGB(int Y, int U, int V)

{ 

    return Color.FromArgb(Clippiing((76284 * (Y - 16) + 104595 * (V - 128)) >> 16),

        Clippiing((76284 * (Y - 16) - 53281 * (V - 128) - 25625 * (U - 128)) >> 16),

        Clippiing((76284 * (Y - 16) + 132252 * (U - 128)) >> 16));          

}

 

byte Clippiing(int data)

{

    return (byte)((data < 0) ? 0 : ((data > 255) ? 255 : data));

}


위와같은 방법으로 YUV를 RGB로 변경 할 수 있습니다. YVUtoRGB 메서드의 인자에 YUV를 넣으면 Color 객체로 return 하게 되어있습니다. Clipping 메서드는 단순히 0~255값을 가지는 RGB요소가 범위를 벗어 났을 경우 범위안으로 넣어주는 역할을 합니다.

 

#3. YUV4:2:0 포맷의 이해

제가 가장 많은 시간이 걸린 부분입니다. YUV4:2:0 비트스트림에 대한 정확한 이해가 없었기 때문에 RGB로 변경하여 화면에 뿌렸을 경우 계속해서 Color성분이 이상하게 나오는 것이었습니다.

- Fig2. YUV4:2:0의 개념-

 

위 부분을 정확히 이해해야지만 RGB로 컨버팅 하였을때 원하는 영상을 얻을 수 있습니다.  4:2:0이면 Y성분4개가 U,V성분을 하나씩 공유해서 쓴다는 것은 쉽게 알 수 있습니다. 하지만 저는 Y0,Y1,Y3,Y4의 성분이 U0을 공유하여 쓰는 줄 알았습니다. 이걸로 거의 하루의 시간을 버리게 되었죠;;

 

위의 Fig2에서 알 수 있다 싶이 크기가 Width : 8, Height : 4인 프레임이 있을 때,  Y0,Y1,Y8,Y9가 U0과 V0을 공유하게 됩니다. 요걸 알고 부터, 기본개념을 정확히 익혀야 하는 것을 다시한번 절감하였습니다.

 

즉. Y0부분을 RGB로 바꾸고 싶으시면 Y0, U0, V0의 값을 YVUtoRGB 메서드에 인자로 넣어주면 Y0자리의 Color(RGB)가 나오게 됩니다. 그림에 보면 색깔로 자신의 짝을 구분해 놓았습니다.

 

#4. 타이머 셋팅 영상 플레이

여기까지 만들었다면 다음은 간단합니다.해당하는 영상을 얼마의 속도로(fps) 재생할지 결정하여 PictureBox컨트롤에 해당하는 Bitmap을 보여주기만 하면 됩니다. 저는 1초에 30프레임 정도로 셋팅하였습니다.

 

#5. 문제점

기본적으로 재생하는데는 문제가 없습니다. 하지만 YUV 시퀀스를 로딩하는데 엄청난 시간이 소요됩니다. 또한 CPU 점유율 또한 엄청 잡아 먹게 됩니다. 각 픽셀을 RGB로 만드는데 많은 연산이 필요하여 그런 것 같은데요.. BackgroundWorker를 사용하여 쓰레드를 이용하여 처리했음에도 로딩 시간이 필요하게 됩니다.

 

이 문제가 사실 제일 큰 문제인데요.. 혹자는 어셈블리 코딩으로 퍼포먼스를 높여야한다고 하고, 닷넷을 선택한 것 자체가 문제라는 소리도 있고, 또.. 제 프로그램의 프로세스 자체가 애초에 틀렸는지도 모르겠습니다.

 

가장 의심되는 부분은 YUV->RGB 변경시 많은 연산때문이라고 여겨 지는데요.. 검색하다보니 RGB Look up table사용하는 방법으로 해결 될 수도 있겠다는 생각도 듭니다.(하지만 정작 테이블 자료는 없더군요..)

 

향후 이 문제가 개선되면 RDisp 못지않은 기능을 가진 Player도 만들어 보고 싶군요..

제 소스코드와 실행파일을 첨부 합니다. 혹여 YUV 플레이어를 만드시는 분께는 조금이나마 도움이 되길 바라고, 제가 가진 문제점에 대해서는 많은 피드백이 있었으면 좋겠습니다. 아직 완성단계가 아니기 때문에 예외처리와 소스 구조는 고려하지 않고 작성하였습니다.



YUV Player (ver1.0) : OS에 .NET Framework2.0이 설치되어 있어야 합니다. 실행후 YUV 시퀀스를 드래그 앤 드롭 방식으로 끌어오거나 마우스 오른쪽 버튼을 이용하면 메뉴를 이용 하실 수 있습니다.


소스코드 : Microsoft Visual Studio 2008에서 제작 하였습니다.

Player 실행에 필요한 시퀀스는 이곳에서 다운로드 받으실 수 있습니다. 현재 YUV4:2:0 포맷과 CIF Size만 지원됩니다.

Posted by 맨날맑음

댓글을 달아 주세요

  1. 음냐뤼 2010.03.24 17:10  댓글주소  수정/삭제  댓글쓰기

    첫번째 문제:
    int percent = frameNum / (totalFrameNum / 100);
    totalFrameNum이 100보다 작을 경우 Devide Zero 발생 할 수 있음
    다음과 같은 코드로 변경해야
    int percent = frameNum*100 / totalFrameNum;

    두번째 문제:
    toolStripProgressBar등의 컨트롤에 대한 크로스 쓰레드 문제 발생
    이 부분을 해결하면 업로드 속도도 개선될 것임
    참고로 꼭 전체 프레임을 로딩하고 나서 플레이를 하는 것보다
    버퍼링을 생각하면 더 개선될 것임 음냐...
    toolStripProgressBar1.Value = percent;
    this.toolStripStatusLabel1.Text = "파일을 읽어 오는 중..";
    if (percent > 98)
    {
    toolStripProgressBar1.Value = 100;
    this.toolStripStatusLabel1.Text = "파일 읽기 완료! Space를 누르면 재생 됩니다.";
    toolStripProgressBar1.Value = 0;
    toolStripProgressBar1.Visible = false;
    }

    if (picture == null)
    {
    this.toolStripStatusLabel1.Text = "준비";
    toolStripProgressBar1.Value = 0;
    toolStripProgressBar1.Visible = false;
    return;
    }

  2. Favicon of https://mnworld.co.kr BlogIcon ShakeJ 2010.11.01 13:37 신고  댓글주소  수정/삭제  댓글쓰기

    잘읽고갑니다^^

    mnworld.co.kr 운영자

  3. Favicon of http://blog.naver.com/smhotkdg BlogIcon Czoy 2012.11.29 20:55  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 선문비트 22기 양승훈 입니다. 지금 MPCL 에서 연구 중인 학생인데
    구글검색하다가 들어 오게 됬습니다. 프로젝트잘 받아서 사용 하겠습니다. 감사합니다.

  4. wv 2013.01.28 23:25  댓글주소  수정/삭제  댓글쓰기

    좋은 글 감사합니다
    전 이정도로 거창한건 아니고 PSNR계산하려고 하는데, yuv구조가 적혀있는 곳이 없더라구요.... 덕분에 yuv구조를 한번에 알아 갑니다 :)

  5. Favicon of http://4866.ccgenevois.com/lunettesrayban.html BlogIcon lunettes ray ban 2013.07.27 12:26  댓글주소  수정/삭제  댓글쓰기

    창밖을 봐 바람에 나뭇가지가 살며시 흔들리면 네가 사랑하는 사람이 널 사랑하고 있는거야.

  6. .NET개발자 2013.09.02 14:08  댓글주소  수정/삭제  댓글쓰기

    감사합니다^^