亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? video_thread.c

?? TI workshop 培訓(xùn)資料。 是關(guān)于如何創(chuàng)建DAVINCI平臺(tái)下codec engine
?? C
字號(hào):
/* * video_thread.c *//* Standard Linux headers */#include <stdio.h>		// always include stdio.h#include <stdlib.h>		// always include stdlib.h#include <string.h>             // defines memset and memcpy methods#include <sys/ioctl.h>		// defines ioctl method#include <linux/fb.h>		// defines framebuffer driver methods#include <asm/types.h>          // standard typedefs required by v4l2 header#include <linux/videodev2.h>    // v4l2 driver definitions/* Codec Engine headers */#include <xdc/std.h>			// xdc base definitions. Must come 1st#include <ti/sdo/ce/Engine.h>		// required for any CE application#include <ti/sdo/ce/CERuntime.h>	// required for any CE application#include <ti/sdo/ce/video/viddec.h>	// defines video decoder functions#include <ti/sdo/ce/video/videnc.h>	// defines video encoder functions/* Application header files */#include "debug.h"		// DBG and ERR macros#include "video_thread.h"	// video thread definitions#include "video_osd.h"          // OSD window functions#include "video_output.h" 	// Video display device functions#include "video_input.h" 	// Video input device functions#include "engine.h"             // Helper utilities for engine_open and close#include "video_decoder.h"	// Video decoder functions#include "video_encoder.h"	// Video encoder functions/* Video encoder and decoder used */#define VIDEO_ENCODER "video_encoder"#define VIDEO_DECODER "video_decoder"/* Video capture and display devices used */#define FBVID_VIDEO "/dev/fb/3"#define FBVID_ATTR "/dev/fb/2"#define FBVID_OSD "/dev/fb/0"#define V4L2_DEVICE "/dev/video0"/* Input file */#define INPUTFILE "/tmp/video.raw"#define PICTUREFILE "osd.r16"/* Double-buffered display, triple-buffered capture */#define NUM_DISP_BUFS 2#define NUM_CAP_BUFS 3/* Other Definitions */#define SCREEN_BPP 16#define D1_WIDTH 720#define D1_HEIGHT 480/* Macro for clearing structures */#define CLEAR(x) memset (&(x), 0, sizeof (x))/****************************************************************************** * video_thread_fxn ******************************************************************************//*  input parameters:                                                         *//*      void *arg  --  a pointer to a video_thread_env structure as           *//*                     defined in video_thread.h                              *//*                                                                            *//*          arg.quit    -- when quit != 0, thread will cleanup and exit       *//*                                                                            *//*  return value:                                                             *//*      void *     --  VIDEO_THREAD_SUCCESS or VIDEO_THREAD_FAILURE as        *//*                     defined in video_thread.h                              *//******************************************************************************/void *video_thread_fxn(void *arg){/* Thread parameters and return value */    video_thread_env *env    = arg;			// see above    void             *status = VIDEO_THREAD_SUCCESS;	// see above/* The levels of initialization for initMask */#define OSDSETUPCOMPLETE	 0x1#define DISPLAYDEVICEINITIALIZED 0x2#define CAPTUREDEVICEINITIALIZED 0x4#define VIDEOENCODERCREATED      0x8#define VIDEODECODERCREATED      0x10#define ENCODEDBUFFERALLOCATED   0x20#define ENGINEOPENED		 0x40    unsigned int       initMask       = 0x0;/* Capture and display driver variables */    FILE              *inputFile      = NULL;  // input file pointer    int                osdFd	      = 0;     // OSD file descriptor    int                attrFd	      = 0;     // attr window file descriptor    int 	       fbFd 	      = 0;     // video fb driver file desc    int                captureFd      = 0;  // capture driver file descriptor    unsigned short    *osdDisplay;		// OSD display buffer    unsigned short    *attrDisplay;		// attribute display buffer    VideoBuffer       *vidBufs;			// capture frame descriptors    unsigned int       numVidBufs = NUM_CAP_BUFS; // number of capture frames    int                captureWidth;		// width of a capture frame    int                captureHeight;		// height of a capture frame    int                captureSize;		// bytes in a capture frame    struct v4l2_buffer v4l2buf;			// stores a dequeue'd frame#define PICTURE_HEIGHT 60#define PICTURE_WIDTH 720    unsigned short     picture[PICTURE_HEIGHT * PICTURE_WIDTH]; // osd picture    char              *displays[NUM_DISP_BUFS]; // display frame pointers    int 	       displayWidth;		// width of a display frame    int		       displayHeight;		// height of a display frame    int 	       displayBufSize;		// bytes in a display frame    int                displayIdx     = 0;	// frame being displayed    int                workingIdx     = 1;	// next frame, being built    char              *dst;			// pointer to working frame/* OSD scrolling variables */    int xoffset = 0;    int yoffset = 0;/*  Intermediate buffer for encoded video */    char              *encBuf   = NULL;	 // pointer to encoded buffer    int                encBufSize = 0;	 // size of encoded buffer (numbytes =    int		       numbytes;	 //    how full, numbytes < encBufSize) /*  Codec engine variables */    Engine_Handle	engineHandle = NULL;    VIDENC_Handle	encoderHandle = NULL;	 // handle to video encoder    VIDDEC_Handle	decoderHandle = NULL;	 // handle to video decoder    /* Thread Setup Phase -- secure and initialize resources */    /*  Initialize video attribute window to fully opaque OSD (0x77)     */    if( video_osd_setup(&osdFd, &attrFd, FBVID_OSD, FBVID_ATTR, 0x00, 			&osdDisplay, &attrDisplay) == VOSD_FAILURE ){	ERR("Failed video_osd_setup in video_thread_function\n");	status = VIDEO_THREAD_FAILURE;	goto cleanup;    }    initMask |= OSDSETUPCOMPLETE;    /* Place a circular alpha-blended OSD frame around video screen */    video_osd_circframe(osdDisplay, attrDisplay, 0xFFFF, 0x33);    /* Open the display picture for OSD */        if((inputFile = fopen(PICTUREFILE, "r")) == NULL) {	ERR("Failed to open input file %s\n", PICTUREFILE);	status = VIDEO_THREAD_FAILURE;	goto cleanup;    }    DBG("Opened file %s with FILE pointer %p\n", PICTUREFILE, inputFile);    /* read in picture */    if(fread(picture, sizeof(short), PICTURE_HEIGHT * PICTURE_WIDTH, inputFile)					< PICTURE_HEIGHT * PICTURE_WIDTH){ 	    ERR("Error reading osd picture from file\n");	    fclose(inputFile);	    goto cleanup;    }    fclose(inputFile);    DBG("OSD Picture read successful, placing picture\n");    video_osd_place(osdDisplay, attrDisplay, picture, 0x77, 				0, 420, PICTURE_WIDTH, PICTURE_HEIGHT);    /* Initialize the video display device */    displayWidth = D1_WIDTH;    displayHeight = D1_HEIGHT;    if( video_output_setup(&fbFd, FBVID_VIDEO, displays, NUM_DISP_BUFS, 			&displayWidth, &displayHeight, ZOOM_1X) 				== VOUT_FAILURE) {        ERR("Failed video_output_setup in video_thread_function\n");	status = VIDEO_THREAD_FAILURE;	goto cleanup;    }    /*  Calculate size of a display buffer in bytes */    displayBufSize = displayWidth * displayHeight * SCREEN_BPP/8;    /* Record that display device was opened in initialization bitmask */    initMask |= DISPLAYDEVICEINITIALIZED;    /* Initialize the video capture device */    captureWidth = D1_WIDTH;    captureHeight = D1_HEIGHT;        if( video_input_setup(&captureFd, V4L2_DEVICE, &vidBufs, &numVidBufs,                        &captureWidth, &captureHeight) == VIN_FAILURE) {	ERR("Failed video_input_setup in video_thread_function\n");	status = VIDEO_THREAD_FAILURE;	goto cleanup;    }    /* Calculate size of a raw frame */    captureSize = captureWidth * captureHeight * SCREEN_BPP / 8;    /* Record that cpature device was opened in initialization bitmask */    initMask |= CAPTUREDEVICEINITIALIZED;    /* open the codec engine */    /* note: codec engine should be opened in each thread that uses it */    if(engine_setup(&engineHandle, env->engineName, NULL) != ENGINE_SUCCESS){	ERR("engine_setup failed in video_thread_fxn\n");	status = VIDEO_THREAD_FAILURE;	goto cleanup;    }     initMask |= ENGINEOPENED;    /* Allocate and initialize video encoder on the engine */    /*     uses engineHandle global variable assumed set before entry */    if (video_encoder_setup(engineHandle, VIDEO_ENCODER, &encoderHandle) 						== VENC_FAILURE) {	ERR("Failed video_encoder_setup in video_thread_fxn\n");	status = VIDEO_THREAD_FAILURE;	goto cleanup;    }    initMask |= VIDEOENCODERCREATED;    /* Allocate and initialize video decoder on the engine */    /*     uses numbytes as a temporary variable for minInBufSize */    if (video_decoder_setup(engineHandle, VIDEO_DECODER, &decoderHandle) 						== VDEC_FAILURE) {	ERR("Failed video_decoder_setup in video_thread_fxn");	status = VIDEO_THREAD_FAILURE;	goto cleanup;    }    initMask |= VIDEODECODERCREATED;    /* Set buffer size for intermediate buffer (for encoded data)          */    /* as the maximum of the encoders max output size and the decoders     */    /*       minimum input size                                            */    encBufSize = captureSize;    /* Allocate intermediate buffer */    /* Must use contiguous buffers if passed to DSP! */    /* (Driver buffers are automatically allocated contiguous */    encBuf = (char *) malloc(encBufSize);    if (encBuf == NULL) {        ERR("Failed to allocate video buffer in video_thread_fxn.\n");	status = VIDEO_THREAD_FAILURE;	goto cleanup;    }    initMask |= ENCODEDBUFFERALLOCATED;    DBG("Allocated intermediate video buffer of size %d\n", encBufSize);    DBG("\tat location %p\n", encBuf);    /* Thread Execute Phase -- perform I/O and processing */    DBG("Entering video_thread_fxn processing loop.\n");    while (!env->quit) {#define X_RATE 5#define Y_RATE 0    	xoffset += X_RATE;    	yoffset += Y_RATE;     	if(xoffset >= PICTURE_WIDTH)	    xoffset = 0;    	if(yoffset >= PICTURE_HEIGHT)	    yoffset = 0;    	video_osd_scroll(osdDisplay, attrDisplay, picture, 0, 420, 			PICTURE_WIDTH, PICTURE_HEIGHT, xoffset, yoffset);	/*  Read input buffer from video capture device */         if (wait_for_frame(captureFd) == VIN_FAILURE) {	    ERR("wait_for_frame failed in video_thread_fxn\n");            status = VIDEO_THREAD_FAILURE;	    break;        }        CLEAR(v4l2buf);        v4l2buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;        v4l2buf.memory = V4L2_MEMORY_MMAP;        /* Dequeue a frame buffer from the capture device driver */        if (ioctl(captureFd, VIDIOC_DQBUF, &v4l2buf) == -1) {//            if (errno == EAGAIN) {//                continue;//            }            ERR("VIDIOC_DQBUF failed in video_thread_fxn\n");	    status = VIDEO_THREAD_FAILURE;            break;        }	/* on input, numbytes specifies full size of intermediate buffer */	numbytes = encBufSize;        /* Encode the buffer */        if (encode_video(encoderHandle, vidBufs[v4l2buf.index].start,                      captureSize, encBuf, &numbytes) == VENC_FAILURE) {            ERR("encode_video failed in video_thread_fxn\n");	    status = VIDEO_THREAD_FAILURE;	    break;        }	dst = displays[workingIdx];        /* Decode the buffer */        if (decode_video(decoderHandle, encBuf, numbytes, dst, displayBufSize) 			== VDEC_FAILURE) {	    ERR("decode_video failed in video_thread_fxn\n");            status = VIDEO_THREAD_FAILURE;	    break;        }        /* Issue capture buffer back to capture device driver */        if (ioctl(captureFd, VIDIOC_QBUF, &v4l2buf) == -1) {            ERR("VIDIOC_QBUF failed in video_thread_fxn\n");            status = VIDEO_THREAD_FAILURE;	    break;        }        /* Flip display buffer and working buffer */        displayIdx = (displayIdx + 1) % NUM_DISP_BUFS;        workingIdx = (workingIdx + 1) % NUM_DISP_BUFS;        flip_display_buffers(fbFd, displayIdx);    }cleanup:    DBG("Exited video_thread_fxn processing loop\n");    DBG("\tStarting video thread cleanup\n");    /* Thread Cleanup Phase -- free resources no longer needed by thread */    /* Uses the init_bitmask to only free resources that were allocated  */    /* Cleanup osd */    if (initMask & OSDSETUPCOMPLETE) {	DBG("Closing FILE ptr %p\n", inputFile);	video_osd_cleanup(osdFd, attrFd, osdDisplay, attrDisplay);        }    /* Close video capture device */    if (initMask & CAPTUREDEVICEINITIALIZED) {        video_input_cleanup(captureFd, vidBufs, numVidBufs);    }    /* Close video display device */     if (initMask & DISPLAYDEVICEINITIALIZED) {        video_output_cleanup(fbFd, displays, NUM_DISP_BUFS);    }    /* Delete video decoder */    if (initMask & VIDEODECODERCREATED) {        video_decoder_cleanup(decoderHandle);    }    /* Delete video encoder */    if (initMask & VIDEOENCODERCREATED) {        video_encoder_cleanup(encoderHandle);    }    /* Close the engine */    if (initMask & ENGINEOPENED){	engine_cleanup(engineHandle);    }    /* Free intermediate (encoded) buffer */    if (initMask & ENCODEDBUFFERALLOCATED) {        DBG("Freed intermediate video buffer at %p\n", encBuf);        free(encBuf);    }    /* Return the status of thread execution */    DBG("Video thread cleanup complete. Exiting video_thread_fxn\n");    return status;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
极品少妇xxxx精品少妇偷拍| 91丨九色丨尤物| 国产精品久久久久久久久免费丝袜 | 亚洲激情自拍视频| 精品美女在线观看| 欧美色精品在线视频| av一区二区三区在线| 韩国v欧美v日本v亚洲v| 性欧美大战久久久久久久久| 亚洲色图欧洲色图婷婷| 久久精品视频一区| 日韩免费观看2025年上映的电影| 色美美综合视频| 国产jizzjizz一区二区| 蜜桃视频一区二区三区在线观看| 亚洲一区免费观看| 亚洲欧美视频在线观看视频| 国产日韩精品一区二区三区| 欧美成人精品二区三区99精品| 欧美少妇性性性| 一本大道av一区二区在线播放| 国产精品1区2区| 国内精品写真在线观看| 久久99精品久久久久久久久久久久| 亚洲综合免费观看高清完整版 | 亚洲欧美国产三级| 国产精品福利一区| 中文久久乱码一区二区| 国产午夜精品美女毛片视频| 久久免费看少妇高潮| 精品成人佐山爱一区二区| 日韩欧美中文字幕公布| 日韩欧美一区在线| 欧美成人女星排名| 精品剧情在线观看| 精品国产亚洲在线| 2023国产精品自拍| 国产三级精品视频| 国产精品全国免费观看高清| 国产精品久久久久久久久搜平片| 亚洲国产成人私人影院tom | 五月婷婷综合激情| 日韩电影免费在线观看网站| 青青草国产成人99久久| 久久99精品久久久久| 国产精品一区二区不卡| 国产99精品在线观看| a亚洲天堂av| 色欧美片视频在线观看 | 日韩一区二区三区精品视频| 日韩精品资源二区在线| 久久久久国产精品免费免费搜索| 久久精品亚洲麻豆av一区二区| 国产日产欧产精品推荐色| 国产精品丝袜黑色高跟| 亚洲欧美视频在线观看| 亚洲国产精品欧美一二99| 日韩成人精品在线| 国产精品资源站在线| 粉嫩高潮美女一区二区三区| 色欧美日韩亚洲| 欧美精品乱码久久久久久| 精品三级av在线| 中文字幕日韩一区| 亚洲不卡av一区二区三区| 久久精品国产一区二区| 北条麻妃一区二区三区| 一本久道久久综合中文字幕| 日韩区在线观看| 国产精品久久久久9999吃药| 午夜视频在线观看一区| 精品一区二区三区免费播放| 99精品欧美一区| 欧美一区二区网站| 中文字幕高清不卡| 日韩成人dvd| 99视频精品免费视频| 91麻豆精品国产91久久久久| 国产欧美日韩一区二区三区在线观看| 亚洲激情自拍视频| 韩国v欧美v日本v亚洲v| 国产三区在线成人av| 亚洲免费色视频| 狠狠色丁香久久婷婷综| 欧洲在线/亚洲| 久久久蜜臀国产一区二区| 亚洲国产一区二区三区青草影视| 国内久久婷婷综合| 在线看日韩精品电影| 国产日韩av一区| 人妖欧美一区二区| 日本高清不卡在线观看| 久久亚洲精精品中文字幕早川悠里| 亚洲主播在线观看| 成人ar影院免费观看视频| 日韩一级黄色片| 亚洲一区在线看| av电影在线观看一区| 日韩欧美色综合| 亚洲一区二区三区不卡国产欧美| 国产精品亚洲专一区二区三区 | 欧美日韩亚洲另类| 亚洲欧美在线另类| 国产成人在线看| 日韩情涩欧美日韩视频| 亚洲h动漫在线| 一本到高清视频免费精品| 国产网站一区二区| 韩国成人福利片在线播放| 欧美一区二区三区人| 亚洲国产成人av好男人在线观看| av中文字幕亚洲| 欧美国产一区在线| 国产乱码精品一区二区三区五月婷 | 亚洲综合清纯丝袜自拍| av在线一区二区三区| 久久精品男人的天堂| 国产在线精品一区二区| 欧美一级欧美三级| 青青草91视频| 综合av第一页| 91免费观看国产| 国产精品电影一区二区| www.在线成人| 亚洲图片激情小说| 94色蜜桃网一区二区三区| 中文字幕亚洲一区二区va在线| 国产ts人妖一区二区| 欧美国产1区2区| 成人免费视频播放| 国产精品热久久久久夜色精品三区 | 日韩亚洲欧美综合| 免费在线观看不卡| 精品国产区一区| 国产一区二区不卡| 国产人妖乱国产精品人妖| 国产成人99久久亚洲综合精品| 国产欧美日韩在线视频| 白白色亚洲国产精品| 亚洲情趣在线观看| 欧美三级视频在线观看| 天天综合色天天综合色h| 91精品国产综合久久国产大片| 男人的j进女人的j一区| 久久亚洲综合色| 成人app网站| 亚洲国产精品欧美一二99| 欧美精品日韩一区| 国产麻豆视频一区二区| 国产欧美日韩不卡免费| 91丨porny丨户外露出| 亚洲影视在线观看| 日韩视频免费直播| 成人免费视频国产在线观看| 一区二区三区在线观看国产| 欧美日韩黄色影视| 狠狠色2019综合网| 日韩美女久久久| 88在线观看91蜜桃国自产| 精品在线免费观看| 最新日韩av在线| 欧美精品三级日韩久久| 国产精品主播直播| 一区二区三区精品久久久| 91精品国产综合久久久久久久| 国产精品91xxx| 亚洲最大的成人av| 欧美成人官网二区| 95精品视频在线| 免费成人在线影院| 亚洲欧洲精品成人久久奇米网| 欧美乱妇20p| 成人一道本在线| 天天爽夜夜爽夜夜爽精品视频| 久久精品欧美一区二区三区不卡| 色女孩综合影院| 国产原创一区二区| 亚洲夂夂婷婷色拍ww47| 精品国产电影一区二区| 色婷婷av一区| 国产九九视频一区二区三区| 亚洲精品国产第一综合99久久| 日韩免费高清视频| 欧美中文字幕亚洲一区二区va在线| 免费欧美高清视频| 亚洲欧美电影院| 久久久久国产精品麻豆 | 国产精品久久久久天堂| 在线电影欧美成精品| jlzzjlzz亚洲日本少妇| 蜜臀久久99精品久久久画质超高清| 综合久久国产九一剧情麻豆| 精品久久人人做人人爱| 欧洲另类一二三四区| 成人免费视频视频在线观看免费| 首页国产欧美久久| 一区二区三区在线观看欧美| 国产精品网站在线播放| 欧美精品一区二区三| 5566中文字幕一区二区电影|