1. 05 Jul, 2015 9 commits
    • Michael Niedermayer's avatar
      avcodec/avuienc: Use ff_alloc_packet() · c0db6320
      Michael Niedermayer authored
      This should be faster in theory for AVUI, no speed difference
      meassurable though
      Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
      c0db6320
    • Michael Niedermayer's avatar
      0e7bbdbe
    • Michael Niedermayer's avatar
      avcodec/rawenc: Use ff_alloc_packet() instead of ff_alloc_packet2() · 47496eb9
      Michael Niedermayer authored
      the later is not optimal when the buffer size is well known at allocation time
      
      This avoids a memcpy()
      Overall 2.5% speedup with a random 1920x1080 video
      Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
      47496eb9
    • Rostislav Pehlivanov's avatar
      aacenc: implement Intensity Stereo encoding support · e8576dc8
      Rostislav Pehlivanov authored
      This commit implements intensity stereo coding support
      to the native aac encoder. This is a way to increase the efficiency
      of the encoder by zeroing the right channel's spectral coefficients
      (in a channel pair) and rederiving them in the decoder using information
      from the scalefactor indices of special band types. This commit
      confomrs to the official ISO 13818-7 specifications, although due to
      their ambiguity certain deviations have been taken to ensure maximum
      sound quality. This commit has been extensively tested and has shown
      to not result in audiable audio artifacts unless in extreme cases.
      This commit also adds an option, aac_is, which has the value of
      0 by default. Intensity Stereo is part of the scalable aac profile
      and is thus non-default.
      
      The way IS coding works is that it rederives the right channel's
      spectral coefficients from the left channel via the scalefactor
      index values left in the right channel. Since an entire band's
      spectral coefficients do not need to be coded, the encoder's
      efficiency jumps up and it unzeroes some high frequency values
      which it previously did not have enough bits to encode. That way
      less information is lost than the information lost by rederiving
      the spectral coefficients with some error. This is why the
      filesize of files encoded with IS do not decrease significantly.
      Users wishing that IS coding should reduce filesize are expected
      to reduce their encoding bitrates appropriately.
      
      This is V2 of the commit. The old version did not mark ms_mask as
      0 since M/S and IS coding are incompactible, which resulted in
      distortions with M/S coding enabled. This version also improves
      phase detection by measuring it for every spectral coefficient in
      the band and using a simple majority rule to determine whether the
      coefficients are in or out of phase. Also, the energy values per
      spectral coefficient were changed as to reflect the
      official specifications.
      Reviewed-by: 's avatarClaudio Freire <klaussfreire@gmail.com>
      Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
      e8576dc8
    • Rostislav Pehlivanov's avatar
      aacenc: add support for coding of IS spectral coefficients · 0b233900
      Rostislav Pehlivanov authored
      This commit adds support for the coding of intensity stereo spectral
      coefficients. It also fixes the Mid/Side coding of band_types higher
      than RESERVED_BT (M/S must not be applied to their spectral coefficients,
      but marking M/S as present in encode_ms_info() is okay). Much
      of the changes here were taken from the decoder and inverted.
      This commit does not change the functionality of the decoder as the
      previous patch in this series zeroes ms_mask and is_mask.
      Reviewed-by: 's avatarClaudio Freire <klaussfreire@gmail.com>
      Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
      0b233900
    • Rostislav Pehlivanov's avatar
      aaccoder: add a new perceptual noise substitution implementation · 38fd4c2e
      Rostislav Pehlivanov authored
      This commit finalizes the PNS implementation previously added to the encoder
      by moving it to a seperate function search_for_pns() and thus making it
      coder-generic. This new implementation makes use of the spread field of
      the psy bands and the lambda quality feedback paremeter. The spread of the
      spectrum in a band prevents PNS from being used excessively and thus preserve
      more phase information in high frequencies.  The lambda parameter allows
      the number of PNS-marked bands to vary based on the lambda parameter and the
      amount of bits available, making better choices on which bands are to be marked
      as noise. Comparisons with the previous PNS implementation can be found
      here: https://trac.ffmpeg.org/attachment/wiki/Encode/AAC/
      
      This is V2 of the patch, the changes from the previous version being that this
      version uses the new band->spread metric from aacpsy and normalizes the
      energy using the group size. These changes were suggested by Claudio Freire
      on the mailing list. Another change is the use of lambda to alter the
      frequency threshold. This change makes the actual threshold frequencies
      vary between +-2Khz of what's specified, depending on frame encoding performance.
      Reviewed-by: 's avatarClaudio Freire <klaussfreire@gmail.com>
      Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
      38fd4c2e
    • Rostislav Pehlivanov's avatar
      aaccoder: remove previous PNS implementation from twoloop · 117b15f4
      Rostislav Pehlivanov authored
      This commit undoes commit c5d4f87e
      and removes PNS band marking from the twoloop coder, which has
      been reimplemented in a better way in this series of patches.
      Reviewed-by: 's avatarClaudio Freire <klaussfreire@gmail.com>
      Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
      117b15f4
    • Rostislav Pehlivanov's avatar
      aacenc: use the new function for setting special band scalefactor indices · e06578e3
      Rostislav Pehlivanov authored
      This commit enables the function added with commit 7c10b87b and uses that
      new function for setting any special scalefactor indices. This commit does
      not change the behaviour of the encoder since no bands are being marked as
      either NOISE_BT(due to the previous PNS implementation removed in the
      previous commit) or INTENSITY_BT2/INTENSITY_BT.
      Reviewed-by: 's avatarClaudio Freire <klaussfreire@gmail.com>
      Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
      e06578e3
    • Philip Langdale's avatar
      avcodec/nvenc: Add support for H.264 High 444 Predictive encoding · 671bdd4b
      Philip Langdale authored
      Newer versions of the nvenc hardware support The High 444 Predictive profile
      of H.264, and can also do lossless encoding under this profile if desired.
      
      This change introduces support for the profile, and exposes the appropriate
      presets for requesting lossless encoding.
      
      I tested lossless by generating a baseline sample with testsrc converted
      to raw yuv444p, then encoded the sample with nvenc, then did a framemd5
      comparision of both the raw video and the nvenc encode. The framemd5
      reports were identical.
      Signed-off-by: 's avatarPhilip Langdale <philipl@overt.org>
      Signed-off-by: 's avatarTimo Rothenpieler <timo@rothenpieler.org>
      671bdd4b
  2. 03 Jul, 2015 3 commits
  3. 04 Jul, 2015 1 commit
  4. 03 Jul, 2015 26 commits
  5. 02 Jul, 2015 1 commit