int decode_video(void *arg) { VideoState *video = (VideoState *)arg; AVFrame *pFrame; int frameFinished; AVPacket packet; AVPacket *pkt = &packet; pFrame = avcodec_alloc_frame(); while(true) { if(get_from_queue(&video->videoq, pkt) < 0) { break; } avcodec_decode_video2(video->pCodecCtx, pFrame, &frameFinished, &packet); //did we get a video frame? if(frameFinished) { if(video_frame_queue(video, pFrame) < 0) break; } av_free_packet(pkt); } av_free(pFrame); return 0; }
void * startVideoEncoding() { int bufferIndex = 0; //int elapsedTime = 0; //int frames = 0; ftime(&startTime); while( stopRecording == 0) { bufferIndex = video_frame_copy(); video_frame_display( bufferIndex ); video_frame_compress( bufferIndex ); if(streaming == 1) video_frame_queue(); /*frames++; ftime(¤tTime); elapsedTime = ((currentTime.time-startTime.time) * 1000 ) + ((currentTime.millitm-startTime.millitm) ); framesps = (float)elapsedTime / 1000;*/ } //printf("frames: %d\n", frames); //printf("time ms: %d\n", elapsedTime); pthread_exit(NULL); }