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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? audio_thread.c

?? TI workshop 培訓資料。 是關于如何創建DAVINCI平臺下codec engine
?? C
字號:
/* Standard Linux headers */#include <stdio.h>		// always include stdio.h#include <stdlib.h>		// always include stdlib.h#include <fcntl.h>		// defines open, read, write methods#include <unistd.h>		// defines close and sleep methods#include <sys/ioctl.h>		// defines driver ioctl method#include <linux/soundcard.h>	// defines OSS driver functions#include <string.h>		// defines memcpy/* 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/audio/auddec.h>	// defines audio encoder methods#include <ti/sdo/ce/audio/audenc.h>	// defines audio decoder methods/* Application headers */#include "debug.h"		// DBG and ERR macros#include "audio_thread.h"	// audio thread definitions#include "audio_input_output.h"	// audio driver input and output functions#include "engine.h"             // Helper utilities for engine_open and close#include "audio_encoder.h"	// audio encoder functions#include "audio_decoder.h"	// audio decoder functions/* OSS and Mixer devices */#define SOUND_DEVICE "/dev/dsp"#define MIXER_DEVICE "/dev/mixer"/* Audio encoder and decoder names */#define AUDIO_DECODER "audio_decoder"#define AUDIO_ENCODER "audio_encoder"/* The sample rate of the audio codec.*/#define SAMPLE_RATE 44100/* The gain (0-100) of the left channel.*/#define LEFT_GAIN 100/* The gain (0-100) of the right channel.*/#define RIGHT_GAIN 100/*  Parameters for audio thread execution */#define BLOCKSIZE 44100/****************************************************************************** * audio_thread_fxn ******************************************************************************//*  input parameters:                                                         *//*      void *envByRef       --  a pointer to an audio_thread_env structure   *//*                               as defined in audio_thread.h                 *//*                                                                            *//*          envByRef.quit    -- when quit != 0, thread will cleanup and exit  *//*                                                                            *//*  return value:                                                             *//*      void *     --  AUDIO_THREAD_SUCCESS or AUDIO_THREAD_FAILURE as        *//*                     defined in audio_thread.h                              *//******************************************************************************/void *audio_thread_fxn(void *envByRef){/*  Thread parameters and return value */    audio_thread_env *envPtr = envByRef;		// see above    void    	     *status = AUDIO_THREAD_SUCCESS;	// see above/*  The levels of initialization for initMask */#define INPUT_OSS_INITIALIZED   0x1#define INPUT_BUFFER_ALLOCATED  0x2#define OUTPUT_OSS_INITIALIZED  0x4#define OUTPUT_BUFFER_ALLOCATED 0x8#define AUDIOENCODERCREATED    0x10#define AUDIODECODERCREATED    0x20#define ENCODEDBUFFERALLOCATED  0x40#define ENGINEOPENED		0x80    unsigned int initMask = 0x0;// used to only cleanup items that were init'ed/*  Input and output driver variables  */    int     inputFd = 0;	// input driver file descriptor (i.e. handle)    int     outputFd = 0;	// output driver file descriptor (i.e. handle)    int     blksize = BLOCKSIZE;// raw input or output frame size    char   *inputBuffer = NULL;	// input buffer for driver to read into    char   *outputBuffer = NULL;// output buffer for driver to read from    int     vol = LEFT_GAIN | (RIGHT_GAIN << 8);  // volume setting    int     i; 			// loop counter to initialize output buffer/*  Intermediate buffer for encoded audio */    char   *encodedBuffer   = NULL;  // pointer to encoded buffer    int     encodedSize = 0;	// size of encoded buffer (numbytes specifies				//     how full it is, numbytes < encodedSize)    int     numbytes;		// number of bytes in an encoded frame/*  Codec engine variables */    Engine_Handle engineHandle = NULL;	 // handle to the engine    AUDENC_Handle encoderHandle = NULL;	// handle to audio encoder     AUDDEC_Handle decoderHandle = NULL;	// handle to audio decoder    /* Thread Create Phase -- secure and initialize resources */    /* Open an OSS device channel for audio input */    if(audio_input_setup(&inputFd, SOUND_DEVICE, MIXER_DEVICE, 			SOUND_MASK_LINE, vol, SAMPLE_RATE, &blksize)			== AUDIO_FAILURE){        ERR("audio_input_setup failed in audio_thread_fxn\n\n");	status = AUDIO_THREAD_FAILURE;	goto cleanup;    }    /* Record that input OSS device was opened in initialization bitmask */    initMask |= INPUT_OSS_INITIALIZED;    /*  Create output buffer to write from into OSS output device */    if((inputBuffer = malloc(blksize)) == NULL) {        ERR("Failed to allocate memory for input block (%d)\n", blksize);	status = AUDIO_THREAD_FAILURE;	goto cleanup;    }    DBG("Allocated input audio buffer of size %d to address %p\n", 						blksize, inputBuffer);    /* Record that the output buffer was allocated in initialization bitmask */    initMask |= INPUT_BUFFER_ALLOCATED;    /* open the codec engine */    /* note: codec engine should be opened in each thread that uses it */    if(engine_setup(&engineHandle,envPtr->engineName,NULL) != ENGINE_SUCCESS){	ERR("engine_setup failed in audio_thread_fxn\n");	status = AUDIO_THREAD_FAILURE;	goto cleanup;    }    /* Allocate and initialize audio encoder on the engine */    /*     uses engineHandle global variable assumed set before entry */    if(audio_encoder_setup(engineHandle, AUDIO_ENCODER, &encoderHandle) 				== AENC_FAILURE) {	ERR("audio_encoder_setup failed in audio_thread_fxn\n");	status = AUDIO_THREAD_FAILURE;	goto cleanup;    }    initMask |= AUDIOENCODERCREATED;    /* Allocate and initialize audio decoder on the engine */    if(audio_decoder_setup(engineHandle, AUDIO_DECODER, &decoderHandle) 				== ADEC_FAILURE) {	ERR("audio_decoder_setup failed in audio_thread_fxn\n");	status = AUDIO_THREAD_FAILURE;	goto cleanup;    }    initMask |= AUDIODECODERCREATED;    /* Initialize the output OSS device                                       */    if(audio_output_setup(&outputFd, SOUND_DEVICE, SAMPLE_RATE)			== AUDIO_FAILURE){        ERR("audio_output_setup failed in audio_thread_fxn\n");	status = AUDIO_THREAD_FAILURE;	goto cleanup;    }    /* Record that input OSS device was opened in initialization bitmask */    initMask |= OUTPUT_OSS_INITIALIZED;    /*  Create output buffer to write from into OSS output device */    if((outputBuffer = malloc(blksize)) == NULL) {        ERR("Failed to allocate memory for output block (%d)\n", blksize);	status = AUDIO_THREAD_FAILURE;	goto cleanup;    }    DBG("Allocated output audio buffer of size %d to address %p\n", 						blksize, outputBuffer);    /* Record that the output buffer was allocated in initialization bitmask */    initMask |= OUTPUT_BUFFER_ALLOCATED;    /*  Create encoded buffer to store encoded audio */    /*  If copy codec is used, encoded buffer is the same size as raw buffer */    /*       and real codecs will have smaller encoded sizes than this       */    encodedSize = blksize;    if ((encodedBuffer = malloc(encodedSize)) == NULL) {        ERR("Failed to allocate memory for output block (%d)\n", blksize);	status = AUDIO_THREAD_FAILURE;	goto cleanup;    }    initMask |= ENCODEDBUFFERALLOCATED;    DBG("Allocated intermediate audio buffer of size %d\n", blksize);    DBG("\tto address %p\n", encodedBuffer);    /* Write two buffers into OSS output device for some room to work */    /*     once the driver begins output, a starvation condition      */    /*     will lock the driver up!!!                                 */    for (i=0; i<blksize; i++){	outputBuffer[i] = 0;    }    if (write(outputFd, outputBuffer, blksize) == -1) {        ERR("Error writing the data to file descriptor %d\n", outputFd);	status = AUDIO_THREAD_FAILURE;	goto cleanup;    }     if (write(outputFd, outputBuffer, blksize) == -1) {        ERR("Error writing the data to file descriptor %d\n", outputFd);	status = AUDIO_THREAD_FAILURE;	goto cleanup;    }    /* Thread Execute Phase -- perform I/O and processing */    DBG("Entering audio_thread_fxn processing loop\n");    while (!envPtr->quit){	/*  Reverb variables */	short *shBufPtr = NULL;	// Audio data is 16-bit, so helps to recast	short *shRevPtr = NULL;	// Audio data is 16-bit, so helps to recast#define REVERB_SIZE 11024#define REV_FACTOR 0.5    	/* REVERB_SIZE must be >= blksize (3072) and even */    	/* REVERB_SIZE of 5512-11024, REV_FACTOR 0.5 tends to thicken music */    	/* REVERB_SIZE of 44100, REV_FACTOR 0.8 tends to make your music    */    	/*      sound like the theme to "halloween"                         */    	char    reverbBuffer[REVERB_SIZE];// Previous data for reverb	/*  Read input buffer from OSS input device */        if ((int) read(inputFd, inputBuffer, blksize) < blksize) {            ERR("Error reading the data from file descriptor %d\n", inputFd);	    status = AUDIO_THREAD_FAILURE;	    goto cleanup;        }	/* Set short pointers to buffer locations */	shBufPtr = (short *) inputBuffer;	shRevPtr = (short *) reverbBuffer;	/* Multiply delayed values by REV_FACTOR and add into input stream */	/* Divide by 1+REV_FACTOR to maintain gain of 1 */	for(i=0;i<(blksize>>1);i++){	    shBufPtr[i] = (int)((float)shBufPtr[i] / (float)(1.0 +REV_FACTOR));	    shBufPtr[i] += (int)((float)shRevPtr[i]*(float)REV_FACTOR / 						     (float)(1.0 +REV_FACTOR));	}	/* Maintain the delay line by moving old values down and adding */	/*    input buffer to the top.  Note, this code assumes that    */	/*    REVERB_SIZE > blksize, otherwise, it will break!          */	memcpy(reverbBuffer, reverbBuffer + blksize, REVERB_SIZE - blksize);	memcpy(reverbBuffer + REVERB_SIZE - blksize, inputBuffer, blksize);	/* On input to encode_audio, this value is size of encodedBuffer */	numbytes = encodedSize;        /* Encode the buffer */        if (encode_audio(encoderHandle, inputBuffer, blksize, 					encodedBuffer, &numbytes) 			== AENC_FAILURE) {	    ERR("Error encoding audio data (encoder handle %p)\n",							encoderHandle);            status = AUDIO_THREAD_FAILURE;	    break;        }        /* Decode the buffer */        if (decode_audio(decoderHandle, encodedBuffer, numbytes, 					outputBuffer, blksize) 			== ADEC_FAILURE) {	    ERR("Error decoding audio data (decoder handle %p)\n",							decoderHandle);            status = AUDIO_THREAD_FAILURE;	    break;        }	/* Write output buffer into OSS output device */        if (write(outputFd, outputBuffer, blksize) == -1) {            ERR("Error writing the data to file descriptor %d\n", outputFd);	    status = AUDIO_THREAD_FAILURE;	    goto cleanup;        }    }cleanup:    DBG("Exited audio_thread_fxn processing loop\n");    DBG("Starting audio thread cleanup to return resources to system\n");    /* Thread Delete Phase -- clean up resources used */    /* Use the initMask to only free resources that were allocated */    /* Nothing to be done for mixer device, it was closed after init */    /* Note the OSS output device must be closed before anything else */    /*      if this driver expends it's backlog of data before it is  */    /*      closed, it will lock up the application.                  */    /* Close output OSS device */    if(initMask & OUTPUT_OSS_INITIALIZED)	if(audio_output_cleanup(outputFd) != AUDIO_SUCCESS) {	    ERR("audio_output_cleanup failed for file descriptor %d\n", 							outputFd);	    status = AUDIO_THREAD_FAILURE;	}    /* Free output buffer */    if(initMask & OUTPUT_BUFFER_ALLOCATED){        DBG("Freed audio output buffer at location %p\n", outputBuffer);	free(outputBuffer);    }    /* Close input OSS device */    if(initMask & INPUT_OSS_INITIALIZED)	if(audio_input_cleanup(inputFd) != AUDIO_SUCCESS) {	    ERR("audio_output_cleanup failed for file descriptor %d\n", 							inputFd);	    status = AUDIO_THREAD_FAILURE;	}    /* Delete audio decoder */    if (initMask & AUDIODECODERCREATED)        if( audio_decoder_cleanup(decoderHandle) != ADEC_SUCCESS ) {	    ERR("audio_decoder_cleanup failed\n");	    status = AUDIO_THREAD_FAILURE;	}    /* Delete audio encoder */    if (initMask & AUDIOENCODERCREATED)         if( audio_encoder_cleanup(encoderHandle) != AENC_SUCCESS ) {	    ERR("audio_encoder_cleanup failed\n");	    status = AUDIO_THREAD_FAILURE;	}    /* Close the engine */    if (initMask & ENGINEOPENED){	engine_cleanup(engineHandle);    }    /* Free input buffer */    if(initMask & INPUT_BUFFER_ALLOCATED){        DBG("Freed audio input buffer at location %p\n", inputBuffer);	free(inputBuffer);    }    /* Free intermediate (encoded) buffer */    if (initMask & ENCODEDBUFFERALLOCATED) {        DBG("Freed intermediate audio buffer at %p\n", encodedBuffer);        free(encodedBuffer);    }    /* Return the status of the thread execution */    DBG("Audio thread cleanup complete. Exiting audio_thread_fxn\n");    return status;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本在线不卡一区| 亚洲欧美日韩人成在线播放| 秋霞成人午夜伦在线观看| 欧美片网站yy| 看电视剧不卡顿的网站| www精品美女久久久tv| 岛国一区二区在线观看| 1区2区3区精品视频| 在线观看亚洲专区| 欧美aaa在线| 久久久久久久久久久黄色| av中文字幕在线不卡| 亚洲国产精品久久久久秋霞影院| 精品视频1区2区3区| 麻豆精品视频在线观看免费| 国产精品婷婷午夜在线观看| 在线看日韩精品电影| 另类小说欧美激情| 成人免费一区二区三区视频| 欧美日韩一区二区三区视频| 久久国产精品色| 国产精品美女久久久久久久久久久| 欧美最猛性xxxxx直播| 国产一区视频网站| 亚洲综合成人在线| 久久精品一区四区| 欧美三级视频在线| 国产精品99久久久久久似苏梦涵| 中文字幕综合网| 欧美成人a∨高清免费观看| 不卡的av中国片| 男女视频一区二区| 成人欧美一区二区三区| 欧美一二三四区在线| 99久久国产综合色|国产精品| 天天色天天爱天天射综合| 中文字幕成人av| 欧美一区二区久久| 91亚洲国产成人精品一区二三 | 在线播放91灌醉迷j高跟美女| 狠狠色丁香婷综合久久| 樱桃视频在线观看一区| 久久亚洲影视婷婷| 这里只有精品免费| 99精品热视频| 国产成人午夜视频| 青青草成人在线观看| 亚洲精品国产无套在线观 | 久久精品一区二区三区av| 欧美特级限制片免费在线观看| 国内精品视频666| 日韩国产欧美三级| 亚洲精品美国一| 国产欧美视频在线观看| 日韩三级在线观看| 精品视频全国免费看| 色播五月激情综合网| 成人免费观看男女羞羞视频| 麻豆一区二区99久久久久| 亚洲国产精品一区二区久久 | 国产精品一品视频| 免费三级欧美电影| 午夜精品久久久久久不卡8050| 亚洲色图欧美激情| 亚洲视频一二三区| 国产精品不卡一区二区三区| 国产日韩精品一区二区浪潮av | 亚洲视频在线一区观看| 国产精品久久久久久亚洲伦| 久久免费午夜影院| 久久久影院官网| 久久精品人人做人人综合| 精品99999| 26uuu成人网一区二区三区| 26uuu亚洲| 久久久久久久综合狠狠综合| 国产丝袜美腿一区二区三区| 国产日韩v精品一区二区| 久久精品亚洲一区二区三区浴池| 精品欧美久久久| 日韩精品一区二区在线观看| 精品国产网站在线观看| 精品久久久久av影院| 日韩欧美一卡二卡| 精品国产乱码久久久久久老虎| 欧美成人福利视频| 欧美韩国日本一区| 一区在线观看视频| 一区二区三区中文字幕电影| 亚洲午夜精品网| 日本亚洲三级在线| 激情综合网天天干| 成人在线视频首页| 在线亚洲人成电影网站色www| 色噜噜狠狠色综合中国| 欧美另类久久久品| 精品日韩99亚洲| 国产精品污污网站在线观看| 亚洲视频 欧洲视频| 亚洲成人一二三| 国产一区二三区| 99精品视频在线观看| 欧美三级电影在线观看| 日韩一级二级三级| 中文字幕va一区二区三区| 亚洲人快播电影网| 日韩激情一二三区| 国产精品一二三| 欧美自拍偷拍一区| 精品国产一区二区三区不卡| 亚洲视频一区二区免费在线观看| 亚洲成a人片在线观看中文| 精品一区二区三区在线观看| 成人午夜私人影院| 欧美美女直播网站| 亚洲国产激情av| 亚洲综合色区另类av| 久久99精品国产麻豆不卡| 91在线视频观看| 欧美成人a视频| 亚洲免费观看高清完整版在线观看| 蜜臀av亚洲一区中文字幕| 93久久精品日日躁夜夜躁欧美| 91精品视频网| 亚洲三级电影网站| 国产美女在线观看一区| 欧美视频在线一区| 中文一区二区在线观看| 日本视频在线一区| 91免费视频大全| 久久久久久久久岛国免费| 婷婷综合另类小说色区| 成人午夜电影小说| 91精品国产综合久久久久久漫画| 欧美激情在线看| 老司机午夜精品99久久| 在线观看视频一区二区| 国产精品久久福利| 激情国产一区二区 | 欧美日韩高清在线| 综合激情网...| 国产高清视频一区| 日韩精品影音先锋| 日韩精品福利网| 91成人免费在线视频| 欧美国产精品一区| 激情综合色综合久久综合| 在线不卡的av| 性做久久久久久| 在线免费观看日韩欧美| 亚洲免费色视频| 色哟哟日韩精品| 亚洲人成在线观看一区二区| caoporn国产精品| 国产精品久久久久aaaa樱花 | 高清在线观看日韩| 欧美v亚洲v综合ⅴ国产v| 日本怡春院一区二区| 欧美日韩在线播| 亚洲成人在线网站| 欧美日韩在线播放三区四区| 亚洲午夜免费电影| 在线观看欧美日本| 亚洲最新在线观看| 欧美视频在线观看一区二区| 亚洲国产精品久久久男人的天堂| 在线观看精品一区| 亚洲国产日韩精品| 欧美丰满一区二区免费视频| 日韩精品视频网| 精品国产亚洲在线| 国产精品一二三在| 亚洲欧洲国产日韩| 91福利视频网站| 日一区二区三区| 日韩精品一区国产麻豆| 国产一区999| 亚洲色图制服丝袜| 在线中文字幕一区| 免费观看在线综合| 精品国偷自产国产一区| 成人午夜精品在线| 一区二区三区中文免费| 欧美影院午夜播放| 奇米色一区二区三区四区| 日韩色在线观看| 高清国产一区二区| 亚洲男同性恋视频| 欧美精品在线观看一区二区| 美国欧美日韩国产在线播放| 久久先锋影音av| 99re热视频精品| 日韩国产精品91| 国产欧美精品一区二区三区四区| 91色综合久久久久婷婷| 日韩高清国产一区在线| 久久美女艺术照精彩视频福利播放 | 国产麻豆一精品一av一免费 | 久久色视频免费观看| 色综合中文字幕|