-
Notifications
You must be signed in to change notification settings - Fork 0
/
NEWS
2211 lines (2053 loc) · 100 KB
/
NEWS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1.26.1
------
- Fix cmake build by actually including the read_api_version file in the distro.
- Fix big-endian build, stupid omission of a variable declaration, semicolon
(bug 289).
- Silence a harmless warning for build without realtime priority.
1.26.0
------
- Starting to intentionally use C99 in the codebase. API headers are still
supposed to be compatible to C89.
- There is a make check target now with some simple tests.
It is an open question how that should be developed in relation to the
external regression and compliance test suite.
- Finally silenced memory checkers about leaking memory from getlopt()
(main code overwriting values without freeing strdup() strings).
- AUTHORS now in UTF-8;-)
- CMake build files in ports/cmake, as an alternative to create MSVC
project files and the like (thanks to Vitaly Kirsanov)
- Default build with proper integer rounding (--enable-int-quality) now.
- Cygwin/midipix autoconf fixes (thanks to Redfoxmoon).
- Updated Windows build script, notably renaming .dll.def to .def.
Requires an argument now for build type, an optional one for
parallel make (not that useful on MinGW).
- Rework library dependency handling to avoid unnecessary linking for
lib*123. Also add proper Libs.private to .pc files to enable static
usage (especially on Windows with shlwapi).
- Updated support for OS/2 in the form of ArcaOS.
- Removed outdated Pascal port (ports/mpg123_.pas). There are others
out there.
- Updated man pages, been a while.
- mpg123:
-- Fixed-rate playback now prefers the libsyn123 resampler instead of NtoM
in libmpg123, see --resample parameter.
-- Drop --STDOUT (never properly implemented, use pipe to out123 instead).
-- Make --streamdump use unintr_write() to avoid inconsistencies.
-- Now sets non-zero exit code when any one track of the playlist
fails to either produce at least one frame of playback, if there
is data that should produce such (i.e. /dev/zero is bad, /dev/null is
fine). See man page for details.
-- Print out MPEG header info for each frame for mpg123 -vvvv.
-- Added --no-visual to disable cursor/inverse video games explicitly.
-- Clear progress bar before printing updated metadata within a stream.
-- Filter control/non-printable characters from user data printout, reduce
ID3v1 data to 7-bit ASCII (no way to know correct 8-bit encoding for sure).
This should cover bug 267.
-- Set MPG123_NO_PEEK_END when opening special file '-' (standard input).
That helps Windows where attempting to seek on the non-seekable stream
is undefined behaviour (bug 285).
-- Print errors in player code also for --quiet operation (just no messages
from the libraries).
-- Ignore ID3v1 once a Frankenstein stream was detected.
-- Prevent a cosmetic use-after-free in audio playback during program abortion just after
starting playback (prebuffer still in use, implication a blip of bad sound and
a complaining sanitizer).
-- Reformat audio capabilities table, more condensed, fits into 80 columns.
Forced rate on a separated line.
-- Make --pitch actually work, not just interactive changes. Pitching uses
a resampler now if a fixed output rate is specified.
-- Added --no-frankenstein.
-- Frameflags as long variable, 32 bits are needed since some time now.
- out123:
-- Document --STDOUT, make it more robust regarding fwrite() interruptions.
-- Removed the implicit phase shift that made generated waves exactly at
Nyquist freq non-silent, but made little sense overall.
-- Less high-frequency shifts to make waves fit into the table (not insisting
on even number of samples).
-- Option to work without wave table (setting the limit to zero).
-- Added --wave-direction to also enable backward time without phase shift.
-- Waves now generated by re-usable little synthethizer library dubbed
libsyn123.
-- Pink noise from libsyn123 added (using code from Phil Burk).
-- White noise from libsyn123.
-- Geiger-Mueller counter simulation from libsyn123.
-- Wave sweep generator from libsyn123.
-- Some rearrangement in help text.
-- Changed output of --test-encodings to list of encoding names
instead of raw bitmask value.
-- Added --endian, --inputend, and --byteswap.
- libsyn123:
-- Created the library to host some simple signal generators for testing
output.
-- It also hosts sample format conversions as a necessity to be able to
directly produce the format output devices need.
-- Well, also channel mixing while we're at it.
-- Oh, and a minimal-latency-and-reasonably-efficient resampler that only
took me over a year to figure out. I should write a paper about it.
- libout123:
-- Added out123_free() for the benefit of library wrappers. (bug 276)
-- Removed change of effective user ID in the WAV/RAW/AU/CDR writer.
This was intended as a safeguard to avoid creating files with root
priviledges. But: Other output modules still allowed root-level
access to various devices and files, so it was never safe to do
something awful like installing mpg123 with suid bit or configure
sudo to allow users to run mpg123 with arbitrary arguments.
You should treat out123_open just like the regular open(): You can
write to any file/device depending on your permissions.
-- Finally maybe fixed the damaged playback when using pulse hidden
behind the ALSA API (on Ubuntu, for example) by setting a high value
for device start threshold.
-- Fixed out_play() abortion logic to better detect fatal situations
(broken pipe). Needed on FreeBSD, while Linux buffers the issue away.
Should resolve bug 283.
-- Limit size of buffer block being written in out123_play to 16K, avoiding
unnecessary failure with ALSA at least.
-- Using SDL2 now if found. Output module code unchanged.
-- Added hex and txt (plain text) printout.
-- Eliminated spots where error messages would still be printed
also for OUT123_QUIET being effect.
-- Dummy output accepts any encoding now.
- libmpg123:
-- Added mpg123_open_fixed() to ease API for applications that just
want to decode well-behaved local files.
-- The user buffers for audio output data are now declared as void* for
mpg123_read(), mpg123_decode(), and mpg123_replace_buffer() to avoid
the useless need for casting your nice int16_t buffer to unsigned char
for decoding MPG123_ENC_SIGNED_16 data to it.
-- Added mpg123_free() for the benefit of library wrappers. (bug 276)
-- Add mpg123_format2() and mpg123_fmt2() supporting special value 0 for all
rates.
-- Fix changing of decoder (and output format along with that) after stream
opening. This was never recommened and only now should work at all.
-- Also mpg123_decode_frame() now sets return buffer to NULL and returned byte
count to zero in case of MPG123_NEED_MORE (or any other early abort).
-- MPG123_NEED_MORE not returned anymore for non-feeder streams. Got in
there for generic partial frame body reads, but was only intended for
feeder API.
-- Added mpg123_set_moreinfo() to support the Lame project's frame analyzer,
disabled by ./configure --disable-moreinfo.
-- Added optional storage and retrieval of raw ID3 data.
-- Fix skipping of ID3v2 footers (too much was attempted to be skipped). This
is of not much practical consequence as a tag with footer would appear on
the end of files anyway and files with ID3v2 tags at the end seem to be
rather rare.
-- Add mpg123_new_string() and mpg123_delete_string() to avoid confusion
about what mpg123_init_string() and mpg123_free_string() do.
-- Make mpg123_resize_string() terminate the string if shrinking (fill now
limited to new size).
-- Improve layer III frame parsing/error reporting for bad part2_3_length.
-- Fix crashing on stupidly low NtoM rates (exceeding downsampling factor 31).
This was only triggered by you specifying a forced sampling rate below 1550 Hz.
-- Do not remove CRC bits twice from possibly available bit reservoir.
This move needed recomputation of the layer3is reference data for 8 and
24 kHz. Old mpg123 is _wrong_ in the first few frames.
-- Generally more tight control and early bail out on reading bits of
frame data for all layers. This reduces the count of error messages
on badly damaged files a lot and feels a lot safer, too. Note that
we already silently returned zero bytes instead of actually over-reading
the frame buffer before, but now it happens with diagnostics and more
checks before it may happen.
-- Optionally enforce output endianess (big/little) away from native.
-- Fix build without error messages.
-- Fix build without gapless decoding.
-- Disable buffer when neither mmap nor shm functions detected (fixes
build for Android, thanks to vquicksilver).
-- Some support for extremely small streams (below 128 bytes). Those are
too short to contain anything useful besides some tiny metadata, but
serve to find/reproduce parser bugs.
-- Fix mpg123_read() for builds without feeder. It calls mpg123_decode()
without feeding input, which was disabled by mistake. The use of
mpg123_read() (instead of mpg123_decode_frame()) with mpg123_open()
was broken in feederless builds since those were fixed in version 1.15.
-- Fix ID3v2 parser logic for multiple ID3v2 tags being encountered in one
stream. New tags replace old data instead of appending to it when the
extended header update flag is not set (ID3v2.4). Update tags only
replace data that shall be unique. So far, I have never seen an update
tag in the wild, so the check for the flag is untested. The mechanism
of replacing parts of existing tag data has been tested, though.
Note that the updated libmpg123 also avoids a growing ID3 data structure
when repeatedly seeking back to the beginning in a file with disabled
seek index.
-- Eliminated a spots where error messages would still be printed
also for MPG123_QUIET being effect.
-- Added MPG123_NO_FRANKENSTEIN, MPG123_FLOAT_FALLBACK flags.
-- Now actually try floating point encoding if format matrix allows it
(can be disabled by unsetting MPG123_FLOAT_FALLBACK).
-- Added mpg123_feature2() that takes an int, as enums are not ABI-safe,
also added feature queries for floating point output.
1.25.13
-------
This is a bugfix release solely for bug 280 in the parser:
- libmpg123
-- Reset the flag for having a frame to decode before trying to
parse a new one. This prevents very unkind behaviour (crashes)
when combinging mpg123_scan() with decoding later on for damaged
streams that have a mixture of different MPEG versions.
1.25.12
-------
More credit to OSS-Fuzz. The ID3v2 parser code is not yet as hardened
as the actual MPEG decoder. The paranoid can disable it at build-time.
If you do not need it, this is a good idea, anyway: Code that is not
there, cannot be exploited. Speaking about exploits: The recent crop
of bugs trigger a denial of service (crash) worst-case, some invalid
ID3 data normally. Code injection maybe not totally ruled out (that one
write of a zero byte?), but does not seem easy. Update to be sure that
you are only suceptible to as of yet hidden bugs.
- libmpg123
-- Fix an out-of-bounds read of maximal two bytes for truncated RVA2 frames
(oss-fuzz-bug 15975). The earlier fix around the same location needed
one thought more. Actually, another though was needed, oss-fuzz-bug 16009
documents the incomplete fix.
-- Fix an invalid write of one zero byte for empty ID3v2 frames that demand
de-unsyncing (oss-fuzz-bug 16050).
-- Correct preprocessor syntax in mangle.h, no #error in a #define line.
(bug 273, thanks to nmlgc).
- Fix dynamic build with gcc -fsanitize=address (check for all dl functions
before deciding that separate -ldl is not needed).
1.25.11
-------
So, here is a number of bugs found by OSS-Fuzz. Credit to OSS-Fuzz
for the bunch, then.
- libmpg123:
-- Fix out-of-bounds reads in ID3 parser for unsynced frames.
(oss-fuzz-bug 15852)
-- Fix out-of-bounds read for RVA2 frames with non-delimited identifier.
(oss-fuzz-bug 15852)
-- Fix implementation-defined parsing of RVA2 values. (oss-fuzz-bug 15862)
-- Fix undefined parsing of APE header for skipping. Also prevent
endless loop on premature end of supposed APE header. (oss-fuzz-bug 15864)
1.25.10
-------
- libout123: Fix error messages beginning from OUT123_ARG_ERROR (bug 261).
1.25.9
------
- mpg123: Fix --icy-interval handling to work with stream from stdin.
(curl | mpg123 --icy-interval=n -)
- libmpg123: Fix another invalid read and segfault on damaged (fuzzed)
files with part2_3_length == 0 (set maxband=1, pulled from upcoming 1.26.0).
1.25.8
------
- mpg123:
-- Also disable cursor/video games for empty TERM (not just unset and dumb).
- libmpg123:
-- Accept changing mode extension bits when looking for next header for
detecting free-format streams (bug 257).
-- Fix compute_bpf() for free format streams (needed to estimate track
length and working fuzzy seeking in absence of an Info tag).
1.25.7
------
- mpg123:
-- Do not play with cursor and inverse video for progress bar
when TERM=dumb.
-- Fix parsing of host port for numerical IPv6 addresses (just did
not work before, only for textual host names).
- libmpg123:
-- Proper fix for the xrpnt overflow problems by correctly
initialising certain tables for MPEG 2.x layer III. The checks that
catch the resulting overflow are still in place, but likely superfluous
now. Note that this means certain valid files would have been misdecoded
before, if anyone actually produced them. Thanks to Robert Hegemann for
the fix!
-- Silently handle granules with part2_3_length == 0, but
scalefac_compress != 0 (ignore the latter).
1.25.6
------
- Hotfix for bug 255: Overflow reading frame data bits in layer II decoding.
Now, all-zero data is returned if the frame data is exhausted. This might
have a slight impact on performance, but not easily measurable so far.
1.25.5
------
- Avoid another buffer read overflow in the ID3 parser on 32 bit platforms
(bug 254).
1.25.4
------
- Better configure checks for i?86-apple-darwin (bug 253).
- libmpg123:
-- Prevent harmless call to memcpy(NULL, NULL, 0).
-- More early checking of ID3v2 encoding values to avoid bogus text being
stored.
1.25.3
------
- libmpg123:
-- Better checks for xrpnt overflow in III_dequantize_sample() before each
use, avoiding false positives and catching cases that were rendered
harmless by alignment-enlarged buffers.
1.25.2
------
- libmpg123:
-- Extend pow tables for layer III to properly handle files with i-stereo and
5-bit scalefactors. Never observed them for real, just as fuzzed input to
trigger the read overflow. Note: This one goes on record as CVE-2017-11126,
calling remote denial of service. While the accesses are out of bounds for
the pow tables, they still are safely within libmpg123's memory (other
static tables). Just wrong values are used for computation, no actual crash
unless you use something like GCC's AddressSanitizer, nor any information
disclosure.
-- Avoid left-shifts of negative integers in layer I decoding.
1.25.1: Hot Fuzz
-------
- libmpg123:
-- Avoid memset(NULL, 0, 0) to calm down the paranoid.
-- Fix bug 252, invalid read of size 1 in ID3v2 parser due to forgotten
offset from the frame flag bytes (unnoticed in practice for a long
time). Fuzzers are in the house again. This one got CVE-2017-10683.
-- Avoid a mostly harmless conditional jump depending on uninitialised
fr->lay in compute_bpf() (mpg123_position()) when track is not ready yet.
-- Fix undefined shifts on signed long mask in layer3.c (worked in practice,
never right in theory). Code might be a bit faster now, even.
Thanks to Agostino Sarubbo for reporting.
1.25.0: MP3 now patent-free worldwide!
-------
- Silence test for artsc-config if it is not there.
- Make sure -static-libgcc from LDFLAGS gets through libtool,
fixing 32 bit Windows builds (depend on libgcc DLL otherwise).
- Fix build with non-GNU make by using plain rm -f instead of silly $(RM)
in libout123/modules makefile fragment.
- Make build work on iOS, including coreaudio backend.
- libmpg123:
-- Finally provide position-independent code for x86 with assembly
optimisations.The textrels are gone thanks to Won Kyu Park and Taihei Momma.
-- Clarify some license language in files descending from the original MMX
optimisation.
-- Fix return value overflow check for MPG123_BUFFERFILL.
-- Introduced mpg123_getformat2() to enable the FORMAT command
for the generic control not stealing MPG123_NEW_FORMAT from the main
playback loop. The sequence LOADPAUSED-FORMAT-PAUSE (play) is supposed
to work now.
-- Enable aarch64 optimisations on *BSD by default, too. You can always
override that stupid OS whitelist using --with-optimization, anyway.
-- Use of the i486 decoder is now discouraged more prominently, in configure
output.
- out123: Fix stupid crash with verbose mode and tone generation (print
the string if the pointer is non-null, not if it is null).
- libout123: More consistent error messages for dynamic and legacy
(built-in) modules. Namely, you get a hint how if you choose a different
module than the built-in ones for a static libout123.
1.24.0:
-------
- Avoid repeating genre in metadata printout for specifications like
(144)Thrash Metal.
- In remote control mode, only enforce --quiet if no verbosity was required.
- Prevent --loop and --shuffle or --random from messing with the remote
control LOADLIST command (printout of the list would loop without reason).
- Fix the mpg123 command (esp. our provided binaries on Windows) to now find
modules again relative to the executable directory, not the current working
directory. This was a regression in 1.23 and might be security-relevant if
you called mpg123 in working directories with untrusted content.
Note that mpg123 1.23 looked for modules relative to the current working
directory only if the installation prefix for modules did not exist.
So, usage on an intact installation (with /usr/lib/mpg123 or the like) was
safe. Nevertheless this new version fixes the search to be relative to the
binary path as it was with 1.22 and before.
- At least consistent behaviour of playlist code in the face of looping.
Looping is about individual tracks, always. They are looped also in random
mode. Jumping (prev/next keys) is between tracks and resets the loop counter.
The display of currently playing track in the playlist is fixed for random
and looped play now (bug 198).
- Looping is now mentioned for a to-be-repeated track with --verbose.
- Move some compiler nagging from --enable-debug to --enable-nagging, fix up
some new build failures by adding some pesky feature test macros.
- Try not to pollute the terminal buffer with old progress bars in inverse
video. Only the currently live one shall be seen. That one is pretty. The
others are not.
- Using plain dlopen()/LoadLibrary() for opening modules instead of libltdl.
This also means that --with-module-suffix is gone in configure.
- Windows builds only work when Unicode support is there (older than Windows
2000/XP will definitely not work anymore).
- The out123 tool now features tone generation, with a mix of differing
wave patterns. Makes sense to be able to test the audio output by itself,
and it's fun. See --wave-freq and related parameters.
- libmpg123 version 43:
-- Add flags MPG123_NO_PEEK_END and MPG123_FORCE_SEEKABLE, as suggested
by Bent Bisballe Nyeng.
-- Build fix for MSVC (consistent definition of ssize_t, spotted by manx,
bug 243).
-- Build fix for --with-cpu=ppc_nofpu (thanks to Michael Kostylev, bug 244).
-- Add asm optimized MSVC++ Win32|x64 and UWP|x64 builds
-- Remove old, broken MSVC++ builds
- libout123 version 2:
-- Added OUT123_BINDIR.
-- New search order for output plugin directory: MPG123_MODDIR, or (relative
to executable directory OUT123_BINDIR) ../lib/mpg123, plugins
libout123/modules/.libs, libout123/modules, ../libout123/modules/.libs,
../libout123/modules, and at last the installation prefix $libdir/mpg213/.
This shall ensure that a build inside a source tree does not try to use old
modules from the system prefix. The normal libtool wrapper deals with the
shared libout123 or libmpg123 only, not modules.
Note that if you set MPG123_MODDIR to a non-existing directory, no modules
will be found (earlier versions fell back to other choices).
-- The OUT123_NAME parameter is now copied by out123_param_from(), as is
the newly added OUT123_BINDIR.
-- Coreaudio: Use AudioComponents API on OSX >= 10.6 (thanks to Michael Weiser).
-- Coreaudio: Fix behaviour of out123_drop(), not killing the output anymore
without re-opening the device (bug 236, thanks to Taihei for the fix).
1.23.8
------
- Fix long-standing bad memory read (via integer underflow) in ID3 parser
for crafted ID3v2 tags with tiny size information (bug 240). Thanks to
Han Lee & Jerold Hoong for the detailed report.
1.23.7
------
- Fix the bad RPM spec file (broken since out123 addition, thanks
to Srikanth Rao for noticing).
- More out123_pause() in generic control mode, working around
bug 236. The coreaudio output needs to be more robust, though.
- Do not undef MPG123_EXPORT in the headers, rather be prepared for it
being defined already. This fixes MSVC builds, broken since 1.23.0
(bug 239).
1.23.6
------
- call out123_pause() instead of out123_stop() in remote control STOP
command, fixing the regression in 1.23.x of not being able to resume
playback with another LOAD unless the new track has differing audio
format (bug 234)
1.23.5
------
- libout123:
-- fix build of portaudio and SDL on win32 (too many parentheses,
thanks to Sandro Cumerlato for pointing it out)
-- make out123_errcode() return OUT123_BAD_HANDLE as documented
(adding that value to the error enum, was documented but missing),
again thanks to Sandro
- fix windows-builds.sh (shell quoting in copying stage) and add some
bits to shipped header to make it directly usable in MSVC (define ssize_t,
bug 232)
- no overwriting of LIBS in Makefile (build system regression in 1.23,
thanks to Peter Korsgaard for reporting that one)
- no printing of message in response to SIGPIPE, as that could trigger
a hang if stderr itself is the piped culprit (regression from 1.22, bug 233)
1.23.4
------
- mpg123: Fix logic of prebuffering small bits for glitch-free start of
playback. The logic as introduced in 1.23.0 actually introduced stuttering!
The fix for this is really minimal and I urge everyone to at least include
that one. It is the changeset of rev. 4041.
- libout123:
-- Actually make OUT123_KEEP_PLAYING on by default, as documented.
-- Fix buffer logic with regard to draining, use common device writing
code to handle resuming from pause. This fixes sdl output with buffer,
possibly other sfifo-based outputs like CoreAudio (those were poorly
tested with buffer, as the combination is indeed unusual, see bug 230).
-- Buffer pauses devices for prebuffering, to avoid underruns.
-- More reliable playback with SDL, Portaudio and CoreAudio outputs.
This includes FIFO draining on close to avoid dropping of the end.
It should fix parts of bug 230.
-- Fixed memory leaks with some outputs where a call to the deinit()
function is necessary during available/working module checking.
- mpg123, out123: Use the default output flags to get OUT123_KEEP_PLAYING.
Without this, there is a good chance to abort on SIGSTOP/CONT while playing.
This is a regression from 1.22 .
- Build fixes (bugs 227 and 228) and some build system hackery.
Gone are libc feature test macros in compat.h . This means always
using our own strdup() implementation. Simpler than being bugged by
feature test macros in strict compiler mode (when _DEFAULT_SOURCE is not
defined).
- ./configure --enable-nagging does something also without --enable-debug,
explictly triggers -std=c89, too (hence the above).
- Some fixup to make things work in pedantic C89 mode again.
It really might be time to swich on some serious C99 for the next release,
since there's a followup standard to _that_ which we can ignore now.
- Update list of renamed internal symbols to reduce conflicts during static
linking of libmpg123 or libout123.
- Internal compatibility functions now handled via libtool convenience
archives, avoiding the hackish code copies.
1.23.3:
-------
- mpg123: Man page fixes by ESR.
- Actually check for sys/select.h (again?) in configure so that it is used.
Fixes build on a Cygwin install, at least.
- libmpg123: Always default to enabled IEEE 754 hack for rounding on all
platforms, use ./configure --disable-ieeefloat if you do not want it.
As a protection for the exotic machine that does not use IEEE floating
point storage format, mpg123_init() will error out early if the rounding
does not work out.
1.23.2:
-------
- mpg123: Fix compact ID3 tag printing to take UTF-8 character count
into account again (thoughtless regression in 1.23.0).
1.23.1:
-------
- libout123:
-- Fix logic to prevent cases of output devices being closed more than once
(stop after pausing triggered multiple close calls, which broke sndio, for
example).
-- Fix JACK output handling of port wishlist, was simply broken for more than
two ports (-o jack -a port1,port2,port3). Now, it is ensured that each
output ports gets some connection to an out123 channel, possibly splitting
one to multiple ports or mixing multiple channels into one port (cyclic
connection scheme). Note that this does only apply for an explicitly given
list of ports. You can still use --stereo to ensure that two output ports
(if found) are used also for mono tracks.
-- Also use jack_free() in JACK output for ports list.
-- And finally, ensure that pthread library is linked to JACK module (would need
hacking to work on non-POSIX, replacing sem_t with equivalent).
- mpg123:
-- Hide networking-related command-line parameters when disabled.
1.23.0:
-------
- libmpg123 version 42
-- This adds mpg123_framelength() and makes mpg123_position() truly obsolete.
-- Equalizer optional now (./configure --disable-equalizer) to save precious
memory
-- Clip decode tables for large amplification with fixed-point decoders.
Without that, high-pitched distortion enters really quickly when
trying to increase volume even if output samples would not be clipped,
weren't it for fixed-point math.
- libout123 version 1: First incarnation of libout123, a basic library to
get audio data written to audio devices (or files) in simple blocking
manner as opposed to callback APIs (which it wraps over). This collects
the output modules of mpg123 and makes them available to the wider
masses. Also, the separate shared memory buffer process (contained
in libout123) got a lot of reworking which should be noticable in the
interaction with terminal control.
-- Some tuning of several output drivers (modules) regarding flexible
buffer size, client names, supported formats.
-- Notably the JACK output got a major overhaul and now does not swallow
audio at the end anymore. Huge latency also reduced and tunable. Encoding
fixed to floating point, so that libmpg123 actually chooses what is
sensible.
- Added mpg123 --no-infoframe.
- Detect terminal on input side and enable control keys automatically.
There is --no-control now to disable terminal control anyway.
- Display stuff:
-- Avoid spillover of status line that caused unwanted terminal scrolling.
If the terminal width is smaller than the full status string, a cut is
made to make it fit.
-- Draw a progress bar on the terminal by inversing colors behind status
line.
-- Rework the format of the status line to be more compact and consistent.
-- Rework smart tag printout for adapting to terminal width.
-- Warning messages also start with a line break now to better fit in with
verbose playback.
-- Doubly-verbose mode now needed for long MPEG header print out.
It is a higher level of verbosity than printing the current position.
The compact header is a better fit.
-- Compact header printout also compacted, example:
MPEG 1.0 L III cbr128 44100 j-s
-- Reporting of clipped samples also includes a line break now.
-- Keep ID3v2 data around for terminal control to be able to print on
demand. That was broken for some time.
- Default for --preload now is 0.2 instead of 1 (fill whole buffer before
playback). The maximum is 0.5 . This is mandated by corrected buffer
interaction in libout123.
- Improved interaction with buffer process in terminal control mode.
Seeking is more transparent now, taking dropped samples from buffer into
account to avoid unintended jumps. Direct seeks with number row do not
pause playback anymore.
- Silently skip APE tags (thanks to Hans de Goede).
- Some reduction in bitrot on AIX (typos in output module, build with
--disable-largefile --with-audio=aix, real test welcome).
- Added '[' and ']' keys to skip to previous/next directory in playlist.
- Added support for Haiku to configure script (thanks to Jerome Duval).
- Remove spurious Frankenstein warning when scanning files that have no
gapless info (the reported value of -1152 gapless sample length should be
a giveaway anyway).
- Fix a bug in the command line parser that was present from the beginning,
apparently, causing certain parameters (--au, --cdr) to kill off parsing
of following ones. Nobody complained in all these years. Astounding.
- Forget content type from HTTP redirects (relate to error pages, not the
stream redirected to), fixes web radio streams that do not send any
content type for the actual stream.
- Accept application/pls+xml for PLS playlists. It happens. Don't ask
mpg123 to actually parse any XML!
- Ignore whitespace after HTTP MIME types (esp. before a ";").
- Added --name to mpg123 and out123 for providing client name p.ex. for JACK.
There is no default of appending the PID to "mpg123" as client name anymore,
just plain "mpg123" or "out123".
- Added --devbuffer to mpg123 and out123 for influencing device buffer and
possible latency a bit (perhaps more so in future when drivers are adapted
to pay more attention to that).
- Added out123 --channels <n>, --list-encodings, --test-format,
--test-encodings, --query-format.
- Calling ./configure --enable-nagging does not include --enable-debug anymore,
you specify that separately.
- Fix for newer glibc that wants higher POSIX feature test for getaddrinfo()
stuff.
1.22.4:
-------
- Fix stupid regression introduced with a bugfix in 1.14.1 to make
free format streams work again. It took 3 years for someone to notice.
I added a regression test for that now!
1.22.3:
-------
- Fix UTF-16 surrogate detection because that used to falsely detect
characters above 0xDFFF as surrogates (bug 216).
1.22.2:
-------
- Fix buffering for funny sample formats (namely, 24 bit), that do not
fit nicely into 32768 bytes. Effect was a nasty endless loop where
mpg123 needs to be externally killed.
1.22.1:
-------
- Fix mpg123-id3dump when writing images with funny (manipulated) MIME type.
Stupid mistake in length computation of the fallback file extension caused
junk from memory being appended to the filename if the pointer size
is less than 64 bit. For 64 bit pointers (or longer) it was correct by
accident.
- Fix pedantic build by cleaning up out123 source, also now really showing
the encoding list in --longhelp instead of possibly, again, writing junk
from memory in there.
- Not linking libmpg123 against libltdl anymore (bug 215).
- Update MSVC++ ports a bit to make them work again.
1.22.0:
-------
- libmpg123 version 41
- Build fix: Avoid name clash on OSX SDK with "normal" being defined in
an enum already.
- More resilience against folks who do not check errors and rather pass
NULL pointers around (see NEWS.libmpg123).
This changes some return values to MPG123_BAD_HANDLE instead of MPG123_ERR
(always check for != MPG123_OK).
- Fix WAV writing to stdout on Windows (bug 214).
- Rework Xing/Info/Lame tag parsing, also detecting short ones without
the TOC now.
In addition, the warning about file size being off is a _lot_ more
accurate now.
1.21.0:
-------
- Use LL as shortcut for LOADLIST remote command, L is taken already (bug 210).
- Less namespace pollution (MPG123_EXPORT in header instead of EXPORT, bug 212).
1.20.1:
-------
- Make feed reader more efficient when skipping junk by early discarding
of data from buffers to avoid re-parsing.
1.20.0:
-------
- Added NEON optimized decoder for AArch64 (ARM 64bit environment)
-- enabled for --with-cpu=neon64 (NEON only) or --with-cpu=aarch64 (runtime
switch between neon and generic_fpu, like arm_fpu) configuration
-- compatible with aarch64-linux-gnu toolchains (from Ubuntu, debian)
and Xcode 5
- Added new binary out123 only with the audio output part of mpg123.
This is a precursor to separating out said code into a simple audio
output library. It also allows plugging in some processing in a pipe
before feeding to output.
- Prevent opendir(NULL) for unknown module directory when listing modules.
- some build fixes, among those fixing mpg123-id3dump on Windows
1.19.0:
-------
- libmpg123 version 40
- Support float and 32/24 bit integer output also with fixed-point decoders
(conversion from 16 bit precision).
- A-Law output encoding is actually implemented now (Michael introduced
the encoding back in the old days without ever implementing theconversion
table, apparently).
- Added --with-cpu=arm_fpu as decoder choice for runtime switch between
plain fpu code and NEON.
- Fix ARM builds to work properly on debian systems without special CFLAGS
(NEON decoder, specifically).
- Make scripts/benchmark-cpu.pl check the return value instead of delivering
crazy timings for crashed mpg123.
- Trigger track initialization in mpg123_info() to avoid use of uninitialized
variables (watch out for MPG123_NEED_MORE return value!).
- Fix integer code to 32 bit numbers where it would waste 64 bit on
modern systems.
- Add non-executable stack marking also to ARM assembly.
1.18.1:
-------
- Do not close buffer twice with mpg123 -R (delete outdated code in
control_generic(), fixing bug 207.
- Do not mess around with first command line argument to extract program
name, use a copy instead, fixing bug 205.
- Prevent premature exit on timing of failure to open a track in the
playlist and the user wanting to skip over it (bug 206).
- Fixup of HTTP socket mess, also avoiding unnecessary FILE objects (bug
204, patch by Rajeev V. Pillai).
- Fix playlist behaviour on slow HTTP streams, jumping back ('d' key)
from first track stays at first track (thanks to Rajeev again, sub-bug of
bug 206).
- Fix Frankenstein check not to stumble over ID3v1 tags. My apologies. As
a bonus, the position of the concerned code in the parser is now far
more logical.
1.18.0:
-------
- libmpg123 version 39
- Big version increase for clear distinction regarding the 1.14.x regression
fixes in libmpg123.
- Regression fix: Ensure decoder reinitialization on combination of seek
and resync (buffer overflow bug 201, introduced in 1.14.1).
- Regression fix: Make parsing really end on reaching of junk limit
(introduced in 1.14.4).
- Add check for bad bit allocation value in layer I decoder (removes
audible glitch in bug 201 test file).
- Avoid wrong error message about Frankenstein streams when gapless
decoding disabled.
- Be verbose about big header changes (Frankenstein streams). Note that
changes in samples per frame will confuse the seeking code, but decoding
can get through.
- Actually use the full routine to close tracks. Avoids socket leak when
playing multiple HTTP streams from a playlist (bug 203).
- Send correct host header when connecting through HTTP proxy (bug 202,
figured out by Rajeev V. Pillai).
- The console application now informs about changed major stream properties
(prints out another header line).
1.17.0:
-------
- mpg123-id3dump --no-scan; for speedup
- hide -C parameter from mpg123 --help when it is not supported
- added tinyalsa Output (by Jarno Lehtinen)
- build system tweaking
- some care for fixing Cygwin builds
1.16.0:
-------
- Taihei strikes again:
-- New Huffman decoding scheme (configurable, on by default) brings nice
boost to mpg123 to make it the fastest decoder on modern CPUs again.
-- new AVX decoder
-- assembly-optimized DCT36 for SSE and AVX
- added configs for vintage 3DNow(ext) CPUs (AMD K6) utilizing assembly DCT36
- added configs for vintage SSE CPUs (Pentium M), utilizing C DCT36
- added FORMAT command to generic control
- added support for ID3v2 APIC frames
- added mpg123-id3dump as official companion to extract meta data
(including writing of album art from APIC to files)
- added mpg123-strip as official companion to strip dirt out of MPEG streams
(including meta data)
- not deleting ID3 data right after printing in generic control
- module loader a bit more flexible with relative MPG123_MODDIR
- Fix chopped-off playback with pulseaudio output: draining the output
now on closing.
- SDL output fixup, a) not chopping off end and b) non-fatal underrun
- Fix obvious errors in win32 output ... does it now play the end of
tracks? Need someone to test this.
- added support for screen and iris-ansi terminals with --title (as prompted
by patch from sf.net user canavan)
- fixes/enhancements for sgi audio output
- libmpg123: proper largefile aliases for proper systems (FreeBSD with
one one-and-only off_t
This enables client software that insists on defining pointless
_FILE_OFFSET_BITS.
- wrapper script src/mpg123-with-modules to ease the pain of running mpg123
with modules without installation (setting MPG123_MODDIR)
- removed ALSA 0.5 code (unused for longtime, last GPL-only bit)
1.15.4:
-------
- Writing CDDA data via --cdr works again; had also been broken by attempts
to catch failing writes because of full disk.
- Also, the return values of WAV/CDR writing routines now properly indicate
error to avoid stupid endless loop of "smart" audio writing code that wants
to handle interruptions. Really, --cdr could just go and nobody would miss
it ...
- Fix stupid bug in mpg123_chomp_string() (introduced in 1.15.1), empty
lines were badly treated. Only usage in mpg123 is for parsing HTTP redirect
headers; malicious HTTP servers might exploit that (possibility to zero
bytes in memory).
- some cleanup for nagging mode
- more resync strictness to really catch (all) cases with changing decoder
structure; in practice badly needed when disabling seekbuffer (so it's
your fault, somehow ...) for non-seekable streams, otherwise not really
an issue because of readahead checking
I repeat: This fixes possibly fatal behaviour in the parser when readahead
checking is explicitly disabled (p.ex. via mpg123 --no-seekbuffer on
http streams). By default, readahead checking is _always_ active!
- build system fixed for automake 1.13 (thanks to Nix)
1.15.3
---
- Fix WAV writing. AGAIN. People love to decode WAV to stdout in various
ways that started to get broken with me starting to care for people who
like to write to full disks. I frikkin' HATE this rat race! I'm even
starting to SHOUT. Now, the code prefers to write no header at all (when
there is no actual output) instead of possibly writing too many misleading
ones. Getting the blame for breaking dir2ogg repeatedly while trying to
cope with one fatal situation that you cannot really cope with sucks. Big
time. I hope that's it now!
1.15.2:
-------
- build fix with older shells (== in configure)
1.15.1:
-------
- libmpg123 API version 37
- Fix corner case in HTTP communication with missing path in Location header
(bug 187).
- Prevent nasty alignment issues by not guessing about assembler alignment
when .balign is available (bug 188).
1.15.0:
-------
- Added --continue (also see scripts/conplay).
- Added number row to terminal control keys for 10% jump points (for
navigating long tracks).
- Set xterm title always if asked, disregarding the -q switch (if you want
fully quiet, don't specify --title).
- Enable terminal mode in OS/2 by explicitly checking for and using
os2term library.
- Getting WAV/AU/CDR writing back to a sane state while still catching
out-of-disk when writing headers (none in case of CDR) but removing
that initial test that prevented writing on any non-seekable file (like,
/dev/stdout to a pipe).
- Added native audio output for QNX (thanks to Mike Gorchak), also improving
portability of configure script while at that.
- more robust recovery from ALSA issues (device suspend)
- Fix crash in module loader on *BSD.
- Extend time display to switch to hours above 60 minutes (hh:mm:ss,
ditching the sub-second precision)
- really include dithering in default x86-64 build.
- Fix mpg123_scan() not properly seeking back for all types of files (bug
3582628 ... it got a different number on sf.net now ... brilliant, folks!).
- Prevent false positives for "Frankenstein!" when using mpg123_scan().
- Fix printing of negative positions with buffer (bug 186).
- Accept application/x-scpls as additional MIME type.
- Try to handle certain Windows toolchains that miss EOVERFLOW.
1.14.4:
-------
Who reworks a parsing and data mangling without really making sure that
things still work like before? I hope I won't do so in future. Not again.
- Fix resync logic to properly work again (used to prematurely end stream
on bad headers). A regression again, this sucks, but at least we got a
regression test for that now.
- Fix aeon-old regression (since 1.11.0) about short seeks: Bit reservoir
was reset also for short seeks that did not break continuity.
- Another damned regression got fixed: Sample-accurate seek for files
without full gapless info.
1.14.3:
-------
- Fix regression from 1.14.1 in parsing of bad free format streams,
avoiding apparently endless loops (just very slow reading, in fact).
1.14.2:
-------
- Fix writing of WAV to stdout.
It is still not the best of ideas to do so, though. At least make sure
to fix rate and channels.
1.14.1:
-------
- Fix subtle bug that could trigger failure to detect a format change on
resync when using libmpg123's feeder API.
That bug has been there since ages but was neutralized by other (buggy)
behaviour of the parser before the little overhaul. The Law of an Even
Number of Bugs.
1.14.0:
-------
- libmpg123 API version 36 (see NEWS.libmpg123)
- Add --ignore-streamlength.
- But also deal with concatenated (Frankenstein) streams: Not applying
gapless cutting once we're over the announced number of frames.
- Also, gapless cutting is only applied if relevant information is
present. Previously, at least the decoder delay has been cut.
- Add --lyrics for printout of lyrics (from USLT in ID3v2).
- Added handling of SIGUSR1 and SIGUSER2 to terminal control code,
configurable via --ctrlusr1 and --ctrlusr2.
- Some low-level API added (mpg123_framedata(), mpg123_framepos(), buffering
and resampling control).
- Added info about input buffer fill to mpg123_getstate().
- ReplayGain: Try to detect LAME below 3.95 for the different reference
level of 83 dB (adding preamp of 6 dB). Version 3.95 itself (not 3.95.1)
I cannot detect. User-set gain values are not touched.
- Keep silent about missing bit reservoir when ignoring frames. That is
the whole point (mostly;-).
- Add the new/old WRITE_SAMPLE variant from MPlayer that makes the generic
decoder faster on older CPUs (x86 at least). Not on x86-64, though (it's
not enabled per default there).
- disable 3DNow and 3DNowExt DCT36, which is slow on modern CPUs
- Handle out-of-disk in the file writers (a bit, see
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=67259)
- Added Xcode project files to build libmpg123 on Mac OS and iOS
- 32 bit output for sndio output (patch by Brad Smith).
- Remote control interface knows LOADLIST command now.
- Now freeing meta data memory after printout.
- Some documentation cleanup, including manpage fixes by quadrispro.
- Re-enabled wildcard expansion on Windows (been broken by unicode file
name support).
- Fix MMX tabinit syntax (thanks to Marcel Müller for pointing that out).
- Fix SGI audio output (been broken since change to modules).
- Fix some fringe behaviour (mpg123_getformat() triggering needless reading
of next frame, possibly hitting bogus MPG123_NEED_MORE).
- Resync limit now also serves to increase amount of skipped junk on
beginning.
- Better separation of stream end and read error (in case there is no
stream opened, even).
- Don't always complain about failed free format header search (only with
verbosity level 3).
1.13.8:
-------
- Fix build for ARM Thumb (incompatible assembly in some macros).
1.13.7:
-------
- Fix endless loop in module loader when starting mpg123 in a directory
that does not exist.
1.13.6:
-------
- Fix output of one random character in -vvv mode for ID3v2.2 frames
(no buffer overflow, move along, folks;-).
1.13.5:
-------
- Fix reading of ReplayGain values from Lame tag (nobody seen this before?!)
(both actual values and the distinction between audiophile / radio).
- Accept application/octet-stream as input from HTTP.
- Update man page with encodings.
- Build fixes.
1.13.4:
-------
- Fix bogus error on resync with big offsets (hits systems that have bigger
off_t than int), bug 3393801.
- Fix windows binary package build script again with plugdir.
1.13.3:
-------
- Fix an endless loop on bad headers, bug 3267863.
- Prevent compiler warnings about unused variables with gcc 4.6 .
- Fix return value handling of getaddrinfo(), bug 3288333.
- Make decwin size computation work for OPT_ARM and sizeof(long) != 4
(bug 3288360).
1.13.2:
-------
- Updated .NET wrapper (MPG123_SKIP_ID3V2, encsize and mpg123_strlen
functions) by Malcolm Boczek.
- Fix crash when calling mpg123_decoder() before opening a track -- a rare
use case since one can choose a decoder with mpg123_new() already.
- Fix format change detection for certain (artificial) concatenated streams
(p.ex. MPEG 1 frames following MPEG 2 frames).
- Prevent the nasty of bug 3154889: No change of pitch without a current
audio format. No proper solution, but more like earlier behaviour.
- Fix some compiler warnings.
- Fix a memory leak in the module loader, also some in the examples,
for being pedantic.
- More use of AC_LANG_SOURCE to silence autoconf.
1.13.1:
-------
- Fix --float and --8bit (MPG123_FORCE_FLOAT, MPG123_FORCE_8BIT) regression,
caused by introduction of 24 bit formats. (bug 3151597).
Btw: The use of specific format choice via `mpg123 -e f32` and friends
is encouraged (meaning mpg123_format_none() / mpg123_format() calls in
libmpg123 API).
- Loosen the parser restrictions: Allow the private header bit to vary. It
is not mpg123's business anyway (finally suggested by Marcel).
1.13.0:
-------
- libmpg123 API version 29 (see NEWS.libmpg123)
- New optimization: ARM NEON (Cortex A series) -- kudos to Taihei, again!
- Added 24 bit integer output (truncation of 32 bit integer).
- Cleanup of symbols for the static library: Only have global symbols that
are actually needed, prefix them with INT123_ to avoid conflicts.
- Added --streamdump to get a copy of the data libmpg123 used.
- Added --icy-interval and tweaked libmpg123 to make playback of ICY stream
dumps possible.
- Added possibility to set module file suffix at build -- to be able to
avoid .la files for plugins.
- Removed compiler directives for alignment and disable associated tests.
The tests don't work on a wide range of compilers anyway, and newer gccs
do have force_align_arg_pointer to fix bad stacks.
- There is no ChangeLog file anymore... it was autogenerated from subversion
log anyway, so look there if interested.
1.12.5:
-------
- Fix bug with the new meta data printout of the mpg123 app; embedded
null bytes in UTF-8 strings in non-UTF-8 environment would trigger buffer