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

📄 sdl_phyuv.c

📁 SDL库 在进行视频显示程序spcaview安装时必须的库文件
💻 C
📖 第 1 页 / 共 2 页
字号:
    }    if (overlay->planes > 0)    {        overlay->pitches[0] = overlay->hwdata->channel->yplane1->pitch;        overlay->pixels[0]  = overlay->hwdata->CurrentFrameData->Y;    }    if (overlay->planes > 1)    {        overlay->pitches[1] = overlay->hwdata->channel->vplane1->pitch;        overlay->pixels[1]  = overlay->hwdata->CurrentFrameData->U;    }    if (overlay->planes > 2)    {        overlay->pitches[2] = overlay->hwdata->channel->uplane1->pitch;        overlay->pixels[2]  = overlay->hwdata->CurrentFrameData->V;    }    overlay->hwdata->State = OVERLAY_STATE_ACTIVE;    overlay->hwdata->scaler_on = 0;    overlay->hw_overlay = 1;    current_overlay=overlay;    return overlay;}int ph_LockYUVOverlay(_THIS, SDL_Overlay* overlay){    if (overlay == NULL)    {        return -1;    }    overlay->hwdata->locked = 1;/*  overlay->hwdata->current = PgNextVideoFrame(overlay->hwdata->channel);    if (overlay->hwdata->current == -1)    {        SDL_SetError("ph_LockYUVOverlay: PgNextFrame() failed, bailing out\n");        SDL_FreeYUVOverlay(overlay);        return 0;    }    if (overlay->hwdata->current == 0)    {        overlay->hwdata->CurrentFrameData = overlay->hwdata->FrameData0;    }    else    {        overlay->hwdata->CurrentFrameData = overlay->hwdata->FrameData1;    }    if (overlay->planes > 0)    {        overlay->pitches[0] = overlay->hwdata->channel->yplane1->pitch;        overlay->pixels[0]  = overlay->hwdata->CurrentFrameData->Y;    }    if (overlay->planes > 1)    {        overlay->pitches[1] = overlay->hwdata->channel->uplane1->pitch;        overlay->pixels[1]  = overlay->hwdata->CurrentFrameData->U;    }    if (overlay->planes > 2)    {        overlay->pitches[2] = overlay->hwdata->channel->vplane1->pitch;        overlay->pixels[2]  = overlay->hwdata->CurrentFrameData->V;    }*/    return(0);}void ph_UnlockYUVOverlay(_THIS, SDL_Overlay* overlay){    if (overlay == NULL)    {        return;    }    overlay->hwdata->locked = 0;}int ph_DisplayYUVOverlay(_THIS, SDL_Overlay* overlay, SDL_Rect* src, SDL_Rect* dst){    int rtncode;    PhPoint_t pos;    SDL_Rect backrect;    PhRect_t windowextent;    int winchanged=0;    if ((overlay == NULL) || (overlay->hwdata==NULL))    {        return -1;    }    if (overlay->hwdata->State == OVERLAY_STATE_UNINIT)    {        return -1;    }    PtGetAbsPosition(window, &pos.x, &pos.y);    if ((pos.x!=overlay->hwdata->CurrentWindowPos.x) ||        (pos.y!=overlay->hwdata->CurrentWindowPos.y))    {       winchanged=1;       overlay->hwdata->CurrentWindowPos.x=pos.x;       overlay->hwdata->CurrentWindowPos.y=pos.y;    }    /* If CurrentViewPort position/size has been changed, then move/resize the viewport */    if ((overlay->hwdata->CurrentViewPort.pos.x != dst->x) ||        (overlay->hwdata->CurrentViewPort.pos.y != dst->y) ||        (overlay->hwdata->CurrentViewPort.size.w != dst->w) ||        (overlay->hwdata->CurrentViewPort.size.h != dst->h) ||        (overlay->hwdata->scaler_on==0) || (winchanged==1) ||        (overlay->hwdata->forcedredraw==1))    {        if (overlay->hwdata->ischromakey==1)        {            /* restore screen behind the overlay/chroma color. */            backrect.x=overlay->hwdata->CurrentViewPort.pos.x;            backrect.y=overlay->hwdata->CurrentViewPort.pos.y;            backrect.w=overlay->hwdata->CurrentViewPort.size.w;            backrect.h=overlay->hwdata->CurrentViewPort.size.h;            this->UpdateRects(this, 1, &backrect);            /* Draw the new rectangle of the chroma color at the viewport position */            PgSetFillColor(overlay->hwdata->chromakey);            PgDrawIRect(dst->x, dst->y, dst->x+dst->w-1, dst->y+dst->h-1, Pg_DRAW_FILL);            PgFlush();        }        overlay->hwdata->props.flags |= Pg_SCALER_PROP_SCALER_ENABLE;        overlay->hwdata->scaler_on = 1;        PhWindowQueryVisible(Ph_QUERY_CONSOLE, 0, PtWidgetRid(window), &windowextent);        overlay->hwdata->CurrentViewPort.pos.x = pos.x-windowextent.ul.x+dst->x;        overlay->hwdata->CurrentViewPort.pos.y = pos.y-windowextent.ul.y+dst->y;        overlay->hwdata->CurrentViewPort.size.w = dst->w;        overlay->hwdata->CurrentViewPort.size.h = dst->h;        PhAreaToRect(&overlay->hwdata->CurrentViewPort, &overlay->hwdata->props.viewport);        overlay->hwdata->CurrentViewPort.pos.x = dst->x;        overlay->hwdata->CurrentViewPort.pos.y = dst->y;        rtncode = PgConfigScalerChannel(overlay->hwdata->channel, &(overlay->hwdata->props));        switch(rtncode)        {            case -1:                     SDL_SetError("PgConfigScalerChannel() function failed\n");                     SDL_FreeYUVOverlay(overlay);                     return -1;            case 1:                     grab_ptrs2(overlay->hwdata->channel, overlay->hwdata->FrameData0, overlay->hwdata->FrameData1);                     break;            case 0:            default:                     break;        }    }/*    if (overlay->hwdata->locked==0)    {        overlay->hwdata->current = PgNextVideoFrame(overlay->hwdata->channel);        if (overlay->hwdata->current == -1)        {            SDL_SetError("ph_LockYUVOverlay: PgNextFrame() failed, bailing out\n");            SDL_FreeYUVOverlay(overlay);            return 0;        }        if (overlay->hwdata->current == 0)        {            overlay->hwdata->CurrentFrameData = overlay->hwdata->FrameData0;        }        else        {            overlay->hwdata->CurrentFrameData = overlay->hwdata->FrameData1;        }        if (overlay->planes > 0)        {            overlay->pitches[0] = overlay->hwdata->channel->yplane1->pitch;            overlay->pixels[0]  = overlay->hwdata->CurrentFrameData->Y;        }        if (overlay->planes > 1)        {            overlay->pitches[1] = overlay->hwdata->channel->uplane1->pitch;            overlay->pixels[1]  = overlay->hwdata->CurrentFrameData->U;        }        if (overlay->planes > 2)        {            overlay->pitches[2] = overlay->hwdata->channel->vplane1->pitch;            overlay->pixels[2]  = overlay->hwdata->CurrentFrameData->V;        }    }*/            return 0;}void ph_FreeYUVOverlay(_THIS, SDL_Overlay *overlay){    SDL_Rect backrect;    if (overlay == NULL)    {        return;    }    if (overlay->hwdata == NULL)    {        return;    }    current_overlay=NULL;    /* restore screen behind the overlay/chroma color. */    backrect.x=overlay->hwdata->CurrentViewPort.pos.x;    backrect.y=overlay->hwdata->CurrentViewPort.pos.y;    backrect.w=overlay->hwdata->CurrentViewPort.size.w;    backrect.h=overlay->hwdata->CurrentViewPort.size.h;    this->UpdateRects(this, 1, &backrect);    /* it is need for some buggy drivers, that can't hide overlay before */    /* freeing buffer, so we got trash on the srceen                     */    overlay->hwdata->props.flags &= ~Pg_SCALER_PROP_SCALER_ENABLE;    PgConfigScalerChannel(overlay->hwdata->channel, &(overlay->hwdata->props));    overlay->hwdata->scaler_on = 0;    overlay->hwdata->State = OVERLAY_STATE_UNINIT;    if (overlay->hwdata->channel != NULL)    {        PgDestroyVideoChannel(overlay->hwdata->channel);        overlay->hwdata->channel = NULL;        return;    }	    overlay->hwdata->CurrentFrameData = NULL;  	    SDL_free(overlay->hwdata->FrameData0);    SDL_free(overlay->hwdata->FrameData1);    overlay->hwdata->FrameData0 = NULL;    overlay->hwdata->FrameData1 = NULL;    SDL_free(overlay->hwdata);}

⌨️ 快捷键说明

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