return b;
}
+static hb_buffer_t *mf_peek( hb_track_t *track )
+{
+ return track->mf.out == track->mf.in ?
+ NULL : track->mf.fifo[track->mf.out & (track->mf.flen - 1)];
+}
+
static void MoveToInternalFifos( hb_mux_t *mux )
{
int i;
{
hb_buffer_t *buf;
- while ( ( buf = mf_pull( track ) ) != NULL )
+ while ( ( buf = mf_peek( track ) ) != NULL && buf->start < mux->pts )
{
- m->mux( m, track->mux_data, buf );
+ m->mux( m, track->mux_data, mf_pull( track ) );
track->frames += 1;
track->bytes += buf->size;
-
- uint64_t pts = buf->stop;
hb_buffer_close( &buf );
- if ( pts >= mux->pts )
- {
- break;
- }
}
}
{
hb_subtitle_t *subtitle = hb_list_item( title->list_subtitle, i );
- if (subtitle->dest != PASSTHRUSUB)
+ if (subtitle->config.dest != PASSTHRUSUB)
continue;
add_mux_track( mux, subtitle->fifo_out, subtitle->mux_data, 0 );
}
{
for ( i = 0; i < mux->ntracks; ++i )
{
- if ( mux->rdy & (1 << i) )
+ track = mux->track[i];
+ OutputTrackChunk( mux, track, m );
+
+ // if the track is at eof or still has data that's past
+ // our next interleave point then leave it marked as rdy.
+ // Otherwise clear rdy.
+ if ( ( mux->eof & (1 << i) ) == 0 &&
+ ( track->mf.out == track->mf.in ||
+ track->mf.fifo[(track->mf.in-1) & (track->mf.flen-1)]->stop
+ < mux->pts + mux->interleave ) )
{
- track = mux->track[i];
- OutputTrackChunk( mux, track, m );
-
- // if the track is at eof or still has data that's past
- // our next interleave point then leave it marked as rdy.
- // Otherwise clear rdy.
- if ( ( mux->eof & (1 << i) ) == 0 &&
- ( track->mf.out == track->mf.in ||
- track->mf.fifo[(track->mf.in-1) & (track->mf.flen-1)]->stop
- < mux->pts + mux->interleave ) )
- {
- mux->rdy &=~ ( 1 << i );
- }
+ mux->rdy &=~ ( 1 << i );
}
}
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;
+ state.state = HB_STATE_MUXING;
+ state.param.muxing.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 );
+ hb_deep_log( 2, "mux: file size, %"PRId64" 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",
+ hb_log( "mux: track %d, %"PRId64" frames, %"PRId64" 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 );
+ hb_deep_log( 2, "mux: video bitrate error, %+"PRId64" bytes",
+ (int64_t)(track->bytes - mux->pts * job->vbitrate * 125 / 90000) );
}
bytes_total += track->bytes;
frames_total += track->frames;