summaryrefslogtreecommitdiff
path: root/src/libffmpeg/libavcodec/huffyuv.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libffmpeg/libavcodec/huffyuv.c')
-rw-r--r--src/libffmpeg/libavcodec/huffyuv.c56
1 files changed, 36 insertions, 20 deletions
diff --git a/src/libffmpeg/libavcodec/huffyuv.c b/src/libffmpeg/libavcodec/huffyuv.c
index ea4d26943..1ab31a933 100644
--- a/src/libffmpeg/libavcodec/huffyuv.c
+++ b/src/libffmpeg/libavcodec/huffyuv.c
@@ -170,6 +170,8 @@ static inline void add_median_prediction(uint8_t *dst, uint8_t *src1, uint8_t *d
*left= l;
*left_top= lt;
}
+
+#ifdef CONFIG_ENCODERS
//FIXME optimize
static inline void sub_median_prediction(uint8_t *dst, uint8_t *src1, uint8_t *src2, int w, int *left, int *left_top){
int i;
@@ -189,6 +191,7 @@ static inline void sub_median_prediction(uint8_t *dst, uint8_t *src1, uint8_t *s
*left_top= lt;
}
+#endif //CONFIG_ENCODERS
static inline void add_left_prediction_bgr32(uint8_t *dst, uint8_t *src, int w, int *red, int *green, int *blue){
int i;
@@ -212,6 +215,7 @@ static inline void add_left_prediction_bgr32(uint8_t *dst, uint8_t *src, int w,
*blue= b;
}
+#ifdef CONFIG_ENCODERS
static inline int sub_left_prediction(HYuvContext *s, uint8_t *dst, uint8_t *src, int w, int left){
int i;
if(w<32){
@@ -231,7 +235,7 @@ static inline int sub_left_prediction(HYuvContext *s, uint8_t *dst, uint8_t *src
return src[w-1];
}
}
-
+#endif //CONFIG_ENCODERS
static void read_len_table(uint8_t *dst, GetBitContext *gb){
int i, val, repeat;
@@ -266,6 +270,8 @@ static int generate_bits_table(uint32_t *dst, uint8_t *len_table){
return 0;
}
+#ifdef CONFIG_ENCODERS
+
static void generate_len_table(uint8_t *dst, uint64_t *stats, int size){
uint64_t counts[2*size];
int up[2*size];
@@ -322,6 +328,8 @@ static void generate_len_table(uint8_t *dst, uint64_t *stats, int size){
}
}
+#endif //CONFIG_ENCODERS
+
static int read_huffman_tables(HYuvContext *s, uint8_t *src, int length){
GetBitContext gb;
int i;
@@ -472,6 +480,8 @@ s->bgr32=1;
return 0;
}
+#ifdef CONFIG_ENCODERS
+
static void store_table(HYuvContext *s, uint8_t *len){
int i;
int index= s->avctx->extradata_size;
@@ -585,17 +595,19 @@ static int encode_init(AVCodecContext *avctx)
s->stats[i][j]= 0;
s->interlaced= height > 288;
-
+
// printf("pred:%d bpp:%d hbpp:%d il:%d\n", s->predictor, s->bitstream_bpp, avctx->bits_per_sample, s->interlaced);
-
+
s->picture_number=0;
-
+
return 0;
}
+#endif //CONFIG_ENCODERS
+
static void decode_422_bitstream(HYuvContext *s, int count){
int i;
-
+
count/=2;
for(i=0; i<count; i++){
@@ -617,6 +629,8 @@ static void decode_gray_bitstream(HYuvContext *s, int count){
}
}
+#ifdef CONFIG_ENCODERS
+
static void encode_422_bitstream(HYuvContext *s, int count){
int i;
@@ -655,9 +669,11 @@ static void encode_gray_bitstream(HYuvContext *s, int count){
}
}
+#endif //CONFIG_ENCODERS
+
static void decode_bgr_bitstream(HYuvContext *s, int count){
int i;
-
+
if(s->decorrelate){
if(s->bitstream_bpp==24){
for(i=0; i<count; i++){
@@ -737,6 +753,9 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, uint8
init_get_bits(&s->gb, s->bitstream_buffer, buf_size*8);
+ if(p->data[0])
+ avctx->release_buffer(avctx, p);
+
p->reference= 0;
if(avctx->get_buffer(avctx, p) < 0){
fprintf(stderr, "get_buffer() failed\n");
@@ -943,9 +962,6 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, uint8
emms_c();
*picture= *p;
-
- avctx->release_buffer(avctx, p);
-
*data_size = sizeof(AVFrame);
return (get_bits_count(&s->gb)+31)/32*4;
@@ -959,18 +975,14 @@ static int decode_end(AVCodecContext *avctx)
for(i=0; i<3; i++){
free_vlc(&s->vlc[i]);
}
-
- if(avctx->get_buffer == avcodec_default_get_buffer){
- for(i=0; i<4; i++){
- av_freep(&s->picture.base[i]);
- s->picture.data[i]= NULL;
- }
- av_freep(&s->picture.opaque);
- }
+
+ avcodec_default_free_buffers(avctx);
return 0;
}
+#ifdef CONFIG_ENCODERS
+
static int encode_frame(AVCodecContext *avctx, unsigned char *buf, int buf_size, void *data){
HYuvContext *s = avctx->priv_data;
AVFrame *pict = data;
@@ -1132,6 +1144,8 @@ static int encode_end(AVCodecContext *avctx)
return 0;
}
+#endif //CONFIG_ENCODERS
+
static const AVOption huffyuv_options[] =
{
AVOPTION_CODEC_INT("prediction_method", "prediction_method", prediction_method, 0, 2, 0),
@@ -1151,6 +1165,8 @@ AVCodec huffyuv_decoder = {
NULL
};
+#ifdef CONFIG_ENCODERS
+
AVCodec huffyuv_encoder = {
"huffyuv",
CODEC_TYPE_VIDEO,
@@ -1159,7 +1175,7 @@ AVCodec huffyuv_encoder = {
encode_init,
encode_frame,
encode_end,
- NULL,
- 0,
- huffyuv_options,
+ .options = huffyuv_options,
};
+
+#endif //CONFIG_ENCODERS \ No newline at end of file