AVPacket * file_decoder::build_avpkt(AVPacket *avpkt) { static unsigned char buffer[1*1024*1024]; static int readptr = 0; static int writeptr = 0; int len,toread; //AVPacket * avpkt = new AVPacket; //av_init_packet(avpkt); int nexthead; if (writeptr - readptr < 200 * 1024) { memmove(buffer, &buffer[readptr], writeptr - readptr); writeptr -= readptr; readptr = 0; toread = FILE_READING_BUFFER - writeptr; len = (int) fread(&buffer[writeptr], 1, toread, fp); writeptr += len; } nexthead = _find_head(&buffer[readptr], writeptr-readptr); if (nexthead == 0) { //printf("failed find next head...\n"); nexthead = writeptr - readptr; } avpkt->size = nexthead; avpkt->data = &buffer[readptr]; readptr += nexthead; return avpkt; }
static void build_avpkt(AVPacket *avpkt,FILE *fp) { #if 0 int len; static unsigned char buffer[INBUF_SIZE]; len =fread(buffer, 1, INBUF_SIZE, fp); avpkt->data = buffer; avpkt->size = len; #else static unsigned char buffer[1*1024*1024]; static int readptr = 0; static int writeptr = 0; int len,toread; int nexthead; if(writeptr - readptr < 200 * 1024) { memmove(buffer, &buffer[readptr], writeptr - readptr); writeptr -= readptr; readptr = 0; toread = FILE_READING_BUFFER - writeptr; len =fread(&buffer[writeptr], 1, toread, fp); writeptr += len; } nexthead = _find_head(&buffer[readptr], writeptr-readptr); if(nexthead == 0) { printf("failed find next head.../n"); nexthead = writeptr - readptr; } avpkt->size = nexthead; avpkt->data = &buffer[readptr]; readptr += nexthead; #endif }