Commit Graph

1105 Commits

Author SHA1 Message Date
Ken Thomases 9ef54e4ebe winecoreaudio: Add widHelper_NotifyCompletions.
It scans for completed input wavehdrs, removes them from the queue,
and notifies the application that they're done.
2006-12-29 12:49:42 +01:00
Ken Thomases 19c75a4ec6 winecoreaudio: Store the device ID in the WINE_WAVEOUT structure. 2006-12-29 12:49:42 +01:00
Ken Thomases 127523d7a2 winecoreaudio: Allocate/deallocate audio buffers in widOpen/widClose. 2006-12-29 12:49:42 +01:00
Ken Thomases 4b904bbf13 winecoreaudio: Do additional setup in AudioUnit_CreateInputUnit.
It now returns in an output parameter the frame count that the AU will use.
Also, initialize the Audio Unit.
2006-12-29 12:49:42 +01:00
Ken Thomases 5c489283c9 winecoreaudio: Implement widDevInterfaceSize and widDevInterface. 2006-12-29 12:49:42 +01:00
Ken Thomases 503f9be161 winecoreaudio: Implement widReset. 2006-12-29 12:49:42 +01:00
Ken Thomases 58ea6abe72 winecoreaudio: Implement widAddBuffer. 2006-12-29 12:49:42 +01:00
Ken Thomases 5432adaaac winecoreaudio: Implement widOpen and widClose. 2006-12-29 12:49:42 +01:00
Ken Thomases 30a1b29351 winecoreaudio: Add AudioUnit_CreateInputUnit to create an input audio unit. 2006-12-29 12:49:42 +01:00
Ken Thomases 8ba3daaf5c winecoreaudio: Add stub implementation of CoreAudio_wiAudioUnitIOProc.
It will serve as the input callback called when our Audio Unit has sound
data available.
2006-12-29 12:49:41 +01:00
Ken Thomases 5319b64b39 winecoreaudio: Initial implementation of widGetDevCaps. 2006-12-29 12:49:41 +01:00
Ken Thomases eccfe6e8a3 winecoreaudio: Initial stub implementation of audio input support. 2006-12-29 12:49:41 +01:00
Ken Thomases 5cbc520318 winecoreaudio: Replace pthread mutex with OSSpinLock. 2006-12-21 12:08:37 +01:00
Ken Thomases 234558c2c7 winecoreaudio: Move a memset out of a mutex-guarded section. 2006-12-21 12:01:12 +01:00
Ken Thomases acf3499916 winecoreaudio: Merge wodReset and wodHelper_Reset. 2006-12-21 12:01:02 +01:00
Ken Thomases 3ade58b0b9 winecoreaudio: Change to faster non-recursive mutex. 2006-12-21 12:00:49 +01:00
Ken Thomases d5975872af winecoreaudio: Push notify of completions from render callback to message thread.
Rather than have the Audio Unit render callback traverse the queue of wave
headers looking for complete ones, and sending a message to the message thread
for each one it finds, just send one message to tell the message thread to do
that work itself.  The render callback is called in a real-time priority
thread and is expected to return as quickly as possible.
2006-12-21 12:00:36 +01:00
Ken Thomases e24533cb6d winecoreaudio: Remove more mutexes from around Audio Unit calls. 2006-12-21 12:00:20 +01:00
Ken Thomases 0bb13dd31c winecoreaudio: Report when the render callback is just providing silence. 2006-12-21 12:00:09 +01:00
Ken Thomases 82fff94c33 winecoreaudio: Lift mutex lock/unlock out of wodHelper_PlayPtrNext to caller. 2006-12-21 11:59:53 +01:00
Ken Thomases bdbe803cb6 winecoreaudio: Leave audio unit running, except when waveout device paused. 2006-12-21 11:45:36 +01:00
Ken Thomases aef21c19c1 winecoreaudio: Eliminate unnecessary variable, unreachable code, unused retval. 2006-12-21 11:45:11 +01:00
Ken Thomases 7cecf7a40a winecoreaudio: Inline & eliminate the specializations of wodHelper_BeginWaveHdr. 2006-12-21 11:44:42 +01:00
Ken Thomases be4a17876d winecoreaudio: Specialize wodHelper_BeginWaveHdr for its two callers and simplify.
wodHelper_PlayPtrNext is only called when state == WINE_WS_PLAYING.  Also, it
clears dwPartialOffset itself.

wodWrite only calls wodHelper_BeginWaveHdr[Write] with a non-NULL lpWaveHdr
parameter.  wodWrite is not called from the Audio Unit render callback, so it
can use Wine debug channels.
2006-12-21 11:43:21 +01:00
Ken Thomases 551f7d94a3 winecoreaudio: Simplify handling of BEGIN+ENDLOOP wave headers. 2006-12-21 11:42:48 +01:00
Ken Thomases 91c5ec9616 winecoreaudio: Extract wodHelper_CheckForLoopBegin() from wodHelper_BeginWaveHdr().
This refactoring prepares the ground for subsequent refactoring of
wodHelper_BeginWaveHdr.
2006-12-21 11:42:28 +01:00
Ken Thomases a6da8f212d winecoreaudio: Create port for sending messages to the callback thread only once. 2006-12-21 11:42:12 +01:00
Ken Thomases 23bb112b10 winecoreaudio: Control the fprintf's by the Wine debug channel on/off settings. 2006-12-21 11:42:05 +01:00
Dmitry Timoshkov 0b988c73c9 winearts: Make some data const. 2006-12-14 20:11:17 +01:00
Dmitry Timoshkov b05173486a wineoss: Make some data const. 2006-12-14 20:10:58 +01:00
Marcus Meissner 4d52a421d7 Made some functions static. 2006-12-12 12:10:57 +01:00
Francois Gouget 89f4b5645f winmm: Add a Portuguese translation (contributed by Americo Jose Melo). 2006-11-28 12:13:24 +01:00
Andrew Talbot 89bb54601f winmm/wineoss: Cast-qual warning fix. 2006-11-24 12:56:31 +01:00
Francois Gouget b5f104d05b Replace SUBLANG_DEFAULT with the specific SUBLANG_XXX constant for languages that have multiple sublanguages. 2006-11-24 11:49:32 +01:00
Andrew Talbot 529aa7de90 winmm: Cast-qual warnings fix. 2006-11-24 11:47:44 +01:00
Andrew Talbot a8f02b8bb7 winmm: Cast-qual warnings fix. 2006-11-24 11:47:39 +01:00
Alexandre Julliard 0beeffa935 winmm: Avoid using sizeof() in traces. 2006-11-20 11:50:14 +01:00
Francois Gouget 1ccf944900 Assorted spelling fixes. 2006-11-13 13:01:53 +01:00
Michael Stefaniuc 8f0f9371a8 winmm/tests: Win64 printf format warning fixes. 2006-11-13 12:49:27 +01:00
Michael Stefaniuc 60c19952b7 winmm/tests: Fix the parameters of LPTIMECALLBACK functions. 2006-11-13 12:49:14 +01:00
Eric Pouech d1737cc24b winmm: Plug a memory leak. 2006-11-09 12:24:54 +01:00
Eric Pouech 2f540b8602 winmm: Remove WINE_NO_LONG_AS_INT. 2006-11-09 11:44:30 +01:00
Francois Gouget 30e44c85c8 Assorted spelling fixes. 2006-11-07 15:25:24 +01:00
Mikołaj Zalewski 58bd35c8c5 resources: Change Dutch sublanguage code to SUBLANG_NEUTRAL. 2006-10-24 17:45:51 +02:00
Mikołaj Zalewski e32aa55703 resources: Change German sublanguage code to SUBLANG_NEUTRAL. 2006-10-24 11:45:12 +02:00
Marcus Meissner d1b2282a9b wineoss: On non-OSS systems define MidiExit too. 2006-10-24 11:31:21 +02:00
Byeong-Sik Jeon e1fd734c97 Korean: Use SUBLANG_NEUTRAL in Korean resources. 2006-10-20 13:49:39 +02:00
Alexandre Julliard 18aafc27d0 wineaudioio.drv: Win64 printf format fixes. 2006-10-20 12:59:02 +02:00
Alexandre Julliard 6f4d2f8dc4 winecoreaudio.drv: Win64 printf format fixes. 2006-10-20 12:36:38 +02:00
Francois Gouget ef998ea6cb Assorted spelling fixes. 2006-10-16 11:33:38 +02:00
Michael Stefaniuc 173f7bd26c janitorial: Remove remaining NULL checks before free() (found by Smatch). 2006-10-10 12:56:24 +02:00
Michael Stefaniuc 10ee330a19 winmm/wineoss: Win64 printf format warning fixes. 2006-10-07 17:47:26 +02:00
Michael Stefaniuc a0f541399a winmm/winealsa: Win64 printf format warning fixes. 2006-10-07 17:47:13 +02:00
Michael Stefaniuc fe0af93cb6 winmm/winearts: Win64 printf format warning fixes. 2006-10-07 17:47:06 +02:00
Michael Stefaniuc 6f6e054ffb winmm/winenas: Win64 printf format warning fixes. 2006-10-07 17:47:01 +02:00
Michael Stefaniuc c8ef239057 winmm/wineesd: Win64 printf format warning fixes. 2006-10-07 17:46:58 +02:00
Michael Stefaniuc 3baeb485a0 winmm/winejack: Win64 printf format warning fixes. 2006-10-07 17:46:52 +02:00
Francois Gouget 82babbee0b Add missing '\n's to Wine traces. 2006-10-05 17:46:48 +02:00
Michael Stefaniuc 41dd56cb7f "One liners" printf format warning fixes for the migration of DWORD/LONG/ULONG from long to int. 2006-09-29 16:09:24 +02:00
Michael Stefaniuc 85ce5117c5 Add a WINE_NO_LONG_INT define to many makefiles to ease the transition of DWORD/LONG/ULONG from long to int. 2006-09-29 16:08:30 +02:00
Hwang YunSong(황윤성) 2b4a76001f winmm: Updated Korean resource. 2006-09-28 11:56:37 +02:00
Mikołaj Zalewski 636f2ac0f3 winmm: Use English (US) instead of English (Neutral) for resources. 2006-09-27 09:40:11 +02:00
Alexandre Julliard 32ab895e46 makefiles: Generate the dependencies line to avoid some code duplication. 2006-09-14 09:38:16 +02:00
Jan Zerebecki 1ee1d819f9 wineoss: Remove "please report" from a trace. 2006-09-07 16:11:11 +02:00
Jan Zerebecki 6698e9e0b0 winmm: Prevent NULL dereference in MCI_Close and add testcase for it. 2006-09-07 16:10:48 +02:00
Alexandre Julliard 5cf75e615a makefiles: Only run test and documentation targets in directories that need them. 2006-08-28 13:37:44 +02:00
Alexandre Julliard eb8a40c368 libs: Merged libwine_unicode into libwine.
Most dlls use libwine_unicode at this point, so there's nothing to
gain by having two separate libraries.
2006-07-11 19:33:22 +02:00
Alexandre Julliard 77dc0d9be5 .gitignore: Added wildcards to ignore generated resource files. 2006-07-10 21:39:00 +02:00
Alexandre Julliard 0fa8baafcb make_dlls: Recursively ignore .ok files in all tests directories. 2006-07-10 21:26:50 +02:00
Alexandre Julliard edd100b899 make_dlls: Recursively ignore testlist.c in all tests directories. 2006-07-10 21:19:42 +02:00
Alexandre Julliard 5258e061dc make_dlls: Ignore generated import libraries from the top-level .gitignore. 2006-07-10 20:55:58 +02:00
Alexandre Julliard cc2b3b48e6 Take advantage of the recursive nature of .gitignore for Makefile entries.
Prefix other entries with '/' to make them non-recursive.
2006-07-10 20:47:54 +02:00
Michael Stefaniuc 00e779370f janitorial: Put "inline static" at the beginning of a declaration. 2006-07-07 14:30:35 +02:00
Andrew Talbot 343597b336 winmm/winealsa: Write-strings warning fix. 2006-07-03 11:59:02 +02:00
Eric Pouech 6f03b0c021 mci: Fix some mciSendString quirks.
Really check in MCI open string commands if the name we have is a
device (and no longer rely on bad heuristics for it).
2006-06-26 13:38:03 +02:00
Francois Gouget 21668ad76a winecoreaudio: Protect pthread.h inclusion. 2006-06-26 13:05:00 +02:00
Peter Åstrand 2585e1a6fd winmm: Add support for "open new" commands. 2006-06-15 12:25:50 +02:00
Alexandre Julliard 82a404a077 winmm/tests: Don't use sizeof in ok() to avoid printf format warnings. 2006-06-13 14:04:07 +02:00
Mike McCormack 25f521f1b2 winmm: Undefine SW_MAX defined by linux/input.h to avoid a conflict with winuser.h. 2006-06-13 12:56:38 +02:00
Alexandre Julliard ea50196447 winecoreaudio: Fixed the FSF address. 2006-06-01 13:15:54 +02:00
Ken Thomases 1612ce8659 winecoreaudio: Don't CFAllocate buffer for port message. 2006-06-01 13:09:44 +02:00
Ken Thomases fb5a073e46 winecoreaudio: Use unique name for message port.
Use a unique port name for the message port to the message thread.
Port names are system-global, so using a non-unique constant name
prevents the CoreAudio driver from being used in multiple processes
simultaneously.
2006-06-01 13:08:21 +02:00
Ken Thomases a1e6989a9b winecoreaudio: 8-bit Linear PCM data is unsigned. 2006-06-01 13:05:59 +02:00
Ken Thomases 178f9fecd9 winecoreaudio: Keep processing wavehdrs to satisfy AudioUnit data request.
When fulfilling the output AudioUnit's request for audio data, don't
stop when the current wavehdr is exhausted; advance to the next.  This
addresses the buzzy quality of the sound.
2006-06-01 13:03:22 +02:00
Ken Thomases 6a6aec72d3 winecoreaudio: Improve state tracking.
Improved tracking of device state (stopped, playing, or paused).
Also, tied starting and stopping the AudioUnit more directly to the
state.  No need to change the state when preparing or unpreparing
wavehdrs.  Pausing overrides both playing and stopped states; if
stopped, pausing prevents output from starting when the program
writes.  When, restarting from the paused state, the device starts
playing if there are queued wavehdrs.  Otherwise, it goes to stopped
state.
2006-06-01 12:59:50 +02:00
Ken Thomases fb9f878849 winecoreaudio: Miscellaneous cleanup.
Miscellaneous cleanup: release resources when done with them; protect
against null pointers; reduce redundant code; avoid potential integer
underflow; clarify a do-nothing loop.
2006-06-01 12:59:38 +02:00
Ken Thomases 00e9996339 winecoreaudio: Fix race to open.
Fixes a race condition (noted in a comment for wodOpen) when multiple
threads try to open the same wave-out device simultaneously.
Addressed by creating the device mutexes when the driver is
initialized, instead of as each device is opened.  Then use the mutex
to protect the open operation against races.  At the same time, made
the mutexes recursive to avoid self-deadlocks the driver was
encountering when reentered from the callback.
2006-06-01 12:50:46 +02:00
Alexandre Julliard 11fe657466 winecoreaudio: Fixed a bunch of compiler warnings. 2006-05-31 14:52:58 +02:00
Robert Reif 2b3247a424 winmm: Always check for open and close enents in wave test.
Always check for open and close events.
Send WM_APP message to thread to terminate it rather than TerminateThread.
Fix CreateThread/waveOutOpen race by waiting for background thread to
run before waveOutOpen is called.
Add more non-hardware supported formats.  There is a bug in wave
mapper GetPosition when multiple headers are used and this helps
trigger it.
2006-05-31 11:45:22 +02:00
Andrew Talbot 9480d3e50a winmm/joystick: joystick.c requires Unicode library. 2006-05-31 11:42:40 +02:00
Emmanuel Maillard 144a5353ef winecoreaudio: Initial Audio Driver for Mac OS X. 2006-05-30 19:34:20 +02:00
Robert Reif fe2becaee3 winmm: Add multiple header wave tests.
The current wave tests only use a single header for playback.  Tests
have been added to use multiple headers and to reuse them.  This is
how streaming applications and direct sound use the wave api.
2006-05-30 12:22:58 +02:00
Alexandre Julliard 9ca8a86914 Link against libwine_unicode everywhere we use Unicode functions. 2006-05-24 18:05:40 +02:00
Jonathan Ernst 360a3f9142 Update the address of the Free Software Foundation. 2006-05-23 14:11:13 +02:00
Robert Reif ed62b0150c winmm: Fix wave test handle use after close bug. 2006-05-20 14:00:22 +02:00
Robert Reif d1b838e948 winmm: Fix wave test volume warning.
Volume is only valid when sound card has volume support.
2006-05-11 12:10:45 +02:00
Michael Stefaniuc a87520036f janitorial: Remove redundant NULL pointer checks before HeapFree'ing them.
Some HeapFree's are hidden behind macros. Found by smatch.
2006-05-10 11:31:41 +02:00
Robert Reif 9ff27bf6bc winmm: Print out more info on failed test.
Print out more info on failed test.  Looks like there is a bug in ALSA
OSS emulation where it is returning a mid-sample position.
2006-05-09 20:44:56 +02:00
Robert Reif a9bd81be63 winmm: Check waveOutGetVolume parameter. 2006-05-09 11:54:55 +02:00
Alexandre Julliard 922b2749cc msacm32.drv: Renamed msacm.drv to msacm32.drv, and moved the directory to the top-level. 2006-05-09 11:36:45 +02:00
Alexandre Julliard 252398d286 mciwave: Renamed mciwave.drv to mciwave.dll, and moved the directory to the top-level. 2006-05-09 11:32:21 +02:00
Robert Reif b4a5df1c19 wineoss: Missing mixer fixes.
Don't list volume in capabilities when mixer is missing.
2006-05-08 14:49:48 +02:00
Robert Reif 319633963d winmm: More wave callback tests.
Add tests for CALLBACK_FUNCTION and CALLBACK_THREAD.  The only
callback type not tested now is CALLBACK_WINDOW.
2006-05-08 14:49:11 +02:00
Mike Frysinger dd174c54e1 joystick: Search for /dev/input/js as well as /dev/js. 2006-04-19 19:27:41 +02:00
Robert Reif 269236c1c8 winearts: Don't call arts_free if arts_init wasn't successful. 2006-04-06 11:33:11 +02:00
Jan Zerebecki 6b37d3d57d winealsa: Fix pausing when the hardware does not support it. 2006-04-03 12:23:31 +02:00
Robert Reif 2d15c8fb75 wineesd: Use pipe sync for events.
Ues pipe sync code from OSS/ALSA rather than windows events.
2006-03-14 17:49:59 +01:00
Robert Reif 2eca872675 wineesd: Update ESD driver to closer match OSS and ALSA drivers. 2006-03-10 21:41:21 +01:00
Francois Gouget 4aa6418d51 Assorted spelling fixes. 2006-02-24 21:10:03 +01:00
Dmitry Timoshkov f29d4af34b winmm: Protect drivers list by a critical section. 2006-02-14 12:22:57 +01:00
Petr Tesarik 63a46cb374 winmm: Czech language resources encoding fix. 2006-02-13 13:28:42 +01:00
Alexandre Julliard be22a96847 Include wine/port.h in files that use exceptions. 2006-02-07 16:31:21 +01:00
Fatih Aşıcı bde9004f19 winmm: Turkish translation. 2006-02-06 13:06:58 +01:00
Eric Pouech aef4a77d46 wineoss: Proper support in OSS driver for audio when no mixer is present.
Fixed a couple of potential fd leaks.
2006-01-27 12:10:25 +01:00
Dmitry Timoshkov 57a579ffcd Make more arrays const. 2006-01-24 14:00:32 +01:00
Robert Reif 2ba20dd78b winearts: Try to keep winecfg from crashing by recovering from an arts
library crash.
2006-01-23 16:48:45 +01:00
Robert Reif 273470e8ba winealsa: Add critical section names for debugging. 2006-01-18 14:03:23 +01:00
Alex Villacís Lasso 6d88d5ad5c winealsa: Ensure that copy_format() will not write past end of
referenced WAVEFORMATPCMEX structure.
2006-01-11 12:33:05 +01:00
Robert Reif 8accfc1def wineoss: Shorten MIDI names.
Shorten MIDI names to fit into 32 byte array without overflow.
2005-12-17 12:25:19 +01:00
Alexandre Julliard ae964ac801 Take advantage of the __EXCEPT_PAGE_FAULT macro. 2005-12-16 17:17:57 +01:00
Robert Reif c7a59d117a wineoss: Fix device probing.
- Fix device probing at driver load time.
- Fix memory leaks at driver exit time.
2005-12-08 12:00:33 +01:00
Eric Pouech fa1d997ddc winealsa: Fixed returned string in capabilities. 2005-12-08 11:58:48 +01:00
Eric Pouech 65a1796bc7 winenas: fix crash.
- return correct MM error code when no connection to server has been
  opened
- don't close the AU driver if it hasn't been opened
2005-12-08 11:58:35 +01:00
Robert Reif 18441ac027 winejack: Fix driver load and initialization.
Move wave in/out initialization from wave out to driver.
Add index number to device names.
Fix memset bug where only first wave in caps was zeroed.
2005-12-06 21:22:08 +01:00
Eric Pouech 9cba6ceacd mciwave: save/record.
- fix for playback after a sound has been recorded
- shall fix also opening the mci device without name
- bug reported (and fix tested) by Peter Astrand
2005-12-06 21:21:48 +01:00
Robert Reif 3020d1a4ca winmm: Allow sound card driver to be opened more than once.
TRACE cleanups.
2005-12-06 10:58:38 +01:00
Robert Reif ce4fdfdbcd winmm: Allow sound card drivers to be opened more than once. 2005-12-06 10:58:25 +01:00
Eric Pouech 60884fc3b3 winmm: driver unloading.
- properly handle drivers unloading when no session instance of the
  driver has been created
2005-12-05 12:01:26 +01:00
Eric Pouech f01baaa9ab Fixed some bugs in MCI string parsing. 2005-11-29 11:24:55 +01:00
Dmitry Timoshkov 8140d66c47 Fix all drivers DriverProc to conform to the DRIVERPROC definition. 2005-11-28 20:53:22 +01:00
Ge van Geldorp 1a1583a364 Match PSDK STATUS_* definitions. 2005-11-28 17:32:54 +01:00
YunSong Hwang 966df981a1 Update Korean translations. 2005-11-28 10:41:28 +01:00
Eric Pouech 7ec69e9c2b LoadLibrary16 is no longer exported by name, so do the lookup by its
ordinal (when loading NE sibling).
2005-11-28 10:40:25 +01:00
Alexandre Julliard 0ec7e1a591 Renamed all .cvsignore files to .gitignore. 2005-11-26 13:10:33 +01:00
YunSong Hwang 5e7f77ea8b Update Korean translations. 2005-11-23 15:21:56 +01:00
Rein Klazes 77a6d341c7 Break from the SNDCTL_DSP_CHANNELS loops on first error instead of
continuing with even higher channels numbers.
2005-11-21 11:56:55 +00:00
Robert Reif 014ab5e249 Only convert bits per sample between different encoding formats. 2005-11-16 11:22:06 +00:00
Edgar Hucek 2a3c30a239 Unicode compile fix. 2005-11-14 11:23:34 +00:00
Francois Gouget 0edbaf7e80 Remove spaces before '\n' in traces. 2005-11-10 12:14:56 +00:00
Francois Gouget f4c0524ec6 Assorted spelling and case fixes. 2005-11-10 11:39:07 +00:00
Davin McCall 828086ef93 Avoid getting ahead of dsound mixer when using non-hw device. Also
avoid using internal ALSA call to retrieve hardware play position.
2005-11-05 10:44:10 +00:00
Robert Reif 274de441f7 Add waveOutPause/waveOutRestart test.
Tighten up play duration test when ending too soon.
Set VirtualFree size to 0.
2005-10-31 10:03:25 +00:00
Julien Cegarra 49c46e9d3d Correct name of sound.dll to sound.drv (WIN16). 2005-10-30 19:06:59 +00:00
Robert Lunnon c0fcf36e0a Added header errno.h. 2005-10-24 15:02:30 +00:00
Eric Pouech 7eba5c5c7d Fixed mmioOpenW flags for playback. 2005-10-10 10:27:05 +00:00
Vitaliy Margolen f09eb790c9 Replace registry editing instructions with winecfg. 2005-10-03 10:16:32 +00:00
Alexandre Julliard 7e22be4d84 We are no longer generating .dbg.c files. 2005-09-29 10:35:58 +00:00
Alexander N. Sørnes cd6e5bab8b Added Norwegian translations. 2005-09-26 10:56:47 +00:00
Alexandre Julliard 9f1c6de1ef We are no longer generating .spec.c files. 2005-09-21 14:42:52 +00:00
Dmitry Timoshkov 08de86c831 Add a test for mmioDescend, make it pass under Wine. 2005-09-16 19:40:27 +00:00