C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[17716] @@맨땅에 헤딩은 넘 힘들어요...but success
heartsim [] 1210 읽음    2002-04-17 21:04
안녕하세요.heartsim(박경원)입니다.
음...오늘은 참 날씨가 아주 좋군요...
황사와 엊그제까지 비로 인해서 날씨가 무척이나 안 좋았었는데...오늘은 정말 봄날씨 입니다.^^;

음...지난주부터 playcap부분을 빌더로 컨버전 시도를 했었는데...
정말 힘들더군요. 저 처럼 초보자에게는 맨땅의 헤딩도 이런 헤딩이 없습니다.
아침까지 이것땜시 머리까지 찌끈거리더군요.
포기할까 생각하다가도 기냥 밀어부쳤습니다.^^;

결국 되더군요.............---;;
수없는 디버깅과 웹사이트 검색...

문제는 라이브러리 파일이 잘못되어 있었더군요.
그때의 허탈함...@@;
바로 strmiids.lib 요놈입니다.

Directx8.1을 설치하고 라이브러리 파일들을 빌더라이브러리로 컨버전해서 여태 했었거든요.
근데, 요놈의 파일이 잘못되어 있었습니다.

음...이런맛에 프로그램 짜나 봅니다.^^;
근디, 앞으로 이런 과정이 있어도 몇백번은 더 있을텐데...@@; 정말 걱정..
다른 분들은 쉽게쉽게 하는데, 왜 난 이모양인지..^^;
아직 배울게 많은 사람인지라 삽질은 아마 계속 될겁니다....

그치만 열심히 하는 수 밖에...요.

담은 amcap부분을 컨버전 해버리겠습니다.
이미 시작한거 기냥 다 해버리죠..뭐...--;

아참...그리고 제가 이번에 디버깅하면서 알아둔 사이트가 몇게 있습니다.
의외로 뉴스그룹이나 Dx and c++builder사이트가 꽤되더군요....
그중 제가 젤로 도움받은 사이트는 http://www.mers.com

항상 운 있으세요.................
from heartsim


















heartsim 님이 쓰신 글 :
: 안녕하세요.heartsim(박경원)입니다.
:
: 위 질문에 대한 문제를 아직 해결을 못했군요. ^^;
: 음...일단 WM_GRAPHNOTIFY메세지 문제는 HandleGraphEvent();함수를 메세지 처리를 안 하고
: 직접 CaptureVideo()함수 안에 넣는 것으로 해보았습니다.(맨밑에 관련 소스가 있음)
:
: 그리고 FindCaptureDevice()함수 문제는 헤더에 #include "strmif.h" 파일을 첨가함으로서 해결을 한 것 같네요(정확히 맞는지는 모르겠음^^;)
:
: 그리고 나서 컴파일을 했더니 링커에러가 나더군요.다음과 같습니다.
:
: Linker Error]Unresolved external _MEDIATYPE_Videoreferenced
: from C:\PROGRAM FILES\BORLAND\CBUILDER5\TEST\DIRECTX8.1
: \PLAYCAP\PLAYCAP.OBJ
:
: [Linker Error]Unresolved external _PIN_CATEGORY_PREVIEW
: referenced from C:\PROGRAM FILES\BORLAND\CBUILDER5
: \TEST\DIRECTX8.1\PLAYCAP\PLAYCAP.OBJ
:
: 링커에러가 나길래 관련 라이브러리를 프로젝트에 추가를 해주었죠.
: strmbase.lib(또는 strmbasd.lib), quartz.lib 등등
:
: 그런데, 역시 마찬가지고 링커에러가 나더군요.

: 이 일련의 디버깅 과정이 맞는지는 잘 모르겠으나,
: 만일 링커에러가 정확한 에러가 맞다면 관련 라이브러리를 추가해주면 되는데요..
: 그런데 모든 라이브러리를 추가해주었으나 역시 에러가 나는군요.@@;
:
: 한가지 유추를 하자면, 제 directx는 8.1입니다.
: 그리고 라이브러리 파일은 8.0입니다.(strmbase.lib or strmbasd.lib)
: 버전이 틀리면 라이브러리 파일을 같이 쓸수 없나요?
:
: 그리고 디렉트 엑스는 디버그 모드와 릴리스 모드가 있는데,
: 제 경우는 디버그 모드로 설치를 했습니다.
: 이 디버그 모드와 릴리스 모드 상태 차이 때문에 결과값이 다르게 나오는 걸가요?
:
: 해결이 되는 그 날까지~~~
:
: HRESULT __fastcall TForm1::CaptureVideo(void)//비디오 캡쳐 그리고 프리뷰
: {
:         IBaseFilter *pSrcFilter;
:         HRESULT hr;
:         //Get Directshow interface
:         hr=GetInterfaces();
:         if(FAILED(hr))
:         {
:                  MessageBox(Form1->Handle,"Failed to get video interface"," Error Message",MB_OK);
:                  return hr;
:         }
:
:         //Attach the filter graph to the capture graph
:         hr=g_pCapture->SetFiltergraph(g_pGraph);
:         if(FAILED(hr))
:         {
:                 MessageBox(Handle,"Failed to set capture filter graph","Error Message",MB_OK);
:                 return hr;
:         }
:
:         //Use the system device enumerator and class enumerator to find
:         //a video capture/ preview device, such as a desktop USB video camera.
:         hr=FindCaptureDevice(&pSrcFilter);
:         if(FAILED(hr))
:         {
:                 //Dont display a message because FindCaptureDevice will handle it
:                 return hr;
:         }
:         //Add Capture filter to our graph.
:         hr=g_pGraph->AddFilter(pSrcFilter,L"Video Capture");
:         if(FAILED(hr))
:         {
:                 MessageBox(Handle,"Couldnt add capture filter to graph !","AddFilter check",MB_OK);
:                 pSrcFilter->Release();
:                 return hr;
:         }
:
:         //Render the preview pin on the video capture filter
:         //Use this instead of g_pGraph->RenderFile
:         hr=g_pCapture->RenderStream(&PIN_CATEGORY_PREVIEW,&MEDIATYPE_Video,pSrcFilter,NULL,NULL);
:         if(FAILED(hr))
:         {
:                 MessageBox(Handle,"Couldnt render capture stream.","Render check",MB_OK);
:                 pSrcFilter->Release();
:                 return hr;
:         }
:
:         //Now that the filter has been added to the graph and we have
:         //rendered its stream, we can release this reference to the filter.
:         pSrcFilter->Release();
:
:         //Set video window style and position
:         hr=SetupVideoWindow();
:         if(FAILED(hr))
:         {
:                 MessageBox(Handle,"Couldnt initialize video window","Setup vedio window check",MB_OK);
:                 return hr;
:         }
:
:         //Add our graph to the running object table, which will allow
:         //the GraphEdit application to "spy" on our graph
:         #ifdef REGISTER_FILTERGRAPH
:                 hr=AddGraphToRot(g_pGraph,&g_dwGraphRegister);
:                 if(FAILED(hr))
:                 {
:                         MessageBox(Handle,"Failed to register filter graph with ROT !","ROT check",MB_OK);
:                         g_dwGraphRegister=0;
:                 }
:         #endif
:
:         //Start previewing video data
:         hr=g_pMC->Run();
:         if(FAILED(hr))
:         {
:                 MessageBox(Handle,"Couldnt run the graph","RUN check",MB_OK);
:                 return hr;
:         }
:
:
:         HandleGraphEvent();
:
:         //Remember current state
:         g_psCurrent=Running;
:         return S_OK;
: }
:
:
:
:
:
:
:
:
:
:
:
: heartsim 님이 쓰신 글 :
: : 안녕하세요.heartsim(박경원)입니다.
: : 오랜만에 글 올리네요.^^;
: : Directshow의 playcap소스를 빌더(vcl)로 다시 작성해서 컴파일 했는데, 에러 두개가 뜨는군요.
: : 하나는 WM_GRAPHNOTIFY가 undefined되었다고 하고,
: : 나머지 하나는 FindCaptureDevice함수를 인식을 못하는군요.
: :
: : WM_GRAPHNOTIFY메세지 경우는 #define WM_GRAPHNOTIFY WM_APP+1로 정의해서 메세지 맵처리를 해줬습니다.
: : 헌데 제가 잘못 했는지 undefined 되었다고 하오네요..@@;
: : 혹 메세지 맵에서 메세지구조체를 잘못써줬나?^^;
: :
: : 그리고 FindCaptureDevice함수는 원문playcap소스의 FindCaptureDevice함수와 거의 비슷하게 코딩을 해줬는데,, 역시 에러가...나는군요.전혀 함수 인식을 못합니다.(다른 함수는 문제가 없는데)
: :
: : 혼자 해볼려고 했는데(5일째 고생중@@;) 도저히 안되서리...혹 이쪽분야로 아시는 분 있나해서
: : 대략 글을 띄워봅니다.
: : 혹 Directshow8.1하면서 유의해야 할 사항이나 더 추가해줘야 할 헤더 또는 라이브러리가 있지는 않은지.....고수님들의 답변 부탁드려요..
: :
: : 참고로 directx sdk8.1을 설치했고, 원문 vc++로 되어 있는것을 Vc++ Conversion Wizard를 이용해 bcb로 컨버전 해서 돌려봤습니다.
: : 그런데 한가지 의문은 amcap은 컨버전으로 돌아가는데, playcap은 컨버전으로 컴파일 하면 에러가 나는군요.(그래서 bcb로 다시 작성했을때 에러가 나는건가???)
: :
: :

+ -

관련 글 리스트
17580 Directshow의 playcap를 c++builder5로 컴파일 중 에러?? heartsim 1078 2002/04/15
17656     이번에는 링커 에러??? heartsim 1882 2002/04/16
17716         @@맨땅에 헤딩은 넘 힘들어요...but success heartsim 1210 2002/04/17
18368                 안되시면...연락하세요^^; heartsim 1269 2002/05/10
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.