728x90

MS Windows 용 SubVersion Client 프로그램 이다.


이 프로그램을 이용하여 프로그램의 버전 및 소스 코드를 관리할 수 있다.



다운로드 사이트 : https://tortoisesvn.net/


svn과 프로젝트 버전 연동 : https://m.blog.naver.com/PostView.nhn?blogId=cra2yboy&logNo=90155176548&proxyReferer=https%3A%2F%2Fwww.google.com%2F

728x90

'Dev Tool' 카테고리의 다른 글

Dev Tool - Q-Dir  (0) 2017.09.08
Dev Tool - GPS Korea 좌표 변환기  (0) 2017.04.20
Dev Tool - depends22  (0) 2016.10.14
Dev Tool - Doxygen  (0) 2016.04.04
Dev Tool - StarUML  (0) 2016.02.24
728x90

wxWidgets은 LPGL License이고, C++ 에서는 꽤 대중화 된 GUI ToolKit이다.


하지만, 관련 번역 도서나 자료가 거의 없다.... 



하지만 괜찮은 사이트를 찾았기 때문에 시도를 해봐야지. ㅎㅎ


소프트웨어 연구실 CDism : http://www.softlab365.com


참고 사이트 : http://dev-skill.tistory.com/59



먼저, wxWidgets 홈페이지 (https://www.wxwidgets.org)에 가서 Windows Zip (28 MB) 을 다운로드 받는다.



받은 파일(wxWidgets-3.1.0.zip)의 압축을 풀고, Windows 와 Visual Studio를 사용하므로 wxWidgets-3.1.0\build\msw 경로로 이동을 한다.


해당 경로에는 wx_vc*** 버전이 있다. 자신의 Visual Studio에 맞춰서 실행 후 빌드하면 된다.



나의 경우 Visual Studio 2013을 사용하므로, wx_vc12.sln 을 실행했다.


sln 파일을 열면 24개의 프로젝트가 들어있는데, 이것들을 자신이 사용할 Platform(x86, x64) 에 맞게 설정한 후 일단 전부 Build 하자.




Build가 완료되었다면 기본적인 설치는 완료 된 것이다.


하지만, wxWidgets은 Install이 된 것이 아니기 때문에 몇가지 설정을 해줘야 한다.




mscv 폴더와 wx 폴더를 Include 경로에 포함시켜야 한다.





마지막으로, x86이면 vc_lib, x64면 vc_x64_lib를 포함시켜주면 된다.







드디어 wxWidgets을 개발할 준비가 되었다.

728x90
728x90

기존 SetThreadLocale() 은 Windows Vista 부터 적용되지 않는다. (이것 때문에 삽질을...)


아래의 SetThreadLocaleEx() 는 Windows Vista에서도 사용이 가능한 코드이다.




아래는 SetThreadLocaleEx()를 사용하는 코드이다.



setlocale() 을 사용한 이유는 한글이 깨져서 나오기 때문에... 각 나라별 locale을 지정해야하는 것 같다.


사용 방법은 키보드 <- , -> 를 사용하면 IDS_STRING101에서 각각 다른 나라의 언어를 가져온다.



하지만, 이런 식으로 굳이 가져올 필요가 있을까 싶다....


하나의 나라 언어 중 문장 혹은 단어만 바꿔도 다시 컴파일을 해야하는데... 


차라리 DLL을 이용하자. ㅎㅎ



출처 : http://m.blog.naver.com/shin450279/40120852207


StringTable.zip


728x90
728x90


옵저버 패턴(Observer Pattern)은 기본적으로 Tool을 만들 때 많이 사용되는 패턴이다.


쉽게 말하면 툴에서 어떤 이벤트를 날렸을 때, 엔진 내부에서는 그 이벤트에 대해 여러가지 동작을 해야 할 것이다.


그 이벤트에 대해 여러가지 동작을 하려면 같은 변수가 여러 개가 들어가게 되거나, 소스 코드에 쓸데 없는 코드가 많이 들어가게 되어 많이 복잡하게 될 것이다.


이러한 문제를 고치기 위해 옵저버 패턴이 만들어졌다.




즉, 옵저버 패턴이란 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들 모두에게 연락이 가고 자동으로 내용이 갱신되는 패턴 1 : N 의 의존성으로 정의한다.






소스 코드 :




위의 클래스는 Observer Base Class이다.


이 클래스는 기본적으로 시청자의 이름과, 방송을 받는 가상함수만 있다.




위 클래스는 Observer Base Class를 상속 받아서 실제로 사용되는 Observer Class 이다.




위 클래스는 시청자를 관리하는 클래스이다.




위의 코드는 Main() 코드





마지막으로 결과 !!



테스트 예제로 뭘 해볼까 하다가 아래 블로그에서 방송 예제를 보고 작업을 해보았습니다.


출처 : http://copynull.tistory.com/140


ObserverPattern.cpp


728x90
728x90

QT의 기본 사이트 : https://www.qt.io/


QT의 다운로드 사이트 : https://www.qt.io/developers/


QT의 Add-in 다운로드 사이트 : http://download.qt.io/



우선 QT를 설치해야 한다.


QT를 다운받으려면 다운로드 사이트에서 다운 받고 설치하면 된다.


라이센스 관련된 선택을 해서 받도록 하자.




Visual Studio에서 Qt를 사용하려면 기본 코드는 되지만, Dialog와 같은 것들은 Build Error가 발생하기 때문에 사용할 수 없다.


QT에서는 Visual Studio Add-in을 제공하고 있으므로, 이것을 설치해야만 Visual Studio에서 모든 기능을 사용할 수 있다.


위의 Add-in 사이트에서 


Official_releases -> vsaddin -> qt-vs-addin-1.2.5.exe (최신 버전) 을 다운 받고 설치하면 된다.


설치가 성공적으로 끝나면


Visual Studio -> New Project -> Qt5 Project 를 만들 수 있다.





하지만, 지금 프로젝트를 생성하려고 하면 Error가 발생할 것이다.


왜냐하면, QT Add-in에서 QT의 버전을 설정해주지 않았기 때문이다.


Visual Studio의 QT 탭에서 버전을 선택해주자.





여기까지 잘 설치했다면 QT 프로그래밍을 할 준비는 완료 되었다.

728x90

'GUI Toolkit > QT' 카테고리의 다른 글

QT - Dragger  (0) 2023.06.22
QT - QWidget에서 DirectX Rendering  (0) 2019.11.20
QT - qDebug() 와 QT_NO_DEBUG_OUTPUT  (0) 2019.01.17
QT - InputMethodEvent() 버그...?  (3) 2019.01.15
728x90

화면 내 (Intra) 부호화

 - 기존의 jpeg에서 사용된 압축 방법과 거의 같은 압축방법

 - 다른 영상 (이전 영상, 이후 영상)과 관계없이 독립적으로 하나의 현재 영상만으로 부호화하는 방식

 - 화면 내 부호화 방식으로 압축되는 화면을 I - Frame이라고 한다.

 - 복호 시 임의 접근(random access) 를 위해서는 I - Frame이 필요하다.

 - Y, Cb, Cr 영상들이 서로 독립적으로 Jpeg 알고리즘과 같이 압축된다.

 - I - Frame의 압축률을 P-Frame이나 B-Frame에 비해 상대적으로 낮다.



화면 간 (Intra) 부호화

 - 과거 또는 미래의 프레임을 참조하여 예측 압축방식으로 부호화하는 것을 말한다.

 - 이전의 화면과 현재의 화면의 차이가 매우 적은 것을 이용하여 차이 값만을 부호화하는 것이다.

 - 화면간 부호화를 위해서는 매크로블록 단위의 모션 추정(motion estimation)과 모션 보상(motion compensation) 이라는 개념이 사용된다.

 - 화면간 부호화 방식으로 압축되는 화면은 P - Frame과 B - Frame이 있다.


I - Frame (Intra Frame)

 - 화면 내 부호화 방식으로 압축되는 화면을 I - Frame 이라고 한다.

 - 복호 시 임의 접근(random access) 를 위해서는 I - Frame이 필요하다.

 - Y, Cb, Cr 영상들이 서로 독립적으로 Jpeg 알고리즘과 같이 압축된다.

 - I - Frame의 압축률을 P-Frame이나 B - Frame에 비해 상대적으로 낮다.


P - Frame (Predictive Frame)

 - P - Frame은 아래 그림과 같이 이전 영상을 참조하여, 이전 영상과 관계를 가지고 압축되는 Frame 이다.

 - I - Frame과 달리 독립적이지 않으며, 현재 영상의 매크로 블록(16x16)이 이전의 I or P - Frame에 있는 비슷한 매크로 블록으로 부터 예측되는 순방향 예측 부호화 방법에 의해 부호화된다.

 - 움직임 추정(motion estimation)과 움직임 보정(motion compensation) 을 통해 부호화 된다.

 - I - Frame 부호화에 비해 상대적으로 높은 압축율을 가지고 있다.

 - 연속적인 I - Frame 사이의 P - Frame의 수는 제한된다. (에러가 누적되는 것을 막고, 복호 시 임의 접근을 하기 위해)




B - Frame (Bidrectional Frame)

 - B - Frame은 아래 그림과 같이 이전 영상을 참조함과 동시에 이후의 I 또는 P 영상을 참조해서 부호화하는 Frame

 - B - Frame의 부호화는 Mpeg의 특징인 양방향 예측에 의해 부호화되는 화면

 - 압축 성능이 가장 좋은 Frame이지만, 계산 시간과 복잡도가 가장 높기 때문에 성능에 영향을 줄 수 있다.



GOP (Grop Of Picture)

 - I - Frame으로 시작하는 연속적인 화상들의 집합



움직임 예측 (Motion Estimation)

 - 현재 화면에서의 Pixel(또는 Block)이 이전 화면의 어느 위치에 대응 되는 지를 찾아내는 과정

 - 현재 화면에서의 Pixel(또는 Block)이 이전 화면에서 찾아낸 Pixel(또는 Block) 간의 위치는 같을 수도 있고, 다를 수도 있다.

 - 움직임 예측을 위해서는 주로 Pixel 보다는 Block을 사용 (매크로 블록)




움직임 보상 (Motion Compensation)

 - 움직임 예측을 통하여 찾아낸 이전 화면에서의 Block과 현 화면간의 차이 신호를 보정하여 주는 과정

 - 움직임 예측을 통하여 Motion Vector와 예측 에러(Predication Error)를 얻고, 이들을 부호화 한다.




디지털 데이터의 압축


최근 디지털 신호처리 기술이 급속히 발전되어 여러 분야에서 디지털 영상의 사용이 늘어나고 있지만, 우리가 보통 사용하는 영상 신호는 흑백 영상 영상의 경우 720 Pixel x 480 Pixel x 30FPS x 8bit = 83 Mbit가 된다. 컬러 영상이면 3배 이상의 데이터가 전송되게 된다.


데이터 전송의 크기가 너무 크다보니 전송하는 데이터를 부호화 및 복호화 연구가 활발해졌다.


기본적으로 데이터 압축이라는 것은 중복되는 데이터의 수를 줄이는 것이다.



중복 정보의 제거


일반적으로 데이터가 중복성을 갖는다는 말은 데이터를 표현하는데 사용된 비트 수가 데이터가 실제로 가지고 있는 정보량보다 많음을 뜻한다. 따라서 데이터 압축의 기본적인 접근 방법은 데이터에 존재하는 여러 종류의 중복 정보를 가능한대로 줄이는 것이다.


데이터의 중복성에는 대표적으로 공간적인 중복성, 시간적 중복성, 통계적 중복성 이 있다.


한 화면에서 인접하는 화소가 비슷한 값을 가지고 있음을 의미한다. 일반적인 영상을 살펴보면 영상 내에 존재하는 화소 값의 차이가 크지 않다는 것을 알 수 있다. 예를 들어, 벽 앞에 서 있는 사람을 찍은 사진의 경우에, 벽을 나타내는 화소 값은 별로 차이가 나지 않는다. 다시 말해서, 벽을 나타내는 인접한 화소 값은 매우 비슷한데, 이러한 영상의 특성을 공간적인 중복성이라고 한다.


우리가 동영상을 유심히 살펴보면 시간적으로 일정한 간격을 가지고 화면에 뿌려지는 정지 영상의 연속성에 따라 마치 물체가 연속적으로 움직이는 것처럼 보인다. 이렇게 연속적으로 보이는 영상에서, 이전의 영상과 현재의 영상을 확인을 해보면, 두 화면은 거의 비슷한 영상이라는 것을 알 수 있을 것이다. 예를 들어 현재 화면에서 어떤 사람이 전화를 받는 장면이라면, 인접 화면에서 변하는 것은 입 모양이나 상체의 미세한 움직 정도 일 것이다. 따라서 장면의 배경 부분과 같이 변화가 거의 없는 부분들은 다시 전송하지 않고, 움직임에 따라 약간 변화된 부분만을 구분하여 전송하면 시간적인 중복성을 이용한 효과적인 데이터 압축을 이룰 수 있다.


19세기 중엽 미국의 발명가 Samuel Morse는 영어 알파벳 중에서 글자 E와 글자 A가 다른 글자보다 더 자주 이용되는 사실에 착안하여 전신기에 사용하기 위한 Morse 부호를 개발하였는데, 전신기를 이용하여 정보를 전달하는데 소요되는 평균 시간을 줄이기 위해, Morse는 상대적으로 자주 발생하는 글자 E와 A에는 짧은 길이의 부호를 배정하고 가끔씩 발생하는 글자 Q와 Z에는 상대적으로 긴 부호를 할당하여 통계적인 중복성을 줄일 수 있었다.


이처럼 사람의 눈은 휘도(luminance) 신호에 비해서 색차(chrominance) 신호의 반응도가 상대적으로 떨어진다. 즉 우리 눈은 휘도 신호에 대해서는 매우 민감하지만, 색차 신호에 대한 민감도는 상대적으로 둔한 편이다. 따라서 우리가 영상 신호를 압축하는데 이러한 특성을 통계적인 중복성을 적용 할 수 있다.

728x90
728x90

소스 코드 공부는 H.264 공개 소프트웨어 (JM)으로 공부하고자 한다.


아래 url에서 최신 버전을 다운로드 받아서 압축을 풀면 Visual Studio로 빌드할 수 있다.


다운로드 : http://iphome.hhi.de/suehring/tml/


당연히 Menual과 이전 버전 등을 모두 받을 수 있다.

728x90
728x90

1. JVT (Joint Video Team)

- JVT는 ISO/IEC JTC1/SC29WG11 (MPEG)과 ITU-T SG16 Q.6 (VCEG)의 멤버들로 구성된다. JVT는 고급 비디오 부호화 도구에 대한 MPEG 요구 사항의 결과로 생겼다.

프로세서의 성능 향상과 비디오 부호화 연구의 발전과 함께 비디오 부호화 성능을 증가시키는 데에 많은 관심이 모아졌다. 2001년 6월에 여러가지의 경쟁력있는 기술들을 평가한 후에, H.26L 테스트 모델 코덱이 MPEG의 요구 사항을 만족시키는 최선책이 되었고, MPEG과 VCEG의 멤버들은 H.26L의 마지막 단계를 조정하기 위해 JVT를 구성하는데 동의했다. JVT의 주된 목적은 H.264 권고문/MPEG4 10부 표준을 공표하는 것이었다. 현재 이 표준은 완료되었다.



2. 역사

 1993

 MPEG-4 프로젝트 시작. H.263 프로젝트의 결과가 나옴

 1995

 MPEG-4가 효율적인 비디오 부호화와 내용 기반의 기능을 포함하는 제안을 요청. H.263이 주된 비디  오 부호화 도구로 채택됨

 1998

 H.26L이 제안을 요청 

 1999

 MPEG-4 Visual 표준이 공표됨. H.26L의 초기 테스트 모델(TM1)이 정의됨

 2000

 MPEG이 고급 비디오 부호화 도구를 위한 제안을 요청 

 2001

 MPEG-4 Visual 표준의 2판이 공표됨. h.26l이 mpeg-4 10부의 기본으로 채택됨 

 2002

 mpeg-4 vISUAL 2판에 대한 개정안 1, 2 (스튜디오와 스트리밍 비디오 프로파일)가 공표됨. H.264의  기술적인 내용이 고정됨

 2003

 H.264/MPEG-4 10부 (고급 비디오 부호화) 가 공표됨


위의 역사는 MPEG-4 Visual과 H.264의 발전에 있어서 주된 사건을 나열한 것이다.



3. MPEG-4 Visual

- MPEG-4 Visual은 매우 폭넓은 범위의 기능, 모든 관련된 부호화와 시각적 정보의 표현을 다루는 방대한 문서이다. 이 표준은 다음 형식의 데이터를 다룬다.


1) 동영상 (사격형 화면)

2) 움직이는 물체 (임의의 형태의 영역을 갖는 동영상)

3) 3D와 3D Mesh 물체 (변형 가능한 물체를 나타냄)

4) 움직이는 사람의 얼굴과 몸

5) 정적인 영상 (정지 영상)


이 표준은 압축된 형식에서 위 데이터 형식들을 나타내기 위해 설계된 부호화 '도구'의 집합을 명시한다. 다양한 도구들과 데이터 형식과 함께, MPEG-4 Visual 표준은 다음을 포함하는 많은 다른 응용을 지원할 수 있다.


중요 부분 codec의 구문은 (특정한 제한 하에) H.263 베이스라인의 그것과 같다. 표준에 의해 지원되는 대부분의 나머지 기능들과 도구들은 이 중요 부분에 특징들을 추가함으로써 얻어지는 반면, 메쉬, 정지 영상 그리고 얼굴/몸 애니메이션 파라미터들을 부호화하기 위한 도구들은 개별적으로 개발된다.



4. H.264 / AVC 

- H.264는 MPEG-4 Visual 보다는 좁은 범위를 갖고 주로 효율적이고 강인한 부호화와 사각형 비디오 화면의 전송을 지원하기 위해 설계되었다. 이것의 원래의 목표는 H.263+와 MPEG-4 Visual (심플 프로파일)과 같은 이전의 표준에 대해 유사한 기능을 제공하는 것이었지만, 매우 높은 압축율과 신뢰성있는 전송에 대해 향상된 지원을 갖는다.


목표로 하는 응용은 양방향 비디오 통신 (화상 회의 또는 화상 전화), 고화질 비디오에 대한 방송을 위한 부호화 그리고 패킷 네트워크 상에서 비디오 스트리밍을 포함한다. 네트워크 상에서 강인한 전송을 위한 지원은 내장되어 있고 이 표준은 가능한 한 넓은 범위의 프로세서 플랫폼 상에서 구현이 용이 하도록 설계되어 있다.


H.264 / AVC 표준에서는 비디오 압축 성능을 높이기 위해 기존의 비디오 부호화 표준에 비해 더 작은 크기인 4x4 블록 단위까지의 움직임 보상과 1/4 화소 단위의 움직임 예측, CAVLC와 CABAC와 같은 향상된 엔트로피 부호화 방식, 그리고 새로운 비용함수를 이용한 모드 결정 방법 등을 사용하였다. 



5. MPEG-4 Visual과 H.264의 비교

- 두 표준 간의 주된 차이점 가운데 몇가지만 요약한 것이다. 


비교 

MPEG-4 Visual 

H.264 

지원하는 데이터 형식

 사각형 비디오 화면 또는 필드, 

 임의의 형태의 비디오 물체,

 정지 텍스쳐와 스프라이트, 

 합성 또는 합성-자연 하이브리드 비디오 물체, 

 2D 또는 3D 메쉬 물체 

사각형 비디오 화면 또는 필드 

 프로파일의 개수

19

압축율 

중간 

높음 

비디오 스트리밍 지원 

계위 부호화 

스위칭 슬라이스 

움직임 보상 최소 블록 크기 

8x8 

4x4 

움직임 벡터 정확도 

1/2 또는 1/4 픽셀 

1/4 픽셀 

변환 부호화 

8x8 DCT 

정수기반의 4x4 DCT 

내장 디블로킹 필터 

없음 

있음 

상업적 구현을 위해 요구되는 저작권 사용료 

있음 

메인과 확장 프로파일의 경우에 있음 


728x90

+ Recent posts