📄 main.c
字号:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <cdefBF533.h>
#include "ippVideoEncoderMPEG4.h"
#include "encodemain.h"
#include "global.h"
#include "enum.h"
#include "camera.h"
#include "delay.h"
#include "dsp_uart.h"
//#include "tss.h" //for testing
#define BAUD_UART 115200 //UART buadrate
#define REQUEST_RATE 115200 //rate control
extern void setup_sdram(void);
//extern unsigned int test_yuv_buffer(void); //test two yuv buffer;
extern void encode_mpeg_init(void); //initializing input video stream;
extern void rate_control(int bits_diff); //implementing rate control;
extern int get_clk(int* pcclk, int* psclk); //get system clock or core clock;
extern void mdma_getMB_refwin_init(void);
extern void PPI_STOP(void);
extern void ppi_dma_disable(void);
extern void uart_send(unsigned char *b, int len);
//extern void idct_int32_init(void);
int main(void)
{
int i, j, k;
int mycount;
// unsigned int yuv_buffer;
// unsigned int *temp1,*temp2;
//rate control parameters;
int bits_diff_total = 0;
int bits_diff = 0;
int frames_in_10_secs = 250;
//relate with the baudrate
int div;
int sclk;
int tx_buffer_index = 0; //encoded stream transfer buffer index;
#if FILE_OUT_DEBUG
FILE *outFile; //for debugging
#endif
#if LOOP_ENCODING
do{
bits_diff_total = 0;
bits_diff = 0;
frames_in_10_secs = 250;
tx_buffer_index = 0;
#endif
setup_sdram();
delay_init();
delay(1000000);
Reset_7180();
// delay(100000);
//configure UART baudrate;
get_clk(0, &sclk);
div = sclk/(16*BAUD_UART);
uart_init(div);
#if UART_DEBUG
{
char *b = "uart init ok\r\n";
uart_send((unsigned char *)b, strlen(b));
}
#endif
//initializing mpeg4 encoder;
// if (mp4encInit(IMG_FORMAT_2CIF) != IPPVC_ERROR_NOERR)
// {
// printf("mp4encInit is failed:");
// return -3;
// }
mp4encInit(IMG_FORMAT_CIF);
#if FILE_OUT_DEBUG
outFile = fopen("F:\\test111.m4v", "wb");
if (!outFile)
{
printf("Couldn't open output file '%s'\n", "F:\\test111.m4v");
return 5;
}
#endif
EncodeVO_Header();
EncodeVOL_Header();
//global varibles initializing;
bypass_dist = 0;
// lines_per_frame = 625;
mdma_getMB_refwin_init(); //initiating restore MB, get MB, get refwin DMA.
memset(mBuf656, 0, MBUF656_STEP*4);
encode_mpeg_init();
// idct_int32_init();
//first, put stuffing data in tx buffer.
do
{
while( cur_enc_buf_i == cur_dma_buf_i );
EncodeFrame();
mycount = cBS.mPtr - cBS.mBuffer;
for(k=0;k<mycount;k++)
{
tx_buffer[tx_buffer_index++]=cBS.mBuffer[k];
}
cBS.mPtr = cBS.mBuffer;
//////////////rate control codes, added by gary;///////////////
delay(bypass_dist*38000);
bits_diff_total += (mycount << 3);
bits_diff += (mycount << 3);
if((--frames_in_10_secs) == 0) {
bits_diff_total -= 10*REQUEST_RATE;
bits_diff -= 10*REQUEST_RATE;
if(bits_diff_total*bits_diff >= 0)
rate_control(bits_diff_total);
bits_diff = 0;
frames_in_10_secs =10* (25+bypass_dist)/(bypass_dist+1);
}
}
#if UART_TRANSFER && (!UART_DEBUG)
while(tx_buffer_index < 0x100000); //1MB stuffing data;
#else
while(tx_buffer_index < 0x100); //64KB, test...
#endif
#if UART_TRANSFER
// *******start UART DMA transfer****** //
while((*pDMA7_IRQ_STATUS)&0x8 || (*pDMA7_IRQ_STATUS)&0x4);
UART_DMA_INI();
uart_en();
// ************************************ //
#endif
while(VideoEncoderMPEG4_mFrameCount < 2500){
while(cur_enc_buf_i == cur_dma_buf_i );
EncodeFrame();
mycount = cBS.mPtr - cBS.mBuffer;
for(k=0;k<mycount;k++)
{
tx_buffer[tx_buffer_index++]=cBS.mBuffer[k];
tx_buffer_index &= 0x1fffff;
}
cBS.mPtr = cBS.mBuffer;
//////////////rate control codes, added by gary;///////////////
delay(bypass_dist*38000);
bits_diff_total += (mycount << 3);
bits_diff += (mycount << 3);
if((--frames_in_10_secs) == 0) {
bits_diff_total -= 10*REQUEST_RATE;
bits_diff -= 10*REQUEST_RATE;
if(bits_diff_total*bits_diff >= 0)
rate_control(bits_diff_total);
bits_diff = 0;
frames_in_10_secs =10* (25+bypass_dist)/(bypass_dist+1);
}
///////////////////////////////////////////////////////////////
}
#if UART_TRANSFER
// ======== dma stop ========== //
{
int tmp = (tx_buffer_index-1) >> 18;
tmp ++;
tmp <<= 18;
memset(tx_buffer+tx_buffer_index, 0, tmp - tx_buffer_index);
uart_dma_stop((tx_buffer_index-1) >> 18);
}
#endif
PPI_STOP();
ppi_dma_disable();
#if FILE_OUT_DEBUG
fwrite(tx_buffer, 1, tx_buffer_index, outFile);
fclose(outFile);
#endif
#if LOOP_ENCODING
}
while(1);
#endif
#if UART_TRANSFER
while((*pDMA7_IRQ_STATUS)&0x0008);
#endif
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -