W dniu 15.01.2018 o 20:14, Ashok Kumar Mishra pisze: > > On Sat, Jan 13, 2018 at 5:23 AM, Ma0 <mateu...@poczta.onet.pl > <mailto:mateu...@poczta.onet.pl>> wrote: > > # HG changeset patch > # User Ma0 <mateu...@poczta.onet.pl <mailto:mateu...@poczta.onet.pl>> > # Date 1515799544 -3600 > # Sat Jan 13 00:25:44 2018 +0100 > # Node ID 6f4c949761c446334245d72204a3cd7345b36a9f > # Parent 2f3c4158cf3553030920708271bc43cdc79932a3 > param2string: increase buffer size, do not store file names > > diff -r 2f3c4158cf35 -r 6f4c949761c4 source/common/param.cpp > --- a/source/common/param.cpp Thu Jan 04 12:37:01 2018 +0530 > +++ b/source/common/param.cpp Sat Jan 13 00:25:44 2018 +0100 > @@ -1530,8 +1530,14 @@ > char *x265_param2string(x265_param* p, int padx, int pady) > { > char *buf, *s; > + int bufSize = 4000 + p->rc.zoneCount * 64; > > > bufSize can be replaced with macro MAXPARAMSIZE. > > > - buf = s = X265_MALLOC(char, MAXPARAMSIZE); > + if (p->numaPools) > + bufSize += strlen(p->numaPools); > + if (p->masteringDisplayColorVolume) > + bufSize += strlen(p->masteringDisplayColorVolume); > > > We have other string parameters like csv file name, analysis save and load > etc., why adding string length of only two parameters in buffer size?
In this patch I've removed all file names -- csv, analysis-save and analysis-load (for privacy reason). There are only 'csv', 'analysis-save' or 'analysis-load' entries if these options are active (without file names). There are left two %s in sprintf -- for p->numaPools and p->masteringDisplayColorVolume. For example if you execute: x265 720p50_parkrun_ter.y4m w.hevc --pools 15,------------------------------------------------------------- the file header will be x265 (build 151) - 2.6+27-2f3c4158cf35:[Windows][GCC 7.2.1][64 bit] 8bit+10bit+12bit - H.265/HEVC codec - Copyright 2013-2017 (c) Multicoreware, Inc - http://x265.org - options: cpuid=1173503 frame-threads=3 numa-pools=15,------------------------------------------------------------- wpp [...] There is no problem to overfill any constant size buffer. There is also loop for zones -- another unpredictable text size. So I assume: 4000 bytes for normal options + 16 bytes per zone + length of all remaining %s. The problem with too small buffer is real -- example command from doom9 forum: ffmpeg -i ../tearsofsteel-4k.y4m -v warning -strict -1 -pix_fmt yuv420p10 -f yuv4mpegpipe - | x265 --y4m --pool "15,-" --preset slower --tune ssim --profile main10 --level-idc 5.1 --crf 19 --cbqpoffs -2 --crqpoffs -2 --rc-lookahead 60 --me 3 --subme 5 --merange 25 --b-adapt 2 --bframes 9 --ref 5 --aq-mode 3 --aq-strength 0.9 --qcomp 0.70 --colorprim bt2020 --transfer smpte2084 --colormatrix bt2020nc --limit-modes --limit-refs 2 --output-depth 10 --rd 4 --rdoq-level 2 --psy-rd 2.0 --psy-rdoq 8 --ssim-rd --deblock -1 --no-sao --no-open-gop --no-rect --no-amp --no-strong-intra-smoothing --no-rskip --tu-intra-depth 2 --tu-inter-depth 2 --ctu 32 --limit-tu 3 --max-tu-size 32 --qg-size 32 --b-intra --weightb --rdpenalty 1 --keyint 360 --min-keyint 1 --vbv-bufsize 100000 --vbv-maxrate 100000 --hdr-opt --aud --hrd --chromaloc 2 --max-cll "552,190" --master-display "G(13250,34500)B(7500,3000)R(34000,16000)WP(15635,16450)L(40000000,50)" --log-level 2 --csv "D:\x265-workspace\output\harrypotter2001\00001.1080.csv" --output "D:\x265-workspace\output\harrypotter2001\00001.1080.hevc" - the file header (if x265 doesn't hang) is: x265 (build 151) - 2.6+27-2f3c4158cf35:[Windows][GCC 7.2.1][64 bit] 10bit - H.265/HEVC codec - Copyright 2013-2017 (c) Multicoreware, Inc - http://x265.org - options: cpuid=1173503 frame-threads=3 numa-pools=15,- wpp no-pmode no-pme no-psnr no-ssim log-level=2 csvfn=D:\x265-workspace\output\harrypotter2001\00001.1080.csv csv-log-level=0 bitdepth=10 input-csp=1 fps=24/1 input-res=4096x1714 interlace=0 total-frames=0 level-idc=51 high-tier=1 uhd-bd=0 ref=5 no-allow-non-conformance repeat-headers annexb aud hrd info hash=0 no-temporal-layers no-open-gop min-keyint=1 keyint=360 gop-lookahead=0 bframes=9 b-adapt=2 b-pyramid bframe-bias=0 rc-lookahead=60 lookahead-slices=4 scenecut=40 radl=0 no-intra-refresh ctu=32 min-cu-size=8 no-rect no-amp max-tu-size=32 tu-inter-depth=2 tu-intra-depth=2 limit-tu=3 rdoq-level=2 dynamic-rd=0.00 ssim-rd signhide no-tskip nr-intra=0 nr-inter=0 no-constrained-intra no-strong-intra-smoothing max-merge=3 limit-refs=2 limit-modes me=3 subme=5 merange=25 temporal-mvp weightp weightb no-analyze-src-pics deblock=-1:-1 no-sao no-sao-non-deblock rd=4 no-early-skip no-rskip no-fast-intra no-tskip-fast no-cu-lossless b-intra no-splitrd-skip rdpenalty=1 psy-rd=0.00 psy-rdoq=8.00 no-rd-refine no-lossless cbqpoffs=-2 crqpoffs=-2 rc=crf crf=19.0 qcomp=0.70 qpstep=4 stats-write=0 stats-read=0 vbv-maxrate=100000 vbv-bufsize=100000 vbv-init=0.9 crf-max=0.0 crf-min=0.0 ipratio=1.40 pbratio=1.30 aq-mode=3 aq-strength=0.90 cutree zone-count=0 no-strict-cbr qg-size=32 no-rc-grain qpmax=69 qpmin=0 no-const-vbv sar=0 overscan=0 videoformat=5 range=0 colorprim=9 transfer=16 colormatrix=9 chromaloc=1 chromaloc-top=2 chromaloc-bottom=2 display-window=0 master-display=G(13250,34500)B(7500,3000)R(34000,16000)WP(15635,16450)L(40000000,50) max-cll=552,190 min-luma=0 max-luma=1023 log2-max-poc-lsb=8 vui-timing-info vui-hrd-info slices=1 no-opt-qp-pps no-opt-ref-list-length-pps no-multi-pass-opt-rps scenecut-bias=0.05 no-opt-cu-delta-qp no-aq-motion hdr hdr-opt no-dhdr10-opt analysis-save=(null) analysis-load=(null) analysis-reuse-level=5 scale-factor=0 refine-intra=0 refine-inter=0 refine-mv=0 no-limit-sao ctu-info=0 no-lowpass-dct refine-mv-type=0 copy-pic=1 2194 bytes, in x265_param2string function part 2028 bytes (MAXPARAMSIZE was 2000). With this patch the file header is only 2094 bytes (1928 bytes in x265_param2string): x265 (build 151) - 2.6+27-2f3c4158cf35:[Windows][MSVC 1900][64 bit] 10bit - H.265/HEVC codec - Copyright 2013-2018 (c) Multicoreware, Inc - http://x265.org - options: cpuid=1173503 frame-threads=3 numa-pools=15,- wpp no-pmode no-pme no-psnr no-ssim log-level=2 csv csv-log-level=0 bitdepth=10 input-csp=1 fps=24/1 input-res=4096x1714 interlace=0 total-frames=0 level-idc=51 high-tier=1 uhd-bd=0 ref=5 no-allow-non-conformance repeat-headers annexb aud hrd info hash=0 no-temporal-layers no-open-gop min-keyint=1 keyint=360 gop-lookahead=0 bframes=9 b-adapt=2 b-pyramid bframe-bias=0 rc-lookahead=60 lookahead-slices=4 scenecut=40 radl=0 no-intra-refresh ctu=32 min-cu-size=8 no-rect no-amp max-tu-size=32 tu-inter-depth=2 tu-intra-depth=2 limit-tu=3 rdoq-level=2 dynamic-rd=0.00 ssim-rd signhide no-tskip nr-intra=0 nr-inter=0 no-constrained-intra no-strong-intra-smoothing max-merge=3 limit-refs=2 limit-modes me=3 subme=5 merange=25 temporal-mvp weightp weightb no-analyze-src-pics deblock=-1:-1 no-sao no-sao-non-deblock rd=4 no-early-skip no-rskip no-fast-intra no-tskip-fast no-cu-lossless b-intra no-splitrd-skip rdpenalty=1 psy-rd=0.00 psy-rdoq=8.00 no-rd-refine no-lossless cbqpoffs=-2 crqpoffs=-2 rc=crf crf=19.0 qcomp=0.70 qpstep=4 stats-write=0 stats-read=0 vbv-maxrate=100000 vbv-bufsize=100000 vbv-init=0.9 crf-max=0.0 crf-min=0.0 ipratio=1.40 pbratio=1.30 aq-mode=3 aq-strength=0.90 cutree zone-count=0 no-strict-cbr qg-size=32 no-rc-grain qpmax=69 qpmin=0 no-const-vbv sar=0 overscan=0 videoformat=5 range=0 colorprim=9 transfer=16 colormatrix=9 chromaloc=1 chromaloc-top=2 chromaloc-bottom=2 display-window=0 master-display=G(13250,34500)B(7500,3000)R(34000,16000)WP(15635,16450)L(40000000,50) max-cll=552,190 min-luma=0 max-luma=1023 log2-max-poc-lsb=8 vui-timing-info vui-hrd-info slices=1 no-opt-qp-pps no-opt-ref-list-length-pps no-multi-pass-opt-rps scenecut-bias=0.05 no-opt-cu-delta-qp no-aq-motion hdr hdr-opt no-dhdr10-opt analysis-reuse-level=5 scale-factor=0 refine-intra=0 refine-inter=0 refine-mv=0 no-limit-sao ctu-info=0 no-lowpass-dct refine-mv-type=0 copy-pic=1 The macro MAXPARAMSIZE is used only in one place: buf = s = X265_MALLOC(char, MAXPARAMSIZE); and it is defined in another file (nobody bother to check the value in another file). We could leave the macro MAXPARAMSIZE in param.h (with bigger value than 2000) but I think that the formula: bufSize = MAXPARAMSIZE + 16 * zones + length_of_all_remaining_%s should stay. Mateusz _______________________________________________ x265-devel mailing list x265-devel@videolan.org https://mailman.videolan.org/listinfo/x265-devel