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
[18368] 안되시면...연락하세요^^;
heartsim [] 1268 읽음    2002-05-10 19:08
안녕하세요.heartsim입니다.

음...directshow의 playcap부분을 컨버전 해서 빌더해서 사용하신다구요?
저도 직장 프로젝트하면서 개인적으로 조금씩 directshow를 공부하고 있습니다...
많이 알지는 못하지만 제가 해본 바를 말씀 드리면 playcap부분은 컨버전을 해서 빌더로
띄우면 실행이 안되더군요.에러가 납니다.
직접 에러나는 부분을 수정을 해볼려고 했으나 개인적으로는 빌더로 직접 짜보는 일이 더 중요해서
그래서 급한김에 playcap부분은 직접 빌더로 다시 짜서 돌렸습니다.
그랬더니 잘 돌아가더군요..

amcap은 컨버전해서 돌리면 잘 돌아갑니다.


님이 말씀하시는 부분이 playcap부분이 맞는지는 잘 모르겠으나.....
만일 정보공유하실 일이 있으시다면 연락주십시요.^^;
성심것 제 경험대로 말씀드릴게요...

016-316-8707
032-651-4141 엠보테크 개발실 박경원 주임을 찾으세요...

그럼...운 좋은 날 되십시요...






윤구 님이 쓰신 글 :
: 저도 어제 다이렉트 설치하면 있는 예제
: 빌더에서 사용할려구 컨버젼 툴로 변경한다음에 실행하니까
: strmiids.lib에서 링크 에러 나더군요.
: 어떻게 해결하셨는지 방법을 올려주시면 고맙겠습니다.
:
: heartsim 님이 쓰신 글 :
: : 안녕하세요.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 1268 2002/05/10
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.