<div dir="ltr">Hi all,<div><br></div><div style>We want to port linux code using GES on windows.</div><div style>The development used Gstreamer SDK. </div><div style><br></div><div style>The same code can not be compiled on windows platform while it does on Linux.</div>
<div style><br></div><div style><br></div><div style><br></div><div style><br></div><div style>-----</div><div style><b>Here is a simple code :</b></div><div style><br></div><p class="" style="margin:0cm 0cm 0.0001pt;font-size:11pt;color:rgb(0,0,0)">
<b><font face="courier new, monospace">#include <gst/gst.h></font></b></p><p class="" style="margin:0cm 0cm 0.0001pt;font-size:11pt;color:rgb(0,0,0)"><b><span style="background-color:fuchsia"><font face="courier new, monospace">#include <ges/ges.h></font></span></b></p>
<p class="" style="margin:0cm 0cm 0.0001pt;font-size:11pt;color:rgb(0,0,0)"><b><font face="courier new, monospace"> </font></b></p><p class="" style="margin:0cm 0cm 0.0001pt;font-size:11pt;color:rgb(0,0,0)"><b><font face="courier new, monospace">int main()</font></b></p>
<p class="" style="margin:0cm 0cm 0.0001pt;font-size:11pt;color:rgb(0,0,0)"><b><font face="courier new, monospace">{</font></b></p><p class="" style="margin:0cm 0cm 0.0001pt;font-size:11pt;color:rgb(0,0,0)"><b><font face="courier new, monospace">g_print ("Test.\n");</font></b></p>
<p class="" style="margin:0cm 0cm 0.0001pt;font-size:11pt;color:rgb(0,0,0)"><b><font face="courier new, monospace">}</font></b></p><p class="" style="margin:0cm 0cm 0.0001pt;font-size:11pt;color:rgb(0,0,0)"><font face="courier new, monospace"> </font></p>
<p class="" style="margin:0cm 0cm 0.0001pt;font-size:11pt;color:rgb(0,0,0)"><font face="courier new, monospace"> </font></p><p class="" style="margin:0cm 0cm 0.0001pt;font-size:11pt;color:rgb(0,0,0)"><span style="background-color:silver"><font face="courier new, monospace">1>------ Build started: Project: SFL_ges_comp, Configuration: Release Win32 ------</font></span></p>
<p class="" style="margin:0cm 0cm 0.0001pt;font-size:11pt;color:rgb(0,0,0)"><span style="background-color:silver"><font face="courier new, monospace">1>Build started <span class="" id="OBJ_PREFIX_DWT1914_com_zimbra_date" style="color:rgb(0,0,139)">10/04/2013</span> 2:40:09 PM.</font></span></p>
<p class="" style="margin:0cm 0cm 0.0001pt;font-size:11pt;color:rgb(0,0,0)"><span style="background-color:silver"><font face="courier new, monospace">1>ClCompile:</font></span></p><p class="" style="margin:0cm 0cm 0.0001pt;font-size:11pt;color:rgb(0,0,0)">
<span style="background-color:silver"><font face="courier new, monospace">1>  ges_comp.cpp</font></span></p><p class="" style="margin:0cm 0cm 0.0001pt;font-size:11pt;color:rgb(0,0,0)"><span style="background-color:silver"><font face="courier new, monospace">1>C:\gstreamer-sdk\0.10\x86\include\gstreamer-0.10\ges/ges-timeline-object.h(219): warning C4200: nonstandard extension used : zero-sized array in struct/union</font></span></p>
<p class="" style="margin:0cm 0cm 0.0001pt;font-size:11pt;color:rgb(0,0,0)"><span style="background-color:silver"><font face="courier new, monospace">1>          Cannot generate copy-ctor or copy-assignment operator when UDT contains a zero-sized array</font></span></p>
<p class="" style="margin:0cm 0cm 0.0001pt;font-size:11pt;color:rgb(0,0,0)"><span style="background-color:silver"><font face="courier new, monospace">1>C:\gstreamer-sdk\0.10\x86\include\gstreamer-0.10\ges/ges-timeline-source.h(75): error C2229: struct '_GESTimelineSourceClass' has an illegal zero-sized array</font></span></p>
<p class="" style="margin:0cm 0cm 0.0001pt;font-size:11pt;color:rgb(0,0,0)"><span style="background-color:silver"><font face="courier new, monospace">1>C:\gstreamer-sdk\0.10\x86\include\gstreamer-0.10\ges/ges-timeline-operation.h(74): error C2229: struct '_GESTimelineOperationClass' has an illegal zero-sized array</font></span></p>
<p class="" style="margin:0cm 0cm 0.0001pt;font-size:11pt;color:rgb(0,0,0)"><span style="background-color:silver"><font face="courier new, monospace">1></font></span></p><p class="" style="margin:0cm 0cm 0.0001pt;font-size:11pt;color:rgb(0,0,0)">
<span style="background-color:silver"><font face="courier new, monospace">1>Build FAILED.</font></span></p><p class="" style="margin:0cm 0cm 0.0001pt;font-size:11pt;color:rgb(0,0,0)"><span style="background-color:silver"><font face="courier new, monospace">1></font></span></p>
<p class="" style="margin:0cm 0cm 0.0001pt;font-size:11pt;color:rgb(0,0,0)"><span style="background-color:silver"><font face="courier new, monospace">1>Time Elapsed 00:00:00.71</font></span></p><div style><font face="courier new, monospace"><span style="background-color:silver;color:rgb(0,0,0);font-size:11pt">========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========</span> </font></div>
<div style><br></div><div style>------------------</div><div style><b>Our analysis :</b></div><div style><br></div><div style><br></div><div style>It looks like we have a warning due to zero length in struct.</div><div style>
Because ges_reserved is at the end of the struct, it lead to a warning but not a error</div><div style><br></div><div style><br></div><div style><div><font face="courier new, monospace">struct _GESTimelineObjectClass {</font></div>
<div><font face="courier new, monospace">  /*< private >*/</font></div><div><font face="courier new, monospace">  GInitiallyUnownedClass parent_class;</font></div><div><font face="courier new, monospace"><br></font></div>
<div><font face="courier new, monospace">  /*< public >*/</font></div><div><font face="courier new, monospace">  GESCreateTrackObjectFunc create_track_object;</font></div><div><font face="courier new, monospace">  GESCreateTrackObjectsFunc create_track_objects;</font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">  /* FIXME : might need a release_track_object */</font></div><div><font face="courier new, monospace">  GESFillTrackObjectFunc  fill_track_object;</font></div>
<div><font face="courier new, monospace">  gboolean need_fill_track;</font></div><div><font face="courier new, monospace">  gboolean snaps;</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">  void (*track_object_added)    (GESTimelineObject *object,</font></div>
<div><font face="courier new, monospace">                                GESTrackObject *tck_object);</font></div><div><font face="courier new, monospace">  void (*track_object_released) (GESTimelineObject *object,</font></div>
<div><font face="courier new, monospace">                                GESTrackObject *tck_object);</font></div><div><font face="courier new, monospace">  void (*set_max_duration )     (GESTimelineObject *object,</font></div>
<div><font face="courier new, monospace">                                 guint64 maxduration);</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">  /*< private >*/</font></div>
<div><font face="courier new, monospace">  /* Padding for API extension */</font></div><div><font face="courier new, monospace">  <b>gpointer _ges_reserved[GES_PADDING - 4];</b></font></div><div><font face="courier new, monospace">};</font></div>
<div><br></div><div><br></div><div style>But struct GesTimeLineOperation includes GesTimeLineObject struct.</div><div style>Hence the empty array is not at the end of the struct</div><div style><br></div><div style>--> error</div>
<div style><br></div><div style><div><font face="courier new, monospace">struct _GESTimelineOperation {</font></div><div><font face="courier new, monospace">  /*< private >*/</font></div><div><font face="courier new, monospace">  <b>GESTimelineObject parent;</b></font></div>
<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">  GESTimelineOperationPrivate *priv;</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">  /* Padding for API extension */</font></div>
<div><font face="courier new, monospace">  gpointer _ges_reserved[GES_PADDING];</font></div><div><font face="courier new, monospace">};</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace"><br>
</font></div><div><font face="courier new, monospace"><br></font></div><div style><font face="times new roman, serif">Does someone already saw this issue ?</font></div><div style><br></div><div style><font face="times new roman, serif">We could modify the struct of GesTimelineOperation to put parent at the end, but could it lead to other issues. For example someone that is considering this static  structure to access from one member to the next one.</font></div>
<div style><font face="times new roman, serif"><br></font></div><div style><font face="times new roman, serif">Thanks a lot,</font></div><div style><font face="times new roman, serif"><br></font></div><div style><font face="times new roman, serif">Eloi</font></div>
</div></div></div>