Commit graph

5067 commits

Author SHA1 Message Date
Sebastian Dröge
d2fd740388 audio: Add reverse playback support to GstAudioStreamAlign
https://bugzilla.gnome.org/show_bug.cgi?id=787560
2017-09-28 14:06:07 +03:00
Sebastian Dröge
ec1e20ffe5 audio: Add helper object for audio discontinuity detection and sample alignment
This is the same code that is in decklinkaudiosrc, audioringbuffer,
audiomixer and various other places. Have it once instead of copying it
everywhere.

https://bugzilla.gnome.org/show_bug.cgi?id=787560
2017-09-28 14:06:05 +03:00
Mathieu Duponchelle
4196e67ff1 [API]: GST_AUDIO_CONVERTER_OPT_MIX_MATRIX
Taken from audiomixmatrix, credits to Vivia Nikolaidou

https://bugzilla.gnome.org/show_bug.cgi?id=785471
2017-09-22 16:19:59 +02:00
Mathieu Duponchelle
877d6faeea [API]: gst_audio_channel_mixer_new_with_matrix
+ Refactor previous constructor to call on that new constructor

+ Reimplement is_passthrough to strictly check whether the matrix
  is an identity matrix, comparing channel-masks was incorrect:
  the mixer may be remixing from a list of positions to the same
  list of positions, but ordered differently, and reciprocally,
  the mixer may be remixing from a list of positions to another
  list of positions identically ordered

+ Remove unused tmp field, must have been a refactoring leftover

https://bugzilla.gnome.org/show_bug.cgi?id=785471
2017-09-22 16:19:58 +02:00
Julien Isorce
fc86194595 appsink: on drain wait for buffers to be consumed
So that an upstream element can claim all buffers to return to its buffer pool.

Added unit test 'test_query_drain'
  make elements/appsink.check

https://bugzilla.gnome.org/show_bug.cgi?id=786739
2017-09-19 14:33:36 +01:00
Julien Isorce
7b1056b946 appsink: also clear preroll buffer in _pull_sample
If someone calls gst_app_sink_try_pull_sample they are
probably no longer interested in any preroll samples.

Useful if the user has not registered a preroll appsink callback.

Also added unit test 'test_do_not_care_preroll'
  make elements/appsink.check
that fails without this patch.

https://bugzilla.gnome.org/show_bug.cgi?id=786740
2017-09-19 09:06:44 +01:00
Julien Isorce
68518acb53 appsink: unref preroll buffer upon pull
There is no reason for appsink to hang onto the preroll buffer.
If needed, the application can just keep a ref on this buffer
after calling gst_app_sink_try_pull_preroll.

Also added unit test 'test_pull_preroll'
  make elements/appsink.check

https://bugzilla.gnome.org/show_bug.cgi?id=786740
2017-09-13 14:11:27 +01:00
Julien Isorce
c134a3c21b appsink: rename GstBuffer *preroll to preroll_buffer
priv->preroll can be confused with basesink_class->preroll

https://bugzilla.gnome.org/show_bug.cgi?id=786740
2017-09-13 14:06:43 +01:00
Nicolas Dufresne
5d6fbcb0af video-filter: Support allocation pool with pool object
This is used to indicate upstream the requirement in buffers
while no buffer pool can be provided. In this case, only
configure the pool with caps/size/min/max if we have caps,
which we only parsed when there was no allocation pool.

https://bugzilla.gnome.org/show_bug.cgi?id=730758
2017-09-06 14:20:46 -04:00
Matthew Waters
5d3d764568 video/affinetransformationmeta: use the provided doc comment for the struct 2017-08-24 19:11:29 +10:00
Mathieu Duponchelle
28943c4399 videoutilsprivate: fill more video fields.
__gst_video_element_proxy_caps is called by
__gst_video_element_proxy_getcaps with caps set to the caps
allowed downstream. As we didn't set colorimetry or
chroma-site on the resulting caps, upstream considered it
possible to use whatever values it wanted, leading to
not negotiated errors later on.

As the description for that function is:
"Takes caps and copies its video fields to tmpl_caps",
it seems legitimate to set these fields there.

https://bugzilla.gnome.org/show_bug.cgi?id=786172
2017-08-14 12:42:57 +02:00
Philippe Normand
d375a28a37 appsrc: handle duration query only if the property was set
https://bugzilla.gnome.org/show_bug.cgi?id=786200
2017-08-12 16:23:27 +01:00
Tim-Philipp Müller
7acdfa3753 pbutils: sprinkle more GST_EXPORT 2017-08-10 13:57:26 +01:00
Tim-Philipp Müller
ece4a096a1 libs: add some more missing GST_EXPORT 2017-08-10 10:27:23 +01:00
Mark Nauwelaerts
00fa39befa audioencoder: also adjust sample count upon discont to avoid ts overflow
Only adjusting the base_ts might lead to a negative ts and as such integer
overflow into a huge timestamp which then propagates into the granulepos
and so on.  Instead, resync to incoming buffer timestamp using both base_ts
and sample count rather than only base_ts.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=785948
2017-08-09 09:32:55 +02:00
Sebastian Dröge
f996b05644 xmptag: Stop parsing GPS coordinate if sscanf() fails
CID 1139610
2017-08-04 13:39:31 +03:00
Tim-Philipp Müller
6105420bfc appsrc: fix doc typos 2017-08-01 17:08:08 +01:00
Sebastian Dröge
8be5030d47 appsrc: Add out annotations to gst_app_src_get_latency() 2017-08-01 18:49:23 +03:00
Sebastian Dröge
01f4d6494a videotimecode: Add GST_VIDEO_TIME_CODE_INIT macro 2017-07-25 10:03:41 +03:00
Satya Prakash Gupta
5cf883c8ed videofilter: Unmap input frame if mapping output frame failed
https://bugzilla.gnome.org/show_bug.cgi?id=785341
2017-07-24 17:05:17 +03:00
Sebastian Dröge
ae8d0cf3ac videodecoder: Make sure we have an actually writable buffer when modifying metadata
avviddec keeps references to the buffers internally for example, in
which case we need to do a shallow copy of the buffer.
2017-07-24 16:48:17 +03:00
Sebastian Dröge
79424411e7 videometa: Don't crash if adding the timecode meta to a buffer failed 2017-07-24 16:29:53 +03:00
Tim-Philipp Müller
6461ad057c fft: don't generate g-i files for bindings
The g-i stuff for this helper lib was never usable from bindings
anyway and there are problems with the latest gobject-introspection,
so we might just as well remove the g-i integration entirely for
this lib.
2017-07-19 23:08:12 +01:00
Heekyoung Seo
65406774ae convertframe: Fix leak in case of vcrop is disabled
https://bugzilla.gnome.org/show_bug.cgi?id=784639
2017-07-07 09:26:22 +03:00
Sebastian Dröge
24fe473a01 libs: Export boxed type copy/free functions for the remaining types 2017-06-20 10:06:17 +03:00
Arun Raghavan
398a6a2a1b navigation: Add some validation while sending key/mouse events
https://bugzilla.gnome.org/show_bug.cgi?id=783330
2017-06-06 11:12:18 +05:30
Scott D Phillips
8d1b45ded6 navigation: Add introspection annotations for some output parameters
The missing annotations prevented proper usage from introspected
bindings like python.

https://bugzilla.gnome.org/show_bug.cgi?id=783330
2017-06-06 11:03:29 +05:30
Scott D Phillips
09af0f1fbd video: update orc generated files
Includes updates from:

  103d265 Fix RGBA and ABGR pack/unpack on big endian cpu

https://bugzilla.gnome.org/show_bug.cgi?id=783328
2017-06-01 23:21:48 +01:00
Wim Taymans
103d265cf0 Fix RGBA and ABGR pack/unpack on big endian cpu
The pack and unpack functions for RGBA and ABGR only work for little
endian cpus. Add variants for big endian as well.
2017-06-01 17:47:22 +02:00
Mathieu Duponchelle
5d6b3b60cb gst-discoverer: use state changes instead of ASYNC_DONE.
And monitor no_more_pads.

With live sources such as rtsp, uridecodebin only creates its
child decodebins between PAUSED and PLAYING.

This means that the ASYNC_DONE it posts when getting NO_PREROLL
in its change_state method gets immediately propagated by the
GstBin parent class, as opposed to a situation where a
decodebin has been added to it already, and has posted ASYNC_START.

The proposed solution, instead of simply waiting for ASYNC_DONE,
and finishing prematurely in that case, waits for three conditions
to be true:

* the uridecodebin needs to have emitted no_more_pads
* its current state must be PAUSED if not live, PLAYING otherwise
* There must be no "pending subtitle pads", ie pads where we haven't
  received tags yet.

All these conditions are checked in the message handler, as we
post custom messages on it when we get subtitle tags or no_more_pads.

https://bugzilla.gnome.org/show_bug.cgi?id=783257
2017-05-31 05:10:21 +02:00
Tim-Philipp Müller
18e55dcdc0 pbutils: fix stand-alone version header include
Include gst headers for GST_EXPORT.
2017-05-21 17:43:12 +01:00
Edward Hervey
dfa548dc5b videodecoder: Don't queue frames in TRICKMODE_KEY_UNITS
When the input is TRICKMODE_KEY_UNITS, we expect to only receive keyframes
which we want to decode/push immediately. Therefore don't queue them.

If upstream didn't send just keyframes (which is the ideal situation), two
different things can happen:
1) Either the subclass checks the segment flags and properly configures
 the decoder implementation to only decode/output keyframes,
2) Or the subclass really decodes and outputs everything, in which case
 the reverse frames will end up arriving "late" downstream (and will
 be dropped). If upstream did properly send GOP in reverse order, we
 still end up just showing keyframes (but at the overhead of decoding
 everything).

https://bugzilla.gnome.org/show_bug.cgi?id=777094
2017-05-20 17:37:27 +02:00
Jan Schmidt
2980e96a50 videodecoder: Output mono multiview caps if none specified
Always put multiview-caps onto the output caps, assuming
mono if we've got no other information. It's still easy for
downstream elements to override using a capssetter or event
probe if desired.

https://bugzilla.gnome.org/show_bug.cgi?id=776172
2017-05-19 18:02:36 +02:00
Sebastian Dröge
cc281e80d6 discoverer: Clean up more fields to decide if parent/child streams are equivalent
https://bugzilla.gnome.org/show_bug.cgi?id=782780
2017-05-18 13:24:19 +03:00
Sebastian Dröge
5614862de1 Revert "discoverer: Consider parent/child streams the same if they have caps with the same name"
This reverts commit 478b7a8eb4.

video/mpeg,systemstream=true / false distinguishes between container and
elementary stream.
2017-05-18 13:13:58 +03:00
Sebastian Dröge
478b7a8eb4 discoverer: Consider parent/child streams the same if they have caps with the same name
Child streams could have more accurate width/height or various other
information added. If they have the same name, they are likely to be the
same streams.

https://bugzilla.gnome.org/show_bug.cgi?id=782697
2017-05-18 11:21:55 +03:00
Sebastian Dröge
67fb3b12ee gst: Clear floating flag in constructor of all GstObject subclasses that are not owned by any parent
https://bugzilla.gnome.org/show_bug.cgi?id=743062
2017-05-17 10:40:52 +03:00
Sebastian Dröge
2a8784e218 audioclock: Sink the reference in the constructor
This is now needed as GstClock does not do that internally anymore,
because that broke bindings.

And mark the function correctly as (transfer full), which it already was
before.

https://bugzilla.gnome.org/show_bug.cgi?id=743062
2017-05-17 10:40:52 +03:00
Sebastian Dröge
7185a7ac98 allocators: Annotate constructors with (transfer floating)
GstAllocator is a GstObject and as such uses floating references.

https://bugzilla.gnome.org/show_bug.cgi?id=702960
2017-05-17 10:40:52 +03:00
Nicolas Dufresne
1ceb40cd1e audioringbuffer: Accept MPEG 1 layer 3 version 2.5
https://bugzilla.gnome.org/show_bug.cgi?id=781929
2017-05-16 15:37:16 -04:00
Tim-Philipp Müller
820c34740f video: mark symbols explicitly for export with GST_EXPORT 2017-05-16 15:23:12 +01:00
Tim-Philipp Müller
af78896a82 tag: mark symbols explicitly for export with GST_EXPORT 2017-05-16 15:23:08 +01:00
Tim-Philipp Müller
bb7e401cb3 sdp: mark symbols explicitly for export with GST_EXPORT 2017-05-16 15:23:08 +01:00
Tim-Philipp Müller
587cf82fc1 rtsp: mark symbols explicitly for export with GST_EXPORT 2017-05-16 15:22:45 +01:00
Tim-Philipp Müller
33ae84fd1c rtp: mark symbols explicitly for export with GST_EXPORT 2017-05-16 15:22:42 +01:00
Tim-Philipp Müller
a1ec342b77 riff: mark symbols explicitly for export with GST_EXPORT 2017-05-16 15:22:42 +01:00
Tim-Philipp Müller
1b6494a644 pbutils: mark symbols explicitly for export with GST_EXPORT 2017-05-16 15:22:38 +01:00
Tim-Philipp Müller
7ae9b4ac4e app: mark symbols explicitly for export with GST_EXPORT 2017-05-16 15:22:34 +01:00
Tim-Philipp Müller
fda887179e fft: mark symbols explicitly for export with GST_EXPORT 2017-05-16 15:22:30 +01:00
Tim-Philipp Müller
d7dd381f78 audio: mark symbols explicitly for export with GST_EXPORT 2017-05-16 15:22:26 +01:00
Tim-Philipp Müller
d6a12c0a8f allocators: mark symbols explicitly for export with GST_EXPORT 2017-05-16 01:11:46 +01:00
Tim-Philipp Müller
05cc341844 gst-libs: Remove empty ext subdir 2017-05-16 00:21:57 +01:00
Tim-Philipp Müller
f4494dab87 rtpbasedepayload: fix class description in docs 2017-05-15 16:20:01 +01:00
Tim-Philipp Müller
60e9629860 g-i: no need to load registry in g-i scanner 2017-05-04 23:55:20 +01:00
Sebastian Dröge
a3656ba29b libs: Check if meta transform_func is NULL before using it
https://bugzilla.gnome.org/show_bug.cgi?id=782050
2017-05-02 14:31:14 +03:00
Guillaume Desmottes
a8edddb3d6 video: fix typo in GstVideoAlignment doc
https://bugzilla.gnome.org/show_bug.cgi?id=781490
2017-04-19 10:50:41 +01:00
Tim-Philipp Müller
5185cce994 audio: resampler: fix typos in docs 2017-04-13 16:40:02 +01:00
Rico Tzschichholz
07a427b403 meson: Pass --c-include accordingly to GIR builds 2017-04-13 12:23:32 +01:00
Tim-Philipp Müller
4246198fb3 No need for newlines in debug log statements 2017-04-12 09:58:49 +01:00
Claudio Saavedra
6b983a79e3 meson: install gstappsink.h
https://bugzilla.gnome.org/show_bug.cgi?id=781168
2017-04-11 11:51:36 +03:00
Sebastian Dröge
78ae1411ce Revert "tag: Fix enum nicks for backwards compatibility"
This reverts commit 595b29519a.

Bindings are not using the nicks but the actual enum names.
2017-04-10 14:34:23 +03:00
Sebastian Dröge
a69befecd3 app/tag: Fix build with srcdir!=builddir 2017-04-10 14:25:30 +03:00
Sebastian Dröge
595b29519a tag: Fix enum nicks for backwards compatibility
The enum values got the wrong name at some point, something to fix for 2.0.
2017-04-10 14:02:01 +03:00
Rico Tzschichholz
dc4e041f07 app/tag: Add missing sources/headers to the GIR build 2017-04-10 13:55:58 +03:00
Sebastian Dröge
8169cfa737 meson: Define missing variable 2017-04-09 12:54:12 +03:00
Sebastian Dröge
e74e1e80fa tag: Generate GLib enums/flags with glib-mkenums 2017-04-09 12:51:52 +03:00
Sebastian Dröge
b56dcb3e20 app: Generate GLib enums with glib-mkenums 2017-04-09 12:29:55 +03:00
Sebastian Dröge
e05127a510 encoding-profile: It's (transfer none), not (transfer-none) 2017-04-09 12:19:22 +03:00
Sebastian Dröge
8b468c3c36 audio: Generate audiobasesink/src and audiocdsrc GLib enums automatically
And ensure that GstAudioBaseSrcSlaveMethod's re-timestamp stays
re-timestamp and doesn't become retimestamp.
2017-04-09 11:49:50 +03:00
Vivia Nikolaidou
bdccc98ee2 timecode: Fix invalid drop-frame timecode right before a new second
The previous fix was only working for non-drop-frame timecodes.

https://bugzilla.gnome.org/show_bug.cgi?id=779866
2017-04-09 11:15:27 +03:00
Matthew Waters
0dcab96d88 sdp/media: caps_from_media() don't modify the input media
Performing a gst_sdp_media_get_caps_from_media() would result in
changing fields in the GstSDPMedia violating the const tag in the
function declaration.

Before there would be a line with a=rtpmap:96 VP8/90000
after, that attribute would only contain a=rtpmap:96

Fix by performing modifications on duplicated strings instead of on
the internal values.

Also add a simple test for checking that the representation doesn't
change by a gst_sdp_media_get_caps_from_media()
2017-04-03 16:49:12 +10:00
Matthew Waters
9d3622e1bd sdp: add g_return*_if_fail assertions on invalid inputs
Prevents some programming errors and invalid modifications.
2017-04-03 16:49:12 +10:00
Matthew Waters
fa243654cf sdp/message: fix segfault copying NULL in the boxed copy impl
Allows passing NULL as a value to g_object_set and as signal
parameters without crashing.
2017-04-03 16:49:12 +10:00
Vincent Penquerc'h
32ef8f54d4 video-converter: fix scaler leak
https://bugzilla.gnome.org/show_bug.cgi?id=780764
2017-03-31 16:14:50 +01:00
Arun Raghavan
a6742e81b9 convertframe: Fix async video sample conversion with non-default context
The GSource for dealing with timeouts in
gst_video_convert_sample_async() might be attached to a non-default
context, so we should not be using g_source_remove() on the returned ID.

The correct thing to do is to keep a reference to the actual GSource and
then call g_source_destroy() on it.

https://bugzilla.gnome.org/show_bug.cgi?id=780297
2017-03-20 17:23:58 +05:30
Jan Schmidt
2d3e69dca3 videodecoder: Add debug output tracking decode-after-flush
Track how long it takes to generate the first buffer after a flush
as a simple measure of how efficient the decoder is at skipping /
rushing to get to the first decode.
2017-03-18 02:03:47 +11:00
Sebastian Dröge
ce9bac465a video-format: Shift correctly when packing I420_12BE 2017-03-17 13:43:04 +02:00
Sebastian Dröge
eda8bd4de1 video-format: Order all formats in GST_VIDEO_FORMATS_ALL like in the enum
And remove duplicated entries.
2017-03-17 13:28:02 +02:00
Arun Raghavan
389a3c4461 encoding-profile: Mark format caps as transfer-none in profile creation 2017-03-17 16:01:57 +05:30
Sebastian Dröge
95ddfdee4e video-format: Add Since markers to all new formats from 1.2
https://bugzilla.gnome.org/show_bug.cgi?id=780100
2017-03-16 17:38:02 +02:00
Sebastian Dröge
77f802f8e6 video: Add I420/I422/Y444_12LE/BE and GBRA video formats
https://bugzilla.gnome.org/show_bug.cgi?id=780100
2017-03-16 17:32:27 +02:00
Emeric Grange
2fcab9e7ef video: Add GBRA_10LE/BE, GBR_12LE/BE, GBRA_12LE/BE pixel formats
With additional bugfixes from Sebastian Dröge <sebastian@centricular.com>

https://bugzilla.gnome.org/show_bug.cgi?id=780100
2017-03-16 16:44:12 +02:00
Thibault Saunier
099ac9faf2 docs: Convert gtkdoc comments to markdown
Modernizing the documentation, making it simpler to read an
modify and allowing us to possibly switch to hotdoc in the
future.
2017-03-10 18:19:17 -03:00
Vivia Nikolaidou
a122135194 videotimecode: Fix invalid timecode right before a new second
When initializing a timecode from a GDateTime, and the remaining time
until the new second is less than half a frame (according to the given
frame rate), it would lead to the creation of an invalid timecode, e.g.
00:00:00:25 (at 25 fps) instead of 00:00:01:00. Fixed.

https://bugzilla.gnome.org/show_bug.cgi?id=779866
2017-03-10 17:47:46 +02:00
Matthew Waters
d15b0f4844 videodecoder: fix build error on i386
Use G_GUINT64_FORMAT for guint64 values.

Introduced by fcb63e77a9

Found by Alexander Larsson

gstvideodecoder.c: In function 'gst_video_decoder_have_frame':
gstvideodecoder.c:3312:51: error: format '%u' expects argument of type 'unsigned int', but argument 8 has type 'guint64 {aka long long unsigned int}' [-Werror=format=]
2017-03-10 18:23:48 +11:00
Sebastian Dröge
9460d40054 videotimecode: Unref GDateTime in error cases 2017-03-08 15:47:52 +02:00
Jan Schmidt
052d34478f videodecoder: Fix a leak introduced in fcb63e
CID: 1402055
2017-03-06 19:14:48 +11:00
Jan Schmidt
6ac79da6a2 videodecoder: Restrict frame timestamp guessing in reverse mode
Don't guess a timestamp of the start of the segment when running
in reverse mode, as more likely it means we're discontinuous somewhere
in the middle of the segment, and we'll fix up timestamps once
the frames are decoded and reversed.
2017-03-04 00:30:37 +11:00
Jan Schmidt
fcb63e77a9 videodecoder: Store buffer information even without PTS
When a PTS is not set, we still want to store the rest of the
buffer information, or else we lose important things like the
duration or buffer flags when parsing.
2017-03-04 00:30:37 +11:00
Sebastian Dröge
daa0e18c75 videodecoder: Handle return value of gst_video_decoder_drain()
CID 1362896
2017-02-28 15:11:42 +02:00
Sebastian Dröge
0f7b9dbe75 video-converter: Give a name to the thread-pool threads
This way they can be distinguished from any other threads in the same
process.
2017-02-24 10:04:21 +02:00
Sebastian Dröge
6d20fcc9df video-converter: Only lock the thread pool mutex when running with more than 1 thread
There's no reason to lock anything if only the current thread is ever
going to do any work.
2017-02-24 10:02:28 +02:00
Sebastian Dröge
49ac382b47 video-converter: Implement multi-threaded scaling/conversion
This adds a property to select the maximum number of threads to use for
conversion and scaling. During processing, each plane is split into
an equal number of consecutive lines that are then processed by each
thread.

During tests, this gave up to 1.8x speedup with 2 threads and up to 3.2x
speedup with 4 threads when converting e.g. 1080p to 4k in v210.

https://bugzilla.gnome.org/show_bug.cgi?id=778974
2017-02-23 21:55:29 +02:00
Georg Lippitsch
d15ad75caf videotimecode: Validate for drop-frame correctness
In gst_video_time_code_is_valid, also check for invalid
ranges when using drop-frame TC. Refactor some code which
broke after the check was added.

https://bugzilla.gnome.org/show_bug.cgi?id=779010
2017-02-23 19:56:26 +02:00
Georg Lippitsch
b3df5786a9 videotimecode: Init from GDateTime
Add a function to init the time code from a GDateTime

https://bugzilla.gnome.org/show_bug.cgi?id=778702
2017-02-23 19:50:39 +02:00
Sebastian Dröge
ab854b04ba video-scaler: Fix upscaling if width & height change and we're starting not at y=0
It was taking the initial input y-offset from the output value, which
only works for y=0 (in which case both are the same). If y > 0, we would
always stay behind the requested input offset and never ever read
anything from the input.
2017-02-15 21:43:32 +02:00
Thibault Saunier
d5fbc905e3 discoverer: Ignore more parser related fields when comparing streams
The parser might do some conversion on a stream but the stream keeps
being the same, and we need to make sure GstDiscoverer detects it is the
case.

https://bugzilla.gnome.org/show_bug.cgi?id=778298
2017-02-08 15:56:34 -03:00
Jan Schmidt
5903e2dfbb audioringbuffer: Also add FLAC to debug strings.
Oops, also add FLAC to the debug strings array.

https://bugzilla.gnome.org/show_bug.cgi?id=777655
2017-02-04 14:46:42 +11:00
Jan Schmidt
04c14de1d1 audioringbuffer: Prevent overflow of debug names array
Add new audio types to the list of strings used for debug
so we don't index past the end of that array.

https://bugzilla.gnome.org/show_bug.cgi?id=777655
2017-02-04 14:42:33 +11:00
Sebastian Dröge
f939f05304 audio-resampler: Fix integer overflow in clamping code
https://bugzilla.gnome.org/show_bug.cgi?id=777921
2017-01-30 12:35:04 +02:00