You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	lavc/ffv1: always use the main context values of plane_count/transparency
They cannot change between slices.
This commit is contained in:
		| @@ -56,8 +56,6 @@ av_cold int ff_ffv1_init_slice_state(const FFV1Context *f, FFV1Context *fs) | ||||
| { | ||||
|     int j, i; | ||||
|  | ||||
|     fs->plane_count  = f->plane_count; | ||||
|     fs->transparency = f->transparency; | ||||
|     for (j = 0; j < f->plane_count; j++) { | ||||
|         PlaneContext *const p = &fs->plane[j]; | ||||
|  | ||||
|   | ||||
| @@ -270,7 +270,6 @@ static int decode_slice(AVCodecContext *c, void *arg) | ||||
|  | ||||
|     if(f->fsrc && !(p->flags & AV_FRAME_FLAG_KEY)) { | ||||
|         FFV1Context *fssrc = f->fsrc->slice_context[si]; | ||||
|         av_assert1(fs->plane_count == fssrc->plane_count); | ||||
|  | ||||
|         if (!(p->flags & AV_FRAME_FLAG_KEY)) | ||||
|             fs->slice_damaged |= fssrc->slice_damaged; | ||||
| @@ -330,7 +329,7 @@ static int decode_slice(AVCodecContext *c, void *arg) | ||||
|     } | ||||
|  | ||||
|     av_assert1(width && height); | ||||
|     if (f->colorspace == 0 && (f->chroma_planes || !fs->transparency)) { | ||||
|     if (f->colorspace == 0 && (f->chroma_planes || !f->transparency)) { | ||||
|         const int chroma_width  = AV_CEIL_RSHIFT(width,  f->chroma_h_shift); | ||||
|         const int chroma_height = AV_CEIL_RSHIFT(height, f->chroma_v_shift); | ||||
|         const int cx            = x >> f->chroma_h_shift; | ||||
| @@ -341,7 +340,7 @@ static int decode_slice(AVCodecContext *c, void *arg) | ||||
|             decode_plane(f, fs, sc, &gb, p->data[1] + ps*cx+cy*p->linesize[1], chroma_width, chroma_height, p->linesize[1], 1, 1); | ||||
|             decode_plane(f, fs, sc, &gb, p->data[2] + ps*cx+cy*p->linesize[2], chroma_width, chroma_height, p->linesize[2], 1, 1); | ||||
|         } | ||||
|         if (fs->transparency) | ||||
|         if (f->transparency) | ||||
|             decode_plane(f, fs, sc, &gb, p->data[3] + ps*x + y*p->linesize[3], width, height, p->linesize[3], (f->version >= 4 && !f->chroma_planes) ? 1 : 2, 1); | ||||
|     } else if (f->colorspace == 0) { | ||||
|          decode_plane(f, fs, sc, &gb, p->data[0] + ps*x + y*p->linesize[0]    , width, height, p->linesize[0], 0, 2); | ||||
|   | ||||
| @@ -141,7 +141,7 @@ static int RENAME(decode_rgb_frame)(FFV1Context *f, | ||||
|     int lbd    = s->avctx->bits_per_raw_sample <= 8; | ||||
|     int bits   = s->avctx->bits_per_raw_sample > 0 ? s->avctx->bits_per_raw_sample : 8; | ||||
|     int offset = 1 << bits; | ||||
|     int transparency = s->transparency; | ||||
|     int transparency = f->transparency; | ||||
|  | ||||
|     for (x = 0; x < 4; x++) { | ||||
|         sample[x][0] = RENAME(sc->sample_buffer) +  x * 2      * (w + 6) + 3; | ||||
|   | ||||
| @@ -1072,7 +1072,7 @@ retry: | ||||
|             ret |= encode_plane(f, fs, sc, p->data[1] + ps*cx+cy*p->linesize[1], chroma_width, chroma_height, p->linesize[1], 1, 1); | ||||
|             ret |= encode_plane(f, fs, sc, p->data[2] + ps*cx+cy*p->linesize[2], chroma_width, chroma_height, p->linesize[2], 1, 1); | ||||
|         } | ||||
|         if (fs->transparency) | ||||
|         if (f->transparency) | ||||
|             ret |= encode_plane(f, fs, sc, p->data[3] + ps*x + y*p->linesize[3], width, height, p->linesize[3], 2, 1); | ||||
|     } else if (c->pix_fmt == AV_PIX_FMT_YA8) { | ||||
|         ret  = encode_plane(f, fs, sc, p->data[0] +     ps*x + y*p->linesize[0], width, height, p->linesize[0], 0, 2); | ||||
|   | ||||
| @@ -138,7 +138,7 @@ static int RENAME(encode_rgb_frame)(FFV1Context *f, | ||||
|     int packed = !src[1]; | ||||
|     int bits   = s->bits_per_raw_sample > 0 ? s->bits_per_raw_sample : 8; | ||||
|     int offset = 1 << bits; | ||||
|     int transparency = s->transparency; | ||||
|     int transparency = f->transparency; | ||||
|     int packed_size = (3 + transparency)*2; | ||||
|  | ||||
|     sc->run_index = 0; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user