comparison libpostproc/postprocess.c @ 183:d310beb2d848 libavcodec

-npp fq:<quantizer> force quantizer (for these lq movies which where reencoded at high bitrates) (c) 2002
author michael
date Thu, 03 Jan 2002 14:16:13 +0000
parents 3ccd74a91074
children 69d105cc6158
comparison
equal deleted inserted replaced
182:3ccd74a91074 183:d310beb2d848
1 /* 1 /*
2 Copyright (C) 2001 Michael Niedermayer (michaelni@gmx.at) 2 Copyright (C) 2001-2002 Michael Niedermayer (michaelni@gmx.at)
3 3
4 This program is free software; you can redistribute it and/or modify 4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by 5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or 6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version. 7 (at your option) any later version.
173 {"lb", "linblenddeint", 1, 1, 4, LINEAR_BLEND_DEINT_FILTER}, 173 {"lb", "linblenddeint", 1, 1, 4, LINEAR_BLEND_DEINT_FILTER},
174 {"li", "linipoldeint", 1, 1, 4, LINEAR_IPOL_DEINT_FILTER}, 174 {"li", "linipoldeint", 1, 1, 4, LINEAR_IPOL_DEINT_FILTER},
175 {"ci", "cubicipoldeint", 1, 1, 4, CUBIC_IPOL_DEINT_FILTER}, 175 {"ci", "cubicipoldeint", 1, 1, 4, CUBIC_IPOL_DEINT_FILTER},
176 {"md", "mediandeint", 1, 1, 4, MEDIAN_DEINT_FILTER}, 176 {"md", "mediandeint", 1, 1, 4, MEDIAN_DEINT_FILTER},
177 {"tn", "tmpnoise", 1, 7, 8, TEMP_NOISE_FILTER}, 177 {"tn", "tmpnoise", 1, 7, 8, TEMP_NOISE_FILTER},
178 {"fq", "forcequant", 1, 0, 0, FORCE_QUANT},
178 {NULL, NULL,0,0,0,0} //End Marker 179 {NULL, NULL,0,0,0,0} //End Marker
179 }; 180 };
180 181
181 static char *replaceTable[]= 182 static char *replaceTable[]=
182 { 183 {
559 md mediandeint median deinterlacer 560 md mediandeint median deinterlacer
560 de default hdeblock:a,vdeblock:a,dering:a,autolevels 561 de default hdeblock:a,vdeblock:a,dering:a,autolevels
561 fa fast x1hdeblock:a,x1vdeblock:a,dering:a,autolevels 562 fa fast x1hdeblock:a,x1vdeblock:a,dering:a,autolevels
562 tn tmpnoise (3 Thresholds) Temporal Noise Reducer 563 tn tmpnoise (3 Thresholds) Temporal Noise Reducer
563 1. <= 2. <= 3. Threshold, larger means stronger filtering 564 1. <= 2. <= 3. Threshold, larger means stronger filtering
565 fq forceQuant <quantizer> Force quantizer (for reencoded lq stuff)
564 */ 566 */
565 567
566 /** 568 /**
567 * returns a PPMode struct which will have a non 0 error variable if an error occured 569 * returns a PPMode struct which will have a non 0 error variable if an error occured
568 * name is the string after "-pp" on the command line 570 * name is the string after "-pp" on the command line
718 if(o==0) ppMode.maxDcDiff= val; 720 if(o==0) ppMode.maxDcDiff= val;
719 else hFlatnessThreshold= 721 else hFlatnessThreshold=
720 vFlatnessThreshold= val; 722 vFlatnessThreshold= val;
721 } 723 }
722 } 724 }
725 else if(filters[i].mask == FORCE_QUANT)
726 {
727 int o;
728 ppMode.forcedQuant= 15;
729
730 for(o=0; options[o]!=NULL && o<1; o++)
731 {
732 char *tail;
733 int val= strtol(options[o], &tail, 0);
734 if(tail==options[o]) break;
735
736 numOfUnknownOptions--;
737 ppMode.forcedQuant= val;
738 }
739 }
723 } 740 }
724 } 741 }
725 if(!filterNameOk) ppMode.error++; 742 if(!filterNameOk) ppMode.error++;
726 ppMode.error += numOfUnknownOptions; 743 ppMode.error += numOfUnknownOptions;
727 } 744 }
773 static QP_STORE_T zeroArray[2048/8]; 790 static QP_STORE_T zeroArray[2048/8];
774 791
775 if(newPPFlag) 792 if(newPPFlag)
776 { 793 {
777 ppMode= gPPMode[mode]; 794 ppMode= gPPMode[mode];
778 795 // printf("%d \n",QP_store[5]);
779 postprocess2(src, src_stride, dst, dst_stride, 796 postprocess2(src, src_stride, dst, dst_stride,
780 horizontal_size, vertical_size, QP_store, QP_stride, &ppMode); 797 horizontal_size, vertical_size, QP_store, QP_stride, &ppMode);
781 798
782 return; 799 return;
783 } 800 }
848 int horizontal_size, int vertical_size, 865 int horizontal_size, int vertical_size,
849 QP_STORE_T *QP_store, int QP_stride, 866 QP_STORE_T *QP_store, int QP_stride,
850 struct PPMode *mode) 867 struct PPMode *mode)
851 { 868 {
852 869
853 static QP_STORE_T zeroArray[2048/8]; 870 QP_STORE_T quantArray[2048/8];
854 if(QP_store==NULL) 871 if(QP_store==NULL || (mode->lumMode & FORCE_QUANT))
855 { 872 {
856 QP_store= zeroArray; 873 int i;
874 QP_store= quantArray;
857 QP_stride= 0; 875 QP_stride= 0;
876 if(mode->lumMode & FORCE_QUANT)
877 for(i=0; i<2048/8; i++) quantArray[i]= mode->forcedQuant;
878 else
879 for(i=0; i<2048/8; i++) quantArray[i]= 1;
858 } 880 }
859 881
860 #ifdef HAVE_ODIVX_POSTPROCESS 882 #ifdef HAVE_ODIVX_POSTPROCESS
861 // Note: I could make this shit outside of this file, but it would mean one 883 // Note: I could make this shit outside of this file, but it would mean one
862 // more function call... 884 // more function call...