aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/ffv1.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2004-05-02 19:18:20 +0000
committerMichael Niedermayer <michaelni@gmx.at>2004-05-02 19:18:20 +0000
commitc172913a24c48bf6e8da50234a540e14a2ad50fc (patch)
treefb733c7a957a1fa6140fc0e72a496dee11d5ffd8 /libavcodec/ffv1.c
parentda7f8893e3241ff5669be9df9b415a023a187d14 (diff)
downloadffmpeg-c172913a24c48bf6e8da50234a540e14a2ad50fc.tar.gz
cleanup
Originally committed as revision 3103 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/ffv1.c')
-rw-r--r--libavcodec/ffv1.c45
1 files changed, 19 insertions, 26 deletions
diff --git a/libavcodec/ffv1.c b/libavcodec/ffv1.c
index aacbe3ed68..01ab08a741 100644
--- a/libavcodec/ffv1.c
+++ b/libavcodec/ffv1.c
@@ -375,8 +375,8 @@ static inline void encode_line(FFV1Context *s, int w, int_fast16_t *sample[2], i
for(x=0; x<w; x++){
int diff, context;
- context= get_context(s, sample[1]+x, sample[0]+x, sample[2]+x);
- diff= sample[1][x] - predict(sample[1]+x, sample[0]+x);
+ context= get_context(s, sample[0]+x, sample[1]+x, sample[2]+x);
+ diff= sample[0][x] - predict(sample[0]+x, sample[1]+x);
if(context < 0){
context = -context;
@@ -429,25 +429,22 @@ static inline void encode_line(FFV1Context *s, int w, int_fast16_t *sample[2], i
}
static void encode_plane(FFV1Context *s, uint8_t *src, int w, int h, int stride, int plane_index){
- int x,y;
- int_fast16_t sample_buffer[3][w+6];
- int_fast16_t *sample[3]= {sample_buffer[0]+3, sample_buffer[1]+3, sample_buffer[2]+3};
+ int x,y,i;
+ const int ring_size=2;
+ int_fast16_t sample_buffer[ring_size][w+6], *sample[ring_size];
s->run_index=0;
memset(sample_buffer, 0, sizeof(sample_buffer));
for(y=0; y<h; y++){
- int_fast16_t *temp= sample[0]; //FIXME try a normal buffer
-
- sample[0]= sample[1];
- sample[1]= sample[2];
- sample[2]= temp;
+ for(i=0; i<ring_size; i++)
+ sample[i]= sample_buffer[(h+i-y)%ring_size]+3;
- sample[1][-1]= sample[0][0 ];
- sample[0][ w]= sample[0][w-1];
+ sample[0][-1]= sample[1][0 ];
+ sample[1][ w]= sample[1][w-1];
//{START_TIMER
for(x=0; x<w; x++){
- sample[1][x]= src[x + stride*y];
+ sample[0][x]= src[x + stride*y];
}
encode_line(s, w, sample, plane_index, 8);
//STOP_TIMER("encode line")}
@@ -455,17 +452,18 @@ static void encode_plane(FFV1Context *s, uint8_t *src, int w, int h, int stride,
}
static void encode_rgb_frame(FFV1Context *s, uint32_t *src, int w, int h, int stride){
- int x, y, p;
- int_fast16_t sample_buffer[3][2][w+6];
- int_fast16_t *sample[3][2]= {
- {sample_buffer[0][0]+3, sample_buffer[0][1]+3},
- {sample_buffer[1][0]+3, sample_buffer[1][1]+3},
- {sample_buffer[2][0]+3, sample_buffer[2][1]+3}};
+ int x, y, p, i;
+ const int ring_size=2;
+ int_fast16_t sample_buffer[3][ring_size][w+6], *sample[3][ring_size];
s->run_index=0;
memset(sample_buffer, 0, sizeof(sample_buffer));
for(y=0; y<h; y++){
+ for(i=0; i<ring_size; i++)
+ for(p=0; p<3; p++)
+ sample[p][i]= sample_buffer[p][(h+i-y)%ring_size]+3;
+
for(x=0; x<w; x++){
int v= src[x + stride*y];
int b= v&0xFF;
@@ -485,13 +483,8 @@ static void encode_rgb_frame(FFV1Context *s, uint32_t *src, int w, int h, int st
sample[2][0][x]= r;
}
for(p=0; p<3; p++){
- int_fast16_t *temp= sample[p][0]; //FIXME try a normal buffer
-
- sample[p][0]= sample[p][1];
- sample[p][1]= temp;
-
- sample[p][1][-1]= sample[p][0][0 ];
- sample[p][0][ w]= sample[p][0][w-1];
+ sample[p][0][-1]= sample[p][1][0 ];
+ sample[p][1][ w]= sample[p][1][w-1];
encode_line(s, w, sample[p], FFMIN(p, 1), 9);
}
}