summaryrefslogtreecommitdiff
path: root/contrib/ffmpeg/libavcodec/vp3.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/ffmpeg/libavcodec/vp3.c')
-rw-r--r--contrib/ffmpeg/libavcodec/vp3.c36
1 files changed, 19 insertions, 17 deletions
diff --git a/contrib/ffmpeg/libavcodec/vp3.c b/contrib/ffmpeg/libavcodec/vp3.c
index 6a398693a..0d882da32 100644
--- a/contrib/ffmpeg/libavcodec/vp3.c
+++ b/contrib/ffmpeg/libavcodec/vp3.c
@@ -41,6 +41,7 @@
#include "mpegvideo.h"
#include "vp3data.h"
+#include "xiph.h"
#define FRAGMENT_PIXELS 8
@@ -633,7 +634,7 @@ static void init_dequantizer(Vp3DecodeContext *s)
int qmin= 8<<(inter + !i);
int qscale= i ? ac_scale_factor : dc_scale_factor;
- s->qmat[inter][plane][i]= clip((qscale * coeff)/100 * 4, qmin, 4096);
+ s->qmat[inter][plane][i]= av_clip((qscale * coeff)/100 * 4, qmin, 4096);
}
}
}
@@ -1729,8 +1730,8 @@ static void horizontal_filter(unsigned char *first_pixel, int stride,
(first_pixel[-2] - first_pixel[ 1])
+3*(first_pixel[ 0] - first_pixel[-1]);
filter_value = bounding_values[(filter_value + 4) >> 3];
- first_pixel[-1] = clip_uint8(first_pixel[-1] + filter_value);
- first_pixel[ 0] = clip_uint8(first_pixel[ 0] - filter_value);
+ first_pixel[-1] = av_clip_uint8(first_pixel[-1] + filter_value);
+ first_pixel[ 0] = av_clip_uint8(first_pixel[ 0] - filter_value);
}
}
@@ -1746,8 +1747,8 @@ static void vertical_filter(unsigned char *first_pixel, int stride,
(first_pixel[2 * nstride] - first_pixel[ stride])
+3*(first_pixel[0 ] - first_pixel[nstride]);
filter_value = bounding_values[(filter_value + 4) >> 3];
- first_pixel[nstride] = clip_uint8(first_pixel[nstride] + filter_value);
- first_pixel[0] = clip_uint8(first_pixel[0] - filter_value);
+ first_pixel[nstride] = av_clip_uint8(first_pixel[nstride] + filter_value);
+ first_pixel[0] = av_clip_uint8(first_pixel[0] - filter_value);
}
}
@@ -2574,8 +2575,9 @@ static int theora_decode_init(AVCodecContext *avctx)
Vp3DecodeContext *s = avctx->priv_data;
GetBitContext gb;
int ptype;
- uint8_t *p= avctx->extradata;
- int op_bytes, i;
+ uint8_t *header_start[3];
+ int header_len[3];
+ int i;
s->theora = 1;
@@ -2585,12 +2587,14 @@ static int theora_decode_init(AVCodecContext *avctx)
return -1;
}
- for(i=0;i<3;i++) {
- op_bytes = *(p++)<<8;
- op_bytes += *(p++);
+ if (ff_split_xiph_headers(avctx->extradata, avctx->extradata_size,
+ 42, header_start, header_len) < 0) {
+ av_log(avctx, AV_LOG_ERROR, "Corrupt extradata\n");
+ return -1;
+ }
- init_get_bits(&gb, p, op_bytes);
- p += op_bytes;
+ for(i=0;i<3;i++) {
+ init_get_bits(&gb, header_start[i], header_len[i]);
ptype = get_bits(&gb, 8);
debug_vp3("Theora headerpacket type: %x\n", ptype);
@@ -2601,7 +2605,7 @@ static int theora_decode_init(AVCodecContext *avctx)
// return -1;
}
- // FIXME: check for this aswell
+ // FIXME: Check for this as well.
skip_bits(&gb, 6*8); /* "theora" */
switch(ptype)
@@ -2620,8 +2624,8 @@ static int theora_decode_init(AVCodecContext *avctx)
av_log(avctx, AV_LOG_ERROR, "Unknown Theora config packet: %d\n", ptype&~0x80);
break;
}
- if(8*op_bytes != get_bits_count(&gb))
- av_log(avctx, AV_LOG_ERROR, "%d bits left in packet %X\n", 8*op_bytes - get_bits_count(&gb), ptype);
+ if(8*header_len[i] != get_bits_count(&gb))
+ av_log(avctx, AV_LOG_ERROR, "%d bits left in packet %X\n", 8*header_len[i] - get_bits_count(&gb), ptype);
if (s->theora < 0x030200)
break;
}
@@ -2643,7 +2647,6 @@ AVCodec vp3_decoder = {
NULL
};
-#ifndef CONFIG_LIBTHEORA
AVCodec theora_decoder = {
"theora",
CODEC_TYPE_VIDEO,
@@ -2656,4 +2659,3 @@ AVCodec theora_decoder = {
0,
NULL
};
-#endif