<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2800.1400" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial size=2>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Hello, I’m having difficulties 
concerning using callbacks that have been extended in python. I’m using the 
windows video API DirectShow to play video to a screen through a transform 
method. The problem occurs when the Transform method is called from an object 
extended in python as a callback, not when called explicitly. How do I represent 
this functionality and prevent the python interpreter from crashing? I would 
like to try creating a thin wrapper to allow play to allow 
threads,<?xml:namespace prefix = o ns = 
"urn:schemas-microsoft-com:office:office" /><o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">how can you do 
this?<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Many Thanks,<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">Richard<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">// Cut down version of the C++ 
code<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">class Callback<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">{<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><SPAN 
style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>virtual void Transform() = 0;<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">}<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">class Player<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">{<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><SPAN 
style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>Player(Callback *);<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><SPAN 
style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>void Play();<SPAN 
style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>// 
Play the video to the screen, returns allowing video to continue 
play<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">}<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">class Callback_Wrap : public 
Callback<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">{<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><SPAN 
style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>Callback_Wrap(PyObject *obj) : self(obj) {}<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><SPAN 
style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>virtual Transform() {call_method&lt;void&gt;(self, 
“Transform”);}<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><SPAN 
style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>PyObject *self;<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">}<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">BOOST_PYTHON_MODULE(MyVideo)<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">{<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><SPAN 
style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>class_&lt;Callback, boost::noncopyable, 
boost::shared_ptr&lt;Callback_Wrap&gt; &gt;(“Callback”)<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><SPAN 
style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>.def(“Transform”, &amp;Callback::Transform)<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><SPAN 
style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>;<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><SPAN 
style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>class_&lt;Player&gt;(“Player”, init&lt;Calback 
*&gt;())<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><SPAN 
style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>.def(“Play”, &amp;Player::Play)<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><SPAN 
style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>;<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">}<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"># Example python 
use<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">from MyVideo import 
*<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">class 
My_Callback(Callback):<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><SPAN 
style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>def Transform(self):<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><SPAN 
style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</SPAN>print “Hello, My_Callback here!”<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><o:p>&nbsp;</o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">a = 
My_Callback()<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">b = Player(a)<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0cm 0cm 0pt; mso-pagination: none; mso-layout-grid-align: none"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">a.Play()</SPAN></P></FONT></DIV></BODY></HTML>