- 05 1月, 2019 1 次提交
-
-
由 Colin Edwards 提交于
-
- 23 4月, 2018 1 次提交
-
-
由 jp9000 提交于
Reduces GPU usage when encoding is not active. Does not perform color conversion, frame staging, or frame downloading unless encoding is explicitly active.
-
- 04 1月, 2018 1 次提交
-
-
由 jp9000 提交于
Allows the ability to have a callback invoked every time video ticks. Particularly useful for scripting.
-
- 02 1月, 2018 1 次提交
-
-
由 jp9000 提交于
(Note: This commit also modifies UI and test) This makes it so that main preview panes are rendered with the main output texture rather than re-rendering the main view. The view will render all objects again, whereas the output texture will be a single texture render of the same exact thing. Also fixes some abnormal artifacting when scaling the main preview pane.
-
- 28 10月, 2017 1 次提交
-
-
由 jp9000 提交于
This is to prevent confusion with video_thread in libobs/media-io/video-io.c, which is used exclusively for video encoding/output. Also prevents confusion in the profiler log data.
-
- 04 10月, 2017 1 次提交
-
-
由 jp9000 提交于
Ensures that any rand() calls in the video thread will have a unique seed to start from.
-
- 13 9月, 2017 1 次提交
-
-
由 Palana 提交于
-
- 13 5月, 2017 1 次提交
-
-
由 jp9000 提交于
Useful for real-time rendering statistics
-
- 07 5月, 2017 1 次提交
-
-
由 jp9000 提交于
Optionally allows drawing directly to the primary output instead of having to use a source to draw.
-
- 23 8月, 2016 1 次提交
-
-
由 jp9000 提交于
Allows getting the current active framerate that the core is rendering with. This takes in to account any rendering lag or stalls that may be occurring.
-
- 29 6月, 2016 1 次提交
-
-
由 jp9000 提交于
Allows the ability to use scale filters such as point, bicubic, lanczos on specific scene items, disabled by default. When using one of the latter two options, if the item's scale is under half of the source's original size, it uses the bilinear low resolution downscale shader instead.
-
- 27 1月, 2016 1 次提交
-
-
由 jp9000 提交于
(Note: This commit breaks libobs compilation. Skip if bisecting) These variables are considered obsolete and will no longer be needed.
-
- 26 1月, 2016 1 次提交
-
-
由 jp9000 提交于
This has been missing for a bit too long, and should make it easier/faster to diagnose issues users might be having.
-
- 22 12月, 2015 1 次提交
-
-
由 jp9000 提交于
This was originally used for calculating audio volume if transitions were active, but transitions won't work that way so tracking the active transitions is no longer needed.
-
- 15 10月, 2015 1 次提交
-
-
由 jp9000 提交于
Use explicit UTF-8 byte sequence for the "no-break space" character. Prevents issues with certain editors, and fixes the following compiler warning on Visual C++: warning C4819: The file contains a character that cannot be represented in the current code page (X). Save the file in Unicode format to prevent data loss
-
- 12 8月, 2015 2 次提交
- 05 8月, 2015 1 次提交
-
-
由 jp9000 提交于
(Non-compiling commit: windowless-context branch) API Changed: --------------------- Removed functions: - obs_add_draw_callback - obs_remove_draw_callback - obs_resize - obs_preview_set_enabled - obs_preview_enabled Removed member variables from struct obs_video_info: - window_width - window_height - window Summary: --------------------- Changes the core libobs API to not be dependent upon a main window/view. If you wish to draw to a window/view, use an obs_display object to handle it. This allows the use of libobs without requiring a window to be present on the system. This is also prunes code that had to be needlessly duplicated to handle the "main" window.
-
- 25 7月, 2015 1 次提交
-
-
由 Anthony Catel 提交于
A minor optimization: in copy_rgbx_frame (used when libobs is set to output RGBA frames instead of YUV frames), if the line sizes for the source and destination match, just use a single memcpy call for all of the data instead of multiple memcpy calls.
-
- 05 6月, 2015 1 次提交
-
-
由 jp9000 提交于
The "clamped" video time is the system time per video frame that is closest to the current system time, but always divisible by the frame interval. For example, if the last frame system timestamp was 1600 and the new frame is 2500, but the frame interval is 800, then the "clamped" video time is 2400. This clamped value is useful to get the relative system time without any jitter.
-
- 07 5月, 2015 1 次提交
-
-
由 Palana 提交于
-
- 18 4月, 2015 1 次提交
-
-
由 jp9000 提交于
Adds the ability to natively output with planar YUV 4:4:4.
-
- 16 4月, 2015 1 次提交
-
-
由 jp9000 提交于
RGB output wasn't occurring due to the fact that the frame simply wasn't being copied.
-
- 10 4月, 2015 1 次提交
-
-
由 jp9000 提交于
The normal scaling methods cannot sample enough pixels to create an accurate output image when the output size is under half the base size, so use the bilinear low resolution scaling effect in that case instead to ensure a more accurate low resolution image.
-
- 15 1月, 2015 1 次提交
-
-
由 jp9000 提交于
Direct3D textures are usually aligned to a specific pitch, so their internal width is often not equal to the expected output width; this means that if we want to use it on our texture output, that we must de-align the texture while copying the texture data. However, I unintentionally messed up the calculation at some point with RGBA textures, so the variable size I was supposed to be using was supposed to be multiplied by 4 (for RGBA), while I was still expecting single channel data. So, if the texture width was something like 1332, the source (directx) texture line size would be somewhere at or above 5328 (because it's RGBA), then destination is at 1332 (YUV luma plane), and it would unintentionally treat 3996 (or 5328 - 1332) bytes as the unused alignment data. So this fixes that miscalculation.
-
- 06 1月, 2015 1 次提交
-
-
由 jp9000 提交于
The return value of os_sleepto_ns is true if it waited to the specified time, and false if the current time is past the specified time. So it basically returns true if it successfully waited. I just didn't check the return value properly here, so it ended up just setting the count of frames to 1 if overshot, ultimately causing sync issues.
-
- 03 1月, 2015 1 次提交
-
-
由 jp9000 提交于
Helps identify which threads are which when debugging
-
- 31 12月, 2014 1 次提交
-
-
由 jp9000 提交于
Previously, the design for the interaction between the encoder thread and the graphics thread was that the encoder thread would signal to the graphics thread when to start drawing each frame. The original idea behind this was to prevent mutually cascading stalls of encoding or graphics rendering (i.e., if rendering took too long, then encoding would have to catch up, then rendering would have to catch up again, and so on, cascading upon each other). The ultimate goal was to prevent encoding from impacting graphics and vise versa. However, eventually it was realized that there were some fundamental flaws with this design. 1. Stray frame duplication. You could not guarantee that a frame would render on time, so sometimes frames would unintentionally be lost if there was any sort of minor hiccup or if the thread took too long to be scheduled I'm guessing. 2. Frame timing in the rendering thread was less accurate. The only place where frame timing was accurate was in the encoder thread, and the graphics thread was at the whim of thread scheduling. On higher end computers it was typically fine, but it was just generally not guaranteed that a frame would be rendered when it was supposed to be rendered. So the solution (originally proposed by r1ch and paibox) is to instead keep the encoding and graphics threads separate as usual, but instead of the encoder thread controlling the graphics thread, the graphics thread now controls the encoder thread. The encoder thread keeps a limited cache of frames, then the graphics thread copies frames in to the cache and increments a semaphore to schedule the encoder thread to encode that data. In the cache, each frame has an encode counter. If the frame cache is full (e.g., the encoder taking too long to return frames), it will not cache a new frame, but instead will just increment the counter on the last frame in the cache to schedule that frame to encode again, ensuring that frames are on time and reducing CPU usage by lowering video complexity. If the graphics thread takes too long to render a frame, then it will add that frame with the count value set to the total amount of frames that were missed (actual legitimately duplicated frames). Because the cache gives many frames of breathing room for the encoder to encode frames, this design helps improve results especially when using encoding presets that have higher complexity and CPU usage, minimizing the risk of needlessly skipped or duplicated frames. I also managed to sneak in what should be a bit of an optimization to reduce copying of frame data, though how much of an optimization it ultimately ends up being is debatable. So to sum it up, this commit increases accuracy of frame timing, completely removes stray frame duplication, gives better results for higher complexity encoding presets, and potentially optimizes the frame pipeline a tiny bit.
-
- 28 12月, 2014 1 次提交
-
-
由 jp9000 提交于
This changes the way source volume handles transitioning between being active and inactive states. The previous way that transitioning handled volume was that it set the presentation volume of the source and all of its sub-sources to 0.0 if the source was inactive, and 1.0 if active. Transition sources would then also set the presentation volume for sub-sources to whatever their transitioning volume was. However, the problem with this is that the design didn't take in to account if the source or its sub-sources were active anywhere else, so because of that it would break if that ever happened, and I didn't realize that when I was designing it. So instead, this completely overhauls the design of handling transitioning volume. Each frame, it'll go through all sources and check whether they're active or inactive and set the base volume accordingly. If transitions are currently active, it will actually walk the active source tree and check whether the source is in a transitioning state somewhere. - If the source is a sub-source of a transition, and it's not active outside of the transition, then the transition will control the volume of the source. - If the source is a sub-source of a transition, but it's also active outside of the transition, it'll defer to whichever is louder. This also adds a new callback to the obs_source_info structure for transition sources, get_transition_volume, which is called to get the transitioning volume of a sub-source.
-
- 15 12月, 2014 1 次提交
-
-
由 jp9000 提交于
This adds bicubic and lanczos scaling capability to libobs to improve scaling quality and sharpness when the output resolution has to be scaled relative to the base resolution. Bilinear is also available, although bilinear has rather poor quality and causes scaling to appear blurry. If the output resolution is close to the base resolution, then bilinear is used instead as an optimization, as there's no need to use these shaders if scaling is not in use. The Bicubic and Lanczos effects are also exposed via exported function to allow the ability to use those shaders in plugin modules if desired. The API change adds a variable 'scale_type' to the obs_video_info structure that allows the user interface to choose what type of scaling filter should be used.
-
- 12 12月, 2014 1 次提交
-
-
由 jp9000 提交于
This was an important change because we were originally using an hard-coded 709/partial range color matrix for the output, which was causing problems for people wanting to use different formats or color spaces. This will now automatically generate the color matrix depending on the format, color space, and range, or use an identity matrix if the video format is RGB instead of YUV.
-
- 08 12月, 2014 1 次提交
-
-
由 jp9000 提交于
On certain GPUs, if you don't flush and the window is minimized it can endlessly accumulate memory due to what I'm assuming are driver design flaws (though I can't know for sure). The flush seems to prevent this from happening, at least from my tests. It would be nice if this weren't necessary.
-
- 23 10月, 2014 1 次提交
-
-
由 jp9000 提交于
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.
-
- 14 10月, 2014 1 次提交
-
-
由 Palana 提交于
This should fix blending issues on stream/recording that weren't visible in the preview
-
- 26 9月, 2014 1 次提交
-
-
由 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.
-
- 10 8月, 2014 2 次提交
-
-
由 jp9000 提交于
Summary: - Prefix all graphics subsystem names with gs_ or GS_ - Unsquish funciton names (for example _setfloat to _set_float) - Changed create functions to be more consistent with the rest of the API elsewhere. For exmaple, instead of gs_create_texture/gs_texture_destroy, it's now gs_texture_create/gs_texture_destroy - Renamed gs_stencil_op enum to gs_stencil_op_type From: To: ----------------------------------------------------------- tvertarray gs_tvertarray vb_data gs_vb_data vbdata_create gs_vbdata_create vbdata_destroy gs_vbdata_destroy shader_param gs_shader_param gs_effect gs_effect effect_technique gs_effect_technique effect_pass gs_effect_pass effect_param gs_effect_param texture_t gs_texture_t stagesurf_t gs_stagesurf_t zstencil_t gs_zstencil_t vertbuffer_t gs_vertbuffer_t indexbuffer_t gs_indexbuffer_t samplerstate_t gs_samplerstate_t swapchain_t gs_swapchain_t texrender_t gs_texrender_t shader_t gs_shader_t sparam_t gs_sparam_t effect_t gs_effect_t technique_t gs_technique_t eparam_t gs_eparam_t device_t gs_device_t graphics_t graphics_t shader_param_type gs_shader_param_type SHADER_PARAM_UNKNOWN GS_SHADER_PARAM_UNKNOWN SHADER_PARAM_BOOL GS_SHADER_PARAM_BOOL SHADER_PARAM_FLOAT GS_SHADER_PARAM_FLOAT SHADER_PARAM_INT GS_SHADER_PARAM_INT SHADER_PARAM_STRING GS_SHADER_PARAM_STRING SHADER_PARAM_VEC2 GS_SHADER_PARAM_VEC2 SHADER_PARAM_VEC3 GS_SHADER_PARAM_VEC3 SHADER_PARAM_VEC4 GS_SHADER_PARAM_VEC4 SHADER_PARAM_MATRIX4X4 GS_SHADER_PARAM_MATRIX4X4 SHADER_PARAM_TEXTURE GS_SHADER_PARAM_TEXTURE shader_param_info gs_shader_param_info shader_type gs_shader_type SHADER_VERTEX GS_SHADER_VERTEX SHADER_PIXEL GS_SHADER_PIXEL shader_destroy gs_shader_destroy shader_numparams gs_shader_get_num_params shader_getparambyidx gs_shader_get_param_by_idx shader_getparambyname gs_shader_get_param_by_name shader_getviewprojmatrix gs_shader_get_viewproj_matrix shader_getworldmatrix gs_shader_get_world_matrix shader_getparaminfo gs_shader_get_param_info shader_setbool gs_shader_set_bool shader_setfloat gs_shader_set_float shader_setint gs_shader_set_int shader_setmatrix3 gs_shader_setmatrix3 shader_setmatrix4 gs_shader_set_matrix4 shader_setvec2 gs_shader_set_vec2 shader_setvec3 gs_shader_set_vec3 shader_setvec4 gs_shader_set_vec4 shader_settexture gs_shader_set_texture shader_setval gs_shader_set_val shader_setdefault gs_shader_set_default effect_property_type gs_effect_property_type EFFECT_NONE GS_EFFECT_NONE EFFECT_BOOL GS_EFFECT_BOOL EFFECT_FLOAT GS_EFFECT_FLOAT EFFECT_COLOR GS_EFFECT_COLOR EFFECT_TEXTURE GS_EFFECT_TEXTURE effect_param_info gs_effect_param_info effect_destroy gs_effect_destroy effect_gettechnique gs_effect_get_technique technique_begin gs_technique_begin technique_end gs_technique_end technique_beginpass gs_technique_begin_pass technique_beginpassbyname gs_technique_begin_pass_by_name technique_endpass gs_technique_end_pass effect_numparams gs_effect_get_num_params effect_getparambyidx gs_effect_get_param_by_idx effect_getparambyname gs_effect_get_param_by_name effect_updateparams gs_effect_update_params effect_getviewprojmatrix gs_effect_get_viewproj_matrix effect_getworldmatrix gs_effect_get_world_matrix effect_getparaminfo gs_effect_get_param_info effect_setbool gs_effect_set_bool effect_setfloat gs_effect_set_float effect_setint gs_effect_set_int effect_setmatrix4 gs_effect_set_matrix4 effect_setvec2 gs_effect_set_vec2 effect_setvec3 gs_effect_set_vec3 effect_setvec4 gs_effect_set_vec4 effect_settexture gs_effect_set_texture effect_setval gs_effect_set_val effect_setdefault gs_effect_set_default texrender_create gs_texrender_create texrender_destroy gs_texrender_destroy texrender_begin gs_texrender_begin texrender_end gs_texrender_end texrender_reset gs_texrender_reset texrender_gettexture gs_texrender_get_texture GS_BUILDMIPMAPS GS_BUILD_MIPMAPS GS_RENDERTARGET GS_RENDER_TARGET gs_device_name gs_get_device_name gs_device_type gs_get_device_type gs_entercontext gs_enter_context gs_leavecontext gs_leave_context gs_getcontext gs_get_context gs_renderstart gs_render_start gs_renderstop gs_render_stop gs_rendersave gs_render_save gs_getinput gs_get_input gs_geteffect gs_get_effect gs_create_effect_from_file gs_effect_create_from_file gs_create_effect gs_effect_create gs_create_vertexshader_from_file gs_vertexshader_create_from_file gs_create_pixelshader_from_file gs_pixelshader_create_from_file gs_create_texture_from_file gs_texture_create_from_file gs_resetviewport gs_reset_viewport gs_set2dmode gs_set_2d_mode gs_set3dmode gs_set_3d_mode gs_create_swapchain gs_swapchain_create gs_getsize gs_get_size gs_getwidth gs_get_width gs_getheight gs_get_height gs_create_texture gs_texture_create gs_create_cubetexture gs_cubetexture_create gs_create_volumetexture gs_voltexture_create gs_create_zstencil gs_zstencil_create gs_create_stagesurface gs_stagesurface_create gs_create_samplerstate gs_samplerstate_create gs_create_vertexshader gs_vertexshader_create gs_create_pixelshader gs_pixelshader_create gs_create_vertexbuffer gs_vertexbuffer_create gs_create_indexbuffer gs_indexbuffer_create gs_gettexturetype gs_get_texture_type gs_load_defaultsamplerstate gs_load_default_samplerstate gs_getvertexshader gs_get_vertex_shader gs_getpixelshader gs_get_pixel_shader gs_getrendertarget gs_get_render_target gs_getzstenciltarget gs_get_zstencil_target gs_setrendertarget gs_set_render_target gs_setcuberendertarget gs_set_cube_render_target gs_beginscene gs_begin_scene gs_draw gs_draw gs_endscene gs_end_scene gs_setcullmode gs_set_cull_mode gs_getcullmode gs_get_cull_mode gs_enable_depthtest gs_enable_depth_test gs_enable_stenciltest gs_enable_stencil_test gs_enable_stencilwrite gs_enable_stencil_write gs_blendfunction gs_blend_function gs_depthfunction gs_depth_function gs_stencilfunction gs_stencil_function gs_stencilop gs_stencil_op gs_setviewport gs_set_viewport gs_getviewport gs_get_viewport gs_setscissorrect gs_set_scissor_rect gs_create_texture_from_iosurface gs_texture_create_from_iosurface gs_create_gdi_texture gs_texture_create_gdi gs_is_compressed_format gs_is_compressed_format gs_num_total_levels gs_get_total_levels texture_setimage gs_texture_set_image cubetexture_setimage gs_cubetexture_set_image swapchain_destroy gs_swapchain_destroy texture_destroy gs_texture_destroy texture_getwidth gs_texture_get_width texture_getheight gs_texture_get_height texture_getcolorformat gs_texture_get_color_format texture_map gs_texture_map texture_unmap gs_texture_unmap texture_isrect gs_texture_is_rect texture_getobj gs_texture_get_obj cubetexture_destroy gs_cubetexture_destroy cubetexture_getsize gs_cubetexture_get_size cubetexture_getcolorformat gs_cubetexture_get_color_format volumetexture_destroy gs_voltexture_destroy volumetexture_getwidth gs_voltexture_get_width volumetexture_getheight gs_voltexture_get_height volumetexture_getdepth gs_voltexture_getdepth volumetexture_getcolorformat gs_voltexture_get_color_format stagesurface_destroy gs_stagesurface_destroy stagesurface_getwidth gs_stagesurface_get_width stagesurface_getheight gs_stagesurface_get_height stagesurface_getcolorformat gs_stagesurface_get_color_format stagesurface_map gs_stagesurface_map stagesurface_unmap gs_stagesurface_unmap zstencil_destroy gs_zstencil_destroy samplerstate_destroy gs_samplerstate_destroy vertexbuffer_destroy gs_vertexbuffer_destroy vertexbuffer_flush gs_vertexbuffer_flush vertexbuffer_getdata gs_vertexbuffer_get_data indexbuffer_destroy gs_indexbuffer_destroy indexbuffer_flush gs_indexbuffer_flush indexbuffer_getdata gs_indexbuffer_get_data indexbuffer_numindices gs_indexbuffer_get_num_indices indexbuffer_gettype gs_indexbuffer_get_type texture_rebind_iosurface gs_texture_rebind_iosurface texture_get_dc gs_texture_get_dc texture_release_dc gs_texture_release_dc
-
由 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
-
- 09 8月, 2014 2 次提交
-
-
由 jp9000 提交于
API Removed: - graphics_t obs_graphics(); Replaced With: - void obs_enter_graphics(); - void obs_leave_graphics(); Description: obs_graphics() was somewhat of a pointless function. The only time that it was ever necessary was to pass it as a parameter to gs_entercontext() followed by a subsequent gs_leavecontext() call after that. So, I felt that it made a bit more sense just to implement obs_enter_graphics() and obs_leave_graphics() functions to do the exact same thing without having to repeat that code. There's really no need to ever "hold" the graphics pointer, though I suppose that could change in the future so having a similar function come back isn't out of the question. Still, this at least reduces the amount of unnecessary repeated code for the time being.
-
由 jp9000 提交于
For the sake of naming consistency with the rest of obs.h, prefix this structure and associated functions with obs_. Renamed structures: - struct source_frame (now obs_source_frame) Renamed functions: - source_frame_init (now obs_source_frame_init) - source_frame_free (now obs_source_frame_free) - source_frame_create (now obs_source_frame_create) - source_frame_destroy (now obs_source_frame_destroy) Affected functions: - obs_source_output_video - obs_source_get_frame - obs_source_release_frame
-
- 26 6月, 2014 1 次提交
-
-
由 jp9000 提交于
Similar to the shader functions, the effect parameter functions take the effect as a parameter. However, the effect parameter is pretty pointless, because the effect parameter.. parameter stores the effect pointer interally.
-