C#2010. 6. 15. 14:39

#. 내용.
 - C#에서 포인터를 사용하면 불안전한 코드가 됩니다. C#은 CLR이 메모리를 자동으로 관리해 주는데 포인터는 사용자가 직접 메모리를 건들이기 때문에 불안전코드가 되는 것입니다. 이 상태에서 실행하면 컴파일 오류가 발생합니다. 이때 unsafe키워드를 사용하면 포인터를 사용할 수 있습니다.

#. 방법.
1. unsafe 키워드를 함수 앞에 명시.
 - 함수의 매게변수와 함수의 끝부분까지 포인터를 사용할 수 있습니다.
 ex)
   unsafe static void PointerMethod(int* x)
   {
          *x = 1000;
    }
2. unsafe 블록을 설정.
 - 블록 내에서 포인터를 사용할 수 있습니다.
 ex)
   public static void Start()
   {
       int x1 = 10;
       unsafe
       {
           PointerMethod(&x1);
       }
       MessageBox.Show(x1.ToString());
  }

Posted by 쿵캉켕
C#2010. 5. 26. 17:22

#. C#에서 FlexGrid를 사용하는 경우 소스상에서 Column을 설정하는 방법 중 하나를 기술합니다. 이 변수에 대해 모든 것을 파악하지는 못했지만 현재 제가 파악한 부분만이라도 먼저 기술해 놓겠습니다. 만약 다른 기능을 알고 계시다면 답글 달아주시면 감사하겠습니다요.


1. 첫번째 숫자 3은 컬럼 수를 나타냅니다.
2. 6번째 숫자 0은 각 컬럼의 가로크기를 일괄적으로 설정할 때 사용합니다.
3. Columns 뒤에 0, 1, 2 는 각 컬럼에 대한 세부 설정 입니다. 지금 설정된 값 외에도 정렬방법, 편집 여부 등을 설정할 수 있습니다.
 - Width: 가로크기.
 - Caption: 컬럼 명.

※ FlexGrid.ColumnInfo의 경우는 VS 2005에서 미리보기가 지원되지 않기 때문에 나오지 않더라도 당황마시고 입력하세요. 입력이 끝난 뒤 마우스 커서를 올리면 말풍선이 뜹니다.

Posted by 쿵캉켕
회사/업무자료2010. 5. 11. 18:32
#. 설명
  범용적 사용을 목적으로 만들어진 포맷으로 방송 및 영상관련 표준을 제정하는 SMPTE(Society of Motion Pictures and Television Engineers)가 정한 파일 포맷의 하나로 오디오, 비디오, 메타데이터를 모두 포함하는 규격입니다. SMPTE 표준포맷, 메타데이터 처리능력, 시장의 지원여부 등을 고려할 때 향후 확장성이 높은 것으로 평가 되는 포맷입니다.


#. 포맷
  MXF 파일은 [Header], [Body], [Footer]로 구성됩니다. 파일 헤더에는 MXF 파일에 대한 정보를 담은 헤더 메타데이터(Header Metadata)가 있고, 인덱스 테이블은 옵션으로 저장될 수 있습니다. 에센스는 에센스 콘테이너를 통해 파일 바디에 저장되는데, MXF 파일 바디는 에센스 콘테이너를 한 개 이상 포함합니다. 이와 같이 에센스는 MXF 파일 내에 저장되는 것이 보
통이나, 때로는 MXF 파일 외부에 위치한 에센스를 참조하기도 합니다. 파일 풋터는 MXF 파일의 끝을 표시합니다.

1. Header
  MXF파일 전체에 해당되는 메타데이터가 저장됩니다. 이 메타데이터는 MXF 파일구조에 대한 구조적 메타데이터와, 프로그램 타이틀, 제장정보와 같은 에센스에 관련된 서술적 메타데이터로 구성됩니다.

2. Body
  에센스와 참조테이블로 구성됩니다. 참조테이블은 에센스를 빠르게 접근할 수 있게 해주는 인덱스 역할을 합니다. 에센스는 일반적으로 범용 컨테이너(Generic Container)에 담겨지게 됩니다.
  범용 컨테이너는 스트리밍을 지원하기 위해 설계된 컨테이너이고, 콘텐츠 패키지의 연속적인 배열로 이루어 집니다. 콘텐츠 패키지는 SDTI-CP의 포맷과 유사하며, 하나의 콘텐츠 패키지는 시스템, 비디오, 오디오, 데이터 아이템 등으로 구성됩니다.
  시스템 아이템의 경우 같은 콘텐츠 패키지에 관한 메타데이터와 각각의 비디오, 오디오, 데이터에 관련된 메타데이터도 포함될 수 있습니다.
  비디오 아이템에는 IMX/D10, DV, SDTI-CP내의 비디오 등 다양한 비디오가 매핑될 수 있고, 오디오 아이템에는 비압축 오디오가 매핑되는 것이 일반적입니다.
  MXF에서는 에센스나 타입을 인식하기 위해 다양한 식별자가 사용될 수 있습니다. UMID(Unique Material IDentifier)는 32Byte(기본)/64Byte(확장) 길이로 구성되어 있으며, 기본 UMID에는 자료번호가 포함되어 있어 A/V 자료를 유일하게 식별할 수 있습니다. 확장 UMID에는 GPS, 시간, 사용자 정보가 포함되어 있습니다. UL(Universal Label)은 미디어 타입이나 인코딩 방식 등을 구분하기 위해 사용되는 라벨이고 SMPTE 레지스트리에 등록되어 사용됩니다. 그러므로 에센스 컨테이너에 담겨있는 미디어의 압축방식이나 운용패턴(operational pattern)종류, 메타데이터의 종류 등은 UL을 확인하여 구분하여야 합니다. 예를 들어 MXF 파일내의 에센스 포맷은 MXF Header에 포함된 에센스 컨테이너 UL을 통해 알 수 있습니다.

3. Footer
  Footer는 MXF파일의 끝을 표시합니다. 옵션으로 헤더 메타데이터를 담을 수 있습니다.

  아래 그림은 MXF 파일포맷의 구조도 입니다.


#. 구성
1. 파일 헤더(File Header)
- 파일 헤더는 MXF 파일의 시작이며 헤더 메타데이터를 포함
- 런인(Run-in) : MXF를 다른 포맷으로 위장하기 위한 헤더. 옵션임. (예. WAV의 헤더)
- 헤더 메타데이터 : MXF 파일 및 콘텐츠에 관련된 정보를 저장
- 인덱스 테이블(Index Table) : 에센스에 임의 접근을 지원하기 위한 구조체. 타임코드를 에센스 콘테이너(Essence Container)의 주소 오프셋으로 변환하기 위한 정보 포함. 옵션임.

2. 파일 바디(File Body)
- 파일 바디는 A/V 에센스와 데이터를 저장함
- A/V 에센스와 데이터는 에센스 콘테이너에 담음

3. 파일 풋터(File Footer)
- 파일 풋터는 MXF 파일의 끝을 표시함
- 파일 풋터에는 옵션으로 헤더 메타데이터를 담을 수 있음
- RIP(Random Index Pack) : 각 파티션(Partition) 시작 주소에 대한 인덱스 정보를 담고 있는 구조체. 옵션임.

  아래 그림은 MXF파일의 구성도 입니다.
Posted by 쿵캉켕
회사/업무자료2010. 5. 11. 09:32

#. ID & 이어서 하단광고
 - ID: 방송국 명칭을 고지하면서 10초간 편집하여 화면 1/4 하단에 자막으로 방송되는 광고.
  -> ex: "만나면 좋은 친구~ MBC 문화방송"
 - 이어서: 방송사의 방송순서를 고지하면서 10초간 편집하여 화면 1/4 하단에 자막으로 방송되는 광고.
 - ID 및 이어서는 모두 하단 자막광고 형태로 방송됩니다.
 - ex: 자막광고 예시
 

#. 시보광고
 - 시간 자막과 함께 나오는 형태의 광고로 프랑스에서 정치적인 이유 때문에 처음으로 사용했던게 전 세계로 퍼졌다고 합니다.
 - 한국에선 삼성이 최초로 도입한 이 후 20년 동안 시간정보에 그치지 않고 기업들의 독특한 광고수단으로 변했습니다.
 - ex: 생각대로 T 시보 광고.
 

#. 토막광고(SPOT 광고)
 - 프로그램과 프로그램 사이에 나가는 광고로서 SB(Station Break)광고라고도 불리는 광고입니다. 1회 90초 광고가 가능하며, 대게 20초 광고 3개, 30초 광고 1개로 구성되는 경우가 많습니다.

※.참고사항.
 - ID 및 이어서 하단 광고는 본방 후CM이 끝난 후에 방송되는 광고 입니다.
 - ex: MBC 일일연속극(월) 후CM->자막광고(ID 10")->토막광고(90",20"x3, 30"x1)->자막광고(곧이어 10")->뉴데스크 제공자막->뉴스데스크 전 CM->시보광고(10")->뉴스데스크 본 프로그램 방송->뉴스데스크 후 CM->제공자막->자막광고(ID 10")와 같은 순으로 계속 됩니다.

Posted by 쿵캉켕
C#2010. 4. 23. 19:55

#. 내용.
  닷넷 UI를 사용하는 프로그램을 제작하다가 이런 메시지를 보았습니다.
 - "크로스 스레드 작업이 잘못되었습니다. 'm_listBoxMessages' 컨트롤이 자신이 만들어진 스레드가 아닌 스레드에서 액세스되었습니다."

  FTP Server를 제작하는 도중에 윈도우 폼에서 listBox컨트롤을 사용하였는데, TcpListener를 사용하는 Thread 안에서 Handler 클래스를 호출하면 Handler 클래스 내에 등록한 이벤트가 발생하여 윈도우 폼에 있는 listBox에 메시지를 출력하는 경우였습니다. 컴파일을 한 경우 정상적으로 실행되지만 디버깅모드에 들어가면 저 메시지가 출력 되더군요.

  네이년을 뒤져보니 다음 해결방법을 찾았습니다. 그 해결방법에 따라 소스를 아래와 같이 변경하였더니 정상적으로 디버깅 됩니다. 방법은 delegate를 선언하여 다르 스레드에서 Control을 호출하는경우 Invoke로 그 함수를 다시 호출하는 거죠. 아래 방법을 보시면 도움이 되실겁니다.

#. 방법.
public partial class FTPServerForm : Form
{
        //System.InvalidOperationException처리를 위한 delegate 선언.
        delegate void SetMessageHandler(int nID, string strMessage);
        .
        .
        .
        .

       //delegate를 사용하여 Control의 InvokeRequired속성이 true일 경우
     //Form에서 Invoke 함수로 해당 함수를 다시 호출.

        void FtpServerMessageHandler_Message(int nID, string strMessage)
        {
            if (this.m_listBoxMessages.InvokeRequired)
          {
                SetMessageHandler message = new SetMessageHandler(FtpServerMessageHandler_Message);
                this.Invoke(message, new object[] { nID, strMessage });
            }
            else
            {
                //실제 listBox에서 출력되는 부분.
                .
                .
                .
                .
             }
        }
}


※. 꼭 같은 경우는 아니지만 크로스 스레드 작업 시 해당 윈폼의 생성자에다가 CheckForIllegalCrossThreadCalls = false;를 넣어 줘도 되는 경우가 있습니다.

Posted by 쿵캉켕
기타2010. 4. 20. 14:18
#. 맥도날드가 배달이 된다는 사실은 알았는데 세부적인 정보를 몰라서 못시켜 먹고 있었다. 근데 괜찮은 정보를 발견하여 퍼왔습니다요~ㅋㅋ

Posted by 쿵캉켕