summaryrefslogtreecommitdiffstats
path: root/libhb/muxcommon.c
diff options
context:
space:
mode:
authorprigaux <[email protected]>2007-02-11 20:00:15 +0000
committerprigaux <[email protected]>2007-02-11 20:00:15 +0000
commita74fd5a1ec37e53fe7008f022639af6ede0e82c9 (patch)
tree0a6a32640a840b72653149aa11efa264674df976 /libhb/muxcommon.c
parentf45dfeb2afb1b0bf46054959e8ea9494f3b7d14f (diff)
Merge the 0.8.0_mpeg4ip branch into the trunk
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@285 b64f7644-9d1e-0410-96f1-a4d463321fa5
Diffstat (limited to 'libhb/muxcommon.c')
-rw-r--r--libhb/muxcommon.c227
1 files changed, 0 insertions, 227 deletions
diff --git a/libhb/muxcommon.c b/libhb/muxcommon.c
deleted file mode 100644
index 70e384e8a..000000000
--- a/libhb/muxcommon.c
+++ /dev/null
@@ -1,227 +0,0 @@
-/* $Id: muxcommon.c,v 1.23 2005/03/30 17:27:19 titer Exp $
-
- This file is part of the HandBrake source code.
- Homepage: <http://handbrake.m0k.org/>.
- It may be used under the terms of the GNU General Public License. */
-
-#include "hb.h"
-
-struct hb_mux_object_s
-{
- HB_MUX_COMMON;
-};
-
-typedef struct
-{
- hb_job_t * job;
- uint64_t pts;
-
-} hb_mux_t;
-
-typedef struct
-{
- hb_fifo_t * fifo;
- hb_mux_data_t * mux_data;
- uint64_t frames;
- uint64_t bytes;
-
-} hb_track_t;
-
-static hb_track_t * GetTrack( hb_list_t * list )
-{
- hb_buffer_t * buf;
- hb_track_t * track = NULL, * track2;
- int64_t pts = 0;
- int i;
-
- for( i = 0; i < hb_list_count( list ); i++ )
- {
- track2 = hb_list_item( list, i );
- buf = hb_fifo_see( track2->fifo );
- if( !buf )
- {
- return NULL;
- }
- if( !track || buf->start < pts )
- {
- track = track2;
- pts = buf->start;
- }
- }
- return track;
-}
-
-static void MuxerFunc( void * _mux )
-{
- hb_mux_t * mux = _mux;
- hb_job_t * job = mux->job;
- hb_title_t * title = job->title;
- hb_audio_t * audio;
- hb_list_t * list;
- hb_buffer_t * buf;
- hb_track_t * track;
- int i;
-
- hb_mux_object_t * m = NULL;
-
- /* Get a real muxer */
- if( job->pass != 1 )
- {
- switch( job->mux )
- {
- case HB_MUX_MP4:
- case HB_MUX_PSP:
- case HB_MUX_IPOD:
- m = hb_mux_mp4_init( job );
- break;
- case HB_MUX_AVI:
- m = hb_mux_avi_init( job );
- break;
- case HB_MUX_OGM:
- m = hb_mux_ogm_init( job );
- break;
- }
- }
-
- /* Wait for one buffer for each track */
- while( !*job->die && !job->done )
- {
- int ready;
-
- ready = 1;
- if( !hb_fifo_size( job->fifo_mpeg4 ) )
- {
- ready = 0;
- }
- for( i = 0; i < hb_list_count( title->list_audio ); i++ )
- {
- audio = hb_list_item( title->list_audio, i );
- if( !hb_fifo_size( audio->fifo_out ) )
- {
- ready = 0;
- break;
- }
- }
-
- if( ready )
- {
- break;
- }
-
- hb_snooze( 200 );
- }
-
- /* Create file, write headers */
- if( job->pass != 1 )
- {
- m->init( m );
- }
-
- /* Build list of fifos we're interested in */
- list = hb_list_init();
-
- track = calloc( sizeof( hb_track_t ), 1 );
- track->fifo = job->fifo_mpeg4;
- track->mux_data = job->mux_data;
- hb_list_add( list, track );
-
- for( i = 0; i < hb_list_count( title->list_audio ); i++ )
- {
- audio = hb_list_item( title->list_audio, i );
- track = calloc( sizeof( hb_track_t ), 1 );
- track->fifo = audio->fifo_out;
- track->mux_data = audio->mux_data;
- hb_list_add( list, track );
- }
-
- int thread_sleep_interval = 50;
- while( !*job->die && !job->done )
- {
- if( !( track = GetTrack( list ) ) )
- {
- hb_snooze( thread_sleep_interval );
-// thread_sleep_interval += 1;
- continue;
- }
-// thread_sleep_interval = MAX(1, (thread_sleep_interval - 1));
-
- buf = hb_fifo_get( track->fifo );
- if( job->pass != 1 )
- {
- m->mux( m, track->mux_data, buf );
- track->frames += 1;
- track->bytes += buf->size;
- mux->pts = buf->stop;
- }
- hb_buffer_close( &buf );
- }
-
- if( job->pass != 1 )
- {
- 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
- m->end( m );
-
- if( !stat( job->file, &sb ) )
- {
- hb_log( "mux: file size, %lld bytes", (uint64_t) sb.st_size );
-
- bytes_total = 0;
- frames_total = 0;
- for( i = 0; i < hb_list_count( list ); i++ )
- {
- track = hb_list_item( list, i );
- hb_log( "mux: track %d, %lld bytes, %.2f kbps",
- i, track->bytes,
- 90000.0 * track->bytes / mux->pts / 125 );
- if( !i && ( job->vquality < 0.0 || job->vquality > 1.0 ) )
- {
- /* Video */
- hb_log( "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_log( "mux: overhead, %.2f bytes per frame",
- (float) ( sb.st_size - bytes_total ) /
- frames_total );
- }
- }
- }
-
- free( m );
-
- for( i = 0; i < hb_list_count( list ); i++ )
- {
- track = hb_list_item( list, i );
- if( track->mux_data )
- {
- free( track->mux_data );
- }
- free( track );
- }
- hb_list_close( &list );
-
- free( mux );
-}
-
-hb_thread_t * hb_muxer_init( hb_job_t * job )
-{
- hb_mux_t * mux = calloc( sizeof( hb_mux_t ), 1 );
- mux->job = job;
- return hb_thread_init( "muxer", MuxerFunc, mux,
- HB_NORMAL_PRIORITY );
-}