영화 [베테랑] 을 보고.영화 [베테랑] 을 보고.

Posted at 2015.08.10 23:49 | Posted in 영화 이야기
크리에이티브 커먼즈 라이선스
Creative Commons License

 


베테랑 (2015)

Veteran 
8.4
감독
류승완
출연
황정민, 유아인, 유해진, 오달수, 장윤주
정보
액션, 드라마 | 한국 | 123 분 | 2015-08-05

 

류승완 감독의 작품 중, 상업적으로 가장 성공할 영화라고 감히 예상해본다.

어둡고 무거운 이야기를 시종일관 유쾌하고 통쾌하게 잘 그려냈다.
이야기를 풀어나가는 과정에 있어서는 류감독의 작품이 맞나 싶을 정도로 밝다.
비슷한 소재인 부당거래는 어둡고 무겁게 그렸는데, 베테랑에서는 정반대로 그린걸보면
감독의 역량과 의도에 따라 같은 소재라도 얼마나 다르게 그려낼수있는지를 감독 스스로 증명해보인듯하다.

초반에 선보이는 액션도 많이 캐쥬얼해져서,
내가 좋아하던 류승완 감독표 액션은 못보는건가 아쉬웠지만,
후반부에가면 그가 아니면 할수없는 액션 장면들을 아낌없이 보여준다.

영화 베를린에서 사람이 부서지는듯한 액션을 주문했다던데, 후반부 액션이 딱 그 스타일.
자동차 액션 장면도 시원 시원하다.

배우들 이야기를 해보자면,
장윤주는 혼자 너무 힘이 들어가있다. 다른 배우들과 연기 완급이 안맞는 느낌. 보기 불편하다.

유아인의 미친놈 연기는 훌륭하다. 카리스마있는 사악한 악당이 아닌, 그냥 미친놈의 느낌을 잘 살렸다.

오달수는... 하정우가 말했었던 "한국 영화를 위해 내려온 요정"이라는 표현이 딱 맞는듯.
시종일관 튀는 장윤주와는 달리 주변 배우들을 잘 살려주면서 본인의 역할을 충실히 수행한다.

류승범이 카메오로라도 나오길 내심 기대했으나,
배무룩...

반면, 황정민이 연기한 서도철이라는 캐릭터는
사건의 전말에 대해서 너무 다 알고있는 설정이라 형사물로서의 흥미는 다소 떨어지나,
다른 장점들이 그 흥미를 잘 채워주고있다.

함께 상영중인 한국영화 '암살'과 비교될수밖에 없는데,
서로 다른 매력이 출중한 영화라 감히 비교할수가 없네.

한줄 평 : 액션영화의 베테랑, 류승완 감독!
저작자 표시 변경 금지
신고

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

AR Puzzle 기능 추가 영상AR Puzzle 기능 추가 영상

Posted at 2011.11.16 22:42 | Posted in Project/증강현실을 이용한 사천성
크리에이티브 커먼즈 라이선스
Creative Commons License

근 2년만에 소스 꺼내서 이것저것 기능 추가했음 ㅎㅎ

저작자 표시 비영리 변경 금지
신고

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

C#에서 C++의 CString 값 전달해 주기C#에서 C++의 CString 값 전달해 주기

Posted at 2011.11.08 00:32 | Posted in About Programing/03. Tip
크리에이티브 커먼즈 라이선스
Creative Commons License

출처 : http://blog.naver.com/just720?Redirect=Log&logNo=40137298010

C# 에서는 이렇게 쓸꺼야

일단 선언은 이렇게 하고

[DllImport("CV_capture.dll")]
public static extern void CV_RegistInit(IntPtr _IntPtr);

넘겨 줄때는 이렇게!
IntPtr _IntPtr = Marshal.StringToBSTR("abcd");
CV_RegistInit(_IntPtr);

C++에서는 BSTR로 받아서 CString으로 변환해준다.

extern "C" __declspec(dllexport) void __stdcall CV_RegistInit(BSTR _RegistName)
{

CString str;

str.Format(_T("%s"), RegistName);

}

음 잘 넘어온다! ㅋㅋ

저작자 표시 비영리 변경 금지
신고
  1. 옛날에 저걸로 데스스타를 만들며 놀던 기억이 나네요...
    이참에 저걸로 스타크래프트 유닛을 만들어서 대량구매를 해볼까요;

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

dxtrans.h 에러dxtrans.h 에러

Posted at 2011.08.10 15:28 | Posted in About Programing/07. Direct Show
크리에이티브 커먼즈 라이선스
Creative Commons License

 예전에는 dx 8.0x 버전까지만 나오고 이후 버전에 없었기 때문에 예전 버전을 썻지만 요즘에는 WPF에 함께 설치가 되어 확실히 간편해 졌다.

하지만

#include <dshow.h> 와
#include <qedit.h>

헤더를 인클루드 시키고, lib 파일을 추가한 다음에 컴파일을 했더니

fatal error C1083: 포함 파일을 열 수 없습니다. 'dxtrans.h': No such file or directory

 이런 에러가 떳다..... 응? ... 내부적인 에러였다.. 머 검색을 좀 하다보니 최신 버전으로 바뀌며 먼가 안맞아 져서 수정을 해야한다는데......

결국 해결책을 찾았다.

해결책은

#include <dshow.h> 와
#include <qedit.h> 사이에

#pragma include_alias( "dxtrans.h", "qedit.h" )
#define __IDxtCompositor_INTERFACE_DEFINED__
#define __IDxtAlphaSetter_INTERFACE_DEFINED__
#define __IDxtJpeg_INTERFACE_DEFINED__
#define __IDxtKey_INTERFACE_DEFINED__

이 부분을 추가해주면 끝.

저작자 표시 비영리 변경 금지
신고

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

영상 해상도 변경 필터 (Scale Filter)영상 해상도 변경 필터 (Scale Filter)

Posted at 2011.07.27 16:52 | Posted in About Programing/07. Direct Show
크리에이티브 커먼즈 라이선스
Creative Commons License


 기본적으로 Direct show에서는 해상도를 변경할수 있는 Filter를 제공해 주지 않는다.
검색을 해 봐도 웹캠에서 받아온 영상의 해상도를 변경하거나, 랜더링 할때 출력되는 해상도를 변경하는 방법밖에 나오지 않는다.

집요한 구글링 끝에 이미 구현되어 있는 해상도 변경 필터를 찾아냈다.

필터에 대한 자세한 설명은 아래 링크 참조.

http://wirelessafrica.meraka.org.za/wiki/index.php/Real-Time_Video_Coding

저작자 표시 비영리 변경 금지
신고

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

가상함수와 테이블 (vtbl)가상함수와 테이블 (vtbl)

Posted at 2011.07.13 23:30 | Posted in About Programing/08. C++
크리에이티브 커먼즈 라이선스
Creative Commons License

 출처 : http://skmagic.tistory.com/140 / http://zerobell.tistory.com/17

1. 가상함수


 동적 결합을 하는 함수.
 가상함수로 선언하면 포인터의 타입이 아닌 포인터가 가리키는 객체의 타입에 따라 멤버 함수를 선택한다.

virtual 키워드를 선언부에 넣어주면 가상함수가 된다.

#include <iostream>

using namespace std;

class CCellPhone
{
public :
 virtual void CellPhone_1 ();
 void CellPhone_2 ();
};

class CGalaxyS : public CCellPhone
{
public :
 virtual void CellPhone_1 ();
 void CellPhone_2 ();
};

void CCellPhone::CellPhone_1()
{
 cout<<"My phone is cell phone!"<<endl;
}

void CCellPhone::CellPhone_2()
{
 cout<<"My phone is cell phone!"<<endl;
}

void CGalaxyS::CellPhone_1 ()
{
 cout<<"My phone is cell GalaxyS!"<<endl;
}

void CGalaxyS::CellPhone_2 ()
{
 cout<<"My phone is cell GalaxyS!"<<endl;
}

int main (void)
{
 CCellPhone* pGalaxyS = new CGalaxyS();
 CCellPhone* pCellPhone = new CCellPhone ();

 pGalaxyS->CellPhone_1();
 pCellPhone->CellPhone_1();

 pGalaxyS->CellPhone_2();
 pCellPhone->CellPhone_2();

 return 0;
}

글을 읽으면서 위 소스의 출력값에 대해서 생각해 보자.

Binding(바인딩) : 함수 호출문에 대해 실제 호출될 함수의 번지를 결정하는 것.
정적 바인딩 : 함수 호출문에 대한 번지가 컴파일시 이미 정해져 있는 것.
동적 바인딩 : 함수 호출문에 대한 번지가 컴파일 시가 아닌 실행 중에 호출할 함수를 결정하는 것.
이것은 가상함수 테이블을 이용한다. 동적 바인딩은 포인터(또는 레퍼런스)로 호출할 때만 동작함.
포인터가 아니면 어떤 객체에 대해서 함수인지 알수 있으므로 적적바인딩 됢. 당연한 소리.

2. 가상함수 테이블 (vtable)

 가상함수를 가지는 클래스는 가상함수 테이블을 가지고 있고,
클래스 안에서는 이 테이블을 가리킬수 있는 포인터를 가지고 있다.
이 때문에 가상함수를 가지는 클래스는 크기가 4byte 추가 할당 된다.
가상함수 테이블을 가상함수들만 들어가고, 가상함수 주소들의 배열 형태로 존재한다.

 당연한 이야기지만, 한 클래스에서 많은 가상함수를 가지고 있더라도 같은 vtable을 사용한다.
가상함수 테이블을 객체마다 가지는 것이 아니고,
클래스 별로 가지고 있는 것이다.

3. 가상함수를 사용하는 이유

 부모클래스형 포인터로 멤버 함수를 호출할 때, 컴파일러는 정적 타입을 보고,
이 타입에 맞는 멤버 함수를 호출한다.(비가상 함수)
그래서 정적타입이 아닌 동적타입에 따른 함수를 부르기 위해 가상함수를 사용한다.(동적 바인딩)

- 비가상 함수 : 포인터가 어떤 객체를 가리키는가에 상관없이 항상 포인터 타입 클래스의 멤버 함수 호출.
- 가상 함수 : 포인터가 가리키는 실제 객체의 함수를 호출.

이제 위 소스의 출력값에 대해서 유추 할 수 있을 것이다.


그래서!
재정의 할 가능성이 있는 멤버 함수는 가상함수로 선언하는 것이 좋다.

보통은 재사용가능성이 많은 소멸자를 가상함수로 만들어 준다.
상속 관계에서 자식 클래스의 소멸자는 반드시 가상으로 선언해야 한다.
저작자 표시 비영리 변경 금지
신고

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

Register variable (레지스터 변수)Register variable (레지스터 변수)

Posted at 2011.07.03 15:06 | Posted in About Programing/03. Tip
크리에이티브 커먼즈 라이선스
Creative Commons License


출처 : 클릭

 레지스터 변수(Register variable)는 프로세서의 레지스터에서 처리되는 변수를 말합니다. 
레지스터는 CPU 안에 있는 메모리로써, 기계어 한 두개 수준에서 직접 처리가 되므로 프로그램의 수행 속도를 향상시킬 수 있습니다. 
 따라서 프로그램의 수행에서 가장 영향을 주는 변수를 레지스터 변수로 선언하여 사용하면 프로그램 속도를 비약적으로 향상시킬 수 있는 경우가 있습니다.
 
 하지만 register를 붙인다고 꼭 레지스터 변수로 선언되는 것은 아닙니다.
 경우에 따라서는 남는 레지스터가 없을 수도 있으므로 여기서 말하는 레지스터는 컴파일러에게 반드시 그렇게 선언하라고 요구하는 의미보다는,
  
"가능하면 레지스터로 처리하라" 는 정도의 약한 의미에 불과합니다.
  
 레지스터 변수를 선언하려면 변수를 선언할 때 앞에 register를 붙이면 됩니다.
레지스터 변수 선언은 지역 변수(Local variable)로만 선언할 수 있고 전역 변수(Global Variable)로는 선언할 수 없습니다.
 
register int k;
 
의 경우는 k라는 정수형 변수를 가능하면 레지스터 변수로 선언하라는 뜻이 되겠네요.

저작자 표시 비영리 변경 금지
신고

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[DirectShow 레퍼런스] IMediaFilter 인터페이스[DirectShow 레퍼런스] IMediaFilter 인터페이스

Posted at 2011.06.28 02:25 | Posted in About Programing/07. Direct Show
크리에이티브 커먼즈 라이선스
Creative Commons License

1. 이름 : IMediaFilter 
2. 설명 : 시간에 기반한 데이터를 제공하는 모든 멀티미디어 콤포넌트들이 제공해야 하는 인터페이스.
           콤포넌트의 실행 상태 제어와 상태를 다른 객체와 동기화 시키는 방법을 제공하기 위해 사용함.
3. 상속 : IPersist 
4. 구현 : 모든 filter에서 구현되어야 함. CBaseFilter를 사용해서 구현 가능 
5. 사용 : 보통은 IMediaFilter를 상속한 IBaseFilter를 많이 사용하기 때문에, 직접 어플리케이션에서 사용되는
           경우는 거의 없음. 필터그래프 매니저가 사용하며, 플러그인 배급자에 의해 필터그래프 매니저가
           노출시킨 IMediaFilter의 메소드들이 호출되는 경우가 있음.
 
6. 메소드 : 
- IUnknown 메소드들 : COM객체니까 당연히 지원해야 함 
- IMediaFilter 메소드들 : 
  * Stop : 필터를 정지상태로 전이시킴 
  * Pause : 필터를 일시중지 상태로 전이시킴 
  * Run : 필터를 플레이 상태로 전이시킴 
  * GetState : 현재 상태를 반환 
  * SetSyncSource : 동기화를 위한 클럭을 지정 
  * GetSyncSource : 필터에 지정되어 있는 클럭을 반환

저작자 표시 비영리 변경 금지
신고

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[DirectShow 레퍼런스] IBaseFilter Interface[DirectShow 레퍼런스] IBaseFilter Interface

Posted at 2011.06.28 02:24 | Posted in About Programing/07. Direct Show
크리에이티브 커먼즈 라이선스
Creative Commons License
1. 이름 : IBaseFilter 
2. 설명 : DirectShow의 모든 필터가 필수적으로 노출해야 하는 인터페이스이다. 
3. 상속 : IMediaFilter 
4. 구현 : 모든 DirectShow필터는 이 인터페이스를 구현해야 함. CBaseFilter클래스를 사용해 구현할 수 있음 
5. 사용 : 필터그래프 매니저가 일반적으로 사용. 어플리케이션은 핀이나 벤더관련 정보를 얻는데
           사용할 수 있음.
 
6. 메소드 : 
- IUnknown 메소드들 : COM객체니까 당연히 지원해야 함 
- IMediaFilter 메소드들 : IMediaFilter메소드를 살펴볼 것 
- IBaseFilter에서 선언된 메소드들 
   * EnumPins : 필터가 제공하는 핀들을 나열 
   * FindPin : 특정 ID에 해당하는 핀을 찾음 
   * QueryFilterInfo : 필터 정보를 얻음 
   * JoinFilterGraph : 필터 그래프에 연결된 경우 이를 필터에 알려줌 
   * QueryVendorInfo : 벤더가 제공하는 정보를 얻음
저작자 표시 비영리 변경 금지
신고

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

[DirectShow기초] 필터와 핀[DirectShow기초] 필터와 핀

Posted at 2011.06.28 02:22 | Posted in About Programing/07. Direct Show
크리에이티브 커먼즈 라이선스
Creative Commons License

 여러번 반복해서 지겨운 생각도 들겠지만, 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은 핀이 자신의 메모리 할당자를 제안하고, 메모리 할당자에게 출력핀이 데이터를 제공하고
 있음을 통지하고, 미디어 샘플을 설정된 할당자를 통해 전달할 수 있도록 한다. 또한, 버퍼의 플러쉬 기능도
 제공한다. 이 인터페이스는 연결된 핀이 전송을 위한 메모리 할당자를 제공하지 않는다면,
 공유메모리 할당자를 생성할 수 있다. 
저작자 표시 비영리 변경 금지
신고

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

티스토리 툴바