C++2010. 7. 21. 18:25

#. 에러 메시지.
  System.BadImageFormatException이(가) 처리되지 않았습니다. Message="파일이나 어셈블리 'D2net.Common, Version=1.4.4.29, Culture=neutral, PublicKeyToken=null' 또는 여기에 종속되어 있는 파일이나 어셈블리 중 하나를 로드할 수 없습니다. 프로그램을 잘못된 형식으로 로드하려고 했습니다."

  Source="IngestTestApp"

  FileName="D2net.Common, Version=1.4.4.29, Culture=neutral, PublicKeyToken=null"

  FusionLog="=== 미리 바인딩된 상태 정보 ===\r\n로그: 사용자 = IRONTOOTH\\irontooth\r\n로그: DisplayName = D2net.Common, Version=1.4.4.29, Culture=neutral, PublicKeyToken=null\n (Fully-specified)\r\n로그: Appbase = file:///E:/D2NET/DevApp_irontooth/IngestTestApp/IngestTestApp/bin/Debug/\r\n로그: 초기 PrivatePath = NULL\r\n호출 어셈블리: IngestTestApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.\r\n===\r\n로그: 이 바인딩은 default 로드 컨텍스트에서 시작됩니다.\r\n로그: 응용 프로그램 구성 파일이 없습니다.\r\n로그: C:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.50727\\config\\machine.config에서 컴퓨터 구성 파일을 사용합니다.\r\n로그: 참조에 정책이 지금 적용되지 않습니다(전용, 사용자 지정, 부분, 위치 기반 어셈블리 바인딩).\r\n로그: 새 URL file:///E:/D2NET/DevApp_irontooth/IngestTestApp/IngestTestApp/bin/Debug/D2net.Common.DLL을(를) 다운로드합니다.\r\n오류: 어셈블리 설치를 완료하지 못했습니다(hr = 0x8007000b). 검색이 종료됩니다.\r\n"

  StackTrace:

       위치: IngestTestApp.IngestTestAppForm.ProcessProc()

       위치: System.Threading.ThreadHelper.ThreadStart_Context(Object state)

       위치: System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)

       위치: System.Threading.ThreadHelper.ThreadStart()

#. 원인.
  위와 같은 에러가 발생하여 이너넷 서핑을 한 결과 개발 환경의 플랫폼 설정을 managed C++과 C#이 동일해야 한다는 것을 알게 되었다.

#. 조치.
1. [구성 관리자]를 클릭한다.


2. 아래처럼 다른 플랫폼을 동일한 플랫폼으로 맞춰 준다.


Posted by 쿵캉켕
C++2010. 7. 21. 15:24

#. 선언
 - #include <atlconv.h>


#. Casting 사용 전 선언.
USES_CONVERSION;


#. 각 형변환에 대한 매크로
A2BSTR

LPSTR -> BSTR

A2COLE
    
LPSTR -> LPCOLESTR

A2CT
         
LPSTR -> LPCTSTR

A2CW
   
LPSTR -> LPCWSTR

A2OLE
   
LPSTR -> LPOLESTR

A2T
   
LPSTR -> LPTSTR

A2W
   
LPSTR -> LPWSTR

OLE2A
   
LPOLESTR -> LPSTR

OLE2BSTR
 
LPOLESTR -> BSTR

OLE2CA
   
LPOLESTR -> LPCSTR

OLE2CT
   
LPOLESTR -> LPCTSTR

OLE2CW
  
LPOLESTR -> LPCWSTR

OLE2T
   
LPOLESTR -> LPTSTR

OLE2W
   
LPOLESTR -> LPWSTR

T2A
   
LPTSTR -> LPSTR

T2BSTR
   
LPTSTR -> BSTR

T2CA
   
LPTSTR -> LPCSTR

T2COLE
   
LPTSTR -> LPCOLESTR

T2CW
   
LPTSTR -> LPCWSTR

T2OLE
   
LPTSTR -> LPOLESTR

T2W
   
LPTSTR -> LPWSTR

W2A   
LPWSTR -> LPSTR

W2BSTR  
LPWSTR -> BSTR

W2CA   
LPWSTR -> LPCSTR

W2COLE  
LPWSTR -> LPCOLESTR

W2CT   
LPWSTR -> LPCTSTR

W2OLE   
LPWSTR -> LPOLESTR

W2T
   
LPWSTR -> LPTSTR

#. ex
.h 파일
#include <atlconv.h> 추가.

.cpp 파일
HRESULT MediaMovement::SetClip()
{
  LPCOLESTR lpcolestrFile;
  LPSTR lpstrFile = "aaaaaaaaaaaa";
   HRESULT hr;
 
  //문자열 변환을 사용하기 위한 선언.
  USES_CONVERSION;

   lpcolestrFile= A2COLE(lpstrFile); //LPSTR을 LPCOLESTR로 변환하기 위해 A2COLE 사용.

  return hr;
 }

Posted by 쿵캉켕
회사/업무자료2010. 7. 16. 17:02

#. TC(Timecode)
  Timecode는 국제적인 조직을 가진 미국의 방송 및 영화 관련자 협회인 SMPTE(Society of Motion Picture and Television Engineers Time Code)에서 지정한 SMPTE Timecode입니다. Timecode는 현재 오디오, 비디오 그리고 필름의 동기(Synchronizing) 작업의 표준방식으로 쓰여지고 있습니다. 

  Timecode는 영상의 각 프레임마다 각각의 고유한 번호를 부여하는 것으로 번호와 영상이 짝이 되어 같이 움직이게 되는 것입니다. 모든 프레임에 일련번호를 가지고 있기 때문에 일련 번호만 찾으면 매번 같은 영상을 찾을 수 있는 장점이 있어 편집시에 편리하며 포맷이 다른 장비와도 Timecode만으로 동기가 가능하다는 장점이 있습니다.

  각 비디오 프레임은 Timecode Address라 불리는 고유의 번호를 갖고 있는데, 이 번호(Address)는 시:분:초:프레임 형태로 구성되며 총 8개 숫자로 표시됩니다. 한 비디오 프레임에 기록되는 총 정보량은 Word 라 불리며 한 Word는 80bit로 구성되고 한 프레임에 걸쳐 고르게 분포되어 있지요. 타임코드는 "0"과 "1"로 구성되는 디지털 신호지만 보통의 디지털 신호와 달리 테이프를 전, 후진 또는 빠르게, 느리게 주행시키면서도 코드를 읽을 수 있도록 bi-phase 변조 방식을 이용해 특별히 만들어진 신호입니다. 

  이렇게 코딩된 80bit의 코드는 몇군데로 나뉘어서 각각의 역할을 하는데, 26bit는 0에서 9까지의 숫자를 표현하여, 타임코드 판독기(Reader)를 통해 "0"과 "1"로 구성된 코드를 4bit단위의 그룹으로 읽고 해석하여 한자리 십진수를 재생합니다. 이렇게 생긴 8개의 십진수를 이용해 시:분:초:프레임을 만드는 것이지요. 

  나머지 bit들은 각각 사용자 정보(User Information)와 동기 정보(Sync Information)를 표시하는데 할애됩니다.

  타임코드는 어디에 기록되는가에 따라 LTC와 VITC의 두 가지로 구분되는데 두 개의 타임코드는 편집을 위한 구분이므로 LTC(Longitudinal Time Code)는 오디오트랙을 활용하여 테입주행방향과 평행하게 담기게 되고 VITC(Vertical Interval Time Code)는 비디오트랙에 비디오신호와 함께 담기게 되는 두 가지의 종류가 있다는 정도로만 알아두면 되겠습니다. VITC 방식은 기존의 LTC 방식으로 녹음되던 SMPTE TC의 보완을 위해 새로 개발된 것입니다.

쉽게 말하면 촬영한 영상의 프레임마다 고유 번호를 매겨서 편집등을 쉽게 하기 위해 사용하는 코드 정도로 생각하면 되겠습니다.^^

      ※  Bi-Phase 변조: 변조할 신호가 0이면 한 bit 동안 한번의 천이(Transition)를 일으키고, 변조할 신호가 1이면 한 bit 동안 펄스는 두 번의 천이를 일으키는 변조방식

  
#. CTL
  영화용 필름카메라가 1초에 24컷트의 사진을 연속으로 찍기 위해서 카메라는 필름을 1초에 24컷트의 속도로 일정하게 주행시켜주어야 합니다. 필름의 양쪽 끝에는 사각형의 구멍이 있는데 필름을 1초에 24장씩 찍히게 하는 역할을 하게 되며 영화용 35미리 필름은 1컷트당 4개의 구멍이 뚫려 있습니다.  ENG카메라에서 필름의 구멍(퍼포레이션)역할을 해 주는 것이 컨트롤(Control)트랙에 담겨진 컨트롤 신호인데 영상을 기록할 때 헤드의 회전 속도를 함께 기록하여 편집기에서 테입을 주행시킬 때 헤드의 회전속도가 촬영할 때와 일치되도록 하는 역할을 합니다.

  컨트롤신호의 모양은 톱니의 산과 골이 계속 되어 있는 펄스모양을 하고 있는데 1초에 발생되는 컨트롤신호의 숫자는 항상 일정하기 때문에 컨트롤 신호의 숫자를 카운팅하면 녹화된 테입의 런닝타임을 알 수 있습니다. 이처럼 컨트롤신호의 펄스숫자를 세어 녹화시간을 계산하는 것이 CTL방식의 카운트 방식입니다.

  CTL은 어떤 위치에서 시작하더라도 컨트롤트랙의 펄스신호숫자만을 몇 개인지 세면 되기 때문에 RESET이 가능해 특정 지점부터 다음 지점까지 녹화시간을 계산할 때 편리하게 사용할 수 있는 카운트 방식입니다.

[출처] CTL/TC/U-BIT|작성자 빨간나무

Posted by 쿵캉켕
회사/업무자료2010. 7. 13. 10:01

RS-232C


  RS-232C 1969년 미국의 EIA (Electric Industries Alliance)에 의해서 정해진 표준 인터페이스로 이것의 정의는 "직렬 2진 데이터의 교환을 하는 데이터 터미널 장비(DTE)와 데이터 통신장비(DCE)간의 인터페이스의 제반 사항을 규정하는 것" 이라고 하고 있다. 여기에서 RS Recommended Standard의 약자이고 232는 특정규격의 식별번호이며 C는 버전을 의미한다. RS-232C는 직렬전송을 위한 규격이다. 병렬전송에서는 8비트가 동시에 8개의 데이터 선을 통해 전송되는 반면, 직렬전송은 한번에 한 비트씩 전송된다. CCITT에서는 RS-232C와 유사한 규격을 V.24 라는 이름의 권고안으로 채택하였으며 ISO에서도 RS-232C와 호환성이 있는 ISO 2110를 채택하였다.

 

     DTE(Data Terminal Equipment): 정보처리 장치 또는 데이터 터미널 장비

     DCE(Data Circuit-terminating Equipment): DTE와 전송 매체 사이에 데이터 전송을 담당

 

흔히 말하는 시리얼 포트라는 것으로 컴퓨터가 외부와 데이터를 주고받기 위한 출입문 정도로 이해하면 되겠다. 통신을 하기 위한 최소 단위는 1바이트 (= 8비트)이다. 컴퓨터 내에선 데이터가 병렬로 처리 되는데 반해서 전화선은 직렬이다. 그러므로 병렬을 직렬로 직렬을 병렬로 바꾸어 주는 작업이 필요한데 이 작업을 해 주는 것이 RS-232C 방식이다. 이 방식은 일반적으로 1바이트 단위로 전송하는데 다른 데이터와의 혼란을 방지하기 위하여 앞뒤로 한 비트씩 첨가한다. 이를 Start bitStop bit라고 부른다. 그러므로 10비트를 1바이트로 보내게 되는데 2400bps라 하면 초당 2400바이트를 전송할 수 있다는 얘기가 되겠다. 보통 25핀 짜리 커넥터를 통하여 연결되는데 복잡해 보이지만 25핀 중에서 2,3,4,5,6,7,8,20,22번 이렇게 9개의 핀만이 쓰인다.

 

1.     커넥터 사양 및 신호선


2.     신호선

-       TXD(Transmit Data): 비동기식 직렬통신 데이터가 외부장치로 정보를 보낼 대 직렬통신 데이터가 나오는 신호선

-       RXD(Receive Data): 외부장치에서 들어오는 직렬통신 데이터를 입력 받는 신호선

-       RTS(Ready To Send): DTE 장치가 DCE 장치에게 데이터를 받을 준비가 됐음을 나타내는 신호선

-       CTS(Clear To Send): DCE 장치가 DTE 장치에게 데이터를 받을 준비가 됐음을 나타내는 신호선

-       DSR(Data Set Ready): 모뎀이 컴퓨터 또는 터미널에게 자신이 송수신이 가능한 상태임을 알리는 신호선

-       DTR(Data Terminal Ready): 컴퓨터 또는 터미널이 자신이 송수신이 가능한 상태임을 알리는 신호선

-       DCD(Data Carrier Detect): 모뎀이 상대편의 모뎀과 접속되었음을 컴퓨터 또는 터미널에 알려주는 신호선

-       RI(Ring Indicator): 상대편의 모뎀이 통신을 위해 먼저 전화를 걸어오면 이 신호를 모뎀이 인식하여 컴퓨터 또는 터미널에 알려주는 신호선

 

3.     결선도

            

    DTE to DTE 3 wire cables                             DTE to DTE 7 wire cables


 

 

RS-422(EIA-422)

RS 422 EIA에 의해서 전기적인 사양이 규정되어 있으나 물리적인 커넥터 및 핀에 대한 규정이 되어 있지 않다. RS-232와 별 차이가 없고 다만 물리적으로 하나의 신호선에서 두 개의 라인이 필요한데 그들의 표현은 신호선명 뒤에 + 로서 구분 표기 한다. 사용되는 신호선은 TXD+, TXD-, RXD+, RXD-, GND이고, RS 422 Point To PointMulti-Drop 모드 두 가지가 있다.

 

커넥터 사양


    
1.     Point To Point

-       결선도


-       하나의 신호선에 두 개의 라인이 필요함.

-       GND는 연결하지 않아도 된다.

-       +신호선은 +신호선과, -신호선은 신호선과 연결된다.

 

      2.     Multi-Drop

-       결선도


-       하나의 마스터에 여러 개의 슬레이브가 연결된다.

-       마스터는 어떤 슬레이브와 통신할 것인지를 결정하고 해당 슬레이브를 호출하면 호출된 슬레이브가 응답하는 체계로 구성된다.

-       하나의 마스터에 보통 10(최대 32)까지의 슬레이브가 연결 가능하다.

-       마스터는 Point To Point 모드로 설정되어도 상관 없으나 슬레이브는 반드시 Multi-Drop 모드로 설정해야 한다.

-       TX신호선과 공동 TXD라인에 TX신호선을 접속 또는 단락 시켜주는 개폐신호 사이에는 S/W 도는 H/W에 의한 적절한 타이밍의 조절이 필요하다.

 

Posted by 쿵캉켕
DirectShow2010. 6. 15. 15:23
#. 내용.
 - 필터를 제어하기 위한 메서드를 제공합니다. DirectShow의 모든 필터가 필수적으로 노출해야 하는 인터페이스 입니다.
 - 필터 그래프 매니저는 이 인터페이스를 사용하여 필터를 제어할 수 있습니다.
 - 어플리케이션은 핀을 열거하거나 필터 정보를 문의할 수 있습니다.

#. 메소드.
 - EnumPins : 필터가 제공하는 핀들을 나열
 - FindPin : 특정 ID에 해당하는 핀을 찾음
 - QueryFilterInfo : 필터 정보를 얻음
 - JoinFilterGraph : 필터 그래프에 연결된 경우 이를 필터에 알려줌
 - QueryVendorInfo : 벤더가 제공하는 정보를 얻음.
 - 그 외 IUnknown 및 IMediaFilter 메소드들을 제공 함.
Posted by 쿵캉켕
C++2010. 6. 15. 14:58

#. 내용.
 - 메모리 반환을 사용종료 시점에서 자동으로 Release()해 줍니다. 단 ID**스타일로 사용해야 합니다.

#. 방법.
 - 헤드파일에 atlbase.h를 반드시 포함 시킨 후 사용.
 - CComPtr<IDirect3DTexture9> g_pTexture = NULL; 형태로 선언 후 사용.
 - 종료시점에서 자동으로 Release()를 해주기 때문에 따로 해제 시키지 않아도 됨.

#. 일반적인 사용과 차이점.
 - 일반적인 텍스처 사용.
  -> LPDIRECT3DTEXTURE9 g_pTexture = NULL; 형태로 선언 후 사용.
  -> 종료 시점에 g_pTexture->Release()를 호출하여 메모리 반환.

 - CComPtr 사용.
  -> CComPtr<IDirect3DTexture9> g_pTexture = NULL; 형태로 선언 후 사용.
  -> 종료시점에서 자동으로 Release()를 해주기 때문에 따로 해제 시키지 않아도 됨.

Posted by 쿵캉켕