X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fh.263%2Fvideo.c;h=31391dbd56a39d76ad83cbdf156b3daf3eb18e58;hb=879d0eec420fe0fd5ddcd56c8fe62b82a6744edd;hp=3a04be151cc02634acf1ecbea7c6c2bc9574946c;hpb=4806ec0cb3d199cbc5e60e7dba3ac3c2a54eb3f8;p=swftools.git diff --git a/lib/h.263/video.c b/lib/h.263/video.c index 3a04be1..31391db 100644 --- a/lib/h.263/video.c +++ b/lib/h.263/video.c @@ -3,7 +3,21 @@ Part of the swftools package. - Copyright (c) 2003 Matthias Kramm */ + Copyright (c) 2003 Matthias Kramm + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "../../config.h" #include @@ -256,6 +270,10 @@ void get_DC_TCOEF(TAG*tag, int t, int has_dc, int has_tcoef) int ac;// = swf_GetBits(); int index; int pos = 0; + int line[64]; + int show_rle_code=0; + memset(line, 0, sizeof(line)); + //printf("DC:%d\n", dc); if(has_dc) { dc = swf_GetBits(tag, 8); @@ -263,12 +281,13 @@ void get_DC_TCOEF(TAG*tag, int t, int has_dc, int has_tcoef) printf("error: dc=%d\n", dc); exit(1); } - DEBUG printf(" %d ", dc); + DEBUG if(show_rle_code) printf(" %d ", dc); + line[pos] = dc; pos++; } if(has_tcoef) { - DEBUG printf("["); + DEBUG if(show_rle_code) printf("["); while(1) { int last; int run; @@ -282,10 +301,11 @@ void get_DC_TCOEF(TAG*tag, int t, int has_dc, int has_tcoef) last = swf_GetBits(tag, 1); run = swf_GetBits(tag, 6); level = swf_GetBits(tag, 8); - if(run) - DEBUG printf("(%d) E%d", run, level); - else - DEBUG printf("E"); + if(run) { + DEBUG if(show_rle_code) printf(" (%d) E%d", run, level); + } else { + DEBUG if(show_rle_code) printf("E"); + } if(level == 0 || level == 128) { printf("error: level=%d\n", level); exit(1); @@ -293,25 +313,40 @@ void get_DC_TCOEF(TAG*tag, int t, int has_dc, int has_tcoef) level = (int)((signed char)level); } else { int sign = swf_GetBits(tag, 1); - if(sign) + if(sign) { level = -level; - if(run) - DEBUG printf("(%d) %s%d", run, level>0?"+":"",level); - else - DEBUG printf("%s%d", level>0?"+":"",level); + } + if(run) { + DEBUG if(show_rle_code) printf(" (%d) %s%d", run, level>0?"+":"",level); + } else { + DEBUG if(show_rle_code) printf(" %s%d", level>0?"+":"",level); + } } - pos += run+1; + pos += run; + if(pos>=64) { + printf("\nerror:bad pos: %d\n", pos); + exit(1); + } + line[pos++] = level; //DEBUG printf("run:%d level:%d\n", run, level); if(last) { - DEBUG printf("] pos: %d", pos); + DEBUG if(show_rle_code) printf("] pos: %d", pos); if(pos>64) { printf("\nerror:bad pos (%d)\n", pos); exit(1); } - return; + break; } } } + DEBUG if(show_rle_code) printf("\n"); + + DEBUG printf("["); + for(t=0;t>t); DEBUG printf("luminance%d ", t); get_DC_TCOEF(tag, t, has_intradc, has_tcoef); /*luminance - affected by cbpy*/ - DEBUG printf("\n"); } for(t=0;t<2;t++) { int has_intradc = intrablock; int has_tcoef = cbpc & (2>>t); DEBUG printf("chrominance%d ", t); get_DC_TCOEF(tag, t, has_intradc, has_tcoef); /*chrominance - affected by mcbc*/ - DEBUG printf("\n"); } }