/* * close the file muxer * args: * encoder_ctx - pointer to encoder context * * asserts: * none * * returns: none */ void encoder_muxer_close(encoder_context_t *encoder_ctx) { switch (encoder_ctx->muxer_id) { case ENCODER_MUX_AVI: if (avi_ctx) { /*last frame pts*/ float tottime = (float) ((int64_t) (encoder_ctx->enc_video_ctx->pts) / 1000000); // convert to miliseconds if (verbosity > 0) printf("ENCODER: (avi) time = %f\n", tottime); if (tottime > 0) { /*try to find the real frame rate*/ avi_ctx->fps = (double) (encoder_ctx->enc_video_ctx->framecount * 1000) / tottime; } if (verbosity > 0) printf("ENCODER: (avi) %"PRId64" frames in %f ms [ %f fps]\n", encoder_ctx->enc_video_ctx->framecount, tottime, avi_ctx->fps); //close sound ?? avi_close(avi_ctx); avi_destroy_context(avi_ctx); avi_ctx = NULL; } break; default: case ENCODER_MUX_MKV: case ENCODER_MUX_WEBM: if(mkv_ctx != NULL) { mkv_close(mkv_ctx); mkv_destroy_context(mkv_ctx); mkv_ctx = NULL; } break; } }
static void mkvClose(struct ALL_DATA *all_data) { float tottime = 0; struct GLOBAL *global = all_data->global; //struct vdIn *videoIn = all_data->videoIn; struct VideoFormatData *videoF = all_data->videoF; struct paRecordData *pdata = all_data->pdata; if (videoF->mkv) { tottime = (float) ((int64_t) (global->Vidstoptime - global->Vidstarttime) / 1000000); // convert to miliseconds if (global->debug) g_print("stop= %llu start=%llu \n", (unsigned long long) global->Vidstoptime, (unsigned long long) global->Vidstarttime); if (global->debug) g_print("VIDEO: %d frames in %f ms \n",global->framecount,tottime); /*------------------- close audio stream and clean up -------------------*/ if (global->Sound_enable > 0) { if (close_sound (pdata)) g_printerr("Sound Close error\n"); } mkv_close(videoF->mkv); global->framecount = 0; global->Vidstarttime = 0; if (global->debug) g_print ("close mkv\n"); } mkv_destroy_context(videoF->mkv); pdata = NULL; global = NULL; //videoIn = NULL; videoF->mkv = NULL; }