On 17/12/2012 14:06, Chow Loong Jin wrote:
> On 17/12/2012 13:51, José Alburquerque wrote:
>> One possibility is that a playbin2 signal that gstreamermm expects to exist has
>> been removed in the existing gst-plugins-base package of the run system. By any
>> chance, are the versions of GStreamer and gst-base-plugins on the system 1.0 or
>> greater? gstreamermm-0.10.x versions will most likely not work with the 1.0.x
>> versions.
>
> We've got both gst 1.0 and 0.10 here in separate packages, with libgstreamermm
> linking against 0.10.
>
> Speaking of which, is there a gstreamermm 1.0 coming soon?
I just looked further into the issue, and figured that this was caused by a
struct size difference -- gstplaybin2.c from gst-plugins-base-0.10 has:
----8<----
struct _GstPlayBinClass
{
GstPipelineClass parent_class;
/* notify app that the current uri finished decoding and it is possible to
* queue a new one for gapless playback */
void (*about_to_finish) (GstPlayBin * playbin);
/* notify app that number of audio/video/text streams changed */
void (*video_changed) (GstPlayBin * playbin);
void (*audio_changed) (GstPlayBin * playbin);
void (*text_changed) (GstPlayBin * playbin);
/* notify app that the tags of audio/video/text streams changed */
void (*video_tags_changed) (GstPlayBin * playbin, gint stream);
void (*audio_tags_changed) (GstPlayBin * playbin, gint stream);
void (*text_tags_changed) (GstPlayBin * playbin, gint stream);
/* get audio/video/text tags for a stream */
GstTagList *(*get_video_tags) (GstPlayBin * playbin, gint stream);
GstTagList *(*get_audio_tags) (GstPlayBin * playbin, gint stream);
GstTagList *(*get_text_tags) (GstPlayBin * playbin, gint stream);
/* get the last video frame and convert it to the given caps */
GstBuffer *(*convert_frame) (GstPlayBin * playbin, GstCaps * caps);
/* get audio/video/text pad for a stream */
GstPad *(*get_video_pad) (GstPlayBin * playbin, gint stream);
GstPad *(*get_audio_pad) (GstPlayBin * playbin, gint stream);
GstPad *(*get_text_pad) (GstPlayBin * playbin, gint stream);
};
---->8----
whereas playbin2.cc from gstreamermm has:
----8<----
struct _GstPlayBin2Class
{
GstPipelineClass parent_class;
void (*about_to_finish) (GstPlayBin2* element);
void (*video_changed) (GstPlayBin2* element);
void (*audio_changed) (GstPlayBin2* element);
void (*text_changed) (GstPlayBin2* element);
void (*video_tags_changed) (GstPlayBin2* element, gint arg0);
void (*audio_tags_changed) (GstPlayBin2* element, gint arg0);
void (*text_tags_changed) (GstPlayBin2* element, gint arg0);
void (*source_setup) (GstPlayBin2* element, GstElement* arg0);
GstTagList* (*get_video_tags) (GstPlayBin2* element, gint arg0);
GstTagList* (*get_audio_tags) (GstPlayBin2* element, gint arg0);
GstTagList* (*get_text_tags) (GstPlayBin2* element, gint arg0);
GstBuffer* (*convert_frame) (GstPlayBin2* element, GstCaps* arg0);
GstPad* (*get_video_pad) (GstPlayBin2* element, gint arg0);
GstPad* (*get_audio_pad) (GstPlayBin2* element, gint arg0);
GstPad* (*get_text_pad) (GstPlayBin2* element, gint arg0);
};
---->8----
It looks like the "source_setup" member is missing from gstreamermm. The
situation looks pretty ugly, really. Must this struct definition really be
duplicated across two different codebases?
--
Kind regards,
Loong Jin
Attachment:
signature.asc
Description: OpenPGP digital signature