Commit 03e0644c authored by Rafaël Carré's avatar Rafaël Carré

flac packetizer: use the largest possible frame size

Fixes #6476
Fixes #9442
parent 7e2edc0d
...@@ -248,6 +248,7 @@ static block_t *Packetize( decoder_t *p_dec, block_t **pp_block ) ...@@ -248,6 +248,7 @@ static block_t *Packetize( decoder_t *p_dec, block_t **pp_block )
while( 1 ) while( 1 )
{ {
int previous_size;
switch( p_sys->i_state ) switch( p_sys->i_state )
{ {
case STATE_NOSYNC: case STATE_NOSYNC:
...@@ -315,6 +316,8 @@ static block_t *Packetize( decoder_t *p_dec, block_t **pp_block ) ...@@ -315,6 +316,8 @@ static block_t *Packetize( decoder_t *p_dec, block_t **pp_block )
/* TODO: If pp_block == NULL, flush the buffer without checking the /* TODO: If pp_block == NULL, flush the buffer without checking the
* next sync word */ * next sync word */
previous_size = 0; /* Try to return the biggest frame */
/* Check if next expected frame contains the sync word */ /* Check if next expected frame contains the sync word */
while( block_PeekOffsetBytes( &p_sys->bytestream, while( block_PeekOffsetBytes( &p_sys->bytestream,
p_sys->i_frame_size, p_header, p_sys->i_frame_size, p_header,
...@@ -330,13 +333,27 @@ static block_t *Packetize( decoder_t *p_dec, block_t **pp_block ) ...@@ -330,13 +333,27 @@ static block_t *Packetize( decoder_t *p_dec, block_t **pp_block )
&p_sys->i_rate, &p_sys->i_rate,
&p_sys->i_bits_per_sample ); &p_sys->i_bits_per_sample );
if( i_frame_length ) if( i_frame_length ) {
{ if( !p_sys->b_stream_info || p_sys->stream_info.max_framesize <= 0 ) {
/* Stop immediately if we don't know the maximum framesize */
p_sys->i_state = STATE_SEND_DATA; p_sys->i_state = STATE_SEND_DATA;
break; break;
} }
previous_size = p_sys->i_frame_size;
}
} }
p_sys->i_frame_size++; p_sys->i_frame_size++;
if( p_sys->b_stream_info && p_sys->stream_info.max_framesize > 0 &&
p_sys->i_frame_size > p_sys->stream_info.max_framesize )
break;
}
if (previous_size)
{
/* Use the largest frame size */
p_sys->i_frame_size = previous_size;
p_sys->i_state = STATE_SEND_DATA;
} }
if( p_sys->i_state != STATE_SEND_DATA ) if( p_sys->i_state != STATE_SEND_DATA )
......
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