Projects
Multimedia
obs-studio
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 52
View file
obs-studio.changes
Changed
@@ -1,4 +1,21 @@ ------------------------------------------------------------------- +Fri Nov 17 22:46:45 UTC 2017 - jimmy@boombatower.com + +- Update to version 20.1.3: + * libobs: Update to version 20.1.3 + * libobs: Fix FFmpeg constants + * libobs: Update to version 20.1.2 + * libobs-d3d11: Allow rebuild even if output duplicator fails + * graphics-hook: blacklist OpenGL capture for "cm_client.exe" + * UI: Fix custom ffmpeg output file / URL entry + * linux-pulseaudio: Get correct default device + * libobs: Rename obs_video_thread to obs_graphics_thread + * libobs: Use new ffmpeg constants + * obs-ffmpeg: Use new ffmpeg constants + * deps/media-playback: Use new ffmpeg constants + * UI: Log when output timer events stop outputs + +------------------------------------------------------------------- Thu Oct 26 05:22:23 UTC 2017 - jimmy@boombatower.com - Update to version 20.1.1:
View file
obs-studio.spec
Changed
@@ -1,5 +1,5 @@ Name: obs-studio -Version: 20.1.1 +Version: 20.1.3 Release: 0 Summary: A recording/broadcasting program Group: Productivity/Multimedia/Video/Editors and Convertors
View file
_service
Changed
@@ -1,7 +1,7 @@ <services> <service name="tar_scm" mode="disabled"> <param name="versionformat">@PARENT_TAG@</param> - <param name="revision">refs/tags/20.1.1</param> + <param name="revision">refs/tags/20.1.3</param> <param name="url">git://github.com/jp9000/obs-studio.git</param> <param name="scm">git</param> <param name="changesgenerate">enable</param>
View file
_servicedata
Changed
@@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">git://github.com/jp9000/obs-studio.git</param> - <param name="changesrevision">bf7561934ed098a4cf3c885f5e55febb23cac563</param> + <param name="changesrevision">350e7a76121937535d6e71ca61655c0fe810614c</param> </service> </servicedata>
View file
obs-studio-20.1.1.tar.xz/UI/forms/OBSBasicSettings.ui -> obs-studio-20.1.3.tar.xz/UI/forms/OBSBasicSettings.ui
Changed
@@ -1878,7 +1878,7 @@ <item row="1" column="1"> <widget class="QStackedWidget" name="stackedWidget_2"> <property name="currentIndex"> - <number>1</number> + <number>0</number> </property> <widget class="QWidget" name="page_5"> <layout class="QHBoxLayout" name="horizontalLayout_12">
View file
obs-studio-20.1.1.tar.xz/UI/frontend-plugins/frontend-tools/output-timer.cpp -> obs-studio-20.1.3.tar.xz/UI/frontend-plugins/frontend-tools/output-timer.cpp
Changed
@@ -208,11 +208,13 @@ void OutputTimer::EventStopStreaming() { + blog(LOG_INFO, "Stopping stream due to OutputTimer timeout"); obs_frontend_streaming_stop(); } void OutputTimer::EventStopRecording() { + blog(LOG_INFO, "Stopping recording due to OutputTimer timeout"); obs_frontend_recording_stop(); }
View file
obs-studio-20.1.1.tar.xz/deps/media-playback/media-playback/decode.c -> obs-studio-20.1.3.tar.xz/deps/media-playback/media-playback/decode.c
Changed
@@ -24,8 +24,8 @@ while (hwa) { if (hwa->id == id) { - if (hwa->pix_fmt == AV_PIX_FMT_VDA_VLD || - hwa->pix_fmt == AV_PIX_FMT_DXVA2_VLD || + if (hwa->pix_fmt == AV_PIX_FMT_VIDEOTOOLBOX || + hwa->pix_fmt == AV_PIX_FMT_DXVA2_VLD || hwa->pix_fmt == AV_PIX_FMT_VAAPI_VLD) { c = avcodec_find_decoder_by_name(hwa->name); if (c) @@ -142,8 +142,8 @@ return false; } - if (d->codec->capabilities & CODEC_CAP_TRUNCATED) - d->decoder->flags |= CODEC_FLAG_TRUNCATED; + if (d->codec->capabilities & CODEC_CAP_TRUNC) + d->decoder->flags |= CODEC_FLAG_TRUNC; return true; }
View file
obs-studio-20.1.1.tar.xz/deps/media-playback/media-playback/decode.h -> obs-studio-20.1.3.tar.xz/deps/media-playback/media-playback/decode.h
Changed
@@ -36,6 +36,14 @@ #pragma warning(pop) #endif +#if LIBAVCODEC_VERSION_MAJOR >= 58 +#define CODEC_CAP_TRUNC AV_CODEC_CAP_TRUNCATED +#define CODEC_FLAG_TRUNC AV_CODEC_FLAG_TRUNCATED +#else +#define CODEC_CAP_TRUNC CODEC_CAP_TRUNCATED +#define CODEC_FLAG_TRUNC CODEC_FLAG_TRUNCATED +#endif + struct mp_media; struct mp_decode {
View file
obs-studio-20.1.1.tar.xz/libobs-d3d11/d3d11-duplicator.cpp -> obs-studio-20.1.3.tar.xz/libobs-d3d11/d3d11-duplicator.cpp
Changed
@@ -171,6 +171,10 @@ ComPtr<IDXGIResource> res; HRESULT hr; + if (!d->duplicator) { + return false; + } + hr = d->duplicator->AcquireNextFrame(0, &info, res.Assign()); if (hr == DXGI_ERROR_ACCESS_LOST) { return false;
View file
obs-studio-20.1.1.tar.xz/libobs-d3d11/d3d11-rebuild.cpp -> obs-studio-20.1.3.tar.xz/libobs-d3d11/d3d11-rebuild.cpp
Changed
@@ -305,7 +305,11 @@ ((gs_pixel_shader*)obj)->Rebuild(dev); break; case gs_type::gs_duplicator: - ((gs_duplicator*)obj)->Start(); + try { + ((gs_duplicator*)obj)->Start(); + } catch (...) { + ((gs_duplicator*)obj)->Release(); + } break; case gs_type::gs_swap_chain: ((gs_swap_chain*)obj)->Rebuild(dev);
View file
obs-studio-20.1.1.tar.xz/libobs/media-io/media-remux.c -> obs-studio-20.1.3.tar.xz/libobs/media-io/media-remux.c
Changed
@@ -26,6 +26,12 @@ #include <sys/types.h> #include <sys/stat.h> +#if LIBAVCODEC_VERSION_MAJOR >= 58 +#define CODEC_FLAG_GLOBAL_H AV_CODEC_FLAG_GLOBAL_HEADER +#else +#define CODEC_FLAG_GLOBAL_H CODEC_FLAG_GLOBAL_HEADER +#endif + struct media_remux_job { int64_t in_size; AVFormatContext *ifmt_ctx, *ofmt_ctx; @@ -95,7 +101,7 @@ out_stream->codec->codec_tag = 0; if (job->ofmt_ctx->oformat->flags & AVFMT_GLOBALHEADER) - out_stream->codec->flags |= CODEC_FLAG_GLOBAL_HEADER; + out_stream->codec->flags |= CODEC_FLAG_GLOBAL_H; } #ifndef _NDEBUG
View file
obs-studio-20.1.1.tar.xz/libobs/obs-config.h -> obs-studio-20.1.3.tar.xz/libobs/obs-config.h
Changed
@@ -41,7 +41,7 @@ * * Reset to zero each major or minor version */ -#define LIBOBS_API_PATCH_VER 1 +#define LIBOBS_API_PATCH_VER 3 #define MAKE_SEMANTIC_VERSION(major, minor, patch) \ ((major << 24) | \
View file
obs-studio-20.1.1.tar.xz/libobs/obs-ffmpeg-compat.h -> obs-studio-20.1.3.tar.xz/libobs/obs-ffmpeg-compat.h
Changed
@@ -20,3 +20,12 @@ # define av_frame_free avcodec_free_frame #endif +#if LIBAVCODEC_VERSION_MAJOR >= 58 +#define CODEC_CAP_TRUNC AV_CODEC_CAP_TRUNCATED +#define CODEC_FLAG_TRUNC AV_CODEC_FLAG_TRUNCATED +#define INPUT_BUFFER_PADDING_SIZE AV_INPUT_BUFFER_PADDING_SIZE +#else +#define CODEC_CAP_TRUNC CODEC_CAP_TRUNCATED +#define CODEC_FLAG_TRUNC CODEC_FLAG_TRUNCATED +#define INPUT_BUFFER_PADDING_SIZE FF_INPUT_BUFFER_PADDING_SIZE +#endif
View file
obs-studio-20.1.1.tar.xz/libobs/obs-internal.h -> obs-studio-20.1.3.tar.xz/libobs/obs-internal.h
Changed
@@ -394,7 +394,7 @@ extern struct obs_core *obs; -extern void *obs_video_thread(void *param); +extern void *obs_graphics_thread(void *param); extern gs_effect_t *obs_load_effect(gs_effect_t **effect, const char *file);
View file
obs-studio-20.1.1.tar.xz/libobs/obs-video.c -> obs-studio-20.1.3.tar.xz/libobs/obs-video.c
Changed
@@ -585,7 +585,7 @@ static const char *tick_sources_name = "tick_sources"; static const char *render_displays_name = "render_displays"; static const char *output_frame_name = "output_frame"; -void *obs_video_thread(void *param) +void *obs_graphics_thread(void *param) { uint64_t last_time = 0; uint64_t interval = video_output_get_frame_time(obs->video.video); @@ -599,7 +599,7 @@ const char *video_thread_name = profile_store_name(obs_get_profiler_name_store(), - "obs_video_thread(%g"NBSP"ms)", interval / 1000000.); + "obs_graphics_thread(%g"NBSP"ms)", interval / 1000000.); profile_register_root(video_thread_name, interval); srand((unsigned int)time(NULL));
View file
obs-studio-20.1.1.tar.xz/libobs/obs.c -> obs-studio-20.1.3.tar.xz/libobs/obs.c
Changed
@@ -385,7 +385,7 @@ gs_leave_context(); errorcode = pthread_create(&video->video_thread, NULL, - obs_video_thread, obs); + obs_graphics_thread, obs); if (errorcode != 0) return OBS_VIDEO_FAIL;
View file
obs-studio-20.1.1.tar.xz/plugins/linux-pulseaudio/pulse-input.c -> obs-studio-20.1.3.tar.xz/plugins/linux-pulseaudio/pulse-input.c
Changed
@@ -33,6 +33,7 @@ /* user settings */ char *device; + bool input; /* server info */ enum speaker_layout speakers; @@ -164,11 +165,30 @@ void *userdata) { UNUSED_PARAMETER(c); - UNUSED_PARAMETER(userdata); + PULSE_DATA(userdata); blog(LOG_INFO, "Server name: '%s %s'", i->server_name, i->server_version); + if (data->device && strcmp("default", data->device) == 0) { + if (data->input) { + bfree(data->device); + data->device = bstrdup(i->default_source_name); + + blog(LOG_DEBUG, "Default input device: '%s'", data->device); + } else { + char *monitor = bzalloc(strlen(i->default_sink_name) + 9); + strcat(monitor, i->default_sink_name); + strcat(monitor, ".monitor"); + + bfree(data->device); + data->device = bstrdup(monitor); + + blog(LOG_DEBUG, "Default output device: '%s'", data->device); + bfree(monitor); + } + } + pulse_signal(0); } @@ -374,6 +394,12 @@ pulse_get_sink_info_list(pulse_output_info, (void *) devices); pulse_unref(); + size_t count = obs_property_list_item_count(devices); + + if (count > 0) + obs_property_list_insert_string(devices, 0, + obs_module_text("Default"), "default"); + return props; } @@ -392,60 +418,11 @@ } /** - * Server info callback - */ -static void pulse_input_device(pa_context *c, const pa_server_info *i, - void *userdata) -{ - UNUSED_PARAMETER(c); - obs_data_t *settings = (obs_data_t*) userdata; - - obs_data_set_default_string(settings, "device_id", - i->default_source_name); - blog(LOG_DEBUG, "Default input device: '%s'", i->default_source_name); - - pulse_signal(0); -} - -static void pulse_output_device(pa_context *c, const pa_server_info *i, - void *userdata) -{ - UNUSED_PARAMETER(c); - obs_data_t *settings = (obs_data_t*) userdata; - - char *monitor = bzalloc(strlen(i->default_sink_name) + 9); - strcat(monitor, i->default_sink_name); - strcat(monitor, ".monitor"); - - obs_data_set_default_string(settings, "device_id", monitor); - blog(LOG_DEBUG, "Default output device: '%s'", monitor); - bfree(monitor); - - pulse_signal(0); -} - -/** * Get plugin defaults */ -static void pulse_defaults(obs_data_t *settings, bool input) +static void pulse_defaults(obs_data_t *settings) { - pulse_init(); - - pa_server_info_cb_t cb = (input) - ? pulse_input_device : pulse_output_device; - pulse_get_server_info(cb, (void *) settings); - - pulse_unref(); -} - -static void pulse_input_defaults(obs_data_t *settings) -{ - return pulse_defaults(settings, true); -} - -static void pulse_output_defaults(obs_data_t *settings) -{ - return pulse_defaults(settings, false); + obs_data_set_default_string(settings, "device_id", "default"); } /** @@ -510,10 +487,11 @@ /** * Create the plugin object */ -static void *pulse_create(obs_data_t *settings, obs_source_t *source) +static void *pulse_create(obs_data_t *settings, obs_source_t *source, bool input) { struct pulse_data *data = bzalloc(sizeof(struct pulse_data)); + data->input = input; data->source = source; pulse_init(); @@ -522,16 +500,26 @@ return data; } +static void *pulse_input_create(obs_data_t *settings, obs_source_t *source) +{ + return pulse_create(settings, source, true); +} + +static void *pulse_output_create(obs_data_t *settings, obs_source_t *source) +{ + return pulse_create(settings, source, false); +} + struct obs_source_info pulse_input_capture = { .id = "pulse_input_capture", .type = OBS_SOURCE_TYPE_INPUT, .output_flags = OBS_SOURCE_AUDIO | OBS_SOURCE_DO_NOT_DUPLICATE, .get_name = pulse_input_getname, - .create = pulse_create, + .create = pulse_input_create, .destroy = pulse_destroy, .update = pulse_update, - .get_defaults = pulse_input_defaults, + .get_defaults = pulse_defaults, .get_properties = pulse_input_properties }; @@ -542,9 +530,9 @@ OBS_SOURCE_DO_NOT_DUPLICATE | OBS_SOURCE_DO_NOT_SELF_MONITOR, .get_name = pulse_output_getname, - .create = pulse_create, + .create = pulse_output_create, .destroy = pulse_destroy, .update = pulse_update, - .get_defaults = pulse_output_defaults, + .get_defaults = pulse_defaults, .get_properties = pulse_output_properties };
View file
obs-studio-20.1.1.tar.xz/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c -> obs-studio-20.1.3.tar.xz/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c
Changed
@@ -29,6 +29,12 @@ #include <libavformat/avformat.h> +#if LIBAVCODEC_VERSION_MAJOR >= 58 +#define CODEC_FLAG_GLOBAL_H AV_CODEC_FLAG_GLOBAL_HEADER +#else +#define CODEC_FLAG_GLOBAL_H CODEC_FLAG_GLOBAL_HEADER +#endif + /* ------------------------------------------------------------------------- */ struct resize_buf { @@ -312,7 +318,7 @@ ffm->video_stream->time_base = context->time_base; if (ffm->output->oformat->flags & AVFMT_GLOBALHEADER) - context->flags |= CODEC_FLAG_GLOBAL_HEADER; + context->flags |= CODEC_FLAG_GLOBAL_H; } static void create_audio_stream(struct ffmpeg_mux *ffm, int idx) @@ -348,7 +354,7 @@ av_get_default_channel_layout(context->channels); if (ffm->output->oformat->flags & AVFMT_GLOBALHEADER) - context->flags |= CODEC_FLAG_GLOBAL_HEADER; + context->flags |= CODEC_FLAG_GLOBAL_H; ffm->num_audio_streams++; }
View file
obs-studio-20.1.1.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c -> obs-studio-20.1.3.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c
Changed
@@ -214,7 +214,7 @@ /* enable experimental FFmpeg encoder if the only one available */ enc->context->strict_std_compliance = -2; - enc->context->flags = CODEC_FLAG_GLOBAL_HEADER; + enc->context->flags = CODEC_FLAG_GLOBAL_H; if (initialize_codec(enc)) return enc;
View file
obs-studio-20.1.1.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-compat.h -> obs-studio-20.1.3.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-compat.h
Changed
@@ -23,3 +23,13 @@ #if LIBAVCODEC_VERSION_MAJOR >= 57 #define av_free_packet av_packet_unref #endif + +#if LIBAVCODEC_VERSION_MAJOR >= 58 +#define CODEC_CAP_TRUNC AV_CODEC_CAP_TRUNCATED +#define CODEC_FLAG_TRUNC AV_CODEC_FLAG_TRUNCATED +#define CODEC_FLAG_GLOBAL_H AV_CODEC_FLAG_GLOBAL_HEADER +#else +#define CODEC_CAP_TRUNC CODEC_CAP_TRUNCATED +#define CODEC_FLAG_TRUNC CODEC_FLAG_TRUNCATED +#define CODEC_FLAG_GLOBAL_H CODEC_FLAG_GLOBAL_HEADER +#endif
View file
obs-studio-20.1.1.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-output.c -> obs-studio-20.1.3.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-output.c
Changed
@@ -260,7 +260,7 @@ data->video->time_base = context->time_base; if (data->output->oformat->flags & AVFMT_GLOBALHEADER) - context->flags |= CODEC_FLAG_GLOBAL_HEADER; + context->flags |= CODEC_FLAG_GLOBAL_H; if (!open_video_codec(data)) return false; @@ -348,7 +348,7 @@ data->audio_size = get_audio_size(data->audio_format, aoi.speakers, 1); if (data->output->oformat->flags & AVFMT_GLOBALHEADER) - context->flags |= CODEC_FLAG_GLOBAL_HEADER; + context->flags |= CODEC_FLAG_GLOBAL_H; return open_audio_codec(data); } @@ -686,7 +686,7 @@ else copy_data(&data->dst_picture, frame, context->height, context->pix_fmt); - if (data->output->flags & AVFMT_RAWPICTURE) { + if (data->output->flags) { packet.flags |= AV_PKT_FLAG_KEY; packet.stream_index = data->video->index; packet.data = data->dst_picture.data[0];
View file
obs-studio-20.1.1.tar.xz/plugins/win-capture/graphics-hook/gl-capture.c -> obs-studio-20.1.3.tar.xz/plugins/win-capture/graphics-hook/gl-capture.c
Changed
@@ -877,7 +877,8 @@ /* "life is feudal: your own" somehow uses both opengl and directx at * the same time, so blacklist it from capturing opengl */ const char *process_name = get_process_name(); - if (_strcmpi(process_name, "yo_cm_client.exe") == 0) { + if (_strcmpi(process_name, "yo_cm_client.exe") == 0 || + _strcmpi(process_name, "cm_client.exe") == 0) { hlog("Ignoring opengl for game: %s", process_name); return true; }
View file
obs-studio-20.1.1.tar.xz/plugins/win-dshow/ffmpeg-decode.c -> obs-studio-20.1.3.tar.xz/plugins/win-dshow/ffmpeg-decode.c
Changed
@@ -16,6 +16,7 @@ ******************************************************************************/ #include "ffmpeg-decode.h" +#include "obs-ffmpeg-compat.h" #include <obs-avc.h> int ffmpeg_decode_init(struct ffmpeg_decode *decode, enum AVCodecID id) @@ -37,8 +38,8 @@ return ret; } - if (decode->codec->capabilities & CODEC_CAP_TRUNCATED) - decode->decoder->flags |= CODEC_FLAG_TRUNCATED; + if (decode->codec->capabilities & CODEC_CAP_TRUNC) + decode->decoder->flags |= CODEC_FLAG_TRUNC; return 0; } @@ -96,7 +97,7 @@ static inline void copy_data(struct ffmpeg_decode *decode, uint8_t *data, size_t size) { - size_t new_size = size + FF_INPUT_BUFFER_PADDING_SIZE; + size_t new_size = size + INPUT_BUFFER_PADDING_SIZE; if (decode->packet_size < new_size) { decode->packet_buffer = brealloc(decode->packet_buffer, @@ -104,7 +105,7 @@ decode->packet_size = new_size; } - memset(decode->packet_buffer + size, 0, FF_INPUT_BUFFER_PADDING_SIZE); + memset(decode->packet_buffer + size, 0, INPUT_BUFFER_PADDING_SIZE); memcpy(decode->packet_buffer, data, size); }
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.