⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hxplayer.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
                                       G_SIGNAL_MATCH_ID,                                       signals[HXERROR_SIGNAL],                                       0,    // detail                                        NULL, // closure                                       NULL, // func                                       NULL  // data                                       );    if(error_id == 0 && hxerror_id == 0)    {        /* No error signal handlers found -- use g_warning to display instead.           This is particularly useful for handling errors on startup           (tbd: might be a better idea to have hx_player_new return a GError) */        g_warning(_("HXPlayer: Error 0x%08x: \"%s\""), (guint)hxCode, error->message);    }        /* We allocate a HXError and free it. That's not the way functions       work, but it's a grey area for signals.*/    g_signal_emit(G_OBJECT(player), signals[ERROR_SIGNAL], 0, error);    /* Also emit a signal with all the helix error information in it.       This is used in the embedded player */    g_signal_emit(G_OBJECT(player), signals[HXERROR_SIGNAL], 0,                  (guint)hxCode, (guint)userCode,                  pErrorString, pUserString, pMoreInfoURL);    g_free(error);}boolGoToURL(void*       userInfo,        const char* pURL,        const char* pTarget,        bool isPlayerURL){    HXPlayer* player;    player = HX_PLAYER(userInfo);    g_return_val_if_fail(player != NULL, false);    if(isPlayerURL)    {        g_signal_emit(G_OBJECT(player), signals[OPEN_WINDOW_SIGNAL], 0, pURL, pTarget);    }    else    {        g_signal_emit(G_OBJECT(player), signals[GOTO_URL_SIGNAL], 0, pURL, pTarget);    }    return true;}boolRequestAuthentication(void*       userInfo,                      const char* pServer,                      const char* pRealm,                      bool        isProxyServer){    HXPlayer* player;    player = HX_PLAYER(userInfo);    g_return_val_if_fail(player != NULL, false);    g_signal_emit(G_OBJECT(player), signals[REQUEST_AUTHENTICATION_SIGNAL], 0,                  pServer, pRealm, isProxyServer);    return false;}boolRequestUpgrade(void*       userInfo,               const char* url,               UInt32      numOfComponents,               const char* componentNames[],               bool        isBlocking){    HXPlayer* player;    GList* components_list = NULL;    GList* components_list_iter;    guint i;    gboolean duplicate;        player = HX_PLAYER(userInfo);    g_return_val_if_fail(player != NULL, false);    /* See comment in OnErrorOccurred */    ClientPlayerStop(player->player);    g_signal_emit(G_OBJECT(player), signals[STOP_SIGNAL], 0);        for(i = 0; i < numOfComponents; i++)    {        duplicate = FALSE;                /* Check for duplicate components */        components_list_iter = components_list;        while(components_list_iter)        {            duplicate = strcmp(componentNames[i], (char*)components_list_iter->data) == 0;            components_list_iter = g_list_next(components_list_iter);            if(duplicate)            {                break;            }        }                if(!duplicate)        {            /* Add it to the list if there were no duplicates*/            components_list = g_list_append(components_list, (void*)componentNames[i]);        }    }                                        // XXXRGG: This seems to get called for file:// urls where the file    // doesn't exist. FIXME    g_signal_emit(G_OBJECT(player), signals[REQUEST_UPGRADE_SIGNAL], 0,                  url, components_list, (gboolean)isBlocking);        g_list_free(components_list);                                        return false;}boolHasComponent(void*       userInfo,             const char* componentName){    (void)userInfo;    (void)componentName;        g_warning("Unhandled request for component %s",              componentName);        return false;}static const HXClientCallbacks g_hxcallbacks ={    OnVisualStateChanged,    OnIdealSizeChanged,    OnLengthChanged,    OnTitleChanged,    OnGroupsChanged,    OnGroupStarted,    OnContacting,    OnBuffering,    OnContentStateChanged,    OnContentConcluded,    OnStatusChanged,    OnVolumeChanged,    OnMuteChanged,    OnClipBandwidthChanged,    OnErrorOccurred,    GoToURL,    RequestAuthentication,    RequestUpgrade,    HasComponent,    NULL, // PrivateCallback1    NULL, // PrivateCallback2};boolHasFeature( const char* szFeatureName ){    gboolean result = FALSE;    GList* iter;    iter = g_players_list;    while(iter && !result)    {                g_signal_emit(G_OBJECT(iter->data),                      signals[HAS_FEATURE_SIGNAL], 0,                      (gchar*)szFeatureName, &result);        iter = g_list_next(iter);    }            return (result)? true: false;}/* These functions are actually defined in hxprefs.cpp */bool ReadPreference  (const char*          pPrekKey,                      unsigned char*       pValueBuffer,                      UInt32               bufferLength,                      UInt32*              pUsedBufferLength);bool WritePreference (const char*          pPrekKey,                      const unsigned char* pValueBuffer,                      UInt32               bufferLength);bool DeletePreference(const char*          pPrekKey);static const HXClientEngineCallbacks g_hxclientengine_callbacks ={    ReadPreference,    WritePreference,    DeletePreference,    HasFeature};GTypehx_player_get_type(void){    static GType hxplayer_type = 0;    if (!hxplayer_type)    {        static const GTypeInfo hxplayer_info =        {            sizeof (HXPlayerClass),            NULL,           /* base_init */            NULL,           /* base_finalize */            (GClassInitFunc) hx_player_class_init,            NULL,           /* class_finalize */            NULL,           /* class_data */            sizeof (HXPlayer),            0,              /* n_preallocs */            (GInstanceInitFunc) hx_player_init,            NULL,           /* value_table */        };                                                                                            hxplayer_type = g_type_register_static (GTK_TYPE_WIDGET, "HXPlayer",                                                &hxplayer_info, (GTypeFlags)0);    }                                                                                    return hxplayer_type;   }static voidhx_player_class_init(HXPlayerClass* klass){    GObjectClass* gobject_class = G_OBJECT_CLASS(klass);    GtkWidgetClass* widget_class = GTK_WIDGET_CLASS(klass);#ifdef ENABLE_NLS    /* gettext support */    bindtextdomain (PACKAGE, LOCALEDIR);#ifdef HAVE_BIND_TEXTDOMAIN_CODESET    bind_textdomain_codeset(PACKAGE, "UTF-8");#endif#endif    gobject_class->finalize = hx_player_finalize;    gobject_class->set_property = hx_player_set_property;    gobject_class->get_property = hx_player_get_property;    widget_class->realize = hx_player_realize;    widget_class->unrealize = hx_player_unrealize;    widget_class->size_allocate = hx_player_size_allocate;     widget_class->expose_event = hx_player_expose;     widget_class->motion_notify_event = hx_player_motion_notify_event;                /* Action signals */        signals[PLAY_SIGNAL] =        g_signal_new("play",                      G_OBJECT_CLASS_TYPE(gobject_class),                      (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),                      G_STRUCT_OFFSET(HXPlayerClass, play),                      NULL, NULL,                      g_cclosure_marshal_VOID__VOID,                      G_TYPE_NONE, 0);      signals[STOP_SIGNAL] =        g_signal_new("stop",                      G_OBJECT_CLASS_TYPE(gobject_class),                      (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),                      G_STRUCT_OFFSET(HXPlayerClass, stop),                      NULL, NULL,                      g_cclosure_marshal_VOID__VOID,                      G_TYPE_NONE, 0);      signals[PAUSE_SIGNAL] =        g_signal_new("pause",                      G_OBJECT_CLASS_TYPE(gobject_class),                      (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),                      G_STRUCT_OFFSET(HXPlayerClass, pause),                      NULL, NULL,                      g_cclosure_marshal_VOID__VOID,                      G_TYPE_NONE, 0);      signals[CONTACTING_SIGNAL] =        g_signal_new("contacting",                      G_OBJECT_CLASS_TYPE(gobject_class),                      (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),                      G_STRUCT_OFFSET(HXPlayerClass, contacting),                      NULL, NULL,                      g_cclosure_marshal_VOID__STRING,                      G_TYPE_NONE, 1, G_TYPE_STRING);    signals[BUFFERING_SIGNAL] =        g_signal_new("buffering",                      G_OBJECT_CLASS_TYPE(gobject_class),                      (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),                      G_STRUCT_OFFSET(HXPlayerClass, buffering),                      NULL, NULL,                      g_cclosure_user_marshal_VOID__UINT_UINT,                      G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT);      signals[LENGTH_CHANGED_SIGNAL] =        g_signal_new("length_changed",                      G_OBJECT_CLASS_TYPE(gobject_class),                      (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),                      G_STRUCT_OFFSET(HXPlayerClass, length_changed),                      NULL, NULL,                      g_cclosure_marshal_VOID__UINT,                      G_TYPE_NONE, 1, G_TYPE_UINT);      signals[SEEK_SIGNAL] =        g_signal_new("seek",                      G_OBJECT_CLASS_TYPE(gobject_class),                      (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),                      G_STRUCT_OFFSET(HXPlayerClass, seek),                      NULL, NULL,                      g_cclosure_marshal_VOID__UINT,                      G_TYPE_NONE, 1, G_TYPE_UINT);      signals[START_SEEKING_SIGNAL] =        g_signal_new("start_seeking",                      G_OBJECT_CLASS_TYPE(gobject_class),                      (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),                      G_STRUCT_OFFSET(HXPlayerClass, start_seeking),                      NULL, NULL,                      g_cclosure_marshal_VOID__VOID,                      G_TYPE_NONE, 0);      signals[STOP_SEEKING_SIGNAL] =        g_signal_new("stop_seeking",                      G_OBJECT_CLASS_TYPE(gobject_class),                      (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),                      G_STRUCT_OFFSET(HXPlayerClass, stop_seeking),                      NULL, NULL,                      g_cclosure_marshal_VOID__VOID,                      G_TYPE_NONE, 0);          signals[ERROR_SIGNAL] =        g_signal_new("error",                      G_OBJECT_CLASS_TYPE(gobject_class),                      (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),                      G_STRUCT_OFFSET(HXPlayerClass, error),                      NULL, NULL,                      g_cclosure_marshal_VOID__POINTER,                      G_TYPE_NONE, 1, G_TYPE_POINTER);      signals[HXERROR_SIGNAL] =        g_signal_new("hxerror",                      G_OBJECT_CLASS_TYPE(gobject_class),                      (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),                      G_STRUCT_OFFSET(HXPlayerClass, error),                      NULL, NULL,                      g_cclosure_user_marshal_VOID__UINT_UINT_STRING_STRING_STRING,                      G_TYPE_NONE, 5, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);      signals[IDEAL_SIZE_CHANGED_SIGNAL] =        g_signal_new("ideal_size_changed",                     G_OBJECT_CLASS_TYPE(gobject_class),                     (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),                     G_STRUCT_OFFSET(HXPlayerClass, ideal_size_changed),                     NULL, NULL,                     g_cclosure_user_marshal_VOID__INT_INT,                     G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT);      signals[VOLUME_CHANGED_SIGNAL] =        g_signal_new("volume_changed",                     G_OBJECT_CLASS_TYPE(gobject_class),                     (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),                     G_STRUCT_OFFSET(HXPlayerClass, volume_changed),                     NULL, NULL,                     g_cclosure_marshal_VOID__UINT,                     G_TYPE_NONE, 1, G_TYPE_UINT);      signals[MUTE_CHANGED_SIGNAL] =        g_signal_new("mute_changed",                     G_OBJECT_CLASS_TYPE(gobject_class),                     (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),                     G_STRUCT_OFFSET(HXPlayerClass, mute_changed),                     NULL, NULL,                     g_cclosure_marshal_VOID__BOOLEAN,                     G_TYPE_NONE, 1, G_TYPE_BOOLEAN);      signals[GOTO_URL_SIGNAL] =        g_signal_new("goto_url",                     G_OBJECT_CLASS_TYPE(gobject_class),                     (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),                     G_STRUCT_OFFSET(HXPlayerClass, goto_url),                     NULL, NULL,                     g_cclosure_user_marshal_VOID__STRING_STRING,                     G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_STRING);      signals[OPEN_WINDOW_SIGNAL] =        g_signal_new("open_window",                     G_OBJECT_CLASS_TYPE(gobject_class),                     (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),                     G_STRUCT_OFFSET(HXPlayerClass, open_window),                     NULL, NULL,                     g_cclosure_user_marshal_VOID__STRING_STRING,                     G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_STRING);      signals[CLIP_BANDWIDTH_CHANGED_SIGNAL] =        g_signal_new("clip_bandwidth_changed",                     G_OBJECT_CLASS_TYPE(gobject_class),                     (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),                     G_STRUCT_OFFSET(HXPlayerClass, clip_bandwidth_changed),                     NULL, NULL,                     g_cclosure_marshal_VOID__INT,                     G_TYPE_NONE, 1, G_TYPE_INT);      signals[REQUEST_UPGRADE_SIGNAL] =        g_signal_new("request_upgrade",                     G_OBJECT_CLASS_TYPE(gobject_class),                     (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),                     G_STRUCT_OFFSET(HXPlayerClass, request_upgrade),                     NULL, NULL,                     g_cclosure_user_marshal_VOID__STRING_POINTER_BOOLEAN,                     G_TYPE_NONE, 3, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_BOOLEAN);    signals[GROUPS_CHANGED_SIGNAL] =        g_signal_new("groups_changed",                     G_OBJECT_CLASS_TYPE(gobject_class),                     (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),                     G_STRUCT_OFFSET(HXPlayerClass, groups_changed),                     NULL, NULL,                     g_cclosure_marshal_VOID__VOID,                     G_TYPE_NONE, 0);    signals[GROUP_STARTED_SIGNAL] =        g_signal_new("group_started",                     G_OBJECT_CLASS_TYPE(gobject_class),                     (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),                     G_STRUCT_OFFSET(HXPlayerClass, group_started),                     NULL, NULL,                     g_cclosure_marshal_VOID__UINT,                     G_TYPE_NONE, 1, G_TYPE_UINT);    signals[TITLE_CHANGED_SIGNAL] =        g_signal_new("title_changed",                     G_OBJECT_CLASS_TYPE(gobject_class),                     (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),                     G_STRUCT_OFFSET(HXPlayerClass, title_changed),                     NULL, NULL,                     g_cclosure_marshal_VOID__STRING,                     G_TYPE_NONE, 1, G_TYPE_STRING);    signals[REQUEST_AUTHENTICATION_SIGNAL] =        g_signal_new("request_authentication",                     G_OBJECT_CLASS_TYPE(gobject_class),                     (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),                     G_STRUCT_OFFSET(HXPlayerClass, request_authentication),                     NULL, NULL,                     g_cclosure_user_marshal_VOID__STRING_STRING_BOOLEAN,                     G_TYPE_NONE, 3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN);    signals[STATUS_CHANGED_SIGNAL] =        g_signal_new("status_changed",                     G_OBJECT_CLASS_TYPE(gobject_class),                     (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),                     G_STRUCT_OFFSET(HXPlayerClass, status_changed),                     NULL, NULL,                     g_cclosure_marshal_VOID__STRING,                     G_TYPE_NONE, 1, G_TYPE_STRING);    signals[CONTENT_CONCLUDED_SIGNAL] =        g_signal_new("content_concluded",                     G_OBJECT_CLASS_TYPE(gobject_class),                     (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),                     G_STRUCT_OFFSET(HXPlayerClass, content_concluded),                     NULL, NULL,                     g_cclosure_marshal_VOID__VOID,                     G_TYPE_NONE, 0);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -