1. 21 9月, 2015 3 次提交
    • J
      UI: Use better default UI icons · 718035ef
      jp9000 提交于
      718035ef
    • J
      libobs/util: Use gzopen* instead of gzdopen · 0a228d07
      jp9000 提交于
      Using gzdopen will not work properly if the C standard library used to
      get the descriptor is not the same library as the one that was compiled
      with zlib.  When this is the case, it causes zlib to fail to write a
      file, and would report a C standard library error.  Use gzopen and
      gzopen_w instead to ensure that the file is opened and closed by zlib
      itself, ensuring that zlib and the libobs do not have to share the C
      standard library between each other.
      0a228d07
    • J
      cmake: Copy ogg and vorbis libs with avcodec · b9d6c649
      jp9000 提交于
      b9d6c649
  2. 20 9月, 2015 6 次提交
    • J
      UI: Use utvideo for lossless compression · 5d8f0731
      jp9000 提交于
      After some more testing, utvideo not only gives better encoding
      performance, but also better compression and better decoding
      performance.  It's pretty much superior all around over huffyuv.
      5d8f0731
    • J
      UI: Add recording presets to simple output · 54a3e669
      jp9000 提交于
      So certain high-profile individuals were complaining that it was
      difficult to configure recording settings for quality in OBS.  So, I
      decided to add a very easy-to-use auto-configuration for high quality
      encoding -- including lossless encoding.  This feature will
      automatically configure ideal recording settings based upon a specified
      quality level.
      
      Recording quality presets added to simple output:
      
      - Same as stream: Copies the encoded streaming data with no extra usage
        hit.
      
      - High quality: uses a higher CRF value (starting at 23) if using x264.
      
      - Indistinguishable quality: uses a low CRF value (starting at 16) if
        using x264.
      
      - Lossless will spawn an FFmpeg output that uses huffyuv encoding.  If a
        user tries to select lossless, they will be warned both via a dialog
        prompt and a warning message in the settings window to ensure they
        understand that it requires tremendous amounts of free space.  It will
        always use the AVI file format.
      
      Extra Notes:
      
      - When High/Indistinguishable quality is set, it will allow you to
        select the recording encoder.  Currently, it just allows you to select
        x264 (at either veryfast or ultrafast).  Later on, it'll be useful to
        be able to set up pre-configured presets for hardware encoders once
        more are implemented and tested.
      
      - I decided to allow the use of x264 at both veryfast or ultrafast
        presets.  The reasoning is two-fold:
      
        1.) ultrafast is perfectly viable even for near indistinguishable
      quality as long as it has the appropriate CRF value.  It's nice if you
      want to record but would like to or need to reduce the impact of
      encoding on the CPU.  It will automatically compensate for the preset at
      the cost of larger file size.
      
        2.) It was suggested to just always use ultrafast, but ultrafast
      requires 2-4x as much disk space for the same CRF (most likely due to
      x264 compensating for the preset).  Providing veryfast is important if
      you really want to reduce file size and/or reduce blocking at lower
      quality levels.
      
      - When a recording preset is used, a secondary audio encoder is also
        spawned at 192 bitrate to ensure high quality audio.  I chose 192
        because that's the limit of the media foundation aac encoder on
        windows, which I want to make sure is used if available due to its
        high performance.
      
      - The CRF calculation is based upon resolution, quality, and whether
        it's set to ultrafast.  First, quality sets the base CRF, 23 for
        "good" quality, 16 for "very high" quality.  If set to ultrafast,
        it'll subtract 2 points from the CRF value to help compensate.  Lower
        resolutions will also lower the CRF value to help improve higher
        details with a smaller pixel ratio.
      54a3e669
    • J
      UI: Clarify base/scaled resolution text · 27d28606
      jp9000 提交于
      27d28606
    • J
      UI: Default to colorspace 601 instead of 709 · 6d9bb63f
      jp9000 提交于
      Seems that most decoders that don't read the h264 header tend to expect
      601 instead of 709.
      6d9bb63f
    • J
      win-capture: Always have some capture FPS limit · ec5059ce
      jp9000 提交于
      For game capture, if a game is running at for example 800 FPS and limit
      capture framerate is off, it would try to capture all 800 of those
      frames, dramatically reducing performance more than what would ever be
      necessary.
      
      When limit capture framerate is off, instead of capturing all frames,
      capture frames at an interval of twice the OBS FPS, identical to how
      OBS1 works by default.  This should greatly increase performance under
      that circumstance.
      ec5059ce
    • J
      obs-x264: Adjust log message · ddcf2436
      jp9000 提交于
      Use the actual parameter from the x264 params for CRF, and also make
      sure to specify that CRF is meant to be 0 if CBR is enabled.
      ddcf2436
  3. 19 9月, 2015 7 次提交
  4. 18 9月, 2015 5 次提交
    • J
      win-mf: Clean up encoder logging · e077880a
      jp9000 提交于
      e077880a
    • J
      win-mf: Do not register encoder if it can't create · 8280dbc5
      jp9000 提交于
      It seems that certain encoders (quicksync) do not have proper back-end
      support in the windows media foundation libraries for certain CPUs.
      Quicksync doesn't appear to support CPUs that are not haswell (4xxx) or
      above.  It's really annoying, but there's not much we can do about it
      until we implement our own custom quicksync implementation.
      
      This check simply makes it attempt to spawn an encoder to check to see
      whether the encoder can actually be created before registering an
      encoder.
      8280dbc5
    • J
      libobs: Shut down encoder if valid but not active · fb32b85f
      jp9000 提交于
      It's not impossible that this sort of thing could happen, although
      unlikely.
      fb32b85f
    • J
      obs-outputs: Stop output after joining send thread · c107181b
      jp9000 提交于
      The encoders were stopping before processing was completed, which could
      cause the output to access data that's potentially invalidated.
      c107181b
    • J
      win-mf: Fix more issues on encoder shutdown · 88996aef
      jp9000 提交于
      The previous commit (672378d2) was supposed to fix issues with the
      encoder releasing while data was still being processed, but did not
      account for when the encoder has never started up.  That was my fault.
      
      Furthermore, the way in which it was waiting to drain events was
      incorrect.  The encoder may still be active even though there aren't any
      events queued.  The proper way to wait for an async encoder to finish up
      is to process output samples until it requests more input samples.
      88996aef
  5. 17 9月, 2015 7 次提交
    • J
      win-mf: Drain events before releasing encoder · 672378d2
      jp9000 提交于
      After I made it so that the encoder internal data gets destroyed when
      all outputs stop using it (fa7286f8), the media foundation h264 encoder
      started having crashes on shutdown.  After a lot of testing, I realized
      that the reason it started happening is almost assuredly because active
      encoding events had not yet been completed.
      
      After making it wait on those events by calling DrainEvents(true), the
      crashes stopped.  So asynchronous actions were clearly still occurring
      and it was shutting down while data was still being processed, thus
      leading to a crash.
      672378d2
    • J
      Merge pull request #476 from bssteph/master · 7788ccdd
      Jim 提交于
      Clean up Intensity Pro 4K commit a bit
      7788ccdd
    • K
      mac-vth264: Add Apple H264 encoder · 595f451e
      kc5nra 提交于
      Adds a VideoToolbox based H264 encoder for OSX, which most notably
      allows the use of hardware encoding (Quicksync).
      
      NOTES:
      - Hardware encoding is handled by Apple itself internally.  The plugin
        itself has little control over many details due to the way that Apple
        designed the VideoToolbox interface.  Generally however, quicksync is
        used if available on the CPU, and quicksync is almost always available
        due to the fact that macs are exclusively Intel.
      
      - The VideoToolbox does not seem to implement CBR, so it won't be
        available.  These encoders are generally not recommended for
        streaming.
      595f451e
    • J
      win-mf: Add media foundation h264 encoder · afa2985f
      jp9000 提交于
      Implements hardware encoders through the Media Foundation interface
      provided by Microsoft.
      
      Supports:
      - Quicksync (Intel)
      - VCE (AMD)
      - NVENC (NVIDIA, might only be supported through MF on Windows 10)
      
      Notes:
      - NVENC and VCE do not appear to have proper CBR implementations.  This
        isn't a fault of our code, but the Media Foundation libraries.
        Quicksync however appears to be fine.
      afa2985f
    • J
      (API Change) libobs: Pass type data to get_name callbacks · 6285a477
      jp9000 提交于
      API changed from:
      obs_source_info::get_name(void)
      obs_output_info::get_name(void)
      obs_encoder_info::get_name(void)
      obs_service_info::get_name(void)
      
      API changed to:
      obs_source_info::get_name(void *type_data)
      obs_output_info::get_name(void *type_data)
      obs_encoder_info::get_name(void *type_data)
      obs_service_info::get_name(void *type_data)
      
      This allows the type data to be used when getting the name of the
      object (useful for plugin wrappers primarily).
      
      NOTE: Though a parameter was added, this is backward-compatible with
      older plugins due to calling convention.  The new parameter will simply
      be ignored by older plugins, and the stack (if used) will be cleaned up
      by the caller.
      6285a477
    • J
      libobs: Add functions to get private type data · 0ed913a1
      jp9000 提交于
      The private type data is the type_data variable that's provided when
      object types are registered by plugins.
      0ed913a1
    • J
      libobs: Add private data to definition structures · 7920668e
      jp9000 提交于
      This is useful for allowing the ability to have private data associated
      with the object type definition structures.  This private data can be
      useful for things like plugin wrappers for other languages, or providing
      dynamically generated object types.
      7920668e
  6. 16 9月, 2015 5 次提交
  7. 15 9月, 2015 2 次提交
  8. 14 9月, 2015 4 次提交
    • J
      libobs: Shut down encoder when not in use · fa7286f8
      jp9000 提交于
      This prevents encoders (hardware encoders in particular) from being
      continually active when all outputs disconnect from an encoder.  This is
      mostly just a temporary measure; the encoding interface may need a bit
      of a redesign.  It will also definitely needs to be able to flush at
      some point.  Currently when an output is stopped, the pending data is
      discarded, which needs to be fixed.
      fa7286f8
    • J
      libobs: Allow object creation if id not found · af310fb5
      jp9000 提交于
      Allows objects to be created regardless of whether the actual id exists
      or not.  This is a precaution that preserves objects/settings if for
      some reason the id was removed for whatever reason (plugin removed, or
      hardware encoder that disappeared).  This was already added for sources,
      but really needs to be added for other libobs objects as well: outputs,
      encoders, services.
      af310fb5
    • J
      libobs: Remove potential NULL pointer dereference · a746c8cd
      jp9000 提交于
      a746c8cd
    • J
      libobs: Fix cmake bug (make sure variable exists) · df14671d
      jp9000 提交于
      If the FFMPEG_AVCODEC_LIBRARIES variable does not exist, it will
      generate a cmake error, so check to make sure the variable exists before
      executing this code.
      df14671d
  9. 13 9月, 2015 1 次提交
    • M
      obs-ffmpeg: Fix compile error · b266b563
      Mathias Panzenböck 提交于
      This fixes the compile error: "'AVDISCARD_NONINTRA' undeclared" when
      using a libavcodec version earlier than 55.67.100.
      
      Closes jp9000/obs-studio#469
      b266b563