Mercurial > libavcodec.hg
changeset 5174:2e038003cdfb libavcodec
Do not reuse the rbsp de-escape buffer if both
the intra and inter -nal units are escaped
patch by Andreas ªÓman: \andreas olebyn nu/
original thread:
[FFmpeg-devel] [PATCH] h264: rbsp de-escape and data partitioning..
date: 06/20/2007 09:32 AM
author | benoit |
---|---|
date | Wed, 20 Jun 2007 08:53:53 +0000 |
parents | 3c321b5d5c61 |
children | 830576859f71 |
files | h264.c h264.h |
diffstat | 2 files changed, 8 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/h264.c Wed Jun 20 07:08:00 2007 +0000 +++ b/h264.c Wed Jun 20 08:53:53 2007 +0000 @@ -1392,6 +1392,7 @@ static uint8_t *decode_nal(H264Context *h, uint8_t *src, int *dst_length, int *consumed, int length){ int i, si, di; uint8_t *dst; + int bufidx; // src[0]&0x80; //forbidden bit h->nal_ref_idc= src[0]>>5; @@ -1420,8 +1421,9 @@ return src; } - h->rbsp_buffer= av_fast_realloc(h->rbsp_buffer, &h->rbsp_buffer_size, length); - dst= h->rbsp_buffer; + bufidx = h->nal_unit_type == NAL_DPC ? 1 : 0; // use second escape buffer for inter data + h->rbsp_buffer[bufidx]= av_fast_realloc(h->rbsp_buffer[bufidx], &h->rbsp_buffer_size[bufidx], length); + dst= h->rbsp_buffer[bufidx]; if (dst == NULL){ return NULL; @@ -8237,7 +8239,8 @@ H264Context *h = avctx->priv_data; MpegEncContext *s = &h->s; - av_freep(&h->rbsp_buffer); + av_freep(&h->rbsp_buffer[0]); + av_freep(&h->rbsp_buffer[1]); free_tables(h); //FIXME cleanup init stuff perhaps MPV_common_end(s);
--- a/h264.h Wed Jun 20 07:08:00 2007 +0000 +++ b/h264.h Wed Jun 20 08:53:53 2007 +0000 @@ -160,8 +160,8 @@ MpegEncContext s; int nal_ref_idc; int nal_unit_type; - uint8_t *rbsp_buffer; - unsigned int rbsp_buffer_size; + uint8_t *rbsp_buffer[2]; + unsigned int rbsp_buffer_size[2]; /** * Used to parse AVC variant of h264