FFmpegfs NEWS

Important changes in 2.17 (2024-11-10):

* Bugfix: Issue #164: Fixed incorrectly discarded HLS seek requests.
* Bugfix: Wrong error message fixed when an invalid audio/video codec was
  selected. The message should rather say "unsupported codec" instead of
  talking about "sample format not supported.".
* Bugfix: Issue #162: If not present, add time stamps to the copied streams.
* Changed quality from 34 to 40 for hardware encoded video streams to create
  slightly smaller files.
* Closes#1084487: Moved from the Fuse 2 to the Fuse 3 API.

Important changes in 2.16 (2024-06-10):

* Bugfix: Closes#1072412: Fix build with FFmpeg 7.0. write_packet() now with
  const buffer as of Libavformat 61+.
* Fixed deprecation: 2014-05-18 - 68c0518 / fd05602 - lavc 55.63.100 / 55.52.0
  - avcodec.h
  Add avcodec_free_context(). From now on it should be used for freeing
  AVCodecContext.
* Fixed deprecation: 2023-05-15 - 7d1d61cc5f5 - lavc 60 - avcodec.h
  Depreate AVCodecContext.ticks_per_frame in favor of
  AVCodecContext.framerate (encoding) and
  AV_CODEC_PROP_FIELDS (decoding).

Important changes in 2.15 (2024-02-03):

* Bugfix: Issue #151: Fixed autocopy STRICT never triggers for video streams
* Bugfix: Issue #153: The --include_extensions parameter now contains a
  description, which was previously missing from the manual and online help.
* Issue #149: 2023-05-04 - xxxxxxxxxx - lavu 58.7.100 - frame.h
  Deprecate AVFrame.interlaced_frame, AVFrame.top_field_first, and
  AVFrame.key_frame.
  Add AV_FRAME_FLAG_INTERLACED, AV_FRAME_FLAG_TOP_FIELD_FIRST, and
  AV_FRAME_FLAG_KEY flags as replacement.
* Issue #149: 2023-05-04 - xxxxxxxxxx - lavu 58.7.100 - frame.h
  Deprecate AVFrame.interlaced_frame, AVFrame.top_field_first, and
  AVFrame.key_frame.
  Add AV_FRAME_FLAG_INTERLACED, AV_FRAME_FLAG_TOP_FIELD_FIRST, and
  AV_FRAME_FLAG_KEY flags as replacement.
* Issue #149: 2021-09-20 - dd846bc4a91 - lavc 59.8.100 - avcodec.h codec.h
  Deprecate AV_CODEC_FLAG_TRUNCATED and AV_CODEC_CAP_TRUNCATED,
  as they are redundant with parsers.
* Issue #136: The CMake build files have been removed. Support was never more
  than experimental, and CMake lacks a good uninstall option. Will stick to
  automake system from now on.

Important changes in 2.14 (2023-06-15):

* Bugfix: Issue #141: Improved memory management by allocating several times the
  average size of allocations. This prevents obtaining tiny portions over and over
  again. Additionally, after the file is opened, grab the entire expected memory
  block rather than doing a tiny allocation initially, followed by a larger
  allocation.
* Bugfix: Avoid race conditions that cause the inter-process semaphore creation to
  fail for the second process.
* Bugfix: Issue #119: If a seek request is still open after EOF, restart
  transcoding.
* Bugfix: Issue #119: To prevent frame/segment creation errors, the frame set and
  HLS code has been updated.
* Bugfix: Avoid crashes during shutdown if cache objects have already been closed.
* Bugfix: Issue #119: The AVSEEK_FLAG_FRAME set should be used to seek to frames
  when building frame sets. Otherwise, output images may vary if searched for or
  continuously decoded.
* Bugfix: The conversion of PTS to frame number and vice versa for frame sets was
  incorrect if TBR did not equal frames per second.
* Bugfix: Fixed seek requests that are being ignored with frame sets.
* Bugfix: When transferring from cache to the Fuse buffer, avoid a possible 1 byte
  overrun.
* Bugfix: Issue #143: To avoid occasional EPERM failures, missing synchronisation
  objects were added.
* Bugfix: Issue #144: To fix the crashes that may have been caused by them, the
  variables impacted by a potential threading issue were marked as "volatile."
* Bugfix: Closes#1037653: Fix build with GCC-13
* Bugfix: Update docker build for Debian Bookworm
* Enhancement: Record milliseconds for every log event.
* Enhancement: make check: added a file size check to frame set tests.
* Optimisation: When reopening after invalidating the cache, the size remained
  at 0. The original size is now once again reserved in order to prevent
  reallocations.
* Optimisation: To avoid reallocations, save enough space in the cache buffer to
  hold the entire frame set.
* Optimisation: Checking folders to see if they can be transcoded is completely
  pointless. Directories are now immediately skipped.
* To avoid problems with logfile viewers, renamed built-in logfiles to
  *_builtin.log (removing the double extension).

Important changes in 2.13 (2023-01-15):

* Added --prebuffer_time parameter. Files will be decoded until the buffer
  contains the specified playing time, allowing playback to start smoothly
  without lags. Works similar to --prebuffer_size but gives better control
  because it does not depend on the bit rate. An example: when set to
  25 seconds for HLS transcoding, this will make sure that at least 2 complete
  segments will be available once the file is released and visible.
* Feature: Issue #140: Filtering the files that will be encoded has been
  added. A comma-separated list of extensions is specified by the
  --include_extensions parameter. These file extensions are the only ones that
  will be transcoded.
  The entries support shell wildcard patterns.
* Feature: The --hide_extensions parameter syntax has been extended. The
  entries now support shell wildcard patterns.
* Bugfix: Issue #139: Additional files could be added using the --extensions
  parameter. However, this is no longer necessary; in the past, a file's
  extension determined whether or not it would be transcoded. Files with
  unknown extensions would be ignored. The extension is no longer important
  because FFmpegfs now examines all input files and recognises transcodable
  files by the format.
  The outdated --extensions argument was removed without substitution.
* Bugfix: Fixed crash when implode() function was called with an empty string.
  Happened with Windows GCC 11.3.0 only.

Important changes in 2.12 (2022-08-27):

* The code has been run through clang-tidy to identify bug-prone or
  inefficient code, and to find parts that could be modernised to C++17.
  Several issues could be resolved. Sometimes, many lines of code could be
  replaced by a few. Some parts run far more efficiently than before. C++17
  is cool. I need to get a t-shirt.
* Bugfix: In get prores bitrate(), a crash that might have happened under
  unusual circumstances has been corrected. If the best match resolution
  could not be found, array access out-of-bounds could happen.
* Bugfix: Several unlikely, but potential problems that could have happened
  when subtitle decoding failed or delayed video/audio packets couldn't be
  decoded have been fixed.
* Bugfix: An internal problem could cause the application to crash. Should
  never happen, though. Fixed anyway.
* Bugfix: Sometimes, the last segment's estimated size was incredibly small -
  about 2 bytes. Each segment should have the same predicted size as it is
  calculated simply by dividing the projected size of the entire file by the
  number of segments. Following transcoding, the size was accurate.

Important changes in 2.11 (2022-06-16):

* Feature: Issue #86: Smart transcode now detects if a source file is audio only
  and uses the correct target format. For example, with --destination=webm+mp3, if
  one MP4 input file contains a video stream and another an audio stream only,
  the resulting files will be WebM (for the video input) and mp3 for the audio only
  file.
* Feature: Issue #137: Add --no_subtitles option to turn subtitles off.
* Bugfix: Smart encode selected the video format for cue sheet tracks, regardless
  of the input format. This has been fixed now.
* Bugfix: Fix a crash that occurs when a DVD/Blu-ray is transcoded to audio only.
* Bugfix: If the track performer field in the cuesheet is blank, try album
  performer instead.
* Bugfix: Failing to mount Fuse during "make check" went unnoticed as the result
  code (which was supposed to be 99) was actually 0. Return the correct result
  code, failing the operation as expected.
* Bugfix: The Docker build command contained a "make check" which actually failed
  altogether. Step has been removed. "make check" mounts Fuse, but this requires
  privileges that do not exist during "docker build".
* Bugfix: On error, mremap () returns MAP_FAILED rather than NULL. Fixed a check
  for incorrect error conditions, which could cause the application to crash or
  return illogical error messages.
* Bugfix: Issue #119: Fix a problem that caused frame set generation to fail
  sometimes. It seems to be related to the nremap() issue.
* Generally revisited documentation, logging, and display texts. Improved grammar,
  formatting, and fixed quite a few typos that escaped all proofreading sessions.
* The FFmpeg API INFO and DEBUG level log output has been changed to the
  FFmpegfs DEBUG level. What FFmpeg considers "INFO" is far too chatty.
* Frequent memory reallocations when creating HLS segments have been reduced to
  speed up processing.
* Optimised logging to save CPU time by not formatting log entries that are not
  written anyway at their log level.
* Logging has been revised to shorten file paths and remove mount, input, and
  cache paths. Log the additional portion only to reduce log file size and improve
  readability.
* Bugfix: To fix the build with GCC 12, add the missing include headers
  (closes: #1012925).

Important changes in 2.10 (2022-04-26):

* Feature: Issue #123: New command line option to hide files by extension. Example:
  --hide_extensions=jpg,png,cue would stop covers and cue sheets from showing up.
* Feature: Issue #120: Added subtitle support. Subtitle streams can now also be
  transcoded to the output files. Separate SRT or VTT files will be incorporated
  as subtitle streams.
* Bugfix: Fixed memory leak in encode_audio_frame().
* Bugfix: Issue #122: Last song was missing from cuesheet files.
* Bugfix: Issue #129: Files remained zero size when previously transcoded.
* Bugfix: Issue #130: Fix file sizes can be incorrectly reported by ls but are
  correct when data is read.
* Bugfix: Duration was not saved in cache SQLite database.
* Bugfix: Issue #131: Sometimes video parameters for some Blu-ray or DVD chapters
  cannot be detected by FFmpeg API. Transcode then failes - fixed by using data
  from the Blu-ray directory or DVD IFO instead.
* Lowest supported FFmpeg API version raised to 4.1.8 "al-Khwarizmi".
* Dropped libavresample support, library was removed from FFmpeg API after 3.4.9.
* Deprecated previous channel layout API based on uint64 bitmasks.
* Deprecated swr_alloc_set_opts() and swr_build_matrix().
* Going C++17 now: The packet queue has been recoded in C++17 to support
  external subtitles files. As C++17 is required now, why not go all the way:
  Starting to replace legacy C++ and somewhat C-like parts with real C++.
* Using std::shared_ptr to ensure proper memory allocation/free.

Important changes in 2.9 (2022-02-16):

* Feature: Issue #97: Added options to chose different codecs. The audio codec
  can be selected with --audiocodec, for videos use --videocodec.
* Feature: Issue #109: Allow user defined file extensions for source files. By
  default, only standard extensions are accepted, i.e., mp4, ts, avi etc.
  Arbitrary file extensions can be defined now, e.g. using
  --extensions=xxx,abc,yxz,aaa to also convert files ending with .xxx, .abc and
  so on.
* Feature: Issue #121: Added MKV support. New format can be selected with
  --desttype=mkv.
* Bugfix: Issue #112: Fixed Docker detection.
* Bugfix: Issue #110: Docker build command failed, added missing libchardet
  and allow libdvdread4 or *8 to be used, whatever available.
* Bugfix: Fixed crash when video had no audio.
* Bugfix: Issue #112: Fixed access problems with frame sets and HLS.
* Bugfix: Issue #119: Fixed problem that caused frame set generation to
  fail sometimes.
* Bugfix: Fixed JPG frame set generation. Suddenly FF_COMPLIANCE_UNOFFICIAL was
  required to have FFmpeg API accept the codec.
* Enhancement: Issue #67: Enhance file size prediction.
* Bugfix: Need to synchronise screen log. Concurrent entries by separate flags
  created garbled output.
* Bugfix: Avoid creating an HLS segment number which is out of bounds
  (higher than the expected number of segments).
* Enhancement: Removed QMake support, replaced with CMake.

Important changes in 2.8 (2021-11-29):

* Bugfix: Issue #102: Not all SQL queries where case sensitive, causing cache
  confusion. Several database entries were created, but only one was updated.
  Made all queries case sensitive.
* Bugfix: Issue #91: Fixed HLS problems with cache causing garbled videos and
  hick-ups in audio. Make sure that the cache is clean when transcoding starts.
  There should be no remains left, all segments must be created or recreated
  anyway. Do not append to cache when writing. This caused cache files to
  become larger and larger.
* Enhancement: Issue #103: If requested HLS segment is less than X (adjustable)
  seconds away, discard seek request. Segment would be available very soon
  anyway, and that seek makes a re-transcode necessary. Can be set with
  --min_seek_time_diff. Defaults to 30 seconds.
* Feature: Issue #105: Added Free Lossless Audio Codec (FLAC) support.
  Activate with *--desttype=FLAC*.
* Feature: Issue #101: Sample format for audio files can be selected via
  command line with --audiosamplefmt. Possible values are 0 to use the predefined
  setting, 8, 16, 32, 64 for integer format, F16, F32, F64 for floating point.
  Not all formats are supported by all destination types, selecting an invalid
  format will be reported as error and a list of values printed.
  Defaults to 0 (Use same as source or the predefined format of the destination
  if source format is not possible).

Important changes in 2.7 (2021-11-08):

* Bugfix: Issue #92: Fixed crash when hardware decoding failed. The problem
  is that the FFmpeg API very late reports that it cannot decode the file in
  hardware. To find out about that, the source file must be decoded until the
  first video frame is encountered.
  It would be very time consuming to do this on every file (decode until it
  is clear that the file is supported, then actually start transcoding it
  from scratch). There is no feasible way to automatically handle the
  situation. To get around this a --hwaccel_dec_blocked parameter has been
  added.
  If hardware decoding fails, check the log for a message similar this:
  "[vp9 @ 0x7fe910016080] No support for codec vp9 profile 0."
  If VP9 profile 0 is not supported, the parameter would be:
  --hwaccel_dec_blocked=VP9:0
  This will tell FFmpegfs to decode the file in software. To block VP9
  as a whole, the parameter would be --hwaccel_dec_blocked=VP9. To block
  both profile 0 and 1, use --hwaccel_dec_blocked=VP9:0:1.
  The parameter can be repeated to block even more codecs.
* Bugfix: Issue #96: Fixed potential buffer overrun and crash when reading
  corrupted input files.
* Enhancement: Issue #99: Report command line error if --desttype specifies
  audio format first, or if the second format is not audio only. Avoid
  misinterpretations. For example, --desttype=aiff+mov would create MOV
  files out of any input. Correct would be --desttype=mov+aiff which will
  create MOV files out of videos and AIFF from audio files, as expected.

Important changes in 2.6 (2021-09-04):

* No new features, just a bugfix. See V2.4 for details.

Important changes in 2.5 (2021-06-18)

* Feature: Issue #63 - Hardware acceleration for encoding/decoding is partly
  implemented, VAAPI/MMAL/OMX/V4L2 are currently available only.
  - Supported hardware: V4L2/VAAPI (Intel) and V4L2/MMAL/OMX (Raspberry).
  - VAAPI: H264, H265/HEVC, MPEG-2 and VP-8 decoding and H264 encoding.
  - VAAPI: MJPEG and VC-9 do not work (yet).
  - MMAL: H264, MPEG-2, MPEG-4 and VC1 decoding.
  - OMX: H264 encoding.
  - V4L2: H263, H264, H265, MPEG1/2/4, VC-1, VP8/9 encoding/decoding.
* Feature: Added unit tests for hardware acceleration. Failing tests will
           report as SKIPPED and not fail the whole test.
* Note: Which hardware en/decoder actually works depends on what your hardware
        supports.
* Call for testers: Have a CUDA capable graphics adapter and interested in
  testing? Please write me an E-Mail.

Important changes in 2.4 (2021-09-04)

* Bugfix: Issue #90: Make sure that one keyframe gets inserted at the start of
          each HLS segment.

Important changes in 2.3 (2021-06-11)

* Enhancement: Issue #80: Open input video codec only if target supports
  video. Saves resources: no need to decode video frames if not used.
* Enhancement: Issue #81: If source format has no audio, and the target supports
  no video (e.g.WAV/MP3), the files have shown up zero sized. These will now not
  be visible when doing ls. When trying to open them "File not found" will be
  returned.
* Added "configure --enable-debug" to create binaries with debug symbols.
  Defaults to the optimised version.
* Feature: Issue #73: Cue sheet tracks now play "gapless" if played in order.
  Whenever a track is started, the next track will automatically be transcoded
  as well.
* Feature: Issue #66 and issue #82: Added cue sheet support. If a file with cue
  extension is found with the same name as a media file or if a cue sheet is
  embedded into it (a tag named CUESHEET), tracks defined in it will show up in a
  virtual directory.
* Feature: Issue #83: Character conversion for cue sheet files. Automatically
  detects the character encoding of the cue sheet. and converts as necessary.
* Feature: Issue #78: Duplicate ARTIST to ALBUMARTIST tag if empty
* Feature: Issue #79: Added Docker support.
* Fixed deprecation: 2021-03-17 - f7db77bd87 - lavc 58.133.100 - codec.h
  Deprecated av_init_packet()
* Fixed API compatitbility: Many pointers made const as of 2021-04-27. Although
  reasonable, this breaks API compatibility with versions older than 59.0.100,
* Bugfix: find_original "fallback" method did not correctly handle the new filename
  format (extension added, not the original one replaced).
* Bugfix: Issue #87: Segments are now properly separated, making sure that e.g.
  segment 3 only goes from 30 seconds up to 40 (including 30, but not 40 seconds).
* Bugfix: Issue #88: HLS audio and video now stay in sync after longer playback
  (more than 30 minutes) or after seek operations.

Important changes in 2.2 (2021-02-06)

This is a maintenance release, bugfixes only.

* Bugfix: Issue #75: Fix crash when opening mp3 output with Dolphin.
* Bugfix: Issue #70: Possible crash in Buffer::init: Should not assert if duration is 0
          (and thus segment count 0). Report internal error and go on.
* Bugfix: Issue #70: Do not set duration to 0 from cache but leave unchanged. Caused HLS
          transcoding to fail if more than one transcoder was concurrently started.
* Bugfix: Possible crash in transcoder_thread: Decoder object could have been used
          after being freed.
* Bugfix: Stupid blooper. WAV and AIFF size was always calculated for a mono file,
          thus for stereo files resulting in only half the correct size.
* Bugfix: Corrected documentation, "make checks" should read "make check", funny this
          went unnoticed for over 3 years...
* Bugfix: Issue #74: Album arts were only copied from MP3/4 sources. Removed restriction,
          if the input file contains an album art it will be copied to the target (if
          supported, of course, e.g., to mp3 or mp4. Ogg is not yet supported because
          embedding album arts in Ogg can only be done by an unofficial workaround).
* Bugfix: Issue #71:: Virtual directories were missing dot and dot-dot nodes.

Important changes in 2.1 (2020-12-14)

* Feature: Add BLURAY_VIDEO_FORMAT_2160P (UHD)
* Feature: Implemented in 1.7, removed experimental state for --win_smb_fix now.
           Windows seems to access the files on Samba drives starting at the last 64K segment
           simply when the file is opened. Setting --win_smb_fix=1 will ignore these attempts
           (not decode the file up to this point).
* Feature: --win_smb_fix now defaults to 1 (fix on by default). Has no effect
           if the drive is accessed directly or via Samba from Linux.
* Bugfix: Fixed grammatical error in text: It's "access to", not "access at".
* Bugfix: Did not transcode some source files with invalid DTS.
* Bugfix: Cosmetical - No need to log date/time twice in syslog.
* Bugfix: Cosmetical - Fix man page/online help for --recodesame parameter.
* Bugfix: Report correct segment duration
* Bugfix: Avoid crash if opening next HLS segment failed. Should not ignore this, but report
          it instead and stop transcoding.
* Cosmetical: Log cache close action at trace level
* Cosmetical: Shorter log entry when opening cache files

Important changes in 2.0 (2020-09-13)

Hurray! This is release 2.0!

* Feature: No new features, new release 2.0 after feature freeze.
* Bugfix: Issue #64 - Fixed playback stopping prematurely on some files.

Important changes in 1.99 (2020-07-18)

* Libav support has been dropped. There is no activity on https://git.libav.org/?p=libav.git
  since 21.08.2019, and some features that FFmpegfs required were already lagging behind
  FFmpeg API. Supporting Libav already bound a lot of my time that I could better spend
  on new features or fixes for FFmpegfs.
* Feature: Add PNG/BMP/JPG frame sets to 'make check'. Checks number of files and cp
           operations in arbitrary order with wildcards and absolute file names.
* Feature: Add HLS segments to 'make check'. Checks number of segments, the segment sizes
           and correct file names.
* Feature: Moved FFmpeg capabilities (formats) from --version/-V command to new -caps/-c
           parameter to keep version information brief.
* Bugfix: Issue #61 - fix timeout problem when accessing JPG in arbitrary order.
* Bugfix: Issue #58 - Build list when ls/cp path/to/flles/00001.png is done. Access failed
          because the file was not found.
* Bugfix: Issue #59 - *.m3u8 files were tried to be transcoded while they should simply be
          passed through. Added to ignore and pass through list.
* Bugfix: Issue #57 - Correctly expand tilde when ~/ is used, for example in
          "ffmpegfs --logfile=~/ffmpegfs.log".
* Bugfix: Issue #60 - Reopen cache file after it has been closed so that image frames can
          be accessed after the file has been fully decoded.

Important changes in 1.98 (2020-04-15)

* Cool, there's an online revivew on Linux Uprising, you can read it here:
  https://www.linuxuprising.com/2020/03/ffmpegfs-is-fuse-based-filesystem-for.html
* Support: FFmpegfs has recently been added to Debian sid and Debian Bullseye. It is also
           available in Ubuntu 20.04 and Linux distributions based on it.
* Feature: HLS: Introducing direct segment access. If e.g. segment no. 333 is opened,
           ffmpegfs will seek to this position and start transcoding the segment
           immediately. *Please note that this feature is still experimental and may
           produce unexpected results.*
* Support: No longer creating a user/group ffmpegfs while "make install". The user is not really
           required, just bloats the system's user database.
* Support: Reduced quality of the test video to make the distribution archive slimmer. A full
           HD (1920x1280) video at 60 frames per second was a bit of an overkill anyway.
           720x400 at 30 fps should be enough for everybody.
* Feature: Cache dir changed to ${XDG_CACHE_HOME:-~/.cache}/ffmpegfs (as specified in the XDG
           Base Directory Specification). Falls back to ${HOME:-~/.cache}/ffmpegfs if not
           defined. Only if executed with root privileges, "/var/cache/ffmpegfs" will be used
           (e.g. if invoked via /etc/fstab entry).
* Feature: Changed PTS generation: For DVD/Blu-ray chapters they will not start at 0 for each
           chapter, but at the real time the chapter begins in its title. Fixes #51.
* Feature: Issue #52 - Added --audiochannels option to select a different number of channels.
           Defaults to 2 (stereo), may be set to 1 to create mono files. Set to 0 to keep the
           original number of channels.
* Bugfix: Issue #46 - Ensure the selected bitrate is used. Files could become much larger than
          expected. There's a strange FFmpeg API behaviour behind that, added the solution used
          in ffmpeg.c to fix.
* Bugfix: Issue #48 - Properly handle incorrectly authored DVDs with missing SRI_END_OF_CELL
          marks after cells.
* Bugfix: Issue #49 - Avoid creating HLS last segments shorter than 200 ms, avoid stalls when
          the total playtime is a multiple of the segment size, e.g. 10 seconds.
* Bugfix: Issue #54 - Made sure no duplicate filenames get created. This changes the output name
          scheme, e.g. if two files xyz.ts and xyz.wmv exist and the destination type is mp4,
          two output files named xyz.ts.mp4 and xyz.wmv.mp4 appear. An additional file xyz.mp4
          will show up with its real name.
          To continue using the old names, add --oldnamescheme=1 to the command line.
* Bugfix: Online help and docs state --autocopy=OFF would turn the function off, but this
          actually was NONE. Changed to match documentation.
* Known bug: Libav support for videos seems broken. Not sure if this will be fixed or Libav be
          simply dropped.

Important changes in 1.97 (2020-01-21)

* Support:
* Feature: Added support for HLS (HTTP Live Streaming). Select desttype=hls to enable.
* Feature: Added checks for mov/mp4/prores/webm video format.
* Bugfix: Moved video deinterlace filtering before rescaling. Deinterlace does not work properly on
          rescaled videos, what a suprise. Especially caused strange results on Blu-ray sources,
          created blurred frames if downscaled from HD to SD (or lower) before deinterlacing.
* Bugfix: Avoid EINVAL errors in case the cache file ends up at zero size. Minor problem, but ugly.
* Bugfix: Cache structure was not properly initialised, causing invalid values in the database.
* Bugfix: Properly handle case when start_time is AV_NOPTS_VALUE (frame sets only)
* Bugfix: Corrected mistake in online help: clear-cache should be clear_cache instead.
* Bugfix: Issue #43 - fix garbled first 12 frames. Enhanced overall picture quality.
* Workaround: Issue #45 - fix garbled Blu-ray/DVD playback. Just a workaround, the problem is
              somewhere else.
* Due to copyright uncertanties and because the public domain license used is controversal, all
  demo files in test/srcdir have been replaced with own works and put under the CC0 1.0 Universal
  license.
* Known bug: Libav support for videos seems broken. Not sure if this will be fixed or Libav be
          simply dropped.

Important changes in 1.96 (2019-11-18)

This is a pre-release towards the new version 2.0 coming up soon.

* Feature: Added version check and auto update to cache database. Older database versions will
           now automatically upgraded to the latest structure.
* Feature: Transcode videos to frame works transparently for any input now (DVD, Blu-ray and VideoCD).
* Bugfix:  Fix for "prores can't allocate memory #41".
* Bugfix:  Do not shrink cache when reopening it.
* Known bug:

Important changes in 1.95 (2019-05-23)

This is a pre-release towards the new version 2.0 coming up soon.

* Feature: Added transcode videos to frame images option. Video files can be mounted to folders
           with jpg/png/bmp files for each video frame.
* Feature: Reencode to same file format as source file. Normally files that already have the selected
           output format will not be recoded. Added --recodesame option to allow transcoding to the
           same format.

Important changes in 1.11 (2020-04-15)

* Cool, there's an online revivew on Linux Uprising, you can read it here:
  https://www.linuxuprising.com/2020/03/ffmpegfs-is-fuse-based-filesystem-for.html
* Support: FFmpegfs has recently been added to Debian sid and Debian Bullseye. It is also
           available in Ubuntu 20.04 and Linux distributions based on it.
* Support: No longer creating a user/group ffmpegfs while "make install". The user is not really
           required, just bloats the system's user database.
* Support: Reduced quality of the test video to make the distribution archive slimmer. A full
           HD (1920x1280) video at 60 frames per second was a bit of an overkill anyway.
           720x400 at 30 fps should be enough for everybody.
* Feature: Cache dir changed to ${XDG_CACHE_HOME:-~/.cache}/ffmpegfs (as specified in the XDG
           Base Directory Specification). Falls back to ${HOME:-~/.cache}/ffmpegfs if not
           defined. Only if executed with root privileges, "/var/cache/ffmpegfs" will be used
           (e.g. if invoked via /etc/fstab entry).
* Feature: Changed PTS generation: For DVD/Blu-ray chapters they will not start at 0 for each
           chapter, but at the real time the chapter begins in its title.
* Feature: Issue #52 - Added --audiochannels option to select a different number of channels.
           Defaults to 2 (stereo), may be set to 1 to create mono files. Set to 0 to keep the
           original number of channels.
* Bugfix: Issue #46 - Ensure the selected bitrate is used. Files could become much larger than
          expected. There's a strange FFmpeg API behaviour behind that, added the solution used
          in ffmpeg.c to fix.
* Bugfix: Issue #48 - Properly handle incorrectly authored DVDs with missing SRI_END_OF_CELL
          marks after cells.
* Bugfix: Issue #54 - Made sure no duplicate filenames get created. This changes the output name
          scheme, e.g. if two files xyz.ts and xyz.wmv exist and the destination type is mp4,
          two output files named xyz.ts.mp4 and xyz.wmv.mp4 appear. An additional file xyz.mp4
          will show up with its real name.
          To continue using the old names, add --oldnamescheme=1 to the command line.
* Bugfix: Online help and docs state --autocopy=OFF would turn the function off, but this
          actually was NONE. Changed to match documentation.
* Libav support has been dropped. There is not activity on https://git.libav.org/?p=libav.git
  since 21.08.2019, and some features that FFmpegfs required were already lagging behind FFmpeg
  API. Supporting Libav already bound a lot of my time that I could better spend on new features
  or fixes for FFmpegfs.

Important changes in 1.10 (2020-01-21)

* Feature: Added checks for mov/mp4/prores/webm video format.
* Bugfix: Moved video deinterlace filtering before rescaling. Deinterlace does not work properly on
          rescaled videos, what a suprise. Especially caused strange results on Blu-ray sources,
          created blurred frames if downscaled from HD to SD (or lower) before deinterlacing.
* Bugfix: Avoid EINVAL errors in case the cache file ends up at zero size. Minor problem, but ugly.
* Bugfix: Cache structure was not properly initialised, causing invalid values in the database.
* Bugfix: Skip corrupted and discarded video frames to avoid blurps.
* Bugfix: Corrected mistake in online help: clear-cache should be clear_cache instead.
* Bugfix: Issue #43 - fix garbled first 12 frames. Enhanced overall picture quality.
* Workaround: Issue #45 - fix garbled Blu-ray/DVD playback. Just a workaround, the problem is
              somewhere else.
* Due to copyright uncertanties and because the public domain license used is controversal, all
  demo files in test/srcdir have been replaced with own works and put under the CC0 1.0 Universal
  license.
* Known bug: Libav support for videos seems broken. Not sure if this will be fixed or Libav be
             simply dropped.

Important changes in 1.9 (2019-11-18)

* Support: Code has now been tested to work on ARMv7 (32 bit).
* Feature: Documented the whole project with Doxygen.
* Feature: Implemented a thread pool. File open (and thread starts) are now much faster than before.
           The thread pool also ensures that not more threads than configured are started. Defaults
           to 16x the number of processor cores available.
* Feature: Added Apple Lossles Audio Compression (ALAC) support.
* Feature: Added optional graphviz to configure, only required for Doxygen.
* Feature: Updated INSTALL.md with missing prerequisites. Rearranged paragraphs, mentioning building
           from git first was confusing.
* Feature: Moved cache directory from rather unusual /tmp/ffmpegfs location to /var/cache/ffmpegfs.
* Bugfix: Fixed several warnings if compiled for 32 bit.
* Bugfix: Removed unused xmlint prerequisite from configure.
* Bugfix: Video and audio was out of sync on android devices.
* Bugfix: Fix crash when Blu-ray video without audio was opened.
* Bugfix: Cache files were left at the predicted size if it was larger than the result size.
          Size is now correctly capped to the correct result size.
* Fixed deprecation in fpcompare: 2018-04-01 - f1805d160d - lavfi 7.14.100 - avfilter.h
    Deprecate use of avfilter_register(), avfilter_register_all(),
    avfilter_next(). Added av_filter_iterate().

Important changes in 1.8 (2019-05-23)

This is a bugfix/maintenance release with only a few minor features added.

* Feature: Added Doxygen documentation.
* Feature: Report all errors together with error number.
* Feature: More detailed error handling.
* Feature: Added "make wipe-all" to really clean up all generated files.
* Bugfix: Do not report "Not a directory" error for virtual directories. Not an error, it's a feature.
* Bugfix: Fixed make dist: checks did not work.
* Bugfix: Fixed make clean: some Doxgen files were not removed.
* Bugfix: Properly catch "no memory" errors.
* Bugfix: Deinterlacing filter only worked for YUV videos.
* Bugfix: Removed the check for invalid chapters - did not work as expected.
* Bugfix: Wrong bitrate for PAL (was 30 fps instead of 25 fps) and assume PAL if bits are invalid.
* Bugfix: Fixed potential crash in DVD handling.
* Bugfix: Do not add libavresample if libswresample is present. Saves build time.
* Bugfix: Removed dependency on unused libdvdnav. Saves buildtime.
* Bugfix: Fixed two (probably rare but possible) crashes.
* Bugfix: Image now not converted when the destination type is a video format.

Important changes in 1.7 (2019-02-26)

* Feature: Windows seems to access the files on Samba drives starting at the last 64K segment
           simply when the file is opened. Setting --win_smb_fix=1 will ignore these attempts (not decode the
           file up to this point).
* Feature: Added "Auto Stream Copy" option. This will copy audio or video streams to the output file rather than
           recoding. Reduces computing time and CPU load.
* Feature: Sped up DVD/Blu-ray/VCD access drastically. FUSE calls getattr like crazy, using cached data now.
* Feature: Extended stream copy: now any codec can be copied if supported by target container using --autocopy=MATCH option.
* Feature: Added full virtual titles to DVD, Blu-ray and Video CD. Creating one virtual file per chapter is very nice for
	   music disks as it allows access to every single title very easily. For movies it is better to have it in one
	   piece.
* Feature: Enhanced win_smb_fix=1 functionality to hopefully catch all Windows incidents.
* Feature: Added min_dvd_chapter_duration parameter. DVD chapters shorter than this will be ignored. Defaults to 1 second.
* Bugfix: Decimal seconds in duration was wrong. Fixed.
* Bugfix: This was a bad one: The application crashed with a protection fault if there was not enough disk space
          on the cache drive. This is now properly reported and transcoding aborted. Thanks for Muf for reporting
          the issue.
* Bugfix: Fixed crash when DVD nav packet was missing
* Bugfix: Fixed clang compatibility. Project did not build with clang, this has gone unnoticed for a while...
* Bugfix: Fixed terrible miscalculation of DVD play time. No one told me the values are BCD, not decimal...
* Bugfix: Fixed conversion of DVD chapters consisting of more than one cell.
* Bugfix: Fixed pts/dts generation
* Known bug: Some Blurays are not recoded properly. The resulting files are much larger than expected, as a matter of
             fact larger than the source (birates > 27 MBit). Happens only for some sources.

Important changes in 1.6 (2019-01-11)

* Feature: Made all parameters like --profile case insensitive.
* Feature: Added Apple MOV, Apple Prores and Apple AIFF formats.
* Feature: Enable "Smart Transcoding": To enable, specify --desttype=AUDIO+VIDEO, e.g.
           --desttype=MOV+AIFF will automatically convert video files to MOV and audio
           to AIFF.
* Feature: New parameter --level allows selecting a profile for Prores: proxy, lt, standard
           or hq.
* Feature: Added MOV target format
* Feature: Added AIFF target format
* Feature: Smart conversion option ("Smart Transcode")
* Feature: Added level option for Prores
* Feature: Added Apple Prores support
* Feature: Do not "upgrade" mono audio to stereo. Create mono audio stream.
* Feature: Speed up DVD conversion significantly by using IFO data instead of probing each chapter.
* Feature: Added DVD angle support.Chapters with angles will show as separate files.
* Feature: Speed up Blu-ray conversion significantly by using the directory instead of probing each chapter.
* Feature: Speed up VCD conversion.
* Feature: EXPERIMENTAL: Windows seems to access the files on Samba drives starting at the last 64K segment
           simply when the file is opened. Setting win_smb_fix=1 will ignore these attempts (not decode the file
           up to this point).
* Bugfix: Suspend/decoding timeouts did not work. Transcoding never timed out...
* Bugfix: Fixed memory leak when using the deinterlace option.
* Bugfix: Deinterlace did not always work.
* Bugfix: Fixed memory leaks.
* Bugfix: Report correct error if directory mounted twice.
* Bugfix: Silence chatty log outputs.
* Bugfix: Fixed GPF when accessed.
* Bugfix: Fixed GPF when channel layout changed during playback.
* Bugfix: If transcode failed, the error was sometimes not reported to the client process, causing it to hang.
* Bugfix: Sometimes tried to create WebM files with zero width (failed to transcode).
* Bugfix: Avoid mpeg-4 profile/pixel format mismatches.
* Bugfix: Fixed creating zero sized files from DVDs when chapter playtime < 1 s.
* Bugfix: Update timeout when client just holds the file open without reading.
* Bugfix: Properly honour client exit (end wait for data).
* Bugfix: Issue #23: do not block open with a read waiting for data.
* Bugfix: WebM files had no duration. Added duration to Matroska container.
* Bugfix: Fixed EOF detection for Blu-ray chapters.
* Bugfix: Force mpeg format for DVDs to avoid misdetections.
* Bugfix: Force mpegts format for Blurays to avoid misdetections.
* Bugfix: Take DVD chapter duration from IFO as probed playtime from VOB segment is sometimes wrong.
* Bugfix: Take Blu-ray chapter duration from directory as probed playtime from MTS segment is sometimes wrong.
* Fixed deprecation:

Important changes in 1.5 (2018-06-08)

* Feature: Added WebM output format using VP9 video and Opus audio codec.
* Feature: Input format check is now done by FFmpeg, that means if the input file is
           supported by FFmpeg, it will be transcoded. For performance, files are not
           opened and scanned, the file's extension is checked only (e.g. mp3, wav, rm etc.).
* Feature: Replaced mutagen-inspect with internal code which also works with WAV and WebM.
           test_tags works for all formats now. python-mutagen is no longer required.
* Feature: Check if sample rate or sample format is supported by audio codec and change if
           necessary. Avoid transcode fails e.g. if 44.1KHz sampling rate is requested but
           not supported (e.g. OPUS only supports 8K, 16K, 24K or 48K). Select nearest
           supported sample rate or sample format.

Important changes in 1.4 (2018-05-30)

* The timeout for suspend and abort have been changed. Decoding will now be suspended
  after 15 seconds (formerly 2 minutes). If no activity is detected after further 15 seconds
  (formerly 3 minutes) decoding will be aborted. This will only happen if the file is actively
  closed, so if playback is simply paused decoding will continue. The new limits proofed to
  be fine and reduce system load significantly.

* Feature: Enhanced logging, added a colour profile to screen logs and raised or lowered
           some messages log levels appropriately. Also added a few informative log
           messages.
* Feature: Blu-ray support: Detect Blu-ray files in directories and list separate chapters
           and titles as separate files.
* Feature: DVD support: Detect IFO files and list separate DVD chapters or programs
           as separate files.
* Feature: S/VCD support: Detect Video CDs in directories and list chapters
           as separate files.
* Feature: Changed the fuse operations code module to c++ (minimise danger of
           memory leaks or buffer overruns)
* Feature: Added --enablescript option that will add virtual index.php to every
           directory. It reads scripts/videotag.php from the ffmpegs binary directory.
           This can be very handy to test video playback. Of course, feel free to
           replace videotag.php with your own script.
* Feature: By default ignore decoding errors so that transcoding does not stop just
           because a few frames are garbled. Can be disabled with the "decoding_errors"
           option.

* Bugfix: Sometimes the pixel format could not be detected, raising an assert/application
          crash with newer FFmpeg API versions. Fixed by setting it to the output format.
          This will mostly ever create defect encoder results, but at least the FFmpegfs
          process will not be shut down writing a core file.
* Bugfix: Set mp4 profile to high/3.1 to enable playback under enable playback under
          Win 7.
* Bugfix: Fixed formatting of help text.

* Workaround: Fixed Libav support: Deinterlace code did not compile. Should be possible
              to get it working, but for now it is simply disabled.
              But honestly I don't want to get it working. I am thinking of dropping
              Libav completely.

* Fixed deprecation: 2018-xx-xx - xxxxxxx - lavf 58.9.100 - avformat.h
    Deprecate use of  av_iformat_next(), av_oformat_next().

Important changes in 1.3 (2018-05-04)

Changes in this release:

* Feature: Added option to deinterlace video if required (will improve picture
           quality when viewed in browsers via HTML5.
* Feature: Set stream duration from source file as hint for encoder.
* Feature: Enhanced logging output for better readability.
* Feature: Added pre-buffer option. Files will be decoded up to this limit first
           before made accessible. This ensures smooth startup.
* Feature: Enhanced configure that checks whether libavresample or libswresample
           is present.
* Feature: Improved recoding detection. Files are recoded if the source file size
           or timestamp changes, or different encoding options are selected
           (e.g. a different bitrate, vidoe size etc.).
* Feature: Allow profiles for target browsers or players. Currently selectable:
           NONE     no profile
           FF       optimise for Firefox
           EDGE     optimise for MS Edge and Internet Explorer > 11
           IE       optimise for MS Edge and Internet Explorer <= 11
           CHROME   Google Chrome
           SAFARI   Apple Safari
           OPERA    Opera
           MAXTHON  Maxthon
           Defaults to NONE
* Feature: enhanced error output for SQLite (if supported by library version)
* Feature: copy album arts from source if supported by target format (MP3/4).
           Use --noalbumarts parameter to disable, e.g., for streaming files.

* Bugfix: Only four lines of code: Avoid locking other clients when trying to get
          the size of a file currently being decoded. Also speeds up directory
          access quite significantly.
* Bugfix: Fixed lost frames at end of files (files where cut short)
* Bugfix: Fixed crash when video files were transcoded to audio only (e.g. mp3)
* Bugfix: Make WAV size prediction more accurate
* Bugfix: Recode existing cache files if not found in database (handle database inconsistencies).
* Bugfix: Fixed sharing problems with sqlite database when accessed by multiple instances.
* Bugfix: Files were truncated (mostly mp3) when cp'ed directly while transcoding. Now files
          will have the final size as expected.
* Bugfix: Create valid WAV header for files transcoded on-the-fly.
* Bugfix: Ensure a file gets recoded when the last attempt failed.
* Bugfix: Ensure that transcoding errors get passed on to calling process, e.g. cp or rsync.
          Otherwise copy operations might not notice that the file is invalid.

FFMpeg has evolved, many API parts have been deprecated and will be dropped
soon. This release adopts these changes by conditionally using the new
APIs from the FFMpeg version on that they are available.

* Fixed deprecation: 2017-xx-xx - xxxxxxx - lavr 4.0.0 - avresample.h
    Deprecate the entire library. Merged years ago to provide compatibility
    with Libav, it remained unmaintained by the FFmpeg project and duplicated
    functionality provided by libswresample.
    swresample is the preferred library in FFMpeg, so it will be used if compiled
    with FFMpeg by default, even before being deprecated. With libav, which
    makes libavresample available only, the latter will be used.
* Fixed deprecation: 2016-04-21 - 7fc329e - lavc 57.37.100 - avcodec.h
    Added a new audio/video encoding and decoding API with decoupled input
    and output -- avcodec_send_packet(), avcodec_receive_frame(),
    avcodec_send_frame() and avcodec_receive_packet().
* Fixed deprecation: 2018-01-xx - xxxxxxx - lavf 58.7.100 - avformat.h
    Deprecate AVFormatContext filename field which had limited length, use the
    new dynamically allocated url field instead.
* Fixed deprecation: 2018-xx-xx - xxxxxxx - lavf 58.9.100 - avformat.h
    Deprecate use of av_register_input_format(), av_register_output_format(),
    av_register_all(), av_iformat_next(), av_oformat_next().
    NOTE: av_iformat_next/av_oformat_next() lack a replacement (currently
    still used in tools/probetest.c "static void probe" in 58.10.100)
* Fixed deprecation: 2018-xx-xx - xxxxxxx - lavc 58.10.100 - avcodec.h
    Deprecate use of avcodec_register(), avcodec_register_all(),
    av_codec_next(), av_register_codec_parser(), and av_parser_next().
    Added av_codec_iterate() and av_parser_iterate().
* Fixed deprecation: 2016-04-11 - 6f69f7a / 9200514 - lavf 57.33.100 / 57.5.0 - avformat.h
    Added AVStream.codecpar, deprecate AVStream.codec.
* Fixed deprecation: 2018-04-01 - f1805d160d - lavfi 7.14.100 - avfilter.h
    Deprecate use of avfilter_register(), avfilter_register_all(),
    avfilter_next(). Added av_filter_iterate().

nschlia@oblivion-software.de

Important changes in 1.2 (2018-04-03)

Changes in this release:
* Fixed issue #4: File size was wrong when file was first accessed.
* Fixed issue #5: Fixed crashes when transcoding.
* Feature: None. This a bug fix release.

nschlia@oblivion-software.de

Important changes in 1.1 (2018-03-19)

Changes in this release:
* Fixed: make clean for checks did not delete all logs
* Feature request #1: WAV output support (by github user Avuton)
* Feature: OGG output support
* Fixed: Did not write correct ID3v2 headers (thanks for the fix to gitbug user sdrik)
* Feature: Include configure command line arguments and host OS in "-V" option.
* Feature: Added --videoheight=HEIGHT and --videowidth=WIDTH parameters to allow
  video size change. If source video is larger it will be scaled down.
  If already smaller the size will be left as is. You should only set
  one parameter, if both are set the aspect ratio may be changed and the
  result look strange.
* Feature: Added clear_cache option to clear the whole cache everytime
  the application is started.
* Note: Dropped ISMV option as it did not work as expected, especially creating an
  mp4 on-the-fly did not work. The streamlined mp4 format already does the work.

nschlia@oblivion-software.de

Important changes in 1.00 (2018-01-19)

Changes in this release:
* Cheers! Made it! This is release version 1.0, the first production release.
* Fixed compile for FFmpeg versions prior to 3.0.

nschlia@oblivion-software.de

Important changes in 0.95 (2017-12-29)

NOTE: The cache format has changed and is not compatible with prior versions.
      Please do a "rm -Rf /tmp/ffmpegfs" before starting this version to
      create a new cache.
TODO: see new TODO file from now on.

Changes in this release:
* Heureka! This is the first beta release towards V1.0. From now on only bug
  fixes will go into the code.
* Implemented automatic cache maintenance (ensure cache size, disk space, delete
  outdated entries).
* Fixed checks ("make check" works now. Known problem: mp4 sizes seem to differ
  when using different FFmpeg releases. Will be addressed soon.).
* Fixed mp3 format (The mp3s were completely braindead.).
* Fixed suspend timeout coming although file currently accessed.
* Fixed crash during shutdown because sqlite was used too late.
* Fixed handling of multiple destination types in same cache.
* Properly pass on errno/save and store in cache database.
* Additional database fields for target parameters (bitrate, error code etc.).
  Will be used in later versions to detect if a file needs re-transcoding.
* Files will be recoded if source file changes (size or timestamp).
* Report compiler version when run with -v parameter.
* Set gcc optimisation higer (now -o3).

nschlia@oblivion-software.de

Important changes in 0.94 (2017-12-19)

Changes in this release:
* Decided to rename mp3fs to FFmpegfs because the project has grown far beyond
  a simple clone of mp3fs and the changes it will surely never be pushed back
  to the parent project. A big random applause to the makers of mp3fs for giving
  me a good head start!
* Cache management: Keep cache size within limit, ensure min. disk space, prune
  oldest entries
* Fixed many crashes
* Fixed memory leaks
* Fixed mp4 check suite
* Added mp3 check suite
* Added --disable_cache parameter
* Added --prune_cache parameter. Starts cache pruning manually.
* TODO: Add intelligent stream copy, e.g., if transcoding a transport stream
  that already represents a H264 video stream it would be possible to
  simply repackage it to a mp4 container without recoding.
* TODO: Cover art support still missing

nschlia@oblivion-software.de

Important changes in 0.92-FFmpeg (2017-12-14)

Changes in this release:
* Files will now be decoded to /tmp/ instead of memory.
* Full support for video files (mp4 target only).
* Removed --statcachesize option as caching will be handled by new disk cache.
* Fixed sync problems while accessing the same file concurrently
* Fixed many crashes due to incorrect usage of FFmpeg
* Cache directory user defineable
* Delete cache entries after predefined time
* Detect if file has changed and re-transcode
* Limit cache size
* Suspend transcode after n seconds
* Exit transcode after n seconds
* TODO: Add intelligent stream copy, e.g., if transcoding a transport stream
  that already represents a H264 video stream it would be possible to
  simply repackage it to a mp4 container without recoding.

nschlia@oblivion-software.de

Important changes in 0.91-FFmpeg (2017-10-04)

Added FFmpeg for decoding and encoding.

Changes in this release:
* Replaced decoding and encoding with FFmpeg.
* Removed discrete FLAC/Ogg/MP3 libraries. FFmpeg supports a wide range of
  formats, including these, so they are no longer required.
* TODO: Supports a huge number of file formats now (run "mp3fs --codecs" for
  a list).
* The standard target format is mp4 now (use "-o mp3" or "--output mp3"
  to change back to mp3).
* Many other formats are possible, e.g. "-o ogg", they will be added later
  because due to the manner in which Fuse requires access to the files they
  need to be implemented with care.
* See manual or run "mp3fs -h" for even more new options.
* Run "mp3fs -f" to get a list of all supported input formats.
* Caching of file attributes is now the default as if
  "--statcachesize=500" was given. Added "--statcachesize=0" to turn off
  (not really a bright idea, though).
* TODO: Files will now be decoded to /tmp/ instead of memory if larger
  than 100MB. Added "--maxmemcache=X" to change. Examples for X: 80000,
  80MB or 1GB. Do not set to a too large value as you may run out of
  memory.
* TODO: Support for video files.
* TODO: Add intelligent stream copy, e.g., if transcoding a transport stream
  that already represents a H264 video stream it would be possible to
  simply repackage it to a mp4 container without recoding.

nschlia@oblivion-software.de

Important changes in 0.91 (2014-05-14)

This is mainly bug fixes.

Changes in this release:
* Fixed a segfault caused by an overflow reading the list of available
  decoders.
* A number of problems with the previous distribution tar are now fixed.
* The output of `mp3fs --version` has been made more complete.

Important changes in 0.9 (2014-04-06)

This is a major new release, and brings us very close to a 1.0 release!

Changes in this release:
* All transcoding code has been completely rewritten. Encoding and
  decoding have been abstracted out into base classes defining interfaces
  that can be implemented by different codec classes, with just a FLAC
  decoder and MP3 encoder at the moment.
* The build system has been modified as well to support this usage.
* A number of small bugs or code inefficiencies have been fixed.

Important changes in 0.32 (2012-06-18)

This release has a lot of bug fixes and some code cleanup.

Changes in this release:
* The file size calculation should always be correct.
* A crash affecting programs like scp that might try to access past the
  end of the file has been fixed.
* Too many other little fixes were made to list here. See the ChangeLog
  for full details.

Important changes in 0.31 (2011-12-04)

This is a minor update, with bug fixes and a new feature.

Changes in this release:
* The ReplayGain support added earlier now can be configured through the
  command line.
* Filename translation (from .flac to .mp3) is now fixed on filesystems
  such as XFS that do not populate dirent.d_type.
* A couple other minor bugs fixes and changes were made.

Important changes in 0.30 (2010-12-01)

This is a major new release, and brings mp3fs much closer to an eventual
1.0 release.

Changes in this release:
* Support for additional metadata tags has been added. (From Gregor
  Zurowski)
* Documentation improvements: the help message is more useful, and a man
  page has been added.
* Choosing bitrate is now done with a command-line or mount option, rather
  than the old comma syntax.
* A new option to select LAME encoding quality is now available. (From
  Gregor Zurowski)
* Debug output can be enabled at runtime.
* Old external libraries included in distribution (StringIO, talloc) have
  been removed and replaced.
* Numerous bug fixes have been made. (Some from Gregor Zurowski)

...

0.01 Initial release 06/Aug/2006

========================================================================

Copyright (C) 2010-2014 K. Henriksson
Copyright (C) 2017-2024 Norbert Schlia (FFmpeg support)

This documentation may be distributed under the GNU Free Documentation License
(GFDL) 1.3 or later with no invariant sections, or alternatively under the GNU
General Public License (GPL) version 3 or later.
