+ if( p_sys->i_samples_delay > 0 )
+ {
+ AVPacket packet;
+ //How much we need to copy from new packet
+ const int leftover = __MAX(0,__MIN(i_samples_left, (p_sys->i_frame_size - p_sys->i_samples_delay)));
+
+ frame = avcodec_alloc_frame();
+ frame->nb_samples = p_sys->i_samples_delay + leftover;
+ frame->format = p_sys->p_context->sample_fmt;
+
+ //Copy samples from new packet to buffer to get frame size
+ if( likely( leftover ) )
+ memcpy( p_sys->p_buffer+(p_sys->i_samples_delay*p_sys->i_sample_bytes), p_aout_buf->p_buffer, leftover*p_sys->i_sample_bytes*p_enc->fmt_in.audio.i_channels);
+
+ if( avcodec_fill_audio_frame( frame, p_enc->fmt_in.audio.i_channels,
+ p_sys->p_context->sample_fmt,
+ p_sys->p_buffer,
+ (p_sys->i_samples_delay + leftover) * p_sys->i_sample_bytes * p_enc->fmt_in.audio.i_channels,
+ 0) < 0 )
+ msg_Err( p_enc, "Filling on leftovers error i_leftover %d i_samples_left %d samples_delay %d frame size %d", leftover, i_samples_left, p_sys->i_samples_delay, p_sys->i_frame_size );
+
+ if( likely( p_aout_buf ) )
+ frame->pts = p_aout_buf->i_pts -
+ (mtime_t)1000000 * (mtime_t)p_sys->i_samples_delay /
+ (mtime_t)p_enc->fmt_in.audio.i_rate;
+
+ p_sys->i_samples_delay = 0;
+ i_data_offset += leftover * p_sys->i_sample_bytes * p_enc->fmt_in.audio.i_channels;
+ i_samples_left -= leftover;
+
+ p_block = block_Alloc( p_sys->i_buffer_out );
+ av_init_packet( &packet );
+ packet.data = p_block->p_buffer;
+ packet.size = p_block->i_buffer;
+
+ i_out = avcodec_encode_audio2( p_sys->p_context, &packet, frame, &got_packet );
+ p_block->i_buffer = packet.size;
+
+
+ /*FIXME: same as avcodec_free_frame, but we don't require so new avcodec that has it*/
+ if( frame->extended_data != frame->data )
+ av_freep( frame->extended_data );
+ av_freep( &frame );
+ if( unlikely( !got_packet || ( i_out < 0 ) ) )
+ {
+ if( i_out < 0 )
+ {
+ msg_Err( p_enc,"Encoding problem...");
+ return p_chain;
+ }
+ } else {
+ p_block->i_buffer = packet.size;