aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/h264.c
diff options
context:
space:
mode:
authorAndreas Öman <andreas@olebyn.nu>2007-06-20 08:53:53 +0000
committerBenoit Fouet <benoit.fouet@free.fr>2007-06-20 08:53:53 +0000
commit24456882f378c3154645b2b833b6f5af6e6f3ef7 (patch)
tree8d1fae40bfb6251a3e927a1fdbf7d54190d3b82e /libavcodec/h264.c
parent4fc3d23ffe3439377a51161d5dedefda10d222e4 (diff)
downloadffmpeg-24456882f378c3154645b2b833b6f5af6e6f3ef7.tar.gz
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 Originally committed as revision 9374 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/h264.c')
-rw-r--r--libavcodec/h264.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index a8801a1817..99e104e2f8 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -1392,6 +1392,7 @@ static inline void write_back_motion(H264Context *h, int mb_type){
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 @@ static uint8_t *decode_nal(H264Context *h, uint8_t *src, int *dst_length, int *c
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 @@ static int decode_end(AVCodecContext *avctx)
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);