FFmpegfs NEWS

Important changes in 1.10 (2020-01-21)

* Support:
* 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 Bluray 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 Bluray/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 Bluray 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/Bluray/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, Bluray 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 compatiblity. 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 Bluray 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 Bluray 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 Bluray 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: Bluray support: Detect bluray 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 checks" 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-2020 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.
