826 Commits

Author SHA1 Message Date
jp9000
661d53067a util: Fix bug with darray_erase_range
Did not multiply the element size for the memory move operation.
2014-10-22 20:32:50 -07:00
jp9000
a07ebf44e6 media-io: Fix repeating video timestamps
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.
2014-10-22 20:32:49 -07:00
jp9000
e4629978e8 Fix a bug where audio would not restart (outputs)
Apparently I unintentionally typed received_video = false twice instead
of one for video and one for audio.

This fixes a bug where audio would not start up again on an output that
had recently started and then stopped.
2014-10-22 20:32:49 -07:00
jp9000
0f2e4f8e0c Fix bug removing output from its previous encoders
When the output sets a new audio/video encoder, it was not properly
removing itself from the previous audio/video encoders it was associated
with.  It was erroneously removing itself from the encoder parameter
instead.
2014-10-22 20:32:48 -07:00
jp9000
d14dbbc540 Add timestamp circlebuf for video input/output
At the start of each render loop, it would get the timestamp, and then
it would then assign that timestamp to whatever frame was downloaded.
However, the frame that was downloaded was usually occurred a number of
frames ago, so it would assign the wrong timestamp value to that frame.

This fixes that issue by storing the timestamps in a circular buffer.
2014-10-22 20:32:48 -07:00
jp9000
381afe0493 Detect audio time values within OS time thresh.
If audio timestamps are within the operating system timing threshold,
always use those values directly as a timestamp, and do not apply the
regular jump checks and timing adjustments that normally occur.

This potentially fixes an issue with plugins that use OS timestamps
directly as timestamp values for their audio samples, and bypasses the
timing conversions to system time for the audio line and uses it
directly as the timestamp value.  It prevents those calculations from
potentially affecting the audio timestamp value when OS timestamps are
used.

For example, if the first set of audio samples from the audio source
came in delayed, while the subsequent samples were not delayed, those
first samples could have potentially inadvertently triggered the timing
adjustments, which would affect all subsequent audio samples.
2014-10-22 20:32:48 -07:00
jp9000
1c40ce6332 Use MAX_TS_VAR for timestamp jump detection
This combines the 'direct' timestamp variance threshold with the maximum
timestamp jump threshold (or rather just removes the max timestamp jump
threshold and uses the timestamp variance threshold for both timestamp
jumps and detecting timestamps).

The reason why this was done was because a timestamp jump could occur at
a higher threshold than the threshold used for detecting OS timestamps
within a certain threshold.  If timestamps got between those two
thresholds it kind of became a weird situation where timestamps could be
sort of 'stuck' back or forward in time more than intended.  Better to
be consistent and use the same threshold for both values.
2014-10-22 20:32:47 -07:00
jp9000
c3f4b0f018 Add flag to obs_source_frame for unbuffered video
Add 'flags' member variable to obs_source_frame structure.

The OBS_VIDEO_UNBUFFERED flags causes the video to play back as soon as
it's received (in the next frame playback), causing it to disregard the
timestamp value for the sake of video playback (however, note that the
video timestamp is still used for audio synchronization if audio is
present on the source as well).

This is partly a convenience feature, and partly a necessity for certain
plugins (such as the linux v4l plugin) where timestamp information for
the video frames can sometimes be unreliable.
2014-10-22 20:32:47 -07:00
jp9000
2c3f9c47d1 Fix a typo ('timetamp') 2014-10-22 20:32:46 -07:00
jp9000
f6d635e586 Change default audio smoothing threshold to 50ms
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.
2014-10-22 20:32:46 -07:00
fryshorts
a2472592d4 Some documentation improvements to obs-encoder.h 2014-10-19 15:00:07 +02:00
fryshorts
b4a5832ec7 Some documentation improvements to obs-service.h 2014-10-19 15:00:07 +02:00
fryshorts
87586d1cf5 Some documentation improvements in obs-source.h 2014-10-19 15:00:07 +02:00
fryshorts
2eadd445d2 Some documentation improvements in obs-module.h 2014-10-19 15:00:07 +02:00
fryshorts
5524711e54 Some documentation improvements in obs-properties.h
Create a stub for the documentation page.
2014-10-19 15:00:07 +02:00
fryshorts
f0db683d0b Some documentation improvements in obs.h
A stub for the main documentation page was created.
2014-10-19 15:00:07 +02:00
jp9000
54b1d7532b Update to version 0.6.2 2014-10-18 14:13:32 -07:00
Palana
8b93ba1c53 Disable blending for colorspace conversion and subsampling only
This should fix blending issues on stream/recording that weren't visible
in the preview
2014-10-14 17:40:48 +02:00
jp9000
76d538611a Initialize default_rect_effect only with OpenGL
Instead of limiting this to an apple-specific define, just limit it to
OpenGL -- because this particular effect file cannot be used with
Direct3D.
2014-10-14 06:47:25 -07:00
jp9000
69fc9fb7fc Free graphics subsystem if graphics fails to load
The graphics subsystem was not being freed here, for example if a
required effect failed to compile it would still successfully have the
graphics subsystem sans required effect.  The graphics subsystem should
be completely shut down if required libobs effects fail to compile.
2014-10-14 01:44:59 -07:00
jp9000
9eab73ea85 Do not init default_rect effect if not on mac 2014-10-14 01:44:20 -07:00
jp9000
caa32cb6d1 Add support for shared textures to graphics API 2014-10-13 21:56:42 -07:00
jp9000
2e2b4a5e90 Log dropped frame count
This was sorely needed for debugging stream issues.
2014-10-12 19:22:04 -07:00
Palana
4247a7b81e Add media remuxer to media-io 2014-10-12 06:27:33 +02:00
jp9000
964ee75ea0 Update to version 0.6.0 2014-10-11 20:29:17 -07:00
fryshorts
5894054521 Fix small bug in timestamp smoothing for audio sources
Due to a small error in the timestamp smoothing code the timestamp of
audio packages that were too early was always set to the next expected
timestamp, even if the difference was bigger than the smoothing threshold.

This would cause obs to simply append all audio data to the buffer even if
the real timestamp was way smaller than the next that was expected.

This should reduce corruption problems with for example the pulseaudio
plugin, which resends data under certain conditions.
2014-10-09 22:25:29 +02:00
jp9000
e78c54e8e5 libobs/media-io: Add more audio debug output 2014-10-06 18:49:53 -04:00
Jim
5af4000110 Merge pull request #274 from reboot/fix_crash_on_video_init_error
Fix crash in obs_get_video_info when video_output_get_info returns NULL
2014-10-05 14:18:04 -07:00
Christoph Hohmann
1abda41c20 Fix crash in obs_get_video_info when video_output_get_info returns NULL 2014-10-05 22:33:53 +02:00
Christoph Hohmann
3e74e96649 Fix calculation of physical memory on linux systems
As stated in the sysinfo manpage the totalram field in the sysinfo
structure is in mem_unit sizes since Linux 2.3.23. To get the actual
memory in the system the totalram value has to be multiplied with the
mem_unit size.
2014-10-05 13:01:19 -07:00
Palana
2edac33c58 libobs/util: Write 0 character when converting empty strings
Fixes log_windows_version logging garbage for build when running with
debug heap enabled (assuming osvi.szCSDVersion is an empty string)
2014-10-04 21:48:08 +02:00
Palana
0f15cc143e Add obs_get_default_rect_effect
This provides a default effect for users of GL_TEXTURE_RECTANGLE/textures
that return true for gs_texture_is_rect
2014-10-03 20:18:01 +02:00
Palana
b99c378e33 Add 'update_properties' signal and obs_source_update_properties call
obs_source_update_properties should be called by sources when property
values change, e.g. a capture device source would use this when it
detects a new capture device (in case its properties contain a list of
available capture devices or similar)
2014-10-01 15:39:57 +02:00
Palana
94a93abb2b (API Change) Pass data to get_properties when possible 2014-10-01 15:39:57 +02:00
Palana
74c4932184 Sort obs_data_items by name
This allows for easier comparison between two obs_data_t and it will make

const char *json1 = obs_data_get_json(data);
obs_data_t *data_ = obs_data_create_from_json(json1);
const char *json2 = obs_data_get_json(data_);

produce the same string in json1 and json2
2014-10-01 15:32:49 +02:00
BtbN
8841ea8a6f cmake: Export plugin data destination 2014-09-27 09:41:32 -07:00
BtbN
599febcb54 cmake: Replace FFMpeg modules with single module
Now using components instead of one find_package call per module
2014-09-27 09:41:13 -07:00
BtbN
9dd341a3ed cmake: Properly check for Threading support 2014-09-26 22:52:30 -07:00
jp9000
41fad2d1a4 (API Change) Use const params where applicable
This Fixes a minor flaw with the API where data had to always be mutable
to be usable by the API.

Functions that do not modify the fundamental underlying data of a
structure should be marked as constant, both for safety and to signify
that the parameter is input only and will not be modified by the
function using it.
2014-09-26 17:23:07 -07:00
jp9000
05ac1aea2c Do not modify gs_init_data parameter in gs_create 2014-09-26 16:31:20 -07:00
jp9000
05f89f48ea Ensure num_backbuffers > 0 in gs_swapchain_create 2014-09-26 16:31:20 -07:00
GoaLitiuM
10f5d7f3aa Fixed NULL pointer dereferencing in linked lists 2014-09-27 01:35:36 +03:00
jp9000
c9df41c1e2 (API Change) Remove pointers from all typedefs
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.
2014-09-25 21:48:11 -07:00
jp9000
732d24caa1 Remove unused variables 2014-09-19 18:46:25 -07:00
kc5nra
26cf4688c2 Add interaction support to libobs 2014-09-15 17:19:37 -05:00
jp9000
2446f62180 Do not call dlclose on modules
This apparently can cause issues with certain modules (as noted by
faruton with his browser plugin)
2014-09-12 20:36:35 -07:00
jp9000
1abcdd7f50 WinHandle: Do not close handle on operator &
This is not a com pointer; it should not release/close the handle when
an & operator is used, it should only return the handle value.  Clearing
is only used on assignment.
2014-09-12 20:36:32 -07:00
jp9000
11b0fe122c Improve async source render timing
This helps ensure that an asynchronous video source is played as close
to its framerate as possible, reduces the risk of duplication as
much as possible, and helps to ensure that playback is as smooth as
possible.
2014-09-12 20:36:31 -07:00
jp9000
52e08249f1 Only render async frames to texture once per frame
This prevents multiple needless calls to obs_source_get_frame and other
functions.  If the texture has already been processed, then just render
it as-is in any subsequent calls to obs_source_video_render.
2014-09-12 20:36:31 -07:00
BtbN
895ad80759 Add api to get module data and binary paths 2014-09-04 14:03:47 -07:00