|
From: libvidcap c. m. <lib...@li...> - 2007-09-18 18:39:04
|
Revision: 25
http://libvidcap.svn.sourceforge.net/libvidcap/?rev=25&view=rev
Author: bcholew
Date: 2007-09-18 11:38:47 -0700 (Tue, 18 Sep 2007)
Log Message:
-----------
oops
Modified Paths:
--------------
trunk/src/directshow/DirectShowSource.cpp
Modified: trunk/src/directshow/DirectShowSource.cpp
===================================================================
--- trunk/src/directshow/DirectShowSource.cpp 2007-09-18 18:36:50 UTC (rev 24)
+++ trunk/src/directshow/DirectShowSource.cpp 2007-09-18 18:38:47 UTC (rev 25)
@@ -654,7 +654,7 @@
// set the dimensions
vih->bmiHeader.biWidth = fmtNative.width;
vih->bmiHeader.biHeight = fmtNative.height;
-log_info("will use NATIVE FOURCC '%s'\n", vidcap_fourcc_string_get(fmtNative.fourcc));
+
resetCapGraphFoo();
// set the stream's media type
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: libvidcap c. m. <lib...@li...> - 2007-09-24 18:50:14
|
Revision: 29
http://libvidcap.svn.sourceforge.net/libvidcap/?rev=29&view=rev
Author: bcholew
Date: 2007-09-24 11:49:27 -0700 (Mon, 24 Sep 2007)
Log Message:
-----------
Only clear graphIsSetup_ flag if RemoveFilter() succeeds. If couldn't remove sample grabber because graph wasn't actually stopped, send the stop request. This could happen in cases of rapid start/stop requests.
Modified Paths:
--------------
trunk/src/directshow/DirectShowSource.cpp
Modified: trunk/src/directshow/DirectShowSource.cpp
===================================================================
--- trunk/src/directshow/DirectShowSource.cpp 2007-09-24 12:38:15 UTC (rev 28)
+++ trunk/src/directshow/DirectShowSource.cpp 2007-09-24 18:49:27 UTC (rev 29)
@@ -485,16 +485,26 @@
{
if ( graphIsSetup_ )
{
- graphIsSetup_ = false;
-
// necessary to allow subsequent calls to RenderStream()
// (like after rebinding) to succeed
HRESULT hr = pFilterGraph_->RemoveFilter(pSampleGrabber_);
if ( FAILED(hr) )
{
log_error("failed to remove Sample Grabber (%d)\n", hr);
+ if ( hr == VFW_E_NOT_STOPPED )
+ {
+ log_error("Capture wasn't stopped. "
+ "Repeating STOP request...\n");
+ stop();
+ }
+ else
+ {
+ log_error("not processing removal failure\n");
+ }
return 1;
}
+
+ graphIsSetup_ = false;
}
return 0;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: libvidcap c. m. <lib...@li...> - 2007-10-01 19:42:18
|
Revision: 38
http://libvidcap.svn.sourceforge.net/libvidcap/?rev=38&view=rev
Author: bcholew
Date: 2007-10-01 12:42:06 -0700 (Mon, 01 Oct 2007)
Log Message:
-----------
whitespace cleanup
Modified Paths:
--------------
trunk/src/directshow/DirectShowSource.cpp
Modified: trunk/src/directshow/DirectShowSource.cpp
===================================================================
--- trunk/src/directshow/DirectShowSource.cpp 2007-10-01 19:37:33 UTC (rev 37)
+++ trunk/src/directshow/DirectShowSource.cpp 2007-10-01 19:42:06 UTC (rev 38)
@@ -808,305 +808,306 @@
return 0;
}
-// Direct Show filter graph has signaled an event
-// Device may have been removed
-// Error may have occurred
-void
-DirectShowSource::processGraphEvent(void *context)
-{
- DirectShowSource * pSrc = static_cast<DirectShowSource *>(context);
-
- HRESULT hr;
- long evCode, param1, param2;
- hr = pSrc->pMediaEventIF_->GetEvent(&evCode, ¶m1, ¶m2, 0);
-
- if ( SUCCEEDED(hr) )
- {
- // Event codes taken from:
- // http://msdn2.microsoft.com/en-us/library/ms783649.aspx
- // Embedded reference not used:
- // http://msdn2.microsoft.com/en-us/library/aa921722.aspx
-
- std::string str;
-
- switch(evCode)
- {
- case EC_DEVICE_LOST:
- if ( (int)param2 == 0 )
- {
- str.assign("EC_DEVICE_LOST\n");
- log_info("device removal detected\n");
-
- // shutdown capture
- pSrc->cancelCaptureCB_(pSrc->parent_);
- }
- else
- {
- str.assign("EC_DEVICE_LOST - (device re-inserted)\n");
- }
- break;
-
- case EC_ACTIVATE:
- str.assign("EC_ACTIVATE\n");
- break;
-
-/* case EC_BANDWIDTHCHANGE:
- str.assign("EC_BANDWIDTHCHANGE\n");
- break;
-*/
- case EC_BUFFERING_DATA:
- str.assign("EC_BUFFERING_DATA\n");
- break;
-
- case EC_BUILT:
- str.assign("EC_BUILT\n");
- break;
-
- case EC_CLOCK_CHANGED:
- str.assign("EC_CLOCK_CHANGED\n");
- break;
-
- case EC_CLOCK_UNSET:
- str.assign("EC_CLOCK_UNSET\n");
- break;
-
- case EC_CODECAPI_EVENT:
- str.assign("EC_CODECAPI_EVENT\n");
- break;
-
- case EC_COMPLETE:
- str.assign("EC_COMPLETE\n");
- break;
-
-/* case EC_CONTENTPROPERTY_CHANGED:
- str.assign("EC_CONTENTPROPERTY_CHANGED\n");
- break;
-*/
- case EC_DISPLAY_CHANGED:
- str.assign("EC_DISPLAY_CHANGED\n");
- break;
-
- case EC_END_OF_SEGMENT:
- str.assign("EC_END_OF_SEGMENT\n");
- break;
-
-/* case EC_EOS_SOON:
- str.assign("EC_EOS_SOON\n");
- break;
-*/
- case EC_ERROR_STILLPLAYING:
- str.assign("EC_ERROR_STILLPLAYING\n");
- break;
-
- case EC_ERRORABORT:
- str.assign("EC_ERRORABORT\n");
-
- log_info("graph monitor stopping capture...\n");
-
- // shutdown capture
- pSrc->cancelCaptureCB_(pSrc->parent_);
-
- break;
-
-/* case EC_ERRORABORTEX:
- str.assign("EC_ERRORABORTEX\n");
- break;
-*/
- case EC_EXTDEVICE_MODE_CHANGE:
- str.assign("EC_EXTDEVICE_MODE_CHANGE\n");
- break;
-
-/* case EC_FILE_CLOSED:
- str.assign("EC_FILE_CLOSED\n");
- break;
-*/
- case EC_FULLSCREEN_LOST:
- str.assign("EC_FULLSCREEN_LOST\n");
- break;
-
- case EC_GRAPH_CHANGED:
- str.assign("EC_GRAPH_CHANGED\n");
- break;
-
- case EC_LENGTH_CHANGED:
- str.assign("EC_LENGTH_CHANGED\n");
- break;
-
-/* case EC_LOADSTATUS:
- str.assign("EC_LOADSTATUS\n");
- break;
-*/
-/* case EC_MARKER_HIT:
- str.assign("EC_MARKER_HIT\n");
- break;
-*/
- case EC_NEED_RESTART:
- str.assign("EC_NEED_RESTART\n");
- break;
-
-/* case EC_NEW_PIN:
- str.assign("EC_NEW_PIN\n");
- break;
-*/
- case EC_NOTIFY_WINDOW:
- str.assign("EC_NOTIFY_WINDOW\n");
- break;
-
- case EC_OLE_EVENT:
- str.assign("EC_OLE_EVENT\n");
- break;
-
- case EC_OPENING_FILE:
- str.assign("EC_OPENING_FILE\n");
- break;
-
- case EC_PALETTE_CHANGED:
- str.assign("EC_PALETTE_CHANGED\n");
- break;
-
- case EC_PAUSED:
- str.assign("EC_PAUSED\n");
- break;
-
-/* case EC_PLEASE_REOPEN:
- str.assign("EC_PLEASE_REOPEN\n");
- break;
-*/
- case EC_PREPROCESS_COMPLETE:
- str.assign("EC_PREPROCESS_COMPLETE\n");
- break;
-
-/* case EC_PROCESSING_LATENCY:
- str.assign("EC_PROCESSING_LATENCY\n");
- break;
-*/
- case EC_QUALITY_CHANGE:
- str.assign("EC_QUALITY_CHANGE\n");
- break;
-
-/* case EC_RENDER_FINISHED:
- str.assign("EC_RENDER_FINISHED\n");
- break;
-*/
- case EC_REPAINT:
- str.assign("EC_REPAINT\n");
- break;
-
-/* case EC_SAMPLE_LATENCY:
- str.assign("EC_SAMPLE_LATENCY\n");
- break;
-
- case EC_SAMPLE_NEEDED:
- str.assign("EC_SAMPLE_NEEDED\n");
- break;
-
- case EC_SCRUB_TIME:
- str.assign("EC_SCRUB_TIME\n");
- break;
-*/
- case EC_SEGMENT_STARTED:
- str.assign("EC_SEGMENT_STARTED\n");
- break;
-
- case EC_SHUTTING_DOWN:
- str.assign("EC_SHUTTING_DOWN\n");
- break;
-
- case EC_SNDDEV_IN_ERROR:
- str.assign("EC_SNDDEV_IN_ERROR\n");
- break;
-
- case EC_SNDDEV_OUT_ERROR:
- str.assign("EC_SNDDEV_OUT_ERROR\n");
- break;
-
- case EC_STARVATION:
- str.assign("EC_STARVATION\n");
- break;
-
- case EC_STATE_CHANGE:
- str.assign("EC_STATE_CHANGE\n");
- break;
-
-/* case EC_STATUS:
- str.assign("EC_STATUS\n");
- break;
-*/
- case EC_STEP_COMPLETE:
- str.assign("EC_STEP_COMPLETE\n");
- break;
-
- case EC_STREAM_CONTROL_STARTED:
- str.assign("EC_STREAM_CONTROL_STARTED\n");
- break;
-
- case EC_STREAM_CONTROL_STOPPED:
- str.assign("EC_STREAM_CONTROL_STOPPED\n");
- break;
-
- case EC_STREAM_ERROR_STILLPLAYING:
- str.assign("EC_STREAM_ERROR_STILLPLAYING\n");
- break;
-
- case EC_STREAM_ERROR_STOPPED:
- str.assign("EC_STREAM_ERROR_STOPPED\n");
- break;
-
- case EC_TIMECODE_AVAILABLE:
- str.assign("EC_TIMECODE_AVAILABLE\n");
- break;
-
- case EC_UNBUILT:
- str.assign("EC_UNBUILT\n");
- break;
-
- case EC_USERABORT:
- str.assign("EC_USERABORT\n");
- break;
-
- case EC_VIDEO_SIZE_CHANGED:
- str.assign("EC_VIDEO_SIZE_CHANGED\n");
- break;
-
-/* case EC_VIDEOFRAMEREADY:
- str.assign("EC_VIDEOFRAMEREADY\n");
- break;
-*/
- case EC_VMR_RECONNECTION_FAILED:
- str.assign("EC_VMR_RECONNECTION_FAILED\n");
- break;
-
- case EC_VMR_RENDERDEVICE_SET:
- str.assign("EC_VMR_RENDERDEVICE_SET\n");
- break;
-
- case EC_VMR_SURFACE_FLIPPED:
- str.assign("EC_VMR_SURFACE_FLIPPED\n");
- break;
-
- case EC_WINDOW_DESTROYED:
- str.assign("EC_WINDOW_DESTROYED\n");
- break;
-
- case EC_WMT_EVENT:
- str.assign("EC_WMT_EVENT\n");
- break;
-
- case EC_WMT_INDEX_EVENT:
- str.assign("EC_WMT_INDEX_EVENT\n");
- break;
-
- default:
- str.assign("unknown graph event code (%ld)\n", evCode);
- break;
- }
-
- log_info("graph processed event: %s", str.c_str());
-
- hr = pSrc->pMediaEventIF_->FreeEventParams(evCode, param1, param2);
- }
- else
- {
- log_error("failed getting event for a graph\n");
- }
-}
+// Direct Show filter graph has signaled an event
+// Device may have been removed
+// Error may have occurred
+void
+DirectShowSource::processGraphEvent(void *context)
+{
+ DirectShowSource * pSrc = static_cast<DirectShowSource *>(context);
+
+ HRESULT hr;
+ long evCode, param1, param2;
+ hr = pSrc->pMediaEventIF_->GetEvent(&evCode, ¶m1, ¶m2, 0);
+
+ if ( SUCCEEDED(hr) )
+ {
+ // Event codes taken from:
+ // http://msdn2.microsoft.com/en-us/library/ms783649.aspx
+ // Embedded reference not used:
+ // http://msdn2.microsoft.com/en-us/library/aa921722.aspx
+
+ std::string str;
+
+ switch(evCode)
+ {
+ case EC_DEVICE_LOST:
+ if ( (int)param2 == 0 )
+ {
+ str.assign("EC_DEVICE_LOST\n");
+ log_info("device removal detected\n");
+
+ // shutdown capture
+ pSrc->cancelCaptureCB_(pSrc->parent_);
+ }
+ else
+ {
+ str.assign("EC_DEVICE_LOST - (device re-inserted)\n");
+ }
+ break;
+
+ case EC_ACTIVATE:
+ str.assign("EC_ACTIVATE\n");
+ break;
+
+/* case EC_BANDWIDTHCHANGE:
+ str.assign("EC_BANDWIDTHCHANGE\n");
+ break;
+*/
+ case EC_BUFFERING_DATA:
+ str.assign("EC_BUFFERING_DATA\n");
+ break;
+
+ case EC_BUILT:
+ str.assign("EC_BUILT\n");
+ break;
+
+ case EC_CLOCK_CHANGED:
+ str.assign("EC_CLOCK_CHANGED\n");
+ break;
+
+ case EC_CLOCK_UNSET:
+ str.assign("EC_CLOCK_UNSET\n");
+ break;
+
+ case EC_CODECAPI_EVENT:
+ str.assign("EC_CODECAPI_EVENT\n");
+ break;
+
+ case EC_COMPLETE:
+ str.assign("EC_COMPLETE\n");
+ break;
+
+/* case EC_CONTENTPROPERTY_CHANGED:
+ str.assign("EC_CONTENTPROPERTY_CHANGED\n");
+ break;
+*/
+ case EC_DISPLAY_CHANGED:
+ str.assign("EC_DISPLAY_CHANGED\n");
+ break;
+
+ case EC_END_OF_SEGMENT:
+ str.assign("EC_END_OF_SEGMENT\n");
+ break;
+
+/* case EC_EOS_SOON:
+ str.assign("EC_EOS_SOON\n");
+ break;
+*/
+ case EC_ERROR_STILLPLAYING:
+ str.assign("EC_ERROR_STILLPLAYING\n");
+ break;
+
+ case EC_ERRORABORT:
+ str.assign("EC_ERRORABORT\n");
+
+ log_info("graph monitor stopping capture...\n");
+
+ // shutdown capture
+ pSrc->cancelCaptureCB_(pSrc->parent_);
+
+ break;
+
+/* case EC_ERRORABORTEX:
+ str.assign("EC_ERRORABORTEX\n");
+ break;
+*/
+ case EC_EXTDEVICE_MODE_CHANGE:
+ str.assign("EC_EXTDEVICE_MODE_CHANGE\n");
+ break;
+
+/* case EC_FILE_CLOSED:
+ str.assign("EC_FILE_CLOSED\n");
+ break;
+*/
+ case EC_FULLSCREEN_LOST:
+ str.assign("EC_FULLSCREEN_LOST\n");
+ break;
+
+ case EC_GRAPH_CHANGED:
+ str.assign("EC_GRAPH_CHANGED\n");
+ break;
+
+ case EC_LENGTH_CHANGED:
+ str.assign("EC_LENGTH_CHANGED\n");
+ break;
+
+/* case EC_LOADSTATUS:
+ str.assign("EC_LOADSTATUS\n");
+ break;
+*/
+/* case EC_MARKER_HIT:
+ str.assign("EC_MARKER_HIT\n");
+ break;
+*/
+ case EC_NEED_RESTART:
+ str.assign("EC_NEED_RESTART\n");
+ break;
+
+/* case EC_NEW_PIN:
+ str.assign("EC_NEW_PIN\n");
+ break;
+*/
+ case EC_NOTIFY_WINDOW:
+ str.assign("EC_NOTIFY_WINDOW\n");
+ break;
+
+ case EC_OLE_EVENT:
+ str.assign("EC_OLE_EVENT\n");
+ break;
+
+ case EC_OPENING_FILE:
+ str.assign("EC_OPENING_FILE\n");
+ break;
+
+ case EC_PALETTE_CHANGED:
+ str.assign("EC_PALETTE_CHANGED\n");
+ break;
+
+ case EC_PAUSED:
+ str.assign("EC_PAUSED\n");
+ break;
+
+/* case EC_PLEASE_REOPEN:
+ str.assign("EC_PLEASE_REOPEN\n");
+ break;
+*/
+ case EC_PREPROCESS_COMPLETE:
+ str.assign("EC_PREPROCESS_COMPLETE\n");
+ break;
+
+/* case EC_PROCESSING_LATENCY:
+ str.assign("EC_PROCESSING_LATENCY\n");
+ break;
+*/
+ case EC_QUALITY_CHANGE:
+ str.assign("EC_QUALITY_CHANGE\n");
+ break;
+
+/* case EC_RENDER_FINISHED:
+ str.assign("EC_RENDER_FINISHED\n");
+ break;
+*/
+ case EC_REPAINT:
+ str.assign("EC_REPAINT\n");
+ break;
+
+/* case EC_SAMPLE_LATENCY:
+ str.assign("EC_SAMPLE_LATENCY\n");
+ break;
+
+ case EC_SAMPLE_NEEDED:
+ str.assign("EC_SAMPLE_NEEDED\n");
+ break;
+
+ case EC_SCRUB_TIME:
+ str.assign("EC_SCRUB_TIME\n");
+ break;
+*/
+ case EC_SEGMENT_STARTED:
+ str.assign("EC_SEGMENT_STARTED\n");
+ break;
+
+ case EC_SHUTTING_DOWN:
+ str.assign("EC_SHUTTING_DOWN\n");
+ break;
+
+ case EC_SNDDEV_IN_ERROR:
+ str.assign("EC_SNDDEV_IN_ERROR\n");
+ break;
+
+ case EC_SNDDEV_OUT_ERROR:
+ str.assign("EC_SNDDEV_OUT_ERROR\n");
+ break;
+
+ case EC_STARVATION:
+ str.assign("EC_STARVATION\n");
+ break;
+
+ case EC_STATE_CHANGE:
+ str.assign("EC_STATE_CHANGE\n");
+ break;
+
+/* case EC_STATUS:
+ str.assign("EC_STATUS\n");
+ break;
+*/
+ case EC_STEP_COMPLETE:
+ str.assign("EC_STEP_COMPLETE\n");
+ break;
+
+ case EC_STREAM_CONTROL_STARTED:
+ str.assign("EC_STREAM_CONTROL_STARTED\n");
+ break;
+
+ case EC_STREAM_CONTROL_STOPPED:
+ str.assign("EC_STREAM_CONTROL_STOPPED\n");
+ break;
+
+ case EC_STREAM_ERROR_STILLPLAYING:
+ str.assign("EC_STREAM_ERROR_STILLPLAYING\n");
+ break;
+
+ case EC_STREAM_ERROR_STOPPED:
+ str.assign("EC_STREAM_ERROR_STOPPED\n");
+ break;
+
+ case EC_TIMECODE_AVAILABLE:
+ str.assign("EC_TIMECODE_AVAILABLE\n");
+ break;
+
+ case EC_UNBUILT:
+ str.assign("EC_UNBUILT\n");
+ break;
+
+ case EC_USERABORT:
+ str.assign("EC_USERABORT\n");
+ break;
+
+ case EC_VIDEO_SIZE_CHANGED:
+ str.assign("EC_VIDEO_SIZE_CHANGED\n");
+ break;
+
+/* case EC_VIDEOFRAMEREADY:
+ str.assign("EC_VIDEOFRAMEREADY\n");
+ break;
+*/
+ case EC_VMR_RECONNECTION_FAILED:
+ str.assign("EC_VMR_RECONNECTION_FAILED\n");
+ break;
+
+ case EC_VMR_RENDERDEVICE_SET:
+ str.assign("EC_VMR_RENDERDEVICE_SET\n");
+ break;
+
+ case EC_VMR_SURFACE_FLIPPED:
+ str.assign("EC_VMR_SURFACE_FLIPPED\n");
+ break;
+
+ case EC_WINDOW_DESTROYED:
+ str.assign("EC_WINDOW_DESTROYED\n");
+ break;
+
+ case EC_WMT_EVENT:
+ str.assign("EC_WMT_EVENT\n");
+ break;
+
+ case EC_WMT_INDEX_EVENT:
+ str.assign("EC_WMT_INDEX_EVENT\n");
+ break;
+
+ default:
+ str.assign("unknown graph event code (%ld)\n", evCode);
+ break;
+ }
+
+ log_info("graph processed event: %s", str.c_str());
+
+ hr = pSrc->pMediaEventIF_->FreeEventParams(evCode, param1, param2);
+ }
+ else
+ {
+ log_error("failed getting event for a graph\n");
+ }
+}
+
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: libvidcap c. <lib...@li...> - 2007-11-20 17:53:38
|
Revision: 64
http://libvidcap.svn.sourceforge.net/libvidcap/?rev=64&view=rev
Author: bcholew
Date: 2007-11-20 09:51:57 -0800 (Tue, 20 Nov 2007)
Log Message:
-----------
Delete sapi dshow's graph monitor thread when destroying the source.
Modified Paths:
--------------
trunk/src/directshow/DirectShowSource.cpp
Modified: trunk/src/directshow/DirectShowSource.cpp
===================================================================
--- trunk/src/directshow/DirectShowSource.cpp 2007-11-02 21:13:19 UTC (rev 63)
+++ trunk/src/directshow/DirectShowSource.cpp 2007-11-20 17:51:57 UTC (rev 64)
@@ -106,6 +106,8 @@
DirectShowSource::~DirectShowSource()
{
+ delete graphMon_;
+
stop();
if ( nativeMediaType_ )
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|