Commit Graph

2598 Commits (c2c47b1169b272498bdd6ffb1416f6d518200059)

Author SHA1 Message Date
jp9000 506e30da10 libobs: Do not clear frame cache if 0,0 dimension
Previously I had it set so that it would set the async_width and
async_height variables to 0,0 if a null frame occurs, but the problem
with this is that it was inadvertently cause the frame cache to clear
when it starts receiving textures again because it detects it as a size
change.

So instead of changing async_width and async_height to 0 when a null
frame occurs, change it so that if the source is set to an inactive
state, make obs_source_get_width/_get_height return 0 for their
dimensions instead.
2015-03-25 10:02:58 -07:00
jp9000 26206f6af4 libobs: Use reference counting with source frames
When a frame is processed by a filter, it comes directly from the
source's video frame cache.  However, if a filter is using or processing
those frames for whatever reason, there would be no guarantee that the
frames would persist during processing, and frames could eventually be
deallocated unexpected, for example when the resolution or format
changes.

So the solution is to implement simple reference counting for the frames
so that the frames will exist until they have been released by any
source or filter that's using them.
2015-03-25 10:02:57 -07:00
Gol-D-Ace f374c7198e rtmp-services: Update Vaughn Live / iNSTAGIB.tv ingests 2015-03-24 21:37:25 +01:00
Palana 724690d77e UI: Update window titles on source name change 2015-03-24 14:51:56 +01:00
kc5nra 946b9d01e3 obs-ffmpeg: Clearer meaning for ClearMediaOnEnd 2015-03-24 07:25:57 -05:00
kc5nra dd2d6494a1 obs-ffmpeg: Add clear on media end option
Clears source video when the media stream ends.
2015-03-24 00:21:24 -05:00
kc5nra 8effe2c635 deps-libff: Send NULL frame to callback if EOF
A null frame send to the frame callback signals
the end of media being played.  Null frames are not
sent for looped media
2015-03-24 00:18:48 -05:00
kc5nra c7ad555eae obs-ffmpeg: Handle null frames in frame callbacks
This is in preparation of an API change that will send null
frames to signal the end of the media being played.
2015-03-24 00:16:35 -05:00
kc5nra b091b03291 obs-ffmpeg: Split definition and assignment 2015-03-24 00:12:10 -05:00
kc5nra 94e58057fd deps-libff: Fix sequence-point warning
Silly code that pre-incremented a value while also assigning
it to the same value.
2015-03-23 22:28:08 -05:00
kc5nra f1f5484b16 deps-libff: Skip further decode refresh if aborted
Skip decode refresh scheduling if the abort flag is
set when the timer fails to start.  This avoids extraneous
refresh scheduling when tearing down the decoders.
2015-03-23 22:16:39 -05:00
kc5nra f47b02df3f deps-libff: Add proper ff_timer_init error checks 2015-03-23 22:16:39 -05:00
kc5nra e868af285e deps-libff: Fix mingw using wrong pthread header
When compiling under mingw it was using the w32-pthreads
instead of the shared mingw pthread library.
2015-03-23 22:16:39 -05:00
kc5nra 54baa1a369 obs-ffmpeg: Change from sws_* cacheing to our own
Since sws_getCachedContext possibly logs a message every
time it is used (depending on the input), use our own caching
logic to minimize log spam.
2015-03-23 22:14:42 -05:00
jp9000 2e1eb4d7eb decklink: Fix log message 2015-03-22 20:54:18 -07:00
jp9000 716ef61cf9 decklink: Don't use error log if not supported
Using LOG_ERROR here isn't really necessary, it just means that there's
no blackmagic support.
2015-03-22 19:18:20 -07:00
jp9000 ebee67097a libobs: Prevent video cache clear on first frame
Fix a bug where when a source first starts up its async cache, it
unintentionally resets its cache, which means that the first few frames
would be lost.
2015-03-22 19:18:19 -07:00
jp9000 2d5c6dfae9 win-capture: Rename 'Monitor' to 'Display' capture
The name 'Monitor' is a bit inconsistent with what it's called by the
operating system.
2015-03-22 19:18:18 -07:00
jp9000 5247434d14 win-dshow: Change avermedia encoder names 2015-03-22 19:18:17 -07:00
jp9000 24053f4a9c win-dshow: Fix bad settings causing frozen video
If the settings are reset to defaults or if the settings are just bad,
the video would get stuck on the last frame that was displayed, which
feels a bit awkward.  Best to make it stop video output entirely rather
than get stuck on the last video frame.
2015-03-22 19:18:16 -07:00
jp9000 d5631dd1f8 win-dshow: Make devices active by default
Having devices not active by default may cause confusion for some users.
2015-03-22 19:18:16 -07:00
jp9000 81d671f106 UI: Add int/float slider to property view 2015-03-22 19:18:15 -07:00
jp9000 17adf8f35e UI: Add floating point slider control 2015-03-22 19:18:14 -07:00
kc5nra dac3fd88e0 UI: Fix potential memory leak in properties
When hitting the Cancel button, cleanup code needs to go through the
reject() callback as well.
2015-03-22 19:18:13 -07:00
jp9000 87965fa9eb UI: Clear list boxes in ::closeEvent
Ensures that ->deleteLater events are put in to the event queue before
the destructor is called.
2015-03-22 19:18:12 -07:00
jp9000 6b3d30ef03 UI: Flush event queue before obs_shutdown
Sometimes events with rogue source references are in the event queue
when the program is shutting down.  This can cause the program to
reference freed data.  Processing those remaining events before shutting
down solves the issue.
2015-03-22 19:18:12 -07:00
jp9000 c4ef2522ad UI: Destroy save timer before closing main window
This prevents the save timer from unexpectedly going off during the
middle of the save process.
2015-03-22 19:18:11 -07:00
jp9000 7014076169 UI: Make list selection in dark theme more visible
When an item is selected but not focused, it would be too similar to the
non-selected color.
2015-03-22 19:18:10 -07:00
jp9000 363d8b890d UI: Store proper window pos/size
Only store the last restored (non-maximized and non-minimized) window
position and size on exit.
2015-03-22 19:18:09 -07:00
jp9000 f3104d92d5 mac-capture: If channels above 8, force to stereo
Certain devices (particularly certain mixers and soundflower 64ch) would
have an arbitrary number of channels, and wouldn't really be mappable to
a specific speaker layout supported by libobs.

So to fix this issue, if the channel count is above 8, force the data to
stereo to ensure playback can still occur, rather than cause it to just
fail.
2015-03-22 19:18:08 -07:00
jp9000 d44d3b1f0a libobs: Use locale-independent double conversion
Prevents issues on specific locales, especially where decimal points are
represented by commas rather than periods.
2015-03-22 19:18:07 -07:00
jp9000 4abae186ce libobs: Use alpha when rendering scenes
This is just in case a filter is applied to a scene, filters will turn
off the blending so it's necessary to set the blending.
2015-03-22 19:18:06 -07:00
jp9000 0a8e3a643c libobs: Add int/float slider properties
This optionally specifies that the int/float value should be displayed
with a slider rather than and up/down control.  UIs are not necessarily
required to implement it, it's meant to be more of a hint.
2015-03-22 19:18:06 -07:00
jp9000 e20ec366b2 Make capture sources w/o alpha use opaque effect
This fixes an issue primarily with filter rendering: when capturing
windows and displays, their alpha channel is almost always 0, causing
the image to be completely invisible unintentionally.  The original fix
for this for many sources was just to turn off the blending, which would
be fine if you're not rendering any filters, but filters will render to
render targets first, and that lack of alpha will end up carrying over
in to the final image.

This doesn't apply to any mac captures because mac actually seems to set
the alpha channel to 1.
2015-03-22 19:18:05 -07:00
jp9000 9b238ef71e libobs: Add obs_get_opaque_effect function
This returns a common effect useful for rendering an image with the
alpha channel overridden to 1.0.
2015-03-22 19:18:04 -07:00
jp9000 e4305d147b libobs: Fix default negative int/float shader vals
If negative was specified it would not parse the negative sign and thus
would not interpret that number as negative, and would cause
shader/effect parsing to simply fail on the file.
2015-03-22 19:17:41 -07:00
jp9000 cdb27ac06b libobs: Add functions to push/pop blend states
This is particularly important for the filter pipeline in order to
ensure that when the last filter is reached that the original blend
state is properly reset.
2015-03-22 18:38:49 -07:00
jp9000 233004631f linux-capture: Mark captures as custom drawn
The linux window and monitor captures draw in a custom way, therefore
they must be marked as types of sources that do custom rendering.
2015-03-22 18:38:49 -07:00
jp9000 699201a06e libobs: Cache effects to prevent shader duplicates
Switching between shaders often can cause a performance hit, so cache
effects so that they persist until the graphics subsystem is destroyed.
2015-03-22 18:38:48 -07:00
jp9000 2abf7b057a libobs-opengl: Fix bug switching render targets
If a render target was switched from one to another and then back
consecutively, the texture would not get reattached at the last point
due to the fact that the cur_render_target variable of the FBO storage
structure would already be set to that texture, and then it would never
get reattached because it thought it was already using that render
target.

So to fix this, any time a render target legitimately changes from one
to another, it sets the cur_render_target and cur_zstencil_buffer
variables of the FBO structure to null.
2015-03-22 18:38:47 -07:00
jp9000 86e56a5c4e libobs-opengl: Do not fail if shader param unused
I encountered a scenario where effects might reference shader parameters
that may not potentially exist, this isn't particularly a bad thing that
needs to return failure.  It just needs to gracefully ignore it.
2015-03-22 18:38:46 -07:00
jp9000 2fa37a1f2e libobs-opengl: Fix render targets being flipped
When render targets are used, they output to the render target inverted
due to the way that opengl works.  This fixes that issue by inverting
the projection matrix so that it renders the image upside down and
inverting the front face from counterclockwise to clockwise.
2015-03-22 18:38:45 -07:00
jp9000 84d16fed8e libobs-opengl: Assign texture units to shader vars
Texture units were not being properly associated with the shader uniform
variables.
2015-03-22 18:38:45 -07:00
jp9000 2a06beea45 test-input: Fix potential lockup in test filter
obs_leave_graphics() may not be properly called if this returns null for
whatever reason.
2015-03-22 18:38:44 -07:00
jp9000 1647674754 test-input: Set test filter to partially green
Mostly used for testing, partially green allows us to gauge whether or
not multiple filters are being properly applied
2015-03-22 18:38:43 -07:00
jp9000 13046145f7 libobs: Fix filter dimension issue
The wrong function was being used to recurse through the filter chain in
obs_source_process_filter, obs_source_get_[width/height] would get the
post-effect dimensions rather than the pre-effect dimensions.
2015-03-22 18:38:40 -07:00
jp9000 95e63992cb libobs: Fix filter rendering bug
The parameters order was wrong; sort of a rare thing to see, but it can
happen, especially when it's a function that's not used very often.
2015-03-22 18:28:12 -07:00
jp9000 76a9c90043 libobs: Clarify filter-related comments
Certain callbacks and API functions were a bit vague on when and how
they were supposed to be used.
2015-03-22 18:28:11 -07:00
jp9000 38cb1ed39b libobs: Make filter_video callback param non-const
The frame is definitely meant to be modifiable if needed, so it
shouldn't be const.  I originally meant for these frames to be
duplicated, but with the source video cache that's both unnecessary and
would reduce performance.
2015-03-22 18:28:11 -07:00
kc5nra 798f38cf72 deps-libff: Fix if hw accel fails to load codec
Fixes a bug where get_format was overloaded by our own version
when forcing the codec to load with a HW decoder and not
reset to the original get_format if it failed to load.
2015-03-22 18:58:49 -05:00