1. 31 12月, 2014 2 次提交
  2. 22 12月, 2014 1 次提交
  3. 12 12月, 2014 1 次提交
  4. 23 10月, 2014 2 次提交
    • J
      media-io: Fix repeating video timestamps · a07ebf44
      jp9000 提交于
      In video-io.c, video frames could skip, but what would happen is the
      frame's timestamp would repeat for the next frame, giving the next frame
      a non-monotonic timestamp, and then jump.  This could mess up syncing
      slightly when the frame is finally given to an outputs.
      a07ebf44
    • J
      Change default audio smoothing threshold to 50ms · f6d635e5
      jp9000 提交于
      70 milliseconds is a bit too high for the default audio timestamp
      smoothing threshold.  The full range of error thus becomes 140
      milliseconds, which is a bit more than necessary to worry about.  For
      the time being, I feel it may be worth it to try 50 milliseconds.
      f6d635e5
  5. 12 10月, 2014 1 次提交
  6. 07 10月, 2014 1 次提交
  7. 27 9月, 2014 2 次提交
  8. 26 9月, 2014 1 次提交
    • J
      (API Change) Remove pointers from all typedefs · c9df41c1
      jp9000 提交于
      Typedef pointers are unsafe.  If you do:
      typedef struct bla *bla_t;
      then you cannot use it as a constant, such as: const bla_t, because
      that constant will be to the pointer itself rather than to the
      underlying data.  I admit this was a fundamental mistake that must
      be corrected.
      
      All typedefs that were pointer types will now have their pointers
      removed from the type itself, and the pointers will be used when they
      are actually used as variables/parameters/returns instead.
      
      This does not break ABI though, which is pretty nice.
      c9df41c1
  9. 05 9月, 2014 1 次提交
    • J
      Prevent audio too far from expected timing · dc434380
      jp9000 提交于
      Audio that goes below the minimum expecting timing (current time -
      buffering time) is automatically removed.  However, delayed audio is not
      removed regardless of its delay.  This puts a hard cap of 6 seconds from
      current time that the maximum delay audio can have.  This will also
      prevent the circular buffer from dynamically growing too large.
      dc434380
  10. 31 8月, 2014 2 次提交
    • J
      Perform timestamp smoothing in media-io as well · 5ac364ff
      jp9000 提交于
      Doing timestamp smoothing in obs-source.c is good because timestamps can
      typically operate on a different timebase, however, obs-source.c can
      also change that time base dynamically (such as with async video and
      unexpected timestamp jumps), so in order to ensure that audio is
      seamless in the output as well, perform timestamp smoothing in
      audio-io.c as well just as an extra precautionary measure.
      5ac364ff
    • J
      Move timestamp smooth threshold to media-io · 355d5dab
      jp9000 提交于
      355d5dab
  11. 11 8月, 2014 2 次提交
    • J
      video-io: Add function to just get video format · f36f82b0
      jp9000 提交于
      f36f82b0
    • J
      Fix bug with automatic video scaling · 72fbdc7e
      jp9000 提交于
      This is sort of hard to explain:  the scale_video_output function was
      overwriting the current frame.  If scaling was disabled, it would do
      nothing, and return success, and all would be well.  If it was enabled,
      it would then call the scaler, and then replace the contents of the
      'data' function parameter with the scaled frame data.  The problem with
      this is that I was passing video_output::cur_frame directly, which
      overwrites its previous value with the scaled frame data.  Then if
      cur_frame was not updated on time, it would end up trying to scale the
      previously scaled image, if that makes sense.  it would call the video
      scaler with the same from for both the source and destination.
      
      So the simple fix was to simply use a local variable and pass that in as
      a parameter to prevent this bug from occurring.
      72fbdc7e
  12. 10 8月, 2014 1 次提交
    • J
      (API Change) media-io: Improve naming consistency · 42a0925c
      jp9000 提交于
      Renamed:                        To:
      -----------------------------------------------------------
      audio_output_blocksize          audio_output_get_block_size
      audio_output_planes             audio_output_get_planes
      audio_output_channels           audio_output_get_channels
      audio_output_samplerate         audio_output_get_sample_rate
      audio_output_getinfo            audio_output_get_info
      audio_output_createline         audio_output_create_line
      video_output_getinfo            video_output_get_info
      video_gettime                   video_output_get_time
      video_getframetime              video_output_get_frame_time
      video_output_width              video_output_get_width
      video_output_height             video_output_get_height
      video_output_framerate          video_output_get_frame_rate
      video_output_num_skipped_frames video_output_get_skipped_frames
      video_output_total_frames       video_output_get_total_frames
      42a0925c
  13. 02 8月, 2014 1 次提交
    • J
      Fix automatic scaling bug · b203f361
      jp9000 提交于
      The bug here is that when conversion is active, the source video frame
      is initialized with the destination height/width/format instead of the
      source height/width/format.
      b203f361
  14. 28 7月, 2014 1 次提交
  15. 17 7月, 2014 1 次提交
  16. 02 7月, 2014 1 次提交
    • J
      Implement high encoder CPU usage handling · c7bb73fe
      jp9000 提交于
      This implements the 'frame skipping' mechanism to forcibly cause frames
      to be duplicated in order to reduce encoder complexity so the encoder
      can catch up to the video, otherwise it will continue to be
      progressively behind and will cause a desync of the video.
      
      Typically, if a user gets this issue, they should turn down their
      settings.  For the love of god do not tell them that 'frames are
      skipping', just tell them that CPU usage is high, and that they should
      consider turning down their settings.
      c7bb73fe
  17. 09 6月, 2014 1 次提交
  18. 07 6月, 2014 1 次提交
  19. 03 6月, 2014 1 次提交
  20. 25 5月, 2014 2 次提交
  21. 20 5月, 2014 1 次提交
  22. 10 5月, 2014 2 次提交
  23. 26 4月, 2014 1 次提交
  24. 25 4月, 2014 1 次提交
  25. 24 4月, 2014 2 次提交
  26. 15 4月, 2014 1 次提交
  27. 08 4月, 2014 1 次提交
    • J
      Implement RTMP module (still needs drop code) · 92522d18
      jp9000 提交于
       - Implement the RTMP output module.  This time around, we just use a
         simple FLV muxer, then just write to the stream with RTMP_Write.
         Easy and effective.
      
       - Fix the FLV muxer, the muxer now outputs proper FLV packets.
      
       - Output API:
         * When using encoders, automatically interleave encoded packets
           before sending it to the output.
      
         * Pair encoders and have them automatically wait for the other to
           start to ensure sync.
      
         * Change 'obs_output_signal_start_fail' to 'obs_output_signal_stop'
           because it was a bit confusing, and doing this makes a lot more
           sense for outputs that need to stop suddenly (disconnections/etc).
      
       - Encoder API:
         * Remove some unnecessary encoder functions from the actual API and
           make them internal.  Most of the encoder functions are handled
           automatically by outputs anyway, so there's no real need to expose
           them and end up inadvertently confusing plugin writers.
      
         * Have audio encoders wait for the video encoder to get a frame, then
           start at the exact data point that the first video frame starts to
           ensure the most accrate sync of video/audio possible.
      
         * Add a required 'frame_size' callback for audio encoders that
           returns the expected number of frames desired to encode with.  This
           way, the libobs encoder API can handle the circular buffering
           internally automatically for the encoder modules, so encoder
           writers don't have to do it themselves.
      
       - Fix a few bugs in the serializer interface.  It was passing the wrong
         variable for the data in a few cases.
      
       - If a source has video, make obs_source_update defer the actual update
         callback until the tick function is called to prevent threading
         issues.
      92522d18
  28. 02 4月, 2014 1 次提交
    • J
      Add preliminary FLV/RTMP output (incomplete) · 0cf9e0cf
      jp9000 提交于
       - obs-outputs module:  Add preliminary code to send out data, and add
         an FLV muxer.  This time we don't really need to build the packets
         ourselves, we can just use the FLV muxer and send it directly to
         RTMP_Write and it should automatically parse the entire stream for us
         without us having to do much manual code at all.  We'll see how it
         goes.
      
       - libobs:  Add AVC NAL packet parsing code
      
       - libobs/media-io:  Add quick helper functions for audio/video to get
         the width/height/fps/samplerate/etc rather than having to query the
         info structures each time.
      
       - libobs (obs-output.c):  Change 'connect' signal to 'start' and 'stop'
         signals.  'start' now specifies an error code rather than whether it
         simply failed, that way the client can actually know *why* a failure
         occurred.  Added those error codes to obs-defs.h.
      
       - libobs:  Add a few functions to duplicate/free encoder packets
      0cf9e0cf
  29. 17 3月, 2014 1 次提交
    • J
      Implement encoder interface (still preliminary) · fd37d9e9
      jp9000 提交于
       - Implement OBS encoder interface.  It was previously incomplete, but
         now is reaching some level of completion, though probably should
         still be considered preliminary.
      
         I had originally implemented it so that encoders only have a 'reset'
         function to reset their parameters, but I felt that having both a
         'start' and 'stop' function would be useful.
      
         Encoders are now assigned to a specific video/audio media output each
         rather than implicitely assigned to the main obs video/audio
         contexts.  This allows separate encoder contexts that aren't
         necessarily assigned to the main video/audio context (which is useful
         for things such as recording specific sources).  Will probably have
         to do this for regular obs outputs as well.
      
         When creating an encoder, you must now explicitely state whether that
         encoder is an audio or video encoder.
      
         Audio and video can optionally be automatically converted depending
         on what the encoder specifies.
      
         When something 'attaches' to an encoder, the first attachment starts
         the encoder, and the encoder automatically attaches to the media
         output context associated with it.  Subsequent attachments won't have
         the same effect, they will just start receiving the same encoder data
         when the next keyframe plays (along with SEI if any).  When detaching
         from the encoder, the last detachment will fully stop the encoder and
         detach the encoder from the media output context associated with the
         encoder.
      
         SEI must actually be exported separately; because new encoder
         attachments may not always be at the beginning of the stream, the
         first keyframe they get must have that SEI data in it.  If the
         encoder has SEI data, it needs only add one small function to simply
         query that SEI data, and then that data will be handled automatically
         by libobs for all subsequent encoder attachments.
      
       - Implement x264 encoder plugin, move x264 files to separate plugin to
         separate necessary dependencies.
      
       - Change video/audio frame output structures to not use const
         qualifiers to prevent issues with non-const function usage elsewhere.
         This was an issue when writing the x264 encoder, as the x264 encoder
         expects non-const frame data.
      
         Change stagesurf_map to return a non-const data type to prevent this
         as well.
      
       - Change full range parameter of video scaler to be an enum rather than
         boolean
      fd37d9e9
  30. 11 3月, 2014 1 次提交
    • J
      Fix audio streaming and mac semaphores · 585fd8f9
      jp9000 提交于
      ...The reason why audio didn't work was because I overwrote the bitrate
      values.
      
      As for semaphores, mac doesn't support unnamed semaphores without using
      mach semaphores.  So, I just implemented a semaphore wrapper for each
      OS.
      585fd8f9
  31. 08 3月, 2014 2 次提交
    • J
      UI: Swap audio slots · b2202c48
      jp9000 提交于
      Had the audio restart slot connected to things that didn't require a
      restart
      b2202c48
    • J
      Fix an error and a few warnings · a9f5959b
      jp9000 提交于
      The strings didn't have ending double quotes.  No clue why this didn't
      fail in GCC and VC.  Well, VC is horrible but I expected better out of
      GCC.
      a9f5959b