Commit 940cf07d authored by Ilkka Ollakka's avatar Ilkka Ollakka

transcode: send NULL packet to audio encoder when closing

As with Video-encoders, audio encoder can flush buffers in that case.
Currently avcodec doesn't handle flushing and other encoders in this
changeset (flac,speex,twolame,vorbis) have only boilerplate to check
against NULL input so they don't crash.
parent 4445e5b3
...@@ -1061,6 +1061,9 @@ static block_t *EncodeAudio( encoder_t *p_enc, block_t *p_aout_buf ) ...@@ -1061,6 +1061,9 @@ static block_t *EncodeAudio( encoder_t *p_enc, block_t *p_aout_buf )
block_t *p_block, *p_chain = NULL; block_t *p_block, *p_chain = NULL;
/*FIXME: change to use avcodec_encode_audio2 to be able to flush*/
if( unlikely( !p_aout_buf ) ) return NULL;
uint8_t *p_buffer = p_aout_buf->p_buffer; uint8_t *p_buffer = p_aout_buf->p_buffer;
int i_samples = p_aout_buf->i_nb_samples; int i_samples = p_aout_buf->i_nb_samples;
int i_samples_delay = p_sys->i_samples_delay; int i_samples_delay = p_sys->i_samples_delay;
......
...@@ -755,6 +755,9 @@ static block_t *Encode( encoder_t *p_enc, block_t *p_aout_buf ) ...@@ -755,6 +755,9 @@ static block_t *Encode( encoder_t *p_enc, block_t *p_aout_buf )
block_t *p_chain; block_t *p_chain;
unsigned int i; unsigned int i;
/* FIXME: p_aout_buf is NULL when it's time to flush*/
if( unlikely( !p_aout_buf ) ) return NULL;
p_sys->i_pts = p_aout_buf->i_pts - p_sys->i_pts = p_aout_buf->i_pts -
(mtime_t)1000000 * (mtime_t)p_sys->i_samples_delay / (mtime_t)1000000 * (mtime_t)p_sys->i_samples_delay /
(mtime_t)p_enc->fmt_in.audio.i_rate; (mtime_t)p_enc->fmt_in.audio.i_rate;
......
...@@ -989,6 +989,9 @@ static block_t *Encode( encoder_t *p_enc, block_t *p_aout_buf ) ...@@ -989,6 +989,9 @@ static block_t *Encode( encoder_t *p_enc, block_t *p_aout_buf )
encoder_sys_t *p_sys = p_enc->p_sys; encoder_sys_t *p_sys = p_enc->p_sys;
block_t *p_block, *p_chain = NULL; block_t *p_block, *p_chain = NULL;
/* Encoder gets NULL when it's time to flush */
if( unlikely( !p_aout_buf ) ) return NULL;
unsigned char *p_buffer = p_aout_buf->p_buffer; unsigned char *p_buffer = p_aout_buf->p_buffer;
int i_samples = p_aout_buf->i_nb_samples; int i_samples = p_aout_buf->i_nb_samples;
int i_samples_delay = p_sys->i_samples_delay; int i_samples_delay = p_sys->i_samples_delay;
......
...@@ -261,6 +261,10 @@ static void Bufferize( encoder_t *p_enc, int16_t *p_in, int i_nb_samples ) ...@@ -261,6 +261,10 @@ static void Bufferize( encoder_t *p_enc, int16_t *p_in, int i_nb_samples )
static block_t *Encode( encoder_t *p_enc, block_t *p_aout_buf ) static block_t *Encode( encoder_t *p_enc, block_t *p_aout_buf )
{ {
encoder_sys_t *p_sys = p_enc->p_sys; encoder_sys_t *p_sys = p_enc->p_sys;
/* FIXME:p_aout_buf is NULL when it's time to flush, does twolame has buffer to flush?*/
if( unlikely( !p_aout_buf ) ) return NULL;
int16_t *p_buffer = (int16_t *)p_aout_buf->p_buffer; int16_t *p_buffer = (int16_t *)p_aout_buf->p_buffer;
int i_nb_samples = p_aout_buf->i_nb_samples; int i_nb_samples = p_aout_buf->i_nb_samples;
block_t *p_chain = NULL; block_t *p_chain = NULL;
......
...@@ -848,6 +848,9 @@ static block_t *Encode( encoder_t *p_enc, block_t *p_aout_buf ) ...@@ -848,6 +848,9 @@ static block_t *Encode( encoder_t *p_enc, block_t *p_aout_buf )
block_t *p_block, *p_chain = NULL; block_t *p_block, *p_chain = NULL;
float **buffer; float **buffer;
/* FIXME: flush buffers in here */
if( unlikely( !p_aout_buf ) ) return NULL;
mtime_t i_pts = p_aout_buf->i_pts - mtime_t i_pts = p_aout_buf->i_pts -
(mtime_t)1000000 * (mtime_t)p_sys->i_samples_delay / (mtime_t)1000000 * (mtime_t)p_sys->i_samples_delay /
(mtime_t)p_enc->fmt_in.audio.i_rate; (mtime_t)p_enc->fmt_in.audio.i_rate;
......
...@@ -601,6 +601,7 @@ static int Del( sout_stream_t *p_stream, sout_stream_id_t *id ) ...@@ -601,6 +601,7 @@ static int Del( sout_stream_t *p_stream, sout_stream_id_t *id )
switch( id->p_decoder->fmt_in.i_cat ) switch( id->p_decoder->fmt_in.i_cat )
{ {
case AUDIO_ES: case AUDIO_ES:
Send( p_stream, id, NULL );
transcode_audio_close( id ); transcode_audio_close( id );
break; break;
case VIDEO_ES: case VIDEO_ES:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment