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

📄 transform.c

📁 uclinux 下的vlc播放器源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
    if( p_vout->p_sys->p_vout )    {        DEL_CALLBACKS( p_vout->p_sys->p_vout, SendEvents );        vlc_object_detach( p_vout->p_sys->p_vout );        vout_Destroy( p_vout->p_sys->p_vout );    }    DEL_PARENT_CALLBACKS( SendEventsToChild );    free( p_vout->p_sys );}/***************************************************************************** * Render: displays previously rendered output ***************************************************************************** * This function send the currently rendered image to Transform image, waits * until it is displayed and switch the two rendering buffers, preparing next * frame. *****************************************************************************/static void Render( vout_thread_t *p_vout, picture_t *p_pic ){    picture_t *p_outpic;    int i_index;    /* This is a new frame. Get a structure from the video_output. */    while( ( p_outpic = vout_CreatePicture( p_vout->p_sys->p_vout, 0, 0, 0 ) )              == NULL )    {        if( p_vout->b_die || p_vout->b_error )        {            return;        }        msleep( VOUT_OUTMEM_SLEEP );    }    vout_DatePicture( p_vout->p_sys->p_vout, p_outpic, p_pic->date );    vout_LinkPicture( p_vout->p_sys->p_vout, p_outpic );    switch( p_vout->p_sys->i_mode )    {        case TRANSFORM_MODE_90:            for( i_index = 0 ; i_index < p_pic->i_planes ; i_index++ )            {                int i_pitch = p_pic->p[i_index].i_pitch;                uint8_t *p_in = p_pic->p[i_index].p_pixels;                uint8_t *p_out = p_outpic->p[i_index].p_pixels;                uint8_t *p_out_end = p_out +                    p_outpic->p[i_index].i_visible_lines *                    p_outpic->p[i_index].i_pitch;                for( ; p_out < p_out_end ; )                {                    uint8_t *p_line_end;                    p_out_end -= p_outpic->p[i_index].i_pitch                                  - p_outpic->p[i_index].i_visible_pitch;                    p_line_end = p_in + p_pic->p[i_index].i_visible_lines *                        i_pitch;                    for( ; p_in < p_line_end ; )                    {                        p_line_end -= i_pitch;                        *(--p_out_end) = *p_line_end;                    }                    p_in++;                }            }            break;        case TRANSFORM_MODE_180:            for( i_index = 0 ; i_index < p_pic->i_planes ; i_index++ )            {                uint8_t *p_in = p_pic->p[i_index].p_pixels;                uint8_t *p_in_end = p_in + p_pic->p[i_index].i_visible_lines                                            * p_pic->p[i_index].i_pitch;                uint8_t *p_out = p_outpic->p[i_index].p_pixels;                for( ; p_in < p_in_end ; )                {                    uint8_t *p_line_start = p_in_end                                             - p_pic->p[i_index].i_pitch;                    p_in_end -= p_pic->p[i_index].i_pitch                                 - p_pic->p[i_index].i_visible_pitch;                    for( ; p_line_start < p_in_end ; )                    {                        *p_out++ = *(--p_in_end);                    }                    p_out += p_outpic->p[i_index].i_pitch                              - p_outpic->p[i_index].i_visible_pitch;                }            }            break;        case TRANSFORM_MODE_270:            for( i_index = 0 ; i_index < p_pic->i_planes ; i_index++ )            {                int i_pitch = p_pic->p[i_index].i_pitch;                uint8_t *p_in = p_pic->p[i_index].p_pixels;                uint8_t *p_out = p_outpic->p[i_index].p_pixels;                uint8_t *p_out_end = p_out +                    p_outpic->p[i_index].i_visible_lines *                    p_outpic->p[i_index].i_pitch;                for( ; p_out < p_out_end ; )                {                    uint8_t *p_in_end;                    p_in_end = p_in + p_pic->p[i_index].i_visible_lines *                        i_pitch;                    for( ; p_in < p_in_end ; )                    {                        p_in_end -= i_pitch;                        *p_out++ = *p_in_end;                    }                    p_out += p_outpic->p[i_index].i_pitch                              - p_outpic->p[i_index].i_visible_pitch;                    p_in++;                }            }            break;        case TRANSFORM_MODE_HFLIP:            for( i_index = 0 ; i_index < p_pic->i_planes ; i_index++ )            {                uint8_t *p_in = p_pic->p[i_index].p_pixels;                uint8_t *p_in_end = p_in + p_pic->p[i_index].i_visible_lines                                            * p_pic->p[i_index].i_pitch;                uint8_t *p_out = p_outpic->p[i_index].p_pixels;                for( ; p_in < p_in_end ; )                {                    p_in_end -= p_pic->p[i_index].i_pitch;                    p_vout->p_vlc->pf_memcpy( p_out, p_in_end,                                           p_pic->p[i_index].i_visible_pitch );                    p_out += p_pic->p[i_index].i_pitch;                }            }            break;        case TRANSFORM_MODE_VFLIP:            for( i_index = 0 ; i_index < p_pic->i_planes ; i_index++ )            {                uint8_t *p_in = p_pic->p[i_index].p_pixels;                uint8_t *p_in_end = p_in + p_pic->p[i_index].i_visible_lines                                            * p_pic->p[i_index].i_pitch;                uint8_t *p_out = p_outpic->p[i_index].p_pixels;                for( ; p_in < p_in_end ; )                {                    uint8_t *p_line_end = p_in                                           + p_pic->p[i_index].i_visible_pitch;                    for( ; p_in < p_line_end ; )                    {                        *p_out++ = *(--p_line_end);                    }                    p_in += p_pic->p[i_index].i_pitch;                }            }            break;        default:            break;    }    vout_UnlinkPicture( p_vout->p_sys->p_vout, p_outpic );    vout_DisplayPicture( p_vout->p_sys->p_vout, p_outpic );}/***************************************************************************** * SendEvents: forward mouse and keyboard events to the parent p_vout *****************************************************************************/static int SendEvents( vlc_object_t *p_this, char const *psz_var,                       vlc_value_t oldval, vlc_value_t newval, void *_p_vout ){    vout_thread_t *p_vout = (vout_thread_t *)_p_vout;    vlc_value_t sentval = newval;    /* Translate the mouse coordinates */    if( !strcmp( psz_var, "mouse-x" ) )    {        switch( p_vout->p_sys->i_mode )        {        case TRANSFORM_MODE_270:            sentval.i_int = p_vout->p_sys->p_vout->output.i_width                             - sentval.i_int;        case TRANSFORM_MODE_90:            var_Set( p_vout, "mouse-y", sentval );            return VLC_SUCCESS;        case TRANSFORM_MODE_180:        case TRANSFORM_MODE_HFLIP:            sentval.i_int = p_vout->p_sys->p_vout->output.i_width                             - sentval.i_int;            break;        case TRANSFORM_MODE_VFLIP:        default:            break;        }    }    else if( !strcmp( psz_var, "mouse-y" ) )    {        switch( p_vout->p_sys->i_mode )        {        case TRANSFORM_MODE_90:            sentval.i_int = p_vout->p_sys->p_vout->output.i_height                             - sentval.i_int;        case TRANSFORM_MODE_270:            var_Set( p_vout, "mouse-x", sentval );            return VLC_SUCCESS;        case TRANSFORM_MODE_180:        case TRANSFORM_MODE_VFLIP:            sentval.i_int = p_vout->p_sys->p_vout->output.i_height                             - sentval.i_int;            break;        case TRANSFORM_MODE_HFLIP:        default:            break;        }    }    var_Set( p_vout, psz_var, sentval );    return VLC_SUCCESS;}/***************************************************************************** * SendEventsToChild: forward events to the child/children vout *****************************************************************************/static int SendEventsToChild( vlc_object_t *p_this, char const *psz_var,                       vlc_value_t oldval, vlc_value_t newval, void *p_data ){    vout_thread_t *p_vout = (vout_thread_t *)p_this;    var_Set( p_vout->p_sys->p_vout, psz_var, newval );    return VLC_SUCCESS;}

⌨️ 快捷键说明

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