Mercurial > libavcodec.hg
comparison wmaprodec.c @ 10130:c2d08aedeeed libavcodec
fix handling of packet loss when the output buffer is full
| author | faust3 |
|---|---|
| date | Sat, 05 Sep 2009 10:59:09 +0000 |
| parents | 0ffe220e1c80 |
| children | a3e378408d5c |
comparison
equal
deleted
inserted
replaced
| 10129:0ffe220e1c80 | 10130:c2d08aedeeed |
|---|---|
| 1459 s->samples = data; | 1459 s->samples = data; |
| 1460 s->samples_start = data; | 1460 s->samples_start = data; |
| 1461 s->samples_end = (float*)((int8_t*)data + *data_size); | 1461 s->samples_end = (float*)((int8_t*)data + *data_size); |
| 1462 *data_size = 0; | 1462 *data_size = 0; |
| 1463 | 1463 |
| 1464 if (!s->output_buffer_full) { | 1464 if (!s->output_buffer_full || s->packet_loss) { |
| 1465 s->output_buffer_full = 0; | |
| 1465 s->buf_bit_size = buf_size << 3; | 1466 s->buf_bit_size = buf_size << 3; |
| 1466 | 1467 |
| 1467 /** sanity check for the buffer length */ | 1468 /** sanity check for the buffer length */ |
| 1468 if (buf_size < avctx->block_align) | 1469 if (buf_size < avctx->block_align) |
| 1469 return 0; | 1470 return 0; |
| 1535 save_bits(s, gb, remaining_bits(s, gb), 0); | 1536 save_bits(s, gb, remaining_bits(s, gb), 0); |
| 1536 } | 1537 } |
| 1537 | 1538 |
| 1538 *data_size = (int8_t *)s->samples - (int8_t *)data; | 1539 *data_size = (int8_t *)s->samples - (int8_t *)data; |
| 1539 | 1540 |
| 1540 return (s->output_buffer_full)?0: avctx->block_align; | 1541 return (s->output_buffer_full && !s->packet_loss)?0: avctx->block_align; |
| 1541 } | 1542 } |
| 1542 | 1543 |
| 1543 /** | 1544 /** |
| 1544 *@brief Clear decoder buffers (for seeking). | 1545 *@brief Clear decoder buffers (for seeking). |
| 1545 *@param avctx codec context | 1546 *@param avctx codec context |
