MCPcopy Create free account
hub / github.com/HandBrake/HandBrake / muxWork

Function muxWork

libhb/muxcommon.c:368–475  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

366}
367
368static int muxWork( hb_work_object_t * w, hb_buffer_t ** buf_in,
369 hb_buffer_t ** buf_out )
370{
371 hb_work_private_t * pv = w->private_data;
372 hb_job_t * job = pv->job;
373 hb_mux_t * mux = pv->mux;
374 hb_track_t * track;
375 int i;
376 hb_buffer_t * buf = *buf_in;
377
378 hb_lock( mux->mutex );
379 if ( mux->done )
380 {
381 hb_unlock( mux->mutex );
382 return HB_WORK_DONE;
383 }
384
385 if (buf->s.flags & HB_BUF_FLAG_EOF)
386 {
387 // EOF - mark this track as done
388 hb_buffer_close( &buf );
389 hb_bitvec_set(mux->eof, pv->track);
390 hb_bitvec_set(mux->rdy, pv->track);
391 }
392 else if ((job->pass_id != HB_PASS_ENCODE &&
393 job->pass_id != HB_PASS_ENCODE_FINAL) ||
394 hb_bitvec_bit(mux->eof, pv->track))
395 {
396 hb_buffer_close( &buf );
397 }
398 else
399 {
400 MoveToInternalFifos( pv->track, mux, buf );
401 }
402 *buf_in = NULL;
403
404 if (!hb_bitvec_and_cmp(mux->rdy, mux->allRdy, mux->allRdy) &&
405 !hb_bitvec_and_cmp(mux->eof, mux->allEof, mux->allEof))
406 {
407 hb_unlock( mux->mutex );
408 return HB_WORK_OK;
409 }
410
411 hb_bitvec_t *more;
412 more = hb_bitvec_new(0);
413 hb_bitvec_cpy(more, mux->rdy);
414 // all tracks have at least 'interleave' ticks of data. Output
415 // all that we can in 'interleave' size chunks.
416 while ((hb_bitvec_and_cmp(mux->rdy, mux->allRdy, mux->allRdy) &&
417 hb_bitvec_any(more) && mux->buffered_size > MIN_BUFFERING ) ||
418 (hb_bitvec_cmp(mux->eof, mux->allEof)))
419 {
420 hb_bitvec_zero(more);
421 for ( i = 0; i < mux->ntracks; ++i )
422 {
423 track = mux->track[i];
424 OutputTrackChunk( mux, i, mux->m );
425 if ( mf_full( track ) )

Callers

nothing calls this directly

Calls 15

hb_lockFunction · 0.85
hb_unlockFunction · 0.85
hb_buffer_closeFunction · 0.85
hb_bitvec_setFunction · 0.85
hb_bitvec_bitFunction · 0.85
MoveToInternalFifosFunction · 0.85
hb_bitvec_and_cmpFunction · 0.85
hb_bitvec_newFunction · 0.85
hb_bitvec_cpyFunction · 0.85
hb_bitvec_anyFunction · 0.85
hb_bitvec_cmpFunction · 0.85
hb_bitvec_zeroFunction · 0.85

Tested by

no test coverage detected