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

📄 magnify.c

📁 uclinux 下的vlc播放器源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
    magnify( Y_PLANE );    magnify( U_PLANE );    magnify( V_PLANE );#undef magnify    }    else    {#define copy( plane ) \        memcpy( p_outpic->p[plane].p_pixels, p_pic->p[plane].p_pixels, \            p_outpic->p[plane].i_lines * p_outpic->p[plane].i_pitch );        copy( Y_PLANE );        copy( U_PLANE );        copy( V_PLANE );#undef copy    }    if( p_vout->p_sys->b_visible )    {        /* image visualization */        fmt_out = p_vout->fmt_out;        fmt_out.i_width = p_vout->render.i_width/VIS_ZOOM;        fmt_out.i_height = p_vout->render.i_height/VIS_ZOOM;        p_converted = image_Convert( p_vout->p_sys->p_image, p_pic,                                     &(p_pic->format), &fmt_out );    #define copyimage( plane ) \        for( y=0; y<p_converted->p[plane].i_visible_lines; y++) \        { \            memcpy( p_outpic->p[plane].p_pixels+y*p_outpic->p[plane].i_pitch, \            p_converted->p[plane].p_pixels+y*p_converted->p[plane].i_pitch, \            p_converted->p[plane].i_visible_pitch ); \        }        copyimage( Y_PLANE );        copyimage( U_PLANE );        copyimage( V_PLANE );    #undef copyimage        p_converted->pf_release( p_converted );        /* white rectangle on visualization */        v_w = p_oyp->i_pitch*ZOOM_FACTOR/(VIS_ZOOM*o_zoom);        v_h = (o_y+p_oyp->i_lines*ZOOM_FACTOR/o_zoom)/VIS_ZOOM;        /* top line */        memset( p_oyp->p_pixels                + o_y/VIS_ZOOM*p_oyp->i_pitch                + o_x/VIS_ZOOM, 0xff, v_w+1 );        for( y = o_y/VIS_ZOOM+1; y < v_h; y++ )        {            /* left line */            p_oyp->p_pixels[                y*p_oyp->i_pitch+o_x/VIS_ZOOM            ] = 0xff;            /* right line */            p_oyp->p_pixels[                y*p_oyp->i_pitch+o_x/VIS_ZOOM + v_w            ] = 0xff;        }        /* bottom line */        memset( p_oyp->p_pixels                + v_h*p_oyp->i_pitch                + o_x/VIS_ZOOM, 0xff, v_w+1 );        /* */        v_h = p_oyp->i_lines/VIS_ZOOM;    }    else    {        v_h = 1;    }    /* print a small "VLC ZOOM" ... gruikkkkkkkkk */#define DRAW(a) {int c,l=1;L a;}#define L ;l++,c=1#define X ;draw(l,c);c+=1#define o +1#define draw(y,x) p_oyp->p_pixels[(v_h+y)*p_oyp->i_pitch+x] = 0xff;if( p_vout->p_sys->b_visible )DRAW(X o o o X o X o o o o o o X X X X o o o X X X X X o o X X X o o o X X X o o X X o X X o o o X o o o X o X X X X X o X X X X o o X X X X X LX o o o X o X o o o o o X o o o o o o o o o o X o o X o o o X o X o o o X o X o X o X o o o X o o o X o o o X o o o X o o o X o X o o o o Lo X o X o o X o o o o o X o o o o o o o o o X o o o X o o o X o X o o o X o X o o o X o o o X X X X X o o o X o o o X o o o X o X X X X o Lo X o X o o X o o o o o X o o o o o o o o X o o o o X o o o X o X o o o X o X o o o X o o o X o o o X o o o X o o o X o o o X o X o o o o Lo o X o o o X X X X X o o X X X X o o o X X X X X o o X X X o o o X X X o o X o o o X o o o X o o o X o X X X X X o X X X X o o X X X X X L)elseDRAW(X o o o X o X o o o o o o X X X X o o o X X X X X o o X X X o o o X X X o o X X o X X o o o o X X X X o X o o o X o o X X X o o X o o o X LX o o o X o X o o o o o X o o o o o o o o o o X o o X o o o X o X o o o X o X o X o X o o o X o o o o o X o o o X o X o o o X o X o o o X Lo X o X o o X o o o o o X o o o o o o o o o X o o o X o o o X o X o o o X o X o o o X o o o o X X X o o X X X X X o X o o o X o X o X o X Lo X o X o o X o o o o o X o o o o o o o o X o o o o X o o o X o X o o o X o X o o o X o o o o o o o X o X o o o X o X o o o X o X o X o X Lo o X o o o X X X X X o o X X X X o o o X X X X X o o X X X o o o X X X o o X o o o X o o o X X X X o o X o o o X o o X X X o o o X o X o L)#undef DRAW#undef L#undef X#undef O#undef draw    if( p_vout->p_sys->b_visible )    {        /* zoom gauge */        memset( p_oyp->p_pixels                    + (v_h+9)*p_oyp->i_pitch,                    0xff, 41 );        for( y = v_h + 10; y < v_h + 90; y++ )        {            int width = v_h + 90 - y;            width = (width*width)/160;            if( (80 - y + v_h)*10 < o_zoom )            {                memset( p_oyp->p_pixels                    + y*p_oyp->i_pitch,                    0xff, width );            }            else            {                p_oyp->p_pixels[y*p_oyp->i_pitch] = 0xff;                p_oyp->p_pixels[y*p_oyp->i_pitch + width - 1] = 0xff;            }        }    }    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_data ){    var_Set( (vlc_object_t *)p_data, psz_var, newval );    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;}/***************************************************************************** * MouseEvent: callback for mouse events *****************************************************************************/static int MouseEvent( 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_data;    vlc_value_t vald,valx,valy;#define MOUSE_DOWN    1#define MOUSE_CLICKED 2#define MOUSE_MOVE_X  4#define MOUSE_MOVE_Y  8#define MOUSE_MOVE    12    uint8_t mouse= 0;    int v_h = p_vout->output.i_height*ZOOM_FACTOR/p_vout->p_sys->i_zoom;    int v_w = p_vout->output.i_width*ZOOM_FACTOR/p_vout->p_sys->i_zoom;    if( psz_var[6] == 'x' ) mouse |= MOUSE_MOVE_X;    if( psz_var[6] == 'y' ) mouse |= MOUSE_MOVE_Y;    if( psz_var[6] == 'c' ) mouse |= MOUSE_CLICKED;    var_Get( p_vout->p_sys->p_vout, "mouse-button-down", &vald );    if( vald.i_int & 0x1 ) mouse |= MOUSE_DOWN;    var_Get( p_vout->p_sys->p_vout, "mouse-y", &valy );    var_Get( p_vout->p_sys->p_vout, "mouse-x", &valx );    if( ( mouse&MOUSE_MOVE && mouse&MOUSE_DOWN)        || mouse&MOUSE_CLICKED )    {    /* (mouse moved and mouse button is down) or (mouse clicked) */        if( p_vout->p_sys->b_visible )        {            if(    0 <= valy.i_int                && valy.i_int < (int)p_vout->output.i_height/VIS_ZOOM                && 0 <= valx.i_int                && valx.i_int < (int)p_vout->output.i_width/VIS_ZOOM )            {            /* mouse is over visualisation */                p_vout->p_sys->i_x = __MIN( __MAX( valx.i_int*VIS_ZOOM - v_w/2, 0 ),                                            p_vout->output.i_width - v_w - 1);                p_vout->p_sys->i_y = __MIN( __MAX( valy.i_int * VIS_ZOOM - v_h/2,                                        0 ), p_vout->output.i_height - v_h - 1);            }            else if( valx.i_int >= 0 && valx.i_int < 80                && valy.i_int >= (int)p_vout->output.i_height/VIS_ZOOM                && valy.i_int < (int)p_vout->output.i_height/VIS_ZOOM + 9                && mouse&MOUSE_CLICKED )            {            /* mouse is over the "VLC ZOOM HIDE" text */                p_vout->p_sys->b_visible = VLC_FALSE;            }            else if(    (int)p_vout->output.i_height/VIS_ZOOM + 9 <= valy.i_int                     && valy.i_int <= (int)p_vout->output.i_height/VIS_ZOOM + 90                     && 0 <= valx.i_int                     && valx.i_int <=                     (( (int)p_vout->output.i_height/VIS_ZOOM + 90 -  valy.i_int)               *( (int)p_vout->output.i_height/VIS_ZOOM + 90 -  valy.i_int))/160 )            {            /* mouse is over zoom gauge */                p_vout->p_sys->i_zoom = __MAX( ZOOM_FACTOR,                                ( 80 + (int)p_vout->output.i_height/VIS_ZOOM                                   - valy.i_int + 2) * ZOOM_FACTOR/10 );            }            else if( mouse&MOUSE_MOVE_X && !(mouse&MOUSE_CLICKED) )            {                p_vout->p_sys->i_x -= (newval.i_int - oldval.i_int)                                      *ZOOM_FACTOR/p_vout->p_sys->i_zoom;            }            else if( mouse&MOUSE_MOVE_Y && !(mouse&MOUSE_CLICKED) )            {                p_vout->p_sys->i_y -= (newval.i_int - oldval.i_int)                                      *ZOOM_FACTOR/p_vout->p_sys->i_zoom;            }        }        else        {            if( valx.i_int >= 0 && valx.i_int < 80 && valy.i_int >= 0                && valy.i_int <= 10 && mouse&MOUSE_CLICKED )            {            /* mouse is over the "VLC ZOOM SHOW" text */                p_vout->p_sys->b_visible = VLC_TRUE;            }            else if( mouse&MOUSE_MOVE_X && !(mouse&MOUSE_CLICKED) )            {                p_vout->p_sys->i_x -= (newval.i_int - oldval.i_int)                                      *ZOOM_FACTOR/p_vout->p_sys->i_zoom;            }            else if( mouse&MOUSE_MOVE_Y && !(mouse&MOUSE_CLICKED) )            {                p_vout->p_sys->i_y -= (newval.i_int - oldval.i_int)                                      *ZOOM_FACTOR/p_vout->p_sys->i_zoom;            }        }    }    p_vout->p_sys->i_x =         __MAX( 0, __MIN( p_vout->p_sys->i_x, (int)p_vout->output.i_width         - (int)p_vout->output.i_width*ZOOM_FACTOR/p_vout->p_sys->i_zoom - 1 ));    p_vout->p_sys->i_y =         __MAX( 0, __MIN( p_vout->p_sys->i_y, (int)p_vout->output.i_height        - (int)p_vout->output.i_height*ZOOM_FACTOR/p_vout->p_sys->i_zoom - 1 ));    return VLC_SUCCESS;}

⌨️ 快捷键说明

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