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

📄 control.c

📁 uclinux 下的vlc播放器源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
            var_Change( p_input, "bookmark", VLC_VAR_CLEARCHOICES, 0, 0 );            {                vlc_value_t val, text;                int i;                for( i = 0; i < p_input->i_bookmark; i++ )                {                    val.i_int = i;                    text.psz_string = p_input->bookmark[i]->psz_name;                    var_Change( p_input, "bookmark", VLC_VAR_ADDCHOICE,                                &val, &text );                }            }            vlc_mutex_unlock( &p_input->input.p_item->lock );            UpdateBookmarksOption( p_input );            return VLC_SUCCESS;        case INPUT_CHANGE_BOOKMARK:            p_bkmk = (seekpoint_t *)va_arg( args, seekpoint_t * );            i_bkmk = (int)va_arg( args, int );            vlc_mutex_lock( &p_input->input.p_item->lock );            if( i_bkmk < p_input->i_bookmark )            {                vlc_value_t val, text;                int i;                p_input->bookmark[i_bkmk] = p_bkmk;                /* Reflect the changes on the object var */                var_Change( p_input, "bookmark", VLC_VAR_CLEARCHOICES, 0, 0 );                for( i = 0; i < p_input->i_bookmark; i++ )                {                    val.i_int = i;                    text.psz_string = p_input->bookmark[i]->psz_name;                    var_Change( p_input, "bookmark", VLC_VAR_ADDCHOICE,                                &val, &text );                }            }            vlc_mutex_unlock( &p_input->input.p_item->lock );            UpdateBookmarksOption( p_input );            return VLC_SUCCESS;        case INPUT_DEL_BOOKMARK:            i_bkmk = (int)va_arg( args, int );            vlc_mutex_lock( &p_input->input.p_item->lock );            if( i_bkmk < p_input->i_bookmark )            {                vlc_value_t val, text;                int i;                p_bkmk = p_input->bookmark[i_bkmk];                TAB_REMOVE( p_input->i_bookmark, p_input->bookmark,                            p_bkmk );                vlc_seekpoint_Delete( p_bkmk );                /* Reflect the changes on the object var */                var_Change( p_input, "bookmark", VLC_VAR_CLEARCHOICES, 0, 0 );                for( i = 0; i < p_input->i_bookmark; i++ )                {                    val.i_int = i;                    text.psz_string = p_input->bookmark[i]->psz_name;                    var_Change( p_input, "bookmark", VLC_VAR_ADDCHOICE,                                &val, &text );                }                vlc_mutex_unlock( &p_input->input.p_item->lock );                UpdateBookmarksOption( p_input );                return VLC_SUCCESS;            }            vlc_mutex_unlock( &p_input->input.p_item->lock );            return VLC_EGENERIC;        case INPUT_GET_BOOKMARKS:            ppp_bkmk = (seekpoint_t ***)va_arg( args, seekpoint_t *** );            pi_bkmk = (int *)va_arg( args, int * );            vlc_mutex_lock( &p_input->input.p_item->lock );            if( p_input->i_bookmark )            {                int i;                *pi_bkmk = p_input->i_bookmark;                *ppp_bkmk = malloc( sizeof(seekpoint_t *) *                                    p_input->i_bookmark );                for( i = 0; i < p_input->i_bookmark; i++ )                {                    (*ppp_bkmk)[i] =                        vlc_seekpoint_Duplicate(p_input->bookmark[i]);                }                vlc_mutex_unlock( &p_input->input.p_item->lock );                return VLC_SUCCESS;            }            else            {                *ppp_bkmk = NULL;                *pi_bkmk = 0;                vlc_mutex_unlock( &p_input->input.p_item->lock );                return VLC_EGENERIC;            }            break;        case INPUT_CLEAR_BOOKMARKS:            vlc_mutex_lock( &p_input->input.p_item->lock );            if( p_input->i_bookmark )            {                int i;                for( i = p_input->i_bookmark - 1; i >= 0; i-- )                {                    p_bkmk = p_input->bookmark[i];                    TAB_REMOVE( p_input->i_bookmark, p_input->bookmark,                                p_bkmk );                    vlc_seekpoint_Delete( p_bkmk );                }                var_Change( p_input, "bookmark", VLC_VAR_CLEARCHOICES, 0, 0 );            }            vlc_mutex_unlock( &p_input->input.p_item->lock );            UpdateBookmarksOption( p_input );            return VLC_SUCCESS;        case INPUT_SET_BOOKMARK:            i_bkmk = (int)va_arg( args, int );            vlc_mutex_lock( &p_input->input.p_item->lock );            if( i_bkmk >= 0 && i_bkmk < p_input->i_bookmark )            {                vlc_value_t pos;                int i_ret;                if( p_input->bookmark[i_bkmk]->i_time_offset != -1 )                {                    pos.i_time = p_input->bookmark[i_bkmk]->i_time_offset;                    i_ret = var_Set( p_input, "time", pos );                }                else if( p_input->bookmark[i_bkmk]->i_byte_offset != -1 )                {                    // don't crash on bookmarks in live streams                    if( stream_Size( p_input->input.p_stream ) == 0 )                    {                        vlc_mutex_unlock( &p_input->input.p_item->lock );                        return VLC_EGENERIC;                    }                    pos.f_float = !p_input->input.p_stream ? 0 :                        p_input->bookmark[i_bkmk]->i_byte_offset /                        stream_Size( p_input->input.p_stream );                    i_ret = var_Set( p_input, "position", pos );                }                else                {                    pos.f_float = 0;                    i_ret = var_Set( p_input, "position", pos );                }                vlc_mutex_unlock( &p_input->input.p_item->lock );                return i_ret;            }            else            {                vlc_mutex_unlock( &p_input->input.p_item->lock );                return VLC_EGENERIC;            }            break;        case INPUT_ADD_OPTION:        {            char *psz_option = (char *)va_arg( args, char * );            char *psz_value = (char *)va_arg( args, char * );            int i;            vlc_mutex_lock( &p_input->input.p_item->lock );            /* Check if option already exists */            for( i = 0; i < p_input->input.p_item->i_options; i++ )            {                if( !strncmp( p_input->input.p_item->ppsz_options[i],                              psz_option, strlen( psz_option ) ) &&                    p_input->input.p_item->ppsz_options[i][strlen(psz_option)]                      == '=' )                {                    free( p_input->input.p_item->ppsz_options[i] );                    break;                }            }            if( i == p_input->input.p_item->i_options )            {                p_input->input.p_item->i_options++;                p_input->input.p_item->ppsz_options =                    realloc( p_input->input.p_item->ppsz_options,                             p_input->input.p_item->i_options *                             sizeof(char **) );            }            asprintf( &p_input->input.p_item->ppsz_options[i],                      "%s=%s", psz_option, psz_value ) ;            vlc_mutex_unlock( &p_input->input.p_item->lock );            return VLC_SUCCESS;        }        case INPUT_GET_BYTE_POSITION:            pi_64 = (int64_t*)va_arg( args, int64_t * );            *pi_64 = !p_input->input.p_stream ? 0 :                stream_Tell( p_input->input.p_stream );            return VLC_SUCCESS;        case INPUT_SET_BYTE_SIZE:            pi_64 = (int64_t*)va_arg( args, int64_t * );            *pi_64 = !p_input->input.p_stream ? 0 :                stream_Size( p_input->input.p_stream );            return VLC_SUCCESS;        case INPUT_ADD_SLAVE:            psz = (char*)va_arg( args, char * );            if( psz && *psz )            {                val.psz_string = strdup( psz );                input_ControlPush( p_input, INPUT_CONTROL_ADD_SLAVE, &val );            }            return VLC_SUCCESS;        default:            msg_Err( p_input, "unknown query in input_vaControl" );            return VLC_EGENERIC;    }}static void NotifyPlaylist( input_thread_t *p_input ){    playlist_t *p_playlist =        (playlist_t *)vlc_object_find( p_input, VLC_OBJECT_PLAYLIST,                                       FIND_PARENT );    if( p_playlist )    {        var_SetInteger( p_playlist, "item-change",                        p_input->input.p_item->i_id );        vlc_object_release( p_playlist );    }}static void UpdateBookmarksOption( input_thread_t *p_input ){    int i, i_len = 0;    char *psz_value = NULL, *psz_next = NULL;    vlc_mutex_lock( &p_input->input.p_item->lock );    for( i = 0; i < p_input->i_bookmark; i++ )    {        asprintf( &psz_value, "{name=%s,bytes="I64Fd",time="I64Fd"}",                  p_input->bookmark[i]->psz_name,                  p_input->bookmark[i]->i_byte_offset,                  p_input->bookmark[i]->i_time_offset/1000000 );        i_len += strlen( psz_value );        free( psz_value );    }    for( i = 0; i < p_input->i_bookmark; i++ )    {        if( !i ) psz_value = psz_next = malloc( i_len + p_input->i_bookmark );        sprintf( psz_next, "{name=%s,bytes="I64Fd",time="I64Fd"}",                 p_input->bookmark[i]->psz_name,                 p_input->bookmark[i]->i_byte_offset,                 p_input->bookmark[i]->i_time_offset/1000000 );        psz_next += strlen( psz_next );        if( i < p_input->i_bookmark - 1)        {            *psz_next = ','; psz_next++;        }    }    vlc_mutex_unlock( &p_input->input.p_item->lock );    input_Control( p_input, INPUT_ADD_OPTION, "bookmarks",                   psz_value ? psz_value : "" );}

⌨️ 快捷键说明

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