| 
																	
																	
																		
																	
																	
																 | 
																@@ -31,7 +31,6 @@ | 
															
														
														
													
														
															
																 | 
																 | 
																typedef struct QdrawContext{ | 
																 | 
																 | 
																typedef struct QdrawContext{ | 
															
														
														
													
														
															
																 | 
																 | 
																    AVCodecContext *avctx; | 
																 | 
																 | 
																    AVCodecContext *avctx; | 
															
														
														
													
														
															
																 | 
																 | 
																    AVFrame pic; | 
																 | 
																 | 
																    AVFrame pic; | 
															
														
														
													
														
															
																 | 
																 | 
																    uint8_t palette[256*3]; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																} QdrawContext; | 
																 | 
																 | 
																} QdrawContext; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																static int decode_frame(AVCodecContext *avctx, | 
																 | 
																 | 
																static int decode_frame(AVCodecContext *avctx, | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																	
																 | 
																@@ -43,6 +42,8 @@ static int decode_frame(AVCodecContext *avctx, | 
															
														
														
													
														
															
																 | 
																 | 
																    uint8_t* outdata; | 
																 | 
																 | 
																    uint8_t* outdata; | 
															
														
														
													
														
															
																 | 
																 | 
																    int colors; | 
																 | 
																 | 
																    int colors; | 
															
														
														
													
														
															
																 | 
																 | 
																    int i; | 
																 | 
																 | 
																    int i; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    uint32_t *pal; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    int r, g, b; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    if(p->data[0]) | 
																 | 
																 | 
																    if(p->data[0]) | 
															
														
														
													
														
															
																 | 
																 | 
																        avctx->release_buffer(avctx, p); | 
																 | 
																 | 
																        avctx->release_buffer(avctx, p); | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																	
																 | 
																@@ -66,6 +67,7 @@ static int decode_frame(AVCodecContext *avctx, | 
															
														
														
													
														
															
																 | 
																 | 
																        return -1; | 
																 | 
																 | 
																        return -1; | 
															
														
														
													
														
															
																 | 
																 | 
																    } | 
																 | 
																 | 
																    } | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    pal = (uint32_t*)p->data[1]; | 
															
														
														
													
														
															
																 | 
																 | 
																    for (i = 0; i <= colors; i++) { | 
																 | 
																 | 
																    for (i = 0; i <= colors; i++) { | 
															
														
														
													
														
															
																 | 
																 | 
																        unsigned int idx; | 
																 | 
																 | 
																        unsigned int idx; | 
															
														
														
													
														
															
																 | 
																 | 
																        idx = AV_RB16(buf); /* color index */ | 
																 | 
																 | 
																        idx = AV_RB16(buf); /* color index */ | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																	
																 | 
																@@ -76,13 +78,15 @@ static int decode_frame(AVCodecContext *avctx, | 
															
														
														
													
														
															
																 | 
																 | 
																            buf += 6; | 
																 | 
																 | 
																            buf += 6; | 
															
														
														
													
														
															
																 | 
																 | 
																            continue; | 
																 | 
																 | 
																            continue; | 
															
														
														
													
														
															
																 | 
																 | 
																        } | 
																 | 
																 | 
																        } | 
															
														
														
													
														
															
																 | 
																 | 
																        a->palette[idx * 3 + 0] = *buf++; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        r = *buf++; | 
															
														
														
													
														
															
																 | 
																 | 
																        buf++; | 
																 | 
																 | 
																        buf++; | 
															
														
														
													
														
															
																 | 
																 | 
																        a->palette[idx * 3 + 1] = *buf++; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        g = *buf++; | 
															
														
														
													
														
															
																 | 
																 | 
																        buf++; | 
																 | 
																 | 
																        buf++; | 
															
														
														
													
														
															
																 | 
																 | 
																        a->palette[idx * 3 + 2] = *buf++; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        b = *buf++; | 
															
														
														
													
														
															
																 | 
																 | 
																        buf++; | 
																 | 
																 | 
																        buf++; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        pal[idx] = (r << 16) | (g << 8) | b; | 
															
														
														
													
														
															
																 | 
																 | 
																    } | 
																 | 
																 | 
																    } | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    p->palette_has_changed = 1; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    buf += 18; /* skip unneeded data */ | 
																 | 
																 | 
																    buf += 18; /* skip unneeded data */ | 
															
														
														
													
														
															
																 | 
																 | 
																    for (i = 0; i < avctx->height; i++) { | 
																 | 
																 | 
																    for (i = 0; i < avctx->height; i++) { | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																	
																 | 
																@@ -100,27 +104,19 @@ static int decode_frame(AVCodecContext *avctx, | 
															
														
														
													
														
															
																 | 
																 | 
																        while (left > 0) { | 
																 | 
																 | 
																        while (left > 0) { | 
															
														
														
													
														
															
																 | 
																 | 
																            code = *buf++; | 
																 | 
																 | 
																            code = *buf++; | 
															
														
														
													
														
															
																 | 
																 | 
																            if (code & 0x80 ) { /* run */ | 
																 | 
																 | 
																            if (code & 0x80 ) { /* run */ | 
															
														
														
													
														
															
																 | 
																 | 
																                int i; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																                pix = *buf++; | 
																 | 
																 | 
																                pix = *buf++; | 
															
														
														
													
														
															
																 | 
																 | 
																                if ((out + (257 - code) * 3) > (outdata +  a->pic.linesize[0])) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                if ((out + (257 - code)) > (outdata +  a->pic.linesize[0])) | 
															
														
														
													
														
															
																 | 
																 | 
																                    break; | 
																 | 
																 | 
																                    break; | 
															
														
														
													
														
															
																 | 
																 | 
																                for (i = 0; i < 257 - code; i++) { | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																                    *out++ = a->palette[pix * 3 + 0]; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																                    *out++ = a->palette[pix * 3 + 1]; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																                    *out++ = a->palette[pix * 3 + 2]; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																                } | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                memset(out, pix, 257 - code); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                out += 257 - code; | 
															
														
														
													
														
															
																 | 
																 | 
																                tsize += 257 - code; | 
																 | 
																 | 
																                tsize += 257 - code; | 
															
														
														
													
														
															
																 | 
																 | 
																                left -= 2; | 
																 | 
																 | 
																                left -= 2; | 
															
														
														
													
														
															
																 | 
																 | 
																            } else { /* copy */ | 
																 | 
																 | 
																            } else { /* copy */ | 
															
														
														
													
														
															
																 | 
																 | 
																                int i, pix; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																                if ((out + code * 3) > (outdata +  a->pic.linesize[0])) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                if ((out + code) > (outdata +  a->pic.linesize[0])) | 
															
														
														
													
														
															
																 | 
																 | 
																                    break; | 
																 | 
																 | 
																                    break; | 
															
														
														
													
														
															
																 | 
																 | 
																                for (i = 0; i <= code; i++) { | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																                    pix = *buf++; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																                    *out++ = a->palette[pix * 3 + 0]; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																                    *out++ = a->palette[pix * 3 + 1]; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																                    *out++ = a->palette[pix * 3 + 2]; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																                } | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                memcpy(out, buf, code + 1); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                out += code + 1; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                buf += code + 1; | 
															
														
														
													
														
															
																 | 
																 | 
																                left -= 2 + code; | 
																 | 
																 | 
																                left -= 2 + code; | 
															
														
														
													
														
															
																 | 
																 | 
																                tsize += code + 1; | 
																 | 
																 | 
																                tsize += code + 1; | 
															
														
														
													
														
															
																 | 
																 | 
																            } | 
																 | 
																 | 
																            } | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																	
																 | 
																@@ -142,7 +138,7 @@ static int decode_init(AVCodecContext *avctx){ | 
															
														
														
													
														
															
																 | 
																 | 
																        return 1; | 
																 | 
																 | 
																        return 1; | 
															
														
														
													
														
															
																 | 
																 | 
																    } | 
																 | 
																 | 
																    } | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    avctx->pix_fmt= PIX_FMT_RGB24; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    avctx->pix_fmt= PIX_FMT_PAL8; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    return 0; | 
																 | 
																 | 
																    return 0; | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																	
																 | 
																
  |