Message ID | 1515233228-16796-1-git-send-email-osmanx@problemloesungsmaschine.de |
---|---|
State | Accepted |
Commit | a571a2a65abea24adb3a9fff4b05bc562ce93ed6 |
Headers | show |
On Sat, Jan 06, 2018 at 11:07:05AM +0100, Jörn Heusipp wrote: > Signed-off-by: Jörn Heusipp <osmanx@problemloesungsmaschine.de> > --- > libavformat/libopenmpt.c | 11 ++++++----- > 1 file changed, 6 insertions(+), 5 deletions(-) > > diff --git a/libavformat/libopenmpt.c b/libavformat/libopenmpt.c > index af6eb1a..2e22290 100644 > --- a/libavformat/libopenmpt.c > +++ b/libavformat/libopenmpt.c > @@ -72,13 +72,14 @@ static int read_header_openmpt(AVFormatContext *s) > { > AVStream *st; > OpenMPTContext *openmpt = s->priv_data; > - int64_t size = avio_size(s->pb); > - if (size <= 0) > - return AVERROR_INVALIDDATA; > - char *buf = av_malloc(size); > + int64_t size; > + char *buf; > int ret; > > - > + size = avio_size(s->pb); you dont have to split this but LGTM either way [...]
Compared to the previous patch versions, only part 4 has been changed (based on the comments received so far). I also ran more performance tests. FFmpeg is configured via './configure --enable-libopenmpt --enable-libmodplug' in all tests. probetest failures with current libopenmpt 0.3.5-pre.0 (r9426): testing size=1 testing size=2 testing size=4 testing size=8 Failure of vqf probing code with score=50 type=3 p=C2A size=8 Failure of mov,mp4,m4a,3gp,3g2,mj2 probing code with score=50 type=3 p=FD1 size=8 Failure of 3dostr probing code with score=66 type=3 p=E2 size=8 Failure of mov,mp4,m4a,3gp,3g2,mj2 probing code with score=100 type=3 p=75 size=8 testing size=16 Failure of musx probing code with score=40 type=3 p=A6A size=16 Failure of alias_pix probing code with score=51 type=0 p=CBA size=16 testing size=32 testing size=64 Failure of mpc8 probing code with score=49 type=3 p=85A size=64 testing size=128 testing size=256 testing size=512 testing size=1024 testing size=2048 Failure of libopenmpt probing code with score=76 type=0 p=FED size=2048 testing size=4096 testing size=8192 testing size=16384 testing size=32768 testing size=65536 AMD A4-5000, Ubuntu 14.04, x86-64, GCC 4.8.2, libopenmpt 0.3.5-pre.0 (r9426): probetest performance: 1425530947 cycles, aa 25976883912 cycles, aac 25507211169 cycles, ac3 1042217662 cycles, acm 1632550096 cycles, act 1847361076 cycles, adp 3215025217 cycles, ads 1751119560 cycles, adx 1422549077 cycles, aea 1661030689 cycles, aiff 1664388004 cycles, aix 2876754979 cycles, amr 16213648221 cycles, amrnb 10357400286 cycles, amrwb 1518874168 cycles, anm 1848774401 cycles, apc 1025286732 cycles, ape 1999052278 cycles, apng 18252897495 cycles, aqtitle 2771276135 cycles, asf 2138272095 cycles, asf_o 16758768236 cycles, ass 1810499177 cycles, ast 1597035448 cycles, au 1629356130 cycles, avi 1664911494 cycles, avr 1421498186 cycles, avs 1504496122 cycles, bethsoftvid 1494735429 cycles, bfi 2543270309 cycles, bink 2111172403 cycles, bit 1500579804 cycles, bfstm 1087554907 cycles, brstm 1587938487 cycles, boa 1715001029 cycles, c93 1063478621 cycles, caf 7724800501 cycles, cavsvideo 1825737620 cycles, cdxl 1181800422 cycles, cine 3250419221 cycles, concat 2222078869 cycles, dcstr 1512175182 cycles, dfa 1403369419 cycles, dirac 1555052671 cycles, dnxhd 2044301070 cycles, dsf 1164145857 cycles, dsicin 1617975398 cycles, dss 31075115518 cycles, dts 1512886188 cycles, dtshd 15304698997 cycles, dv 12154318089 cycles, dvbsub 1641827312 cycles, dvbtxt 1799178653 cycles, dxa 2122493980 cycles, ea 1412999215 cycles, ea_cdata 19832626428 cycles, eac3 1469702273 cycles, epaf 3151846641 cycles, ffmetadata 3846803597 cycles, fits 2382096387 cycles, flac 1938351100 cycles, flic 1750595032 cycles, flv 1034144158 cycles, live_flv 1419146038 cycles, 4xm 2298304236 cycles, frm 2332352309 cycles, fsb 1753160137 cycles, gdv 1164270006 cycles, genh 4115033986 cycles, gif 2162805981 cycles, gsm 2425065785 cycles, gxf 22958299155 cycles, h261 22259377736 cycles, h263 21565315903 cycles, h264 14131416451 cycles, hevc 2294216465 cycles, hls,applehttp 2026125838 cycles, hnm 1599698430 cycles, ico 2130406935 cycles, idcin 1936330153 cycles, idf 1721541470 cycles, iff 2700087066 cycles, ilbc 1603579794 cycles, alias_pix 2559447550 cycles, brender_pix 1736901491 cycles, ingenient 13309369249 cycles, ipmovie 2020584923 cycles, ircam 2157010519 cycles, iss 1326703719 cycles, iv8 1373300900 cycles, ivf 3415745402 cycles, ivr 28777360214 cycles, jacosub 1683261092 cycles, jv 1796897802 cycles, lmlm4 27908164305 cycles, loas 2783000204 cycles, lrc 1698706136 cycles, lvf 2283438621 cycles, lxf 21187997513 cycles, m4v 1761691177 cycles, matroska,webm 1810514534 cycles, mgsts 13885029990 cycles, microdvd 17194619859 cycles, mjpeg 14864883485 cycles, mjpeg_2000 20581718455 cycles, mlp 1465609046 cycles, mlv 2130473395 cycles, mm 1381846427 cycles, mmf 2189640745 cycles, mov,mp4,m4a,3gp,3g2,mj2 33954117497 cycles, mp3 1705624337 cycles, mpc 1372935442 cycles, mpc8 21843519866 cycles, mpeg 25019569510 cycles, mpegts 10100750292 cycles, mpegvideo 1807433600 cycles, mpjpeg 10712139775 cycles, mpl2 11785261566 cycles, mpsub 1905445870 cycles, msf 10814845066 cycles, msnwctcp 1531102489 cycles, mtaf 1306615774 cycles, mtv 2222380980 cycles, musx 1716209923 cycles, mv 3881317597 cycles, mxf 1545720786 cycles, nc 2056314607 cycles, nistsphere 1654383657 cycles, nsp 18094337108 cycles, nsv 14525862175 cycles, nut 3159902207 cycles, nuv 2727640331 cycles, ogg 3262277011 cycles, oma 2311236695 cycles, paf 10558093771 cycles, pjs 1694997950 cycles, pmp 1833059413 cycles, pva 2055387815 cycles, pvf 1136126486 cycles, qcp 1631946005 cycles, r3d 12636465075 cycles, realtext 1678744413 cycles, redspark 1689616653 cycles, rl2 1684971239 cycles, rm 1702641083 cycles, roq 2859211090 cycles, rpl 2477043341 cycles, rsd 29928172868 cycles, s337m 8043319530 cycles, sami 23903157582 cycles, sbg 13817316201 cycles, scc 11367926253 cycles, sdp 1759022011 cycles, sdr2 1323694732 cycles, sds 1611367384 cycles, sdx 1502062085 cycles, film_cpk 2022693698 cycles, shn 1879280597 cycles, siff 1573119725 cycles, smk 2022446701 cycles, smjpeg 1746195740 cycles, smush 1324175723 cycles, sol 1723257601 cycles, sox 14435589893 cycles, spdif 19961951986 cycles, srt 2279919281 cycles, psxstr 14460561033 cycles, stl 7757448652 cycles, subviewer1 9881927027 cycles, subviewer 1813503023 cycles, sup 2614487132 cycles, svag 1788813210 cycles, swf 2434490441 cycles, tak 5163701269 cycles, tedcaptions 1838368024 cycles, thp 4031549835 cycles, 3dostr 1737125038 cycles, tiertexseq 1057468914 cycles, tmv 21334471493 cycles, truehd 1020803156 cycles, tta 1749787031 cycles, txd 1798977052 cycles, ty 2446972639 cycles, vag 16496826462 cycles, vc1 1457488878 cycles, vc1test 2176328303 cycles, vivo 1750344002 cycles, vmd 2361316510 cycles, vobsub 3048150634 cycles, voc 1212442370 cycles, vpk 15676889881 cycles, vplayer 1733430074 cycles, vqf 2109001718 cycles, w64 1910784666 cycles, wav 1793196314 cycles, wc3movie 2716316840 cycles, webvtt 1930245918 cycles, wsaud 1419655493 cycles, wsd 1063672420 cycles, wsvqa 2199993223 cycles, wtv 2963839522 cycles, wve 1741739753 cycles, wv 1704590788 cycles, xa 1789277847 cycles, xbin 2039493809 cycles, xmv 2570060068 cycles, xvag 2268862337 cycles, xwma 1351127969 cycles, yop 1828935584 cycles, yuv4mpegpipe 1908523596 cycles, bmp_pipe 1658940649 cycles, dds_pipe 1533982431 cycles, dpx_pipe 1406840553 cycles, exr_pipe 1438926647 cycles, j2k_pipe 1251023770 cycles, jpeg_pipe 1254565974 cycles, jpegls_pipe 1710131896 cycles, pam_pipe 1646528709 cycles, pbm_pipe 1216178831 cycles, pcx_pipe 1795627990 cycles, pgmyuv_pipe 1555283784 cycles, pgm_pipe 1730118897 cycles, pictor_pipe 1253719192 cycles, png_pipe 1363037586 cycles, ppm_pipe 1212431338 cycles, psd_pipe 1738071787 cycles, qdraw_pipe 1702267451 cycles, sgi_pipe 3216491315 cycles, svg_pipe 1291987788 cycles, sunrast_pipe 1268831892 cycles, tiff_pipe 1142563696 cycles, webp_pipe 1132441750 cycles, xpm_pipe 2721827897 cycles, libmodplug 116347927174 cycles, libopenmpt 2837754321 libopenmpt (per module file format) Overall increase in CPU cycles is about 10% on this system. AMD FX-8320E, Ubuntu 16.04, x86-64, GCC 5.4.0, libopenmpt 0.3.5-pre.0 (r9426): probetest performance: 1431838272 cycles, aa 19596017615 cycles, aac 22072437919 cycles, ac3 1586366499 cycles, acm 1633298889 cycles, act 2154140183 cycles, adp 2378007979 cycles, ads 1823790336 cycles, adx 1658075845 cycles, aea 1727693550 cycles, aiff 1749865867 cycles, aix 2406511571 cycles, amr 16280118538 cycles, amrnb 9729762097 cycles, amrwb 1679103191 cycles, anm 2135510099 cycles, apc 1488362086 cycles, ape 2080499431 cycles, apng 9520540950 cycles, aqtitle 2266709135 cycles, asf 1868832098 cycles, asf_o 12886457939 cycles, ass 1485348618 cycles, ast 1530423123 cycles, au 2076317613 cycles, avi 1697698321 cycles, avr 1667579531 cycles, avs 1724589202 cycles, bethsoftvid 1544795352 cycles, bfi 2165440010 cycles, bink 1949332852 cycles, bit 1726887437 cycles, bfstm 1817601901 cycles, brstm 1931972368 cycles, boa 1942186683 cycles, c93 1521603271 cycles, caf 6700520065 cycles, cavsvideo 1776722752 cycles, cdxl 1553705877 cycles, cine 2273386858 cycles, concat 1562976669 cycles, dcstr 1717046635 cycles, dfa 1664079909 cycles, dirac 1669153535 cycles, dnxhd 2246099412 cycles, dsf 1453517393 cycles, dsicin 1500647387 cycles, dss 30155546433 cycles, dts 1535993877 cycles, dtshd 15800426975 cycles, dv 11610679333 cycles, dvbsub 1841619921 cycles, dvbtxt 1830448110 cycles, dxa 2092010472 cycles, ea 1636380532 cycles, ea_cdata 20370397390 cycles, eac3 1986625579 cycles, epaf 2345789673 cycles, ffmetadata 2208460360 cycles, fits 2666576040 cycles, flac 1853359746 cycles, flic 1655594426 cycles, flv 1749273757 cycles, live_flv 1751364550 cycles, 4xm 1878271595 cycles, frm 2195821183 cycles, fsb 2150865173 cycles, gdv 1814313220 cycles, genh 2731087542 cycles, gif 2425559509 cycles, gsm 1946161984 cycles, gxf 22485157183 cycles, h261 18090217832 cycles, h263 18123381087 cycles, h264 11743837228 cycles, hevc 2943741402 cycles, hls,applehttp 1596751795 cycles, hnm 1518915719 cycles, ico 2035049448 cycles, idcin 1903935166 cycles, idf 1759210194 cycles, iff 2303812339 cycles, ilbc 2256463346 cycles, alias_pix 2162931472 cycles, brender_pix 1993497708 cycles, ingenient 11100984389 cycles, ipmovie 1721013983 cycles, ircam 2414832178 cycles, iss 1563366273 cycles, iv8 1720764903 cycles, ivf 2705480276 cycles, ivr 18444193346 cycles, jacosub 1623518888 cycles, jv 1546834075 cycles, lmlm4 19689388118 cycles, loas 2578655283 cycles, lrc 1508104094 cycles, lvf 2049106502 cycles, lxf 14261507075 cycles, m4v 2053157819 cycles, matroska,webm 2104137496 cycles, mgsts 16036832726 cycles, microdvd 17859866440 cycles, mjpeg 11882965398 cycles, mjpeg_2000 15763064782 cycles, mlp 1819135239 cycles, mlv 1704707509 cycles, mm 1545905690 cycles, mmf 2850154432 cycles, mov,mp4,m4a,3gp,3g2,mj2 31022110090 cycles, mp3 1817347412 cycles, mpc 1531970665 cycles, mpc8 17122469946 cycles, mpeg 22261016387 cycles, mpegts 8951992309 cycles, mpegvideo 1809929700 cycles, mpjpeg 11951089260 cycles, mpl2 6551894512 cycles, mpsub 1899715798 cycles, msf 10830367049 cycles, msnwctcp 2044908745 cycles, mtaf 1656039910 cycles, mtv 1959428195 cycles, musx 1986706463 cycles, mv 3335345137 cycles, mxf 1437248826 cycles, nc 1560607671 cycles, nistsphere 1743990594 cycles, nsp 13637693392 cycles, nsv 10394196213 cycles, nut 2918921805 cycles, nuv 2270768860 cycles, ogg 2340087729 cycles, oma 2035175754 cycles, paf 10801631816 cycles, pjs 1600390257 cycles, pmp 1624172083 cycles, pva 2029585927 cycles, pvf 1499654920 cycles, qcp 1523644022 cycles, r3d 9729201793 cycles, realtext 2741283597 cycles, redspark 1560979664 cycles, rl2 1707424337 cycles, rm 1503702579 cycles, roq 2502554297 cycles, rpl 2324528772 cycles, rsd 24221857370 cycles, s337m 8451297386 cycles, sami 14470356448 cycles, sbg 12383160138 cycles, scc 10066289314 cycles, sdp 1492822405 cycles, sdr2 1953547326 cycles, sds 1785608501 cycles, sdx 1642318183 cycles, film_cpk 1674580160 cycles, shn 1832283485 cycles, siff 2158705275 cycles, smk 2242528030 cycles, smjpeg 1866202828 cycles, smush 1719907973 cycles, sol 1603385883 cycles, sox 10811633406 cycles, spdif 15052457444 cycles, srt 1985909974 cycles, psxstr 10861785105 cycles, stl 6049231980 cycles, subviewer1 9438386352 cycles, subviewer 1990328115 cycles, sup 2353635176 cycles, svag 1803115002 cycles, swf 2502101683 cycles, tak 3174848173 cycles, tedcaptions 2109731137 cycles, thp 3157368385 cycles, 3dostr 1534576882 cycles, tiertexseq 1498633646 cycles, tmv 16064097534 cycles, truehd 2038659417 cycles, tta 1525132720 cycles, txd 2086281061 cycles, ty 2335732447 cycles, vag 17816993426 cycles, vc1 1713663150 cycles, vc1test 1697335145 cycles, vivo 1594652123 cycles, vmd 2881705742 cycles, vobsub 2448696469 cycles, voc 1488891656 cycles, vpk 15458122870 cycles, vplayer 1875426898 cycles, vqf 1736408027 cycles, w64 1556581121 cycles, wav 1559664542 cycles, wc3movie 2718309078 cycles, webvtt 2054066995 cycles, wsaud 1596128715 cycles, wsd 1560575382 cycles, wsvqa 2489983302 cycles, wtv 2666389992 cycles, wve 1801011668 cycles, wv 1692224323 cycles, xa 2017237422 cycles, xbin 1864517924 cycles, xmv 2387538962 cycles, xvag 1935027570 cycles, xwma 1501248394 cycles, yop 2389021238 cycles, yuv4mpegpipe 1473129814 cycles, bmp_pipe 1815162516 cycles, dds_pipe 1730860644 cycles, dpx_pipe 1557607480 cycles, exr_pipe 1597011227 cycles, j2k_pipe 1550024144 cycles, jpeg_pipe 1466714468 cycles, jpegls_pipe 1696590915 cycles, pam_pipe 1614645142 cycles, pbm_pipe 1507544252 cycles, pcx_pipe 1770918401 cycles, pgmyuv_pipe 1576701750 cycles, pgm_pipe 1651009366 cycles, pictor_pipe 1498297364 cycles, png_pipe 1604007053 cycles, ppm_pipe 1456912936 cycles, psd_pipe 1528209484 cycles, qdraw_pipe 1597650224 cycles, sgi_pipe 1975846380 cycles, svg_pipe 1627941519 cycles, sunrast_pipe 1716338310 cycles, tiff_pipe 1529806064 cycles, webp_pipe 1398728534 cycles, xpm_pipe 2717378296 cycles, libmodplug 60610962842 cycles, libopenmpt 1478316166 libopenmpt (per module file format) Overall increase in CPU cycles is about 6% on this system. Intel Core i7-6700, Debian 9, GCC 6.3.0, libopenmpt 0.3.5-pre.0 (r9426): Also around 5% increase. The ~10% vs. ~5% are probably due to the ancient GCC version on that system, however I have no way to verify that right now (I have neither 2 different CPUs with same GCC version available nor different GCCs on the same CPU). Also note that GCC 4.8 is the oldest GCC that can even build libopenmpt 0.3 at all. The following results are all hot page cache, best of 3 runs, on the idle AMD FX-8320E system. probeperf.c: #include <inttypes.h> #include <stdio.h> #include <stdint.h> #include <sys/time.h> #include "libavformat/avformat.h" #define BUFSIZEMAX 65536 static char buf[BUFSIZEMAX + AVPROBE_PADDING_SIZE]; static uint64_t now(void) { struct timeval tv; gettimeofday(&tv, NULL); return (uint64_t)tv.tv_sec * 1000000 + tv.tv_usec; } int main(int argc, const char * * argv) { uint64_t iotime = 0; uint64_t probetime = 0; av_log_set_level(AV_LOG_WARNING); av_register_all(); for (int bufsize = 1; bufsize <= BUFSIZEMAX; bufsize *= 2) { fprintf(stdout, "bufsize %d\n", bufsize); for (int i = 1; i < argc; ++i) { AVProbeData pd; FILE * f; size_t size; memset(&pd, 0, sizeof(AVProbeData)); pd.filename = argv[i]; memset(buf, 0, bufsize + AVPROBE_PADDING_SIZE); iotime -= now(); f = fopen(pd.filename, "rb"); size = fread(buf, 1, bufsize, f); fclose(f); iotime += now(); pd.buf_size = size; probetime -= now(); av_probe_input_format(&pd, 1); probetime += now(); } } fprintf(stdout, "io [us]: %"PRIu64"\n", iotime); fprintf(stdout, "probe [us]: %"PRIu64"\n", probetime); return 0; } result with old file-extension based probing for libopenmpt: $ find ../samples/ -type f | xargs --no-run-if-empty ./probeperf bufsize 1 bufsize 2 bufsize 4 bufsize 8 bufsize 16 bufsize 32 bufsize 64 bufsize 128 bufsize 256 bufsize 512 bufsize 1024 bufsize 2048 bufsize 4096 bufsize 8192 bufsize 16384 bufsize 32768 bufsize 65536 io [us]: 260836 probe [us]: 10846094 results with new libopenmpt-based file probing: $ find ../samples/ -type f | xargs --no-run-if-empty ./probeperf bufsize 1 bufsize 2 bufsize 4 bufsize 8 bufsize 16 bufsize 32 bufsize 64 bufsize 128 bufsize 256 bufsize 512 bufsize 1024 bufsize 2048 bufsize 4096 bufsize 8192 bufsize 16384 bufsize 32768 bufsize 65536 io [us]: 264617 probe [us]: 11043671 Compared to the random data that tools/probetest generates, these more real-world examples of going through av_probe_input_format() on all files in FATE show an even smaller relative increase: 11043671 / 10846094 - 1 = 0.018 ~= 2%. Note that in actual use, the to be probed data will likely not be in page cache. Jörn Heusipp (4): avformat/libopenmpt: Fix mixed code and declarations avformat/libopenmpt: Update to libopenmpt 0.3 API avformat/libopenmpt: Update file extensions list for libopenmpt 0.3 avformat/libopenmpt: Probe file format from file data if possible libavformat/libopenmpt.c | 99 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 93 insertions(+), 6 deletions(-)
diff --git a/libavformat/libopenmpt.c b/libavformat/libopenmpt.c index af6eb1a..2e22290 100644 --- a/libavformat/libopenmpt.c +++ b/libavformat/libopenmpt.c @@ -72,13 +72,14 @@ static int read_header_openmpt(AVFormatContext *s) { AVStream *st; OpenMPTContext *openmpt = s->priv_data; - int64_t size = avio_size(s->pb); - if (size <= 0) - return AVERROR_INVALIDDATA; - char *buf = av_malloc(size); + int64_t size; + char *buf; int ret; - + size = avio_size(s->pb); + if (size <= 0) + return AVERROR_INVALIDDATA; + buf = av_malloc(size); if (!buf) return AVERROR(ENOMEM); size = avio_read(s->pb, buf, size);
Signed-off-by: Jörn Heusipp <osmanx@problemloesungsmaschine.de> --- libavformat/libopenmpt.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)