// We are behind, so skip some
*ignore = req_position - int_position;
- // We use nb_streams in this test because the tolerance is dependent
+ // We use total_channels in this test because the tolerance is dependent
// on the interleaving of all streams esp. when there is more than
// one audio stream.
- else if ( int_position > req_position + context->nb_streams )
+ else if ( int_position > req_position + self->total_channels )
// We are ahead, so seek backwards some more
seek_audio( self, req_position, timecode - 1.0, ignore );
}
av_free( self->decode_buffer[i] );
if ( self->audio_codec[i] )
avcodec_close( self->audio_codec[i] );
+ self->audio_codec[i] = NULL;
}
if ( self->video_codec )
avcodec_close( self->video_codec );
+ self->video_codec = NULL;
// Close the file
if ( self->dummy_context )
av_close_input_file( self->dummy_context );
int freeze = mlt_properties_get_int( properties, "freeze" );
int freeze_after = mlt_properties_get_int( properties, "freeze_after" );
int freeze_before = mlt_properties_get_int( properties, "freeze_before" );
+ int in = mlt_properties_get_position( properties, "in" );
// Determine the position
mlt_position first_position = (first_frame != NULL) ? mlt_frame_get_position( first_frame ) : -1;
if ( !freeze || freeze_after || freeze_before )
{
double prod_speed = mlt_properties_get_double( properties, "_speed" );
- double actual_position = prod_speed * (double) mlt_producer_position( producer );
+ double actual_position = in + prod_speed * (double) mlt_producer_position( producer );
if ( mlt_properties_get_int( properties, "reverse" ) )
actual_position = mlt_producer_get_playtime( producer ) - actual_position;