-
- // we're all done muxing -- print final stats and cleanup.
-finished:
- if( job->pass == 0 || job->pass == 2 )
- {
- struct stat sb;
- uint64_t bytes_total, frames_total;
-
-#define p state.param.muxing
- /* Update the UI */
- hb_state_t state;
- state.state = HB_STATE_MUXING;
- p.progress = 0;
- hb_set_state( job->h, &state );
-#undef p
- if( m )
- {
- m->end( m );
- }
-
- if( !stat( job->file, &sb ) )
- {
- hb_deep_log( 2, "mux: file size, %lld bytes", (uint64_t) sb.st_size );
-
- bytes_total = 0;
- frames_total = 0;
- for( i = 0; i < mux->ntracks; ++i )
- {
- track = mux->track[i];
- hb_log( "mux: track %d, %lld frames, %lld bytes, %.2f kbps, fifo %d",
- i, track->frames, track->bytes,
- 90000.0 * track->bytes / mux->pts / 125,
- track->mf.flen );
- if( !i && ( job->vquality < 0.0 || job->vquality > 1.0 ) )
- {
- /* Video */
- hb_deep_log( 2, "mux: video bitrate error, %+lld bytes",
- track->bytes - mux->pts * job->vbitrate *
- 125 / 90000 );
- }
- bytes_total += track->bytes;
- frames_total += track->frames;
- }
-
- if( bytes_total && frames_total )
- {
- hb_deep_log( 2, "mux: overhead, %.2f bytes per frame",
- (float) ( sb.st_size - bytes_total ) /
- frames_total );
- }
- }
- }
-
- if( m )
- {
- free( m );
- }
-
- for( i = 0; i < mux->ntracks; ++i )
- {
- track = mux->track[i];
- if( track->mux_data )
- {
- free( track->mux_data );
- free( track->mf.fifo );
- }
- free( track );
- }
-
- free( mux );