{
// Allocate a thread
pthread_t *thread = calloc( 1, sizeof( pthread_t ) );
+ pthread_attr_t thread_attributes;
// Assign the thread to properties
mlt_properties_set_data( properties, "thread", thread, sizeof( pthread_t ), free, NULL );
// Set the running state
mlt_properties_set_int( properties, "running", 1 );
+ // Inherit the scheduling priority
+ pthread_attr_init( &thread_attributes );
+ pthread_attr_setinheritsched( &thread_attributes, PTHREAD_INHERIT_SCHED );
+
// Create the thread
- pthread_create( thread, NULL, consumer_thread, this );
+ pthread_create( thread, &thread_attributes, consumer_thread, this );
}
return 0;
}
// Default audio args
mlt_audio_format fmt = mlt_audio_pcm;
int channels = 2;
- int frequency = 48000;
+ int frequency = mlt_properties_get_int( this_properties, "frequency" );
int samples = mlt_sample_calculator( mlt_properties_get_double( this_properties, "fps" ), frequency, count );
int16_t *pcm = NULL;
int i = 0;
int j = 0;
for ( i = 0 ; i < 4; i ++ )
- audio_buffers[ i ] = calloc( 1, 2 * DV_AUDIO_MAX_SAMPLES );
+ audio_buffers[ i ] = mlt_pool_alloc( 2 * DV_AUDIO_MAX_SAMPLES );
// Get the audio
mlt_frame_get_audio( frame, &pcm, &fmt, &frequency, &channels, &samples );
for ( j = 0; j < channels; j++ )
audio_buffers[ j ][ i ] = *pcm ++;
}
+ else
+ {
+ for ( j = 0; j < channels; j++ )
+ memset( audio_buffers[ j ], 0, 2 * DV_AUDIO_MAX_SAMPLES );
+ }
// Encode audio on frame
dv_encode_full_audio( encoder, audio_buffers, channels, frequency, dv_frame );
// Temporary - free audio buffers
for ( i = 0 ; i < 4; i ++ )
- free( audio_buffers[ i ] );
+ mlt_pool_release( audio_buffers[ i ] );
}
}
int ( *output )( mlt_consumer, uint8_t *, int, mlt_frame ) = mlt_properties_get_data( properties, "output", NULL );
// Allocate a single PAL frame for encoding
- uint8_t *dv_frame = malloc( frame_size_625_50 );
+ uint8_t *dv_frame = mlt_pool_alloc( frame_size_625_50 );
// Frame and size
mlt_frame frame = NULL;
}
// Tidy up
- free( dv_frame );
+ mlt_pool_release( dv_frame );
return NULL;
}
// Free the memory
free( this );
}
-