2010년 4월 28일 수요일

WoW.. 몸이 천근만근....

죽겟다 그냥 요즘

정신적인게 아이라 신체적으로 피곤에 쩔어주네

수현이형이랑 운동같이 하면서

하루하루가 힘들고 버겁다

단백질도 안먹어주고 이러다가 쌩고생하는거 아닌가 모르겟네ㅋㅋ

근손실이 너무 많아 안대~~~

그건그렇다치고 회복빨리해주는 BCAA가 끌리네..

아 여유생기면 단백질에 BCAA랑 글루타민 먹으면서 운동 하고싶다

피곤한데 피곤한만큼 몸은 변할거야 화이팅-!

 

그래도 공부할 체력은좀 남기자 이상일기끝~

2010년 4월 26일 월요일

몸이 행복해지는 8가지 자세

일종의 스트레칭..

나에겐 버거운.. 하지만 한번쯤 해볼만한 그런 자세들

 

 

 

 

몸이 행복해지는 8가지 자세 /'행복한 사람으로 사는 법' 크리스티 털링턴

몸이 행복해지는 8가지 자세
행복한 사람으로 사는 법 크리스티 털링턴 지음, 명진출판 세계적인 슈퍼모델 크리스티 털링턴은 웰빙 트렌드의 대표 주자. ‘1mm의 오차도 없는 완벽한 얼굴’이라는 찬사를 들으며 80~90년대 <보그>와 <엘르>의 지면을 장식했던 그녀가 웰빙 사업가로 변신하게 된 것은 요가에 빠져들면서부터. 스물여섯 살 무렵부터 본격적인 수련을 시작한 그녀는 이제 요가 전문가가 되었다.

행복에 이르는 8가지 동작

사용자 삽입 이미지

고무카 아사나 (소 머리 자세)

‘고무카’는 ‘소 머리’를 의미한다. 이 자세에서 숨을 깊이 쉬고 가슴을 활짝 열면 기분이 상쾌해진다. 우울함이 사라지고 에너지가 편하게 방출되는 것도 특징.


사용자 삽입 이미지

우타나 파다 아사나 (비스듬한 U형 자세)

목을 부드럽게 하고 등을 강하게 만들어주는 자세. 가슴이 활짝 열리고 척추의 유연성이 강화된다. 또 목과 가슴 쪽으로 혈액이 공급되어 갑상선 기능이 좋아지고 몸 전체의 균형을 찾아준다.


사용자 삽입 이미지

사르방 아사나 (고개 굽힌 물구나무)

아사나의 여왕’이라 불리는 자세. 마음의 평화를 얻을 수 있고 신체적으로도 건강해진다. 거꾸로 서서 하기 때문에 중력을 활용해 혈액 흐름을 반대로 만들어주고, 우리 몸 전체에 영향을 준다.


사용자 삽입 이미지

에카 파다 라자카토트 아사나 (왕 비둘기 자세)

복잡한 자세이기 때문에 취하기가 쉽지 않지만, 내분비계에 신선한 혈액을 공급해주며 어깨와 목이 굳는 것을 방지한다.


사용자 삽입 이미지

우스트라 아사나 (ㅁ 자형 자세)

뒤로 늘어난 척추를 자극하여 혈액 순환을 원활하게 하는 자세. 가슴과 골반을 열어주고 어깨를 유연하게 해주며 아랫배와 대퇴부 근육을 자극해 부드럽게 풀어준다.


사용자 삽입 이미지

우르드바 다누라 아사나 (역 U형 자세)

팔과 손목, 복부, 다리, 엉덩이와 척추가 강화된다. 우울함을 느끼거나 등의 통증을 덜어줄 때 좋으며 천식과 골다공증 치유에도 효과적.


사용자 삽입 이미지

고무크 아사나 (꼰 다리 자세)

앉은 자세에서 양발이 반대편 몸 뒤로 가도록 엇갈리게 꼰 다음 허리를 펴고 양손을 뒤로 해서 합장한다. 척추를 통해 몸 전체에 생명력이 충만하게 된다.


사용자 삽입 이미지

아르다 밧다 파드모탄 아사나 (외발 자세)

산처럼 단단히 버티고 선 자세를 응용한 것. 한쪽 발을 들어 무릎을 굽힌 채 손으로 잡는 자세로 척추가 올곧게 펴지고 온몸의 균형을 잡아준다.

2010년 4월 24일 토요일

DirectShow.NET

Sample Image - directshownet.jpg

Disclaimer: Experimental code using DirectShow with the .NET Framework 1.0

Abstract

This experimental code shows how to use DirectShow with .NET and C#. This includes simple media playback, playing DVD discs, capturing video streams to disk and a sample picture grabber.

Note, this article doesn't save you from reading the detailed DirectShow SDK documentation! I will not explain DirectShow, only some of the used .NET Interop technologies!

DirectShow

DirectShow is a standardized Microsoft Win32 API to use any compliant movie or video device from your application. DirectShow is available with the current DirectX version 8.1(b) for Windows 98/ME/2000 and included in XP. Please install the latest version, this article doesn't support anything except 8.1 :

Again, I will not describe any DirectShow interfaces, you have to know them by installing the SDK for C++, reading the SDK documentation and understanding the SDK samples!

DirectShow is exposed as COM components and interfaces, at these two 'levels':

  • DirectShow custom interfaces - mainly for C++ programmers.
  • DirectShow VB components - designed for VB6, provides a type library.
You can use the DirectShow playback components for VB6 with .NET, as described in this CodeProject article: DirectShow MediaPlayer in C# (Daniel Strigl)

.NET Interop

While using the VB6 components with the provided type library is easy with .NET, there is no direct way to access the custom DirectShow interfaces. We have to use Interop with one of this approaches:

  • Use 'Managed Extensions for C++', as done e.g. by DirectX.NET
  • Rewrite all the interfaces from IDL to e.g. C# !
I chose the second strategy for this reasons :
  • Uses only one (managed) language (C#)
  • Most DirectShow interfaces are not very complex
  • DirectShow methods for simple playback/capturing are not time-critical
  • We can directly use the (documented) interfaces without limitations, no 'wrapper classes'
Sure, this has some drawbacks:
  • Much of initial work for rewriting the interfaces
  • You have to understand Interop to use it correctly
  • Not very .NET/OO-like
One typical rewrite of an IDL interface in C# looks like this :
Collapse Copy Code
// ======== IDL of ICaptureGraphBuilder2 (AXExtend.idl) ======
[
    object,
    uuid(93E5A4E0-2D50-11d2-ABFA-00A0C9C6E38D),
    pointer_default(unique)
]
interface ICaptureGraphBuilder2 : IUnknown {

    // Use this filtergraph
    HRESULT SetFiltergraph( [in] IGraphBuilder *pfg );

    // what filtergraph are you using?
    // *ppfg->Release() when you're done with it
    HRESULT GetFiltergraph( [out] IGraphBuilder **ppfg);
    ....
... using Interop attributes with C# will be translated to :
Collapse Copy Code
// ======== C# version of ICaptureGraphBuilder2 (DsExtend.cs) ======

   [ComVisible(true), ComImport,
    Guid("93E5A4E0-2D50-11d2-ABFA-00A0C9C6E38D"),
    InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
public interface ICaptureGraphBuilder2
{
        [PreserveSig]
   int SetFiltergraph( [In] IGraphBuilder pfg );

        [PreserveSig]
   int GetFiltergraph( [Out] out IGraphBuilder ppfg );
   ....

Once we have all this interface definitions in C#, we can start calling DirectShow just like we did in C++:

Collapse Copy Code
// ======== C++ code to create the COM instance of Filter Graph ========

    JIF(CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, 
                         IID_IGraphBuilder, (void **)&pGB));

    // Have the graph builder construct its the 
// appropriate graph automatically
JIF(pGB->RenderFile(wFile, NULL)); // QueryInterface for DirectShow interfaces JIF(pGB->QueryInterface(IID_IMediaControl, (void **)&pMC)); ....
... we replace CoCreateInstance with Activator.CreateInstance, and QueryInterface just is a simple cast in C#:
Collapse Copy Code
// ======== C# code to create the COM instance of Filter Graph ========

    Type comtype = null;
    object comobj = null;
    try {
        comtype = Type.GetTypeFromCLSID( Clsid.FilterGraph );
        if( comtype == null )
            throw new NotSupportedException( 
"DirectX (8.1 or higher) not installed?" ); comobj = Activator.CreateInstance( comtype ); graphBuilder = (IGraphBuilder) comobj; comobj = null; int hr = graphBuilder.RenderFile( clipFile, null ); if( hr < 0 ) Marshal.ThrowExceptionForHR( hr ); mediaCtrl = (IMediaControl) graphBuilder; ....

Projects Structure

The download contains all this C# source code:

Collapse Copy Code
\DirectShow\
     \DShowNET\              // the DirectShow interface definitions :
              \DsBugWO.cs      // workaround for a bug 
              \DsControl.cs    // ported from control.odl 
              \DsCore.cs       // ported from axcore.idl 
              \DsDevice.cs     // device enumerator, helper functions 
              \DsDVD.cs        // DVD interfaces from dvdif.idl 
              \DsExtend.cs     // ported from axextend.idl 
              \DsUtils.cs      // utility classes, SDK Common sources 
              \DsUuids.cs      // UUIDs and CLSIDs from uuids.h 
              \QEdit.cs        // grabber interfaces from qedit.idl 

     \CaptureNET\            // video stream capture sample 
     \DVDPlayerNET\          // DVD player sample 
     \PlayWndNET\            // simple media file playback 
     \SampleGrabberNET\      // picture grabber 

Playback

The first sample included in the download is PlayWndNET. It plays the known video and audio file formats of DirectShow like avi, mpg, wav, mid etc.

DirectShow playback

DVD Player

For the next sample, DVDPlayerNET you must have a third-party DVD codec installed, like WinDVD or PowerDVD. Then, the C# sample uses the DirectShow DVD interfaces to watch the movie. It also supports menu navigation.

DirectShow DVD

Grab Picture

The most complex sample provided is SampleGrabberNET. It shows a live video stream from a capture device like DV cam, web cam or TV card in a preview window. By pressing the 'Grab' toolbar-button, you can capture a still picture to a 24-Bit RGB bitmap file!

DirectShow picture grabber

The sample also supports the IAMTVTuner interface of a TV card, so you can switch the TV tuner channel.

Capturing

The last sample, CaptureNET can be used to capture a live video stream to disk. Note, the few settings can only be done once at startup, and writing to the AVI file starts immediately.

DirectShow Capturing

Limitations

  • EXPERIMENTAL! don't use it in production quality code.
  • The samples only provide partial and very basic functionality.
  • I did most tests on Windows XP and few on Windows ME.
  • Tested only on a very limited set of devices with only few media formats.
    I used a Logitech QuickCam, Sony DV camcorder, Hauppauge WinTV PCI and WinDVD.
  • Get the latest driver (WDM) from manufacturer.
  • Some devices fail if you select unsupported settings in the dialogs.
  • This code will NOT help to solve any DirectShow/WDM configuration problems.
  • Get >128MB RAM, >400MHz CPU, fast & huge harddisk.

License

This article, along with any associated source code and files, is licensed under A Public Domain dedication

출처 : ) http://www.codeproject.com/KB/directx/directshownet.aspx

기초 - Indroduction

요즘 진행하는 프로젝중에 DirectShow를 사용하는 프로젝이 있어서 스터디중입니다.

DirectShow에 대해 소개하는 글을 계속 올립니다. 역사니 뭐니 하는건 다 생략하구...

개념부터...

 

- Filter, Filter Graphs

 

DirectShow의 기본 빌딩 블럭은 filter라 불리는 콤포넌트이다. 필터는 멀티미디어 스트림을

어떤 연산을 해서, 내용을 변화시킨 후 출력해 주는 콤포넌트라 할 수 있다.

 

예를 들면 파일을 읽는 필터는 HDD에서 파일을 읽어서, 해당 파일을 스트림으로 만들어서

출력으로 내놓게 된다. 디코더나 출력장치로 출력하는 콤포넌트도 DirectShow에서는 필터라 부른다.

 

DiretShow에서는 이런 필터를 연결해서 필요한 작업을 진행한다. 예를 들어 파일필터의 출력을 디코더 필터의 입력에 연결하고, 디코더필터의 출력을 렌더러에 연결하고 하는 식이다. 당연한 이야기지만, 한 필터의 출력이 두개 이상의 필터에 입력으로 연결될 수도 있고, (아마도) 둘 이상의 필터의 출력을 한 필터에서 입력으로 받아서 처리할 수도 있을 것이다. 따라서, 필터간의 연결상태는

단순한 선형이 아닌 그래프 구조를 띄게 되며, 이런 연결된 필터들의 집합을 필터그래프라 한다.

 

다음 예는 MSDN에 나온 필터그래프의 예이다.

 

HDD의 파일을 FileSource필터가 읽어서, AVI Splitter에 전달하면, AVI Splitter는 그 데이터를 비디오 스트림과 오디오 스트림으로 만들어서 각각 AVI Decompressor와 Default DirectSound Device에 전달한다. AVI Decompressor는 비디오 스트림을 디코드하고, 그 결과를 Video Renderer에 전달하게 되며, 최종적으로 VideoRenderer는 DirectDraw나 GDI를 이용해 비디오 프레임을 화면에, DirectSound Device는 소리를 DirectSound를 이용해 스피커에 출력하게 된다.

 

어플리케이션 작성시에는 이러한 필터 그래프 생성을 위해 Filter Graph Manager를 사용하게 된다. Filter Graph Manager는 필터들을 서로 연결할 수 있는 메소드를 제공하고, 스트림의 흐름을 제어하는 메소드와 각 필터에서 발생할 수 있는 이벤트를 전달하는 구조를 가지고 있다.

 

DIrectShow 어플리케이션의 동작은 다음과 같은 절차를 거쳐 이루어진다.

 

1. Filter Graph Manager의 인스턴스 생성

2. Filter Graph Manager를 통한 Filter Graph의 생성

3. Filter Graph Manager를 통한 스트림의 제어와 이벤트의 처리.

4. 동작 완료 후엔 사용했던 필터와 manager를 해제

 

다음 그림은 이 과정을 도식화한 것이다.

 

 

 
 

각 필터와 Graph Filter Manager는 COM객체이다. 따라서, 객체의 생성과 해제도 COM의 규칙에 따라 이루어지게 된다.

 

 

출처- http://mrwebi.tistory.com/34

File Play

이 예는 MSDN에 나온 샘플 DirectShow어플리케이션이다.

 

앞에서 말했던 DirectShow 어플리케이션 작성의 4가지 스텝을 다시 기억해 보자.

  1. 필터그래프 매니저의 인스턴스 생성
  2. 매니저를 이용해서 필터 그래프 생성
  3. 매니저를 이용해서 필터그래프에서 데이터를 처리하도록 함
  4. 사용이 끝나면 리소스 반환

1. 인스턴스 생성

 

앞에서 이야기했듯이 매니저나 필터 모두 COM객체이기 때문에, 우선 COM라이브러리를 초기화 해야 한다. 이 작업은 CoInitialize를 호출함으로써 이루어진다.

 

HRESULT hr = CoInitialize(NULL);
if (FAILED(hr)) {
         // 에러처리 코드(간단하게 하기 위해 생략)
}
에러처리는 생략했으며, 필요한 분은 COM책을 들여다 보시면 다 있다. (참고로, MSDN에 따르면, DirectShow는 free-threading model이기 때문에, COINIT_MULTITHREADED옵션을 사용해도 된다고 한다. 이때는 CoINitializeEx를 사용하라.)
이제 필터그래프매니저를 생성해야 한다. COM에서는 객체 생성을 위해 CoCreateInstance를 사용한다.
 
IGraphBuilder *pGraph;
 
HRESULT hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph);

 

CLSID_FilterGraph는 필터그래프매니저의 클래스ID이다.(뭔소린지 모르는 분은 COM책을 보시라. 앞으로 설명할 내용에서 나오는 용어들도 마찬가지). 또한, 이 예제에서는 inprocess DLL로 사용하기 때문에, CLSCTX_INPROC_SERVER로 실행 컨택스트를 정해준다. IID_IGraphBuilder는 우리가 사용할 인터페이스 ID이다. 이 인터페이스는 그래프 생성시 사용할 메소드들이 정의되어 있다. pGraph의 주소를 void**로 넘겨주는것은 CoCreateInstance함수가 그렇게 정의되어 있기 때문이다. CoCreateInstance함수는 pGraph에다 생성된 COM객체의 인터페이스에 대한 포인터를 넘겨주게 된다.

 

이제 IGraphBuilder인터페이스를 얻었고, 다른 두개의 인터페이스를 얻을 차례이다.

- IMediaControl은 스트리밍을 콘트롤한다. 그래프의 작동을 시작하고, 중지하는 메소드를 포함하고 있다.

- IMediaEvent는 필터그래프매니저에서 발생하는 이벤트를 얻기 위한 메소드를 제공한다.

 

두 인터페이스 모두 IGraphBuilder에다 QueryInterface를 해서 얻는다.

 
IMediaControl *pControl;
IMediaEvent *pEvent;
hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);
 
2. 그래프 생성
 
이제 필터그래프를 만들수 있게 되었다. 파일을 플레이하기 위한 필터그래프는 다음 메소드를 호출해서 할 수 있다.
 
hr = pGraph->RenderFile(L"C:\\Example.avi", NULL);

 

IGraphBuilder::RenderFile 메소드는 지정한 파일을 읽을 수 있는 필터그래프를 생성한다. 첫번째 파라미터는 wide character타입이다. 따라서, L"C:\\Example.avi"을 사용했다. 두번째 파라미터는 항상 NULL이어야 한다.

 

이 메소드는 파일이 없거나, 파일의 포맷을 알아낼 수 없을 경우 실패한다.

 

메소드에서 성공하게 되면, 그래프 생성이 완료된 것이고, 파일의 플레이를 시작할 수 있게 된 것이다.

 

3. 그래프 동작

 

필터그래프 생성후, IMediaControl::Run을 호출하면 그래프가 동작하게 된다. 즉, 파일을 플레이하게 된다는 것이다. 다음과 같이 호출한다.

 
hr = pControl->Run();
 

필터 그래프가 동작하게 되면, 데이터가 필터 그래프를 통해 흘러서 비디오와 오디오가 렌더링되게 된다. 이때 비디오/오디오의 플레이는 독립된 쓰레드로 진행된다.

 

플레이의 완료까지 기다리려면 IMediaEvent::WaitForCompletion메소드를 호출함으로써 기다릴 수 있다.

 
long evCode = 0;
pEvent->WaitForCompletion(INFINITE, &evCode);

 

이 메소드는 플레이가 종료되거나, 지정한 시간이 지날 될 때까지 블럭되며, 이벤트를 evCode에 넘겨주게 된다. 어플리케이션은 이벤트코드를 보고 어떤 이유로 WaitForCompletion이 리턴했는지를 알수 있다.

 

4. 리소스 해제

 

사용이 끝난 COM객체는 release해주고, COM라이브러리도 반환해야 한다. 다음과 같다.

 

pControl->Release();

pEvent->Release();

pGraph->Release();

CoUninitialize();

 

전체 소스는 첨부파일에 있다.

 

* 링크 및 실행 방법

다음 파일은 항상 인클루두 해야 한다.

Dshow.h

링크시에는 다음을 참조해 필요한 라이브러리는 함께 링크해야 한다.
Strmiids.lib : 모든 DirectShow 어플리케이션에 필요.
Quartz.lib : AMGetErrorText 메서드의 호출에 필요.
Strmbase.lib :DirectShow의 base classes를 사용할 경우만 필요

 

dshow.h를 사용하기 위해서는 platform SDK를 깔아야 하며, directX SDK도 함께 깔아야 한다.

두 파일은 모두 MS의 다운로드 페이지나 naver자료실에서 다운로드 받을 수 있다.

 

 

출처 -http://mrwebi.tistory.com/33

필터와 필터그래프

필터란? MSDN에 따르면 다음과 같다.

 

A key component in the DirectShow architecture, a filter is a COM object that supports DirectShow interfaces or base classes. It might operate on streams of data in a variety of ways, such as reading, copying, modifying, or writing the data to a file. Sources, transform filters, and renderers are all particular types of filters. A filter contains pins that it uses to connect to other filters.

 

필터란 DirectShow구조의 핵심 콤포넌트로서, DirectShow interface나 베이스 클레스를 지원하는 COM객체이다. 필터는 데이터 스트림에 대해 다양한 방식으로 작업을 하게 된다. 예를 들면 스트림을 읽거나, 복사하거나, 변경하거나, 파일에 쓰는 일과 같은 작업이 있다. 소스, 변환필터, 렌더러는 필터의 특정한 형태들이다. 필터는 다른 필터와 연결하기 위한 핀을 가지고 있다.

 

위에 있는데로, 필터는 DirectShow 구조의 핵심 콤포넌트다.

또한, 필터는 COM객체이다.  COM에 대해서는 Inside COM등 다른 COM책을 참조하면 될것 같다.(너무 이야기가 길어져서 생략한다.)

 

필터는 다른 필터와 연결되기 위해 핀(pin)을 가진다. 반도체IC에 달려있는 핀을 생각하면 된다. 따라서, 핀에는 입력핀과 출력핀이 있으며, 필터의 종류에 따라 입력핀은 있고, 출력핀은 없거나(렌더링 필터), 출력핀은 있고, 입력핀은 없는 경우(소스필터)가 있으며, 입출력핀을 모두 갖춘 필터도 있다(변환필터).

 

위에 요약된 것과 같이, 필터의 종류는 크게 세가지로 나눌 수 있다.

1) 소스 필터 : 파일/디스크/인터넷/위성 등에서 소스 데이터를 받아서 필터 그래프로 전해주는 필터

2) 변환 필터 : 데이터 스트림을 입력으로 받아, 작업을 수행한 후, 그 결과를 출력스트림으로 보내주는 필터

3) 렌더링 필터 : 입력 스트림을 받아서 최종 출력 형태로 변환해 출력해 주는 필터. 일반적으로는 화면에 보여주거나, 스피커를 통해 소리로 전달하게 되지만, 메모리나 디스크 파일에 전송할 수도 있다.

 

필터들이 연결된 네트웍을 필터 그래프라 하며, 데이터는 필터 그래프를 일반적으로 소스필터에서 렌더링필터 방향으로 흘러가게 된다. 이 데이터의 흐름을 기준으로 순방향쪽에 있는 필터를 다운스트림필터라 하며, 역방향쪽에 있는 필터를 업스트림필터라 한다. 다른말로 어떤 필터를 기준으로 그 필터에게 데이터를 전달해 주는 쪽을 업스트림필터라 하고, 데이터를 전송받는 쪽을 다운스트림 필터라 한다.(업다운 구분은 물의 흐름을 생각하면 쉬울듯 하다. 위에서 아래로 물이 흐르니까..)

 

예를 들어 필터가 A-B-C-D순으로 연결된다고 해보자. A는 소스필터이고, D는 렌더링필터이고, B,C는 변환필터라 하자. 이때, A는 B의 업스트림필터이고, B는 C의 업스트림필터이며, D는 C의 다운스트림필터이다.

 

우리가 플레이할 미디어와 관련된 데이터스트림은 다운스트림쪽으로 흘러가지만, 다른 제어정보 등은 역방향으로도 전달될 수 있다는 점을 언급해 두고 넘어가도록 하겠다.

 

필터그래프의 생성은 어플리케이션에 의해 각 필터간의 핀을 연결함으로써 수동으로(?)이루어질 수도 있으며, 필터그래프 매니저에 의해 자동으로 이루어질수도 있다. 필터그래프 매니저는 특정 미디어 타입에 따라 적절한 필터그래프를 생성할 수 있는 능력을 가지고 있으며, 레지스트리에서 적절한 클래스를 찾아서 미디어 타입이나 인코등 스킴에 따라 렌더링이나 디코딩을 수행하는 적절한 필터를 찾아서 필터그래프의 생성과 미디어 데이터 처리를 진행할 수 있다.

 

 

출처- http://mrwebi.tistory.com/32

필터와 핀

여러번 반복해서 지겨운 생각도 들겠지만, DirectShow구조는 필터들을 연결해서 데이터가 흘러가게 하고, 필터그래프 매니저가 데이터의 흐름을 제어하는 구조로 되어있다.

 

그렇다면 필터와 필터는 어떻게 연결할 수 있을까? 이 연결을 위한 객체가 바로 핀(pin)이다.

IC에 핀이 있어서 다른 소자와 연결할 수 있는 것 처럼 필터에도 핀이 있어 다른 필터와 연결을 할 수 있는 것이다. IC마다 핀의 종류와 성격이 다르 듯, 필터의 성격에 따라 하나의 핀만을 노출할 수도 있고, 둘 이상의 핀을 노출할 수도 있다.

 

MSDN의 설명에 따르면, 핀은 필터에 의해 생성되는 COM 객체로써, 필터에 대한 단방향 데이터 스트림(unidirectional data stream)의 연결점 역활을 한다.

 

입력핀은 데이터를 필터 안으로 읽어들일 때 사용하며, 출력핀은 데이터를 다른 필터에 전달할 때 사용한다. 소스필터는 파일에서 읽은 개개의 스트림마다 각각 하나의 출력핀을 제공한다. 코덱과(compression/decompression을 줄여서 codec이라 함)같은 전형적인 변환필터는 하나의 입력핀과 출력핀을 가진다. 마찬가지로 렌더러 필터는 보통 하나의 입력핀만을 가지는 경우가 많다.

 

핀의 이름은 필터를 작성하는 사람이 마음대로 붙일 수 있다. 만약 핀의 이름이 ~로 시작되면, 필터그래프는 그 핀을 IGraphBuilder::RenderFile을 어플리케이션이 호출했을 때, 자동으로 처리하지 않는다. 따라서, ~로 시작되는 핀 이름은 렌더링을 원하지 않고 정보만 제공하고 싶은 경우에 사용할 수 있다. ~가 핀의 이름의 첫글자로 들어가는것은 IGraphBuilder::RenderFile과 인텔리전트 연결(IGraphBuilder::Connect)에만 영향을 끼친다. 만약 ~로 시작되는 핀을 인텔리전트 연결에 사용하고 싶으면, IPin::Connect메소드를 해당 핀에 구현해주면 된다.

 

필터는 최소한 IBaseFilter인터페이스는 노출을 시켜야 한다. 이 인터페이스는 필터가 제공하는 핀들을 뒤질 수 있도록 하는 메소드를 제공하고, 필터에 대한 정보를 제공한다. 또한, 이 인터페이스는 IMediaFilter에서 상속한 메소드를 함께 제공한다. 이런 메소드에는 필터의 상태를 처리하는 것이나(플레이/일시중지/정지), 동기화 관련된 메소드들이 있으며, 팔터 그래프 매니저에 의해 주로 호출되게 된다.

 

당연한 말이지만, 필터가 처리하는 미디어의 종류나 작업에 따라 이 인터페이스 외에 필요한 인터페이스를 더 노출할 수 있다. 예를 들어 ISpecifyPropertyPages 인터페이스를 통해 프로퍼티 페이지를 제공해서, 필터의 프로퍼티를 설정할 수 있도록 할수도 있다.

 

핀은 다른 핀과의 연결과 데이터의 전송을 책임진다. 핀 인터페이스는 다음 기능을 지원한다.

   * 공유메모리 혹은 다른 자원을 사용한 타임스탬프가 찍힌 정보의 전달

   * 핀대핀 연결에 있어 데이터 포맷의 협상

   * 데이터 복사 최소화화 처리 성능 향상을 위한 버퍼 관리와 버퍼 할당 관리 협상

 

핀 인터페이스는 그 핀이 입력핀인지 출력핀인지에 따라 약간씩 다르다.

 

출력핀은 일반적으로 다음 인터페이스들을 노출한다.

 

* IPin의 메소드들은 핀, 연결, 그리고 데이터 타입 정보에 대한 질의에 응답하도록 하며, 필터그래프가 정지될 때, 플러쉬 통지를 다운스트림으로 보내는데 사용된다.

* IMediaSeeking의 메소드들은 스트림의 길이, 시작시간, 그리고 종료시간을 렌더러로 전달하도록 한다. 렌더러는 미디어의 위치를 업스트림으로 보내서, 스트림이 적절한 위치로 위치하도록 하는 책임을 지닌 필터(일반적으로는 소스필터)가 위치 변경을 처리할 수 있도록 한다.

* IQualityControl의 메소드들은 렌더러에서 업스트림쪽으로 품질 컨트롤을 위한 메시지를 전달하도록 하는데 사용된다.

 

입력핀은 다음 인터페이스들을 노출한다.

* IPin은 핀이 출력핀에 연결될 수 있도록 하고, 핀의 정보와 연결 정보를 제공하도록 한다.

* IMemInputPin은 핀이 자신의 메모리 할당자를 제안하고, 메모리 할당자에게 출력핀이 데이터를 제공하고 있음을 통지하고, 미디어 샘플을 설정된 할당자를 통해 전달할 수 있도록 한다. 또한, 버퍼의 플러쉬 기능도 제공한다. 이 인터페이스는 연결된 핀이 전송을 위한 메모리 할당자를 제공하지 않는다면, 공유메모리 할당자를 생성할 수 있다

 

출처 - http://mrwebi.tistory.com/31

DirectShow 레퍼런스 모음

IMediaFilter 인터페이스

 

이름 : IMediaFilter

설명 : 시간에 기반한 데이터를 제공하는 모든 멀티미디어 콤포넌트들이 제공해야 하는 인터페이스. 콤포넌트의 실행 상태 제어와 상태를 다른 객체와 동기화 시키는 방법을 제공하기 위해 사용함

상속 : IPersist

구현 : 모든 filter에서 구현되어야 함. CBaseFilter를 사용해서 구현 가능

사용 : 보통은 IMediaFilter를 상속한 IBaseFilter를 많이 사용하기 때문에, 직접 어플리케이션에서 사용되는 경우는 거의 없음. 필터그래프 매니저가 사용하며, 플러그인 배급자에 의해 필터그래프 매니저가 노출시킨 IMediaFilter의 메소드들이 호출되는 경우가 있음.

 

메소드 :

- IUnknown 메소드들 : COM객체니까 당연히 지원해야 함

- IMediaFilter 메소드들 :

  * Stop : 필터를 정지상태로 전이시킴

  * Pause : 필터를 일시중지 상태로 전이시킴

  * Run : 필터를 플레이 상태로 전이시킴

  * GetState : 현재 상태를 반환

  * SetSyncSource : 동기화를 위한 클럭을 지정

  * GetSyncSource : 필터에 지정되어 있는 클럭을 반환



IBaseFilter Interface

 

이름 : IBaseFilter

설명 : DirectShow의 모든 필터가 필수적으로 노출해야 하는 인터페이스이다.

상속 : IMediaFilter

구현 : 모든 DirectShow필터는 이 인터페이스를 구현해야 함. CBaseFilter클래스를 사용해 구현할 수 있음

사용 : 필터그래프 매니저가 일반적으로 사용. 어플리케이션은 핀이나 벤더관련 정보를 얻는데 사용할 수 있음.

메소드 :

 

- IUnknown 메소드들 : COM객체니까 당연히 지원해야 함

- IMediaFilter 메소드들 : IMediaFilter메소드를 살펴볼 것

- IBaseFilter에서 선언된 메소드들

   * EnumPins : 필터가 제공하는 핀들을 나열

   * FindPin : 특정 ID에 해당하는 핀을 찾음

   * QueryFilterInfo : 필터 정보를 얻음

   * JoinFilterGraph : 필터 그래프에 연결된 경우 이를 필터에 알려줌

   * QueryVendorInfo : 벤더가 제공하는 정보를 얻음


출처- http://mrwebi.tistory.com/30

C# 폼간 메세지 전송

편하기 하기 위해 클래스를 만들자..

//class1
public class Instance
{
    public static string str_name;  
}

이렇게 static 으로 해주어야 값이 초기화 되지 않는다.

//form1
클래스명.str_name = 넣을값;

//form2
public string str;
private void Lend_Load(object sender, EventArgs e)
        {
         str = Instance.str_name;        
        }

이렇게 한후에 전역변수 str 을 마음것 가져다 쓰면 된다

 

 

출처 - http://mrwebi.tistory.com/9

2010년 4월 22일 목요일

Visual Studio 2008 자동정렬하기

자동정렬을 하려면,

전체선택후 Ctrl을 누른상태에서 K 누르고 F를 눌러주면 된다.

이거 유용하다-

2010년 4월 19일 월요일

처음쓰는 웨이트 날적이..

내가 웨이트트레이닝을 시작한지는 2004년 겨울쯤이니...어언........

6년이 흘렀다..물론 계속적으로 해준건 아니고 중간중간 군대복무나

아르바이트나 하며 텀은 있었지만 생각해보면 처음 시작한건 오래됬지만

아직까지 그렇다할 성과는 없는거 같네^^ 뭐 그래도 나날이 발전하는

내가되고 있고 즐기면서 하고 있으니 이걸로 만족한다

 

얼른 공부하고 내가 어엿한 직장을 자리잡고 가정이 생기고 여유가 된다면

내나이 서른마흔다섯살이 되더라도 언젠가 꼭한번은 식이요법과

꾸준한운동으로 보디빌더대회에 참가하고싶다 웨이트트레이닝이라는거

정말 매력있다 물론 막말로 쇳덩이 들었다 놓았다를 반복하는게 다지만

땀흘리며 스트레스도 날리며 변해가는 몸을 보면 재미라는게 분명 있다

그게 내가 평생 할거라고 다짐하게된 이유이기도...

 

 

2010년 4월 18일 일요일

세이노가 추천해주는 도서목록

세이노 선생님께서 말씀하셨던 도서및 인물들에 대하여 정리했습니다.

---------------------------------------
동아일보 칼럼중에서

1. 칼럼에서 이야기 되었던 책들

편집광만이 살아남는다 /앤드루 그로브   : 절판
    ---> "승자의 법칙"으로 바뀌었습니다.
            앤드류 그로브 저/ 한국경제신문사/ 2003년4월

다쓰고 죽어라 / 스테판 M 몰란,마크제빈

솔직히 말해서 나는 돈이 좋다 /오숙희

느리게 사는 즐거움 / 어니 MJ 젤린스키

마음 가는대로 해라 / 앤드루 매튜스

경제적 자유로 가는 길 / 보도 셰퍼(Bodo Schafer)  : 절판
   --->  "돈" 으로  바뀌었습니다
         보도 세퍼저/ 학원사 / 2003년 4월

마피아 경영학 / V 지음, 원재길 옮김 / 황금가지 / 2004년 3월

성공하는 사람들의 7가지 습관 / 스티븐 코비

정상에서 만납시다 /지그 지글러

협상/ 허브 코헨
--> "협상의 법칙"으로 바뀌었습니다.

비즈니스 협상론 / 김병국 변호사 --> 협상관련 좀더 전문적인 내용

사람을 간파하는 기술 / 일본의 야마다 오사무 / 김영주 역/ 거름출판사

-- 우정에 관하여 이야기 하셨던 책 --
샬롯의 거미줄 / 엘윈 B. 화이트의
아낌없이 주는 나무 / 쉘 실버스타인
싯다르타 / 헤르만 헤세


2. 읽으라고 하신 책들

아동도서 ‘펠릭스는 돈을 사랑해’

톰 피터스 / 이 사람의 모든 책을 읽어라

그대 스스로를 고용하라 / 구본형

일 잘하는 사람, 일 못하는 사람/ 호리바 마사오

프리젠테이션 박사 / 야하타 히로시

 

3. 내가 마음 속 스승으로 삼는 사람은 미국의 투자자 워렌 버핏 같은 사람들이다

-----------------------------
세이노의 가르침 까페에 기고한 글들중에서..

1. 읽으라고 하신 책들

이긴자가 전부 가지는 사회  :     절 판
      로버트 프랭크 / 씨엠비지니스 / 1997년 1월

먹어라 그렇지 않으면 먹힌다 - 원제 : eat or be eaten / 필 포터

돈버는 사람은 따로 있다 / 이상건

앤드류 매터스 / 마음가는 대로 해라

신입사원 / 조용문,박윤영
   ---> "신입사원이 알아야할 A~Z 까지 "으로 바뀌었습니다..
 조용문 지음 / 리빙북스 / 2002년 6월

   
입사 1년 이내에 일류 사원이 되자 / 사카가와사키오

협상의 비결-원제 : You can negotiate anything / 허브 코헨( Herb Cohen )
   ---> 협상의 법칙

비즈니스 협상론 / 김병국 -> 협상에 관한 좀더 전문적인 내용

이런 사원이 문제 사원이다 / 김광겸지음 / 한경원(춮판사)  : 절판

클릭! 미래 속으로 / 페이스 팝콘 등저   : 절판
         조은정 외 옮김 / 21세기북스(북이십일) / 1999년 9월

아들아! 인생의 지혜를 배워라 / 김승호 -> 조선일보 사이트에서 찾아내 읽어 보아라

소비의 사회 / 쟝 보드리야르 -> 남들이 만들어 놓은 덫에서 벗어나 주체적 삶을 살고자 원한다면 반드시 읽어보라

이루지 못할 야망은 없다 - 원제: The Arc of Ambition / James Champy, Nitin
Nohria -> 청소년은 읽어라

공부가 가장 쉬었어요/ 장승수 -> 중고등학교 학생들은 읽어라

팰릭스는 돈을 사랑해 / 아동 도서

부자는 20대에 결정된다 / 요코다 하마오 -> 금융기관이나 재테크의 “기본 조차 모르고 있다면" 나이와 상관없이 읽어라.

높은 연봉과 빠른 승진을 위한 21가지 전략
 : 원본명  "Get Paid More and Promoted Faster  "
 브라이언 트레이시 저/ 새로운 제안/

 

2. 때로는 돈 버는데 도움이 전혀 안 되는 책들도 읽어라.
시집도 읽고 소설도 읽어라. 그래야 삶을 통찰하는 눈이 깊어진다.
인생은 돈만으로 살아갈 수 있는 것이 아니지 않는가

----------------------------------------------------
세이노선생님께서 말씀하셨던 도서들 입니다.
세이노선생님께서 예전에 읽었던 책들이라 절판된 책들이 많습니다.
없는 책을 찾는것도 중요하지만
있는 책부터 열심히 읽으면 좋겠습니다.
또한, 세이노선생님의 글을 한번 읽고 머리에 담고 계시지 마시고
두번,세번, 여러번 읽으시고 자신의 위치에서 할수있는 최선의 방법을 선택해서
작은일 하나부터라도 행동하시길 바라겠습니다.

세이노의 가르침

군대후임의 추천으로 인생에대한 이야기를 현실적으로 쓰는 세이노라는 여류작가의 카페

 

 

http://cafe.daum.net/saynolove

 

 

 

 

 

그리고 세이노의 가르침(제본용 파일)

 

 

2010년 4월 13일 화요일

악성코드 제거기

 

 

 

 

 

 

악성코드 제거하는 프로그램입니다.

 

 

 

 

 

 

 

내컴퓨터 USB 사용흔적 보기

XP에서 USB포트로 연결된것 보는방법입니다.

정확히는 모르겠으나 검색하고 얼핏해보면서 익혔습니다.

시작 -> 실행 -> regedit를 치고 들어가면 레지스트리 편집기가 뜬다.

거기서 [ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR ]

이경로에 사용한 저장장치목록이 뜨며 해당 제조사폴더를 들어가게되면

그에 해당하는 로그가 뜨는데 ParentIdPrefix목록의 값이 해당 장치 고유키값이다.

그값을 내컴퓨터 -> C:\ -> WINDOWS -> setupapi.log파일에 사용흔적이 남게된다.

USB 저장장치 관련 레지스트리 정보

1. 기본 드라이버 ; USB 저장 장치를 연결하면 USB 메모리 드라이버 정보들이 저장되는 레지스트리

 

[ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR ]

[ HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\USBSTOR ]

[ HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Enum\USBSTOR ]

 

 

2. 자동실행 컨트롤 레지스트리 ; 이 레지스트리를 통하여 USB 자동실행을 On / Off 할 수 있다.

 

HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer  의 NoDriveTypeAutoRun

 

0x1  Disables Autoplay on drives of unknown type.
0x4 Disables Autoplay on removable drives.                 ; 값을 4 로 해놓으면 휴대용 저장장치 자동실행이 억제된다.
0x8 Disables Autoplay on fixed drives.
0x10 Disables Autoplay on network drives.
0x20 Disables Autoplay on CD-ROM drives.
0x40 Disables Autoplay on RAM drives.
0x80 Disables Autoplay on drives of unknown type.
0xFF Disables Autoplay on all types of drives.

 

 

 

3. 쓰기방지 ; 이 레지스트리 설정을 통하여 USB 메모리의 Writing 기능을 제한할 수 있다.

 

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control 내에 StorageDevicePolicies 라는 키를 생성

키내에 DWORD를 생성하고 이름을 WriteProtect 로 부여 DWORD Value를 16진수 1로 정의 (0 은 쓰기 허용 )

 

 

 

4. USB drive 사용 흔적 ; USB 메모리를 PC 에 연결하면 생성되는 레지스트리들

 
 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB
 
위의 key는 모든 usb에 대한 정보를 기록합니다. Keyboard, usb memory, mouse 등
 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR
 
위 key는 mass storage로 등록되는 (예로 usb memory stick, 외장 disk 등) usb에 대한 정보가 기록됩니다. ControlSet001 & 002 키도 있다. (Back up 레지스트리 백업)
 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{36FC9E60-C465-11CF-8056-444553540000}
 
usb device의 설치 inf 정보입니다. 위와 같이 3개의 registry key에서 usb usage history를 확인하실 수 있습니다.

* 추가적으로 윈도우 폴더에 setupapi.log파일에 USB 메모리의 사용이 기록됩니다.

 

 

 

출처 _ http://www.usboffice.kr/zbxe/use_etc/2274/page/3

 

2010년 4월 5일 월요일

학점계산기

대학교의 성적 학점계산기입니다.

 

글자수 세는 프로그램

흔히 회사 서류를 작성할때 사용하는 프로그램으로써,

글자수를 세어주는 프로그램입니다.

PNG, ICO파일 다운로드 사이트(외국)

나름 유용하게 사용하고 있는 아이콘 검색 사이트 입니다.

영어로 검색해야 나오는게 약간(?)의 단점이라고나 할까..

 

http://www.iconfinder.net/