You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	lavc/ffv1: move run_index to the per-slice context
This commit is contained in:
		| @@ -77,6 +77,8 @@ typedef struct FFV1SliceContext { | ||||
|     int slice_height; | ||||
|     int slice_x; | ||||
|     int slice_y; | ||||
|  | ||||
|     int run_index; | ||||
| } FFV1SliceContext; | ||||
|  | ||||
| typedef struct FFV1Context { | ||||
| @@ -109,7 +111,6 @@ typedef struct FFV1Context { | ||||
|     int context_count[MAX_QUANT_TABLES]; | ||||
|     uint8_t state_transition[256]; | ||||
|     uint8_t (*initial_states[MAX_QUANT_TABLES])[32]; | ||||
|     int run_index; | ||||
|     int colorspace; | ||||
|  | ||||
|     int use32bit; | ||||
|   | ||||
| @@ -126,7 +126,7 @@ static int decode_plane(FFV1Context *s, FFV1SliceContext *sc, | ||||
|     sample[0] = sc->sample_buffer + 3; | ||||
|     sample[1] = sc->sample_buffer + w + 6 + 3; | ||||
|  | ||||
|     s->run_index = 0; | ||||
|     sc->run_index = 0; | ||||
|  | ||||
|     memset(sc->sample_buffer, 0, 2 * (w + 6) * sizeof(*sc->sample_buffer)); | ||||
|  | ||||
| @@ -140,13 +140,13 @@ static int decode_plane(FFV1Context *s, FFV1SliceContext *sc, | ||||
|         sample[0][w]  = sample[0][w - 1]; | ||||
|  | ||||
|         if (s->avctx->bits_per_raw_sample <= 8) { | ||||
|             int ret = decode_line(s, w, sample, plane_index, 8); | ||||
|             int ret = decode_line(s, sc, w, sample, plane_index, 8); | ||||
|             if (ret < 0) | ||||
|                 return ret; | ||||
|             for (x = 0; x < w; x++) | ||||
|                 src[x*pixel_stride + stride * y] = sample[1][x]; | ||||
|         } else { | ||||
|             int ret = decode_line(s, w, sample, plane_index, s->avctx->bits_per_raw_sample); | ||||
|             int ret = decode_line(s, sc, w, sample, plane_index, s->avctx->bits_per_raw_sample); | ||||
|             if (ret < 0) | ||||
|                 return ret; | ||||
|             if (s->packed_at_lsb) { | ||||
|   | ||||
| @@ -22,16 +22,16 @@ | ||||
|  | ||||
| #include "ffv1_template.c" | ||||
|  | ||||
| static av_always_inline int RENAME(decode_line)(FFV1Context *s, int w, | ||||
|                                                  TYPE *sample[2], | ||||
|                                                  int plane_index, int bits) | ||||
| static av_always_inline int | ||||
| RENAME(decode_line)(FFV1Context *s, FFV1SliceContext *sc, int w, | ||||
|                     TYPE *sample[2], int plane_index, int bits) | ||||
| { | ||||
|     PlaneContext *const p = &s->plane[plane_index]; | ||||
|     RangeCoder *const c   = &s->c; | ||||
|     int x; | ||||
|     int run_count = 0; | ||||
|     int run_mode  = 0; | ||||
|     int run_index = s->run_index; | ||||
|     int run_index = sc->run_index; | ||||
|  | ||||
|     if (is_input_end(s)) | ||||
|         return AVERROR_INVALIDDATA; | ||||
| @@ -123,7 +123,7 @@ static av_always_inline int RENAME(decode_line)(FFV1Context *s, int w, | ||||
|  | ||||
|         sample[1][x] = av_zero_extend(RENAME(predict)(sample[1] + x, sample[0] + x) + (SUINT)diff, bits); | ||||
|     } | ||||
|     s->run_index = run_index; | ||||
|     sc->run_index = run_index; | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| @@ -142,7 +142,7 @@ static int RENAME(decode_rgb_frame)(FFV1Context *s, FFV1SliceContext *sc, | ||||
|         sample[x][1] = RENAME(sc->sample_buffer) + (x * 2 + 1) * (w + 6) + 3; | ||||
|     } | ||||
|  | ||||
|     s->run_index = 0; | ||||
|     sc->run_index = 0; | ||||
|  | ||||
|     memset(RENAME(sc->sample_buffer), 0, 8 * (w + 6) * sizeof(*RENAME(sc->sample_buffer))); | ||||
|  | ||||
| @@ -157,9 +157,9 @@ static int RENAME(decode_rgb_frame)(FFV1Context *s, FFV1SliceContext *sc, | ||||
|             sample[p][1][-1]= sample[p][0][0  ]; | ||||
|             sample[p][0][ w]= sample[p][0][w-1]; | ||||
|             if (lbd && s->slice_coding_mode == 0) | ||||
|                 ret = RENAME(decode_line)(s, w, sample[p], (p + 1)/2, 9); | ||||
|                 ret = RENAME(decode_line)(s, sc, w, sample[p], (p + 1)/2, 9); | ||||
|             else | ||||
|                 ret = RENAME(decode_line)(s, w, sample[p], (p + 1)/2, bits + (s->slice_coding_mode != 1)); | ||||
|                 ret = RENAME(decode_line)(s, sc, w, sample[p], (p + 1)/2, bits + (s->slice_coding_mode != 1)); | ||||
|             if (ret < 0) | ||||
|                 return ret; | ||||
|         } | ||||
|   | ||||
| @@ -276,7 +276,7 @@ static int encode_plane(FFV1Context *s, FFV1SliceContext *sc, | ||||
|     int x, y, i, ret; | ||||
|     const int ring_size = s->context_model ? 3 : 2; | ||||
|     int16_t *sample[3]; | ||||
|     s->run_index = 0; | ||||
|     sc->run_index = 0; | ||||
|  | ||||
|     memset(sc->sample_buffer, 0, ring_size * (w + 6) * sizeof(*sc->sample_buffer)); | ||||
|  | ||||
| @@ -289,7 +289,7 @@ static int encode_plane(FFV1Context *s, FFV1SliceContext *sc, | ||||
|         if (s->bits_per_raw_sample <= 8) { | ||||
|             for (x = 0; x < w; x++) | ||||
|                 sample[0][x] = src[x * pixel_stride + stride * y]; | ||||
|             if((ret = encode_line(s, w, sample, plane_index, 8)) < 0) | ||||
|             if((ret = encode_line(s, sc, w, sample, plane_index, 8)) < 0) | ||||
|                 return ret; | ||||
|         } else { | ||||
|             if (s->packed_at_lsb) { | ||||
| @@ -301,7 +301,7 @@ static int encode_plane(FFV1Context *s, FFV1SliceContext *sc, | ||||
|                     sample[0][x] = ((uint16_t*)(src + stride*y))[x] >> (16 - s->bits_per_raw_sample); | ||||
|                 } | ||||
|             } | ||||
|             if((ret = encode_line(s, w, sample, plane_index, s->bits_per_raw_sample)) < 0) | ||||
|             if((ret = encode_line(s, sc, w, sample, plane_index, s->bits_per_raw_sample)) < 0) | ||||
|                 return ret; | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -22,14 +22,14 @@ | ||||
|  | ||||
| #include "ffv1_template.c" | ||||
|  | ||||
| static av_always_inline int RENAME(encode_line)(FFV1Context *s, int w, | ||||
|                                                 TYPE *sample[3], | ||||
|                                                 int plane_index, int bits) | ||||
| static av_always_inline int | ||||
| RENAME(encode_line)(FFV1Context *s, FFV1SliceContext *sc, | ||||
|                     int w, TYPE *sample[3], int plane_index, int bits) | ||||
| { | ||||
|     PlaneContext *const p = &s->plane[plane_index]; | ||||
|     RangeCoder *const c   = &s->c; | ||||
|     int x; | ||||
|     int run_index = s->run_index; | ||||
|     int run_index = sc->run_index; | ||||
|     int run_count = 0; | ||||
|     int run_mode  = 0; | ||||
|  | ||||
| @@ -119,7 +119,7 @@ static av_always_inline int RENAME(encode_line)(FFV1Context *s, int w, | ||||
|         if (run_count) | ||||
|             put_bits(&s->pb, 1, 1); | ||||
|     } | ||||
|     s->run_index = run_index; | ||||
|     sc->run_index = run_index; | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
| @@ -138,7 +138,7 @@ static int RENAME(encode_rgb_frame)(FFV1Context *s, FFV1SliceContext *sc, | ||||
|     int transparency = s->transparency; | ||||
|     int packed_size = (3 + transparency)*2; | ||||
|  | ||||
|     s->run_index = 0; | ||||
|     sc->run_index = 0; | ||||
|  | ||||
|     memset(RENAME(sc->sample_buffer), 0, ring_size * MAX_PLANES * | ||||
|            (w + 6) * sizeof(*RENAME(sc->sample_buffer))); | ||||
| @@ -193,9 +193,9 @@ static int RENAME(encode_rgb_frame)(FFV1Context *s, FFV1SliceContext *sc, | ||||
|             sample[p][0][-1] = sample[p][1][0  ]; | ||||
|             sample[p][1][ w] = sample[p][1][w-1]; | ||||
|             if (lbd && s->slice_coding_mode == 0) | ||||
|                 ret = RENAME(encode_line)(s, w, sample[p], (p + 1) / 2, 9); | ||||
|                 ret = RENAME(encode_line)(s, sc, w, sample[p], (p + 1) / 2, 9); | ||||
|             else | ||||
|                 ret = RENAME(encode_line)(s, w, sample[p], (p + 1) / 2, bits + (s->slice_coding_mode != 1)); | ||||
|                 ret = RENAME(encode_line)(s, sc, w, sample[p], (p + 1) / 2, bits + (s->slice_coding_mode != 1)); | ||||
|             if (ret < 0) | ||||
|                 return ret; | ||||
|         } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user