AV同步

本文参考http://www.cnblogs.com/wangguchangqing/p/5900426.html

SDL使用介绍

SDL是一套开放源代码的跨平台的多媒体开发库,使用c语言编写,主要用于开发游戏、模拟器、媒体播放器等多媒体领域,内置了调用OpenGL 接口函数,并且还提供了一些控制图像、声音输入输出的函数。

  1. SDL_Image:首先SDL库仅仅支持windows的bitmap格式的显示,SDL_Image接口则增加了多种图片格式的封装接口,比较常见的支持格式包括bmp,png,jpeg,jif。如果需要显示png、jpeg等格式的数据,还需要额外添加对应图片的解码接口,例如添加libpng或者是libjpg库。
  2. SDL_ttf:此库主要用于显示文字

    int DrawText(SDL_Surface *pScreen,const char *pszText,unsigned int nSize,int x,int y,SDL_Color color)
    {
            const char *pszFontName="arial.ttf";
            TTF_Font *pFont;
            SDL_Surface  *pTextSurface;
            SDL_Rect  rect;
            //打开字体文件并设置字体大小
            if((pFont = TTF_OpenFont(pszFontName,nSize)) == NULL)
            {
                debug("call TTF_Open failed\n");
                return -1;
            }    
            TTF_SetFontStyle(pFont,TTF_STYLE_BOLD|TTF_STYLE_NORMAL);
            rect.x = x;
            rect.y = y;
            rect.w = rect.h = 0;
            SDL_Color bg = {0,255,255};
            if((pTextSurface = TTF_RenderText_Blended(pFont,pszText,color)) == NULL)
            {
                    debug("call TTF_RenderUTF8_Solid failed\n");
            }
            else
            {       SDL_BlitSurface(pTextSurface,NULL,pScreen,&rect);
            }
            //释放内存显示环境
            SDL_FreeSurface(pTextSurface);
            //刷新当前显示环境
            SDL_Flip(pScreen);//flash the screen
            //关闭字体
            TTF_CloseFont(pFont);
            return 0;
    }

    调用过程如下

    主要调用过程如下:
    SDL_Color color = {255,0,0};
    TTF_Init();   //TTF 初始化
    DrawText(pScreen,"SDL Demo",30,10,10,color);
    TTF_Quit();   //销毁TTF

    总结上述输出文本的流程可归纳为:TTF_Init–>TTF_OpenFont(申请字体句柄并获取获取字体结构体)–>TTF_SetFontStyle(设置SDL绘制的字体类型)–>TTF_RenderText_Blended(获取临时渲染内存)–>SDL_BlitSurface(将内存按位传递给显示区域)–>SDL_FreeSurface(释放临时渲染内存区域)–>SDL_Flip(更新显示)–>TTF_CloseFont(关闭申请的字体句柄);

  3. SDL_Event SDL事件可以分为如下四种
    1.键盘事件 2.鼠标事件 3.游戏杆事件 4 系统事件

  4. SDL_timer 定时器相关的函数
    SDL_GetTicks 获取从SDL初始化到当前的运行时间
    SDL_GetPerformanceCounter 当前的滴答数
    SDL_GetPerformanceFrequency 频率
    SDL_Delay 设置延迟类似于usleep
    SDL_AddTimer 添加定时器返回ID,并回调函数
    ---->Uint32 (* SDL_TimerCallback)( ):返回值为下次回调的时间差
    SDL_RemoveTimer移除对应ID的定时器

你可能感兴趣的:(ffmpeg音视频知识)