diff --git a/audio/common/pipewire.c b/audio/common/pipewire.c index 3dcf25460d8..b4d01744063 100644 --- a/audio/common/pipewire.c +++ b/audio/common/pipewire.c @@ -31,7 +31,6 @@ static void core_error_cb(void *data, uint32_t id, int seq, int res, const char RARCH_ERR("[PipeWire]: error id:%u seq:%d res:%d (%s): %s\n", id, seq, res, spa_strerror(res), message); - /* stop and exit the thread loop */ pw_thread_loop_stop(pw->thread_loop); } @@ -42,11 +41,9 @@ static void core_done_cb(void *data, uint32_t id, int seq) retro_assert(id == PW_ID_CORE); pw->last_seq = seq; + if (pw->pending_seq == seq) - { - /* stop and exit the thread loop */ pw_thread_loop_signal(pw->thread_loop, false); - } } static const struct pw_core_events core_events = { @@ -55,7 +52,7 @@ static const struct pw_core_events core_events = { .error = core_error_cb, }; -size_t calc_frame_size(enum spa_audio_format fmt, uint32_t nchannels) +size_t pipewire_calc_frame_size(enum spa_audio_format fmt, uint32_t nchannels) { uint32_t sample_size = 1; switch (fmt) @@ -85,7 +82,7 @@ size_t calc_frame_size(enum spa_audio_format fmt, uint32_t nchannels) return sample_size * nchannels; } -void set_position(uint32_t channels, uint32_t position[SPA_AUDIO_MAX_CHANNELS]) +void pipewire_set_position(uint32_t channels, uint32_t position[SPA_AUDIO_MAX_CHANNELS]) { memcpy(position, (uint32_t[SPA_AUDIO_MAX_CHANNELS]) { SPA_AUDIO_CHANNEL_UNKNOWN, }, sizeof(uint32_t) * SPA_AUDIO_MAX_CHANNELS); @@ -114,7 +111,7 @@ void set_position(uint32_t channels, uint32_t position[SPA_AUDIO_MAX_CHANNELS]) } } -void pipewire_wait_resync(pipewire_core_t *pw) +void pipewire_core_wait_resync(pipewire_core_t *pw) { retro_assert(pw); pw->pending_seq = pw_core_sync(pw->core, PW_ID_CORE, pw->pending_seq); @@ -127,7 +124,7 @@ void pipewire_wait_resync(pipewire_core_t *pw) } } -bool pipewire_set_active(struct pw_thread_loop *loop, struct pw_stream *stream, bool active) +bool pipewire_stream_set_active(struct pw_thread_loop *loop, struct pw_stream *stream, bool active) { enum pw_stream_state st; const char *error; diff --git a/audio/common/pipewire.h b/audio/common/pipewire.h index 7e9627128ac..7b9a0dce4a7 100644 --- a/audio/common/pipewire.h +++ b/audio/common/pipewire.h @@ -38,27 +38,26 @@ typedef struct pipewire_core { struct pw_thread_loop *thread_loop; struct pw_context *ctx; + struct pw_core *core; struct spa_hook core_listener; int last_seq, pending_seq; struct pw_registry *registry; struct spa_hook registry_listener; - struct pw_client *client; - struct spa_hook client_listener; - bool nonblock; struct string_list *devicelist; + bool nonblock; } pipewire_core_t; -size_t calc_frame_size(enum spa_audio_format fmt, uint32_t nchannels); +size_t pipewire_calc_frame_size(enum spa_audio_format fmt, uint32_t nchannels); -void set_position(uint32_t channels, uint32_t position[SPA_AUDIO_MAX_CHANNELS]); +void pipewire_set_position(uint32_t channels, uint32_t position[SPA_AUDIO_MAX_CHANNELS]); -void pipewire_wait_resync(pipewire_core_t *pipewire); +bool pipewire_core_init(pipewire_core_t *pipewire, const char *loop_name); -bool pipewire_set_active(struct pw_thread_loop *loop, struct pw_stream *stream, bool active); +void pipewire_core_wait_resync(pipewire_core_t *pipewire); -bool pipewire_core_init(pipewire_core_t *pipewire, const char *loop_name); +bool pipewire_stream_set_active(struct pw_thread_loop *loop, struct pw_stream *stream, bool active); #endif /* _RETROARCH_PIPEWIRE */ diff --git a/audio/drivers/pipewire.c b/audio/drivers/pipewire.c index 872c24930fe..45142948d5e 100644 --- a/audio/drivers/pipewire.c +++ b/audio/drivers/pipewire.c @@ -1,5 +1,5 @@ /* RetroArch - A frontend for libretro. - * Copyright (C) 2024 - Viachaslau Khalikin + * Copyright (C) 2024-2025 - Viachaslau Khalikin * * RetroArch is free software: you can redistribute it and/or modify it under the terms * of the GNU General Public License as published by the Free Software Found- @@ -36,25 +36,21 @@ #define DEFAULT_CHANNELS 2 -#define QUANTUM 1024 /* TODO: detect */ #define RINGBUFFER_SIZE (1u << 22) #define RINGBUFFER_MASK (RINGBUFFER_SIZE - 1) typedef struct pipewire_audio { pipewire_core_t *pw; - struct pw_stream *stream; struct spa_hook stream_listener; struct spa_audio_info_raw info; uint32_t highwater_mark; uint32_t frame_size; - uint32_t req; struct spa_ringbuffer ring; uint8_t buffer[RINGBUFFER_SIZE]; } pipewire_audio_t; - static void stream_destroy_cb(void *data) { pipewire_audio_t *audio = (pipewire_audio_t*)data; @@ -68,7 +64,7 @@ static void playback_process_cb(void *data) void *p; struct pw_buffer *b; struct spa_buffer *buf; - uint32_t req, index, n_bytes; + uint32_t req, idx, n_bytes; int32_t avail; retro_assert(audio->stream); @@ -80,20 +76,15 @@ static void playback_process_cb(void *data) } buf = b->buffer; - p = buf->datas[0].data; - if (p == NULL) - return; + if ((p = buf->datas[0].data) == NULL) + goto done; /* calculate the total no of bytes to read data from buffer */ - req = b->requested * audio->frame_size; - - if (req == 0) - req = audio->req; + n_bytes = buf->datas[0].maxsize; + if (b->requested) + n_bytes = SPA_MIN(b->requested * audio->frame_size, n_bytes); - n_bytes = SPA_MIN(req, buf->datas[0].maxsize); - - /* get no of available bytes to read data from buffer */ - avail = spa_ringbuffer_get_read_index(&audio->ring, &index); + avail = spa_ringbuffer_get_read_index(&audio->ring, &idx); if (avail <= 0) /* fill rest buffer with silence */ @@ -105,18 +96,19 @@ static void playback_process_cb(void *data) spa_ringbuffer_read_data(&audio->ring, audio->buffer, RINGBUFFER_SIZE, - index & RINGBUFFER_MASK, p, n_bytes); + idx & RINGBUFFER_MASK, p, n_bytes); - index += n_bytes; - spa_ringbuffer_read_update(&audio->ring, index); + idx += n_bytes; + spa_ringbuffer_read_update(&audio->ring, idx); } buf->datas[0].chunk->offset = 0; buf->datas[0].chunk->stride = audio->frame_size; buf->datas[0].chunk->size = n_bytes; - /* queue the buffer for playback */ +done: pw_stream_queue_buffer(audio->stream, b); + pw_thread_loop_signal(audio->pw->thread_loop, false); } static void pipewire_free(void *data); @@ -156,42 +148,17 @@ static const struct pw_stream_events playback_stream_events = { .state_changed = stream_state_changed_cb, }; -static void client_info_cb(void *data, const struct pw_client_info *info) -{ - const struct spa_dict_item *item; - pipewire_core_t *pw = (pipewire_core_t*)data; - - RARCH_DBG("[PipeWire]: client: id:%u\n", info->id); - RARCH_DBG("[PipeWire]: \tprops:\n"); - spa_dict_for_each(item, info->props) - RARCH_DBG("[PipeWire]: \t\t%s: \"%s\"\n", item->key, item->value); - - pw_thread_loop_signal(pw->thread_loop, false); -} - -static const struct pw_client_events client_events = { - PW_VERSION_CLIENT_EVENTS, - .info = client_info_cb, -}; - static void registry_event_global(void *data, uint32_t id, uint32_t permissions, const char *type, uint32_t version, const struct spa_dict *props) { union string_list_elem_attr attr; + const struct spa_dict_item *item; pipewire_core_t *pw = (pipewire_core_t*)data; const char *media = NULL; const char *sink = NULL; - if (!pw->client && spa_streq(type, PW_TYPE_INTERFACE_Client)) - { - pw->client = pw_registry_bind(pw->registry, - id, type, PW_VERSION_CLIENT, 0); - pw_client_add_listener(pw->client, - &pw->client_listener, - &client_events, pw); - } - else if (spa_streq(type, PW_TYPE_INTERFACE_Node)) + if (spa_streq(type, PW_TYPE_INTERFACE_Node)) { media = spa_dict_lookup(props, PW_KEY_MEDIA_CLASS); if (media && strcmp(media, "Audio/Sink") == 0) @@ -203,13 +170,12 @@ static void registry_event_global(void *data, uint32_t id, string_list_append(pw->devicelist, sink, attr); RARCH_LOG("[PipeWire]: Found Sink Node: %s\n", sink); } + + RARCH_DBG("[PipeWire]: Object: id:%u Type:%s/%d\n", id, type, version); + spa_dict_for_each(item, props) + RARCH_DBG("[PipeWire]: \t\t%s: \"%s\"\n", item->key, item->value); } } - - const struct spa_dict_item *item; - RARCH_DBG("[PipeWire]: Object: id:%u Type:%s/%d\n", id, type, version); - spa_dict_for_each(item, props) - RARCH_DBG("[PipeWire]: \t\t%s: \"%s\"\n", item->key, item->value); } static const struct pw_registry_events registry_events = { @@ -243,12 +209,19 @@ static void *pipewire_init(const char *device, unsigned rate, if (!pipewire_core_init(pw, "audio_driver")) goto error; + pw->registry = pw_core_get_registry(pw->core, PW_VERSION_REGISTRY, 0); + + spa_zero(pw->registry_listener); + pw_registry_add_listener(pw->registry, &pw->registry_listener, ®istry_events, pw); + + /* unlock, run the loop and wait, this will trigger the callbacks */ + pipewire_core_wait_resync(pw); + audio->info.format = is_little_endian() ? SPA_AUDIO_FORMAT_F32_LE : SPA_AUDIO_FORMAT_F32_BE; audio->info.channels = DEFAULT_CHANNELS; - set_position(DEFAULT_CHANNELS, audio->info.position); + pipewire_set_position(DEFAULT_CHANNELS, audio->info.position); audio->info.rate = rate; - audio->frame_size = calc_frame_size(audio->info.format, DEFAULT_CHANNELS); - audio->req = QUANTUM * rate * 1 / 2 / 100000 * audio->frame_size; + audio->frame_size = pipewire_calc_frame_size(audio->info.format, DEFAULT_CHANNELS); props = pw_properties_new(PW_KEY_MEDIA_TYPE, PW_RARCH_MEDIA_TYPE_AUDIO, PW_KEY_MEDIA_CATEGORY, PW_RARCH_MEDIA_CATEGORY_PLAYBACK, @@ -260,22 +233,18 @@ static void *pipewire_init(const char *device, unsigned rate, PW_KEY_APP_ICON_NAME, PW_RARCH_APPNAME, NULL); if (!props) - goto error; + goto unlock_error; if (device) pw_properties_set(props, PW_KEY_TARGET_OBJECT, device); - buf_samples = QUANTUM * rate * 3 / 4 / 100000; - - pw_properties_setf(props, PW_KEY_NODE_LATENCY, "%" PRIu64 "/%u", - buf_samples, rate); - + buf_samples = latency * rate / 1000; + pw_properties_setf(props, PW_KEY_NODE_LATENCY, "%" PRIu64 "/%u", buf_samples, rate); pw_properties_setf(props, PW_KEY_NODE_RATE, "1/%d", rate); - audio->stream = pw_stream_new(pw->core, PW_RARCH_APPNAME, props); if (!audio->stream) - goto error; + goto unlock_error; pw_stream_add_listener(audio->stream, &audio->stream_listener, &playback_stream_events, audio); @@ -292,23 +261,17 @@ static void *pipewire_init(const char *device, unsigned rate, params, 1); if (res < 0) - goto error; + goto unlock_error; audio->highwater_mark = MIN(RINGBUFFER_SIZE, - latency? (latency * 1000): 46440 * (uint64_t)rate / 1000000 * audio->frame_size); - RARCH_DBG("[PipeWire]: Bufer size: %u, RingBuffer size: %u\n", audio->highwater_mark, RINGBUFFER_SIZE); - - pw->registry = pw_core_get_registry(pw->core, PW_VERSION_REGISTRY, 0); - - spa_zero(pw->registry_listener); - pw_registry_add_listener(pw->registry, &pw->registry_listener, ®istry_events, pw); + latency * (uint64_t)rate / 1000 * audio->frame_size); - /* unlock, run the loop and wait, this will trigger the callbacks */ - pipewire_wait_resync(pw); pw_thread_loop_unlock(pw->thread_loop); return audio; +unlock_error: + pw_thread_loop_unlock(audio->pw->thread_loop); error: RARCH_ERR("[PipeWire]: Failed to initialize audio\n"); pipewire_free(audio); @@ -317,43 +280,64 @@ static void *pipewire_init(const char *device, unsigned rate, static ssize_t pipewire_write(void *data, const void *buf_, size_t size) { - int32_t writable; - int32_t avail; - uint32_t index; + int32_t filled, avail; + uint32_t idx; pipewire_audio_t *audio = (pipewire_audio_t*)data; const char *error = NULL; if (pw_stream_get_state(audio->stream, &error) != PW_STREAM_STATE_STREAMING) return 0; /* wait for stream to become ready */ + if (size > audio->highwater_mark) + { + RARCH_ERR("[PipeWire]: Buffer too small! Please try increasing the latency.\n"); + return 0; + } + pw_thread_loop_lock(audio->pw->thread_loop); - writable = spa_ringbuffer_get_write_index(&audio->ring, &index); - avail = audio->highwater_mark - writable; + + while (size) + { + filled = spa_ringbuffer_get_write_index(&audio->ring, &idx); + avail = audio->highwater_mark - filled; #if 0 /* Useful for tracing */ - RARCH_DBG("[PipeWire]: Playback progress: written %d, avail %d, index %d, size %d\n", - writable, avail, index, size); + RARCH_DBG("[PipeWire]: Ringbuffer utilization: filled %d, avail %d, index %d, size %d\n", + filled, avail, idx, size); #endif - if (size > (size_t)avail) - size = avail; + /* in non-blocking mode we play as much as we can + * in blocking mode we expect a freed buffer of at least the given size */ + if (size > (size_t)avail) + { + if (audio->pw->nonblock) + { + size = avail; + break; + } + + pw_thread_loop_wait(audio->pw->thread_loop); + } + else + break; + } - if (writable < 0) - RARCH_ERR("%p: underrun write:%u filled:%d\n", audio, index, writable); + if (filled < 0) + RARCH_ERR("[Pipewire]: %p: underrun write:%u filled:%d\n", audio, idx, filled); else { - if ((uint32_t) writable + size > RINGBUFFER_SIZE) + if ((uint32_t) filled + size > RINGBUFFER_SIZE) { - RARCH_ERR("%p: overrun write:%u filled:%d + size:%zu > max:%u\n", - audio, index, writable, size, RINGBUFFER_SIZE); + RARCH_ERR("[PipeWire]: %p: overrun write:%u filled:%d + size:%zu > max:%u\n", + audio, idx, filled, size, RINGBUFFER_SIZE); } } spa_ringbuffer_write_data(&audio->ring, audio->buffer, RINGBUFFER_SIZE, - index & RINGBUFFER_MASK, buf_, size); - index += size; - spa_ringbuffer_write_update(&audio->ring, index); + idx & RINGBUFFER_MASK, buf_, size); + idx += size; + spa_ringbuffer_write_update(&audio->ring, idx); pw_thread_loop_unlock(audio->pw->thread_loop); return size; @@ -363,26 +347,33 @@ static bool pipewire_stop(void *data) { pipewire_audio_t *audio = (pipewire_audio_t*)data; const char *error = NULL; + + if (!audio || !audio->pw) + return false; if (pw_stream_get_state(audio->stream, &error) == PW_STREAM_STATE_PAUSED) return true; - return pipewire_set_active(audio->pw->thread_loop, audio->stream, false); + return pipewire_stream_set_active(audio->pw->thread_loop, audio->stream, false); } static bool pipewire_start(void *data, bool is_shutdown) { pipewire_audio_t *audio = (pipewire_audio_t*)data; const char *error = NULL; + + if (!audio || !audio->pw) + return false; if (pw_stream_get_state(audio->stream, &error) == PW_STREAM_STATE_STREAMING) return true; - return pipewire_set_active(audio->pw->thread_loop, audio->stream, true); + return pipewire_stream_set_active(audio->pw->thread_loop, audio->stream, true); } static bool pipewire_alive(void *data) { pipewire_audio_t *audio = (pipewire_audio_t*)data; const char *error = NULL; + if (!audio) return false; @@ -412,9 +403,6 @@ static void pipewire_free(void *data) audio->stream = NULL; } - if (audio->pw->client) - pw_proxy_destroy((struct pw_proxy *)audio->pw->client); - if (audio->pw->registry) pw_proxy_destroy((struct pw_proxy*)audio->pw->registry); @@ -464,7 +452,7 @@ static void pipewire_device_list_free(void *data, void *array_list_data) static size_t pipewire_write_avail(void *data) { - uint32_t index, written, length; + uint32_t idx, written, length; pipewire_audio_t *audio = (pipewire_audio_t*)data; const char *error = NULL; @@ -475,7 +463,7 @@ static size_t pipewire_write_avail(void *data) return 0; /* wait for stream to become ready */ pw_thread_loop_lock(audio->pw->thread_loop); - written = spa_ringbuffer_get_write_index(&audio->ring, &index); + written = spa_ringbuffer_get_write_index(&audio->ring, &idx); length = audio->highwater_mark - written; pw_thread_loop_unlock(audio->pw->thread_loop); diff --git a/audio/drivers/pulse.c b/audio/drivers/pulse.c index b680f05a1dd..54858495040 100644 --- a/audio/drivers/pulse.c +++ b/audio/drivers/pulse.c @@ -142,7 +142,7 @@ static void stream_state_cb(pa_stream *s, void *data) } } -static void stream_request_cb(pa_stream *s, size_t length, void *data) +static void stream_request_cb(pa_stream *s, size_t len, void *data) { pa_t *pa = (pa_t*)data; pa_threaded_mainloop_signal(pa->mainloop, 0); diff --git a/audio/drivers_microphone/pipewire.c b/audio/drivers_microphone/pipewire.c index f957ac6741c..2bb009555f4 100644 --- a/audio/drivers_microphone/pipewire.c +++ b/audio/drivers_microphone/pipewire.c @@ -33,21 +33,18 @@ #define DEFAULT_CHANNELS 1 -#define QUANTUM 1024 /* TODO: detect */ #define RINGBUFFER_SIZE (1u << 22) #define RINGBUFFER_MASK (RINGBUFFER_SIZE - 1) typedef struct pipewire_microphone { pipewire_core_t *pw; - struct pw_stream *stream; struct spa_hook stream_listener; struct spa_audio_info_raw info; uint32_t frame_size; struct spa_ringbuffer ring; uint8_t buffer[RINGBUFFER_SIZE]; - bool is_ready; } pipewire_microphone_t; @@ -90,7 +87,7 @@ static void capture_process_cb(void *data) struct pw_buffer *b; struct spa_buffer *buf; int32_t filled; - uint32_t index, offs, n_bytes; + uint32_t idx, offs, n_bytes; assert(microphone->stream); @@ -102,30 +99,31 @@ static void capture_process_cb(void *data) } buf = b->buffer; - p = buf->datas[0].data; - if (p == NULL) - return; + if ((p = buf->datas[0].data) == NULL) + goto done; offs = SPA_MIN(buf->datas[0].chunk->offset, buf->datas[0].maxsize); n_bytes = SPA_MIN(buf->datas[0].chunk->size, buf->datas[0].maxsize - offs); - filled = spa_ringbuffer_get_write_index(µphone->ring, &index); + filled = spa_ringbuffer_get_write_index(µphone->ring, &idx); if (filled < 0) - RARCH_ERR("[PipeWire]: %p: underrun write:%u filled:%d\n", p, index, filled); + RARCH_ERR("[PipeWire]: %p: underrun write:%u filled:%d\n", p, idx, filled); else { if ((uint32_t)filled + n_bytes > RINGBUFFER_SIZE) RARCH_ERR("[PipeWire]: %p: overrun write:%u filled:%d + size:%u > max:%u\n", - p, index, filled, n_bytes, RINGBUFFER_SIZE); + p, idx, filled, n_bytes, RINGBUFFER_SIZE); } spa_ringbuffer_write_data(µphone->ring, microphone->buffer, RINGBUFFER_SIZE, - index & RINGBUFFER_MASK, + idx & RINGBUFFER_MASK, SPA_PTROFF(p, offs, void), n_bytes); - index += n_bytes; - spa_ringbuffer_write_update(µphone->ring, index); + idx += n_bytes; + spa_ringbuffer_write_update(µphone->ring, idx); +done: pw_stream_queue_buffer(microphone->stream, b); + pw_thread_loop_signal(microphone->pw->thread_loop, false); } static const struct pw_stream_events capture_stream_events = { @@ -140,6 +138,7 @@ static void registry_event_global(void *data, uint32_t id, const struct spa_dict *props) { union string_list_elem_attr attr; + const struct spa_dict_item *item; pipewire_core_t *pw = (pipewire_core_t*)data; const char *media = NULL; const char *sink = NULL; @@ -158,6 +157,10 @@ static void registry_event_global(void *data, uint32_t id, string_list_append(pw->devicelist, sink, attr); RARCH_LOG("[PipeWire]: Found Source Node: %s\n", sink); } + + RARCH_DBG("[PipeWire]: Object: id:%u Type:%s/%d\n", id, type, version); + spa_dict_for_each(item, props) + RARCH_DBG("[PipeWire]: \t\t%s: \"%s\"\n", item->key, item->value); } } } @@ -197,7 +200,7 @@ static void *pipewire_microphone_init(void) spa_zero(pw->registry_listener); pw_registry_add_listener(pw->registry, &pw->registry_listener, ®istry_events, pw); - pipewire_wait_resync(pw); + pipewire_core_wait_resync(pw); pw_thread_loop_unlock(pw->thread_loop); return pw; @@ -219,9 +222,6 @@ static void pipewire_microphone_free(void *driver_context) if (pw->thread_loop) pw_thread_loop_stop(pw->thread_loop); - if (pw->client) - pw_proxy_destroy((struct pw_proxy *)pw->client); - if (pw->registry) pw_proxy_destroy((struct pw_proxy*)pw->registry); @@ -247,26 +247,41 @@ static void pipewire_microphone_free(void *driver_context) static int pipewire_microphone_read(void *driver_context, void *microphone_context, void *buf_, size_t size_) { int32_t readable; - uint32_t index; + uint32_t idx; const char *error = NULL; pipewire_core_t *pw = (pipewire_core_t*)driver_context; pipewire_microphone_t *microphone = (pipewire_microphone_t*)microphone_context; - if (!microphone->is_ready || pw_stream_get_state(microphone->stream, &error) != PW_STREAM_STATE_STREAMING) + if ( !microphone->is_ready + || pw_stream_get_state(microphone->stream, &error) != PW_STREAM_STATE_STREAMING) return -1; pw_thread_loop_lock(pw->thread_loop); - /* get no of available bytes to read data from buffer */ - readable = spa_ringbuffer_get_read_index(µphone->ring, &index); - if (readable < (int32_t)size_) - size_ = readable; + while (size_) + { + /* get no of available bytes to read data from buffer */ + readable = spa_ringbuffer_get_read_index(µphone->ring, &idx); + + if (readable < (int32_t)size_) + { + if (pw->nonblock) + { + size_ = readable; + break; + } + + pw_thread_loop_wait(pw->thread_loop); + } + else + break; + } spa_ringbuffer_read_data(µphone->ring, microphone->buffer, RINGBUFFER_SIZE, - index & RINGBUFFER_MASK, buf_, size_); - index += size_; - spa_ringbuffer_read_update(µphone->ring, index); + idx & RINGBUFFER_MASK, buf_, size_); + idx += size_; + spa_ringbuffer_read_update(µphone->ring, idx); pw_thread_loop_unlock(pw->thread_loop); return size_; @@ -328,15 +343,16 @@ static void *pipewire_microphone_open_mic(void *driver_context, if (!microphone) goto error; + microphone->is_ready = false; microphone->pw = (pipewire_core_t*)driver_context; pw_thread_loop_lock(microphone->pw->thread_loop); microphone->info.format = is_little_endian() ? SPA_AUDIO_FORMAT_F32_LE : SPA_AUDIO_FORMAT_F32_BE; microphone->info.channels = DEFAULT_CHANNELS; - set_position(DEFAULT_CHANNELS, microphone->info.position); + pipewire_set_position(DEFAULT_CHANNELS, microphone->info.position); microphone->info.rate = rate; - microphone->frame_size = calc_frame_size(microphone->info.format, DEFAULT_CHANNELS); + microphone->frame_size = pipewire_calc_frame_size(microphone->info.format, DEFAULT_CHANNELS); props = pw_properties_new(PW_KEY_MEDIA_TYPE, PW_RARCH_MEDIA_TYPE_AUDIO, PW_KEY_MEDIA_CATEGORY, PW_RARCH_MEDIA_CATEGORY_RECORD, @@ -353,13 +369,9 @@ static void *pipewire_microphone_open_mic(void *driver_context, if (device) pw_properties_set(props, PW_KEY_TARGET_OBJECT, device); - buf_samples = QUANTUM * rate * 3 / 4 / 100000; - - pw_properties_setf(props, PW_KEY_NODE_LATENCY, "%" PRIu64 "/%u", - buf_samples, rate); - + buf_samples = latency * rate / 1000; + pw_properties_setf(props, PW_KEY_NODE_LATENCY, "%" PRIu64 "/%u", buf_samples, rate); pw_properties_setf(props, PW_KEY_NODE_RATE, "1/%d", rate); - microphone->stream = pw_stream_new(microphone->pw->core, PW_RARCH_APPNAME, props); if (!microphone->stream) @@ -375,6 +387,7 @@ static void *pipewire_microphone_open_mic(void *driver_context, PW_DIRECTION_INPUT, PW_ID_ANY, PW_STREAM_FLAG_AUTOCONNECT | + PW_STREAM_FLAG_INACTIVE | PW_STREAM_FLAG_MAP_BUFFERS | PW_STREAM_FLAG_RT_PROCESS, params, 1); @@ -383,11 +396,11 @@ static void *pipewire_microphone_open_mic(void *driver_context, goto unlock_error; pw_thread_loop_wait(microphone->pw->thread_loop); - pw_thread_loop_unlock(microphone->pw->thread_loop); + *new_rate = microphone->info.rate; - microphone->is_ready = true; + microphone->is_ready = true; return microphone; unlock_error: @@ -419,12 +432,12 @@ static bool pipewire_microphone_start_mic(void *driver_context, void *microphone pipewire_microphone_t *microphone = (pipewire_microphone_t*)microphone_context; const char *error = NULL; - if (!microphone->is_ready) + if (!pw || !microphone || !microphone->is_ready) return false; if (pw_stream_get_state(microphone->stream, &error) == PW_STREAM_STATE_STREAMING) return true; - return pipewire_set_active(pw->thread_loop, microphone->stream, true); + return pipewire_stream_set_active(pw->thread_loop, microphone->stream, true); } static bool pipewire_microphone_stop_mic(void *driver_context, void *microphone_context) @@ -432,13 +445,18 @@ static bool pipewire_microphone_stop_mic(void *driver_context, void *microphone_ pipewire_core_t *pw = (pipewire_core_t*)driver_context; pipewire_microphone_t *microphone = (pipewire_microphone_t*)microphone_context; const char *error = NULL; + bool res = false; - if (!microphone->is_ready) + if (!pw || !microphone || !microphone->is_ready) return false; if (pw_stream_get_state(microphone->stream, &error) == PW_STREAM_STATE_PAUSED) return true; - return pipewire_set_active(pw->thread_loop, microphone->stream, false); + res = pipewire_stream_set_active(pw->thread_loop, microphone->stream, false); + spa_ringbuffer_read_update(µphone->ring, 0); + spa_ringbuffer_write_update(µphone->ring, 0); + + return res; } static bool pipewire_microphone_mic_use_float(const void *driver_context, const void *microphone_context) diff --git a/cheat_manager.c b/cheat_manager.c index d0d2e3ec054..18256e0c5e7 100644 --- a/cheat_manager.c +++ b/cheat_manager.c @@ -68,10 +68,10 @@ unsigned cheat_manager_get_size(void) #ifdef HAVE_CHEEVOS static void cheat_manager_pause_cheevos(void) { - const char *msg = msg_hash_to_str(MSG_CHEEVOS_HARDCORE_MODE_DISABLED_CHEAT); + char msg[128]; + size_t _len = strlcpy(msg, msg_hash_to_str(MSG_CHEEVOS_HARDCORE_MODE_DISABLED_CHEAT), sizeof(msg)); rcheevos_pause_hardcore(); - - runloop_msg_queue_push(msg, strlen(msg), 1, 180, true, NULL, + runloop_msg_queue_push(msg, _len, 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); RARCH_LOG("%s\n", msg); } @@ -106,10 +106,11 @@ void cheat_manager_apply_cheats(void) if (cheat_st->size > 0 && settings->bools.notification_show_cheats_applied) { - const char *_msg = msg_hash_to_str(MSG_APPLYING_CHEAT); - runloop_msg_queue_push(_msg, strlen(_msg), 1, 180, true, NULL, + char msg[128]; + size_t _len = strlcpy(msg, msg_hash_to_str(MSG_APPLYING_CHEAT), sizeof(msg)); + runloop_msg_queue_push(msg, _len, 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); - RARCH_LOG("%s\n", _msg); + RARCH_LOG("%s\n", msg); } #ifdef HAVE_CHEEVOS @@ -854,8 +855,9 @@ int cheat_manager_initialize_memory(rarch_setting_t *setting, size_t idx, bool w meminfo.id = RETRO_MEMORY_SYSTEM_RAM; if (!core_get_memory(&meminfo)) { - const char *_msg = msg_hash_to_str(MSG_CHEAT_INIT_FAIL); - runloop_msg_queue_push(_msg, strlen(_msg), 1, 180, true, NULL, + char msg[128]; + size_t _len = strlcpy(msg, msg_hash_to_str(MSG_CHEAT_INIT_FAIL), sizeof(msg)); + runloop_msg_queue_push(msg, _len, 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); return 0; } @@ -885,7 +887,6 @@ int cheat_manager_initialize_memory(rarch_setting_t *setting, size_t idx, bool w if (is_search_initialization) { - const char *msg = NULL; if (cheat_st->prev_memory_buf) { free(cheat_st->prev_memory_buf); @@ -897,8 +898,9 @@ int cheat_manager_initialize_memory(rarch_setting_t *setting, size_t idx, bool w if (!cheat_st->prev_memory_buf) { - const char *_msg = msg_hash_to_str(MSG_CHEAT_INIT_FAIL); - runloop_msg_queue_push(_msg, strlen(_msg), 1, 180, true, NULL, + char msg[128]; + size_t _len = strlcpy(msg, msg_hash_to_str(MSG_CHEAT_INIT_FAIL), sizeof(msg)); + runloop_msg_queue_push(msg, _len, 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); return 0; } @@ -914,10 +916,11 @@ int cheat_manager_initialize_memory(rarch_setting_t *setting, size_t idx, bool w if (!cheat_st->matches) { - const char *_msg = msg_hash_to_str(MSG_CHEAT_INIT_FAIL); + char msg[128]; + size_t _len = strlcpy(msg, msg_hash_to_str(MSG_CHEAT_INIT_FAIL), sizeof(msg)); free(cheat_st->prev_memory_buf); cheat_st->prev_memory_buf = NULL; - runloop_msg_queue_push(_msg, strlen(_msg), 1, 180, true, NULL, + runloop_msg_queue_push(msg, _len, 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); return 0; } @@ -934,9 +937,12 @@ int cheat_manager_initialize_memory(rarch_setting_t *setting, size_t idx, bool w offset += cheat_st->memory_size_list[i]; } - msg = msg_hash_to_str(MSG_CHEAT_INIT_SUCCESS); - runloop_msg_queue_push(msg, strlen(msg), 1, 180, true, NULL, - MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); + { + char msg[128]; + size_t _len = strlcpy(msg, msg_hash_to_str(MSG_CHEAT_INIT_SUCCESS), sizeof(msg)); + runloop_msg_queue_push(msg, _len, 1, 180, true, NULL, + MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); + } cheat_st->memory_search_initialized = true; } @@ -1034,8 +1040,8 @@ static int cheat_manager_search(enum cheat_search_type search_type) if (cheat_st->num_memory_buffers == 0 || !prev || !cheat_st->matches) { - const char *msg = msg_hash_to_str(MSG_CHEAT_SEARCH_NOT_INITIALIZED); - runloop_msg_queue_push(msg, strlen(msg), 1, 180, true, NULL, + _len = strlcpy(msg, msg_hash_to_str(MSG_CHEAT_SEARCH_NOT_INITIALIZED), sizeof(msg)); + runloop_msg_queue_push(msg, _len, 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); return 0; } @@ -1241,8 +1247,8 @@ int cheat_manager_add_matches(const char *path, if (cheat_st->num_matches + cheat_st->size > 100) { - const char *_msg = msg_hash_to_str(MSG_CHEAT_SEARCH_ADDED_MATCHES_TOO_MANY); - runloop_msg_queue_push(_msg, strlen(_msg), 1, 180, true, NULL, + _len = strlcpy(msg, msg_hash_to_str(MSG_CHEAT_SEARCH_ADDED_MATCHES_TOO_MANY), sizeof(msg)); + runloop_msg_queue_push(msg, _len, 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); return 0; } @@ -1281,8 +1287,8 @@ int cheat_manager_add_matches(const char *path, if (!cheat_manager_add_new_code(cheat_st->search_bit_size, idx, (mask << (byte_part * bits)), cheat_st->big_endian, curr_val)) { - const char *_msg = msg_hash_to_str(MSG_CHEAT_SEARCH_ADDED_MATCHES_FAIL); - runloop_msg_queue_push(_msg, strlen(_msg), 1, 180, true, NULL, + _len = strlcpy(msg, msg_hash_to_str(MSG_CHEAT_SEARCH_ADDED_MATCHES_FAIL), sizeof(msg)); + runloop_msg_queue_push(msg, _len, 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); return 0; } @@ -1296,8 +1302,8 @@ int cheat_manager_add_matches(const char *path, if (!cheat_manager_add_new_code(cheat_st->search_bit_size, idx, 0xFF, cheat_st->big_endian, curr_val)) { - const char *_msg = msg_hash_to_str(MSG_CHEAT_SEARCH_ADDED_MATCHES_FAIL); - runloop_msg_queue_push(_msg, strlen(_msg), 1, 180, true, NULL, + _len = strlcpy(msg, msg_hash_to_str(MSG_CHEAT_SEARCH_ADDED_MATCHES_FAIL), sizeof(msg)); + runloop_msg_queue_push(msg, _len, 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); return 0; } @@ -1638,30 +1644,30 @@ void cheat_manager_match_action(enum cheat_match_action_type match_action, unsig switch (bytes_per_item) { - case 2: - curr_val = cheat_st->big_endian ? + case 2: + curr_val = cheat_st->big_endian ? (*(curr + idx - offset) * 256) + *(curr + idx + 1 - offset) : *(curr + idx - offset) + (*(curr + idx + 1 - offset) * 256); - if (prev) - prev_val = cheat_st->big_endian ? + if (prev) + prev_val = cheat_st->big_endian ? (*(prev + idx) * 256) + *(prev + idx + 1) : *(prev + idx) + (*(prev + idx + 1) * 256); - break; - case 4: - curr_val = cheat_st->big_endian ? + break; + case 4: + curr_val = cheat_st->big_endian ? (*(curr + idx - offset) * 256 * 256 * 256) + (*(curr + idx + 1 - offset) * 256 * 256) + (*(curr + idx + 2 - offset) * 256) + *(curr + idx + 3 - offset) : *(curr + idx - offset) + (*(curr + idx + 1 - offset) * 256) + (*(curr + idx + 2 - offset) * 256 * 256) + (*(curr + idx + 3 - offset) * 256 * 256 * 256); - if (prev) - prev_val = cheat_st->big_endian ? + if (prev) + prev_val = cheat_st->big_endian ? (*(prev + idx) * 256 * 256 * 256) + (*(prev + idx + 1) * 256 * 256) + (*(prev + idx + 2) * 256) + *(prev + idx + 3) : *(prev + idx) + (*(prev + idx + 1) * 256) + (*(prev + idx + 2) * 256 * 256) + (*(prev + idx + 3) * 256 * 256 * 256); - break; - case 1: - default: - curr_val = *(curr + idx - offset); - if (prev) - prev_val = *(prev + idx); - break; + break; + case 1: + default: + curr_val = *(curr + idx - offset); + if (prev) + prev_val = *(prev + idx); + break; } if (match_action == CHEAT_MATCH_ACTION_TYPE_BROWSE) diff --git a/config.def.h b/config.def.h index e4865a0670f..b2898bf6de3 100644 --- a/config.def.h +++ b/config.def.h @@ -927,7 +927,11 @@ #define DEFAULT_INPUT_BACKTOUCH_TOGGLE false #endif +#if defined(ANDROID) || defined(IOS) #define DEFAULT_OVERLAY_ENABLE_AUTOPREFERRED true +#else +#define DEFAULT_OVERLAY_ENABLE_AUTOPREFERRED false +#endif #if defined(HAVE_OVERLAY) #if defined(RARCH_MOBILE) diff --git a/configuration.c b/configuration.c index a21cbdcb5de..f0d001e93e5 100644 --- a/configuration.c +++ b/configuration.c @@ -4477,8 +4477,9 @@ bool config_load_override(void *data) if (settings->bools.notification_show_config_override_load && show_notification) { - const char *_msg = msg_hash_to_str(MSG_CONFIG_OVERRIDE_LOADED); - runloop_msg_queue_push(_msg, strlen(_msg), 1, 100, false, NULL, + char msg[128]; + size_t _len = strlcpy(msg, msg_hash_to_str(MSG_CONFIG_OVERRIDE_LOADED), sizeof(msg)); + runloop_msg_queue_push(msg, _len, 1, 100, false, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); } @@ -4533,8 +4534,9 @@ bool config_load_override_file(const char *config_path) if (settings->bools.notification_show_config_override_load && show_notification) { - const char *_msg = msg_hash_to_str(MSG_CONFIG_OVERRIDE_LOADED); - runloop_msg_queue_push(_msg, strlen(_msg), 1, 100, false, NULL, + char msg[128]; + size_t _len = strlcpy(msg, msg_hash_to_str(MSG_CONFIG_OVERRIDE_LOADED), sizeof(msg)); + runloop_msg_queue_push(msg, _len, 1, 100, false, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); } @@ -4743,8 +4745,9 @@ bool config_load_remap(const char *directory_input_remapping, success: if (notification_show_remap_load) { - const char *_msg = msg_hash_to_str(msg_remap_loaded); - runloop_msg_queue_push(_msg, strlen(_msg), 1, 100, false, NULL, + char _msg[128]; + size_t _len = strlcpy(_msg, msg_hash_to_str(msg_remap_loaded), sizeof(_msg)); + runloop_msg_queue_push(_msg, _len, 1, 100, false, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); } return true; diff --git a/core_info.c b/core_info.c index edb68971f6a..1a8b6b2e46d 100644 --- a/core_info.c +++ b/core_info.c @@ -100,11 +100,11 @@ static core_info_state_t core_info_st = { /* JSON Handlers START */ static bool CCJSONObjectMemberHandler(void *context, - const char *pValue, size_t length) + const char *pValue, size_t len) { CCJSONContext *pCtx = (CCJSONContext *)context; - if (length) + if (len) { switch (pCtx->array_depth) { @@ -262,12 +262,12 @@ static bool CCJSONObjectMemberHandler(void *context, } static bool CCJSONStringHandler(void *context, - const char *pValue, size_t length) + const char *pValue, size_t len) { CCJSONContext *pCtx = (CCJSONContext*)context; if ( pCtx->current_string_val - && length + && len && !string_is_empty(pValue)) { if (*pCtx->current_string_val) @@ -290,7 +290,7 @@ static bool CCJSONStringHandler(void *context, } static bool CCJSONNumberHandler(void *context, - const char *pValue, size_t length) + const char *pValue, size_t len) { CCJSONContext *pCtx = (CCJSONContext*)context; @@ -1497,18 +1497,15 @@ static bool core_info_path_is_locked( core_aux_file_path_list_t *lock_list, const char *core_file_name) { - size_t i, len; + size_t i; uint32_t hash; char lock_filename[NAME_MAX_LENGTH]; if (lock_list->size < 1) return false; - len = strlcpy(lock_filename, core_file_name, - sizeof(lock_filename)); - strlcpy(lock_filename + len, - ".lck", - sizeof(lock_filename) - len); + fill_pathname(lock_filename, core_file_name, + ".lck", sizeof(lock_filename)); hash = core_info_hash_string(lock_filename); @@ -1528,18 +1525,15 @@ static bool core_info_path_is_standalone_exempt( core_aux_file_path_list_t *exempt_list, const char *core_file_name) { - size_t i, len; + size_t i; uint32_t hash; char exempt_filename[NAME_MAX_LENGTH]; if (exempt_list->size < 1) return false; - len = strlcpy(exempt_filename, core_file_name, - sizeof(exempt_filename)); - strlcpy(exempt_filename + len, - ".lsae", - sizeof(exempt_filename) - len); + fill_pathname(exempt_filename, core_file_name, + ".lsae", sizeof(exempt_filename)); hash = core_info_hash_string(exempt_filename); @@ -2912,7 +2906,6 @@ static bool core_info_update_core_aux_file(const char *path, bool create) * core info list this is *not* thread safe */ bool core_info_set_core_lock(const char *core_path, bool lock) { - size_t _len; core_info_t *core_info = NULL; char lock_file_path[PATH_MAX_LENGTH]; @@ -2931,11 +2924,8 @@ bool core_info_set_core_lock(const char *core_path, bool lock) return false; /* Get lock file path */ - _len = strlcpy(lock_file_path, core_info->path, - sizeof(lock_file_path)); - strlcpy(lock_file_path + _len, - ".lck", - sizeof(lock_file_path) - _len); + fill_pathname(lock_file_path, core_info->path, + ".lck", sizeof(lock_file_path)); /* Create or delete lock file, as required */ if (!core_info_update_core_aux_file(lock_file_path, lock)) @@ -2959,7 +2949,6 @@ bool core_info_set_core_lock(const char *core_path, bool lock) * must be checked externally */ bool core_info_get_core_lock(const char *core_path, bool validate_path) { - size_t _len; core_info_t *core_info = NULL; const char *core_file_path = NULL; bool is_locked = false; @@ -2990,11 +2979,8 @@ bool core_info_get_core_lock(const char *core_path, bool validate_path) return false; /* Get lock file path */ - _len = strlcpy(lock_file_path, core_file_path, - sizeof(lock_file_path)); - strlcpy(lock_file_path + _len, - ".lck", - sizeof(lock_file_path) - _len); + fill_pathname(lock_file_path, core_file_path, + ".lck", sizeof(lock_file_path)); /* Check whether lock file exists */ is_locked = path_is_valid(lock_file_path); @@ -3022,7 +3008,6 @@ bool core_info_set_core_standalone_exempt(const char *core_path, bool exempt) /* Static platforms do not support the contentless * cores menu */ #if defined(HAVE_DYNAMIC) - size_t _len; core_info_t *core_info = NULL; char exempt_file_path[PATH_MAX_LENGTH]; @@ -3034,11 +3019,8 @@ bool core_info_set_core_standalone_exempt(const char *core_path, bool exempt) return false; /* Get 'standalone exempt' file path */ - _len = strlcpy(exempt_file_path, core_info->path, - sizeof(exempt_file_path)); - strlcpy(exempt_file_path + _len, - ".lsae", - sizeof(exempt_file_path) - _len); + fill_pathname(exempt_file_path, core_info->path, + ".lsae", sizeof(exempt_file_path)); /* Create or delete 'standalone exempt' file, as required */ if (core_info_update_core_aux_file(exempt_file_path, exempt)) @@ -3062,7 +3044,6 @@ bool core_info_get_core_standalone_exempt(const char *core_path) /* Static platforms do not support the contentless * cores menu */ #if defined(HAVE_DYNAMIC) - size_t _len; core_info_t *core_info = NULL; char exempt_file_path[PATH_MAX_LENGTH]; @@ -3074,11 +3055,8 @@ bool core_info_get_core_standalone_exempt(const char *core_path) return false; /* Get 'standalone exempt' file path */ - _len = strlcpy(exempt_file_path, core_info->path, - sizeof(exempt_file_path)); - strlcpy(exempt_file_path + _len, - ".lsae", - sizeof(exempt_file_path) - _len); + fill_pathname(exempt_file_path, core_info->path, + ".lsae", sizeof(exempt_file_path)); /* Check whether 'standalone exempt' file exists */ if (path_is_valid(exempt_file_path)) diff --git a/cores/libretro-net-retropad/net_retropad_core.c b/cores/libretro-net-retropad/net_retropad_core.c index 3f3ef6c393b..a5168f3deb3 100644 --- a/cores/libretro-net-retropad/net_retropad_core.c +++ b/cores/libretro-net-retropad/net_retropad_core.c @@ -279,7 +279,7 @@ static bool ITifJSONObjectEndHandler(void* context) return true; } -static bool ITifJSONObjectMemberHandler(void* context, const char *pValue, size_t length) +static bool ITifJSONObjectMemberHandler(void* context, const char *pValue, size_t len) { ITifJSONContext *pCtx = (ITifJSONContext*)context; @@ -287,7 +287,7 @@ static bool ITifJSONObjectMemberHandler(void* context, const char *pValue, size_ if (pCtx->current_entry_str_val) return false; - if (length) + if (len) { if (string_is_equal(pValue, "expected_button")) pCtx->current_entry_uint_val = &pCtx->expected_button; @@ -299,11 +299,11 @@ static bool ITifJSONObjectMemberHandler(void* context, const char *pValue, size_ return true; } -static bool ITifJSONNumberHandler(void* context, const char *pValue, size_t length) +static bool ITifJSONNumberHandler(void* context, const char *pValue, size_t len) { ITifJSONContext *pCtx = (ITifJSONContext*)context; - if (pCtx->current_entry_uint_val && length && !string_is_empty(pValue)) + if (pCtx->current_entry_uint_val && len && !string_is_empty(pValue)) *pCtx->current_entry_uint_val = string_to_unsigned(pValue); /* ignore unknown members */ @@ -312,11 +312,11 @@ static bool ITifJSONNumberHandler(void* context, const char *pValue, size_t leng return true; } -static bool ITifJSONStringHandler(void* context, const char *pValue, size_t length) +static bool ITifJSONStringHandler(void* context, const char *pValue, size_t len) { ITifJSONContext *pCtx = (ITifJSONContext*)context; - if (pCtx->current_entry_str_val && length && !string_is_empty(pValue)) + if (pCtx->current_entry_str_val && len && !string_is_empty(pValue)) { if (*pCtx->current_entry_str_val) free(*pCtx->current_entry_str_val); @@ -729,7 +729,7 @@ static void retropad_update_input(void) pointer_y = (int16_t)state; } } - + /* Do not send extra descriptor state - RA side is not prepared to receive it */ if (i>1) continue; @@ -1036,7 +1036,7 @@ void NETRETROPAD_CORE_PREFIX(retro_run)(void) sensor_item_colors[median_index] = (uint16_t)(fabsf(32*4*value)) << 11; } } - + /* Button values for sensor test screen, since they do not follow any pattern, it is * * provided as a direct list. */ if (mouse_type == NETRETROPAD_MOUSE) @@ -1063,7 +1063,7 @@ void NETRETROPAD_CORE_PREFIX(retro_run)(void) offset = DESC_OFFSET(&mouse, 0, 0, RETRO_DEVICE_ID_MOUSE_HORIZ_WHEELUP); sensor_item_colors[86] = mouse.value[offset] ? 0xA000 : 0x0000; - + offset = DESC_OFFSET(&mouse, 0, 0, RETRO_DEVICE_ID_MOUSE_BUTTON_4); sensor_item_colors[88] = mouse.value[offset] ? 0xA000 : 0x0000; @@ -1095,7 +1095,7 @@ void NETRETROPAD_CORE_PREFIX(retro_run)(void) offset = DESC_OFFSET(&lightgun, 0, 0, RETRO_DEVICE_ID_LIGHTGUN_SELECT); sensor_item_colors[76] = lightgun.value[offset] ? 0xA000 : 0x0000; - + offset = DESC_OFFSET(&lightgun, 0, 0, RETRO_DEVICE_ID_LIGHTGUN_IS_OFFSCREEN); sensor_item_colors[77] = lightgun.value[offset] ? 0xA000 : 0x0000; @@ -1391,7 +1391,7 @@ void NETRETROPAD_CORE_PREFIX(retro_run)(void) pointer_prev_y = pointer_y_coord; } } - + NETRETROPAD_CORE_PREFIX(video_cb)(frame_buf, 320, 240, 640); retro_sleep(4); } diff --git a/disk_control_interface.c b/disk_control_interface.c index 225f4c97551..19ae7c5c5b9 100644 --- a/disk_control_interface.c +++ b/disk_control_interface.c @@ -273,58 +273,55 @@ void disk_control_get_image_label( * Generates an appropriate log/notification message * for a disk index change event **/ -static void disk_control_get_index_set_msg( +static size_t disk_control_get_index_set_msg( disk_control_interface_t *disk_control, unsigned num_images, unsigned index, bool success, - unsigned *msg_duration, char *msg, size_t len) + unsigned *msg_duration, char *s, size_t len) { - bool has_label = false; - char image_label[128]; - - image_label[0] = '\0'; - - if (!disk_control || !msg_duration || !msg || len < 1) - return; - - /* Attempt to get image label */ + size_t _len = 0; + if (!disk_control || !msg_duration || !s || len < 1) + return 0; + /* Check whether image was inserted or removed */ if (index < num_images) { + char image_label[128]; + bool has_label = false; + image_label[0] = '\0'; disk_control_get_image_label( disk_control, index, image_label, sizeof(image_label)); - has_label = !string_is_empty(image_label); - } - /* Get message duration - * > Default is 60 - * > If a label is shown, then increase duration by 50% - * > For errors, duration is always 180 */ - *msg_duration = success ? - (has_label ? 90 : 60) : - 180; + has_label = !string_is_empty(image_label); - /* Check whether image was inserted or removed */ - if (index < num_images) - { - size_t _len = strlcpy(msg, + /* Get message duration + * > Default is 60 + * > If a label is shown, then increase duration by 50% + * > For errors, duration is always 180 */ + *msg_duration = success ? (has_label ? 90 : 60) : 180; + + _len = strlcpy(s, success ? msg_hash_to_str(MSG_SETTING_DISK_IN_TRAY) : msg_hash_to_str(MSG_FAILED_TO_SET_DISK), len); if (has_label) - snprintf( - msg + _len, len - _len, ": %u/%u - %s", + _len += snprintf( + s + _len, len - _len, ": %u/%u - %s", index + 1, num_images, image_label); else - snprintf( - msg + _len, len - _len, ": %u/%u", + _len += snprintf( + s + _len, len - _len, ": %u/%u", index + 1, num_images); } else - strlcpy( - msg, + { + *msg_duration = success ? 60 : 180; + _len += strlcpy( + s, success ? msg_hash_to_str(MSG_REMOVED_DISK_FROM_TRAY) : msg_hash_to_str(MSG_FAILED_TO_REMOVE_DISK_FROM_TRAY), len); + } + return _len; } /** @@ -404,6 +401,7 @@ bool disk_control_set_index( disk_control_interface_t *disk_control, unsigned index, bool verbosity) { + size_t _len; bool error = false; unsigned num_images = 0; unsigned msg_duration = 0; @@ -430,12 +428,12 @@ bool disk_control_set_index( error = !disk_control->cb.set_image_index(index); /* Get log/notification message */ - disk_control_get_index_set_msg( + _len = disk_control_get_index_set_msg( disk_control, num_images, index, !error, &msg_duration, msg, sizeof(msg)); /* Output log/notification message */ - if (!string_is_empty(msg)) + if (_len > 0) { if (error) RARCH_ERR("[Disc]: %s\n", msg); @@ -444,7 +442,7 @@ bool disk_control_set_index( /* Errors should always be displayed */ if (verbosity || error) - runloop_msg_queue_push(msg, strlen(msg), 1, msg_duration, true, NULL, + runloop_msg_queue_push(msg, _len, 1, msg_duration, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); } @@ -799,7 +797,10 @@ bool disk_control_verify_initial_index( /* If current disk is incorrect, notify user */ if (!success && enabled) { - const char *_msg = msg_hash_to_str(MSG_FAILED_TO_SET_INITIAL_DISK); + char _msg[128]; + size_t _len = strlcpy(_msg, + msg_hash_to_str(MSG_FAILED_TO_SET_INITIAL_DISK), sizeof(_msg)); + RARCH_ERR( "[Disc]: Failed to set initial disc index:\n> Expected" " [%u] %s\n> Detected [%u] %s\n", @@ -810,7 +811,7 @@ bool disk_control_verify_initial_index( /* Ignore 'verbosity' setting - errors should * always be displayed */ - runloop_msg_queue_push(_msg, strlen(_msg), 0, 60, true, NULL, + runloop_msg_queue_push(_msg, _len, 0, 60, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); /* Since a failure here typically means that the @@ -835,12 +836,13 @@ bool disk_control_verify_initial_index( * is available */ if (disk_control->initial_num_images > 1) { + size_t _len; unsigned msg_duration = 0; char msg[128]; msg[0] = '\0'; - disk_control_get_index_set_msg( + _len = disk_control_get_index_set_msg( disk_control, disk_control->initial_num_images, image_index, true, &msg_duration, msg, sizeof(msg)); @@ -852,7 +854,7 @@ bool disk_control_verify_initial_index( * we do not want to 'overwrite' them */ if (verbosity) runloop_msg_queue_push( - msg, strlen(msg), 0, msg_duration, false, NULL, + msg, _len, 0, msg_duration, false, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); #ifdef HAVE_CHEEVOS diff --git a/disk_index_file.c b/disk_index_file.c index 9f49606ca89..c35c8739bc2 100644 --- a/disk_index_file.c +++ b/disk_index_file.c @@ -43,7 +43,7 @@ typedef struct char *image_path; } DCifJSONContext; -static bool DCifJSONObjectMemberHandler(void* context, const char *pValue, size_t length) +static bool DCifJSONObjectMemberHandler(void* context, const char *pValue, size_t len) { DCifJSONContext *pCtx = (DCifJSONContext*)context; @@ -51,7 +51,7 @@ static bool DCifJSONObjectMemberHandler(void* context, const char *pValue, size_ if (pCtx->current_entry_str_val) return false; - if (length) + if (len) { if (string_is_equal(pValue, "image_index")) pCtx->current_entry_uint_val = &pCtx->image_index; @@ -63,11 +63,11 @@ static bool DCifJSONObjectMemberHandler(void* context, const char *pValue, size_ return true; } -static bool DCifJSONNumberHandler(void* context, const char *pValue, size_t length) +static bool DCifJSONNumberHandler(void* context, const char *pValue, size_t len) { DCifJSONContext *pCtx = (DCifJSONContext*)context; - if (pCtx->current_entry_uint_val && length && !string_is_empty(pValue)) + if (pCtx->current_entry_uint_val && len && !string_is_empty(pValue)) *pCtx->current_entry_uint_val = string_to_unsigned(pValue); /* ignore unknown members */ @@ -76,14 +76,13 @@ static bool DCifJSONNumberHandler(void* context, const char *pValue, size_t leng return true; } -static bool DCifJSONStringHandler(void* context, const char *pValue, size_t length) +static bool DCifJSONStringHandler(void* context, const char *pValue, size_t len) { DCifJSONContext *pCtx = (DCifJSONContext*)context; - if (pCtx->current_entry_str_val && length && !string_is_empty(pValue)) + if (pCtx->current_entry_str_val && len && !string_is_empty(pValue)) { - if (*pCtx->current_entry_str_val) - free(*pCtx->current_entry_str_val); + free(*pCtx->current_entry_str_val); *pCtx->current_entry_str_val = strdup(pValue); } diff --git a/gfx/gfx_widgets.c b/gfx/gfx_widgets.c index f6f9e06f4d0..6024d958ece 100644 --- a/gfx/gfx_widgets.c +++ b/gfx/gfx_widgets.c @@ -1123,12 +1123,13 @@ static int gfx_widgets_draw_indicator( } else { + char txt[NAME_MAX_LENGTH]; unsigned height = p_dispwidget->simple_widget_height; - const char *txt = msg_hash_to_str(msg); + size_t _len = strlcpy(txt, msg_hash_to_str(msg), sizeof(txt)); width = font_driver_get_message_width( p_dispwidget->gfx_widget_fonts.regular.font, - txt, strlen(txt), 1.0f) + txt, _len, 1.0f) + p_dispwidget->simple_widget_padding * 2; gfx_display_draw_quad( diff --git a/input/common/linux_common.c b/input/common/linux_common.c index c3705bd5da7..32f7c45dded 100644 --- a/input/common/linux_common.c +++ b/input/common/linux_common.c @@ -201,6 +201,10 @@ linux_illuminance_sensor_t *linux_open_illuminance_sensor(unsigned rate) if (!sensor) goto error; + device = retro_opendir(IIO_DEVICES_DIR); + if (!device) + goto error; + sensor->millilux = 0; sensor->poll_rate = rate ? rate : DEFAULT_POLL_RATE; sensor->thread = NULL; /* We'll spawn a thread later, once we find a sensor */ @@ -243,7 +247,7 @@ linux_illuminance_sensor_t *linux_open_illuminance_sensor(unsigned rate) } error: - RARCH_ERR("Failed to find an illuminance sensor\n"); + RARCH_ERR("Failed to find an illuminance sensor in " IIO_DEVICES_DIR "\n"); retro_closedir(device); free(sensor); diff --git a/input/common/wayland_common.c b/input/common/wayland_common.c index 0be0406c32a..f17d2fe2ca8 100644 --- a/input/common/wayland_common.c +++ b/input/common/wayland_common.c @@ -996,8 +996,7 @@ static void wl_data_device_handle_drop(void *data, FILE *stream; int pipefd[2]; void *buffer; - size_t length; - size_t _len = 0; + size_t __len, _len = 0; ssize_t read = 0; char *line = NULL; char file_list[512][512] = { 0 }; @@ -1012,7 +1011,7 @@ static void wl_data_device_handle_drop(void *data, pipe(pipefd); - buffer = wayland_data_offer_receive(wl->input.dpy, offer_data->offer, &length, FILE_MIME, false); + buffer = wayland_data_offer_receive(wl->input.dpy, offer_data->offer, &__len, FILE_MIME, false); close(pipefd[1]); close(pipefd[0]); @@ -1023,7 +1022,7 @@ static void wl_data_device_handle_drop(void *data, wl_data_offer_destroy(offer_data->offer); free(offer_data); - if (!(stream = fmemopen(buffer, length, "r"))) + if (!(stream = fmemopen(buffer, __len, "r"))) { RARCH_WARN("[Wayland]: Failed to open DnD buffer\n"); return; diff --git a/input/drivers/test_input.c b/input/drivers/test_input.c index 7a0ae52b44b..c20a2029190 100644 --- a/input/drivers/test_input.c +++ b/input/drivers/test_input.c @@ -125,7 +125,7 @@ static bool KTifJSONObjectEndHandler(void* context) return true; } -static bool KTifJSONObjectMemberHandler(void* context, const char *pValue, size_t length) +static bool KTifJSONObjectMemberHandler(void* context, const char *pValue, size_t len) { KTifJSONContext *pCtx = (KTifJSONContext*)context; @@ -133,7 +133,7 @@ static bool KTifJSONObjectMemberHandler(void* context, const char *pValue, size_ if (pCtx->current_entry_str_val) return false; - if (length) + if (len) { if (string_is_equal(pValue, "frame")) pCtx->current_entry_uint_val = &pCtx->frame; @@ -149,11 +149,11 @@ static bool KTifJSONObjectMemberHandler(void* context, const char *pValue, size_ return true; } -static bool KTifJSONNumberHandler(void* context, const char *pValue, size_t length) +static bool KTifJSONNumberHandler(void* context, const char *pValue, size_t len) { KTifJSONContext *pCtx = (KTifJSONContext*)context; - if (pCtx->current_entry_uint_val && length && !string_is_empty(pValue)) + if (pCtx->current_entry_uint_val && len && !string_is_empty(pValue)) *pCtx->current_entry_uint_val = string_to_unsigned(pValue); /* ignore unknown members */ @@ -162,11 +162,11 @@ static bool KTifJSONNumberHandler(void* context, const char *pValue, size_t leng return true; } -static bool KTifJSONStringHandler(void* context, const char *pValue, size_t length) +static bool KTifJSONStringHandler(void* context, const char *pValue, size_t len) { KTifJSONContext *pCtx = (KTifJSONContext*)context; - if (pCtx->current_entry_str_val && length && !string_is_empty(pValue)) + if (pCtx->current_entry_str_val && len && !string_is_empty(pValue)) { if (*pCtx->current_entry_str_val) free(*pCtx->current_entry_str_val); diff --git a/input/drivers_joypad/test_joypad.c b/input/drivers_joypad/test_joypad.c index 28b475fa81c..d5a72b8822c 100644 --- a/input/drivers_joypad/test_joypad.c +++ b/input/drivers_joypad/test_joypad.c @@ -125,7 +125,7 @@ static bool JTifJSONObjectEndHandler(void* context) return true; } -static bool JTifJSONObjectMemberHandler(void* context, const char *pValue, size_t length) +static bool JTifJSONObjectMemberHandler(void* context, const char *pValue, size_t len) { JTifJSONContext *pCtx = (JTifJSONContext*)context; @@ -133,7 +133,7 @@ static bool JTifJSONObjectMemberHandler(void* context, const char *pValue, size_ if (pCtx->current_entry_str_val) return false; - if (length) + if (len) { if (string_is_equal(pValue, "frame")) pCtx->current_entry_uint_val = &pCtx->frame; @@ -149,11 +149,11 @@ static bool JTifJSONObjectMemberHandler(void* context, const char *pValue, size_ return true; } -static bool JTifJSONNumberHandler(void* context, const char *pValue, size_t length) +static bool JTifJSONNumberHandler(void* context, const char *pValue, size_t len) { JTifJSONContext *pCtx = (JTifJSONContext*)context; - if (pCtx->current_entry_uint_val && length && !string_is_empty(pValue)) + if (pCtx->current_entry_uint_val && len && !string_is_empty(pValue)) *pCtx->current_entry_uint_val = string_to_unsigned(pValue); /* ignore unknown members */ @@ -162,11 +162,11 @@ static bool JTifJSONNumberHandler(void* context, const char *pValue, size_t leng return true; } -static bool JTifJSONStringHandler(void* context, const char *pValue, size_t length) +static bool JTifJSONStringHandler(void* context, const char *pValue, size_t len) { JTifJSONContext *pCtx = (JTifJSONContext*)context; - if (pCtx->current_entry_str_val && length && !string_is_empty(pValue)) + if (pCtx->current_entry_str_val && len && !string_is_empty(pValue)) { if (*pCtx->current_entry_str_val) free(*pCtx->current_entry_str_val); diff --git a/input/drivers_joypad/udev_joypad.c b/input/drivers_joypad/udev_joypad.c index d06bb00b8e4..4e7fd4049c4 100644 --- a/input/drivers_joypad/udev_joypad.c +++ b/input/drivers_joypad/udev_joypad.c @@ -520,17 +520,18 @@ static void udev_joypad_poll(void) for (p = 0; p < MAX_USERS; p++) { - int i, len; + int i; + ssize_t _len; struct input_event events[32]; struct udev_joypad *pad = &udev_pads[p]; if (pad->fd < 0) continue; - while ((len = read(pad->fd, events, sizeof(events))) > 0) + while ((_len = read(pad->fd, events, sizeof(events))) > 0) { - len /= sizeof(*events); - for (i = 0; i < len; i++) + _len /= sizeof(*events); + for (i = 0; i < _len; i++) { uint16_t type = events[i].type; uint16_t code = events[i].code; diff --git a/input/include/hid_driver.h b/input/include/hid_driver.h index b6e63dcfc14..8d7143c4d4f 100644 --- a/input/include/hid_driver.h +++ b/input/include/hid_driver.h @@ -50,8 +50,8 @@ struct hid_driver const char *(*name)(void *handle, unsigned pad); const char *ident; void (*send_control)(void *handle, uint8_t *buf, size_t size); - int32_t (*set_report)(void *handle, uint8_t report_type, uint8_t report_id, uint8_t *data, size_t length); - int32_t (*get_report)(void *handle, uint8_t report_type, uint8_t report_id, uint8_t *data, size_t length); + int32_t (*set_report)(void *handle, uint8_t report_type, uint8_t report_id, uint8_t *data, size_t len); + int32_t (*get_report)(void *handle, uint8_t report_type, uint8_t report_id, uint8_t *data, size_t len); int32_t (*set_idle)(void *handle, uint8_t amount); int32_t (*set_protocol)(void *handle, uint8_t protocol); int32_t (*read)(void *handle, void *buf, size_t size); diff --git a/intl/msg_hash_be.h b/intl/msg_hash_be.h index 199f4b2420e..9290b0df6be 100644 --- a/intl/msg_hash_be.h +++ b/intl/msg_hash_be.h @@ -1374,7 +1374,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_LABEL_HELP_FILE_BROWSER_REMAP, - "Файл пераназначэння кіравання." + "Файл прызначэнняў кіравання." ) MSG_HASH( MENU_ENUM_LABEL_HELP_FILE_BROWSER_CHEAT, @@ -1970,10 +1970,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION, "Устаўка чорнага кадра" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Устаўляе чорны кадр(ы) паміж кадрамі. Можа істотна паменшыць размыццё шляхам эмуляцыі разгорткі ЭПТ, але зніжае яркасць. Не ўключайце адначасова з інтэрвалам абнаўлення > 1, падкадрамі, затрымкай кадра ці сінхранізацыяй з кадравай частатой кантэнту." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, "Устаўляе паміж кадрамі кадр(ы) чорнага колеру для падвышэння выразнасці руху. Выкарыстоўвайце значэнне толькі для бягучай частаты абнаўлення. Не дастасавальна з частатой абнаўлення не кратнай 60 Гц, напрыклад 144 Гц, 165 Гц і г. д. Не ўключайце адначасова з інтэрвалам абнаўлен[...]" @@ -2054,10 +2050,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_SUBFRAMES, "Падкадры шэйдэра" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "Устаўляе паміж кадрамі дадатковы кадр(ы) шэйдара. Дазваляе шэйдарам выводзіць эфекты з кадравай частатой вышэй зыходнай частаты кантэнту. Значэнне павінна адпавядаць бягучай частаце экрана. Не ўключайце адначасова з інтэрвалам абнаўлення > 1, устаўкай чорнага кадра, затр[...]" - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, "Устаўляе паміж кадрамі дадатковы кадр(ы) шэйдара для ўсіх шэйдарных эфектаў з частатой вышэй частаты кантэнту. Выкарыстоўвайце значэнне толькі для бягучай частаты абнаўлення. Не дастасавальна з частатой абнаўлення не кратнай 60 Гц, напрыклад 144 Гц, 165 Гц і г. д. Не ўключайце [...]" @@ -2130,10 +2122,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCAN_SUBFRAMES, "Сімуляцыя плывучага радка разгорткі" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Імітуе просты плавальны радок разгорткі па-над некалькімі падкадрамі шляхам дзялення экрана па вертыкалі і адмалёўкі кожнай яго часткі зыходзячы з колькасці падкадраў." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, "Імітуе просты плавальны радок разгорткі па-над некалькімі падкадрамі шляхам дзялення экрана па вертыкалі і адмалёўкі кожнай яго часткі зыходзячы з колькасці падкадраў ад верха да нізу экрана." diff --git a/intl/msg_hash_ca.h b/intl/msg_hash_ca.h index d69ff5b8ffc..f30b072fc08 100644 --- a/intl/msg_hash_ca.h +++ b/intl/msg_hash_ca.h @@ -802,6 +802,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PULSEAUDIO_SUPPORT, "Compatibilitat amb PulseAudio" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PIPEWIRE_SUPPORT, + "Suport de PipeWire" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COREAUDIO_SUPPORT, "Compatibilitat amb CoreAudio" @@ -882,6 +886,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, "Compatibilitat amb Video4Linux2" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SSL_SUPPORT, + "Compatibilitat amb SSL" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, "Compatibilitat amb libusb" @@ -1918,10 +1926,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION, "Inserció de fotogrames en negre" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Insereix fotogrames en negre entre fotogrames. Pot reduir considerablement el difuminat per moviment emulant l'escaneig de sortida que fan les pantalles CRT, però a costa de la brillantor. No ho combineu amb intervals d'intercanvi > 1, subfotogrames, retard dels fotogrames ni amb la sincronització a la velocitat de fotogrames del contingut exacta." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, "Insereix fotogrames en negre entre fotogrames per a millorar la claredat del moviment. Useu només l'opció designada per a la freqüència d'actualització actual de la pantalla. No ho feu servir per a freqüències d'actualització que no siguin múltiples de 60 Hz, com ara 144 Hz, 165 Hz, etc. No ho combineu amb intervals d'intercanvi > 1, subfotogrames, retard dels fotogrames ni amb la sincronització a la velocitat de fotogrames del contingut exacta. Es pot deixar activada l'opció de VRR ([...]" @@ -2002,10 +2006,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_SUBFRAMES, "Subfotogrames d'ombreig" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "Insereix fotogrames d'ombreig extra entre fotogrames. Permet a l'ombreig fer efectes que s'executen a fotogrames per segon més alts que la freqüència actual del contingut. S'haura d'establir a la freqüència de la pantalla. No ho combineu amb interval d'intercanvi > 1, BFI, retard dels fotogrames ni amb la sincronització a la velocitat de fotogrames del contingut exacta." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, "Insereix fotogrames d'ombreig extra entre fotogrames per a qualsevol efecte d'ombreig que estigui designat per a executar-se més ràpid que la freqüència del contingut. Useu només l'opció designada per a la freqüència d'actualització actual de la pantalla. No ho feu servir per a freqüències d'actualització que no siguin múltiples de 60 Hz, com ara 144 Hz, 165 Hz, etc. No ho combineu amb intervals d'intercanvi > 1, BFI, retard dels fotogrames ni amb la sincronització a la velocitat d[...]" @@ -2078,10 +2078,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCAN_SUBFRAMES, "Simulació de la línia d'escaneig en moviment" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Simula una línia d'escaneig en moviment bàsica sobre múltiples subfotogrames dividint la pantalla en vertical i renderitzant cada part d'acord amb quants subfotogrames hi ha." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, "Simula una línia d'escaneig en moviment bàsica sobre múltiples subfotogrames dividint la pantalla en vertical i renderitzant cada part d'acord amb quants subfotogrames hi ha des del capdamunt cap avall." @@ -3003,6 +2999,18 @@ MSG_HASH( MENU_ENUM_SUBLABEL_MIXER_ACTION_VOLUME, "Ajusta el volum del flux d'àudio." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_STREAM_STATE_NONE, + "Estat: no disponible" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_STREAM_STATE_STOPPED, + "Estat: aturat" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_STREAM_STATE_PLAYING, + "Estat: reproduint" + ) /* Settings > Audio > Menu Sounds */ @@ -3185,6 +3193,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_TURBO_MODE_CLASSIC, "Clàssic" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_TURBO_MODE_CLASSIC_TOGGLE, + "Clàssic (Alternar)" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_INPUT_TURBO_DEFAULT_BUTTON, "Botó per defecte del turbo" @@ -3458,6 +3470,10 @@ MSG_HASH( "Disc Anterior" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_INPUT_META_SHADER_TOGGLE, + "Shaders (Alternar)" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_INPUT_META_SHADER_NEXT, "Següent shader" @@ -3532,6 +3548,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_INPUT_META_RECORD_REPLAY_KEY, "Enregistrar la repetició" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_INPUT_META_REPLAY_SLOT_PLUS, + "Següent posició de repetició" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_INPUT_META_GRAB_MOUSE_TOGGLE, "Agafa el Ratolí (commuta)" @@ -3971,6 +3991,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_SAVE, "Desat ràpid automàtic" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, + "Carrega estat automàticament" + ) MSG_HASH( MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_LOAD, "Carrega automàticament el desat ràpid automàtic a l’inici." @@ -4213,6 +4237,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_STREAMING_URL, "URL de transmissió" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_UDP_STREAM_PORT, + "Port de transmissió UDP" + ) /* Settings > On-Screen Display */ @@ -4371,6 +4399,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_MOUSE_SPEED, "Velocitat del ratolí" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_MOUSE_SWIPE_THRESHOLD, + "Llindar de lliscament" + ) /* Settings > On-Screen Display > Video Layout */ @@ -5450,6 +5482,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_SETTINGS, "Visibilitat" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_SUMMARY, + "Resum d'inici" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CHEEVOS_VISIBILITY_ACCOUNT, "Missatges d'inici de sessió" @@ -5493,6 +5529,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_NETPLAY_MAX_PING, "Limitació del ping" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_NETPLAY_PASSWORD, + "Contrasenya del servidor" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_NETPLAY_START_AS_SPECTATOR, "Mode espectador del joc en línia" @@ -5666,6 +5706,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_CLEAN_PLAYLIST, "Neteja la llista de reproducció" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_DELETE_PLAYLIST, + "Esborrar llista de reproducció" + ) /* Settings > User */ @@ -6366,6 +6410,10 @@ MSG_HASH( MENU_ENUM_SUBLABEL_ADD_TO_FAVORITES_PLAYLIST, "Afegeix el contingut als “Favorits”." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_ADD_TO_PLAYLIST, + "Afegir a la llista de reproducció" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SET_CORE_ASSOCIATION, "Estableix l’associació del nucli" @@ -6467,6 +6515,14 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_LOAD_STATE, "Carrega estat" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_UNDO_LOAD_STATE, + "Desfer càrrega ràpida" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_UNDO_SAVE_STATE, + "Desfer desat ràpid" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_REPLAY_SLOT, "Posició de repitició" @@ -6487,10 +6543,18 @@ MSG_HASH( MENU_ENUM_SUBLABEL_ADD_TO_FAVORITES, "Afegeix el contingut als “Favorits”." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_QUICK_MENU_START_RECORDING, + "Inicia enregistrament" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_QUICK_MENU_STOP_RECORDING, "Atura l'enregistrament" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_QUICK_MENU_START_STREAMING, + "Inicia transmissió" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_QUICK_MENU_STOP_STREAMING, "Atura la retransmissió" @@ -6593,6 +6657,10 @@ MSG_HASH( /* Quick Menu > Controls > Manage Remap Files */ +MSG_HASH( + MENU_ENUM_LABEL_VALUE_REMAP_FILE_LOAD, + "Carrega el fitxer de reassignació" + ) /* Quick Menu > Controls > Manage Remap Files > Load Remap File */ @@ -6618,6 +6686,10 @@ MSG_HASH( /* Quick Menu > Cheats > Start or Continue Cheat Search */ +MSG_HASH( + MENU_ENUM_LABEL_CHEAT_SEARCH_EQ_VAL, + "Iguala a l'anterior" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CHEAT_DELETE_MATCH, "Suprimeix la coincidència #" @@ -6701,6 +6773,10 @@ MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET, "Carrega un shader predefinit. El pipeline de shaders es configurarà automàticament." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PREPEND, + "Anteposar el preajust" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_APPEND, "Afegeix el preajust" @@ -6831,6 +6907,10 @@ MSG_HASH( MENU_ENUM_SUBLABEL_SAVE_CURRENT_CONFIG_OVERRIDE_GAME, "Desa un fitxer de configuració d’excepcions que s’aplicarà només al contingut actual. Tindrà prioritat sobre la configuració principal." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_OVERRIDE_UNLOAD, + "Descarrega la personalització" + ) /* Quick Menu > Achievements */ @@ -7143,6 +7223,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_KEEP_REGION, "Preservar la regió" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_KEEP_DISC_INDEX, + "Preserva l'índex del disc" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_PLAYLIST_MANAGER_THUMBNAIL_MODE_DEFAULT, "Configuració predeterminada" @@ -7430,6 +7514,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_THUMBNAILS_RGUI, "Miniatura superior" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_MENU_RGUI_SWAP_THUMBNAILS, + "Intercanvia miniatures" + ) MSG_HASH( MENU_ENUM_SUBLABEL_MENU_RGUI_EXTENDED_ASCII, "Habilita la visualització de caràcters ASCII no estàndards. És necessari per compatibilitat amb certes llengües occidentals no angleses. Afecta moderadament al rendiment." @@ -7461,6 +7549,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_RGUI_ASPECT_RATIO_16_10_CENTRE, "16:10 (centrat)" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_RGUI_ASPECT_RATIO_21_9_CENTRE, + "21:9 (Centrat)" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_RGUI_ASPECT_RATIO_3_2_CENTRE, "3:2 (centrat)" @@ -7668,6 +7760,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_XMB_SHADOWS_ENABLE, "Efectes d'ombra" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_XMB_RIBBON_ENABLE, + "Canal de shaders" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME, "Color del tema" @@ -8087,6 +8183,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_MENU_HELP, "&Ajuda" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_QT_MENU_HELP_ABOUT, + "Sobre RetroArch" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_MENU_HELP_DOCUMENTATION, "Documentació" @@ -8095,6 +8195,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_LOAD_CORE, "Carregar Nucli" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_QT_LOADING_CORE, + "Carregant el nucli..." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_NAME, "Nom" @@ -8119,6 +8223,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_TAB_FILE_BROWSER_UP, "Amunt" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_QT_MENU_DOCK_CONTENT_BROWSER, + "Explorador de continguts" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_THUMBNAIL_BOXART, "Caràtula" @@ -8171,6 +8279,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_ITEMS_COUNT, "%1 elements" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_QT_DROP_IMAGE_HERE, + "Arrossega aquí una imatge" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_STOP, "Atura" @@ -8231,6 +8343,14 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_NEW_PLAYLIST, "Nova llista de reproducció" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_QT_DELETE_PLAYLIST, + "Esborrar llista de reproducció" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_QT_RENAME_PLAYLIST, + "Reanomena la llista de reproducció" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_QUESTION, "Qüestió" @@ -8593,6 +8713,10 @@ MSG_HASH( /* FIXME Still exists in a comment about being removed */ MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_FOOTER_OPACITY, "Opacitat del peu de pàgina" ) +MSG_HASH( /* FIXME Still exists in a comment about being removed */ + MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_HEADER_OPACITY, + "Opacitat de l'encapçalament" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_NETPLAY_ENABLE, "Joc en línia" @@ -8641,6 +8765,10 @@ MSG_HASH( MENU_ENUM_SUBLABEL_NETPLAY_LAN_SCAN_SETTINGS, "Cerca amfitrions de joc a la xarxa local i s’hi connecta." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_NETPLAY_MODE, + "Client de joc en xarxa" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CHEEVOS_DESCRIPTION, "Descripció" @@ -8958,6 +9086,10 @@ MSG_HASH( MSG_NETPLAY_CLIENT_DEVICES, "Dispositius" ) +MSG_HASH( + MSG_NETPLAY_CHAT_SUPPORTED, + "Compatibilitat amb el xat" + ) MSG_HASH( MSG_AUDIO_VOLUME, @@ -9259,6 +9391,10 @@ MSG_HASH( MSG_EXTRACTING, "Extraient" ) +MSG_HASH( + MSG_EXTRACTING_FILE, + "Extraient el fitxer" + ) MSG_HASH( MSG_FAILED_TO_ALLOCATE_MEMORY_FOR_PATCHED_CONTENT, "No s’ha pogut assignar memòria pel contingut apedaçat..." @@ -9519,6 +9655,10 @@ MSG_HASH( MSG_REWIND_UNSUPPORTED, "No està disponible el rebobinat perquè aquest nucli no té suport d'estat desats serialitzats." ) +MSG_HASH( + MSG_SAVING_RAM_TYPE, + "Desant el tipus de memòria RAM" + ) MSG_HASH( MSG_SAVING_STATE, "Desant estat" @@ -9527,6 +9667,10 @@ MSG_HASH( MSG_SCANNING, "Escanejant" ) +MSG_HASH( + MSG_SENDING_COMMAND, + "Enviant comanda" + ) MSG_HASH( MSG_SLOW_MOTION, "A càmera lenta." @@ -9559,6 +9703,10 @@ MSG_HASH( MSG_LEADERBOARD_BEST, "Millor: %s" /* Best: [value] */ ) +MSG_HASH( + MSG_TOGGLE_CONTENT_METADATA, + "Mostra metadates" + ) MSG_HASH( MSG_PRESS_AGAIN_TO_QUIT, "Premeu una altra vegada per sortir..." @@ -9727,6 +9875,10 @@ MSG_HASH( MSG_CHEEVOS_HARDCORE_MODE_ENABLE, "S’ha activat el mode expert d’assoliments; s’han desactivat els desats ràpids i el rebobinat." ) +MSG_HASH( + MSG_CHEEVOS_UNSUPPORTED_COUNT, + "%d no compatible" +) MSG_HASH( MSG_CHEEVOS_RICH_PRESENCE_SPECTATING, "Expectant %s" @@ -9747,6 +9899,10 @@ MSG_HASH( MSG_RESAMPLER_QUALITY_HIGHEST, "Més alt" ) +MSG_HASH( + MSG_DUMPING_DISC, + "Abocant el disc..." + ) MSG_HASH( MSG_DRIVE_NUMBER, "Unitat %d" @@ -9755,6 +9911,14 @@ MSG_HASH( MSG_MANUAL_CONTENT_SCAN_IN_PROGRESS, "Escanejant: " ) +MSG_HASH( + MSG_MANUAL_CONTENT_SCAN_END, + "Cerca finalitzada: " + ) +MSG_HASH( + MSG_CORE_BACKUP_SCANNING_CORE, + "Cercant al nucli: " + ) MSG_HASH( MSG_CORE_INSTALLATION_FAILED, "Ha fallat la instal·lació del nucli: " @@ -9821,6 +9985,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_FILE_BROWSER_OPEN_PICKER, "Obrir..." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_VIDEO_FILTER_FLICKER, + "Filtre de parpelleig" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_GAMMA, "Gamma del vídeo" @@ -9965,10 +10133,18 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_INPUT_TOUCH_ENABLE, "Tàctil" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_INPUT_SMALL_KEYBOARD_ENABLE, + "Teclat petit" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_MENU_SHOW_REBOOT, "Mostrar Reiniciar" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_MENU_SHOW_SHUTDOWN, + "Mostra 'Apagar'" + ) MSG_HASH( MSG_ROOM_PASSWORDED, "Amb contrasenya" @@ -10109,6 +10285,10 @@ MSG_HASH( MSG_3DS_BOTTOM_MENU_NO_STATE_DATA, "Sense\nDades" ) +MSG_HASH( + MSG_3DS_BOTTOM_MENU_NO_STATE_THUMBNAIL, + "No hi ha captures de pantalla" + ) MSG_HASH( MSG_3DS_BOTTOM_MENU_RESUME, "Continuar la partida" @@ -10117,6 +10297,14 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_ENABLE, "Habilitar la font" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_COLOR_RED, + "Color vermell de la font" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_COLOR_BLUE, + "Color blau de la font" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_SCALE, "Mida de la font" diff --git a/intl/msg_hash_chs.h b/intl/msg_hash_chs.h index a10ae839d18..d144548f8cc 100644 --- a/intl/msg_hash_chs.h +++ b/intl/msg_hash_chs.h @@ -1942,10 +1942,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION, "黑帧补间" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "在帧之间插入黑帧。可以通过仿真CRT扫描来大幅降低运动模糊,但以损失亮度为代价。 不要与 Swap Interval > 1, sub-frames, Frame Delay, 或者 Sync to Exact Content Framerate功能同时使用。" - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, "为增强运动清晰度在帧之间插入黑帧。仅使用为您当前显示刷新率指定的选项。 不以非倍数60赫兹的刷新速率使用,例如144赫兹,165赫兹等。 不要与Swap Interval > 1, sub-frames, Frame Delay, 或者 Sync to Exact Content Framerate功能同时使用. 可以打开系统的 VRR 选项,仅仅不是那个设置。 如果你注意到-任何-临时图像保留, 你应该在 120hz 处禁用, 对于更高的hz 则调整下面的暗色帧设置。" @@ -2026,10 +2022,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_SUBFRAMES, "着色器子帧" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "在帧之间插入额外的着色器帧。允许着色器执行特效提升原生游戏的帧率。 应当设置为当前屏幕的刷新率。不要与“交换间隔 > 1”, “BFI”, “帧延迟”, 或“精确同步游戏帧率“功能同时使用。" - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, "设计用来在任何可能的着色器特效上提升游戏本身的帧率,在帧之间插入额外的着色器帧。仅可以使用为您当前显示器刷新率指定的选项。 不要在非60赫兹倍数的屏幕刷新率使用,例如144赫兹,165赫兹等。 不要与“Swap 间隔 > 1”, “BFI”, “帧延迟”, 或者 “精确同步游戏帧率”功能同时使用. 可以保持系统的 VRR 功能打开,仅仅不是那个设置。" @@ -2102,10 +2094,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCAN_SUBFRAMES, "滚动扫描线模拟" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "在多个子帧上模拟基本的滚动扫描线,方法是垂直分割屏幕,并根据子帧的数量渲染屏幕的每个部分。" - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, "在多个子帧上模拟基本的滚动扫描线,方法是垂直分割屏幕,并根据从屏幕顶部向下的子帧数量渲染屏幕的每个部分。" diff --git a/intl/msg_hash_cht.h b/intl/msg_hash_cht.h index c0fd296910a..4ecb549c4a5 100644 --- a/intl/msg_hash_cht.h +++ b/intl/msg_hash_cht.h @@ -1922,10 +1922,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION, "插入黑幀" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "在每幀之間插入黑幀, 以降低亮度為代價, 透過模擬映像管螢幕掃描方式減少動態模糊。\n請勿與「垂直同步切換間隔」設定大於<1> 「著色器補幀」 「幀數延遲」 「準確同步執行幀率」同時使用。" - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, "設定值必須與螢幕預設更新率相同, 在每幀之間插入黑幀以增強動態清晰度。\n請勿與「垂直同步切換間隔」設定大於<1> 「著色器補幀」 「幀數延遲」 「準確同步執行幀率」同時使用。\n不適用於非60Hz倍數的更新率, 例如144Hz、165Hz等。\n允許系統可變更新率開啟, 但不是那個設定。\n 如果發現任何影像殘留, 請在120hz測試後關閉此選項, 至於更高的更新率可調整下方暗幀設定。" @@ -1998,10 +1994,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_SUBFRAMES, "著色器補幀" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "設定值必須與螢幕預設更新率相同, 在每幀之間插入著色器補幀, 提高每秒顯示影格數符合螢幕更新率。\n請勿與「垂直同步切換間隔」設定大於<1> 「插入黑幀」 「幀數延遲」 「準確同步執行幀率」同時使用。" - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, "設定值必須與螢幕預設更新率相同, 在每幀之間插入著色器補幀, 提高每秒顯示影格數符合螢幕更新率。\n請勿與「垂直同步切換間隔」設定大於<1> 「插入黑幀」 「幀數延遲」 「準確同步執行幀率」同時使用。\n不適用於非60Hz倍數的更新率, 例如144Hz、165Hz等。\n允許系統可變更新率開啟, 但不是那個設定。" diff --git a/intl/msg_hash_cs.h b/intl/msg_hash_cs.h index ec2ecb06bff..c991175324c 100644 --- a/intl/msg_hash_cs.h +++ b/intl/msg_hash_cs.h @@ -1898,10 +1898,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION, "Vložení černého rámečku" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Vkládá mezi snímky černý rámeček (rámečky). Může výrazně snížit rozmazání pohybu napodobením vnějšího skenu CRT, ale za cenu snížení jasu. Nekombinujte s intervalem výměny > 1, dílčími snímky, zpožděním snímků nebo synchronizací s přesnou snímkovou frekvencí obsahu." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, "Vkládá mezi snímky černý rámeček (rámečky) pro lepší zřetelnost pohybu. Použijte pouze možnost určenou pro aktuální obnovovací frekvenci displeje. Nelze použít při obnovovací frekvenci, která není násobkem 60 Hz, jako je 144 Hz, 165 Hz atd. Nekombinujte s funkcemi Výměna intervalu > 1, dílčími snímky, zpoždění snímku nebo Sync do přesné snímkové frekvence obsahu. Ponechání zapnutého systémového VRR je v pořádku, jen ne toto nastavení. Pokud zaznamen[...]" @@ -1982,10 +1978,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_SUBFRAMES, "Dílčí snímky shaderu" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "Vložení dalších snímků shaderu mezi snímky. Umožňuje shaderům provádět efekty, které běží při vyšší rychlosti snímků za sekundu, než je skutečná rychlost obsahu. Mělo by být nastaveno na aktuální Hz obrazovky. Nekombinujte s funkcemi Interval výměny > 1, BFI, zpoždění snímku nebo Sync do přesné snímkové frekvence obsahu." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, "Vkládá mezi snímky další snímky shaderu pro případné efekty shaderu, které jsou navrženy tak, aby běžely rychleji než rychlost obsahu. Použijte pouze možnost určenou pro aktuální obnovovací frekvenci displeje. Není určeno pro použití při obnovovacích frekvencích, které nejsou násobkem 60 Hz, například 144 Hz, 165 Hz atd. Nekombinujte s funkcemi Interval výměny > 1, BFI, zpoždění snímku nebo Sync do přesné snímkové frekvence obsahu. Ponechání zapnutého [...]" @@ -2058,10 +2050,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCAN_SUBFRAMES, "Simulace valivé skenovací linie" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Simuluje základní klouzavý skenovací řádek ve více dílčích snímcích vertikálním rozdělením obrazovky a vykreslením každé části obrazovky podle počtu dílčích snímků." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, "Simuluje základní klouzavý skenovací řádek ve více dílčích snímcích vertikálním rozdělením obrazovky a vykreslením každé části obrazovky podle toho, kolik dílčích snímků je od horního okraje obrazovky do dolního okraje." diff --git a/intl/msg_hash_de.h b/intl/msg_hash_de.h index 48bb6daff4e..9cad72f1019 100644 --- a/intl/msg_hash_de.h +++ b/intl/msg_hash_de.h @@ -1894,10 +1894,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION, "Schwarzes Bild einfügen" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Fügt Schwarzbild(er) zwischen Frames ein. Kann Bewegungsunschärfe durch Emulation von CRT-Abtast-Ausgabe erheblich reduzieren, aber auf Kosten der Helligkeit. Nicht kombinieren mit Swap-Intervall > 1, Unterbilder, Bildverzögerung oder mit exakter Inhaltssignalfrequenz synchronisieren." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, "Fügt Schwarzbild(er) zwischen Frames für verbesserte Bewegungsschärfe ein. Nur die Option benutzen, die für die aktuelle Aktualisierungsrate bestimmt ist. Nicht für die Verwendung bei Aktualisierungsraten mit nicht multiplen 60 Hz wie 144 Hz, 165Hz, usw. Nicht kombinieren mit Swap-Intervall > 1, Unterbilder, Bildverzögerung oder mit exakter Inhaltssignalfrequenz synchronisieren. System-VRR eingeschaltet lassen ist ok, nur nicht diese Einstellung. Wenn -irgendein- temporäres Bild-Nachleuch[...]" @@ -1978,10 +1974,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_SUBFRAMES, "Shader-Unterbilder" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "Fügt zusätzlich Shader-Bild(er) zwischen Frames ein. Ermöglicht Shadern den Einsatz von Effekten, die mit einer höheren Bildrate ausgeführt werden als die tatsächliche Inhaltsrate. Sollte auf die aktuelle Bildschirm-Hz gesetzt werden. Nicht kombinieren mit Swap-Intervall > 1, Schwarzbilder, Bildverzögerung oder mit exakter Inhaltssignalfrequenz synchronisieren." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, "Fügt zusätzlich Shader-Bild(er) zwischen Frames für alle möglichen Shader-Effekte ein, die darauf ausgelegt sind, schneller als die Inhaltsrate zu laufen. Nur die Option benutzen, die für die aktuelle Aktualisierungsrate bestimmt ist. Nicht für die Verwendung bei Aktualisierungsraten mit nicht multiplen 60 Hz wie 144 Hz, 165Hz, usw. Nicht kombinieren mit Swap-Intervall > 1, Schwarzbilder, Bildverzögerung oder mit exakter Inhaltssignalfrequenz synchronisieren. System-VRR eingeschaltet lass[...]" @@ -2054,10 +2046,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCAN_SUBFRAMES, "Rollende Scanline-Simulation" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Simuliert eine einfache rollende Scanline über mehrere Unterbilder, indem der Bildschirm vertikal aufgeteilt wird und jeder Teil des Bildschirms entsprechend der Anzahl der Unterbilder dargestellt wird." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, "Simuliert eine einfache rollende Scanline über mehrere Unterbilder, indem der Bildschirm vertikal aufgeteilt wird und jeder Teil des Bildschirms entsprechend der Anzahl der Unterbilder vom oberen Bildschirmrand nach unten gerendert wird." diff --git a/intl/msg_hash_es.h b/intl/msg_hash_es.h index 53c422c3437..010ac03ab12 100644 --- a/intl/msg_hash_es.h +++ b/intl/msg_hash_es.h @@ -1964,7 +1964,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Inserta uno o varios fotogramas negros entre fotogramas. Puede reducir en gran medida la distorsión por movimiento (motion blur) emulando el «scan-out» de los monitores CRT a costa de sacrificar brillo. No combinar con un intervalo de intercambio de VSync superior a 1, con subfotogramas, con el retraso de fotogramas o con Sincronizar FPS al contenido." + "ADVERTENCIA: los parpadeos rápidos pueden provocar persistencia de la imagen («imágenes fantasma») en algunas pantallas. Utiliza esta opción bajo tu propia responsabilidad. // Inserta uno o varios fotogramas negros entre fotogramas. Puede reducir en gran medida la distorsión por movimiento (motion blur) emulando el «scan-out» de los monitores CRT a costa de sacrificar brillo." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, @@ -2048,7 +2048,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "Introduce uno o varios fotogramas adicionales del shader entre fotogramas. Permite que los shaders reproduzcan efectos a una velocidad de fotogramas superior a la del contenido. Debería ser el mismo valor que la frecuencia de hercios actual de la pantalla. No combinar con un intervalo de intercambio de VSync superior a 1, con inserción de fotogramas negros, con el retraso de fotogramas o con Sincronizar FPS al contenido." + "ADVERTENCIA: los parpadeos rápidos pueden provocar persistencia de la imagen («imágenes fantasma») en algunas pantallas. Utiliza esta opción bajo tu propia responsabilidad. // Simula de forma básica el escalonamiento de las líneas de barrido a lo largo de varios subfotogramas dividendo la pantalla en partes verticales y renderizando cada una de las mismas en función de los subfotogramas que existan." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, @@ -2124,7 +2124,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Simula de forma básica el escalonamiento de las líneas de barrido a lo largo de varios subfotogramas dividendo la pantalla en partes verticales y renderizando cada una de las mismas en función de los subfotogramas que existan." + "ADVERTENCIA: los parpadeos rápidos pueden provocar persistencia de la imagen («imágenes fantasma») en algunas pantallas. Utiliza esta opción bajo tu propia responsabilidad. // Simula de forma básica el escalonamiento de las líneas de barrido a lo largo de varios subfotogramas dividendo la pantalla en partes verticales y renderizando cada una de las mismas en función de los subfotogramas que existan." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, diff --git a/intl/msg_hash_fi.h b/intl/msg_hash_fi.h index 7f263409476..3f32c6b2f9b 100644 --- a/intl/msg_hash_fi.h +++ b/intl/msg_hash_fi.h @@ -906,6 +906,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, "Video4Linux2-tuki" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SSL_SUPPORT, + "SSL-tuki" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, "libusb-tuki" diff --git a/intl/msg_hash_fr.h b/intl/msg_hash_fr.h index cea381215be..b4abcbff6e4 100644 --- a/intl/msg_hash_fr.h +++ b/intl/msg_hash_fr.h @@ -1940,7 +1940,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Insérer une ou plusieurs images noires entre les images. Peut considérablement réduire le flou de mouvement en émulant le balayage CRT, mais au détriment de la luminosité. Ne pas combiner avec les options Intervalle d'échange > 1, sous-trames, Retard d'images ou Synchroniser à la fréquence d'affichage exacte du contenu." + "AVERTISSEMENT : Un scintillement rapide peut causer une persistance de l'image sur certains écrans. À utiliser à vos risques et périls // Insérer des images noires entre les images. Permet de réduire considérablement le flou de mouvement en émulant le balayage CRT, mais au détriment de la luminosité." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, @@ -2024,7 +2024,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "Insérer une ou plusieurs images noires entre les images. Permet aux shaders de créer des effets qui tournent à une fréquence d'image plus élevée que la vitesse réelle du contenu. Doit être réglé sur les Hz de l'écran actuel. Ne pas combiner avec Intervalle d'échange > 1, BFI, Retard d'image ou Synchroniser à la fréquence d'affichage exacte du contenu." + "AVERTISSEMENT : Un scintillement rapide peut causer une persistance de l'image sur certains écrans. À utiliser à vos risques et périls // Simule une ligne de balayage roulante basique au cours de plusieurs sous-images en divisant l'écran verticalement et en rendant chaque partie de l'écran en fonction du nombre de sous-images disponibles." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, @@ -2100,7 +2100,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Simule une ligne de balayage roulante basique au cours de plusieurs sous-images en divisant l'écran verticalement et en rendant chaque partie de l'écran en fonction du nombre de sous-images disponibles." + "AVERTISSEMENT : Un scintillement rapide peut causer une persistance de l'image sur certains écrans. À utiliser à vos risques et périls // Simule une ligne de balayage roulante basique au cours de plusieurs sous-images en divisant l'écran verticalement et en rendant chaque partie de l'écran en fonction du nombre de sous-images disponibles." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, diff --git a/intl/msg_hash_gl.h b/intl/msg_hash_gl.h index 08c35e6c368..ec07ecf76fd 100644 --- a/intl/msg_hash_gl.h +++ b/intl/msg_hash_gl.h @@ -1950,10 +1950,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION, "Inserción de Black Frame" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Insira cadro(s) negros entre cadros. Pode reducir moito o desenfoque de movemento emulando a exploración CRT, pero a costa do brillo. Non combine con Intervalo de intercambio > 1, sub-fotogramas, Retraso de fotogramas ou Sincronizar a velocidade de fotogramas de contido exacto." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, "Insire cadro(s) negros entre cadros para mellorar a claridade do movemento. Use só a opción designada para a súa frecuencia de actualización da pantalla actual. Non se debe usar con frecuencias de actualización que non sexan múltiplos de 60 Hz, como 144 Hz, 165 Hz, etc. Non combines con Intervalo de intercambio > 1, subfotogramas, Retraso de fotogramas ou Sincronización con frecuencia de fotogramas de contido exacto. Deixar o sistema VRR activado está ben, pero non esa configuración. Se[...]" @@ -2034,10 +2030,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_SUBFRAMES, "Subcadros de sombreadores" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "Insira marco(s) de sombreado extra entre cadros. Permite aos sombreadores facer efectos que se executan a un fps superior á taxa de contido real. Debe configurarse na pantalla actual Hz. Non combines con Intervalo de intercambio > 1, BFI, Retraso de fotogramas ou Sincronizar a velocidade de fotogramas de contido exacto." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, "Insire cadro(s) de sombreado extra entre os fotogramas para os posibles efectos de sombreado que estean deseñados para executarse máis rápido que a taxa de contido. Use só a opción designada para a súa frecuencia de actualización da pantalla actual. Non debe usarse con frecuencias de actualización que non sexan múltiplos de 60 Hz, como 144 Hz, 165 Hz, etc. Non combine con Intervalo de intercambio > 1, BFI, Retraso de fotogramas ou Sincronización con frecuencia de fotogramas de contido [...]" @@ -2110,10 +2102,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCAN_SUBFRAMES, "Simulación de liña de escaneo rodante" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Simula unha liña de escaneo en rotación básica sobre varios subfotogramas dividindo a pantalla verticalmente e representando cada parte da pantalla segundo cantos subfotogramas haxa." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, "Simula unha liña de escaneo en rotación básica sobre varios subfotogramas dividindo a pantalla verticalmente cara arriba e representando cada parte da pantalla segundo cantos subfotogramas haxa desde a parte superior da pantalla cara abaixo." diff --git a/intl/msg_hash_hu.h b/intl/msg_hash_hu.h index d0ad427d66f..8669f44b9f0 100644 --- a/intl/msg_hash_hu.h +++ b/intl/msg_hash_hu.h @@ -706,6 +706,30 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL2_SUPPORT, "SDL 2 támogatás" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D8_SUPPORT, + "Direct3D 8 támogatás" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D9_SUPPORT, + "Direct3D 9 támogatás" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D10_SUPPORT, + "Direct3D 10 támogatás" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D11_SUPPORT, + "Direct3D 11 támogatás" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D12_SUPPORT, + "Direct3D 12 támogatás" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GDI_SUPPORT, + "GDI támogatás" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_VULKAN_SUPPORT, "Vulkan támogatás" @@ -786,6 +810,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PULSEAUDIO_SUPPORT, "PulseAudio támogatás" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PIPEWIRE_SUPPORT, + "PipeWire támogatás" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COREAUDIO_SUPPORT, "CoreAudio támogatás" @@ -866,6 +894,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, "Video4Linux2 támogatás" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SSL_SUPPORT, + "SSL támogatás" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, "libusb támogatás" @@ -1721,6 +1753,10 @@ MSG_HASH( MENU_ENUM_LABEL_HELP_AUDIO_DRIVER_PULSE, "PulseAudio illesztő. Ha a rendszer PulseAudio-t használ, mindenképpen ez az illesztő ajánlott pl. az ALSA helyett." ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_AUDIO_DRIVER_PIPEWIRE, + "PipeWire illesztő. Ha a rendszer PipeWire-t használ, mindenképpen ez az illesztő ajánlott pl. a PulseAudio helyett." + ) MSG_HASH( MENU_ENUM_LABEL_HELP_AUDIO_DRIVER_JACK, "Jack Audio Connection Kit illesztő." @@ -1912,7 +1948,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Egy vagy több fekete képkocka beszúrása a képkockák közé. A mozgási elmosódást nagymértékben csökkentheti a CRT hatás emulálásával, a fényerő kárára. Nem kombinálható az 1-nél nagyobb váltóperiódussal, az alképkockákkal, képvárakoztatással, vagy a tartalom pontos képfrissítéséhez igazítással." + "FIGYELEM: a gyors villódzás bizonyos kijelzőkön képvisszatartást okozhat. Csak saját felelősségre. // Fekete képkockák beszúrása a képkockák közé. A mozgásból adódó elmosódást a CRT-szerű megjelenítéssel nagyban csökkenti, de a fényesség rovására." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, @@ -1996,7 +2032,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "További képkockák előállítása a shaderek számára a képkockák közt, így a shaderek a tartalomnál magasabb frissítésű effekteket is használhatnak. Ajánlott a képernyő frissítési frekvenciájára állítani. Nem kombinálható az 1-nél nagyobb váltóperiódussal, a fekete képkocka beszúrással, a képvárakoztatással, vagy a tartalom pontos képfrissítéséhez igazodással." + "FIGYELEM: a gyors villódzás bizonyos kijelzőkön képvisszatartást okozhat. Csak saját felelősségre. // Egyszerű gördülő elektronsugár szimuláció több alképkockán keresztül, a képernyőt az alképkockák számának megfelelően függőlegesen felosztva és részlegesen megjelenítve." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, @@ -2072,7 +2108,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Egyszerű gördülő elektronsugár szimuláció több alképkockán keresztül, a képernyőt az alképkockák számának megfelelően függőlegesen felosztva és részlegesen megjelenítve." + "FIGYELEM: a gyors villódzás bizonyos kijelzőkön képvisszatartást okozhat. Csak saját felelősségre. // Egyszerű gördülő elektronsugár szimuláció több alképkockán keresztül, a képernyőt az alképkockák számának megfelelően függőlegesen felosztva és részlegesen megjelenítve." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, @@ -2497,6 +2533,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER_AXIS, "Egész-szorzós méretezés tengelye" ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_SCALE_INTEGER_AXIS, + "Méretezés a magasság, a szélesség, vagy mindkettő szerint. A fél lépések csak a nagyfelbontású forrásokra vonatkoznak." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCALE_INTEGER_SCALING, "Egész-szorzós méretezés" @@ -2991,6 +3031,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_AUDIO_LATENCY, "Hangkésleltetés (ms)" ) +MSG_HASH( + MENU_ENUM_SUBLABEL_AUDIO_LATENCY, + "A legnagyobb hangkésleltetés ezredmásodpercben. Az illesztő a tényleges késleltetést ezen érték 50%-a körül próbálja tartani. Ha a hangillesztő nem tudja a kívánt késleltetést biztosítani, az érték eltérhet." + ) #ifdef HAVE_MICROPHONE /* Settings > Audio > Input */ @@ -3207,6 +3251,26 @@ MSG_HASH( MENU_ENUM_SUBLABEL_MIXER_ACTION_VOLUME, "A hangfolyam hangereje." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_STREAM_STATE_NONE, + "Állapot: nincs adat" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_STREAM_STATE_STOPPED, + "Leállítva" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_STREAM_STATE_PLAYING, + "Lejátszás alatt" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_STREAM_STATE_PLAYING_LOOPED, + "Lejátszás alatt (ismétlés)" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_AUDIO_STREAM_STATE_PLAYING_SEQUENTIAL, + "Lejátszás alatt (lépés a következőre)" + ) /* Settings > Audio > Menu Sounds */ @@ -4487,6 +4551,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_CORE_INFO_SAVESTATE_BYPASS, "Maginformációs fájl mentési tulajdonságainak átlépése" ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CORE_INFO_SAVESTATE_BYPASS, + "A maginformációs fájl állapotmentési információinak figyelmen kívül hagyása. Így lehet kísérletezni az ezzel összefüggő funkciókkal (runahead, visszatekerés, stb.)." + ) #ifndef HAVE_DYNAMIC MSG_HASH( MENU_ENUM_LABEL_VALUE_ALWAYS_RELOAD_CORE_ON_RUN_CONTENT, @@ -4727,6 +4795,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_SAVE, "Játékállás automatikus mentése" ) +MSG_HASH( + MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_SAVE, + "Automatikus állapotmentés a tartalom bezárásakor. Ez az állapot töltődik be indításkor, ha az \"Automatikus játékállás betöltés\" be van kapcsolva." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, "Automatikus játékállás betöltés" @@ -5278,6 +5350,14 @@ MSG_HASH( MENU_ENUM_SUBLABEL_INPUT_OVERLAY_ABXY_DIAGONAL_SENSITIVITY, "A négy előlapi gomb átfedő zónáinak mérete. 100% a nyolc irányban szimmetrikus beállítás." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_ANALOG_RECENTER_ZONE, + "Analóg központosítási zóna" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_INPUT_OVERLAY_ANALOG_RECENTER_ZONE, + "Ezen a zónán belüli érintéskor az analóg kar érzékelése az első érintéshez lesz viszonyítva." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_OVERLAY, "Képernyőrátétek" @@ -11787,6 +11867,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_THUMBNAIL_TITLE_SCREEN, "Kezdő képernyő" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_QT_THUMBNAIL_LOGO, + "Logó" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_ALL_PLAYLISTS, "Minden játéklista" @@ -15405,6 +15489,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_ENABLE, "Betűkészlet engedélyezése" ) +MSG_HASH( + MENU_ENUM_SUBLABEL_BOTTOM_FONT_ENABLE, + "Az alsó menü betűkészlete, a gombleírásokhoz az alsó képernyőn. Nem vonatkozik a játékállás mentés dátumára." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_COLOR_RED, "Betűszín, piros komponens" diff --git a/intl/msg_hash_it.h b/intl/msg_hash_it.h index c84c4aa6cff..5abe4c8e173 100644 --- a/intl/msg_hash_it.h +++ b/intl/msg_hash_it.h @@ -1920,7 +1920,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Inserisci fotogrammi neri tra fotogrammi. Puoi ridurre notevolmente la sfocatura del movimento emulando la scansione CRT, ma al costo della luminosità. Non combinare con Intervallo di scambio > 1, sottoframe, ritardo del frame o Sincronizza per ottenere un quadro di contenuto esatto." + "ATTENZIONE: lo sfarfallio rapido può causare persistenza delle immagini su alcuni display. Usare a proprio rischio // Inserire quadri neri tra i quadri. Può ridurre notevolmente la sfocatura del movimento emulando la scansione CRT, ma al costo della luminosità." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, @@ -2004,7 +2004,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "Inserisci fotogrammi shader aggiuntivi tra i quadri. Permette agli ombreggiatori di eseguire effetti con fps superiori al tasso di contenuto effettivo. Deve essere impostata alla schermata corrente Hz. Non combinare con Swap Intervallo > 1, BFI, Ritardo Frame o Sincronizzazione con Esact Content Framerate." + "ATTENZIONE: Il flickering rapido può causare persistenza delle immagini su alcuni display. Utilizzare a proprio rischio // Simula una linea di scanline di base su più sotto-frame dividendo lo schermo su verticalmente e rendendo ogni parte dello schermo in base a quanti sotto-frame ci sono." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, @@ -2080,7 +2080,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Simula una linea di scanline di base su più sotto-frame dividendo lo schermo su verticalmente e rendendo ogni parte dello schermo in base a quanti sotto-frame ci sono." + "ATTENZIONE: Il flickering rapido può causare persistenza delle immagini su alcuni display. Utilizzare a proprio rischio // Simula una linea di scanline di base su più sotto-frame dividendo lo schermo su verticalmente e rendendo ogni parte dello schermo in base a quanti sotto-frame ci sono." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, @@ -4487,6 +4487,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_CORE_INFO_SAVESTATE_BYPASS, "Supera le informazioni del core per le informazioni del salvataggio di stato" ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CORE_INFO_SAVESTATE_BYPASS, + "Specifica se ignorare le informazioni di base salvare le capacità di stato, consentendo di sperimentare con le caratteristiche correlate (eseguire avanti, riavvolgimento, ecc)." + ) #ifndef HAVE_DYNAMIC MSG_HASH( MENU_ENUM_LABEL_VALUE_ALWAYS_RELOAD_CORE_ON_RUN_CONTENT, @@ -4727,6 +4731,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_SAVE, "Stato di salvataggio automatico" ) +MSG_HASH( + MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_SAVE, + "Crea automaticamente uno stato di salvataggio quando il contenuto è chiuso. Questo stato di salvataggio viene caricato all'avvio se 'Stato di caricamento automatico' è abilitato." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SAVESTATE_AUTO_LOAD, "Carica automaticamente i salvataggi" @@ -15533,6 +15541,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_ENABLE, "Attiva Font" ) +MSG_HASH( + MENU_ENUM_SUBLABEL_BOTTOM_FONT_ENABLE, + "Visualizza il carattere del menu inferiore. Abilita per visualizzare le descrizioni dei pulsanti nella schermata inferiore. Questo esclude la data di salvataggio dello stato." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_BOTTOM_FONT_COLOR_RED, "Colore rosso del font" diff --git a/intl/msg_hash_ja.h b/intl/msg_hash_ja.h index a8c01dee562..847df5aa0da 100644 --- a/intl/msg_hash_ja.h +++ b/intl/msg_hash_ja.h @@ -726,6 +726,30 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SDL2_SUPPORT, "SDL2 対応" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D8_SUPPORT, + "Direct3D 8 対応" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D9_SUPPORT, + "Direct3D 9 対応" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D10_SUPPORT, + "Direct3D 10 対応" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D11_SUPPORT, + "Direct3D 11 対応" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_D3D12_SUPPORT, + "Direct3D 12 対応" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_GDI_SUPPORT, + "GDI 対応" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_VULKAN_SUPPORT, "Vulkan 対応" @@ -806,6 +830,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PULSEAUDIO_SUPPORT, "PulseAudio 対応" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_PIPEWIRE_SUPPORT, + "PipeWire 対応" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_COREAUDIO_SUPPORT, "CoreAudio 対応" @@ -886,6 +914,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_V4L2_SUPPORT, "Video4Linux2 対応" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_SSL_SUPPORT, + "SSL 対応" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_LIBUSB_SUPPORT, "libusb 対応" @@ -1934,10 +1966,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION, "黒フレーム挿入" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "フレーム間に黒フレームを挿入します。CRT スキャンをエミュレートすることで残像感を大幅に減らすことができますが、明るさが減少します。1 以上のスワップ間隔 (自動は可)、フレーム遅延または正確なコンテンツフレームレートに同期と組み合わせないでください。" - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, "フレーム間に黒フレームを挿入し、動きをより鮮明にします。現在のディスプレイのリフレッシュレート用に準備されたオプションのみを使用してください。144Hz、165Hz など、60Hz の倍数ではないリフレッシュレートでは使用できません。1 以上のスワップ間隔、フレーム遅延または正確なフレームレートに同期と組み合わせないでください。" @@ -2018,10 +2046,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_SUBFRAMES, "シェーダーサブフレーム" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "フレーム間に追加のシェーダーフレームを挿入します。シェーダーで実際のコンテンツフレームレートよりも高い FPS で動作するエフェクトを実行できるようになります。現在のディスプレイ Hz に対応するオプションを設定する必要があります。1 以上のスワップ間隔、黒フレーム挿入、正確なフレームレートに同期と組み合わせないでください。" - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, "コンテンツフレームレートよりも高速に動作するように設計されたシェーダー効果用に、フレーム間に追加のシェーダーフレームを挿入します。現在のディスプレイ Hz に対応するオプションのみを使用してください。144Hz、165Hz など、60Hz の倍数ではないリフレッシュレートでは使用できません。" @@ -2094,10 +2118,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCAN_SUBFRAMES, "ループ回転スキャンラインシミュレーション" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "画面を垂直に分割し、サブフレームの数に応じて画面の各部分をレンダリングすることで、複数のサブフレームにわたるブラウン管をカメラで撮影したときのようなループ回転スキャンラインをシミュレートします。" - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, "画面を垂直に分割し、画面の上端から下端にあるサブフレームの数に応じて画面の各部分をレンダリングすることで、複数のサブフレームにわたるブラウン管をカメラで撮影したときのようなループ回転スキャンラインをシミュレートします。" @@ -11891,6 +11911,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_THUMBNAIL_TITLE_SCREEN, "タイトルスクリーン" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_QT_THUMBNAIL_LOGO, + "ロゴ" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_QT_ALL_PLAYLISTS, "すべてのプレイリスト" diff --git a/intl/msg_hash_ko.h b/intl/msg_hash_ko.h index 282e8a4c7f6..9ef6d437fbb 100644 --- a/intl/msg_hash_ko.h +++ b/intl/msg_hash_ko.h @@ -1982,10 +1982,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION, "검은 프레임 삽입" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "프레임 사이에 검정색 프레임을 삽입합니다. CRT 스캔을 에뮬레이션하여 모션 블러를 크게 줄일 수 있지만 밝기는 저하됩니다. 스왑 간격 > 1, 서브프레임, 프레임 지연, 정확한 프레임 동기화 설정들과 함께 사용하지 마십시오." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, "향상된 모션 선명도를 위해 프레임 사이에 검정색 프레임을 삽입합니다. 현재 디스플레이의 주사율과 일치하는 옵션만 사용하십시오. 144Hz, 165Hz 등과 같이 60Hz의 배수가 아닌 새로 고침 빈도에서는 사용하지 마십시오. 스왑 간격 > 1, 서브프레임, 프레임 지연, 정확한 프레임 동기화 설정들과 함께 사용하지 마십시오. 시스템의 VRR 설정을 켜두는 것은 괜찮습니다. 일시적인 화면 [...]" @@ -2066,10 +2062,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_SUBFRAMES, "셰이더 서브프레임" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "프레임 사이에 추가 셰이더 프레임을 삽입합니다. 셰이더가 콘텐츠의 프레임 레이트보다 더 높은 프레임 레이트로 작업을 수행할 수 있게 합니다. 현재 디스플레이의 주사율 Hz와 일치하는 값으로 설정되어야 합니다. 스왑 간격 > 1, 검정색 프레임 삽입, 정확한 프레임 동기화 설정들과 함께 사용하지 마십시오." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, "콘텐츠의 프레임 레이트보다 더 높은 프레임 레이트로 실행되도록 설계된 셰이더를 위해 프레임 사이에 추가 셰이더 프레임을 삽입합니다. 현재 디스플레이의 주사율과 일치하는 옵션만 사용하십시오. 144Hz, 165Hz 등과 같이 60Hz의 배수가 아닌 새로 고침 빈도에서는 사용하지 마십시오. 스왑 간격 > 1, 검정색 프레임 삽입, 프레임 지연, 정확한 프레임 동기화 설정들과 함께 사용[...]" @@ -2142,10 +2134,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCAN_SUBFRAMES, "롤링 스캔라인 시뮬레이션" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "화면을 여러 세로 구간으로 나누고 다수의 서브프레임으로부터 각 구간에 해당하는 서브프레임을 렌더하는 방식으로 롤링 스캔라인 효과를 흉내냅니다." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, "화면을 여러 세로 구간으로 나누고 다수의 서브프레임으로부터 각 구간에 해당하는 서브프레임을 위에서 아래로 렌더하는 방식으로 롤링 스캔라인 효과를 흉내냅니다." diff --git a/intl/msg_hash_pl.h b/intl/msg_hash_pl.h index aa6da288355..c0378c2b144 100644 --- a/intl/msg_hash_pl.h +++ b/intl/msg_hash_pl.h @@ -1926,10 +1926,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION, "Wstawianie czarnej klatki" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Wstaw czarne ramki między ramkami. Może znacznie zmniejszyć rozmycie ruchu poprzez emulowanie skanowania CRT, ale kosztem jasności. Nie łączyć z Interwalem Swap > 1, podramki, ramki Frame lub Synchronizuj z dokładną zawartością." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, "Wstawia czarne ramki pomiędzy ramkami w celu zwiększenia jasności ruchu. Użyj opcji tylko dla aktualnego wskaźnika odświeżania ekranu. Nie używać z szybkością odświeżania, które nie są wielokrotnościami 60Hz, takimi jak 144Hz, 165Hz itp. Nie łączyć z Interwalem Swap > 1, podramki, ramki Frame lub Synchronizuj z dokładną zawartością. Pozostawienie systemu VRR jest w porządku, a nie to ustawienie. Jeśli zauważysz dowolne tymczasowe zatrzymanie obrazu, powinieneś wyłącz[...]" @@ -2010,10 +2006,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_SUBFRAMES, "Pod-klatki shadera" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "Wstawia dodatkowe klatki shadera pomiędzy klatkami. Umożliwia shaderom wykonywanie efektów, które działają z wyższą liczbą klatek na sekundę niż rzeczywista częstotliwość wyświetlania treści. Powinno być ustawione na bieżące Hz ekranu. Nie łączyć z opcjami Interwał zmiany klatek > 1, BFI, Opóźnienie klatek lub Synchronizuj do dokładnego framerate'u zawartości." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, "Wstawia dodatkowe klatki shaderów pomiędzy klatkami dla wszelkich możliwych efektów shaderów, które są zaprojektowane do działania szybciej niż częstotliwość zawartości. Używaj tylko opcji wyznaczonej dla bieżącej częstotliwości odświeżania wyświetlacza. Nie używać przy częstotliwościach odświeżania, które nie są wielokrotnościami 60 Hz, takich jak 144 Hz, 165 Hz itp. Nie łączyć z opcjami Interwał zmiany klatek > 1, BFI, Opóźnienie klatek lub Synchronizuj do d[...]" @@ -2086,10 +2078,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCAN_SUBFRAMES, "Symulacja prześwietlania" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Symuluje prostą kroczącą linię skanującą na wielu podklatkach poprzez podzielenie ekranu w górę pionowo i renderowanie każdej części ekranu w zależności od liczby podklatek." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, "Symuluje prostą kroczącą linię skanującą na wielu podklatkach poprzez podzielenie ekranu w górę pionowo i renderowanie każdej części ekranu w zależności od liczby podklatek." diff --git a/intl/msg_hash_pt_br.h b/intl/msg_hash_pt_br.h index 7db4521c84c..b09d7380e01 100644 --- a/intl/msg_hash_pt_br.h +++ b/intl/msg_hash_pt_br.h @@ -1982,10 +1982,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCAN_SUBFRAMES, "Simulação do rolamento da linha de varredura" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Simula o rolamento básico da linha de varredura em múltiplos sub-quadros, dividindo a tela verticalmente e renderizando cada parte conforme a quantidade de sub-quadros existente." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, "Simula o rolamento básico da linha de varredura em múltiplos sub-quadros, dividindo a tela verticalmente e renderizando cada parte conforme a quantidade de sub-quadros existente no canto superior da tela para baixo." diff --git a/intl/msg_hash_pt_pt.h b/intl/msg_hash_pt_pt.h index 87fbf2b3010..fd4ff934121 100644 --- a/intl/msg_hash_pt_pt.h +++ b/intl/msg_hash_pt_pt.h @@ -1713,6 +1713,10 @@ MSG_HASH( MENU_ENUM_LABEL_HELP_AUDIO_DRIVER_OSS, "Driver de Sistema de Som Aberto Legado." ) +MSG_HASH( + MENU_ENUM_LABEL_HELP_AUDIO_DRIVER_ALSA, + "Driver ALSA padrão." + ) MSG_HASH( MENU_ENUM_LABEL_HELP_AUDIO_DRIVER_SL, "Driver OpenSL." @@ -1838,10 +1842,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION, "Inserção de frame preto" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Inserir fotograma(s) preto(s) entre fotogramas. Pode reduzir significativamente a desfocagem de movimento ao emular a varrimento CRT, mas à custa do brilho. Não combinar com Intervalo de troca > 1, subfotogramas, Atraso de fotogramas ou Sincronizar com a frequência exata do conteúdo." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, "Insere fotograma(s) preto(s) entre os fotogramas para maior nitidez do movimento. Utilize apenas a opção designada para a taxa de atualização do seu ecrã atual. Não deve ser utilizada em taxas de atualização que não sejam múltiplos de 60 Hz, como 144 Hz, 165 Hz, etc. Não combinar com Intervalo de troca > 1, subfotogramas, Atraso de fotogramas, ou Sincronizar com a frequência de fotogramas exata do conteúdo. Deixar o VRR do sistema ligado é aceitável, mas não esta definição. Se [...]" @@ -1922,10 +1922,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_SUBFRAMES, "Subfotogramas de sombreamento" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "Insere fotograma(s) de sombreador extra entre fotogramas. Permite que os sombreadores façam efeitos que funcionem a um fps mais elevado do que a taxa de conteúdo atual. Deve ser definido para o Hz do ecrã atual. Não combinar com Intervalo de troca > 1, BFI, Atraso de fotogramas ou Sincronizar com a frequência de fotogramas exata do conteúdo." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, "Insere fotograma(s) de sombreador extra entre fotogramas para quaisquer efeitos de sombreador possíveis que tenham sido concebidos para serem executados mais rapidamente do que a taxa de conteúdo. Utilize apenas a opção designada para a taxa de atualização do seu ecrã atual. Não deve ser usada em taxas de atualização que não sejam múltiplos de 60 Hz, como 144 Hz, 165 Hz, etc. Não combinar com Intervalo de troca > 1, BFI, Atraso de fotogramas ou Sincronizar com a frequência de fotog[...]" diff --git a/intl/msg_hash_ru.h b/intl/msg_hash_ru.h index fdd1b07403f..33ac5391e7b 100644 --- a/intl/msg_hash_ru.h +++ b/intl/msg_hash_ru.h @@ -1972,7 +1972,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Вставляет чёрный кадр(ы) между кадрами. Может существенно уменьшить размытие путём эмуляции развёртки ЭЛТ, но снижает яркость. Не включайте одновременно с интервалом обновления > 1, подкадрами, задержкой кадра или синхронизацией с кадровой частотой контента." + "ВНИМАНИЕ: быстрое мерцание на некоторых дисплеях может приводить к остаточному изображению. Используйте с осторожностью // Вставляет между кадрами кадр(ы) чёрного цвета. Может существенно уменьшить размытие, эмулируя развёртку ЭЛТ, но снижает яркость." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, @@ -2056,7 +2056,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "Вставляет между кадрами дополнительный кадр(ы) шейдера. Позволяет шейдерам выводить эффекты с кадровой частотой выше исходной частоты контента. Значение должно соответствовать действующей частоте экрана. Не включайте одновременно с интервалом обновления > 1, вставкой чё[...]" + "ВНИМАНИЕ: быстрое мерцание на некоторых дисплеях может приводить к остаточному изображению. Используйте с осторожностью // Имитирует простую плавающую строку развёртки поверх нескольких подкадров, разделяя экран по вертикали и отрисовывая каждую часть исходя из числа п[...]" ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, @@ -2132,7 +2132,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Имитирует простую плавающую строку развёртки поверх нескольких подкадров путём деления экрана по вертикали и отрисовки каждой его части исходя из количества подкадров." + "ВНИМАНИЕ: быстрое мерцание на некоторых дисплеях может приводить к остаточному изображению. Используйте с осторожностью // Имитирует простую плавающую строку развёртки поверх нескольких подкадров, разделяя экран по вертикали и отрисовывая каждую часть исходя из числа п[...]" ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, diff --git a/intl/msg_hash_tr.h b/intl/msg_hash_tr.h index 157c5230a97..6e77dde53f6 100644 --- a/intl/msg_hash_tr.h +++ b/intl/msg_hash_tr.h @@ -1956,7 +1956,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Karelerin arasına siyah kareler ekleyin. CRT tarama çıkışını taklit ederek hareket bulanıklığını büyük ölçüde azaltabilir, ancak parlaklık azalabilir. Değiştirme Aralığı > 1, alt-kareler, Kare Gecikmesi veya Tam İçerik Kare Hızına Eşitleme ile birleştirmeyin." + "UYARI: Hızlı titreme bazı ekranlarda görüntünün kalıcı olmasına neden olabilir. Kullanım riski size aittir // Karelerin arasına siyah kareler ekleyin. CRT tarama çıkışını taklit ederek hareket bulanıklığını büyük ölçüde azaltabilir, ancak parlaklık pahasına." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, @@ -2040,7 +2040,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "Kareler arasına fazladan gölgelendirici kareler ekleyin. Gölgelendiricilerin gerçek içerik hızından daha yüksek bir fps hızında çalışan efektler oluşturmasına olanak tanır. Mevcut ekran Hz değerine ayarlanmalıdır. Takas Aralığı > 1, BFI, Kare Gecikmesi veya Tam İçerik Kare Hızına Eşitle ile birleştirmeyin." + "UYARI: Hızlı titreme bazı ekranlarda görüntünün kalıcı olmasına neden olabilir. Kullanım riski size aittir // Ekranı dikey olarak bölerek ve ekranın her bir bölümünü kaç alt kare olduğuna göre işleyerek birden fazla alt kare üzerinde temel bir dönen tarama çizgisini taklit eder." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, @@ -2116,7 +2116,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Ekranı dikey olarak böler ve ekranın her bir bölümünü kaç alt kare olduğuna göre işleyerek birden fazla alt kare üzerinde temel bir dönen tarama çizgisini taklit eder." + "UYARI: Hızlı titreme bazı ekranlarda görüntünün kalıcı olmasına neden olabilir. Kullanım riski size aittir // Ekranı dikey olarak bölerek ve ekranın her bir bölümünü kaç alt kare olduğuna göre işleyerek birden fazla alt kare üzerinde temel bir dönen tarama çizgisini taklit eder." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, diff --git a/intl/msg_hash_uk.h b/intl/msg_hash_uk.h index f1d04ea76c6..d7399efe330 100644 --- a/intl/msg_hash_uk.h +++ b/intl/msg_hash_uk.h @@ -1970,10 +1970,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_BLACK_FRAME_INSERTION, "Вставка чорного кадра" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Вставте чорні рамки між кадрами. Може значно зменшити розмиття руху, імітуючи розгортку ЕПТ, але ціною втрати яскравості. Не поєднуйте з інтервалом заміни > 1, під кадрами, затримкою кадру або синхронізацією до точної частоти кадрів контенту." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, "Вставляє чорні рамки між кадрами для покращення чіткості руху. Використовуйте лише опцію, призначену для поточної частоти оновлення екрана. Не можна використовувати з частотою оновлення, не кратною 60 Гц, наприклад, 144 Гц, 165 Гц тощо. Не поєднуйте з інтервалом заміни > 1, під к[...]" @@ -2054,10 +2050,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_SUBFRAMES, "Підкадри шейдерів" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "Вставляти додаткові кадри шейдерів між кадрами. Дозволяє шейдерам виконувати ефекти з вищою частотою кадрів, ніж реальна частота вмісту. Має бути налаштований на поточну частоту екрана. Не поєднуйте з інтервалом заміни > 1, BFI, затримкою кадру або синхронізацією до точної ч[...]" - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, "Вставляє додатковий(і) кадр(и) шейдерів між кадрами для будь-яких можливих шейдерних ефектів, які мають працювати швидше за частоту оновлення вмісту. Використовуйте лише той параметр, який призначено для поточної частоти оновлення екрана. Не використовується при частоті [...]" @@ -2130,10 +2122,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SCAN_SUBFRAMES, "Моделювання рухомої розгортки" ) -MSG_HASH( - MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Імітує базову рухливу розгортку на кількох підкадрах, розділяючи екран вертикально та відтворюючи кожну частину екрана відповідно до кількості підкадрів." - ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, "Імітує базовий рухомий рядок розгортки на кількох під кадрів, розділяючи екран вертикально вгору та відтворюючи кожну частину екрана відповідно до кількості під кадрів, починаючи з верхньої частини sc." diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index f1af1e7ae1b..c3b9b0fe702 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -2008,7 +2008,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, - "Insert black frame(s) between frames. Can greatly reduce motion blur by emulating CRT scan out, but at cost of brightness. Do not combine with Swap Interval > 1, sub-frames, Frame Delay, or Sync to Exact Content Framerate." + "WARNING: Rapid flickering may cause image persistence on some displays. Use at your own risk // Insert black frame(s) between frames. Can greatly reduce motion blur by emulating CRT scan out, but at cost of brightness." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_BLACK_FRAME_INSERTION, @@ -2092,7 +2092,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SHADER_SUBFRAMES, - "Insert extra shader frame(s) between frames. Allows shaders to do effects that run at a higher fps than actual content rate. Should be set to current screen Hz. Do not combine with Swap Interval > 1, BFI, Frame Delay, or Sync to Exact Content Framerate." + "WARNING: Rapid flickering may cause image persistence on some displays. Use at your own risk // Simulates a basic rolling scanline over multiple sub-frames by dividing the screen up vertically and rendering each part of the screen according to how many sub-frames there are." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SHADER_SUBFRAMES, @@ -2168,7 +2168,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SCAN_SUBFRAMES, - "Simulates a basic rolling scanline over multiple sub-frames by dividing the screen up vertically and rendering each part of the screen according to how many sub-frames there are." + "WARNING: Rapid flickering may cause image persistence on some displays. Use at your own risk // Simulates a basic rolling scanline over multiple sub-frames by dividing the screen up vertically and rendering each part of the screen according to how many sub-frames there are." ) MSG_HASH( MENU_ENUM_LABEL_HELP_VIDEO_SCAN_SUBFRAMES, diff --git a/intl/progress.h b/intl/progress.h index 158248f5b7d..3be62eb7ff9 100644 --- a/intl/progress.h +++ b/intl/progress.h @@ -7,7 +7,7 @@ #define LANGUAGE_PROGRESS_ASTURIAN_APPROVED 9 /* Belarusian */ -#define LANGUAGE_PROGRESS_BELARUSIAN_TRANSLATED 100 +#define LANGUAGE_PROGRESS_BELARUSIAN_TRANSLATED 99 #define LANGUAGE_PROGRESS_BELARUSIAN_APPROVED 0 /* Bulgarian */ @@ -39,7 +39,7 @@ #define LANGUAGE_PROGRESS_GREEK_APPROVED 0 /* English, United Kingdom */ -#define LANGUAGE_PROGRESS_ENGLISH_UNITED_KINGDOM_TRANSLATED 99 +#define LANGUAGE_PROGRESS_ENGLISH_UNITED_KINGDOM_TRANSLATED 98 #define LANGUAGE_PROGRESS_ENGLISH_UNITED_KINGDOM_APPROVED 0 /* Esperanto */ @@ -75,7 +75,7 @@ #define LANGUAGE_PROGRESS_CROATIAN_APPROVED 0 /* Hungarian */ -#define LANGUAGE_PROGRESS_HUNGARIAN_TRANSLATED 99 +#define LANGUAGE_PROGRESS_HUNGARIAN_TRANSLATED 100 #define LANGUAGE_PROGRESS_HUNGARIAN_APPROVED 0 /* Indonesian */ @@ -83,11 +83,11 @@ #define LANGUAGE_PROGRESS_INDONESIAN_APPROVED 0 /* Italian */ -#define LANGUAGE_PROGRESS_ITALIAN_TRANSLATED 99 +#define LANGUAGE_PROGRESS_ITALIAN_TRANSLATED 100 #define LANGUAGE_PROGRESS_ITALIAN_APPROVED 0 /* Japanese */ -#define LANGUAGE_PROGRESS_JAPANESE_TRANSLATED 98 +#define LANGUAGE_PROGRESS_JAPANESE_TRANSLATED 97 #define LANGUAGE_PROGRESS_JAPANESE_APPROVED 0 /* Korean */ @@ -95,7 +95,7 @@ #define LANGUAGE_PROGRESS_KOREAN_APPROVED 0 /* Dutch */ -#define LANGUAGE_PROGRESS_DUTCH_TRANSLATED 38 +#define LANGUAGE_PROGRESS_DUTCH_TRANSLATED 37 #define LANGUAGE_PROGRESS_DUTCH_APPROVED 0 /* Norwegian */ @@ -107,7 +107,7 @@ #define LANGUAGE_PROGRESS_ODIA_APPROVED 0 /* Polish */ -#define LANGUAGE_PROGRESS_POLISH_TRANSLATED 79 +#define LANGUAGE_PROGRESS_POLISH_TRANSLATED 78 #define LANGUAGE_PROGRESS_POLISH_APPROVED 22 /* Portuguese, Brazilian */ @@ -115,7 +115,7 @@ #define LANGUAGE_PROGRESS_PORTUGUESE_BRAZILIAN_APPROVED 9 /* Portuguese */ -#define LANGUAGE_PROGRESS_PORTUGUESE_TRANSLATED 30 +#define LANGUAGE_PROGRESS_PORTUGUESE_TRANSLATED 29 #define LANGUAGE_PROGRESS_PORTUGUESE_APPROVED 0 /* Russian */ @@ -143,7 +143,7 @@ #define LANGUAGE_PROGRESS_TATAR_APPROVED 0 /* Ukrainian */ -#define LANGUAGE_PROGRESS_UKRAINIAN_TRANSLATED 100 +#define LANGUAGE_PROGRESS_UKRAINIAN_TRANSLATED 99 #define LANGUAGE_PROGRESS_UKRAINIAN_APPROVED 7 /* Valencian */ @@ -155,10 +155,10 @@ #define LANGUAGE_PROGRESS_VIETNAMESE_APPROVED 0 /* Chinese Simplified */ -#define LANGUAGE_PROGRESS_CHINESE_SIMPLIFIED_TRANSLATED 97 +#define LANGUAGE_PROGRESS_CHINESE_SIMPLIFIED_TRANSLATED 96 #define LANGUAGE_PROGRESS_CHINESE_SIMPLIFIED_APPROVED 43 /* Chinese Traditional */ -#define LANGUAGE_PROGRESS_CHINESE_TRADITIONAL_TRANSLATED 94 +#define LANGUAGE_PROGRESS_CHINESE_TRADITIONAL_TRANSLATED 93 #define LANGUAGE_PROGRESS_CHINESE_TRADITIONAL_APPROVED 74 diff --git a/libretro-common/file/archive_file.c b/libretro-common/file/archive_file.c index 0b3a6bf1c14..ad90ee68628 100644 --- a/libretro-common/file/archive_file.c +++ b/libretro-common/file/archive_file.c @@ -526,7 +526,7 @@ static struct string_list *file_archive_filename_split(const char *path) */ int file_archive_compressed_read( const char * path, void **buf, - const char* optional_filename, int64_t *length) + const char* optional_filename, int64_t *len) { const struct file_archive_file_backend *backend = NULL; @@ -540,7 +540,7 @@ int file_archive_compressed_read( */ if (optional_filename && path_is_valid(optional_filename)) { - *length = 0; + *len = 0; return 1; } @@ -555,17 +555,17 @@ int file_archive_compressed_read( { /* could not extract string and substring. */ string_list_free(str_list); - *length = 0; + *len = 0; return 0; } backend = file_archive_get_file_backend(str_list->elems[0].data); - *length = backend->compressed_file_read(str_list->elems[0].data, + *len = backend->compressed_file_read(str_list->elems[0].data, str_list->elems[1].data, buf, optional_filename); string_list_free(str_list); - if (*length != -1) + if (*len != -1) return 1; return 0; diff --git a/libretro-common/file/archive_file_7z.c b/libretro-common/file/archive_file_7z.c index adcb15a3bb2..289ec25f1c0 100644 --- a/libretro-common/file/archive_file_7z.c +++ b/libretro-common/file/archive_file_7z.c @@ -515,9 +515,9 @@ static int sevenzip_parse_file_iterate_step(void *context, } static uint32_t sevenzip_stream_crc32_calculate(uint32_t crc, - const uint8_t *data, size_t length) + const uint8_t *data, size_t len) { - return encoding_crc32(crc, data, length); + return encoding_crc32(crc, data, len); } const struct file_archive_file_backend sevenzip_backend = { diff --git a/libretro-common/file/archive_file_zlib.c b/libretro-common/file/archive_file_zlib.c index d82af9aea4f..352650dd21f 100644 --- a/libretro-common/file/archive_file_zlib.c +++ b/libretro-common/file/archive_file_zlib.c @@ -256,9 +256,9 @@ static int zlib_stream_decompress_data_to_file_iterate( } static uint32_t zlib_stream_crc32_calculate(uint32_t crc, - const uint8_t *data, size_t length) + const uint8_t *data, size_t len) { - return encoding_crc32(crc, data, length); + return encoding_crc32(crc, data, len); } static bool zip_file_decompressed_handle( diff --git a/libretro-common/file/nbio/nbio_unixmmap.c b/libretro-common/file/nbio/nbio_unixmmap.c index 1a94238beb7..7a9856e72c5 100644 --- a/libretro-common/file/nbio/nbio_unixmmap.c +++ b/libretro-common/file/nbio/nbio_unixmmap.c @@ -66,16 +66,16 @@ static void *nbio_mmap_unix_open(const char * filename, unsigned mode) static const int o_flags[] = { O_RDONLY, O_RDWR|O_CREAT|O_TRUNC, O_RDWR, O_RDONLY, O_RDWR|O_CREAT|O_TRUNC }; static const int map_flags[] = { PROT_READ, PROT_WRITE|PROT_READ, PROT_WRITE|PROT_READ, PROT_READ, PROT_WRITE|PROT_READ }; - size_t len; + size_t _len; void* ptr = NULL; struct nbio_mmap_unix_t* handle = NULL; int fd = open(filename, o_flags[mode]|O_CLOEXEC, 0644); if (fd < 0) return NULL; - len = lseek(fd, 0, SEEK_END); - if (len != 0) - ptr = mmap(NULL, len, map_flags[mode], MAP_SHARED, fd, 0); + _len = lseek(fd, 0, SEEK_END); + if (_len != 0) + ptr = mmap(NULL, _len, map_flags[mode], MAP_SHARED, fd, 0); if (ptr == MAP_FAILED) { @@ -86,7 +86,7 @@ static void *nbio_mmap_unix_open(const char * filename, unsigned mode) handle = malloc(sizeof(struct nbio_mmap_unix_t)); handle->fd = fd; handle->map_flags = map_flags[mode]; - handle->len = len; + handle->len = _len; handle->ptr = ptr; return handle; } @@ -132,7 +132,7 @@ static void nbio_mmap_unix_resize(void *data, size_t len) abort(); } -static void *nbio_mmap_unix_get_ptr(void *data, size_t* len) +static void *nbio_mmap_unix_get_ptr(void *data, size_t *len) { struct nbio_mmap_unix_t* handle = (struct nbio_mmap_unix_t*)data; if (!handle) diff --git a/libretro-common/formats/json/rjson.c b/libretro-common/formats/json/rjson.c index bb3eaf346c3..9c79569bf4d 100644 --- a/libretro-common/formats/json/rjson.c +++ b/libretro-common/formats/json/rjson.c @@ -987,12 +987,12 @@ void rjson_set_max_depth(rjson_t *json, unsigned int max_depth) json->stack_max = max_depth; } -const char *rjson_get_string(rjson_t *json, size_t *length) +const char *rjson_get_string(rjson_t *json, size_t *len) { char* str = (json->string_pass_through ? json->string_pass_through : json->string); - if (length) - *length = json->string_len; + if (len) + *len = json->string_len; str[json->string_len] = '\0'; return str; } @@ -1112,7 +1112,7 @@ void rjson_free(rjson_t *json) } static bool _rjson_nop_default(void *context) { return true; } -static bool _rjson_nop_string(void *context, const char *value, size_t length) { return true; } +static bool _rjson_nop_string(void *context, const char *value, size_t len) { return true; } static bool _rjson_nop_bool(void *context, bool value) { return true; } enum rjson_type rjson_parse(rjson_t *json, void* context, diff --git a/libretro-common/hash/lrc_hash.c b/libretro-common/hash/lrc_hash.c index 98ce1328236..cf2979f35f1 100644 --- a/libretro-common/hash/lrc_hash.c +++ b/libretro-common/hash/lrc_hash.c @@ -252,11 +252,11 @@ uint32_t crc32_adjust(uint32_t checksum, uint8_t input) return ((checksum >> 8) & 0x00ffffff) ^ crc32_hash_table[(checksum ^ input) & 0xff]; } -uint32_t crc32_calculate(const uint8_t *data, size_t length) +uint32_t crc32_calculate(const uint8_t *data, size_t len) { size_t i; uint32_t checksum = ~0; - for (i = 0; i < length; i++) + for (i = 0; i < len; i++) checksum = crc32_adjust(checksum, data[i]); return ~checksum; } @@ -486,9 +486,9 @@ static int SHA1Result(struct sha1_context *context) static void SHA1Input(struct sha1_context *context, const unsigned char *message_array, - unsigned length) + unsigned len) { - if (!length) + if (!len) return; if (context->Computed || context->Corrupted) @@ -497,7 +497,7 @@ static void SHA1Input(struct sha1_context *context, return; } - while (length-- && !context->Corrupted) + while (len-- && !context->Corrupted) { context->Message_Block[context->Message_Block_Index++] = (*message_array & 0xFF); diff --git a/libretro-common/include/retro_timers.h b/libretro-common/include/retro_timers.h index 96041255a3f..c0d2db4db53 100644 --- a/libretro-common/include/retro_timers.h +++ b/libretro-common/include/retro_timers.h @@ -39,7 +39,7 @@ #include #elif defined(_3DS) #include <3ds.h> -#elif defined(EMSCRIPTEN) +#elif defined(EMSCRIPTEN_FIXME) #include #else #include @@ -100,7 +100,7 @@ static int nanosleepDOS(const struct timespec *rqtp, struct timespec *rmtp) #define retro_sleep(msec) (usleep(1000 * (msec))) #elif defined(WIIU) #define retro_sleep(msec) (OSSleepTicks(ms_to_ticks((msec)))) -#elif defined(EMSCRIPTEN) +#elif defined(EMSCRIPTEN_FIXME) #define retro_sleep(msec) (emscripten_sleep(msec)) #else static INLINE void retro_sleep(unsigned msec) diff --git a/libretro-common/memmap/memmap.c b/libretro-common/memmap/memmap.c index 5062abaae28..229ed170fd6 100644 --- a/libretro-common/memmap/memmap.c +++ b/libretro-common/memmap/memmap.c @@ -92,7 +92,7 @@ void* mmap(void *addr, size_t len, int prot, int flags, return((void*) ((int8_t*)map + offset)); } -int munmap(void *addr, size_t length) +int munmap(void *addr, size_t len) { if (!UnmapViewOfFile(addr)) return -1; diff --git a/libretro-common/samples/net/net_http_test.c b/libretro-common/samples/net/net_http_test.c index ebd0167e420..57a29fb6c4f 100644 --- a/libretro-common/samples/net/net_http_test.c +++ b/libretro-common/samples/net/net_http_test.c @@ -32,7 +32,7 @@ int main(void) { char *data; struct http_t *http1, *http3; - size_t len, pos = 0, tot = 0; + size_t _len, pos = 0, tot = 0; if (!network_init()) return -1; @@ -45,7 +45,7 @@ int main(void) http3 = net_http_new("http://www.wikipedia.org/"); while (!net_http_update(http3, NULL, NULL)) {} - data = (char*)net_http_data(http3, &len, false); + data = (char*)net_http_data(http3, &_len, false); printf("%.*s\n", (int)256, data); diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 8937e0f9665..8dcceded339 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -2786,14 +2786,13 @@ static int menu_displaylist_parse_database_entry(menu_handle_t *menu, if (entry->crc32) { - char *elem0 = NULL; char *save = NULL; char *entry_crc32_cpy = strdup(entry->crc32); const char *con = strtok_r(entry_crc32_cpy, "|", &save); if (con) { - elem0 = strdup(con); + char *elem0 = strdup(con); if ((con = strtok_r(NULL, "|", &save))) { switch (extension_to_file_hash_type(con)) diff --git a/menu/menu_driver.c b/menu/menu_driver.c index d8f95d9f3a1..43756410725 100644 --- a/menu/menu_driver.c +++ b/menu/menu_driver.c @@ -3183,6 +3183,7 @@ static bool menu_shader_manager_operate_auto_preset( { if (!(BIT32_GET(flags.flags, shader_types_flags[j]))) continue; + strlcpy(end, video_shader_get_preset_extension(shader_types[j]), sizeof(preset_path) - (end - preset_path)); @@ -3227,7 +3228,7 @@ static bool menu_shader_manager_operate_auto_preset( for (j = 0; j < ARRAY_SIZE(shader_types); j++) { - if (!(BIT32_GET(flags.flags, shader_types[j]))) + if (!(BIT32_GET(flags.flags, shader_types_flags[j]))) continue; strlcpy(end, video_shader_get_preset_extension(shader_types[j]), @@ -4068,8 +4069,7 @@ static size_t menu_driver_get_current_menu_label(struct menu_state *menu_st, #endif static size_t menu_driver_get_current_menu_sublabel( - struct menu_state *menu_st, - char *s, size_t len) + struct menu_state *menu_st, char *s, size_t len) { menu_entry_t entry; MENU_ENTRY_INITIALIZE(entry); diff --git a/menu/menu_setting.c b/menu/menu_setting.c index e91aa96955c..5f925c613b3 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -14398,7 +14398,6 @@ static bool setting_append_list( SD_FLAG_NONE ); -#if !defined(RARCH_MOBILE) || defined(IOS) { #if defined(HAVE_STEAM) && defined(HAVE_MIST) bool on_deck = false; @@ -14445,7 +14444,7 @@ static bool setting_append_list( menu_settings_list_current_add_range(list, list_info, 1, 15, 1, true, true); } } -#endif + END_SUB_GROUP(list, list_info, parent_group); START_SUB_GROUP( list, diff --git a/pkg/emscripten/libretro/index.html b/pkg/emscripten/libretro/index.html index eae5da79f17..f4cdc5f4f6c 100644 --- a/pkg/emscripten/libretro/index.html +++ b/pkg/emscripten/libretro/index.html @@ -28,96 +28,94 @@