Merge branch 'move_subdir_ugly' into tizen_gst_1.19.2_mono
authorGilbok Lee <gilbok.lee@samsung.com>
Tue, 25 Jan 2022 04:25:10 +0000 (13:25 +0900)
committerGilbok Lee <gilbok.lee@samsung.com>
Tue, 25 Jan 2022 04:25:10 +0000 (13:25 +0900)
Change-Id: Ifbf7ed41ee57c69d1e399a71ddce9fde680daa52

234 files changed:
gstreamer.manifest [new file with mode: 0644]
packaging/gst-plugins-bad.manifest [new file with mode: 0644]
packaging/gst-plugins-bad.spec [new file with mode: 0644]
packaging/gst-plugins-base.manifest [new file with mode: 0644]
packaging/gst-plugins-base.spec [new file with mode: 0644]
packaging/gst-plugins-good.manifest [new file with mode: 0644]
packaging/gst-plugins-good.spec [new file with mode: 0644]
packaging/gst-plugins-ugly.manifest [new file with mode: 0644]
packaging/gst-plugins-ugly.spec [new file with mode: 0644]
packaging/gstreamer.manifest [new file with mode: 0644]
packaging/gstreamer.spec [new file with mode: 0644]
subprojects/gst-plugins-bad/ext/aes/meson.build
subprojects/gst-plugins-bad/ext/bz2/gstbz2enc.c
subprojects/gst-plugins-bad/ext/dash/gstdashdemux.c
subprojects/gst-plugins-bad/ext/dash/gstmpdclient.c
subprojects/gst-plugins-bad/ext/dash/gstmpdparser.h
subprojects/gst-plugins-bad/ext/dtls/meson.build
subprojects/gst-plugins-bad/ext/hls/gsthlsdemux.c
subprojects/gst-plugins-bad/ext/hls/gsthlsdemux.h
subprojects/gst-plugins-bad/ext/hls/m3u8.c
subprojects/gst-plugins-bad/ext/hls/m3u8.h
subprojects/gst-plugins-bad/ext/hls/meson.build
subprojects/gst-plugins-bad/ext/kate/gstkatedec.c
subprojects/gst-plugins-bad/ext/musepack/gstmusepackdec.c
subprojects/gst-plugins-bad/ext/openal/gstopenalsink.c
subprojects/gst-plugins-bad/ext/openal/gstopenalsink.h
subprojects/gst-plugins-bad/ext/openal/meson.build
subprojects/gst-plugins-bad/ext/rsvg/gstrsvgdec.c
subprojects/gst-plugins-bad/ext/soundtouch/gstpitch.cc
subprojects/gst-plugins-bad/ext/wayland/wldisplay.c
subprojects/gst-plugins-bad/ext/webrtc/gstwebrtcbin.c
subprojects/gst-plugins-bad/ext/webrtc/gstwebrtcbin.h
subprojects/gst-plugins-bad/ext/webrtc/gstwebrtcice.c
subprojects/gst-plugins-bad/ext/webrtc/webrtcdatachannel.c
subprojects/gst-plugins-bad/ext/webrtc/webrtcsdp.c
subprojects/gst-plugins-bad/gst-libs/gst/adaptivedemux/gstadaptivedemux.c
subprojects/gst-plugins-bad/gst-libs/gst/adaptivedemux/gstadaptivedemux.h
subprojects/gst-plugins-bad/gst-libs/gst/codecparsers/dboolhuff.c
subprojects/gst-plugins-bad/gst-libs/gst/uridownloader/gsturidownloader.c
subprojects/gst-plugins-bad/gst-libs/gst/uridownloader/gsturidownloader.h
subprojects/gst-plugins-bad/gst-libs/gst/vulkan/wayland/gstvkdisplay_wayland.c
subprojects/gst-plugins-bad/gst/autoconvert/gstautoconvert.c
subprojects/gst-plugins-bad/gst/bayer/gstbayer2rgb.c
subprojects/gst-plugins-bad/gst/id3tag/id3tag.c
subprojects/gst-plugins-bad/gst/mpegdemux/gstmpegdemux.c
subprojects/gst-plugins-bad/gst/mpegtsdemux/mpegtsbase.c
subprojects/gst-plugins-bad/gst/mpegtsdemux/mpegtspacketizer.c
subprojects/gst-plugins-bad/gst/mpegtsdemux/mpegtspacketizer.h
subprojects/gst-plugins-bad/gst/mpegtsdemux/tsdemux.c
subprojects/gst-plugins-bad/gst/mpegtsdemux/tsdemux.h
subprojects/gst-plugins-bad/gst/mxf/mxfalaw.c
subprojects/gst-plugins-bad/gst/mxf/mxfdemux.c
subprojects/gst-plugins-bad/gst/mxf/mxfdv-dif.c
subprojects/gst-plugins-bad/gst/mxf/mxfjpeg2000.c
subprojects/gst-plugins-bad/gst/mxf/mxfup.c
subprojects/gst-plugins-bad/gst/mxf/mxfvc3.c
subprojects/gst-plugins-bad/gst/sdp/gstsdpdemux.c
subprojects/gst-plugins-bad/gst/timecode/gstavwait.c
subprojects/gst-plugins-bad/gst/videofilters/gstscenechange.c
subprojects/gst-plugins-bad/gst/videofilters/gstvideodiff.c
subprojects/gst-plugins-bad/gst/videoparsers/gsth264parse.c
subprojects/gst-plugins-bad/gst/videosignal/gstsimplevideomark.c
subprojects/gst-plugins-bad/gst/videosignal/gstvideoanalyse.c
subprojects/gst-plugins-bad/meson.build
subprojects/gst-plugins-bad/meson_options.txt
subprojects/gst-plugins-bad/po/gst-plugins-bad-1.0.pot [new file with mode: 0644]
subprojects/gst-plugins-bad/sys/applemedia/vtenc.c
subprojects/gst-plugins-bad/sys/bluez/gstavdtpsrc.c
subprojects/gst-plugins-bad/sys/dshowdecwrapper/gstdshowvideodec.cpp
subprojects/gst-plugins-bad/sys/dvb/dvbbasebin.c
subprojects/gst-plugins-bad/sys/uvch264/gstuvch264_src.c
subprojects/gst-plugins-bad/tests/examples/camerabin2/gst-camerabin2-test.c
subprojects/gst-plugins-base/gst-libs/gst/allocators/allocators.h
subprojects/gst-plugins-base/gst-libs/gst/allocators/gsttizenbufferpool.c [new file with mode: 0644]
subprojects/gst-plugins-base/gst-libs/gst/allocators/gsttizenbufferpool.h [new file with mode: 0644]
subprojects/gst-plugins-base/gst-libs/gst/allocators/gsttizenmemory.c [new file with mode: 0644]
subprojects/gst-plugins-base/gst-libs/gst/allocators/gsttizenmemory.h [new file with mode: 0644]
subprojects/gst-plugins-base/gst-libs/gst/allocators/meson.build
subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudiodecoder.c
subprojects/gst-plugins-base/gst-libs/gst/tag/gsttagdemux.c
subprojects/gst-plugins-base/gst-libs/gst/video/cameracontrol.c [new file with mode: 0644]
subprojects/gst-plugins-base/gst-libs/gst/video/cameracontrol.h [new file with mode: 0644]
subprojects/gst-plugins-base/gst-libs/gst/video/cameracontrolchannel.c [new file with mode: 0644]
subprojects/gst-plugins-base/gst-libs/gst/video/cameracontrolchannel.h [new file with mode: 0644]
subprojects/gst-plugins-base/gst-libs/gst/video/gstvideofilter.c
subprojects/gst-plugins-base/gst-libs/gst/video/video-converter.c
subprojects/gst-plugins-base/gst-libs/gst/video/video-format.c
subprojects/gst-plugins-base/gst-libs/gst/video/video-format.h
subprojects/gst-plugins-base/gst-libs/gst/video/video-info.c
subprojects/gst-plugins-base/gst-libs/gst/video/videooverlay.c
subprojects/gst-plugins-base/gst-libs/gst/video/videooverlay.h
subprojects/gst-plugins-base/gst/playback/gstdecodebin2.c
subprojects/gst-plugins-base/gst/playback/gstdecodebin3.c
subprojects/gst-plugins-base/gst/playback/gstplaybin3.c
subprojects/gst-plugins-base/gst/playback/gstrawcaps.h
subprojects/gst-plugins-base/gst/playback/gsturidecodebin3.c
subprojects/gst-plugins-base/gst/subparse/gstsubparse.c
subprojects/gst-plugins-base/gst/subparse/gstsubparse.h
subprojects/gst-plugins-base/gst/subparse/samiparse.c
subprojects/gst-plugins-base/gst/subparse/samiparse.h
subprojects/gst-plugins-base/gst/typefind/gsttypefindfunctions.c
subprojects/gst-plugins-base/gst/typefind/gsttypefindfunctionsplugin.c
subprojects/gst-plugins-base/gst/typefind/gsttypefindfunctionsriff.c
subprojects/gst-plugins-base/gst/typefind/gsttypefindfunctionsstartwith.c
subprojects/gst-plugins-base/gst/videoconvert/gstvideoconvert.c
subprojects/gst-plugins-base/gst/videoconvert/gstvideoconvert.h
subprojects/gst-plugins-base/gst/videoconvert/meson.build
subprojects/gst-plugins-base/gst/volume/gstvolume.c
subprojects/gst-plugins-base/meson.build
subprojects/gst-plugins-base/meson_options.txt
subprojects/gst-plugins-base/po/bg.po
subprojects/gst-plugins-base/po/de.po
subprojects/gst-plugins-base/po/fr.po
subprojects/gst-plugins-base/po/hr.po
subprojects/gst-plugins-base/po/hu.po
subprojects/gst-plugins-base/po/it.po
subprojects/gst-plugins-base/po/nb.po
subprojects/gst-plugins-base/po/pl.po
subprojects/gst-plugins-base/po/ru.po
subprojects/gst-plugins-base/po/sv.po
subprojects/gst-plugins-base/po/tr.po
subprojects/gst-plugins-base/po/uk.po
subprojects/gst-plugins-base/po/zh_CN.po
subprojects/gst-plugins-good/ext/pulse/meson.build
subprojects/gst-plugins-good/ext/pulse/pulsesink.c
subprojects/gst-plugins-good/ext/pulse/pulsesink.h
subprojects/gst-plugins-good/ext/pulse/pulsesrc.c
subprojects/gst-plugins-good/ext/pulse/pulsesrc.h
subprojects/gst-plugins-good/ext/pulse/pulseutil.c
subprojects/gst-plugins-good/ext/pulse/pulseutil.h
subprojects/gst-plugins-good/ext/soup/gstsouphttpsrc.c
subprojects/gst-plugins-good/ext/soup/gstsouphttpsrc.h
subprojects/gst-plugins-good/ext/vpx/gstvpxdec.c
subprojects/gst-plugins-good/gst/audioparsers/gstaacparse.c
subprojects/gst-plugins-good/gst/audioparsers/gstaacparse.h
subprojects/gst-plugins-good/gst/audioparsers/gstmpegaudioparse.c
subprojects/gst-plugins-good/gst/audioparsers/gstmpegaudioparse.h
subprojects/gst-plugins-good/gst/avi/gstavidemux.c
subprojects/gst-plugins-good/gst/flv/gstflvdemux.c
subprojects/gst-plugins-good/gst/flx/gstflxdec.c [changed mode: 0644->0755]
subprojects/gst-plugins-good/gst/isomp4/fourcc.h
subprojects/gst-plugins-good/gst/isomp4/gstqtmux.c
subprojects/gst-plugins-good/gst/isomp4/gstqtmux.h
subprojects/gst-plugins-good/gst/isomp4/qtdemux.c
subprojects/gst-plugins-good/gst/isomp4/qtdemux.h
subprojects/gst-plugins-good/gst/isomp4/qtdemux_types.h
subprojects/gst-plugins-good/gst/matroska/matroska-demux.c
subprojects/gst-plugins-good/gst/replaygain/gstrgvolume.c
subprojects/gst-plugins-good/gst/replaygain/gstrgvolume.h
subprojects/gst-plugins-good/gst/rtpmanager/gstrtpbin.c
subprojects/gst-plugins-good/gst/rtpmanager/gstrtpbin.h
subprojects/gst-plugins-good/gst/rtpmanager/rtpjitterbuffer.c
subprojects/gst-plugins-good/gst/rtpmanager/rtpstats.c
subprojects/gst-plugins-good/gst/rtsp/gstrtsp.c
subprojects/gst-plugins-good/gst/rtsp/gstrtspsrc.c
subprojects/gst-plugins-good/gst/rtsp/gstrtspsrc.h
subprojects/gst-plugins-good/gst/videofilter/gstvideobalance.c
subprojects/gst-plugins-good/gst/wavparse/gstwavparse.c
subprojects/gst-plugins-good/meson.build
subprojects/gst-plugins-good/meson_options.txt
subprojects/gst-plugins-good/po/fr.po
subprojects/gst-plugins-good/po/hr.po
subprojects/gst-plugins-good/po/hu.po
subprojects/gst-plugins-good/po/nb.po
subprojects/gst-plugins-good/sys/v4l2/ext/videodev2.h
subprojects/gst-plugins-good/sys/v4l2/gstv4l2.c
subprojects/gst-plugins-good/sys/v4l2/gstv4l2allocator.c
subprojects/gst-plugins-good/sys/v4l2/gstv4l2allocator.h
subprojects/gst-plugins-good/sys/v4l2/gstv4l2bufferpool.c
subprojects/gst-plugins-good/sys/v4l2/gstv4l2bufferpool.h
subprojects/gst-plugins-good/sys/v4l2/gstv4l2object.c
subprojects/gst-plugins-good/sys/v4l2/gstv4l2object.h
subprojects/gst-plugins-good/sys/v4l2/gstv4l2src.c
subprojects/gst-plugins-good/sys/v4l2/gstv4l2src.h
subprojects/gst-plugins-good/sys/v4l2/gstv4l2videodec.c
subprojects/gst-plugins-good/sys/v4l2/gstv4l2videoenc.c
subprojects/gst-plugins-good/sys/v4l2/meson.build
subprojects/gst-plugins-good/sys/v4l2/v4l2_calls.c
subprojects/gst-plugins-good/sys/waveform/gstwaveformsink.c
subprojects/gst-plugins-ugly/ext/dvdread/dvdreadsrc.c
subprojects/gst-plugins-ugly/gst/asfdemux/gstasfdemux.c
subprojects/gst-plugins-ugly/gst/asfdemux/gstasfdemux.h
subprojects/gst-plugins-ugly/gst/dvdsub/gstdvdsubparse.c
subprojects/gst-plugins-ugly/meson.build
subprojects/gst-plugins-ugly/meson_options.txt
subprojects/gstreamer/gst/gstbin.c
subprojects/gstreamer/gst/gstelement.c
subprojects/gstreamer/gst/gstelementfactory.c
subprojects/gstreamer/gst/gstelementfactory.h
subprojects/gstreamer/gst/gstinfo.c
subprojects/gstreamer/gst/gstobject.c
subprojects/gstreamer/gst/gstobject.h
subprojects/gstreamer/gst/gstpad.c
subprojects/gstreamer/gst/gstquark.c
subprojects/gstreamer/gst/gstquark.h
subprojects/gstreamer/gst/gstquery.c
subprojects/gstreamer/gst/gstquery.h
subprojects/gstreamer/gst/gstquery.h.tv [new file with mode: 0644]
subprojects/gstreamer/gst/gsttaglist.c
subprojects/gstreamer/gst/gsttaglist.h
subprojects/gstreamer/gst/gstutils.c
subprojects/gstreamer/gst/gstutils.h
subprojects/gstreamer/gst/meson.build
subprojects/gstreamer/hooks/pre-commit.hook [changed mode: 0755->0644]
subprojects/gstreamer/libs/gst/base/gstbaseparse.c
subprojects/gstreamer/libs/gst/base/gstbaseparse.h
subprojects/gstreamer/libs/gst/base/gstbasesrc.c
subprojects/gstreamer/libs/gst/base/gstbasesrc.h
subprojects/gstreamer/libs/gst/helpers/gst_gdb.py
subprojects/gstreamer/libs/gst/helpers/ptp_helper_post_install.sh [changed mode: 0755->0644]
subprojects/gstreamer/meson.build
subprojects/gstreamer/meson_options.txt
subprojects/gstreamer/plugins/elements/gstfakesink.c
subprojects/gstreamer/plugins/elements/gstfakesink.h
subprojects/gstreamer/plugins/elements/gstfilesink.c
subprojects/gstreamer/plugins/elements/gstinputselector.c
subprojects/gstreamer/plugins/elements/gstmultiqueue.c
subprojects/gstreamer/plugins/elements/gstqueue.c
subprojects/gstreamer/plugins/elements/gstqueue.h
subprojects/gstreamer/plugins/elements/gstqueue2.c
subprojects/gstreamer/plugins/elements/gstqueue2.h
subprojects/gstreamer/plugins/elements/gsttypefindelement.c
subprojects/gstreamer/po/bg.po
subprojects/gstreamer/po/de.po
subprojects/gstreamer/po/fr.po
subprojects/gstreamer/po/hr.po
subprojects/gstreamer/po/hu.po
subprojects/gstreamer/po/nb.po
subprojects/gstreamer/po/tr.po
subprojects/gstreamer/tests/benchmarks/complexity.scm [changed mode: 0755->0644]
subprojects/gstreamer/tests/benchmarks/mass-elements.scm [changed mode: 0755->0644]
subprojects/gstreamer/tests/benchmarks/tracing.sh [changed mode: 0755->0644]
subprojects/gstreamer/tests/misc/network-clock.scm [changed mode: 0755->0644]
subprojects/gstreamer/tests/misc/plot-data [changed mode: 0755->0644]

diff --git a/gstreamer.manifest b/gstreamer.manifest
new file mode 100644 (file)
index 0000000..97e8c31
--- /dev/null
@@ -0,0 +1,5 @@
+<manifest>
+       <request>
+               <domain name="_"/>
+       </request>
+</manifest>
diff --git a/packaging/gst-plugins-bad.manifest b/packaging/gst-plugins-bad.manifest
new file mode 100644 (file)
index 0000000..97e8c31
--- /dev/null
@@ -0,0 +1,5 @@
+<manifest>
+       <request>
+               <domain name="_"/>
+       </request>
+</manifest>
diff --git a/packaging/gst-plugins-bad.spec b/packaging/gst-plugins-bad.spec
new file mode 100644 (file)
index 0000000..498a46d
--- /dev/null
@@ -0,0 +1,275 @@
+%bcond_with wayland
+%define gst_branch 1.0
+
+Name:           gst-plugins-bad
+Version:        1.19.2
+Release:        0
+Summary:        GStreamer Streaming-Media Framework Plug-Ins
+License:        LGPL-2.0+
+Group:          Multimedia/Framework
+Url:            http://gstreamer.freedesktop.org/
+Source:         http://gstreamer.freedesktop.org/src/gst-plugins-bad/%{name}-%{version}.tar.xz
+Source1001:     gst-plugins-bad.manifest
+BuildRequires:  gettext-tools
+BuildRequires:  autoconf
+BuildRequires:  gcc-c++
+BuildRequires:  pkgconfig(glib-2.0) >= 2.31.14
+BuildRequires:  gstreamer-devel >= %{version}
+BuildRequires:  gst-plugins-base-devel >= %{version}
+BuildRequires:  pkgconfig(orc-0.4) >= 0.4.11
+BuildRequires:  python
+BuildRequires:  xsltproc
+BuildRequires:  pkgconfig(libusb-1.0)
+BuildRequires:  pkgconfig(gio-2.0) >= 2.25.0
+BuildRequires:  pkgconfig(libcurl) >= 7.21.0
+BuildRequires:  pkgconfig(libexif) >= 0.6.16
+BuildRequires:  pkgconfig(openssl1.1)
+#BuildRequires:  pkgconfig(libcryto1.1)
+BuildRequires:  pkgconfig(sndfile) >= 1.0.16
+BuildRequires:  pkgconfig(openal)
+BuildRequires:  pkgconfig(soundtouch) > 1.4
+BuildRequires:  pkgconfig(nice)
+BuildRequires:  pkgconfig(usrsctp)
+BuildRequires:  pkgconfig(libsrtp2) >= 2.1.0
+BuildRequires:  pkgconfig(opus)
+BuildRequires:  meson >= 0.48.0
+%if %{with wayland}
+%if 0%{?enable_gl:1}
+BuildRequires:  pkgconfig(gles20)
+BuildRequires:  pkgconfig(wayland-egl) >= 9.0
+%endif
+BuildRequires:  pkgconfig(wayland-client) >= 1.0.0
+BuildRequires:  pkgconfig(wayland-cursor) >= 1.0.0
+BuildRequires:  pkgconfig(wayland-protocols)
+BuildRequires:  pkgconfig(libxml-2.0)
+BuildRequires:  pkgconfig(libdrm)
+%endif
+%if %{with x}
+BuildRequires:  pkgconfig(x11)
+%endif
+Requires:       gstreamer >= %{version}
+
+%description
+GStreamer is a streaming media framework based on graphs of filters
+that operate on media data. Applications using this library can do
+anything media-related,from real-time sound processing to playing
+videos. Its plug-in-based architecture means that new data types or
+processing capabilities can be added simply by installing new plug-ins.
+
+
+%package devel
+Summary:        GStreamer Streaming-Media Framework Plug-Ins
+Requires: %{name} = %{version}-%{release}
+Requires: gst-plugins-base-devel
+
+%description devel
+GStreamer is a streaming media framework based on graphs of filters
+that operate on media data. Applications using this library can do
+anything media-related,from real-time sound processing to playing
+videos. Its plug-in-based architecture means that new data types or
+processing capabilities can be added simply by installing new plug-ins.
+
+
+%prep
+%setup -q -n %{name}-%{version}
+cp %{SOURCE1001} .
+
+%build
+mkdir -p build
+
+export CFLAGS+=" -Wall -g -fPIC\
+  -fstack-protector-strong\
+  -Wl,-z,relro\
+  -D_FORTIFY_SOURCE=2"
+# export pthread for checking usrsctp_init at sctp configure
+export LDFLAGS+=" -pthread "
+
+meson --prefix=/usr --libdir=%{_libdir} --datadir=%{_datadir} \
+       -D gst_play_tests=false\
+%if "%{tizen_profile_name}" == "tv"
+       -D tv-profile=false \
+       -D autoconvert=disabled \
+       -D camerabin2=disabled \
+       -D dash=disabled \
+       -D hls=disabled \
+       -D id3tag=disabled \
+       -D jpegformat=disabled \
+       -D mpegdemux=disabled \
+       -D smoothstreaming=disabled \
+       -D rtp=disabled \
+       -D gl=disabled \
+%endif
+       -D accurip=disabled \
+       -D adpcmdec=disabled \
+       -D adpcmenc=disabled \
+       -D aiff=disabled \
+       -D asfmux=disabled \
+       -D audiofxbad=disabled \
+       -D audiovisualizers=disabled \
+       -D bayer=disabled \
+       -D codecalpha=disabled \
+       -D dvbsubenc=disabled \
+       -D dvbsuboverlay=disabled \
+       -D dvdspu=disabled \
+       -D faceoverlay=disabled \
+       -D festival=disabled \
+       -D fieldanalysis=disabled \
+       -D freeverb=disabled \
+       -D frei0r=disabled \
+       -D geometrictransform=disabled \
+       -D inter=disabled \
+       -D interlace=disabled \
+       -D ivfparse=disabled \
+       -D ivtc=disabled \
+       -D jp2kdecimator=disabled \
+       -D librfb=disabled \
+       -D mpegpsmux=disabled \
+       -D mxf=disabled \
+       -D onvif=disabled \
+       -D pcapparse=disabled \
+       -D pnm=disabled \
+       -D rawparse=disabled \
+       -D removesilence=disabled \
+       -D rist=disabled \
+       -D rtmp2=disabled \
+       -D segmentclip=disabled \
+       -D siren=disabled \
+       -D smooth=disabled \
+       -D speed=disabled \
+       -D subenc=disabled \
+       -D switchbin=disabled \
+       -D videofilters=disabled \
+       -D videosignal=disabled \
+       -D vmnc=disabled \
+       -D y4m=disabled \
+       -D wayland=disabled \
+       -D curl=disabled \
+       -D decklink=disabled \
+       -D dtls=enabled \
+       -D dvb=disabled \
+       -D fbdev=disabled \
+%if 0%{?enable_gl:1}
+       -D gl=enabled\
+%endif
+       -D kms=disabled \
+       -D nvcodec=disabled \
+       -D openal=enabled \
+       -D sndfile=disabled \
+       -D transcode=disabled \
+       -D uvch264=disabled \
+       -D examples=disabled \
+       -D tests=disabled \
+       -D doc=disabled build
+
+ninja -C build all %{?_smp_mflags}
+
+%install
+export DESTDIR=%{buildroot}
+ninja -C build install
+rm -rf %{buildroot}%{_datadir}/gstreamer-%{gst_branch}/encoding-profiles
+
+%find_lang %{name}-%{gst_branch}
+mv %{name}-%{gst_branch}.lang %{name}.lang
+
+%lang_package
+
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%post -p /sbin/ldconfig
+
+
+%postun -p /sbin/ldconfig
+
+
+%files
+%manifest %{name}.manifest
+%defattr(-, root, root)
+%license COPYING
+%if "%{tizen_profile_name}" != "tv"
+%{_libdir}/gstreamer-%{gst_branch}/libgstautoconvert.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstcamerabin.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstid3tag.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstjpegformat.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstmpegpsdemux.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstsmoothstreaming.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstdash.so
+%if 0%{?enable_gl:1}
+%{_libdir}/gstreamer-%{gst_branch}/libgstopengl.so
+%endif
+%{_libdir}/gstreamer-%{gst_branch}/libgstsoundtouch.so
+%{_libdir}/libgstinsertbin-%{gst_branch}.so.0*
+%{_libdir}/libgstphotography-%{gst_branch}.so.0*
+%{_libdir}/libgstbasecamerabinsrc-%{gst_branch}.so.0*
+%{_libdir}/libgsturidownloader-%{gst_branch}.so.0*
+%{_libdir}/libgstadaptivedemux-%{gst_branch}.so.0*
+%if 0%{?enable_gl:1}
+%{_libdir}/libgstgl-%{gst_branch}.so.0*
+%endif
+%{_libdir}/libgstisoff-%{gst_branch}.so.0*
+%endif
+%{_libdir}/gstreamer-%{gst_branch}/libgstaes.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstgdp.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstdebugutilsbad.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstmpegtsdemux.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstmpegtsmux.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstsdpelem.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstshm.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstvideoparsersbad.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstmidi.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstopenal.so
+%{_libdir}/gstreamer-%{gst_branch}/libgsthls.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstnetsim.so
+%{_libdir}/gstreamer-%{gst_branch}/libgsttimecode.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstvideoframe_audiolevel.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstaudiomixmatrix.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstaudiobuffersplit.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstaudiolatency.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstipcpipeline.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstproxy.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstwebrtc.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstdtls.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstrtpmanagerbad.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstsctp.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstsrtp.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstopusparse.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstgaudieffects.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstcoloreffects.so
+
+%{_libdir}/libgstsctp-%{gst_branch}.so.0*
+%{_libdir}/libgstwebrtc-%{gst_branch}.so.0*
+%{_libdir}/libgstcodecs-%{gst_branch}.so.0*
+%{_libdir}/libgstcodecparsers-%{gst_branch}.so.0*
+%{_libdir}/libgstbadaudio-%{gst_branch}.so.0*
+%{_libdir}/libgstmpegts-%{gst_branch}.so.0*
+%{_libdir}/libgstplay-%{gst_branch}.so.0*
+%{_libdir}/libgstplayer-%{gst_branch}.so.0*
+%{_libdir}/libgsttranscoder-%{gst_branch}.so.0*
+
+%exclude %{_bindir}/gst-transcoder-1.0
+
+%files devel
+%manifest %{name}.manifest
+%defattr(-, root, root)
+%{_includedir}/gstreamer-%{gst_branch}
+%if "%{tizen_profile_name}" != "tv"
+%if 0%{?enable_gl:1}
+%{_libdir}/gstreamer-%{gst_branch}/include/gst/gl/gstglconfig.h
+%endif
+%endif
+%{_libdir}/*.so
+%{_libdir}/pkgconfig/gstreamer-codecparsers-%{gst_branch}.pc
+%{_libdir}/pkgconfig/gstreamer-plugins-bad-%{gst_branch}.pc
+%{_libdir}/pkgconfig/gstreamer-insertbin-%{gst_branch}.pc
+%{_libdir}/pkgconfig/gstreamer-mpegts-%{gst_branch}.pc
+%if 0%{?enable_gl:1}
+%{_libdir}/pkgconfig/gstreamer-gl-1.0.pc
+%endif
+%{_libdir}/pkgconfig/gstreamer-bad-audio-1.0.pc
+%{_libdir}/pkgconfig/gstreamer-photography-1.0.pc
+%{_libdir}/pkgconfig/gstreamer-play-1.0.pc
+%{_libdir}/pkgconfig/gstreamer-player-1.0.pc
+%{_libdir}/pkgconfig/gstreamer-sctp-1.0.pc
+%{_libdir}/pkgconfig/gstreamer-transcoder-1.0.pc
+%{_libdir}/pkgconfig/gstreamer-webrtc-1.0.pc
diff --git a/packaging/gst-plugins-base.manifest b/packaging/gst-plugins-base.manifest
new file mode 100644 (file)
index 0000000..97e8c31
--- /dev/null
@@ -0,0 +1,5 @@
+<manifest>
+       <request>
+               <domain name="_"/>
+       </request>
+</manifest>
diff --git a/packaging/gst-plugins-base.spec b/packaging/gst-plugins-base.spec
new file mode 100644 (file)
index 0000000..7d48564
--- /dev/null
@@ -0,0 +1,191 @@
+%bcond_with x
+%define gst_branch 1.0
+%define _lib_gstreamer_dir %{_libdir}/gstreamer-%{gst_branch}
+%define _libdebug_dir %{_libdir}/debug/usr/lib
+
+Name:           gst-plugins-base
+Version:        1.19.2
+Release:        0
+License:        LGPL-2.0+
+Summary:        GStreamer Streaming-Media Framework Plug-Ins
+Url:            http://gstreamer.freedesktop.org/
+Group:          Multimedia/Framework
+Source:         http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-%{version}.tar.xz
+Source1001:     gst-plugins-base.manifest
+BuildRequires:  gettext-tools
+BuildRequires:  pkgconfig(glib-2.0) >= 2.32
+#BuildRequires:  pkgconfig(gstreamer-1.0)
+BuildRequires:  gstreamer-devel >= %{version}
+BuildRequires:  orc >= 0.4.16
+BuildRequires:  python
+BuildRequires:  meson >= 0.48.0
+%if "%{tizen_profile_name}" != "tv"
+BuildRequires:  update-desktop-files
+%endif
+BuildRequires:  pkgconfig(gobject-introspection-1.0) >= 1.31.1
+BuildRequires:  pkgconfig(alsa) >= 0.9.1
+BuildRequires:  pkgconfig(freetype2) >= 2.0.9
+BuildRequires:  pkgconfig(libxml-2.0)
+BuildRequires:  pkgconfig(ogg) >= 1.0
+BuildRequires:  pkgconfig(theoradec) >= 1.1
+BuildRequires:  pkgconfig(theoraenc) >= 1.1
+BuildRequires:  pkgconfig(vorbis) >= 1.0
+BuildRequires:  pkgconfig(vorbisenc) >= 1.0
+BuildRequires:  pkgconfig(zlib)
+
+BuildRequires:  pkgconfig(libdrm)
+BuildRequires:  pkgconfig(libtbm)
+BuildRequires:  pkgconfig(opus)
+%if %{with x}
+BuildRequires:  pkgconfig(ice)
+BuildRequires:  pkgconfig(sm)
+BuildRequires:  pkgconfig(xext)
+BuildRequires:  pkgconfig(xv)
+BuildRequires:  pkgconfig(xfixes)
+BuildRequires:  pkgconfig(dri2proto)
+BuildRequires:  pkgconfig(libdri2)
+%endif
+
+Requires:       gstreamer >= 1.0.0
+Requires:       opus
+Supplements:    gstreamer
+Provides:      %{name}-profile_tv = %{version}-%{release}
+Provides:      %{name}-profile_common = %{version}-%{release}
+Provides:      %{name}-profile_wearable = %{version}-%{release}
+Provides:      %{name}-profile_ivi = %{version}-%{release}
+
+%description
+GStreamer is a streaming media framework based on graphs of filters
+that operate on media data. Applications using this library can do
+anything media-related, from real-time sound processing to playing
+videos. Its plug-in-based architecture means that new data types or
+processing capabilities can be added simply by installing new plug-ins.
+
+%package extension-adder
+Summary:       libgstadder.so for gst-plugins-base
+Requires:   %{name} = %{version}-%{release}
+Provides:   %{name}-profile_mobile = %{version}-%{release}
+%description extension-adder
+Libgstadder.so for gst-plugin-base. Supplicant for gst-plugin-base.
+This is for Tizen mobile profile.
+
+%package devel
+Summary:        Include files and Libraries
+Requires:       %{name} = %{version}
+
+%description devel
+This package contains all necessary include files and libraries needed
+to compile and link applications that use gstreamer-plugins-base.
+
+%prep
+%setup -q -n gst-plugins-base-%{version}
+cp %{SOURCE1001} .
+
+%build
+mkdir -p build
+# FIXME: GTKDOC_CFLAGS, GST_OBJ_CFLAGS:
+# Silently ignored compilation of uninstalled gtk-doc scanners without RPM_OPT_FLAGS.
+export CFLAGS="%{optflags} -fno-strict-aliasing\
+ -fstack-protector-strong\
+ -Wl,-z,relro\
+ -D_FORTIFY_SOURCE=2\
+ "
+meson --prefix=/usr --libdir=%{_libdir} --datadir=%{_datadir} \
+    -D examples=disabled \
+    -D tests=disabled \
+    -D doc=disabled \
+    -D tools=disabled \
+    -D introspection=enabled \
+%if "%{tizen_profile_name}" == "tv"
+    -D tv-profile=true \
+%endif
+    -D tbm=true build
+
+ninja -C build all %{?_smp_mflags}
+
+%install
+rm -rf %{buildroot}
+export DESTDIR=%{buildroot}
+ninja -C build install
+
+%find_lang %{name}-%{gst_branch}
+mv %{name}-%{gst_branch}.lang %{name}.lang
+
+%post -p /sbin/ldconfig
+
+%postun -p /sbin/ldconfig
+
+%lang_package
+
+%files
+%manifest %{name}.manifest
+%defattr(-, root, root)
+%license COPYING
+
+%{_lib_gstreamer_dir}/libgstalsa.so
+%{_lib_gstreamer_dir}/libgstapp.so
+%{_lib_gstreamer_dir}/libgstaudioconvert.so
+%{_lib_gstreamer_dir}/libgstaudiorate.so
+%{_lib_gstreamer_dir}/libgstaudioresample.so
+%{_lib_gstreamer_dir}/libgstaudiotestsrc.so
+%{_lib_gstreamer_dir}/libgstgio.so
+%{_lib_gstreamer_dir}/libgstogg.so
+%{_lib_gstreamer_dir}/libgstplayback.so
+%{_lib_gstreamer_dir}/libgstoverlaycomposition.so
+%{_lib_gstreamer_dir}/libgstsubparse.so
+%{_lib_gstreamer_dir}/libgsttcp.so
+%{_lib_gstreamer_dir}/libgsttheora.so
+%{_lib_gstreamer_dir}/libgsttypefindfunctions.so
+%{_lib_gstreamer_dir}/libgstvideoconvert.so
+%{_lib_gstreamer_dir}/libgstvideorate.so
+%{_lib_gstreamer_dir}/libgstvideoscale.so
+%{_lib_gstreamer_dir}/libgstvideotestsrc.so
+%{_lib_gstreamer_dir}/libgstvolume.so
+%{_lib_gstreamer_dir}/libgstvorbis.so
+%{_lib_gstreamer_dir}/libgstpbtypes.so
+%{_lib_gstreamer_dir}/libgstrawparse.so
+%{_lib_gstreamer_dir}/libgstopus.so
+%{_lib_gstreamer_dir}/libgstencoding.so
+%{_lib_gstreamer_dir}/libgstaudiomixer.so
+%{_lib_gstreamer_dir}/libgstcompositor.so
+
+%if %{with x}
+%{_lib_gstreamer_dir}/libgstximagesink.so
+%{_lib_gstreamer_dir}/libgstxvimagesink.so
+%endif
+
+%{_libdir}/libgstapp*.so.*
+%{_libdir}/libgstaudio*.so.*
+%{_libdir}/libgstallocators*.so.*
+%{_libdir}/libgstfft*.so.*
+%{_libdir}/libgstpbutils*.so.*
+%{_libdir}/libgstriff*.so.*
+%{_libdir}/libgstrtp*.so.*
+%{_libdir}/libgstrtsp*.so.*
+%{_libdir}/libgstsdp*.so.*
+%{_libdir}/libgsttag*.so.*
+%{_libdir}/libgstvideo*.so.*
+%{_libdir}/girepository-1.0/GstAllocators-1.0.typelib
+%{_libdir}/girepository-1.0/GstApp-1.0.typelib
+%{_libdir}/girepository-1.0/GstAudio-1.0.typelib
+%{_libdir}/girepository-1.0/GstPbutils-1.0.typelib
+%{_libdir}/girepository-1.0/GstRtp-1.0.typelib
+%{_libdir}/girepository-1.0/GstRtsp-1.0.typelib
+%{_libdir}/girepository-1.0/GstSdp-1.0.typelib
+%{_libdir}/girepository-1.0/GstTag-1.0.typelib
+%{_libdir}/girepository-1.0/GstVideo-1.0.typelib
+%dir %{_datadir}/gst-plugins-base/
+%dir %{_datadir}/gst-plugins-base/%{gst_branch}/
+%{_datadir}/gst-plugins-base/%{gst_branch}/license-translations.dict
+
+%files extension-adder
+%{_lib_gstreamer_dir}/libgstadder.so
+%license COPYING
+
+%files devel
+%manifest %{name}.manifest
+%defattr(-, root, root)
+%{_includedir}/gstreamer-%{gst_branch}/*
+%{_libdir}/*.so
+%{_libdir}/pkgconfig/*.pc
+%{_datadir}/gir-1.0/*.gir
diff --git a/packaging/gst-plugins-good.manifest b/packaging/gst-plugins-good.manifest
new file mode 100644 (file)
index 0000000..97e8c31
--- /dev/null
@@ -0,0 +1,5 @@
+<manifest>
+       <request>
+               <domain name="_"/>
+       </request>
+</manifest>
diff --git a/packaging/gst-plugins-good.spec b/packaging/gst-plugins-good.spec
new file mode 100644 (file)
index 0000000..0261dca
--- /dev/null
@@ -0,0 +1,212 @@
+%bcond_with x
+%define gst_branch 1.0
+
+Name:           gst-plugins-good
+Version:        1.19.2
+Release:        0
+License:        LGPL-2.1+
+Summary:        GStreamer Streaming-Media Framework Plug-Ins
+Url:            http://gstreamer.freedesktop.org/
+Group:          Multimedia/Framework
+Source:         http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-%{version}.tar.xz
+Source1001:     gst-plugins-good.manifest
+
+BuildRequires:  gettext-tools
+BuildRequires:  pkgconfig(glib-2.0) >= 2.32
+#BuildRequires:  pkgconfig(gstreamer-1.0)
+#BuildRequires:  pkgconfig(gstreamer-plugins-base-1.0)
+BuildRequires:  gstreamer-devel >= %{version}
+BuildRequires:  gst-plugins-base-devel >= %{version}
+BuildRequires:  libjpeg-devel
+BuildRequires:  orc >= 0.4.16
+BuildRequires:  python
+BuildRequires:  meson >= 0.48.0
+BuildRequires:  xsltproc
+BuildRequires:  pkgconfig(bzip2)
+BuildRequires:  pkgconfig(libpng) >= 1.2
+BuildRequires:  pkgconfig(libpulse) >= 1.0
+BuildRequires:  pkgconfig(libsoup-2.4)
+BuildRequires:  pkgconfig(libxml-2.0) >= 2.4.9
+# TODO find where process.h comes from, not kernel-devel and not wxWidgets so far.
+%if %{with x}
+BuildRequires:  pkgconfig(ice)
+BuildRequires:  pkgconfig(sm)
+BuildRequires:  pkgconfig(xdamage)
+BuildRequires:  pkgconfig(xfixes)
+# used by libgstvideo4linux2.so
+BuildRequires:  pkgconfig(xv)
+%endif
+
+BuildRequires:  pkgconfig(vpx)
+BuildRequires:  pkgconfig(zlib)
+%if "%{tizen_profile_name}" != "tv"
+BuildRequires:  pkgconfig(libv4l2)
+%endif
+BuildRequires:  pkgconfig(vconf)
+BuildRequires:  pkgconfig(gio-2.0)
+BuildRequires:  pkgconfig(libtbm)
+BuildRequires:  pkgconfig(cairo)
+BuildRequires:  pkgconfig(cairo-gobject)
+Requires:       gst-plugins-base >= %{version}
+Requires:       gstreamer >= %{version}
+
+%description
+GStreamer is a streaming media framework based on graphs of filters
+that operate on media data. Applications using this library can do
+anything media-related, from real-time sound processing to playing
+videos. Its plug-in-based architecture means that new data types or
+processing capabilities can be added simply by installing new plug-ins.
+
+%package extra
+Summary:        Complementary plugins for %{name}
+Group:          Productivity/Multimedia/Other
+Requires:       %{name} = %{version}
+Enhances:       gst-plugins-good
+
+%description extra
+This package provides complementary plugins for %{name} and
+plugins not included in official Tizen images, which may be used for development / experimental purposes.
+
+%prep
+%setup -q -n gst-plugins-good-%{version}
+cp %{SOURCE1001} .
+
+%build
+mkdir -p build
+export CFLAGS+=" \
+       -fstack-protector-strong\
+       -Wl,-z,relro\
+       -Wno-error\
+       -D_FORTIFY_SOURCE=2"
+export CXXFLAGS+=" -Wno-error"
+
+meson --prefix=/usr --libdir=%{_libdir} --datadir=%{_datadir} \
+%if ! 0%{?ENABLE_AALIB}
+    -D aalib=disabled \
+%endif
+%if "%{tizen_profile_name}" != "tv"
+    -D v4l2-libv4l2=enabled \
+%endif
+    -D v4l2-probe=true \
+    -D monoscope=disabled \
+    -D y4m=disabled \
+    -D taglib=disabled \
+    -D wavpack=disabled \
+    -D equalizer=disabled \
+%if "%{tizen_profile_name}" == "tv"
+    -D flv=disabled \
+    -D videobox=disabled \
+    -D videomixer=disabled \
+    -D lame=disabled \
+%endif
+    -D alpha=disabled \
+    -D auparse=disabled \
+    -D flx=disabled \
+    -D goom=disabled \
+    -D goom2k1=disabled \
+    -D level=disabled \
+    -D multipart=disabled \
+    -D spectrum=disabled \
+    -D cutter=disabled \
+    -D dtmf=disabled \
+    -D oss4=disabled \
+    -D oss=disabled \
+    -D shapewipe=disabled \
+    -D twolame=disabled \
+    -D tbm=true build
+
+ninja -C build all %{?_smp_mflags}
+
+%install
+export DESTDIR=%{buildroot}
+ninja -C build install
+
+%find_lang %{name}-%{gst_branch}
+
+%lang_package -f %{name}-%{gst_branch}
+
+%files
+%manifest %{name}.manifest
+%defattr(-, root, root)
+%license COPYING
+%{_libdir}/gstreamer-%{gst_branch}/libgstalaw.so
+#%{_libdir}/gstreamer-%{gst_branch}/libgstalpha.so
+#%{_libdir}/gstreamer-%{gst_branch}/libgstalphacolor.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstapetag.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstaudiofx.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstaudioparsers.so
+#%{_libdir}/gstreamer-%{gst_branch}/libgstauparse.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstautodetect.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstavi.so
+# Not yet ported
+#%{_libdir}/gstreamer-%{gst_branch}/libgstcutter.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstdebug.so
+# Not yet ported
+%{_libdir}/gstreamer-%{gst_branch}/libgstdeinterlace.so
+%{_libdir}/gstreamer-%{gst_branch}/libgsteffectv.so
+
+#%{_datadir}/gstreamer-%{gst_branch}/presets/GstVP8Enc.prs
+
+#%{_libdir}/gstreamer-%{gst_branch}/libgstflxdec.so
+#%{_libdir}/gstreamer-%{gst_branch}/libgstgoom.so
+#%{_libdir}/gstreamer-%{gst_branch}/libgstgoom2k1.so
+%{_libdir}/gstreamer-%{gst_branch}/libgsticydemux.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstid3demux.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstinterleave.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstisomp4.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstjpeg.so
+#%{_libdir}/gstreamer-%{gst_branch}/libgstlevel.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstmatroska.so
+#%{_libdir}/gstreamer-%{gst_branch}/libgstmonoscope.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstmulaw.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstmultifile.so
+#%{_libdir}/gstreamer-%{gst_branch}/libgstmultipart.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstnavigationtest.so
+#%{_libdir}/gstreamer-%{gst_branch}/libgstoss4audio.so
+#%{_libdir}/gstreamer-%{gst_branch}/libgstossaudio.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstpulseaudio.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstreplaygain.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstrtp.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstrtpmanager.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstrtsp.so
+#%{_libdir}/gstreamer-%{gst_branch}/libgstshapewipe.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstsmpte.so
+#%{_libdir}/gstreamer-%{gst_branch}/libgstspectrum.so
+#%{_libdir}/gstreamer-%{gst_branch}/libgstspeex.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstudp.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstvideo4linux2.so
+
+%{_libdir}/gstreamer-%{gst_branch}/libgstvideocrop.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstvideofilter.so
+%if "%{tizen_profile_name}" != "tv"
+%{_libdir}/gstreamer-%{gst_branch}/libgstflv.so
+#%{_libdir}/gstreamer-%{gst_branch}/libgstequalizer.so
+#%{_datadir}/gstreamer-%{gst_branch}/presets/GstIirEqualizer10Bands.prs
+#%{_datadir}/gstreamer-%{gst_branch}/presets/GstIirEqualizer3Bands.prs
+%{_datadir}/gstreamer-%{gst_branch}/presets/GstQTMux.prs
+%{_libdir}/gstreamer-%{gst_branch}/libgstvideobox.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstvideomixer.so
+%endif
+%{_libdir}/gstreamer-%{gst_branch}/libgstwavenc.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstwavparse.so
+%if %{with x}
+%{_libdir}/gstreamer-%{gst_branch}/libgstximagesrc.so
+%endif
+#%{_libdir}/gstreamer-%{gst_branch}/libgsty4menc.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstcairo.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstsoup.so
+#%{_libdir}/gstreamer-%{gst_branch}/libgstflac.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstvpx.so
+%{_datadir}/gstreamer-%{gst_branch}/presets/GstVP8Enc.prs
+#%{_libdir}/gstreamer-%{gst_branch}/libgstdtmf.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstimagefreeze.so
+
+
+%files extra
+%manifest %{name}.manifest
+%defattr(-, root, root)
+%if 0%{?ENABLE_AALIB}
+%{_libdir}/gstreamer-%{gst_branch}/libgstaasink.so
+%endif
+%{_libdir}/gstreamer-%{gst_branch}/libgstpng.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstimagefreeze.so
diff --git a/packaging/gst-plugins-ugly.manifest b/packaging/gst-plugins-ugly.manifest
new file mode 100644 (file)
index 0000000..97e8c31
--- /dev/null
@@ -0,0 +1,5 @@
+<manifest>
+       <request>
+               <domain name="_"/>
+       </request>
+</manifest>
diff --git a/packaging/gst-plugins-ugly.spec b/packaging/gst-plugins-ugly.spec
new file mode 100644 (file)
index 0000000..bb78a73
--- /dev/null
@@ -0,0 +1,83 @@
+%define gst_branch 1.0
+
+Name:       gst-plugins-ugly
+Summary:    GStreamer plugins from the "ugly" set
+Version:    1.19.2
+Release:    0
+Group:      Multimedia/Framework
+License:    LGPL-2.1+
+Source:     http://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-%{version}.tar.xz
+Source1001: gst-plugins-ugly.manifest
+
+BuildRequires:  meson >= 0.48.0
+BuildRequires:  gettext-tools
+BuildRequires:  which
+#BuildRequires:  pkgconfig(gstreamer-1.0)
+#BuildRequires:  pkgconfig(gstreamer-plugins-base-1.0)
+BuildRequires:  gstreamer-devel >= %{version}
+BuildRequires:  gst-plugins-base-devel >= %{version}
+
+BuildRequires:  pkgconfig(glib-2.0)
+%if "%{tizen_profile_name}" != "tv"
+BuildRequires:  pkgconfig(opencore-amrnb)
+%endif
+BuildRequires:  pkgconfig(opencore-amrwb)
+
+%description
+ GStreamer is a streaming media framework, based on graphs of filters
+ which operate on media data.  Applications using this library can do
+ anything from real-time sound processing to playing videos, and just
+ about anything else media-related.  Its plugin-based architecture means
+ that new data types or processing capabilities can be added simply by
+ installing new plug-ins.
+ .
+ This packages contains plugins from the "ugly" set, a set of
+ good-quality plug-ins that might pose distribution problems.
+
+%prep
+%setup -q -n gst-plugins-ugly-%{version}
+cp %{SOURCE1001} .
+
+%build
+mkdir -p build
+
+export CFLAGS="\
+       -fstack-protector-strong\
+       -Wl,-z,relro\
+       -D_FORTIFY_SOURCE=2"
+
+meson --prefix=/usr --libdir=%{_libdir} --datadir=%{_datadir} \
+%if "%{tizen_profile_name}" == "tv"
+ -D tv-profile=true \
+ -D amrnb=disabled \
+ -D asfdemux=disabled \
+%endif
+ -D nls=disabled \
+ -D dvdlpcmdec=disabled \
+ -D dvdsub=disabled \
+ -D mpeg2dec=disabled \
+ -D a52dec=disabled \
+ -D cdio=disabled \
+ -D dvdread=disabled \
+ -D sidplay=disabled \
+ -D realmedia=disabled \
+ -D xingmux=disabled \
+ -D x264=disabled \
+ -D doc=disabled build
+
+ninja -C build all %{?_smp_mflags}
+
+%install
+export DESTDIR=%{buildroot}
+ninja -C build install
+
+%files
+%manifest %{name}.manifest
+%defattr(-,root,root,-)
+%license COPYING
+%if "%{tizen_profile_name}" != "tv"
+%{_libdir}/gstreamer-%{gst_branch}/libgstasf.so
+%{_libdir}/gstreamer-%{gst_branch}/libgstamrnb.so
+%exclude %{_datadir}/gstreamer-%{gst_branch}/presets/GstAmrnbEnc.prs
+%endif
+%{_libdir}/gstreamer-%{gst_branch}/libgstamrwbdec.so
diff --git a/packaging/gstreamer.manifest b/packaging/gstreamer.manifest
new file mode 100644 (file)
index 0000000..017d22d
--- /dev/null
@@ -0,0 +1,5 @@
+<manifest>
+ <request>
+    <domain name="_"/>
+ </request>
+</manifest>
diff --git a/packaging/gstreamer.spec b/packaging/gstreamer.spec
new file mode 100644 (file)
index 0000000..8d4c559
--- /dev/null
@@ -0,0 +1,143 @@
+%define gst_branch 1.0
+
+Name:           gstreamer
+Version:        1.19.2
+Release:        0
+Summary:        Streaming-Media Framework Runtime
+License:        LGPL-2.0+
+Group:          Multimedia/Framework
+Url:            http://gstreamer.freedesktop.org/
+Source0:        http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-%{version}.tar.xz
+Source1001:     gstreamer.manifest
+BuildRequires:  meson >= 0.48.0
+BuildRequires:  bison
+BuildRequires:  gettext-tools
+BuildRequires:  check-devel
+BuildRequires:  fdupes
+BuildRequires:  flex
+BuildRequires:  pkgconfig(glib-2.0) >= 2.32.0
+BuildRequires:  libtool
+BuildRequires:  pkgconfig(libxml-2.0)
+BuildRequires:  pkgconfig(gobject-introspection-1.0) >= 1.31.1
+BuildRequires:  pkgconfig(dlog)
+
+%description
+GStreamer is a streaming-media framework, based on graphs of filters
+which operate on media data. Applications using this library can do
+anything from real-time sound processing to playing videos, and just
+about anything else media-related.  Its plug-in-based architecture
+means that new data types or processing capabilities can be added by
+installing new plug-ins.
+
+%package utils
+Summary:        Streaming-Media Framework Runtime
+Group:          Multimedia/Framework
+Provides:       gstreamer:%{_bindir}/gst-launch-%{gst_branch} = %{version}
+# Symbol for unversioned wrappers:
+Provides:       gstreamer-utils_versioned = %{version}
+
+%description utils
+GStreamer is a streaming-media framework, based on graphs of filters
+which operate on media data. Applications using this library can do
+anything from real-time sound processing to playing videos, and just
+about anything else media-related.  Its plug-in-based architecture
+means that new data types or processing capabilities can be added by
+installing new plug-ins.
+
+%package devel
+Summary:        Include Files and Libraries mandatory for Development
+Group:          Development/Libraries
+# gstreamer-utils is required for the gstreamer-provides rpm magic.
+Requires:       gstreamer-utils = %{version}
+Requires:       %{name} = %{version}
+
+%description devel
+This package contains all necessary include files and libraries needed
+to develop applications that require these.
+
+%lang_package
+
+%prep
+%setup -q -n gstreamer-%{version}
+cp %{SOURCE1001} .
+
+%build
+export CFLAGS="%{optflags} \
+       -fno-strict-aliasing\
+       -fstack-protector-strong\
+       -Wl,-z,relro\
+       -D_FORTIFY_SOURCE=2"
+
+meson --prefix=/usr --libdir=%{_libdir} --datadir=%{_datadir} \
+  -D bash-completion=disabled \
+  -D check=disabled \
+  -D examples=disabled \
+  -D tests=disabled \
+  -D doc=disabled \
+%if "%{tizen_profile_name}" == "tv"
+  -D tv-profile=true \
+%endif
+  -D ptp-helper-permissions=none \
+  build
+
+ninja -C build all %{?_smp_mflags}
+
+%install
+rm -rf %{buildroot}
+export DESTDIR=%{buildroot}
+ninja -C build install
+mkdir -p %{buildroot}%{_datadir}/gstreamer-%{gst_branch}/presets
+mkdir -p %{buildroot}%{_docdir}/%{name}
+%find_lang %{name}-%{gst_branch}
+mv %{name}-%{gst_branch}.lang %{name}.lang
+rm -rf %{buildroot}%{_datadir}/gtk-doc
+rm -rf %{buildroot}%{_docdir}/%{name}/manual
+rm -rf %{buildroot}%{_docdir}/%{name}/pwg
+rm -rf %{buildroot}%{_libexecdir}/gstreamer-%{gst_branch}/gst-plugins-doc-cache-generator
+mkdir -p %{buildroot}%{_datadir}/gstreamer-%{gst_branch}/presets
+%fdupes %{buildroot}
+
+%post -p /sbin/ldconfig
+
+%postun -p /sbin/ldconfig
+
+%files
+%manifest %{name}.manifest
+%defattr(-, root, root)
+%license COPYING
+
+%dir %{_datadir}/gstreamer-%{gst_branch}
+%dir %{_datadir}/gstreamer-%{gst_branch}/presets
+%dir %{_libdir}/gstreamer-%{gst_branch}
+%{_libdir}/gstreamer-%{gst_branch}/*.so
+%dir %{_libexecdir}/gstreamer-%{gst_branch}
+%{_libexecdir}/gstreamer-%{gst_branch}/gst-plugin-scanner
+%{_libexecdir}/gstreamer-%{gst_branch}/gst-hotdoc-plugins-scanner
+%{_libexecdir}/gstreamer-%{gst_branch}/gst-ptp-helper
+%{_libdir}/*.so.*
+%{_libdir}/girepository-1.0/Gst-1.0.typelib
+%{_libdir}/girepository-1.0/GstBase-1.0.typelib
+#%{_libdir}/girepository-1.0/GstCheck-1.0.typelib
+%{_libdir}/girepository-1.0/GstController-1.0.typelib
+%{_libdir}/girepository-1.0/GstNet-1.0.typelib
+%{_datadir}/gdb/auto-load/usr/%{_lib}/libgstreamer*-gdb.py
+%{_datadir}/gstreamer-1.0/gdb/glib_gobject_helper.py
+%{_datadir}/gstreamer-1.0/gdb/gst_gdb.py
+
+%files utils
+%manifest %{name}.manifest
+%defattr(-, root, root)
+%license COPYING
+%{_bindir}/*-%{gst_branch}
+%doc %{_mandir}/man?/*-%{gst_branch}.*
+
+%files devel
+%manifest %{name}.manifest
+%defattr(-, root, root)
+%{_datadir}/aclocal/*.m4
+%{_includedir}/*
+%{_libdir}/*.so
+%{_libdir}/pkgconfig/*.pc
+%{_datadir}/gir-1.0/*.gir
+
+%changelog
index a200b8d..a5d3f94 100644 (file)
@@ -6,7 +6,7 @@ aes_sources = [
 ]
 
 aes_cargs = []
-aes_dep = dependency('openssl', required : get_option('aes'))
+aes_dep = dependency('openssl1.1', required : get_option('aes'))
 if aes_dep.found()
   aes_cargs += ['-DHAVE_OPENSSL']
 else
index 5766bb7..846ff41 100644 (file)
@@ -240,16 +240,18 @@ compress_error:
 static void
 gst_bz2enc_init (GstBz2enc * b)
 {
+  GstCaps *tmp = NULL;
   b->sink = gst_pad_new_from_static_template (&sink_template, "sink");
   gst_pad_set_chain_function (b->sink, GST_DEBUG_FUNCPTR (gst_bz2enc_chain));
   gst_pad_set_event_function (b->sink, GST_DEBUG_FUNCPTR (gst_bz2enc_event));
   gst_element_add_pad (GST_ELEMENT (b), b->sink);
 
   b->src = gst_pad_new_from_static_template (&src_template, "src");
-  gst_pad_set_caps (b->src, gst_static_pad_template_get_caps (&src_template));
+  gst_pad_set_caps (b->src, tmp = gst_static_pad_template_get_caps (&src_template));
   gst_pad_use_fixed_caps (b->src);
   gst_element_add_pad (GST_ELEMENT (b), b->src);
 
+  gst_caps_unref(tmp);
   b->block_size = DEFAULT_BLOCK_SIZE;
   b->buffer_size = DEFAULT_BUFFER_SIZE;
   gst_bz2enc_compress_init (b);
index a71e72d..324f1e2 100644 (file)
@@ -1751,7 +1751,7 @@ gst_dash_demux_stream_has_next_fragment (GstAdaptiveDemuxStream * stream)
 
 /* The goal here is to figure out, once we have pushed a keyframe downstream,
  * what the next ideal keyframe to download is.
- * 
+ *
  * This is done based on:
  * * the current internal position (i.e. actual_position)
  * * the reported downstream position (QoS feedback)
@@ -3671,7 +3671,7 @@ struct Rfc5322TimeZone
 
 /*
  Parse an RFC5322 (section 3.3) date-time from the Date: field in the
- HTTP response. 
+ HTTP response.
  See https://tools.ietf.org/html/rfc5322#section-3.3
 */
 static GstDateTime *
@@ -3898,6 +3898,14 @@ gst_dash_demux_poll_clock_drift (GstDashDemux * demux)
       gst_adaptive_demux_get_client_now_utc (GST_ADAPTIVE_DEMUX_CAST (demux));
   if (!value) {
     GstFragment *download;
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+  GST_DEBUG_OBJECT (demux, "Fetching current time from %s",
+      urls[clock_drift->selected_url]);
+  download = gst_uri_downloader_fetch_uri (GST_ADAPTIVE_DEMUX_CAST
+      (demux)->downloader, urls[clock_drift->selected_url], NULL, NULL, NULL,
+      DEFAULT_ADAPTIVE_RETRY, DEFAULT_ADAPTIVE_TIMEOUT, TRUE, FALSE, TRUE,
+      NULL);
+#else
     gint64 range_start = 0, range_end = -1;
     GST_DEBUG_OBJECT (demux, "Fetching current time from %s",
         urls[clock_drift->selected_url]);
@@ -3908,6 +3916,7 @@ gst_dash_demux_poll_clock_drift (GstDashDemux * demux)
         gst_uri_downloader_fetch_uri_with_range (GST_ADAPTIVE_DEMUX_CAST
         (demux)->downloader, urls[clock_drift->selected_url], NULL, TRUE, TRUE,
         TRUE, range_start, range_end, NULL);
+#endif
     if (download) {
       if (method == GST_MPD_UTCTIMING_TYPE_HTTP_HEAD && download->headers) {
         value = gst_dash_demux_parse_http_head (clock_drift, download);
index fdaaa65..fbbea06 100644 (file)
@@ -248,10 +248,16 @@ gst_mpd_client_fetch_external_segment_list (GstMPDClient * client,
   uri_string = gst_uri_to_string (uri);
   gst_uri_unref (base_uri);
   gst_uri_unref (uri);
-
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+  download =
+      gst_uri_downloader_fetch_uri (client->downloader,
+      uri_string, client->mpd_uri, NULL, NULL, DEFAULT_ADAPTIVE_RETRY,
+      DEFAULT_ADAPTIVE_TIMEOUT, TRUE, FALSE, TRUE, &err);
+#else
   download =
       gst_uri_downloader_fetch_uri (client->downloader,
       uri_string, client->mpd_uri, TRUE, FALSE, TRUE, &err);
+#endif
   g_free (uri_string);
 
   if (!download) {
@@ -1164,9 +1170,16 @@ gst_mpd_client_fetch_external_periods (GstMPDClient * client,
   gst_uri_unref (base_uri);
   gst_uri_unref (uri);
 
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+  download =
+      gst_uri_downloader_fetch_uri (client->downloader,
+      uri_string, client->mpd_uri, NULL, NULL, DEFAULT_ADAPTIVE_RETRY,
+      DEFAULT_ADAPTIVE_TIMEOUT, TRUE, FALSE, TRUE, &err);
+#else
   download =
       gst_uri_downloader_fetch_uri (client->downloader,
       uri_string, client->mpd_uri, TRUE, FALSE, TRUE, &err);
+#endif
   g_free (uri_string);
 
   if (!download) {
@@ -1499,9 +1512,16 @@ gst_mpd_client_fetch_external_adaptation_set (GstMPDClient * client,
   gst_uri_unref (base_uri);
   gst_uri_unref (uri);
 
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+  download =
+      gst_uri_downloader_fetch_uri (client->downloader,
+      uri_string, client->mpd_uri, NULL, NULL, DEFAULT_ADAPTIVE_RETRY,
+      DEFAULT_ADAPTIVE_TIMEOUT, TRUE, FALSE, TRUE, &err);
+#else
   download =
       gst_uri_downloader_fetch_uri (client->downloader,
       uri_string, client->mpd_uri, TRUE, FALSE, TRUE, &err);
+#endif
   g_free (uri_string);
 
   if (!download) {
index f51b962..19971be 100644 (file)
@@ -67,6 +67,11 @@ typedef struct _GstMediaSegment           GstMediaSegment;
 
 #define GST_MPD_DURATION_NONE ((guint64)-1)
 
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+#define DEFAULT_ADAPTIVE_RETRY -1
+#define DEFAULT_ADAPTIVE_TIMEOUT -1
+#endif
+
 typedef enum
 {
   GST_STREAM_UNKNOWN,
index 99c2ffe..c6b2657 100644 (file)
@@ -12,8 +12,8 @@ dtls_sources = [
   'gstdtlselement.c',
 ]
 
-openssl_dep = dependency('openssl', version : '>= 1.0.1', required : get_option('dtls'))
-libcrypto_dep = dependency('libcrypto', required : get_option('dtls'))
+openssl_dep = dependency('openssl1.1', version : '>= 1.0.1', required : get_option('dtls'))
+libcrypto_dep = dependency('libcrypto1.1', required : get_option('dtls'))
 
 if openssl_dep.found() and libcrypto_dep.found()
   gstdtls = library('gstdtls',
index 8cf6c2a..ce87f14 100644 (file)
@@ -44,6 +44,9 @@
 #include <string.h>
 #include <gst/base/gsttypefindhelper.h>
 #include "gsthlselements.h"
+#ifdef TIZEN_FEATURE_HLSDEMUX_LANG_TAG
+#include <gst/tag/tag.h>
+#endif
 #include "gsthlsdemux.h"
 
 static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src_%u",
@@ -62,8 +65,32 @@ GST_DEBUG_CATEGORY (gst_hls_demux_debug);
 #define GST_M3U8_CLIENT_LOCK(l) /* FIXME */
 #define GST_M3U8_CLIENT_UNLOCK(l)       /* FIXME */
 
+#ifdef TIZEN_FEATURE_HLSDEMUX_PROPERTY
+enum
+{
+  PROP_0,
+  PROP_IS_LIVE,
+  PROP_LIVE_START_TIME,
+  PROP_LIVE_END_TIME,
+  PROP_LAST
+};
+#endif
+
+#ifdef TIZEN_FEATURE_HLSDEMUX_DISCONT
+#define ABSDIFF(a,b) ((a) < (b) ? (b) - (a) : (a) - (b))
+#endif
+
+#ifdef TIZEN_FEATURE_HLSDEMUX_DISCONT_SEQUENCE
+#define DEFAULT_FAILED_COUNT 3
+#endif
+
 /* GObject */
 static void gst_hls_demux_finalize (GObject * obj);
+#ifdef TIZEN_FEATURE_HLSDEMUX_PROPERTY
+static void
+gst_hls_demux_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+#endif
 
 /* GstElement */
 static GstStateChangeReturn
@@ -117,6 +144,12 @@ static gboolean gst_hls_demux_get_live_seek_range (GstAdaptiveDemux * demux,
 static GstM3U8 *gst_hls_demux_stream_get_m3u8 (GstHLSDemuxStream * hls_stream);
 static void gst_hls_demux_set_current_variant (GstHLSDemux * hlsdemux,
     GstHLSVariantStream * variant);
+#ifdef TIZEN_FEATURE_HLSDEMUX_LANG_TAG
+static gboolean gst_hlsdemux_set_stream_event (GstAdaptiveDemuxStream * stream,
+    GstHLSMedia * media);
+static gboolean gst_hlsdemux_set_language_tags (GstAdaptiveDemuxStream * stream,
+    const gchar * language);
+#endif
 
 #define gst_hls_demux_parent_class parent_class
 G_DEFINE_TYPE (GstHLSDemux, gst_hls_demux, GST_TYPE_ADAPTIVE_DEMUX);
@@ -149,8 +182,28 @@ gst_hls_demux_class_init (GstHLSDemuxClass * klass)
   element_class = (GstElementClass *) klass;
   adaptivedemux_class = (GstAdaptiveDemuxClass *) klass;
 
+#ifdef TIZEN_FEATURE_HLSDEMUX_PROPERTY
+  gobject_class->get_property = gst_hls_demux_get_property;
+#endif
   gobject_class->finalize = gst_hls_demux_finalize;
 
+#ifdef TIZEN_FEATURE_HLSDEMUX_PROPERTY
+  g_object_class_install_property (gobject_class, PROP_IS_LIVE,
+      g_param_spec_boolean ("is-live", "is-live", "Whether the source is live",
+          FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_LIVE_START_TIME,
+      g_param_spec_uint64 ("live-start-time",
+          "start time of the first fragment",
+          "start time of the first fragment in the current media playlist in case of live",
+          0, G_MAXUINT64, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_LIVE_END_TIME,
+      g_param_spec_uint64 ("live-end-time", "end time of the last fragment",
+          "end time of the last fragment in the current media playlist in case of live",
+          0, G_MAXUINT64, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+#endif
+
   element_class->change_state = GST_DEBUG_FUNCPTR (gst_hls_demux_change_state);
 
   gst_element_class_add_static_pad_template (element_class, &srctemplate);
@@ -199,6 +252,44 @@ gst_hls_demux_init (GstHLSDemux * demux)
   g_mutex_init (&demux->keys_lock);
 }
 
+#ifdef TIZEN_FEATURE_HLSDEMUX_PROPERTY
+static void
+gst_hls_demux_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstAdaptiveDemux *adaptivedemux = GST_ADAPTIVE_DEMUX (object);
+  GstHLSDemux *demux = GST_HLS_DEMUX (adaptivedemux);
+  GstHLSVariantStream *variant = demux->current_variant;
+  gboolean is_live = FALSE;
+
+  if (variant)
+    is_live = gst_hls_variant_stream_is_live (variant);
+
+  switch (prop_id) {
+    case PROP_IS_LIVE:
+      g_value_set_boolean (value, is_live);
+      break;
+    case PROP_LIVE_START_TIME:{
+      GstClockTime start_time = 0;
+      if (is_live)
+        start_time = variant->m3u8->first_file_start;
+      g_value_set_uint64 (value, start_time);
+      break;
+    }
+    case PROP_LIVE_END_TIME:{
+      GstClockTime end_time = 0;
+      if (is_live)
+        end_time = variant->m3u8->last_file_end;
+      g_value_set_uint64 (value, end_time);
+      break;
+    }
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+#endif
+
 static GstStateChangeReturn
 gst_hls_demux_change_state (GstElement * element, GstStateChange transition)
 {
@@ -388,7 +479,13 @@ gst_hls_demux_seek (GstAdaptiveDemux * demux, GstEvent * seek)
         &current_pos);
 
     /* FIXME: use minimum position always ? */
+#ifdef TIZEN_FEATURE_HLSDEMUX_UPDATE_SEGMENT
+    if ((final_pos > current_pos) &&
+        (GST_HLS_DEMUX_STREAM_CAST (stream)->stream_type !=
+            GST_HLS_TSREADER_NONE))
+#else
     if (final_pos > current_pos)
+#endif
       final_pos = current_pos;
   }
 
@@ -488,8 +585,13 @@ gst_hls_demux_update_manifest (GstAdaptiveDemux * demux)
 }
 
 static void
+#ifdef TIZEN_FEATURE_HLSDEMUX_LANG_TAG
+create_stream_for_playlist (GstAdaptiveDemux * demux, GstM3U8 * playlist,
+    gboolean is_primary_playlist, gboolean selected, GstHLSMedia * media)
+#else
 create_stream_for_playlist (GstAdaptiveDemux * demux, GstM3U8 * playlist,
     gboolean is_primary_playlist, gboolean selected)
+#endif
 {
   GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (demux);
   GstHLSDemuxStream *hlsdemux_stream;
@@ -517,6 +619,28 @@ create_stream_for_playlist (GstAdaptiveDemux * demux, GstM3U8 * playlist,
 
   hlsdemux_stream->do_typefind = TRUE;
   hlsdemux_stream->reset_pts = TRUE;
+#ifdef TIZEN_FEATURE_HLSDEMUX_DISCONT_SEQUENCE
+  hlsdemux_stream->failed_count = 0;
+#endif
+#ifdef TIZEN_FEATURE_HLSDEMUX_DISCONT
+  hlsdemux_stream->sequence_pos = GST_CLOCK_TIME_NONE;
+  hlsdemux_stream->last_pcr = GST_CLOCK_TIME_NONE;
+#endif
+
+#ifdef TIZEN_FEATURE_HLSDEMUX_LANG_TAG
+  if (media) {
+    gst_hlsdemux_set_stream_event (stream, media);
+    return;
+  }
+
+  for (GList * mlist =
+      hlsdemux->current_variant->media[GST_HLS_MEDIA_TYPE_AUDIO]; mlist;
+      mlist = g_list_next (mlist)) {
+    GstHLSMedia *media = mlist->data;
+    if (!media->uri && gst_hlsdemux_set_stream_event (stream, media))
+      return;
+  }
+#endif
 }
 
 static GstHLSDemuxStream *
@@ -635,7 +759,8 @@ gst_hls_demux_setup_streams (GstAdaptiveDemux * demux)
         if (!g_strcmp0 (media->uri, old_media->uri))
           GST_DEBUG_OBJECT (demux, "Identical stream !");
         if (media->mtype == GST_HLS_MEDIA_TYPE_AUDIO ||
-            media->mtype == GST_HLS_MEDIA_TYPE_VIDEO) {
+            media->mtype == GST_HLS_MEDIA_TYPE_VIDEO ||
+            media->mtype == GST_HLS_MEDIA_TYPE_SUBTITLES) {
           hlsstream =
               find_adaptive_stream_for_playlist (demux, old_media->playlist);
           if (!hlsstream)
@@ -660,8 +785,11 @@ gst_hls_demux_setup_streams (GstAdaptiveDemux * demux)
   gst_hls_demux_clear_all_pending_data (hlsdemux);
 
   /* 1 output for the main playlist */
+#ifdef TIZEN_FEATURE_HLSDEMUX_LANG_TAG
+  create_stream_for_playlist (demux, playlist->m3u8, TRUE, TRUE, NULL);
+#else
   create_stream_for_playlist (demux, playlist->m3u8, TRUE, TRUE);
-
+#endif
   for (i = 0; i < GST_HLS_N_MEDIA_TYPES; ++i) {
     GList *mlist = playlist->media[i];
     while (mlist != NULL) {
@@ -679,8 +807,12 @@ gst_hls_demux_setup_streams (GstAdaptiveDemux * demux)
           gst_hls_media_type_get_name (i), media->name, media->uri);
       create_stream_for_playlist (demux, media->playlist, FALSE,
           (media->mtype == GST_HLS_MEDIA_TYPE_VIDEO
-              || media->mtype == GST_HLS_MEDIA_TYPE_AUDIO));
-
+              || media->mtype == GST_HLS_MEDIA_TYPE_AUDIO
+#ifdef TIZEN_FEATURE_HLSDEMUX_LANG_TAG
+              || media->mtype == GST_HLS_MEDIA_TYPE_SUBTITLES), media);
+#else
+              || media->mtype == GST_HLS_MEDIA_TYPE_SUBTITLES));
+#endif
       mlist = mlist->next;
     }
   }
@@ -708,6 +840,8 @@ gst_hls_demux_set_current_variant (GstHLSDemux * hlsdemux,
   if (hlsdemux->current_variant == variant || variant == NULL)
     return;
 
+  GST_INFO_OBJECT (hlsdemux, "%s variant %d, %d x %d", variant->name,
+      variant->bandwidth, variant->width, variant->height);
   if (hlsdemux->current_variant != NULL) {
     gint i;
 
@@ -790,6 +924,22 @@ gst_hls_demux_process_manifest (GstAdaptiveDemux * demux, GstBuffer * buf)
   }
 
   /* select the initial variant stream */
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+  variant =
+      gst_hls_master_playlist_get_variant_for_bandwitdh_limit (hlsdemux->master,
+      NULL, demux->connection_speed, demux->start_bandwidth,
+      demux->min_bandwidth, demux->max_bandwidth, demux->max_width,
+      demux->max_height);
+
+  if (!variant)
+    variant = hlsdemux->master->default_variant;
+
+  if (variant) {
+    GST_INFO_OBJECT (hlsdemux, "selected %s, %d, %d x %d",
+        variant->name, variant->bandwidth, variant->width, variant->height);
+    gst_hls_demux_set_current_variant (hlsdemux, variant);
+  }
+#else
   if (demux->connection_speed == 0) {
     variant = hlsdemux->master->default_variant;
   } else {
@@ -797,11 +947,28 @@ gst_hls_demux_process_manifest (GstAdaptiveDemux * demux, GstBuffer * buf)
         gst_hls_master_playlist_get_variant_for_bitrate (hlsdemux->master,
         NULL, demux->connection_speed);
   }
-
   if (variant) {
     GST_INFO_OBJECT (hlsdemux, "selected %s", variant->name);
     gst_hls_demux_set_current_variant (hlsdemux, variant);      // FIXME: inline?
   }
+#endif
+
+#ifdef TIZEN_FEATURE_AD
+  if (variant) {
+    GST_DEBUG_OBJECT (hlsdemux, "post AD info");
+    gst_element_post_message (GST_ELEMENT_CAST (hlsdemux),
+        gst_message_new_element (GST_OBJECT_CAST (hlsdemux),
+            gst_structure_new ("adaptive-ad-info",
+                "ad-info", G_TYPE_POINTER, variant->m3u8->ad_info, NULL)));
+
+    GST_DEBUG_OBJECT (hlsdemux, "post current bandwidth info : %d",
+        variant->bandwidth);
+    gst_element_post_message (GST_ELEMENT_CAST (hlsdemux),
+        gst_message_new_element (GST_OBJECT_CAST (hlsdemux),
+            gst_structure_new (GST_ADAPTIVE_DEMUX_STATISTICS_MESSAGE_NAME,
+                "bitrate", G_TYPE_INT, variant->bandwidth, NULL)));
+  }
+#endif
 
   /* get the selected media playlist (unless the initial list was one already) */
   if (!hlsdemux->master->is_simple) {
@@ -864,10 +1031,17 @@ gst_hls_demux_get_key (GstHLSDemux * demux, const gchar * key_url,
   }
 
   GST_INFO_OBJECT (demux, "Fetching key %s", key_url);
-
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+  key_fragment =
+      gst_uri_downloader_fetch_uri (GST_ADAPTIVE_DEMUX (demux)->downloader,
+      key_url, referer, GST_ADAPTIVE_DEMUX (demux)->user_agent,
+      GST_ADAPTIVE_DEMUX (demux)->cookies, DEFAULT_ADAPTIVE_RETRY,
+      DEFAULT_ADAPTIVE_TIMEOUT, FALSE, FALSE, allow_cache, &err);
+#else
   key_fragment =
       gst_uri_downloader_fetch_uri (GST_ADAPTIVE_DEMUX (demux)->downloader,
       key_url, referer, FALSE, FALSE, allow_cache, &err);
+#endif
 
   if (key_fragment == NULL) {
     GST_WARNING_OBJECT (demux, "Failed to download key to decrypt data: %s",
@@ -994,21 +1168,44 @@ gst_hls_demux_handle_buffer (GstAdaptiveDemux * demux,
     }
 
     if (G_UNLIKELY (!caps)) {
-      /* Won't need this mapping any more all paths return inside this if() */
-      gst_buffer_unmap (buffer, &info);
-
-      /* Only fail typefinding if we already a good amount of data
-       * and we still don't know the type */
-      if (buffer_size > (2 * 1024 * 1024) || at_eos) {
-        GST_ELEMENT_ERROR (hlsdemux, STREAM, TYPE_NOT_FOUND,
-            ("Could not determine type of stream"), (NULL));
+#ifdef TIZEN_FEATURE_HLSDEMUX_EMPTY_VTT
+      if (at_eos && info.data
+          && g_strrstr ((const gchar *) info.data, "WEBVTT")) {
+        gchar *dummy =
+            g_strdup ("WEBVTT\nX-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:0");
+        GstBuffer *dummy_buffer =
+            gst_buffer_new_wrapped (dummy, strlen (dummy));
+
+        gst_buffer_unmap (buffer, &info);
         gst_buffer_unref (buffer);
-        return GST_FLOW_NOT_NEGOTIATED;
-      }
 
-      hls_stream->pending_typefind_buffer = buffer;
+        GST_WARNING_OBJECT (stream->pad,
+            "replace the empty VTT buffer with dummy");
 
-      return GST_FLOW_OK;
+        buffer = dummy_buffer;
+        gst_buffer_map (buffer, &info, GST_MAP_READ);
+
+        caps = gst_caps_new_simple ("application/x-subtitle-vtt",
+            "parsed", G_TYPE_BOOLEAN, FALSE, NULL);
+      } else
+#endif
+      {
+        /* Won't need this mapping any more all paths return inside this if() */
+        gst_buffer_unmap (buffer, &info);
+
+        /* Only fail typefinding if we already a good amount of data
+         * and we still don't know the type */
+        if (buffer_size > (2 * 1024 * 1024) || at_eos) {
+          GST_ELEMENT_ERROR (hlsdemux, STREAM, TYPE_NOT_FOUND,
+              ("Could not determine type of stream"), (NULL));
+          gst_buffer_unref (buffer);
+          return GST_FLOW_NOT_NEGOTIATED;
+        }
+
+        hls_stream->pending_typefind_buffer = buffer;
+
+        return GST_FLOW_OK;
+         }
     }
 
     GST_DEBUG_OBJECT (stream->pad,
@@ -1039,8 +1236,30 @@ gst_hls_demux_handle_buffer (GstAdaptiveDemux * demux,
     hls_stream->pending_pcr_buffer = buffer;
     return GST_FLOW_OK;
   }
+#ifdef TIZEN_FEATURE_HLSDEMUX_DISCONT
+  if (stream->first_fragment_buffer && !stream->discont
+      && GST_CLOCK_TIME_IS_VALID (hls_stream->last_pcr)
+      && GST_CLOCK_TIME_IS_VALID (last_pcr)) {
+    if (G_UNLIKELY (ABSDIFF (hls_stream->last_pcr, last_pcr) > 1 * GST_SECOND)
+        && (stream->fragment.timestamp != hls_stream->sequence_pos)) {
+      GST_DEBUG_OBJECT (stream->pad,
+          "Overwriting fragment timestamp [%" GST_TIME_FORMAT "] to [%"
+          GST_TIME_FORMAT "]", GST_TIME_ARGS (stream->fragment.timestamp),
+          GST_TIME_ARGS (hls_stream->sequence_pos));
+      stream->fragment.timestamp = hls_stream->sequence_pos;
+      stream->discont = TRUE;
+    }
+  }
+
+  if (GST_CLOCK_TIME_IS_VALID (last_pcr))
+    hls_stream->last_pcr = last_pcr;
+#endif
 
   if (tags) {
+#ifdef TIZEN_FEATURE_HLSDEMUX_LANG_TAG
+    if (stream->pending_tags)
+      gst_tag_list_insert (tags, stream->pending_tags, GST_TAG_MERGE_APPEND);
+#endif
     gst_adaptive_demux_stream_set_tags (stream, tags);
     /* run typefind again on the trimmed buffer */
     hls_stream->do_typefind = TRUE;
@@ -1251,8 +1470,19 @@ gst_hls_demux_update_fragment_info (GstAdaptiveDemuxStream * stream)
 
   if (file == NULL) {
     GST_INFO_OBJECT (hlsdemux, "This playlist doesn't contain more fragments");
+#ifdef TIZEN_FEATURE_HLSDEMUX_DISCONT_SEQUENCE
+    if (++hlsdemux_stream->failed_count > DEFAULT_FAILED_COUNT) {
+      GST_WARNING_OBJECT (hlsdemux,
+          "Reset media sequence(fail %d times to gst_m3u8_get_next_fragment)",
+          hlsdemux_stream->failed_count);
+      m3u8->sequence = 0;
+    }
+#endif
     return GST_FLOW_EOS;
   }
+#ifdef TIZEN_FEATURE_HLSDEMUX_DISCONT_SEQUENCE
+  hlsdemux_stream->failed_count = 0;
+#endif
 
   if (GST_ADAPTIVE_DEMUX_STREAM_NEED_HEADER (stream) && file->init_file) {
     GstM3U8InitFile *header_file = file->init_file;
@@ -1269,6 +1499,9 @@ gst_hls_demux_update_fragment_info (GstAdaptiveDemuxStream * stream)
   if (stream->discont)
     discont = TRUE;
 
+#ifdef TIZEN_FEATURE_HLSDEMUX_DISCONT
+  hlsdemux_stream->sequence_pos = sequence_pos;
+#endif
   /* set up our source for download */
   if (hlsdemux_stream->reset_pts || discont
       || stream->demux->segment.rate < 0.0) {
@@ -1507,10 +1740,16 @@ gst_hls_demux_update_rendition_manifest (GstHLSDemux * demux,
   gchar *uri = media->uri;
 
   main_uri = gst_adaptive_demux_get_manifest_ref_uri (adaptive_demux);
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+  download =
+      gst_uri_downloader_fetch_uri (adaptive_demux->downloader, uri, main_uri,
+      adaptive_demux->user_agent, adaptive_demux->cookies,
+      DEFAULT_ADAPTIVE_RETRY, DEFAULT_ADAPTIVE_TIMEOUT, TRUE, TRUE, TRUE, err);
+#else
   download =
       gst_uri_downloader_fetch_uri (adaptive_demux->downloader, uri, main_uri,
       TRUE, TRUE, TRUE, err);
-
+#endif
   if (download == NULL)
     return FALSE;
 
@@ -1562,9 +1801,16 @@ gst_hls_demux_update_playlist (GstHLSDemux * demux, gboolean update,
 retry:
   uri = gst_m3u8_get_uri (demux->current_variant->m3u8);
   main_uri = gst_adaptive_demux_get_manifest_ref_uri (adaptive_demux);
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+  download =
+      gst_uri_downloader_fetch_uri (adaptive_demux->downloader, uri, main_uri,
+      adaptive_demux->user_agent, adaptive_demux->cookies,
+      DEFAULT_ADAPTIVE_RETRY, DEFAULT_ADAPTIVE_TIMEOUT, TRUE, TRUE, TRUE, err);
+#else
   download =
       gst_uri_downloader_fetch_uri (adaptive_demux->downloader, uri, main_uri,
       TRUE, TRUE, TRUE, err);
+#endif
   if (download == NULL) {
     gchar *base_uri;
 
@@ -1577,9 +1823,17 @@ retry:
     GST_INFO_OBJECT (demux,
         "Updating playlist %s failed, attempt to refresh variant playlist %s",
         uri, main_uri);
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+    download =
+        gst_uri_downloader_fetch_uri (adaptive_demux->downloader, main_uri,
+        NULL, adaptive_demux->user_agent, adaptive_demux->cookies,
+        DEFAULT_ADAPTIVE_RETRY, DEFAULT_ADAPTIVE_TIMEOUT, TRUE, TRUE, TRUE,
+        err);
+#else
     download =
         gst_uri_downloader_fetch_uri (adaptive_demux->downloader,
         main_uri, NULL, TRUE, TRUE, TRUE, err);
+#endif
     if (download == NULL) {
       g_free (uri);
       return FALSE;
@@ -1744,6 +1998,14 @@ retry:
     m3u8->sequence_position = current_pos;
     GST_M3U8_CLIENT_UNLOCK (demux->client);
   }
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+  GST_DEBUG_OBJECT (demux, "post variant info message");
+  gst_element_post_message (GST_ELEMENT_CAST (demux),
+      gst_message_new_element (GST_OBJECT_CAST (demux),
+          gst_structure_new (GST_ADAPTIVE_DEMUX_VARIANT_MESSAGE_NAME,
+              "video-variant-info", G_TYPE_POINTER,
+              demux->master->variant_info, NULL)));
+#endif
 
   return TRUE;
 }
@@ -1764,10 +2026,20 @@ gst_hls_demux_change_playlist (GstHLSDemux * demux, guint max_bitrate,
 
   /* Make sure we keep a reference in case we need to switch back */
   previous_variant = gst_hls_variant_stream_ref (demux->current_variant);
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+  new_variant =
+      gst_hls_master_playlist_get_variant_for_bandwitdh_limit (demux->master,
+      demux->current_variant, max_bitrate, NULL, adaptive_demux->min_bandwidth,
+      adaptive_demux->max_bandwidth, adaptive_demux->max_width,
+      adaptive_demux->max_height);
+
+  GST_INFO_OBJECT (demux, "new_variant : %d, %d x %d",
+      new_variant->bandwidth, new_variant->width, new_variant->height);
+#else
   new_variant =
       gst_hls_master_playlist_get_variant_for_bitrate (demux->master,
       demux->current_variant, max_bitrate);
-
+#endif
   GST_M3U8_CLIENT_LOCK (demux->client);
 
 retry_failover_protection:
@@ -2071,3 +2343,60 @@ gst_hls_demux_get_live_seek_range (GstAdaptiveDemux * demux, gint64 * start,
 
   return ret;
 }
+
+#ifdef TIZEN_FEATURE_HLSDEMUX_LANG_TAG
+static gboolean
+gst_hlsdemux_set_stream_event (GstAdaptiveDemuxStream * stream,
+    GstHLSMedia * media)
+{
+  GstStructure *structure;
+  GstEvent *event;
+
+  if (!stream) {
+    GST_WARNING ("stream is NULL");
+    return FALSE;
+  }
+
+  if (!media) {
+    GST_WARNING ("media is NULL");
+    return FALSE;
+  }
+
+  if (media->lang)
+    gst_hlsdemux_set_language_tags (stream, media->lang);
+
+  structure =
+      gst_structure_new ("GstHLSMedia", "mtype", G_TYPE_INT, media->mtype,
+      "default", G_TYPE_BOOLEAN, media->is_default, "autoselect",
+      G_TYPE_BOOLEAN, media->autoselect, "forced", G_TYPE_BOOLEAN,
+      media->forced, NULL);
+
+  event = gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM, structure);
+
+  gst_adaptive_demux_stream_queue_event (stream, event);
+
+  return TRUE;
+}
+
+static gboolean
+gst_hlsdemux_set_language_tags (GstAdaptiveDemuxStream * stream,
+    const gchar * language)
+{
+  GstTagList *lang_tag = NULL;
+
+  if (!stream)
+    return FALSE;
+
+  if (gst_tag_check_language_code (language))
+    lang_tag = gst_tag_list_new (GST_TAG_LANGUAGE_CODE, language, NULL);
+  else
+    lang_tag = gst_tag_list_new (GST_TAG_LANGUAGE_NAME, language, NULL);
+
+  if (!lang_tag)
+    return FALSE;
+
+  gst_adaptive_demux_stream_set_tags (stream, lang_tag);
+
+  return TRUE;
+}
+#endif
index 98d6099..16bcaf3 100644 (file)
@@ -97,6 +97,10 @@ struct _GstHLSDemuxStream
                                           We only know that it is the last at EOS */
   guint64 current_offset;              /* offset we're currently at */
   gboolean reset_pts;
+#ifdef TIZEN_FEATURE_HLSDEMUX_DISCONT
+  GstClockTime sequence_pos;
+  GstClockTime last_pcr;
+#endif
 
   /* decryption tooling */
 #if defined(HAVE_OPENSSL)
@@ -118,7 +122,9 @@ struct _GstHLSDemuxStream
    * the stream so we can set timestamps/segments
    * and switch cleanly */
   GstBuffer *pending_pcr_buffer;
-
+#ifdef TIZEN_FEATURE_HLSDEMUX_DISCONT_SEQUENCE
+  gint failed_count;
+#endif
   GstHLSTSReader tsreader;
 };
 
index d20e352..892d1b6 100644 (file)
  * Boston, MA 02110-1301, USA.
  */
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #include <stdlib.h>
 #include <math.h>
 #include <errno.h>
 #include "gsthlselements.h"
 
 #define GST_CAT_DEFAULT hls_debug
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+#define DEFAULT_RESOLUTION_LIMIT -1
+#define DEFAULT_BANDWIDTH_LIMIT -1
+#endif
 
 static GstM3U8MediaFile *gst_m3u8_media_file_new (gchar * uri,
     gchar * title, GstClockTime duration, guint sequence);
@@ -49,6 +57,9 @@ gst_m3u8_new (void)
   m3u8->sequence_position = 0;
   m3u8->highest_sequence_number = -1;
   m3u8->duration = GST_CLOCK_TIME_NONE;
+#ifdef TIZEN_FEATURE_AD
+  m3u8->ad_info = g_new0 (GstM3U8AdInfo, 1);
+#endif
 
   g_mutex_init (&m3u8->lock);
   m3u8->ref_count = 1;
@@ -86,6 +97,28 @@ gst_m3u8_set_uri (GstM3U8 * m3u8, const gchar * uri, const gchar * base_uri,
   GST_M3U8_UNLOCK (m3u8);
 }
 
+#ifdef TIZEN_FEATURE_AD
+static GstM3U8Cue *
+gst_m3u8_cue_info_new (GstClockTime start_time, GstClockTime duration)
+{
+  GstM3U8Cue *ad;
+
+  ad = g_new0 (GstM3U8Cue, 1);
+  ad->start_time = start_time;
+  ad->end_time = 0;
+  ad->duration = duration;
+
+  return ad;
+}
+
+void
+gst_m3u8_cue_cont_free (GstM3U8CueOutCont * self)
+{
+  g_return_if_fail (self != NULL);
+  g_free (self->cont_data);
+}
+#endif
+
 GstM3U8 *
 gst_m3u8_ref (GstM3U8 * m3u8)
 {
@@ -108,6 +141,14 @@ gst_m3u8_unref (GstM3U8 * self)
     g_list_foreach (self->files, (GFunc) gst_m3u8_media_file_unref, NULL);
     g_list_free (self->files);
 
+#ifdef TIZEN_FEATURE_AD
+    if (self->ad_info) {
+      g_list_free (self->ad_info->cue);
+      g_list_free_full(self->ad_info->cue_cont, (GDestroyNotify) gst_m3u8_cue_cont_free);
+      g_free (self->ad_info);
+    }
+#endif
+
     g_free (self->last_data);
     g_mutex_clear (&self->lock);
     g_free (self);
@@ -494,6 +535,9 @@ gst_m3u8_update (GstM3U8 * self, gchar * data)
   GList *previous_files = NULL;
   gboolean have_mediasequence = FALSE;
   GstM3U8InitFile *last_init_file = NULL;
+#ifdef TIZEN_FEATURE_AD
+  GstClockTime timestamp = 0;
+#endif
 
   g_return_val_if_fail (self != NULL, FALSE);
   g_return_val_if_fail (data != NULL, FALSE);
@@ -594,6 +638,9 @@ gst_m3u8_update (GstM3U8 * self, gchar * data)
         if (last_init_file)
           file->init_file = gst_m3u8_init_file_ref (last_init_file);
 
+#ifdef TIZEN_FEATURE_AD
+        timestamp += duration;
+#endif
         duration = 0;
         title = NULL;
         discontinuity = FALSE;
@@ -751,7 +798,68 @@ gst_m3u8_update (GstM3U8 * self, gchar * data)
 
           last_init_file = init_file;
         }
-      } else {
+      }
+#ifdef TIZEN_FEATURE_AD
+      else if (g_str_has_prefix (data_ext_x, "CUE-OUT:")) {
+        GstM3U8Cue *cue;
+        gdouble fval;
+
+        GST_LOG ("cue out: %" GST_TIME_FORMAT ", %s", GST_TIME_ARGS (timestamp), data);
+
+        data = data + strlen ("#EXT-X-CUE-OUT:");
+        if (g_str_has_prefix (data, "DURATION="))
+          data = data + strlen ("DURATION=");
+
+        if (!double_from_string (data, &data, &fval)) {
+          GST_WARNING ("Can't read CUE-OUT duration");
+          goto next_line;
+        }
+
+        duration = fval * (gdouble) GST_SECOND;
+
+        cue = gst_m3u8_cue_info_new (timestamp, duration);
+        GST_LOG ("cue out start %" GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT
+                      , GST_TIME_ARGS (cue->start_time), GST_TIME_ARGS (cue->duration));
+        self->ad_info->cue = g_list_append (self->ad_info->cue, cue);
+        duration = 0;
+      } else if (g_str_has_prefix (data_ext_x, "CUE-IN")) {
+        GList *cue;
+        GstM3U8Cue *cue_data;
+
+        GST_LOG ("cue in: %" GST_TIME_FORMAT ", %s", GST_TIME_ARGS (timestamp), data);
+
+        cue = g_list_last (self->ad_info->cue);
+        if (!cue || !(cue->data)) {
+          GST_WARNING ("there is no valid data");
+          goto next_line;
+        }
+
+        cue_data = cue->data;
+        GST_LOG ("start %" GST_TIME_FORMAT ", dur %" GST_TIME_FORMAT,
+                GST_TIME_ARGS (cue_data->start_time), GST_TIME_ARGS (cue_data->duration));
+
+        if (cue_data->end_time != 0) {
+          GST_WARNING ("cue syntax err, skip this tag.");
+          goto next_line;
+        }
+
+        cue_data->end_time = timestamp;
+
+        GST_LOG ("cue start %" GST_TIME_FORMAT ", end %" GST_TIME_FORMAT " dur %" GST_TIME_FORMAT,
+                 GST_TIME_ARGS (cue_data->start_time), GST_TIME_ARGS (cue_data->end_time),
+                 GST_TIME_ARGS (cue_data->duration));
+      } else if (g_str_has_prefix (data_ext_x, "CUE-OUT-CONT:")) {
+        GstM3U8CueOutCont *cont = g_new0 (GstM3U8CueOutCont, 1);
+
+        GST_LOG ("cue cont: %" GST_TIME_FORMAT ", %s", GST_TIME_ARGS (timestamp), data);
+
+        data = data + strlen ("#EXT-X-CUE-OUT-CONT:");
+        cont->timestamp = timestamp;
+        cont->cont_data = g_strdup (data);
+        self->ad_info->cue_cont = g_list_append (self->ad_info->cue_cont, cont);
+      }
+#endif
+      else {
         GST_LOG ("Ignored line: %s", data);
       }
     } else {
@@ -1084,7 +1192,7 @@ gst_m3u8_advance_fragment (GstM3U8 * m3u8, gboolean forward)
     }
   }
   if (m3u8->current_file) {
-    /* Store duration of the fragment we're using to update the position 
+    /* Store duration of the fragment we're using to update the position
      * the next time we advance */
     m3u8->current_file_duration =
         GST_M3U8_MEDIA_FILE (m3u8->current_file->data)->duration;
@@ -1377,14 +1485,18 @@ gst_m3u8_parse_media (gchar * desc, const gchar * base_uri)
   if (media->mtype == GST_HLS_MEDIA_TYPE_INVALID)
     goto required_attributes_missing;
 
+#ifndef TIZEN_FEATURE_HLSDEMUX_LANG_TAG
   if (media->uri == NULL)
     goto existing_stream;
+#endif
 
   if (media->group_id == NULL || media->name == NULL)
     goto required_attributes_missing;
 
+#ifndef TIZEN_FEATURE_HLSDEMUX_LANG_TAG
   if (media->mtype == GST_HLS_MEDIA_TYPE_CLOSED_CAPTIONS)
     goto uri_with_cc;
+#endif
 
   GST_DEBUG ("media: %s, group '%s', name '%s', uri '%s', %s %s %s, lang=%s",
       GST_HLS_MEDIA_TYPE_NAME (media->mtype), media->group_id, media->name,
@@ -1394,22 +1506,26 @@ gst_m3u8_parse_media (gchar * desc, const gchar * base_uri)
 
   return media;
 
+#ifndef TIZEN_FEATURE_HLSDEMUX_LANG_TAG
 uri_with_cc:
   {
     GST_WARNING ("closed captions EXT-X-MEDIA should not have URI specified");
     goto out_error;
   }
+#endif
 required_attributes_missing:
   {
     GST_WARNING ("EXT-X-MEDIA description is missing required attributes");
     goto out_error;
     /* fall through */
   }
+#ifndef TIZEN_FEATURE_HLSDEMUX_LANG_TAG
 existing_stream:
   {
     GST_DEBUG ("EXT-X-MEDIA without URI, describes embedded stream, skipping");
     /* fall through */
   }
+#endif
 
 out_error:
   {
@@ -1498,6 +1614,9 @@ gst_hls_master_playlist_unref (GstHLSMasterPlaylist * playlist)
         (GDestroyNotify) gst_hls_variant_stream_unref);
     g_list_free_full (playlist->iframe_variants,
         (GDestroyNotify) gst_hls_variant_stream_unref);
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+    g_list_free_full (playlist->variant_info, g_free);
+#endif
     if (playlist->default_variant)
       gst_hls_variant_stream_unref (playlist->default_variant);
     g_free (playlist->last_data);
@@ -1806,6 +1925,23 @@ gst_hls_master_playlist_new_from_data (gchar * data, const gchar * base_uri)
       g_list_length (playlist->variants),
       g_list_length (playlist->iframe_variants));
 
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+    GList *v = (playlist->iframe_variants)?(playlist->iframe_variants):(playlist->variants);
+
+    /* update variant stream info */
+    for (; v != NULL; v = v->next) {
+      GstHLSVariantStream *data = v->data;
+      GstM3U8VideoVariantInfo *var_info = g_new0 (GstM3U8VideoVariantInfo, 1);
+
+      GST_LOG ("variant info %d, %d x %d", data->bandwidth, data->width,
+          data->height);
+      var_info->bandwidth = data->bandwidth;
+      var_info->width = data->width;
+      var_info->height = data->height;
+
+      playlist->variant_info = g_list_append (playlist->variant_info, var_info);
+    }
+#endif
 
   return playlist;
 }
@@ -1845,6 +1981,246 @@ gst_hls_variant_find_matching_media (GstHLSVariantStream * stream,
   return match->data;
 }
 
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+static guint
+get_num_of_codec(GstHLSVariantStream * variant)
+{
+#define MAX_NUM_OF_CODEC 10
+
+  guint cnt = 0;
+  gchar** codec_list = NULL;
+
+  if (!variant || !variant->codecs)
+    return 0;
+
+  codec_list = g_strsplit (variant->codecs, ",", MAX_NUM_OF_CODEC);
+  if (codec_list) {
+    cnt = g_strv_length (codec_list);
+    g_strfreev (codec_list);
+  }
+
+  return cnt;
+}
+
+static gboolean
+check_num_of_codec(GstHLSVariantStream * variant, guint req_num)
+{
+  guint num_of_codec = 0;
+
+  if (!variant)
+    return FALSE;
+
+  num_of_codec = get_num_of_codec (variant);
+
+  if (num_of_codec > 0 && req_num > 0 && num_of_codec != req_num) {
+    GST_WARNING ("can not support to change codec");
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
+static gint
+update_max_limit(gint min_limit, gint max_limit, gint start_limit, gint bitrate)
+{
+  if (start_limit > DEFAULT_BANDWIDTH_LIMIT && start_limit >= min_limit &&
+      (start_limit <= max_limit || max_limit == DEFAULT_BANDWIDTH_LIMIT)) {
+    GST_DEBUG ("set max to start : %d ", start_limit);
+    return start_limit;
+  }
+
+  if (bitrate > 0 && bitrate >= min_limit &&
+      (bitrate <= max_limit || max_limit == DEFAULT_BANDWIDTH_LIMIT)) {
+    GST_DEBUG ("set max to bitrate : %d ", bitrate);
+    return bitrate;
+  }
+
+  if (bitrate == 0 || bitrate < min_limit) {
+    GST_DEBUG ("set max to min : %d", min_limit);
+    return min_limit;
+  }
+
+  return max_limit;
+}
+
+GstHLSVariantStream *
+get_average_variant(GList *variants, guint num_of_codec, gint min_limit, gint max_limit)
+{
+  GList *l = NULL;
+  GList *valid_list = NULL;
+  gint cnt = 0;
+  guint num_of_valid_variant = 0;
+  GstHLSVariantStream *tmp = NULL;
+
+  for (l = g_list_first (variants); l; l = g_list_next (l)) {
+    if (!check_num_of_codec ((GstHLSVariantStream *)l->data, num_of_codec))
+      continue;
+
+    tmp = l->data;
+
+    if (max_limit != DEFAULT_BANDWIDTH_LIMIT && tmp->bandwidth > max_limit) {
+      GST_DEBUG ("over max limit");
+      break;
+    }
+
+    if (min_limit != DEFAULT_BANDWIDTH_LIMIT && tmp->bandwidth < min_limit) {
+      GST_DEBUG ("skip to next");
+      continue;
+    }
+
+    num_of_valid_variant++;
+    valid_list = l;
+  }
+
+  GST_DEBUG ("num of valid variant %d / %d", num_of_valid_variant, g_list_length (variants));
+
+  for (; valid_list; valid_list = g_list_previous (valid_list)) {
+    if (!check_num_of_codec ((GstHLSVariantStream *)valid_list->data, num_of_codec))
+      continue;
+
+    tmp = valid_list->data;
+    if (num_of_valid_variant/2 == cnt) {
+      GST_DEBUG ("get this stream %d", tmp->bandwidth);
+      return tmp;
+    }
+    cnt++;
+  }
+  return NULL;
+}
+
+GstHLSVariantStream *
+gst_hls_master_playlist_get_variant_for_bandwitdh_limit (GstHLSMasterPlaylist * playlist,
+  GstHLSVariantStream * current_variant, guint bitrate, gchar * start_bandwidth,
+  gint min_bandwidth, gint max_bandwidth, gint width, gint height)
+{
+  GstHLSVariantStream *tmp = current_variant;
+  GstHLSVariantStream *variant = NULL;
+  GstHLSVariantStream *min_variant = NULL; // lowest
+  GstHLSVariantStream *max_variant = NULL; // highest
+  GList *variants = NULL;
+  GList *l = NULL;
+  gint max_limit = DEFAULT_BANDWIDTH_LIMIT;
+  gint min_limit = DEFAULT_BANDWIDTH_LIMIT;
+  gint start_limit = DEFAULT_BANDWIDTH_LIMIT;
+  gint adj_max_limit = DEFAULT_BANDWIDTH_LIMIT;
+  guint num_of_valid_variant = 0;
+  guint num_of_codec = 0;
+
+  num_of_codec = get_num_of_codec (current_variant);
+
+  GST_DEBUG ("bitrate: %u, bandwidth: %s, %d ~ %d, resolution: %d X %d",
+      bitrate, start_bandwidth, min_bandwidth, max_bandwidth, width, height);
+
+  /* get variant list */
+  if (current_variant == NULL || !current_variant->iframe)
+    variants = playlist->variants;
+  else
+    variants = playlist->iframe_variants;
+
+  if (!variants) {
+    GST_ERROR ("invalid playlist");
+    return current_variant;
+  }
+
+  /* get valid min/max variant */
+  for (l = g_list_first (variants); l; l = g_list_next (l)) {
+    if (!check_num_of_codec ((GstHLSVariantStream *)l->data, num_of_codec))
+      continue;
+    tmp = l->data;
+    num_of_valid_variant++;
+
+    if (!min_variant) {
+      min_variant = tmp;
+    }
+  }
+  max_variant = tmp;
+
+  GST_DEBUG("num of valid variant %d / %d", num_of_valid_variant, g_list_length (variants));
+  if (num_of_valid_variant <= 1)
+    return tmp;
+
+  /* get valid range limit */
+  if (max_bandwidth == DEFAULT_BANDWIDTH_LIMIT || min_bandwidth <= max_bandwidth) {
+    if (min_variant->bandwidth <= max_bandwidth)
+      max_limit = adj_max_limit = max_bandwidth;
+
+    if (max_variant->bandwidth >= min_bandwidth)
+      min_limit = min_bandwidth;
+  }
+
+  GST_DEBUG ("range limit: %d ~ %d", min_limit, max_limit);
+
+  if (start_bandwidth) {
+    if (!g_strcmp0 (start_bandwidth, "LOWEST")) {
+      if (min_limit == DEFAULT_BANDWIDTH_LIMIT)
+        return min_variant;
+      adj_max_limit = min_limit;
+    } else if (!g_strcmp0 (start_bandwidth, "HIGHEST")) {
+      if (max_limit == DEFAULT_BANDWIDTH_LIMIT)
+        return max_variant;
+    } else if (!g_strcmp0 (start_bandwidth, "AVERAGE")) {
+      variant = get_average_variant (variants, num_of_codec, min_limit, max_limit);
+      if (variant)
+        return variant;
+    } else {
+      start_limit = atoi (start_bandwidth);
+      /* update max limit based on the start_bandwidth or network bitrate */
+      adj_max_limit = update_max_limit (min_limit, max_limit, start_limit, bitrate);
+    }
+  } else {
+    /* update max limit based on the network bitrate */
+    adj_max_limit = update_max_limit (min_limit, max_limit, DEFAULT_BANDWIDTH_LIMIT, bitrate);
+  }
+
+  if (min_limit < 0 && adj_max_limit < 0 && width < 0 && height < 0) {
+    GST_WARNING ("invalid condition, get default variant");
+    return NULL;
+  }
+
+  GST_DEBUG ("adj range limit: %d ~ %d (origin: %d)", min_limit, adj_max_limit, max_limit);
+
+  /* variant lists are sorted low to high, so iterate from highest to lowest */
+  tmp = NULL;
+  for (l = g_list_last (variants); l; l = g_list_previous (l)) {
+    if (!check_num_of_codec ((GstHLSVariantStream *)l->data, num_of_codec))
+      continue;
+
+    tmp = l->data;
+    GST_DEBUG ("stream info: %d, %d x %d", tmp->bandwidth, tmp->width, tmp->height);
+
+    if (tmp->bandwidth < min_limit) {
+      GList *j = g_list_next(l);
+      if (variant)
+        break;
+
+      if (j &&
+          ((max_limit == DEFAULT_BANDWIDTH_LIMIT) ||
+           ((GstHLSVariantStream*)j->data)->bandwidth <= max_limit))
+        variant = j->data; /* get the lowest one in the valid range */
+      else
+        variant = tmp;
+      break;
+    }
+
+    if (adj_max_limit > DEFAULT_BANDWIDTH_LIMIT && adj_max_limit < tmp->bandwidth)
+      continue;
+
+    if (((width > DEFAULT_RESOLUTION_LIMIT) && (tmp->width > width)) ||
+        ((height > DEFAULT_RESOLUTION_LIMIT) && (tmp->height > height))) {
+      if (adj_max_limit > DEFAULT_BANDWIDTH_LIMIT && !variant) { /* will be kept with the first one with the same bitrate */
+        variant = tmp;
+      }
+    } else {
+      variant = tmp;
+      GST_DEBUG ("get this stream %d", variant->bandwidth);
+      break;
+    }
+  }
+
+  return (variant)?(variant):(tmp);
+}
+
+#else
 GstHLSVariantStream *
 gst_hls_master_playlist_get_variant_for_bitrate (GstHLSMasterPlaylist *
     playlist, GstHLSVariantStream * current_variant, guint bitrate)
@@ -1867,6 +2243,7 @@ gst_hls_master_playlist_get_variant_for_bitrate (GstHLSMasterPlaylist *
 
   return variant;
 }
+#endif
 
 GstHLSVariantStream *
 gst_hls_master_playlist_get_matching_variant (GstHLSMasterPlaylist * playlist,
index aa51136..ed9d1ee 100644 (file)
@@ -35,6 +35,11 @@ typedef struct _GstHLSMedia GstHLSMedia;
 typedef struct _GstM3U8Client GstM3U8Client;
 typedef struct _GstHLSVariantStream GstHLSVariantStream;
 typedef struct _GstHLSMasterPlaylist GstHLSMasterPlaylist;
+#ifdef TIZEN_FEATURE_AD
+typedef struct _GstM3U8AdInfo GstM3U8AdInfo;
+typedef struct _GstM3U8Cue GstM3U8Cue;
+typedef struct _GstM3U8CueOutCont GstM3U8CueOutCont;
+#endif
 
 #define GST_M3U8(m) ((GstM3U8*)m)
 #define GST_M3U8_MEDIA_FILE(f) ((GstM3U8MediaFile*)f)
@@ -65,6 +70,9 @@ struct _GstM3U8
   gboolean allowcache;          /* last EXT-X-ALLOWCACHE */
 
   GList *files;
+#ifdef TIZEN_FEATURE_AD
+  GstM3U8AdInfo *ad_info;
+#endif
 
   /* state */
   GList *current_file;
@@ -110,6 +118,29 @@ struct _GstM3U8InitFile
   guint ref_count;      /* ATOMIC */
 };
 
+#ifdef TIZEN_FEATURE_AD
+
+struct _GstM3U8Cue
+{
+  GstClockTime start_time;      /* EXT-X-CUE-OUT */
+  GstClockTime end_time;        /* EXT-X-CUE-IN */
+  GstClockTime duration;        /* from EXT-X-CUE-OUT */
+};
+
+struct _GstM3U8CueOutCont
+{
+  GstClockTime timestamp;
+  gchar *cont_data;             /* EXT-X-CUE-OUT-CONT */
+};
+
+struct _GstM3U8AdInfo
+{
+  GList *cue;                   /* GstM3U8Cue */
+  GList *cue_cont;              /* GstM3U8CueOutCont */
+};
+
+#endif
+
 GstM3U8MediaFile * gst_m3u8_media_file_ref   (GstM3U8MediaFile * mfile);
 
 void               gst_m3u8_media_file_unref (GstM3U8MediaFile * mfile);
@@ -199,6 +230,15 @@ struct _GstHLSVariantStream {
   GList *media[GST_HLS_N_MEDIA_TYPES];
 };
 
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+typedef struct
+{
+  gint bandwidth;
+  gint width;
+  gint height;
+} GstM3U8VideoVariantInfo;
+#endif
+
 GstHLSVariantStream * gst_hls_variant_stream_ref (GstHLSVariantStream * stream);
 
 void                  gst_hls_variant_stream_unref (GstHLSVariantStream * stream);
@@ -214,7 +254,9 @@ struct _GstHLSMasterPlaylist
   /* Available variant streams, sorted by bitrate (low -> high) */
   GList    *variants;
   GList    *iframe_variants;
-
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+  GList    *variant_info;                /* stream variant info */
+#endif
   GstHLSVariantStream *default_variant;  /* first in the list */
 
   gint      version;                     /* EXT-X-VERSION */
@@ -231,10 +273,16 @@ struct _GstHLSMasterPlaylist
 
 GstHLSMasterPlaylist * gst_hls_master_playlist_new_from_data (gchar       * data,
                                                               const gchar * base_uri);
-
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+GstHLSVariantStream *  gst_hls_master_playlist_get_variant_for_bandwitdh_limit (GstHLSMasterPlaylist * playlist,
+                                                                          GstHLSVariantStream * current_variant,
+                                                                          guint bitrate, gchar * start_bandwidth, gint min_bandwidth,
+                                                                          gint max_bandwidth, gint width, gint height);
+#else
 GstHLSVariantStream *  gst_hls_master_playlist_get_variant_for_bitrate (GstHLSMasterPlaylist * playlist,
                                                                         GstHLSVariantStream  * current_variant,
                                                                         guint                  bitrate);
+#endif
 GstHLSVariantStream *  gst_hls_master_playlist_get_matching_variant (GstHLSMasterPlaylist * playlist,
                                                                      GstHLSVariantStream  * current_variant);
 
index 3444d37..10ecc01 100644 (file)
@@ -35,8 +35,8 @@ if not hls_crypto_dep.found() and ['auto', 'libgcrypt'].contains(hls_crypto)
   endif
 endif
 
-if not hls_crypto_dep.found() and ['auto', 'openssl'].contains(hls_crypto)
-  hls_crypto_dep = dependency('openssl', required : false)
+if not hls_crypto_dep.found() and ['auto', 'openssl1.1'].contains(hls_crypto)
+  hls_crypto_dep = dependency('openssl1.1', required : false)
   if hls_crypto_dep.found()
     hls_cargs += ['-DHAVE_OPENSSL']
   endif
index aabb4e5..93854ed 100644 (file)
@@ -183,6 +183,7 @@ gst_kate_dec_class_init (GstKateDecClass * klass)
 static void
 gst_kate_dec_init (GstKateDec * dec)
 {
+  GstCaps *tmp = NULL;
   GST_DEBUG_OBJECT (dec, "gst_kate_dec_init");
 
   dec->sinkpad = gst_pad_new_from_static_template (&sink_factory, "sink");
@@ -194,7 +195,7 @@ gst_kate_dec_init (GstKateDec * dec)
       GST_DEBUG_FUNCPTR (gst_kate_dec_sink_event));
   gst_pad_use_fixed_caps (dec->sinkpad);
   gst_pad_set_caps (dec->sinkpad,
-      gst_static_pad_template_get_caps (&sink_factory));
+      tmp = gst_static_pad_template_get_caps (&sink_factory));
   gst_element_add_pad (GST_ELEMENT (dec), dec->sinkpad);
 
   dec->srcpad = gst_pad_new_from_static_template (&src_factory, "src");
@@ -204,6 +205,7 @@ gst_kate_dec_init (GstKateDec * dec)
 
   gst_kate_util_decode_base_init (&dec->decoder, TRUE);
 
+  gst_caps_unref(tmp);
   dec->src_caps = NULL;
   dec->output_format = GST_KATE_FORMAT_UNDEFINED;
   dec->remove_markup = FALSE;
index cf7a08e..87e023e 100644 (file)
@@ -395,8 +395,10 @@ gst_musepack_stream_init (GstMusepackDec * musepackdec)
   gst_pad_use_fixed_caps (musepackdec->srcpad);
   if (!gst_pad_set_caps (musepackdec->srcpad, caps)) {
     GST_ELEMENT_ERROR (musepackdec, CORE, NEGOTIATION, (NULL), (NULL));
+    gst_caps_unref (caps);
     return FALSE;
   }
+  gst_caps_unref (caps);
 
   g_atomic_int_set (&musepackdec->bps, 4 * i.channels);
   g_atomic_int_set (&musepackdec->rate, i.sample_freq);
index 871e671..027aca4 100644 (file)
@@ -64,6 +64,10 @@ GST_DEBUG_CATEGORY_EXTERN (openal_debug);
 #include "gstopenalelements.h"
 #include "gstopenalsink.h"
 
+#ifdef TIZEN_FEATURE_OALSINK_MODIFICATION
+#include <math.h>
+#endif /* TIZEN_FEATURE_OALSINK_MODIFICATION */
+
 static void gst_openal_sink_dispose (GObject * object);
 static void gst_openal_sink_finalize (GObject * object);
 
@@ -83,6 +87,17 @@ static gint gst_openal_sink_write (GstAudioSink * audiosink, gpointer data,
 static guint gst_openal_sink_delay (GstAudioSink * audiosink);
 static void gst_openal_sink_reset (GstAudioSink * audiosink);
 
+#ifdef TIZEN_FEATURE_OALSINK_MODIFICATION
+void set_angles (GstElement * element, float absolute_angle_x,
+    float absolute_angle_y, float absolute_angle_z);
+void apply_rotation (GstElement * element, float rotation_x, float rotation_y,
+    float rotation_z);
+static gboolean gst_openal_sink_src_event (GstElement * element,
+    GstEvent * event);
+
+gfloat source_rotation_y_old = 0;
+#endif /* TIZEN_FEATURE_OALSINK_MODIFICATION */
+
 #define OPENAL_DEFAULT_DEVICE NULL
 
 #define OPENAL_MIN_RATE 8000
@@ -97,9 +112,56 @@ enum
 
   PROP_USER_DEVICE,
   PROP_USER_CONTEXT,
+#ifndef TIZEN_FEATURE_OALSINK_MODIFICATION
   PROP_USER_SOURCE
+#else
+  PROP_USER_SOURCE,
+
+  PROP_USE_STREAM_INFO,
+  PROP_STREAM_INFO,
+
+  PROP_SOURCE_ORIENTATION_X_AXIS,
+  PROP_SOURCE_ORIENTATION_Y_AXIS,
+  PROP_SOURCE_ORIENTATION_Z_AXIS,
+
+  PROP_SOURCE_AMBISONIC_TYPE
+#endif /* TIZEN_FEATURE_OALSINK_MODIFICATION */
 };
 
+#ifdef TIZEN_FEATURE_OALSINK_MODIFICATION
+/* Register GTtypes for custom enums */
+#define GST_TYPE_AMBISONICS_TYPE (gst_openalsink_ambisonicstype_get_type ())
+
+static GType
+gst_openalsink_ambisonicstype_get_type (void)
+{
+  static GType ambisonics_type = 0;
+
+  if (!ambisonics_type) {
+    static GEnumValue ambisonics_types[] = {
+      { AMBISONICS_TYPE_UNKNOWN, "Ambisonics type is not determined", "unknown" },
+      { AMBISONICS_TYPE_PERIPHONIC, "Periphonic ambisonics", "periphonic" },
+      { AMBISONICS_TYPE_NON_PERIPHONIC, "Non-periphonic ambisonics", "non-periphonic" },
+      { 0, NULL, NULL },
+    };
+
+    ambisonics_type =
+      g_enum_register_static ("GstOpenalsinkAmbisonicsType", ambisonics_types);
+  }
+
+  return ambisonics_type;
+}
+
+enum
+{
+  /* action signals */
+  ROTATE,
+  /* emit signals */
+  LAST_SIGNAL
+};
+static guint openalsink_signals[LAST_SIGNAL];
+#endif /* TIZEN_FEATURE_OALSINK_MODIFICATION */
+
 static GstStaticPadTemplate openalsink_factory =
     GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK,
@@ -111,15 +173,7 @@ static GstStaticPadTemplate openalsink_factory =
         "audio/x-raw, " "format = (string) " GST_AUDIO_NE (S16) ", "
         "rate = (int) [ 1, MAX ], " "channels = (int) [ 1, MAX ]; "
         "audio/x-raw, " "format = (string) " G_STRINGIFY (U8) ", "
-        "rate = (int) [ 1, MAX ], " "channels = (int) [ 1, MAX ]; "
-        /* These caps do not work on my card */
-        // "audio/x-adpcm, " "layout = (string) ima, "
-        // "rate = (int) [ 1, MAX ], " "channels = (int) [ 1, 2 ]; "
-        // "audio/x-alaw, " "rate = (int) [ 1, MAX ], "
-        // "channels = (int) [ 1, 2 ]; "
-        // "audio/x-mulaw, " "rate = (int) [ 1, MAX ], "
-        // "channels = (int) [ 1, MAX ]"
-    )
+        "rate = (int) [ 1, MAX ], " "channels = (int) [ 1, MAX ]; ")
     );
 
 static PFNALCSETTHREADCONTEXTPROC palcSetThreadContext;
@@ -188,6 +242,12 @@ gst_openal_sink_class_init (GstOpenALSinkClass * klass)
     palcGetThreadContext = alcGetProcAddress (NULL, "alcGetThreadContext");
   }
 
+#ifdef TIZEN_FEATURE_OALSINK_MODIFICATION
+  klass->rotate = set_angles;
+
+  gstelement_class->send_event = GST_DEBUG_FUNCPTR (gst_openal_sink_src_event);
+#endif /* TIZEN_FEATURE_OALSINK_MODIFICATION */
+
   gobject_class->dispose = GST_DEBUG_FUNCPTR (gst_openal_sink_dispose);
   gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_openal_sink_finalize);
   gobject_class->set_property =
@@ -228,6 +288,44 @@ gst_openal_sink_class_init (GstOpenALSinkClass * klass)
       g_param_spec_uint ("user-source", "ALsource", "User source", 0, UINT_MAX,
           0, G_PARAM_READWRITE));
 
+#ifdef TIZEN_FEATURE_OALSINK_MODIFICATION
+  g_object_class_install_property (gobject_class, PROP_USE_STREAM_INFO,
+      g_param_spec_uint ("use-stream-info", "UseTizenAudioStreamInfo",
+          "Option to use stream info (0 | 1)", 0, 1, 0, G_PARAM_READWRITE));
+
+  g_object_class_install_property (gobject_class, PROP_STREAM_INFO,
+      g_param_spec_pointer ("stream-info", "TizenAudioStreamInfo", "Stream info",
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_SOURCE_AMBISONIC_TYPE,
+      g_param_spec_enum ("source-ambisonics-type", "ALsourceAmbisonicType",
+          "Type of Ambisonics (Unknown | Periphonic | Non-periphonic)",
+          GST_TYPE_AMBISONICS_TYPE, AMBISONICS_TYPE_UNKNOWN,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_SOURCE_ORIENTATION_X_AXIS,
+      g_param_spec_int ("source-orientation-x", "ALSourceOrientationX",
+          "Source orientation (rotation angle) against X axis, deg.", -90, 90,
+          0, G_PARAM_READWRITE));
+
+  g_object_class_install_property (gobject_class, PROP_SOURCE_ORIENTATION_Y_AXIS,
+      g_param_spec_int ("source-orientation-y", "ALSourceOrientationY",
+          "Source orientation (rotation angle) against Y axis, deg.", -180, 180,
+          0, G_PARAM_READWRITE));
+
+  g_object_class_install_property (gobject_class, PROP_SOURCE_ORIENTATION_Z_AXIS,
+      g_param_spec_int ("source-orientation-z", "ALSourceOrientationZ",
+          "Source orientation (rotation angle) against Z axis, deg.", -180, 180,
+          0, G_PARAM_READWRITE));
+
+  openalsink_signals[ROTATE] =
+      g_signal_new ("rotate",
+      G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+      G_STRUCT_OFFSET (GstOpenALSinkClass, rotate), NULL, NULL, NULL,
+          G_TYPE_NONE, 3, G_TYPE_FLOAT, G_TYPE_FLOAT, G_TYPE_FLOAT);
+#endif /* TIZEN_FEATURE_OALSINK_MODIFICATION */
+
   gst_element_class_set_static_metadata (gstelement_class, "OpenAL Audio Sink",
       "Sink/Audio", "Output audio through OpenAL",
       "Juan Manuel Borges Caño <juanmabcmail@gmail.com>");
@@ -260,6 +358,16 @@ gst_openal_sink_init (GstOpenALSink * sink)
   sink->write_reset = AL_FALSE;
   sink->probed_caps = NULL;
 
+#ifdef TIZEN_FEATURE_OALSINK_MODIFICATION
+  sink->use_stream_info = 0;
+  sink->stream_info = NULL;
+
+  sink->ambisonic_type = AMBISONICS_TYPE_UNKNOWN;
+  sink->source_rotation_x = 0.f;
+  sink->source_rotation_y = 0.f;
+  sink->source_rotation_z = 0.f;
+#endif /* TIZEN_FEATURE_OALSINK_MODIFICATION */
+
   g_mutex_init (&sink->openal_lock);
 }
 
@@ -302,6 +410,29 @@ gst_openal_sink_set_property (GObject * object, guint prop_id,
         sink->user_source = g_value_get_uint (value);
       break;
 
+#ifdef TIZEN_FEATURE_OALSINK_MODIFICATION
+    case PROP_USE_STREAM_INFO:
+      sink->use_stream_info = g_value_get_uint (value);
+      break;
+    case PROP_STREAM_INFO:
+      if (!sink->stream_info)
+        sink->stream_info = g_value_get_pointer (value);
+      break;
+    case PROP_SOURCE_AMBISONIC_TYPE:
+      sink->ambisonic_type = g_value_get_enum (value);
+      GST_DEBUG_OBJECT (sink, "sink->user_source %d", sink->user_source);
+      break;
+    case PROP_SOURCE_ORIENTATION_X_AXIS:
+      sink->source_rotation_x = (ALfloat)g_value_get_int (value) / 180 * M_PI;
+      break;
+    case PROP_SOURCE_ORIENTATION_Y_AXIS:
+      sink->source_rotation_y = (ALfloat)g_value_get_int (value) / 180 * M_PI;
+      break;
+    case PROP_SOURCE_ORIENTATION_Z_AXIS:
+      sink->source_rotation_z = (ALfloat)g_value_get_int (value) / 180 * M_PI;
+      break;
+#endif /* TIZEN_FEATURE_OALSINK_MODIFICATION */
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -318,6 +449,10 @@ gst_openal_sink_get_property (GObject * object, guint prop_id, GValue * value,
   ALCcontext *context = sink->default_context;
   ALuint source = sink->default_source;
 
+#ifdef TIZEN_FEATURE_OALSINK_MODIFICATION
+  sound_stream_info_h stream_info = sink->stream_info;
+#endif /* TIZEN_FEATURE_OALSINK_MODIFICATION */
+
   switch (prop_id) {
     case PROP_DEVICE_NAME:
       device_name = "";
@@ -343,6 +478,29 @@ gst_openal_sink_get_property (GObject * object, guint prop_id, GValue * value,
       g_value_set_uint (value, source);
       break;
 
+#ifdef TIZEN_FEATURE_OALSINK_MODIFICATION
+    case PROP_USE_STREAM_INFO:
+      g_value_set_uint (value, sink->use_stream_info);
+      break;
+    case PROP_STREAM_INFO:
+      if (!stream_info)
+        stream_info = sink->stream_info;
+      g_value_set_pointer (value, stream_info);
+      break;
+    case PROP_SOURCE_AMBISONIC_TYPE:
+      g_value_set_enum (value, sink->ambisonic_type);
+      break;
+    case PROP_SOURCE_ORIENTATION_X_AXIS:
+      g_value_set_int (value, (int)(sink->source_rotation_x / M_PI * 180));
+      break;
+    case PROP_SOURCE_ORIENTATION_Y_AXIS:
+      g_value_set_int (value, (int)(sink->source_rotation_y / M_PI * 180));
+      break;
+    case PROP_SOURCE_ORIENTATION_Z_AXIS:
+      g_value_set_int (value, (int)(sink->source_rotation_z / M_PI * 180));
+      break;
+#endif /* TIZEN_FEATURE_OALSINK_MODIFICATION */
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -520,6 +678,24 @@ gst_openal_helper_probe_caps (ALCcontext * context)
     gst_caps_append_structure (caps, structure);
   }
 
+#ifdef TIZEN_FEATURE_OALSINK_MODIFICATION
+  if (alIsExtensionPresent ("AL_EXT_BFORMAT")) {
+    guint64 channel_mask = GST_AUDIO_CHANNEL_POSITION_MASK (FRONT_LEFT) |
+        GST_AUDIO_CHANNEL_POSITION_MASK (FRONT_RIGHT) |
+        GST_AUDIO_CHANNEL_POSITION_MASK (FRONT_CENTER) |
+        GST_AUDIO_CHANNEL_POSITION_MASK (REAR_CENTER);
+
+    structure =
+        gst_structure_new ("audio/x-raw",
+        "format", G_TYPE_STRING, GST_AUDIO_NE (S16),
+        "rate", GST_TYPE_INT_RANGE, OPENAL_MIN_RATE, OPENAL_MAX_RATE,
+        "channels", G_TYPE_INT, 4, NULL);
+    gst_structure_set (structure, "channel-mask", GST_TYPE_BITMASK,
+        channel_mask, NULL);
+    gst_caps_append_structure (caps, structure);
+  }
+#endif /* TIZEN_FEATURE_OALSINK_MODIFICATION */
+
   if (alIsExtensionPresent ("AL_EXT_ALAW")) {
     structure =
         gst_structure_new ("audio/x-alaw", "rate", GST_TYPE_INT_RANGE,
@@ -631,8 +807,27 @@ gst_openal_sink_open (GstAudioSink * audiosink)
     }
   } else if (sink->user_context)
     sink->default_device = alcGetContextsDevice (sink->user_context);
+
+#ifndef TIZEN_FEATURE_OALSINK_MODIFICATION
   else
     sink->default_device = alcOpenDevice (sink->device_name);
+#else /* TIZEN_FEATURE_OALSINK_MODIFICATION */
+  else {
+    if (sink->use_stream_info) {
+      GST_DEBUG_OBJECT (sink, "The Tizen Stream Policy API is used.");
+      if (!sink->stream_info) {
+        GST_ELEMENT_ERROR (sink, RESOURCE, FAILED,
+          ("Unable to process stream info."), GST_ALC_ERROR (sink->default_device));
+        return FALSE;
+      }
+      sink->default_device = alcOpenDeviceNew (sink->device_name, sink->stream_info);
+    } else {
+      GST_DEBUG_OBJECT (sink, "The Tizen Stream Policy API is not used.");
+        sink->default_device = alcOpenDevice (sink->device_name);
+    }
+  }
+#endif /* TIZEN_FEATURE_OALSINK_MODIFICATION */
+
   if (!sink->default_device) {
     GST_ELEMENT_ERROR (sink, RESOURCE, OPEN_WRITE,
         ("Could not open device."), GST_ALC_ERROR (sink->default_device));
@@ -714,6 +909,10 @@ gst_openal_sink_parse_spec (GstOpenALSink * sink,
               break;
             case 4:
               format = AL_FORMAT_QUAD16;
+#ifdef TIZEN_FEATURE_OALSINK_MODIFICATION
+              if (sink->ambisonic_type == 1)
+                format = AL_FORMAT_BFORMAT3D_16;        /*FIXME (m.alieskieie): Implement B-format support in more extended way */
+#endif /* TIZEN_FEATURE_OALSINK_MODIFICATION */
               break;
             case 6:
               format = AL_FORMAT_51CHN16;
@@ -970,11 +1169,34 @@ gst_openal_sink_write (GstAudioSink * audiosink, gpointer data, guint length)
   ALint processed, queued, state;
   ALCcontext *old;
   gulong rest_us;
+#ifdef TIZEN_FEATURE_OALSINK_MODIFICATION
+  ALfloat sourceOri[] = { 0.0, 0.0, -1.0, 0.0, 1.0, 0.0 };
+#endif /* TIZEN_FEATURE_OALSINK_MODIFICATION */
 
   g_assert (length == sink->buffer_length);
 
   old = pushContext (sink->default_context);
 
+#ifdef TIZEN_FEATURE_OALSINK_MODIFICATION
+  if (sink->ambisonic_type == 1) {
+    sink->format = AL_FORMAT_BFORMAT3D_16;
+    if (sink->source_rotation_y != source_rotation_y_old) {
+      /* FIXME (m.alieskieie): Implement more appropriate
+         Euler angles -> AL Source orientation transform algorithm */
+      // sourceOri[0] = (-1) * sin (sink->source_rotation_y);
+      // sourceOri[2] = (-1) * cos (sink->source_rotation_y);
+      GST_DEBUG_OBJECT (sink,
+          "Source_rotation_y = %g    atx = %g    atz = %g\n",
+          sink->source_rotation_y, sourceOri[0], sourceOri[2]);
+      alSourcefv (sink->default_source, AL_ORIENTATION, sourceOri);
+      if (alGetError () != AL_NO_ERROR)
+        GST_ELEMENT_ERROR (sink, RESOURCE, WRITE, (NULL),
+            ("Failed to set Source's orientation"));
+      source_rotation_y_old = sink->source_rotation_y;
+    }
+  }
+#endif /* TIZEN_FEATURE_OALSINK_MODIFICATION */
+
   rest_us =
       (guint64) (sink->buffer_length / sink->bytes_per_sample) *
       G_USEC_PER_SEC / sink->rate / sink->channels;
@@ -1097,3 +1319,70 @@ gst_openal_sink_reset (GstAudioSink * audiosink)
   popContext (old, sink->default_context);
   GST_OPENAL_SINK_UNLOCK (sink);
 }
+
+#ifdef TIZEN_FEATURE_OALSINK_MODIFICATION
+void
+set_angles (GstElement * element, float abs_angle_x, float abs_angle_y,
+    float abs_angle_z)
+{
+  GstOpenALSink *sink = GST_OPENAL_SINK (element);
+  sink->source_rotation_x = abs_angle_x;
+  sink->source_rotation_y = abs_angle_y;
+  sink->source_rotation_z = abs_angle_z;
+  GST_DEBUG_OBJECT (sink, "\nAbsolute angles have been set directly:\n"
+      "x = %g (%g deg.)\n"
+      "y = %g (%g deg.)\n"
+      "z = %g (%g deg.)",
+      sink->source_rotation_x, sink->source_rotation_x / M_PI * 180,
+      sink->source_rotation_y, sink->source_rotation_y / M_PI * 180,
+      sink->source_rotation_z, sink->source_rotation_z / M_PI * 180);
+}
+
+void
+apply_rotation (GstElement * element, float rotation_x, float rotation_y,
+    float rotation_z)
+{
+  GstOpenALSink *sink = GST_OPENAL_SINK (element);
+  sink->source_rotation_x += rotation_x;
+  sink->source_rotation_y += rotation_y;
+  sink->source_rotation_z += rotation_z;
+
+  GST_DEBUG_OBJECT (sink, "\nAbsolute angles have been changed to:\n"
+      "x = %g (%g deg.)    delta = %g (%g deg.)\n"
+      "y = %g (%g deg.)    delta = %g (%g deg.)\n"
+      "z = %g (%g deg.)    delta = %g (%g deg.)",
+      sink->source_rotation_x, sink->source_rotation_x / M_PI * 180,
+      rotation_x, rotation_x / M_PI * 180,
+      sink->source_rotation_y, sink->source_rotation_y / M_PI * 180,
+      rotation_y, rotation_y / M_PI * 180,
+      sink->source_rotation_z, sink->source_rotation_z / M_PI * 180,
+      rotation_z, rotation_z / M_PI * 180);
+}
+
+static gboolean
+gst_openal_sink_src_event (GstElement * element, GstEvent * event)
+{
+  GstOpenALSink *sink = GST_OPENAL_SINK (element);
+  gdouble yaw, pitch, roll;
+
+
+  if (GST_EVENT_TYPE (event) == GST_EVENT_NAVIGATION) {
+    if (gst_navigation_event_get_type (event) == GST_NAVIGATION_EVENT_MOUSE_MOVE) {
+      GstStructure *structure = (GstStructure *) gst_event_get_structure (event);
+      if (gst_structure_get_double (structure, "yaw", &yaw) &&
+          gst_structure_get_double (structure, "pitch", &pitch) &&
+          gst_structure_get_double (structure, "roll", &roll)) {
+
+          GST_DEBUG_OBJECT (sink, "yaw   = %g (%g deg.)\n", yaw, yaw / M_PI * 180);
+          GST_DEBUG_OBJECT (sink, "pitch = %g (%g deg.)\n", pitch, pitch / M_PI * 180);
+          GST_DEBUG_OBJECT (sink, "roll  = %g (%g deg.)\n", roll, roll / M_PI * 180);
+
+          set_angles(element, pitch, yaw, -roll);
+      }
+    }
+  }
+
+  return GST_ELEMENT_CLASS (gst_openal_sink_parent_class)->send_event (element,
+      event);
+}
+#endif /* TIZEN_FEATURE_OALSINK_MODIFICATION */
index 9d4850f..1f92fe8 100644 (file)
 #include <gst/gst.h>
 #include <gst/audio/audio.h>
 
+#ifdef TIZEN_FEATURE_OALSINK_MODIFICATION
+#include <gst/video/navigation.h>
+#include <sound_manager.h>
+#endif /* TIZEN_FEATURE_OALSINK_MODIFICATION */
+
 #ifdef _WIN32
 #include <al.h>
 #include <alc.h>
@@ -66,6 +71,14 @@ typedef struct _GstOpenALSinkClass GstOpenALSinkClass;
 #define GST_OPENAL_SINK_LOCK(obj)     (g_mutex_lock(GST_OPENAL_SINK_GET_LOCK(obj)))
 #define GST_OPENAL_SINK_UNLOCK(obj)   (g_mutex_unlock(GST_OPENAL_SINK_GET_LOCK(obj)))
 
+#ifdef TIZEN_FEATURE_OALSINK_MODIFICATION
+typedef enum {
+  AMBISONICS_TYPE_UNKNOWN = 0,
+  AMBISONICS_TYPE_PERIPHONIC = 1,        /**< To comply with Google's Spatial Audio RFC*/
+  AMBISONICS_TYPE_NON_PERIPHONIC = 2,
+} AmbisonicsType;
+#endif /* TIZEN_FEATURE_OALSINK_MODIFICATION */
+
 struct _GstOpenALSink
 {
   GstAudioSink sink;
@@ -99,11 +112,29 @@ struct _GstOpenALSink
   GstCaps *probed_caps;
 
   GMutex openal_lock;
+
+#ifdef TIZEN_FEATURE_OALSINK_MODIFICATION
+  ALuint use_stream_info;
+  sound_stream_info_h stream_info;
+
+  AmbisonicsType ambisonic_type;
+  ALfloat source_rotation_x;
+  ALfloat source_rotation_y;
+  ALfloat source_rotation_z;
+
+  gulong signal_id;
+#endif /* TIZEN_FEATURE_OALSINK_MODIFICATION */
+
 };
 
 struct _GstOpenALSinkClass
 {
   GstAudioSinkClass parent_class;
+
+#ifdef TIZEN_FEATURE_OALSINK_MODIFICATION
+  void (*rotate) (GstElement * element, float rotation_x, float rotation_y, float rotation_z);
+  void (*event) (GstElement * element, GstEvent * event);
+#endif /* TIZEN_FEATURE_OALSINK_MODIFICATION */
 };
 
 GType gst_openal_sink_get_type (void);
index 2f07cfb..feea9b9 100644 (file)
@@ -5,7 +5,7 @@ if openal_dep.found()
     'gstopenal.c', 'gstopenalelement.c', 'gstopenalsink.c', 'gstopenalsrc.c',
     c_args: gst_plugins_bad_args,
     include_directories: [configinc, libsinc],
-    dependencies: [gstaudio_dep, openal_dep],
+    dependencies: [gstaudio_dep, gstvideo_dep, openal_dep],
     install: true,
     install_dir: plugins_install_dir,
   )
index 1c0dc16..1ecef00 100644 (file)
@@ -172,6 +172,7 @@ gst_rsvg_decode_image (GstRsvgDec * rsvg, GstBuffer * buffer,
   if (!handle) {
     GST_ERROR_OBJECT (rsvg, "Failed to parse SVG image: %s", error->message);
     g_error_free (error);
+    gst_buffer_unmap (buffer, &minfo);
     return GST_FLOW_ERROR;
   }
 
@@ -197,6 +198,7 @@ gst_rsvg_decode_image (GstRsvgDec * rsvg, GstBuffer * buffer,
     gst_video_codec_state_unref (output_state);
     GST_ERROR_OBJECT (rsvg, "Buffer allocation failed %s",
         gst_flow_get_name (ret));
+    gst_buffer_unmap (buffer, &minfo);
     return ret;
   }
 
@@ -210,6 +212,7 @@ gst_rsvg_decode_image (GstRsvgDec * rsvg, GstBuffer * buffer,
     GST_ERROR_OBJECT (rsvg, "Failed to get SVG image");
     g_object_unref (handle);
     gst_video_codec_state_unref (output_state);
+    gst_buffer_unmap (buffer, &minfo);
     return GST_FLOW_ERROR;
   }
   surface =
index e15a6a6..ca8058d 100644 (file)
@@ -461,8 +461,8 @@ gst_pitch_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
   return res;
 }
 
-/* generic convert function based on caps, no rate 
- * used here 
+/* generic convert function based on caps, no rate
+ * used here
  */
 static gboolean
 gst_pitch_convert (GstPitch * pitch,
@@ -892,8 +892,18 @@ gst_pitch_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
     GstBuffer *out_buffer;
 
     out_buffer = gst_pitch_prepare_buffer (pitch);
-    if (out_buffer)
+
+    if (out_buffer) {
+#ifdef TIZEN_FEATURE_PITCH_AUDIO_META
+      gint samples =  GST_BUFFER_OFFSET (out_buffer);
+
+      if (GST_AUDIO_INFO_LAYOUT (&pitch->info) ==
+          GST_AUDIO_LAYOUT_NON_INTERLEAVED) {
+        gst_buffer_add_audio_meta (out_buffer, &pitch->info, samples, NULL);
+      }
+#endif
       return gst_pitch_forward_buffer (pitch, out_buffer);
+    }
   }
 
   return GST_FLOW_OK;
index 0bb9dc7..26642d7 100644 (file)
@@ -245,6 +245,7 @@ registry_handle_global_remove (void *data, struct wl_registry *registry,
     uint32_t name)
 {
   /* temporarily do nothing */
+  GST_LOG ("Removed global object: name(%d)", name);
 }
 
 static const struct wl_registry_listener registry_listener = {
index fe48300..95bd271 100644 (file)
@@ -469,6 +469,11 @@ enum
   PROP_ICE_AGENT,
   PROP_LATENCY,
   PROP_SCTP_TRANSPORT,
+#ifdef TIZEN_FEATURE_IMPORT_NETSIM
+  PROP_NETSIM,
+  PROP_DROP_PROBABILITY_SENDER,
+  PROP_DROP_PROBABILITY_RECEIVER
+#endif
 };
 
 static guint gst_webrtc_bin_signals[LAST_SIGNAL] = { 0 };
@@ -709,6 +714,11 @@ _remove_pad (GstWebRTCBin * webrtc, GstWebRTCBinPad * pad)
   _remove_pending_pad (webrtc, pad);
 
   gst_element_remove_pad (GST_ELEMENT (webrtc), GST_PAD (pad));
+#ifdef __TIZEN__
+  GST_OBJECT_LOCK (webrtc);
+  webrtc->priv->max_sink_pad_serial--;
+  GST_OBJECT_UNLOCK (webrtc);
+#endif
 }
 
 typedef struct
@@ -1217,10 +1227,38 @@ _collate_peer_connection_states (GstWebRTCBin * webrtc)
 #undef STATE
 }
 
+#ifdef __TIZEN__
+static void
+_update_and_notify_ice_gathering_state (GstWebRTCBin * webrtc, GstWebRTCICEGatheringState state)
+{
+  GstWebRTCICEGatheringState old_state = webrtc->ice_gathering_state;
+
+  if (state != webrtc->ice_gathering_state) {
+    gchar *old_s, *new_s;
+
+    old_s = _enum_value_to_string (GST_TYPE_WEBRTC_ICE_GATHERING_STATE,
+        old_state);
+    new_s = _enum_value_to_string (GST_TYPE_WEBRTC_ICE_GATHERING_STATE,
+        state);
+    GST_INFO_OBJECT (webrtc, "ICE gathering state change from %s(%u) to %s(%u)",
+        old_s, old_state, new_s, state);
+    g_free (old_s);
+    g_free (new_s);
+
+    webrtc->ice_gathering_state = state;
+    PC_UNLOCK (webrtc);
+    g_object_notify (G_OBJECT (webrtc), "ice-gathering-state");
+    PC_LOCK (webrtc);
+  }
+}
+#endif
+
 static GstStructure *
 _update_ice_gathering_state_task (GstWebRTCBin * webrtc, gpointer data)
 {
+#ifndef __TIZEN__
   GstWebRTCICEGatheringState old_state = webrtc->ice_gathering_state;
+#endif
   GstWebRTCICEGatheringState new_state;
 
   new_state = _collate_ice_gathering_states (webrtc);
@@ -1233,11 +1271,23 @@ _update_ice_gathering_state_task (GstWebRTCBin * webrtc, gpointer data)
     ICE_LOCK (webrtc);
     if (webrtc->priv->pending_local_ice_candidates->len != 0) {
       /* ICE candidates queued for emissiong -> we're gathering, not complete */
+#ifdef __TIZEN__
+      webrtc->pending_ice_gathering_state = GST_WEBRTC_ICE_GATHERING_STATE_COMPLETE;
+      GST_INFO_OBJECT (webrtc, "set pending_ice_gathering_state to (%u)",
+          webrtc->pending_ice_gathering_state);
+      ICE_UNLOCK (webrtc);
+      return NULL;
+    }
+#else
       new_state = GST_WEBRTC_ICE_GATHERING_STATE_GATHERING;
     }
+#endif
     ICE_UNLOCK (webrtc);
   }
 
+#ifdef __TIZEN__
+  _update_and_notify_ice_gathering_state (webrtc, new_state);
+#else
   if (new_state != webrtc->ice_gathering_state) {
     gchar *old_s, *new_s;
 
@@ -1256,6 +1306,7 @@ _update_ice_gathering_state_task (GstWebRTCBin * webrtc, gpointer data)
     PC_LOCK (webrtc);
   }
 
+#endif
   return NULL;
 }
 
@@ -2060,6 +2111,16 @@ _create_webrtc_transceiver (GstWebRTCBin * webrtc,
   return trans;
 }
 
+#ifdef __TIZEN__
+static void
+_remove_webrtc_transceiver (GstWebRTCBin * webrtc,
+    GstWebRTCRTPTransceiver * trans)
+{
+  g_ptr_array_remove (webrtc->priv->transceivers, trans);
+  gst_object_unref (trans);
+}
+#endif
+
 static TransportStream *
 _create_transport_channel (GstWebRTCBin * webrtc, guint session_id)
 {
@@ -3024,7 +3085,11 @@ _create_offer_task (GstWebRTCBin * webrtc, const GstStructure * options,
 
     reserved_pts = gather_reserved_pts (webrtc);
     if (last_offer && _parse_bundle (last_offer, &last_bundle, NULL)
+#ifndef __TIZEN__
         && last_bundle && last_bundle && last_bundle[0]
+#else
+        && last_bundle && last_bundle[0]
+#endif
         && _get_bundle_index (last_offer, last_bundle, &bundle_media_index)) {
       bundle_ufrag =
           g_strdup (_media_get_ice_ufrag (last_offer, bundle_media_index));
@@ -4044,6 +4109,32 @@ out:
   return ret;
 }
 
+#ifdef TIZEN_FEATURE_IMPORT_NETSIM
+static void
+_insert_netsim_element_between (GstWebRTCBin * webrtc, GstElement * srcbin,
+    const gchar * srcpadname, GstElement * sinkbin, const gchar * sinkpadname,
+    guint idx)
+{
+  gboolean send = !g_strcmp0 (sinkpadname, "rtp_sink");
+  gchar *netsim_name = g_strdup_printf ("netsim_%s_%u",
+      send ? "send" : "recv", idx);
+  GstElement *netsim = gst_element_factory_make ("netsim", netsim_name);
+  g_free (netsim_name);
+
+  gst_bin_add (GST_BIN (webrtc), netsim);
+  g_object_set (netsim, "drop-probability",
+      send ? webrtc->priv->drop_probability_sender :
+      webrtc->priv->drop_probability_receiver, NULL);
+  gst_element_sync_state_with_parent (netsim);
+
+  if (!gst_element_link_pads (srcbin, srcpadname, netsim, "sink"))
+    g_warn_if_reached ();
+
+  if (!gst_element_link_pads (netsim, "src", sinkbin, sinkpadname))
+    g_warn_if_reached ();
+}
+
+#endif
 static GstPad *
 _connect_input_stream (GstWebRTCBin * webrtc, GstWebRTCBinPad * pad)
 {
@@ -4116,9 +4207,18 @@ _connect_input_stream (GstWebRTCBin * webrtc, GstWebRTCBinPad * pad)
     gst_ghost_pad_set_target (GST_GHOST_PAD (pad), sinkpad);
 
     pad_name = g_strdup_printf ("send_rtp_src_%u", pad->trans->mline);
+#ifdef TIZEN_FEATURE_IMPORT_NETSIM
+    if (webrtc->priv->netsim) {
+      _insert_netsim_element_between (webrtc, GST_ELEMENT (webrtc->rtpbin), pad_name,
+          GST_ELEMENT (trans->stream->send_bin), "rtp_sink", pad->trans->mline);
+    } else {
+#endif
     if (!gst_element_link_pads (GST_ELEMENT (webrtc->rtpbin), pad_name,
             GST_ELEMENT (trans->stream->send_bin), "rtp_sink"))
       g_warn_if_reached ();
+#ifdef TIZEN_FEATURE_IMPORT_NETSIM
+    }
+#endif
     g_free (pad_name);
   } else {
     gchar *pad_name = g_strdup_printf ("sink_%u", pad->trans->mline);
@@ -4169,9 +4269,18 @@ _connect_output_stream (GstWebRTCBin * webrtc,
       session_id, stream);
 
   pad_name = g_strdup_printf ("recv_rtp_sink_%u", session_id);
+#ifdef TIZEN_FEATURE_IMPORT_NETSIM
+  if (webrtc->priv->netsim) {
+    _insert_netsim_element_between (webrtc, GST_ELEMENT (stream->receive_bin),
+        "rtp_src", GST_ELEMENT (webrtc->rtpbin), pad_name, session_id);
+  } else {
+#endif
   if (!gst_element_link_pads (GST_ELEMENT (stream->receive_bin),
           "rtp_src", GST_ELEMENT (webrtc->rtpbin), pad_name))
     g_warn_if_reached ();
+#ifdef TIZEN_FEATURE_IMPORT_NETSIM
+  }
+#endif
   g_free (pad_name);
 
   gst_element_sync_state_with_parent (GST_ELEMENT (stream->receive_bin));
@@ -4320,6 +4429,9 @@ _set_rtx_ptmap_from_stream (GstWebRTCBin * webrtc, TransportStream * stream)
       g_object_set (stream->rtxsend, "payload-type-map", pt_map, NULL);
 
     gst_structure_free (pt_map);
+#ifdef __TIZEN__
+    g_free (rtx_pt);
+#endif
   }
 }
 
@@ -4804,9 +4916,18 @@ _connect_rtpfunnel (GstWebRTCBin * webrtc, guint session_id)
   gst_object_unref (rtp_sink);
 
   pad_name = g_strdup_printf ("send_rtp_src_%d", session_id);
+#ifdef TIZEN_FEATURE_IMPORT_NETSIM
+  if (webrtc->priv->netsim) {
+    _insert_netsim_element_between (webrtc, GST_ELEMENT (webrtc->rtpbin), pad_name,
+          GST_ELEMENT (stream->send_bin), "rtp_sink", session_id);
+  } else {
+#endif
   if (!gst_element_link_pads (GST_ELEMENT (webrtc->rtpbin), pad_name,
           GST_ELEMENT (stream->send_bin), "rtp_sink"))
     g_warn_if_reached ();
+#ifdef TIZEN_FEATURE_IMPORT_NETSIM
+  }
+#endif
   g_free (pad_name);
 
 done:
@@ -5622,6 +5743,13 @@ _on_local_ice_candidate_task (GstWebRTCBin * webrtc)
   }
   g_array_free (items, TRUE);
 
+#ifdef __TIZEN__
+  if (webrtc->pending_ice_gathering_state == GST_WEBRTC_ICE_GATHERING_STATE_COMPLETE) {
+    _update_and_notify_ice_gathering_state (webrtc, GST_WEBRTC_ICE_GATHERING_STATE_COMPLETE);
+    webrtc->pending_ice_gathering_state = GST_WEBRTC_ICE_GATHERING_STATE_NEW;
+  }
+#endif
+
   return NULL;
 }
 
@@ -5821,7 +5949,9 @@ gst_webrtc_bin_create_data_channel (GstWebRTCBin * webrtc, const gchar * label,
   g_return_val_if_fail (GST_IS_WEBRTC_BIN (webrtc), NULL);
   g_return_val_if_fail (label != NULL, NULL);
   g_return_val_if_fail (strlen (label) <= 65535, NULL);
+#ifndef __TIZEN__
   g_return_val_if_fail (webrtc->priv->is_closed != TRUE, NULL);
+#endif
 
   if (!init_params
       || !gst_structure_get_boolean (init_params, "ordered", &ordered))
@@ -6057,7 +6187,9 @@ on_rtpbin_request_aux_sender (GstElement * rtpbin, guint session_id,
 {
   TransportStream *stream;
   gboolean have_rtx = FALSE;
+#ifndef __TIZEN__
   GstStructure *pt_map = NULL;
+#endif
   GstElement *ret = NULL;
 
   stream = _find_transport_for_session (webrtc, session_id);
@@ -6065,8 +6197,12 @@ on_rtpbin_request_aux_sender (GstElement * rtpbin, guint session_id,
   if (stream)
     have_rtx = transport_stream_get_pt (stream, "RTX") != 0;
 
+#ifndef __TIZEN__
   GST_LOG_OBJECT (webrtc, "requesting aux sender for stream %" GST_PTR_FORMAT
       " with pt map %" GST_PTR_FORMAT, stream, pt_map);
+#else
+  GST_LOG_OBJECT (webrtc, "requesting aux sender for stream %" GST_PTR_FORMAT, stream);
+#endif
 
   if (have_rtx) {
     GstElement *rtx;
@@ -6118,9 +6254,11 @@ on_rtpbin_request_aux_sender (GstElement * rtpbin, guint session_id,
   }
 
 out:
+#ifndef __TIZEN__
   if (pt_map)
     gst_structure_free (pt_map);
 
+#endif
   return ret;
 }
 
@@ -6568,6 +6706,9 @@ gst_webrtc_bin_change_state (GstElement * element, GstStateChange transition)
       break;
     case GST_STATE_CHANGE_READY_TO_NULL:
       _stop_thread (webrtc);
+#ifdef __TIZEN__
+      webrtc->priv->need_negotiation = FALSE;
+#endif
       break;
     default:
       break;
@@ -6773,7 +6914,11 @@ gst_webrtc_bin_release_pad (GstElement * element, GstPad * pad)
    * a possibly dead transceiver */
   PC_LOCK (webrtc);
   if (webrtc_pad->trans)
+#ifdef __TIZEN__
+    _remove_webrtc_transceiver (webrtc, webrtc_pad->trans);
+#else
     gst_object_unref (webrtc_pad->trans);
+#endif
   webrtc_pad->trans = NULL;
   gst_caps_replace (&webrtc_pad->received_caps, NULL);
   PC_UNLOCK (webrtc);
@@ -6808,6 +6953,27 @@ _update_rtpstorage_latency (GstWebRTCBin * webrtc)
   }
 }
 
+#ifdef TIZEN_FEATURE_IMPORT_NETSIM
+static void
+_update_drop_probability (GstWebRTCBin * webrtc, gfloat probability, gboolean sender)
+{
+  GValue value = G_VALUE_INIT;
+  GstElement *element;
+  GstIterator *bin_iterator = gst_bin_iterate_sorted (GST_BIN (webrtc));
+  g_assert (bin_iterator);
+
+  while (gst_iterator_next (bin_iterator, &value) == GST_ITERATOR_OK) {
+    element = GST_ELEMENT (g_value_get_object (&value));
+    if (g_strrstr (GST_ELEMENT_NAME (element), sender ? "netsim_send" : "netsim_recv"))
+      g_object_set (element, "drop-probability", probability, NULL);
+    g_value_reset (&value);
+  }
+
+  g_value_unset (&value);
+  gst_iterator_free (bin_iterator);
+}
+#endif
+
 static void
 gst_webrtc_bin_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec)
@@ -6841,6 +7007,23 @@ gst_webrtc_bin_set_property (GObject * object, guint prop_id,
       webrtc->priv->jb_latency = g_value_get_uint (value);
       _update_rtpstorage_latency (webrtc);
       break;
+#ifdef TIZEN_FEATURE_IMPORT_NETSIM
+    case PROP_NETSIM:
+      webrtc->priv->netsim = g_value_get_boolean (value);
+      _update_drop_probability (webrtc, webrtc->priv->netsim ?
+          webrtc->priv->drop_probability_sender : 0.0, TRUE);
+      _update_drop_probability (webrtc, webrtc->priv->netsim ?
+          webrtc->priv->drop_probability_receiver : 0.0, FALSE);
+      break;
+    case PROP_DROP_PROBABILITY_SENDER:
+      webrtc->priv->drop_probability_sender = g_value_get_float (value);
+      _update_drop_probability (webrtc, webrtc->priv->drop_probability_sender, TRUE);
+      break;
+    case PROP_DROP_PROBABILITY_RECEIVER:
+      webrtc->priv->drop_probability_receiver = g_value_get_float (value);
+      _update_drop_probability (webrtc, webrtc->priv->drop_probability_receiver, FALSE);
+      break;
+#endif
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -6918,6 +7101,17 @@ gst_webrtc_bin_get_property (GObject * object, guint prop_id,
     case PROP_SCTP_TRANSPORT:
       g_value_set_object (value, webrtc->priv->sctp_transport);
       break;
+#ifdef TIZEN_FEATURE_IMPORT_NETSIM
+    case PROP_NETSIM:
+      g_value_set_boolean (value, webrtc->priv->netsim);
+      break;
+    case PROP_DROP_PROBABILITY_SENDER:
+      g_value_set_float (value, webrtc->priv->drop_probability_sender);
+      break;
+    case PROP_DROP_PROBABILITY_RECEIVER:
+      g_value_set_float (value, webrtc->priv->drop_probability_receiver);
+      break;
+#endif
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -7209,6 +7403,29 @@ gst_webrtc_bin_class_init (GstWebRTCBinClass * klass)
           GST_TYPE_WEBRTC_SCTP_TRANSPORT,
           G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
 
+#ifdef TIZEN_FEATURE_IMPORT_NETSIM
+  g_object_class_install_property (gobject_class,
+      PROP_NETSIM,
+      g_param_spec_boolean ("netsim", "Use network simulator",
+          "Use network simulator for packet loss",
+          FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class,
+      PROP_DROP_PROBABILITY_SENDER,
+      g_param_spec_float ("drop-probability-sender", "Drop Probability for sender",
+          "The Probability a sending RTP buffer is dropped",
+          0.0, 1.0, 0.0,
+          G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class,
+      PROP_DROP_PROBABILITY_RECEIVER,
+      g_param_spec_float ("drop-probability-receiver", "Drop Probability for receiver",
+          "The Probability a received RTP buffer is dropped",
+          0.0, 1.0, 0.0,
+          G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS));
+
+#endif
+
   /**
    * GstWebRTCBin::create-offer:
    * @object: the #webrtcbin
index e2ef991..4aa73cc 100644 (file)
@@ -71,6 +71,9 @@ struct _GstWebRTCBin
 
   GstWebRTCSignalingState           signaling_state;
   GstWebRTCICEGatheringState        ice_gathering_state;
+#ifdef __TIZEN__
+  GstWebRTCICEGatheringState        pending_ice_gathering_state;
+#endif
   GstWebRTCICEConnectionState       ice_connection_state;
   GstWebRTCPeerConnectionState      peer_connection_state;
 
@@ -142,6 +145,11 @@ struct _GstWebRTCBinPrivate
   GstWebRTCSessionDescription *last_generated_answer;
 
   gboolean tos_attached;
+#ifdef TIZEN_FEATURE_IMPORT_NETSIM
+  gboolean netsim;
+  gfloat drop_probability_sender;
+  gfloat drop_probability_receiver;
+#endif
 };
 
 typedef GstStructure *(*GstWebRTCBinFunc) (GstWebRTCBin * webrtc, gpointer data);
index 84c4e07..e39f6c0 100644 (file)
@@ -639,7 +639,11 @@ gst_webrtc_ice_add_candidate (GstWebRTCICE * ice, GstWebRTCICEStream * stream,
   if (!cand) {
     /* might be a .local candidate */
     char *prefix = NULL, *address = NULL, *postfix = NULL;
+#ifndef __TIZEN__
     char *new_addr, *new_candidate;
+#else
+    char *new_addr = NULL, *new_candidate = NULL;
+#endif
     char *new_candv[4] = { NULL, };
 
     if (!get_candidate_address (candidate, &prefix, &address, &postfix)) {
@@ -671,19 +675,33 @@ gst_webrtc_ice_add_candidate (GstWebRTCICE * ice, GstWebRTCICEStream * stream,
     cand =
         nice_agent_parse_remote_candidate_sdp (ice->priv->nice_agent,
         item->nice_stream_id, new_candidate);
+#ifndef __TIZEN__
     g_free (new_candidate);
+#endif
     if (!cand) {
       GST_WARNING_OBJECT (ice, "Could not parse candidate \'%s\'",
           new_candidate);
       goto fail;
     }
 
+#ifdef __TIZEN__
+    g_free (new_addr);
+    g_free (new_candidate);
+    g_free (prefix);
+    g_free (address);
+    g_free (postfix);
+#else
     g_free (prefix);
     g_free (new_addr);
     g_free (postfix);
+#endif
 
     if (0) {
     fail:
+#ifdef __TIZEN__
+      g_free (new_addr);
+      g_free (new_candidate);
+#endif
       g_free (prefix);
       g_free (address);
       g_free (postfix);
@@ -1199,6 +1217,9 @@ gst_webrtc_ice_init (GstWebRTCICE * ice)
       g_array_new (FALSE, TRUE, sizeof (struct NiceStreamItem));
   g_array_set_clear_func (ice->priv->nice_stream_map,
       (GDestroyNotify) _clear_ice_stream);
+#ifdef __TIZEN__
+  nice_debug_enable (FALSE);
+#endif
 }
 
 GstWebRTCICE *
index e3877f8..2098069 100644 (file)
@@ -820,7 +820,11 @@ webrtc_data_channel_send_string (GstWebRTCDataChannel * base_channel,
     ppid = DATA_CHANNEL_PPID_WEBRTC_STRING_EMPTY;
   } else {
     gsize size = strlen (str);
+#ifndef __TIZEN__
     gchar *str_copy = g_strdup (str);
+#else
+    gchar *str_copy;
+#endif
 
     if (!_is_within_max_message_size (channel, size)) {
       GError *error = NULL;
@@ -833,6 +837,9 @@ webrtc_data_channel_send_string (GstWebRTCDataChannel * base_channel,
       return;
     }
 
+#ifdef __TIZEN__
+    str_copy = g_strdup (str);
+#endif
     buffer =
         gst_buffer_new_wrapped_full (GST_MEMORY_FLAG_READONLY, str_copy,
         size, 0, size, str_copy, g_free);
index 2f8dcf6..4131a35 100644 (file)
@@ -569,6 +569,9 @@ _media_replace_setup (GstSDPMedia * media, GstWebRTCDTLSSetup setup)
       GST_TRACE ("replace setup:%s with setup:%s", attr->value, setup_str);
       gst_sdp_attribute_set (&new_attr, "setup", setup_str);
       gst_sdp_media_replace_attribute (media, i, &new_attr);
+#ifdef __TIZEN__
+      g_free (setup_str);
+#endif
       return;
     }
   }
index a495ec2..067b49a 100644 (file)
@@ -157,6 +157,13 @@ enum
   PROP_0,
   PROP_CONNECTION_SPEED,
   PROP_BITRATE_LIMIT,
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+  PROP_START_BANDWIDTH,
+  PROP_MIN_BANDWIDTH,
+  PROP_MAX_BANDWIDTH,
+  PROP_MAX_WIDTH,
+  PROP_MAX_HEIGHT,
+#endif
   PROP_LAST
 };
 
@@ -363,6 +370,24 @@ gst_adaptive_demux_set_property (GObject * object, guint prop_id,
     case PROP_BITRATE_LIMIT:
       demux->bitrate_limit = g_value_get_float (value);
       break;
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+    case PROP_START_BANDWIDTH:
+      g_free(demux->start_bandwidth);
+      demux->start_bandwidth = g_strdup (g_value_get_string (value));
+      break;
+    case PROP_MIN_BANDWIDTH:
+      demux->min_bandwidth = g_value_get_int (value);
+      break;
+    case PROP_MAX_BANDWIDTH:
+      demux->max_bandwidth = g_value_get_int (value);
+      break;
+    case PROP_MAX_WIDTH:
+      demux->max_width = g_value_get_int (value);
+      break;
+    case PROP_MAX_HEIGHT:
+      demux->max_height = g_value_get_int (value);
+      break;
+#endif
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -387,6 +412,26 @@ gst_adaptive_demux_get_property (GObject * object, guint prop_id,
     case PROP_BITRATE_LIMIT:
       g_value_set_float (value, demux->bitrate_limit);
       break;
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+    case PROP_START_BANDWIDTH:
+      if (demux->start_bandwidth == NULL)
+        g_value_set_static_string (value, "");
+      else
+        g_value_set_string (value, demux->start_bandwidth);
+      break;
+    case PROP_MIN_BANDWIDTH:
+      g_value_set_int (value, demux->min_bandwidth);
+      break;
+    case PROP_MAX_BANDWIDTH:
+      g_value_set_int (value, demux->max_bandwidth);
+      break;
+    case PROP_MAX_WIDTH:
+      g_value_set_int (value, demux->max_width);
+      break;
+    case PROP_MAX_HEIGHT:
+      g_value_set_int (value, demux->max_height);
+      break;
+#endif
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -432,6 +477,41 @@ gst_adaptive_demux_class_init (GstAdaptiveDemuxClass * klass)
           0, 1, DEFAULT_BITRATE_LIMIT,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+  g_object_class_install_property (gobject_class, PROP_START_BANDWIDTH,
+      g_param_spec_string ("start-bandwidth", "Start Bandwidth",
+          "Set bandwidth to use when the playback is started. (LOWEST, HIGHEST, AVERAGE or specific bandwidth value)",
+          NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_MIN_BANDWIDTH,
+      g_param_spec_int ("min-bandwidth",
+          "Min Bandwidth limit",
+          "Minimum limit of the available bandwidth to use when switching to alternates. (-1 = no limit)",
+          -1, G_MAXINT, DEFAULT_BANDWIDTH_LIMIT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_MAX_BANDWIDTH,
+      g_param_spec_int ("max-bandwidth",
+          "Max Bandwidth limit",
+          "Maximum limit of the available bandwidth to use when switching to alternates. (-1 = no limit)",
+          -1, G_MAXINT, DEFAULT_BANDWIDTH_LIMIT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_MAX_WIDTH,
+      g_param_spec_int ("max-video-width",
+          "Max video width limit",
+          "Maximum limit of the available video width to use when switching to alternates. (-1 = no limit)",
+          -1, G_MAXINT, DEFAULT_RESOLUTION_LIMIT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class, PROP_MAX_HEIGHT,
+      g_param_spec_int ("max-video-height",
+          "Max video height limit",
+          "Maximum limit of the available video height to use when switching to alternates. (-1 = no limit)",
+          -1, G_MAXINT, DEFAULT_RESOLUTION_LIMIT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+#endif
+
   gstelement_class->change_state = gst_adaptive_demux_change_state;
 
   gstbin_class->handle_message = gst_adaptive_demux_handle_message;
@@ -522,6 +602,13 @@ gst_adaptive_demux_init (GstAdaptiveDemux * demux,
   /* Properties */
   demux->bitrate_limit = DEFAULT_BITRATE_LIMIT;
   demux->connection_speed = DEFAULT_CONNECTION_SPEED;
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+  demux->start_bandwidth = NULL;
+  demux->min_bandwidth = DEFAULT_BANDWIDTH_LIMIT;
+  demux->max_bandwidth = DEFAULT_BANDWIDTH_LIMIT;
+  demux->max_width = DEFAULT_RESOLUTION_LIMIT;
+  demux->max_height = DEFAULT_RESOLUTION_LIMIT;
+#endif
 
   gst_element_add_pad (GST_ELEMENT (demux), demux->sinkpad);
 }
@@ -604,6 +691,44 @@ gst_adaptive_demux_change_state (GstElement * element,
   return result;
 }
 
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+static gboolean
+gst_adaptive_demux_check_http_header (GQuark field_id, const GValue * value,
+    gpointer data)
+{
+  GstAdaptiveDemux *demux = GST_ADAPTIVE_DEMUX_CAST (data);
+
+  if (value
+      && g_ascii_strcasecmp (g_quark_to_string (field_id), "User-Agent") == 0) {
+    if (demux->user_agent)
+      g_free (demux->user_agent);
+    demux->user_agent = g_value_dup_string (value);
+    GST_INFO_OBJECT (demux, "User-Agent : %s",
+        (demux->user_agent) ? (demux->user_agent) : NULL);
+  }
+
+  if (value
+      && g_ascii_strcasecmp (g_quark_to_string (field_id), "Set-Cookie") == 0) {
+    guint i = 0;
+    gchar **cookies =
+        (gchar **) g_malloc0 ((gst_value_array_get_size (value) +
+            1) * sizeof (gchar *));
+
+    for (i = 0; i < gst_value_array_get_size (value); i++) {
+      GST_INFO_OBJECT (demux, "Cookie : %s",
+          g_value_get_string (gst_value_array_get_value (value, i)));
+      cookies[i] = g_value_dup_string (gst_value_array_get_value (value, i));
+    }
+    cookies[i] = NULL;
+    if (demux->cookies)
+      g_strfreev (demux->cookies);
+    demux->cookies = g_strdupv (cookies);
+    g_strfreev (cookies);
+  }
+  return TRUE;
+}
+#endif
+
 static gboolean
 gst_adaptive_demux_sink_event (GstPad * pad, GstObject * parent,
     GstEvent * event)
@@ -748,6 +873,33 @@ gst_adaptive_demux_sink_event (GstPad * pad, GstObject * parent,
       /* Swallow newsegments, we'll push our own */
       gst_event_unref (event);
       return TRUE;
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+    case GST_EVENT_CUSTOM_DOWNSTREAM_STICKY:{
+      const GstStructure *structure;
+      GstStructure *req_headers = NULL;
+      GstStructure *res_headers = NULL;
+
+      structure = gst_event_get_structure (event);
+      if (gst_structure_has_name (structure, "http-headers")) {
+        if (gst_structure_has_field (structure, "request-headers")) {
+          gst_structure_get (structure, "request-headers", GST_TYPE_STRUCTURE,
+              &req_headers, NULL);
+          gst_structure_foreach (req_headers,
+              gst_adaptive_demux_check_http_header, demux);
+          gst_structure_free (req_headers);
+        }
+        if (gst_structure_has_field (structure, "response-headers")) {
+          gst_structure_get (structure, "response-headers", GST_TYPE_STRUCTURE,
+              &res_headers, NULL);
+          gst_structure_foreach (res_headers,
+              gst_adaptive_demux_check_http_header, demux);
+          gst_structure_free (res_headers);
+        }
+      }
+      break;
+    }
+#endif
+
     default:
       break;
   }
@@ -832,6 +984,14 @@ gst_adaptive_demux_reset (GstAdaptiveDemux * demux)
   g_free (demux->manifest_base_uri);
   demux->manifest_uri = NULL;
   demux->manifest_base_uri = NULL;
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+  if (demux->user_agent)
+    g_free (demux->user_agent);
+  if (demux->cookies)
+    g_strfreev (demux->cookies);
+  demux->user_agent = NULL;
+  demux->cookies = NULL;
+#endif
 
   gst_adapter_clear (demux->priv->input_adapter);
   g_atomic_int_set (&demux->priv->have_manifest, FALSE);
@@ -879,6 +1039,9 @@ gst_adaptive_demux_handle_message (GstBin * bin, GstMessage * msg)
         if (stream == NULL) {
           GST_WARNING_OBJECT (demux,
               "Failed to locate stream for errored element");
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+          GST_MANIFEST_UNLOCK (demux);
+#endif
           break;
         }
       }
@@ -2041,6 +2204,33 @@ gst_adaptive_demux_src_query (GstPad * pad, GstObject * parent,
 
       GST_MANIFEST_UNLOCK (demux);
       break;
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+    case GST_QUERY_CUSTOM:{
+      /* Let decoder(which can not support DRC automatically) know the current streaming mode */
+
+      const GstStructure *s;
+      s = gst_query_get_structure (query);
+
+      if (gst_structure_has_name (s, "GstAdaptiveStreaming")) {
+        GValue value = { 0, };
+        GST_DEBUG_OBJECT (demux, "custom query to check adaptive streaming");
+
+        g_value_init (&value, G_TYPE_BOOLEAN);
+        g_value_set_boolean (&value, TRUE);
+        gst_structure_set_value ((GstStructure *) s, "adaptive-streaming",
+            &value);
+
+        g_value_set_boolean (&value, gst_adaptive_demux_is_live (demux));
+        gst_structure_set_value ((GstStructure *) s, "is-live", &value);
+
+        ret = TRUE;
+      } else {
+        GST_DEBUG_OBJECT (demux, "Unsupported query");
+        ret = FALSE;
+      }
+      break;
+    }
+#endif
     default:
       /* Don't forward queries upstream because of the special nature of this
        *  "demuxer", which relies on the upstream element only to be fed
@@ -2379,7 +2569,7 @@ gst_adaptive_demux_stream_push_buffer (GstAdaptiveDemuxStream * stream,
   GstEvent *pending_caps = NULL, *pending_segment = NULL, *pending_tags = NULL;
   GList *pending_events = NULL;
 
-  /* FIXME : 
+  /* FIXME :
    * This is duplicating *exactly* the same thing as what is done at the beginning
    * of _src_chain if starting_fragment is TRUE */
   if (stream->first_fragment_buffer) {
@@ -2434,6 +2624,16 @@ gst_adaptive_demux_stream_push_buffer (GstAdaptiveDemuxStream * stream,
   GST_BUFFER_DURATION (buffer) = GST_CLOCK_TIME_NONE;
   GST_BUFFER_DTS (buffer) = GST_CLOCK_TIME_NONE;
   if (G_UNLIKELY (stream->pending_caps)) {
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+    stream->pending_caps = gst_caps_make_writable (stream->pending_caps);
+    if (gst_adaptive_demux_is_live (demux)) {
+      gst_caps_set_simple (stream->pending_caps, "is_live", G_TYPE_BOOLEAN,
+          TRUE, NULL);
+    } else {
+      gst_caps_set_simple (stream->pending_caps, "is_live", G_TYPE_BOOLEAN,
+          FALSE, NULL);
+    }
+#endif
     pending_caps = gst_event_new_caps (stream->pending_caps);
     gst_caps_unref (stream->pending_caps);
     stream->pending_caps = NULL;
@@ -3056,6 +3256,14 @@ gst_adaptive_demux_stream_update_source (GstAdaptiveDemuxStream * stream,
       g_object_set (uri_handler, "compress", FALSE, NULL);
     if (g_object_class_find_property (gobject_class, "keep-alive"))
       g_object_set (uri_handler, "keep-alive", TRUE, NULL);
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+    if (g_object_class_find_property (gobject_class, "user-agent")
+        && (demux->user_agent))
+      g_object_set (uri_handler, "user-agent", demux->user_agent, NULL);
+    if (g_object_class_find_property (gobject_class, "cookies")
+        && (demux->cookies))
+      g_object_set (uri_handler, "cookies", demux->cookies, NULL);
+#endif
     if (g_object_class_find_property (gobject_class, "extra-headers")) {
       if (referer || refresh || !allow_cache) {
         GstStructure *extra_headers = gst_structure_new_empty ("headers");
@@ -4401,8 +4609,15 @@ gst_adaptive_demux_update_manifest_default (GstAdaptiveDemux * demux)
   GstFlowReturn ret;
   GError *error = NULL;
 
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+  download = gst_uri_downloader_fetch_uri (demux->downloader,
+      demux->manifest_uri, NULL, demux->user_agent, demux->cookies,
+      PLAYLIST_ADAPTIVE_RETRY, PLAYLIST_ADAPTIVE_TIMEOUT, TRUE, TRUE, TRUE,
+      NULL);
+#else
   download = gst_uri_downloader_fetch_uri (demux->downloader,
       demux->manifest_uri, NULL, TRUE, TRUE, TRUE, &error);
+#endif
   if (download) {
     g_free (demux->manifest_uri);
     g_free (demux->manifest_base_uri);
index 61e0f0c..05d91c1 100644 (file)
@@ -74,6 +74,9 @@ G_BEGIN_DECLS
  * Since: 1.6
  */
 #define GST_ADAPTIVE_DEMUX_STATISTICS_MESSAGE_NAME "adaptive-streaming-statistics"
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+#define GST_ADAPTIVE_DEMUX_VARIANT_MESSAGE_NAME "adaptive-streaming-variant"
+#endif
 
 #define GST_ELEMENT_ERROR_FROM_ERROR(el, msg, err) G_STMT_START { \
   gchar *__dbg = g_strdup_printf ("%s: %s", msg, err->message);         \
@@ -86,6 +89,14 @@ G_BEGIN_DECLS
 
 /* DEPRECATED */
 #define GST_ADAPTIVE_DEMUX_FLOW_END_OF_FRAGMENT GST_FLOW_CUSTOM_SUCCESS_1
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+#define DEFAULT_ADAPTIVE_RETRY -1
+#define DEFAULT_ADAPTIVE_TIMEOUT -1
+#define PLAYLIST_ADAPTIVE_RETRY 3
+#define PLAYLIST_ADAPTIVE_TIMEOUT 2
+#define DEFAULT_BANDWIDTH_LIMIT -1
+#define DEFAULT_RESOLUTION_LIMIT -1
+#endif
 
 typedef struct _GstAdaptiveDemuxStreamFragment GstAdaptiveDemuxStreamFragment;
 typedef struct _GstAdaptiveDemuxStream GstAdaptiveDemuxStream;
@@ -224,6 +235,10 @@ struct _GstAdaptiveDemux
 
   gchar *manifest_uri;
   gchar *manifest_base_uri;
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+  gchar *user_agent;
+  gchar **cookies;
+#endif
 
   /* Properties */
   gfloat bitrate_limit;         /* limit of the available bitrate to use */
@@ -238,6 +253,13 @@ struct _GstAdaptiveDemux
 
   /* < private > */
   GstAdaptiveDemuxPrivate *priv;
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+  gchar *start_bandwidth;
+  gint min_bandwidth;
+  gint max_bandwidth;
+  gint max_width;
+  gint max_height;
+#endif
 };
 
 /**
index 15e6c7c..0beac8c 100644 (file)
@@ -41,7 +41,7 @@ vp8dx_bool_decoder_fill (BOOL_DECODER * br)
   const unsigned char *bufptr = br->user_buffer;
   VP8_BD_VALUE value = br->value;
   int count = br->count;
-  int shift = VP8_BD_VALUE_SIZE - 8 - (count + 8);
+  int shift = VP8_BD_VALUE_SIZE - CHAR_BIT - (count + CHAR_BIT);
   size_t bytes_left = br->user_buffer_end - bufptr;
   size_t bits_left = bytes_left * CHAR_BIT;
   int x = (int) (shift + CHAR_BIT - bits_left);
@@ -50,7 +50,7 @@ vp8dx_bool_decoder_fill (BOOL_DECODER * br)
 
   if (br->decrypt_cb) {
     size_t n =
-        bytes_left > sizeof (decrypted) ? sizeof (decrypted) : bytes_left;
+        MIN (sizeof (decrypted), bytes_left);
     br->decrypt_cb (br->decrypt_state, bufptr, decrypted, (int) n);
     bufptr = decrypted;
   }
index 2386fa6..787750f 100644 (file)
@@ -457,10 +457,17 @@ gst_uri_downloader_destroy_src (GstUriDownloader * downloader)
   downloader->priv->urisrc = NULL;
 }
 
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+static gboolean
+gst_uri_downloader_set_uri (GstUriDownloader * downloader, const gchar * uri,
+    const gchar * referer, gchar* user_agent, gchar** cookies, gint max_retry , gint timeout , gboolean compress, gboolean refresh,
+    gboolean allow_cache)
+#else
 static gboolean
 gst_uri_downloader_set_uri (GstUriDownloader * downloader, const gchar * uri,
     const gchar * referer, gboolean compress,
     gboolean refresh, gboolean allow_cache)
+#endif
 {
   GstPad *pad;
   GObjectClass *gobject_class;
@@ -476,6 +483,17 @@ gst_uri_downloader_set_uri (GstUriDownloader * downloader, const gchar * uri,
     g_object_set (downloader->priv->urisrc, "compress", compress, NULL);
   if (g_object_class_find_property (gobject_class, "keep-alive"))
     g_object_set (downloader->priv->urisrc, "keep-alive", TRUE, NULL);
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+  if (user_agent && g_object_class_find_property (gobject_class, "user-agent"))
+    g_object_set (downloader->priv->urisrc, "user-agent", user_agent, NULL);
+  if (cookies && g_object_class_find_property (gobject_class, "cookies"))
+    g_object_set (downloader->priv->urisrc, "cookies", cookies, NULL);
+
+  if ((max_retry != -1)&&(g_object_class_find_property (gobject_class, "retries")))
+    g_object_set (downloader->priv->urisrc, "retries", max_retry, NULL);
+  if ((timeout != -1)&&(g_object_class_find_property (gobject_class, "timeout")))
+    g_object_set (downloader->priv->urisrc, "timeout", timeout, NULL);
+#endif
   if (g_object_class_find_property (gobject_class, "extra-headers")) {
     if (referer || refresh || !allow_cache) {
       GstStructure *extra_headers = gst_structure_new_empty ("headers");
@@ -530,7 +548,16 @@ gst_uri_downloader_set_method (GstUriDownloader * downloader,
   }
   return FALSE;
 }
-
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+GstFragment *
+gst_uri_downloader_fetch_uri (GstUriDownloader * downloader,
+    const gchar * uri, const gchar * referer, gchar* user_agent, gchar** cookies, gint max_retry , gint timeout , gboolean compress,
+    gboolean refresh, gboolean allow_cache, GError ** err)
+{
+  return gst_uri_downloader_fetch_uri_with_range (downloader, uri,
+      referer, user_agent, cookies, max_retry, timeout, compress, refresh, allow_cache, 0, -1, err);
+}
+#else
 GstFragment *
 gst_uri_downloader_fetch_uri (GstUriDownloader * downloader,
     const gchar * uri, const gchar * referer, gboolean compress,
@@ -539,7 +566,7 @@ gst_uri_downloader_fetch_uri (GstUriDownloader * downloader,
   return gst_uri_downloader_fetch_uri_with_range (downloader, uri,
       referer, compress, refresh, allow_cache, 0, -1, err);
 }
-
+#endif
 /**
  * gst_uri_downloader_fetch_uri_with_range:
  * @downloader: the #GstUriDownloader
@@ -549,11 +576,19 @@ gst_uri_downloader_fetch_uri (GstUriDownloader * downloader,
  *
  * Returns the downloaded #GstFragment
  */
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+GstFragment *
+gst_uri_downloader_fetch_uri_with_range (GstUriDownloader *
+    downloader, const gchar * uri, const gchar * referer, gchar* user_agent, gchar** cookies, gint max_retry , gint timeout , gboolean compress,
+    gboolean refresh, gboolean allow_cache,
+    gint64 range_start, gint64 range_end, GError ** err)
+#else
 GstFragment *
 gst_uri_downloader_fetch_uri_with_range (GstUriDownloader *
     downloader, const gchar * uri, const gchar * referer, gboolean compress,
     gboolean refresh, gboolean allow_cache,
     gint64 range_start, gint64 range_end, GError ** err)
+#endif
 {
   GstStateChangeReturn ret;
   GstFragment *download = NULL;
@@ -569,13 +604,19 @@ gst_uri_downloader_fetch_uri_with_range (GstUriDownloader *
     GST_DEBUG_OBJECT (downloader, "Cancelled, aborting fetch");
     goto quit;
   }
-
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+  if (!gst_uri_downloader_set_uri (downloader, uri, referer, user_agent, cookies, max_retry, timeout ,compress, refresh,
+          allow_cache)) {
+    GST_WARNING_OBJECT (downloader, "Failed to set URI");
+    goto quit;
+  }
+#else
   if (!gst_uri_downloader_set_uri (downloader, uri, referer, compress, refresh,
           allow_cache)) {
     GST_WARNING_OBJECT (downloader, "Failed to set URI");
     goto quit;
   }
-
+#endif
   gst_bus_set_flushing (downloader->priv->bus, FALSE);
   if (downloader->priv->download)
     g_object_unref (downloader->priv->download);
index 4be1edb..97582e4 100644 (file)
@@ -67,11 +67,19 @@ GstUriDownloader * gst_uri_downloader_new (void);
 GST_URI_DOWNLOADER_API
 void gst_uri_downloader_set_parent (GstUriDownloader * downloader, GstElement * parent);
 
+#ifdef TIZEN_FEATURE_ADAPTIVE_MODIFICATION
+GST_URI_DOWNLOADER_API
+GstFragment * gst_uri_downloader_fetch_uri (GstUriDownloader * downloader, const gchar * uri, const gchar * referer, gchar* user_agent, gchar** cookies, gint max_retry , gint timeout , gboolean compress, gboolean refresh, gboolean allow_cache, GError ** err);
+
+GST_URI_DOWNLOADER_API
+GstFragment * gst_uri_downloader_fetch_uri_with_range (GstUriDownloader * downloader, const gchar * uri, const gchar * referer, gchar* user_agent, gchar** cookies, gint max_retry , gint timeout , gboolean compress, gboolean refresh, gboolean allow_cache, gint64 range_start, gint64 range_end, GError ** err);
+#else
 GST_URI_DOWNLOADER_API
 GstFragment * gst_uri_downloader_fetch_uri (GstUriDownloader * downloader, const gchar * uri, const gchar * referer, gboolean compress, gboolean refresh, gboolean allow_cache, GError ** err);
 
 GST_URI_DOWNLOADER_API
 GstFragment * gst_uri_downloader_fetch_uri_with_range (GstUriDownloader * downloader, const gchar * uri, const gchar * referer, gboolean compress, gboolean refresh, gboolean allow_cache, gint64 range_start, gint64 range_end, GError ** err);
+#endif
 
 GST_URI_DOWNLOADER_API
 void gst_uri_downloader_reset (GstUriDownloader *downloader);
index ae9c172..2da484e 100644 (file)
@@ -58,8 +58,16 @@ registry_handle_global (void *data, struct wl_registry *registry,
   }
 }
 
+static void
+registry_handle_global_remove (void *data, struct wl_registry *registry,
+    uint32_t name)
+{
+  GST_LOG ("Removed global object: name(%d)", name);
+}
+
 static const struct wl_registry_listener registry_listener = {
-  registry_handle_global
+  registry_handle_global,
+  registry_handle_global_remove
 };
 
 static void
index 08ad54a..c4a87d7 100644 (file)
@@ -854,8 +854,11 @@ gst_auto_convert_default_filter_func (GstPluginFeature * feature,
 
     caps = gst_static_pad_template_get_caps (template);
 
-    if (gst_caps_is_any (caps) || gst_caps_is_empty (caps))
+    if (gst_caps_is_any (caps) || gst_caps_is_empty (caps)) {
+      gst_caps_unref(caps);
       return FALSE;
+    }
+    gst_caps_unref(caps);
   }
 
   if (!src || !sink)
index 109bab2..370cddf 100644 (file)
@@ -1,4 +1,4 @@
-/* 
+/*
  * GStreamer
  * Copyright (C) 2007 David Schleef <ds@schleef.org>
  *
@@ -170,7 +170,7 @@ gst_bayer2rgb_class_init (GstBayer2RGBClass * klass)
 {
   GObjectClass *gobject_class;
   GstElementClass *gstelement_class;
-
+  GstCaps *tmp = NULL;
   gobject_class = (GObjectClass *) klass;
   gstelement_class = (GstElementClass *) klass;
 
@@ -184,10 +184,12 @@ gst_bayer2rgb_class_init (GstBayer2RGBClass * klass)
 
   gst_element_class_add_pad_template (gstelement_class,
       gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
-          gst_caps_from_string (SRC_CAPS)));
+          tmp = gst_caps_from_string (SRC_CAPS)));
+  gst_caps_unref (tmp);
   gst_element_class_add_pad_template (gstelement_class,
       gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
-          gst_caps_from_string (SINK_CAPS)));
+          tmp = gst_caps_from_string (SINK_CAPS)));
+  gst_caps_unref (tmp);
 
   GST_BASE_TRANSFORM_CLASS (klass)->transform_caps =
       GST_DEBUG_FUNCPTR (gst_bayer2rgb_transform_caps);
index 8ba327d..8d839d7 100644 (file)
@@ -570,10 +570,12 @@ add_id3v2frame_tag (GstId3v2Tag * id3v2tag, const GstTagList * list,
 
           g_array_append_val (id3v2tag->frames, frame);
           GST_DEBUG ("Added unparsed tag with %d bytes", size);
-          gst_buffer_unmap (buf, &mapinfo);
         } else {
           GST_WARNING ("Short ID3v2 frame");
         }
+
+        gst_buffer_unmap (buf, &mapinfo);
+
       } else {
         GST_WARNING ("Discarding unrecognised ID3 tag for different ID3 "
             "version");
@@ -708,7 +710,7 @@ add_comment_tag (GstId3v2Tag * id3v2tag, const GstTagList * list,
         val = g_strdup (s);
       }
 
-      /* If we don't have a valid language, match what taglib does for 
+      /* If we don't have a valid language, match what taglib does for
          unknown languages */
       if (!lang || strlen (lang) < 3)
         lang = g_strdup ("XXX");
index bfbe0d9..6126c8f 100644 (file)
@@ -1348,7 +1348,11 @@ gst_ps_demux_handle_seek_pull (GstPsDemux * demux, GstEvent * event)
   if (flush || seeksegment.position != demux->src_segment.position) {
     /* Do the actual seeking */
     if (!gst_ps_demux_do_seek (demux, &seeksegment)) {
+#ifdef TIZEN_FEATURE_MPEGDEMUX_MODIFICATION
+      goto seek_error;
+#else
       return FALSE;
+#endif
     }
   }
 
@@ -1418,6 +1422,9 @@ no_scr_rate:
 seek_error:
   {
     GST_WARNING_OBJECT (demux, "couldn't perform seek");
+#ifdef TIZEN_FEATURE_MPEGDEMUX_MODIFICATION
+    GST_PAD_STREAM_UNLOCK (demux->sinkpad);
+#endif
     gst_event_unref (event);
     return FALSE;
   }
index cc567f0..a05ff64 100644 (file)
@@ -707,9 +707,23 @@ mpegts_base_update_program (MpegTSBase * base, MpegTSBaseProgram * program,
   nbstreams = pmt->streams->len;
   for (i = 0; i < nbstreams; i++) {
     GstMpegtsPMTStream *stream = g_ptr_array_index (pmt->streams, i);
-    if (!_pmt_stream_in_program (program, stream))
+    if (!_pmt_stream_in_program (program, stream)) {
+#ifdef TIZEN_FEATURE_TSDEMUX_UPDATE_STREAM
+      if (G_UNLIKELY (MPEGTS_BIT_IS_SET (base->is_pes, stream->pid)))
+        GST_FIXME
+            ("Refcounting issue. Setting twice a PID (0x%04x) as known PES",
+            stream->pid);
+      if (G_UNLIKELY (MPEGTS_BIT_IS_SET (base->known_psi, stream->pid))) {
+        GST_FIXME
+            ("Refcounting issue. Setting a known PSI PID (0x%04x) as known PES",
+            stream->pid);
+        MPEGTS_BIT_UNSET (base->known_psi, stream->pid);
+      }
+      MPEGTS_BIT_SET (base->is_pes, stream->pid);
+#endif
       mpegts_base_program_add_stream (base, program, stream->pid,
           stream->stream_type, stream);
+    }
   }
 
   /* Call subclass update */
@@ -726,6 +740,9 @@ mpegts_base_update_program (MpegTSBase * base, MpegTSBaseProgram * program,
   for (tmp = toremove; tmp; tmp = tmp->next) {
     MpegTSBaseStream *stream = (MpegTSBaseStream *) tmp->data;
     mpegts_base_program_remove_stream (base, program, stream->pid);
+#ifdef TIZEN_FEATURE_TSDEMUX_UPDATE_STREAM
+    MPEGTS_BIT_UNSET (base->is_pes, stream->pid);
+#endif
   }
   return TRUE;
 }
@@ -1047,6 +1064,9 @@ mpegts_base_apply_pat (MpegTSBase * base, GstMpegtsSection * section)
               ("Refcounting issue. Setting twice a PMT PID (0x%04x) as know PSI",
               program->pmt_pid);
         MPEGTS_BIT_SET (base->known_psi, patp->network_or_program_map_PID);
+#ifdef TIZEN_FEATURE_TSDEMUX_UPDATE_PMT
+        MPEGTS_BIT_UNSET (base->is_pes, patp->network_or_program_map_PID);
+#endif
       }
     } else {
       /* Create a new program */
@@ -1372,6 +1392,11 @@ mpegts_base_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
   gboolean hard;
   MpegTSBase *base = GST_MPEGTS_BASE (parent);
   gboolean is_sticky = GST_EVENT_IS_STICKY (event);
+#ifdef TIZEN_FEATURE_TSDEMUX_MODIFICATION
+  GstStructure *structure = NULL;
+  GstCaps *caps = NULL;
+  gboolean caps_ret = FALSE;
+#endif
 
   GST_DEBUG_OBJECT (base, "Got event %s",
       gst_event_type_get_name (GST_EVENT_TYPE (event)));
@@ -1399,6 +1424,19 @@ mpegts_base_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
       break;
     case GST_EVENT_CAPS:
       /* FIXME, do something */
+#ifdef TIZEN_FEATURE_TSDEMUX_MODIFICATION
+      if (base->packetizer) {
+        gst_event_parse_caps (event, &caps);
+        GST_DEBUG_OBJECT (base, "got caps: %" GST_PTR_FORMAT, caps);
+
+        structure = gst_caps_get_structure (caps, 0);
+        caps_ret = gst_structure_get_boolean (structure, "is_live", &base->packetizer->is_live_stream);
+        if (caps_ret == FALSE)
+          base->packetizer->is_live_stream = TRUE;
+      } else {
+        GST_DEBUG_OBJECT (base, "base->packetizer pointer is NULL !!!");
+      }
+#endif
       gst_event_unref (event);
       break;
     case GST_EVENT_FLUSH_STOP:
index fe9ff2e..204818b 100644 (file)
@@ -282,6 +282,10 @@ mpegts_packetizer_init (MpegTSPacketizer2 * packetizer)
   packetizer->nb_seen_offsets = 0;
   packetizer->refoffset = -1;
   packetizer->last_in_time = GST_CLOCK_TIME_NONE;
+#ifdef TIZEN_FEATURE_TSDEMUX_MODIFICATION
+  packetizer->is_live_stream = FALSE;
+  packetizer->need_pmt_update = FALSE;
+#endif
   packetizer->pcr_discont_threshold = GST_SECOND;
   packetizer->last_pts = GST_CLOCK_TIME_NONE;
   packetizer->last_dts = GST_CLOCK_TIME_NONE;
@@ -607,6 +611,9 @@ mpegts_packetizer_clear (MpegTSPacketizer2 * packetizer)
   packetizer->last_in_time = GST_CLOCK_TIME_NONE;
   packetizer->last_pts = GST_CLOCK_TIME_NONE;
   packetizer->last_dts = GST_CLOCK_TIME_NONE;
+#ifdef TIZEN_FEATURE_TSDEMUX_MODIFICATION
+  packetizer->is_live_stream = FALSE;
+#endif
 
   pcrtable = packetizer->observations[packetizer->pcrtablelut[0x1fff]];
   if (pcrtable)
@@ -2258,6 +2265,9 @@ mpegts_packetizer_pts_to_ts (MpegTSPacketizer2 * packetizer,
 {
   GstClockTime res = GST_CLOCK_TIME_NONE;
   MpegTSPCR *pcrtable;
+#ifdef TIZEN_FEATURE_TSDEMUX_MODIFICATION
+  GstClockTime tmp;
+#endif
 
   PACKETIZER_GROUP_LOCK (packetizer);
   pcrtable = get_pcr_table (packetizer, pcr_pid);
@@ -2285,6 +2295,32 @@ mpegts_packetizer_pts_to_ts (MpegTSPacketizer2 * packetizer,
      * That being said, this will only happen for the small interval of time
      * where PTS/DTS are wrapping just before we see the first reset/wrap PCR
      */
+    /*
+     * For some HLS Live servers (e.g tvpstream.tvp.pl ) , we observe erronous PCR values.
+     * As a result , last_pcrtime comes faulty which causes PTS values not to be calculated at all and buffers are dropped.
+     * We are currently ignoring the check for handling the erronous server PCR case.
+     */
+#ifdef TIZEN_FEATURE_TSDEMUX_MODIFICATION
+    tmp = pcrtable->base_time + pcrtable->skew;
+    if (packetizer->is_live_stream) {
+      if (G_UNLIKELY (ABSDIFF (res, pcrtable->last_pcrtime) > 15 * GST_SECOND))
+        GST_WARNING
+            ("Live Stream : Server sending erronous PCR values : Recalculating!!");
+
+      if (tmp + res > pcrtable->base_pcrtime)
+        res += tmp - pcrtable->base_pcrtime;
+      else
+        res = GST_CLOCK_TIME_NONE;
+    } else {
+      if (G_UNLIKELY (ABSDIFF (res, pcrtable->last_pcrtime) > 15 * GST_SECOND))
+        GST_WARNING
+            ("VOD Stream : Server sending erronous PCR values : Maintaining old ts value !!!");
+      else if (tmp + res > pcrtable->base_pcrtime)
+        res += tmp - pcrtable->base_pcrtime;
+      else
+        res = GST_CLOCK_TIME_NONE;
+    }
+#else
     if (G_UNLIKELY (pcr_pid != 0x1fff &&
             ABSDIFF (res, pcrtable->last_pcrtime) > 15 * GST_SECOND))
       res = GST_CLOCK_TIME_NONE;
@@ -2295,6 +2331,7 @@ mpegts_packetizer_pts_to_ts (MpegTSPacketizer2 * packetizer,
       else
         res = GST_CLOCK_TIME_NONE;
     }
+#endif
   } else if (packetizer->calculate_offset && pcrtable->groups) {
     gint64 refpcr = G_MAXINT64, refpcroffset;
     PCROffsetGroup *group = pcrtable->current->group;
@@ -2587,3 +2624,22 @@ mpegts_packetizer_set_current_pcr_offset (MpegTSPacketizer2 * packetizer,
   }
   PACKETIZER_GROUP_UNLOCK (packetizer);
 }
+
+#ifdef TIZEN_FEATURE_TSDEMUX_INVALID_PCR_PID
+GstClockTime
+mpegts_packetizer_get_pcr_base_time (MpegTSPacketizer2 * packetizer,
+                                   guint16 pcr_pid)
+{
+  GstClockTime res = GST_CLOCK_TIME_NONE;
+  MpegTSPCR *pcrtable;
+
+  PACKETIZER_GROUP_LOCK (packetizer);
+  pcrtable = get_pcr_table (packetizer, pcr_pid);
+
+  if (GST_CLOCK_TIME_IS_VALID (pcrtable->base_time) && (pcr_pid != 0x1fff))
+    res = pcrtable->base_time;
+
+  PACKETIZER_GROUP_UNLOCK (packetizer);
+  return res;
+}
+#endif
index b2bfcfb..467413f 100644 (file)
@@ -1,7 +1,7 @@
 /*
- * mpegtspacketizer.h - 
+ * mpegtspacketizer.h -
  * Copyright (C) 2007 Alessandro Decina
- * 
+ *
  * Authors:
  *   Alessandro Decina <alessandro@nnva.org>
  *
@@ -278,6 +278,11 @@ struct _MpegTSPacketizer2 {
   /* Last inputted timestamp */
   GstClockTime last_in_time;
 
+#ifdef TIZEN_FEATURE_TSDEMUX_MODIFICATION
+  gboolean is_live_stream;
+  gboolean need_pmt_update;
+#endif
+
   /* offset to observations table */
   guint8 pcrtablelut[0x2000];
   MpegTSPCR *observations[MAX_PCR_OBS_CHANNELS];
@@ -317,8 +322,8 @@ typedef struct
 typedef struct
 {
   guint8 table_id;
-  /* the spec says sub_table_extension is the fourth and fifth byte of a 
-   * section when the section_syntax_indicator is set to a value of "1". If 
+  /* the spec says sub_table_extension is the fourth and fifth byte of a
+   * section when the section_syntax_indicator is set to a value of "1". If
    * section_syntax_indicator is 0, sub_table_extension will be set to 0 */
   guint16  subtable_extension;
   guint8   version_number;
@@ -380,6 +385,11 @@ mpegts_packetizer_set_reference_offset (MpegTSPacketizer2 * packetizer,
 G_GNUC_INTERNAL void
 mpegts_packetizer_set_pcr_discont_threshold (MpegTSPacketizer2 * packetizer,
                                        GstClockTime threshold);
+#ifdef TIZEN_FEATURE_TSDEMUX_INVALID_PCR_PID
+G_GNUC_INTERNAL GstClockTime
+mpegts_packetizer_get_pcr_base_time (MpegTSPacketizer2 * packetizer,
+                                   guint16 pcr_pid);
+#endif
 G_END_DECLS
 
 #endif /* GST_MPEGTS_PACKETIZER_H */
index d648faa..7b2750b 100644 (file)
@@ -94,6 +94,9 @@ static GQuark QUARK_OPCR;
 static GQuark QUARK_PTS;
 static GQuark QUARK_DTS;
 static GQuark QUARK_OFFSET;
+#ifdef TIZEN_FEATURE_HLS_WEBVTT
+static GQuark QUARK_BUFFER_PTS;
+#endif
 
 typedef enum
 {
@@ -351,6 +354,9 @@ _extra_init (void)
   QUARK_PTS = g_quark_from_string ("pts");
   QUARK_DTS = g_quark_from_string ("dts");
   QUARK_OFFSET = g_quark_from_string ("offset");
+#ifdef TIZEN_FEATURE_HLS_WEBVTT
+  QUARK_BUFFER_PTS = g_quark_from_string ("buffer_pts");
+#endif
 }
 
 #define gst_ts_demux_parent_class parent_class
@@ -449,6 +455,17 @@ gst_ts_demux_reset (MpegTSBase * base)
     gst_tag_list_unref (demux->global_tags);
     demux->global_tags = NULL;
   }
+#ifdef TIZEN_FEATURE_TSDEMUX_LANG_TAG
+  if (demux->pending_custom_event) {
+    gst_event_unref (demux->pending_custom_event);
+    demux->pending_custom_event = NULL;
+  }
+
+  if (demux->pending_language_tag) {
+    gst_tag_list_unref (demux->pending_language_tag);
+    demux->pending_language_tag = NULL;
+  }
+#endif
 
   if (demux->previous_program) {
     mpegts_base_deactivate_and_free_program (base, demux->previous_program);
@@ -1033,6 +1050,26 @@ push_event (MpegTSBase * base, GstEvent * event)
   }
 
   if (G_UNLIKELY (demux->program == NULL)) {
+#ifdef TIZEN_FEATURE_TSDEMUX_LANG_TAG
+    if (demux->global_tags) {
+      gchar *tag = NULL;
+      gst_tag_list_get_string (demux->global_tags, "language-code", &tag);
+      if (tag) {
+        demux->pending_language_tag =
+            gst_tag_list_new (GST_TAG_LANGUAGE_CODE, tag, NULL);
+        g_free (tag);
+      }
+    }
+
+    if (GST_EVENT_TYPE (event) == GST_EVENT_CUSTOM_DOWNSTREAM) {
+      const GstStructure *st = gst_event_get_structure (event);
+      if (gst_structure_has_name (st, "GstHLSMedia")) {
+        if (demux->pending_custom_event)
+          gst_event_unref (demux->pending_custom_event);
+        demux->pending_custom_event = gst_event_ref (event);
+      }
+    }
+#endif
     gst_event_unref (event);
     return early_ret;
   }
@@ -2068,7 +2105,12 @@ gst_ts_demux_update_program (MpegTSBase * base, MpegTSBaseProgram * program)
   /* Add all streams, then fire no-more-pads */
   for (tmp = program->stream_list; tmp; tmp = tmp->next) {
     TSDemuxStream *stream = (TSDemuxStream *) tmp->data;
+#ifdef TIZEN_FEATURE_TSDEMUX_UPDATE_STREAM
+    if (!stream->pad
+        || (stream->pad && !stream->active)) {
+#else
     if (!stream->pad) {
+#endif
       activate_pad_for_stream (demux, stream);
       if (stream->sparse) {
         /* force sending of pending sticky events which have been stored on the
@@ -2212,6 +2254,9 @@ gst_ts_demux_record_pts (GstTSDemux * demux, TSDemuxStream * stream,
     gst_structure_id_set (st,
         QUARK_PID, G_TYPE_UINT, bs->pid,
         QUARK_OFFSET, G_TYPE_UINT64, offset, QUARK_PTS, G_TYPE_UINT64, pts,
+#ifdef TIZEN_FEATURE_HLS_WEBVTT
+        QUARK_BUFFER_PTS, G_TYPE_UINT64, stream->pts,
+#endif
         NULL);
     gst_element_post_message (GST_ELEMENT_CAST (demux),
         gst_message_new_element (GST_OBJECT (demux), st));
@@ -2262,6 +2307,9 @@ check_pending_buffers (GstTSDemux * demux)
   GList *tmp;
   gboolean have_only_sparse = TRUE;
   gboolean exceeded_threshold = FALSE;
+#ifdef TIZEN_FEATURE_TSDEMUX_INVALID_PCR_PID
+  gboolean wrong_pcr_pid = FALSE;
+#endif
 
   /* 0. Do we only have sparse stream */
   for (tmp = demux->program->stream_list; tmp; tmp = tmp->next) {
@@ -2308,6 +2356,25 @@ check_pending_buffers (GstTSDemux * demux)
     if (!exceeded_threshold)
       return FALSE;
 
+#ifdef TIZEN_FEATURE_TSDEMUX_INVALID_PCR_PID
+    /* Checking PCR other pid */
+    for (int i = 0; i < demux->program->pmt->streams->len; ++i) {
+      GstMpegtsPMTStream *pmt_stream =
+          g_ptr_array_index (demux->program->pmt->streams, i);
+      if (pmt_stream->pid == demux->program->pcr_pid)
+        continue;
+      if (GST_CLOCK_TIME_IS_VALID (mpegts_packetizer_get_pcr_base_time
+              (MPEG_TS_BASE_PACKETIZER (demux), pmt_stream->pid))) {
+        GST_WARNING ("PCR_PID will update %x -> %x", demux->program->pcr_pid,
+            pmt_stream->pid);
+        demux->program->pcr_pid = pmt_stream->pid;
+        wrong_pcr_pid = TRUE;
+        break;
+      }
+    }
+    if (!wrong_pcr_pid)
+      return FALSE;
+#endif
     /* Except if we've exceed the maximum amount of pending buffers, in which
      * case we ignore PCR from now on */
     GST_DEBUG_OBJECT (demux,
@@ -2678,9 +2745,32 @@ push_new_segment:
       gst_pad_push_event (stream->pad,
           gst_event_new_tag (gst_tag_list_ref (demux->global_tags)));
     }
+#ifdef TIZEN_FEATURE_TSDEMUX_LANG_TAG
+    if (demux->pending_custom_event) {
+      GST_DEBUG_OBJECT (stream->pad, "Pushing custom event");
+      gst_pad_push_event (stream->pad, demux->pending_custom_event);
+      demux->pending_custom_event = NULL;
+    }
+#endif
 
     /* Push pending tags */
     if (stream->taglist) {
+#ifdef TIZEN_FEATURE_TSDEMUX_LANG_TAG
+      if (demux->pending_language_tag) {
+        gchar *audio_codec = NULL;
+        if (gst_tag_list_get_string (stream->taglist, GST_TAG_AUDIO_CODEC,
+                &audio_codec)) {
+          GST_DEBUG ("Sending pending language tags %" GST_PTR_FORMAT,
+              demux->pending_language_tag);
+          gst_pad_push_event (stream->pad,
+              gst_event_new_tag (gst_tag_list_ref
+                  (demux->pending_language_tag)));
+          g_free (audio_codec);
+          gst_tag_list_unref (demux->pending_language_tag);
+          demux->pending_language_tag = NULL;
+        }
+      }
+#endif
       GST_DEBUG_OBJECT (stream->pad, "Sending tags %" GST_PTR_FORMAT,
           stream->taglist);
       gst_pad_push_event (stream->pad, gst_event_new_tag (stream->taglist));
index dd0275a..e79df3d 100644 (file)
@@ -91,6 +91,11 @@ struct _GstTSDemux
   /* global taglist */
   GstTagList *global_tags;
 
+#ifdef TIZEN_FEATURE_TSDEMUX_LANG_TAG
+  GstTagList *pending_language_tag;
+  GstEvent *pending_custom_event;
+#endif
+
   /* Full stream duration */
   GstClockTime duration;
 
index d490033..fb03753 100644 (file)
@@ -334,11 +334,13 @@ static MXFEssenceElementWriter mxf_alaw_essence_element_writer = {
 void
 mxf_alaw_init (void)
 {
+  GstCaps *tmp = NULL;
   mxf_essence_element_handler_register (&mxf_alaw_essence_element_handler);
 
   mxf_alaw_essence_element_writer.pad_template =
       gst_pad_template_new ("alaw_audio_sink_%u", GST_PAD_SINK, GST_PAD_REQUEST,
-      gst_caps_from_string (ALAW_CAPS));
+      tmp = gst_caps_from_string (ALAW_CAPS));
+  gst_caps_unref (tmp);
   memcpy (&mxf_alaw_essence_element_writer.data_definition,
       mxf_metadata_track_identifier_get (MXF_METADATA_TRACK_SOUND_ESSENCE), 16);
   mxf_essence_element_writer_register (&mxf_alaw_essence_element_writer);
index 1b2c4bc..ab90349 100644 (file)
@@ -5831,6 +5831,8 @@ gst_mxf_demux_query (GstElement * element, GstQuery * query)
           gst_query_set_seeking (query, GST_FORMAT_TIME, TRUE, 0, -1);
         else
           gst_query_set_seeking (query, GST_FORMAT_TIME, FALSE, -1, -1);
+
+        gst_query_unref (peerquery);
       }
 
       break;
index dbfe349..eb6a40a 100644 (file)
@@ -264,14 +264,16 @@ static MXFEssenceElementWriter mxf_dv_dif_essence_element_writer = {
 void
 mxf_dv_dif_init (void)
 {
+  GstCaps *tmp = NULL;
   mxf_essence_element_handler_register (&mxf_dv_dif_essence_element_handler);
 
   mxf_dv_dif_essence_element_writer.pad_template =
       gst_pad_template_new ("dv_dif_video_sink_%u", GST_PAD_SINK,
       GST_PAD_REQUEST,
-      gst_caps_from_string ("video/x-dv, width = "
+      tmp = gst_caps_from_string ("video/x-dv, width = "
           GST_VIDEO_SIZE_RANGE ", height = " GST_VIDEO_SIZE_RANGE
           ", framerate = " GST_VIDEO_FPS_RANGE ", systemstream = true"));
+  gst_caps_unref (tmp);
   memcpy (&mxf_dv_dif_essence_element_writer.data_definition,
       mxf_metadata_track_identifier_get (MXF_METADATA_TRACK_PICTURE_ESSENCE),
       16);
index 5d084f2..0047bcb 100644 (file)
@@ -358,15 +358,17 @@ static MXFEssenceElementWriter mxf_jpeg2000_essence_element_writer = {
 void
 mxf_jpeg2000_init (void)
 {
+  GstCaps *tmp = NULL;
   mxf_essence_element_handler_register (&mxf_jpeg2000_essence_element_handler);
 
   mxf_jpeg2000_essence_element_writer.pad_template =
       gst_pad_template_new ("jpeg2000_video_sink_%u", GST_PAD_SINK,
       GST_PAD_REQUEST,
-      gst_caps_from_string ("image/x-jpc, width = "
+      tmp = gst_caps_from_string ("image/x-jpc, width = "
           GST_VIDEO_SIZE_RANGE ", height = " GST_VIDEO_SIZE_RANGE
           ", framerate = " GST_VIDEO_FPS_RANGE
           ", colorspace = (string) { \"sRGB\", \"sYUV\" }"));
+  gst_caps_unref (tmp);
   memcpy (&mxf_jpeg2000_essence_element_writer.data_definition,
       mxf_metadata_track_identifier_get (MXF_METADATA_TRACK_PICTURE_ESSENCE),
       16);
index d8b6664..1a71aa3 100644 (file)
@@ -21,7 +21,7 @@
  * Generic Container
  */
 
-/* TODO: 
+/* TODO:
  *   - Handle CDCI essence
  *   - Handle more formats with RGBA descriptor (4:4:4 / 4:4:4:4 YUV, RGB656, ...)
  *   - Handle all the dimensions and other properties in the picture
@@ -622,10 +622,11 @@ static MXFEssenceElementWriter mxf_up_essence_element_writer = {
 void
 mxf_up_init (void)
 {
+  GstCaps *tmp = NULL;
   mxf_essence_element_handler_register (&mxf_up_essence_element_handler);
   mxf_up_essence_element_writer.pad_template =
       gst_pad_template_new ("up_video_sink_%u", GST_PAD_SINK, GST_PAD_REQUEST,
-      gst_caps_from_string (GST_VIDEO_CAPS_MAKE ("RGB") "; "
+      tmp = gst_caps_from_string (GST_VIDEO_CAPS_MAKE ("RGB") "; "
           GST_VIDEO_CAPS_MAKE ("BGR") "; "
           GST_VIDEO_CAPS_MAKE ("RGBx") "; "
           GST_VIDEO_CAPS_MAKE ("xRGB") "; "
@@ -638,6 +639,7 @@ mxf_up_init (void)
           GST_VIDEO_CAPS_MAKE ("AYUV") "; "
           GST_VIDEO_CAPS_MAKE ("v308") "; "
           GST_VIDEO_CAPS_MAKE ("UYVY") "; " GST_VIDEO_CAPS_MAKE ("YUY2")));
+  gst_caps_unref (tmp);
 
   memcpy (&mxf_up_essence_element_writer.data_definition,
       mxf_metadata_track_identifier_get (MXF_METADATA_TRACK_PICTURE_ESSENCE),
index 76188a5..801a985 100644 (file)
@@ -277,13 +277,15 @@ static MXFEssenceElementWriter mxf_vc3_essence_element_writer = {
 void
 mxf_vc3_init (void)
 {
+  GstCaps *tmp = NULL;
   mxf_essence_element_handler_register (&mxf_vc3_essence_element_handler);
 
   mxf_vc3_essence_element_writer.pad_template =
       gst_pad_template_new ("vc3_video_sink_%u", GST_PAD_SINK, GST_PAD_REQUEST,
-      gst_caps_from_string ("video/x-dnxhd, width = " GST_VIDEO_SIZE_RANGE
+      tmp = gst_caps_from_string ("video/x-dnxhd, width = " GST_VIDEO_SIZE_RANGE
           ", height = " GST_VIDEO_SIZE_RANGE ", framerate = "
           GST_VIDEO_FPS_RANGE));
+  gst_caps_unref (tmp);
   memcpy (&mxf_vc3_essence_element_writer.data_definition,
       mxf_metadata_track_identifier_get (MXF_METADATA_TRACK_PICTURE_ESSENCE),
       16);
index 6b1c580..4b7fb88 100644 (file)
@@ -905,7 +905,7 @@ gst_sdp_demux_stream_configure_udp_sink (GstSDPDemux * demux,
     /* not very fatal, we just won't be able to send RTCP */
     GST_WARNING_OBJECT (demux, "could not get session RTCP pad");
   }
-
+  gst_object_unref(pad);
 
   return TRUE;
 
index e089505..8478ce1 100644 (file)
@@ -1361,6 +1361,7 @@ gst_avwait_asink_chain (GstPad * pad, GstObject * parent, GstBuffer * inbuf)
       self->must_send_end_message |= END_MESSAGE_AUDIO_PUSHED;
     } else {
       g_assert_not_reached ();
+      g_mutex_unlock (&self->mutex);
     }
     g_mutex_unlock (&self->mutex);
 
index 93e761b..5c59989 100644 (file)
@@ -60,7 +60,7 @@
  * terms of accuracy, schro's implementation has about 2-3 false positives
  * or false negatives per 100 scene changes.  This implementation has
  * about 5 per 100.  The threshold is tuned for minimum total false
- * positives or negatives, on the assumption that the badness of a 
+ * positives or negatives, on the assumption that the badness of a
  * false negative is the same as a false positive.
  *
  * This algorithm is pretty much at its limit for error rate.  I
@@ -119,13 +119,16 @@ static void
 gst_scene_change_class_init (GstSceneChangeClass * klass)
 {
   GstVideoFilterClass *video_filter_class = GST_VIDEO_FILTER_CLASS (klass);
+  GstCaps *tmp = NULL;
 
   gst_element_class_add_pad_template (GST_ELEMENT_CLASS (klass),
       gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
-          gst_caps_from_string (VIDEO_CAPS)));
+          tmp = gst_caps_from_string (VIDEO_CAPS)));
+  gst_caps_unref (tmp);
   gst_element_class_add_pad_template (GST_ELEMENT_CLASS (klass),
       gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
-          gst_caps_from_string (VIDEO_CAPS)));
+          tmp = gst_caps_from_string (VIDEO_CAPS)));
+  gst_caps_unref (tmp);
 
   gst_element_class_set_static_metadata (GST_ELEMENT_CLASS (klass),
       "Scene change detector",
index 9251c40..fc19cd5 100644 (file)
@@ -64,13 +64,16 @@ static void
 gst_video_diff_class_init (GstVideoDiffClass * klass)
 {
   GstVideoFilterClass *video_filter_class = GST_VIDEO_FILTER_CLASS (klass);
+  GstCaps *tmp = NULL;
 
   gst_element_class_add_pad_template (GST_ELEMENT_CLASS (klass),
       gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
-          gst_caps_from_string (VIDEO_SRC_CAPS)));
+          tmp = gst_caps_from_string (VIDEO_SRC_CAPS)));
+  gst_caps_unref (tmp);
   gst_element_class_add_pad_template (GST_ELEMENT_CLASS (klass),
       gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
-          gst_caps_from_string (VIDEO_SINK_CAPS)));
+          tmp = gst_caps_from_string (VIDEO_SINK_CAPS)));
+  gst_caps_unref (tmp);
 
   gst_element_class_set_static_metadata (GST_ELEMENT_CLASS (klass),
       "Video Diff", "Video/Filter",
index 6dbda1b..d1312d6 100644 (file)
@@ -1319,6 +1319,9 @@ gst_h264_parse_handle_frame (GstBaseParse * parse,
   GstH264NalUnit nalu;
   GstH264ParserResult pres;
   gint framesize;
+#ifdef TIZEN_FEATURE_H264PARSE_MODIFICATION
+  GstH264NalUnitType last_nal_type = GST_H264_NAL_UNKNOWN;
+#endif
 
   if (G_UNLIKELY (GST_BUFFER_FLAG_IS_SET (frame->buffer,
               GST_BUFFER_FLAG_DISCONT))) {
@@ -1413,6 +1416,9 @@ gst_h264_parse_handle_frame (GstBaseParse * parse,
       case GST_H264_PARSER_OK:
         GST_DEBUG_OBJECT (h264parse, "complete nal (offset, size): (%u, %u) ",
             nalu.offset, nalu.size);
+#ifdef TIZEN_FEATURE_H264PARSE_MODIFICATION
+        last_nal_type = nalu.type;
+#endif
         break;
       case GST_H264_PARSER_NO_NAL_END:
         /* In NAL alignment, assume the NAL is complete */
@@ -1448,6 +1454,15 @@ gst_h264_parse_handle_frame (GstBaseParse * parse,
             ("Error parsing H.264 stream"), ("Invalid H.264 stream"));
         goto invalid_stream;
       case GST_H264_PARSER_NO_NAL:
+#ifdef TIZEN_FEATURE_H264PARSE_MODIFICATION
+        if (last_nal_type == GST_H264_NAL_SEQ_END) {
+          GST_WARNING_OBJECT (h264parse, "No H.264 NAL unit found, but last "
+            "nal type is SEQ_END, So push remain buffer");
+          gst_buffer_unmap (buffer, &map);
+          gst_h264_parse_parse_frame (parse, frame);
+          return gst_base_parse_finish_frame (parse, frame, size);
+        }
+#endif
         GST_ELEMENT_ERROR (h264parse, STREAM, FORMAT,
             ("Error parsing H.264 stream"), ("No H.264 NAL unit found"));
         goto invalid_stream;
index 2b7606a..881e6f9 100644 (file)
@@ -116,13 +116,16 @@ gst_video_mark_class_init (GstSimpleVideoMarkClass * klass)
   GstBaseTransformClass *base_transform_class =
       GST_BASE_TRANSFORM_CLASS (klass);
   GstVideoFilterClass *video_filter_class = GST_VIDEO_FILTER_CLASS (klass);
+  GstCaps *tmp = NULL;
 
   gst_element_class_add_pad_template (GST_ELEMENT_CLASS (klass),
       gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
-          gst_caps_from_string (VIDEO_CAPS)));
+          tmp = gst_caps_from_string (VIDEO_CAPS)));
+  gst_caps_unref (tmp);
   gst_element_class_add_pad_template (GST_ELEMENT_CLASS (klass),
       gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
-          gst_caps_from_string (VIDEO_CAPS)));
+          tmp = gst_caps_from_string (VIDEO_CAPS)));
+  gst_caps_unref (tmp);
 
   gst_element_class_set_static_metadata (GST_ELEMENT_CLASS (klass),
       "Video marker", "Filter/Effect/Video",
index 99f814a..1ec610f 100644 (file)
@@ -94,14 +94,17 @@ static void
 gst_video_analyse_class_init (GstVideoAnalyseClass * klass)
 {
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GstCaps *tmp = NULL;
   GstVideoFilterClass *video_filter_class = GST_VIDEO_FILTER_CLASS (klass);
 
   gst_element_class_add_pad_template (GST_ELEMENT_CLASS (klass),
       gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
-          gst_caps_from_string (VIDEO_CAPS)));
+          tmp = gst_caps_from_string (VIDEO_CAPS)));
+  gst_caps_unref (tmp);
   gst_element_class_add_pad_template (GST_ELEMENT_CLASS (klass),
       gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
-          gst_caps_from_string (VIDEO_CAPS)));
+          tmp = gst_caps_from_string (VIDEO_CAPS)));
+  gst_caps_unref (tmp);
 
   gst_element_class_set_static_metadata (GST_ELEMENT_CLASS (klass),
       "Video analyser", "Filter/Analyzer/Video",
index 7cab556..6b32a4f 100644 (file)
@@ -421,6 +421,28 @@ if host_system == 'android'
   gnustl_dep = dependency('gnustl', required : false)
 endif
 
+# TIZEN BUILD OPTION
+cdata.set('TIZEN_FEATURE_ADAPTIVE_MODIFICATION', true)
+cdata.set('TIZEN_FEATURE_HLSDEMUX_PROPERTY', true)
+cdata.set('TIZEN_FEATURE_HLSDEMUX_EMPTY_VTT', true)
+cdata.set('TIZEN_FEATURE_HLSDEMUX_UPDATE_SEGMENT', true)
+cdata.set('TIZEN_FEATURE_HLSDEMUX_DISCONT_SEQUENCE', true)
+cdata.set('TIZEN_FEATURE_TSDEMUX_MODIFICATION', true)
+cdata.set('TIZEN_FEATURE_TSDEMUX_INVALID_PCR_PID', true)
+cdata.set('TIZEN_FEATURE_TSDEMUX_LANG_TAG', true)
+cdata.set('TIZEN_FEATURE_TSDEMUX_UPDATE_PMT', true)
+cdata.set('TIZEN_FEATURE_TSDEMUX_UPDATE_STREAM', true)
+cdata.set('TIZEN_FEATURE_HLS_WEBVTT', true)
+cdata.set('TIZEN_FEATURE_OALSINK_MODIFICATION', true)
+cdata.set('TIZEN_FEATURE_MPEGDEMUX_MODIFICATION', true)
+cdata.set('TIZEN_FEATURE_H264PARSE_MODIFICATION', true)
+cdata.set('TIZEN_FEATURE_AD', true)
+cdata.set('TIZEN_FEATURE_HLSDEMUX_LANG_TAG', true)
+cdata.set('TIZEN_FEATURE_HLSDEMUX_DISCONT', true)
+cdata.set('TIZEN_FEATURE_IMPORT_NETSIM', true)
+cdata.set('TIZEN_FEATURE_PITCH_AUDIO_META', true)
+# TIZEN BUILD OPTION end
+
 # Disable compiler warnings for unused variables and args if gst debug system is disabled
 if gst_dep.type_name() == 'internal'
   gst_debug_disabled = not subproject('gstreamer').get_variable('gst_debug')
index 893842d..29f5b2d 100644 (file)
@@ -214,3 +214,7 @@ option('package-origin', type : 'string', value : 'Unknown package origin', yiel
        description : 'package origin URL to use in plugins')
 option('doc', type : 'feature', value : 'auto', yield: true,
        description: 'Enable documentation.')
+
+# Tizen Options
+option('tv-profile', type : 'boolean', value : false,
+       description : 'tv-profile')
diff --git a/subprojects/gst-plugins-bad/po/gst-plugins-bad-1.0.pot b/subprojects/gst-plugins-bad/po/gst-plugins-bad-1.0.pot
new file mode 100644 (file)
index 0000000..1b6f434
--- /dev/null
@@ -0,0 +1,154 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the gst-plugins-bad-1.0 package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: gst-plugins-bad-1.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2021-09-23 01:34+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ext/curl/gstcurlhttpsrc.c:1439
+msgid "No URL set."
+msgstr ""
+
+#: ext/opencv/gsttemplatematch.cpp:189
+msgid "OpenCV failed to load template image"
+msgstr ""
+
+#: ext/resindvd/resindvdsrc.c:361
+msgid "Could not read title information for DVD."
+msgstr ""
+
+#: ext/resindvd/resindvdsrc.c:367
+#, c-format
+msgid "Failed to open DVD device '%s'."
+msgstr ""
+
+#: ext/resindvd/resindvdsrc.c:373
+msgid "Failed to set PGC based seeking."
+msgstr ""
+
+#: ext/resindvd/resindvdsrc.c:1164
+msgid ""
+"Could not read DVD. This may be because the DVD is encrypted and a DVD "
+"decryption library is not installed."
+msgstr ""
+
+#: ext/resindvd/resindvdsrc.c:1169 ext/resindvd/resindvdsrc.c:1178
+msgid "Could not read DVD."
+msgstr ""
+
+#: ext/smoothstreaming/gstmssdemux.c:430
+#: gst-libs/gst/adaptivedemux/gstadaptivedemux.c:735
+msgid "This file contains no playable streams."
+msgstr ""
+
+#: ext/sndfile/gstsfdec.c:771
+msgid "Could not open sndfile stream for reading."
+msgstr ""
+
+#: gst/asfmux/gstasfmux.c:1834
+msgid "Generated file has a larger preroll time than its streams duration"
+msgstr ""
+
+#: gst/camerabin2/camerabingeneral.c:167 gst/camerabin2/gstcamerabin2.c:1866
+#: gst/camerabin2/gstdigitalzoom.c:283 gst/camerabin2/gstviewfinderbin.c:275
+#, c-format
+msgid "Missing element '%s' - check your GStreamer installation."
+msgstr ""
+
+#: gst/camerabin2/gstcamerabin2.c:352
+msgid "File location is set to NULL, please set it to a valid filename"
+msgstr ""
+
+#: gst/camerabin2/gstwrappercamerabinsrc.c:587
+msgid "Digitalzoom element couldn't be created"
+msgstr ""
+
+#: gst/dvdspu/gstdvdspu.c:1044
+msgid "Subpicture format was not configured before data flow"
+msgstr ""
+
+#: gst-libs/gst/adaptivedemux/gstadaptivedemux.c:3626
+msgid "Failed to get fragment URL."
+msgstr ""
+
+#: gst-libs/gst/adaptivedemux/gstadaptivedemux.c:4013
+#, c-format
+msgid "Couldn't download fragments"
+msgstr ""
+
+#: gst-libs/gst/adaptivedemux/gstadaptivedemux.c:4102
+#: gst/mpegtsdemux/mpegtsbase.c:1693
+msgid "Internal data stream error."
+msgstr ""
+
+#: sys/dvb/gstdvbsrc.c:1597 sys/dvb/gstdvbsrc.c:1811
+#, c-format
+msgid "Device \"%s\" does not exist."
+msgstr ""
+
+#: sys/dvb/gstdvbsrc.c:1601
+#, c-format
+msgid "Could not open frontend device \"%s\"."
+msgstr ""
+
+#: sys/dvb/gstdvbsrc.c:1620
+#, c-format
+msgid "Could not get settings from frontend device \"%s\"."
+msgstr ""
+
+#: sys/dvb/gstdvbsrc.c:1637
+#, c-format
+msgid "Cannot enumerate delivery systems from frontend device \"%s\"."
+msgstr ""
+
+#: sys/dvb/gstdvbsrc.c:1815
+#, c-format
+msgid "Could not open file \"%s\" for reading."
+msgstr ""
+
+#: sys/dvb/parsechannels.c:410
+#, c-format
+msgid "Couldn't find channel configuration file"
+msgstr ""
+
+#: sys/dvb/parsechannels.c:413 sys/dvb/parsechannels.c:563
+#, c-format
+msgid "Couldn't load channel configuration file: '%s'"
+msgstr ""
+
+#: sys/dvb/parsechannels.c:421 sys/dvb/parsechannels.c:846
+#, c-format
+msgid "Couldn't find details for channel '%s'"
+msgstr ""
+
+#: sys/dvb/parsechannels.c:430
+#, c-format
+msgid "No properties for channel '%s'"
+msgstr ""
+
+#: sys/dvb/parsechannels.c:439
+#, c-format
+msgid "Failed to set properties for channel '%s'"
+msgstr ""
+
+#: sys/dvb/parsechannels.c:560
+#, c-format
+msgid "Couldn't find channel configuration file: '%s'"
+msgstr ""
+
+#: sys/dvb/parsechannels.c:570
+#, c-format
+msgid "Channel configuration file doesn't contain any channels"
+msgstr ""
index 9ada8d0..c1eb344 100644 (file)
@@ -165,7 +165,7 @@ gst_vtenc_base_init (GstVTEncClass * klass)
   const int min_fps_n = 0, max_fps_n = G_MAXINT;
   const int min_fps_d = 1, max_fps_d = 1;
   GstPadTemplate *sink_template, *src_template;
-  GstCaps *src_caps;
+  GstCaps *src_caps, *caps;
   gchar *longname, *description;
 
   longname = g_strdup_printf ("%s encoder", codec_details->name);
@@ -178,9 +178,11 @@ gst_vtenc_base_init (GstVTEncClass * klass)
   g_free (longname);
   g_free (description);
 
+  caps = gst_static_caps_get (&sink_caps);
   sink_template = gst_pad_template_new ("sink",
-      GST_PAD_SINK, GST_PAD_ALWAYS, gst_static_caps_get (&sink_caps));
+      GST_PAD_SINK, GST_PAD_ALWAYS, caps);
   gst_element_class_add_pad_template (element_class, sink_template);
+  gst_caps_unref (caps);
 
   src_caps = gst_caps_new_simple (codec_details->mimetype,
       "width", GST_TYPE_INT_RANGE, min_width, max_width,
index 40d1f9b..092f947 100644 (file)
@@ -280,6 +280,7 @@ gst_avdtp_src_getcaps (GstBaseSrc * bsrc, GstCaps * filter)
     } else {
       GST_ERROR_OBJECT (avdtpsrc,
           "Only SBC and MPEG-2/4 are supported at the moment");
+      return NULL;
     }
 
     value = gst_structure_get_value (structure, "rate");
index 2f4b400..17940bd 100644 (file)
@@ -114,8 +114,8 @@ static PreferredFilter preferred_wmv_filters[] = {
   {&CLSID_CWMVDecMediaObject, &DMOCATEGORY_VIDEO_DECODER}, {0}
 };
 
-static const GUID CLSID_AVI_DECOMPRESSOR = 
-  {0xCF49D4E0, 0x1115, 0x11CE, 
+static const GUID CLSID_AVI_DECOMPRESSOR =
+  {0xCF49D4E0, 0x1115, 0x11CE,
    {0xB0, 0x3A, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70}};
 static PreferredFilter preferred_cinepack_filters[] = {
   {&CLSID_AVI_DECOMPRESSOR}, {0}
@@ -132,8 +132,8 @@ static PreferredFilter preferred_mp4s_filters[] = {
 static PreferredFilter preferred_mp43_filters[] = {
   {&CLSID_CMpeg43DecMediaObject, &DMOCATEGORY_VIDEO_DECODER}, {0}};
 
-static const GUID CLSID_MPEG_VIDEO_DECODER = 
-  {0xFEB50740, 0x7BEF, 0x11CE, 
+static const GUID CLSID_MPEG_VIDEO_DECODER =
+  {0xFEB50740, 0x7BEF, 0x11CE,
    {0x9B, 0xD9, 0x00, 0x00, 0xE2, 0x02, 0x59, 0x9C}};
 static PreferredFilter preferred_mpeg1_filters[] = {
   {&CLSID_MPEG_VIDEO_DECODER}, {0}
@@ -240,7 +240,7 @@ static const VideoCodecEntry video_dec_codecs[] = {
    GUID_MEDIATYPE_VIDEO, GUID_MEDIASUBTYPE_YUY2,
    GST_VIDEO_CAPS_MAKE("YUY2"),
    preferred_mpeg1_filters},
-   
+
   {"dshowvdec_mpeg4", "MPEG-4 Video",
    GST_MAKE_FOURCC ('M', 'P', 'G', '4'),
    GUID_MEDIATYPE_VIDEO, GUID_MEDIASUBTYPE_MPG4,
@@ -328,7 +328,7 @@ HRESULT VideoFakeSink::DoRenderSample(IMediaSample *pMediaSample)
 
     gst_buffer_map(buf, &map, GST_MAP_WRITE);
     if (strstr (klass->entry->srccaps, "rgb")) {
-      /* FOR RGB directshow decoder will return bottom-up BITMAP 
+      /* FOR RGB directshow decoder will return bottom-up BITMAP
        * There is probably a way to get top-bottom video frames from
        * the decoder...
        */
@@ -390,7 +390,7 @@ gst_dshowvideodec_base_init (gpointer klass)
   description = g_strdup_printf ("DirectShow %s Decoder Wrapper",
       tmp->element_longname);
 
-  gst_element_class_set_metadata(element_class, longname, "Codec/Decoder/Video", description, 
+  gst_element_class_set_metadata(element_class, longname, "Codec/Decoder/Video", description,
     "Sebastien Moutte <sebastien@moutte.net>");
 
   g_free (longname);
@@ -788,7 +788,7 @@ gst_dshowvideodec_sink_setcaps (GstPad * pad, GstCaps * caps)
           "framerate", GST_TYPE_FRACTION, vdec->fps_n, vdec->fps_d, NULL);
   }
 
-  gst_caps_set_simple (caps_out, 
+  gst_caps_set_simple (caps_out,
       "pixel-aspect-ratio", GST_TYPE_FRACTION, vdec->par_n, vdec->par_d, NULL);
 
   if (!gst_pad_set_caps (vdec->srcpad, caps_out)) {
@@ -991,7 +991,7 @@ gst_dshowvideodec_src_getcaps (GstPad * pad)
       enum_mediatypes->Reset();
       while (hres =
           enum_mediatypes->Next(1, &mediatype, &fetched),
-          hres == S_OK) 
+          hres == S_OK)
       {
         VIDEOINFOHEADER *video_info;
         GstCaps *mediacaps = NULL;
@@ -1085,7 +1085,7 @@ gst_dshowvideodec_get_filter_output_format (GstDshowVideoDec * vdec,
     enum_mediatypes->Reset();
     while (hres =
         enum_mediatypes->Next(1, &mediatype, &fetched),
-        hres == S_OK) 
+        hres == S_OK)
     {
       if (IsEqualGUID (mediatype->subtype, subtype) &&
           IsEqualGUID (mediatype->formattype, FORMAT_VideoInfo))
index e85003a..a8646f8 100644 (file)
@@ -1,8 +1,8 @@
 /*
- * dvbbasebin.c - 
+ * dvbbasebin.c -
  * Copyright (C) 2007 Alessandro Decina
  * Copyright (C) 2014 Samsung Electronics. All rights reserved.
- * 
+ *
  * Authors:
  *   Alessandro Decina <alessandro.d@gmail.com>
  *   Reynaldo H. Verdejo Pinochet <reynaldo@osg.samsung.com>
@@ -760,6 +760,7 @@ dvb_base_bin_request_new_pad (GstElement * element,
   gst_object_unref (pad);
   g_free (pad_name);
   gst_element_add_pad (element, ghost);
+  gst_object_unref(pad);
 
   return ghost;
 }
index 1912479..9c35927 100644 (file)
@@ -2436,6 +2436,9 @@ ensure_v4l2src (GstUvcH264Src * self)
   return TRUE;
 
 error_remove:
+  if (v4l2_clock)
+    gst_object_unref (v4l2_clock);
+
   gst_element_set_state (self->v4l2_src, GST_STATE_NULL);
   gst_bin_remove (GST_BIN (self), self->v4l2_src);
 
index 1c61957..b357cc7 100644 (file)
@@ -882,6 +882,7 @@ run_pipeline (gpointer user_data)
     preview_caps = gst_caps_from_string (preview_caps_name);
     if (preview_caps) {
       g_object_set (camerabin, "preview-caps", preview_caps, NULL);
+      gst_caps_unref (preview_caps);
       GST_DEBUG ("Preview caps set");
     } else
       GST_DEBUG ("Preview caps set but could not create caps from string");
index b616aa2..d0dadaa 100644 (file)
 #include <gst/allocators/gstfdmemory.h>
 #include <gst/allocators/gstphysmemory.h>
 
+#ifdef USE_TBM
+#include <gst/allocators/gsttizenmemory.h>
+#include <gst/allocators/gsttizenbufferpool.h>
+#endif
+
 #endif /* __GST_ALLOCATORS_H__ */
 
diff --git a/subprojects/gst-plugins-base/gst-libs/gst/allocators/gsttizenbufferpool.c b/subprojects/gst-plugins-base/gst-libs/gst/allocators/gsttizenbufferpool.c
new file mode 100644 (file)
index 0000000..3212c2d
--- /dev/null
@@ -0,0 +1,342 @@
+/*
+ * GStreamer tizen buffer pool
+ * Copyright (c) 2018 Samsung Electronics Co., Ltd.
+ * Author: Sejun Park <sejun79.park@samsung.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gsttizenbufferpool.h"
+#include <tbm_surface_internal.h>
+
+GST_DEBUG_CATEGORY_STATIC (gst_tizen_vidbufpool_debug);
+#define GST_CAT_DEFAULT gst_tizen_vidbufpool_debug
+
+static GQuark gst_tizen_buffer_data_quark = 0;
+
+static void gst_tizen_buffer_pool_finalize (GObject * object);
+
+#define DEBUG_INIT \
+    GST_DEBUG_CATEGORY_INIT (gst_tizen_vidbufpool_debug, "tizenvideopool", 0, \
+    "Tizen bufferpool");
+
+#define gst_tizen_buffer_pool_parent_class parent_class
+G_DEFINE_TYPE_WITH_CODE (GstTizenBufferPool, gst_tizen_buffer_pool,
+    GST_TYPE_BUFFER_POOL, DEBUG_INIT);
+
+struct _GstTizenBufferPoolPrivate
+{
+  GstAllocator *allocator;
+};
+
+static const gchar **
+gst_tizen_buffer_pool_get_options (GstBufferPool * pool)
+{
+  static const gchar *options[] = { GST_BUFFER_POOL_OPTION_VIDEO_META,
+    GST_BUFFER_POOL_OPTION_TIZEN_META, NULL
+  };
+
+  return options;
+}
+
+static gboolean
+gst_tizen_buffer_pool_set_config (GstBufferPool * pool,
+    GstStructure * config)
+{
+  GstTizenBufferPool *_tpool = GST_TIZEN_BUFFER_POOL_CAST (pool);
+  GstVideoInfo info;
+  GstCaps *caps;
+  tbm_format format;
+  tbm_surface_h surface;
+  guint min_buffers, max_buffers;
+  int size;
+
+  if (!gst_buffer_pool_config_get_params (config, &caps, NULL, &min_buffers, &max_buffers))
+    goto wrong_config;
+
+  if (caps == NULL)
+    goto no_caps;
+
+  /* now parse the caps from the config */
+  if (!gst_video_info_from_caps (&info, caps))
+    goto wrong_caps;
+
+  if (GST_VIDEO_INFO_FORMAT (&info) == GST_VIDEO_FORMAT_UNKNOWN)
+    goto unknown_format;
+
+  _tpool->info = info;
+
+  format = gst_video_format_to_tbm_format (GST_VIDEO_INFO_FORMAT (&info));
+
+  surface = tbm_surface_create (GST_VIDEO_INFO_WIDTH (&info), GST_VIDEO_INFO_HEIGHT (&info), format);
+  size = tbm_surface_internal_get_size (surface);
+
+  tbm_surface_destroy (surface);
+
+  /* enable metadata based on config of the pool */
+  _tpool->add_videometa =  gst_buffer_pool_config_has_option (config,
+      GST_BUFFER_POOL_OPTION_VIDEO_META);
+
+  /* parse extra alignment info */
+  _tpool->add_tizenmeta = gst_buffer_pool_config_has_option (config,
+      GST_BUFFER_POOL_OPTION_TIZEN_META);
+
+  gst_buffer_pool_config_set_params (config, caps, size, min_buffers,
+      max_buffers);
+
+  GST_DEBUG_OBJECT (_tpool, "min : %u, max : %u, size : %d", min_buffers, max_buffers, size);
+  return GST_BUFFER_POOL_CLASS (parent_class)->set_config (pool, config);
+
+  /* ERRORS */
+wrong_config:
+  {
+    GST_WARNING_OBJECT (pool, "invalid config");
+    return FALSE;
+  }
+no_caps:
+  {
+    GST_WARNING_OBJECT (pool, "no caps in config");
+    return FALSE;
+  }
+wrong_caps:
+  {
+    GST_WARNING_OBJECT (pool,
+        "failed getting geometry from caps %" GST_PTR_FORMAT, caps);
+    return FALSE;
+  }
+unknown_format:
+  {
+    GST_WARNING_OBJECT (_tpool, "failed to get format from caps %"
+        GST_PTR_FORMAT, caps);
+    GST_ELEMENT_ERROR (_tpool, RESOURCE, WRITE,
+        ("Failed to create output image buffer of %dx%d pixels",
+            info.width, info.height),
+
+        ("Invalid input caps %" GST_PTR_FORMAT, caps));
+    return FALSE;
+  }
+}
+
+static void
+_destroy_tbm_surface (tbm_surface_h surface)
+{
+  GST_DEBUG ("destroy surface %p", surface);
+  tbm_surface_internal_destroy (surface);
+}
+
+/* This function handles GstBuffer creation */
+static GstFlowReturn
+gst_tizen_buffer_pool_alloc (GstBufferPool * pool, GstBuffer ** buffer,
+    GstBufferPoolAcquireParams * params)
+{
+  GstTizenBufferPool *_tpool = GST_TIZEN_BUFFER_POOL_CAST (pool);
+  GstVideoInfo *info;
+  GstBuffer *buf;
+  GstMemory *tizen_mem;
+  gsize offsets[4] = {0, };
+
+  GST_DEBUG_OBJECT (pool, "gst_tizen_buffer_pool_alloc");
+  info = &_tpool->info;
+
+  if (!(buf = gst_buffer_new ()))
+    goto no_buffer;
+
+  GST_DEBUG_OBJECT (pool, "buffer new :%dx%d : %p", GST_VIDEO_INFO_WIDTH (info), GST_VIDEO_INFO_HEIGHT (info), buf);
+  if (!(tizen_mem = gst_tizen_allocator_alloc ((GstAllocator *)_tpool->allocator, info)))
+    goto mem_create_failed;
+
+  gst_buffer_append_memory (buf, tizen_mem);
+
+  GST_DEBUG_OBJECT (pool, "mem allocated : %p, %dx%d n_plane : %d",
+      buf, GST_VIDEO_INFO_WIDTH (info), GST_VIDEO_INFO_HEIGHT (info), GST_VIDEO_INFO_N_PLANES (info));
+
+  if (_tpool->add_videometa) {
+    GstVideoMeta *vmeta;
+
+    GST_DEBUG_OBJECT (pool, "adding GstVideoMeta");
+    /* these are just the defaults for now */
+
+    vmeta = gst_buffer_add_video_meta_full (buf, GST_VIDEO_FRAME_FLAG_NONE,
+        GST_VIDEO_INFO_FORMAT (info),
+        GST_VIDEO_INFO_WIDTH (info),
+        GST_VIDEO_INFO_HEIGHT (info),
+        GST_VIDEO_INFO_N_PLANES (info), offsets, info->stride);
+
+    vmeta->map = gst_tizen_video_meta_map;
+    vmeta->unmap = gst_tizen_video_meta_unmap;
+  }
+
+  gst_mini_object_set_qdata (GST_MINI_OBJECT_CAST (buf),
+      gst_tizen_buffer_data_quark, gst_tizen_memory_get_surface (tizen_mem), (GDestroyNotify) _destroy_tbm_surface);
+
+  *buffer = buf;
+  g_ptr_array_add (_tpool->buffers, buf);
+  g_atomic_int_inc (&_tpool->current_buffer_index);
+  g_atomic_int_inc (&_tpool->outstandings);
+
+  return GST_FLOW_OK;
+
+  /* ERROR */
+no_buffer:
+  {
+    GST_WARNING_OBJECT (pool, "Couldn't create buffer");
+    return GST_FLOW_ERROR;
+  }
+
+mem_create_failed:
+  {
+    GST_WARNING_OBJECT (pool, "Couldn't create GstTizen Memory");
+    return GST_FLOW_ERROR;
+  }
+}
+
+
+static GstFlowReturn
+gst_tizen_buffer_pool_acquire_buffer (GstBufferPool * bpool, GstBuffer ** buffer,
+    GstBufferPoolAcquireParams * params)
+{
+  GstFlowReturn ret;
+  GstTizenBufferPool *_tpool = GST_TIZEN_BUFFER_POOL_CAST (bpool);
+  GstBufferPoolClass *pclass = GST_BUFFER_POOL_CLASS (parent_class);
+  gint i, n;
+
+  ret = pclass->acquire_buffer (bpool, buffer, params);
+  if (ret != GST_FLOW_OK) {
+    GST_WARNING_OBJECT (_tpool, "Couldn't acquire buffer");
+    return ret;
+  }
+
+  n = _tpool->buffers->len;
+  for (i = 0; i < n; i++) {
+    GstBuffer *tmp = g_ptr_array_index (_tpool->buffers, i);
+
+    if (tmp == *buffer)
+      break;
+  }
+  g_assert (i != n);
+  g_atomic_int_set(&_tpool->current_buffer_index, i);
+
+  GST_BUFFER_TIMESTAMP (*buffer) = GST_CLOCK_TIME_NONE;
+  GST_BUFFER_OFFSET (*buffer) = GST_BUFFER_OFFSET_NONE;
+  GST_BUFFER_OFFSET_END (*buffer) = GST_BUFFER_OFFSET_NONE;
+
+  g_atomic_int_inc (&_tpool->outstandings);
+
+  g_mutex_lock (&_tpool->lock);
+  _tpool->empty = FALSE;
+  g_mutex_unlock (&_tpool->lock);
+
+  GST_DEBUG_OBJECT (_tpool, "acquire buffer %p, current index %d, num_live_buffer %d", *buffer, i, _tpool->outstandings);
+
+  return GST_FLOW_OK;
+}
+
+static void
+gst_tizen_buffer_pool_release_buffer (GstBufferPool * bpool, GstBuffer * buffer)
+{
+  GstTizenBufferPool *_tpool = GST_TIZEN_BUFFER_POOL_CAST (bpool);
+
+  GST_BUFFER_POOL_CLASS (gst_tizen_buffer_pool_parent_class)->release_buffer (bpool, buffer);
+
+  if (g_atomic_int_dec_and_test(&_tpool->outstandings)) {
+    g_mutex_lock (&_tpool->lock);
+    _tpool->empty = TRUE;
+    g_mutex_unlock (&_tpool->lock);
+  }
+  GST_DEBUG_OBJECT (_tpool, "release buffer %p, outstandings %d", buffer, _tpool->outstandings);
+}
+
+static void
+gst_tizen_buffer_pool_free_buffer (GstBufferPool * bpool, GstBuffer * buffer)
+{
+  GstTizenBufferPool *_tpool = GST_TIZEN_BUFFER_POOL_CAST (bpool);
+  GST_DEBUG_OBJECT (_tpool, "free buffer %p, %d", buffer, _tpool->outstandings);
+
+  gst_mini_object_set_qdata (GST_MINI_OBJECT (buffer),
+      gst_tizen_buffer_data_quark, NULL, NULL);
+
+  GST_BUFFER_POOL_CLASS (gst_tizen_buffer_pool_parent_class)->free_buffer (bpool,
+      buffer);
+}
+
+static void
+gst_tizen_buffer_pool_dispose (GObject * object)
+{
+  GstTizenBufferPool *_tpool = GST_TIZEN_BUFFER_POOL_CAST (object);
+
+  if (_tpool->allocator) {
+    gst_object_unref (_tpool->allocator);
+    _tpool->allocator = NULL;
+  }
+
+  if (_tpool->buffers) {
+    g_ptr_array_unref (_tpool->buffers);
+    _tpool->buffers = NULL;
+  }
+
+  GST_DEBUG_OBJECT (_tpool, "dispose pool");
+  G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static void
+gst_tizen_buffer_pool_finalize (GObject * object)
+{
+  GstTizenBufferPool *pool = GST_TIZEN_BUFFER_POOL_CAST (object);
+
+
+  g_mutex_clear (&pool->lock);
+
+  G_OBJECT_CLASS (gst_tizen_buffer_pool_parent_class)->finalize (object);
+}
+
+static void
+gst_tizen_buffer_pool_init (GstTizenBufferPool * pool)
+{
+  g_mutex_init (&pool->lock);
+  pool->priv = gst_tizen_buffer_pool_get_instance_private (pool);
+  pool->buffers = g_ptr_array_new ();
+  pool->allocator = gst_tizen_allocator_new ();
+  g_atomic_int_set(&pool->outstandings, 0);
+  GST_LOG_OBJECT (pool, "Tizen buffer pool init %p", pool);
+}
+
+static void
+gst_tizen_buffer_pool_class_init (GstTizenBufferPoolClass * klass)
+{
+  GObjectClass *gobject_class = (GObjectClass *) klass;
+  GstBufferPoolClass *gstbufferpool_class = (GstBufferPoolClass *) klass;
+
+  gst_tizen_buffer_data_quark = g_quark_from_static_string ("GstTizenBufferData");
+
+  gobject_class->dispose = gst_tizen_buffer_pool_dispose;
+  gobject_class->finalize = gst_tizen_buffer_pool_finalize;
+
+  gstbufferpool_class->get_options = gst_tizen_buffer_pool_get_options;
+  gstbufferpool_class->set_config = gst_tizen_buffer_pool_set_config;
+  gstbufferpool_class->alloc_buffer = gst_tizen_buffer_pool_alloc;
+  gstbufferpool_class->free_buffer = gst_tizen_buffer_pool_free_buffer;
+  gstbufferpool_class->acquire_buffer = gst_tizen_buffer_pool_acquire_buffer;
+  gstbufferpool_class->release_buffer = gst_tizen_buffer_pool_release_buffer;
+}
+
+GstBufferPool *
+gst_tizen_buffer_pool_new (void)
+{
+  return GST_BUFFER_POOL_CAST (g_object_new (GST_TYPE_TIZEN_BUFFER_POOL, NULL));
+}
diff --git a/subprojects/gst-plugins-base/gst-libs/gst/allocators/gsttizenbufferpool.h b/subprojects/gst-plugins-base/gst-libs/gst/allocators/gsttizenbufferpool.h
new file mode 100644 (file)
index 0000000..8734df1
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+ * GStreamer tizen buffer pool
+ * Copyright (c) 2018 Samsung Electronics Co., Ltd.
+ * Author: Sejun Park <sejun79.park@samsung.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _GST_TIZEN_BUFFERPOOL_H_
+#define _GST_TIZEN_BUFFERPOOL_H_
+
+#include <gst/gst.h>
+#include <gst/video/video.h>
+#include <gst/video/gstvideometa.h>
+#include <gst/video/gstvideopool.h>
+#include <gst/allocators/gsttizenmemory.h>
+
+G_BEGIN_DECLS
+
+/**
+ * GST_BUFFER_POOL_OPTION_TIZEN_META:
+ *
+ * An option that can be activated on bufferpool to request TizenVideo metadata
+ * on buffers from the pool.
+ */
+#define GST_BUFFER_POOL_OPTION_TIZEN_META "GstBufferPoolOptionTizenVideoMeta"
+
+typedef struct _GstTizenBufferPool GstTizenBufferPool;
+typedef struct _GstTizenBufferPoolClass GstTizenBufferPoolClass;
+typedef struct _GstTizenBufferPoolPrivate GstTizenBufferPoolPrivate;
+
+/* buffer pool functions */
+#define GST_TYPE_TIZEN_BUFFER_POOL      (gst_tizen_buffer_pool_get_type())
+#define GST_IS_TIZEN_BUFFER_POOL(obj)   (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TIZEN_BUFFER_POOL))
+#define GST_TIZEN_BUFFER_POOL(obj)      (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TIZEN_BUFFER_POOL, GstTizenBufferPool))
+#define GST_TIZEN_BUFFER_POOL_CAST(obj) ((GstTizenBufferPool*)(obj))
+
+struct _GstTizenBufferPool
+{
+  GstBufferPool bufferpool;
+
+  GstAllocator *allocator;
+  GstVideoInfo  info;
+
+  gboolean      add_videometa;
+  gboolean      add_tizenmeta;
+
+  GMutex       lock;
+
+  GPtrArray    *buffers;
+  gint         current_buffer_index;
+  gint         outstandings;
+  gboolean     empty;
+
+  GstTizenBufferPoolPrivate *priv;
+};
+
+struct _GstTizenBufferPoolClass
+{
+  GstBufferPoolClass parent_class;
+};
+
+GST_ALLOCATORS_API
+GType gst_tizen_buffer_pool_get_type (void);
+
+GST_ALLOCATORS_API
+GstBufferPool *gst_tizen_buffer_pool_new (void);
+
+
+G_END_DECLS
+
+#endif /* _GST_TIZEN_BUFFER_POOL_H_ */
diff --git a/subprojects/gst-plugins-base/gst-libs/gst/allocators/gsttizenmemory.c b/subprojects/gst-plugins-base/gst-libs/gst/allocators/gsttizenmemory.c
new file mode 100644 (file)
index 0000000..efbb62a
--- /dev/null
@@ -0,0 +1,574 @@
+/*
+ * GStreamer tizen memory
+ * Copyright (c) 2018 Samsung Electronics Co., Ltd.
+ * Author: Sejun Park <sejun79.park@samsung.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "string.h"
+#include "gstdmabuf.h"
+#include "gsttizenmemory.h"
+#include <tbm_surface_internal.h>
+
+#define GST_TIZEN_ALLOCATOR_NAME "TizenVideoMemory"
+
+GST_DEBUG_CATEGORY_STATIC (gst_tizenmemory_debug);
+#define GST_CAT_DEFAULT gst_tizenmemory_debug
+
+#define parent_class gst_tizen_allocator_parent_class
+G_DEFINE_TYPE_WITH_CODE (GstTizenAllocator, gst_tizen_allocator, GST_TYPE_ALLOCATOR,
+    G_ADD_PRIVATE (GstTizenAllocator);
+    GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "tizenmemory", 0,
+        "GstTizenMemory and GstTizenAllocator"));
+
+typedef struct
+{
+  tbm_format format;
+  GstVideoFormat vformat;    /* Gst video format */
+  GstVideoFormat nformat;    /* Gst native video format */
+} GstTizenBufferFormats;
+
+static void cached_tizen_disposed_cb (GstTizenAllocator * allocator, GstMiniObject *obj);
+
+GstTizenBufferFormats yuv_formats[] = {
+    {TBM_FORMAT_YUV420, GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_S420},
+    {TBM_FORMAT_NV21, GST_VIDEO_FORMAT_NV21, GST_VIDEO_FORMAT_SN21},
+    {TBM_FORMAT_NV12, GST_VIDEO_FORMAT_NV12, GST_VIDEO_FORMAT_SN12},
+    {TBM_FORMAT_ARGB8888, GST_VIDEO_FORMAT_ARGB, GST_VIDEO_FORMAT_SR32}
+};
+
+/**
+ * gst_video_format_to_tbm_format: (skip)
+ * @format: a #GstVideoFormat to be converted
+ *
+ * Return: a #tbm_format which is converted from @format.
+ */
+tbm_format
+gst_video_format_to_tbm_format (GstVideoFormat format)
+{
+  gint i;
+
+  for (i = 0; i < G_N_ELEMENTS (yuv_formats); i++) {
+    if (yuv_formats[i].nformat == format)
+      return yuv_formats[i].format;
+  }
+  return -1;
+}
+
+static GstTizenMemory *
+_tizen_video_mem_new (GstAllocator * allocator, GstMemory * parent, GstVideoInfo * vinfo,
+    tbm_surface_h surface, gpointer user_data, GDestroyNotify notify)
+{
+  gint width, height;
+  GstTizenMemory *tmem;
+  tbm_surface_info_s sinfo;
+  tbm_format format;
+  gint i;
+
+  tmem = g_slice_new0 (GstTizenMemory);
+
+  /* Creates the tbm_surface with buffer objects. */
+  if (surface) {
+    tbm_surface_internal_ref (surface);
+    tmem->surface = surface;
+  } else {
+    width = GST_VIDEO_INFO_WIDTH (vinfo);
+    height = GST_VIDEO_INFO_HEIGHT (vinfo);
+    format = gst_video_format_to_tbm_format (GST_VIDEO_INFO_FORMAT (vinfo));
+    tmem->surface = tbm_surface_internal_create_with_flags (width, height, format, TBM_BO_NONCACHABLE);
+  }
+
+  if (!tbm_surface_internal_is_valid (tmem->surface)) {
+    GST_ERROR ("Invalid tbm surface");
+    goto failed;
+  }
+
+  tbm_surface_get_info (tmem->surface, &sinfo);
+
+  for (i = 0; i < sinfo.num_planes; i++) {
+    GST_VIDEO_INFO_PLANE_STRIDE (vinfo, i) = sinfo.planes[i].stride;
+    GST_VIDEO_INFO_PLANE_OFFSET (vinfo, i) = sinfo.planes[i].offset;
+    GST_DEBUG ("tbm surface plane[%d] %p", i, sinfo.planes[i].ptr);
+  }
+  GST_VIDEO_INFO_SIZE (vinfo) = sinfo.size;
+
+  gst_memory_init (GST_MEMORY_CAST (tmem), GST_MEMORY_FLAG_NO_SHARE,
+    allocator, parent, GST_VIDEO_INFO_SIZE (vinfo), 0, 0,
+    GST_VIDEO_INFO_SIZE (vinfo));
+
+  tmem->info = gst_video_info_copy (vinfo);
+  tmem->notify = notify;
+  tmem->user_data = user_data;
+  g_mutex_init (&tmem->lock);
+
+  GST_DEBUG ("%p: surface: %p size %" G_GSIZE_FORMAT, tmem, tmem->surface,
+      tmem->mem.maxsize);
+
+  return tmem;
+
+  /* ERRORS */
+failed:
+  {
+    GST_ERROR ("Failed to create tbm surface");
+    g_slice_free (GstTizenMemory, tmem);
+    return NULL;
+  }
+}
+
+static void
+gst_tizen_mem_free (GstAllocator * allocator, GstMemory * mem)
+{
+  GstTizenMemory *tmem = (GstTizenMemory *) mem;
+
+  tbm_surface_internal_unref (tmem->surface);
+  GST_DEBUG ("free surface from mem : %p", tmem->surface);
+
+  if (tmem->notify)
+    tmem->notify (tmem->user_data);
+
+  gst_video_info_free (tmem->info);
+  g_mutex_clear (&tmem->lock);
+  g_slice_free (GstTizenMemory, tmem);
+}
+
+static gpointer
+gst_tizen_mem_map (GstMemory * gmem, gsize maxsize, GstMapFlags flags)
+{
+  int err;
+  GstTizenMemory *tmem;
+  tbm_surface_info_s info;
+  gpointer data;
+
+  tmem = (GstTizenMemory *)gmem;
+  g_mutex_lock (&tmem->lock);
+
+  err = tbm_surface_map (tmem->surface, TBM_SURF_OPTION_WRITE|TBM_SURF_OPTION_READ, &info);
+  if (err == TBM_SURFACE_ERROR_NONE) {
+    data = info.planes[0].ptr;
+  } else {
+    GST_ERROR ("failed to get surface info");
+    data = NULL;
+    goto done;
+  }
+
+done:
+  g_mutex_unlock (&tmem->lock);
+
+  return data;
+}
+
+static void
+gst_tizen_mem_unmap (GstMemory * gmem)
+{
+  GstTizenMemory *tmem;
+
+  tmem = (GstTizenMemory *)gmem;
+
+  g_mutex_lock (&tmem->lock);
+  tbm_surface_unmap (tmem->surface);
+  g_mutex_unlock (&tmem->lock);
+}
+
+static void
+gst_tizen_allocator_finalize (GObject *obj)
+{
+  GstTizenAllocator *allocator;
+  GList *iter;
+
+  allocator = GST_TIZEN_ALLOCATOR (obj);
+
+  iter = allocator->priv->mem_cache;
+
+  while (iter) {
+    GstMiniObject *obj = iter->data;
+        gst_mini_object_weak_unref (obj,
+        (GstMiniObjectNotify) cached_tizen_disposed_cb, allocator);
+
+    gst_mini_object_set_qdata (obj,
+    g_quark_from_static_string ("tizenmem"), NULL, NULL);
+    iter = iter->next;
+  }
+
+  g_list_free (allocator->priv->mem_cache);
+  allocator->priv->mem_cache = NULL;
+
+  G_OBJECT_CLASS (parent_class)->finalize (obj);
+}
+
+static GstMemory *
+gst_tizen_mem_share (GstMemory * gmem, gssize offset, gssize size)
+{
+  return NULL;
+}
+
+static GstMemory *
+gst_tizen_mem_copy (GstMemory * gmem, gssize offset, gsize size)
+{
+  gint i;
+  GstMemory *copy;
+  GstTizenMemory *tmem;
+  tbm_surface_h new_surface, old_surface;
+  tbm_format format;
+  tbm_surface_info_s old_surface_info;
+  tbm_surface_info_s new_surface_info;
+
+  tmem = (GstTizenMemory *) gmem;
+
+  GST_DEBUG ("copy memory %p, offset %d, size : %u", tmem, offset, size);
+
+  old_surface = tmem->surface;
+  format = tbm_surface_get_format (old_surface);
+
+  copy = gst_tizen_allocator_alloc (gmem->allocator, tmem->info);
+  new_surface = gst_tizen_memory_get_surface (copy);
+
+  tbm_surface_get_info (old_surface, &old_surface_info);
+  tbm_surface_get_info (new_surface, &new_surface_info);
+
+  for (i = 0; i < tbm_surface_internal_get_num_planes (format); i++) {
+    memcpy (new_surface_info.planes[i].ptr,
+        old_surface_info.planes[i].ptr, new_surface_info.planes[i].size);
+  }
+
+  return copy;
+}
+
+static void
+gst_tizen_allocator_class_init (GstTizenAllocatorClass * klass)
+{
+  GObjectClass *object_class;
+  GstAllocatorClass *allocator_class;
+
+  allocator_class = GST_ALLOCATOR_CLASS (klass);
+  object_class = G_OBJECT_CLASS (klass);
+
+  allocator_class->alloc = NULL;
+  allocator_class->free = gst_tizen_mem_free;
+
+  object_class->finalize = gst_tizen_allocator_finalize;
+}
+
+static void
+gst_tizen_allocator_init (GstTizenAllocator * allocator)
+{
+  GstAllocator *alloc = GST_ALLOCATOR_CAST (allocator);
+
+  allocator->priv = gst_tizen_allocator_get_instance_private (allocator);
+  alloc->mem_type = GST_TIZEN_MEMORY_TYPE;
+  alloc->mem_map = (GstMemoryMapFunction) gst_tizen_mem_map;
+  alloc->mem_unmap = (GstMemoryUnmapFunction) gst_tizen_mem_unmap;
+  alloc->mem_share = (GstMemoryShareFunction) gst_tizen_mem_share;
+  alloc->mem_copy = (GstMemoryCopyFunction) gst_tizen_mem_copy;
+
+  GST_OBJECT_FLAG_SET (allocator, GST_ALLOCATOR_FLAG_CUSTOM_ALLOC);
+}
+
+/**
+ * gst_tizen_allocator_new:
+ *
+ * Return a new tizen allocator.
+ *
+ * Returns: (transfer full): a new fd allocator, or NULL if the allocator
+ *    isn't available. Use gst_object_unref() to release the allocator after
+ *    usage
+ *
+ */
+GstAllocator *
+gst_tizen_allocator_new (void)
+{
+  return g_object_new (GST_TYPE_TIZEN_ALLOCATOR, NULL);
+}
+
+/**
+ * gst_tizen_allocator_alloc:
+ * @allocator: a #GstAllocator to use
+ * @vinfo: a #GstVideoInfo to be refered for size and type of allocated memory
+ *
+ * Returns: (transfer full) (nullable): a new #GstMemory.
+ */
+GstMemory *
+gst_tizen_allocator_alloc (GstAllocator * allocator, GstVideoInfo * vinfo)
+{
+  g_return_val_if_fail (GST_IS_TIZEN_ALLOCATOR (allocator), NULL);
+
+  return (GstMemory *)_tizen_video_mem_new (allocator, NULL, vinfo, NULL, NULL, NULL);
+}
+
+/**
+ * gst_tizen_allocator_alloc_surface: (skip)
+ * @allocator: a #GstAllocator to use
+ * @vinfo: a #GstVideoInfo to be refered for memory size and type
+ * @surface: a #tbm_surface_h to be used for allocated memory
+ * @user_data: (allow-none): user data pointer
+ * @notify: (allow-none) (closure user_data): called with @user_data when the memory is freed
+ *
+ * Returns: (transfer full) (nullable): a new #GstMemory.
+ */
+GstMemory *
+gst_tizen_allocator_alloc_surface (GstAllocator * allocator, GstVideoInfo * vinfo,
+    tbm_surface_h surface, gpointer user_data, GDestroyNotify notify)
+{
+  g_return_val_if_fail (GST_IS_TIZEN_ALLOCATOR (allocator), NULL);
+
+  return (GstMemory *)_tizen_video_mem_new (allocator, NULL, vinfo, surface, user_data, notify);
+}
+
+gboolean
+gst_is_tizen_memory (GstMemory * mem)
+{
+  g_return_val_if_fail (mem != NULL, FALSE);
+
+  return GST_IS_TIZEN_ALLOCATOR (mem->allocator);
+}
+
+gint
+gst_tizen_memory_get_num_bos (GstMemory *mem)
+{
+  GstTizenMemory *tmem;
+
+  g_return_val_if_fail (mem != NULL, -1);
+  g_return_val_if_fail (GST_IS_TIZEN_ALLOCATOR (mem->allocator), -1);
+
+  tmem = (GstTizenMemory *)mem;
+
+  return (gint) tbm_surface_internal_get_num_bos (tmem->surface);
+}
+
+void *
+gst_tizen_memory_get_bos (GstMemory * mem, gint bo_idx)
+{
+  gint bo_num;
+  GstTizenMemory *tmem;
+
+  g_return_val_if_fail (mem != NULL, NULL);
+  g_return_val_if_fail (GST_IS_TIZEN_ALLOCATOR (mem->allocator), NULL);
+
+  tmem = (GstTizenMemory *)mem;
+
+  bo_num = tbm_surface_internal_get_num_bos(tmem->surface);
+
+  if (bo_idx > bo_num) {
+    GST_ERROR ("Failed to set set bo_idx");
+    return NULL;
+  }
+
+  return tbm_surface_internal_get_bo(tmem->surface, bo_idx);
+}
+
+void *
+gst_tizen_memory_get_surface (GstMemory * mem)
+{
+  GstTizenMemory *tmem;
+
+  g_return_val_if_fail (mem != NULL, NULL);
+  g_return_val_if_fail (GST_IS_TIZEN_ALLOCATOR (mem->allocator), NULL);
+
+  tmem = (GstTizenMemory *)mem;
+
+  return tmem->surface;
+}
+
+static void
+cached_tizen_disposed_cb (GstTizenAllocator * allocator, GstMiniObject *obj)
+{
+  allocator->priv->mem_cache = g_list_remove (allocator->priv->mem_cache, obj);
+}
+
+GstMemory *
+gst_tizen_allocator_dmabuf_export (GstAllocator * allocator, GstMemory * _tmem, int bo_idx)
+{
+  GstTizenMemory *tmem = (GstTizenMemory *) _tmem;
+  GstTizenAllocator *tallocator = GST_TIZEN_ALLOCATOR (allocator);
+  GstMemory * mem;
+  gint fd;
+  tbm_bo bo;
+
+  g_return_val_if_fail (tmem->surface != NULL, NULL);
+
+  bo = tbm_surface_internal_get_bo (tmem->surface, bo_idx);
+  fd = tbm_bo_export_fd (bo);
+
+  tallocator->priv->dmabuf_alloc = gst_dmabuf_allocator_new ();
+
+  mem = gst_dmabuf_allocator_alloc (tallocator->priv->dmabuf_alloc, fd,
+      gst_memory_get_sizes (_tmem, NULL, NULL));
+
+  /* cache */
+  gst_mini_object_weak_ref (GST_MINI_OBJECT (mem),
+      (GstMiniObjectNotify) cached_tizen_disposed_cb, tallocator);
+
+  tallocator->priv->mem_cache = g_list_prepend (tallocator->priv->mem_cache, mem);
+
+  gst_mini_object_set_qdata (GST_MINI_OBJECT (mem),
+      g_quark_from_static_string ("_tmem"), _tmem,
+      (GDestroyNotify) gst_memory_unref);
+  return mem;
+}
+
+/**
+ * gst_tizen_allocator_dmabuf_import: (skip)
+ * @allocator: a #GstAllocator to use
+ * @fds: fd array to be imported to #GstTizenMemory
+ * @planes: a number of planes
+ * @offsets: offset array
+ * @vinfo: a #GstVideoInfo to be refered
+ *
+ * Returns: (transfer full) (nullable): a new #GstTizenMemory.
+ */
+GstTizenMemory *
+gst_tizen_allocator_dmabuf_import (GstAllocator * allocator, gint * fds, gint planes, gsize offsets[4], GstVideoInfo * vinfo)
+{
+  GstTizenMemory *tmem;
+  GstMemory *mem;
+
+  tmem = g_slice_new0 (GstTizenMemory);
+
+  mem = GST_MEMORY_CAST (tmem);
+
+  gst_memory_init (mem, GST_MEMORY_FLAG_NO_SHARE, allocator, NULL,
+      GST_VIDEO_INFO_SIZE (vinfo), 0, 0, GST_VIDEO_INFO_SIZE (vinfo));
+
+  return NULL;
+}
+
+/**
+ * gst_tizen_video_meta_map:
+ * @meta: a #GstVideoMeta
+ * @plane: a plane
+ * @info: a #GstMapInfo
+ * @data: (out): the data of @plane
+ * @stride: (out): the stride of @plane
+ * @flags: @GstMapFlags
+ *
+ * Returns: TRUE if the map operation was successful.
+ */
+gboolean
+gst_tizen_video_meta_map (GstVideoMeta * meta, guint plane, GstMapInfo * info,
+    gpointer * data, gint * stride, GstMapFlags flags)
+{
+  int tbm_ret = TBM_SURFACE_ERROR_NONE;
+  gboolean mapped = FALSE;
+  GstBuffer *buffer = meta->buffer;
+  GstTizenMemory *vmem =
+      (GstTizenMemory *) gst_buffer_get_memory (buffer, 0);
+
+  g_return_val_if_fail (GST_IS_TIZEN_ALLOCATOR (((GstMemory *) vmem)->allocator), FALSE);
+
+  g_mutex_lock (&vmem->lock);
+
+  if (vmem->video_memory_map[plane]) {
+    GST_ERROR ("[%p] plane [%d] is already mapped", buffer, plane);
+    goto _VIDEO_MEMORY_MAP_DONE;
+  }
+
+  if (vmem->video_memory_map_count == 0) {
+    tbm_ret = tbm_surface_map (vmem->surface,
+      TBM_SURF_OPTION_WRITE | TBM_SURF_OPTION_READ,
+      &vmem->surface_info);
+    if (tbm_ret != TBM_SURFACE_ERROR_NONE) {
+      GST_ERROR ("[%p] tbm_surface_map for %p failed, 0x%x", buffer, vmem->surface, tbm_ret);
+      goto _VIDEO_MEMORY_MAP_DONE;
+    }
+  }
+
+  if (plane >= vmem->surface_info.num_planes) {
+    GST_ERROR ("[%p] invalid plane index %d (num plane %d)",
+      buffer, plane, vmem->surface_info.num_planes);
+
+    if (vmem->video_memory_map_count == 0) {
+      GST_ERROR ("[%p] unmap surface %p", buffer, vmem->surface);
+      tbm_surface_unmap (vmem->surface);
+    }
+
+    goto _VIDEO_MEMORY_MAP_DONE;
+  }
+
+  *data = vmem->surface_info.planes[plane].ptr;
+  *stride = vmem->surface_info.planes[plane].stride;
+
+  vmem->video_memory_map[plane] = TRUE;
+  vmem->video_memory_map_count++;
+
+  /* set map flags */
+  info->flags = flags;
+
+  GST_DEBUG ("[%p] mapped plane %d, data %p, stride %d, flags 0x%x",
+    buffer, plane, *data, *stride, info->flags);
+
+  mapped = TRUE;
+
+_VIDEO_MEMORY_MAP_DONE:
+  g_mutex_unlock (&vmem->lock);
+
+  return mapped;
+}
+
+/**
+ * gst_tizen_video_meta_unmap:
+ * @meta: a #GstVideoMeta
+ * @plane: a plane
+ * @info: a #GstMapInfo
+ *
+ * Returns: TRUE if the memory was successfully unmapped.
+ */
+gboolean
+gst_tizen_video_meta_unmap (GstVideoMeta * meta, guint plane, GstMapInfo * info)
+{
+  int tbm_ret = TBM_SURFACE_ERROR_NONE;
+  gboolean unmapped = FALSE;
+  GstBuffer *buffer = meta->buffer;
+  GstTizenMemory *vmem =
+      (GstTizenMemory *) gst_buffer_get_memory (buffer, 0);
+
+  g_return_val_if_fail (GST_IS_TIZEN_ALLOCATOR (((GstMemory *) vmem)->allocator), FALSE);
+
+  g_mutex_lock (&vmem->lock);
+
+  if (vmem->video_memory_map[plane] == FALSE) {
+    GST_ERROR ("[%p] plane %d is already unmapped", buffer, plane);
+    goto _VIDEO_MEMORY_UNMAP_DONE;
+  }
+
+  if (vmem->video_memory_map_count - 1 > 0) {
+    GST_DEBUG ("[%p] plane %d skip unmap surface %p", buffer, plane, vmem->surface);
+    unmapped = TRUE;
+    goto _VIDEO_MEMORY_UNMAP_DONE;
+  }
+
+  tbm_ret = tbm_surface_unmap (vmem->surface);
+  if (tbm_ret != TBM_SURFACE_ERROR_NONE) {
+    GST_ERROR ("[%p] tbm_surface_unmap %p failed, 0x%x", buffer, vmem->surface, tbm_ret);
+    goto _VIDEO_MEMORY_UNMAP_DONE;
+  }
+
+  unmapped = TRUE;
+
+  GST_DEBUG ("[%p] plane %d unmap surface %p done", buffer, plane, vmem->surface);
+
+_VIDEO_MEMORY_UNMAP_DONE:
+  if (unmapped == TRUE) {
+    vmem->video_memory_map[plane] = FALSE;
+    vmem->video_memory_map_count--;
+  }
+
+  g_mutex_unlock (&vmem->lock);
+
+  return unmapped;
+}
diff --git a/subprojects/gst-plugins-base/gst-libs/gst/allocators/gsttizenmemory.h b/subprojects/gst-plugins-base/gst-libs/gst/allocators/gsttizenmemory.h
new file mode 100644 (file)
index 0000000..fc4449c
--- /dev/null
@@ -0,0 +1,136 @@
+/*
+ * GStreamer tizen memory
+ * Copyright (c) 2018 Samsung Electronics Co., Ltd.
+ * Author: Sejun Park <sejun79.park@samsung.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+#ifndef __GST_TIZEN_MEMORY_H__
+#define __GST_TIZEN_MEMORY_H__
+
+#include <gst/gst.h>
+#include <gst/allocators/allocators-prelude.h>
+#include <gst/video/video.h>
+#include <gst/video/gstvideometa.h>
+//#include <gst/gstallocator.h>
+#include <gst/gstmemory.h>
+#include <tbm_bufmgr.h>
+#include <tbm_surface.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GstTizenAllocator GstTizenAllocator;
+typedef struct _GstTizenAllocatorClass GstTizenAllocatorClass;
+typedef struct _GstTizenAllocatorPrivate GstTizenAllocatorPrivate;
+
+typedef struct _GstTizenMemory GstTizenMemory;
+#define GST_TYPE_TIZEN_ALLOCATOR (gst_tizen_allocator_get_type())
+
+GST_ALLOCATORS_API
+GType gst_tizen_allocator_get_type(void);
+
+#define GST_IS_TIZEN_ALLOCATOR(obj)              (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_TIZEN_ALLOCATOR))
+#define GST_IS_TIZEN_ALLOCATOR_CLASS(klass)      (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_TIZEN_ALLOCATOR))
+#define GST_TIZEN_ALLOCATOR_GET_CLASS(obj)       (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_TIZEN_ALLOCATOR, GstTizenAllocatorClass))
+#define GST_TIZEN_ALLOCATOR(obj)                 (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_TIZEN_ALLOCATOR, GstTizenAllocator))
+#define GST_TIZEN_ALLOCATOR_CLASS(klass)         (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_TIZEN_ALLOCATOR, GstTizenAllocatorClass))
+#define GST_TIZEN_ALLOCATOR_CAST(obj)            ((GstTizenAllocator *)(obj))
+
+#define GST_TIZEN_MEMORY_TYPE "TizenVideoMemory"
+
+struct _GstTizenMemory
+{
+  GstMemory                 mem;
+
+  tbm_surface_h             surface;
+  tbm_surface_info_s        surface_info;
+  GstVideoInfo              *info;
+
+  /* <protected> */
+  GMutex                    lock;
+  gboolean                  video_memory_map[GST_VIDEO_MAX_PLANES];
+  gint                      video_memory_map_count;
+
+  /* <private> */
+  GDestroyNotify            notify;
+  gpointer                  user_data;
+
+};
+
+struct _GstTizenAllocatorPrivate
+{
+  GList *mem_cache;
+  GstAllocator *dmabuf_alloc;
+};
+
+/**
+ * GstTizenMemoryAllocator
+ *
+ * Base class for allocators with bo memory
+ */
+struct _GstTizenAllocator
+{
+  GstAllocator parent;
+  GstTizenAllocatorPrivate *priv;
+};
+
+
+struct _GstTizenAllocatorClass
+{
+  GstAllocatorClass parent_class;
+};
+
+GST_ALLOCATORS_API
+GstAllocator *  gst_tizen_allocator_new    (void);
+
+GST_ALLOCATORS_API
+GstMemory *     gst_tizen_allocator_alloc  (GstAllocator * allocator, GstVideoInfo * vinfo);
+
+GST_ALLOCATORS_API
+GstMemory *     gst_tizen_allocator_alloc_surface (GstAllocator * allocator, GstVideoInfo * vinfo,
+                                                   tbm_surface_h surface, gpointer user_data, GDestroyNotify notify);
+
+GST_ALLOCATORS_API
+gboolean        gst_is_tizen_memory        (GstMemory *mem);
+
+GST_ALLOCATORS_API
+gint            gst_tizen_memory_get_num_bos (GstMemory *mem);
+
+GST_ALLOCATORS_API
+void *          gst_tizen_memory_get_bos   (GstMemory *mem, gint index);
+
+GST_ALLOCATORS_API
+void *          gst_tizen_memory_get_surface (GstMemory *mem);
+
+GST_ALLOCATORS_API
+GstMemory *     gst_tizen_allocator_dmabuf_export (GstAllocator * allocator, GstMemory *tmem, int bo_idx);
+
+GST_ALLOCATORS_API
+GstTizenMemory *gst_tizen_allocator_dmabuf_import (GstAllocator * allocator, gint * fds, gint planes, gsize offsets[4], GstVideoInfo * vinfo);
+
+GST_VIDEO_API
+gboolean        gst_tizen_video_meta_map (GstVideoMeta * meta, guint plane, GstMapInfo * info,
+                    gpointer * data, gint * stride, GstMapFlags flags);
+
+GST_VIDEO_API
+gboolean        gst_tizen_video_meta_unmap (GstVideoMeta * meta, guint plane, GstMapInfo * info);
+
+GST_ALLOCATORS_API
+tbm_format      gst_video_format_to_tbm_format (GstVideoFormat format);
+
+G_END_DECLS
+
+#endif /* _GST_TIZEN_MEMORY_H_ */
index 0ebd0ce..37ac665 100644 (file)
@@ -5,9 +5,20 @@ gst_allocators_headers = [
   'gstphysmemory.h',
   'gstdmabuf.h',
 ]
+
+if tbm_dep.found()
+  gst_allocators_headers += [
+  'gsttizenmemory.h',
+  'gsttizenbufferpool.h',
+  ]
+endif
 install_headers(gst_allocators_headers, subdir : 'gstreamer-1.0/gst/allocators/')
 
 gst_allocators_sources = [ 'gstdmabuf.c', 'gstfdmemory.c', 'gstphysmemory.c']
+if tbm_dep.found()
+  gst_allocators_sources += ['gsttizenmemory.c', 'gsttizenbufferpool.c']
+endif
+
 gstallocators = library('gstallocators-@0@'.format(api_version),
   gst_allocators_sources,
   c_args : gst_plugins_base_args + ['-DBUILDING_GST_ALLOCATORS'],
@@ -16,7 +27,7 @@ gstallocators = library('gstallocators-@0@'.format(api_version),
   soversion : soversion,
   darwin_versions : osxversion,
   install : true,
-  dependencies : [gst_dep],
+  dependencies : [gst_dep, video_dep, tbm_dep],
 )
 
 pkgconfig.generate(gstallocators,
@@ -47,7 +58,7 @@ endif
 
 allocators_dep = declare_dependency(link_with: gstallocators,
   include_directories : [libsinc],
-  dependencies : [gst_dep],
+  dependencies : [gst_dep, video_dep, tbm_dep],
   sources : allocators_gen_sources)
 
 meson.override_dependency('gstreamer-allocators-1.0', allocators_dep)
index ec15d6c..dec79ed 100644 (file)
@@ -2394,8 +2394,12 @@ gst_audio_decoder_sink_eventfunc (GstAudioDecoder * dec, GstEvent * event)
         } else {
           GST_DEBUG_OBJECT (dec, "unsupported format; ignoring");
           GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
+#ifdef TIZEN_FEATURE_AUDIODECODER_MODIFICATION
+          goto newseg_wrong_format;
+#else
           gst_event_unref (event);
           ret = FALSE;
+#endif
           break;
         }
       }
@@ -2550,6 +2554,16 @@ gst_audio_decoder_sink_eventfunc (GstAudioDecoder * dec, GstEvent * event)
       break;
   }
   return ret;
+
+#ifdef TIZEN_FEATURE_AUDIODECODER_MODIFICATION
+newseg_wrong_format:
+  {
+    GST_DEBUG_OBJECT (dec, "received non TIME newsegment");
+    gst_event_unref (event);
+    /* SWALLOW EVENT */
+    return TRUE;
+  }
+#endif
 }
 
 static gboolean
index 8164c0d..87516d1 100644 (file)
@@ -113,7 +113,12 @@ struct _GstTagDemuxPrivate
  * 40kB is massive overkill for the maximum, I think, but it
  * doesn't do any harm (tpm: increased to 64kB after watching
  * typefinding fail on a wavpack file that needed 42kB to succeed) */
+#ifdef TIZEN_PROFILE_TV
+#define TYPE_FIND_MIN_SIZE 2048
+#else
 #define TYPE_FIND_MIN_SIZE 8192
+#endif
+
 #define TYPE_FIND_MAX_SIZE 65536
 
 #define DEFAULT_PULL_BLOCKSIZE 4096
diff --git a/subprojects/gst-plugins-base/gst-libs/gst/video/cameracontrol.c b/subprojects/gst-plugins-base/gst-libs/gst/video/cameracontrol.c
new file mode 100644 (file)
index 0000000..62c41db
--- /dev/null
@@ -0,0 +1,803 @@
+/*
+ * GStreamer Camera Control Interface
+ *
+ * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd.
+ *
+ * Contact: Jeongmo Yang <jm80.yang@samsung.com>
+ *
+ * This library is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the
+ * Free Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+/*============================================================================================
+EDIT HISTORY FOR MODULE
+
+This section contains comments describing changes made to the module.
+Notice that changes are listed in reverse chronological order.
+
+when            who                             what, where, why
+---------       ------------------------        ----------------------------------------------
+12/09/08        jm80.yang@samsung.com           Created
+
+============================================================================================*/
+
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "cameracontrol.h"
+
+/**
+ * SECTION:gstcameracontrol
+ * @short_description: Interface for camera control
+ */
+
+enum {
+       CONTROL_VALUE_CHANGED,
+       CONTROL_LAST_SIGNAL
+};
+
+static void gst_camera_control_base_init(GstCameraControlInterface *iface);
+
+static guint gst_camera_control_signals[CONTROL_LAST_SIGNAL] = { 0 };
+
+GType gst_camera_control_get_type(void)
+{
+       static GType gst_camera_control_type = 0;
+
+       if (!gst_camera_control_type) {
+               static const GTypeInfo gst_camera_control_info =
+               {
+                       sizeof(GstCameraControlInterface),
+                       (GBaseInitFunc)gst_camera_control_base_init,
+                       NULL,
+                       NULL,
+                       NULL,
+                       NULL,
+                       0,
+                       0,
+                       NULL,
+               };
+
+               gst_camera_control_type = g_type_register_static(G_TYPE_INTERFACE,
+                       "GstCameraControl", &gst_camera_control_info, 0);
+       }
+
+       return gst_camera_control_type;
+}
+
+static void gst_camera_control_base_init(GstCameraControlInterface *iface)
+{
+       static gboolean initialized = FALSE;
+
+       if (!initialized) {
+               gst_camera_control_signals[CONTROL_VALUE_CHANGED] =
+                       g_signal_new("control-value-changed",
+                               GST_TYPE_CAMERA_CONTROL, G_SIGNAL_RUN_LAST,
+                               G_STRUCT_OFFSET(GstCameraControlInterface, value_changed),
+                               NULL, NULL, NULL,
+                               G_TYPE_NONE, 2, GST_TYPE_CAMERA_CONTROL_CHANNEL, G_TYPE_INT);
+
+               initialized = TRUE;
+       }
+
+       // TODO :
+       iface->camera_control_type = 0;
+
+       /* default virtual functions */
+       iface->list_channels = NULL;
+       iface->set_exposure = NULL;
+       iface->get_exposure = NULL;
+       iface->set_capture_mode = NULL;
+       iface->get_capture_mode = NULL;
+       iface->set_strobe = NULL;
+       iface->get_strobe = NULL;
+       iface->set_detect = NULL;
+       iface->get_detect = NULL;
+       iface->set_value = NULL;
+       iface->get_value = NULL;
+       iface->set_zoom = NULL;
+       iface->get_zoom = NULL;
+       iface->set_focus = NULL;
+       iface->get_focus = NULL;
+       iface->start_auto_focus = NULL;
+       iface->stop_auto_focus = NULL;
+       iface->set_focus_level = NULL;
+       iface->get_focus_level = NULL;
+       iface->set_auto_focus_area = NULL;
+       iface->get_auto_focus_area = NULL;
+       iface->set_wdr = NULL;
+       iface->get_wdr = NULL;
+       iface->set_ahs = NULL;
+       iface->get_ahs = NULL;
+       iface->set_part_color = NULL;
+       iface->get_part_color = NULL;
+       iface->get_exif_info = NULL;
+       iface->set_capture_command = NULL;
+       iface->set_record_command = NULL;
+       iface->start_face_zoom = NULL;
+       iface->stop_face_zoom = NULL;
+       iface->set_ae_lock = NULL;
+       iface->get_ae_lock = NULL;
+       iface->set_awb_lock = NULL;
+       iface->get_awb_lock = NULL;
+}
+
+/**
+ * gst_camera_control_list_channels:
+ * @control: A #GstCameraControl instance
+ *
+ * Retrieve a list of the available channels.
+ *
+ * Returns: (element-type GstCameraControlChannel) (transfer none): A
+ *          GList containing pointers to #GstCameraControlChannel
+ *          objects. The list is owned by the #GstCameraControl
+ *          instance and must not be freed.
+ */
+const GList *gst_camera_control_list_channels(GstCameraControl *control)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), NULL);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->list_channels)
+               return iface->list_channels(control);
+
+       return NULL;
+}
+
+
+gboolean gst_camera_control_set_value(GstCameraControl *control, GstCameraControlChannel *control_channel, gint value)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->set_value)
+               return iface->set_value(control, control_channel, value);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_get_value(GstCameraControl *control, GstCameraControlChannel *control_channel, gint *value)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->get_value)
+               return iface->get_value(control, control_channel, value);
+
+       return FALSE;
+}
+
+
+
+gboolean gst_camera_control_set_exposure(GstCameraControl *control, gint type, gint value1, gint value2)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->set_exposure)
+               return iface->set_exposure(control, type, value1, value2);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_get_exposure(GstCameraControl *control, gint type, gint *value1, gint *value2)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->get_exposure)
+               return iface->get_exposure(control, type, value1, value2);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_set_capture_mode(GstCameraControl *control, gint type, gint value)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->set_capture_mode)
+               return iface->set_capture_mode(control, type, value);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_get_capture_mode(GstCameraControl *control, gint type, gint *value)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->get_capture_mode)
+               return iface->get_capture_mode(control, type, value);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_set_strobe(GstCameraControl *control, gint type, gint value)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->set_strobe)
+               return iface->set_strobe(control, type, value);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_get_strobe(GstCameraControl *control, gint type, gint *value)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->get_strobe)
+               return iface->get_strobe(control, type, value);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_set_detect(GstCameraControl *control, gint type, gint value)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->set_detect)
+               return iface->set_detect(control, type, value);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_get_detect(GstCameraControl *control, gint type, gint *value)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->get_detect)
+               return iface->get_detect(control, type, value);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_set_zoom(GstCameraControl *control, gint type, gint value)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->set_zoom)
+               return iface->set_zoom(control, type, value);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_get_zoom(GstCameraControl *control, gint type, gint *value)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->get_zoom)
+               return iface->get_zoom(control, type, value);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_set_focus(GstCameraControl *control, gint mode, gint range)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->set_focus)
+               return iface->set_focus(control, mode, range);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_get_focus(GstCameraControl *control, gint *mode, gint *range)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->get_focus)
+               return iface->get_focus(control, mode, range);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_start_auto_focus(GstCameraControl *control)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->start_auto_focus)
+               return iface->start_auto_focus(control);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_stop_auto_focus(GstCameraControl *control)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->stop_auto_focus)
+               return iface->stop_auto_focus(control);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_set_focus_level(GstCameraControl *control, gint manual_level)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->set_focus_level)
+               return iface->set_focus_level(control, manual_level);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_get_focus_level(GstCameraControl *control, gint *manual_level)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->get_focus_level)
+               return iface->get_focus_level(control, manual_level);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_set_auto_focus_area(GstCameraControl *control, GstCameraControlRectType rect)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->set_auto_focus_area)
+               return iface->set_auto_focus_area(control, rect);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_get_auto_focus_area(GstCameraControl *control, GstCameraControlRectType *rect)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->get_auto_focus_area)
+               return iface->get_auto_focus_area(control, rect);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_set_wdr(GstCameraControl *control, gint value)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->set_wdr)
+               return iface->set_wdr(control, value);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_get_wdr(GstCameraControl *control, gint *value)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->get_wdr)
+               return iface->get_wdr(control, value);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_set_ahs(GstCameraControl *control, gint value)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->set_ahs)
+               return iface->set_ahs(control, value);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_get_ahs(GstCameraControl *control, gint *value)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->get_ahs)
+               return iface->get_ahs(control, value);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_set_part_color(GstCameraControl *control, gint type, gint value)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->set_part_color)
+               return iface->set_part_color(control, type, value);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_get_part_color(GstCameraControl *control, gint type, gint *value)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->get_part_color)
+               return iface->get_part_color(control, type, value);
+
+       return FALSE;
+}
+
+gboolean
+gst_camera_control_get_exif_info(GstCameraControl *control, GstCameraControlExifInfo *info)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->get_exif_info)
+               return iface->get_exif_info(control, info);
+
+       return FALSE;
+}
+
+
+gboolean gst_camera_control_get_basic_dev_info(GstCameraControl *control, gint dev_id, GstCameraControlCapsInfoType *info)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->get_basic_dev_info)
+               return iface->get_basic_dev_info(control, dev_id, info);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_get_misc_dev_info(GstCameraControl *control, gint dev_id, GstCameraControlCtrlListInfoType *info)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->get_misc_dev_info)
+               return iface->get_misc_dev_info(control, dev_id, info);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_get_extra_dev_info(GstCameraControl *control, gint dev_id, GstCameraControlExtraInfoType *info)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->get_extra_dev_info)
+               return iface->get_extra_dev_info(control, dev_id, info);
+
+       return FALSE;
+}
+
+void gst_camera_control_set_capture_command(GstCameraControl *control, GstCameraControlCaptureCommand cmd)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_if_fail(GST_IS_CAMERA_CONTROL(control));
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->set_capture_command)
+               iface->set_capture_command(control, cmd);
+
+       return;
+}
+
+void gst_camera_control_set_record_command(GstCameraControl *control, GstCameraControlRecordCommand cmd)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_if_fail(GST_IS_CAMERA_CONTROL(control));
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->set_record_command)
+               iface->set_record_command(control, cmd);
+
+       return;
+}
+
+gboolean gst_camera_control_start_face_zoom(GstCameraControl *control, gint x, gint y, gint zoom_level)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->start_face_zoom)
+               return iface->start_face_zoom(control, x, y, zoom_level);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_stop_face_zoom(GstCameraControl *control)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->stop_face_zoom)
+               return iface->stop_face_zoom(control);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_set_ae_lock(GstCameraControl *control, gboolean lock)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->set_ae_lock)
+               return iface->set_ae_lock(control, lock);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_get_ae_lock(GstCameraControl *control, gboolean *lock)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->get_ae_lock)
+               return iface->get_ae_lock(control, lock);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_set_awb_lock(GstCameraControl *control, gboolean lock)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->set_awb_lock)
+               return iface->set_awb_lock(control, lock);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_get_awb_lock(GstCameraControl *control, gboolean *lock)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->get_awb_lock)
+               return iface->get_awb_lock(control, lock);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_set_user_buffer_fd(GstCameraControl *control, int *fds, int number)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->set_user_buffer_fd)
+               return iface->set_user_buffer_fd(control, fds, number);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_set_extra_preview_stream_format(GstCameraControl *control, int stream_id, GstCameraControlImageFormat img_fmt, int width, int height, int fps)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->set_extra_preview_stream_format)
+               return iface->set_extra_preview_stream_format(control, stream_id, img_fmt, width, height, fps);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_get_extra_preview_stream_format(GstCameraControl *control, int stream_id, GstCameraControlImageFormat *img_fmt, int *width, int *height, int *fps)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->get_extra_preview_stream_format)
+               return iface->get_extra_preview_stream_format(control, stream_id, img_fmt, width, height, fps);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_set_extra_preview_bitrate(GstCameraControl *control, int stream_id, int bitrate)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->set_extra_preview_bitrate)
+               return iface->set_extra_preview_bitrate(control, stream_id, bitrate);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_get_extra_preview_bitrate(GstCameraControl *control, int stream_id, int *bitrate)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->get_extra_preview_bitrate)
+               return iface->get_extra_preview_bitrate(control, stream_id, bitrate);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_set_extra_preview_gop_interval(GstCameraControl *control, int stream_id, int interval)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->set_extra_preview_gop_interval)
+               return iface->set_extra_preview_gop_interval(control, stream_id, interval);
+
+       return FALSE;
+}
+
+gboolean gst_camera_control_get_extra_preview_gop_interval(GstCameraControl *control, int stream_id, int *interval)
+{
+       GstCameraControlInterface *iface;
+
+       g_return_val_if_fail(GST_IS_CAMERA_CONTROL(control), FALSE);
+
+       iface = GST_CAMERA_CONTROL_GET_INTERFACE(control);
+
+       if (iface->get_extra_preview_gop_interval)
+               return iface->get_extra_preview_gop_interval(control, stream_id, interval);
+
+       return FALSE;
+}
+
+void gst_camera_control_value_changed(GstCameraControl *control, GstCameraControlChannel *control_channel, gint value)
+{
+       g_signal_emit(G_OBJECT(control), gst_camera_control_signals[CONTROL_VALUE_CHANGED], 0, control_channel, value);
+       g_signal_emit_by_name(G_OBJECT(control_channel), "control-value-changed", value);
+}
diff --git a/subprojects/gst-plugins-base/gst-libs/gst/video/cameracontrol.h b/subprojects/gst-plugins-base/gst-libs/gst/video/cameracontrol.h
new file mode 100644 (file)
index 0000000..29fe2a9
--- /dev/null
@@ -0,0 +1,559 @@
+/*
+ * GStreamer Camera Control Interface
+ *
+ * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd.
+ *
+ * Contact: Jeongmo Yang <jm80.yang@samsung.com>
+ *
+ * This library is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the
+ * Free Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+/* ===========================================================================================
+EDIT HISTORY FOR MODULE
+
+       This section contains comments describing changes made to the module.
+       Notice that changes are listed in reverse chronological order.
+
+when           who                                                     what, where, why
+---------      ------------------------        ------------------------------------------------------
+12/09/08       jm80.yang@samsung.com           Created
+
+=========================================================================================== */
+
+#ifndef __GST_CAMERA_CONTROL_H__
+#define __GST_CAMERA_CONTROL_H__
+
+#include <gst/gst.h>
+#include <gst/video/cameracontrolchannel.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_CAMERA_CONTROL \
+       (gst_camera_control_get_type())
+#define GST_CAMERA_CONTROL(obj) \
+       (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_CAMERA_CONTROL, GstCameraControl))
+#define GST_IS_CAMERA_CONTROL(obj) \
+       (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_CAMERA_CONTROL))
+#define GST_CAMERA_CONTROL_GET_INTERFACE(inst) \
+       (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_CAMERA_CONTROL, GstCameraControlInterface))
+#define GST_CAMERA_CONTROL_TYPE(iface) (iface->camera_control_type)
+
+
+typedef struct _GstCameraControl GstCameraControl;
+typedef struct _GstCameraControlInterface GstCameraControlInterface;
+
+typedef enum
+{
+       GST_CAMERA_CONTROL_HARDWARE,
+       GST_CAMERA_CONTROL_SOFTWARE
+} GstCameraControlType;
+
+/* enumerations for Camera control Exposure types */
+typedef enum
+{
+       GST_CAMERA_CONTROL_F_NUMBER,
+       GST_CAMERA_CONTROL_SHUTTER_SPEED,
+       GST_CAMERA_CONTROL_ISO,
+       GST_CAMERA_CONTROL_PROGRAM_MODE,
+       GST_CAMERA_CONTROL_EXPOSURE_MODE,
+       GST_CAMERA_CONTROL_EXPOSURE_VALUE
+} GstCameraControlExposureType;
+
+/* enumerations for Camera control Capture mode types */
+typedef enum
+{
+       GST_CAMERA_CONTROL_CAPTURE_MODE,
+       GST_CAMERA_CONTROL_OUTPUT_MODE,
+       GST_CAMERA_CONTROL_FRAME_COUNT,
+       GST_CAMERA_CONTROL_JPEG_QUALITY
+} GstCameraControlCaptureModeType;
+
+/* enumerations for Camera control Strobe types */
+typedef enum
+{
+       GST_CAMERA_CONTROL_STROBE_CONTROL,
+       GST_CAMERA_CONTROL_STROBE_CAPABILITIES,
+       GST_CAMERA_CONTROL_STROBE_MODE,
+       GST_CAMERA_CONTROL_STROBE_STATUS,
+       GST_CAMERA_CONTROL_STROBE_EV,
+       GST_CAMERA_CONTROL_STROBE_BRIGHTNESS
+} GstCameraControlStrobeType;
+
+/* enumerations for Camera control Face detection types */
+typedef enum
+{
+       GST_CAMERA_CONTROL_FACE_DETECT_MODE,
+       GST_CAMERA_CONTROL_FACE_DETECT_NUMBER,
+       GST_CAMERA_CONTROL_FACE_FOCUS_SELECT,
+       GST_CAMERA_CONTROL_FACE_SELECT_NUMBER,
+       GST_CAMERA_CONTROL_FACE_DETECT_STATUS
+} GstCameraControlFaceDetectType;
+
+/* enumerations for Camera control Zoom types */
+typedef enum
+{
+       GST_CAMERA_CONTROL_DIGITAL_ZOOM,
+       GST_CAMERA_CONTROL_OPTICAL_ZOOM
+} GstCameraControlZoomType;
+
+/* enumerations for Camera control Part color */
+typedef enum
+{
+       GST_CAMERA_CONTROL_PART_COLOR_SRC,
+       GST_CAMERA_CONTROL_PART_COLOR_DST,
+       GST_CAMERA_CONTROL_PART_COLOR_MODE
+} GstCameraControlPartColorType;
+
+/* enumerations for Camera capture command */
+typedef enum
+{
+       GST_CAMERA_CONTROL_CAPTURE_COMMAND_NONE,
+       GST_CAMERA_CONTROL_CAPTURE_COMMAND_START,
+       GST_CAMERA_CONTROL_CAPTURE_COMMAND_STOP,
+       GST_CAMERA_CONTROL_CAPTURE_COMMAND_STOP_MULTISHOT
+} GstCameraControlCaptureCommand;
+
+/* enumerations for Camera record command */
+typedef enum
+{
+       GST_CAMERA_CONTROL_RECORD_COMMAND_NONE,
+       GST_CAMERA_CONTROL_RECORD_COMMAND_START,
+       GST_CAMERA_CONTROL_RECORD_COMMAND_STOP
+} GstCameraControlRecordCommand;
+
+typedef enum
+{
+       /* YUV */
+       GST_CAMERA_CONTROL_IMAGE_FORMAT_NV12,
+       GST_CAMERA_CONTROL_IMAGE_FORMAT_NV21,
+       GST_CAMERA_CONTROL_IMAGE_FORMAT_I420,
+       GST_CAMERA_CONTROL_IMAGE_FORMAT_YV12,
+       GST_CAMERA_CONTROL_IMAGE_FORMAT_YUYV,
+       GST_CAMERA_CONTROL_IMAGE_FORMAT_UYVY,
+
+       /* RGB */
+       GST_CAMERA_CONTROL_IMAGE_FORMAT_BGRA,
+       GST_CAMERA_CONTROL_IMAGE_FORMAT_ARGB,
+
+       /* ENCODED */
+       GST_CAMERA_CONTROL_IMAGE_FORMAT_JPEG,
+       GST_CAMERA_CONTROL_IMAGE_FORMAT_H264,
+       GST_CAMERA_CONTROL_IMAGE_FORMAT_MJPEG,
+       GST_CAMERA_CONTROL_IMAGE_FORMAT_VP8,
+       GST_CAMERA_CONTROL_IMAGE_FORMAT_VP9
+} GstCameraControlImageFormat;
+
+
+/////////////////////////////////
+//  For Query functionalities  //
+//  For Querying capabilities  //
+/////////////////////////////////
+#define GST_CAMERA_CONTROL_MAX_NUM_FMT_DESC        32
+#define GST_CAMERA_CONTROL_MAX_NUM_RESOLUTION      32
+#define GST_CAMERA_CONTROL_MAX_NUM_AVAILABLE_TPF   16
+#define GST_CAMERA_CONTROL_MAX_NUM_AVAILABLE_FPS   16
+#define GST_CAMERA_CONTROL_MAX_NUM_CTRL_LIST_INFO  64
+#define GST_CAMERA_CONTROL_MAX_NUM_CTRL_MENU       64
+#define GST_CAMERA_CONTROL_MAX_NUM_DETECTED_FACES  16
+#define GST_CAMERA_CONTROL_MAX_SZ_CTRL_NAME_STRING 32
+#define GST_CAMERA_CONTROL_MAX_SZ_DEV_NAME_STRING  32
+
+/*! @struct GstCameraControlFracType
+ *  @brief For timeperframe as fraction type
+ *  Elapse time consumed by one frame, reverse of FPS
+ */
+typedef struct _GstCameraControlFracType {
+       gint num;
+       gint den;
+} GstCameraControlFracType;
+
+/*! @struct GstCameraControlRectType
+ *  @brief For touch auto focusing area and face detection area
+ */
+typedef struct _GstCameraControlRectType {
+       gint x;
+       gint y;
+       gint width;
+       gint height;
+} GstCameraControlRectType;
+
+/*! @struct GstCameraControlResolutionType
+ *  @brief For querying supported resolutions
+ */
+typedef struct _GstCameraControlResolutionType {
+    gint w;
+    gint h;
+
+    /* Available time per frame(tpf) as each pixelformat */
+    gint num_avail_tpf;
+    GstCameraControlFracType tpf[GST_CAMERA_CONTROL_MAX_NUM_AVAILABLE_TPF];
+} GstCameraControlResolutionType;
+
+/*! @struct GstCameraControlFmtDescType
+ *  @brief For querying supported format type
+ */
+typedef struct _GstCameraControlFmtDescType {
+    /* fourcc name of each pixelformat */
+    guint fcc;
+    gint fcc_use;
+
+    /* Available resolutions as each pixelformat */
+    gint num_resolution;
+    GstCameraControlResolutionType resolutions[GST_CAMERA_CONTROL_MAX_NUM_RESOLUTION];
+} GstCameraControlFmtDescType;
+
+/*! @struct GstCameraControlCapsInfoType
+ *  @brief For querying image input capabilities
+ */
+typedef struct _GstCameraControlCapsInfoType {
+    char dev_name[GST_CAMERA_CONTROL_MAX_SZ_DEV_NAME_STRING];
+    int input_idx;
+    gint num_fmt_desc;
+    GstCameraControlFmtDescType fmt_desc[GST_CAMERA_CONTROL_MAX_NUM_FMT_DESC];
+
+    int num_preview_resolution;
+    int preview_resolution_width[GST_CAMERA_CONTROL_MAX_NUM_RESOLUTION];
+    int preview_resolution_height[GST_CAMERA_CONTROL_MAX_NUM_RESOLUTION];
+
+    int num_capture_resolution;
+    int capture_resolution_width[GST_CAMERA_CONTROL_MAX_NUM_RESOLUTION];
+    int capture_resolution_height[GST_CAMERA_CONTROL_MAX_NUM_RESOLUTION];
+
+    int num_preview_fmt;
+    unsigned int preview_fmt[GST_CAMERA_CONTROL_MAX_NUM_FMT_DESC];
+
+    int num_capture_fmt;
+    unsigned int capture_fmt[GST_CAMERA_CONTROL_MAX_NUM_FMT_DESC];
+
+    int num_fps;
+    GstCameraControlFracType fps[GST_CAMERA_CONTROL_MAX_NUM_AVAILABLE_FPS];
+} GstCameraControlCapsInfoType;
+
+/*! @struct GstCameraControlFaceInfo
+ *  @brief For face information
+ */
+typedef struct _GstCameraControlFaceInfo {
+       int id;
+       int score;
+       GstCameraControlRectType rect;
+} GstCameraControlFaceInfo;
+
+/*! @struct GstCameraControlFaceDetectInfo
+ *  @brief For face detect information
+ */
+typedef struct _GstCameraControlFaceDetectInfo {
+       int num_of_faces;
+       GstCameraControlFaceInfo face_info[GST_CAMERA_CONTROL_MAX_NUM_DETECTED_FACES];
+} GstCameraControlFaceDetectInfo;
+
+/////////////////////////////
+//  For Querying controls  //
+/////////////////////////////
+enum {
+    GST_CAMERA_CTRL_TYPE_RANGE = 0,
+    GST_CAMERA_CTRL_TYPE_BOOL,
+    GST_CAMERA_CTRL_TYPE_ARRAY,
+    GST_CAMERA_CTRL_TYPE_UNKNOWN,
+    GST_CAMERA_CTRL_TYPE_NUM,
+};
+
+/*! @struct GstCameraControlCtrlMenuType
+ *  @brief For querying menu of specified controls
+ */
+typedef struct _GstCameraControlCtrlMenuType {
+    gint menu_index;
+    gchar menu_name[GST_CAMERA_CONTROL_MAX_SZ_CTRL_NAME_STRING];
+} GstCameraControlCtrlMenuType;
+
+/*! @struct GstCameraControlCtrlInfoType
+ *  @brief For querying controls detail
+ */
+typedef struct _GstCameraControlCtrlInfoType {
+    gint avsys_ctrl_id;
+    gint v4l2_ctrl_id;
+    gint ctrl_type;
+    gchar ctrl_name[GST_CAMERA_CONTROL_MAX_SZ_CTRL_NAME_STRING];
+    gint min;
+    gint max;
+    gint step;
+    gint default_val;
+    gint num_ctrl_menu;
+    GstCameraControlCtrlMenuType ctrl_menu[GST_CAMERA_CONTROL_MAX_NUM_CTRL_MENU];
+} GstCameraControlCtrlInfoType;
+
+/*! @struct GstCameraControlCtrlListInfoType
+ *  @brief For querying controls
+ */
+typedef struct _GstCameraControlCtrlListInfoType {
+    gint num_ctrl_list_info;
+    GstCameraControlCtrlInfoType ctrl_info[GST_CAMERA_CONTROL_MAX_NUM_CTRL_LIST_INFO];
+} GstCameraControlCtrlListInfoType;
+
+/* capabilities field */
+#define GST_CAMERA_STROBE_CAP_NONE              0x0000 /* No strobe supported */
+#define GST_CAMERA_STROBE_CAP_OFF               0x0001 /* Always flash off mode */
+#define GST_CAMERA_STROBE_CAP_ON                0x0002 /* Always use flash light mode */
+#define GST_CAMERA_STROBE_CAP_AUTO              0x0004 /* Flashlight works automatic */
+#define GST_CAMERA_STROBE_CAP_REDEYE            0x0008 /* Red-eye reduction */
+#define GST_CAMERA_STROBE_CAP_SLOWSYNC          0x0010 /* Slow sync */
+#define GST_CAMERA_STROBE_CAP_FRONT_CURTAIN     0x0020 /* Front curtain */
+#define GST_CAMERA_STROBE_CAP_REAR_CURTAIN      0x0040 /* Rear curtain */
+#define GST_CAMERA_STROBE_CAP_PERMANENT         0x0080 /* keep turned on until turning off */
+#define GST_CAMERA_STROBE_CAP_EXTERNAL          0x0100 /* use external strobe */
+
+typedef struct _GstCameraControlExtraInfoType {
+    guint strobe_caps;                                   /* Use above caps field */
+    guint detection_caps;                                /* Just boolean */
+    guint reserved[4];
+} GstCameraControlExtraInfoType;
+/////////////////////////////////////
+//  END For Query functionalities  //
+/////////////////////////////////////
+
+
+/* structure for Camera control EXIF information */
+typedef struct _GstCameraControlExifInfo {
+       /* Dynamic value */
+       guint32 exposure_time_numerator;    /* Exposure time, given in seconds */
+       guint32 exposure_time_denominator;
+       gint shutter_speed_numerator;       /* Shutter speed, given in APEX(Additive System Photographic Exposure) */
+       gint shutter_speed_denominator;
+       gint brigtness_numerator;           /* Value of brightness, before firing flash, given in APEX value */
+       gint brightness_denominator;
+       guint16 iso;                        /* Sensitivity value of sensor */
+       guint16 flash;                      /* Whether flash is fired(1) or not(0) */
+       gint metering_mode;                 /* metering mode in EXIF 2.2 */
+       gint exif_image_width;              /* Size of image */
+       gint exif_image_height;
+       gint exposure_bias_in_APEX;         /* Exposure bias in APEX standard */
+       gint software_used;                 /* Firmware S/W version */
+
+       /* Fixed value */
+       gint component_configuration;       /* color components arrangement */
+       gint colorspace;                    /* colorspace information */
+       gint focal_len_numerator;           /* Lens focal length */
+       gint focal_len_denominator;
+       gint aperture_f_num_numerator;      /* Aperture value */
+       gint aperture_f_num_denominator;
+       gint aperture_in_APEX;              /* Aperture value in APEX standard */
+       gint max_lens_aperture_in_APEX;     /* Max aperture value in APEX standard */
+} GstCameraControlExifInfo;
+
+/* structure for camera control interface */
+struct _GstCameraControlInterface {
+       GTypeInterface iface;
+       GstCameraControlType camera_control_type;
+
+       /* virtual functions */
+       const GList     *(*list_channels)              (GstCameraControl *control);
+       gboolean        (*set_value)                   (GstCameraControl *control, GstCameraControlChannel *control_channel, gint value);
+       gboolean        (*get_value)                   (GstCameraControl *control, GstCameraControlChannel *control_channel, gint *value);
+       gboolean        (*set_exposure)                (GstCameraControl *control, gint type, gint value1, gint value2);
+       gboolean        (*get_exposure)                (GstCameraControl *control, gint type, gint *value1, gint *value2);
+       gboolean        (*set_capture_mode)            (GstCameraControl *control, gint type, gint value);
+       gboolean        (*get_capture_mode)            (GstCameraControl *control, gint type, gint *value);
+       gboolean        (*set_strobe)                  (GstCameraControl *control, gint type, gint value);
+       gboolean        (*get_strobe)                  (GstCameraControl *control, gint type, gint *value);
+       gboolean        (*set_detect)                  (GstCameraControl *control, gint type, gint value);
+       gboolean        (*get_detect)                  (GstCameraControl *control, gint type, gint *value);
+       gboolean        (*set_zoom)                    (GstCameraControl *control, gint type, gint value);
+       gboolean        (*get_zoom)                    (GstCameraControl *control, gint type, gint *value);
+       gboolean        (*set_focus)                   (GstCameraControl *control, gint mode, gint range);
+       gboolean        (*get_focus)                   (GstCameraControl *control, gint *mode, gint *range);
+       gboolean        (*start_auto_focus)            (GstCameraControl *control);
+       gboolean        (*stop_auto_focus)             (GstCameraControl *control);
+       gboolean        (*set_focus_level)             (GstCameraControl *control, gint manual_level);
+       gboolean        (*get_focus_level)             (GstCameraControl *control, gint *manual_level);
+       gboolean        (*set_auto_focus_area)         (GstCameraControl *control, GstCameraControlRectType rect);
+       gboolean        (*get_auto_focus_area)         (GstCameraControl *control, GstCameraControlRectType *rect);
+       gboolean        (*set_wdr)                     (GstCameraControl *control, gint value);
+       gboolean        (*get_wdr)                     (GstCameraControl *control, gint *value);
+       gboolean        (*set_ahs)                     (GstCameraControl *control, gint value);
+       gboolean        (*get_ahs)                     (GstCameraControl *control, gint *value);
+       gboolean        (*set_part_color)              (GstCameraControl *control, gint type, gint value);
+       gboolean        (*get_part_color)              (GstCameraControl *control, gint type, gint *value);
+       gboolean        (*get_exif_info)               (GstCameraControl *control, GstCameraControlExifInfo *info);
+       gboolean        (*get_basic_dev_info)          (GstCameraControl *control, gint dev_id, GstCameraControlCapsInfoType *info);
+       gboolean        (*get_misc_dev_info)           (GstCameraControl *control, gint dev_id, GstCameraControlCtrlListInfoType *info);
+       gboolean        (*get_extra_dev_info)          (GstCameraControl *control, gint dev_id, GstCameraControlExtraInfoType *info);
+       void            (*set_capture_command)         (GstCameraControl *control, GstCameraControlCaptureCommand cmd);
+       void            (*set_record_command)          (GstCameraControl *control, GstCameraControlRecordCommand cmd);
+       gboolean        (*start_face_zoom)             (GstCameraControl *control, gint x, gint y, gint zoom_level);
+       gboolean        (*stop_face_zoom)              (GstCameraControl *control);
+       gboolean        (*set_ae_lock)                 (GstCameraControl *control, gboolean lock);
+       gboolean        (*get_ae_lock)                 (GstCameraControl *control, gboolean *lock);
+       gboolean        (*set_awb_lock)                (GstCameraControl *control, gboolean lock);
+       gboolean        (*get_awb_lock)                (GstCameraControl *control, gboolean *lock);
+       gboolean        (*set_user_buffer_fd)          (GstCameraControl *control, int *fds, int number);
+       gboolean        (*set_extra_preview_stream_format) (GstCameraControl *control, int stream_id, GstCameraControlImageFormat img_fmt, int width, int height, int fps);
+       gboolean        (*get_extra_preview_stream_format) (GstCameraControl *control, int stream_id, GstCameraControlImageFormat *img_fmt, int *width, int *height, int *fps);
+       gboolean        (*set_extra_preview_bitrate)   (GstCameraControl *control, int stream_id, int bitrate);
+       gboolean        (*get_extra_preview_bitrate)   (GstCameraControl *control, int stream_id, int *bitrate);
+       gboolean        (*set_extra_preview_gop_interval)  (GstCameraControl *control, int stream_id, int interval);
+       gboolean        (*get_extra_preview_gop_interval)  (GstCameraControl *control, int stream_id, int *interval);
+
+       /* signals */
+       void (* value_changed)                          (GstCameraControl *control, GstCameraControlChannel *channel, gint value);
+};
+
+GST_VIDEO_API
+GType gst_camera_control_get_type(void);
+
+GST_VIDEO_API
+const GList    *gst_camera_control_list_channels       (GstCameraControl *control);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_set_value            (GstCameraControl *control, GstCameraControlChannel *control_channel, gint value);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_get_value            (GstCameraControl *control, GstCameraControlChannel *control_channel, gint *value);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_set_exposure         (GstCameraControl *control, gint type, gint value1, gint value2);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_get_exposure         (GstCameraControl *control, gint type, gint *value1, gint *value2);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_set_capture_mode     (GstCameraControl *control, gint type, gint value);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_get_capture_mode     (GstCameraControl *control, gint type, gint *value);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_set_strobe           (GstCameraControl *control, gint type, gint value);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_get_strobe           (GstCameraControl *control, gint type, gint *value);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_set_detect           (GstCameraControl *control, gint type, gint value);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_get_detect           (GstCameraControl *control, gint type, gint *value);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_set_zoom             (GstCameraControl *control, gint type, gint value);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_get_zoom             (GstCameraControl *control, gint type, gint *value);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_set_focus            (GstCameraControl *control, gint mode, gint range);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_get_focus            (GstCameraControl *control, gint *mode, gint *range);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_start_auto_focus     (GstCameraControl *control);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_stop_auto_focus      (GstCameraControl *control);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_set_focus_level      (GstCameraControl *control, gint manual_level);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_get_focus_level      (GstCameraControl *control, gint *manual_level);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_set_auto_focus_area  (GstCameraControl *control, GstCameraControlRectType rect);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_get_auto_focus_area  (GstCameraControl *control, GstCameraControlRectType *rect);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_set_wdr              (GstCameraControl *control, gint value);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_get_wdr              (GstCameraControl *control, gint *value);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_set_ahs              (GstCameraControl *control, gint value);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_get_ahs              (GstCameraControl *control, gint *value);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_set_part_color       (GstCameraControl *control, gint type, gint value);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_get_part_color       (GstCameraControl *control, gint type, gint *value);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_get_exif_info        (GstCameraControl *control, GstCameraControlExifInfo *info);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_get_basic_dev_info   (GstCameraControl *control, gint dev_id, GstCameraControlCapsInfoType *info);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_get_misc_dev_info    (GstCameraControl *control, gint dev_id, GstCameraControlCtrlListInfoType *info);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_get_extra_dev_info   (GstCameraControl *control, gint dev_id, GstCameraControlExtraInfoType *info);
+
+GST_VIDEO_API
+void           gst_camera_control_set_capture_command  (GstCameraControl *control, GstCameraControlCaptureCommand cmd);
+
+GST_VIDEO_API
+void           gst_camera_control_set_record_command   (GstCameraControl *control, GstCameraControlRecordCommand cmd);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_start_face_zoom      (GstCameraControl *control, gint x, gint y, gint zoom_level);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_stop_face_zoom       (GstCameraControl *control);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_set_ae_lock          (GstCameraControl *control, gboolean lock);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_get_ae_lock          (GstCameraControl *control, gboolean *lock);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_set_awb_lock         (GstCameraControl *control, gboolean lock);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_get_awb_lock         (GstCameraControl *control, gboolean *lock);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_set_user_buffer_fd   (GstCameraControl *control, int *fds, int number);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_set_extra_preview_stream_format  (GstCameraControl *control, int stream_id, GstCameraControlImageFormat img_fmt, int width, int height, int fps);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_get_extra_preview_stream_format  (GstCameraControl *control, int stream_id, GstCameraControlImageFormat *img_fmt, int *width, int *height, int *fps);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_set_extra_preview_bitrate  (GstCameraControl *control, int stream_id, int bitrate);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_get_extra_preview_bitrate  (GstCameraControl *control, int stream_id, int *bitrate);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_set_extra_preview_gop_interval   (GstCameraControl *control, int stream_id, int interval);
+
+GST_VIDEO_API
+gboolean       gst_camera_control_get_extra_preview_gop_interval   (GstCameraControl *control, int stream_id, int *interval);
+
+/* trigger signal */
+GST_VIDEO_API
+void           gst_camera_control_value_changed        (GstCameraControl *control, GstCameraControlChannel *control_channel, gint value);
+
+G_END_DECLS
+
+#endif /* __GST_CAMERA_CONTROL_H__ */
diff --git a/subprojects/gst-plugins-base/gst-libs/gst/video/cameracontrolchannel.c b/subprojects/gst-plugins-base/gst-libs/gst/video/cameracontrolchannel.c
new file mode 100644 (file)
index 0000000..86c7ce9
--- /dev/null
@@ -0,0 +1,112 @@
+/* GStreamer Camera Control Channel Interface
+ *
+ * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd.
+ *
+ * Contact: Jeongmo Yang <jm80.yang@samsung.com>
+ *
+ * cameracontrolchannel.c: cameracontrol channel object design
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "cameracontrolchannel.h"
+
+enum {
+       /* FILL ME */
+       SIGNAL_VALUE_CHANGED,
+       LAST_SIGNAL
+};
+
+static void gst_camera_control_channel_class_init(GstCameraControlChannelClass* klass);
+static void gst_camera_control_channel_init(GstCameraControlChannel* control_channel);
+static void gst_camera_control_channel_dispose(GObject* object);
+
+static GObjectClass *parent_class = NULL;
+static guint signals[LAST_SIGNAL] = { 0 };
+
+GType gst_camera_control_channel_get_type(void)
+{
+       static GType gst_camera_control_channel_type = 0;
+
+       if (!gst_camera_control_channel_type) {
+               static const GTypeInfo camera_control_channel_info = {
+                       sizeof (GstCameraControlChannelClass),
+                       NULL,
+                       NULL,
+                       (GClassInitFunc) gst_camera_control_channel_class_init,
+                       NULL,
+                       NULL,
+                       sizeof (GstCameraControlChannel),
+                       0,
+                       (GInstanceInitFunc) gst_camera_control_channel_init,
+                       NULL
+               };
+
+               gst_camera_control_channel_type = \
+                       g_type_register_static(G_TYPE_OBJECT,
+                                              "GstCameraControlChannel",
+                                              &camera_control_channel_info,
+                                              0);
+       }
+
+       return gst_camera_control_channel_type;
+}
+
+static void gst_camera_control_channel_class_init(GstCameraControlChannelClass* klass)
+{
+       GObjectClass *object_klass = (GObjectClass*) klass;
+
+       parent_class = g_type_class_peek_parent (klass);
+
+       signals[SIGNAL_VALUE_CHANGED] = \
+               g_signal_new("control-value-changed",
+                            G_TYPE_FROM_CLASS (klass),
+                            G_SIGNAL_RUN_LAST,
+                            G_STRUCT_OFFSET (GstCameraControlChannelClass, value_changed),
+                            NULL,
+                            NULL,
+                            g_cclosure_marshal_VOID__INT,
+                            G_TYPE_NONE,
+                            1,
+                            G_TYPE_INT);
+
+       object_klass->dispose = gst_camera_control_channel_dispose;
+}
+
+static void gst_camera_control_channel_init(GstCameraControlChannel* control_channel)
+{
+       control_channel->label = NULL;
+       control_channel->min_value = control_channel->max_value = 0;
+}
+
+static void gst_camera_control_channel_dispose(GObject* object)
+{
+       GstCameraControlChannel *control_channel = GST_CAMERA_CONTROL_CHANNEL(object);
+
+       if (control_channel->label) {
+               g_free (control_channel->label);
+       }
+
+       control_channel->label = NULL;
+
+       if (parent_class->dispose) {
+               parent_class->dispose (object);
+       }
+}
diff --git a/subprojects/gst-plugins-base/gst-libs/gst/video/cameracontrolchannel.h b/subprojects/gst-plugins-base/gst-libs/gst/video/cameracontrolchannel.h
new file mode 100644 (file)
index 0000000..31aa41d
--- /dev/null
@@ -0,0 +1,67 @@
+/* GStreamer Camera Control Channel Interface
+ *
+ * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd.
+ *
+ * Contact: Jeongmo Yang <jm80.yang@samsung.com>
+ *
+ * cameracontrolchannel.h: individual channel object
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_CAMERA_CONTROL_CHANNEL_H__
+#define __GST_CAMERA_CONTROL_CHANNEL_H__
+
+#include <gst/gst.h>
+#include <gst/video/video-prelude.h>
+
+G_BEGIN_DECLS
+
+#define GST_TYPE_CAMERA_CONTROL_CHANNEL \
+  (gst_camera_control_channel_get_type ())
+#define GST_CAMERA_CONTROL_CHANNEL(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_CAMERA_CONTROL_CHANNEL, \
+                               GstCameraControlChannel))
+#define GST_CAMERA_CONTROL_CHANNEL_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_CAMERA_CONTROL_CHANNEL, \
+                            GstCameraControlChannelClass))
+#define GST_IS_CAMERA_CONTROL_CHANNEL(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_CAMERA_CONTROL_CHANNEL))
+#define GST_IS_CAMERA_CONTROL_CHANNEL_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_CAMERA_CONTROL_CHANNEL))
+
+typedef struct _GstCameraControlChannel {
+       GObject parent;
+       gchar *label;
+       gint min_value;
+       gint max_value;
+} GstCameraControlChannel;
+
+typedef struct _GstCameraControlChannelClass {
+       GObjectClass parent;
+
+       /* signals */
+       void (*value_changed)(GstCameraControlChannel *control_channel, gint value);
+
+       gpointer _gst_reserved[GST_PADDING];
+} GstCameraControlChannelClass;
+
+GST_VIDEO_API
+GType gst_camera_control_channel_get_type(void);
+
+G_END_DECLS
+
+#endif /* __GST_CAMERA_CONTROL_CHANNEL_H__ */
index 0a42e49..efad282 100644 (file)
@@ -256,6 +256,9 @@ gst_video_filter_transform (GstBaseTransform * trans, GstBuffer * inbuf,
   GstFlowReturn res;
   GstVideoFilter *filter = GST_VIDEO_FILTER_CAST (trans);
   GstVideoFilterClass *fclass;
+#ifdef USE_TBM
+  GstMapFlags map_flags;
+#endif
 
   if (G_UNLIKELY (!filter->negotiated))
     goto unknown_format;
@@ -264,6 +267,31 @@ gst_video_filter_transform (GstBaseTransform * trans, GstBuffer * inbuf,
   if (fclass->transform_frame) {
     GstVideoFrame in_frame, out_frame;
 
+#ifdef USE_TBM
+    map_flags = GST_MAP_READ;
+    if (filter->in_info.finfo->format != GST_VIDEO_FORMAT_SN12 &&
+      filter->in_info.finfo->format != GST_VIDEO_FORMAT_SR32)
+      map_flags |= GST_VIDEO_FRAME_MAP_FLAG_NO_REF;
+
+    GST_LOG_OBJECT (trans, "IN format %d, flags 0x%x",
+      filter->in_info.finfo->format, map_flags);
+
+    if (!gst_video_frame_map (&in_frame, &filter->in_info, inbuf, map_flags))
+      goto invalid_buffer;
+
+    map_flags = GST_MAP_WRITE;
+    if (filter->out_info.finfo->format != GST_VIDEO_FORMAT_SN12 &&
+      filter->out_info.finfo->format != GST_VIDEO_FORMAT_SR32)
+      map_flags |= GST_VIDEO_FRAME_MAP_FLAG_NO_REF;
+
+    GST_LOG_OBJECT (trans, "OUT format %d, flags 0x%x",
+      filter->out_info.finfo->format, map_flags);
+
+    if (!gst_video_frame_map (&out_frame, &filter->out_info, outbuf, map_flags)) {
+      gst_video_frame_unmap (&in_frame);
+      goto invalid_buffer;
+    }
+#else
     if (!gst_video_frame_map (&in_frame, &filter->in_info, inbuf,
             GST_MAP_READ | GST_VIDEO_FRAME_MAP_FLAG_NO_REF))
       goto invalid_buffer;
@@ -273,6 +301,7 @@ gst_video_filter_transform (GstBaseTransform * trans, GstBuffer * inbuf,
       gst_video_frame_unmap (&in_frame);
       goto invalid_buffer;
     }
+#endif
     res = fclass->transform_frame (filter, &in_frame, &out_frame);
 
     gst_video_frame_unmap (&out_frame);
index 7d5c229..c2c3b5b 100644 (file)
@@ -34,6 +34,9 @@
 #include <glib.h>
 #include <string.h>
 #include <math.h>
+#ifdef USE_TBM
+#include <gst/allocators/gsttizenmemory.h>
+#endif
 #include <gst/base/base.h>
 
 #include "video-orc.h"
@@ -6712,6 +6715,62 @@ convert_scale_planes (GstVideoConverter * convert,
   convert_fill_border (convert, dest);
 }
 
+#ifdef USE_TBM
+static void
+convert_I420_SN12 (GstVideoConverter * convert, const GstVideoFrame * src,
+    GstVideoFrame * dst)
+{
+  guint8 *src_Y = NULL;
+  guint8 *src_U = NULL;
+  guint8 *src_V = NULL;
+  guint8 *dst_Y = NULL;
+  guint8 *dst_UV = NULL;
+  int i = 0;
+  int j = 0;
+
+  gint width = convert->in_width;
+  gint height = convert->in_height;
+  gint loop_count_Y = GST_ROUND_DOWN_2 (height);
+  gint loop_count_UV = GST_ROUND_UP_2 (width) >> 1;
+
+  gint src_stride_Y = GST_VIDEO_FRAME_PLANE_STRIDE (src, 0);
+  gint src_stride_U = GST_VIDEO_FRAME_PLANE_STRIDE (src, 1);
+  gint src_stride_diff = src_stride_U - loop_count_UV;
+
+  gint dst_stride_Y = GST_VIDEO_FRAME_PLANE_STRIDE (dst, 0);
+  gint dst_stride_UV = GST_VIDEO_FRAME_PLANE_STRIDE (dst, 1);
+  gint dst_stride_diff = GST_ROUND_DOWN_2 (dst_stride_UV - width);
+
+  src_Y = GST_VIDEO_FRAME_PLANE_DATA (src, 0);
+  src_U = GST_VIDEO_FRAME_PLANE_DATA (src, 1);
+  src_V = GST_VIDEO_FRAME_PLANE_DATA (src, 2);
+
+  dst_Y = GST_VIDEO_FRAME_PLANE_DATA (dst, 0);
+  dst_UV = GST_VIDEO_FRAME_PLANE_DATA (dst, 1);
+
+  GST_DEBUG_OBJECT (convert, "size %dx%d, stride src[0:%d,1:%d], dst[0:%d,1:%d]",
+    width, height, src_stride_Y, src_stride_U, dst_stride_Y, dst_stride_UV);
+
+  for (i = 0 ; i < loop_count_Y ; i += 2) {
+    memcpy (dst_Y, src_Y, width);
+    src_Y += src_stride_Y;
+    dst_Y += dst_stride_Y;
+
+    memcpy (dst_Y, src_Y, width);
+    src_Y += src_stride_Y;
+    dst_Y += dst_stride_Y;
+
+    for (j = 0 ; j < loop_count_UV ; j++) {
+      *dst_UV++ = *src_U++;
+      *dst_UV++ = *src_V++;
+    }
+    src_U += src_stride_diff;
+    src_V += src_stride_diff;
+    dst_UV += dst_stride_diff;
+  }
+}
+#endif
+
 static GstVideoFormat
 get_scale_format (GstVideoFormat format, gint plane)
 {
@@ -6822,6 +6881,10 @@ get_scale_format (GstVideoFormat format, gint plane)
     case GST_VIDEO_FORMAT_NV16_10LE32:
     case GST_VIDEO_FORMAT_NV12_10LE40:
     case GST_VIDEO_FORMAT_BGR10A2_LE:
+#ifdef USE_TBM
+    case GST_VIDEO_FORMAT_SN12:
+    case GST_VIDEO_FORMAT_ST12:
+#endif
     case GST_VIDEO_FORMAT_RGB10A2_LE:
     case GST_VIDEO_FORMAT_Y444_16BE:
     case GST_VIDEO_FORMAT_Y444_16LE:
@@ -6836,6 +6899,10 @@ get_scale_format (GstVideoFormat format, gint plane)
       res = format;
       g_assert_not_reached ();
       break;
+#ifdef TIZEN_FEATURE_VIDEO_MODIFICATION
+    default:
+      break;
+#endif
   }
   return res;
 }
@@ -6888,6 +6955,12 @@ setup_scale (GstVideoConverter * convert)
   in_format = GST_VIDEO_INFO_FORMAT (in_info);
   out_format = GST_VIDEO_INFO_FORMAT (out_info);
 
+#ifdef USE_TBM
+  if(out_format == GST_VIDEO_FORMAT_SN12) {
+    /* do nothing for SN12 output format */
+    return TRUE;
+  }
+#endif
   switch (in_format) {
     case GST_VIDEO_FORMAT_RGB15:
     case GST_VIDEO_FORMAT_RGB16:
@@ -6904,6 +6977,10 @@ setup_scale (GstVideoConverter * convert)
         return FALSE;
       }
       break;
+#ifdef USE_TBM
+    case GST_VIDEO_FORMAT_SN12:
+      return TRUE; /* do nothing for SN12 format */
+#endif
     default:
       break;
   }
@@ -7273,6 +7350,10 @@ static const VideoTransform transforms[] = {
       TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
   {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_Y444, FALSE, FALSE, FALSE, TRUE,
       TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
+#ifdef USE_TBM
+  {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_SN12, FALSE, FALSE, FALSE, TRUE,
+      TRUE, FALSE, FALSE, FALSE, 0, 0, convert_I420_SN12},
+#endif
   {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_GRAY8, FALSE, FALSE, FALSE, TRUE,
       TRUE, FALSE, FALSE, FALSE, 0, 0, convert_scale_planes},
   {GST_VIDEO_FORMAT_I420, GST_VIDEO_FORMAT_A420, FALSE, FALSE, FALSE, TRUE,
index 8b1bfa3..5af5438 100644 (file)
@@ -5433,6 +5433,41 @@ pack_bgr10a2_le (const GstVideoFormatInfo * info, GstVideoPackFlags flags,
   }
 }
 
+#define PACK_INVZ16_LE GST_VIDEO_FORMAT_AYUV64, unpack_INVZ16_LE, 1, pack_INVZ16_LE
+static void
+unpack_INVZ16_LE (const GstVideoFormatInfo * info, GstVideoPackFlags flags,
+    gpointer dest, const gpointer data[GST_VIDEO_MAX_PLANES],
+    const gint stride[GST_VIDEO_MAX_PLANES], gint x, gint y, gint width)
+{
+  int i;
+  const guint16 *restrict s = GET_LINE (y);
+  guint16 *restrict d = dest;
+
+  s += x;
+
+  for (i = 0; i < width; i++) {
+    d[i * 4 + 0] = 0xffff;
+    d[i * 4 + 1] = GST_READ_UINT16_LE (s + i);
+    d[i * 4 + 2] = 0x8000;
+    d[i * 4 + 3] = 0x8000;
+  }
+}
+
+static void
+pack_INVZ16_LE (const GstVideoFormatInfo * info, GstVideoPackFlags flags,
+    const gpointer src, gint sstride, gpointer data[GST_VIDEO_MAX_PLANES],
+    const gint stride[GST_VIDEO_MAX_PLANES], GstVideoChromaSite chroma_site,
+    gint y, gint width)
+{
+  int i;
+  guint16 *restrict d = GET_LINE (y);
+  const guint16 *restrict s = src;
+
+  for (i = 0; i < width; i++) {
+    GST_WRITE_UINT16_LE (d + i, s[i * 4 + 1]);
+  }
+}
+
 #define PACK_RGB10A2_LE GST_VIDEO_FORMAT_ARGB64, unpack_rgb10a2_le, 1, pack_rgb10a2_le
 static void
 unpack_rgb10a2_le (const GstVideoFormatInfo * info, GstVideoPackFlags flags,
@@ -5493,6 +5528,9 @@ pack_rgb10a2_le (const GstVideoFormatInfo * info, GstVideoPackFlags flags,
   }
 }
 
+#define MAKE_DEPTH_FORMAT(name, desc, fourcc, depth, pstride, plane, offs, sub, pack) \
+ { fourcc, {GST_VIDEO_FORMAT_ ##name, G_STRINGIFY(name), desc, GST_VIDEO_FORMAT_FLAG_GRAY | GST_VIDEO_FORMAT_FLAG_LE, depth, pstride, plane, offs, sub, pack } }
+
 #define PACK_Y444_16BE GST_VIDEO_FORMAT_AYUV64, unpack_Y444_16BE, 1, pack_Y444_16BE
 static void
 unpack_Y444_16BE (const GstVideoFormatInfo * info, GstVideoPackFlags flags,
@@ -6575,12 +6613,16 @@ static const VideoFormat formats[] = {
 
   MAKE_YUV_FORMAT (I420, "raw video", GST_MAKE_FOURCC ('I', '4', '2', '0'),
       DPTH888, PSTR111, PLANE012, OFFS0, SUB420, PACK_420),
+  MAKE_YUV_FORMAT (S420, "raw video", GST_MAKE_FOURCC ('S', '4', '2', '0'),
+      DPTH888, PSTR111, PLANE012, OFFS0, SUB420, PACK_420),      
   MAKE_YUV_FORMAT (YV12, "raw video", GST_MAKE_FOURCC ('Y', 'V', '1', '2'),
       DPTH888, PSTR111, PLANE021, OFFS0, SUB420, PACK_420),
   MAKE_YUV_FORMAT (YUY2, "raw video", GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'),
       DPTH888, PSTR244, PLANE0, OFFS013, SUB422, PACK_YUY2),
   MAKE_YUV_FORMAT (UYVY, "raw video", GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y'),
       DPTH888, PSTR244, PLANE0, OFFS102, SUB422, PACK_UYVY),
+  MAKE_YUV_FORMAT (ITLV, "raw video", GST_MAKE_FOURCC ('I', 'T', 'L', 'V'),
+      DPTH888, PSTR244, PLANE0, OFFS012, SUB422, PACK_UYVY),
   MAKE_YUVA_PACK_FORMAT (AYUV, "raw video", GST_MAKE_FOURCC ('A', 'Y', 'U',
           'V'), DPTH8888, PSTR4444, PLANE0, OFFS1230, SUB4444, PACK_AYUV),
   MAKE_RGB_FORMAT (RGBx, "raw video", DPTH888, PSTR444, PLANE0, OFFS012,
@@ -6595,6 +6637,8 @@ static const VideoFormat formats[] = {
       SUB4444, PACK_RGBA),
   MAKE_RGBA_FORMAT (BGRA, "raw video", DPTH8888, PSTR4444, PLANE0, OFFS2103,
       SUB4444, PACK_BGRA),
+  MAKE_RGBA_FORMAT (SR32, "raw video", DPTH8888, PSTR4444, PLANE0, OFFS2103,
+      SUB4444, PACK_BGRA),
   MAKE_RGBA_PACK_FORMAT (ARGB, "raw video", DPTH8888, PSTR4444, PLANE0,
       OFFS1230, SUB4444, PACK_ARGB),
   MAKE_RGBA_FORMAT (ABGR, "raw video", DPTH8888, PSTR4444, PLANE0, OFFS3210,
@@ -6618,8 +6662,14 @@ static const VideoFormat formats[] = {
       DPTH16_16_16, PSTR488, PLANE0, OFFS204, SUB422, PACK_v216),
   MAKE_YUV_FORMAT (NV12, "raw video", GST_MAKE_FOURCC ('N', 'V', '1', '2'),
       DPTH888, PSTR122, PLANE011, OFFS001, SUB420, PACK_NV12),
+  MAKE_YUV_FORMAT (SN12, "raw video", GST_MAKE_FOURCC ('S', 'N', '1', '2'),
+      DPTH888, PSTR122, PLANE011, OFFS001, SUB420, PACK_NV12),
+  MAKE_YUV_FORMAT (ST12, "raw video", GST_MAKE_FOURCC ('S', 'T', '1', '2'),
+      DPTH888, PSTR122, PLANE011, OFFS001, SUB420, PACK_NV12),
   MAKE_YUV_FORMAT (NV21, "raw video", GST_MAKE_FOURCC ('N', 'V', '2', '1'),
       DPTH888, PSTR122, PLANE011, OFFS010, SUB420, PACK_NV21),
+  MAKE_YUV_FORMAT (SN21, "raw video", GST_MAKE_FOURCC ('S', 'N', '2', '1'),
+      DPTH888, PSTR122, PLANE011, OFFS010, SUB420, PACK_NV21),
 
   MAKE_GRAY_FORMAT (GRAY8, "raw video", DPTH8, PSTR1, PLANE0, OFFS0, SUB4,
       PACK_GRAY8),
@@ -6770,6 +6820,14 @@ static const VideoFormat formats[] = {
   MAKE_RGBA_LE_PACK_FORMAT (BGR10A2_LE, "raw video", DPTH10_10_10_2, PSTR4444,
       PLANE0,
       OFFS0, SUB4444, PACK_BGR10A2_LE),
+  MAKE_DEPTH_FORMAT (INVZ, "raw video", GST_MAKE_FOURCC ('I', 'N', 'V', 'Z'),
+      DPTH16, PSTR2, PLANE0, OFFS0, SUB4, PACK_INVZ16_LE),
+#ifdef TIZEN_PROFILE_TV
+  MAKE_YUV_FORMAT (STV0, "raw video", GST_MAKE_FOURCC ('S', 'T', 'V', '0'),
+      DPTH888, PSTR111, PLANE012, OFFS0, SUB420, PACK_420),
+  MAKE_YUV_FORMAT (STV1, "raw video", GST_MAKE_FOURCC ('S', 'T', 'V', '1'),
+      DPTH888, PSTR111, PLANE012, OFFS0, SUB420, PACK_420),
+#endif
   MAKE_RGBA_LE_PACK_FORMAT (RGB10A2_LE, "raw video", DPTH10_10_10_2, PSTR4444,
       PLANE0, OFFS0, SUB4444, PACK_RGB10A2_LE),
   MAKE_YUV_FORMAT (Y444_16BE, "raw video", 0x00000000, DPTH16_16_16,
@@ -6989,6 +7047,14 @@ gst_video_format_from_fourcc (guint32 fourcc)
   switch (fourcc) {
     case GST_MAKE_FOURCC ('I', '4', '2', '0'):
       return GST_VIDEO_FORMAT_I420;
+    case GST_MAKE_FOURCC ('S', '4', '2', '0'):
+      return GST_VIDEO_FORMAT_S420;
+#ifdef TIZEN_PROFILE_TV
+    case GST_MAKE_FOURCC ('S', 'T', 'V', '0'):
+      return GST_VIDEO_FORMAT_STV0;
+    case GST_MAKE_FOURCC ('S', 'T', 'V', '1'):
+      return GST_VIDEO_FORMAT_STV1;
+#endif
     case GST_MAKE_FOURCC ('Y', 'V', '1', '2'):
       return GST_VIDEO_FORMAT_YV12;
     case GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'):
@@ -6997,6 +7063,8 @@ gst_video_format_from_fourcc (guint32 fourcc)
       return GST_VIDEO_FORMAT_YVYU;
     case GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y'):
       return GST_VIDEO_FORMAT_UYVY;
+    case GST_MAKE_FOURCC ('I', 'T', 'L', 'V'):
+      return GST_VIDEO_FORMAT_ITLV;
     case GST_MAKE_FOURCC ('V', 'Y', 'U', 'Y'):
       return GST_VIDEO_FORMAT_VYUY;
     case GST_MAKE_FOURCC ('A', 'Y', 'U', 'V'):
@@ -7015,8 +7083,14 @@ gst_video_format_from_fourcc (guint32 fourcc)
       return GST_VIDEO_FORMAT_Y210;
     case GST_MAKE_FOURCC ('N', 'V', '1', '2'):
       return GST_VIDEO_FORMAT_NV12;
+    case GST_MAKE_FOURCC ('S', 'N', '1', '2'):
+      return GST_VIDEO_FORMAT_SN12;
+    case GST_MAKE_FOURCC ('S', 'T', '1', '2'):
+      return GST_VIDEO_FORMAT_ST12;
     case GST_MAKE_FOURCC ('N', 'V', '2', '1'):
       return GST_VIDEO_FORMAT_NV21;
+    case GST_MAKE_FOURCC ('S', 'N', '2', '1'):
+      return GST_VIDEO_FORMAT_SN21;
     case GST_MAKE_FOURCC ('N', 'V', '1', '6'):
       return GST_VIDEO_FORMAT_NV16;
     case GST_MAKE_FOURCC ('N', 'V', '6', '1'):
@@ -7059,7 +7133,8 @@ gst_video_format_from_fourcc (guint32 fourcc)
       return GST_VIDEO_FORMAT_VUYA;
     case GST_MAKE_FOURCC ('A', 'R', '3', '0'):
       return GST_VIDEO_FORMAT_BGR10A2_LE;
-
+    case GST_MAKE_FOURCC ('I', 'N', 'V', 'Z'):
+      return GST_VIDEO_FORMAT_INVZ;
     default:
       return GST_VIDEO_FORMAT_UNKNOWN;
   }
index fd10668..dc19a01 100644 (file)
@@ -144,9 +144,11 @@ typedef enum {
   GST_VIDEO_FORMAT_UNKNOWN,
   GST_VIDEO_FORMAT_ENCODED,
   GST_VIDEO_FORMAT_I420,
+  GST_VIDEO_FORMAT_S420,
   GST_VIDEO_FORMAT_YV12,
   GST_VIDEO_FORMAT_YUY2,
   GST_VIDEO_FORMAT_UYVY,
+  GST_VIDEO_FORMAT_ITLV,
   GST_VIDEO_FORMAT_AYUV,
   GST_VIDEO_FORMAT_RGBx,
   GST_VIDEO_FORMAT_BGRx,
@@ -154,6 +156,7 @@ typedef enum {
   GST_VIDEO_FORMAT_xBGR,
   GST_VIDEO_FORMAT_RGBA,
   GST_VIDEO_FORMAT_BGRA,
+  GST_VIDEO_FORMAT_SR32,
   GST_VIDEO_FORMAT_ARGB,
   GST_VIDEO_FORMAT_ABGR,
   GST_VIDEO_FORMAT_RGB,
@@ -165,7 +168,10 @@ typedef enum {
   GST_VIDEO_FORMAT_v210,
   GST_VIDEO_FORMAT_v216,
   GST_VIDEO_FORMAT_NV12,
+  GST_VIDEO_FORMAT_SN12,
+  GST_VIDEO_FORMAT_ST12,
   GST_VIDEO_FORMAT_NV21,
+  GST_VIDEO_FORMAT_SN21,
   GST_VIDEO_FORMAT_GRAY8,
   GST_VIDEO_FORMAT_GRAY16_BE,
   GST_VIDEO_FORMAT_GRAY16_LE,
@@ -227,6 +233,9 @@ typedef enum {
   GST_VIDEO_FORMAT_Y410,
   GST_VIDEO_FORMAT_VUYA,
   GST_VIDEO_FORMAT_BGR10A2_LE,
+  GST_VIDEO_FORMAT_INVZ,
+  GST_VIDEO_FORMAT_STV0, /* TIZEN_PROFILE_TV */
+  GST_VIDEO_FORMAT_STV1, /* TIZEN_PROFILE_TV */
   GST_VIDEO_FORMAT_RGB10A2_LE,
   GST_VIDEO_FORMAT_Y444_16BE,
   GST_VIDEO_FORMAT_Y444_16LE,
@@ -657,6 +666,7 @@ gconstpointer  gst_video_format_get_palette          (GstVideoFormat format, gsi
     "P010_10BE, P010_10LE, NV12_10LE32, NV12_10LE40, Y444, RGBP, GBR, BGRP, NV24, xBGR, BGRx, " \
     "xRGB, RGBx, BGR, IYU2, v308, RGB, Y42B, NV61, NV16, VYUY, UYVY, YVYU, YUY2, I420, " \
     "YV12, NV21, NV12, NV12_64Z32, NV12_4L4, NV12_32L32, Y41B, IYU1, YVU9, YUV9, RGB16, " \
+       "S420, ITLV, SN12, ST12, SN21, INVZ, STV0, STV1, " \
     "BGR16, RGB15, BGR15, RGB8P, GRAY16_BE, GRAY16_LE, GRAY10_LE32, GRAY8 }"
 #elif G_BYTE_ORDER == G_LITTLE_ENDIAN
 #define GST_VIDEO_FORMATS_ALL "{ AYUV64, ARGB64, GBRA_12LE, GBRA_12BE, Y412_LE, " \
@@ -669,6 +679,7 @@ gconstpointer  gst_video_format_get_palette          (GstVideoFormat format, gsi
     "P010_10LE, NV12_10LE32, NV12_10LE40, P010_10BE, Y444, RGBP, GBR, BGRP, NV24, xBGR, BGRx, " \
     "xRGB, RGBx, BGR, IYU2, v308, RGB, Y42B, NV61, NV16, VYUY, UYVY, YVYU, YUY2, I420, " \
     "YV12, NV21, NV12, NV12_64Z32, NV12_4L4, NV12_32L32, Y41B, IYU1, YVU9, YUV9, RGB16, " \
+       "S420, ITLV, SN12, ST12, SN21, INVZ, STV0, STV1, " \
     "BGR16, RGB15, BGR15, RGB8P, GRAY16_LE, GRAY16_BE, GRAY10_LE32, GRAY8 }"
 #endif
 
index 4aafb38..93bede5 100644 (file)
@@ -798,6 +798,7 @@ fill_planes (GstVideoInfo * info, gsize plane_size[GST_VIDEO_MAX_PLANES])
     case GST_VIDEO_FORMAT_RGBA:
     case GST_VIDEO_FORMAT_BGRx:
     case GST_VIDEO_FORMAT_BGRA:
+    case GST_VIDEO_FORMAT_SR32:
     case GST_VIDEO_FORMAT_xRGB:
     case GST_VIDEO_FORMAT_ARGB:
     case GST_VIDEO_FORMAT_xBGR:
@@ -847,6 +848,7 @@ fill_planes (GstVideoInfo * info, gsize plane_size[GST_VIDEO_MAX_PLANES])
       break;
     case GST_VIDEO_FORMAT_GRAY16_BE:
     case GST_VIDEO_FORMAT_GRAY16_LE:
+    case GST_VIDEO_FORMAT_INVZ:
       info->stride[0] = GST_ROUND_UP_4 (width * 2);
       info->offset[0] = 0;
       info->size = info->stride[0] * height;
@@ -878,7 +880,12 @@ fill_planes (GstVideoInfo * info, gsize plane_size[GST_VIDEO_MAX_PLANES])
       info->size = info->stride[0] * height;
       break;
     case GST_VIDEO_FORMAT_I420:
+    case GST_VIDEO_FORMAT_S420:
     case GST_VIDEO_FORMAT_YV12:        /* same as I420, but plane 1+2 swapped */
+#ifdef TIZEN_PROFILE_TV
+    case GST_VIDEO_FORMAT_STV0:
+    case GST_VIDEO_FORMAT_STV1:
+#endif
       info->stride[0] = GST_ROUND_UP_4 (width);
       info->stride[1] = GST_ROUND_UP_4 (GST_ROUND_UP_2 (width) / 2);
       info->stride[2] = info->stride[1];
@@ -934,15 +941,24 @@ fill_planes (GstVideoInfo * info, gsize plane_size[GST_VIDEO_MAX_PLANES])
       info->size = info->stride[0] * height * 4;
       break;
     case GST_VIDEO_FORMAT_NV12:
+#ifdef TIZEN_FEATURE_VIDEO_MODIFICATION
+    case GST_VIDEO_FORMAT_SN12:
+    case GST_VIDEO_FORMAT_ST12:
+    case GST_VIDEO_FORMAT_SN21:
+#endif
     case GST_VIDEO_FORMAT_NV21:
       info->stride[0] = GST_ROUND_UP_4 (width);
       info->stride[1] = info->stride[0];
       info->offset[0] = 0;
       info->offset[1] = info->stride[0] * GST_ROUND_UP_2 (height);
+#ifdef TIZEN_FEATURE_VIDEO_MODIFICATION
+      info->size = info->stride[0] * GST_ROUND_UP_2 (height) * 3 / 2;
+#else
       cr_h = GST_ROUND_UP_2 (height) / 2;
       if (GST_VIDEO_INFO_IS_INTERLACED (info))
         cr_h = GST_ROUND_UP_2 (cr_h);
       info->size = info->offset[1] + info->stride[0] * cr_h;
+#endif
       break;
     case GST_VIDEO_FORMAT_AV12:
       info->stride[0] = GST_ROUND_UP_4 (width);
@@ -1177,6 +1193,9 @@ fill_planes (GstVideoInfo * info, gsize plane_size[GST_VIDEO_MAX_PLANES])
     case GST_VIDEO_FORMAT_ENCODED:
       break;
     case GST_VIDEO_FORMAT_UNKNOWN:
+#ifdef TIZEN_FEATURE_VIDEO_MODIFICATION
+    default:
+#endif
       GST_ERROR ("invalid format");
       g_warning ("invalid format");
       return FALSE;
index e1465ba..ab58051 100644 (file)
@@ -327,6 +327,128 @@ gst_video_overlay_get_type (void)
   return gst_video_overlay_type;
 }
 
+#ifdef TIZEN_FEATURE_WAYLAND_ENHANCEMENT
+/**
+* gst_video_overlay_set_wl_window_wl_surface_id:
+* @overlay: a #GstVideoOverlay to set the window on.
+* @wl_surface_id: a global resource id of wl_surface referencing the wayland window.
+
+* This will call the video overlay's set_wl_window_wl_surface_id method.  You
+* should use this medtod  to tell to an overlay to display video output to a
+* specific window(e.g. an Wayland Window on Wayland).
+* But you can also set handle to wayland videosink with gst_video_overlay_set_wl_window_wl_surface_id().
+*/
+void
+gst_video_overlay_set_wl_window_wl_surface_id (GstVideoOverlay * overlay,
+    gint wl_surface_id)
+{
+  GstVideoOverlayInterface *iface;
+
+  g_return_if_fail (overlay != NULL);
+  g_return_if_fail (GST_IS_VIDEO_OVERLAY (overlay));
+
+  iface = GST_VIDEO_OVERLAY_GET_INTERFACE (overlay);
+
+  if (iface->set_wl_window_wl_surface_id) {
+    iface->set_wl_window_wl_surface_id (overlay, wl_surface_id);
+  }
+}
+
+/**
+* gst_video_overlay_set_wl_window_exported_shell_handle:
+* @overlay: a #GstVideoOverlay to set the window on.
+* @exported_shell_handle: a shell handle exported by wayland window for synchronization between UI and video
+
+* This will call the video overlay's set_wl_window_exported_shell_handle method. You
+* should use this medtod to tell to an overlay to display video output to a
+* specific window(e.g. an Wayland Window on Wayland).
+* But you can also set handle to wayland videosink with gst_video_overlay_set_wl_window_exported_shell_handle().
+*/
+void
+gst_video_overlay_set_wl_window_exported_shell_handle (GstVideoOverlay * overlay,
+    const char *exported_shell_handle)
+{
+  GstVideoOverlayInterface *iface;
+
+  g_return_if_fail (overlay != NULL);
+  g_return_if_fail (GST_IS_VIDEO_OVERLAY (overlay));
+
+  iface = GST_VIDEO_OVERLAY_GET_INTERFACE (overlay);
+
+  if (iface->set_wl_window_exported_shell_handle) {
+    iface->set_wl_window_exported_shell_handle (overlay, exported_shell_handle);
+  }
+}
+
+
+
+/**
+ * gst_video_overlay_set_display_roi_area:
+ * @overlay: a #GstVideoOverlay
+ * @x: the horizontal offset of the render area inside the window
+ * @y: the vertical offset of the render area inside the window
+ * @width: the width of the render area inside the window
+ * @height: the height of the render area inside the window
+ *
+ * Set the ROI(Region of Interest) area of wayland window.
+ * Returns: %FALSE if not supported by the sink.
+ */
+gboolean
+gst_video_overlay_set_display_roi_area (GstVideoOverlay * overlay,
+    gint x, gint y, gint width, gint height)
+{
+  GstVideoOverlayInterface *iface;
+
+  g_return_val_if_fail (overlay != NULL, FALSE);
+  g_return_val_if_fail (GST_IS_VIDEO_OVERLAY (overlay), FALSE);
+  g_return_val_if_fail (width > 0 && height > 0, FALSE);
+
+  iface = GST_VIDEO_OVERLAY_GET_INTERFACE (overlay);
+
+  if (iface->set_display_roi_area) {
+    iface->set_display_roi_area (overlay, x, y, width, height);
+    return TRUE;
+  }
+  return FALSE;
+}
+
+/**
+ * gst_video_overlay_set_video_roi_area:
+ * @overlay: a #GstVideoOverlay
+ * @x_scale: x coordinate ratio value of video source area
+ *           based on video width size, valid range is from 0.0 to 1.0.
+ * @y_scale: y coordinate ratio value of video source area
+ *           based on video width size, valid range is from 0.0 to 1.0.
+ * @w_scale: width ratio value of the video source area
+ *           based on video width size, valid range is from greater than 0.0 to 1.0.
+ * @h_scale: height ratio value of the video source area
+ *           based on video width size, valid range is from greater than 0.0 to 1.0.
+ *
+ * Sets the ROI(Region Of Interest) area of video source.
+ * Returns: %FALSE if not supported by the sink.
+**/
+gboolean
+gst_video_overlay_set_video_roi_area (GstVideoOverlay * overlay,
+    gdouble x_scale, gdouble y_scale, gdouble w_scale, gdouble h_scale)
+{
+  GstVideoOverlayInterface *iface;
+
+  g_return_val_if_fail (overlay != NULL, FALSE);
+  g_return_val_if_fail (GST_IS_VIDEO_OVERLAY (overlay), FALSE);
+  g_return_val_if_fail (x_scale >= 0.0 && x_scale <= 1.0, FALSE);
+  g_return_val_if_fail (y_scale >= 0.0 && y_scale <= 1.0, FALSE);
+  g_return_val_if_fail (w_scale > 0.0 && w_scale <= 1.0, FALSE);
+  g_return_val_if_fail (h_scale > 0.0 && h_scale <= 1.0, FALSE);
+
+  iface = GST_VIDEO_OVERLAY_GET_INTERFACE (overlay);
+
+  if (iface->set_video_roi_area) {
+    iface->set_video_roi_area (overlay, x_scale, y_scale, w_scale, h_scale);
+    return TRUE;
+  }
+  return FALSE;
+}
+#endif
 /**
  * gst_video_overlay_set_window_handle:
  * @overlay: a #GstVideoOverlay to set the window on.
index 93530c4..b8afb2d 100644 (file)
@@ -67,6 +67,17 @@ struct _GstVideoOverlayInterface {
                                 gint width, gint height);
 
   void (*set_window_handle)    (GstVideoOverlay *overlay, guintptr handle);
+#ifdef TIZEN_FEATURE_WAYLAND_ENHANCEMENT
+  void (*set_wl_window_wl_surface_id)   (GstVideoOverlay * overlay, gint wl_surface_id);
+  void (*set_wl_window_exported_shell_handle) (GstVideoOverlay * overlay, const char *exported_shell_handle);
+  void (*set_display_roi_area) (GstVideoOverlay *overlay,
+                                gint x, gint y,
+                                gint width, gint height);
+
+  void (*set_video_roi_area)   (GstVideoOverlay *overlay,
+                                gdouble x_scale, gdouble y_scale,
+                                gdouble w_scale, gdouble h_scale);
+#endif
 };
 
 GST_VIDEO_API
@@ -113,7 +124,25 @@ gboolean        gst_video_overlay_set_property          (GObject         * objec
                                                          gint              last_prop_id,
                                                          guint             property_id,
                                                          const GValue    * value);
+#ifdef TIZEN_FEATURE_WAYLAND_ENHANCEMENT
+GST_VIDEO_API
+void gst_video_overlay_set_wl_window_wl_surface_id (GstVideoOverlay * overlay,
+    gint wl_surface_id);
 
+GST_VIDEO_API
+void gst_video_overlay_set_wl_window_exported_shell_handle (GstVideoOverlay * overlay,
+    const char *exported_shell_handle);
+
+GST_VIDEO_API
+gboolean gst_video_overlay_set_display_roi_area         (GstVideoOverlay * overlay,
+                                                         gint x, gint y,
+                                                         gint width, gint height);
+
+GST_VIDEO_API
+gboolean gst_video_overlay_set_video_roi_area           (GstVideoOverlay * overlay,
+                                                         gdouble x_scale, gdouble y_scale,
+                                                         gdouble w_scale, gdouble h_scale);
+#endif
 G_END_DECLS
 
 #endif /* __GST_VIDEO_OVERLAY_H__ */
index d6d645f..a56b3b4 100644 (file)
@@ -183,6 +183,10 @@ struct _GstDecodeBin
 
   gboolean expose_allstreams;   /* Whether to expose unknown type streams or not */
 
+#ifdef TIZEN_FEATURE_TRUSTZONE
+  /*tzmultiqueue patch : use trustzone flag*/
+  gboolean use_trustzone;
+#endif
   GList *filtered;              /* elements for which error messages are filtered */
   GList *filtered_errors;       /* filtered error messages */
 
@@ -282,6 +286,10 @@ enum
   PROP_POST_STREAM_TOPOLOGY,
   PROP_EXPOSE_ALL_STREAMS,
   PROP_CONNECTION_SPEED
+#ifdef TIZEN_FEATURE_TRUSTZONE
+  /*tzmultiqueue patch : use trustzone flag*/
+  ,PROP_USE_TRUSTZONE
+#endif
 };
 
 static GstBinClass *parent_class;
@@ -989,6 +997,14 @@ gst_decode_bin_class_init (GstDecodeBinClass * klass)
           DEFAULT_EXPOSE_ALL_STREAMS,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
+#ifdef TIZEN_FEATURE_TRUSTZONE
+  /*tzmultiqueue patch : use-trustzone property*/
+  g_object_class_install_property (gobject_klass, PROP_USE_TRUSTZONE,
+      g_param_spec_boolean ("use-trustzone", "Add trustzone flag to decodebin2",
+          "Add trustzone flag to decodebin2 to add tzmultiqueue element",
+          0,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+#endif
   /**
    * GstDecodeBin2::connection-speed
    *
@@ -1326,6 +1342,13 @@ gst_decode_bin_set_property (GObject * object, guint prop_id,
     case PROP_EXPOSE_ALL_STREAMS:
       dbin->expose_allstreams = g_value_get_boolean (value);
       break;
+#ifdef TIZEN_FEATURE_TRUSTZONE
+    /*tzmultiqueue patch : use-trustzone property*/
+    case PROP_USE_TRUSTZONE:
+      GST_DEBUG_OBJECT (dbin, "set dbin->use_trustzone to %d", g_value_get_boolean(value));
+      dbin->use_trustzone = g_value_get_boolean (value);
+      break;
+#endif
     case PROP_CONNECTION_SPEED:
       GST_OBJECT_LOCK (dbin);
       dbin->connection_speed = g_value_get_uint64 (value) * 1000;
@@ -1381,6 +1404,12 @@ gst_decode_bin_get_property (GObject * object, guint prop_id,
     case PROP_EXPOSE_ALL_STREAMS:
       g_value_set_boolean (value, dbin->expose_allstreams);
       break;
+#ifdef TIZEN_FEATURE_TRUSTZONE
+    /*tzmultiqueue patch : use-trustzone property*/
+    case PROP_USE_TRUSTZONE:
+      g_value_set_boolean (value, dbin->use_trustzone);
+      break;
+#endif
     case PROP_CONNECTION_SPEED:
       GST_OBJECT_LOCK (dbin);
       g_value_set_uint64 (value, dbin->connection_speed / 1000);
@@ -3853,6 +3882,14 @@ gst_decode_group_new (GstDecodeBin * dbin, GstDecodeChain * parent)
   group->dbin = dbin;
   group->parent = parent;
 
+#ifdef TIZEN_FEATURE_TRUSTZONE
+  /*tzmultiqueue patch : when this flag is set to TRUE, we will use tzmultiqueue instead of multiqueue element in pipeline*/
+  if (dbin->use_trustzone) {
+    GST_DEBUG_OBJECT (dbin, "decodebin2 use tzmultiqueue");
+    mq = group->multiqueue = gst_element_factory_make ("tzmultiqueue", NULL);
+  }
+  else
+#endif
   mq = group->multiqueue = gst_element_factory_make ("multiqueue", NULL);
   if (G_UNLIKELY (!group->multiqueue))
     goto missing_multiqueue;
index fd93284..fb4bc63 100644 (file)
@@ -267,14 +267,25 @@ struct _GstDecodebin3
 
   /* Properties */
   GstCaps *caps;
+#ifdef TIZEN_FEATURE_FORCE_SW_DECODER
+  gboolean force_sw_decoders_for_video;
+  gboolean force_sw_decoders_for_audio;
+#else
+  gboolean force_sw_decoders;
+#endif
 };
 
 struct _GstDecodebin3Class
 {
   GstBinClass class;
 
-    gint (*select_stream) (GstDecodebin3 * dbin,
-      GstStreamCollection * collection, GstStream * stream);
+  gint (*select_stream) (GstDecodebin3 * dbin,
+    GstStreamCollection * collection, GstStream * stream);
+
+#ifdef TIZEN_FEATURE_RESOURCE_MANAGER
+  gboolean (*request_resource) (GstDecodebin3 * dbin,
+    GstStreamCollection * collection, GstStream * stream);
+#endif
 };
 
 /* Input of decodebin, controls input pad and parsebin */
@@ -376,7 +387,13 @@ typedef struct _PendingPad
 enum
 {
   PROP_0,
-  PROP_CAPS
+  PROP_CAPS,
+#ifdef TIZEN_FEATURE_FORCE_SW_DECODER
+  PROP_FORCE_SW_DECODERS_FOR_VIDEO,
+  PROP_FORCE_SW_DECODERS_FOR_AUDIO,
+#else
+  PROP_FORCE_SW_DECODERS,
+#endif
 };
 
 /* signals */
@@ -384,6 +401,9 @@ enum
 {
   SIGNAL_SELECT_STREAM,
   SIGNAL_ABOUT_TO_FINISH,
+#ifdef TIZEN_FEATURE_RESOURCE_MANAGER
+  SIGNAL_REQUEST_RESOURCE,
+#endif
   LAST_SIGNAL
 };
 static guint gst_decodebin3_signals[LAST_SIGNAL] = { 0 };
@@ -433,6 +453,8 @@ GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (decodebin3, "decodebin3", GST_RANK_NONE,
 
 static GstStaticCaps default_raw_caps = GST_STATIC_CAPS (DEFAULT_RAW_CAPS);
 
+#define DEFAULT_FORCE_SW_DECODERS FALSE
+
 static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK,
     GST_PAD_ALWAYS,
@@ -473,6 +495,10 @@ static void gst_decodebin3_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec);
 static void gst_decodebin3_get_property (GObject * object, guint prop_id,
     GValue * value, GParamSpec * pspec);
+#ifdef TIZEN_FEATURE_RESOURCE_MANAGER
+static gboolean gst_decodebin3_request_resource (GstElement * element,
+    GstStreamCollection * collection, GstStream * stream);
+#endif
 
 static gboolean parsebin_autoplug_continue_cb (GstElement *
     parsebin, GstPad * pad, GstCaps * caps, GstDecodebin3 * dbin);
@@ -529,6 +555,28 @@ static void update_requested_selection (GstDecodebin3 * dbin);
 /* FIXME: Really make all the parser stuff a self-contained helper object */
 #include "gstdecodebin3-parse.c"
 
+#ifdef TIZEN_FEATURE_RESOURCE_MANAGER
+static gboolean gst_decodebin3_request_resource (GstElement * element,
+    GstStreamCollection * collection, GstStream * stream)
+{
+  /* do not consider the resource limit */
+  return TRUE;
+}
+
+static gboolean
+_gst_boolean_accumulator (GSignalInvocationHint * ihint,
+    GValue * return_accu, const GValue * handler_return, gpointer dummy)
+{
+  gboolean myboolean;
+
+  myboolean = g_value_get_boolean (handler_return);
+  if (!(ihint->run_type & G_SIGNAL_RUN_CLEANUP))
+    g_value_set_boolean (return_accu, myboolean);
+
+  return myboolean;
+}
+#endif
+
 static gboolean
 _gst_int_accumulator (GSignalInvocationHint * ihint,
     GValue * return_accu, const GValue * handler_return, gpointer dummy)
@@ -559,7 +607,32 @@ gst_decodebin3_class_init (GstDecodebin3Class * klass)
       g_param_spec_boxed ("caps", "Caps",
           "The caps on which to stop decoding. (NULL = default)",
           GST_TYPE_CAPS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
+#ifdef TIZEN_FEATURE_FORCE_SW_DECODER
+  g_object_class_install_property (gobject_klass, PROP_FORCE_SW_DECODERS_FOR_VIDEO,
+      g_param_spec_boolean ("force-sw-decoders-for-video", "Video Software Decoders Only",
+          "Use only sofware decoders for video to process streams",
+          DEFAULT_FORCE_SW_DECODERS,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_klass, PROP_FORCE_SW_DECODERS_FOR_AUDIO,
+      g_param_spec_boolean ("force-sw-decoders-for-audio", "Audio Software Decoders Only",
+          "Use only sofware decoders for audio to process streams",
+          DEFAULT_FORCE_SW_DECODERS,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+#else
+  /**
+   * GstDecodeBin::force-sw-decoders:
+   *
+   * While auto-plugging, if set to %TRUE, those decoders within
+   * "Hardware" klass will be ignored. Otherwise they will be tried.
+   *
+   * Since: 1.18
+   */
+  g_object_class_install_property (gobject_klass, PROP_FORCE_SW_DECODERS,
+      g_param_spec_boolean ("force-sw-decoders", "Software Decoders Only",
+          "Use only sofware decoders to process streams",
+          DEFAULT_FORCE_SW_DECODERS,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+#endif
   /* FIXME : ADD SIGNALS ! */
   /**
    * GstDecodebin3::select-stream
@@ -593,6 +666,13 @@ gst_decodebin3_class_init (GstDecodebin3Class * klass)
       g_signal_new ("about-to-finish", G_TYPE_FROM_CLASS (klass),
       G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 0, G_TYPE_NONE);
 
+#ifdef TIZEN_FEATURE_RESOURCE_MANAGER
+  gst_decodebin3_signals[SIGNAL_REQUEST_RESOURCE] =
+      g_signal_new ("request-resource", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstDecodebin3Class, request_resource),
+      _gst_boolean_accumulator, NULL, g_cclosure_marshal_generic,
+      G_TYPE_BOOLEAN, 2, GST_TYPE_STREAM_COLLECTION, GST_TYPE_STREAM);
+#endif
 
   element_class->request_new_pad =
       GST_DEBUG_FUNCPTR (gst_decodebin3_request_new_pad);
@@ -620,6 +700,10 @@ gst_decodebin3_class_init (GstDecodebin3Class * klass)
   bin_klass->handle_message = gst_decodebin3_handle_message;
 
   klass->select_stream = gst_decodebin3_select_stream;
+
+#ifdef TIZEN_FEATURE_RESOURCE_MANAGER
+  klass->request_resource = gst_decodebin3_request_resource;
+#endif
 }
 
 static void
@@ -643,6 +727,12 @@ gst_decodebin3_init (GstDecodebin3 * dbin)
   g_mutex_init (&dbin->input_lock);
 
   dbin->caps = gst_static_caps_get (&default_raw_caps);
+#ifdef TIZEN_FEATURE_FORCE_SW_DECODER
+  dbin->force_sw_decoders_for_video = DEFAULT_FORCE_SW_DECODERS;
+  dbin->force_sw_decoders_for_audio = DEFAULT_FORCE_SW_DECODERS;
+#else
+  dbin->force_sw_decoders = DEFAULT_FORCE_SW_DECODERS;
+#endif
 
   GST_OBJECT_FLAG_SET (dbin, GST_BIN_FLAG_STREAMS_AWARE);
 }
@@ -694,6 +784,18 @@ gst_decodebin3_set_property (GObject * object, guint prop_id,
       dbin->caps = g_value_dup_boxed (value);
       GST_OBJECT_UNLOCK (dbin);
       break;
+#ifdef TIZEN_FEATURE_FORCE_SW_DECODER
+    case PROP_FORCE_SW_DECODERS_FOR_VIDEO:
+      dbin->force_sw_decoders_for_video = g_value_get_boolean (value);
+      break;
+    case PROP_FORCE_SW_DECODERS_FOR_AUDIO:
+      dbin->force_sw_decoders_for_audio = g_value_get_boolean (value);
+      break;
+#else
+    case PROP_FORCE_SW_DECODERS:
+      dbin->force_sw_decoders = g_value_get_boolean (value);
+      break;
+#endif
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -713,6 +815,18 @@ gst_decodebin3_get_property (GObject * object, guint prop_id, GValue * value,
       g_value_set_boxed (value, dbin->caps);
       GST_OBJECT_UNLOCK (dbin);
       break;
+#ifdef TIZEN_FEATURE_FORCE_SW_DECODER
+    case PROP_FORCE_SW_DECODERS_FOR_VIDEO:
+      g_value_set_boolean (value, dbin->force_sw_decoders_for_video);
+      break;
+    case PROP_FORCE_SW_DECODERS_FOR_AUDIO:
+      g_value_set_boolean (value, dbin->force_sw_decoders_for_audio);
+      break;
+#else
+    case PROP_FORCE_SW_DECODERS:
+      g_value_set_boolean (value, dbin->force_sw_decoders);
+      break;
+#endif
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -1063,11 +1177,31 @@ gst_decode_bin_update_factories_list (GstDecodebin3 * dbin)
     for (tmp = dbin->factories; tmp; tmp = tmp->next) {
       GstElementFactory *fact = (GstElementFactory *) tmp->data;
       if (gst_element_factory_list_is_type (fact,
-              GST_ELEMENT_FACTORY_TYPE_DECODER))
-        dbin->decoder_factories = g_list_append (dbin->decoder_factories, fact);
-      else
+              GST_ELEMENT_FACTORY_TYPE_DECODER)) {
+#ifdef TIZEN_FEATURE_FORCE_SW_DECODER
+        if  (!(dbin->force_sw_decoders_for_video &&
+             gst_element_factory_list_is_type (fact, GST_ELEMENT_FACTORY_TYPE_MEDIA_VIDEO) &&
+             gst_element_factory_list_is_type (fact, GST_ELEMENT_FACTORY_TYPE_HARDWARE)) &&
+             !(dbin->force_sw_decoders_for_audio &&
+             gst_element_factory_list_is_type (fact, GST_ELEMENT_FACTORY_TYPE_MEDIA_AUDIO) &&
+             gst_element_factory_list_is_type (fact, GST_ELEMENT_FACTORY_TYPE_HARDWARE))) {
+          dbin->decoder_factories =
+              g_list_append (dbin->decoder_factories, fact);
+        } else {
+          GST_WARNING("%s is skipped", GST_OBJECT_NAME(fact));
+        }
+#else
+        if (!(dbin->force_sw_decoders
+                && gst_element_factory_list_is_type (fact,
+                    GST_ELEMENT_FACTORY_TYPE_HARDWARE))) {
+          dbin->decoder_factories =
+              g_list_append (dbin->decoder_factories, fact);
+        }
+#endif
+      } else {
         dbin->decodable_factories =
             g_list_append (dbin->decodable_factories, fact);
+      }
     }
   }
 }
@@ -1963,7 +2097,9 @@ multiqueue_src_probe (GstPad * pad, GstPadProbeInfo * info,
           GST_DEBUG_OBJECT (pad, "Got regular eos (all_inputs_are_eos)");
           /* drop current event as eos will be sent in check_all_slot_for_eos
            * when all output streams are also eos */
+#ifndef TIZEN_FEATURE_DISABLE_EOS_DROP
           ret = GST_PAD_PROBE_DROP;
+#endif
           SELECTION_LOCK (dbin);
           check_all_slot_for_eos (dbin);
           SELECTION_UNLOCK (dbin);
@@ -2289,6 +2425,26 @@ reconfigure_output_stream (DecodebinOutputStream * output,
 
       /* If we don't have a decoder yet, instantiate one */
       if (next_factory) {
+#ifdef TIZEN_FEATURE_RESOURCE_MANAGER
+        if (gst_element_factory_list_is_type (next_factory->data,
+                  GST_ELEMENT_FACTORY_TYPE_HARDWARE)) {
+            gboolean result = FALSE;
+            g_signal_emit (G_OBJECT (dbin),
+                gst_decodebin3_signals[SIGNAL_REQUEST_RESOURCE], 0, dbin->collection, slot->active_stream,
+                &result);
+            if (!result) {
+              GstCaps *caps;
+              GST_WARNING_OBJECT (dbin, "Failed to get HW resource.");
+              SELECTION_UNLOCK (dbin);
+              caps = gst_stream_get_caps (slot->active_stream);
+              gst_element_post_message (GST_ELEMENT_CAST (dbin),
+                  gst_missing_decoder_message_new (GST_ELEMENT_CAST (dbin), caps));
+              gst_caps_unref (caps);
+              SELECTION_LOCK (dbin);
+              goto cleanup;
+            }
+        }
+#endif
         output->decoder = gst_element_factory_create ((GstElementFactory *)
             next_factory->data, NULL);
         GST_DEBUG ("Created decoder '%s'", GST_ELEMENT_NAME (output->decoder));
index 9b3b6b5..e5aff2c 100644 (file)
@@ -1760,8 +1760,11 @@ gst_play_bin3_set_property (GObject * object, guint prop_id,
       if (playbin->curr_group) {
         GST_SOURCE_GROUP_LOCK (playbin->curr_group);
         if (playbin->curr_group->uridecodebin) {
-          g_object_set (playbin->curr_group->uridecodebin, "download",
-              (g_value_get_flags (value) & GST_PLAY_FLAG_DOWNLOAD) != 0, NULL);
+          guint flags = g_value_get_flags (value);
+          g_object_set (playbin->curr_group->uridecodebin,
+              "download", (flags & GST_PLAY_FLAG_DOWNLOAD) != 0,
+              "force-sw-decoders",
+              (flags & GST_PLAY_FLAG_FORCE_SW_DECODERS) != 0, NULL);
         }
         GST_SOURCE_GROUP_UNLOCK (playbin->curr_group);
       }
@@ -3110,7 +3113,14 @@ pad_removed_cb (GstElement * decodebin, GstPad * pad, GstSourceGroup * group)
   else if (g_str_has_prefix (GST_PAD_NAME (pad), "text"))
     combine = &playbin->combiner[PLAYBIN_STREAM_TEXT];
   else
+#ifdef TIZEN_FEATURE_PLAYBIN3_MODIFICATION
+  {
+    GST_PLAY_BIN3_UNLOCK (playbin);
+    return;
+  }
+#else
     return;
+#endif
 
   combiner_release_pad (playbin, combine, pad);
   release_source_pad (playbin, group, pad);
@@ -3466,7 +3476,8 @@ avelement_iter_is_equal (GSequenceIter * iter, GstElementFactory * factory)
 }
 
 static GList *
-create_decoders_list (GList * factory_list, GSequence * avelements)
+create_decoders_list (GList * factory_list, GSequence * avelements,
+    GstPlayFlags flags)
 {
   GList *dec_list = NULL, *tmp;
   GList *ave_list = NULL;
@@ -3485,7 +3496,9 @@ create_decoders_list (GList * factory_list, GSequence * avelements)
         gst_element_factory_list_is_type (factory,
             GST_ELEMENT_FACTORY_TYPE_SINK)) {
       dec_list = g_list_prepend (dec_list, gst_object_ref (factory));
-    } else {
+    } else if (!(((flags & GST_PLAY_FLAG_FORCE_SW_DECODERS) != 0)
+            && gst_element_factory_list_is_type (factory,
+                GST_ELEMENT_FACTORY_TYPE_HARDWARE))) {
       GSequenceIter *seq_iter;
 
       seq_iter =
@@ -3607,14 +3620,18 @@ autoplug_factories_cb (GstElement * decodebin, GstPad * pad,
 
   if (isaudiodeclist || isvideodeclist) {
     GSequence **ave_list;
+    GstPlayFlags flags;
+
     if (isaudiodeclist)
       ave_list = &playbin->aelements;
     else
       ave_list = &playbin->velements;
 
+    flags = gst_play_bin_get_flags (playbin);
+
     g_mutex_lock (&playbin->elements_lock);
     /* sort factory_list based on the GstAVElement list priority */
-    factory_list = create_decoders_list (factory_list, *ave_list);
+    factory_list = create_decoders_list (factory_list, *ave_list, flags);
     g_mutex_unlock (&playbin->elements_lock);
   }
 
@@ -4516,6 +4533,8 @@ activate_group (GstPlayBin3 * playbin, GstSourceGroup * group)
       "download", ((flags & GST_PLAY_FLAG_DOWNLOAD) != 0),
       /* configure buffering of demuxed/parsed data */
       "use-buffering", ((flags & GST_PLAY_FLAG_BUFFERING) != 0),
+      /* configure usage of hardware elements */
+      "force-sw-decoders", ((flags & GST_PLAY_FLAG_FORCE_SW_DECODERS) != 0),
       /* configure buffering parameters */
       "buffer-duration", playbin->buffer_duration,
       "buffer-size", playbin->buffer_size,
index 1fc1d7d..76e57b3 100644 (file)
 
 G_BEGIN_DECLS
 
+#ifdef TIZEN_PROFILE_TV
 #define DEFAULT_RAW_CAPS \
     "video/x-raw(ANY); " \
     "audio/x-raw(ANY); " \
     "text/x-raw(ANY); " \
+    "text/x-pango-markup; " \
+    "text/plain; " \
     "subpicture/x-dvd; " \
     "subpicture/x-dvb; " \
     "subpicture/x-xsub; " \
     "subpicture/x-pgs; " \
     "closedcaption/x-cea-608; " \
     "closedcaption/x-cea-708"
+#else
+#define DEFAULT_RAW_CAPS \
+    "video/x-raw(ANY); " \
+    "audio/x-raw(ANY); " \
+    "text/x-raw(ANY); " \
+    "subpicture/x-dvd; " \
+    "subpicture/x-dvb; " \
+    "subpicture/x-xsub; " \
+    "subpicture/x-pgs; " \
+    "closedcaption/x-cea-608; " \
+    "closedcaption/x-cea-708"
+#endif 
 
 G_END_DECLS
 
index 8802afd..b82475c 100644 (file)
@@ -196,6 +196,7 @@ struct _GstURIDecodeBin3
   guint buffer_size;            /* When buffering, buffer size (bytes) */
   gboolean download;
   gboolean use_buffering;
+  gboolean force_sw_decoders;
   guint64 ring_buffer_max_size;
 
   GList *play_items;            /* List of GstPlayItem ordered by time of
@@ -279,6 +280,7 @@ static GstStaticCaps raw_video_caps = GST_STATIC_CAPS ("video/x-raw(ANY)");
 #define DEFAULT_BUFFER_SIZE         -1
 #define DEFAULT_DOWNLOAD            FALSE
 #define DEFAULT_USE_BUFFERING       FALSE
+#define DEFAULT_FORCE_SW_DECODERS   FALSE
 #define DEFAULT_RING_BUFFER_MAX_SIZE 0
 
 enum
@@ -294,6 +296,7 @@ enum
   PROP_BUFFER_DURATION,
   PROP_DOWNLOAD,
   PROP_USE_BUFFERING,
+  PROP_FORCE_SW_DECODERS,
   PROP_RING_BUFFER_MAX_SIZE,
   PROP_CAPS
 };
@@ -446,6 +449,21 @@ gst_uri_decode_bin3_class_init (GstURIDecodeBin3Class * klass)
           DEFAULT_USE_BUFFERING, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
   /**
+   * GstURIDecodeBin3::force-sw-decoders:
+   *
+   * While auto-plugging, if set to %TRUE, those decoders within
+   * "Hardware" klass will by tried. Otherwise they will be ignored.
+   *
+   * Since: 1.18
+   */
+  g_object_class_install_property (gobject_class, PROP_FORCE_SW_DECODERS,
+      g_param_spec_boolean ("force-sw-decoders", "Software Decoders Only",
+          "Use only sofware decoders to process streams",
+          DEFAULT_FORCE_SW_DECODERS,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+
+  /**
    * GstURIDecodeBin3::ring-buffer-max-size
    *
    * The maximum size of the ring buffer in kilobytes. If set to 0, the ring
@@ -737,6 +755,11 @@ src_pad_added_cb (GstElement * element, GstPad * pad,
   GST_DEBUG_OBJECT (uridecodebin,
       "New pad %" GST_PTR_FORMAT " from source %" GST_PTR_FORMAT, pad, element);
 
+#ifdef TIZEN_FEATURE_U3_AVOID_DEADLOCK
+  /* to sync the process with typefind task */
+  gst_element_get_state (uridecodebin, NULL, NULL, 1 * GST_SECOND);
+#endif
+
   /* FIXME: Add probe to unify group_id and detect EOS */
 
   /* Try to link to main sink pad only if it's from a main handler */
@@ -886,6 +909,12 @@ gst_uri_decode_bin3_set_property (GObject * object, guint prop_id,
     case PROP_USE_BUFFERING:
       dec->use_buffering = g_value_get_boolean (value);
       break;
+    case PROP_FORCE_SW_DECODERS:
+      if (dec->decodebin) {
+        g_object_set_property (G_OBJECT (dec->decodebin), "force-sw-decoders",
+            value);
+      }
+      break;
     case PROP_RING_BUFFER_MAX_SIZE:
       dec->ring_buffer_max_size = g_value_get_uint64 (value);
       break;
@@ -965,6 +994,12 @@ gst_uri_decode_bin3_get_property (GObject * object, guint prop_id,
     case PROP_USE_BUFFERING:
       g_value_set_boolean (value, dec->use_buffering);
       break;
+    case PROP_FORCE_SW_DECODERS:
+      if (dec->decodebin) {
+        g_object_get_property (G_OBJECT (dec->decodebin), "force-sw-decoders",
+            value);
+      }
+      break;
     case PROP_RING_BUFFER_MAX_SIZE:
       g_value_set_uint64 (value, dec->ring_buffer_max_size);
       break;
index e9bb24e..b442aeb 100644 (file)
 #include "qttextparse.h"
 #include "gstsubparseelements.h"
 
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+#define SUBPARSE_SEEK_GET_LOCK(elem)    (&elem->seek_lock)
+#define SUBPARSE_SEEK_LOCK(elem)        g_mutex_lock(SUBPARSE_SEEK_GET_LOCK(elem))
+#define SUBPARSE_SEEK_TRYLOCK(elem)     g_mutex_trylock(SUBPARSE_SEEK_GET_LOCK(elem))
+#define SUBPARSE_SEEK_UNLOCK(elem)      g_mutex_unlock(SUBPARSE_SEEK_GET_LOCK(elem))
+#endif
 #define DEFAULT_ENCODING   NULL
 #define ATTRIBUTE_REGEX "\\s?[a-zA-Z0-9\\. \t\\(\\)]*"
 static const gchar *allowed_srt_tags[] = { "i", "b", "u", NULL };
 static const gchar *allowed_vtt_tags[] =
     { "i", "b", "c", "u", "v", "ruby", "rt", NULL };
 
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+#define DEFAULT_CURRENT_LANGUAGE   NULL
+#endif
+#ifdef TIZEN_FEATURE_SUBPARSE_DROP_OUT_OF_SEGMENT
+#define DEFAULT_DROP_OUT_OF_SEGMENT TRUE
+#endif
 enum
 {
   PROP_0,
   PROP_ENCODING,
-  PROP_VIDEOFPS
+  PROP_VIDEOFPS,
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+  PROP_EXTSUB_CURRENT_LANGUAGE,
+#endif
+#ifdef TIZEN_FEATURE_SUBPARSE_DROP_OUT_OF_SEGMENT
+  PROP_DROP_OUT_OF_SEGMENT,
+#endif
 };
+#ifdef TIZEN_FEATURE_HLS_WEBVTT
+#define MPEGTIME_TO_GSTTIME(t) ((t) * (guint64)100000 / 9)
+#endif
 
 static void
 gst_sub_parse_set_property (GObject * object, guint prop_id,
@@ -89,7 +110,9 @@ static GstStateChangeReturn gst_sub_parse_change_state (GstElement * element,
 
 static GstFlowReturn gst_sub_parse_chain (GstPad * sinkpad, GstObject * parent,
     GstBuffer * buf);
-
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+static gboolean gst_sub_parse_check_byte_seekability (GstSubParse * subparse);
+#endif
 #define gst_sub_parse_parent_class parent_class
 G_DEFINE_TYPE (GstSubParse, gst_sub_parse, GST_TYPE_ELEMENT);
 
@@ -122,7 +145,12 @@ GST_ELEMENT_REGISTER_DEFINE_WITH_CODE (subparse, "subparse",
     g_string_free (subparse->textbuf, TRUE);
     subparse->textbuf = NULL;
   }
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+  g_free (subparse->state.current_language);
+  subparse->state.current_language = NULL;
 
+  g_mutex_clear (&subparse->seek_lock);
+#endif
   GST_CALL_PARENT (G_OBJECT_CLASS, dispose, (object));
 }
 
@@ -161,6 +189,22 @@ gst_sub_parse_class_init (GstSubParseClass * klass)
           "and the subtitle format requires it subtitles may be out of sync.",
           0, 1, G_MAXINT, 1, 24000, 1001,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+  g_object_class_install_property (object_class, PROP_EXTSUB_CURRENT_LANGUAGE,
+      g_param_spec_string ("current-language", "Current language",
+          "Current language of the subtitle in external subtitle case.",
+          DEFAULT_CURRENT_LANGUAGE,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+#endif
+
+#ifdef TIZEN_FEATURE_SUBPARSE_DROP_OUT_OF_SEGMENT
+  g_object_class_install_property (object_class, PROP_DROP_OUT_OF_SEGMENT,
+      g_param_spec_boolean ("drop-out-of-segment",
+          "Drop out-of-segment buffers",
+          "Drop and don't send out-of-segment buffers",
+          DEFAULT_DROP_OUT_OF_SEGMENT,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+#endif
 }
 
 static void
@@ -192,6 +236,15 @@ gst_sub_parse_init (GstSubParse * subparse)
 
   subparse->fps_n = 24000;
   subparse->fps_d = 1001;
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+  subparse->state.language_list = NULL;
+  subparse->state.current_language = NULL;
+  subparse->state.langlist_msg_posted = FALSE;
+  g_mutex_init (&subparse->seek_lock);
+#endif
+#ifdef TIZEN_FEATURE_SUBPARSE_DROP_OUT_OF_SEGMENT
+  subparse->state.drop_out_of_segment = DEFAULT_DROP_OUT_OF_SEGMENT;
+#endif
 }
 
 /*
@@ -273,7 +326,14 @@ gst_sub_parse_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
         gst_event_unref (event);
         goto beach;
       }
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+      if (!gst_sub_parse_check_byte_seekability (self)) {
+        ret = gst_pad_event_default (pad, parent, event);
+        break;
+      }
 
+      SUBPARSE_SEEK_LOCK (self);
+#endif
       /* Convert that seek to a seeking in bytes at position 0,
          FIXME: could use an index */
       ret = gst_pad_push_event (self->sinkpad,
@@ -295,6 +355,10 @@ gst_sub_parse_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
         GST_WARNING_OBJECT (self, "seek to 0 bytes failed");
       }
 
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+      SUBPARSE_SEEK_UNLOCK (self);
+#endif
+
       gst_event_unref (event);
       break;
     }
@@ -307,6 +371,29 @@ beach:
   return ret;
 }
 
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+static gboolean
+gst_sub_parse_check_byte_seekability (GstSubParse * subparse)
+{
+  GstQuery *query;
+  gboolean seekable = FALSE;
+
+  query = gst_query_new_seeking (GST_FORMAT_BYTES);
+
+  if (gst_pad_peer_query (subparse->sinkpad, query)) {
+    gst_query_parse_seeking (query, NULL, &seekable, NULL, NULL);
+  } else {
+    GST_DEBUG_OBJECT (subparse, "seeking query failed");
+  }
+
+  gst_query_unref (query);
+
+  GST_INFO_OBJECT (subparse, "byte seekable: %d", seekable);
+
+  return seekable;
+}
+#endif
+
 static void
 gst_sub_parse_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec)
@@ -334,6 +421,22 @@ gst_sub_parse_set_property (GObject * object, guint prop_id,
       }
       break;
     }
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+    case PROP_EXTSUB_CURRENT_LANGUAGE:
+      g_free (subparse->state.current_language);
+      subparse->state.current_language = g_value_dup_string (value);
+      GST_LOG_OBJECT (subparse, "subtitle current language set to %s",
+          GST_STR_NULL (subparse->state.current_language));
+      sami_context_change_language (&subparse->state);
+      break;
+#endif
+#ifdef TIZEN_FEATURE_SUBPARSE_DROP_OUT_OF_SEGMENT
+    case PROP_DROP_OUT_OF_SEGMENT:
+      subparse->state.drop_out_of_segment = g_value_get_boolean (value);
+      GST_DEBUG_OBJECT (object, "Drop out of segment set to %d",
+          subparse->state.drop_out_of_segment);
+      break;
+#endif
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -355,6 +458,16 @@ gst_sub_parse_get_property (GObject * object, guint prop_id,
     case PROP_VIDEOFPS:
       gst_value_set_fraction (value, subparse->fps_n, subparse->fps_d);
       break;
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+    case PROP_EXTSUB_CURRENT_LANGUAGE:
+      g_value_set_string (value, subparse->state.current_language);
+      break;
+#endif
+#ifdef TIZEN_FEATURE_SUBPARSE_DROP_OUT_OF_SEGMENT
+    case PROP_DROP_OUT_OF_SEGMENT:
+      g_value_set_boolean (value, subparse->state.drop_out_of_segment);
+      break;
+#endif
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -456,6 +569,15 @@ convert_encoding (GstSubParse * self, const gchar * str, gsize len,
         encoding, err->message);
     g_clear_error (&err);
 
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+    if (!g_strcmp0 (self->encoding, "EUC-KR")) {
+      GST_LOG_OBJECT (self, "use CP949 as fallback");
+      g_free (self->encoding);
+      self->encoding = g_strdup ("CP949");
+      encoding = self->encoding;
+      ret = gst_sub_parse_gst_convert_to_utf8 (str, len, encoding, consumed, &err);
+    } else
+#endif
     /* invalid input encoding, fall back to ISO-8859-15 (always succeeds) */
     ret =
         gst_sub_parse_gst_convert_to_utf8 (str, len, "ISO-8859-15", consumed,
@@ -548,6 +670,9 @@ parse_mdvdsub (ParserState * state, const gchar * line)
       state->fps_n);
 
   /* Check our segment start/stop */
+#ifdef TIZEN_FEATURE_SUBPARSE_DROP_OUT_OF_SEGMENT
+  if (state->drop_out_of_segment) {
+#endif
   in_seg = gst_segment_clip (state->segment, GST_FORMAT_TIME,
       state->start_time, state->start_time + state->duration, &clip_start,
       &clip_stop);
@@ -559,6 +684,9 @@ parse_mdvdsub (ParserState * state, const gchar * line)
   } else {
     return NULL;
   }
+#ifdef TIZEN_FEATURE_SUBPARSE_DROP_OUT_OF_SEGMENT
+  }
+#endif
 
   markup = g_string_new (NULL);
   while (1) {
@@ -968,6 +1096,52 @@ parse_webvtt_cue_settings (ParserState * state, const gchar * settings)
   }
 }
 
+#ifdef TIZEN_FEATURE_HLS_WEBVTT
+static void
+parse_timestamp_map (ParserState * state, const gchar * timestamp_map)
+{
+  GstClockTime local = 0;
+  guint64 mpegts = 0;
+  gchar *local_start = NULL;
+  gchar *mpegts_start = NULL;
+
+  if (!timestamp_map)
+    return;
+
+  local_start = g_strrstr (timestamp_map, "LOCAL:");
+  if (local_start)
+    parse_subrip_time (local_start + strlen ("LOCAL:"), &local);
+
+  mpegts_start = g_strrstr (timestamp_map, "MPEGTS:");
+  if (mpegts_start)
+    mpegts = g_ascii_strtoull (mpegts_start + strlen ("MPEGTS:"), NULL, 10);
+
+  GST_LOG ("parsed local time %" GST_TIME_FORMAT " MPEGTS: %" G_GUINT64_FORMAT,
+      GST_TIME_ARGS (local), mpegts);
+
+  state->local = local;
+  state->mpegts = mpegts;
+}
+
+static void
+send_fragment_timestamp_event (GstSubParse * self, GstClockTime timestamp)
+{
+  GstEvent *event = NULL;
+
+  if (!GST_CLOCK_TIME_IS_VALID (timestamp))
+    return;
+
+  GST_LOG ("send fragment_timestamp %" GST_TIME_FORMAT,
+      GST_TIME_ARGS (timestamp));
+
+  event = gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM,
+      gst_structure_new ("fragment_timestamp",
+          "timestamp", G_TYPE_UINT64, timestamp, NULL));
+
+  gst_pad_push_event (self->srcpad, event);
+}
+#endif
+
 static gchar *
 parse_subrip (ParserState * state, const gchar * line)
 {
@@ -999,9 +1173,17 @@ parse_subrip (ParserState * state, const gchar * line)
       if ((end_time = strstr (line, " --> ")) &&
           parse_subrip_time (line, &ts_start) &&
           parse_subrip_time (end_time + strlen (" --> "), &ts_end) &&
+#ifdef TIZEN_FEATURE_HLS_WEBVTT
+          state->start_time <=
+              ts_end + MPEGTIME_TO_GSTTIME (state->mpegts) - state->local) {
+#else
           state->start_time <= ts_end) {
+#endif
         state->state = 2;
         state->start_time = ts_start;
+#ifdef TIZEN_FEATURE_HLS_WEBVTT
+        state->start_time += MPEGTIME_TO_GSTTIME (state->mpegts) - state->local;
+#endif
         state->duration = ts_end - ts_start;
       } else {
         GST_DEBUG ("error parsing subrip time line '%s'", line);
@@ -1012,6 +1194,9 @@ parse_subrip (ParserState * state, const gchar * line)
     case 2:
     {
       /* No need to parse that text if it's out of segment */
+#ifdef TIZEN_FEATURE_SUBPARSE_DROP_OUT_OF_SEGMENT
+      if (state->drop_out_of_segment) {
+#endif
       guint64 clip_start = 0, clip_stop = 0;
       gboolean in_seg = FALSE;
 
@@ -1027,6 +1212,9 @@ parse_subrip (ParserState * state, const gchar * line)
         state->state = 0;
         return NULL;
       }
+#ifdef TIZEN_FEATURE_SUBPARSE_DROP_OUT_OF_SEGMENT
+      }
+#endif
     }
       /* looking for subtitle text; empty line ends this subtitle entry */
       if (state->buf->len)
@@ -1101,8 +1289,17 @@ parse_webvtt (ParserState * state, const gchar * line)
         state->start_time <= ts_end) {
       state->state = 2;
       state->start_time = ts_start;
+#ifdef TIZEN_FEATURE_HLS_WEBVTT
+      state->start_time += MPEGTIME_TO_GSTTIME (state->mpegts) - state->local;
+#endif
       state->duration = ts_end - ts_start;
       cue_settings = strstr (end_time + strlen (" --> "), " ");
+#ifdef TIZEN_FEATURE_HLS_WEBVTT
+    } else if (strstr (line, "X-TIMESTAMP-MAP")) {
+      GST_DEBUG ("got X-TIMESTAMP-MAP '%s'", line);
+      parse_timestamp_map (state, line);
+      state->state = 0;
+#endif
     } else {
       GST_DEBUG ("error parsing subrip time line '%s'", line);
       state->state = 0;
@@ -1180,6 +1377,9 @@ parse_subviewer (ParserState * state, const gchar * line)
     case 1:
     {
       /* No need to parse that text if it's out of segment */
+#ifdef TIZEN_FEATURE_SUBPARSE_DROP_OUT_OF_SEGMENT
+      if (state->drop_out_of_segment) {
+#endif
       guint64 clip_start = 0, clip_stop = 0;
       gboolean in_seg = FALSE;
 
@@ -1195,6 +1395,9 @@ parse_subviewer (ParserState * state, const gchar * line)
         state->state = 0;
         return NULL;
       }
+#ifdef TIZEN_FEATURE_SUBPARSE_DROP_OUT_OF_SEGMENT
+      }
+#endif
     }
       /* looking for subtitle text; empty line ends this subtitle entry */
       if (state->buf->len)
@@ -1232,6 +1435,9 @@ parse_mpsub (ParserState * state, const gchar * line)
       return NULL;
     case 1:
     {                           /* No need to parse that text if it's out of segment */
+#ifdef TIZEN_FEATURE_SUBPARSE_DROP_OUT_OF_SEGMENT
+      if (state->drop_out_of_segment) {
+#endif
       guint64 clip_start = 0, clip_stop = 0;
       gboolean in_seg = FALSE;
 
@@ -1247,6 +1453,9 @@ parse_mpsub (ParserState * state, const gchar * line)
         state->state = 0;
         return NULL;
       }
+#ifdef TIZEN_FEATURE_SUBPARSE_DROP_OUT_OF_SEGMENT
+      }
+#endif
     }
       /* looking for subtitle text; empty line ends this
        * subtitle entry */
@@ -1309,7 +1518,9 @@ parse_dks (ParserState * state, const gchar * line)
         GST_WARNING ("Failed to parse subtitle end time");
         return NULL;
       }
-
+#ifdef TIZEN_FEATURE_SUBPARSE_DROP_OUT_OF_SEGMENT
+      if (state->drop_out_of_segment) {
+#endif
       /* Check if this subtitle is out of the current segment */
       in_seg = gst_segment_clip (state->segment, GST_FORMAT_TIME,
           state->start_time, state->start_time + state->duration,
@@ -1318,6 +1529,9 @@ parse_dks (ParserState * state, const gchar * line)
       if (!in_seg) {
         return NULL;
       }
+#ifdef TIZEN_FEATURE_SUBPARSE_DROP_OUT_OF_SEGMENT
+      }
+#endif
 
       state->start_time = clip_start;
       state->duration = clip_stop - clip_start;
@@ -1349,6 +1563,10 @@ parser_state_init (ParserState * state)
   state->max_duration = 0;      /* no limit */
   state->state = 0;
   state->segment = NULL;
+#ifdef TIZEN_FEATURE_HLS_WEBVTT
+  state->local = 0;
+  state->mpegts = 0;
+#endif
 }
 
 static void
@@ -1604,6 +1822,12 @@ handle_buffer (GstSubParse * self, GstBuffer * buf)
   GstFlowReturn ret = GST_FLOW_OK;
   gchar *line, *subtitle;
   gboolean need_tags = FALSE;
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+  GstMessage *m = NULL;
+#endif
+#ifdef TIZEN_FEATURE_HLS_WEBVTT
+  GstClockTime fragment_timestamp = GST_CLOCK_TIME_NONE;
+#endif
 
   if (self->first_buffer) {
     GstMapInfo map;
@@ -1616,6 +1840,10 @@ handle_buffer (GstSubParse * self, GstBuffer * buf)
     self->state.fps_n = self->fps_n;
     self->state.fps_d = self->fps_d;
   }
+#ifdef TIZEN_FEATURE_HLS_WEBVTT
+  if (GST_BUFFER_IS_DISCONT (buf) && GST_BUFFER_PTS_IS_VALID (buf))
+    fragment_timestamp = GST_BUFFER_PTS (buf);
+#endif
 
   feed_textbuf (self, buf);
 
@@ -1656,6 +1884,10 @@ handle_buffer (GstSubParse * self, GstBuffer * buf)
       gst_pad_push_event (self->srcpad, gst_event_new_tag (tags));
     }
   }
+#ifdef TIZEN_FEATURE_HLS_WEBVTT
+  if (self->parser_type == GST_SUB_PARSE_FORMAT_VTT)
+    send_fragment_timestamp_event (self, fragment_timestamp);
+#endif
 
   while (!self->flushing && (line = get_next_line (self))) {
     guint offset = 0;
@@ -1667,7 +1899,18 @@ handle_buffer (GstSubParse * self, GstBuffer * buf)
         line + offset);
     subtitle = self->parse_line (&self->state, line + offset);
     g_free (line);
-
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+    if (!self->state.langlist_msg_posted && self->state.language_list) {
+      m = gst_message_new_element (GST_OBJECT_CAST (self),
+          gst_structure_new ("Ext_Sub_Language_List", "lang_list",
+              G_TYPE_POINTER, self->state.language_list, NULL));
+
+      gst_element_post_message (GST_ELEMENT_CAST (self), m);
+      self->state.langlist_msg_posted = TRUE;
+      GST_DEBUG_OBJECT (self, "curr lang as : %s ",
+          GST_STR_NULL (self->state.current_language));
+    }
+#endif
     if (subtitle) {
       guint subtitle_len;
 
@@ -1785,6 +2028,21 @@ gst_sub_parse_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
     case GST_EVENT_SEGMENT:
     {
       const GstSegment *s;
+
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+      if (self->first_buffer) {
+        if (!SUBPARSE_SEEK_TRYLOCK (self)) {
+          /* new seeking request is in process */
+          GST_WARNING_OBJECT (self, "ignore the old newsegment event");
+          ret = TRUE;
+          gst_event_unref (event);
+          break;
+        }
+      } else {
+        SUBPARSE_SEEK_LOCK (self);
+      }
+#endif
+
       gst_event_parse_segment (event, &s);
       if (s->format == GST_FORMAT_TIME)
         gst_event_copy_segment (event, &self->segment);
@@ -1805,6 +2063,11 @@ gst_sub_parse_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
        * trigger sending of the saved requested seek segment
        * or the one taken here from upstream */
       self->need_segment = TRUE;
+
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+      SUBPARSE_SEEK_UNLOCK (self);
+#endif
+
       break;
     }
     case GST_EVENT_FLUSH_START:
index 7a1e9b0..4d239fd 100644 (file)
@@ -50,6 +50,18 @@ typedef struct {
   gchar *alignment;       /* "", "start", "middle", "end" */
   gconstpointer allowed_tags; /* list of markup tags allowed in the cue text. */
   gboolean allows_tag_attributes;
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+  GList* language_list;
+  gchar* current_language;
+  gboolean langlist_msg_posted;
+#endif
+#ifdef TIZEN_FEATURE_HLS_WEBVTT
+  guint64 local;
+  guint64 mpegts;
+#endif
+#ifdef TIZEN_FEATURE_SUBPARSE_DROP_OUT_OF_SEGMENT
+  gboolean drop_out_of_segment;
+#endif
 } ParserState;
 
 typedef gchar* (*Parser) (ParserState *state, const gchar *line);
@@ -73,11 +85,11 @@ struct _GstSubParse {
 
   /* seek */
   guint64 offset;
-  
+
   /* Segment */
   GstSegment    segment;
   gboolean      need_segment;
-  
+
   gboolean flushing;
   gboolean valid_utf8;
   gchar   *detected_encoding;
@@ -87,7 +99,10 @@ struct _GstSubParse {
   gboolean first_buffer;
 
   /* used by frame based parsers */
-  gint fps_n, fps_d;          
+  gint fps_n, fps_d;
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+  GMutex seek_lock;
+#endif
 };
 
 G_END_DECLS
index 9b6c655..5227247 100644 (file)
@@ -17,6 +17,9 @@
  * Boston, MA 02110-1301, USA.
  */
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
 #include "samiparse.h"
 
 #include <glib.h>
 typedef struct _HtmlParser HtmlParser;
 typedef struct _HtmlContext HtmlContext;
 typedef struct _GstSamiContext GstSamiContext;
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+typedef struct _LanguageStruct  GstLangStruct;
+struct _LanguageStruct
+{
+    gchar *language_code;
+    gchar *language_key;
+};
+#endif
 
 struct _GstSamiContext
 {
@@ -52,8 +63,78 @@ struct _GstSamiContext
                                  * content of the sync elements to buf */
   guint64 time1;                /* previous start attribute in sync tag */
   guint64 time2;                /* current start attribute in sync tag  */
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+  guint64 time3;                /* To store the last current time when language is changed */
+  GList *lang_list;             /* Language list for an external subtitle file */
+  gchar *current_language;      /* Current language parsed */
+  gchar *desired_language;      /* Language set by user */
+  gboolean language_changed;    /* language changed signal */
+  gboolean end_body;            /* </BODY> reached */
+#endif
 };
 
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+#define strcasestr _gst_ascii_strcasestr
+
+/* From https://github.com/freebsd/freebsd/blob/master/contrib/file/src/strcasestr.c
+ * Updated to use GLib types and GLib string functions
+ *
+ * Copyright (c) 1990, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Chris Torek.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Find the first occurrence of find in s, ignore case.
+ */
+
+static gchar *
+_gst_ascii_strcasestr (const gchar * s, const gchar * find)
+{
+  gchar c, sc;
+  gsize len;
+
+  if ((c = *find++) != 0) {
+    c = g_ascii_tolower (c);
+    len = strlen (find);
+    do {
+      do {
+        if ((sc = *s++) == 0)
+          return (NULL);
+      } while (g_ascii_tolower (sc) != c);
+    } while (g_ascii_strncasecmp (s, find, len) != 0);
+    s--;
+  }
+  return (gchar *) (gintptr) (s);
+}
+#endif
+
 struct _HtmlParser
 {
   void (*start_element) (HtmlContext * ctx,
@@ -470,6 +551,10 @@ html_context_handle_element (HtmlContext * ctxt,
   gint count = 0, i;
   gchar **attrs;
   const gchar *found, *next;
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+  const gchar *name_temp = NULL;
+  gint j = 0;
+#endif
 
   /* split element name and attributes */
   next = string_token (string, " ", &name);
@@ -512,7 +597,86 @@ html_context_handle_element (HtmlContext * ctxt,
     attrs[i] = attr_name;
     attrs[i + 1] = attr_value;
   }
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+  /* sometimes spaces can be there in between !-- and P
+   * that also we have to take care */
+  if (!g_ascii_strcasecmp("!--", name)) {
+    gchar* tempchar = (gchar*)(string + 3);
+    while (*tempchar == ' ') {
+      tempchar++;
+      if (*tempchar == 'P' || *tempchar == 'p') {
+        *(name + 3) = *tempchar;
+        *(name + 4) = '\0';
+        next = tempchar + 1;
+        break;
+      }
+    }
+  }
+  if (next && (!g_ascii_strcasecmp("!--P", name))) {
+    gint attrindex = 0;
+    count = 0;
+    /* count attributes */
+    found = next + 1;
+    while (TRUE) {
+      found = (gchar*)strcasestr (found, "lang:");
+      if (!found)
+        break;
+      found++;
+      count++;
+    }
+    g_strfreev (attrs);
+
+    attrs = g_new0 (gchar *, count * 2);
+
+    for (i = 0; i < count; i++) {
+      gchar *attr_name = NULL, *attr_value = NULL;
+
+      next = (gchar*)strcasestr (next, "lang:");
+      if (!next)
+        break;
+
+      attr_value = (gchar*)g_malloc0 (3);
+      next = next + 5;
+      /* skip spaces */
+      while (*next == ' ')
+        next++;
+      strncpy (attr_value, next, 2);
+      attr_value[2] = '\0';
+      GST_LOG ("Language value comes as %s", attr_value);
+      name_temp = next;
+      while (TRUE) {
+        if (*name_temp == '{') {
+          int character_count = 0;
+
+          while (TRUE) {
+            name_temp--;
+
+            if (*name_temp == '.') {
+              attr_name = (gchar*) g_malloc0 (character_count + 1);
+              break;
+            }
+            else if (*name_temp != ' ')
+              character_count++;
+          }
+          break;
+        }
+        name_temp--;
+      }
+      name_temp++;
+      if (attr_name != NULL) {
+        for (j = 0; *(name_temp + j) != ' '; j++) {
+          attr_name[j] = *(name_temp + j);
+        }
+        attr_name[j] = '\0';
+        attrs[attrindex++] = attr_name;
+        attrs[attrindex++] = attr_value;
+      }
+    }
+  } else {
+    count = 0;
+  }
 
+#endif
   ctxt->parser->start_element (ctxt, name,
       (const gchar **) attrs, ctxt->user_data);
   if (must_close) {
@@ -537,6 +701,13 @@ html_context_parse (HtmlContext * ctxt, gchar * text, gsize text_len)
         return;
       }
 
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+      /* after seeking,
+         the subtitle file will be delivered from the start again. */
+      if (strcasestr(next, "<SAMI>"))
+        next = strcasestr(next, "<SAMI>");
+#endif
+
       next = string_token (next, ">", &element);
       next++;
       if (g_str_has_suffix (next, "/")) {
@@ -659,6 +830,9 @@ handle_start_sync (GstSamiContext * sctx, const gchar ** atts)
           sctx->time1 = sctx->time2;
 
         sctx->time2 = atoi ((const char *) value) * GST_MSECOND;
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+        sctx->time3 = sctx->time2;
+#endif
         sctx->time2 = MAX (sctx->time2, sctx->time1);
         g_string_append (sctx->resultbuf, sctx->buf->str);
         sctx->has_result = (sctx->resultbuf->len != 0) ? TRUE : FALSE;
@@ -731,6 +905,91 @@ handle_start_font (GstSamiContext * sctx, const gchar ** atts)
     sami_context_push_state (sctx, SPAN_TAG);
   }
 }
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+static void
+handle_p (GstSamiContext * sctx, const gchar ** atts)
+{
+  int i;
+  const int str_size = 128;
+
+  if (atts != NULL) {
+    for (i = 0; (atts[i] != NULL); i += 2) {
+      const gchar *key, *value;
+
+      key = atts[i];
+      value = atts[i + 1];
+
+      if (sctx->current_language && value && strcmp(sctx->current_language, value)
+          && (sctx->time1 == sctx->time2))
+        sctx->language_changed = TRUE;
+      else if (!sctx->current_language)
+        sctx->current_language = (gchar*) g_malloc0 (str_size);
+
+      if (key && !g_ascii_strcasecmp ("class", key) && value) {
+        strncpy (sctx->current_language, value, str_size - 1);
+
+        if (sctx->desired_language == NULL) {
+          sctx->desired_language = g_strdup(value);
+          GST_LOG("no language list was found and desired lang was set to %s", sctx->desired_language);
+        }
+      }
+      if (sctx->language_changed)
+      {
+         sctx->time1 = 0;
+         sctx->time2 = sctx->time3;
+         sctx->language_changed = FALSE;
+      }
+      if (!value)
+        continue;
+    }
+  }
+}
+
+static void
+handle_start_language_list (GstSamiContext * sctx, const gchar ** atts)
+{
+  int i = 0;
+  int attrIndex = 0;
+  GstLangStruct *new = NULL;
+  GstLangStruct *temp = NULL;
+
+  if (atts != NULL) {
+    if (g_list_length (sctx->lang_list)) {
+      GST_LOG ("We already got the language list");
+      return;
+    }
+    for (i = 0; (atts[attrIndex] != NULL); i++) {
+      const gchar *key, *value;
+
+      key = atts[attrIndex++];
+      value = atts[attrIndex++];
+
+      GST_LOG ("Inside handle_start_language_list key: %s, value: %s", key, value);
+
+      if (!value)
+        continue;
+
+      new = g_new0 (GstLangStruct, 1);
+      new->language_code = (gchar*) g_malloc0 (strlen(value) + 1);
+      if (new->language_code && value)
+        g_strlcpy (new->language_code, value, strlen(value) + 1);
+      new->language_key = (gchar*) g_malloc0 (strlen(key) + 1);
+      if (new->language_key && key)
+        g_strlcpy (new->language_key, key, strlen(key) + 1);
+      sctx->lang_list = g_list_append (sctx->lang_list, new);
+      temp = g_list_nth_data (sctx->lang_list, i);
+      if (sctx->desired_language == NULL && key){
+        sctx->desired_language = g_strdup(key);
+        GST_WARNING("set desired lang %s", sctx->desired_language);
+      }
+
+      if (temp)
+        GST_LOG ("Inside handle_start_language_list of glist key: %s, value: %s",
+                    temp->language_key, temp->language_code);
+    }
+  }
+}
+#endif
 
 static void
 handle_start_element (HtmlContext * ctx, const gchar * name,
@@ -748,6 +1007,10 @@ handle_start_element (HtmlContext * ctx, const gchar * name,
   } else if (!g_ascii_strcasecmp ("ruby", name)) {
     sami_context_push_state (sctx, RUBY_TAG);
   } else if (!g_ascii_strcasecmp ("br", name)) {
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+  if (sctx->current_language && sctx->desired_language &&
+      !strcmp(sctx->current_language, sctx->desired_language))
+#endif
     g_string_append_c (sctx->buf, '\n');
     /* FIXME: support for furigana/ruby once implemented in pango */
   } else if (!g_ascii_strcasecmp ("rt", name)) {
@@ -757,9 +1020,21 @@ handle_start_element (HtmlContext * ctx, const gchar * name,
     g_string_append (sctx->rubybuf, "<span size='xx-small' rise='-100'>");
     sami_context_push_state (sctx, RT_TAG);
   } else if (!g_ascii_strcasecmp ("i", name)) {
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+  if (sctx->current_language && sctx->desired_language &&
+      !strcmp(sctx->current_language, sctx->desired_language)) {
+#endif
     g_string_append (sctx->buf, "<i>");
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+    }
+#endif
     sami_context_push_state (sctx, ITALIC_TAG);
   } else if (!g_ascii_strcasecmp ("p", name)) {
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+    handle_p (sctx, atts);
+  } else if (!g_ascii_strcasecmp ("!--P", name)) {
+    handle_start_language_list (sctx, atts);
+#endif
   }
 }
 
@@ -776,6 +1051,11 @@ handle_end_element (HtmlContext * ctx, const char *name, gpointer user_data)
       (!g_ascii_strcasecmp ("sami", name))) {
     /* We will usually have one buffer left when the body is closed
      * as we need the next sync to actually send it */
+
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+    sctx->end_body = TRUE;
+#endif
+
     if (sctx->buf->len != 0) {
       /* Only set a new start time if we don't have text pending */
       if (sctx->resultbuf->len == 0)
@@ -805,11 +1085,20 @@ handle_text (HtmlContext * ctx, const gchar * text, gsize text_len,
   if (!sctx->in_sync)
     return;
 
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+  if (has_tag (sctx->state, RT_TAG) && (sctx->current_language && sctx->desired_language &&
+       !strcmp(sctx->current_language, sctx->desired_language))) {
+#else
   if (has_tag (sctx->state, RT_TAG)) {
+#endif
     g_string_append_c (sctx->rubybuf, ' ');
     g_string_append (sctx->rubybuf, text);
     g_string_append_c (sctx->rubybuf, ' ');
   } else {
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+    if (sctx->current_language && sctx->desired_language &&
+        !strcmp(sctx->current_language, sctx->desired_language))
+#endif
     g_string_append (sctx->buf, text);
   }
 }
@@ -834,6 +1123,34 @@ sami_context_init (ParserState * state)
   context->rubybuf = g_string_new ("");
   context->resultbuf = g_string_new ("");
   context->state = g_string_new ("");
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+  g_free(context->current_language);
+  context->current_language = NULL;
+
+  g_free(context->desired_language);
+  context->desired_language = NULL;
+
+  if (context->lang_list) {
+    GstLangStruct *temp = NULL;
+    int i = 0;
+
+    while ((temp = g_list_nth_data (context->lang_list, i))) {
+      g_free (temp->language_code);
+      temp->language_code = NULL;
+
+      g_free (temp->language_key);
+      temp->language_key = NULL;
+
+      g_free (temp);
+      i++;
+    }
+    g_list_free (context->lang_list);
+  }
+  context->lang_list = NULL;
+
+  context->language_changed = FALSE;
+  context->end_body = FALSE;
+#endif
 
   state->user_data = context;
 }
@@ -842,6 +1159,10 @@ void
 sami_context_deinit (ParserState * state)
 {
   GstSamiContext *context = (GstSamiContext *) state->user_data;
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+  GstLangStruct *temp = NULL;
+  int i = 0;
+#endif
 
   if (context) {
     html_context_free (context->htmlctxt);
@@ -850,6 +1171,29 @@ sami_context_deinit (ParserState * state)
     g_string_free (context->rubybuf, TRUE);
     g_string_free (context->resultbuf, TRUE);
     g_string_free (context->state, TRUE);
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+    if (context->lang_list) {
+      while ((temp = g_list_nth_data (context->lang_list, i))) {
+        g_free (temp->language_code);
+        temp->language_code = NULL;
+
+        g_free (temp->language_key);
+        temp->language_key = NULL;
+
+        g_free (temp);
+        i++;
+      }
+      g_list_free (context->lang_list);
+    }
+    context->lang_list = NULL;
+
+    g_free (context->current_language);
+    context->current_language = NULL;
+
+    g_free (context->desired_language);
+    context->desired_language = NULL;
+#endif
+
     g_free (context);
     state->user_data = NULL;
   }
@@ -872,6 +1216,23 @@ sami_context_reset (ParserState * state)
   }
 }
 
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+void
+sami_context_change_language (ParserState * state)
+{
+  GstSamiContext *context = (GstSamiContext *) state->user_data;
+  if (context->desired_language) {
+    GST_LOG ("desired language was %s", context->desired_language);
+    g_free (context->desired_language);
+    context->desired_language = NULL;
+  }
+  if(state->current_language) {
+    context->desired_language = g_strdup(state->current_language);
+    GST_WARNING ("desired language changed to %s", GST_STR_NULL(context->desired_language));
+  }
+}
+#endif
+
 gchar *
 parse_sami (ParserState * state, const gchar * line)
 {
@@ -881,20 +1242,46 @@ parse_sami (ParserState * state, const gchar * line)
   gchar *unescaped = unescape_string (line);
   html_context_parse (context->htmlctxt, (gchar *) unescaped,
       strlen (unescaped));
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+  if (context->lang_list)
+    state->language_list = context->lang_list;
+
+  if (context->desired_language && g_strcmp0(context->desired_language, state->current_language)) {
+    g_free (state->current_language);
+    state->current_language = g_strdup(context->desired_language);
+    GST_WARNING("current lang is updated %s", state->current_language);
+  }
+#endif
   g_free (unescaped);
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+  if (context->desired_language && context->current_language) {
+    if ((!strcmp(context->current_language, context->desired_language)) || context->end_body) {
+#endif
+      if (context->has_result) {
+        if (context->rubybuf->len) {
+          context->rubybuf = g_string_append_c (context->rubybuf, '\n');
+          g_string_prepend (context->resultbuf, context->rubybuf->str);
+          context->rubybuf = g_string_truncate (context->rubybuf, 0);
+        }
 
-  if (context->has_result) {
-    if (context->rubybuf->len) {
-      context->rubybuf = g_string_append_c (context->rubybuf, '\n');
-      g_string_prepend (context->resultbuf, context->rubybuf->str);
-      context->rubybuf = g_string_truncate (context->rubybuf, 0);
+        ret = g_string_free (context->resultbuf, FALSE);
+        context->resultbuf = g_string_new ("");
+        state->start_time = context->time1;
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+        if (!GST_CLOCK_TIME_IS_VALID(context->time2))
+          state->duration = GST_CLOCK_TIME_NONE;
+        else
+          state->duration = context->time2 - context->time1;
+#else
+        state->duration = context->time2 - context->time1;
+#endif
+        context->has_result = FALSE;
+      }
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+      context->end_body = FALSE;
     }
-
-    ret = g_string_free (context->resultbuf, FALSE);
-    context->resultbuf = g_string_new ("");
-    state->start_time = context->time1;
-    state->duration = context->time2 - context->time1;
-    context->has_result = FALSE;
   }
+#endif
+
   return ret;
 }
index 12f8c9e..060e6cb 100644 (file)
@@ -31,6 +31,9 @@ void    sami_context_init   (ParserState * state);
 void    sami_context_deinit (ParserState * state);
 
 void    sami_context_reset  (ParserState * state);
+#ifdef TIZEN_FEATURE_SUBPARSE_MODIFICATION
+void    sami_context_change_language  (ParserState * state);
+#endif
 
 G_END_DECLS
 
index 68ee3cd..b091103 100644 (file)
@@ -361,7 +361,7 @@ utf32_type_find (GstTypeFind * tf, gpointer unused)
 }
 
 /*** text/uri-list ***/
-
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 static GstStaticCaps uri_caps = GST_STATIC_CAPS ("text/uri-list");
 
 #define URI_CAPS (gst_static_caps_get(&uri_caps))
@@ -377,6 +377,7 @@ static GstStaticCaps uri_caps = GST_STATIC_CAPS ("text/uri-list");
     data++;                                                             \
   }                                                                     \
 }
+
 static void
 uri_type_find (GstTypeFind * tf, gpointer unused)
 {
@@ -423,6 +424,7 @@ uri_type_find (GstTypeFind * tf, gpointer unused)
     gst_type_find_suggest (tf, GST_TYPE_FIND_LIKELY, URI_CAPS);
   }
 }
+#endif
 
 /*** application/itc ***/
 static GstStaticCaps itc_caps = GST_STATIC_CAPS ("application/itc");
@@ -656,6 +658,7 @@ xml_check_first_element (GstTypeFind * tf, const gchar * element, guint elen,
   return FALSE;
 }
 
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 static GstStaticCaps generic_xml_caps = GST_STATIC_CAPS ("application/xml");
 
 #define GENERIC_XML_CAPS (gst_static_caps_get(&generic_xml_caps))
@@ -666,7 +669,7 @@ xml_type_find (GstTypeFind * tf, gpointer unused)
     gst_type_find_suggest (tf, GST_TYPE_FIND_MINIMUM, GENERIC_XML_CAPS);
   }
 }
-
+#endif
 /*** application/dash+xml ****************************************************/
 
 static GstStaticCaps dash_caps = GST_STATIC_CAPS ("application/dash+xml");
@@ -798,7 +801,7 @@ sdp_type_find (GstTypeFind * tf, gpointer unused)
 }
 
 /*** application/smil *********************************************************/
-
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 static GstStaticCaps smil_caps = GST_STATIC_CAPS ("application/smil");
 
 #define SMIL_CAPS (gst_static_caps_get(&smil_caps))
@@ -849,7 +852,7 @@ html_type_find (GstTypeFind * tf, gpointer unused)
     }
   }
 }
-
+#endif
 /*** audio/midi ***/
 
 static GstStaticCaps mid_caps = GST_STATIC_CAPS ("audio/midi");
@@ -895,7 +898,7 @@ mxmf_type_find (GstTypeFind * tf, gpointer unused)
 
 
 /*** video/x-fli ***/
-
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 static GstStaticCaps flx_caps = GST_STATIC_CAPS ("video/x-fli");
 
 #define FLX_CAPS gst_static_caps_get(&flx_caps)
@@ -924,7 +927,7 @@ flx_type_find (GstTypeFind * tf, gpointer unused)
     return;
   }
 }
-
+#endif
 /*** application/x-id3 ***/
 
 static GstStaticCaps id3_caps = GST_STATIC_CAPS ("application/x-id3");
@@ -979,7 +982,7 @@ apetag_type_find (GstTypeFind * tf, gpointer unused)
 }
 
 /*** audio/x-ttafile ***/
-
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 static GstStaticCaps tta_caps = GST_STATIC_CAPS ("audio/x-ttafile");
 
 #define TTA_CAPS gst_static_caps_get(&tta_caps)
@@ -995,7 +998,7 @@ tta_type_find (GstTypeFind * tf, gpointer unused)
     }
   }
 }
-
+#endif
 /*** audio/x-flac ***/
 static GstStaticCaps flac_caps = GST_STATIC_CAPS ("audio/x-flac");
 
@@ -2009,7 +2012,7 @@ dts_type_find (GstTypeFind * tf, gpointer unused)
 }
 
 /*** gsm ***/
-
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 /* can only be detected by using the extension, in which case we use the default
  * GSM properties */
 static GstStaticCaps gsm_caps =
@@ -2205,16 +2208,19 @@ multipart_type_find (GstTypeFind * tf, gpointer unused)
     }
   }
 }
+#endif
 
 /*** video/mpeg systemstream ***/
+#if defined(TIZEN_PROFILE_TV) || !defined(TIZEN_FEATURE_DISABLE_MIME_TYPES)
 static GstStaticCaps mpeg_sys_caps = GST_STATIC_CAPS ("video/mpeg, "
     "systemstream = (boolean) true, mpegversion = (int) [ 1, 2 ]");
 
 #define MPEG_SYS_CAPS gst_static_caps_get(&mpeg_sys_caps)
+#endif
 #define IS_MPEG_HEADER(data) (G_UNLIKELY((((guint8 *)(data))[0] == 0x00) &&  \
                                          (((guint8 *)(data))[1] == 0x00) &&  \
                                          (((guint8 *)(data))[2] == 0x01)))
-
+#if defined(TIZEN_PROFILE_TV) || !defined(TIZEN_FEATURE_DISABLE_MIME_TYPES)
 #define IS_MPEG_PACK_CODE(b) ((b) == 0xBA)
 #define IS_MPEG_SYS_CODE(b) ((b) == 0xBB)
 #define IS_MPEG_PACK_HEADER(data)       (IS_MPEG_HEADER (data) &&            \
@@ -2230,6 +2236,7 @@ static GstStaticCaps mpeg_sys_caps = GST_STATIC_CAPS ("video/mpeg, "
 
 #define MPEG2_MIN_SYS_HEADERS 2
 #define MPEG2_MAX_SYS_HEADERS 5
+#endif
 
 static gboolean
 mpeg_sys_is_valid_pack (GstTypeFind * tf, const guint8 * data, guint len,
@@ -2283,6 +2290,7 @@ mpeg_sys_is_valid_pack (GstTypeFind * tf, const guint8 * data, guint len,
   return FALSE;
 }
 
+#if defined(TIZEN_PROFILE_TV) || !defined(TIZEN_FEATURE_DISABLE_MIME_TYPES)
 static gboolean
 mpeg_sys_is_valid_pes (GstTypeFind * tf, const guint8 * data, guint len,
     guint * pack_size)
@@ -2481,6 +2489,7 @@ suggest:
         "mpegversion", G_TYPE_INT, mpegversion, NULL);
   }
 };
+#endif
 
 /*** video/mpegts Transport Stream ***/
 static GstStaticCaps mpegts_caps = GST_STATIC_CAPS ("video/mpegts, "
@@ -3110,7 +3119,7 @@ aiff_type_find (GstTypeFind * tf, gpointer unused)
 }
 
 /*** audio/x-svx ***/
-
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 static GstStaticCaps svx_caps = GST_STATIC_CAPS ("audio/x-svx");
 
 #define SVX_CAPS gst_static_caps_get(&svx_caps)
@@ -3159,7 +3168,7 @@ ape_type_find (GstTypeFind * tf, gpointer unused)
     gst_type_find_suggest (tf, GST_TYPE_FIND_LIKELY + 10, APE_CAPS);
   }
 }
-
+#endif
 /*** ISO FORMATS ***/
 
 /*** audio/x-m4a ***/
@@ -3244,6 +3253,7 @@ q3gp_type_find (GstTypeFind * tf, gpointer unused)
 
 }
 
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 /*** video/mj2 and image/jp2 ***/
 static GstStaticCaps mj2_caps = GST_STATIC_CAPS ("video/mj2");
 
@@ -3368,7 +3378,7 @@ jpc_type_find (GstTypeFind * tf, gpointer unused)
   if (found_cod && found_qcd && found_sot)
     gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, JPC_CAPS);
 }
-
+#endif
 
 /*** video/quicktime ***/
 
@@ -3399,6 +3409,9 @@ qt_type_find (GstTypeFind * tf, gpointer unused)
 
     if (STRNCMP (&data[4], "ftypisom", 8) == 0 ||
         STRNCMP (&data[4], "ftypavc1", 8) == 0 ||
+#ifdef TIZEN_FEATURE_TYPEFIND_ENHANCEMENT
+        STRNCMP (&data[4], "ftypwmf ", 8) == 0 ||
+#endif
         STRNCMP (&data[4], "ftypmp42", 8) == 0) {
       tip = GST_TYPE_FIND_MAXIMUM;
       variant = "iso";
@@ -3527,7 +3540,7 @@ done:
 
 
 /*** image/x-quicktime ***/
-
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 static GstStaticCaps qtif_caps = GST_STATIC_CAPS ("image/x-quicktime");
 
 #define QTIF_CAPS gst_static_caps_get(&qtif_caps)
@@ -3887,7 +3900,7 @@ swf_type_find (GstTypeFind * tf, gpointer unused)
     gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, SWF_CAPS);
   }
 }
-
+#endif
 /*** application/vnd.ms-sstr+xml ***/
 
 static void
@@ -4154,6 +4167,7 @@ bmp_type_find (GstTypeFind * tf, gpointer unused)
       NULL);
 }
 
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 /*** image/tiff ***/
 static GstStaticCaps tiff_caps = GST_STATIC_CAPS ("image/tiff, "
     "endianness = (int) { BIG_ENDIAN, LITTLE_ENDIAN }");
@@ -4179,6 +4193,7 @@ tiff_type_find (GstTypeFind * tf, gpointer unused)
     }
   }
 }
+#endif
 
 /*** image/x-exr ***/
 static GstStaticCaps exr_caps = GST_STATIC_CAPS ("image/x-exr");
@@ -4314,6 +4329,7 @@ pnm_type_find (GstTypeFind * tf, gpointer unused)
   }
 }
 
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 static GstStaticCaps sds_caps = GST_STATIC_CAPS ("audio/x-sds");
 
 #define SDS_CAPS (gst_static_caps_get(&sds_caps))
@@ -4367,7 +4383,7 @@ ircam_type_find (GstTypeFind * tf, gpointer unused)
     }
   }
 }
-
+#endif
 /*** Matroska/WebM ***/
 
 #define EBML_HEADER           0x1A45DFA3
@@ -4626,6 +4642,7 @@ matroska_type_find (GstTypeFind * tf, gpointer unused)
 }
 
 /*** application/mxf ***/
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 static GstStaticCaps mxf_caps = GST_STATIC_CAPS ("application/mxf");
 
 #define MXF_MAX_PROBE_LENGTH (1024 * 64)
@@ -4705,7 +4722,7 @@ dv_type_find (GstTypeFind * tf, gpointer private)
         "format", G_TYPE_STRING, format, NULL);
   }
 }
-
+#endif
 
 /*** Ogg variants ***/
 static GstStaticCaps ogg_caps =
@@ -4884,6 +4901,7 @@ theora_type_find (GstTypeFind * tf, gpointer private)
   }
 }
 
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 /*** kate ***/
 static void
 kate_type_find (GstTypeFind * tf, gpointer private)
@@ -4912,6 +4930,7 @@ kate_type_find (GstTypeFind * tf, gpointer private)
         "application/x-kate");
   }
 }
+#endif
 
 /*** WEBVTTT subtitles ***/
 static GstStaticCaps webvtt_caps =
@@ -4948,6 +4967,7 @@ webvtt_type_find (GstTypeFind * tf, gpointer private)
   gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, WEBVTT_CAPS);
 }
 
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 /*** application/x-ogm-video or audio***/
 
 static GstStaticCaps ogmvideo_caps =
@@ -5147,6 +5167,7 @@ ar_type_find (GstTypeFind * tf, gpointer unused)
     gst_type_find_suggest (tf, GST_TYPE_FIND_NEARLY_CERTAIN, AR_CAPS);
   }
 }
+#endif
 
 /*** audio/x-au ***/
 
@@ -5192,6 +5213,7 @@ nuv_type_find (GstTypeFind * tf, gpointer unused)
   }
 }
 
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 /*** audio/x-paris ***/
 /* NOTE: do not replace this function with two TYPE_FIND_REGISTER_START_WITH */
 static GstStaticCaps paris_caps = GST_STATIC_CAPS ("audio/x-paris");
@@ -5415,7 +5437,7 @@ vivo_type_find (GstTypeFind * tf, gpointer unused)
     gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, VIVO_CAPS);
   }
 }
-
+#endif
 /*** XDG MIME typefinder (to avoid false positives mostly) ***/
 
 #ifdef USE_GIO
@@ -5499,7 +5521,7 @@ xdgmime_typefind (GstTypeFind * find, gpointer user_data)
 #endif /* USE_GIO */
 
 /*** Windows icon typefinder (to avoid false positives mostly) ***/
-
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 static void
 windows_icon_typefind (GstTypeFind * find, gpointer user_data)
 {
@@ -5664,6 +5686,7 @@ y4m_typefind (GstTypeFind * tf, gpointer private)
         "application/x-yuv4mpeg", "y4mversion", G_TYPE_INT, 2, NULL);
   }
 }
+#endif
 
 /*** DVD ISO images (looks like H.264, see #674069) ***/
 static void
@@ -5869,8 +5892,10 @@ GST_TYPE_FIND_REGISTER_DEFINE (mid, "audio/midi", GST_RANK_PRIMARY,
     mid_type_find, "mid,midi", MID_CAPS, NULL, NULL);
 GST_TYPE_FIND_REGISTER_DEFINE (mxmf, "audio/mobile-xmf", GST_RANK_PRIMARY,
     mxmf_type_find, "mxmf", MXMF_CAPS, NULL, NULL);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 GST_TYPE_FIND_REGISTER_DEFINE (flx, "video/x-fli", GST_RANK_MARGINAL,
     flx_type_find, "flc,fli", FLX_CAPS, NULL, NULL);
+#endif
 GST_TYPE_FIND_REGISTER_DEFINE (id3v2, "application/x-id3v2",
     GST_RANK_PRIMARY + 103, id3v2_type_find, "mp3,mp2,mp1,mpga,ogg,flac,tta",
     ID3_CAPS, NULL, NULL);
@@ -5880,22 +5905,28 @@ GST_TYPE_FIND_REGISTER_DEFINE (id3v1, "application/x-id3v1",
 GST_TYPE_FIND_REGISTER_DEFINE (apetag, "application/x-apetag",
     GST_RANK_PRIMARY + 102, apetag_type_find, "mp3,ape,mpc,wv", APETAG_CAPS,
     NULL, NULL);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 GST_TYPE_FIND_REGISTER_DEFINE (tta, "audio/x-ttafile", GST_RANK_PRIMARY,
     tta_type_find, "tta", TTA_CAPS, NULL, NULL);
 GST_TYPE_FIND_REGISTER_DEFINE (mod, "audio/x-mod", GST_RANK_SECONDARY,
     mod_type_find,
     "669,amf,ams,dbm,digi,dmf,dsm,gdm,far,imf,it,j2b,mdl,med,mod,mt2,mtm,"
     "okt,psm,ptm,sam,s3m,stm,stx,ult,umx,xm", MOD_CAPS, NULL, NULL);
+#endif
 GST_TYPE_FIND_REGISTER_DEFINE (mp3, "audio/mpeg", GST_RANK_PRIMARY,
     mp3_type_find, "mp3,mp2,mp1,mpga", MP3_CAPS, NULL, NULL);
 GST_TYPE_FIND_REGISTER_DEFINE (ac3, "audio/x-ac3", GST_RANK_PRIMARY,
     ac3_type_find, "ac3,eac3", AC3_CAPS, NULL, NULL);
 GST_TYPE_FIND_REGISTER_DEFINE (dts, "audio/x-dts", GST_RANK_SECONDARY,
     dts_type_find, "dts", DTS_CAPS, NULL, NULL);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 GST_TYPE_FIND_REGISTER_DEFINE (gsm, "audio/x-gsm", GST_RANK_PRIMARY, NULL,
     "gsm", GSM_CAPS, NULL, NULL);
+#endif
+#ifdef TIZEN_PROFILE_TV
 GST_TYPE_FIND_REGISTER_DEFINE (mpeg_sys, "video/mpeg-sys", GST_RANK_PRIMARY,
     mpeg_sys_type_find, "mpe,mpeg,mpg", MPEG_SYS_CAPS, NULL, NULL);
+#endif
 GST_TYPE_FIND_REGISTER_DEFINE (mpeg_ts, "video/mpegts", GST_RANK_PRIMARY,
     mpeg_ts_type_find, "ts,mts", MPEGTS_CAPS, NULL, NULL);
 GST_TYPE_FIND_REGISTER_DEFINE (ogganx, "application/ogg", GST_RANK_PRIMARY,
@@ -5921,6 +5952,7 @@ GST_TYPE_FIND_REGISTER_DEFINE (q3gp, "application/x-3gp", GST_RANK_PRIMARY,
     q3gp_type_find, "3gp", Q3GP_CAPS, NULL, NULL);
 GST_TYPE_FIND_REGISTER_DEFINE (qt, "video/quicktime", GST_RANK_PRIMARY,
     qt_type_find, "mov,mp4", QT_CAPS, NULL, NULL);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 GST_TYPE_FIND_REGISTER_DEFINE (qtif, "image/x-quicktime", GST_RANK_SECONDARY,
     qtif_type_find, "qif,qtif,qti", QTIF_CAPS, NULL, NULL);
 GST_TYPE_FIND_REGISTER_DEFINE (jp2, "image/jp2", GST_RANK_PRIMARY,
@@ -5933,6 +5965,7 @@ GST_TYPE_FIND_REGISTER_DEFINE (html, "text/html", GST_RANK_SECONDARY,
     html_type_find, "htm,html", HTML_CAPS, NULL, NULL);
 GST_TYPE_FIND_REGISTER_DEFINE (swf, "application/x-shockwave-flash",
     GST_RANK_SECONDARY, swf_type_find, "swf,swfl", SWF_CAPS, NULL, NULL);
+#endif
 GST_TYPE_FIND_REGISTER_DEFINE (xges, "application/xges",
     GST_RANK_PRIMARY, xges_type_find, "xges", XGES_CAPS, NULL, NULL);
 GST_TYPE_FIND_REGISTER_DEFINE (xmeml, "application/vnd.apple-xmeml+xml",
@@ -5953,14 +5986,17 @@ GST_TYPE_FIND_REGISTER_DEFINE (utf16, "text/utf-16", GST_RANK_MARGINAL,
     utf16_type_find, "txt", UTF16_CAPS, NULL, NULL);
 GST_TYPE_FIND_REGISTER_DEFINE (utf32, "text/utf-32", GST_RANK_MARGINAL,
     utf32_type_find, "txt", UTF32_CAPS, NULL, NULL);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 GST_TYPE_FIND_REGISTER_DEFINE (uri, "text/uri-list", GST_RANK_MARGINAL,
     uri_type_find, "ram", URI_CAPS, NULL, NULL);
+#endif
 GST_TYPE_FIND_REGISTER_DEFINE (itc, "application/itc", GST_RANK_SECONDARY,
     itc_type_find, "itc", ITC_CAPS, NULL, NULL);
 GST_TYPE_FIND_REGISTER_DEFINE (hls, "application/x-hls", GST_RANK_MARGINAL,
     hls_type_find, "m3u8", HLS_CAPS, NULL, NULL);
 GST_TYPE_FIND_REGISTER_DEFINE (sdp, "application/sdp", GST_RANK_SECONDARY,
     sdp_type_find, "sdp", SDP_CAPS, NULL, NULL);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 GST_TYPE_FIND_REGISTER_DEFINE (smil, "application/smil", GST_RANK_SECONDARY,
     smil_type_find, "smil", SMIL_CAPS, NULL, NULL);
 GST_TYPE_FIND_REGISTER_DEFINE (ttml_xml, "application/ttml+xml",
@@ -5968,8 +6004,10 @@ GST_TYPE_FIND_REGISTER_DEFINE (ttml_xml, "application/ttml+xml",
     NULL);
 GST_TYPE_FIND_REGISTER_DEFINE (xml, "application/xml", GST_RANK_MARGINAL,
     xml_type_find, "xml", GENERIC_XML_CAPS, NULL, NULL);
+#endif
 GST_TYPE_FIND_REGISTER_DEFINE (aiff, "audio/x-aiff", GST_RANK_SECONDARY,
     aiff_type_find, "aiff,aif,aifc", AIFF_CAPS, NULL, NULL);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 GST_TYPE_FIND_REGISTER_DEFINE (svx, "audio/x-svx", GST_RANK_SECONDARY,
     svx_type_find, "iff,svx", SVX_CAPS, NULL, NULL);
 GST_TYPE_FIND_REGISTER_DEFINE (paris, "audio/x-paris", GST_RANK_SECONDARY,
@@ -5982,18 +6020,22 @@ GST_TYPE_FIND_REGISTER_DEFINE (shn, "audio/x-shorten", GST_RANK_SECONDARY,
     shn_type_find, "shn", SHN_CAPS, NULL, NULL);
 GST_TYPE_FIND_REGISTER_DEFINE (ape, "application/x-ape", GST_RANK_SECONDARY,
     ape_type_find, "ape", APE_CAPS, NULL, NULL);
+#endif
 GST_TYPE_FIND_REGISTER_DEFINE (jpeg, "image/jpeg", GST_RANK_PRIMARY + 15,
     jpeg_type_find, "jpg,jpe,jpeg", JPEG_CAPS, NULL, NULL);
 GST_TYPE_FIND_REGISTER_DEFINE (bmp, "image/bmp", GST_RANK_PRIMARY,
     bmp_type_find, "bmp", BMP_CAPS, NULL, NULL);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 GST_TYPE_FIND_REGISTER_DEFINE (tiff, "image/tiff", GST_RANK_PRIMARY,
     tiff_type_find, "tif,tiff", TIFF_CAPS, NULL, NULL);
+#endif
 GST_TYPE_FIND_REGISTER_DEFINE (exr, "image/x-exr", GST_RANK_PRIMARY,
     exr_type_find, "exr", EXR_CAPS, NULL, NULL);
 GST_TYPE_FIND_REGISTER_DEFINE (pnm, "image/x-portable-pixmap",
     GST_RANK_SECONDARY, pnm_type_find, "pnm,ppm,pgm,pbm", PNM_CAPS, NULL, NULL);
 GST_TYPE_FIND_REGISTER_DEFINE (matroska, "video/x-matroska", GST_RANK_PRIMARY,
     matroska_type_find, "mkv,mka,mk3d,webm", MATROSKA_CAPS, NULL, NULL);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 GST_TYPE_FIND_REGISTER_DEFINE (mxf, "application/mxf", GST_RANK_PRIMARY,
     mxf_type_find, "mxf", MXF_CAPS, NULL, NULL);
 GST_TYPE_FIND_REGISTER_DEFINE (dv, "video/x-dv", GST_RANK_SECONDARY,
@@ -6004,6 +6046,7 @@ GST_TYPE_FIND_REGISTER_DEFINE (sbc, "audio/x-sbc", GST_RANK_MARGINAL,
     sbc_type_find, "sbc", SBC_CAPS, NULL, NULL);
 GST_TYPE_FIND_REGISTER_DEFINE (kate, "subtitle/x-kate", GST_RANK_MARGINAL,
     kate_type_find, NULL, NULL, NULL, NULL);
+#endif
 GST_TYPE_FIND_REGISTER_DEFINE (webvtt, "application/x-subtitle-vtt",
     GST_RANK_MARGINAL, webvtt_type_find, "vtt", WEBVTT_CAPS, NULL, NULL);
 GST_TYPE_FIND_REGISTER_DEFINE (flac, "audio/x-flac", GST_RANK_PRIMARY,
@@ -6012,6 +6055,7 @@ GST_TYPE_FIND_REGISTER_DEFINE (vorbis, "audio/x-vorbis", GST_RANK_PRIMARY,
     vorbis_type_find, NULL, VORBIS_CAPS, NULL, NULL);
 GST_TYPE_FIND_REGISTER_DEFINE (theora, "video/x-theora", GST_RANK_PRIMARY,
     theora_type_find, NULL, THEORA_CAPS, NULL, NULL);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 GST_TYPE_FIND_REGISTER_DEFINE (ogmvideo, "application/x-ogm-video",
     GST_RANK_PRIMARY, ogmvideo_type_find, NULL, OGMVIDEO_CAPS, NULL, NULL);
 GST_TYPE_FIND_REGISTER_DEFINE (ogmaudio, "application/x-ogm-audio",
@@ -6026,8 +6070,10 @@ GST_TYPE_FIND_REGISTER_DEFINE (oggskel, "application/x-ogg-skeleton",
     GST_RANK_PRIMARY, oggskel_type_find, NULL, OGG_SKELETON_CAPS, NULL, NULL);
 GST_TYPE_FIND_REGISTER_DEFINE (cmml, "text/x-cmml", GST_RANK_PRIMARY,
     cmml_type_find, NULL, CMML_CAPS, NULL, NULL);
+#endif
 GST_TYPE_FIND_REGISTER_DEFINE (aac, "audio/aac", GST_RANK_SECONDARY,
     aac_type_find, "aac,adts,adif,loas", AAC_CAPS, NULL, NULL);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 GST_TYPE_FIND_REGISTER_DEFINE (wavpack_wvp, "audio/x-wavpack",
     GST_RANK_SECONDARY, wavpack_type_find, "wv,wvp", WAVPACK_CAPS, NULL, NULL);
 GST_TYPE_FIND_REGISTER_DEFINE (wavpack_wvc, "audio/x-wavpack-correction",
@@ -6059,12 +6105,15 @@ GST_TYPE_FIND_REGISTER_DEFINE (y4m, "application/x-yuv4mpeg",
     GST_RANK_SECONDARY, y4m_typefind, NULL, NULL, NULL, NULL);
 GST_TYPE_FIND_REGISTER_DEFINE (windows_icon, "image/x-icon", GST_RANK_MARGINAL,
     windows_icon_typefind, NULL, NULL, NULL, NULL);
+#endif
 #ifdef USE_GIO
 GST_TYPE_FIND_REGISTER_DEFINE (xdgmime, "xdgmime-base", GST_RANK_MARGINAL,
     xdgmime_typefind, NULL, NULL, NULL, NULL);
 #endif
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 GST_TYPE_FIND_REGISTER_DEFINE (degas, "image/x-degas", GST_RANK_MARGINAL,
     degas_type_find, NULL, NULL, NULL, NULL);
+#endif
 GST_TYPE_FIND_REGISTER_DEFINE (dvdiso, "application/octet-stream",
     GST_RANK_MARGINAL, dvdiso_type_find, NULL, NULL, NULL, NULL);
 GST_TYPE_FIND_REGISTER_DEFINE (ssa, "application/x-ssa", GST_RANK_SECONDARY,
@@ -6073,5 +6122,7 @@ GST_TYPE_FIND_REGISTER_DEFINE (pva, "video/x-pva", GST_RANK_SECONDARY,
     pva_type_find, "pva", PVA_CAPS, NULL, NULL);
 GST_TYPE_FIND_REGISTER_DEFINE (aa, "audio/audible", GST_RANK_MARGINAL,
     aa_type_find, "aa,aax", AA_CAPS, NULL, NULL);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 GST_TYPE_FIND_REGISTER_DEFINE (tap, "audio/x-tap-tap", GST_RANK_PRIMARY,
     tap_type_find, "tap", TAP_CAPS, NULL, NULL);
+#endif
index c0e386a..651506e 100644 (file)
@@ -43,15 +43,20 @@ plugin_init (GstPlugin * plugin)
 
   /*Riff Type find register */
   GST_TYPE_FIND_REGISTER (avi, plugin);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
   GST_TYPE_FIND_REGISTER (qcp, plugin);
   GST_TYPE_FIND_REGISTER (cdxa, plugin);
+#endif
   GST_TYPE_FIND_REGISTER (riff_mid, plugin);
   GST_TYPE_FIND_REGISTER (wav, plugin);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
   GST_TYPE_FIND_REGISTER (webp, plugin);
-
+#endif
   /*'Start with' Type find register */
   GST_TYPE_FIND_REGISTER (asf, plugin);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
   GST_TYPE_FIND_REGISTER (vcd, plugin);
+#endif
   GST_TYPE_FIND_REGISTER (imelody, plugin);
   GST_TYPE_FIND_REGISTER (scc, plugin);
 #if 0
@@ -66,9 +71,12 @@ plugin_init (GstPlugin * plugin)
   GST_TYPE_FIND_REGISTER (rf64, plugin);
   GST_TYPE_FIND_REGISTER (gif, plugin);
   GST_TYPE_FIND_REGISTER (png, plugin);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
   GST_TYPE_FIND_REGISTER (mve, plugin);
+#endif
   GST_TYPE_FIND_REGISTER (amr, plugin);
   GST_TYPE_FIND_REGISTER (amr_wb, plugin);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
   GST_TYPE_FIND_REGISTER (sid, plugin);
   GST_TYPE_FIND_REGISTER (xcf, plugin);
   GST_TYPE_FIND_REGISTER (mng, plugin);
@@ -79,6 +87,7 @@ plugin_init (GstPlugin * plugin)
   GST_TYPE_FIND_REGISTER (gz, plugin);
   GST_TYPE_FIND_REGISTER (zip, plugin);
   GST_TYPE_FIND_REGISTER (z, plugin);
+#endif
   GST_TYPE_FIND_REGISTER (elf, plugin);
   GST_TYPE_FIND_REGISTER (spc, plugin);
   GST_TYPE_FIND_REGISTER (caf, plugin);
@@ -105,17 +114,25 @@ plugin_init (GstPlugin * plugin)
   GST_TYPE_FIND_REGISTER (mcc, plugin);
   GST_TYPE_FIND_REGISTER (mid, plugin);
   GST_TYPE_FIND_REGISTER (mxmf, plugin);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
   GST_TYPE_FIND_REGISTER (flx, plugin);
+#endif
   GST_TYPE_FIND_REGISTER (id3v2, plugin);
   GST_TYPE_FIND_REGISTER (id3v1, plugin);
   GST_TYPE_FIND_REGISTER (apetag, plugin);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
   GST_TYPE_FIND_REGISTER (tta, plugin);
   GST_TYPE_FIND_REGISTER (mod, plugin);
+#endif
   GST_TYPE_FIND_REGISTER (mp3, plugin);
   GST_TYPE_FIND_REGISTER (ac3, plugin);
   GST_TYPE_FIND_REGISTER (dts, plugin);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
   GST_TYPE_FIND_REGISTER (gsm, plugin);
+#endif
+#ifdef TIZEN_PROFILE_TV
   GST_TYPE_FIND_REGISTER (mpeg_sys, plugin);
+#endif
   GST_TYPE_FIND_REGISTER (mpeg_ts, plugin);
   GST_TYPE_FIND_REGISTER (ogganx, plugin);
   GST_TYPE_FIND_REGISTER (mpeg_video_stream, plugin);
@@ -128,12 +145,14 @@ plugin_init (GstPlugin * plugin)
   GST_TYPE_FIND_REGISTER (m4a, plugin);
   GST_TYPE_FIND_REGISTER (q3gp, plugin);
   GST_TYPE_FIND_REGISTER (qt, plugin);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
   GST_TYPE_FIND_REGISTER (qtif, plugin);
   GST_TYPE_FIND_REGISTER (jp2, plugin);
   GST_TYPE_FIND_REGISTER (jpc, plugin);
   GST_TYPE_FIND_REGISTER (mj2, plugin);
   GST_TYPE_FIND_REGISTER (html, plugin);
   GST_TYPE_FIND_REGISTER (swf, plugin);
+#endif
   GST_TYPE_FIND_REGISTER (xges, plugin);
   GST_TYPE_FIND_REGISTER (xmeml, plugin);
   GST_TYPE_FIND_REGISTER (fcpxml, plugin);
@@ -143,35 +162,46 @@ plugin_init (GstPlugin * plugin)
   GST_TYPE_FIND_REGISTER (utf8, plugin);
   GST_TYPE_FIND_REGISTER (utf16, plugin);
   GST_TYPE_FIND_REGISTER (utf32, plugin);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
   GST_TYPE_FIND_REGISTER (uri, plugin);
+#endif
   GST_TYPE_FIND_REGISTER (itc, plugin);
   GST_TYPE_FIND_REGISTER (hls, plugin);
   GST_TYPE_FIND_REGISTER (sdp, plugin);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
   GST_TYPE_FIND_REGISTER (smil, plugin);
   GST_TYPE_FIND_REGISTER (ttml_xml, plugin);
   GST_TYPE_FIND_REGISTER (xml, plugin);
+#endif
   GST_TYPE_FIND_REGISTER (aiff, plugin);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
   GST_TYPE_FIND_REGISTER (svx, plugin);
   GST_TYPE_FIND_REGISTER (paris, plugin);
   GST_TYPE_FIND_REGISTER (sds, plugin);
   GST_TYPE_FIND_REGISTER (ircam, plugin);
   GST_TYPE_FIND_REGISTER (shn, plugin);
   GST_TYPE_FIND_REGISTER (ape, plugin);
+#endif
   GST_TYPE_FIND_REGISTER (jpeg, plugin);
   GST_TYPE_FIND_REGISTER (bmp, plugin);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
   GST_TYPE_FIND_REGISTER (tiff, plugin);
+#endif
   GST_TYPE_FIND_REGISTER (exr, plugin);
   GST_TYPE_FIND_REGISTER (pnm, plugin);
   GST_TYPE_FIND_REGISTER (matroska, plugin);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
   GST_TYPE_FIND_REGISTER (mxf, plugin);
   GST_TYPE_FIND_REGISTER (dv, plugin);
   GST_TYPE_FIND_REGISTER (ilbc, plugin);
   GST_TYPE_FIND_REGISTER (sbc, plugin);
   GST_TYPE_FIND_REGISTER (kate, plugin);
+#endif
   GST_TYPE_FIND_REGISTER (webvtt, plugin);
   GST_TYPE_FIND_REGISTER (flac, plugin);
   GST_TYPE_FIND_REGISTER (vorbis, plugin);
   GST_TYPE_FIND_REGISTER (theora, plugin);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
   GST_TYPE_FIND_REGISTER (ogmvideo, plugin);
   GST_TYPE_FIND_REGISTER (ogmaudio, plugin);
   GST_TYPE_FIND_REGISTER (ogmtext, plugin);
@@ -179,7 +209,9 @@ plugin_init (GstPlugin * plugin)
   GST_TYPE_FIND_REGISTER (celt, plugin);
   GST_TYPE_FIND_REGISTER (oggskel, plugin);
   GST_TYPE_FIND_REGISTER (cmml, plugin);
+#endif
   GST_TYPE_FIND_REGISTER (aac, plugin);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
   GST_TYPE_FIND_REGISTER (wavpack_wvp, plugin);
   GST_TYPE_FIND_REGISTER (wavpack_wvc, plugin);
   GST_TYPE_FIND_REGISTER (postscript, plugin);
@@ -194,15 +226,20 @@ plugin_init (GstPlugin * plugin)
   GST_TYPE_FIND_REGISTER (wbmp, plugin);
   GST_TYPE_FIND_REGISTER (y4m, plugin);
   GST_TYPE_FIND_REGISTER (windows_icon, plugin);
+#endif
 #ifdef USE_GIO
   GST_TYPE_FIND_REGISTER (xdgmime, plugin);
 #endif
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
   GST_TYPE_FIND_REGISTER (degas, plugin);
+#endif
   GST_TYPE_FIND_REGISTER (dvdiso, plugin);
   GST_TYPE_FIND_REGISTER (ssa, plugin);
   GST_TYPE_FIND_REGISTER (pva, plugin);
   GST_TYPE_FIND_REGISTER (aa, plugin);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
   GST_TYPE_FIND_REGISTER (tap, plugin);
+#endif
 
   return TRUE;
 }
index fb9308d..c21a44f 100644 (file)
@@ -71,13 +71,17 @@ G_END_DECLS
 /*RIFF type find definition */
 TYPE_FIND_REGISTER_RIFF_DEFINE (avi, "video/x-msvideo", GST_RANK_PRIMARY,
     "avi", "AVI ");
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 TYPE_FIND_REGISTER_RIFF_DEFINE (qcp, "audio/qcelp", GST_RANK_PRIMARY,
     "qcp", "QLCM");
 TYPE_FIND_REGISTER_RIFF_DEFINE (cdxa, "video/x-cdxa", GST_RANK_PRIMARY,
     "dat", "CDXA");
+#endif
 TYPE_FIND_REGISTER_RIFF_DEFINE (riff_mid, "audio/riff-midi",
     GST_RANK_PRIMARY, "mid,midi", "RMID");
 TYPE_FIND_REGISTER_RIFF_DEFINE (wav, "audio/x-wav", GST_RANK_PRIMARY, "wav",
     "WAVE");
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 TYPE_FIND_REGISTER_RIFF_DEFINE (webp, "image/webp", GST_RANK_PRIMARY,
     "webp", "WEBP");
+#endif
index 14092e9..3174c1e 100644 (file)
@@ -74,9 +74,11 @@ TYPE_FIND_REGISTER_START_WITH_DEFINE (asf, "video/x-ms-asf",
     GST_RANK_SECONDARY, "asf,wm,wma,wmv",
     "\060\046\262\165\216\146\317\021\246\331\000\252\000\142\316\154", 16,
     GST_TYPE_FIND_MAXIMUM);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 TYPE_FIND_REGISTER_START_WITH_DEFINE (vcd, "video/x-vcd", GST_RANK_PRIMARY,
     "dat", "\000\377\377\377\377\377\377\377\377\377\377\000", 12,
     GST_TYPE_FIND_MAXIMUM);
+#endif
 TYPE_FIND_REGISTER_START_WITH_DEFINE (imelody, "audio/x-imelody",
     GST_RANK_PRIMARY, "imy,ime,imelody", "BEGIN:IMELODY", 13,
     GST_TYPE_FIND_MAXIMUM);
@@ -105,14 +107,17 @@ TYPE_FIND_REGISTER_START_WITH_DEFINE (gif, "image/gif", GST_RANK_PRIMARY,
 TYPE_FIND_REGISTER_START_WITH_DEFINE (png, "image/png",
     GST_RANK_PRIMARY + 14, "png", "\211PNG\015\012\032\012", 8,
     GST_TYPE_FIND_MAXIMUM);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 TYPE_FIND_REGISTER_START_WITH_DEFINE (mve, "video/x-mve",
     GST_RANK_SECONDARY, "mve",
     "Interplay MVE File\032\000\032\000\000\001\063\021", 26,
     GST_TYPE_FIND_MAXIMUM);
+#endif
 TYPE_FIND_REGISTER_START_WITH_DEFINE (amr, "audio/x-amr-nb-sh",
     GST_RANK_PRIMARY, "amr", "#!AMR", 5, GST_TYPE_FIND_LIKELY);
 TYPE_FIND_REGISTER_START_WITH_DEFINE (amr_wb, "audio/x-amr-wb-sh",
     GST_RANK_PRIMARY, "amr", "#!AMR-WB", 7, GST_TYPE_FIND_MAXIMUM);
+#ifndef TIZEN_FEATURE_DISABLE_MIME_TYPES
 TYPE_FIND_REGISTER_START_WITH_DEFINE (sid, "audio/x-sid", GST_RANK_MARGINAL,
     "sid", "PSID", 4, GST_TYPE_FIND_MAXIMUM);
 TYPE_FIND_REGISTER_START_WITH_DEFINE (xcf, "image/x-xcf",
@@ -135,6 +140,7 @@ TYPE_FIND_REGISTER_START_WITH_DEFINE (zip, "application/zip",
     GST_RANK_SECONDARY, "zip", "PK\003\004", 4, GST_TYPE_FIND_LIKELY);
 TYPE_FIND_REGISTER_START_WITH_DEFINE (z, "application/x-compress",
     GST_RANK_SECONDARY, "Z", "\037\235", 2, GST_TYPE_FIND_LIKELY);
+#endif
 TYPE_FIND_REGISTER_START_WITH_DEFINE (elf, "application/x-executable",
     GST_RANK_MARGINAL, NULL, "\177ELF", 4, GST_TYPE_FIND_MAXIMUM);
 TYPE_FIND_REGISTER_START_WITH_DEFINE (spc, "audio/x-spc",
index 0f65ee2..4eb8a4e 100644 (file)
 #include <gst/video/gstvideometa.h>
 #include <gst/video/gstvideopool.h>
 
+#ifdef USE_TBM
+#include <gst/allocators/gsttizenbufferpool.h>
+#endif
+
 #include <string.h>
 
 GST_DEBUG_CATEGORY (videoconvert_debug);
@@ -86,13 +90,20 @@ enum
 };
 
 #define CSP_VIDEO_CAPS GST_VIDEO_CAPS_MAKE (GST_VIDEO_FORMATS_ALL) ";" \
-    GST_VIDEO_CAPS_MAKE_WITH_FEATURES ("ANY", GST_VIDEO_FORMATS_ALL)
+    GST_VIDEO_CAPS_MAKE_WITH_FEATURES ("ANY", GST_VIDEO_FORMATS_ALL) ";" \
+    GST_VIDEO_CAPS_MAKE("{ SUYV , SYVY , S420 , ITLV }") ";" \
+    GST_VIDEO_CAPS_MAKE_WITH_FEATURES ("ANY", "{ SUYV , SYVY , S420 , ITLV }")
+
+#define CSP_VIDEO_SRC_CAPS GST_VIDEO_CAPS_MAKE (GST_VIDEO_FORMATS_ALL) ";" \
+    GST_VIDEO_CAPS_MAKE_WITH_FEATURES ("ANY", GST_VIDEO_FORMATS_ALL) ";" \
+    GST_VIDEO_CAPS_MAKE("{ SUYV , SYVY , S420 , ITLV , SN12 }") ";" \
+    GST_VIDEO_CAPS_MAKE_WITH_FEATURES ("ANY", "{ SUYV , SYVY , S420 , ITLV , SN12 }")
 
 static GstStaticPadTemplate gst_video_convert_src_template =
 GST_STATIC_PAD_TEMPLATE ("src",
     GST_PAD_SRC,
     GST_PAD_ALWAYS,
-    GST_STATIC_CAPS (CSP_VIDEO_CAPS)
+    GST_STATIC_CAPS (CSP_VIDEO_SRC_CAPS)
     );
 
 static GstStaticPadTemplate gst_video_convert_sink_template =
@@ -113,6 +124,12 @@ static gboolean gst_video_convert_set_info (GstVideoFilter * filter,
 static GstFlowReturn gst_video_convert_transform_frame (GstVideoFilter * filter,
     GstVideoFrame * in_frame, GstVideoFrame * out_frame);
 
+#ifdef USE_TBM
+static gboolean gst_video_convert_decide_allocation (GstBaseTransform * bsrc,
+    GstQuery * query);
+static GstFlowReturn gst_video_convert_prepare_output_buffer (GstBaseTransform * trans,
+    GstBuffer *input, GstBuffer **outbuf);
+#endif
 static GstCapsFeatures *features_format_interlaced,
     *features_format_interlaced_sysmem;
 
@@ -630,6 +647,14 @@ gst_video_convert_finalize (GObject * obj)
 {
   GstVideoConvert *space = GST_VIDEO_CONVERT (obj);
 
+#ifdef USE_TBM
+  if (space->pool) {
+     gst_buffer_pool_set_active (space->pool, FALSE);
+     gst_object_unref (space->pool);
+     space->pool = NULL;
+  }
+#endif
+
   if (space->convert) {
     gst_video_converter_free (space->convert);
   }
@@ -676,6 +701,11 @@ gst_video_convert_class_init (GstVideoConvertClass * klass)
   gstvideofilter_class->transform_frame =
       GST_DEBUG_FUNCPTR (gst_video_convert_transform_frame);
 
+#ifdef USE_TBM
+  gstbasetransform_class->decide_allocation = gst_video_convert_decide_allocation;
+  gstbasetransform_class->prepare_output_buffer = gst_video_convert_prepare_output_buffer;
+#endif
+
   g_object_class_install_property (gobject_class, PROP_DITHER,
       g_param_spec_enum ("dither", "Dither", "Apply dithering while converting",
           gst_video_dither_method_get_type (), DEFAULT_PROP_DITHER,
@@ -724,6 +754,9 @@ gst_video_convert_class_init (GstVideoConvertClass * klass)
 static void
 gst_video_convert_init (GstVideoConvert * space)
 {
+#ifdef USE_TBM
+  space->pool = NULL;
+#endif
   space->dither = DEFAULT_PROP_DITHER;
   space->dither_quantization = DEFAULT_PROP_DITHER_QUANTIZATION;
   space->chroma_resampler = DEFAULT_PROP_CHROMA_RESAMPLER;
@@ -844,6 +877,75 @@ gst_video_convert_transform_frame (GstVideoFilter * filter,
   return GST_FLOW_OK;
 }
 
+#ifdef USE_TBM
+static gboolean
+gst_video_convert_decide_allocation (GstBaseTransform * trans,
+    GstQuery * query)
+{
+  GstVideoConvert *vc = NULL;
+  GstVideoFilter *filter = GST_VIDEO_FILTER_CAST (trans);
+  vc = GST_VIDEO_CONVERT_CAST(trans);
+
+  if (filter->out_info.finfo->format == GST_VIDEO_FORMAT_SN12 ) {
+    guint size;
+    GstStructure *config;
+    GstCaps *caps = NULL;
+    GstVideoInfo vinfo;
+    gst_query_parse_allocation (query, &caps, NULL);
+    gst_video_info_init (&vinfo);
+    gst_video_info_from_caps (&vinfo, caps);
+
+    size = vinfo.size;
+
+    if (caps) {
+      vc->pool = gst_tizen_buffer_pool_new ();
+      config = gst_buffer_pool_get_config (vc->pool);
+
+      gst_buffer_pool_config_set_params (config, caps, size, 4, 10);
+      gst_buffer_pool_config_add_option (config, GST_BUFFER_POOL_OPTION_VIDEO_META);
+      gst_buffer_pool_set_config (vc->pool, config);
+
+      if (!gst_buffer_pool_set_active (vc->pool, TRUE)) {
+        gst_object_unref (vc->pool);
+        vc->pool = NULL;
+        GST_INFO ("Failed to activate internal pool");
+      }
+    } else {
+      GST_ERROR("Not using our internal pool and copying buffers for downstream");
+      return FALSE;
+    }
+  }
+  GST_DEBUG("[%s]Creating Tizen Buffer Pool", __FUNCTION__);
+
+  return GST_BASE_TRANSFORM_CLASS (parent_class)->decide_allocation (trans, query);
+}
+
+static GstFlowReturn
+gst_video_convert_prepare_output_buffer (GstBaseTransform * trans,
+    GstBuffer *input, GstBuffer **outbuf)
+{
+  GstBuffer *buf = NULL;
+  GstVideoConvert *vc = NULL;
+  GstVideoFilter *filter = GST_VIDEO_FILTER_CAST (trans);
+
+  vc = GST_VIDEO_CONVERT_CAST (trans);
+
+  if (filter->out_info.finfo->format == GST_VIDEO_FORMAT_SN12 ) {
+    if (gst_buffer_pool_acquire_buffer (vc->pool, &buf, 0) != GST_FLOW_OK) {
+      GST_ERROR("[%s] memory prepare failed.",__FUNCTION__);
+      return GST_FLOW_ERROR;
+    }
+
+    if (input != buf)
+      GST_BASE_TRANSFORM_CLASS (parent_class)->copy_metadata (trans, input, buf);
+    *outbuf = buf;
+
+    return GST_FLOW_OK;
+  }
+  return GST_BASE_TRANSFORM_CLASS (parent_class)->prepare_output_buffer(trans, input, outbuf);
+}
+#endif
+
 static gboolean
 plugin_init (GstPlugin * plugin)
 {
index 0f093f4..a7f9343 100644 (file)
@@ -52,6 +52,9 @@ struct _GstVideoConvert {
   GstVideoPrimariesMode primaries_mode;
   gdouble alpha_value;
   gint n_threads;
+#ifdef USE_TBM
+  GstBufferPool *pool;
+#endif
 };
 
 GST_ELEMENT_REGISTER_DECLARE (videoconvert);
index 2798f8d..4943533 100644 (file)
@@ -6,7 +6,7 @@ gstvideoconvert = library('gstvideoconvert',
   vconvert_sources,
   c_args : gst_plugins_base_args,
   include_directories: [configinc, libsinc],
-  dependencies : [video_dep],
+  dependencies : [video_dep, allocators_dep],
   install : true,
   install_dir : plugins_install_dir,
 )
index a9ffded..c8150cd 100644 (file)
@@ -796,7 +796,10 @@ volume_transform_ip (GstBaseTransform * base, GstBuffer * outbuf)
 
   if (self->current_volume == 0.0 || self->current_mute) {
     orc_memset (map.data, 0, map.size);
+#ifndef TIZEN_FEATURE_VOLUME_MODIFICATION
+    /* if set this flag, it will be drop at baseaudiosink and it cause pa close. */
     GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_GAP);
+#endif
   } else if (self->current_volume != 1.0) {
     self->process (self, map.data, map.size);
   }
index 9b00253..4d5af8e 100644 (file)
@@ -367,6 +367,35 @@ else
   core_conf.set('DISABLE_ORC', 1)
 endif
 
+# TIZEN_BUILD_OPTION
+core_conf.set('TIZEN_FEATURE_WAYLAND_ENHANCEMENT', true)
+core_conf.set('TIZEN_FEATURE_TYPEFIND_ENHANCEMENT', true)
+core_conf.set('TIZEN_FEATURE_AUDIODECODER_MODIFICATION', true)
+core_conf.set('TIZEN_FEATURE_DISABLE_MIME_TYPES', true)
+core_conf.set('TIZEN_FEATURE_VIDEO_MODIFICATION', true)
+core_conf.set('TIZEN_FEATURE_SUBPARSE_MODIFICATION', true)
+core_conf.set('TIZEN_FEATURE_SUBPARSE_DROP_OUT_OF_SEGMENT', true)
+core_conf.set('TIZEN_FEATURE_HLS_WEBVTT', true)
+core_conf.set('TIZEN_FEATURE_VOLUME_MODIFICATION', true)
+core_conf.set('TIZEN_FEATURE_FORCE_SW_DECODER', true)
+core_conf.set('TIZEN_FEATURE_U3_AVOID_DEADLOCK', true)
+core_conf.set('TIZEN_FEATURE_PLAYBIN3_MODIFICATION', true)
+core_conf.set('TIZEN_FEATURE_DISABLE_EOS_DROP', true)
+
+tbm_dep = dependency('libtbm', required : get_option('tbm'))
+if tbm_dep.found()
+  core_conf.set('USE_TBM', true)
+endif
+
+if get_option('tv-profile')
+  core_conf.set('TIZEN_TV_PROFILE', true)
+  core_conf.set('TIZEN_FEATURE_TRUSTZONE', true)
+else
+  core_conf.set('TIZEN_FEATURE_RESOURCE_MANAGER', true)
+endif
+
+# TIZEN_BUILD_OPTION end
+
 # Used to build SSE* things in audio-resampler
 sse_args = '-msse'
 sse2_args = '-msse2'
index 7010b91..f7db3f8 100644 (file)
@@ -88,3 +88,9 @@ option('package-origin', type : 'string', value : 'Unknown package origin', yiel
        description : 'package origin URL to use in plugins')
 option('doc', type : 'feature', value : 'auto', yield: true,
        description: 'Enable documentation.')
+
+# Tizen Options
+option('tbm', type : 'boolean', value : true,
+       description : 'tizen buffer manager')
+option('tv-profile', type : 'boolean', value : false,
+       description : 'tv-profile')
index 6e1ba8a..b67ba18 100644 (file)
 # Bulgarian translation of gst-plugins-base.
 # Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
-# Copyright (C) 2011, 2016 Free Software Foundation, Inc.
+# Copyright (C) 2011, 2016, 2019 Free Software Foundation, Inc.
 # This file is distributed under the same license as the gst-plugins-base package.
 # Alexander Shopov <ash@kambanaria.org>, 2005, 2006, 2007, 2008, 2009, 2010.
-# Alexander Shopov <ash@kambanaria.org>, 2011, 2016.
+# Alexander Shopov <ash@kambanaria.org>, 2011, 2016, 2019.
 #
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base 1.7.2\n"
+"Project-Id-Version: gst-plugins-base 1.16.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:43+0000\n"
-"PO-Revision-Date: 2016-02-21 21:03+0200\n"
+"POT-Creation-Date: 2019-04-19 00:20+0100\n"
+"PO-Revision-Date: 2019-09-04 10:08+0200\n"
 "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
 "Language-Team: Bulgarian <dict@ludost.net>\n"
 "Language: bg\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
 
+#: ext/alsa/gstalsasink.c:579
 msgid "Could not open device for playback in mono mode."
 msgstr "Устройството не може да се отвори за изпълнение в моно режим."
 
+#: ext/alsa/gstalsasink.c:581
 msgid "Could not open device for playback in stereo mode."
 msgstr "Устройството не може да се отвори за изпълнение в стерео режим."
 
+#: ext/alsa/gstalsasink.c:585
 #, c-format
 msgid "Could not open device for playback in %d-channel mode."
 msgstr "Устройството не може да се отвори за изпълнение в %d-канален режим."
 
-msgid ""
-"Could not open audio device for playback. Device is being used by another "
-"application."
-msgstr ""
-"Звуковото устройство не може да се отвори за изпълнение, защото се ползва от "
-"друго приложение."
+#: ext/alsa/gstalsasink.c:858
+msgid "Could not open audio device for playback. Device is being used by another application."
+msgstr "Звуковото устройство не може да се отвори за изпълнение, защото се ползва от друго приложение."
 
+#: ext/alsa/gstalsasink.c:863
 msgid "Could not open audio device for playback."
 msgstr "Звуковото устройство не може да се отвори за изпълнение."
 
+#: ext/alsa/gstalsasink.c:1076
 msgid "Error outputting to audio device. The device has been disconnected."
 msgstr "Грешка при извеждане към аудио устройството. То не е свързано."
 
+#: ext/alsa/gstalsasrc.c:444
 msgid "Could not open device for recording in mono mode."
 msgstr "Устройството не може да се отвори за запис в моно режим."
 
+#: ext/alsa/gstalsasrc.c:446
 msgid "Could not open device for recording in stereo mode."
 msgstr "Устройството не може да се отвори за изпълнение в стерео режим."
 
+#: ext/alsa/gstalsasrc.c:450
 #, c-format
 msgid "Could not open device for recording in %d-channel mode"
 msgstr "Устройството не може да се отвори за изпълнение в %d-канален режим."
 
-msgid ""
-"Could not open audio device for recording. Device is being used by another "
-"application."
-msgstr ""
-"Звуковото устройство не може да се отвори за запис, защото се ползва от "
-"друго приложение."
+#: ext/alsa/gstalsasrc.c:741
+msgid "Could not open audio device for recording. Device is being used by another application."
+msgstr "Звуковото устройство не може да се отвори за запис, защото се ползва от друго приложение."
 
+#: ext/alsa/gstalsasrc.c:746
 msgid "Could not open audio device for recording."
 msgstr "Звуковото устройство не може да се отвори за запис."
 
+#: ext/alsa/gstalsasrc.c:992
 msgid "Error recording from audio device. The device has been disconnected."
 msgstr "Грешка при запис от аудио устройството. То не е свързано."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:277 ext/cdparanoia/gstcdparanoiasrc.c:283
 msgid "Could not open CD device for reading."
 msgstr "Устройството за CD-та не може да се отвори за четене."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:409
 msgid "Could not seek CD."
 msgstr "По CD-то не може да се търси."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:417
 msgid "Could not read CD."
 msgstr "CD-то не може да бъде прочетено."
 
+#: ext/gl/gstgltestsrc.c:491
 msgid "failed to draw pattern"
-msgstr ""
+msgstr "шарката не може да се начертае"
 
+#: ext/gl/gstgltestsrc.c:492
 msgid "A GL error occurred"
-msgstr ""
+msgstr "Грешка от графичната система GL"
 
+#: ext/gl/gstgltestsrc.c:498
 msgid "format wasn't negotiated before get function"
-msgstr ""
-
+msgstr "форматът не е бил уточнен преди извикването на функцията за получаване"
+
+#: gst/encoding/gstencodebin.c:1636 gst/playback/gstplaybin2.c:3399
+#: gst/playback/gstplaysink.c:1522 gst/playback/gstplaysink.c:1535
+#: gst/playback/gstplaysink.c:1872 gst/playback/gstplaysink.c:1904
+#: gst/playback/gstplaysink.c:2488 gst/playback/gstplaysink.c:2537
+#: gst/playback/gstplaysink.c:2552 gst/playback/gstplaysink.c:2577
+#: gst/playback/gstplaysink.c:2609 gst/playback/gstplaysink.c:2757
+#: gst/playback/gstplaysink.c:2788 gst/playback/gstplaysink.c:3166
+#: gst/playback/gstplaysink.c:3175 gst/playback/gstplaysink.c:3184
+#: gst/playback/gstplaysink.c:3193 gst/playback/gstplaysink.c:3606
+#: gst/playback/gstplaysink.c:4526 gst/playback/gstplaysinkconvertbin.c:97
+#: gst/playback/gstplaysinkconvertbin.c:117
+#: gst/playback/gsturidecodebin.c:1472 gst/playback/gsturisourcebin.c:1597
 #, c-format
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Елементът „%s“ липсва — проверете инсталацията на GStreamer."
 
+#: gst/playback/gstdecodebin2.c:1883 gst/playback/gstparsebin.c:1553
 msgid "Could not determine type of stream"
 msgstr "Видът на потока не може да бъде определен"
 
+#: gst/playback/gstdecodebin2.c:2861 gst/playback/gstparsebin.c:2385
 msgid "This appears to be a text file"
 msgstr "Това изглежда е текстов файл"
 
+#: gst/playback/gstplaybin2.c:5452
 msgid "Could not create \"uridecodebin\" element."
 msgstr "Не може да се създаде елемент „uridecodebin“."
 
-#, fuzzy
+#: gst/playback/gstplaybin3.c:4558
 msgid "Could not create \"uridecodebin3\" element."
-msgstr "Не може да се създаде елемент „uridecodebin“."
+msgstr "Не може да се създаде елемент „uridecodebin3“."
 
+#: gst/playback/gstplaysink.c:2003
 #, c-format
 msgid "Both autovideosink and %s elements are missing."
 msgstr "Едновременно липсват елементите-приемници „autovideosink“ и „%s“."
 
+#: gst/playback/gstplaysink.c:2007
 msgid "The autovideosink element is missing."
 msgstr "Липсва елементът-приемник „autovideosink“."
 
+#: gst/playback/gstplaysink.c:2012
 #, c-format
 msgid "Configured videosink %s is not working."
 msgstr "Настроеният елемент-приемник за видео %s не работи."
 
+#: gst/playback/gstplaysink.c:2016
 #, c-format
 msgid "Both autovideosink and %s elements are not working."
 msgstr "Едновременно не работят елементите-приемници „autovideosink“ и „%s“."
 
+#: gst/playback/gstplaysink.c:2020
 msgid "The autovideosink element is not working."
 msgstr "Елементът-приемник за автоматично видео „autovideosink“ не работи."
 
+#: gst/playback/gstplaysink.c:2525
 msgid "Custom text sink element is not usable."
 msgstr "Потребителският елемент-приемник за текст е неизползваем."
 
+#: gst/playback/gstplaysink.c:2903
 msgid "No volume control found"
 msgstr "Липсва управление на силата на звука"
 
+#: gst/playback/gstplaysink.c:2933
 #, c-format
 msgid "Both autoaudiosink and %s elements are missing."
 msgstr "Едновременно липсват елементите-приемници „autoaudiosink“ и „%s“."
 
+#: gst/playback/gstplaysink.c:2937
 msgid "The autoaudiosink element is missing."
 msgstr "Липсва елементът „autoaudiosink“."
 
+#: gst/playback/gstplaysink.c:2942
 #, c-format
 msgid "Configured audiosink %s is not working."
 msgstr "Настроеният елемент-приемник за аудио %s не работи."
 
+#: gst/playback/gstplaysink.c:2946
 #, c-format
 msgid "Both autoaudiosink and %s elements are not working."
 msgstr "Едновременно не работят елементите „autoaudiosink“ и „%s“."
 
+#: gst/playback/gstplaysink.c:2950
 msgid "The autoaudiosink element is not working."
 msgstr "Елементът „autoaudiosink“ не работи."
 
+#: gst/playback/gstplaysink.c:3269 gst/playback/gstplaysink.c:3274
 msgid "Can't play a text file without video or visualizations."
 msgstr "Текстов файл не може да се изпълни без видео или визуализация."
 
+#: gst/playback/gsturidecodebin.c:921
 #, c-format
 msgid "No decoder available for type '%s'."
 msgstr "Липсва декодер за вида „%s“."
 
+#: gst/playback/gsturidecodebin.c:1378 gst/playback/gsturisourcebin.c:1491
 msgid "No URI specified to play from."
 msgstr "Не е указан адрес за пускане."
 
+#: gst/playback/gsturidecodebin.c:1384 gst/playback/gsturisourcebin.c:1497
 #, c-format
 msgid "Invalid URI \"%s\"."
 msgstr "Грешен адрес „%s“."
 
+#: gst/playback/gsturidecodebin.c:1391 gst/playback/gsturisourcebin.c:1504
 msgid "This stream type cannot be played yet."
 msgstr "Потоци от този тип все още не могат да бъдат изпълнявани."
 
+#: gst/playback/gsturidecodebin.c:1409 gst/playback/gsturisourcebin.c:1522
 #, c-format
 msgid "No URI handler implemented for \"%s\"."
 msgstr "Обработката на адреси „%s“ не е реализирана."
 
+#: gst/playback/gsturidecodebin.c:2289 gst/playback/gsturisourcebin.c:2228
 msgid "Source element is invalid."
 msgstr "Елементът-източник е грешен."
 
+#: gst/tcp/gsttcpclientsink.c:216
 #, c-format
 msgid "Error while sending data to \"%s:%d\"."
 msgstr "Грешка при запис във файла „%s:%d“."
 
+#: gst-libs/gst/audio/gstaudiobasesrc.c:842
 msgid "Can't record audio fast enough"
 msgstr "Звукът не може да бъде записан достатъчно бързо"
 
+#: gst-libs/gst/audio/gstaudiocdsrc.c:1625
 msgid "This CD has no audio tracks"
 msgstr "В това CD липсва аудио"
 
+#: gst-libs/gst/pbutils/descriptions.c:89
 msgid "ID3 tag"
 msgstr "Етикет ID3"
 
+#: gst-libs/gst/pbutils/descriptions.c:90
+#: gst-libs/gst/pbutils/descriptions.c:91
 msgid "APE tag"
 msgstr "Етикет APE"
 
+#: gst-libs/gst/pbutils/descriptions.c:92
 msgid "ICY internet radio"
 msgstr "Радио в Интернет по ICY"
 
+#: gst-libs/gst/pbutils/descriptions.c:127
 msgid "Apple Lossless Audio (ALAC)"
 msgstr "Аудио на Apple без загуба на качество (ALAC)"
 
+#: gst-libs/gst/pbutils/descriptions.c:143
 msgid "Free Lossless Audio Codec (FLAC)"
 msgstr "Свободен кодер за аудио без загуба на качество (FLAC)"
 
+#: gst-libs/gst/pbutils/descriptions.c:173
+#: gst-libs/gst/pbutils/descriptions.c:174
 msgid "Lossless True Audio (TTA)"
 msgstr "Истинско аудио без загуба на качество (TTA)"
 
+#: gst-libs/gst/pbutils/descriptions.c:182
 msgid "Windows Media Speech"
 msgstr "Говор, формат Windows Media"
 
+#: gst-libs/gst/pbutils/descriptions.c:199
 msgid "CYUV Lossless"
 msgstr "CYUV без загуба на качество"
 
+#: gst-libs/gst/pbutils/descriptions.c:203
 msgid "FFMpeg v1"
 msgstr "FFMpeg, версия 1"
 
+#: gst-libs/gst/pbutils/descriptions.c:217
 msgid "Lossless MSZH"
 msgstr "MSZH без загуба на качество"
 
+#: gst-libs/gst/pbutils/descriptions.c:228
 msgid "Run-length encoding"
 msgstr "Последователно кодиране RLE"
 
+#: gst-libs/gst/pbutils/descriptions.c:274
 msgid "Timed Text"
 msgstr "Текст по време"
 
+#: gst-libs/gst/pbutils/descriptions.c:278
 msgid "Subtitle"
 msgstr "Субтитри"
 
+#: gst-libs/gst/pbutils/descriptions.c:279
 msgid "MPL2 subtitle format"
 msgstr "Субтитри, формат MPL2"
 
+#: gst-libs/gst/pbutils/descriptions.c:280
 msgid "DKS subtitle format"
 msgstr "Субтитри, формат DKS"
 
+#: gst-libs/gst/pbutils/descriptions.c:281
 msgid "QTtext subtitle format"
 msgstr "Субтитри, формат QText"
 
+#: gst-libs/gst/pbutils/descriptions.c:282
 msgid "Sami subtitle format"
 msgstr "Субтитри, формат Sami"
 
+#: gst-libs/gst/pbutils/descriptions.c:283
 msgid "TMPlayer subtitle format"
 msgstr "Субтитри, формат TMPlayer"
 
+#: gst-libs/gst/pbutils/descriptions.c:287
 msgid "CEA 608 Closed Caption"
-msgstr ""
+msgstr "Субтитри, формат CEA 608"
 
+#: gst-libs/gst/pbutils/descriptions.c:288
 msgid "CEA 708 Closed Caption"
-msgstr ""
+msgstr "Субтитри, формат CEA 708"
 
+#: gst-libs/gst/pbutils/descriptions.c:289
 msgid "Kate subtitle format"
 msgstr "Субтитри, формат Kate"
 
-#, fuzzy
+#: gst-libs/gst/pbutils/descriptions.c:290
 msgid "WebVTT subtitle format"
-msgstr "Субтитри, формат Kate"
+msgstr "Субтитри, формат WebVTT"
 
+#: gst-libs/gst/pbutils/descriptions.c:455
+#: gst-libs/gst/pbutils/descriptions.c:458
+#: gst-libs/gst/pbutils/descriptions.c:508
 msgid "Uncompressed video"
 msgstr "Некомпресирано видео"
 
+#: gst-libs/gst/pbutils/descriptions.c:463
 msgid "Uncompressed gray"
 msgstr "Некомпресирано видео с нива на сивото"
 
+#: gst-libs/gst/pbutils/descriptions.c:486
 #, c-format
 msgid "Uncompressed packed YUV %s"
 msgstr "Некомпресирано видео пакетирано YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:488
 #, c-format
 msgid "Uncompressed semi-planar YUV %s"
 msgstr "Некомпресирано видео по равнини (презредово) YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:490
 #, c-format
 msgid "Uncompressed planar YUV %s"
 msgstr "Некомпресирано видео по равнини YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:501
 #, c-format
 msgid "Uncompressed palettized %d-bit %s"
 msgstr "Некомпресирано видео, индексирано, %d-битово %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:504
 #, c-format
 msgid "Uncompressed %d-bit %s"
 msgstr "Некомпресирано видео, %d-битово %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:586
 #, c-format
 msgid "DivX MPEG-4 Version %d"
 msgstr "DivX MPEG-4, версия %d"
 
+#: gst-libs/gst/pbutils/descriptions.c:834
 msgid "Uncompressed audio"
 msgstr "Некомпресирано аудио"
 
+#: gst-libs/gst/pbutils/descriptions.c:840
 #, c-format
 msgid "Raw %d-bit %s audio"
-msgstr "Аудио, необработен %d-битов %s"
+msgstr "Аудио, необработено %d-битово %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:942
 msgid "Audio CD source"
 msgstr "Елемент-източник — CD"
 
+#: gst-libs/gst/pbutils/descriptions.c:945
 msgid "DVD source"
 msgstr "Елемент-източник — DVD"
 
+#: gst-libs/gst/pbutils/descriptions.c:948
 msgid "Real Time Streaming Protocol (RTSP) source"
 msgstr "Елемент-източник — RTSP (поточен протокол в реално време)"
 
+#: gst-libs/gst/pbutils/descriptions.c:952
 msgid "Microsoft Media Server (MMS) protocol source"
 msgstr "Елемент-източник — MMS (сървър за медия на Microsoft)"
 
+#: gst-libs/gst/pbutils/descriptions.c:960
 #, c-format
 msgid "%s protocol source"
 msgstr "Елемент-източник, протокол %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1034
 #, c-format
 msgid "%s video RTP depayloader"
 msgstr "%s елемент, разтоварващ видеото от RTP"
 
+#: gst-libs/gst/pbutils/descriptions.c:1036
 #, c-format
 msgid "%s audio RTP depayloader"
 msgstr "%s елемент, разтоварващ аудиото от RTP"
 
+#: gst-libs/gst/pbutils/descriptions.c:1038
 #, c-format
 msgid "%s RTP depayloader"
 msgstr "%s елемент, разтоварващ данни от RTP"
 
+#: gst-libs/gst/pbutils/descriptions.c:1045
 #, c-format
 msgid "%s demuxer"
 msgstr "Разделител (демултиплексор) %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1047
 #, c-format
 msgid "%s decoder"
 msgstr "Декодер %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1086
 #, c-format
 msgid "%s video RTP payloader"
 msgstr "%s елемент, товарещ видеото по RTP"
 
+#: gst-libs/gst/pbutils/descriptions.c:1088
 #, c-format
 msgid "%s audio RTP payloader"
 msgstr "%s елемент, товарещ аудиото по RTP"
 
+#: gst-libs/gst/pbutils/descriptions.c:1090
 #, c-format
 msgid "%s RTP payloader"
 msgstr "%s елемент, товарещ данни по RTP"
 
+#: gst-libs/gst/pbutils/descriptions.c:1097
 #, c-format
 msgid "%s muxer"
 msgstr "Уплътнител (мултиплексор) %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1099
 #, c-format
 msgid "%s encoder"
 msgstr "Кодер %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1133
 #, c-format
 msgid "GStreamer element %s"
 msgstr "Елемент на GStreamer „%s“"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:558
 msgid "Unknown source element"
 msgstr "Непознат елемент-източник"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:561
 msgid "Unknown sink element"
 msgstr "Непознат елемент-приемник"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:564
 msgid "Unknown element"
 msgstr "Непознат елемент"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:567
 msgid "Unknown decoder element"
 msgstr "Непознат елемент-декодер"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:570
 msgid "Unknown encoder element"
 msgstr "Непознат елемент-кодер"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:575
 msgid "Plugin or element of unknown type"
 msgstr "Приставка или елемент от непознат вид"
 
+#: gst-libs/gst/tag/gsttagdemux.c:1243
 msgid "Failed to read tag: not enough data"
 msgstr "Неуспешно прочитано на етикет: липсват достатъчно данни"
 
+#: gst-libs/gst/tag/tags.c:77
 msgid "track ID"
 msgstr "идентификатор на песен"
 
+#: gst-libs/gst/tag/tags.c:77
 msgid "MusicBrainz track ID"
 msgstr "идентификатор на песен според MusicBrainz"
 
+#: gst-libs/gst/tag/tags.c:79
 msgid "artist ID"
 msgstr "идентификатор на изпълнител"
 
+#: gst-libs/gst/tag/tags.c:79
 msgid "MusicBrainz artist ID"
 msgstr "идентификатор на изпълнител според MusicBrainz"
 
+#: gst-libs/gst/tag/tags.c:81
 msgid "album ID"
 msgstr "идентификатор на албум"
 
+#: gst-libs/gst/tag/tags.c:81
 msgid "MusicBrainz album ID"
 msgstr "идентификатор на албум според MusicBrainz"
 
+#: gst-libs/gst/tag/tags.c:84
 msgid "album artist ID"
 msgstr "идентификатор на изпълнител в албума"
 
+#: gst-libs/gst/tag/tags.c:84
 msgid "MusicBrainz album artist ID"
 msgstr "идентификатор на изпълнител в албума според MusicBrainz"
 
+#: gst-libs/gst/tag/tags.c:86
 msgid "track TRM ID"
 msgstr "индустриален идентификатор на песен (TRM)"
 
+#: gst-libs/gst/tag/tags.c:86
 msgid "MusicBrainz TRM ID"
 msgstr "индустриален идентификатор на песен според MusicBrainz (TRM)"
 
+#: gst-libs/gst/tag/tags.c:108
 msgid "capturing shutter speed"
 msgstr "скорост на затвора"
 
+#: gst-libs/gst/tag/tags.c:109
 msgid "Shutter speed used when capturing an image, in seconds"
 msgstr "Скорост на затвора при заснемане в секунди"
 
+#: gst-libs/gst/tag/tags.c:112
 msgid "capturing focal ratio"
 msgstr "относителна бленда"
 
+#: gst-libs/gst/tag/tags.c:113
 msgid "Focal ratio (f-number) used when capturing the image"
 msgstr "Относителна бленда при заснемане"
 
+#: gst-libs/gst/tag/tags.c:116
 msgid "capturing focal length"
 msgstr "фокусно разстояние"
 
+#: gst-libs/gst/tag/tags.c:117
 msgid "Focal length of the lens used capturing the image, in mm"
 msgstr "Фокусно разстояние на обектива при заснемане в милиметри"
 
-#, fuzzy
+#: gst-libs/gst/tag/tags.c:121
 msgid "capturing 35 mm equivalent focal length"
-msgstr "фокусно разстояние"
+msgstr "приравнено към 35mm фокусно разстояние "
 
-#, fuzzy
-msgid ""
-"35 mm equivalent focal length of the lens used capturing the image, in mm"
-msgstr "Фокусно разстояние на обектива при заснемане в милиметри"
+#: gst-libs/gst/tag/tags.c:122
+msgid "35 mm equivalent focal length of the lens used capturing the image, in mm"
+msgstr "Приравнено към 35mm фокусно разстояние на обектива при заснемане в милиметри"
 
+#: gst-libs/gst/tag/tags.c:126
 msgid "capturing digital zoom ratio"
 msgstr "цифрово увеличение"
 
+#: gst-libs/gst/tag/tags.c:127
 msgid "Digital zoom ratio used when capturing an image"
 msgstr "Цифрово увеличение при заснемане"
 
+#: gst-libs/gst/tag/tags.c:130
 msgid "capturing iso speed"
 msgstr "светлочувствителност по ISO"
 
+#: gst-libs/gst/tag/tags.c:131
 msgid "The ISO speed used when capturing an image"
 msgstr "Светлочувствителност по ISO при заснемане"
 
+#: gst-libs/gst/tag/tags.c:134
 msgid "capturing exposure program"
 msgstr "програма на експозиция"
 
+#: gst-libs/gst/tag/tags.c:135
 msgid "The exposure program used when capturing an image"
 msgstr "Програма на експозиция при заснемане"
 
+#: gst-libs/gst/tag/tags.c:138
 msgid "capturing exposure mode"
 msgstr "режим на експозиция"
 
+#: gst-libs/gst/tag/tags.c:139
 msgid "The exposure mode used when capturing an image"
 msgstr "Режим на експозиция при заснемане"
 
+#: gst-libs/gst/tag/tags.c:142
 msgid "capturing exposure compensation"
 msgstr "компенсация на експозицията"
 
+#: gst-libs/gst/tag/tags.c:143
 msgid "The exposure compensation used when capturing an image"
 msgstr "Компенсацията на експозицията при заснемане"
 
+#: gst-libs/gst/tag/tags.c:146
 msgid "capturing scene capture type"
 msgstr "вид сцена"
 
+#: gst-libs/gst/tag/tags.c:147
 msgid "The scene capture mode used when capturing an image"
 msgstr "Вид сцена при заснемане"
 
+#: gst-libs/gst/tag/tags.c:150
 msgid "capturing gain adjustment"
 msgstr "корекция с усилване"
 
+#: gst-libs/gst/tag/tags.c:151
 msgid "The overall gain adjustment applied on an image"
 msgstr "Общата корекция с усилване при заснемане"
 
+#: gst-libs/gst/tag/tags.c:154
 msgid "capturing white balance"
 msgstr "баланс на бялото"
 
+#: gst-libs/gst/tag/tags.c:155
 msgid "The white balance mode set when capturing an image"
 msgstr "Режим на баланс на бялото при заснемане"
 
+#: gst-libs/gst/tag/tags.c:158
 msgid "capturing contrast"
 msgstr "контраст"
 
+#: gst-libs/gst/tag/tags.c:159
 msgid "The direction of contrast processing applied when capturing an image"
 msgstr "Посоката на обработката за контраст при заснемане"
 
+#: gst-libs/gst/tag/tags.c:163
 msgid "capturing saturation"
 msgstr "наситеност"
 
+#: gst-libs/gst/tag/tags.c:164
 msgid "The direction of saturation processing applied when capturing an image"
 msgstr "Посоката на обработката за наситеност при заснемане"
 
+#: gst-libs/gst/tag/tags.c:168
 msgid "capturing sharpness"
 msgstr "острота"
 
+#: gst-libs/gst/tag/tags.c:169
 msgid "The direction of sharpness processing applied when capturing an image"
 msgstr "Посоката на обработката за острота при заснемане"
 
+#: gst-libs/gst/tag/tags.c:173
 msgid "capturing flash fired"
 msgstr "светкавица"
 
+#: gst-libs/gst/tag/tags.c:174
 msgid "If the flash fired while capturing an image"
 msgstr "Дали е ползвана светкавица при заснемане"
 
+#: gst-libs/gst/tag/tags.c:177
 msgid "capturing flash mode"
 msgstr "режим на светкавица"
 
+#: gst-libs/gst/tag/tags.c:178
 msgid "The selected flash mode while capturing an image"
 msgstr "Режимът на светкавица при заснемане"
 
+#: gst-libs/gst/tag/tags.c:181
 msgid "capturing metering mode"
 msgstr "режим на заснемане"
 
-msgid ""
-"The metering mode used while determining exposure for capturing an image"
+#: gst-libs/gst/tag/tags.c:182
+msgid "The metering mode used while determining exposure for capturing an image"
 msgstr "Режим на заснемане при определянето на експозиция"
 
+#: gst-libs/gst/tag/tags.c:186
 msgid "capturing source"
 msgstr "източник"
 
+#: gst-libs/gst/tag/tags.c:187
 msgid "The source or type of device used for the capture"
 msgstr "Видът на устройството-източник при заснемане"
 
+#: gst-libs/gst/tag/tags.c:190
 msgid "image horizontal ppi"
 msgstr "точки на инч по хоризонтал"
 
+#: gst-libs/gst/tag/tags.c:191
 msgid "Media (image/video) intended horizontal pixel density in ppi"
 msgstr "Целевата разделителна способност на медията по хоризонтал"
 
+#: gst-libs/gst/tag/tags.c:194
 msgid "image vertical ppi"
 msgstr "точки на инч по вертикал"
 
+#: gst-libs/gst/tag/tags.c:195
 msgid "Media (image/video) intended vertical pixel density in ppi"
 msgstr "Целевата разделителна способност на медията по вертикал"
 
+#: gst-libs/gst/tag/tags.c:198
 msgid "ID3v2 frame"
 msgstr "Кадър за ID3v2"
 
+#: gst-libs/gst/tag/tags.c:198
 msgid "unparsed id3v2 tag frame"
 msgstr "неанализиран кадър за етикети id3v2"
 
+#: gst-libs/gst/tag/tags.c:202
 msgid "musical-key"
 msgstr "лад"
 
+#: gst-libs/gst/tag/tags.c:202
 msgid "Initial key in which the sound starts"
 msgstr "Тоналността, в която почва музиката"
 
+#: tools/gst-device-monitor.c:260 tools/gst-play.c:1444
 msgid "Print version information and exit"
 msgstr "Извеждане на информация за версията и спиране на програмата"
 
-msgid ""
-"Don't exit after showing the initial device list, but wait for devices to "
-"added/removed."
-msgstr ""
-"След извеждане на първоначалния списък с устройства, да се чака за добавяне/"
-"махане на устройства."
+#: tools/gst-device-monitor.c:262
+msgid "Don't exit after showing the initial device list, but wait for devices to added/removed."
+msgstr "След извеждане на първоначалния списък с устройства, да се чака за добавяне/махане на устройства."
 
+#: tools/gst-play.c:310
 #, c-format
 msgid "Volume: %.0f%%"
 msgstr "Сила на звука: %.0f%%"
 
+#: tools/gst-play.c:349
 msgid "Buffering..."
 msgstr "Буфериране…"
 
+#: tools/gst-play.c:370
 msgid "Clock lost, selecting a new one\n"
 msgstr "Часовникът се загуби, избира се нов\n"
 
+#: tools/gst-play.c:400 tools/gst-play.c:446 tools/gst-play.c:883
+#: tools/gst-play.c:1347
 msgid "Reached end of play list."
 msgstr "Стигнат е края на списъка за изпълнение."
 
+#: tools/gst-play.c:613
 msgid "Paused"
 msgstr "Пауза"
 
+#: tools/gst-play.c:671
 #, c-format
 msgid "Now playing %s\n"
 msgstr "В момента се изпълнява „%s“\n"
 
+#: tools/gst-play.c:734
 #, c-format
 msgid "About to finish, preparing next title: %s"
 msgstr "Изпълнението е към края, приготвя се следващото заглавие „%s“"
 
+#: tools/gst-play.c:979
 #, c-format
 msgid "Playback rate: %.2f"
 msgstr "Скорост на изпълнение: %.2f"
 
+#: tools/gst-play.c:983
 #, c-format
 msgid "Could not change playback rate to %.2f"
 msgstr "Скоростта на изпълнение не може да се зададе да е %.2f"
 
+#: tools/gst-play.c:1287
 msgid "space"
 msgstr "интервал"
 
+#: tools/gst-play.c:1287
 msgid "pause/unpause"
 msgstr "пауза/изпълнение"
 
+#: tools/gst-play.c:1288
 msgid "q or ESC"
 msgstr "„q“ или „ESC“"
 
+#: tools/gst-play.c:1288
 msgid "quit"
 msgstr "спиране"
 
+#: tools/gst-play.c:1289
 msgid "> or n"
-msgstr ""
+msgstr "„>“ или „n“"
 
+#: tools/gst-play.c:1289
 msgid "play next"
 msgstr "следващо"
 
+#: tools/gst-play.c:1290
 msgid "< or b"
-msgstr ""
+msgstr "„<“ или „b“"
 
+#: tools/gst-play.c:1290
 msgid "play previous"
 msgstr "предишно"
 
+#: tools/gst-play.c:1291
 msgid "seek forward"
 msgstr "търсене напред"
 
+#: tools/gst-play.c:1292
 msgid "seek backward"
 msgstr "търсене назад"
 
+#: tools/gst-play.c:1293
 msgid "volume up"
 msgstr "увеличаване на звука"
 
+#: tools/gst-play.c:1294
 msgid "volume down"
 msgstr "намаляване на звука"
 
+#: tools/gst-play.c:1295
 msgid "increase playback rate"
 msgstr "забързване на изпълнението"
 
+#: tools/gst-play.c:1296
 msgid "decrease playback rate"
 msgstr "забавяне на изпълнението"
 
+#: tools/gst-play.c:1297
 msgid "change playback direction"
 msgstr "смяна на посоката на изпълнение"
 
+#: tools/gst-play.c:1298
 msgid "enable/disable trick modes"
 msgstr "включване/изключване на ефекти"
 
+#: tools/gst-play.c:1299
 msgid "change audio track"
 msgstr "смяна на песента"
 
+#: tools/gst-play.c:1300
 msgid "change video track"
 msgstr "смяна на видеото"
 
+#: tools/gst-play.c:1301
 msgid "change subtitle track"
 msgstr "смяна на субтитрите"
 
+#: tools/gst-play.c:1302
 msgid "seek to beginning"
 msgstr "търсене към началото"
 
+#: tools/gst-play.c:1303
 msgid "show keyboard shortcuts"
 msgstr "извеждане на клавишните комбинации"
 
+#: tools/gst-play.c:1306
 msgid "Interactive mode - keyboard controls:"
 msgstr "Интерактивен режим, управление с клавиатурата:"
 
+#: tools/gst-play.c:1439
 msgid "Output status information and property notifications"
 msgstr "Извеждане на информация за състоянието и свойствата"
 
+#: tools/gst-play.c:1441
 msgid "Control playback behaviour setting playbin 'flags' property"
-msgstr ""
-"Управление на поведението при изпълнение чрез задаване на свойството "
-"„flags“ (флагове)"
+msgstr "Управление на поведението при изпълнение чрез задаване на свойството „flags“ (флагове)"
 
+#: tools/gst-play.c:1446
 msgid "Video sink to use (default is autovideosink)"
 msgstr "Елемент-приемник за видео (стандартно е „autovideosink“)"
 
+#: tools/gst-play.c:1448
 msgid "Audio sink to use (default is autoaudiosink)"
 msgstr "Елемент-приемник за аудио (стандартно е „autoaudiosink“)"
 
+#: tools/gst-play.c:1450
 msgid "Enable gapless playback"
 msgstr "Изпълнение без прекъсвания"
 
+#: tools/gst-play.c:1452
 msgid "Shuffle playlist"
 msgstr "Разбъркано изпълнение"
 
+#: tools/gst-play.c:1455
 msgid "Disable interactive control via the keyboard"
 msgstr "Без управление от клавиатурата"
 
+#: tools/gst-play.c:1457
 msgid "Volume"
 msgstr "Сила на звука"
 
+#: tools/gst-play.c:1459
 msgid "Playlist file containing input media files"
 msgstr "Файл със списък за изпълнение"
 
+#: tools/gst-play.c:1461
 msgid "Do not print any output (apart from errors)"
 msgstr "Без извеждане на информация (освен грешките)"
 
+#: tools/gst-play.c:1463
 msgid "Use playbin3 pipeline"
-msgstr ""
+msgstr "Конвейер с „playbin3“"
 
+#: tools/gst-play.c:1464
 msgid "(default varies depending on 'USE_PLAYBIN' env variable)"
-msgstr ""
+msgstr "(стандартният вариант зависи от променливата на средата „USE_PLAYBIN“)"
+
+#: tools/gst-play.c:1468
+msgid "Keep showing the last frame on EOS until quit or playlist change command (gapless is ignored)"
+msgstr "Последният кадър в края на поток да се показва до получаването на команда за спиране или смяна на списъка за изпълнение (в този случай настройката за изпълнение без прекъсвания се пренебрегва)"
 
+#: tools/gst-play.c:1546
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr "Употреба: %s ФАЙЛ_1|АДРЕС_1 [ФАЙЛ_2|АДРЕС_2] [ФАЙЛ_3|АДРЕС_3]…"
 
+#: tools/gst-play.c:1550
 msgid "You must provide at least one filename or URI to play."
 msgstr "Трябва да укажете поне един файл или адрес за изпълнение."
 
+#: tools/gst-play.c:1590
 msgid "Press 'k' to see a list of keyboard shortcuts.\n"
 msgstr "Натиснете „k“, за да видите списъка с клавишни комбинации.\n"
-
-#, fuzzy
-#~ msgid "Could not create \"decodebin3\" element."
-#~ msgstr "Не може да се създаде елемент „uridecodebin“."
-
-#, fuzzy
-#~ msgid "Could not create \"urisourcebin\" element."
-#~ msgstr "Не може да се създаде елемент „uridecodebin“."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Вътрешна грешка на потока от данни."
index 0856772..ff008fc 100644 (file)
@@ -7,10 +7,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base 1.15.1\n"
+"Project-Id-Version: gst-plugins-base 1.16.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:43+0000\n"
-"PO-Revision-Date: 2019-02-10 15:50+0100\n"
+"POT-Creation-Date: 2019-04-19 00:20+0100\n"
+"PO-Revision-Date: 2019-09-08 12:27+0200\n"
 "Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n"
 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
 "Language: de\n"
@@ -19,679 +19,881 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 2.2\n"
+"X-Generator: Poedit 2.2.1\n"
 
+#: ext/alsa/gstalsasink.c:579
 msgid "Could not open device for playback in mono mode."
 msgstr "Gerät konnte nicht zur Wiedergabe in Mono geöffnet werden."
 
+#: ext/alsa/gstalsasink.c:581
 msgid "Could not open device for playback in stereo mode."
 msgstr "Gerät konnte nicht zur Wiedergabe in Stereo geöffnet werden."
 
+#: ext/alsa/gstalsasink.c:585
 #, c-format
 msgid "Could not open device for playback in %d-channel mode."
 msgstr "Gerät konnte nicht zur Wiedergabe im %d-Kanalmodus geöffnet werden."
 
-msgid ""
-"Could not open audio device for playback. Device is being used by another "
-"application."
-msgstr ""
-"Audio-Gerät konnte nicht zur Wiedergabe geöffnet werden. Es wird durch eine "
-"andere Anwendung verwendet."
+#: ext/alsa/gstalsasink.c:858
+msgid "Could not open audio device for playback. Device is being used by another application."
+msgstr "Audio-Gerät konnte nicht zur Wiedergabe geöffnet werden. Es wird durch eine andere Anwendung verwendet."
 
+#: ext/alsa/gstalsasink.c:863
 msgid "Could not open audio device for playback."
 msgstr "Audio-Gerät konnte nicht zur Wiedergabe geöffnet werden."
 
+#: ext/alsa/gstalsasink.c:1076
 msgid "Error outputting to audio device. The device has been disconnected."
 msgstr "Fehler bei Ausgabe aus dem Audio-Gerät. Das Gerät wurde getrennt."
 
+#: ext/alsa/gstalsasrc.c:444
 msgid "Could not open device for recording in mono mode."
 msgstr "Gerät konnte nicht zur Aufnahme in Mono geöffnet werden."
 
+#: ext/alsa/gstalsasrc.c:446
 msgid "Could not open device for recording in stereo mode."
 msgstr "Gerät konnte nicht zur Aufnahme in Stereo geöffnet werden."
 
+#: ext/alsa/gstalsasrc.c:450
 #, c-format
 msgid "Could not open device for recording in %d-channel mode"
 msgstr "Gerät konnte nicht zur Aufnahme im %d-Kanalmodus geöffnet werden."
 
-msgid ""
-"Could not open audio device for recording. Device is being used by another "
-"application."
-msgstr ""
-"Audio-Gerät konnte nicht zur Aufnahme geöffnet werden. Es wird durch eine "
-"andere Anwendung verwendet."
+#: ext/alsa/gstalsasrc.c:741
+msgid "Could not open audio device for recording. Device is being used by another application."
+msgstr "Audio-Gerät konnte nicht zur Aufnahme geöffnet werden. Es wird durch eine andere Anwendung verwendet."
 
+#: ext/alsa/gstalsasrc.c:746
 msgid "Could not open audio device for recording."
 msgstr "Audio-Gerät konnte nicht zur Aufnahme geöffnet werden."
 
+#: ext/alsa/gstalsasrc.c:992
 msgid "Error recording from audio device. The device has been disconnected."
 msgstr "Fehler bei Aufnahme vom Audio-Gerät. Das Gerät wurde getrennt."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:277 ext/cdparanoia/gstcdparanoiasrc.c:283
 msgid "Could not open CD device for reading."
 msgstr "Das CD-Laufwerk konnte nicht zum Lesen geöffnet werden."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:409
 msgid "Could not seek CD."
 msgstr "Suchvorgang auf der CD ist fehlgeschlagen."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:417
 msgid "Could not read CD."
 msgstr "CD konnte nicht gelesen werden."
 
+#: ext/gl/gstgltestsrc.c:491
 msgid "failed to draw pattern"
 msgstr "Zeichnen des Musters ist gescheitert"
 
+#: ext/gl/gstgltestsrc.c:492
 msgid "A GL error occurred"
 msgstr "Es ist ein GL-Fehler aufgetreten"
 
+#: ext/gl/gstgltestsrc.c:498
 msgid "format wasn't negotiated before get function"
 msgstr "Format wurde nicht vor der get-Funktion erkannt"
 
+#: gst/encoding/gstencodebin.c:1636 gst/playback/gstplaybin2.c:3399
+#: gst/playback/gstplaysink.c:1522 gst/playback/gstplaysink.c:1535
+#: gst/playback/gstplaysink.c:1872 gst/playback/gstplaysink.c:1904
+#: gst/playback/gstplaysink.c:2488 gst/playback/gstplaysink.c:2537
+#: gst/playback/gstplaysink.c:2552 gst/playback/gstplaysink.c:2577
+#: gst/playback/gstplaysink.c:2609 gst/playback/gstplaysink.c:2757
+#: gst/playback/gstplaysink.c:2788 gst/playback/gstplaysink.c:3166
+#: gst/playback/gstplaysink.c:3175 gst/playback/gstplaysink.c:3184
+#: gst/playback/gstplaysink.c:3193 gst/playback/gstplaysink.c:3606
+#: gst/playback/gstplaysink.c:4526 gst/playback/gstplaysinkconvertbin.c:97
+#: gst/playback/gstplaysinkconvertbin.c:117
+#: gst/playback/gsturidecodebin.c:1472 gst/playback/gsturisourcebin.c:1597
 #, c-format
 msgid "Missing element '%s' - check your GStreamer installation."
-msgstr ""
-"Das Element »%s« fehlt - überprüfen Sie Ihre Installation von GStreamer."
+msgstr "Das Element »%s« fehlt - überprüfen Sie Ihre Installation von GStreamer."
 
+#: gst/playback/gstdecodebin2.c:1883 gst/playback/gstparsebin.c:1553
 msgid "Could not determine type of stream"
 msgstr "Der Typ des Datenstroms konnte nicht bestimmt werden"
 
+#: gst/playback/gstdecodebin2.c:2861 gst/playback/gstparsebin.c:2385
 msgid "This appears to be a text file"
 msgstr "Dies scheint eine Textdatei zu sein"
 
+#: gst/playback/gstplaybin2.c:5452
 msgid "Could not create \"uridecodebin\" element."
 msgstr "Das Element »uridecodebin« konnte nicht erstellt werden."
 
+#: gst/playback/gstplaybin3.c:4558
 msgid "Could not create \"uridecodebin3\" element."
 msgstr "Das Element »uridecodebin3« konnte nicht erstellt werden."
 
+#: gst/playback/gstplaysink.c:2003
 #, c-format
 msgid "Both autovideosink and %s elements are missing."
 msgstr "Beide Elemente »autovideosink« und »%s« fehlen."
 
+#: gst/playback/gstplaysink.c:2007
 msgid "The autovideosink element is missing."
 msgstr "Das Element »autovideosink« fehlt."
 
+#: gst/playback/gstplaysink.c:2012
 #, c-format
 msgid "Configured videosink %s is not working."
 msgstr "Das konfigurierte Videoziel »%s« funktioniert nicht."
 
+#: gst/playback/gstplaysink.c:2016
 #, c-format
 msgid "Both autovideosink and %s elements are not working."
 msgstr "Beide Elemente »autovideosink« und »%s« funktionieren nicht."
 
+#: gst/playback/gstplaysink.c:2020
 msgid "The autovideosink element is not working."
 msgstr "Das Element »autovideosink« funktioniert nicht."
 
+#: gst/playback/gstplaysink.c:2525
 msgid "Custom text sink element is not usable."
 msgstr "Das eigene Element des Textziels ist nicht verwendbar."
 
+#: gst/playback/gstplaysink.c:2903
 msgid "No volume control found"
 msgstr "Keine Lautstärkeregelung gefunden"
 
+#: gst/playback/gstplaysink.c:2933
 #, c-format
 msgid "Both autoaudiosink and %s elements are missing."
 msgstr "Beide Elemente »autoaudiosink« und »%s« fehlen."
 
+#: gst/playback/gstplaysink.c:2937
 msgid "The autoaudiosink element is missing."
 msgstr "Das Element »autoaudiosink« fehlt."
 
+#: gst/playback/gstplaysink.c:2942
 #, c-format
 msgid "Configured audiosink %s is not working."
 msgstr "Das konfigurierte Audioziel »%s« funktioniert nicht."
 
+#: gst/playback/gstplaysink.c:2946
 #, c-format
 msgid "Both autoaudiosink and %s elements are not working."
 msgstr "Beide Elemente »autoaudiosink« und »%s« funktionieren nicht."
 
+#: gst/playback/gstplaysink.c:2950
 msgid "The autoaudiosink element is not working."
 msgstr "Das Element »autoaudiosink« funktioniert nicht."
 
+#: gst/playback/gstplaysink.c:3269 gst/playback/gstplaysink.c:3274
 msgid "Can't play a text file without video or visualizations."
-msgstr ""
-"Es kann keine Textdatei ohne Video oder Visualisierungen abgespielt werden."
+msgstr "Es kann keine Textdatei ohne Video oder Visualisierungen abgespielt werden."
 
+#: gst/playback/gsturidecodebin.c:921
 #, c-format
 msgid "No decoder available for type '%s'."
 msgstr "Für den Typ »%s« ist kein Decoder vorhanden."
 
+#: gst/playback/gsturidecodebin.c:1378 gst/playback/gsturisourcebin.c:1491
 msgid "No URI specified to play from."
 msgstr "Keine Adresse (URI) zum Abspielen angegeben."
 
+#: gst/playback/gsturidecodebin.c:1384 gst/playback/gsturisourcebin.c:1497
 #, c-format
 msgid "Invalid URI \"%s\"."
 msgstr "Ungültige Adresse (URI) »%s«."
 
+#: gst/playback/gsturidecodebin.c:1391 gst/playback/gsturisourcebin.c:1504
 msgid "This stream type cannot be played yet."
 msgstr "Dieser Datenstrom kann noch nicht abgespielt werden."
 
+#: gst/playback/gsturidecodebin.c:1409 gst/playback/gsturisourcebin.c:1522
 #, c-format
 msgid "No URI handler implemented for \"%s\"."
 msgstr "Es ist kein URI-Handler für »%s« implementiert."
 
+#: gst/playback/gsturidecodebin.c:2289 gst/playback/gsturisourcebin.c:2228
 msgid "Source element is invalid."
 msgstr "Das Quellelement ist ungültig."
 
+#: gst/tcp/gsttcpclientsink.c:216
 #, c-format
 msgid "Error while sending data to \"%s:%d\"."
 msgstr "Fehler beim Senden der Daten nach »%s:%d«."
 
+#: gst-libs/gst/audio/gstaudiobasesrc.c:842
 msgid "Can't record audio fast enough"
 msgstr "Der Ton kann nicht schnell genug aufgezeichnet werden"
 
+#: gst-libs/gst/audio/gstaudiocdsrc.c:1625
 msgid "This CD has no audio tracks"
 msgstr "Auf dieser CD befinden sich keine Audio-Titel"
 
+#: gst-libs/gst/pbutils/descriptions.c:89
 msgid "ID3 tag"
 msgstr "ID3-Kennzeichnung"
 
+#: gst-libs/gst/pbutils/descriptions.c:90
+#: gst-libs/gst/pbutils/descriptions.c:91
 msgid "APE tag"
 msgstr "APE-Kennzeichnung"
 
+#: gst-libs/gst/pbutils/descriptions.c:92
 msgid "ICY internet radio"
 msgstr "ICY Internet-Radio"
 
+#: gst-libs/gst/pbutils/descriptions.c:127
 msgid "Apple Lossless Audio (ALAC)"
 msgstr "Apple Lossless Audio (ALAC)"
 
+#: gst-libs/gst/pbutils/descriptions.c:143
 msgid "Free Lossless Audio Codec (FLAC)"
 msgstr "Free Lossless Audio Codec (FLAC)"
 
+#: gst-libs/gst/pbutils/descriptions.c:173
+#: gst-libs/gst/pbutils/descriptions.c:174
 msgid "Lossless True Audio (TTA)"
 msgstr "Lossless True Audio (TTA)"
 
+#: gst-libs/gst/pbutils/descriptions.c:182
 msgid "Windows Media Speech"
 msgstr "Windows Media Speech"
 
+#: gst-libs/gst/pbutils/descriptions.c:199
 msgid "CYUV Lossless"
 msgstr "CYUV verlustlos"
 
+#: gst-libs/gst/pbutils/descriptions.c:203
 msgid "FFMpeg v1"
 msgstr "FFMpeg v1"
 
+#: gst-libs/gst/pbutils/descriptions.c:217
 msgid "Lossless MSZH"
 msgstr "verlustloses MSZH"
 
+#: gst-libs/gst/pbutils/descriptions.c:228
 msgid "Run-length encoding"
 msgstr "RLE-Codierung"
 
+#: gst-libs/gst/pbutils/descriptions.c:274
 msgid "Timed Text"
 msgstr "Zeitlich abgepasster Text"
 
+#: gst-libs/gst/pbutils/descriptions.c:278
 msgid "Subtitle"
 msgstr "Untertitel"
 
+#: gst-libs/gst/pbutils/descriptions.c:279
 msgid "MPL2 subtitle format"
 msgstr "Untertitel-Format MPL2"
 
+#: gst-libs/gst/pbutils/descriptions.c:280
 msgid "DKS subtitle format"
 msgstr "Untertitel-Format DKS"
 
+#: gst-libs/gst/pbutils/descriptions.c:281
 msgid "QTtext subtitle format"
 msgstr "Untertitel-Format QTtext"
 
+#: gst-libs/gst/pbutils/descriptions.c:282
 msgid "Sami subtitle format"
 msgstr "Untertitel-Format Sami"
 
+#: gst-libs/gst/pbutils/descriptions.c:283
 msgid "TMPlayer subtitle format"
 msgstr "Untertitel-Format TMPlayer"
 
+#: gst-libs/gst/pbutils/descriptions.c:287
 msgid "CEA 608 Closed Caption"
 msgstr "CEA 608 Untertitel"
 
+#: gst-libs/gst/pbutils/descriptions.c:288
 msgid "CEA 708 Closed Caption"
 msgstr "CEA 708 Untertitel"
 
+#: gst-libs/gst/pbutils/descriptions.c:289
 msgid "Kate subtitle format"
 msgstr "Untertitel-Format Kate"
 
+#: gst-libs/gst/pbutils/descriptions.c:290
 msgid "WebVTT subtitle format"
 msgstr "Untertitel-Format WebVTT"
 
+#: gst-libs/gst/pbutils/descriptions.c:455
+#: gst-libs/gst/pbutils/descriptions.c:458
+#: gst-libs/gst/pbutils/descriptions.c:508
 msgid "Uncompressed video"
 msgstr "Unkomprimiertes Video"
 
+#: gst-libs/gst/pbutils/descriptions.c:463
 msgid "Uncompressed gray"
 msgstr "Unkomprimiertes Grau"
 
+#: gst-libs/gst/pbutils/descriptions.c:486
 #, c-format
 msgid "Uncompressed packed YUV %s"
 msgstr "Unkomprimiertes gepacktes YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:488
 #, c-format
 msgid "Uncompressed semi-planar YUV %s"
 msgstr "Unkomprimiertes halbflaches YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:490
 #, c-format
 msgid "Uncompressed planar YUV %s"
 msgstr "Unkomprimiertes flaches YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:501
 #, c-format
 msgid "Uncompressed palettized %d-bit %s"
 msgstr "Unkomprimiertes palletiertes %d-Bit %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:504
 #, c-format
 msgid "Uncompressed %d-bit %s"
 msgstr "Unkomprimiertes %d-Bit %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:586
 #, c-format
 msgid "DivX MPEG-4 Version %d"
 msgstr "DivX MPEG-4 Version %d"
 
+#: gst-libs/gst/pbutils/descriptions.c:834
 msgid "Uncompressed audio"
 msgstr "Unkomprimiertes Audio"
 
+#: gst-libs/gst/pbutils/descriptions.c:840
 #, c-format
 msgid "Raw %d-bit %s audio"
 msgstr "Rohes %d-Bit %s Audio"
 
+#: gst-libs/gst/pbutils/descriptions.c:942
 msgid "Audio CD source"
 msgstr "Musik-CD-Quelle"
 
+#: gst-libs/gst/pbutils/descriptions.c:945
 msgid "DVD source"
 msgstr "DVD-Quelle"
 
+#: gst-libs/gst/pbutils/descriptions.c:948
 msgid "Real Time Streaming Protocol (RTSP) source"
 msgstr "Real Time Streaming Protocol (RTSP)-Quelle"
 
+#: gst-libs/gst/pbutils/descriptions.c:952
 msgid "Microsoft Media Server (MMS) protocol source"
 msgstr "Microsoft Media Server (MMS)-Protokollquelle"
 
+#: gst-libs/gst/pbutils/descriptions.c:960
 #, c-format
 msgid "%s protocol source"
 msgstr "%s Protokollquelle"
 
+#: gst-libs/gst/pbutils/descriptions.c:1034
 #, c-format
 msgid "%s video RTP depayloader"
 msgstr "%s-Video RTP-Payload-Entnahme"
 
+#: gst-libs/gst/pbutils/descriptions.c:1036
 #, c-format
 msgid "%s audio RTP depayloader"
 msgstr "%s-Audio RTP-Payload-Entnahme"
 
+#: gst-libs/gst/pbutils/descriptions.c:1038
 #, c-format
 msgid "%s RTP depayloader"
 msgstr "%s-RTP-Payload-Entnahme"
 
+#: gst-libs/gst/pbutils/descriptions.c:1045
 #, c-format
 msgid "%s demuxer"
 msgstr "%s-Demuxer"
 
+#: gst-libs/gst/pbutils/descriptions.c:1047
 #, c-format
 msgid "%s decoder"
 msgstr "%s-Decoder"
 
+#: gst-libs/gst/pbutils/descriptions.c:1086
 #, c-format
 msgid "%s video RTP payloader"
 msgstr "%s-Video RTP-Payloader"
 
+#: gst-libs/gst/pbutils/descriptions.c:1088
 #, c-format
 msgid "%s audio RTP payloader"
 msgstr "%s-Audio RTP-Payloader"
 
+#: gst-libs/gst/pbutils/descriptions.c:1090
 #, c-format
 msgid "%s RTP payloader"
 msgstr "%s-RTP-Payloader"
 
+#: gst-libs/gst/pbutils/descriptions.c:1097
 #, c-format
 msgid "%s muxer"
 msgstr "%s-Multiplexer"
 
+#: gst-libs/gst/pbutils/descriptions.c:1099
 #, c-format
 msgid "%s encoder"
 msgstr "%s-Encoder"
 
+#: gst-libs/gst/pbutils/descriptions.c:1133
 #, c-format
 msgid "GStreamer element %s"
 msgstr "GStreamer-Element %s"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:558
 msgid "Unknown source element"
 msgstr "Unbekanntes Quellelement"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:561
 msgid "Unknown sink element"
 msgstr "Unbekanntes Zielelement"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:564
 msgid "Unknown element"
 msgstr "Unbekanntes Element"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:567
 msgid "Unknown decoder element"
 msgstr "Unbekanntes Decoder-Element"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:570
 msgid "Unknown encoder element"
 msgstr "Unbekanntes Encoder-Element"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:575
 msgid "Plugin or element of unknown type"
 msgstr "Plugin oder Element unbekannten Typs"
 
+#: gst-libs/gst/tag/gsttagdemux.c:1243
 msgid "Failed to read tag: not enough data"
 msgstr "Lesen der Kennzeichnung schlug fehl: Nicht genug Daten"
 
+#: gst-libs/gst/tag/tags.c:77
 msgid "track ID"
 msgstr "Titelkennung"
 
+#: gst-libs/gst/tag/tags.c:77
 msgid "MusicBrainz track ID"
 msgstr "Titelkennung von MusicBrainz"
 
 # Hach, hier haben wir ja noch mehr »Interpreten«!
+#: gst-libs/gst/tag/tags.c:79
 msgid "artist ID"
 msgstr "Künstlerkennung"
 
+#: gst-libs/gst/tag/tags.c:79
 msgid "MusicBrainz artist ID"
 msgstr "Künstlerkennung von MusicBrainz"
 
+#: gst-libs/gst/tag/tags.c:81
 msgid "album ID"
 msgstr "Albenkennung"
 
+#: gst-libs/gst/tag/tags.c:81
 msgid "MusicBrainz album ID"
 msgstr "Albenkennung von MusicBrainz"
 
+#: gst-libs/gst/tag/tags.c:84
 msgid "album artist ID"
 msgstr "Kennung des Albenkünstlers"
 
+#: gst-libs/gst/tag/tags.c:84
 msgid "MusicBrainz album artist ID"
 msgstr "Kennung des Albenkünstlers von MusicBrainz"
 
+#: gst-libs/gst/tag/tags.c:86
 msgid "track TRM ID"
 msgstr "TRM-Kennung verfolgen"
 
+#: gst-libs/gst/tag/tags.c:86
 msgid "MusicBrainz TRM ID"
 msgstr "MusicBrainz-TRM-Kennung"
 
+#: gst-libs/gst/tag/tags.c:108
 msgid "capturing shutter speed"
 msgstr "Belichtungszeit"
 
+#: gst-libs/gst/tag/tags.c:109
 msgid "Shutter speed used when capturing an image, in seconds"
 msgstr "Belichtungszeit bei Aufnahme eines Bildes in Sekunden"
 
+#: gst-libs/gst/tag/tags.c:112
 msgid "capturing focal ratio"
 msgstr "Blendenwert"
 
+#: gst-libs/gst/tag/tags.c:113
 msgid "Focal ratio (f-number) used when capturing the image"
 msgstr "Der verwendete Blendenwert bei Bildaufnahme"
 
+#: gst-libs/gst/tag/tags.c:116
 msgid "capturing focal length"
 msgstr "Brennweite"
 
+#: gst-libs/gst/tag/tags.c:117
 msgid "Focal length of the lens used capturing the image, in mm"
 msgstr "Die verwendete Brennweite des Objektivs bei Bildaufnahme in mm"
 
+#: gst-libs/gst/tag/tags.c:121
 msgid "capturing 35 mm equivalent focal length"
 msgstr "Aufnahme entspricht einer äquivalenten Brennweite von 35 mm"
 
-msgid ""
-"35 mm equivalent focal length of the lens used capturing the image, in mm"
-msgstr ""
-"eine zu 35 mm äquivalente Brennweite des Objektivs bei Bildaufnahme, in mm"
+#: gst-libs/gst/tag/tags.c:122
+msgid "35 mm equivalent focal length of the lens used capturing the image, in mm"
+msgstr "eine zu 35 mm äquivalente Brennweite des Objektivs bei Bildaufnahme, in mm"
 
+#: gst-libs/gst/tag/tags.c:126
 msgid "capturing digital zoom ratio"
 msgstr "Digitale Vergrößerung"
 
+#: gst-libs/gst/tag/tags.c:127
 msgid "Digital zoom ratio used when capturing an image"
 msgstr "Die verwendete digitale Vergrößerung bei Bildaufnahme"
 
+#: gst-libs/gst/tag/tags.c:130
 msgid "capturing iso speed"
 msgstr "ISO-Empfindlichkeit"
 
+#: gst-libs/gst/tag/tags.c:131
 msgid "The ISO speed used when capturing an image"
 msgstr "Die verwendete ISO-Empfindlichkeit bei Bildaufnahme"
 
+#: gst-libs/gst/tag/tags.c:134
 msgid "capturing exposure program"
 msgstr "Belichtungsprogramm"
 
+#: gst-libs/gst/tag/tags.c:135
 msgid "The exposure program used when capturing an image"
 msgstr "Das verwendete Belichtungsprogramm bei Bildaufnahme"
 
+#: gst-libs/gst/tag/tags.c:138
 msgid "capturing exposure mode"
 msgstr "Belichtungsmodus der Aufnahme"
 
+#: gst-libs/gst/tag/tags.c:139
 msgid "The exposure mode used when capturing an image"
 msgstr "Der verwendete Belichtungsmodus bei Bildaufnahme"
 
+#: gst-libs/gst/tag/tags.c:142
 msgid "capturing exposure compensation"
 msgstr "Belichtungskorrektur der Aufnahme"
 
+#: gst-libs/gst/tag/tags.c:143
 msgid "The exposure compensation used when capturing an image"
 msgstr "Der verwendete Belichtungskorrektur bei Bildaufnahme"
 
+#: gst-libs/gst/tag/tags.c:146
 msgid "capturing scene capture type"
 msgstr "Motivwahl"
 
+#: gst-libs/gst/tag/tags.c:147
 msgid "The scene capture mode used when capturing an image"
 msgstr "Die verwendete Motivwahl bei Bildaufnahme"
 
+#: gst-libs/gst/tag/tags.c:150
 msgid "capturing gain adjustment"
 msgstr "Anpassung der Aufnahmebelichtung"
 
 # »Gain adjustment« kenne ich eigentlich nur bei Audiodateien. Müsste sich hier um eine Anpassung der Belichtungswerte handeln.
+#: gst-libs/gst/tag/tags.c:151
 msgid "The overall gain adjustment applied on an image"
 msgstr "Die auf das Bild angewendete Anpassung der Belichtungswerte"
 
+#: gst-libs/gst/tag/tags.c:154
 msgid "capturing white balance"
 msgstr "Weißabgleich"
 
+#: gst-libs/gst/tag/tags.c:155
 msgid "The white balance mode set when capturing an image"
 msgstr "Der eingestellte Weißabgleich bei Bildaufnahme"
 
+#: gst-libs/gst/tag/tags.c:158
 msgid "capturing contrast"
 msgstr "Kontrast"
 
+#: gst-libs/gst/tag/tags.c:159
 msgid "The direction of contrast processing applied when capturing an image"
 msgstr "Die Einstellung zur angewendeten Kontrastbearbeitung bei Bildaufnahme"
 
+#: gst-libs/gst/tag/tags.c:163
 msgid "capturing saturation"
 msgstr "Sättigung"
 
+#: gst-libs/gst/tag/tags.c:164
 msgid "The direction of saturation processing applied when capturing an image"
-msgstr ""
-"Die Einstellung zur angewendeten Sättigungsbearbeitung bei Bildaufnahme"
+msgstr "Die Einstellung zur angewendeten Sättigungsbearbeitung bei Bildaufnahme"
 
+#: gst-libs/gst/tag/tags.c:168
 msgid "capturing sharpness"
 msgstr "Schärfe"
 
+#: gst-libs/gst/tag/tags.c:169
 msgid "The direction of sharpness processing applied when capturing an image"
 msgstr "Die Einstellung zur angewendeten Schärfebearbeitung bei Bildaufnahme"
 
+#: gst-libs/gst/tag/tags.c:173
 msgid "capturing flash fired"
 msgstr "Blitzauslösung"
 
+#: gst-libs/gst/tag/tags.c:174
 msgid "If the flash fired while capturing an image"
 msgstr "Gibt an, ob der Blitz bei der Bildaufnahme ausgelöst wurde"
 
+#: gst-libs/gst/tag/tags.c:177
 msgid "capturing flash mode"
 msgstr "Blitzmodus"
 
+#: gst-libs/gst/tag/tags.c:178
 msgid "The selected flash mode while capturing an image"
 msgstr "Der gewählte Blitzmodus bei Bildaufnahme"
 
+#: gst-libs/gst/tag/tags.c:181
 msgid "capturing metering mode"
 msgstr "Messmethode der Aufnahme"
 
-msgid ""
-"The metering mode used while determining exposure for capturing an image"
-msgstr ""
-"Die während der Bestimmung der Belichtungszeit eingesetzte Messmethode zur "
-"Aufnahme eines Bildes"
+#: gst-libs/gst/tag/tags.c:182
+msgid "The metering mode used while determining exposure for capturing an image"
+msgstr "Die während der Bestimmung der Belichtungszeit eingesetzte Messmethode zur Aufnahme eines Bildes"
 
+#: gst-libs/gst/tag/tags.c:186
 msgid "capturing source"
 msgstr "Aufnahmequelle"
 
+#: gst-libs/gst/tag/tags.c:187
 msgid "The source or type of device used for the capture"
 msgstr "Die Quelle oder der Gerätetyp, mit dem aufgenommen wird"
 
+#: gst-libs/gst/tag/tags.c:190
 msgid "image horizontal ppi"
 msgstr "Horizontale Bildauflösung"
 
+#: gst-libs/gst/tag/tags.c:191
 msgid "Media (image/video) intended horizontal pixel density in ppi"
 msgstr "Horizontale Auflösung des Bildes oder Videos in ppi (Pixel pro Zoll)"
 
+#: gst-libs/gst/tag/tags.c:194
 msgid "image vertical ppi"
 msgstr "Vertikale Bildauflösung"
 
+#: gst-libs/gst/tag/tags.c:195
 msgid "Media (image/video) intended vertical pixel density in ppi"
 msgstr "Vertikale Auflösung des Bildes oder Videos in ppi (Pixel pro Zoll)"
 
+#: gst-libs/gst/tag/tags.c:198
 msgid "ID3v2 frame"
 msgstr "ID3v2-Rahmen"
 
+#: gst-libs/gst/tag/tags.c:198
 msgid "unparsed id3v2 tag frame"
 msgstr "unverarbeiteter ID3v2-Kennzeichnungsrahmen"
 
+#: gst-libs/gst/tag/tags.c:202
 msgid "musical-key"
 msgstr "musical-key"
 
+#: gst-libs/gst/tag/tags.c:202
 msgid "Initial key in which the sound starts"
 msgstr "Anfänglicher Schlüssel, in dem der Ton startet"
 
+#: tools/gst-device-monitor.c:260 tools/gst-play.c:1444
 msgid "Print version information and exit"
 msgstr "Versionsinformationen ausgeben und beenden"
 
-msgid ""
-"Don't exit after showing the initial device list, but wait for devices to "
-"added/removed."
-msgstr ""
-"Nicht nach dem Anzeigen der anfänglichen Geräteliste beenden, sondern auf "
-"das Hinzufügen/Entfernen von Geräten warten."
+#: tools/gst-device-monitor.c:262
+msgid "Don't exit after showing the initial device list, but wait for devices to added/removed."
+msgstr "Nicht nach dem Anzeigen der anfänglichen Geräteliste beenden, sondern auf das Hinzufügen/Entfernen von Geräten warten."
 
+#: tools/gst-play.c:310
 #, c-format
 msgid "Volume: %.0f%%"
 msgstr "Lautstärke: %.0f%%"
 
+#: tools/gst-play.c:349
 msgid "Buffering..."
 msgstr "Zwischenspeichern …"
 
+#: tools/gst-play.c:370
 msgid "Clock lost, selecting a new one\n"
 msgstr "Uhrzeit verloren, es wird eine neue gewählt\n"
 
+#: tools/gst-play.c:400 tools/gst-play.c:446 tools/gst-play.c:883
+#: tools/gst-play.c:1347
 msgid "Reached end of play list."
 msgstr "Das Ende der Wiedergabeliste wurde erreicht."
 
+#: tools/gst-play.c:613
 msgid "Paused"
 msgstr "Angehalten"
 
+#: tools/gst-play.c:671
 #, c-format
 msgid "Now playing %s\n"
 msgstr "Momentan wird %s wiedergegeben\n"
 
+#: tools/gst-play.c:734
 #, c-format
 msgid "About to finish, preparing next title: %s"
 msgstr "Kurz vor dem Abschluss. Nächster Titel wird vorbereitet: %s"
 
+#: tools/gst-play.c:979
 #, c-format
 msgid "Playback rate: %.2f"
 msgstr "Wiedergabegeschwindigkeit: %.2f"
 
+#: tools/gst-play.c:983
 #, c-format
 msgid "Could not change playback rate to %.2f"
 msgstr "Wiedergabegeschwindigkeit konnte nicht auf %.2f geändert werden"
 
+#: tools/gst-play.c:1287
 msgid "space"
 msgstr "Leertaste"
 
+#: tools/gst-play.c:1287
 msgid "pause/unpause"
 msgstr "Anhalten/Fortsetzen"
 
+#: tools/gst-play.c:1288
 msgid "q or ESC"
 msgstr "q oder ESC"
 
+#: tools/gst-play.c:1288
 msgid "quit"
 msgstr "Beenden"
 
+#: tools/gst-play.c:1289
 msgid "> or n"
 msgstr "> oder n"
 
+#: tools/gst-play.c:1289
 msgid "play next"
 msgstr "Nächsten wiedergeben"
 
+#: tools/gst-play.c:1290
 msgid "< or b"
 msgstr "< oder b"
 
+#: tools/gst-play.c:1290
 msgid "play previous"
 msgstr "Vorherigen wiedergeben"
 
+#: tools/gst-play.c:1291
 msgid "seek forward"
 msgstr "Vorspulen"
 
+#: tools/gst-play.c:1292
 msgid "seek backward"
 msgstr "Zurückspulen"
 
+#: tools/gst-play.c:1293
 msgid "volume up"
 msgstr "Lauter"
 
+#: tools/gst-play.c:1294
 msgid "volume down"
 msgstr "Leiser"
 
+#: tools/gst-play.c:1295
 msgid "increase playback rate"
 msgstr "Schneller wiedergeben"
 
+#: tools/gst-play.c:1296
 msgid "decrease playback rate"
 msgstr "Langsamer wiedergeben"
 
+#: tools/gst-play.c:1297
 msgid "change playback direction"
 msgstr "Wiedergaberichtung ändern"
 
+#: tools/gst-play.c:1298
 msgid "enable/disable trick modes"
 msgstr "Trickmodi einschalten/ausschalten"
 
+#: tools/gst-play.c:1299
 msgid "change audio track"
 msgstr "Audio-Titel wechseln"
 
+#: tools/gst-play.c:1300
 msgid "change video track"
 msgstr "Videl-Titel wechseln"
 
+#: tools/gst-play.c:1301
 msgid "change subtitle track"
 msgstr "Untertitel wechseln"
 
+#: tools/gst-play.c:1302
 msgid "seek to beginning"
 msgstr "An den Anfang springen"
 
+#: tools/gst-play.c:1303
 msgid "show keyboard shortcuts"
 msgstr "Tastenkombinationen anzeigen"
 
+#: tools/gst-play.c:1306
 msgid "Interactive mode - keyboard controls:"
 msgstr "Interaktiver Modus - Tastatursteuerung:"
 
+#: tools/gst-play.c:1439
 msgid "Output status information and property notifications"
 msgstr "Zustandsinformation und Eigenschaftsmitteilungen ausgeben"
 
+#: tools/gst-play.c:1441
 msgid "Control playback behaviour setting playbin 'flags' property"
 msgstr "Steuerung der Wiedergabe mittels der playbin-Eigenschaft »flags«"
 
+#: tools/gst-play.c:1446
 msgid "Video sink to use (default is autovideosink)"
 msgstr "Zu verwendende Video-Ziel (Voreinstellung ist »autovideosink«)"
 
+#: tools/gst-play.c:1448
 msgid "Audio sink to use (default is autoaudiosink)"
 msgstr "Zu verwendende Audio-Ziel (Voreinstellung ist »autoaudiosink«)"
 
+#: tools/gst-play.c:1450
 msgid "Enable gapless playback"
 msgstr "Lückenlose Wiedergabe einschalten"
 
+#: tools/gst-play.c:1452
 msgid "Shuffle playlist"
 msgstr "Wiedergabeliste mischen"
 
+#: tools/gst-play.c:1455
 msgid "Disable interactive control via the keyboard"
 msgstr "Interaktive Steuerung via Tastatur deaktivieren"
 
+#: tools/gst-play.c:1457
 msgid "Volume"
 msgstr "Lautstärke"
 
+#: tools/gst-play.c:1459
 msgid "Playlist file containing input media files"
 msgstr "Datei mit Wiedergabeliste enthält Eingabe-Mediendateien"
 
+#: tools/gst-play.c:1461
 msgid "Do not print any output (apart from errors)"
 msgstr "Nichts ausgeben (außer Fehlermeldungen)"
 
+#: tools/gst-play.c:1463
 msgid "Use playbin3 pipeline"
 msgstr "playbin3-Weiterleitung verwenden"
 
+#: tools/gst-play.c:1464
 msgid "(default varies depending on 'USE_PLAYBIN' env variable)"
 msgstr "(die Vorgabe hängt von der Umgebungsvariablen »USE_PLABIN« ab)"
 
+#: tools/gst-play.c:1468
+msgid "Keep showing the last frame on EOS until quit or playlist change command (gapless is ignored)"
+msgstr "Bei Stromende das letzte Einzelbild dargestellt lassen bis zum Beenden oder Wechseln der Wiedergabeliste (lückenlose Wiedergabe wird ignoriert)"
+
+#: tools/gst-play.c:1546
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr "Aufruf: %s DATEI1|URI1 [DATEI2|URI2] [DATEI3|URI3] ..."
 
+#: tools/gst-play.c:1550
 msgid "You must provide at least one filename or URI to play."
-msgstr ""
-"Sie müssen mindestens einen Dateinamen oder eine Adresse zur Wiedergabe "
-"angeben."
+msgstr "Sie müssen mindestens einen Dateinamen oder eine Adresse zur Wiedergabe angeben."
 
+#: tools/gst-play.c:1590
 msgid "Press 'k' to see a list of keyboard shortcuts.\n"
 msgstr "Geben Sie »k« ein, um die Liste der Tastenkombinationen zu sehen.\n"
 
@@ -705,9 +907,7 @@ msgstr "Geben Sie »k« ein, um die Liste der Tastenkombinationen zu sehen.\n"
 #~ msgstr "Interner Fehler im Datenstrom."
 
 #~ msgid "A %s plugin is required to play this stream, but not installed."
-#~ msgstr ""
-#~ "Ein Plugin »%s« wird zum Abspielen dieses Datenstroms benötigt, ist aber "
-#~ "nicht installiert."
+#~ msgstr "Ein Plugin »%s« wird zum Abspielen dieses Datenstroms benötigt, ist aber nicht installiert."
 
 #~ msgid "Uncompressed %s YUV %s"
 #~ msgstr "Unkomprimiertes %s YUV %s"
@@ -763,21 +963,11 @@ msgstr "Geben Sie »k« ein, um die Liste der Tastenkombinationen zu sehen.\n"
 #~ msgid "RTSP streams cannot be played yet."
 #~ msgstr "RTSP-Datenströme können noch nicht abgespielt werden."
 
-#~ msgid ""
-#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
-#~ "file or some other type of text file, or the media file was not "
-#~ "recognized."
-#~ msgstr ""
-#~ "Es wurde nur ein Datenstrom mit Untertiteln erkannt. Entweder laden Sie "
-#~ "eine Datei mit Untertiteln oder eine andere Art Textdatei oder die "
-#~ "Mediendatei wurde nicht erkannt."
-
-#~ msgid ""
-#~ "You do not have a decoder installed to handle this file. You might need "
-#~ "to install the necessary plugins."
-#~ msgstr ""
-#~ "Sie haben keinen Decoder für den Umgang mit dieser Datei installiert. Sie "
-#~ "sollten die erforderlichen Plugins installieren."
+#~ msgid "Only a subtitle stream was detected. Either you are loading a subtitle file or some other type of text file, or the media file was not recognized."
+#~ msgstr "Es wurde nur ein Datenstrom mit Untertiteln erkannt. Entweder laden Sie eine Datei mit Untertiteln oder eine andere Art Textdatei oder die Mediendatei wurde nicht erkannt."
+
+#~ msgid "You do not have a decoder installed to handle this file. You might need to install the necessary plugins."
+#~ msgstr "Sie haben keinen Decoder für den Umgang mit dieser Datei installiert. Sie sollten die erforderlichen Plugins installieren."
 
 #~ msgid "This is not a media file"
 #~ msgstr "Dies ist keine Mediendatei"
@@ -843,12 +1033,10 @@ msgstr "Geben Sie »k« ein, um die Liste der Tastenkombinationen zu sehen.\n"
 #~ msgstr "Das Gerät »%s« wird bereits verwendet."
 
 #~ msgid "Could not open device \"%s\" for reading and writing."
-#~ msgstr ""
-#~ "Das Gerät »%s« konnte nicht zum Lesen und Schreiben geöffnet werden."
+#~ msgstr "Das Gerät »%s« konnte nicht zum Lesen und Schreiben geöffnet werden."
 
 #~ msgid "Can't display both text subtitles and subpictures."
-#~ msgstr ""
-#~ "Es können nicht Untertiteltexte und Kleinbilder zugleich angezeigt werden."
+#~ msgstr "Es können nicht Untertiteltexte und Kleinbilder zugleich angezeigt werden."
 
 #~ msgid "No Temp directory specified."
 #~ msgstr "Kein temporärer Ordner angegeben."
index 71f9ccc..d8d930e 100644 (file)
@@ -4,14 +4,14 @@
 #
 # Nicolas Velin <nicolas@velin.fr>, 2008.
 # Claude Paroz <claude@2xlibre.net>, 2008-2011.
-# Stéphane Aulery <lkppo@free.fr>, 2015-2016.
+# Stéphane Aulery <lkppo@free.fr>, 2015-2016, 2019.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base 1.10.0\n"
+"Project-Id-Version: gst-plugins-base 1.16.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:43+0000\n"
-"PO-Revision-Date: 2016-12-23 20:39+0100\n"
+"POT-Creation-Date: 2019-04-19 00:20+0100\n"
+"PO-Revision-Date: 2019-09-03 20:19+0200\n"
 "Last-Translator: Stéphane Aulery <lkppo@free.fr>\n"
 "Language-Team: French <traduc@traduc.org>\n"
 "Language: fr\n"
@@ -21,703 +21,878 @@ msgstr ""
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=n>1;\n"
 
+#: ext/alsa/gstalsasink.c:579
 msgid "Could not open device for playback in mono mode."
 msgstr "Impossible d’utiliser le périphérique pour la lecture en mode mono."
 
+#: ext/alsa/gstalsasink.c:581
 msgid "Could not open device for playback in stereo mode."
 msgstr "Impossible d’utiliser le périphérique pour la lecture en mode stéréo."
 
+#: ext/alsa/gstalsasink.c:585
 #, c-format
 msgid "Could not open device for playback in %d-channel mode."
-msgstr ""
-"Impossible d’utiliser le périphérique pour la lecture en mode %d voie(s)."
+msgstr "Impossible d’utiliser le périphérique pour la lecture en mode %d voie(s)."
 
-msgid ""
-"Could not open audio device for playback. Device is being used by another "
-"application."
-msgstr ""
-"Impossible d’utiliser le périphérique audio pour la lecture. Celui-ci est "
-"occupé par une autre application."
+#: ext/alsa/gstalsasink.c:858
+msgid "Could not open audio device for playback. Device is being used by another application."
+msgstr "Impossible d’utiliser le périphérique audio pour la lecture. Celui-ci est occupé par une autre application."
 
+#: ext/alsa/gstalsasink.c:863
 msgid "Could not open audio device for playback."
 msgstr "Impossible d’utiliser le périphérique audio pour la lecture."
 
+#: ext/alsa/gstalsasink.c:1076
 msgid "Error outputting to audio device. The device has been disconnected."
-msgstr ""
-"Erreur de sortie vers le périphérique audio. Le périphérique a été "
-"déconnecté."
+msgstr "Erreur de sortie vers le périphérique audio. Le périphérique a été déconnecté."
 
+#: ext/alsa/gstalsasrc.c:444
 msgid "Could not open device for recording in mono mode."
-msgstr ""
-"Impossible d’utiliser le périphérique pour l’enregistrement en mode mono."
+msgstr "Impossible d’utiliser le périphérique pour l’enregistrement en mode mono."
 
+#: ext/alsa/gstalsasrc.c:446
 msgid "Could not open device for recording in stereo mode."
-msgstr ""
-"Impossible d’utiliser le périphérique pour l’enregistrement en mode stéréo."
+msgstr "Impossible d’utiliser le périphérique pour l’enregistrement en mode stéréo."
 
+#: ext/alsa/gstalsasrc.c:450
 #, c-format
 msgid "Could not open device for recording in %d-channel mode"
-msgstr ""
-"Impossible d’utiliser le périphérique pour l'enregistrement en mode %d "
-"voie(s)."
+msgstr "Impossible d’utiliser le périphérique pour l'enregistrement en mode %d voie(s)."
 
-msgid ""
-"Could not open audio device for recording. Device is being used by another "
-"application."
-msgstr ""
-"Impossible d’utiliser le périphérique audio pour l’enregistrement. Celui-ci "
-"est occupé par une autre application."
+#: ext/alsa/gstalsasrc.c:741
+msgid "Could not open audio device for recording. Device is being used by another application."
+msgstr "Impossible d’utiliser le périphérique audio pour l’enregistrement. Celui-ci est occupé par une autre application."
 
+#: ext/alsa/gstalsasrc.c:746
 msgid "Could not open audio device for recording."
 msgstr "Impossible d’utiliser le périphérique audio pour l’enregistrement."
 
+#: ext/alsa/gstalsasrc.c:992
 msgid "Error recording from audio device. The device has been disconnected."
-msgstr ""
-"Erreur d’enregistrement de puis le périphèrique audio. Le périphèrique a été "
-"déconnecté."
+msgstr "Erreur d’enregistrement de puis le périphèrique audio. Le périphèrique a été déconnecté."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:277 ext/cdparanoia/gstcdparanoiasrc.c:283
 msgid "Could not open CD device for reading."
 msgstr "Impossible d’utiliser le lecteur CD pour la lecture."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:409
 msgid "Could not seek CD."
 msgstr "Impossible de rechercher sur le CD."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:417
 msgid "Could not read CD."
 msgstr "Impossible de lire le CD."
 
+#: ext/gl/gstgltestsrc.c:491
 msgid "failed to draw pattern"
-msgstr ""
+msgstr "Tracer du motif en échec"
 
+#: ext/gl/gstgltestsrc.c:492
 msgid "A GL error occurred"
-msgstr ""
+msgstr "Erreur de rendu GL"
 
+#: ext/gl/gstgltestsrc.c:498
 msgid "format wasn't negotiated before get function"
-msgstr ""
-
+msgstr "le format n'a pas été négocié avant l'appel de fonction"
+
+#: gst/encoding/gstencodebin.c:1636 gst/playback/gstplaybin2.c:3399
+#: gst/playback/gstplaysink.c:1522 gst/playback/gstplaysink.c:1535
+#: gst/playback/gstplaysink.c:1872 gst/playback/gstplaysink.c:1904
+#: gst/playback/gstplaysink.c:2488 gst/playback/gstplaysink.c:2537
+#: gst/playback/gstplaysink.c:2552 gst/playback/gstplaysink.c:2577
+#: gst/playback/gstplaysink.c:2609 gst/playback/gstplaysink.c:2757
+#: gst/playback/gstplaysink.c:2788 gst/playback/gstplaysink.c:3166
+#: gst/playback/gstplaysink.c:3175 gst/playback/gstplaysink.c:3184
+#: gst/playback/gstplaysink.c:3193 gst/playback/gstplaysink.c:3606
+#: gst/playback/gstplaysink.c:4526 gst/playback/gstplaysinkconvertbin.c:97
+#: gst/playback/gstplaysinkconvertbin.c:117
+#: gst/playback/gsturidecodebin.c:1472 gst/playback/gsturisourcebin.c:1597
 #, c-format
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Élément « %s » manquant — Vérifiez votre installation de GStreamer."
 
+#: gst/playback/gstdecodebin2.c:1883 gst/playback/gstparsebin.c:1553
 msgid "Could not determine type of stream"
 msgstr "Impossible de déterminer le type de flux"
 
+#: gst/playback/gstdecodebin2.c:2861 gst/playback/gstparsebin.c:2385
 msgid "This appears to be a text file"
 msgstr "Ce fichier semble être un fichier texte"
 
+#: gst/playback/gstplaybin2.c:5452
 msgid "Could not create \"uridecodebin\" element."
 msgstr "Impossible de créer un élément « uridecodebin »."
 
-#, fuzzy
+#: gst/playback/gstplaybin3.c:4558
 msgid "Could not create \"uridecodebin3\" element."
-msgstr "Impossible de créer un élément « uridecodebin »."
+msgstr "Impossible de créer un élément « uridecodebin3 »."
 
+#: gst/playback/gstplaysink.c:2003
 #, c-format
 msgid "Both autovideosink and %s elements are missing."
 msgstr "Les éléments autovideosink et %s sont tous deux manquants."
 
+#: gst/playback/gstplaysink.c:2007
 msgid "The autovideosink element is missing."
 msgstr "L'élément autovideosink est manquant."
 
+#: gst/playback/gstplaysink.c:2012
 #, c-format
 msgid "Configured videosink %s is not working."
 msgstr "L’élément videosink %s configuré ne fonctionne pas."
 
+#: gst/playback/gstplaysink.c:2016
 #, c-format
 msgid "Both autovideosink and %s elements are not working."
 msgstr "Les éléments autovideosink et %s ne fonctionnent pas."
 
+#: gst/playback/gstplaysink.c:2020
 msgid "The autovideosink element is not working."
 msgstr "L’élément autovideosink ne fonctionne pas."
 
+#: gst/playback/gstplaysink.c:2525
 msgid "Custom text sink element is not usable."
 msgstr "L’élément récepteur de text personnalisé n’est pas utilisable."
 
+#: gst/playback/gstplaysink.c:2903
 msgid "No volume control found"
 msgstr "Aucun contrôle de volume trouvé"
 
+#: gst/playback/gstplaysink.c:2933
 #, c-format
 msgid "Both autoaudiosink and %s elements are missing."
 msgstr "Les éléments autoaudiosink et %s sont tous deux manquants."
 
+#: gst/playback/gstplaysink.c:2937
 msgid "The autoaudiosink element is missing."
 msgstr "L'élément autoaudiosink est manquant."
 
+#: gst/playback/gstplaysink.c:2942
 #, c-format
 msgid "Configured audiosink %s is not working."
 msgstr "L’élément autoaudiosink %s configuré ne fonctionne pas."
 
+#: gst/playback/gstplaysink.c:2946
 #, c-format
 msgid "Both autoaudiosink and %s elements are not working."
 msgstr "Les éléments autoaudiosink et %s ne fonctionnent pas."
 
+#: gst/playback/gstplaysink.c:2950
 msgid "The autoaudiosink element is not working."
 msgstr "L’élément autoaudiosink ne fonctionne pas."
 
+#: gst/playback/gstplaysink.c:3269 gst/playback/gstplaysink.c:3274
 msgid "Can't play a text file without video or visualizations."
 msgstr "Impossible de lire un fichier texte sans vidéo ou aperçus."
 
+#: gst/playback/gsturidecodebin.c:921
 #, c-format
 msgid "No decoder available for type '%s'."
 msgstr "Aucun décodeur n’est disponible pour le type « %s »."
 
+#: gst/playback/gsturidecodebin.c:1378 gst/playback/gsturisourcebin.c:1491
 msgid "No URI specified to play from."
 msgstr "Aucun URI source indiquée pour la lecture."
 
+#: gst/playback/gsturidecodebin.c:1384 gst/playback/gsturisourcebin.c:1497
 #, c-format
 msgid "Invalid URI \"%s\"."
 msgstr "URI « %s » non valide."
 
+#: gst/playback/gsturidecodebin.c:1391 gst/playback/gsturisourcebin.c:1504
 msgid "This stream type cannot be played yet."
 msgstr "Ce type de flux ne peut pas encore être lu."
 
+#: gst/playback/gsturidecodebin.c:1409 gst/playback/gsturisourcebin.c:1522
 #, c-format
 msgid "No URI handler implemented for \"%s\"."
 msgstr "Aucun gestionnaire d’URI implémenté pour « %s »."
 
+#: gst/playback/gsturidecodebin.c:2289 gst/playback/gsturisourcebin.c:2228
 msgid "Source element is invalid."
 msgstr "Élément source non valide."
 
+#: gst/tcp/gsttcpclientsink.c:216
 #, c-format
 msgid "Error while sending data to \"%s:%d\"."
 msgstr "Erreur lors de l’envoi de données vers « %s:%d »."
 
+#: gst-libs/gst/audio/gstaudiobasesrc.c:842
 msgid "Can't record audio fast enough"
 msgstr "Impossible d’enregistrer assez rapidement les données audio"
 
+#: gst-libs/gst/audio/gstaudiocdsrc.c:1625
 msgid "This CD has no audio tracks"
 msgstr "Ce CD ne contient aucune piste audio"
 
+#: gst-libs/gst/pbutils/descriptions.c:89
 msgid "ID3 tag"
 msgstr "Étiquette ID3"
 
+#: gst-libs/gst/pbutils/descriptions.c:90
+#: gst-libs/gst/pbutils/descriptions.c:91
 msgid "APE tag"
 msgstr "Étiquette APE"
 
+#: gst-libs/gst/pbutils/descriptions.c:92
 msgid "ICY internet radio"
 msgstr "Radio Internet ICY"
 
+#: gst-libs/gst/pbutils/descriptions.c:127
 msgid "Apple Lossless Audio (ALAC)"
 msgstr "ALAC (Apple Lossless Audio)"
 
+#: gst-libs/gst/pbutils/descriptions.c:143
 msgid "Free Lossless Audio Codec (FLAC)"
 msgstr "FLAC (Free Lossless Audio Codec)"
 
+#: gst-libs/gst/pbutils/descriptions.c:173
+#: gst-libs/gst/pbutils/descriptions.c:174
 msgid "Lossless True Audio (TTA)"
 msgstr "TTA (Lossless True Audio)"
 
+#: gst-libs/gst/pbutils/descriptions.c:182
 msgid "Windows Media Speech"
 msgstr "Windows Media Speech"
 
+#: gst-libs/gst/pbutils/descriptions.c:199
 msgid "CYUV Lossless"
 msgstr "CYUV sans perte"
 
+#: gst-libs/gst/pbutils/descriptions.c:203
 msgid "FFMpeg v1"
 msgstr "FFMpeg v1"
 
+#: gst-libs/gst/pbutils/descriptions.c:217
 msgid "Lossless MSZH"
 msgstr "MSZH sans perte"
 
 # http://fr.wikipedia.org/wiki/Run-length_encoding
+#: gst-libs/gst/pbutils/descriptions.c:228
 msgid "Run-length encoding"
 msgstr "Codage par plages"
 
+#: gst-libs/gst/pbutils/descriptions.c:274
 msgid "Timed Text"
 msgstr "Timed Text"
 
+#: gst-libs/gst/pbutils/descriptions.c:278
 msgid "Subtitle"
 msgstr "Sous-titre"
 
+#: gst-libs/gst/pbutils/descriptions.c:279
 msgid "MPL2 subtitle format"
 msgstr "Format de sous-titres MPL2"
 
+#: gst-libs/gst/pbutils/descriptions.c:280
 msgid "DKS subtitle format"
 msgstr "Format de sous-titres DKS"
 
+#: gst-libs/gst/pbutils/descriptions.c:281
 msgid "QTtext subtitle format"
 msgstr "Format de sous-titres QTtext"
 
+#: gst-libs/gst/pbutils/descriptions.c:282
 msgid "Sami subtitle format"
 msgstr "Format de sous-titres Sami"
 
+#: gst-libs/gst/pbutils/descriptions.c:283
 msgid "TMPlayer subtitle format"
 msgstr "Format de sous-titres TMPlayer"
 
+#: gst-libs/gst/pbutils/descriptions.c:287
 msgid "CEA 608 Closed Caption"
-msgstr ""
+msgstr "Sous-titres CEA 608"
 
+#: gst-libs/gst/pbutils/descriptions.c:288
 msgid "CEA 708 Closed Caption"
-msgstr ""
+msgstr "Sous-titres CEA 708"
 
+#: gst-libs/gst/pbutils/descriptions.c:289
 msgid "Kate subtitle format"
 msgstr "Format de sous-titres Kate"
 
+#: gst-libs/gst/pbutils/descriptions.c:290
 msgid "WebVTT subtitle format"
 msgstr "Format de sous-titres WebVTT"
 
+#: gst-libs/gst/pbutils/descriptions.c:455
+#: gst-libs/gst/pbutils/descriptions.c:458
+#: gst-libs/gst/pbutils/descriptions.c:508
 msgid "Uncompressed video"
 msgstr "Video non compressée"
 
+#: gst-libs/gst/pbutils/descriptions.c:463
 msgid "Uncompressed gray"
 msgstr "Niveaux de gris non compressés"
 
+#: gst-libs/gst/pbutils/descriptions.c:486
 #, c-format
 msgid "Uncompressed packed YUV %s"
 msgstr "YUV empaqueté %s non compressé"
 
+#: gst-libs/gst/pbutils/descriptions.c:488
 #, c-format
 msgid "Uncompressed semi-planar YUV %s"
 msgstr "YUV semi-planaire %s non compressé"
 
+#: gst-libs/gst/pbutils/descriptions.c:490
 #, c-format
 msgid "Uncompressed planar YUV %s"
 msgstr "YUV planaire %s non compressé"
 
+#: gst-libs/gst/pbutils/descriptions.c:501
 #, c-format
 msgid "Uncompressed palettized %d-bit %s"
 msgstr "%2$s %1$d bits en palette non compressé"
 
+#: gst-libs/gst/pbutils/descriptions.c:504
 #, c-format
 msgid "Uncompressed %d-bit %s"
 msgstr "%2$s %1$d bits non compressé"
 
+#: gst-libs/gst/pbutils/descriptions.c:586
 #, c-format
 msgid "DivX MPEG-4 Version %d"
 msgstr "MPEG-4 DivX version %d"
 
+#: gst-libs/gst/pbutils/descriptions.c:834
 msgid "Uncompressed audio"
 msgstr "Audio non compressé"
 
+#: gst-libs/gst/pbutils/descriptions.c:840
 #, c-format
 msgid "Raw %d-bit %s audio"
 msgstr "Audio brut %2$s %1$d bits"
 
+#: gst-libs/gst/pbutils/descriptions.c:942
 msgid "Audio CD source"
 msgstr "Source CD audio"
 
+#: gst-libs/gst/pbutils/descriptions.c:945
 msgid "DVD source"
 msgstr "Source DVD"
 
+#: gst-libs/gst/pbutils/descriptions.c:948
 msgid "Real Time Streaming Protocol (RTSP) source"
 msgstr "Source RTSP (Real Time Streaming Protocol)"
 
+#: gst-libs/gst/pbutils/descriptions.c:952
 msgid "Microsoft Media Server (MMS) protocol source"
 msgstr "Source protocole MMS (Microsoft Media Server)"
 
+#: gst-libs/gst/pbutils/descriptions.c:960
 #, c-format
 msgid "%s protocol source"
 msgstr "Source protocole %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1034
 #, c-format
 msgid "%s video RTP depayloader"
 msgstr "Depayloader RTP vidéo %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1036
 #, c-format
 msgid "%s audio RTP depayloader"
 msgstr "Depayloader RTP audio %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1038
 #, c-format
 msgid "%s RTP depayloader"
 msgstr "Depayloader RTP %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1045
 #, c-format
 msgid "%s demuxer"
 msgstr "Démultiplexeur %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1047
 #, c-format
 msgid "%s decoder"
 msgstr "Décodeur %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1086
 #, c-format
 msgid "%s video RTP payloader"
 msgstr "Payloader RTP vidéo %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1088
 #, c-format
 msgid "%s audio RTP payloader"
 msgstr "Payloader RTP audio %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1090
 #, c-format
 msgid "%s RTP payloader"
 msgstr "Payloader RTP %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1097
 #, c-format
 msgid "%s muxer"
 msgstr "Multiplexeur %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1099
 #, c-format
 msgid "%s encoder"
 msgstr "Encodeur %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1133
 #, c-format
 msgid "GStreamer element %s"
 msgstr "Élément GStreamer %s"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:558
 msgid "Unknown source element"
 msgstr "Élément source inconnu"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:561
 msgid "Unknown sink element"
 msgstr "Élément d’entrée inconnu"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:564
 msgid "Unknown element"
 msgstr "Élément inconnu"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:567
 msgid "Unknown decoder element"
 msgstr "Élément décodeur inconnu"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:570
 msgid "Unknown encoder element"
 msgstr "Élément codeur inconnu"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:575
 msgid "Plugin or element of unknown type"
 msgstr "Greffon ou élément de type inconnu"
 
+#: gst-libs/gst/tag/gsttagdemux.c:1243
 msgid "Failed to read tag: not enough data"
 msgstr "Échec de lecture de l’étiquette : données insuffisantes"
 
+#: gst-libs/gst/tag/tags.c:77
 msgid "track ID"
 msgstr "identifiant de piste"
 
+#: gst-libs/gst/tag/tags.c:77
 msgid "MusicBrainz track ID"
 msgstr "identifiant de piste MusicBrainz"
 
+#: gst-libs/gst/tag/tags.c:79
 msgid "artist ID"
 msgstr "identifiant d’artiste"
 
+#: gst-libs/gst/tag/tags.c:79
 msgid "MusicBrainz artist ID"
 msgstr "identifiant d’artiste MusicBrainz"
 
+#: gst-libs/gst/tag/tags.c:81
 msgid "album ID"
 msgstr "identifiant d’album"
 
+#: gst-libs/gst/tag/tags.c:81
 msgid "MusicBrainz album ID"
 msgstr "identifiant d’album MusicBrainz"
 
+#: gst-libs/gst/tag/tags.c:84
 msgid "album artist ID"
 msgstr "identifiant d’artiste de l’album"
 
+#: gst-libs/gst/tag/tags.c:84
 msgid "MusicBrainz album artist ID"
 msgstr "identifiant d’artiste de l’album MusicBrainz"
 
+#: gst-libs/gst/tag/tags.c:86
 msgid "track TRM ID"
 msgstr "identifiant TRM de piste"
 
+#: gst-libs/gst/tag/tags.c:86
 msgid "MusicBrainz TRM ID"
 msgstr "identifiant TRM MusicBrainz"
 
+#: gst-libs/gst/tag/tags.c:108
 msgid "capturing shutter speed"
 msgstr "vitesse d’obturation de la capture"
 
+#: gst-libs/gst/tag/tags.c:109
 msgid "Shutter speed used when capturing an image, in seconds"
 msgstr "Vitesse d’obturation utilisée lors de la capture de l’image (en s)"
 
 # http://www.blog-couleur.com/?Qu-est-ce-que-l-ouverture-en
+#: gst-libs/gst/tag/tags.c:112
 msgid "capturing focal ratio"
 msgstr "Focal de capture"
 
+#: gst-libs/gst/tag/tags.c:113
 msgid "Focal ratio (f-number) used when capturing the image"
 msgstr "Focal (nombre décimal) utilisée lors de la capture de l’image"
 
+#: gst-libs/gst/tag/tags.c:116
 msgid "capturing focal length"
 msgstr "distance focale de la capture"
 
+#: gst-libs/gst/tag/tags.c:117
 msgid "Focal length of the lens used capturing the image, in mm"
-msgstr ""
-"Distance focale de l’optique utilisée pour la capture de l’image (en mm)"
+msgstr "Distance focale de l’optique utilisée pour la capture de l’image (en mm)"
 
+#: gst-libs/gst/tag/tags.c:121
 msgid "capturing 35 mm equivalent focal length"
 msgstr "distance focale de la capture équivalente à 35 mm"
 
-msgid ""
-"35 mm equivalent focal length of the lens used capturing the image, in mm"
-msgstr ""
-"Distance focale de l’optique équivalente à 35 mm, utilisée pour la capture "
-"de l’image (en mm)"
+#: gst-libs/gst/tag/tags.c:122
+msgid "35 mm equivalent focal length of the lens used capturing the image, in mm"
+msgstr "Distance focale de l’optique équivalente à 35 mm, utilisée pour la capture de l’image (en mm)"
 
+#: gst-libs/gst/tag/tags.c:126
 msgid "capturing digital zoom ratio"
 msgstr "valeur du zoom numérique de la capture"
 
+#: gst-libs/gst/tag/tags.c:127
 msgid "Digital zoom ratio used when capturing an image"
 msgstr "Valeur du zoom numérique utilisé lors de la capture de l’image"
 
+#: gst-libs/gst/tag/tags.c:130
 msgid "capturing iso speed"
 msgstr "sensibilité ISO de la capture"
 
+#: gst-libs/gst/tag/tags.c:131
 msgid "The ISO speed used when capturing an image"
 msgstr "La sensibilité ISO utilisée lors de la capture de l’image"
 
+#: gst-libs/gst/tag/tags.c:134
 msgid "capturing exposure program"
 msgstr "programme d’exposition de la capture"
 
+#: gst-libs/gst/tag/tags.c:135
 msgid "The exposure program used when capturing an image"
 msgstr "Le programme d’exposition utilisé lors de la capture de l’image"
 
+#: gst-libs/gst/tag/tags.c:138
 msgid "capturing exposure mode"
 msgstr "mode d’exposition de la capture"
 
+#: gst-libs/gst/tag/tags.c:139
 msgid "The exposure mode used when capturing an image"
 msgstr "Le mode d'exposition utilisé lors de la capture de l’image"
 
+#: gst-libs/gst/tag/tags.c:142
 msgid "capturing exposure compensation"
 msgstr "compensation d’exposition de la capture"
 
+#: gst-libs/gst/tag/tags.c:143
 msgid "The exposure compensation used when capturing an image"
 msgstr "La compensation d'exposition utilisée lors de la capture de l’image"
 
+#: gst-libs/gst/tag/tags.c:146
 msgid "capturing scene capture type"
 msgstr "type de mode scène de la capture"
 
+#: gst-libs/gst/tag/tags.c:147
 msgid "The scene capture mode used when capturing an image"
 msgstr "Le mode scène utilisé lors de la capture de l’image"
 
+#: gst-libs/gst/tag/tags.c:150
 msgid "capturing gain adjustment"
 msgstr "ajustement du gain de la capture"
 
+#: gst-libs/gst/tag/tags.c:151
 msgid "The overall gain adjustment applied on an image"
 msgstr "L'ajustement général du gain appliqué à une image"
 
+#: gst-libs/gst/tag/tags.c:154
 msgid "capturing white balance"
 msgstr "balance des blancs de la capture"
 
+#: gst-libs/gst/tag/tags.c:155
 msgid "The white balance mode set when capturing an image"
 msgstr "Le mode de balance des blancs défini lors de la capture d’une image"
 
+#: gst-libs/gst/tag/tags.c:158
 msgid "capturing contrast"
 msgstr "contraste de la capture"
 
+#: gst-libs/gst/tag/tags.c:159
 msgid "The direction of contrast processing applied when capturing an image"
-msgstr ""
-"La direction du traitement de contraste appliqué lors de la capture d’une "
-"image"
+msgstr "La direction du traitement de contraste appliqué lors de la capture d’une image"
 
+#: gst-libs/gst/tag/tags.c:163
 msgid "capturing saturation"
 msgstr "saturation de la capture"
 
+#: gst-libs/gst/tag/tags.c:164
 msgid "The direction of saturation processing applied when capturing an image"
-msgstr ""
-"La direction du traitement de saturation appliqué lors de la capture d’une "
-"image"
+msgstr "La direction du traitement de saturation appliqué lors de la capture d’une image"
 
+#: gst-libs/gst/tag/tags.c:168
 msgid "capturing sharpness"
 msgstr "netteté de la capture"
 
+#: gst-libs/gst/tag/tags.c:169
 msgid "The direction of sharpness processing applied when capturing an image"
-msgstr ""
-"La direction du traitement de netteté appliqué lors de la capture d’une image"
+msgstr "La direction du traitement de netteté appliqué lors de la capture d’une image"
 
+#: gst-libs/gst/tag/tags.c:173
 msgid "capturing flash fired"
 msgstr "flash utilisé pour la capture"
 
+#: gst-libs/gst/tag/tags.c:174
 msgid "If the flash fired while capturing an image"
 msgstr "Indique si le flash a été utilisé pour capturer une image"
 
+#: gst-libs/gst/tag/tags.c:177
 msgid "capturing flash mode"
 msgstr "mode de flash de la capture"
 
+#: gst-libs/gst/tag/tags.c:178
 msgid "The selected flash mode while capturing an image"
 msgstr "Le mode de flash sélectionné lors de la capture d’une image"
 
+#: gst-libs/gst/tag/tags.c:181
 msgid "capturing metering mode"
 msgstr "mode de mesure de la capture"
 
-msgid ""
-"The metering mode used while determining exposure for capturing an image"
-msgstr ""
-"Le mode de mesure utilisé lors de l’évaluation de l’exposition pour la "
-"capture d’une image"
+#: gst-libs/gst/tag/tags.c:182
+msgid "The metering mode used while determining exposure for capturing an image"
+msgstr "Le mode de mesure utilisé lors de l’évaluation de l’exposition pour la capture d’une image"
 
+#: gst-libs/gst/tag/tags.c:186
 msgid "capturing source"
 msgstr "source de capture"
 
+#: gst-libs/gst/tag/tags.c:187
 msgid "The source or type of device used for the capture"
 msgstr "La source ou le type d’appareil utilisé pour la capture"
 
+#: gst-libs/gst/tag/tags.c:190
 msgid "image horizontal ppi"
 msgstr "ppp horizontal de l'image"
 
+#: gst-libs/gst/tag/tags.c:191
 msgid "Media (image/video) intended horizontal pixel density in ppi"
-msgstr ""
-"Densité de pixels horizontale annoncée par le média (image/vidéo), en points "
-"par pouce"
+msgstr "Densité de pixels horizontale annoncée par le média (image/vidéo), en points par pouce"
 
+#: gst-libs/gst/tag/tags.c:194
 msgid "image vertical ppi"
 msgstr "ppp vertical de l'image"
 
+#: gst-libs/gst/tag/tags.c:195
 msgid "Media (image/video) intended vertical pixel density in ppi"
-msgstr ""
-"Densité de pixels verticale annoncée par le média (image/vidéo), en points "
-"par pouce"
+msgstr "Densité de pixels verticale annoncée par le média (image/vidéo), en points par pouce"
 
+#: gst-libs/gst/tag/tags.c:198
 msgid "ID3v2 frame"
 msgstr "Frame ID3v2"
 
+#: gst-libs/gst/tag/tags.c:198
 msgid "unparsed id3v2 tag frame"
 msgstr "frame tag id3v2 non analysé"
 
+#: gst-libs/gst/tag/tags.c:202
 msgid "musical-key"
 msgstr "Clef-musicale"
 
+#: gst-libs/gst/tag/tags.c:202
 msgid "Initial key in which the sound starts"
 msgstr "Clef initiale dans laquelle démarre le son"
 
+#: tools/gst-device-monitor.c:260 tools/gst-play.c:1444
 msgid "Print version information and exit"
 msgstr "Affiche la version et quit"
 
-msgid ""
-"Don't exit after showing the initial device list, but wait for devices to "
-"added/removed."
-msgstr ""
-"Ne pas quitter après l’affichage de la liste initiale des périphèriques, "
-"mais attendre l’ajout ou la suppression de périphèriques."
+#: tools/gst-device-monitor.c:262
+msgid "Don't exit after showing the initial device list, but wait for devices to added/removed."
+msgstr "Ne pas quitter après l’affichage de la liste initiale des périphèriques, mais attendre l’ajout ou la suppression de périphèriques."
 
+#: tools/gst-play.c:310
 #, c-format
 msgid "Volume: %.0f%%"
 msgstr "Volume : %.0f%%"
 
+#: tools/gst-play.c:349
 msgid "Buffering..."
 msgstr "Mise en cache…"
 
+#: tools/gst-play.c:370
 msgid "Clock lost, selecting a new one\n"
 msgstr "Horloge perdu, sélection d’une nouvelle\n"
 
+#: tools/gst-play.c:400 tools/gst-play.c:446 tools/gst-play.c:883
+#: tools/gst-play.c:1347
 msgid "Reached end of play list."
 msgstr "Liste de lecture terminée."
 
+#: tools/gst-play.c:613
 msgid "Paused"
 msgstr "En pause"
 
+#: tools/gst-play.c:671
 #, c-format
 msgid "Now playing %s\n"
 msgstr "Lecture en cours de %s\n"
 
+#: tools/gst-play.c:734
 #, c-format
 msgid "About to finish, preparing next title: %s"
 msgstr "Fin de piste, préparation du titre suivant : %s"
 
+#: tools/gst-play.c:979
 #, c-format
 msgid "Playback rate: %.2f"
 msgstr "Vitesse de lecture : %.2f"
 
+#: tools/gst-play.c:983
 #, c-format
 msgid "Could not change playback rate to %.2f"
 msgstr "Impossible de modifier la vitesse de lecture à %.2f"
 
+#: tools/gst-play.c:1287
 msgid "space"
 msgstr "espace"
 
+#: tools/gst-play.c:1287
 msgid "pause/unpause"
 msgstr "pause / lecture"
 
+#: tools/gst-play.c:1288
 msgid "q or ESC"
 msgstr "q ou ECHAP"
 
+#: tools/gst-play.c:1288
 msgid "quit"
 msgstr "quitter"
 
+#: tools/gst-play.c:1289
 msgid "> or n"
 msgstr "> ou n"
 
+#: tools/gst-play.c:1289
 msgid "play next"
 msgstr "lire la suivante"
 
+#: tools/gst-play.c:1290
 msgid "< or b"
 msgstr "< ou b"
 
+#: tools/gst-play.c:1290
 msgid "play previous"
 msgstr "lire la précédente"
 
+#: tools/gst-play.c:1291
 msgid "seek forward"
 msgstr "chercher en avant"
 
+#: tools/gst-play.c:1292
 msgid "seek backward"
 msgstr "chercher en arrière"
 
+#: tools/gst-play.c:1293
 msgid "volume up"
 msgstr "augmenter le volume"
 
+#: tools/gst-play.c:1294
 msgid "volume down"
 msgstr "baisser le volume"
 
+#: tools/gst-play.c:1295
 msgid "increase playback rate"
 msgstr "augmenter la vitesse de lecture"
 
+#: tools/gst-play.c:1296
 msgid "decrease playback rate"
 msgstr "baisser la vitesse de lecture"
 
+#: tools/gst-play.c:1297
 msgid "change playback direction"
 msgstr "modifier le sens de lecture"
 
+#: tools/gst-play.c:1298
 msgid "enable/disable trick modes"
 msgstr "activer / désactiver les astuces"
 
+#: tools/gst-play.c:1299
 msgid "change audio track"
 msgstr "modifier la piste audio"
 
+#: tools/gst-play.c:1300
 msgid "change video track"
 msgstr "modifier la piste vidéo"
 
+#: tools/gst-play.c:1301
 msgid "change subtitle track"
 msgstr "modifier la piste de sous-titre"
 
+#: tools/gst-play.c:1302
 msgid "seek to beginning"
 msgstr "chercher depuis le début"
 
+#: tools/gst-play.c:1303
 msgid "show keyboard shortcuts"
 msgstr "afficher les raccourcis clavier"
 
+#: tools/gst-play.c:1306
 msgid "Interactive mode - keyboard controls:"
 msgstr "Mode interactif — commandes clavier :"
 
+#: tools/gst-play.c:1439
 msgid "Output status information and property notifications"
 msgstr "Afficher des informations sur l’état et les notifications de propriété"
 
+#: tools/gst-play.c:1441
 msgid "Control playback behaviour setting playbin 'flags' property"
-msgstr ""
-"Contrôler le comportement de lecture en modifiant la pripriété du "
-"« drapeau » playbin"
+msgstr "Contrôler le comportement de lecture en modifiant la pripriété du « drapeau » playbin"
 
+#: tools/gst-play.c:1446
 msgid "Video sink to use (default is autovideosink)"
 msgstr "Récepteur vidéo à utiliser (autovideosink par défaut)"
 
+#: tools/gst-play.c:1448
 msgid "Audio sink to use (default is autoaudiosink)"
 msgstr "Récepteur audio à utiliser (autoaudiosink par défaut)"
 
+#: tools/gst-play.c:1450
 msgid "Enable gapless playback"
 msgstr "Activer la lecture sans blanc"
 
+#: tools/gst-play.c:1452
 msgid "Shuffle playlist"
 msgstr "Mélanger les morceaux"
 
+#: tools/gst-play.c:1455
 msgid "Disable interactive control via the keyboard"
 msgstr "Désactiver les commandes interactives au clavier"
 
+#: tools/gst-play.c:1457
 msgid "Volume"
 msgstr "Volume"
 
+#: tools/gst-play.c:1459
 msgid "Playlist file containing input media files"
 msgstr "Fichier de lecture contenant des fichiers de media d’entrée"
 
+#: tools/gst-play.c:1461
 msgid "Do not print any output (apart from errors)"
 msgstr "Ne pas afficher de message en sortie (sauf les erreurs)"
 
+#: tools/gst-play.c:1463
 msgid "Use playbin3 pipeline"
-msgstr ""
+msgstr "Utiliser un pipeline playbin3"
 
+#: tools/gst-play.c:1464
 msgid "(default varies depending on 'USE_PLAYBIN' env variable)"
-msgstr ""
+msgstr "(la valeur par défaut dépend de la variable d'environnement USE_PLAYBIN)"
 
+#: tools/gst-play.c:1468
+msgid "Keep showing the last frame on EOS until quit or playlist change command (gapless is ignored)"
+msgstr "Continuer à afficher la dernière frame après la fin de lecture jusqu'à la fin de programme ou une nouvelle commande de lecture (la lecture sans blanc est ignorée)"
+
+#: tools/gst-play.c:1546
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr "Usage : %s FICHIER1|URI1 [FICHIER2|URI2] [FICHIER3|URI3] …"
 
+#: tools/gst-play.c:1550
 msgid "You must provide at least one filename or URI to play."
 msgstr "Vous devez fournir au moins un nom de fichier ou une URI à lire."
 
+#: tools/gst-play.c:1590
 msgid "Press 'k' to see a list of keyboard shortcuts.\n"
 msgstr "Pressez k pour voir la liste des raccourcis clavier.\n"
-
-#~ msgid "Could not create \"decodebin3\" element."
-#~ msgstr "Impossible de créer un élément « decodebin3 »."
-
-#~ msgid "Could not create \"urisourcebin\" element."
-#~ msgstr "Impossible de créer un élément « urisourcebin »."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Erreur du flux de données interne."
index eb443c0..aff0732 100644 (file)
@@ -9,8 +9,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gst-plugins-base-1.15.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:43+0000\n"
-"PO-Revision-Date: 2019-03-03 13:33-0800\n"
+"POT-Creation-Date: 2019-01-17 01:50+0000\n"
+"PO-Revision-Date: 2019-05-31 17:42-0700\n"
 "Last-Translator: Božidar Putanec <bozidarp@yahoo.com>\n"
 "Language-Team: Croatian <lokalizacija@linux.hr>\n"
 "Language: hr\n"
@@ -18,683 +18,880 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 "X-Generator: Poedit 2.2.1\n"
 
+#: ext/alsa/gstalsasink.c:579
 msgid "Could not open device for playback in mono mode."
-msgstr "Uređaj za reprodukciju nije moguće otvoriti u mono mȏdu."
+msgstr "Uređaj za reprodukciju nije moguće otvoriti u mono načinu."
 
+#: ext/alsa/gstalsasink.c:581
 msgid "Could not open device for playback in stereo mode."
-msgstr "Uređaj za reprodukciju nije moguće otvoriti u stereo mȏdu."
+msgstr "Uređaj za reprodukciju nije moguće otvoriti u stereo načinu."
 
+#: ext/alsa/gstalsasink.c:585
 #, c-format
 msgid "Could not open device for playback in %d-channel mode."
-msgstr "Uređaj za reprodukciju nije moguće otvoriti u %d-kanalnom mȏdu."
+msgstr "Uređaj za reprodukciju nije moguće otvoriti u %d-kanalnom načinu."
 
-msgid ""
-"Could not open audio device for playback. Device is being used by another "
-"application."
-msgstr ""
-"Audiouređaj nije moguće otvoriti za reprodukciju jer ga koristi neka druga "
-"aplikacija."
+#: ext/alsa/gstalsasink.c:858
+msgid "Could not open audio device for playback. Device is being used by another application."
+msgstr "Audiouređaj nije moguće otvoriti za reprodukciju jer ga koristi neka druga aplikacija."
 
+#: ext/alsa/gstalsasink.c:863
 msgid "Could not open audio device for playback."
 msgstr "Audiouređaj nije moguće otvoriti za reprodukciju."
 
+#: ext/alsa/gstalsasink.c:1076
 msgid "Error outputting to audio device. The device has been disconnected."
 msgstr "Greška na ulazu audiouređaja. Uređaj nije spojen."
 
+#: ext/alsa/gstalsasrc.c:444
 msgid "Could not open device for recording in mono mode."
-msgstr "Uređaj za snimanje nije moguće otvoriti u mono mȏdu."
+msgstr "Uređaj za snimanje nije moguće otvoriti u mono načinu."
 
+#: ext/alsa/gstalsasrc.c:446
 msgid "Could not open device for recording in stereo mode."
-msgstr "Uređaj za snimanje nije moguće otvoriti u stereo mȏdu."
+msgstr "Uređaj za snimanje nije moguće otvoriti u stereo načinu."
 
+#: ext/alsa/gstalsasrc.c:450
 #, c-format
 msgid "Could not open device for recording in %d-channel mode"
-msgstr "Uređaj za snimanje nije moguće otvoriti u %d-kanalnom mȏdu"
+msgstr "Uređaj za snimanje nije moguće otvoriti u %d-kanalnom načinu"
 
-msgid ""
-"Could not open audio device for recording. Device is being used by another "
-"application."
-msgstr ""
-"Uređaj nije moguće otvoriti za snimanje. Uređaj trenutačno koristi neka "
-"druga aplikacija."
+#: ext/alsa/gstalsasrc.c:741
+msgid "Could not open audio device for recording. Device is being used by another application."
+msgstr "Uređaj nije moguće otvoriti za snimanje. Uređaj trenutačno koristi neka druga aplikacija."
 
+#: ext/alsa/gstalsasrc.c:746
 msgid "Could not open audio device for recording."
 msgstr "Audiouređaj nije moguće otvoriti za snimanje."
 
+#: ext/alsa/gstalsasrc.c:992
 msgid "Error recording from audio device. The device has been disconnected."
 msgstr "Greška pri snimanju iz audiouređaja. Uređaj nije spojen."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:277 ext/cdparanoia/gstcdparanoiasrc.c:283
 msgid "Could not open CD device for reading."
 msgstr "CD uređaj nije moguće otvoriti za čitanje."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:409
 msgid "Could not seek CD."
 msgstr "Nije moguće pozicioniranje (skočiti na poziciju) na CD-u."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:417
 msgid "Could not read CD."
 msgstr "CD nije moguće čitati."
 
+#: ext/gl/gstgltestsrc.c:491
 msgid "failed to draw pattern"
 msgstr "nije uspjelo iscrtati uzorak"
 
+#: ext/gl/gstgltestsrc.c:492
 msgid "A GL error occurred"
 msgstr "Dogodila se GL greška"
 
+#: ext/gl/gstgltestsrc.c:498
 msgid "format wasn't negotiated before get function"
 msgstr "format nije dogovoren prije pozivanja funkcije"
 
+#: gst/encoding/gstencodebin.c:1636 gst/playback/gstplaybin2.c:3399
+#: gst/playback/gstplaysink.c:1522 gst/playback/gstplaysink.c:1535
+#: gst/playback/gstplaysink.c:1872 gst/playback/gstplaysink.c:1904
+#: gst/playback/gstplaysink.c:2488 gst/playback/gstplaysink.c:2537
+#: gst/playback/gstplaysink.c:2552 gst/playback/gstplaysink.c:2577
+#: gst/playback/gstplaysink.c:2609 gst/playback/gstplaysink.c:2757
+#: gst/playback/gstplaysink.c:2788 gst/playback/gstplaysink.c:3166
+#: gst/playback/gstplaysink.c:3175 gst/playback/gstplaysink.c:3184
+#: gst/playback/gstplaysink.c:3193 gst/playback/gstplaysink.c:3606
+#: gst/playback/gstplaysink.c:4526 gst/playback/gstplaysinkconvertbin.c:97
+#: gst/playback/gstplaysinkconvertbin.c:117
+#: gst/playback/gsturidecodebin.c:1472 gst/playback/gsturisourcebin.c:1596
 #, c-format
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Nema elementa „%s“ -- provjerite vašu GStreamer instalaciju."
 
+#: gst/playback/gstdecodebin2.c:1873 gst/playback/gstparsebin.c:1553
 msgid "Could not determine type of stream"
 msgstr "Nije moguće odrediti vrstu protoka"
 
+#: gst/playback/gstdecodebin2.c:2851 gst/playback/gstparsebin.c:2385
 msgid "This appears to be a text file"
 msgstr "Ovo izgleda kao tekstualna datoteka"
 
+#: gst/playback/gstplaybin2.c:5452
 msgid "Could not create \"uridecodebin\" element."
 msgstr "Nije moguće stvoriti element „uridecodebin“."
 
+#: gst/playback/gstplaybin3.c:4558
 msgid "Could not create \"uridecodebin3\" element."
 msgstr "Nije moguće stvoriti element „uridecodebin3“."
 
+#: gst/playback/gstplaysink.c:2003
 #, c-format
 msgid "Both autovideosink and %s elements are missing."
 msgstr "Nema ni elementa autovideosink ni elementa %s."
 
+#: gst/playback/gstplaysink.c:2007
 msgid "The autovideosink element is missing."
 msgstr "Nema elementa autovideosink."
 
+#: gst/playback/gstplaysink.c:2012
 #, c-format
 msgid "Configured videosink %s is not working."
 msgstr "Konfigurirani videosink %s ne radi."
 
+#: gst/playback/gstplaysink.c:2016
 #, c-format
 msgid "Both autovideosink and %s elements are not working."
 msgstr "Ne radi ni element autovideosink ni element %s."
 
+#: gst/playback/gstplaysink.c:2020
 msgid "The autovideosink element is not working."
 msgstr "Element autovideosink ne radi."
 
+#: gst/playback/gstplaysink.c:2525
 msgid "Custom text sink element is not usable."
 msgstr "Prilagođeni tekstualni element-ponor nije upotrebljivi."
 
+#: gst/playback/gstplaysink.c:2903
 msgid "No volume control found"
 msgstr "Nema regulatora glasnoće"
 
+#: gst/playback/gstplaysink.c:2933
 #, c-format
 msgid "Both autoaudiosink and %s elements are missing."
 msgstr "Nema ni elementa autoaudiosink ni elementa %s."
 
+#: gst/playback/gstplaysink.c:2937
 msgid "The autoaudiosink element is missing."
 msgstr "Nema elementa autoaudiosink."
 
+#: gst/playback/gstplaysink.c:2942
 #, c-format
 msgid "Configured audiosink %s is not working."
 msgstr "Konfigurirani audiosink %s ne radi."
 
+#: gst/playback/gstplaysink.c:2946
 #, c-format
 msgid "Both autoaudiosink and %s elements are not working."
 msgstr "Ne radi ni element autoaudiosink ni element %s."
 
+#: gst/playback/gstplaysink.c:2950
 msgid "The autoaudiosink element is not working."
 msgstr "Element autoaudiosink ne radi."
 
+#: gst/playback/gstplaysink.c:3269 gst/playback/gstplaysink.c:3274
 msgid "Can't play a text file without video or visualizations."
-msgstr ""
-"Nije moguće reproducirati tekstualnu datoteku bez videa ili vizualizacije."
+msgstr "Nije moguće reproducirati tekstualnu datoteku bez videa ili vizualizacije."
 
+#: gst/playback/gsturidecodebin.c:921
 #, c-format
 msgid "No decoder available for type '%s'."
 msgstr "Dekoder za vrstu „%s“ nije na raspolaganju."
 
+#: gst/playback/gsturidecodebin.c:1378 gst/playback/gsturisourcebin.c:1490
 msgid "No URI specified to play from."
 msgstr "Nije naveden URI izvor za reprodukciju."
 
+#: gst/playback/gsturidecodebin.c:1384 gst/playback/gsturisourcebin.c:1496
 #, c-format
 msgid "Invalid URI \"%s\"."
 msgstr "URI adresa „%s“ nije valjana."
 
+#: gst/playback/gsturidecodebin.c:1391 gst/playback/gsturisourcebin.c:1503
 msgid "This stream type cannot be played yet."
 msgstr "Ova vrsta protoka još se ne može reproducirati."
 
+#: gst/playback/gsturidecodebin.c:1409 gst/playback/gsturisourcebin.c:1521
 #, c-format
 msgid "No URI handler implemented for \"%s\"."
 msgstr "Nijedan URI rukovatelj nije realiziran za „%s“."
 
+#: gst/playback/gsturidecodebin.c:2280 gst/playback/gsturisourcebin.c:2227
 msgid "Source element is invalid."
 msgstr "Element izvor nije valjan."
 
+#: gst/tcp/gsttcpclientsink.c:216
 #, c-format
 msgid "Error while sending data to \"%s:%d\"."
 msgstr "Greška pri slanju podataka u „%s:%d“."
 
+#: gst-libs/gst/audio/gstaudiobasesrc.c:842
 msgid "Can't record audio fast enough"
 msgstr "Audio se ne može dovoljno brzo snimati"
 
+#: gst-libs/gst/audio/gstaudiocdsrc.c:1625
 msgid "This CD has no audio tracks"
 msgstr "Ovaj CD nema audio zapisa"
 
+#: gst-libs/gst/pbutils/descriptions.c:89
 msgid "ID3 tag"
 msgstr "ID3 tag"
 
+#: gst-libs/gst/pbutils/descriptions.c:90
+#: gst-libs/gst/pbutils/descriptions.c:91
 msgid "APE tag"
 msgstr "APE tag"
 
+#: gst-libs/gst/pbutils/descriptions.c:92
 msgid "ICY internet radio"
 msgstr "ICY internetski radio"
 
+#: gst-libs/gst/pbutils/descriptions.c:127
 msgid "Apple Lossless Audio (ALAC)"
 msgstr "Apple Lossless Audio (ALAC)"
 
+#: gst-libs/gst/pbutils/descriptions.c:143
 msgid "Free Lossless Audio Codec (FLAC)"
 msgstr "Free Lossless Audio Codec (FLAC)"
 
+#: gst-libs/gst/pbutils/descriptions.c:173
+#: gst-libs/gst/pbutils/descriptions.c:174
 msgid "Lossless True Audio (TTA)"
 msgstr "Lossless True Audio (TTA)"
 
+#: gst-libs/gst/pbutils/descriptions.c:182
 msgid "Windows Media Speech"
 msgstr "Windows Media Speech"
 
+#: gst-libs/gst/pbutils/descriptions.c:198
 msgid "CYUV Lossless"
 msgstr "CYUV Lossless"
 
+#: gst-libs/gst/pbutils/descriptions.c:202
 msgid "FFMpeg v1"
 msgstr "FFMpeg v1"
 
+#: gst-libs/gst/pbutils/descriptions.c:216
 msgid "Lossless MSZH"
 msgstr "Lossless MSZH"
 
+#: gst-libs/gst/pbutils/descriptions.c:227
 msgid "Run-length encoding"
 msgstr "RLE (Run-length encoding)"
 
 # https://en.wikipedia.org/wiki/Timed_text
+#: gst-libs/gst/pbutils/descriptions.c:273
 msgid "Timed Text"
 msgstr "Timed Text (vremenski napasani tekst)"
 
+#: gst-libs/gst/pbutils/descriptions.c:277
 msgid "Subtitle"
 msgstr "Podnaslov"
 
+#: gst-libs/gst/pbutils/descriptions.c:278
 msgid "MPL2 subtitle format"
 msgstr "Format podnaslova MPL2"
 
+#: gst-libs/gst/pbutils/descriptions.c:279
 msgid "DKS subtitle format"
 msgstr "Format podnaslova DKS"
 
+#: gst-libs/gst/pbutils/descriptions.c:280
 msgid "QTtext subtitle format"
 msgstr "Format podnaslova QText"
 
+#: gst-libs/gst/pbutils/descriptions.c:281
 msgid "Sami subtitle format"
 msgstr "Format podnaslova Sami"
 
+#: gst-libs/gst/pbutils/descriptions.c:282
 msgid "TMPlayer subtitle format"
 msgstr "Format podnaslova TMPlayer"
 
+#: gst-libs/gst/pbutils/descriptions.c:286
 msgid "CEA 608 Closed Caption"
 msgstr "CEA 608 Closed Caption (titlovanje)"
 
+#: gst-libs/gst/pbutils/descriptions.c:287
 msgid "CEA 708 Closed Caption"
 msgstr "CEA 708 Closed Caption (titlovanje)"
 
+#: gst-libs/gst/pbutils/descriptions.c:288
 msgid "Kate subtitle format"
 msgstr "Format naslova Kate"
 
+#: gst-libs/gst/pbutils/descriptions.c:289
 msgid "WebVTT subtitle format"
 msgstr "Format naslova WebVTT"
 
+#: gst-libs/gst/pbutils/descriptions.c:454
+#: gst-libs/gst/pbutils/descriptions.c:457
+#: gst-libs/gst/pbutils/descriptions.c:507
 msgid "Uncompressed video"
 msgstr "Nekomprimirani video"
 
+#: gst-libs/gst/pbutils/descriptions.c:462
 msgid "Uncompressed gray"
 msgstr "Nekomprimirano sivilo"
 
+#: gst-libs/gst/pbutils/descriptions.c:485
 #, c-format
 msgid "Uncompressed packed YUV %s"
 msgstr "Nekomprimirani pakirani YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:487
 #, c-format
 msgid "Uncompressed semi-planar YUV %s"
 msgstr "Nekomprimirani polu-planarni YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:489
 #, c-format
 msgid "Uncompressed planar YUV %s"
 msgstr "Nekomprimirani planarni YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:500
 #, c-format
 msgid "Uncompressed palettized %d-bit %s"
 msgstr "Nekomprimirani paletizirani %d-bitni %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:503
 #, c-format
 msgid "Uncompressed %d-bit %s"
 msgstr "Nekomprimirani %d-bitni %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:585
 #, c-format
 msgid "DivX MPEG-4 Version %d"
 msgstr "DivX MPEG-4 inačica %d"
 
+#: gst-libs/gst/pbutils/descriptions.c:833
 msgid "Uncompressed audio"
 msgstr "Nekomprimirani audio"
 
+#: gst-libs/gst/pbutils/descriptions.c:839
 #, c-format
 msgid "Raw %d-bit %s audio"
 msgstr "Sirovi (neobrađeni) %d-bitni %s audio"
 
+#: gst-libs/gst/pbutils/descriptions.c:941
 msgid "Audio CD source"
 msgstr "Izvor je CD audio"
 
+#: gst-libs/gst/pbutils/descriptions.c:944
 msgid "DVD source"
 msgstr "Izvor je DVD"
 
+#: gst-libs/gst/pbutils/descriptions.c:947
 msgid "Real Time Streaming Protocol (RTSP) source"
 msgstr "Izvor je Real Time Streaming Protocol (RTSP)"
 
+#: gst-libs/gst/pbutils/descriptions.c:951
 msgid "Microsoft Media Server (MMS) protocol source"
 msgstr "Izvor je Microsoft Media Server (MMS)"
 
+#: gst-libs/gst/pbutils/descriptions.c:959
 #, c-format
 msgid "%s protocol source"
 msgstr "Protokol izvora je %s"
 
 # https://en.wikipedia.org/wiki/Payload_(computing)
 # http://www.rfc-editor.org/rfc/rfc3984.txt
+#: gst-libs/gst/pbutils/descriptions.c:1033
 #, c-format
 msgid "%s video RTP depayloader"
 msgstr "Depayloader RTP %s video"
 
+#: gst-libs/gst/pbutils/descriptions.c:1035
 #, c-format
 msgid "%s audio RTP depayloader"
 msgstr "Depayloader RTP %s audio"
 
+#: gst-libs/gst/pbutils/descriptions.c:1037
 #, c-format
 msgid "%s RTP depayloader"
 msgstr "Depayloader RTP %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1044
 #, c-format
 msgid "%s demuxer"
 msgstr "Demultipleksor %s (demuxer)"
 
+#: gst-libs/gst/pbutils/descriptions.c:1046
 #, c-format
 msgid "%s decoder"
 msgstr "Dekoder %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1085
 #, c-format
 msgid "%s video RTP payloader"
 msgstr "Payloader RTP %s video"
 
+#: gst-libs/gst/pbutils/descriptions.c:1087
 #, c-format
 msgid "%s audio RTP payloader"
 msgstr "%s audio RTP payloader (RPT-utovarivač audia)"
 
+#: gst-libs/gst/pbutils/descriptions.c:1089
 #, c-format
 msgid "%s RTP payloader"
 msgstr "Payloader RTP %s audio"
 
+#: gst-libs/gst/pbutils/descriptions.c:1096
 #, c-format
 msgid "%s muxer"
 msgstr "Multipleksor %s (muxer)"
 
+#: gst-libs/gst/pbutils/descriptions.c:1098
 #, c-format
 msgid "%s encoder"
 msgstr "Koder %s (encoder)"
 
+#: gst-libs/gst/pbutils/descriptions.c:1132
 #, c-format
 msgid "GStreamer element %s"
 msgstr "Element GStreamera %s"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:558
 msgid "Unknown source element"
 msgstr "Nepoznati element-izvor"
 
-#, fuzzy
+#: gst-libs/gst/pbutils/missing-plugins.c:561
 msgid "Unknown sink element"
-msgstr "Nepoznati element"
+msgstr "Nepoznati element-ponor"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:564
 msgid "Unknown element"
 msgstr "Nepoznati element"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:567
 msgid "Unknown decoder element"
 msgstr "Nepoznati element dekoder"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:570
 msgid "Unknown encoder element"
 msgstr "Nepoznati element koder"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:575
 msgid "Plugin or element of unknown type"
 msgstr "Plugin ili element nepoznate vrste"
 
+#: gst-libs/gst/tag/gsttagdemux.c:1243
 msgid "Failed to read tag: not enough data"
 msgstr "Nije uspjelo pročitati tag: nema dovoljno podataka"
 
+#: gst-libs/gst/tag/tags.c:77
 msgid "track ID"
 msgstr "ID zapisa"
 
+#: gst-libs/gst/tag/tags.c:77
 msgid "MusicBrainz track ID"
 msgstr "MusicBrainz ID zapisa"
 
+#: gst-libs/gst/tag/tags.c:79
 msgid "artist ID"
 msgstr "ID izvođača"
 
+#: gst-libs/gst/tag/tags.c:79
 msgid "MusicBrainz artist ID"
 msgstr "MusicBrainz ID izvođača"
 
+#: gst-libs/gst/tag/tags.c:81
 msgid "album ID"
 msgstr "ID albuma"
 
+#: gst-libs/gst/tag/tags.c:81
 msgid "MusicBrainz album ID"
 msgstr "MusicBrainz ID albuma"
 
+#: gst-libs/gst/tag/tags.c:84
 msgid "album artist ID"
 msgstr "ID izvođača albuma"
 
+#: gst-libs/gst/tag/tags.c:84
 msgid "MusicBrainz album artist ID"
 msgstr "MusicBrainz ID izvođača albuma"
 
+#: gst-libs/gst/tag/tags.c:86
 msgid "track TRM ID"
 msgstr "ID TRM zapisa"
 
+#: gst-libs/gst/tag/tags.c:86
 msgid "MusicBrainz TRM ID"
 msgstr "MusicBrainz TRM ID"
 
+#: gst-libs/gst/tag/tags.c:108
 msgid "capturing shutter speed"
 msgstr "ekspozicija"
 
+#: gst-libs/gst/tag/tags.c:109
 msgid "Shutter speed used when capturing an image, in seconds"
 msgstr "Primijenjena ekspozicija pri snimanju slike u sekundama"
 
+#: gst-libs/gst/tag/tags.c:112
 msgid "capturing focal ratio"
 msgstr "otvor blende (f broj)"
 
+#: gst-libs/gst/tag/tags.c:113
 msgid "Focal ratio (f-number) used when capturing the image"
 msgstr "Primijenjeni otvor blende (f-broj) pri snimanju slike"
 
+#: gst-libs/gst/tag/tags.c:116
 msgid "capturing focal length"
 msgstr "žarišna duljina"
 
+#: gst-libs/gst/tag/tags.c:117
 msgid "Focal length of the lens used capturing the image, in mm"
 msgstr "Primijenjena žarišna duljina leće pri snimanju slike u mm"
 
+#: gst-libs/gst/tag/tags.c:121
 msgid "capturing 35 mm equivalent focal length"
 msgstr "snimanje s 35 mm ekvivalentne žarišne duljine"
 
-msgid ""
-"35 mm equivalent focal length of the lens used capturing the image, in mm"
+#: gst-libs/gst/tag/tags.c:122
+msgid "35 mm equivalent focal length of the lens used capturing the image, in mm"
 msgstr "snimanje s 35 mm ekvivalentne žarišne duljine pri snimanju u mm"
 
+#: gst-libs/gst/tag/tags.c:126
 msgid "capturing digital zoom ratio"
 msgstr "omjer digitalnog zuma"
 
+#: gst-libs/gst/tag/tags.c:127
 msgid "Digital zoom ratio used when capturing an image"
 msgstr "Primijenjeni omjer digitalnog zuma pri snimanju slike"
 
+#: gst-libs/gst/tag/tags.c:130
 msgid "capturing iso speed"
 msgstr "osjetljivost ISO"
 
+#: gst-libs/gst/tag/tags.c:131
 msgid "The ISO speed used when capturing an image"
 msgstr "Primijenjena osjetljivost ISO pri snimanju slike"
 
+#: gst-libs/gst/tag/tags.c:134
 msgid "capturing exposure program"
 msgstr "program ekspozicije"
 
+#: gst-libs/gst/tag/tags.c:135
 msgid "The exposure program used when capturing an image"
 msgstr "Primijenjeni program ekspozicije pri snimanju slike"
 
+#: gst-libs/gst/tag/tags.c:138
 msgid "capturing exposure mode"
-msgstr "mȏd ekspozicije"
+msgstr "način ekspozicije"
 
+#: gst-libs/gst/tag/tags.c:139
 msgid "The exposure mode used when capturing an image"
-msgstr "Primijenjeni mȏd ekspozicije pri snimanju"
+msgstr "Primijenjeni način ekspozicije pri snimanju"
 
+#: gst-libs/gst/tag/tags.c:142
 msgid "capturing exposure compensation"
 msgstr "korektura ekspozicije"
 
+#: gst-libs/gst/tag/tags.c:143
 msgid "The exposure compensation used when capturing an image"
 msgstr "Primijenjena korektura ekspozicije pri snimanju"
 
+#: gst-libs/gst/tag/tags.c:146
 msgid "capturing scene capture type"
 msgstr "izbor motiva"
 
+#: gst-libs/gst/tag/tags.c:147
 msgid "The scene capture mode used when capturing an image"
 msgstr "Primijenjeni izbor motiva pri snimanju slike"
 
+#: gst-libs/gst/tag/tags.c:150
 msgid "capturing gain adjustment"
 msgstr "korekcija osvjetljenja"
 
+#: gst-libs/gst/tag/tags.c:151
 msgid "The overall gain adjustment applied on an image"
 msgstr "Ukupna korekcija osvjetljenja primijenjena na sliku"
 
+#: gst-libs/gst/tag/tags.c:154
 msgid "capturing white balance"
 msgstr "balans bijele"
 
+#: gst-libs/gst/tag/tags.c:155
 msgid "The white balance mode set when capturing an image"
 msgstr "Primijenjeni balans bijele pri snimanju slike"
 
+#: gst-libs/gst/tag/tags.c:158
 msgid "capturing contrast"
 msgstr "kontrast"
 
+#: gst-libs/gst/tag/tags.c:159
 msgid "The direction of contrast processing applied when capturing an image"
 msgstr "Postavke za obradu kontrasta primijenjene pri snimanju slike"
 
+#: gst-libs/gst/tag/tags.c:163
 msgid "capturing saturation"
 msgstr "zasićenje"
 
+#: gst-libs/gst/tag/tags.c:164
 msgid "The direction of saturation processing applied when capturing an image"
 msgstr "Postavke za obradu zasićenja primijenjene pri snimanju slike"
 
+#: gst-libs/gst/tag/tags.c:168
 msgid "capturing sharpness"
 msgstr "oštrina"
 
+#: gst-libs/gst/tag/tags.c:169
 msgid "The direction of sharpness processing applied when capturing an image"
 msgstr "Postavke za obradu oštrine primijenjene pri snimanju slike"
 
+#: gst-libs/gst/tag/tags.c:173
 msgid "capturing flash fired"
 msgstr "upotreba bljeskalice"
 
+#: gst-libs/gst/tag/tags.c:174
 msgid "If the flash fired while capturing an image"
 msgstr "Je li se bljeskalica aktivirala pri snimanju slike"
 
+#: gst-libs/gst/tag/tags.c:177
 msgid "capturing flash mode"
-msgstr "mȏd bljeskalice"
+msgstr "način bljeskalice"
 
+#: gst-libs/gst/tag/tags.c:178
 msgid "The selected flash mode while capturing an image"
-msgstr "Odabrani mȏd bljeskalice pri snimanju slike"
+msgstr "Odabrani način bljeskalice pri snimanju slike"
 
+#: gst-libs/gst/tag/tags.c:181
 msgid "capturing metering mode"
-msgstr "mȏd mjerenja"
+msgstr "način mjerenja"
 
-msgid ""
-"The metering mode used while determining exposure for capturing an image"
-msgstr ""
-"Primijenjeni mȏd mjerenja za određivanje ekspozicije pri snimanju slike"
+#: gst-libs/gst/tag/tags.c:182
+msgid "The metering mode used while determining exposure for capturing an image"
+msgstr "Primijenjeni način mjerenja za određivanje ekspozicije pri snimanju slike"
 
+#: gst-libs/gst/tag/tags.c:186
 msgid "capturing source"
 msgstr "izvor za snimanje"
 
+#: gst-libs/gst/tag/tags.c:187
 msgid "The source or type of device used for the capture"
 msgstr "Izvor ili vrsta uređaja korištena za snimanje"
 
+#: gst-libs/gst/tag/tags.c:190
 msgid "image horizontal ppi"
 msgstr "horizontalna rezolucija slike (ppi)"
 
+#: gst-libs/gst/tag/tags.c:191
 msgid "Media (image/video) intended horizontal pixel density in ppi"
-msgstr ""
-"Horizontalna rezolucija medija (nositelja slike/videa) u ppi (piksel/col)"
+msgstr "Horizontalna rezolucija medija (nositelja slike/videa) u ppi (piksel/col)"
 
+#: gst-libs/gst/tag/tags.c:194
 msgid "image vertical ppi"
 msgstr "vertikalna rezolucija slike (ppi)"
 
+#: gst-libs/gst/tag/tags.c:195
 msgid "Media (image/video) intended vertical pixel density in ppi"
-msgstr ""
-"Vertikalna rezolucija medija (nositelja slike/videa) u ppi (piksel/col)"
+msgstr "Vertikalna rezolucija medija (nositelja slike/videa) u ppi (piksel/col)"
 
+#: gst-libs/gst/tag/tags.c:198
 msgid "ID3v2 frame"
 msgstr "Okvir ID3v2"
 
+#: gst-libs/gst/tag/tags.c:198
 msgid "unparsed id3v2 tag frame"
 msgstr "neobrađeni okvir taga id3v2"
 
+#: gst-libs/gst/tag/tags.c:202
 msgid "musical-key"
 msgstr "glazbeni ključ"
 
+#: gst-libs/gst/tag/tags.c:202
 msgid "Initial key in which the sound starts"
 msgstr "Početni ključ u kojem započinje audio"
 
+#: tools/gst-device-monitor.c:255 tools/gst-play.c:1442
 msgid "Print version information and exit"
 msgstr "ispiše inačicu ovog programa i iziđe"
 
-msgid ""
-"Don't exit after showing the initial device list, but wait for devices to "
-"added/removed."
-msgstr ""
-"Ne izlazi nakon prikaza popisa početnih uređaja već pričeka da se uređaji "
-"dodaju ili uklone."
+#: tools/gst-device-monitor.c:257
+msgid "Don't exit after showing the initial device list, but wait for devices to added/removed."
+msgstr "Ne izlazi nakon prikaza popisa početnih uređaja već pričeka da se uređaji dodaju ili uklone."
 
+#: tools/gst-play.c:308
 #, c-format
 msgid "Volume: %.0f%%"
 msgstr "Glasnoća: %.0f%%"
 
+#: tools/gst-play.c:347
 msgid "Buffering..."
 msgstr "Punjenje međuspremnika..."
 
+#: tools/gst-play.c:368
 msgid "Clock lost, selecting a new one\n"
 msgstr "Vrijeme (sat) je izgubljeno, bira se novo\n"
 
+#: tools/gst-play.c:398 tools/gst-play.c:444 tools/gst-play.c:881
+#: tools/gst-play.c:1345
 msgid "Reached end of play list."
 msgstr "Dostignut je kraj popisa za reprodukciju."
 
+#: tools/gst-play.c:611
 msgid "Paused"
 msgstr "Pauziranje"
 
+#: tools/gst-play.c:669
 #, c-format
 msgid "Now playing %s\n"
 msgstr "Upravo se reproducira %s\n"
 
+#: tools/gst-play.c:732
 #, c-format
 msgid "About to finish, preparing next title: %s"
 msgstr "Bliži se kraj, priprema se novi naslov: %s"
 
+#: tools/gst-play.c:977
 #, c-format
 msgid "Playback rate: %.2f"
 msgstr "Brzina reproduciranja: %.2f"
 
+#: tools/gst-play.c:981
 #, c-format
 msgid "Could not change playback rate to %.2f"
 msgstr "Brzinu reprodukcije nije moguće promijeniti na %.2f"
 
+#: tools/gst-play.c:1285
 msgid "space"
 msgstr "tipka za razmak"
 
+#: tools/gst-play.c:1285
 msgid "pause/unpause"
 msgstr "stani/nastavi"
 
+#: tools/gst-play.c:1286
 msgid "q or ESC"
 msgstr "q ili ESC"
 
+#: tools/gst-play.c:1286
 msgid "quit"
 msgstr "svršetak"
 
+#: tools/gst-play.c:1287
 msgid "> or n"
 msgstr "> ili n"
 
+#: tools/gst-play.c:1287
 msgid "play next"
 msgstr "sljedeći zapis (glazba/video/...)"
 
+#: tools/gst-play.c:1288
 msgid "< or b"
 msgstr "< ili b"
 
+#: tools/gst-play.c:1288
 msgid "play previous"
 msgstr "prethodni zapis (glazba/video/...)"
 
+#: tools/gst-play.c:1289
 msgid "seek forward"
 msgstr "traži (brzo) poziciju prema naprijed"
 
+#: tools/gst-play.c:1290
 msgid "seek backward"
 msgstr "traži (brzo) poziciju prema natrag"
 
+#: tools/gst-play.c:1291
 msgid "volume up"
 msgstr "glasnije"
 
+#: tools/gst-play.c:1292
 msgid "volume down"
 msgstr "tiše"
 
+#: tools/gst-play.c:1293
 msgid "increase playback rate"
 msgstr "brže"
 
+#: tools/gst-play.c:1294
 msgid "decrease playback rate"
 msgstr "sporije"
 
+#: tools/gst-play.c:1295
 msgid "change playback direction"
 msgstr "promjeni smjer reprodukcije"
 
 # A feature of digital video systems that mimics the visual feedback given during fast forward and rewind operations that were provided by analog systems such as VCRs.
+#: tools/gst-play.c:1296
 msgid "enable/disable trick modes"
-msgstr ""
-"omogući/onemogući „trick modes“ (simulira brzo premotavanje analognih VCR)"
+msgstr "omogući/onemogući „trick modes“ (simulira brzo premotavanje analognih VCR)"
 
+#: tools/gst-play.c:1297
 msgid "change audio track"
 msgstr "promijeni audio zapis"
 
+#: tools/gst-play.c:1298
 msgid "change video track"
 msgstr "promijeni video zapis"
 
+#: tools/gst-play.c:1299
 msgid "change subtitle track"
 msgstr "promijeni (zapis) podnaslov"
 
+#: tools/gst-play.c:1300
 msgid "seek to beginning"
 msgstr "skoči (premota) na početak"
 
+#: tools/gst-play.c:1301
 msgid "show keyboard shortcuts"
 msgstr "tipkovnički prečaci"
 
+#: tools/gst-play.c:1304
 msgid "Interactive mode - keyboard controls:"
-msgstr "Interaktivni mȏd - tipkovničko upravljanje:"
+msgstr "Interaktivni način - tipkovničko upravljanje:"
 
+#: tools/gst-play.c:1437
 msgid "Output status information and property notifications"
 msgstr "ispiše status i obavijesti o svojstvima"
 
+#: tools/gst-play.c:1439
 msgid "Control playback behaviour setting playbin 'flags' property"
-msgstr ""
-"Upravljajte ponašanjem reprodukcije postavkama za „playbin“ via „flags“"
+msgstr "Upravljajte ponašanjem reprodukcije postavkama za „playbin“ via „flags“"
 
+#: tools/gst-play.c:1444
 msgid "Video sink to use (default is autovideosink)"
 msgstr "Videosink koji će se koristiti (zadano: autovideosink)"
 
+#: tools/gst-play.c:1446
 msgid "Audio sink to use (default is autoaudiosink)"
 msgstr "Audiosink koji će se koristiti (zadano: autovideosink)"
 
+#: tools/gst-play.c:1448
 msgid "Enable gapless playback"
 msgstr "Omogući reprodukciju bez pauza (između zapisa)"
 
+#: tools/gst-play.c:1450
 msgid "Shuffle playlist"
 msgstr "Izmiješati popis za reprodukciju"
 
+#: tools/gst-play.c:1453
 msgid "Disable interactive control via the keyboard"
 msgstr "Onemogući interaktivno upravljanje pomoću tipkovnice"
 
+#: tools/gst-play.c:1455
 msgid "Volume"
 msgstr "Glasnoća"
 
+#: tools/gst-play.c:1457
 msgid "Playlist file containing input media files"
-msgstr ""
-"Datoteka s popisom za reprodukciju koja sadrži ulazne multimedijalne datoteke"
+msgstr "Datoteka s popisom za reprodukciju koja sadrži ulazne multimedijalne datoteke"
 
+#: tools/gst-play.c:1459
 msgid "Do not print any output (apart from errors)"
 msgstr "Ne ispisuje nikakve izlazne informacije (osim greški)"
 
+#: tools/gst-play.c:1461
 msgid "Use playbin3 pipeline"
 msgstr "Rabi playbin3 cjevovod"
 
+#: tools/gst-play.c:1462
 msgid "(default varies depending on 'USE_PLAYBIN' env variable)"
 msgstr "(zadano: varira, ovisno o varijabli okružja „USE_PLAYBIN“)"
 
+#: tools/gst-play.c:1536
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr "Uporaba: %s DATOTEKA1|URI1 [DATOTEKA2|URI2] [DATOTEKA3|URI3] ..."
 
+#: tools/gst-play.c:1540
 msgid "You must provide at least one filename or URI to play."
 msgstr "Morate navesti barem jednu datoteku ili URI adresu za reprodukciju."
 
+#: tools/gst-play.c:1580
 msgid "Press 'k' to see a list of keyboard shortcuts.\n"
 msgstr "Pritisnite „k“ da pogledate listu tipkovničkih prečaca.\n"
 
@@ -756,8 +953,7 @@ msgstr "Pritisnite „k“ da pogledate listu tipkovničkih prečaca.\n"
 #~ msgstr "Greška pri pisanju u datoteku „%s”."
 
 #~ msgid "A %s plugin is required to play this stream, but not installed."
-#~ msgstr ""
-#~ "Potreban je priključak %s za reprodukciju ovog niza, ali nije instaliran."
+#~ msgstr "Potreban je priključak %s za reprodukciju ovog niza, ali nije instaliran."
 
 #~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
 #~ msgstr "Neispravan URI titlova „%s”, titlovi su onemogućeni."
@@ -765,20 +961,11 @@ msgstr "Pritisnite „k“ da pogledate listu tipkovničkih prečaca.\n"
 #~ msgid "RTSP streams cannot be played yet."
 #~ msgstr "Još ne mogu reproducirati RTSP nizove."
 
-#~ msgid ""
-#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
-#~ "file or some other type of text file, or the media file was not "
-#~ "recognized."
-#~ msgstr ""
-#~ "Pronađen je samo niz titlova. Ili ste učitali datoteku titlova ili neku "
-#~ "drugu vrstu tekstualne datoteke, ili medijska datoteka nije prepoznata."
-
-#~ msgid ""
-#~ "You do not have a decoder installed to handle this file. You might need "
-#~ "to install the necessary plugins."
-#~ msgstr ""
-#~ "Nemate instaliran dekoder za upravljanje ovom datotekom. Trebate "
-#~ "instalirati potrebne priključke."
+#~ msgid "Only a subtitle stream was detected. Either you are loading a subtitle file or some other type of text file, or the media file was not recognized."
+#~ msgstr "Pronađen je samo niz titlova. Ili ste učitali datoteku titlova ili neku drugu vrstu tekstualne datoteke, ili medijska datoteka nije prepoznata."
+
+#~ msgid "You do not have a decoder installed to handle this file. You might need to install the necessary plugins."
+#~ msgstr "Nemate instaliran dekoder za upravljanje ovom datotekom. Trebate instalirati potrebne priključke."
 
 #~ msgid "This is not a media file"
 #~ msgstr "Ovo nije medijska datoteka"
index ee6833c..ba0174d 100644 (file)
@@ -1,17 +1,17 @@
-# Hungarian translation of gst-plugins-base
-# Copyright (C) 2004, 2006, 2007, 2008, 2009, 2010, 2012, 2014, 2015, 2016, 2017 Free Software Foundation, Inc.
+# Hungarian translation for gst-plugins-base.
+# Copyright (C) 2004, 2006, 2007, 2008, 2009, 2010, 2012, 2014, 2015, 2016, 2017, 2019 Free Software Foundation, Inc.
 # This file is distributed under the same license as the gst-plugins-base package.
 #
 # Laszlo Dvornik <dvornik@invitel.hu>, 2004.
 # Gabor Kelemen <kelemeng@gnome.hu>, 2006, 2007, 2008, 2009, 2012, 2016.
-# Balázs Úr <urbalazs@gmail.com>, 2014, 2015, 2017.
+# Balázs Úr <ur.balazs@fsf.hu>, 2014, 2015, 2017, 2019.
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base 1.10.0\n"
+"Project-Id-Version: gst-plugins-base 1.16.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:43+0000\n"
-"PO-Revision-Date: 2017-03-19 00:47+0100\n"
-"Last-Translator: Balázs Úr <urbalazs@gmail.com>\n"
+"POT-Creation-Date: 2019-04-19 00:20+0100\n"
+"PO-Revision-Date: 2019-11-23 21:59+0100\n"
+"Last-Translator: Balázs Úr <ur.balazs@fsf.hu>\n"
 "Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
 "Language: hu\n"
 "MIME-Version: 1.0\n"
@@ -19,680 +19,879 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "X-Rosetta-Export-Date: 2007-03-10 00:18+0000\n"
-"X-Generator: Lokalize 1.2\n"
+"X-Generator: Lokalize 19.04.3\n"
 "Plural-Forms:  nplurals=2; plural=(n != 1);\n"
 
+#: ext/alsa/gstalsasink.c:579
 msgid "Could not open device for playback in mono mode."
-msgstr "Nem lehet lejátszásra megnyitni az eszközt mono módban."
+msgstr "Nem sikerült lejátszásra megnyitni az eszközt mono módban."
 
+#: ext/alsa/gstalsasink.c:581
 msgid "Could not open device for playback in stereo mode."
-msgstr "Nem lehet lejátszásra megnyitni az eszközt sztereó módban."
+msgstr "Nem sikerült lejátszásra megnyitni az eszközt sztereó módban."
 
+#: ext/alsa/gstalsasink.c:585
 #, c-format
 msgid "Could not open device for playback in %d-channel mode."
-msgstr "Nem lehet lejátszásra megnyitni az eszközt %d csatornás módban."
+msgstr "Nem sikerült lejátszásra megnyitni az eszközt %d csatornás módban."
 
-msgid ""
-"Could not open audio device for playback. Device is being used by another "
-"application."
-msgstr ""
-"Nem lehet lejátszásra megnyitni a hangeszközt. Az eszközt másik alkalmazás "
-"használja."
+#: ext/alsa/gstalsasink.c:858
+msgid "Could not open audio device for playback. Device is being used by another application."
+msgstr "Nem sikerült lejátszásra megnyitni a hangeszközt. Az eszközt másik alkalmazás használja."
 
+#: ext/alsa/gstalsasink.c:863
 msgid "Could not open audio device for playback."
-msgstr "Nem lehet lejátszásra megnyitni a hangeszközt."
+msgstr "Nem sikerült lejátszásra megnyitni a hangeszközt."
 
+#: ext/alsa/gstalsasink.c:1076
 msgid "Error outputting to audio device. The device has been disconnected."
 msgstr "Hiba a hangeszközre való kimenetküldéskor. Az eszközt leválasztották."
 
+#: ext/alsa/gstalsasrc.c:444
 msgid "Could not open device for recording in mono mode."
-msgstr "Nem lehet felvételre megnyitni az eszközt mono módban."
+msgstr "Nem sikerült felvételre megnyitni az eszközt mono módban."
 
+#: ext/alsa/gstalsasrc.c:446
 msgid "Could not open device for recording in stereo mode."
-msgstr "Nem lehet felvételre megnyitni az eszközt sztereó módban."
+msgstr "Nem sikerült felvételre megnyitni az eszközt sztereó módban."
 
+#: ext/alsa/gstalsasrc.c:450
 #, c-format
 msgid "Could not open device for recording in %d-channel mode"
-msgstr "Az eszköz nem nyitható meg felvételre %d csatornás módban."
+msgstr "Nem sikerült felvételre megnyitni az eszközt %d csatornás módban"
 
-msgid ""
-"Could not open audio device for recording. Device is being used by another "
-"application."
-msgstr ""
-"Nem lehet felvételre megnyitni a hangeszközt. Az eszközt másik alkalmazás "
-"használja."
+#: ext/alsa/gstalsasrc.c:741
+msgid "Could not open audio device for recording. Device is being used by another application."
+msgstr "Nem sikerült felvételre megnyitni a hangeszközt. Az eszközt másik alkalmazás használja."
 
+#: ext/alsa/gstalsasrc.c:746
 msgid "Could not open audio device for recording."
-msgstr "Nem lehet felvételre megnyitni a hangeszközt."
+msgstr "Nem sikerült felvételre megnyitni a hangeszközt."
 
+#: ext/alsa/gstalsasrc.c:992
 msgid "Error recording from audio device. The device has been disconnected."
 msgstr "Hiba a hangeszközről való felvételkor. Az eszközt leválasztották."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:277 ext/cdparanoia/gstcdparanoiasrc.c:283
 msgid "Could not open CD device for reading."
-msgstr "Nem lehet olvasásra megnyitni a CD-eszközt."
+msgstr "Nem sikerült olvasásra megnyitni a CD-eszközt."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:409
 msgid "Could not seek CD."
-msgstr "Nem kereshető a CD."
+msgstr "Nem sikerült pozicionálni a CD-t."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:417
 msgid "Could not read CD."
-msgstr "Nem olvasható a CD."
+msgstr "Nem sikerült olvasni a CD-t."
 
+#: ext/gl/gstgltestsrc.c:491
 msgid "failed to draw pattern"
-msgstr ""
+msgstr "a minta rajzolása sikertelen"
 
+#: ext/gl/gstgltestsrc.c:492
 msgid "A GL error occurred"
-msgstr ""
+msgstr "Egy GL hiba történt"
 
+#: ext/gl/gstgltestsrc.c:498
 msgid "format wasn't negotiated before get function"
-msgstr ""
-
+msgstr "a formátum nem lett egyeztetve a függvény lekérése előtt"
+
+#: gst/encoding/gstencodebin.c:1636 gst/playback/gstplaybin2.c:3399
+#: gst/playback/gstplaysink.c:1522 gst/playback/gstplaysink.c:1535
+#: gst/playback/gstplaysink.c:1872 gst/playback/gstplaysink.c:1904
+#: gst/playback/gstplaysink.c:2488 gst/playback/gstplaysink.c:2537
+#: gst/playback/gstplaysink.c:2552 gst/playback/gstplaysink.c:2577
+#: gst/playback/gstplaysink.c:2609 gst/playback/gstplaysink.c:2757
+#: gst/playback/gstplaysink.c:2788 gst/playback/gstplaysink.c:3166
+#: gst/playback/gstplaysink.c:3175 gst/playback/gstplaysink.c:3184
+#: gst/playback/gstplaysink.c:3193 gst/playback/gstplaysink.c:3606
+#: gst/playback/gstplaysink.c:4526 gst/playback/gstplaysinkconvertbin.c:97
+#: gst/playback/gstplaysinkconvertbin.c:117
+#: gst/playback/gsturidecodebin.c:1472 gst/playback/gsturisourcebin.c:1597
 #, c-format
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "A(z) „%s” elem hiányzik - ellenőrizze a Gstreamer telepítését."
 
+#: gst/playback/gstdecodebin2.c:1883 gst/playback/gstparsebin.c:1553
 msgid "Could not determine type of stream"
-msgstr "Nem határozható meg az adatfolyam típusa"
+msgstr "Nem sikerült meghatározni az adatfolyam típusát"
 
+#: gst/playback/gstdecodebin2.c:2861 gst/playback/gstparsebin.c:2385
 msgid "This appears to be a text file"
 msgstr "Ez egy szövegfájlnak tűnik"
 
+#: gst/playback/gstplaybin2.c:5452
 msgid "Could not create \"uridecodebin\" element."
-msgstr "Nem hozható létre „uridecodebin” elem."
+msgstr "Nem sikerült létrehozni „uridecodebin” elemet."
 
-#, fuzzy
+#: gst/playback/gstplaybin3.c:4558
 msgid "Could not create \"uridecodebin3\" element."
-msgstr "Nem hozható létre „uridecodebin” elem."
+msgstr "Nem sikerült létrehozni „uridecodebin3” elemet."
 
+#: gst/playback/gstplaysink.c:2003
 #, c-format
 msgid "Both autovideosink and %s elements are missing."
 msgstr "Az autovideosink és a(z) %s elem is hiányzik."
 
+#: gst/playback/gstplaysink.c:2007
 msgid "The autovideosink element is missing."
 msgstr "Az autovideosink elem hiányzik."
 
+#: gst/playback/gstplaysink.c:2012
 #, c-format
 msgid "Configured videosink %s is not working."
 msgstr "A beállított %s videosink elem nem működik."
 
+#: gst/playback/gstplaysink.c:2016
 #, c-format
 msgid "Both autovideosink and %s elements are not working."
 msgstr "Sem az autovideosink, sem a(z) %s elem nem működik."
 
+#: gst/playback/gstplaysink.c:2020
 msgid "The autovideosink element is not working."
 msgstr "Az autovideosink elem nem működik."
 
+#: gst/playback/gstplaysink.c:2525
 msgid "Custom text sink element is not usable."
 msgstr "Az egyéni szövegnyelő elem nem használható."
 
+#: gst/playback/gstplaysink.c:2903
 msgid "No volume control found"
 msgstr "Nem található hangerőszabályzó"
 
+#: gst/playback/gstplaysink.c:2933
 #, c-format
 msgid "Both autoaudiosink and %s elements are missing."
 msgstr "Az autoaudiosink és a(z) %s elem is hiányzik."
 
+#: gst/playback/gstplaysink.c:2937
 msgid "The autoaudiosink element is missing."
 msgstr "Az autoaudiosink elem hiányzik."
 
+#: gst/playback/gstplaysink.c:2942
 #, c-format
 msgid "Configured audiosink %s is not working."
 msgstr "A beállított %s audiosink elem nem működik."
 
+#: gst/playback/gstplaysink.c:2946
 #, c-format
 msgid "Both autoaudiosink and %s elements are not working."
 msgstr "Sem az autoaudiosink, sem a(z) %s elem nem működik."
 
+#: gst/playback/gstplaysink.c:2950
 msgid "The autoaudiosink element is not working."
 msgstr "Az autoaudiosink elem nem működik."
 
+#: gst/playback/gstplaysink.c:3269 gst/playback/gstplaysink.c:3274
 msgid "Can't play a text file without video or visualizations."
 msgstr "A szövegfájl nem játszható le videó vagy vizualizációk nélkül."
 
+#: gst/playback/gsturidecodebin.c:921
 #, c-format
 msgid "No decoder available for type '%s'."
 msgstr "Nem érhető el dekódoló a(z) „%s” típushoz."
 
+#: gst/playback/gsturidecodebin.c:1378 gst/playback/gsturisourcebin.c:1491
 msgid "No URI specified to play from."
 msgstr "Nincs megadva URI a lejátszáshoz."
 
+#: gst/playback/gsturidecodebin.c:1384 gst/playback/gsturisourcebin.c:1497
 #, c-format
 msgid "Invalid URI \"%s\"."
 msgstr "Érvénytelen URI: „%s”."
 
+#: gst/playback/gsturidecodebin.c:1391 gst/playback/gsturisourcebin.c:1504
 msgid "This stream type cannot be played yet."
 msgstr "Ez az adatfolyamtípus még nem játszható le."
 
+#: gst/playback/gsturidecodebin.c:1409 gst/playback/gsturisourcebin.c:1522
 #, c-format
 msgid "No URI handler implemented for \"%s\"."
 msgstr "Nincs URI kezelő megvalósítva a következőhöz: „%s”."
 
+#: gst/playback/gsturidecodebin.c:2289 gst/playback/gsturisourcebin.c:2228
 msgid "Source element is invalid."
 msgstr "A forráselem érvénytelen."
 
+#: gst/tcp/gsttcpclientsink.c:216
 #, c-format
 msgid "Error while sending data to \"%s:%d\"."
 msgstr "Hiba adatok küldése során a következőnek: „%s:%d”."
 
+#: gst-libs/gst/audio/gstaudiobasesrc.c:842
 msgid "Can't record audio fast enough"
 msgstr "Nem lehet elég gyorsan rögzíteni a hangot"
 
+#: gst-libs/gst/audio/gstaudiocdsrc.c:1625
 msgid "This CD has no audio tracks"
 msgstr "Ez a CD nem rendelkezik hangsávokkal"
 
+#: gst-libs/gst/pbutils/descriptions.c:89
 msgid "ID3 tag"
 msgstr "ID3 címke"
 
+#: gst-libs/gst/pbutils/descriptions.c:90
+#: gst-libs/gst/pbutils/descriptions.c:91
 msgid "APE tag"
 msgstr "APE címke"
 
+#: gst-libs/gst/pbutils/descriptions.c:92
 msgid "ICY internet radio"
 msgstr "ICY internetrádió"
 
+#: gst-libs/gst/pbutils/descriptions.c:127
 msgid "Apple Lossless Audio (ALAC)"
 msgstr "Apple veszteségmentes hang (ALAC)"
 
+#: gst-libs/gst/pbutils/descriptions.c:143
 msgid "Free Lossless Audio Codec (FLAC)"
 msgstr "Szabad veszteségmentes hangkodek (FLAC)"
 
+#: gst-libs/gst/pbutils/descriptions.c:173
+#: gst-libs/gst/pbutils/descriptions.c:174
 msgid "Lossless True Audio (TTA)"
 msgstr "Veszteségmentes valódi hang (TTA)"
 
+#: gst-libs/gst/pbutils/descriptions.c:182
 msgid "Windows Media Speech"
 msgstr "Windows Media beszéd"
 
+#: gst-libs/gst/pbutils/descriptions.c:199
 msgid "CYUV Lossless"
 msgstr "CYUV veszteségmentes"
 
+#: gst-libs/gst/pbutils/descriptions.c:203
 msgid "FFMpeg v1"
 msgstr "FFMpeg v1"
 
+#: gst-libs/gst/pbutils/descriptions.c:217
 msgid "Lossless MSZH"
 msgstr "Veszteségmentes MSZH"
 
+#: gst-libs/gst/pbutils/descriptions.c:228
 msgid "Run-length encoding"
 msgstr "Műsorhossz-kódolás"
 
+#: gst-libs/gst/pbutils/descriptions.c:274
 msgid "Timed Text"
 msgstr "Időzített szöveg"
 
+#: gst-libs/gst/pbutils/descriptions.c:278
 msgid "Subtitle"
 msgstr "Felirat"
 
+#: gst-libs/gst/pbutils/descriptions.c:279
 msgid "MPL2 subtitle format"
 msgstr "MPL2 feliratformátum"
 
+#: gst-libs/gst/pbutils/descriptions.c:280
 msgid "DKS subtitle format"
 msgstr "DKS feliratformátum"
 
+#: gst-libs/gst/pbutils/descriptions.c:281
 msgid "QTtext subtitle format"
 msgstr "QTtext feliratformátum"
 
+#: gst-libs/gst/pbutils/descriptions.c:282
 msgid "Sami subtitle format"
 msgstr "Sami feliratformátum"
 
+#: gst-libs/gst/pbutils/descriptions.c:283
 msgid "TMPlayer subtitle format"
 msgstr "TMPlayer feliratformátum"
 
+#: gst-libs/gst/pbutils/descriptions.c:287
 msgid "CEA 608 Closed Caption"
-msgstr ""
+msgstr "CEA 608 lezárt felirat"
 
+#: gst-libs/gst/pbutils/descriptions.c:288
 msgid "CEA 708 Closed Caption"
-msgstr ""
+msgstr "CEA 708 lezárt felirat"
 
+#: gst-libs/gst/pbutils/descriptions.c:289
 msgid "Kate subtitle format"
 msgstr "Kate feliratformátum"
 
+#: gst-libs/gst/pbutils/descriptions.c:290
 msgid "WebVTT subtitle format"
 msgstr "WebVTT feliratformátum"
 
+#: gst-libs/gst/pbutils/descriptions.c:455
+#: gst-libs/gst/pbutils/descriptions.c:458
+#: gst-libs/gst/pbutils/descriptions.c:508
 msgid "Uncompressed video"
 msgstr "Tömörítetlen videó"
 
+#: gst-libs/gst/pbutils/descriptions.c:463
 msgid "Uncompressed gray"
 msgstr "Tömörítetlen szürke"
 
+#: gst-libs/gst/pbutils/descriptions.c:486
 #, c-format
 msgid "Uncompressed packed YUV %s"
 msgstr "Tömörítetlen csomagolt YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:488
 #, c-format
 msgid "Uncompressed semi-planar YUV %s"
 msgstr "Tömörítetlen félig síkbeli YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:490
 #, c-format
 msgid "Uncompressed planar YUV %s"
 msgstr "Tömörítetlen síkbeli YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:501
 #, c-format
 msgid "Uncompressed palettized %d-bit %s"
 msgstr "Tömörítetlen, %d-bites palettázott %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:504
 #, c-format
 msgid "Uncompressed %d-bit %s"
 msgstr "Tömörítetlen, %d-bites %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:586
 #, c-format
 msgid "DivX MPEG-4 Version %d"
 msgstr "DivX MPEG-4 %d. verzió"
 
+#: gst-libs/gst/pbutils/descriptions.c:834
 msgid "Uncompressed audio"
 msgstr "Tömörítetlen hang"
 
+#: gst-libs/gst/pbutils/descriptions.c:840
 #, c-format
 msgid "Raw %d-bit %s audio"
 msgstr "Nyers %d bites %s hang"
 
+#: gst-libs/gst/pbutils/descriptions.c:942
 msgid "Audio CD source"
 msgstr "Hang CD forrás"
 
+#: gst-libs/gst/pbutils/descriptions.c:945
 msgid "DVD source"
 msgstr "DVD forrás"
 
+#: gst-libs/gst/pbutils/descriptions.c:948
 msgid "Real Time Streaming Protocol (RTSP) source"
 msgstr "Valósidejű adatfolyam-protokoll (RTSP) forrás"
 
+#: gst-libs/gst/pbutils/descriptions.c:952
 msgid "Microsoft Media Server (MMS) protocol source"
 msgstr "Microsoft Media Server (MMS) protokollforrás"
 
+#: gst-libs/gst/pbutils/descriptions.c:960
 #, c-format
 msgid "%s protocol source"
 msgstr "%s protokollforrás"
 
+#: gst-libs/gst/pbutils/descriptions.c:1034
 #, c-format
 msgid "%s video RTP depayloader"
 msgstr "%s videó RTP dekódoló"
 
+#: gst-libs/gst/pbutils/descriptions.c:1036
 #, c-format
 msgid "%s audio RTP depayloader"
 msgstr "%s hang RTP dekódoló"
 
+#: gst-libs/gst/pbutils/descriptions.c:1038
 #, c-format
 msgid "%s RTP depayloader"
 msgstr "%s RTP dekódoló"
 
+#: gst-libs/gst/pbutils/descriptions.c:1045
 #, c-format
 msgid "%s demuxer"
 msgstr "%s szétválasztó"
 
+#: gst-libs/gst/pbutils/descriptions.c:1047
 #, c-format
 msgid "%s decoder"
 msgstr "%s dekódoló"
 
+#: gst-libs/gst/pbutils/descriptions.c:1086
 #, c-format
 msgid "%s video RTP payloader"
 msgstr "%s videó RTP kódoló"
 
+#: gst-libs/gst/pbutils/descriptions.c:1088
 #, c-format
 msgid "%s audio RTP payloader"
 msgstr "%s hang RTP kódoló"
 
+#: gst-libs/gst/pbutils/descriptions.c:1090
 #, c-format
 msgid "%s RTP payloader"
 msgstr "%s RTP kódoló"
 
+#: gst-libs/gst/pbutils/descriptions.c:1097
 #, c-format
 msgid "%s muxer"
 msgstr "%s egyesítő"
 
+#: gst-libs/gst/pbutils/descriptions.c:1099
 #, c-format
 msgid "%s encoder"
 msgstr "%s kódoló"
 
+#: gst-libs/gst/pbutils/descriptions.c:1133
 #, c-format
 msgid "GStreamer element %s"
 msgstr "GStreamer elem: %s"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:558
 msgid "Unknown source element"
 msgstr "Ismeretlen forráselem"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:561
 msgid "Unknown sink element"
 msgstr "Ismeretlen nyelőelem"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:564
 msgid "Unknown element"
 msgstr "Ismeretlen elem"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:567
 msgid "Unknown decoder element"
 msgstr "Ismeretlen dekódolóelem"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:570
 msgid "Unknown encoder element"
 msgstr "Ismeretlen kódolóelem"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:575
 msgid "Plugin or element of unknown type"
 msgstr "Ismeretlen típusú bővítmény vagy elem"
 
+#: gst-libs/gst/tag/gsttagdemux.c:1243
 msgid "Failed to read tag: not enough data"
 msgstr "A címke nem olvasható: nincs elég adat"
 
+#: gst-libs/gst/tag/tags.c:77
 msgid "track ID"
 msgstr "számazonosító"
 
+#: gst-libs/gst/tag/tags.c:77
 msgid "MusicBrainz track ID"
 msgstr "MusicBrainz számazonosító"
 
+#: gst-libs/gst/tag/tags.c:79
 msgid "artist ID"
 msgstr "előadó-azonosító"
 
+#: gst-libs/gst/tag/tags.c:79
 msgid "MusicBrainz artist ID"
 msgstr "MusicBrainz előadó-azonosító"
 
+#: gst-libs/gst/tag/tags.c:81
 msgid "album ID"
 msgstr "Albumazonosító"
 
+#: gst-libs/gst/tag/tags.c:81
 msgid "MusicBrainz album ID"
 msgstr "MusicBrainz albumazonosító"
 
+#: gst-libs/gst/tag/tags.c:84
 msgid "album artist ID"
 msgstr "Albumelőadó azonosítója"
 
+#: gst-libs/gst/tag/tags.c:84
 msgid "MusicBrainz album artist ID"
 msgstr "MusicBrainz albumelőadó azonosítója"
 
+#: gst-libs/gst/tag/tags.c:86
 msgid "track TRM ID"
 msgstr "szám TRM azonosítója"
 
+#: gst-libs/gst/tag/tags.c:86
 msgid "MusicBrainz TRM ID"
 msgstr "MusicBrainz szám TRM azonosítója"
 
+#: gst-libs/gst/tag/tags.c:108
 msgid "capturing shutter speed"
 msgstr "felvétel zársebessége"
 
+#: gst-libs/gst/tag/tags.c:109
 msgid "Shutter speed used when capturing an image, in seconds"
 msgstr "Kép felvételéhez használt zársebesség másodpercben"
 
+#: gst-libs/gst/tag/tags.c:112
 msgid "capturing focal ratio"
 msgstr "felvétel fókuszaránya"
 
+#: gst-libs/gst/tag/tags.c:113
 msgid "Focal ratio (f-number) used when capturing the image"
 msgstr "A kép felvételéhez használt fókuszarány (f-szám)"
 
+#: gst-libs/gst/tag/tags.c:116
 msgid "capturing focal length"
 msgstr "felvétel fókusztávolsága"
 
+#: gst-libs/gst/tag/tags.c:117
 msgid "Focal length of the lens used capturing the image, in mm"
 msgstr "A kép felvételéhez használt lencse fókusztávolsága mm-ben"
 
+#: gst-libs/gst/tag/tags.c:121
 msgid "capturing 35 mm equivalent focal length"
 msgstr "felvétel 35 mm egyenértékes fókusztávolsága"
 
-msgid ""
-"35 mm equivalent focal length of the lens used capturing the image, in mm"
-msgstr ""
-"A kép felvételéhez használt lencse 35 mm egyenértékes fókusztávolsága mm-ben"
+#: gst-libs/gst/tag/tags.c:122
+msgid "35 mm equivalent focal length of the lens used capturing the image, in mm"
+msgstr "A kép felvételéhez használt lencse 35 mm egyenértékes fókusztávolsága mm-ben"
 
+#: gst-libs/gst/tag/tags.c:126
 msgid "capturing digital zoom ratio"
 msgstr "felvétel digitális nagyítási aránya"
 
+#: gst-libs/gst/tag/tags.c:127
 msgid "Digital zoom ratio used when capturing an image"
 msgstr "A kép felvételéhez használt digitális nagyítási arány"
 
+#: gst-libs/gst/tag/tags.c:130
 msgid "capturing iso speed"
 msgstr "felvétel ISO sebessége"
 
+#: gst-libs/gst/tag/tags.c:131
 msgid "The ISO speed used when capturing an image"
 msgstr "A kép felvételéhez használt ISO sebesség"
 
+#: gst-libs/gst/tag/tags.c:134
 msgid "capturing exposure program"
 msgstr "felvétel expozíciós programja"
 
+#: gst-libs/gst/tag/tags.c:135
 msgid "The exposure program used when capturing an image"
 msgstr "A kép felvételéhez használt expozíciós program"
 
+#: gst-libs/gst/tag/tags.c:138
 msgid "capturing exposure mode"
 msgstr "felvétel expozíciós módja"
 
+#: gst-libs/gst/tag/tags.c:139
 msgid "The exposure mode used when capturing an image"
 msgstr "A kép felvételéhez használt expozíciós mód"
 
+#: gst-libs/gst/tag/tags.c:142
 msgid "capturing exposure compensation"
 msgstr "felvétel expozíciós kompenzációja"
 
+#: gst-libs/gst/tag/tags.c:143
 msgid "The exposure compensation used when capturing an image"
 msgstr "A kép felvételéhez használt expozíciós kompenzáció"
 
+#: gst-libs/gst/tag/tags.c:146
 msgid "capturing scene capture type"
 msgstr "felvétel helyszínfelvételi módja"
 
+#: gst-libs/gst/tag/tags.c:147
 msgid "The scene capture mode used when capturing an image"
 msgstr "A kép felvételéhez használt helyszínfelvételi mód"
 
+#: gst-libs/gst/tag/tags.c:150
 msgid "capturing gain adjustment"
 msgstr "felvétel erősítésmódosítása"
 
+#: gst-libs/gst/tag/tags.c:151
 msgid "The overall gain adjustment applied on an image"
 msgstr "A képre alkalmazott általános erősítésmódosítás"
 
+#: gst-libs/gst/tag/tags.c:154
 msgid "capturing white balance"
 msgstr "felvétel fehéregyensúlya"
 
+#: gst-libs/gst/tag/tags.c:155
 msgid "The white balance mode set when capturing an image"
 msgstr "A kép felvételéhez használt fehéregyensúlymód"
 
+#: gst-libs/gst/tag/tags.c:158
 msgid "capturing contrast"
 msgstr "felvétel kontrasztja"
 
+#: gst-libs/gst/tag/tags.c:159
 msgid "The direction of contrast processing applied when capturing an image"
 msgstr "A kép felvételekor használt kontrasztfeldolgozás iránya"
 
+#: gst-libs/gst/tag/tags.c:163
 msgid "capturing saturation"
 msgstr "felvétel telítettsége"
 
+#: gst-libs/gst/tag/tags.c:164
 msgid "The direction of saturation processing applied when capturing an image"
 msgstr "A kép felvételekor alkalmazott telítettségfeldolgozás iránya"
 
+#: gst-libs/gst/tag/tags.c:168
 msgid "capturing sharpness"
 msgstr "felvétel élessége"
 
+#: gst-libs/gst/tag/tags.c:169
 msgid "The direction of sharpness processing applied when capturing an image"
 msgstr "A kép felvételekor alkalmazott élességfeldolgozás iránya"
 
+#: gst-libs/gst/tag/tags.c:173
 msgid "capturing flash fired"
 msgstr "felvétel vakuja"
 
+#: gst-libs/gst/tag/tags.c:174
 msgid "If the flash fired while capturing an image"
 msgstr "A kép felvételéhez használt vaku"
 
+#: gst-libs/gst/tag/tags.c:177
 msgid "capturing flash mode"
 msgstr "felvétel vakumódja"
 
+#: gst-libs/gst/tag/tags.c:178
 msgid "The selected flash mode while capturing an image"
 msgstr "A kép felvételéhez használt kijelölt vakumód"
 
+#: gst-libs/gst/tag/tags.c:181
 msgid "capturing metering mode"
 msgstr "felvétel mérési módja"
 
-msgid ""
-"The metering mode used while determining exposure for capturing an image"
+#: gst-libs/gst/tag/tags.c:182
+msgid "The metering mode used while determining exposure for capturing an image"
 msgstr "A kép felvételekor az expozíció meghatározásához használt mérési mód"
 
+#: gst-libs/gst/tag/tags.c:186
 msgid "capturing source"
 msgstr "felvétel forrása"
 
+#: gst-libs/gst/tag/tags.c:187
 msgid "The source or type of device used for the capture"
 msgstr "A felvételhez használt forrás vagy eszköz típusa"
 
+#: gst-libs/gst/tag/tags.c:190
 msgid "image horizontal ppi"
 msgstr "kép vízszintes ppi"
 
+#: gst-libs/gst/tag/tags.c:191
 msgid "Media (image/video) intended horizontal pixel density in ppi"
 msgstr "A média (kép/videó) tervezett vízszintes képpontsűrűsége ppi-ben"
 
+#: gst-libs/gst/tag/tags.c:194
 msgid "image vertical ppi"
 msgstr "kép függőleges ppi"
 
+#: gst-libs/gst/tag/tags.c:195
 msgid "Media (image/video) intended vertical pixel density in ppi"
 msgstr "A média (kép/videó) tervezett függőleges képpontsűrűsége ppi-ben"
 
+#: gst-libs/gst/tag/tags.c:198
 msgid "ID3v2 frame"
 msgstr "ID3v2 keret"
 
+#: gst-libs/gst/tag/tags.c:198
 msgid "unparsed id3v2 tag frame"
 msgstr "feldolgozatlan id3v2 címke keret"
 
+#: gst-libs/gst/tag/tags.c:202
 msgid "musical-key"
 msgstr "zenei kulcs"
 
+#: gst-libs/gst/tag/tags.c:202
 msgid "Initial key in which the sound starts"
 msgstr "Kezdeti kulcs, amelyben a hang indul"
 
+#: tools/gst-device-monitor.c:260 tools/gst-play.c:1444
 msgid "Print version information and exit"
 msgstr "Verzióinformációk kiírása és kilépés"
 
-msgid ""
-"Don't exit after showing the initial device list, but wait for devices to "
-"added/removed."
-msgstr ""
-"Ne lépjen ki a kezdeti eszközlista megjelenítése után, de várjon az eszközök "
-"hozzáadására/eltávolítására."
+#: tools/gst-device-monitor.c:262
+msgid "Don't exit after showing the initial device list, but wait for devices to added/removed."
+msgstr "Ne lépjen ki a kezdeti eszközlista megjelenítése után, de várjon az eszközök hozzáadására/eltávolítására."
 
+#: tools/gst-play.c:310
 #, c-format
 msgid "Volume: %.0f%%"
 msgstr "Hangerő: %.0f%%"
 
+#: tools/gst-play.c:349
 msgid "Buffering..."
 msgstr "Pufferelés…"
 
+#: tools/gst-play.c:370
 msgid "Clock lost, selecting a new one\n"
 msgstr "Óra elveszítve, egy új kiválasztása\n"
 
+#: tools/gst-play.c:400 tools/gst-play.c:446 tools/gst-play.c:883
+#: tools/gst-play.c:1347
 msgid "Reached end of play list."
 msgstr "A lejátszólista vége elérve."
 
+#: tools/gst-play.c:613
 msgid "Paused"
 msgstr "Szüneteltetve"
 
+#: tools/gst-play.c:671
 #, c-format
 msgid "Now playing %s\n"
 msgstr "Most játszott: %s\n"
 
+#: tools/gst-play.c:734
 #, c-format
 msgid "About to finish, preparing next title: %s"
 msgstr "Hamarosan befejeződik, következő cím előkészítése: %s"
 
+#: tools/gst-play.c:979
 #, c-format
 msgid "Playback rate: %.2f"
 msgstr "Lejátszási sebesség: %.2f"
 
+#: tools/gst-play.c:983
 #, c-format
 msgid "Could not change playback rate to %.2f"
-msgstr "Nem lehet megváltoztatni a lejátszási sebességet erre: %.2f"
+msgstr "Nem sikerült megváltoztatni a lejátszási sebességet erre: %.2f"
 
+#: tools/gst-play.c:1287
 msgid "space"
 msgstr "szóköz"
 
+#: tools/gst-play.c:1287
 msgid "pause/unpause"
 msgstr "szünet/folytatás"
 
+#: tools/gst-play.c:1288
 msgid "q or ESC"
 msgstr "q vagy ESC"
 
+#: tools/gst-play.c:1288
 msgid "quit"
 msgstr "kilépés"
 
+#: tools/gst-play.c:1289
 msgid "> or n"
 msgstr "> vagy n"
 
+#: tools/gst-play.c:1289
 msgid "play next"
 msgstr "következő lejátszása"
 
+#: tools/gst-play.c:1290
 msgid "< or b"
 msgstr "< vagy b"
 
+#: tools/gst-play.c:1290
 msgid "play previous"
 msgstr "előző lejátszása"
 
+#: tools/gst-play.c:1291
 msgid "seek forward"
 msgstr "tekerés előre"
 
+#: tools/gst-play.c:1292
 msgid "seek backward"
 msgstr "tekerés hátra"
 
+#: tools/gst-play.c:1293
 msgid "volume up"
 msgstr "hangerő fel"
 
+#: tools/gst-play.c:1294
 msgid "volume down"
 msgstr "hangerő le"
 
+#: tools/gst-play.c:1295
 msgid "increase playback rate"
 msgstr "lejátszási sebesség növelése"
 
+#: tools/gst-play.c:1296
 msgid "decrease playback rate"
 msgstr "lejátszási sebesség csökkentése"
 
+#: tools/gst-play.c:1297
 msgid "change playback direction"
 msgstr "lejátszási irány megváltoztatása"
 
+#: tools/gst-play.c:1298
 msgid "enable/disable trick modes"
 msgstr "trükk módok engedélyezése/letiltása"
 
+#: tools/gst-play.c:1299
 msgid "change audio track"
 msgstr "hangsáv megváltoztatása"
 
+#: tools/gst-play.c:1300
 msgid "change video track"
 msgstr "videosáv megváltoztatása"
 
+#: tools/gst-play.c:1301
 msgid "change subtitle track"
 msgstr "feliratsáv megváltoztatása"
 
+#: tools/gst-play.c:1302
 msgid "seek to beginning"
 msgstr "tekerés az elejére"
 
+#: tools/gst-play.c:1303
 msgid "show keyboard shortcuts"
 msgstr "gyorsbillentyűk megjelenítése"
 
+#: tools/gst-play.c:1306
 msgid "Interactive mode - keyboard controls:"
 msgstr "Interaktív mód - billentyűzetvezérlők:"
 
+#: tools/gst-play.c:1439
 msgid "Output status information and property notifications"
 msgstr "Állapotinformációk és tulajdonságértesítések kiírása"
 
+#: tools/gst-play.c:1441
 msgid "Control playback behaviour setting playbin 'flags' property"
-msgstr ""
-"Lejátszás viselkedésének módosítása a playbin „flags” tulajdonságának "
-"beállításával"
+msgstr "Lejátszás viselkedésének módosítása a playbin „flags” tulajdonságának beállításával"
 
+#: tools/gst-play.c:1446
 msgid "Video sink to use (default is autovideosink)"
 msgstr "Használandó videosüllyesztés (az alapértelmezett az autovideosink)"
 
+#: tools/gst-play.c:1448
 msgid "Audio sink to use (default is autoaudiosink)"
 msgstr "Használandó hangsüllyesztés (az alapértelmezett az autoaudiosink)"
 
+#: tools/gst-play.c:1450
 msgid "Enable gapless playback"
 msgstr "Szünetmentes lejátszás bekapcsolása"
 
+#: tools/gst-play.c:1452
 msgid "Shuffle playlist"
 msgstr "Lejátszólista keverése"
 
+#: tools/gst-play.c:1455
 msgid "Disable interactive control via the keyboard"
 msgstr "Interaktív vezérlés letiltása a billentyűzeten keresztül"
 
+#: tools/gst-play.c:1457
 msgid "Volume"
 msgstr "Hangerő"
 
+#: tools/gst-play.c:1459
 msgid "Playlist file containing input media files"
 msgstr "Bemeneti médiafájlokat tartalmazó lejátszólista fájl"
 
+#: tools/gst-play.c:1461
 msgid "Do not print any output (apart from errors)"
 msgstr "Ne írjon ki semmilyen kimenetet (a hibákon kívül)"
 
+#: tools/gst-play.c:1463
 msgid "Use playbin3 pipeline"
-msgstr ""
+msgstr "Playbin3 csővezeték használata"
 
+#: tools/gst-play.c:1464
 msgid "(default varies depending on 'USE_PLAYBIN' env variable)"
-msgstr ""
+msgstr "(az alapértelmezett a „USE_PLAYBIN” környezeti változótól függően változik)"
+
+#: tools/gst-play.c:1468
+msgid "Keep showing the last frame on EOS until quit or playlist change command (gapless is ignored)"
+msgstr "Az utolsó képkocka láthatóan tartása az adatfolyam végén a kilépésig vagy a lejátszólista megváltoztatása parancsig (szünetmentes mellőzve)"
 
+#: tools/gst-play.c:1546
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr "Használat: %s FÁJL1|URI1 [FÁJL2|URI2] [FÁJL3|URI3] …"
 
+#: tools/gst-play.c:1550
 msgid "You must provide at least one filename or URI to play."
 msgstr "Meg kell adnia legalább egy fájlnevet vagy URI-t a lejátszáshoz."
 
+#: tools/gst-play.c:1590
 msgid "Press 'k' to see a list of keyboard shortcuts.\n"
-msgstr ""
-"Nyomja meg a „k” billentyűt a gyorsbillentyűk listájának megtekintéséhez.\n"
-
-#~ msgid "Could not create \"decodebin3\" element."
-#~ msgstr "Nem hozható létre „decodebin3” elem."
-
-#~ msgid "Could not create \"urisourcebin\" element."
-#~ msgstr "Nem hozható létre „urisourcebin” elem."
+msgstr "Nyomja meg a „k” billentyűt a gyorsbillentyűk listájának megtekintéséhez.\n"
index 7849c21..d3d736b 100644 (file)
@@ -6,10 +6,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base-1.15.1\n"
+"Project-Id-Version: gst-plugins-base-1.16.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:43+0000\n"
-"PO-Revision-Date: 2019-01-29 17:52+0100\n"
+"POT-Creation-Date: 2019-04-19 00:20+0100\n"
+"PO-Revision-Date: 2019-09-03 10:01+0200\n"
 "Last-Translator: Milo Casagrande <milo@milo.name>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
 "Language: it\n"
@@ -17,249 +17,318 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
-"X-Generator: Poedit 2.2.1\n"
+"X-Generator: Poedit 2.2.3\n"
 
+#: ext/alsa/gstalsasink.c:579
 msgid "Could not open device for playback in mono mode."
-msgstr ""
-"Impossibile aprire il dispositivo per la riproduzione in modalità mono."
+msgstr "Impossibile aprire il dispositivo per la riproduzione in modalità mono."
 
+#: ext/alsa/gstalsasink.c:581
 msgid "Could not open device for playback in stereo mode."
-msgstr ""
-"Impossibile aprire il dispositivo per la riproduzione in modalità stereo."
+msgstr "Impossibile aprire il dispositivo per la riproduzione in modalità stereo."
 
+#: ext/alsa/gstalsasink.c:585
 #, c-format
 msgid "Could not open device for playback in %d-channel mode."
-msgstr ""
-"Impossibile aprire il dispositivo per la riproduzione in modalità %d-canali."
+msgstr "Impossibile aprire il dispositivo per la riproduzione in modalità %d-canali."
 
-msgid ""
-"Could not open audio device for playback. Device is being used by another "
-"application."
-msgstr ""
-"Impossibile aprire il dispositivo audio per la riproduzione: è utilizzato da "
-"un'altra applicazione."
+#: ext/alsa/gstalsasink.c:858
+msgid "Could not open audio device for playback. Device is being used by another application."
+msgstr "Impossibile aprire il dispositivo audio per la riproduzione: è utilizzato da un'altra applicazione."
 
+#: ext/alsa/gstalsasink.c:863
 msgid "Could not open audio device for playback."
 msgstr "Impossibile aprire il dispositivo audio per la riproduzione."
 
+#: ext/alsa/gstalsasink.c:1076
 msgid "Error outputting to audio device. The device has been disconnected."
-msgstr ""
-"Errore nell'inviare dati audio al dispositivo di uscita: è stato scollegato."
+msgstr "Errore nell'inviare dati audio al dispositivo di uscita: è stato scollegato."
 
+#: ext/alsa/gstalsasrc.c:444
 msgid "Could not open device for recording in mono mode."
-msgstr ""
-"Impossibile aprire il dispositivo per la registrazione in modalità mono."
+msgstr "Impossibile aprire il dispositivo per la registrazione in modalità mono."
 
+#: ext/alsa/gstalsasrc.c:446
 msgid "Could not open device for recording in stereo mode."
-msgstr ""
-"Impossibile aprire il dispositivo per la registrazione in modalità stereo."
+msgstr "Impossibile aprire il dispositivo per la registrazione in modalità stereo."
 
+#: ext/alsa/gstalsasrc.c:450
 #, c-format
 msgid "Could not open device for recording in %d-channel mode"
-msgstr ""
-"Impossibile aprire il dispositivo per la registrazione in modalità %d-canali."
+msgstr "Impossibile aprire il dispositivo per la registrazione in modalità %d-canali."
 
-msgid ""
-"Could not open audio device for recording. Device is being used by another "
-"application."
-msgstr ""
-"Impossibile aprire il dispositivo audio per la registrazione: è utilizzato "
-"da un'altra applicazione."
+#: ext/alsa/gstalsasrc.c:741
+msgid "Could not open audio device for recording. Device is being used by another application."
+msgstr "Impossibile aprire il dispositivo audio per la registrazione: è utilizzato da un'altra applicazione."
 
+#: ext/alsa/gstalsasrc.c:746
 msgid "Could not open audio device for recording."
 msgstr "Impossibile aprire il dispositivo audio per la registrazione."
 
+#: ext/alsa/gstalsasrc.c:992
 msgid "Error recording from audio device. The device has been disconnected."
 msgstr "Errore nel registrare dal dispositivo audio: è stato scollegato."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:277 ext/cdparanoia/gstcdparanoiasrc.c:283
 msgid "Could not open CD device for reading."
 msgstr "Impossibile aprire il device CD in lettura."
 
 # seek --> posizionamento (come in glib/gio)
+#: ext/cdparanoia/gstcdparanoiasrc.c:409
 msgid "Could not seek CD."
 msgstr "Impossibile effettuare il posizionamento nel CD."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:417
 msgid "Could not read CD."
 msgstr "Impossibile leggere il CD."
 
+#: ext/gl/gstgltestsrc.c:491
 msgid "failed to draw pattern"
 msgstr "generazione modello non riuscita"
 
+#: ext/gl/gstgltestsrc.c:492
 msgid "A GL error occurred"
 msgstr "Si è verificato un errore GL"
 
+#: ext/gl/gstgltestsrc.c:498
 msgid "format wasn't negotiated before get function"
 msgstr "il formato non è stato concordato prima della funzione get"
 
+#: gst/encoding/gstencodebin.c:1636 gst/playback/gstplaybin2.c:3399
+#: gst/playback/gstplaysink.c:1522 gst/playback/gstplaysink.c:1535
+#: gst/playback/gstplaysink.c:1872 gst/playback/gstplaysink.c:1904
+#: gst/playback/gstplaysink.c:2488 gst/playback/gstplaysink.c:2537
+#: gst/playback/gstplaysink.c:2552 gst/playback/gstplaysink.c:2577
+#: gst/playback/gstplaysink.c:2609 gst/playback/gstplaysink.c:2757
+#: gst/playback/gstplaysink.c:2788 gst/playback/gstplaysink.c:3166
+#: gst/playback/gstplaysink.c:3175 gst/playback/gstplaysink.c:3184
+#: gst/playback/gstplaysink.c:3193 gst/playback/gstplaysink.c:3606
+#: gst/playback/gstplaysink.c:4526 gst/playback/gstplaysinkconvertbin.c:97
+#: gst/playback/gstplaysinkconvertbin.c:117
+#: gst/playback/gsturidecodebin.c:1472 gst/playback/gsturisourcebin.c:1597
 #, c-format
 msgid "Missing element '%s' - check your GStreamer installation."
-msgstr ""
-"Elemento «%s» mancante - verificare la propria installazione di GStreamer."
+msgstr "Elemento «%s» mancante - verificare la propria installazione di GStreamer."
 
+#: gst/playback/gstdecodebin2.c:1883 gst/playback/gstparsebin.c:1553
 msgid "Could not determine type of stream"
 msgstr "Impossibile determinare il tipo di flusso"
 
+#: gst/playback/gstdecodebin2.c:2861 gst/playback/gstparsebin.c:2385
 msgid "This appears to be a text file"
 msgstr "Questo sembra essere un file di testo"
 
+#: gst/playback/gstplaybin2.c:5452
 msgid "Could not create \"uridecodebin\" element."
 msgstr "Impossibile creare l'elemento «uridecodebin»."
 
+#: gst/playback/gstplaybin3.c:4558
 msgid "Could not create \"uridecodebin3\" element."
 msgstr "Impossibile creare l'elemento «uridecodebin3»."
 
+#: gst/playback/gstplaysink.c:2003
 #, c-format
 msgid "Both autovideosink and %s elements are missing."
 msgstr "Risultano mancanti entrambi gli elementi «autovideosink» e «%s»."
 
+#: gst/playback/gstplaysink.c:2007
 msgid "The autovideosink element is missing."
 msgstr "Risulta mancante l'elemento «autovideosink»."
 
+#: gst/playback/gstplaysink.c:2012
 #, c-format
 msgid "Configured videosink %s is not working."
 msgstr "L'elemento videosink «%s» non è operativo."
 
+#: gst/playback/gstplaysink.c:2016
 #, c-format
 msgid "Both autovideosink and %s elements are not working."
 msgstr "Entrambi gli elementi «autovideosink» e «%s» non sono operativi."
 
+#: gst/playback/gstplaysink.c:2020
 msgid "The autovideosink element is not working."
 msgstr "L'elemento «autovideosink» non è operativo."
 
+#: gst/playback/gstplaysink.c:2525
 msgid "Custom text sink element is not usable."
 msgstr "L'elemento sink di testo personalizzato non è utilizzabile."
 
+#: gst/playback/gstplaysink.c:2903
 msgid "No volume control found"
 msgstr "Non è stato trovato alcun controllo del volume"
 
+#: gst/playback/gstplaysink.c:2933
 #, c-format
 msgid "Both autoaudiosink and %s elements are missing."
 msgstr "Risultano mancanti entrambi gli elementi «autoaudiosink» e «%s»."
 
+#: gst/playback/gstplaysink.c:2937
 msgid "The autoaudiosink element is missing."
 msgstr "Risulta mancante l'elemento «autoaudiosink»."
 
+#: gst/playback/gstplaysink.c:2942
 #, c-format
 msgid "Configured audiosink %s is not working."
 msgstr "L'elemento audiosink «%s» non è operativo."
 
+#: gst/playback/gstplaysink.c:2946
 #, c-format
 msgid "Both autoaudiosink and %s elements are not working."
 msgstr "Entrambi gli elementi «autoaudiosink» e «%s» non sono operativi."
 
+#: gst/playback/gstplaysink.c:2950
 msgid "The autoaudiosink element is not working."
 msgstr "L'elemento «autoaudiosink» non è operativo."
 
+#: gst/playback/gstplaysink.c:3269 gst/playback/gstplaysink.c:3274
 msgid "Can't play a text file without video or visualizations."
 msgstr "Impossibile riprodurre un file di testo senza video o visualizzazioni."
 
+#: gst/playback/gsturidecodebin.c:921
 #, c-format
 msgid "No decoder available for type '%s'."
 msgstr "Nessun decoder disponibile per il tipo «%s»."
 
+#: gst/playback/gsturidecodebin.c:1378 gst/playback/gsturisourcebin.c:1491
 msgid "No URI specified to play from."
 msgstr "Non è stato specificato alcun URI da cui riprodurre."
 
+#: gst/playback/gsturidecodebin.c:1384 gst/playback/gsturisourcebin.c:1497
 #, c-format
 msgid "Invalid URI \"%s\"."
 msgstr "URI «%s» non valido."
 
+#: gst/playback/gsturidecodebin.c:1391 gst/playback/gsturisourcebin.c:1504
 msgid "This stream type cannot be played yet."
 msgstr "Non è ancora possibile riprodurre questo tipo di stream."
 
+#: gst/playback/gsturidecodebin.c:1409 gst/playback/gsturisourcebin.c:1522
 #, c-format
 msgid "No URI handler implemented for \"%s\"."
 msgstr "Nessun gestore di URI implementato per «%s»."
 
+#: gst/playback/gsturidecodebin.c:2289 gst/playback/gsturisourcebin.c:2228
 msgid "Source element is invalid."
 msgstr "L'elemento sorgente non è valido."
 
+#: gst/tcp/gsttcpclientsink.c:216
 #, c-format
 msgid "Error while sending data to \"%s:%d\"."
 msgstr "Errore durante l'invio dei dati a \"%s:%d\"."
 
 # una parafrasi, ma mi pare non perda...  -Luca
+#: gst-libs/gst/audio/gstaudiobasesrc.c:842
 msgid "Can't record audio fast enough"
 msgstr "Impossibile registrare l'audio a velocità adeguata"
 
+#: gst-libs/gst/audio/gstaudiocdsrc.c:1625
 msgid "This CD has no audio tracks"
 msgstr "Questo CD non presenta alcuna traccia audio"
 
+#: gst-libs/gst/pbutils/descriptions.c:89
 msgid "ID3 tag"
 msgstr "Tag ID3"
 
+#: gst-libs/gst/pbutils/descriptions.c:90
+#: gst-libs/gst/pbutils/descriptions.c:91
 msgid "APE tag"
 msgstr "Tag APE"
 
+#: gst-libs/gst/pbutils/descriptions.c:92
 msgid "ICY internet radio"
 msgstr "Radio internet ICY"
 
+#: gst-libs/gst/pbutils/descriptions.c:127
 msgid "Apple Lossless Audio (ALAC)"
 msgstr "ALAC (Apple Lossless Audio)"
 
+#: gst-libs/gst/pbutils/descriptions.c:143
 msgid "Free Lossless Audio Codec (FLAC)"
 msgstr "FLAC (Free Lossless Audio Codec)"
 
+#: gst-libs/gst/pbutils/descriptions.c:173
+#: gst-libs/gst/pbutils/descriptions.c:174
 msgid "Lossless True Audio (TTA)"
 msgstr "TTA (Lossless True Audio)"
 
+#: gst-libs/gst/pbutils/descriptions.c:182
 msgid "Windows Media Speech"
 msgstr "Windows Media Speech"
 
+#: gst-libs/gst/pbutils/descriptions.c:199
 msgid "CYUV Lossless"
 msgstr "CYUV senza perdita"
 
+#: gst-libs/gst/pbutils/descriptions.c:203
 msgid "FFMpeg v1"
 msgstr "FFMpeg v1"
 
+#: gst-libs/gst/pbutils/descriptions.c:217
 msgid "Lossless MSZH"
 msgstr "MSZH senza perdita"
 
 # cfr http://en.wikipedia.org/wiki/Run_length_encoding
+#: gst-libs/gst/pbutils/descriptions.c:228
 msgid "Run-length encoding"
 msgstr "RLE (Run-Length Encoding)"
 
+#: gst-libs/gst/pbutils/descriptions.c:274
 msgid "Timed Text"
 msgstr "Testo temporizzato"
 
+#: gst-libs/gst/pbutils/descriptions.c:278
 msgid "Subtitle"
 msgstr "Sottotitolo"
 
+#: gst-libs/gst/pbutils/descriptions.c:279
 msgid "MPL2 subtitle format"
 msgstr "Sottotitoli formato MPL2"
 
+#: gst-libs/gst/pbutils/descriptions.c:280
 msgid "DKS subtitle format"
 msgstr "Sottotitoli formato DKS"
 
+#: gst-libs/gst/pbutils/descriptions.c:281
 msgid "QTtext subtitle format"
 msgstr "Sottotitoli formato QTtext"
 
 # grazie San Google
+#: gst-libs/gst/pbutils/descriptions.c:282
 msgid "Sami subtitle format"
 msgstr "Sottotitoli formato SAMI"
 
+#: gst-libs/gst/pbutils/descriptions.c:283
 msgid "TMPlayer subtitle format"
 msgstr "Sottotitoli formato TMPlayer"
 
+#: gst-libs/gst/pbutils/descriptions.c:287
 msgid "CEA 608 Closed Caption"
 msgstr "Sottotitolo per non udenti CEA 608"
 
+#: gst-libs/gst/pbutils/descriptions.c:288
 msgid "CEA 708 Closed Caption"
 msgstr "Sottotitolo per non udenti CEA 708"
 
+#: gst-libs/gst/pbutils/descriptions.c:289
 msgid "Kate subtitle format"
 msgstr "Sottotitoli formato Kate"
 
+#: gst-libs/gst/pbutils/descriptions.c:290
 msgid "WebVTT subtitle format"
 msgstr "Sottotitoli formato WebVTT"
 
+#: gst-libs/gst/pbutils/descriptions.c:455
+#: gst-libs/gst/pbutils/descriptions.c:458
+#: gst-libs/gst/pbutils/descriptions.c:508
 msgid "Uncompressed video"
 msgstr "Video non compresso"
 
 # (ndt) forse scala di grigi?
+#: gst-libs/gst/pbutils/descriptions.c:463
 msgid "Uncompressed gray"
 msgstr "Grigio non compresso"
 
+#: gst-libs/gst/pbutils/descriptions.c:486
 #, c-format
 msgid "Uncompressed packed YUV %s"
 msgstr "YUV %s packed non compresso"
@@ -271,6 +340,7 @@ msgstr "YUV %s packed non compresso"
 #
 # Dal secondo e terzo, evinco YUV compresso o planare sarebbero
 # buone abbreviazioni, ma tengo planare/packed + compresso/noncompresso
+#: gst-libs/gst/pbutils/descriptions.c:488
 #, c-format
 msgid "Uncompressed semi-planar YUV %s"
 msgstr "YUV %s semi-planare non compresso"
@@ -282,587 +352,562 @@ msgstr "YUV %s semi-planare non compresso"
 #
 # Dal secondo e terzo, evinco YUV compresso o planare sarebbero
 # buone abbreviazioni, ma tengo planare/packed + compresso/noncompresso
+#: gst-libs/gst/pbutils/descriptions.c:490
 #, c-format
 msgid "Uncompressed planar YUV %s"
 msgstr "YUV %s planare non compresso"
 
+#: gst-libs/gst/pbutils/descriptions.c:501
 #, c-format
 msgid "Uncompressed palettized %d-bit %s"
 msgstr "%2$s %1$d-bit con tavolozza non compresso"
 
+#: gst-libs/gst/pbutils/descriptions.c:504
 #, c-format
 msgid "Uncompressed %d-bit %s"
 msgstr "%2$s %1$d-bit non compresso"
 
+#: gst-libs/gst/pbutils/descriptions.c:586
 #, c-format
 msgid "DivX MPEG-4 Version %d"
 msgstr "MPEG-4 DivX versione %d"
 
+#: gst-libs/gst/pbutils/descriptions.c:834
 msgid "Uncompressed audio"
 msgstr "Audio non compresso"
 
+#: gst-libs/gst/pbutils/descriptions.c:840
 #, c-format
 msgid "Raw %d-bit %s audio"
 msgstr "Audio raw %2$s %1$d-bit"
 
+#: gst-libs/gst/pbutils/descriptions.c:942
 msgid "Audio CD source"
 msgstr "Sorgente CD audio"
 
+#: gst-libs/gst/pbutils/descriptions.c:945
 msgid "DVD source"
 msgstr "Sorgente DVD"
 
+#: gst-libs/gst/pbutils/descriptions.c:948
 msgid "Real Time Streaming Protocol (RTSP) source"
 msgstr "Sorgente protocollo RTSP (Real Time Streaming Protocol)"
 
+#: gst-libs/gst/pbutils/descriptions.c:952
 msgid "Microsoft Media Server (MMS) protocol source"
 msgstr "Sorgente protocollo MMS (Microsoft Media Server)"
 
+#: gst-libs/gst/pbutils/descriptions.c:960
 #, c-format
 msgid "%s protocol source"
 msgstr "Sorgente protocollo %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1034
 #, c-format
 msgid "%s video RTP depayloader"
 msgstr "Depayloader RTP %s video"
 
+#: gst-libs/gst/pbutils/descriptions.c:1036
 #, c-format
 msgid "%s audio RTP depayloader"
 msgstr "Depayloader RTP %s audio"
 
+#: gst-libs/gst/pbutils/descriptions.c:1038
 #, c-format
 msgid "%s RTP depayloader"
 msgstr "Depayloader RTP %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1045
 #, c-format
 msgid "%s demuxer"
 msgstr "Demuxer %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1047
 #, c-format
 msgid "%s decoder"
 msgstr "Decoder %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1086
 #, c-format
 msgid "%s video RTP payloader"
 msgstr "Payloader RTP %s video"
 
+#: gst-libs/gst/pbutils/descriptions.c:1088
 #, c-format
 msgid "%s audio RTP payloader"
 msgstr "Payloader RTP %s audio"
 
+#: gst-libs/gst/pbutils/descriptions.c:1090
 #, c-format
 msgid "%s RTP payloader"
 msgstr "Payloader RTP %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1097
 #, c-format
 msgid "%s muxer"
 msgstr "Muxer %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1099
 #, c-format
 msgid "%s encoder"
 msgstr "Encoder %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1133
 #, c-format
 msgid "GStreamer element %s"
 msgstr "Elemento GStreamer %s"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:558
 msgid "Unknown source element"
 msgstr "Elemento sorgente sconosciuto"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:561
 msgid "Unknown sink element"
 msgstr "Elemento sink sconosciuto"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:564
 msgid "Unknown element"
 msgstr "Elemento sconosciuto"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:567
 msgid "Unknown decoder element"
 msgstr "Elemendo di decodifica sconosciuto"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:570
 msgid "Unknown encoder element"
 msgstr "Elemento di codifica sconosciuto"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:575
 msgid "Plugin or element of unknown type"
 msgstr "Plugin o elemento di tipo sconosciuto"
 
+#: gst-libs/gst/tag/gsttagdemux.c:1243
 msgid "Failed to read tag: not enough data"
 msgstr "Lettura del tag non riuscita: dati insufficienti"
 
+#: gst-libs/gst/tag/tags.c:77
 msgid "track ID"
 msgstr "ID traccia"
 
+#: gst-libs/gst/tag/tags.c:77
 msgid "MusicBrainz track ID"
 msgstr "ID MusicBrainz della traccia"
 
+#: gst-libs/gst/tag/tags.c:79
 msgid "artist ID"
 msgstr "ID artista"
 
+#: gst-libs/gst/tag/tags.c:79
 msgid "MusicBrainz artist ID"
 msgstr "ID MusicBrainz dell'artista"
 
+#: gst-libs/gst/tag/tags.c:81
 msgid "album ID"
 msgstr "ID album"
 
+#: gst-libs/gst/tag/tags.c:81
 msgid "MusicBrainz album ID"
 msgstr "ID MusicBrainz dell'album"
 
+#: gst-libs/gst/tag/tags.c:84
 msgid "album artist ID"
 msgstr "ID artista dell'album"
 
+#: gst-libs/gst/tag/tags.c:84
 msgid "MusicBrainz album artist ID"
 msgstr "ID MusicBrainz dell'artista dell'album"
 
+#: gst-libs/gst/tag/tags.c:86
 msgid "track TRM ID"
 msgstr "ID TRM della traccia"
 
+#: gst-libs/gst/tag/tags.c:86
 msgid "MusicBrainz TRM ID"
 msgstr "ID MusicBrainz del TRM"
 
+#: gst-libs/gst/tag/tags.c:108
 msgid "capturing shutter speed"
 msgstr "velocità di scatto di cattura"
 
+#: gst-libs/gst/tag/tags.c:109
 msgid "Shutter speed used when capturing an image, in seconds"
 msgstr "Velocità di scatto usata nel catturare un'immagine, in secondi"
 
+#: gst-libs/gst/tag/tags.c:112
 msgid "capturing focal ratio"
 msgstr "rapporto focale di cattura"
 
+#: gst-libs/gst/tag/tags.c:113
 msgid "Focal ratio (f-number) used when capturing the image"
 msgstr "Rapporto focale (numero f) usata nel catturare un'immagine"
 
+#: gst-libs/gst/tag/tags.c:116
 msgid "capturing focal length"
 msgstr "lunghezza focale di cattura"
 
+#: gst-libs/gst/tag/tags.c:117
 msgid "Focal length of the lens used capturing the image, in mm"
 msgstr "Lunghezza focale dell'obiettivo usato per catturare un'immagine, in mm"
 
+#: gst-libs/gst/tag/tags.c:121
 msgid "capturing 35 mm equivalent focal length"
 msgstr "lunghezza focale di cattura equivalente 35 mm"
 
-msgid ""
-"35 mm equivalent focal length of the lens used capturing the image, in mm"
-msgstr ""
-"Lunghezza focale equivalente a 35 mm delle lenti utilizzate per catturare "
-"un'immagine, in mm"
+#: gst-libs/gst/tag/tags.c:122
+msgid "35 mm equivalent focal length of the lens used capturing the image, in mm"
+msgstr "Lunghezza focale equivalente a 35 mm delle lenti utilizzate per catturare un'immagine, in mm"
 
+#: gst-libs/gst/tag/tags.c:126
 msgid "capturing digital zoom ratio"
 msgstr "rapporto ingrandimento digitale di cattura"
 
+#: gst-libs/gst/tag/tags.c:127
 msgid "Digital zoom ratio used when capturing an image"
 msgstr "Rapporto ingrandimento digitale usato nel catturare un'immagine"
 
+#: gst-libs/gst/tag/tags.c:130
 msgid "capturing iso speed"
 msgstr "velocità iso di cattura"
 
+#: gst-libs/gst/tag/tags.c:131
 msgid "The ISO speed used when capturing an image"
 msgstr "La velocità ISO usata nel catturare un'immagine"
 
+#: gst-libs/gst/tag/tags.c:134
 msgid "capturing exposure program"
 msgstr "programma esposizione di cattura"
 
+#: gst-libs/gst/tag/tags.c:135
 msgid "The exposure program used when capturing an image"
 msgstr "Il programma di esposizione usato nel catturare un'immagine"
 
+#: gst-libs/gst/tag/tags.c:138
 msgid "capturing exposure mode"
 msgstr "modalità esposizione di cattura"
 
+#: gst-libs/gst/tag/tags.c:139
 msgid "The exposure mode used when capturing an image"
 msgstr "La modalità di esposizione usata nel catturare un'immagine"
 
+#: gst-libs/gst/tag/tags.c:142
 msgid "capturing exposure compensation"
 msgstr "compensazione esposizione di cattura"
 
+#: gst-libs/gst/tag/tags.c:143
 msgid "The exposure compensation used when capturing an image"
 msgstr "La compensazione dell'esposizione usata nel catturare un'immagine"
 
+#: gst-libs/gst/tag/tags.c:146
 msgid "capturing scene capture type"
 msgstr "tipo di scena di cattura"
 
+#: gst-libs/gst/tag/tags.c:147
 msgid "The scene capture mode used when capturing an image"
 msgstr "Il tipo di scena usato nel catturare un'immagine"
 
+#: gst-libs/gst/tag/tags.c:150
 msgid "capturing gain adjustment"
 msgstr "regolazione guadagno di cattura"
 
+#: gst-libs/gst/tag/tags.c:151
 msgid "The overall gain adjustment applied on an image"
 msgstr "La regolazione del guadagno applicata a un'immagine"
 
+#: gst-libs/gst/tag/tags.c:154
 msgid "capturing white balance"
 msgstr "bilanciamento bianco di cattura"
 
+#: gst-libs/gst/tag/tags.c:155
 msgid "The white balance mode set when capturing an image"
-msgstr ""
-"La modalità di bilanciamento del bianco usata nel catturare un'immagine"
+msgstr "La modalità di bilanciamento del bianco usata nel catturare un'immagine"
 
+#: gst-libs/gst/tag/tags.c:158
 msgid "capturing contrast"
 msgstr "contrasto di cattura"
 
+#: gst-libs/gst/tag/tags.c:159
 msgid "The direction of contrast processing applied when capturing an image"
-msgstr ""
-"La direzione di elaborazione del contrasto applicata nella cattura di "
-"un'immagine"
+msgstr "La direzione di elaborazione del contrasto applicata nella cattura di un'immagine"
 
+#: gst-libs/gst/tag/tags.c:163
 msgid "capturing saturation"
 msgstr "saturazione di cattura"
 
+#: gst-libs/gst/tag/tags.c:164
 msgid "The direction of saturation processing applied when capturing an image"
-msgstr ""
-"La direzione di elaborazione della saturazione applicata nella cattura di "
-"un'immagine"
+msgstr "La direzione di elaborazione della saturazione applicata nella cattura di un'immagine"
 
+#: gst-libs/gst/tag/tags.c:168
 msgid "capturing sharpness"
 msgstr "nitidezza di cattura"
 
+#: gst-libs/gst/tag/tags.c:169
 msgid "The direction of sharpness processing applied when capturing an image"
-msgstr ""
-"La direzione di elaborazione della nitidezza applicata nella cattura di "
-"un'immagine"
+msgstr "La direzione di elaborazione della nitidezza applicata nella cattura di un'immagine"
 
+#: gst-libs/gst/tag/tags.c:173
 msgid "capturing flash fired"
 msgstr "flash utilizzato in cattura"
 
+#: gst-libs/gst/tag/tags.c:174
 msgid "If the flash fired while capturing an image"
 msgstr "Indica se è stato usato il flash nel catturare un'immagine"
 
+#: gst-libs/gst/tag/tags.c:177
 msgid "capturing flash mode"
 msgstr "modalità flash di cattura"
 
+#: gst-libs/gst/tag/tags.c:178
 msgid "The selected flash mode while capturing an image"
 msgstr "La modalità selezionata del flash nel catturare un'immagine"
 
+#: gst-libs/gst/tag/tags.c:181
 msgid "capturing metering mode"
 msgstr "modalità misurazione esposizione in cattura"
 
-msgid ""
-"The metering mode used while determining exposure for capturing an image"
-msgstr ""
-"La modalità di misurazione dell'esposizione usata nel catturare un'immagine"
+#: gst-libs/gst/tag/tags.c:182
+msgid "The metering mode used while determining exposure for capturing an image"
+msgstr "La modalità di misurazione dell'esposizione usata nel catturare un'immagine"
 
+#: gst-libs/gst/tag/tags.c:186
 msgid "capturing source"
 msgstr "sorgente di cattura"
 
+#: gst-libs/gst/tag/tags.c:187
 msgid "The source or type of device used for the capture"
 msgstr "La sorgente o il tipo di dispositivo usato per la cattura"
 
+#: gst-libs/gst/tag/tags.c:190
 msgid "image horizontal ppi"
 msgstr "ppi orizzontale immagine"
 
+#: gst-libs/gst/tag/tags.c:191
 msgid "Media (image/video) intended horizontal pixel density in ppi"
-msgstr ""
-"Densità pixel orizzontale in ppi per elementi multimediali (image/video)"
+msgstr "Densità pixel orizzontale in ppi per elementi multimediali (image/video)"
 
+#: gst-libs/gst/tag/tags.c:194
 msgid "image vertical ppi"
 msgstr "ppi verticale immagine"
 
+#: gst-libs/gst/tag/tags.c:195
 msgid "Media (image/video) intended vertical pixel density in ppi"
 msgstr "Densità pixel verticale in ppi per elementi multimediali (image/video)"
 
+#: gst-libs/gst/tag/tags.c:198
 msgid "ID3v2 frame"
 msgstr "Frame ID3v2"
 
+#: gst-libs/gst/tag/tags.c:198
 msgid "unparsed id3v2 tag frame"
 msgstr "Tag frame id3v2 non analizzato"
 
+#: gst-libs/gst/tag/tags.c:202
 msgid "musical-key"
 msgstr "chiave musicale"
 
+#: gst-libs/gst/tag/tags.c:202
 msgid "Initial key in which the sound starts"
 msgstr "Chiave iniziale con cui inizia l'audio"
 
+#: tools/gst-device-monitor.c:260 tools/gst-play.c:1444
 msgid "Print version information and exit"
 msgstr "Stampa informazioni di versione ed esce"
 
-msgid ""
-"Don't exit after showing the initial device list, but wait for devices to "
-"added/removed."
-msgstr ""
-"Non esce dopo aver mostrato l'elenco dispositivi, ma attende dispositivi "
-"aggiunti/rimossi"
+#: tools/gst-device-monitor.c:262
+msgid "Don't exit after showing the initial device list, but wait for devices to added/removed."
+msgstr "Non esce dopo aver mostrato l'elenco dispositivi, ma attende dispositivi aggiunti/rimossi"
 
+#: tools/gst-play.c:310
 #, c-format
 msgid "Volume: %.0f%%"
 msgstr "Volume: %.0f%%"
 
+#: tools/gst-play.c:349
 msgid "Buffering..."
 msgstr "Riempimento buffer..."
 
+#: tools/gst-play.c:370
 msgid "Clock lost, selecting a new one\n"
 msgstr "Orologio perso, ne viene selezionato uno nuovo\n"
 
+#: tools/gst-play.c:400 tools/gst-play.c:446 tools/gst-play.c:883
+#: tools/gst-play.c:1347
 msgid "Reached end of play list."
 msgstr "Raggiunta la fine dalla coda di riproduzione."
 
+#: tools/gst-play.c:613
 msgid "Paused"
 msgstr "In pausa"
 
+#: tools/gst-play.c:671
 #, c-format
 msgid "Now playing %s\n"
 msgstr "Ora in riproduzione %s\n"
 
+#: tools/gst-play.c:734
 #, c-format
 msgid "About to finish, preparing next title: %s"
 msgstr "Quasi finito, preparazione del prossimo titolo: %s"
 
+#: tools/gst-play.c:979
 #, c-format
 msgid "Playback rate: %.2f"
 msgstr "Velocità riproduzione: %.2f"
 
+#: tools/gst-play.c:983
 #, c-format
 msgid "Could not change playback rate to %.2f"
 msgstr "Impossibile cambiare la velocità di riproduzione a %.2f"
 
+#: tools/gst-play.c:1287
 msgid "space"
 msgstr "spazio"
 
+#: tools/gst-play.c:1287
 msgid "pause/unpause"
 msgstr "pausa/riproduci"
 
+#: tools/gst-play.c:1288
 msgid "q or ESC"
 msgstr "q o Esc"
 
+#: tools/gst-play.c:1288
 msgid "quit"
 msgstr "esci"
 
+#: tools/gst-play.c:1289
 msgid "> or n"
 msgstr "> o n"
 
+#: tools/gst-play.c:1289
 msgid "play next"
 msgstr "riproduci successivo"
 
+#: tools/gst-play.c:1290
 msgid "< or b"
 msgstr "< o b"
 
+#: tools/gst-play.c:1290
 msgid "play previous"
 msgstr "riproduci precedente"
 
+#: tools/gst-play.c:1291
 msgid "seek forward"
 msgstr "posiziona avanti"
 
+#: tools/gst-play.c:1292
 msgid "seek backward"
 msgstr "posiziona indietro"
 
+#: tools/gst-play.c:1293
 msgid "volume up"
 msgstr "alza volume"
 
+#: tools/gst-play.c:1294
 msgid "volume down"
 msgstr "abbassa volumne"
 
+#: tools/gst-play.c:1295
 msgid "increase playback rate"
 msgstr "aumenta velocità riproduzione"
 
+#: tools/gst-play.c:1296
 msgid "decrease playback rate"
 msgstr "diminuisci velocità riproduzione"
 
+#: tools/gst-play.c:1297
 msgid "change playback direction"
 msgstr "cambia direzione di riproduzione"
 
+#: tools/gst-play.c:1298
 msgid "enable/disable trick modes"
 msgstr "abilita/disabilita le modalità trick"
 
+#: tools/gst-play.c:1299
 msgid "change audio track"
 msgstr "cambia traccia audio"
 
+#: tools/gst-play.c:1300
 msgid "change video track"
 msgstr "cambia traccia video"
 
+#: tools/gst-play.c:1301
 msgid "change subtitle track"
 msgstr "cambia traccia sottotitoli"
 
+#: tools/gst-play.c:1302
 msgid "seek to beginning"
 msgstr "vai all'inizio"
 
+#: tools/gst-play.c:1303
 msgid "show keyboard shortcuts"
 msgstr "mostra scorciatoie da tastiera"
 
+#: tools/gst-play.c:1306
 msgid "Interactive mode - keyboard controls:"
 msgstr "Modalità interattiva - controlli da tastiera:"
 
+#: tools/gst-play.c:1439
 msgid "Output status information and property notifications"
 msgstr "Stampa informazioni di stato e notifiche delle proprietà"
 
+#: tools/gst-play.c:1441
 msgid "Control playback behaviour setting playbin 'flags' property"
-msgstr ""
-"Controlla il comportamento di riproduzione impostando la proprietà «flags» "
-"di playbin"
+msgstr "Controlla il comportamento di riproduzione impostando la proprietà «flags» di playbin"
 
+#: tools/gst-play.c:1446
 msgid "Video sink to use (default is autovideosink)"
 msgstr "Sink video da usare (predefinito autovideosink)"
 
+#: tools/gst-play.c:1448
 msgid "Audio sink to use (default is autoaudiosink)"
 msgstr "Sink audio da usare (predefinito autoaudiosink)"
 
+#: tools/gst-play.c:1450
 msgid "Enable gapless playback"
 msgstr "Abilita riproduzione senza interruzioni"
 
+#: tools/gst-play.c:1452
 msgid "Shuffle playlist"
 msgstr "Mischia playlist"
 
+#: tools/gst-play.c:1455
 msgid "Disable interactive control via the keyboard"
 msgstr "Disabilita il controllo interattivo da tastiera"
 
+#: tools/gst-play.c:1457
 msgid "Volume"
 msgstr "Volume"
 
+#: tools/gst-play.c:1459
 msgid "Playlist file containing input media files"
 msgstr "File playlist contenente i file multimediali di ingresso"
 
+#: tools/gst-play.c:1461
 msgid "Do not print any output (apart from errors)"
 msgstr "Non stampare nulla (a parte gli errori)"
 
+#: tools/gst-play.c:1463
 msgid "Use playbin3 pipeline"
 msgstr "Usa pipeline playbin3"
 
+#: tools/gst-play.c:1464
 msgid "(default varies depending on 'USE_PLAYBIN' env variable)"
 msgstr "(il predefinito varia in base alla variabile USE_PLAYBIN)"
 
+#: tools/gst-play.c:1468
+msgid "Keep showing the last frame on EOS until quit or playlist change command (gapless is ignored)"
+msgstr "Continua a mostrare l'ultimo fotogramma su EOS fino all'uscita o al comando di modifica della playlist (gapless viene ignorato)"
+
+#: tools/gst-play.c:1546
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr "Utilizzo: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 
+#: tools/gst-play.c:1550
 msgid "You must provide at least one filename or URI to play."
 msgstr "È necessario fornire almeno un nome file o un URI da riprodurre."
 
+#: tools/gst-play.c:1590
 msgid "Press 'k' to see a list of keyboard shortcuts.\n"
 msgstr "Premere «k» per consultare le scorciatoie da tastiera.\n"
-
-#~ msgid "Master"
-#~ msgstr "Principale"
-
-#~ msgid "Bass"
-#~ msgstr "Bassi"
-
-#~ msgid "Treble"
-#~ msgstr "Acuti"
-
-#~ msgid "PCM"
-#~ msgstr "PCM"
-
-#~ msgid "Synth"
-#~ msgstr "Sintetiz"
-
-#~ msgid "Line-in"
-#~ msgstr "Linea in"
-
-#~ msgid "CD"
-#~ msgstr "CD"
-
-#~ msgid "Microphone"
-#~ msgstr "Microfono"
-
-#~ msgid "PC Speaker"
-#~ msgstr "Altoparlanti PC"
-
-#~ msgid "Playback"
-#~ msgstr "Riproduzione"
-
-#~ msgid "Capture"
-#~ msgstr "Cattura"
-
-#~ msgid "Could not open vfs file \"%s\" for writing: %s."
-#~ msgstr "Impossibile aprire il file vfs «%s» in scrittura: %s."
-
-#~ msgid "No filename given"
-#~ msgstr "Nessun nome di file fornito"
-
-#~ msgid "Could not close vfs file \"%s\"."
-#~ msgstr "Impossibile chiudere il file vfs «%s»."
-
-#~ msgid "Error while writing to file \"%s\"."
-#~ msgstr "Errore durante la scrittura sul file «%s»."
-
-#~ msgid "Internal data stream error."
-#~ msgstr "Errore interno nel flusso di dati."
-
-#~ msgid "A %s plugin is required to play this stream, but not installed."
-#~ msgstr ""
-#~ "Per riprodurre questo stream è richiesto un plugin %s, che però non "
-#~ "risulta installato. "
-
-#~ msgid "Invalid subtitle URI \"%s\", subtitles disabled."
-#~ msgstr "URI dei sottotitoli «%s» non valido, sottotitoli disabilitati."
-
-#~ msgid "RTSP streams cannot be played yet."
-#~ msgstr "Non è ancora possibile riprodurre gli stream RTSP."
-
-#~ msgid ""
-#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
-#~ "file or some other type of text file, or the media file was not "
-#~ "recognized."
-#~ msgstr ""
-#~ "È stato rilevato unicamente uno stream di sottotitoli. Ciò significa che "
-#~ "si sta caricando un file di sottotitoli o un altro tipo di file di testo, "
-#~ "oppure che il file multimediale non è stato riconosciuto."
-
-#~ msgid ""
-#~ "You do not have a decoder installed to handle this file. You might need "
-#~ "to install the necessary plugins."
-#~ msgstr ""
-#~ "Non risulta installato alcun decoder in grado di gestire questo file. "
-#~ "Potrebbe essere necessario installare gli opportuni plugin."
-
-#~ msgid "This is not a media file"
-#~ msgstr "Questo non è un file multimediale"
-
-#~ msgid "A subtitle stream was detected, but no video stream."
-#~ msgstr ""
-#~ "È stato rilevato uno stream di sottotitoli, ma nessuno stream video."
-
-#~ msgid "Both autovideosink and xvimagesink elements are missing."
-#~ msgstr ""
-#~ "Risultano mancanti entrambi gli elementi «autovideosink» e «xvimagesink»."
-
-#~ msgid "Both autoaudiosink and alsasink elements are missing."
-#~ msgstr ""
-#~ "Risultano mancanti entrambi gli elementi «autoaudiosink» e «alsasink»."
-
-#~ msgid "Error while sending gdp header data to \"%s:%d\"."
-#~ msgstr "Errore durante l'invio di dati header gdp a \"%s:%d\"."
-
-#~ msgid "Error while sending gdp payload data to \"%s:%d\"."
-#~ msgstr "Errore durante l'invio di dati payload gdp a \"%s:%d\"."
-
-#~ msgid "Connection to %s:%d refused."
-#~ msgstr "Connessione a %s:%d rifiutata."
-
-#~ msgid "Uncompressed planar YVU 4:2:0"
-#~ msgstr "YVU 4:2:0 planare non compresso"
-
-#~ msgid "Uncompressed packed YUV 4:1:0"
-#~ msgstr "YUV 4:1:0 packed non compresso"
-
-#~ msgid "Uncompressed packed YVU 4:1:0"
-#~ msgstr "YVU 4:1:0 packed non compresso"
-
-#~ msgid "Uncompressed packed YUV 4:1:1"
-#~ msgstr "YUV 4:1:1 packed non compresso"
-
-#~ msgid "Uncompressed packed YUV 4:4:4"
-#~ msgstr "YUV 4:4:4 packed non compresso"
-
-#~ msgid "Uncompressed planar YUV 4:2:2"
-#~ msgstr "YUV 4:2:2 planare non compresso"
-
-#~ msgid "Uncompressed planar YUV 4:1:1"
-#~ msgstr "YUV 4:1:1 planare non compresso"
-
-#~ msgid "Uncompressed black and white Y-plane"
-#~ msgstr "Bianco e nero Y-plane non compresso"
-
-#~ msgid "Raw PCM audio"
-#~ msgstr "Audio raw PCM"
-
-#~ msgid "Raw %d-bit floating-point audio"
-#~ msgstr "Audio raw floating-point %d-bit"
-
-#~ msgid "Raw floating-point audio"
-#~ msgstr "Audio raw floating-point"
-
-#~ msgid "No device specified."
-#~ msgstr "Nessun device specificato."
-
-#~ msgid "Device \"%s\" does not exist."
-#~ msgstr "Il device «%s» non esiste."
-
-#~ msgid "Device \"%s\" is already being used."
-#~ msgstr "Il device «%s» è già in uso."
-
-#~ msgid "Could not open device \"%s\" for reading and writing."
-#~ msgstr "Impossibile aprire il device «%s» in lettura e scrittura."
index e6fe193..a03582f 100644 (file)
@@ -2,14 +2,14 @@
 # This file is put in the public domain.
 #
 # Kjartan Maraas <kmaraas@gnome.org>, 2004-2010.
-# Johnny A. Solbu <johnny@solbu.net>, 2012-2017
+# Johnny A. Solbu <johnny@solbu.net>, 2012-2019
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base 1.10.0\n"
+"Project-Id-Version: gst-plugins-base 1.16.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:43+0000\n"
-"PO-Revision-Date: 2017-01-05 01:29+0100\n"
+"POT-Creation-Date: 2019-04-19 00:20+0100\n"
+"PO-Revision-Date: 2019-09-03 09:24+0200\n"
 "Last-Translator: Johnny A. Solbu <johnny@solbu.net>\n"
 "Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n"
 "Language: nb_NO\n"
@@ -20,669 +20,877 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Poedit 1.8.7.1\n"
 
+#: ext/alsa/gstalsasink.c:579
 msgid "Could not open device for playback in mono mode."
 msgstr "Kunne ikke åpne enheten for avspilling i mono-modus."
 
+#: ext/alsa/gstalsasink.c:581
 msgid "Could not open device for playback in stereo mode."
 msgstr "Kunne ikke åpne enheten for avspilling i stereo-modus."
 
+#: ext/alsa/gstalsasink.c:585
 #, c-format
 msgid "Could not open device for playback in %d-channel mode."
 msgstr "Kunne ikke åpne enhet for avspilling i %d-kanalmodus."
 
-msgid ""
-"Could not open audio device for playback. Device is being used by another "
-"application."
-msgstr ""
-"Kunne ikke åpne lydenheten for avspilling. Enheten brukes av et annet "
-"program."
+#: ext/alsa/gstalsasink.c:858
+msgid "Could not open audio device for playback. Device is being used by another application."
+msgstr "Kunne ikke åpne lydenheten for avspilling. Enheten brukes av et annet program."
 
+#: ext/alsa/gstalsasink.c:863
 msgid "Could not open audio device for playback."
 msgstr "Kunne ikke åpne lydenheten for avspilling."
 
+#: ext/alsa/gstalsasink.c:1076
 msgid "Error outputting to audio device. The device has been disconnected."
 msgstr "Feil ved sending til lydenhet. Enheten er frakoblet."
 
+#: ext/alsa/gstalsasrc.c:444
 msgid "Could not open device for recording in mono mode."
 msgstr "Kunne ikke åpne enhet for opptak i monomodus."
 
+#: ext/alsa/gstalsasrc.c:446
 msgid "Could not open device for recording in stereo mode."
 msgstr "Kunne ikke åpne enhet for opptak i stereomodus"
 
+#: ext/alsa/gstalsasrc.c:450
 #, c-format
 msgid "Could not open device for recording in %d-channel mode"
 msgstr "Kunne ikke åpne enhet for opptak i %d-kanalmodus."
 
-msgid ""
-"Could not open audio device for recording. Device is being used by another "
-"application."
-msgstr ""
-"Kunne ikke åpne lydenheten for opptak. Enheten brukes av et annet program."
+#: ext/alsa/gstalsasrc.c:741
+msgid "Could not open audio device for recording. Device is being used by another application."
+msgstr "Kunne ikke åpne lydenheten for opptak. Enheten brukes av et annet program."
 
+#: ext/alsa/gstalsasrc.c:746
 msgid "Could not open audio device for recording."
 msgstr "Kunne ikke åpne lydenheten for opptak."
 
+#: ext/alsa/gstalsasrc.c:992
 msgid "Error recording from audio device. The device has been disconnected."
 msgstr "Feil ved opptak fra lydenhet. Enheten er frakoblet."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:277 ext/cdparanoia/gstcdparanoiasrc.c:283
 msgid "Could not open CD device for reading."
 msgstr "Kunne ikke åpne CD-enheten for lesing."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:409
 msgid "Could not seek CD."
 msgstr "Kunne ikke søke på CD."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:417
 msgid "Could not read CD."
 msgstr "Kunne ikke lese CD."
 
+#: ext/gl/gstgltestsrc.c:491
 msgid "failed to draw pattern"
-msgstr ""
+msgstr "Kunne ikke tegne mønster"
 
+#: ext/gl/gstgltestsrc.c:492
 msgid "A GL error occurred"
-msgstr ""
+msgstr "En GL-feil oppsto"
 
+#: ext/gl/gstgltestsrc.c:498
 msgid "format wasn't negotiated before get function"
-msgstr ""
-
+msgstr "formatet ble ikke forhandlet før get-funksjon"
+
+#: gst/encoding/gstencodebin.c:1636 gst/playback/gstplaybin2.c:3399
+#: gst/playback/gstplaysink.c:1522 gst/playback/gstplaysink.c:1535
+#: gst/playback/gstplaysink.c:1872 gst/playback/gstplaysink.c:1904
+#: gst/playback/gstplaysink.c:2488 gst/playback/gstplaysink.c:2537
+#: gst/playback/gstplaysink.c:2552 gst/playback/gstplaysink.c:2577
+#: gst/playback/gstplaysink.c:2609 gst/playback/gstplaysink.c:2757
+#: gst/playback/gstplaysink.c:2788 gst/playback/gstplaysink.c:3166
+#: gst/playback/gstplaysink.c:3175 gst/playback/gstplaysink.c:3184
+#: gst/playback/gstplaysink.c:3193 gst/playback/gstplaysink.c:3606
+#: gst/playback/gstplaysink.c:4526 gst/playback/gstplaysinkconvertbin.c:97
+#: gst/playback/gstplaysinkconvertbin.c:117
+#: gst/playback/gsturidecodebin.c:1472 gst/playback/gsturisourcebin.c:1597
 #, c-format
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Mangler elementet «%s» - kontroller GStreamer-installasjonen."
 
+#: gst/playback/gstdecodebin2.c:1883 gst/playback/gstparsebin.c:1553
 msgid "Could not determine type of stream"
 msgstr "Kunne ikke bestemme type strøm."
 
+#: gst/playback/gstdecodebin2.c:2861 gst/playback/gstparsebin.c:2385
 msgid "This appears to be a text file"
 msgstr "Dette ser ut som en tekstfil"
 
+#: gst/playback/gstplaybin2.c:5452
 msgid "Could not create \"uridecodebin\" element."
 msgstr "Kunne ikke opprette elementet «uridecodebin»"
 
-#, fuzzy
+#: gst/playback/gstplaybin3.c:4558
 msgid "Could not create \"uridecodebin3\" element."
-msgstr "Kunne ikke opprette elementet «uridecodebin»"
+msgstr "Kunne ikke opprette elementet «uridecodebin3»"
 
+#: gst/playback/gstplaysink.c:2003
 #, c-format
 msgid "Both autovideosink and %s elements are missing."
 msgstr "Både autobildesluk- og %s-elementer mangler."
 
+#: gst/playback/gstplaysink.c:2007
 msgid "The autovideosink element is missing."
 msgstr "Autobildeslukelementet mangler."
 
+#: gst/playback/gstplaysink.c:2012
 #, c-format
 msgid "Configured videosink %s is not working."
 msgstr "Konfigurert bildesluk %s fungerer ikke."
 
+#: gst/playback/gstplaysink.c:2016
 #, c-format
 msgid "Both autovideosink and %s elements are not working."
 msgstr "Både autobildesluk- og %s-elementer virker ikke."
 
+#: gst/playback/gstplaysink.c:2020
 msgid "The autovideosink element is not working."
 msgstr "autobildeslukelementet fungerer ikke."
 
+#: gst/playback/gstplaysink.c:2525
 msgid "Custom text sink element is not usable."
 msgstr "Tilpasset tekstslukelement er ikke brukbart."
 
+#: gst/playback/gstplaysink.c:2903
 msgid "No volume control found"
 msgstr "Fant ikke volumkontroll"
 
+#: gst/playback/gstplaysink.c:2933
 #, c-format
 msgid "Both autoaudiosink and %s elements are missing."
 msgstr "Både autolydsluk- og %s-elementer mangler."
 
+#: gst/playback/gstplaysink.c:2937
 msgid "The autoaudiosink element is missing."
 msgstr "Autolydslukelementet mangler"
 
+#: gst/playback/gstplaysink.c:2942
 #, c-format
 msgid "Configured audiosink %s is not working."
 msgstr "Konfigurert lydsluk %s fungerer ikke."
 
+#: gst/playback/gstplaysink.c:2946
 #, c-format
 msgid "Both autoaudiosink and %s elements are not working."
 msgstr "Både autolydsluk- og %s-elementer virker ikke."
 
+#: gst/playback/gstplaysink.c:2950
 msgid "The autoaudiosink element is not working."
 msgstr "Autolydslukelementet fungerer ikke."
 
+#: gst/playback/gstplaysink.c:3269 gst/playback/gstplaysink.c:3274
 msgid "Can't play a text file without video or visualizations."
 msgstr "Kan ikke spille av en tekstfil uten film eller visualiseringer"
 
+#: gst/playback/gsturidecodebin.c:921
 #, c-format
 msgid "No decoder available for type '%s'."
 msgstr "Ingen dekoder tilgjengelig for type «%s»."
 
+#: gst/playback/gsturidecodebin.c:1378 gst/playback/gsturisourcebin.c:1491
 msgid "No URI specified to play from."
 msgstr "Ingen URI for avspilling oppgitt."
 
+#: gst/playback/gsturidecodebin.c:1384 gst/playback/gsturisourcebin.c:1497
 #, c-format
 msgid "Invalid URI \"%s\"."
 msgstr "Ugyldig URI «%s»."
 
+#: gst/playback/gsturidecodebin.c:1391 gst/playback/gsturisourcebin.c:1504
 msgid "This stream type cannot be played yet."
 msgstr "Dennestrømtypen kan ikke spilles ennå."
 
+#: gst/playback/gsturidecodebin.c:1409 gst/playback/gsturisourcebin.c:1522
 #, c-format
 msgid "No URI handler implemented for \"%s\"."
 msgstr "Ingen URI-håndterer er implementert for «%s»."
 
+#: gst/playback/gsturidecodebin.c:2289 gst/playback/gsturisourcebin.c:2228
 msgid "Source element is invalid."
 msgstr "Kildeelement er ugyldig."
 
+#: gst/tcp/gsttcpclientsink.c:216
 #, c-format
 msgid "Error while sending data to \"%s:%d\"."
 msgstr "Feil ved sending av data til «%s:%d»."
 
+#: gst-libs/gst/audio/gstaudiobasesrc.c:842
 msgid "Can't record audio fast enough"
 msgstr "Kan ikke ta opp lyd rask nok"
 
+#: gst-libs/gst/audio/gstaudiocdsrc.c:1625
 msgid "This CD has no audio tracks"
 msgstr "Denne CDen har ingen lydspor"
 
+#: gst-libs/gst/pbutils/descriptions.c:89
 msgid "ID3 tag"
 msgstr "ID3-merke"
 
+#: gst-libs/gst/pbutils/descriptions.c:90
+#: gst-libs/gst/pbutils/descriptions.c:91
 msgid "APE tag"
 msgstr "APE-merke"
 
+#: gst-libs/gst/pbutils/descriptions.c:92
 msgid "ICY internet radio"
 msgstr "ICY internettradio"
 
+#: gst-libs/gst/pbutils/descriptions.c:127
 msgid "Apple Lossless Audio (ALAC)"
 msgstr "Apple Lossless Audio (ALAC)"
 
+#: gst-libs/gst/pbutils/descriptions.c:143
 msgid "Free Lossless Audio Codec (FLAC)"
 msgstr "Free Lossless Audio Codec (FLAC)"
 
+#: gst-libs/gst/pbutils/descriptions.c:173
+#: gst-libs/gst/pbutils/descriptions.c:174
 msgid "Lossless True Audio (TTA)"
 msgstr "Tapsfri True Audio (TTA)"
 
+#: gst-libs/gst/pbutils/descriptions.c:182
 msgid "Windows Media Speech"
 msgstr "Windows Mediatale"
 
+#: gst-libs/gst/pbutils/descriptions.c:199
 msgid "CYUV Lossless"
 msgstr "CYUV tapsfritt"
 
+#: gst-libs/gst/pbutils/descriptions.c:203
 msgid "FFMpeg v1"
 msgstr "FFMpeg v1"
 
+#: gst-libs/gst/pbutils/descriptions.c:217
 msgid "Lossless MSZH"
 msgstr "Tapsfritt MSZH"
 
+#: gst-libs/gst/pbutils/descriptions.c:228
 msgid "Run-length encoding"
 msgstr "Kjørelengde-koding"
 
+#: gst-libs/gst/pbutils/descriptions.c:274
 msgid "Timed Text"
 msgstr "Tidsbestemt tekst"
 
+#: gst-libs/gst/pbutils/descriptions.c:278
 msgid "Subtitle"
 msgstr "Undertekst"
 
+#: gst-libs/gst/pbutils/descriptions.c:279
 msgid "MPL2 subtitle format"
 msgstr "MPL2 undertekstformat"
 
+#: gst-libs/gst/pbutils/descriptions.c:280
 msgid "DKS subtitle format"
 msgstr "DKS undertekstformat"
 
+#: gst-libs/gst/pbutils/descriptions.c:281
 msgid "QTtext subtitle format"
 msgstr "QTtext undertekstformat"
 
+#: gst-libs/gst/pbutils/descriptions.c:282
 msgid "Sami subtitle format"
 msgstr "Samisk undertekstformat"
 
+#: gst-libs/gst/pbutils/descriptions.c:283
 msgid "TMPlayer subtitle format"
 msgstr "TMPlayer undertekstformat"
 
+#: gst-libs/gst/pbutils/descriptions.c:287
 msgid "CEA 608 Closed Caption"
-msgstr ""
+msgstr "CEA 608 teksting"
 
+#: gst-libs/gst/pbutils/descriptions.c:288
 msgid "CEA 708 Closed Caption"
-msgstr ""
+msgstr "CEA 708 teksting"
 
+#: gst-libs/gst/pbutils/descriptions.c:289
 msgid "Kate subtitle format"
 msgstr "Kate undertekstformat"
 
+#: gst-libs/gst/pbutils/descriptions.c:290
 msgid "WebVTT subtitle format"
 msgstr "WebVTT undertekstformat"
 
+#: gst-libs/gst/pbutils/descriptions.c:455
+#: gst-libs/gst/pbutils/descriptions.c:458
+#: gst-libs/gst/pbutils/descriptions.c:508
 msgid "Uncompressed video"
 msgstr "Ukomprimert video"
 
+#: gst-libs/gst/pbutils/descriptions.c:463
 msgid "Uncompressed gray"
 msgstr "Ukomprimert grå"
 
+#: gst-libs/gst/pbutils/descriptions.c:486
 #, c-format
 msgid "Uncompressed packed YUV %s"
 msgstr "Ukomprimert pakket YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:488
 #, c-format
 msgid "Uncompressed semi-planar YUV %s"
 msgstr "Ukomprimert semi-planar YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:490
 #, c-format
 msgid "Uncompressed planar YUV %s"
 msgstr "Ukomprimert planar YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:501
 #, c-format
 msgid "Uncompressed palettized %d-bit %s"
 msgstr "Ukomprimert palettopmimert %d-bit %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:504
 #, c-format
 msgid "Uncompressed %d-bit %s"
 msgstr "Ukomprimert %d-bit %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:586
 #, c-format
 msgid "DivX MPEG-4 Version %d"
 msgstr "DivX MPEG-4-versjon %d"
 
+#: gst-libs/gst/pbutils/descriptions.c:834
 msgid "Uncompressed audio"
 msgstr "Ukomprimert lyd"
 
+#: gst-libs/gst/pbutils/descriptions.c:840
 #, c-format
 msgid "Raw %d-bit %s audio"
 msgstr "Rå %d-bit %s-lyd"
 
+#: gst-libs/gst/pbutils/descriptions.c:942
 msgid "Audio CD source"
 msgstr "Lyd-CD-kilde"
 
+#: gst-libs/gst/pbutils/descriptions.c:945
 msgid "DVD source"
 msgstr "DVD-kilde"
 
+#: gst-libs/gst/pbutils/descriptions.c:948
 msgid "Real Time Streaming Protocol (RTSP) source"
 msgstr "Sanntidsdirekteavspillingsprotokoll (RTSP) kilde"
 
+#: gst-libs/gst/pbutils/descriptions.c:952
 msgid "Microsoft Media Server (MMS) protocol source"
 msgstr "Microsoft Media Server (MMS) protokollkilde"
 
+#: gst-libs/gst/pbutils/descriptions.c:960
 #, c-format
 msgid "%s protocol source"
 msgstr "%s protokollkilde"
 
+#: gst-libs/gst/pbutils/descriptions.c:1034
 #, c-format
 msgid "%s video RTP depayloader"
 msgstr "%s bilde RTP-depayloader"
 
+#: gst-libs/gst/pbutils/descriptions.c:1036
 #, c-format
 msgid "%s audio RTP depayloader"
 msgstr "%s lyd RTP-depayloader"
 
+#: gst-libs/gst/pbutils/descriptions.c:1038
 #, c-format
 msgid "%s RTP depayloader"
 msgstr "%s RTP-depayloader"
 
+#: gst-libs/gst/pbutils/descriptions.c:1045
 #, c-format
 msgid "%s demuxer"
 msgstr "%s demultiplekser"
 
+#: gst-libs/gst/pbutils/descriptions.c:1047
 #, c-format
 msgid "%s decoder"
 msgstr "%s dekoder"
 
+#: gst-libs/gst/pbutils/descriptions.c:1086
 #, c-format
 msgid "%s video RTP payloader"
 msgstr "%s bilde RTP-payloader"
 
+#: gst-libs/gst/pbutils/descriptions.c:1088
 #, c-format
 msgid "%s audio RTP payloader"
 msgstr "%s lyd RTP-payloader"
 
+#: gst-libs/gst/pbutils/descriptions.c:1090
 #, c-format
 msgid "%s RTP payloader"
 msgstr "%s RTP-payloader"
 
+#: gst-libs/gst/pbutils/descriptions.c:1097
 #, c-format
 msgid "%s muxer"
 msgstr "%s multiplekser"
 
+#: gst-libs/gst/pbutils/descriptions.c:1099
 #, c-format
 msgid "%s encoder"
 msgstr "%s koder"
 
+#: gst-libs/gst/pbutils/descriptions.c:1133
 #, c-format
 msgid "GStreamer element %s"
 msgstr "GStreamer-element %s"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:558
 msgid "Unknown source element"
 msgstr "Ukjent kildeelement"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:561
 msgid "Unknown sink element"
 msgstr "Ukjent slukelement"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:564
 msgid "Unknown element"
 msgstr "Ukjent element"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:567
 msgid "Unknown decoder element"
 msgstr "Ukjent dekoderelement"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:570
 msgid "Unknown encoder element"
 msgstr "Ukjent element for koding"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:575
 msgid "Plugin or element of unknown type"
 msgstr "Tillegg eller element av ukjent type"
 
+#: gst-libs/gst/tag/gsttagdemux.c:1243
 msgid "Failed to read tag: not enough data"
 msgstr "Klarte ikke å lese merket: Ikke nok data"
 
+#: gst-libs/gst/tag/tags.c:77
 msgid "track ID"
 msgstr "spor-ID"
 
+#: gst-libs/gst/tag/tags.c:77
 msgid "MusicBrainz track ID"
 msgstr "MusicBrainz spor-id"
 
+#: gst-libs/gst/tag/tags.c:79
 msgid "artist ID"
 msgstr "artist-ID"
 
+#: gst-libs/gst/tag/tags.c:79
 msgid "MusicBrainz artist ID"
 msgstr "MusicBrainz artist-id"
 
+#: gst-libs/gst/tag/tags.c:81
 msgid "album ID"
 msgstr "album-ID"
 
+#: gst-libs/gst/tag/tags.c:81
 msgid "MusicBrainz album ID"
 msgstr "MusicBrainz album-id"
 
+#: gst-libs/gst/tag/tags.c:84
 msgid "album artist ID"
 msgstr "albumartist-id"
 
+#: gst-libs/gst/tag/tags.c:84
 msgid "MusicBrainz album artist ID"
 msgstr "MusicBrainz albumartist-id"
 
+#: gst-libs/gst/tag/tags.c:86
 msgid "track TRM ID"
 msgstr "spor TRM-id"
 
+#: gst-libs/gst/tag/tags.c:86
 msgid "MusicBrainz TRM ID"
 msgstr "MusicBrainz TRM-id"
 
+#: gst-libs/gst/tag/tags.c:108
 msgid "capturing shutter speed"
 msgstr "opptakslukkerhastighet"
 
+#: gst-libs/gst/tag/tags.c:109
 msgid "Shutter speed used when capturing an image, in seconds"
 msgstr "Lukkehastighet som benyttes når du tar et bilde, i sekunder"
 
+#: gst-libs/gst/tag/tags.c:112
 msgid "capturing focal ratio"
 msgstr "opptaksbrennvidder"
 
+#: gst-libs/gst/tag/tags.c:113
 msgid "Focal ratio (f-number) used when capturing the image"
 msgstr "Brennvidden (f-tall) som benyttes når du tar bildet"
 
+#: gst-libs/gst/tag/tags.c:116
 msgid "capturing focal length"
 msgstr "opptaksbrennvidde"
 
+#: gst-libs/gst/tag/tags.c:117
 msgid "Focal length of the lens used capturing the image, in mm"
 msgstr "Brennvidden til objektivet som brukes når du tar bildet, i mm"
 
+#: gst-libs/gst/tag/tags.c:121
 msgid "capturing 35 mm equivalent focal length"
 msgstr "35 mm ekvivalent opptaksbrennvidde"
 
-msgid ""
-"35 mm equivalent focal length of the lens used capturing the image, in mm"
-msgstr ""
-"35 mm ekvivalent brennvidde til objektivet som brukes når du tar bildet, i mm"
+#: gst-libs/gst/tag/tags.c:122
+msgid "35 mm equivalent focal length of the lens used capturing the image, in mm"
+msgstr "35 mm ekvivalent brennvidde til objektivet som brukes når du tar bildet, i mm"
 
+#: gst-libs/gst/tag/tags.c:126
 msgid "capturing digital zoom ratio"
 msgstr "fanger digitalt zoomforhold"
 
+#: gst-libs/gst/tag/tags.c:127
 msgid "Digital zoom ratio used when capturing an image"
 msgstr "Digitalt zoomforhold som benyttes når du tar et bilde"
 
+#: gst-libs/gst/tag/tags.c:130
 msgid "capturing iso speed"
 msgstr "opptaks-ISO-hastighet"
 
+#: gst-libs/gst/tag/tags.c:131
 msgid "The ISO speed used when capturing an image"
 msgstr "ISO-hastigheten som benyttes når du tar et bilde"
 
+#: gst-libs/gst/tag/tags.c:134
 msgid "capturing exposure program"
 msgstr "opptakseksponeringsprogram"
 
+#: gst-libs/gst/tag/tags.c:135
 msgid "The exposure program used when capturing an image"
 msgstr "Eksponeringsprogrammet som benyttes når du tar et bilde"
 
+#: gst-libs/gst/tag/tags.c:138
 msgid "capturing exposure mode"
 msgstr "opptakseksponeringsmodus"
 
+#: gst-libs/gst/tag/tags.c:139
 msgid "The exposure mode used when capturing an image"
 msgstr "Eksponeringsmodusen som benyttes når du tar et bilde"
 
+#: gst-libs/gst/tag/tags.c:142
 msgid "capturing exposure compensation"
 msgstr "opptakseksponeringskompensasjon"
 
+#: gst-libs/gst/tag/tags.c:143
 msgid "The exposure compensation used when capturing an image"
 msgstr "Eksponeringskompensasjonen som benyttes når du tar et bilde"
 
+#: gst-libs/gst/tag/tags.c:146
 msgid "capturing scene capture type"
 msgstr "opptaksscene opptakstype"
 
+#: gst-libs/gst/tag/tags.c:147
 msgid "The scene capture mode used when capturing an image"
 msgstr "Sceneopptaksmodus som anvendes når du tar et bilde"
 
+#: gst-libs/gst/tag/tags.c:150
 msgid "capturing gain adjustment"
 msgstr "opptaksstyrkejustering"
 
+#: gst-libs/gst/tag/tags.c:151
 msgid "The overall gain adjustment applied on an image"
 msgstr "Den samlede styrkejusteringen som anvendes på et bilde"
 
+#: gst-libs/gst/tag/tags.c:154
 msgid "capturing white balance"
 msgstr "opptakshvitbalanse"
 
+#: gst-libs/gst/tag/tags.c:155
 msgid "The white balance mode set when capturing an image"
 msgstr "Hvitbalanseinnstillingen når du tar et bilde"
 
+#: gst-libs/gst/tag/tags.c:158
 msgid "capturing contrast"
 msgstr "opptakskontrast"
 
+#: gst-libs/gst/tag/tags.c:159
 msgid "The direction of contrast processing applied when capturing an image"
 msgstr "Retningen av kontrastbehandling som anvendes når du tar et bilde"
 
+#: gst-libs/gst/tag/tags.c:163
 msgid "capturing saturation"
 msgstr "opptaksmetning"
 
+#: gst-libs/gst/tag/tags.c:164
 msgid "The direction of saturation processing applied when capturing an image"
 msgstr "Retningen av metningsbehandling som anvendes når du tar et bilde"
 
+#: gst-libs/gst/tag/tags.c:168
 msgid "capturing sharpness"
 msgstr "opptaksskarphet"
 
+#: gst-libs/gst/tag/tags.c:169
 msgid "The direction of sharpness processing applied when capturing an image"
 msgstr "Retningen av skarphetsbehandling som anvendes når du tar et bilde"
 
+#: gst-libs/gst/tag/tags.c:173
 msgid "capturing flash fired"
 msgstr "opptaksblits avfyrt"
 
+#: gst-libs/gst/tag/tags.c:174
 msgid "If the flash fired while capturing an image"
 msgstr "Om blitsen avfyres mens du tar et bilde"
 
+#: gst-libs/gst/tag/tags.c:177
 msgid "capturing flash mode"
 msgstr "opptaksblitsmodus"
 
+#: gst-libs/gst/tag/tags.c:178
 msgid "The selected flash mode while capturing an image"
 msgstr "Valgt blitsmodus mens du tar et bilde"
 
+#: gst-libs/gst/tag/tags.c:181
 msgid "capturing metering mode"
 msgstr "opptaksmålemodus"
 
-msgid ""
-"The metering mode used while determining exposure for capturing an image"
-msgstr ""
-"Målemodus som brukes mens man bestemmer eksponeringen for å ta et bilde"
+#: gst-libs/gst/tag/tags.c:182
+msgid "The metering mode used while determining exposure for capturing an image"
+msgstr "Målemodus som brukes mens man bestemmer eksponeringen for å ta et bilde"
 
+#: gst-libs/gst/tag/tags.c:186
 msgid "capturing source"
 msgstr "opptakskilde"
 
+#: gst-libs/gst/tag/tags.c:187
 msgid "The source or type of device used for the capture"
 msgstr "Kilden eller type enhet som brukes for opptak"
 
+#: gst-libs/gst/tag/tags.c:190
 msgid "image horizontal ppi"
 msgstr "Bilde horisontalt (ppi)"
 
+#: gst-libs/gst/tag/tags.c:191
 msgid "Media (image/video) intended horizontal pixel density in ppi"
 msgstr "Media (bilde/video) beregnet horisontal pikseltetthet i ppi"
 
+#: gst-libs/gst/tag/tags.c:194
 msgid "image vertical ppi"
 msgstr "Bilde vertikalt (ppi)"
 
+#: gst-libs/gst/tag/tags.c:195
 msgid "Media (image/video) intended vertical pixel density in ppi"
 msgstr "Media (bilde/video) beregnet vertikal piksel tetthet i ppi"
 
+#: gst-libs/gst/tag/tags.c:198
 msgid "ID3v2 frame"
 msgstr "ID3v2-ramme"
 
+#: gst-libs/gst/tag/tags.c:198
 msgid "unparsed id3v2 tag frame"
 msgstr "Utolket id3v2 merkeramme"
 
+#: gst-libs/gst/tag/tags.c:202
 msgid "musical-key"
 msgstr "musikal-tast"
 
+#: gst-libs/gst/tag/tags.c:202
 msgid "Initial key in which the sound starts"
 msgstr "Innledende tast der lyden begynner"
 
+#: tools/gst-device-monitor.c:260 tools/gst-play.c:1444
 msgid "Print version information and exit"
 msgstr "Skriv ut versjonsinformasjon og avslutt"
 
-msgid ""
-"Don't exit after showing the initial device list, but wait for devices to "
-"added/removed."
-msgstr ""
-"Ikke avslutt etter å ha vist den første enheteslisten, men vent på at "
-"enheter blir lagt til/fjernet."
+#: tools/gst-device-monitor.c:262
+msgid "Don't exit after showing the initial device list, but wait for devices to added/removed."
+msgstr "Ikke avslutt etter å ha vist den første enheteslisten, men vent på at enheter blir lagt til/fjernet."
 
+#: tools/gst-play.c:310
 #, c-format
 msgid "Volume: %.0f%%"
 msgstr "Volum: %.0f%%"
 
+#: tools/gst-play.c:349
 msgid "Buffering..."
 msgstr "Bufrer ..."
 
+#: tools/gst-play.c:370
 msgid "Clock lost, selecting a new one\n"
 msgstr "Klokke tapt, velger en ny\n"
 
+#: tools/gst-play.c:400 tools/gst-play.c:446 tools/gst-play.c:883
+#: tools/gst-play.c:1347
 msgid "Reached end of play list."
 msgstr "Nådde slutten av spillelisten."
 
+#: tools/gst-play.c:613
 msgid "Paused"
 msgstr "Pauset"
 
+#: tools/gst-play.c:671
 #, c-format
 msgid "Now playing %s\n"
 msgstr "Spiller nå %s\n"
 
+#: tools/gst-play.c:734
 #, c-format
 msgid "About to finish, preparing next title: %s"
 msgstr "I ferd med å fullføre, forbereder neste tittel: %s"
 
+#: tools/gst-play.c:979
 #, c-format
 msgid "Playback rate: %.2f"
 msgstr "Avspillingshastighet: %.2f"
 
+#: tools/gst-play.c:983
 #, c-format
 msgid "Could not change playback rate to %.2f"
 msgstr "Kunne ikke endre avspillingshastigheten til %.2f"
 
+#: tools/gst-play.c:1287
 msgid "space"
 msgstr "avstand"
 
+#: tools/gst-play.c:1287
 msgid "pause/unpause"
 msgstr "pause/opphev pause"
 
+#: tools/gst-play.c:1288
 msgid "q or ESC"
 msgstr "q eller ESC"
 
+#: tools/gst-play.c:1288
 msgid "quit"
 msgstr "Avslutt"
 
+#: tools/gst-play.c:1289
 msgid "> or n"
 msgstr "> eller n"
 
+#: tools/gst-play.c:1289
 msgid "play next"
 msgstr "spill neste"
 
+#: tools/gst-play.c:1290
 msgid "< or b"
 msgstr "< eller b"
 
+#: tools/gst-play.c:1290
 msgid "play previous"
 msgstr "spill forige"
 
+#: tools/gst-play.c:1291
 msgid "seek forward"
 msgstr "søk forover"
 
+#: tools/gst-play.c:1292
 msgid "seek backward"
 msgstr "søk bakover"
 
+#: tools/gst-play.c:1293
 msgid "volume up"
 msgstr "Volum opp"
 
+#: tools/gst-play.c:1294
 msgid "volume down"
 msgstr "volum opp"
 
+#: tools/gst-play.c:1295
 msgid "increase playback rate"
 msgstr "øk avspillingshastigheten"
 
+#: tools/gst-play.c:1296
 msgid "decrease playback rate"
 msgstr "reduser avspillingshastigheten"
 
+#: tools/gst-play.c:1297
 msgid "change playback direction"
 msgstr "endre avspillingsretningen"
 
+#: tools/gst-play.c:1298
 msgid "enable/disable trick modes"
 msgstr "aktivere/deaktivere trikse-moduser\t"
 
+#: tools/gst-play.c:1299
 msgid "change audio track"
 msgstr "endre lydspor"
 
+#: tools/gst-play.c:1300
 msgid "change video track"
 msgstr "endre videospor"
 
+#: tools/gst-play.c:1301
 msgid "change subtitle track"
 msgstr "endre undertekstspor"
 
+#: tools/gst-play.c:1302
 msgid "seek to beginning"
 msgstr "Søk til begynnelsen"
 
+#: tools/gst-play.c:1303
 msgid "show keyboard shortcuts"
 msgstr "vis hurtigtaster"
 
+#: tools/gst-play.c:1306
 msgid "Interactive mode - keyboard controls:"
 msgstr "Interaktiv modus - tastaturkontroller:"
 
+#: tools/gst-play.c:1439
 msgid "Output status information and property notifications"
 msgstr "Utdata-statusinformasjon og egenskapsvarslinger"
 
+#: tools/gst-play.c:1441
 msgid "Control playback behaviour setting playbin 'flags' property"
 msgstr "Kontroller avspillingsoppførsel ved å sette playbin «flagg»-egenskap"
 
+#: tools/gst-play.c:1446
 msgid "Video sink to use (default is autovideosink)"
 msgstr "Video-sink som skal brukes (standard er autovideosink)"
 
+#: tools/gst-play.c:1448
 msgid "Audio sink to use (default is autoaudiosink)"
 msgstr "Lyd-sink som skal brukes (standard er autoaudiosink)"
 
+#: tools/gst-play.c:1450
 msgid "Enable gapless playback"
 msgstr "Aktiver sømløs avspilling"
 
+#: tools/gst-play.c:1452
 msgid "Shuffle playlist"
 msgstr "Stokke spilleliste"
 
+#: tools/gst-play.c:1455
 msgid "Disable interactive control via the keyboard"
 msgstr "Deaktiver interaktiv kontroll via tastaturet"
 
+#: tools/gst-play.c:1457
 msgid "Volume"
 msgstr "Volum"
 
+#: tools/gst-play.c:1459
 msgid "Playlist file containing input media files"
 msgstr "Spillelistefil som inneholder inngangsmediefiler"
 
+#: tools/gst-play.c:1461
 msgid "Do not print any output (apart from errors)"
 msgstr "Ikke skriv noe utdata (bortsett fra feil)"
 
+#: tools/gst-play.c:1463
 msgid "Use playbin3 pipeline"
-msgstr ""
+msgstr "Bruk playbin3-datakanal"
 
+#: tools/gst-play.c:1464
 msgid "(default varies depending on 'USE_PLAYBIN' env variable)"
-msgstr ""
+msgstr "(standard varierer avhengig av miljøvariabelen «USE_PLAYBIN»"
 
+#: tools/gst-play.c:1468
+msgid "Keep showing the last frame on EOS until quit or playlist change command (gapless is ignored)"
+msgstr "Fortsett å vise den siste rammen på EOS til du avslutter eller endrer kommandoen for spillelisten (gapless ignoreres)"
+
+#: tools/gst-play.c:1546
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr "Bruk: %s FIL1|URI1 [FILE|URI2] [FILE|URI3] ..."
 
+#: tools/gst-play.c:1550
 msgid "You must provide at least one filename or URI to play."
 msgstr "Du må ha med minst ett filnavn eller nettadresse å spille."
 
+#: tools/gst-play.c:1590
 msgid "Press 'k' to see a list of keyboard shortcuts.\n"
 msgstr "Trykk «k» for å se en liste over hurtigtaster.\n"
 
@@ -696,9 +904,7 @@ msgstr "Trykk «k» for å se en liste over hurtigtaster.\n"
 #~ msgstr "Intern feil i datastrøm."
 
 #~ msgid "A %s plugin is required to play this stream, but not installed."
-#~ msgstr ""
-#~ "Et %s-tillegg kreves for å spille av denne strømmen, men det er ikke "
-#~ "installert."
+#~ msgstr "Et %s-tillegg kreves for å spille av denne strømmen, men det er ikke installert."
 
 #~ msgid "Uncompressed %s YUV %s"
 #~ msgstr "Ukomprimert %s YUV %s"
@@ -754,20 +960,11 @@ msgstr "Trykk «k» for å se en liste over hurtigtaster.\n"
 #~ msgid "RTSP streams cannot be played yet."
 #~ msgstr "RTSP-strømmer kan ikke spilles av ennå."
 
-#~ msgid ""
-#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
-#~ "file or some other type of text file, or the media file was not "
-#~ "recognized."
-#~ msgstr ""
-#~ "Kun en undertekststrøm ble oppdaget. Enten laster du inn en undertekstfil "
-#~ "eller en annen type tekstfil, eller mediafilen ble ikke gjenkjent."
-
-#~ msgid ""
-#~ "You do not have a decoder installed to handle this file. You might need "
-#~ "to install the necessary plugins."
-#~ msgstr ""
-#~ "Du har ikke en dekoder installert for å håndtere denne filen. Du må "
-#~ "kanskje installere de nødvendige programtilleggene."
+#~ msgid "Only a subtitle stream was detected. Either you are loading a subtitle file or some other type of text file, or the media file was not recognized."
+#~ msgstr "Kun en undertekststrøm ble oppdaget. Enten laster du inn en undertekstfil eller en annen type tekstfil, eller mediafilen ble ikke gjenkjent."
+
+#~ msgid "You do not have a decoder installed to handle this file. You might need to install the necessary plugins."
+#~ msgstr "Du har ikke en dekoder installert for å håndtere denne filen. Du må kanskje installere de nødvendige programtilleggene."
 
 #~ msgid "This is not a media file"
 #~ msgstr "Dette er ikke en mediefil"
index 7720d60..55d659e 100644 (file)
@@ -4,10 +4,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base 1.15.1\n"
+"Project-Id-Version: gst-plugins-base 1.16.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:43+0000\n"
-"PO-Revision-Date: 2019-01-25 05:30+0100\n"
+"POT-Creation-Date: 2019-04-19 00:20+0100\n"
+"PO-Revision-Date: 2019-09-03 15:57+0200\n"
 "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
 "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
 "Language: pl\n"
@@ -16,681 +16,876 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 
+#: ext/alsa/gstalsasink.c:579
 msgid "Could not open device for playback in mono mode."
-msgstr ""
-"Nie udało się otworzyć urządzenia dźwiękowego do odtwarzania w trybie mono."
+msgstr "Nie udało się otworzyć urządzenia dźwiękowego do odtwarzania w trybie mono."
 
+#: ext/alsa/gstalsasink.c:581
 msgid "Could not open device for playback in stereo mode."
-msgstr ""
-"Nie udało się otworzyć urządzenia dźwiękowego do odtwarzania w trybie stereo."
+msgstr "Nie udało się otworzyć urządzenia dźwiękowego do odtwarzania w trybie stereo."
 
+#: ext/alsa/gstalsasink.c:585
 #, c-format
 msgid "Could not open device for playback in %d-channel mode."
-msgstr ""
-"Nie udało się otworzyć urządzenia dźwiękowego do odtwarzania w trybie %d-"
-"kanałowym."
+msgstr "Nie udało się otworzyć urządzenia dźwiękowego do odtwarzania w trybie %d-kanałowym."
 
-msgid ""
-"Could not open audio device for playback. Device is being used by another "
-"application."
-msgstr ""
-"Nie udało się otworzyć urządzenia dźwiękowego do odtwarzania. Urządzenie "
-"jest używane przez inną aplikację."
+#: ext/alsa/gstalsasink.c:858
+msgid "Could not open audio device for playback. Device is being used by another application."
+msgstr "Nie udało się otworzyć urządzenia dźwiękowego do odtwarzania. Urządzenie jest używane przez inną aplikację."
 
+#: ext/alsa/gstalsasink.c:863
 msgid "Could not open audio device for playback."
 msgstr "Nie udało się otworzyć urządzenia dźwiękowego do odtwarzania."
 
+#: ext/alsa/gstalsasink.c:1076
 msgid "Error outputting to audio device. The device has been disconnected."
-msgstr ""
-"Błąd przekazywania danych do urządzenia dźwiękowego. Urządzenie zostało "
-"odłączone."
+msgstr "Błąd przekazywania danych do urządzenia dźwiękowego. Urządzenie zostało odłączone."
 
+#: ext/alsa/gstalsasrc.c:444
 msgid "Could not open device for recording in mono mode."
-msgstr ""
-"Nie udało się otworzyć urządzenia dźwiękowego do nagrywania w trybie mono."
+msgstr "Nie udało się otworzyć urządzenia dźwiękowego do nagrywania w trybie mono."
 
+#: ext/alsa/gstalsasrc.c:446
 msgid "Could not open device for recording in stereo mode."
-msgstr ""
-"Nie udało się otworzyć urządzenia dźwiękowego do nagrywania w trybie stereo."
+msgstr "Nie udało się otworzyć urządzenia dźwiękowego do nagrywania w trybie stereo."
 
+#: ext/alsa/gstalsasrc.c:450
 #, c-format
 msgid "Could not open device for recording in %d-channel mode"
-msgstr ""
-"Nie udało się otworzyć urządzenia dźwiękowego do nagrywania w trybie %d-"
-"kanałowym."
+msgstr "Nie udało się otworzyć urządzenia dźwiękowego do nagrywania w trybie %d-kanałowym."
 
-msgid ""
-"Could not open audio device for recording. Device is being used by another "
-"application."
-msgstr ""
-"Nie udało się otworzyć urządzenia dźwiękowego do nagrywania. Urządzenie jest "
-"używane przez inną aplikację."
+#: ext/alsa/gstalsasrc.c:741
+msgid "Could not open audio device for recording. Device is being used by another application."
+msgstr "Nie udało się otworzyć urządzenia dźwiękowego do nagrywania. Urządzenie jest używane przez inną aplikację."
 
+#: ext/alsa/gstalsasrc.c:746
 msgid "Could not open audio device for recording."
 msgstr "Nie udało się otworzyć urządzenia dźwiękowego do nagrywania."
 
+#: ext/alsa/gstalsasrc.c:992
 msgid "Error recording from audio device. The device has been disconnected."
-msgstr ""
-"Błąd nagrywania z urządzenia dźwiękowego. Urządzenie zostało odłączone."
+msgstr "Błąd nagrywania z urządzenia dźwiękowego. Urządzenie zostało odłączone."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:277 ext/cdparanoia/gstcdparanoiasrc.c:283
 msgid "Could not open CD device for reading."
 msgstr "Nie udało się otworzyć urządzenia CD do odczytu."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:409
 msgid "Could not seek CD."
 msgstr "Nie udało się ustawić położenia na CD."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:417
 msgid "Could not read CD."
 msgstr "Nie udał się odczyt CD."
 
+#: ext/gl/gstgltestsrc.c:491
 msgid "failed to draw pattern"
 msgstr "nie udało się narysować wzoru"
 
+#: ext/gl/gstgltestsrc.c:492
 msgid "A GL error occurred"
 msgstr "Wystąpił błąd GL"
 
+#: ext/gl/gstgltestsrc.c:498
 msgid "format wasn't negotiated before get function"
 msgstr "format nie został wynegocjowany przed funkcją pobierającą"
 
+#: gst/encoding/gstencodebin.c:1636 gst/playback/gstplaybin2.c:3399
+#: gst/playback/gstplaysink.c:1522 gst/playback/gstplaysink.c:1535
+#: gst/playback/gstplaysink.c:1872 gst/playback/gstplaysink.c:1904
+#: gst/playback/gstplaysink.c:2488 gst/playback/gstplaysink.c:2537
+#: gst/playback/gstplaysink.c:2552 gst/playback/gstplaysink.c:2577
+#: gst/playback/gstplaysink.c:2609 gst/playback/gstplaysink.c:2757
+#: gst/playback/gstplaysink.c:2788 gst/playback/gstplaysink.c:3166
+#: gst/playback/gstplaysink.c:3175 gst/playback/gstplaysink.c:3184
+#: gst/playback/gstplaysink.c:3193 gst/playback/gstplaysink.c:3606
+#: gst/playback/gstplaysink.c:4526 gst/playback/gstplaysinkconvertbin.c:97
+#: gst/playback/gstplaysinkconvertbin.c:117
+#: gst/playback/gsturidecodebin.c:1472 gst/playback/gsturisourcebin.c:1597
 #, c-format
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Brak elementu '%s' - proszę sprawdzić instalację GStreamera."
 
+#: gst/playback/gstdecodebin2.c:1883 gst/playback/gstparsebin.c:1553
 msgid "Could not determine type of stream"
 msgstr "Nie udało się określić typu strumienia"
 
+#: gst/playback/gstdecodebin2.c:2861 gst/playback/gstparsebin.c:2385
 msgid "This appears to be a text file"
 msgstr "To wygląda na plik tekstowy"
 
+#: gst/playback/gstplaybin2.c:5452
 msgid "Could not create \"uridecodebin\" element."
 msgstr "Nie udało się utworzyć elementu \"uridecodebin\"."
 
+#: gst/playback/gstplaybin3.c:4558
 msgid "Could not create \"uridecodebin3\" element."
 msgstr "Nie udało się utworzyć elementu \"uridecodebin3\"."
 
+#: gst/playback/gstplaysink.c:2003
 #, c-format
 msgid "Both autovideosink and %s elements are missing."
 msgstr "Nie ma żadnego z elementów autovideosink i %s."
 
+#: gst/playback/gstplaysink.c:2007
 msgid "The autovideosink element is missing."
 msgstr "Nie ma elementu autovideosink."
 
+#: gst/playback/gstplaysink.c:2012
 #, c-format
 msgid "Configured videosink %s is not working."
 msgstr "Skonfigurowany element videosink %s nie działa."
 
+#: gst/playback/gstplaysink.c:2016
 #, c-format
 msgid "Both autovideosink and %s elements are not working."
 msgstr "Żaden z elementów autovideosink i %s nie działa."
 
+#: gst/playback/gstplaysink.c:2020
 msgid "The autovideosink element is not working."
 msgstr "Element autovideosink nie działa."
 
+#: gst/playback/gstplaysink.c:2525
 msgid "Custom text sink element is not usable."
 msgstr "Własny element text sink nie jest użyteczny."
 
+#: gst/playback/gstplaysink.c:2903
 msgid "No volume control found"
 msgstr "Nie znaleziono sterowania głośnością"
 
+#: gst/playback/gstplaysink.c:2933
 #, c-format
 msgid "Both autoaudiosink and %s elements are missing."
 msgstr "Nie ma żadnego z elementów autoaudiosink i %s."
 
+#: gst/playback/gstplaysink.c:2937
 msgid "The autoaudiosink element is missing."
 msgstr "Nie ma elementu autoaudiosink."
 
+#: gst/playback/gstplaysink.c:2942
 #, c-format
 msgid "Configured audiosink %s is not working."
 msgstr "Skonfigurowany element audiosink %s nie działa."
 
+#: gst/playback/gstplaysink.c:2946
 #, c-format
 msgid "Both autoaudiosink and %s elements are not working."
 msgstr "Żaden z elementów autoaudiosink i %s nie działa."
 
+#: gst/playback/gstplaysink.c:2950
 msgid "The autoaudiosink element is not working."
 msgstr "Element autoaudiosink nie działa."
 
+#: gst/playback/gstplaysink.c:3269 gst/playback/gstplaysink.c:3274
 msgid "Can't play a text file without video or visualizations."
 msgstr "Nie można odtwarzać pliku tekstowego bez obrazu lub wizualizacji."
 
+#: gst/playback/gsturidecodebin.c:921
 #, c-format
 msgid "No decoder available for type '%s'."
 msgstr "Brak dostępnego dekodera dla typu '%s'."
 
+#: gst/playback/gsturidecodebin.c:1378 gst/playback/gsturisourcebin.c:1491
 msgid "No URI specified to play from."
 msgstr "Nie podano URI do odtwarzania."
 
+#: gst/playback/gsturidecodebin.c:1384 gst/playback/gsturisourcebin.c:1497
 #, c-format
 msgid "Invalid URI \"%s\"."
 msgstr "Niepoprawne URI \"%s\"."
 
+#: gst/playback/gsturidecodebin.c:1391 gst/playback/gsturisourcebin.c:1504
 msgid "This stream type cannot be played yet."
 msgstr "Tego strumienia jeszcze nie można odtworzyć."
 
+#: gst/playback/gsturidecodebin.c:1409 gst/playback/gsturisourcebin.c:1522
 #, c-format
 msgid "No URI handler implemented for \"%s\"."
 msgstr "Nie ma zaimplementowanej obsługi URI dla \"%s\"."
 
+#: gst/playback/gsturidecodebin.c:2289 gst/playback/gsturisourcebin.c:2228
 msgid "Source element is invalid."
 msgstr "Element źródłowy jest niepoprawny."
 
+#: gst/tcp/gsttcpclientsink.c:216
 #, c-format
 msgid "Error while sending data to \"%s:%d\"."
 msgstr "Błąd podczas wysyłania danych do \"%s:%d\"."
 
+#: gst-libs/gst/audio/gstaudiobasesrc.c:842
 msgid "Can't record audio fast enough"
 msgstr "Nie można zapisywać danych dźwiękowych wystarczająco szybko"
 
+#: gst-libs/gst/audio/gstaudiocdsrc.c:1625
 msgid "This CD has no audio tracks"
 msgstr "Ta płyta CD nie ma ścieżek dźwiękowych"
 
+#: gst-libs/gst/pbutils/descriptions.c:89
 msgid "ID3 tag"
 msgstr "Znacznik ID3"
 
+#: gst-libs/gst/pbutils/descriptions.c:90
+#: gst-libs/gst/pbutils/descriptions.c:91
 msgid "APE tag"
 msgstr "Znacznik APE"
 
+#: gst-libs/gst/pbutils/descriptions.c:92
 msgid "ICY internet radio"
 msgstr "Radio internetowe ICY"
 
+#: gst-libs/gst/pbutils/descriptions.c:127
 msgid "Apple Lossless Audio (ALAC)"
 msgstr "Apple Lossless Audio (ALAC)"
 
+#: gst-libs/gst/pbutils/descriptions.c:143
 msgid "Free Lossless Audio Codec (FLAC)"
 msgstr "Free Lossless Audio Codec (FLAC)"
 
+#: gst-libs/gst/pbutils/descriptions.c:173
+#: gst-libs/gst/pbutils/descriptions.c:174
 msgid "Lossless True Audio (TTA)"
 msgstr "Lossless True Audio (TTA)"
 
+#: gst-libs/gst/pbutils/descriptions.c:182
 msgid "Windows Media Speech"
 msgstr "Windows Media Speech"
 
+#: gst-libs/gst/pbutils/descriptions.c:199
 msgid "CYUV Lossless"
 msgstr "CYUV Lossless (bezstratne CYUV)"
 
+#: gst-libs/gst/pbutils/descriptions.c:203
 msgid "FFMpeg v1"
 msgstr "FFMpeg v1"
 
+#: gst-libs/gst/pbutils/descriptions.c:217
 msgid "Lossless MSZH"
 msgstr "Lossless MSZH"
 
+#: gst-libs/gst/pbutils/descriptions.c:228
 msgid "Run-length encoding"
 msgstr "Kodowanie RLE"
 
+#: gst-libs/gst/pbutils/descriptions.c:274
 msgid "Timed Text"
 msgstr "Tekst w czasie"
 
+#: gst-libs/gst/pbutils/descriptions.c:278
 msgid "Subtitle"
 msgstr "Podpisy"
 
+#: gst-libs/gst/pbutils/descriptions.c:279
 msgid "MPL2 subtitle format"
 msgstr "Format podpisów MPL2"
 
+#: gst-libs/gst/pbutils/descriptions.c:280
 msgid "DKS subtitle format"
 msgstr "Format podpisów DKS"
 
+#: gst-libs/gst/pbutils/descriptions.c:281
 msgid "QTtext subtitle format"
 msgstr "Format podpisów QTtext"
 
+#: gst-libs/gst/pbutils/descriptions.c:282
 msgid "Sami subtitle format"
 msgstr "Format podpisów Sami"
 
+#: gst-libs/gst/pbutils/descriptions.c:283
 msgid "TMPlayer subtitle format"
 msgstr "Format podpisów TMPlayer"
 
+#: gst-libs/gst/pbutils/descriptions.c:287
 msgid "CEA 608 Closed Caption"
 msgstr "Podpisy CEA 608"
 
+#: gst-libs/gst/pbutils/descriptions.c:288
 msgid "CEA 708 Closed Caption"
 msgstr "Podpisy CEA 708"
 
+#: gst-libs/gst/pbutils/descriptions.c:289
 msgid "Kate subtitle format"
 msgstr "Format podpisów Kate"
 
+#: gst-libs/gst/pbutils/descriptions.c:290
 msgid "WebVTT subtitle format"
 msgstr "Format podpisów WebVTT"
 
+#: gst-libs/gst/pbutils/descriptions.c:455
+#: gst-libs/gst/pbutils/descriptions.c:458
+#: gst-libs/gst/pbutils/descriptions.c:508
 msgid "Uncompressed video"
 msgstr "Nieskompresowany obraz"
 
+#: gst-libs/gst/pbutils/descriptions.c:463
 msgid "Uncompressed gray"
 msgstr "Nieskompresowane szarości"
 
+#: gst-libs/gst/pbutils/descriptions.c:486
 #, c-format
 msgid "Uncompressed packed YUV %s"
 msgstr "Nieskompresowany upakowany YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:488
 #, c-format
 msgid "Uncompressed semi-planar YUV %s"
 msgstr "Nieskompresowany dwuwarstwowy YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:490
 #, c-format
 msgid "Uncompressed planar YUV %s"
 msgstr "Nieskompresowany warstwowy YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:501
 #, c-format
 msgid "Uncompressed palettized %d-bit %s"
 msgstr "Nieskompresowany z paletą %d-bitowy %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:504
 #, c-format
 msgid "Uncompressed %d-bit %s"
 msgstr "Nieskompresowany %d-bitowy %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:586
 #, c-format
 msgid "DivX MPEG-4 Version %d"
 msgstr "DivX MPEG-4 w wersji %d"
 
+#: gst-libs/gst/pbutils/descriptions.c:834
 msgid "Uncompressed audio"
 msgstr "Nieskompresowany dźwięk"
 
+#: gst-libs/gst/pbutils/descriptions.c:840
 #, c-format
 msgid "Raw %d-bit %s audio"
 msgstr "Surowy %d-bitowy dźwięk %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:942
 msgid "Audio CD source"
 msgstr "Źródło Audio CD"
 
+#: gst-libs/gst/pbutils/descriptions.c:945
 msgid "DVD source"
 msgstr "Źródło DVD"
 
+#: gst-libs/gst/pbutils/descriptions.c:948
 msgid "Real Time Streaming Protocol (RTSP) source"
 msgstr "Źródło RTSP (Real Time Streaming Protocol)"
 
+#: gst-libs/gst/pbutils/descriptions.c:952
 msgid "Microsoft Media Server (MMS) protocol source"
 msgstr "Źródło protokołu MMS (Microsoft Media Server)"
 
+#: gst-libs/gst/pbutils/descriptions.c:960
 #, c-format
 msgid "%s protocol source"
 msgstr "Źródło protokołu %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1034
 #, c-format
 msgid "%s video RTP depayloader"
 msgstr "Depayloader obrazu RTP %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1036
 #, c-format
 msgid "%s audio RTP depayloader"
 msgstr "Depayloader dźwięku RTP %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1038
 #, c-format
 msgid "%s RTP depayloader"
 msgstr "Depayloader RTP %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1045
 #, c-format
 msgid "%s demuxer"
 msgstr "Demuxer %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1047
 #, c-format
 msgid "%s decoder"
 msgstr "Dekoder %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1086
 #, c-format
 msgid "%s video RTP payloader"
 msgstr "Payloader obrazu RTP %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1088
 #, c-format
 msgid "%s audio RTP payloader"
 msgstr "Payloader dźwięku RTP %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1090
 #, c-format
 msgid "%s RTP payloader"
 msgstr "Payloader RTP %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1097
 #, c-format
 msgid "%s muxer"
 msgstr "Muxer %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1099
 #, c-format
 msgid "%s encoder"
 msgstr "Koder %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1133
 #, c-format
 msgid "GStreamer element %s"
 msgstr "Element GStreamera %s"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:558
 msgid "Unknown source element"
 msgstr "Nieznany element źródłowy"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:561
 msgid "Unknown sink element"
 msgstr "Nieznany element pochłaniający"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:564
 msgid "Unknown element"
 msgstr "Nieznany element"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:567
 msgid "Unknown decoder element"
 msgstr "Nieznany element dekodujący"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:570
 msgid "Unknown encoder element"
 msgstr "Nieznany element kodujący"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:575
 msgid "Plugin or element of unknown type"
 msgstr "Wtyczka lub element nieznanego typu"
 
+#: gst-libs/gst/tag/gsttagdemux.c:1243
 msgid "Failed to read tag: not enough data"
 msgstr "Nie udało się odczytać znacznika: za mało danych"
 
+#: gst-libs/gst/tag/tags.c:77
 msgid "track ID"
 msgstr "ID ścieżki"
 
+#: gst-libs/gst/tag/tags.c:77
 msgid "MusicBrainz track ID"
 msgstr "ID ścieżki wg MusicBrainz"
 
+#: gst-libs/gst/tag/tags.c:79
 msgid "artist ID"
 msgstr "ID artysty"
 
+#: gst-libs/gst/tag/tags.c:79
 msgid "MusicBrainz artist ID"
 msgstr "ID artysty wg MusicBrainz"
 
+#: gst-libs/gst/tag/tags.c:81
 msgid "album ID"
 msgstr "ID albumu"
 
+#: gst-libs/gst/tag/tags.c:81
 msgid "MusicBrainz album ID"
 msgstr "ID albumu wg MusicBrainz"
 
+#: gst-libs/gst/tag/tags.c:84
 msgid "album artist ID"
 msgstr "ID artysty albumu ID"
 
+#: gst-libs/gst/tag/tags.c:84
 msgid "MusicBrainz album artist ID"
 msgstr "ID artysty albumu wg MusicBrainz"
 
+#: gst-libs/gst/tag/tags.c:86
 msgid "track TRM ID"
 msgstr "TRM ID ścieżki"
 
+#: gst-libs/gst/tag/tags.c:86
 msgid "MusicBrainz TRM ID"
 msgstr "TRM ID wg MusicBrainz"
 
+#: gst-libs/gst/tag/tags.c:108
 msgid "capturing shutter speed"
 msgstr "szybkość migawki"
 
+#: gst-libs/gst/tag/tags.c:109
 msgid "Shutter speed used when capturing an image, in seconds"
 msgstr "Szybkość migawki zastosowana przy robieniu zdjęcia, w sekundach"
 
+#: gst-libs/gst/tag/tags.c:112
 msgid "capturing focal ratio"
 msgstr "współczynnik przysłony"
 
+#: gst-libs/gst/tag/tags.c:113
 msgid "Focal ratio (f-number) used when capturing the image"
 msgstr "Przysłona (liczba f) użyta przy robieniu zdjęcia"
 
+#: gst-libs/gst/tag/tags.c:116
 msgid "capturing focal length"
 msgstr "ogniskowa obiektywu"
 
+#: gst-libs/gst/tag/tags.c:117
 msgid "Focal length of the lens used capturing the image, in mm"
 msgstr "Długość ogniskowej obiektywu użyta przy robieniu zdjęcia, w mm"
 
+#: gst-libs/gst/tag/tags.c:121
 msgid "capturing 35 mm equivalent focal length"
 msgstr "ogniskowa obiektywu - odpowiednik 35 mm"
 
-msgid ""
-"35 mm equivalent focal length of the lens used capturing the image, in mm"
-msgstr ""
-"Długość ogniskowej obiektywu użyta przy robieniu zdjęcia, w mm, będąca "
-"odpowiednikiem 35 mm"
+#: gst-libs/gst/tag/tags.c:122
+msgid "35 mm equivalent focal length of the lens used capturing the image, in mm"
+msgstr "Długość ogniskowej obiektywu użyta przy robieniu zdjęcia, w mm, będąca odpowiednikiem 35 mm"
 
+#: gst-libs/gst/tag/tags.c:126
 msgid "capturing digital zoom ratio"
 msgstr "współczynnik powiększenia cyfrowego"
 
+#: gst-libs/gst/tag/tags.c:127
 msgid "Digital zoom ratio used when capturing an image"
 msgstr "Współczynnik powiększenia cyfrowego użytego przy robieniu zdjęcia"
 
+#: gst-libs/gst/tag/tags.c:130
 msgid "capturing iso speed"
 msgstr "czyłość ISO"
 
+#: gst-libs/gst/tag/tags.c:131
 msgid "The ISO speed used when capturing an image"
 msgstr "Czułość ISO użyta przy robieniu zdjęcia"
 
+#: gst-libs/gst/tag/tags.c:134
 msgid "capturing exposure program"
 msgstr "program ekspozycji"
 
+#: gst-libs/gst/tag/tags.c:135
 msgid "The exposure program used when capturing an image"
 msgstr "Program ekspozycji użyty przy robieniu zdjęcia"
 
+#: gst-libs/gst/tag/tags.c:138
 msgid "capturing exposure mode"
 msgstr "tryb ekspozycji"
 
+#: gst-libs/gst/tag/tags.c:139
 msgid "The exposure mode used when capturing an image"
 msgstr "Tryb ekspozycji użyty przy robieniu zdjęcia"
 
+#: gst-libs/gst/tag/tags.c:142
 msgid "capturing exposure compensation"
 msgstr "kompensacja ekspozycji"
 
+#: gst-libs/gst/tag/tags.c:143
 msgid "The exposure compensation used when capturing an image"
 msgstr "Kompensacja ekspozycji użyta przy robieniu zdjęcia"
 
+#: gst-libs/gst/tag/tags.c:146
 msgid "capturing scene capture type"
 msgstr "Tyb sceny zdjęcia"
 
+#: gst-libs/gst/tag/tags.c:147
 msgid "The scene capture mode used when capturing an image"
 msgstr "Tryb sceny użyty przy robieniu zdjęcia"
 
+#: gst-libs/gst/tag/tags.c:150
 msgid "capturing gain adjustment"
 msgstr "korekcja zdjęcia"
 
+#: gst-libs/gst/tag/tags.c:151
 msgid "The overall gain adjustment applied on an image"
 msgstr "Całkowita korekcja zastosowana dla zdjęcia"
 
+#: gst-libs/gst/tag/tags.c:154
 msgid "capturing white balance"
 msgstr "balans bieli"
 
+#: gst-libs/gst/tag/tags.c:155
 msgid "The white balance mode set when capturing an image"
 msgstr "Tryb balansu bieli ustawiony przy robieniu zdjęcia"
 
+#: gst-libs/gst/tag/tags.c:158
 msgid "capturing contrast"
 msgstr "kontrast zdjęcia"
 
+#: gst-libs/gst/tag/tags.c:159
 msgid "The direction of contrast processing applied when capturing an image"
 msgstr "Kierunek korekty kontrastu zastosowanej przy robieniu zdjęcia"
 
+#: gst-libs/gst/tag/tags.c:163
 msgid "capturing saturation"
 msgstr "nasycenie zdjęcia"
 
+#: gst-libs/gst/tag/tags.c:164
 msgid "The direction of saturation processing applied when capturing an image"
 msgstr "Kierunek korekty nasycenia zastosowanej przy robieniu zdjęcia"
 
+#: gst-libs/gst/tag/tags.c:168
 msgid "capturing sharpness"
 msgstr "ostrość zdjęcia"
 
+#: gst-libs/gst/tag/tags.c:169
 msgid "The direction of sharpness processing applied when capturing an image"
 msgstr "Kierunek korekty ostrości zastosowanej przy robieniu zdjęcia"
 
+#: gst-libs/gst/tag/tags.c:173
 msgid "capturing flash fired"
 msgstr "użycie flesza"
 
+#: gst-libs/gst/tag/tags.c:174
 msgid "If the flash fired while capturing an image"
 msgstr "Czy flesz był uruchomiony przy robieniu zdjęcia"
 
+#: gst-libs/gst/tag/tags.c:177
 msgid "capturing flash mode"
 msgstr "tryb flesza"
 
+#: gst-libs/gst/tag/tags.c:178
 msgid "The selected flash mode while capturing an image"
 msgstr "Tryb flesza wybrany przy robieniu zdjęcia"
 
+#: gst-libs/gst/tag/tags.c:181
 msgid "capturing metering mode"
 msgstr "tryb pomiaru dla zdjęcia"
 
-msgid ""
-"The metering mode used while determining exposure for capturing an image"
+#: gst-libs/gst/tag/tags.c:182
+msgid "The metering mode used while determining exposure for capturing an image"
 msgstr "Tryb pomiaru użyty przy określaniu ekspozycji dla zdjęcia"
 
+#: gst-libs/gst/tag/tags.c:186
 msgid "capturing source"
 msgstr "źródło zdjęcia"
 
+#: gst-libs/gst/tag/tags.c:187
 msgid "The source or type of device used for the capture"
 msgstr "Źródło lub rodzaj urządzenia użytego do zrobienia zdjęcia"
 
+#: gst-libs/gst/tag/tags.c:190
 msgid "image horizontal ppi"
 msgstr "rozdzielczość pozioma"
 
+#: gst-libs/gst/tag/tags.c:191
 msgid "Media (image/video) intended horizontal pixel density in ppi"
 msgstr "Rozdzielczość pozioma nośnika w pikselach na cal"
 
+#: gst-libs/gst/tag/tags.c:194
 msgid "image vertical ppi"
 msgstr "rozdzielczość pionowa"
 
+#: gst-libs/gst/tag/tags.c:195
 msgid "Media (image/video) intended vertical pixel density in ppi"
 msgstr "Rozdzielczość pionowa nośnika w pikselach na cal"
 
+#: gst-libs/gst/tag/tags.c:198
 msgid "ID3v2 frame"
 msgstr "ramka ID3v2"
 
+#: gst-libs/gst/tag/tags.c:198
 msgid "unparsed id3v2 tag frame"
 msgstr "ramka znacznika id3v2"
 
+#: gst-libs/gst/tag/tags.c:202
 msgid "musical-key"
 msgstr "klucz muzyczny"
 
+#: gst-libs/gst/tag/tags.c:202
 msgid "Initial key in which the sound starts"
 msgstr "Początkowy klucz, w którym zaczyna się dźwięk"
 
+#: tools/gst-device-monitor.c:260 tools/gst-play.c:1444
 msgid "Print version information and exit"
 msgstr "Wypisanie informacji o wersji i zakończenie"
 
-msgid ""
-"Don't exit after showing the initial device list, but wait for devices to "
-"added/removed."
-msgstr ""
-"Bez kończenia po wyświetleniu początkowej listy urządzeń, oczekiwanie na "
-"dodanie/usunięcie urządzeń."
+#: tools/gst-device-monitor.c:262
+msgid "Don't exit after showing the initial device list, but wait for devices to added/removed."
+msgstr "Bez kończenia po wyświetleniu początkowej listy urządzeń, oczekiwanie na dodanie/usunięcie urządzeń."
 
+#: tools/gst-play.c:310
 #, c-format
 msgid "Volume: %.0f%%"
 msgstr "Głośność: %.0f%%"
 
+#: tools/gst-play.c:349
 msgid "Buffering..."
 msgstr "Buforowanie..."
 
+#: tools/gst-play.c:370
 msgid "Clock lost, selecting a new one\n"
 msgstr "Utracono zegar, wybieranie nowego\n"
 
+#: tools/gst-play.c:400 tools/gst-play.c:446 tools/gst-play.c:883
+#: tools/gst-play.c:1347
 msgid "Reached end of play list."
 msgstr "Osiągnięto koniec listy odtwarzania."
 
+#: tools/gst-play.c:613
 msgid "Paused"
 msgstr "Pauza"
 
+#: tools/gst-play.c:671
 #, c-format
 msgid "Now playing %s\n"
 msgstr "Trwa odtwarzanie %s\n"
 
+#: tools/gst-play.c:734
 #, c-format
 msgid "About to finish, preparing next title: %s"
 msgstr "Blisko końca, przygotowywanie następnego tytułu: %s"
 
+#: tools/gst-play.c:979
 #, c-format
 msgid "Playback rate: %.2f"
 msgstr "Tempo odtwarzania: %.2f"
 
+#: tools/gst-play.c:983
 #, c-format
 msgid "Could not change playback rate to %.2f"
 msgstr "Nie udało się zmienić tempa odtwarzania na %.2f"
 
+#: tools/gst-play.c:1287
 msgid "space"
 msgstr "spacja"
 
+#: tools/gst-play.c:1287
 msgid "pause/unpause"
 msgstr "pauza/wznowienie"
 
+#: tools/gst-play.c:1288
 msgid "q or ESC"
 msgstr "q lub ESC"
 
+#: tools/gst-play.c:1288
 msgid "quit"
 msgstr "wyjście"
 
+#: tools/gst-play.c:1289
 msgid "> or n"
 msgstr "> lub n"
 
+#: tools/gst-play.c:1289
 msgid "play next"
 msgstr "odtworzenie następnego"
 
+#: tools/gst-play.c:1290
 msgid "< or b"
 msgstr "< lub b"
 
+#: tools/gst-play.c:1290
 msgid "play previous"
 msgstr "odtworzenie poprzedniego"
 
+#: tools/gst-play.c:1291
 msgid "seek forward"
 msgstr "przewinięcie w przód"
 
+#: tools/gst-play.c:1292
 msgid "seek backward"
 msgstr "przewinięcie w tył"
 
+#: tools/gst-play.c:1293
 msgid "volume up"
 msgstr "większa głośność"
 
+#: tools/gst-play.c:1294
 msgid "volume down"
 msgstr "mniejsza głośność"
 
+#: tools/gst-play.c:1295
 msgid "increase playback rate"
 msgstr "większe tempo odtwarzania"
 
+#: tools/gst-play.c:1296
 msgid "decrease playback rate"
 msgstr "mniejsze tempo odtwarzania"
 
+#: tools/gst-play.c:1297
 msgid "change playback direction"
 msgstr "zmiana kierunku odtwarzania"
 
+#: tools/gst-play.c:1298
 msgid "enable/disable trick modes"
 msgstr "włączenie/wyłączenie trybów trików"
 
+#: tools/gst-play.c:1299
 msgid "change audio track"
 msgstr "zmiana ścieżki dźwiękowej"
 
+#: tools/gst-play.c:1300
 msgid "change video track"
 msgstr "zmiana ścieżki filmowej"
 
+#: tools/gst-play.c:1301
 msgid "change subtitle track"
 msgstr "zmiana ścieżki podpisów"
 
+#: tools/gst-play.c:1302
 msgid "seek to beginning"
 msgstr "przewinięcie na początek"
 
+#: tools/gst-play.c:1303
 msgid "show keyboard shortcuts"
 msgstr "wyświetlenie skrótów klawiatury"
 
+#: tools/gst-play.c:1306
 msgid "Interactive mode - keyboard controls:"
 msgstr "Tryb interaktywny - sterowanie z klawiatury:"
 
+#: tools/gst-play.c:1439
 msgid "Output status information and property notifications"
 msgstr "Informacje o stanie wyjścia i powiadomienia o własnościach"
 
+#: tools/gst-play.c:1441
 msgid "Control playback behaviour setting playbin 'flags' property"
-msgstr ""
-"Sterowanie zachowaniem odtwarzania przez ustawianie własności 'flags' "
-"elementu playbin"
+msgstr "Sterowanie zachowaniem odtwarzania przez ustawianie własności 'flags' elementu playbin"
 
+#: tools/gst-play.c:1446
 msgid "Video sink to use (default is autovideosink)"
 msgstr "Element pochłaniający obraz (domyślny to autovideosink)"
 
+#: tools/gst-play.c:1448
 msgid "Audio sink to use (default is autoaudiosink)"
 msgstr "Element pochłaniający dźwięk (domyślny to autoaudiosink)"
 
+#: tools/gst-play.c:1450
 msgid "Enable gapless playback"
 msgstr "Włączenie odtwarzania bez przerw"
 
+#: tools/gst-play.c:1452
 msgid "Shuffle playlist"
 msgstr "Przetasowanie listy odtwarzania"
 
+#: tools/gst-play.c:1455
 msgid "Disable interactive control via the keyboard"
 msgstr "Wyłączenie interaktywnego sterowania z klawiatury"
 
+#: tools/gst-play.c:1457
 msgid "Volume"
 msgstr "Głośność"
 
+#: tools/gst-play.c:1459
 msgid "Playlist file containing input media files"
 msgstr "Plik listy odtwarzania zawierający wejściowe pliki multimedialne"
 
+#: tools/gst-play.c:1461
 msgid "Do not print any output (apart from errors)"
 msgstr "Bez wypisywania żadnego wyjścia (poza błędami)"
 
+#: tools/gst-play.c:1463
 msgid "Use playbin3 pipeline"
 msgstr "Użycie potoku playbin3"
 
+#: tools/gst-play.c:1464
 msgid "(default varies depending on 'USE_PLAYBIN' env variable)"
 msgstr "(wartość domyślna zależy od zmiennej środowiskowej 'USE_PLAYBIN')"
 
+#: tools/gst-play.c:1468
+msgid "Keep showing the last frame on EOS until quit or playlist change command (gapless is ignored)"
+msgstr "Pokazywanie ostatniej klatki po EOS aż do polecenia zakończenia lub zmiany listy odtwarzania (brak przerw jest ignorowany)"
+
+#: tools/gst-play.c:1546
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr "Składnia: %s PLIK1|URI1 [PLIK2|URI2] [PLIK3|URI3] ..."
 
+#: tools/gst-play.c:1550
 msgid "You must provide at least one filename or URI to play."
 msgstr "Trzeba podać przynajmniej jedną nazwę pliku lub URI do odtworzenia."
 
+#: tools/gst-play.c:1590
 msgid "Press 'k' to see a list of keyboard shortcuts.\n"
 msgstr "Klawisz 'k' wyświetla listę skrótów klawiatury.\n"
index 149f27e..fd68da4 100644 (file)
@@ -6,10 +6,10 @@
 # Yuri Kozlov <yuray@komyakino.ru>, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2019.
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base 1.15.1\n"
+"Project-Id-Version: gst-plugins-base 1.16.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:43+0000\n"
-"PO-Revision-Date: 2019-01-25 19:47+0300\n"
+"POT-Creation-Date: 2019-04-19 00:20+0100\n"
+"PO-Revision-Date: 2019-09-03 18:48+0300\n"
 "Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
 "Language-Team: Russian <gnu@d07.ru>\n"
 "Language: ru\n"
@@ -18,676 +18,879 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "X-Generator: Lokalize 2.0\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 
+#: ext/alsa/gstalsasink.c:579
 msgid "Could not open device for playback in mono mode."
 msgstr "Не удалось открыть устройство для воспроизведения в режиме моно."
 
+#: ext/alsa/gstalsasink.c:581
 msgid "Could not open device for playback in stereo mode."
 msgstr "Не удалось открыть устройство для воспроизведения в режиме стерео."
 
+#: ext/alsa/gstalsasink.c:585
 #, c-format
 msgid "Could not open device for playback in %d-channel mode."
-msgstr ""
-"Не удалось открыть устройство для воспроизведения в %d-канальном режиме."
+msgstr "Не удалось открыть устройство для воспроизведения в %d-канальном режиме."
 
-msgid ""
-"Could not open audio device for playback. Device is being used by another "
-"application."
-msgstr ""
-"Не удалось открыть аудио-устройство для воспроизведения. Устройство "
-"используется другим приложением."
+#: ext/alsa/gstalsasink.c:858
+msgid "Could not open audio device for playback. Device is being used by another application."
+msgstr "Не удалось открыть аудио-устройство для воспроизведения. Устройство используется другим приложением."
 
+#: ext/alsa/gstalsasink.c:863
 msgid "Could not open audio device for playback."
 msgstr "Не удалось открыть аудио-устройство для воспроизведения."
 
+#: ext/alsa/gstalsasink.c:1076
 msgid "Error outputting to audio device. The device has been disconnected."
 msgstr "Ошибка вывода в аудио-устройство. Устройство отсоединено."
 
+#: ext/alsa/gstalsasrc.c:444
 msgid "Could not open device for recording in mono mode."
 msgstr "Не удалось открыть устройство для записи в режиме моно."
 
+#: ext/alsa/gstalsasrc.c:446
 msgid "Could not open device for recording in stereo mode."
 msgstr "Не удалось открыть устройство для записи в режиме стерео."
 
+#: ext/alsa/gstalsasrc.c:450
 #, c-format
 msgid "Could not open device for recording in %d-channel mode"
 msgstr "Не удалось открыть устройство для записи в %d-канальном режиме."
 
-msgid ""
-"Could not open audio device for recording. Device is being used by another "
-"application."
-msgstr ""
-"Не удалось открыть устройство для записи. Устройство используется другим "
-"приложением."
+#: ext/alsa/gstalsasrc.c:741
+msgid "Could not open audio device for recording. Device is being used by another application."
+msgstr "Не удалось открыть устройство для записи. Устройство используется другим приложением."
 
+#: ext/alsa/gstalsasrc.c:746
 msgid "Could not open audio device for recording."
 msgstr "Не удалось открыть устройство для записи."
 
+#: ext/alsa/gstalsasrc.c:992
 msgid "Error recording from audio device. The device has been disconnected."
 msgstr "Ошибка записи из аудио-устройства. Устройство отсоединено."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:277 ext/cdparanoia/gstcdparanoiasrc.c:283
 msgid "Could not open CD device for reading."
 msgstr "Не удалось открыть CD-устройство для чтения."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:409
 msgid "Could not seek CD."
 msgstr "Не удалось сменить позицию воспроизведения CD."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:417
 msgid "Could not read CD."
 msgstr "Не удалось прочитать CD."
 
+#: ext/gl/gstgltestsrc.c:491
 msgid "failed to draw pattern"
 msgstr "ошибка при рисовании шаблона"
 
+#: ext/gl/gstgltestsrc.c:492
 msgid "A GL error occurred"
 msgstr "Произошла ошибка GL"
 
+#: ext/gl/gstgltestsrc.c:498
 msgid "format wasn't negotiated before get function"
 msgstr "перед функцией получения не был согласован формат"
 
+#: gst/encoding/gstencodebin.c:1636 gst/playback/gstplaybin2.c:3399
+#: gst/playback/gstplaysink.c:1522 gst/playback/gstplaysink.c:1535
+#: gst/playback/gstplaysink.c:1872 gst/playback/gstplaysink.c:1904
+#: gst/playback/gstplaysink.c:2488 gst/playback/gstplaysink.c:2537
+#: gst/playback/gstplaysink.c:2552 gst/playback/gstplaysink.c:2577
+#: gst/playback/gstplaysink.c:2609 gst/playback/gstplaysink.c:2757
+#: gst/playback/gstplaysink.c:2788 gst/playback/gstplaysink.c:3166
+#: gst/playback/gstplaysink.c:3175 gst/playback/gstplaysink.c:3184
+#: gst/playback/gstplaysink.c:3193 gst/playback/gstplaysink.c:3606
+#: gst/playback/gstplaysink.c:4526 gst/playback/gstplaysinkconvertbin.c:97
+#: gst/playback/gstplaysinkconvertbin.c:117
+#: gst/playback/gsturidecodebin.c:1472 gst/playback/gsturisourcebin.c:1597
 #, c-format
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Отсутствует элемент «%s» — проверьте правильность установки GStreamer."
 
+#: gst/playback/gstdecodebin2.c:1883 gst/playback/gstparsebin.c:1553
 msgid "Could not determine type of stream"
 msgstr "Не удалось определить тип потока"
 
+#: gst/playback/gstdecodebin2.c:2861 gst/playback/gstparsebin.c:2385
 msgid "This appears to be a text file"
 msgstr "Этот файл является текстовым"
 
+#: gst/playback/gstplaybin2.c:5452
 msgid "Could not create \"uridecodebin\" element."
 msgstr "Не удалось создать элемент «uridecodebin»."
 
+#: gst/playback/gstplaybin3.c:4558
 msgid "Could not create \"uridecodebin3\" element."
 msgstr "Не удалось создать элемент «uridecodebin3»."
 
+#: gst/playback/gstplaysink.c:2003
 #, c-format
 msgid "Both autovideosink and %s elements are missing."
 msgstr "Отсутствуют элементы autovideosink и %s."
 
+#: gst/playback/gstplaysink.c:2007
 msgid "The autovideosink element is missing."
 msgstr "Отсутствует элемент autovideosink."
 
+#: gst/playback/gstplaysink.c:2012
 #, c-format
 msgid "Configured videosink %s is not working."
 msgstr "Настроенный videosink %s не работает."
 
+#: gst/playback/gstplaysink.c:2016
 #, c-format
 msgid "Both autovideosink and %s elements are not working."
 msgstr "Элементы autovideosink и %s не работают."
 
+#: gst/playback/gstplaysink.c:2020
 msgid "The autovideosink element is not working."
 msgstr "Элемент autovideosink не работает."
 
+#: gst/playback/gstplaysink.c:2525
 msgid "Custom text sink element is not usable."
 msgstr "Входной элемент пользовательского текста не работоспособен."
 
+#: gst/playback/gstplaysink.c:2903
 msgid "No volume control found"
 msgstr "Не найден элемент управления громкостью"
 
+#: gst/playback/gstplaysink.c:2933
 #, c-format
 msgid "Both autoaudiosink and %s elements are missing."
 msgstr "Отсутствуют элементы autoaudiosink и %s."
 
+#: gst/playback/gstplaysink.c:2937
 msgid "The autoaudiosink element is missing."
 msgstr "Отсутствует элемент autoaudiosink."
 
+#: gst/playback/gstplaysink.c:2942
 #, c-format
 msgid "Configured audiosink %s is not working."
 msgstr "Настроенный audiosink %s не работает."
 
+#: gst/playback/gstplaysink.c:2946
 #, c-format
 msgid "Both autoaudiosink and %s elements are not working."
 msgstr "Элементы autoaudiosink и %s не работают."
 
+#: gst/playback/gstplaysink.c:2950
 msgid "The autoaudiosink element is not working."
 msgstr "Элемент autoaudiosink не работает."
 
+#: gst/playback/gstplaysink.c:3269 gst/playback/gstplaysink.c:3274
 msgid "Can't play a text file without video or visualizations."
-msgstr ""
-"Воспроизведение текстового файла без видео или визуализации невозможно."
+msgstr "Воспроизведение текстового файла без видео или визуализации невозможно."
 
+#: gst/playback/gsturidecodebin.c:921
 #, c-format
 msgid "No decoder available for type '%s'."
 msgstr "Для типа «%s» недоступен декодер."
 
+#: gst/playback/gsturidecodebin.c:1378 gst/playback/gsturisourcebin.c:1491
 msgid "No URI specified to play from."
 msgstr "Не указан URI источника воспроизведения."
 
+#: gst/playback/gsturidecodebin.c:1384 gst/playback/gsturisourcebin.c:1497
 #, c-format
 msgid "Invalid URI \"%s\"."
 msgstr "Неверный URI «%s»."
 
+#: gst/playback/gsturidecodebin.c:1391 gst/playback/gsturisourcebin.c:1504
 msgid "This stream type cannot be played yet."
 msgstr "Воспроизведение этого потока в данный момент невозможно."
 
+#: gst/playback/gsturidecodebin.c:1409 gst/playback/gsturisourcebin.c:1522
 #, c-format
 msgid "No URI handler implemented for \"%s\"."
 msgstr "Для «%s» не реализован обработчик URI."
 
+#: gst/playback/gsturidecodebin.c:2289 gst/playback/gsturisourcebin.c:2228
 msgid "Source element is invalid."
 msgstr "Неверный элемент источника."
 
+#: gst/tcp/gsttcpclientsink.c:216
 #, c-format
 msgid "Error while sending data to \"%s:%d\"."
 msgstr "Ошибка отправки данных в «%s:%d»."
 
+#: gst-libs/gst/audio/gstaudiobasesrc.c:842
 msgid "Can't record audio fast enough"
 msgstr "Невозможна запись аудио с достаточной скоростью"
 
+#: gst-libs/gst/audio/gstaudiocdsrc.c:1625
 msgid "This CD has no audio tracks"
 msgstr "На CD нет звуковых дорожек"
 
+#: gst-libs/gst/pbutils/descriptions.c:89
 msgid "ID3 tag"
 msgstr "ID3-тег"
 
+#: gst-libs/gst/pbutils/descriptions.c:90
+#: gst-libs/gst/pbutils/descriptions.c:91
 msgid "APE tag"
 msgstr "APE-тег"
 
+#: gst-libs/gst/pbutils/descriptions.c:92
 msgid "ICY internet radio"
 msgstr "Интернет-радио ICY"
 
+#: gst-libs/gst/pbutils/descriptions.c:127
 msgid "Apple Lossless Audio (ALAC)"
 msgstr "Apple Lossless Audio (ALAC)"
 
+#: gst-libs/gst/pbutils/descriptions.c:143
 msgid "Free Lossless Audio Codec (FLAC)"
 msgstr "Free Lossless Audio Codec (FLAC)"
 
+#: gst-libs/gst/pbutils/descriptions.c:173
+#: gst-libs/gst/pbutils/descriptions.c:174
 msgid "Lossless True Audio (TTA)"
 msgstr "Lossless True Audio (TTA)"
 
+#: gst-libs/gst/pbutils/descriptions.c:182
 msgid "Windows Media Speech"
 msgstr "Windows Media Speech"
 
+#: gst-libs/gst/pbutils/descriptions.c:199
 msgid "CYUV Lossless"
 msgstr "CYUV Lossless"
 
+#: gst-libs/gst/pbutils/descriptions.c:203
 msgid "FFMpeg v1"
 msgstr "FFMpeg v1"
 
+#: gst-libs/gst/pbutils/descriptions.c:217
 msgid "Lossless MSZH"
 msgstr "Lossless MSZH"
 
+#: gst-libs/gst/pbutils/descriptions.c:228
 msgid "Run-length encoding"
 msgstr "RLE-сжатие"
 
+#: gst-libs/gst/pbutils/descriptions.c:274
 msgid "Timed Text"
 msgstr "Timed Text"
 
+#: gst-libs/gst/pbutils/descriptions.c:278
 msgid "Subtitle"
 msgstr "Субтитры"
 
+#: gst-libs/gst/pbutils/descriptions.c:279
 msgid "MPL2 subtitle format"
 msgstr "Формат субтитров MPL2"
 
+#: gst-libs/gst/pbutils/descriptions.c:280
 msgid "DKS subtitle format"
 msgstr "Формат субтитров DKS"
 
+#: gst-libs/gst/pbutils/descriptions.c:281
 msgid "QTtext subtitle format"
 msgstr "Формат субтитров QTtext"
 
+#: gst-libs/gst/pbutils/descriptions.c:282
 msgid "Sami subtitle format"
 msgstr "Формат субтитров Sami"
 
+#: gst-libs/gst/pbutils/descriptions.c:283
 msgid "TMPlayer subtitle format"
 msgstr "Формат субтитров TMPlayer"
 
+#: gst-libs/gst/pbutils/descriptions.c:287
 msgid "CEA 608 Closed Caption"
 msgstr "Скрытые субтитры CEA 608"
 
+#: gst-libs/gst/pbutils/descriptions.c:288
 msgid "CEA 708 Closed Caption"
 msgstr "Скрытые субтитры CEA 708"
 
+#: gst-libs/gst/pbutils/descriptions.c:289
 msgid "Kate subtitle format"
 msgstr "Формат субтитров Kate"
 
+#: gst-libs/gst/pbutils/descriptions.c:290
 msgid "WebVTT subtitle format"
 msgstr "Формат субтитров WebVTT"
 
+#: gst-libs/gst/pbutils/descriptions.c:455
+#: gst-libs/gst/pbutils/descriptions.c:458
+#: gst-libs/gst/pbutils/descriptions.c:508
 msgid "Uncompressed video"
 msgstr "Несжатое видео"
 
+#: gst-libs/gst/pbutils/descriptions.c:463
 msgid "Uncompressed gray"
 msgstr "Несжатый серый"
 
+#: gst-libs/gst/pbutils/descriptions.c:486
 #, c-format
 msgid "Uncompressed packed YUV %s"
 msgstr "Несжатый смешанный YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:488
 #, c-format
 msgid "Uncompressed semi-planar YUV %s"
 msgstr "Несжатый полу-планарный YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:490
 #, c-format
 msgid "Uncompressed planar YUV %s"
 msgstr "Несжатый планарный YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:501
 #, c-format
 msgid "Uncompressed palettized %d-bit %s"
 msgstr "Несжатое %d-битное %s с палитрой"
 
+#: gst-libs/gst/pbutils/descriptions.c:504
 #, c-format
 msgid "Uncompressed %d-bit %s"
 msgstr "Несжатое %d-битное %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:586
 #, c-format
 msgid "DivX MPEG-4 Version %d"
 msgstr "DivX MPEG-4 Версия %d"
 
+#: gst-libs/gst/pbutils/descriptions.c:834
 msgid "Uncompressed audio"
 msgstr "Несжатое аудио"
 
+#: gst-libs/gst/pbutils/descriptions.c:840
 #, c-format
 msgid "Raw %d-bit %s audio"
 msgstr "Необработанное %d-битное аудио %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:942
 msgid "Audio CD source"
 msgstr "Источник аудио-CD"
 
+#: gst-libs/gst/pbutils/descriptions.c:945
 msgid "DVD source"
 msgstr "Источник DVD"
 
+#: gst-libs/gst/pbutils/descriptions.c:948
 msgid "Real Time Streaming Protocol (RTSP) source"
 msgstr "Источник протокола Real Time Streaming Protocol (RTSP)"
 
+#: gst-libs/gst/pbutils/descriptions.c:952
 msgid "Microsoft Media Server (MMS) protocol source"
 msgstr "Источник протокола Microsoft Media Server (MMS)"
 
+#: gst-libs/gst/pbutils/descriptions.c:960
 #, c-format
 msgid "%s protocol source"
 msgstr "Источник протокола %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1034
 #, c-format
 msgid "%s video RTP depayloader"
 msgstr "RTP-разгрузчик %s-видео"
 
+#: gst-libs/gst/pbutils/descriptions.c:1036
 #, c-format
 msgid "%s audio RTP depayloader"
 msgstr "RTP-разгрузчик %s-аудио"
 
+#: gst-libs/gst/pbutils/descriptions.c:1038
 #, c-format
 msgid "%s RTP depayloader"
 msgstr "RTP-разгрузчик %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1045
 #, c-format
 msgid "%s demuxer"
 msgstr "Демуксер %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1047
 #, c-format
 msgid "%s decoder"
 msgstr "Декодер %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1086
 #, c-format
 msgid "%s video RTP payloader"
 msgstr "RTP-нагрузчик %s-видео"
 
+#: gst-libs/gst/pbutils/descriptions.c:1088
 #, c-format
 msgid "%s audio RTP payloader"
 msgstr "RTP-нагрузчик %s-аудио"
 
+#: gst-libs/gst/pbutils/descriptions.c:1090
 #, c-format
 msgid "%s RTP payloader"
 msgstr "RTP-нагрузчик %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1097
 #, c-format
 msgid "%s muxer"
 msgstr "Муксер %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1099
 #, c-format
 msgid "%s encoder"
 msgstr "Кодировщик %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1133
 #, c-format
 msgid "GStreamer element %s"
 msgstr "Элемент GStreamer %s"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:558
 msgid "Unknown source element"
 msgstr "Неизвестный элемент-источник"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:561
 msgid "Unknown sink element"
 msgstr "Неизвестный элемент-приёмник"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:564
 msgid "Unknown element"
 msgstr "Неизвестный элемент"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:567
 msgid "Unknown decoder element"
 msgstr "Неизвестный элемент-декодер"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:570
 msgid "Unknown encoder element"
 msgstr "Неизвестный элемент-кодировщик"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:575
 msgid "Plugin or element of unknown type"
 msgstr "Модуль или элемент неизвестного типа"
 
+#: gst-libs/gst/tag/gsttagdemux.c:1243
 msgid "Failed to read tag: not enough data"
 msgstr "Не удалось прочитать тег: недостаточно данных"
 
+#: gst-libs/gst/tag/tags.c:77
 msgid "track ID"
 msgstr "ID дорожки"
 
+#: gst-libs/gst/tag/tags.c:77
 msgid "MusicBrainz track ID"
 msgstr "MusicBrainz ID дорожки"
 
+#: gst-libs/gst/tag/tags.c:79
 msgid "artist ID"
 msgstr "ID исполнителя"
 
+#: gst-libs/gst/tag/tags.c:79
 msgid "MusicBrainz artist ID"
 msgstr "MusicBrainz ID исполнителя"
 
+#: gst-libs/gst/tag/tags.c:81
 msgid "album ID"
 msgstr "ID альбома"
 
+#: gst-libs/gst/tag/tags.c:81
 msgid "MusicBrainz album ID"
 msgstr "MusicBrainz ID альбома"
 
+#: gst-libs/gst/tag/tags.c:84
 msgid "album artist ID"
 msgstr "ID исполнителя альбома"
 
+#: gst-libs/gst/tag/tags.c:84
 msgid "MusicBrainz album artist ID"
 msgstr "MusicBrainz ID исполнителя альбома"
 
+#: gst-libs/gst/tag/tags.c:86
 msgid "track TRM ID"
 msgstr "ID TRM дорожки"
 
+#: gst-libs/gst/tag/tags.c:86
 msgid "MusicBrainz TRM ID"
 msgstr "MusicBrainz TRM ID"
 
+#: gst-libs/gst/tag/tags.c:108
 msgid "capturing shutter speed"
 msgstr "выдержка при съёмке"
 
+#: gst-libs/gst/tag/tags.c:109
 msgid "Shutter speed used when capturing an image, in seconds"
 msgstr "Выдержка при съёмке изображения, в секундах"
 
+#: gst-libs/gst/tag/tags.c:112
 msgid "capturing focal ratio"
 msgstr "диафрагменное число при съёмке"
 
+#: gst-libs/gst/tag/tags.c:113
 msgid "Focal ratio (f-number) used when capturing the image"
 msgstr "Диафрагменное число (f) при съёмке изображения"
 
+#: gst-libs/gst/tag/tags.c:116
 msgid "capturing focal length"
 msgstr "фокусное расстояние при съёмке"
 
+#: gst-libs/gst/tag/tags.c:117
 msgid "Focal length of the lens used capturing the image, in mm"
 msgstr "Фокусное расстояние зеркала при съёмке изображения, в мм"
 
+#: gst-libs/gst/tag/tags.c:121
 msgid "capturing 35 mm equivalent focal length"
 msgstr "съёмка при 35 мм эквивалентном фокусном расстоянии"
 
-msgid ""
-"35 mm equivalent focal length of the lens used capturing the image, in mm"
-msgstr ""
-"35 мм эквивалент фокусного расстояния зеркала при съёмке изображения, в мм"
+#: gst-libs/gst/tag/tags.c:122
+msgid "35 mm equivalent focal length of the lens used capturing the image, in mm"
+msgstr "35 мм эквивалент фокусного расстояния зеркала при съёмке изображения, в мм"
 
+#: gst-libs/gst/tag/tags.c:126
 msgid "capturing digital zoom ratio"
 msgstr "коэффициент цифрового трансфокатора при съёмке"
 
+#: gst-libs/gst/tag/tags.c:127
 msgid "Digital zoom ratio used when capturing an image"
 msgstr "Коэффициент цифрового трансфокатора при съёмке изображения"
 
+#: gst-libs/gst/tag/tags.c:130
 msgid "capturing iso speed"
 msgstr "чувствительность ISO при съёмке"
 
+#: gst-libs/gst/tag/tags.c:131
 msgid "The ISO speed used when capturing an image"
 msgstr "Чувствительность ISO при съёмке изображения"
 
+#: gst-libs/gst/tag/tags.c:134
 msgid "capturing exposure program"
 msgstr "программа экспозиции при съёмке"
 
+#: gst-libs/gst/tag/tags.c:135
 msgid "The exposure program used when capturing an image"
 msgstr "Программа экспозиции при съёмке изображения"
 
+#: gst-libs/gst/tag/tags.c:138
 msgid "capturing exposure mode"
 msgstr "режим экспозиции при съёмке"
 
+#: gst-libs/gst/tag/tags.c:139
 msgid "The exposure mode used when capturing an image"
 msgstr "Режим экспозиции при съёмке изображения"
 
+#: gst-libs/gst/tag/tags.c:142
 msgid "capturing exposure compensation"
 msgstr "компенсация экспозиции при съёмке"
 
+#: gst-libs/gst/tag/tags.c:143
 msgid "The exposure compensation used when capturing an image"
 msgstr "Компенсация экспозиции при съёмке изображения"
 
+#: gst-libs/gst/tag/tags.c:146
 msgid "capturing scene capture type"
 msgstr "тип сцены при съёмке"
 
+#: gst-libs/gst/tag/tags.c:147
 msgid "The scene capture mode used when capturing an image"
 msgstr "Тип сцены при съёмке изображения"
 
+#: gst-libs/gst/tag/tags.c:150
 msgid "capturing gain adjustment"
 msgstr "регулировка усиления при съёмке"
 
+#: gst-libs/gst/tag/tags.c:151
 msgid "The overall gain adjustment applied on an image"
 msgstr "Итоговая настройка усиления, применяемая к изображению"
 
+#: gst-libs/gst/tag/tags.c:154
 msgid "capturing white balance"
 msgstr "баланс белого при съёмке"
 
+#: gst-libs/gst/tag/tags.c:155
 msgid "The white balance mode set when capturing an image"
 msgstr "Режим баланса белого при съёмке изображения"
 
+#: gst-libs/gst/tag/tags.c:158
 msgid "capturing contrast"
 msgstr "контрастность при съёмке"
 
+#: gst-libs/gst/tag/tags.c:159
 msgid "The direction of contrast processing applied when capturing an image"
 msgstr "Направление обработки контраста при съёмке изображения"
 
+#: gst-libs/gst/tag/tags.c:163
 msgid "capturing saturation"
 msgstr "насыщенность при съёмке"
 
+#: gst-libs/gst/tag/tags.c:164
 msgid "The direction of saturation processing applied when capturing an image"
 msgstr "Направление обработки насыщенности при съёмке изображения"
 
+#: gst-libs/gst/tag/tags.c:168
 msgid "capturing sharpness"
 msgstr "резкость при съёмке"
 
+#: gst-libs/gst/tag/tags.c:169
 msgid "The direction of sharpness processing applied when capturing an image"
 msgstr "Направление обработки резкости при съёмке изображения"
 
+#: gst-libs/gst/tag/tags.c:173
 msgid "capturing flash fired"
 msgstr "вспышка при съёмке"
 
+#: gst-libs/gst/tag/tags.c:174
 msgid "If the flash fired while capturing an image"
 msgstr "Сработала ли вспышка при съёмке изображения"
 
+#: gst-libs/gst/tag/tags.c:177
 msgid "capturing flash mode"
 msgstr "режим вспышки при съёмке"
 
+#: gst-libs/gst/tag/tags.c:178
 msgid "The selected flash mode while capturing an image"
 msgstr "Выбранный режим для вспышки при съёмке изображения"
 
+#: gst-libs/gst/tag/tags.c:181
 msgid "capturing metering mode"
 msgstr "режим замера при съёмке"
 
-msgid ""
-"The metering mode used while determining exposure for capturing an image"
-msgstr ""
-"Режим замера, использованный для определения экспозиции при съёмке "
-"изображения"
+#: gst-libs/gst/tag/tags.c:182
+msgid "The metering mode used while determining exposure for capturing an image"
+msgstr "Режим замера, использованный для определения экспозиции при съёмке изображения"
 
+#: gst-libs/gst/tag/tags.c:186
 msgid "capturing source"
 msgstr "источник для съёмки"
 
+#: gst-libs/gst/tag/tags.c:187
 msgid "The source or type of device used for the capture"
 msgstr "Источник или тип устройства, использованный для съёмки"
 
+#: gst-libs/gst/tag/tags.c:190
 msgid "image horizontal ppi"
 msgstr "изображение по горизонтали в ppi"
 
+#: gst-libs/gst/tag/tags.c:191
 msgid "Media (image/video) intended horizontal pixel density in ppi"
 msgstr "Горизонтальная плотность носителя (изображение/видео) в ppi"
 
+#: gst-libs/gst/tag/tags.c:194
 msgid "image vertical ppi"
 msgstr "изображение по вертикали в ppi"
 
+#: gst-libs/gst/tag/tags.c:195
 msgid "Media (image/video) intended vertical pixel density in ppi"
 msgstr "Вертикальная плотность носителя (изображение/видео) в ppi"
 
+#: gst-libs/gst/tag/tags.c:198
 msgid "ID3v2 frame"
 msgstr "кадр ID3v2"
 
+#: gst-libs/gst/tag/tags.c:198
 msgid "unparsed id3v2 tag frame"
 msgstr "неразбираемый тег кадра id3v2"
 
+#: gst-libs/gst/tag/tags.c:202
 msgid "musical-key"
 msgstr "музыкальный ключ"
 
+#: gst-libs/gst/tag/tags.c:202
 msgid "Initial key in which the sound starts"
 msgstr "Начальный ключ, с которого начинается звук"
 
+#: tools/gst-device-monitor.c:260 tools/gst-play.c:1444
 msgid "Print version information and exit"
 msgstr "Вывод информации о версии и выход из программы"
 
-msgid ""
-"Don't exit after showing the initial device list, but wait for devices to "
-"added/removed."
-msgstr ""
-"Не завершать работу после показа начального списка устройств, а ждать их "
-"добавления/удаления."
+#: tools/gst-device-monitor.c:262
+msgid "Don't exit after showing the initial device list, but wait for devices to added/removed."
+msgstr "Не завершать работу после показа начального списка устройств, а ждать их добавления/удаления."
 
+#: tools/gst-play.c:310
 #, c-format
 msgid "Volume: %.0f%%"
 msgstr "Громкость: %.0f%%"
 
+#: tools/gst-play.c:349
 msgid "Buffering..."
 msgstr "Буферизация…"
 
+#: tools/gst-play.c:370
 msgid "Clock lost, selecting a new one\n"
 msgstr "Часы потеряны, выбираем новые\n"
 
+#: tools/gst-play.c:400 tools/gst-play.c:446 tools/gst-play.c:883
+#: tools/gst-play.c:1347
 msgid "Reached end of play list."
 msgstr "Достигнут конец списка воспроизведения."
 
+#: tools/gst-play.c:613
 msgid "Paused"
 msgstr "Пауза"
 
+#: tools/gst-play.c:671
 #, c-format
 msgid "Now playing %s\n"
 msgstr "Сейчас проигрывается %s\n"
 
+#: tools/gst-play.c:734
 #, c-format
 msgid "About to finish, preparing next title: %s"
 msgstr "Почти закончено, подготавливается следующая часть: %s"
 
+#: tools/gst-play.c:979
 #, c-format
 msgid "Playback rate: %.2f"
 msgstr "Скорость воспроизведения: %.2f"
 
+#: tools/gst-play.c:983
 #, c-format
 msgid "Could not change playback rate to %.2f"
 msgstr "Не удалось изменить скорость воспроизведения на %.2f"
 
+#: tools/gst-play.c:1287
 msgid "space"
 msgstr "пробел"
 
+#: tools/gst-play.c:1287
 msgid "pause/unpause"
 msgstr "пауза/продолжение"
 
+#: tools/gst-play.c:1288
 msgid "q or ESC"
 msgstr "q или ESC"
 
+#: tools/gst-play.c:1288
 msgid "quit"
 msgstr "выход"
 
+#: tools/gst-play.c:1289
 msgid "> or n"
 msgstr "> или n"
 
+#: tools/gst-play.c:1289
 msgid "play next"
 msgstr "воспроизвести следующее"
 
+#: tools/gst-play.c:1290
 msgid "< or b"
 msgstr "< или b"
 
+#: tools/gst-play.c:1290
 msgid "play previous"
 msgstr "воспроизвести предыдущее"
 
+#: tools/gst-play.c:1291
 msgid "seek forward"
 msgstr "перемотать вперед"
 
+#: tools/gst-play.c:1292
 msgid "seek backward"
 msgstr "перемотать назад"
 
+#: tools/gst-play.c:1293
 msgid "volume up"
 msgstr "увеличить громкость"
 
+#: tools/gst-play.c:1294
 msgid "volume down"
 msgstr "уменьшить громкость"
 
+#: tools/gst-play.c:1295
 msgid "increase playback rate"
 msgstr "увеличить скорость воспроизведения"
 
+#: tools/gst-play.c:1296
 msgid "decrease playback rate"
 msgstr "уменьшить скорость воспроизведения"
 
+#: tools/gst-play.c:1297
 msgid "change playback direction"
 msgstr "изменить направление воспроизведения"
 
+#: tools/gst-play.c:1298
 msgid "enable/disable trick modes"
 msgstr "включить/выключить режим рекомендаций"
 
+#: tools/gst-play.c:1299
 msgid "change audio track"
 msgstr "изменить звуковую дорожку"
 
+#: tools/gst-play.c:1300
 msgid "change video track"
 msgstr "изменить видео дорожку"
 
+#: tools/gst-play.c:1301
 msgid "change subtitle track"
 msgstr "изменить дорожку субтитров"
 
+#: tools/gst-play.c:1302
 msgid "seek to beginning"
 msgstr "перемотать в начало"
 
+#: tools/gst-play.c:1303
 msgid "show keyboard shortcuts"
 msgstr "показать клавиатурные сокращения"
 
+#: tools/gst-play.c:1306
 msgid "Interactive mode - keyboard controls:"
 msgstr "Интерактивный режим — управление с клавиатуры:"
 
+#: tools/gst-play.c:1439
 msgid "Output status information and property notifications"
 msgstr "Выводить информацию о состоянии и уведомления о свойствах"
 
+#: tools/gst-play.c:1441
 msgid "Control playback behaviour setting playbin 'flags' property"
-msgstr ""
-"Управлять настройкой поведения воспроизведения playbin через свойство «flags»"
+msgstr "Управлять настройкой поведения воспроизведения playbin через свойство «flags»"
 
+#: tools/gst-play.c:1446
 msgid "Video sink to use (default is autovideosink)"
 msgstr "Используемый приёмник видео (по умолчанию autovideosink)"
 
+#: tools/gst-play.c:1448
 msgid "Audio sink to use (default is autoaudiosink)"
 msgstr "Используемый приёмник аудио (по умолчанию autoaudiosink)"
 
+#: tools/gst-play.c:1450
 msgid "Enable gapless playback"
 msgstr "Включить непрерывное воспроизведение"
 
+#: tools/gst-play.c:1452
 msgid "Shuffle playlist"
 msgstr "Перемешать список воспроизведения"
 
+#: tools/gst-play.c:1455
 msgid "Disable interactive control via the keyboard"
 msgstr "Отключить интерактивное управление с клавиатуры"
 
+#: tools/gst-play.c:1457
 msgid "Volume"
 msgstr "Громкость"
 
+#: tools/gst-play.c:1459
 msgid "Playlist file containing input media files"
 msgstr "Файл списка воспроизведения с входными медиа-файлами"
 
+#: tools/gst-play.c:1461
 msgid "Do not print any output (apart from errors)"
 msgstr "Не выводить ничего в поток стандартного вывода (кроме ошибок)"
 
+#: tools/gst-play.c:1463
 msgid "Use playbin3 pipeline"
 msgstr "Использовать конвейер playbin3"
 
+#: tools/gst-play.c:1464
 msgid "(default varies depending on 'USE_PLAYBIN' env variable)"
 msgstr "(значение по умолчанию зависит от переменной окружения «USE_PLAYBIN»)"
 
+#: tools/gst-play.c:1468
+msgid "Keep showing the last frame on EOS until quit or playlist change command (gapless is ignored)"
+msgstr "Показывать последний кадр при EOS до завершения работы или команды смены списка воспроизведения (непрерывность воспроизведения игнорируется)"
+
+#: tools/gst-play.c:1546
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr "Использование: %s ФАЙЛ1|URI1 [ФАЙЛ2|URI2] [ФАЙЛ3|URI3] …"
 
+#: tools/gst-play.c:1550
 msgid "You must provide at least one filename or URI to play."
 msgstr "Вы должны указать не менее одного имени файла или URI."
 
+#: tools/gst-play.c:1590
 msgid "Press 'k' to see a list of keyboard shortcuts.\n"
 msgstr "Нажмите «k» для показа списка клавиатурных комбинаций.\n"
 
@@ -701,8 +904,7 @@ msgstr "Нажмите «k» для показа списка клавиатур
 #~ msgstr "Внутренняя ошибка потока данных."
 
 #~ msgid "A %s plugin is required to play this stream, but not installed."
-#~ msgstr ""
-#~ "Для воспроизведения этого потока требуется модуль %s, но он не установлен."
+#~ msgstr "Для воспроизведения этого потока требуется модуль %s, но он не установлен."
 
 #~ msgid "Uncompressed %s YUV %s"
 #~ msgstr "Несжатый %s YUV %s"
@@ -758,20 +960,11 @@ msgstr "Нажмите «k» для показа списка клавиатур
 #~ msgid "RTSP streams cannot be played yet."
 #~ msgstr "Воспроизведение RTSP-потоков в данный момент невозможно."
 
-#~ msgid ""
-#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
-#~ "file or some other type of text file, or the media file was not "
-#~ "recognized."
-#~ msgstr ""
-#~ "Обнаружен только поток субтитров. Либо вы загружаете файл субтитров или "
-#~ "иной текстовый файл, либо медиа-файл не распознан."
-
-#~ msgid ""
-#~ "You do not have a decoder installed to handle this file. You might need "
-#~ "to install the necessary plugins."
-#~ msgstr ""
-#~ "Не установлен требуемый декодер для обработки этого файла. Возможно, вам "
-#~ "следует поставить необходимые модули."
+#~ msgid "Only a subtitle stream was detected. Either you are loading a subtitle file or some other type of text file, or the media file was not recognized."
+#~ msgstr "Обнаружен только поток субтитров. Либо вы загружаете файл субтитров или иной текстовый файл, либо медиа-файл не распознан."
+
+#~ msgid "You do not have a decoder installed to handle this file. You might need to install the necessary plugins."
+#~ msgstr "Не установлен требуемый декодер для обработки этого файла. Возможно, вам следует поставить необходимые модули."
 
 #~ msgid "This is not a media file"
 #~ msgstr "Файл не является медиа-файлом"
index cf84f5c..10d21e1 100644 (file)
@@ -7,10 +7,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base 1.15.1\n"
+"Project-Id-Version: gst-plugins-base 1.16.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:43+0000\n"
-"PO-Revision-Date: 2019-02-05 18:23+0100\n"
+"POT-Creation-Date: 2019-04-19 00:20+0100\n"
+"PO-Revision-Date: 2019-09-03 18:26+0200\n"
 "Last-Translator: Sebastian Rasmussen <sebras@gmail.com>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
 "Language: sv\n"
@@ -18,671 +18,879 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
-"X-Generator: Poedit 2.2.1\n"
+"X-Generator: Poedit 2.2.3\n"
 
+#: ext/alsa/gstalsasink.c:579
 msgid "Could not open device for playback in mono mode."
 msgstr "Kunde inte öppna enheten för uppspelning i monoläge."
 
+#: ext/alsa/gstalsasink.c:581
 msgid "Could not open device for playback in stereo mode."
 msgstr "Kunde inte öppna enheten för uppspelning i stereoläge."
 
+#: ext/alsa/gstalsasink.c:585
 #, c-format
 msgid "Could not open device for playback in %d-channel mode."
 msgstr "Kunde inte öppna enheten för uppspelning i %d-kanalsläge."
 
-msgid ""
-"Could not open audio device for playback. Device is being used by another "
-"application."
-msgstr ""
-"Kunde inte öppna ljudenheten för uppspelning. Enheten används av ett annat "
-"program."
+#: ext/alsa/gstalsasink.c:858
+msgid "Could not open audio device for playback. Device is being used by another application."
+msgstr "Kunde inte öppna ljudenheten för uppspelning. Enheten används av ett annat program."
 
+#: ext/alsa/gstalsasink.c:863
 msgid "Could not open audio device for playback."
 msgstr "Kunde inte öppna ljudenheten för uppspelning."
 
+#: ext/alsa/gstalsasink.c:1076
 msgid "Error outputting to audio device. The device has been disconnected."
 msgstr "Fel vid utmatning till ljudenhet. Enheten har kopplats loss."
 
+#: ext/alsa/gstalsasrc.c:444
 msgid "Could not open device for recording in mono mode."
 msgstr "Kunde inte öppna enheten för inspelning i monoläge."
 
+#: ext/alsa/gstalsasrc.c:446
 msgid "Could not open device for recording in stereo mode."
 msgstr "Kunde inte öppna enheten för inspelning i stereoläge."
 
+#: ext/alsa/gstalsasrc.c:450
 #, c-format
 msgid "Could not open device for recording in %d-channel mode"
 msgstr "Kunde inte öppna enheten för inspelning i %d-kanalsläge"
 
-msgid ""
-"Could not open audio device for recording. Device is being used by another "
-"application."
-msgstr ""
-"Kunde inte öppna ljudenheten för inspelning. Enheten används av ett annat "
-"program."
+#: ext/alsa/gstalsasrc.c:741
+msgid "Could not open audio device for recording. Device is being used by another application."
+msgstr "Kunde inte öppna ljudenheten för inspelning. Enheten används av ett annat program."
 
+#: ext/alsa/gstalsasrc.c:746
 msgid "Could not open audio device for recording."
 msgstr "Kunde inte öppna ljudenheten för inspelning."
 
+#: ext/alsa/gstalsasrc.c:992
 msgid "Error recording from audio device. The device has been disconnected."
 msgstr "Fel vid inspelning från ljudenhet. Enheten har kopplats loss."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:277 ext/cdparanoia/gstcdparanoiasrc.c:283
 msgid "Could not open CD device for reading."
 msgstr "Kunde inte öppna cd-enheten för läsning."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:409
 msgid "Could not seek CD."
 msgstr "Kunde inte söka på cd-skivan."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:417
 msgid "Could not read CD."
 msgstr "Kunde inte läsa cd-skivan."
 
+#: ext/gl/gstgltestsrc.c:491
 msgid "failed to draw pattern"
 msgstr "misslyckades med att rita mönster"
 
+#: ext/gl/gstgltestsrc.c:492
 msgid "A GL error occurred"
 msgstr "Ett GL-fel uppstod"
 
+#: ext/gl/gstgltestsrc.c:498
 msgid "format wasn't negotiated before get function"
 msgstr "formatet förhandlades inte fram innan hämtfunktionen"
 
+#: gst/encoding/gstencodebin.c:1636 gst/playback/gstplaybin2.c:3399
+#: gst/playback/gstplaysink.c:1522 gst/playback/gstplaysink.c:1535
+#: gst/playback/gstplaysink.c:1872 gst/playback/gstplaysink.c:1904
+#: gst/playback/gstplaysink.c:2488 gst/playback/gstplaysink.c:2537
+#: gst/playback/gstplaysink.c:2552 gst/playback/gstplaysink.c:2577
+#: gst/playback/gstplaysink.c:2609 gst/playback/gstplaysink.c:2757
+#: gst/playback/gstplaysink.c:2788 gst/playback/gstplaysink.c:3166
+#: gst/playback/gstplaysink.c:3175 gst/playback/gstplaysink.c:3184
+#: gst/playback/gstplaysink.c:3193 gst/playback/gstplaysink.c:3606
+#: gst/playback/gstplaysink.c:4526 gst/playback/gstplaysinkconvertbin.c:97
+#: gst/playback/gstplaysinkconvertbin.c:117
+#: gst/playback/gsturidecodebin.c:1472 gst/playback/gsturisourcebin.c:1597
 #, c-format
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Saknar elementet ”%s” - kontrollera din GStreamer-installation."
 
+#: gst/playback/gstdecodebin2.c:1883 gst/playback/gstparsebin.c:1553
 msgid "Could not determine type of stream"
 msgstr "Kunde inte fastställa typ av ström"
 
+#: gst/playback/gstdecodebin2.c:2861 gst/playback/gstparsebin.c:2385
 msgid "This appears to be a text file"
 msgstr "Den här ser ut att vara en textfil"
 
+#: gst/playback/gstplaybin2.c:5452
 msgid "Could not create \"uridecodebin\" element."
 msgstr "Kunde inte skapa ”uridecodebin”-element."
 
+#: gst/playback/gstplaybin3.c:4558
 msgid "Could not create \"uridecodebin3\" element."
 msgstr "Kunde inte skapa ”uridecodebin3”-element."
 
+#: gst/playback/gstplaysink.c:2003
 #, c-format
 msgid "Both autovideosink and %s elements are missing."
 msgstr "Både autovideosink- och %s-elementet saknas."
 
+#: gst/playback/gstplaysink.c:2007
 msgid "The autovideosink element is missing."
 msgstr "Elementet autovideosink saknas."
 
+#: gst/playback/gstplaysink.c:2012
 #, c-format
 msgid "Configured videosink %s is not working."
 msgstr "Konfigurerat videosink %s fungerar inte."
 
+#: gst/playback/gstplaysink.c:2016
 #, c-format
 msgid "Both autovideosink and %s elements are not working."
 msgstr "Det finns både autovideosink- och %s-element som inte fungerar."
 
+#: gst/playback/gstplaysink.c:2020
 msgid "The autovideosink element is not working."
 msgstr "Elementet autovideosink fungerar inte."
 
+#: gst/playback/gstplaysink.c:2525
 msgid "Custom text sink element is not usable."
 msgstr "Anpassat text utgångs-element är inte användbart."
 
+#: gst/playback/gstplaysink.c:2903
 msgid "No volume control found"
 msgstr "Ingen volymkontroll hittades"
 
+#: gst/playback/gstplaysink.c:2933
 #, c-format
 msgid "Both autoaudiosink and %s elements are missing."
 msgstr "Både autoaudiosink- och %s-elementet saknas."
 
+#: gst/playback/gstplaysink.c:2937
 msgid "The autoaudiosink element is missing."
 msgstr "Elementet autoaudiosink saknas."
 
+#: gst/playback/gstplaysink.c:2942
 #, c-format
 msgid "Configured audiosink %s is not working."
 msgstr "Konfigurerat audiosink %s fungerar inte."
 
+#: gst/playback/gstplaysink.c:2946
 #, c-format
 msgid "Both autoaudiosink and %s elements are not working."
 msgstr "Det finns både autoaudiosink- och %s-element som inte fungerar."
 
+#: gst/playback/gstplaysink.c:2950
 msgid "The autoaudiosink element is not working."
 msgstr "Elementet autoaudiosink fungerar inte."
 
+#: gst/playback/gstplaysink.c:3269 gst/playback/gstplaysink.c:3274
 msgid "Can't play a text file without video or visualizations."
 msgstr "Kan inte spela upp en textfil utan video eller visualiseringar."
 
+#: gst/playback/gsturidecodebin.c:921
 #, c-format
 msgid "No decoder available for type '%s'."
 msgstr "Ingen avkodare finns tillgänglig för typen ”%s”."
 
+#: gst/playback/gsturidecodebin.c:1378 gst/playback/gsturisourcebin.c:1491
 msgid "No URI specified to play from."
 msgstr "Ingen uri angiven att spela upp från."
 
+#: gst/playback/gsturidecodebin.c:1384 gst/playback/gsturisourcebin.c:1497
 #, c-format
 msgid "Invalid URI \"%s\"."
 msgstr "Ogiltig uri ”%s”."
 
+#: gst/playback/gsturidecodebin.c:1391 gst/playback/gsturisourcebin.c:1504
 msgid "This stream type cannot be played yet."
 msgstr "Den här strömtypen kan inte spelas upp än."
 
+#: gst/playback/gsturidecodebin.c:1409 gst/playback/gsturisourcebin.c:1522
 #, c-format
 msgid "No URI handler implemented for \"%s\"."
 msgstr "Ingen URI-hanterare implementerad för ”%s”."
 
+#: gst/playback/gsturidecodebin.c:2289 gst/playback/gsturisourcebin.c:2228
 msgid "Source element is invalid."
 msgstr "Källelementet är ogiltigt."
 
+#: gst/tcp/gsttcpclientsink.c:216
 #, c-format
 msgid "Error while sending data to \"%s:%d\"."
 msgstr "Fel vid sändning av data till ”%s:%d”."
 
+#: gst-libs/gst/audio/gstaudiobasesrc.c:842
 msgid "Can't record audio fast enough"
 msgstr "Kan inte spela in ljud tillräckligt snabbt"
 
+#: gst-libs/gst/audio/gstaudiocdsrc.c:1625
 msgid "This CD has no audio tracks"
 msgstr "Den här cd-skivan saknar ljudspår"
 
+#: gst-libs/gst/pbutils/descriptions.c:89
 msgid "ID3 tag"
 msgstr "ID3-tagg"
 
+#: gst-libs/gst/pbutils/descriptions.c:90
+#: gst-libs/gst/pbutils/descriptions.c:91
 msgid "APE tag"
 msgstr "APE-tagg"
 
+#: gst-libs/gst/pbutils/descriptions.c:92
 msgid "ICY internet radio"
 msgstr "ICY internetradio"
 
+#: gst-libs/gst/pbutils/descriptions.c:127
 msgid "Apple Lossless Audio (ALAC)"
 msgstr "Apple Lossless Audio (ALAC)"
 
+#: gst-libs/gst/pbutils/descriptions.c:143
 msgid "Free Lossless Audio Codec (FLAC)"
 msgstr "Free Lossless Audio Codec (FLAC)"
 
+#: gst-libs/gst/pbutils/descriptions.c:173
+#: gst-libs/gst/pbutils/descriptions.c:174
 msgid "Lossless True Audio (TTA)"
 msgstr "Lossless True Audio (TTA)"
 
+#: gst-libs/gst/pbutils/descriptions.c:182
 msgid "Windows Media Speech"
 msgstr "Windows Media Speech"
 
+#: gst-libs/gst/pbutils/descriptions.c:199
 msgid "CYUV Lossless"
 msgstr "Förlustfri CYUV"
 
+#: gst-libs/gst/pbutils/descriptions.c:203
 msgid "FFMpeg v1"
 msgstr "FFMpeg v1"
 
+#: gst-libs/gst/pbutils/descriptions.c:217
 msgid "Lossless MSZH"
 msgstr "Förlustfri MSZH"
 
+#: gst-libs/gst/pbutils/descriptions.c:228
 msgid "Run-length encoding"
 msgstr "Skurlängdskodning"
 
+#: gst-libs/gst/pbutils/descriptions.c:274
 msgid "Timed Text"
 msgstr "Textning"
 
+#: gst-libs/gst/pbutils/descriptions.c:278
 msgid "Subtitle"
 msgstr "Undertext"
 
+#: gst-libs/gst/pbutils/descriptions.c:279
 msgid "MPL2 subtitle format"
 msgstr "Undertextformatet MPL2"
 
+#: gst-libs/gst/pbutils/descriptions.c:280
 msgid "DKS subtitle format"
 msgstr "Undertextformatet DKS"
 
+#: gst-libs/gst/pbutils/descriptions.c:281
 msgid "QTtext subtitle format"
 msgstr "Undertextformatet QTtext"
 
+#: gst-libs/gst/pbutils/descriptions.c:282
 msgid "Sami subtitle format"
 msgstr "Undertextformatet Sami"
 
+#: gst-libs/gst/pbutils/descriptions.c:283
 msgid "TMPlayer subtitle format"
 msgstr "Undertextformatet TMPlayer"
 
+#: gst-libs/gst/pbutils/descriptions.c:287
 msgid "CEA 608 Closed Caption"
 msgstr "CEA 608-undertexter"
 
+#: gst-libs/gst/pbutils/descriptions.c:288
 msgid "CEA 708 Closed Caption"
 msgstr "CEA 708-undertexter"
 
+#: gst-libs/gst/pbutils/descriptions.c:289
 msgid "Kate subtitle format"
 msgstr "Undertextformatet Kate"
 
+#: gst-libs/gst/pbutils/descriptions.c:290
 msgid "WebVTT subtitle format"
 msgstr "WebVTT-undertextformat"
 
+#: gst-libs/gst/pbutils/descriptions.c:455
+#: gst-libs/gst/pbutils/descriptions.c:458
+#: gst-libs/gst/pbutils/descriptions.c:508
 msgid "Uncompressed video"
 msgstr "Okomprimerad video"
 
+#: gst-libs/gst/pbutils/descriptions.c:463
 msgid "Uncompressed gray"
 msgstr "Okomprimerad gråskala"
 
+#: gst-libs/gst/pbutils/descriptions.c:486
 #, c-format
 msgid "Uncompressed packed YUV %s"
 msgstr "Okomprimerad paketerad YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:488
 #, c-format
 msgid "Uncompressed semi-planar YUV %s"
 msgstr "Okomprimerad semi-planär YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:490
 #, c-format
 msgid "Uncompressed planar YUV %s"
 msgstr "Okomprimerad planär YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:501
 #, c-format
 msgid "Uncompressed palettized %d-bit %s"
 msgstr "Okomprimerad palettiserad %d-bitars %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:504
 #, c-format
 msgid "Uncompressed %d-bit %s"
 msgstr "Okomprimerad %d-bitars %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:586
 #, c-format
 msgid "DivX MPEG-4 Version %d"
 msgstr "DivX MPEG-4 version %d"
 
+#: gst-libs/gst/pbutils/descriptions.c:834
 msgid "Uncompressed audio"
 msgstr "Okomprimerad audio"
 
+#: gst-libs/gst/pbutils/descriptions.c:840
 #, c-format
 msgid "Raw %d-bit %s audio"
 msgstr "Rått %d-bitars %s-ljud"
 
+#: gst-libs/gst/pbutils/descriptions.c:942
 msgid "Audio CD source"
 msgstr "Ljud-cd-källa"
 
+#: gst-libs/gst/pbutils/descriptions.c:945
 msgid "DVD source"
 msgstr "Dvd-källa"
 
+#: gst-libs/gst/pbutils/descriptions.c:948
 msgid "Real Time Streaming Protocol (RTSP) source"
 msgstr "Real Time Streaming Protocol-källa (RTSP)"
 
+#: gst-libs/gst/pbutils/descriptions.c:952
 msgid "Microsoft Media Server (MMS) protocol source"
 msgstr "Microsoft Media Server-protokollkälla (MMS)"
 
+#: gst-libs/gst/pbutils/descriptions.c:960
 #, c-format
 msgid "%s protocol source"
 msgstr "%s-protokollkälla"
 
+#: gst-libs/gst/pbutils/descriptions.c:1034
 #, c-format
 msgid "%s video RTP depayloader"
 msgstr "%s RTP-uppackare (video)"
 
+#: gst-libs/gst/pbutils/descriptions.c:1036
 #, c-format
 msgid "%s audio RTP depayloader"
 msgstr "%s RTP-uppackare (ljud)"
 
+#: gst-libs/gst/pbutils/descriptions.c:1038
 #, c-format
 msgid "%s RTP depayloader"
 msgstr "%s RTP-uppackare"
 
+#: gst-libs/gst/pbutils/descriptions.c:1045
 #, c-format
 msgid "%s demuxer"
 msgstr "%s-avmultiplexor"
 
+#: gst-libs/gst/pbutils/descriptions.c:1047
 #, c-format
 msgid "%s decoder"
 msgstr "%s-avkodare"
 
+#: gst-libs/gst/pbutils/descriptions.c:1086
 #, c-format
 msgid "%s video RTP payloader"
 msgstr "%s RTP-packare (video)"
 
+#: gst-libs/gst/pbutils/descriptions.c:1088
 #, c-format
 msgid "%s audio RTP payloader"
 msgstr "%s RTP-packare (ljud)"
 
+#: gst-libs/gst/pbutils/descriptions.c:1090
 #, c-format
 msgid "%s RTP payloader"
 msgstr "%s RTP-packare"
 
+#: gst-libs/gst/pbutils/descriptions.c:1097
 #, c-format
 msgid "%s muxer"
 msgstr "%s-multiplexor"
 
+#: gst-libs/gst/pbutils/descriptions.c:1099
 #, c-format
 msgid "%s encoder"
 msgstr "%s-kodare"
 
+#: gst-libs/gst/pbutils/descriptions.c:1133
 #, c-format
 msgid "GStreamer element %s"
 msgstr "GStreamer-elementet %s"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:558
 msgid "Unknown source element"
 msgstr "Okänt käll-element"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:561
 msgid "Unknown sink element"
 msgstr "Okänt utgångs-element"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:564
 msgid "Unknown element"
 msgstr "Okänt element"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:567
 msgid "Unknown decoder element"
 msgstr "Okänt avkodarelement"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:570
 msgid "Unknown encoder element"
 msgstr "Okänt kodarelement"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:575
 msgid "Plugin or element of unknown type"
 msgstr "Insticksmodul eller element av okänd typ"
 
+#: gst-libs/gst/tag/gsttagdemux.c:1243
 msgid "Failed to read tag: not enough data"
 msgstr "Misslyckades med att läsa tagg: inte tillräckligt mycket data"
 
+#: gst-libs/gst/tag/tags.c:77
 msgid "track ID"
 msgstr "spår-ID"
 
+#: gst-libs/gst/tag/tags.c:77
 msgid "MusicBrainz track ID"
 msgstr "MusicBrainz spår-ID"
 
+#: gst-libs/gst/tag/tags.c:79
 msgid "artist ID"
 msgstr "artist-ID"
 
+#: gst-libs/gst/tag/tags.c:79
 msgid "MusicBrainz artist ID"
 msgstr "MusicBrainz artist-ID"
 
+#: gst-libs/gst/tag/tags.c:81
 msgid "album ID"
 msgstr "album-ID"
 
+#: gst-libs/gst/tag/tags.c:81
 msgid "MusicBrainz album ID"
 msgstr "MusicBrainz album-ID"
 
+#: gst-libs/gst/tag/tags.c:84
 msgid "album artist ID"
 msgstr "albumartist-ID"
 
+#: gst-libs/gst/tag/tags.c:84
 msgid "MusicBrainz album artist ID"
 msgstr "MusicBrainz albumartist-ID"
 
+#: gst-libs/gst/tag/tags.c:86
 msgid "track TRM ID"
 msgstr "spår TRM-ID"
 
+#: gst-libs/gst/tag/tags.c:86
 msgid "MusicBrainz TRM ID"
 msgstr "MusicBrainz TRM-ID"
 
+#: gst-libs/gst/tag/tags.c:108
 msgid "capturing shutter speed"
 msgstr "slutarhastighet"
 
+#: gst-libs/gst/tag/tags.c:109
 msgid "Shutter speed used when capturing an image, in seconds"
 msgstr "Slutarhastighet i sekunder som används när bild infångas"
 
+#: gst-libs/gst/tag/tags.c:112
 msgid "capturing focal ratio"
 msgstr "bländarvärde"
 
+#: gst-libs/gst/tag/tags.c:113
 msgid "Focal ratio (f-number) used when capturing the image"
 msgstr "Bländarvärde (f-tal) som används när bild infångas"
 
+#: gst-libs/gst/tag/tags.c:116
 msgid "capturing focal length"
 msgstr "brännvidd"
 
+#: gst-libs/gst/tag/tags.c:117
 msgid "Focal length of the lens used capturing the image, in mm"
 msgstr "Brännvidd för linsen i mm när bild infångas"
 
+#: gst-libs/gst/tag/tags.c:121
 msgid "capturing 35 mm equivalent focal length"
 msgstr "fångar 35mm-ekvivalent brännvidd"
 
-msgid ""
-"35 mm equivalent focal length of the lens used capturing the image, in mm"
-msgstr ""
-"35 mm-ekvivalent brännvidd för linsen som används när bild infångas, i mm"
+#: gst-libs/gst/tag/tags.c:122
+msgid "35 mm equivalent focal length of the lens used capturing the image, in mm"
+msgstr "35 mm-ekvivalent brännvidd för linsen som används när bild infångas, i mm"
 
+#: gst-libs/gst/tag/tags.c:126
 msgid "capturing digital zoom ratio"
 msgstr "digitalt zoom-förhållande"
 
+#: gst-libs/gst/tag/tags.c:127
 msgid "Digital zoom ratio used when capturing an image"
 msgstr "Digitalt zoom-förhållande som används när bild infångas"
 
+#: gst-libs/gst/tag/tags.c:130
 msgid "capturing iso speed"
 msgstr "ISO-tal"
 
+#: gst-libs/gst/tag/tags.c:131
 msgid "The ISO speed used when capturing an image"
 msgstr "ISO-tal som används när bild infångas"
 
+#: gst-libs/gst/tag/tags.c:134
 msgid "capturing exposure program"
 msgstr "exponeringsprogram"
 
+#: gst-libs/gst/tag/tags.c:135
 msgid "The exposure program used when capturing an image"
 msgstr "Det exponeringsprogram som används när bild infångas"
 
+#: gst-libs/gst/tag/tags.c:138
 msgid "capturing exposure mode"
 msgstr "exponeringsläge"
 
+#: gst-libs/gst/tag/tags.c:139
 msgid "The exposure mode used when capturing an image"
 msgstr "Exponeringsläge som används när bild infångas"
 
+#: gst-libs/gst/tag/tags.c:142
 msgid "capturing exposure compensation"
 msgstr "exponeringskompensation"
 
+#: gst-libs/gst/tag/tags.c:143
 msgid "The exposure compensation used when capturing an image"
 msgstr "Exponeringskompensationen som används när bild infångas"
 
+#: gst-libs/gst/tag/tags.c:146
 msgid "capturing scene capture type"
 msgstr "scenläge"
 
+#: gst-libs/gst/tag/tags.c:147
 msgid "The scene capture mode used when capturing an image"
 msgstr "Scenläge som används när bild infångas"
 
+#: gst-libs/gst/tag/tags.c:150
 msgid "capturing gain adjustment"
 msgstr "förstärkningsjustering"
 
+#: gst-libs/gst/tag/tags.c:151
 msgid "The overall gain adjustment applied on an image"
 msgstr "Förstärkningsjustering som appliceras på en bild"
 
+#: gst-libs/gst/tag/tags.c:154
 msgid "capturing white balance"
 msgstr "vitbalans"
 
+#: gst-libs/gst/tag/tags.c:155
 msgid "The white balance mode set when capturing an image"
 msgstr "Vitbalansläge som sätts när bild infångas"
 
+#: gst-libs/gst/tag/tags.c:158
 msgid "capturing contrast"
 msgstr "kontrast"
 
+#: gst-libs/gst/tag/tags.c:159
 msgid "The direction of contrast processing applied when capturing an image"
 msgstr "Riktning för kontrastbehandling som appliceras när bild infångas"
 
+#: gst-libs/gst/tag/tags.c:163
 msgid "capturing saturation"
 msgstr "mättnad"
 
+#: gst-libs/gst/tag/tags.c:164
 msgid "The direction of saturation processing applied when capturing an image"
 msgstr "Riktning för mättnadsbehandling som appliceras när bild infångas"
 
+#: gst-libs/gst/tag/tags.c:168
 msgid "capturing sharpness"
 msgstr "skärpning"
 
+#: gst-libs/gst/tag/tags.c:169
 msgid "The direction of sharpness processing applied when capturing an image"
 msgstr "Riktningen på skärpningsbehandling som appliceras när bild infångas"
 
+#: gst-libs/gst/tag/tags.c:173
 msgid "capturing flash fired"
 msgstr "blixtavfyrning"
 
+#: gst-libs/gst/tag/tags.c:174
 msgid "If the flash fired while capturing an image"
 msgstr "Om blixten avfyrats när bild infångas"
 
+#: gst-libs/gst/tag/tags.c:177
 msgid "capturing flash mode"
 msgstr "blixtläge"
 
+#: gst-libs/gst/tag/tags.c:178
 msgid "The selected flash mode while capturing an image"
 msgstr "Det valda blixtläget när bild infångas"
 
+#: gst-libs/gst/tag/tags.c:181
 msgid "capturing metering mode"
 msgstr "ljusmätarläge"
 
-msgid ""
-"The metering mode used while determining exposure for capturing an image"
+#: gst-libs/gst/tag/tags.c:182
+msgid "The metering mode used while determining exposure for capturing an image"
 msgstr "Ljusmätarläge som används då exponering bestäms när bild infångas"
 
+#: gst-libs/gst/tag/tags.c:186
 msgid "capturing source"
 msgstr "infångstkälla"
 
+#: gst-libs/gst/tag/tags.c:187
 msgid "The source or type of device used for the capture"
 msgstr "Källa eller typ av enhet som används för infångsten"
 
+#: gst-libs/gst/tag/tags.c:190
 msgid "image horizontal ppi"
 msgstr "bild horisontell ppi"
 
+#: gst-libs/gst/tag/tags.c:191
 msgid "Media (image/video) intended horizontal pixel density in ppi"
 msgstr "Media (bild/video) avsedd horisontell pixeldensitet i ppi"
 
+#: gst-libs/gst/tag/tags.c:194
 msgid "image vertical ppi"
 msgstr "bild vertikal ppi"
 
+#: gst-libs/gst/tag/tags.c:195
 msgid "Media (image/video) intended vertical pixel density in ppi"
 msgstr "Media (bild/video) avsedd vertikal pixeldensitet i ppi"
 
+#: gst-libs/gst/tag/tags.c:198
 msgid "ID3v2 frame"
 msgstr "ID3v2-ram"
 
+#: gst-libs/gst/tag/tags.c:198
 msgid "unparsed id3v2 tag frame"
 msgstr "otolkad id3v2-tagg-ram"
 
+#: gst-libs/gst/tag/tags.c:202
 msgid "musical-key"
 msgstr "musikalisk tonart"
 
+#: gst-libs/gst/tag/tags.c:202
 msgid "Initial key in which the sound starts"
 msgstr "Inledande tonart med vilken ljudet börjar"
 
+#: tools/gst-device-monitor.c:260 tools/gst-play.c:1444
 msgid "Print version information and exit"
 msgstr "Skriv ut versionsinformation och avsluta"
 
-msgid ""
-"Don't exit after showing the initial device list, but wait for devices to "
-"added/removed."
-msgstr ""
-"Avsluta inte efter att den inledande enhetslistan visats, utan vänta på att "
-"enheter läggs till/tas bort."
+#: tools/gst-device-monitor.c:262
+msgid "Don't exit after showing the initial device list, but wait for devices to added/removed."
+msgstr "Avsluta inte efter att den inledande enhetslistan visats, utan vänta på att enheter läggs till/tas bort."
 
+#: tools/gst-play.c:310
 #, c-format
 msgid "Volume: %.0f%%"
 msgstr "Volym: %.0f%%"
 
+#: tools/gst-play.c:349
 msgid "Buffering..."
 msgstr "Buffrar..."
 
+#: tools/gst-play.c:370
 msgid "Clock lost, selecting a new one\n"
 msgstr "Klocka förlorad, väljer en ny\n"
 
+#: tools/gst-play.c:400 tools/gst-play.c:446 tools/gst-play.c:883
+#: tools/gst-play.c:1347
 msgid "Reached end of play list."
 msgstr "Nådde slutet av spellistan."
 
+#: tools/gst-play.c:613
 msgid "Paused"
 msgstr "Pausad"
 
+#: tools/gst-play.c:671
 #, c-format
 msgid "Now playing %s\n"
 msgstr "Spelar nu %s\n"
 
+#: tools/gst-play.c:734
 #, c-format
 msgid "About to finish, preparing next title: %s"
 msgstr "Slutar snart, förbereder nästa titel: %s"
 
+#: tools/gst-play.c:979
 #, c-format
 msgid "Playback rate: %.2f"
 msgstr "Uppspelningshastighet: %.2f"
 
+#: tools/gst-play.c:983
 #, c-format
 msgid "Could not change playback rate to %.2f"
 msgstr "Kunde inte ändra uppspelningshastigheten till %.2f"
 
+#: tools/gst-play.c:1287
 msgid "space"
 msgstr "blanksteg"
 
+#: tools/gst-play.c:1287
 msgid "pause/unpause"
 msgstr "pausa/fortsätt"
 
+#: tools/gst-play.c:1288
 msgid "q or ESC"
 msgstr "q eller ESC"
 
+#: tools/gst-play.c:1288
 msgid "quit"
 msgstr "avsluta"
 
+#: tools/gst-play.c:1289
 msgid "> or n"
 msgstr "> eller n"
 
+#: tools/gst-play.c:1289
 msgid "play next"
 msgstr "spela nästa"
 
+#: tools/gst-play.c:1290
 msgid "< or b"
 msgstr "< eller b"
 
+#: tools/gst-play.c:1290
 msgid "play previous"
 msgstr "spela föregående"
 
+#: tools/gst-play.c:1291
 msgid "seek forward"
 msgstr "sök framåt"
 
+#: tools/gst-play.c:1292
 msgid "seek backward"
 msgstr "sök bakåt"
 
+#: tools/gst-play.c:1293
 msgid "volume up"
 msgstr "höj volym"
 
+#: tools/gst-play.c:1294
 msgid "volume down"
 msgstr "sänk volym"
 
+#: tools/gst-play.c:1295
 msgid "increase playback rate"
 msgstr "öka uppspelningshastighet"
 
+#: tools/gst-play.c:1296
 msgid "decrease playback rate"
 msgstr "sänk uppspelningshastighet"
 
+#: tools/gst-play.c:1297
 msgid "change playback direction"
 msgstr "ändra uppspelningsriktning"
 
+#: tools/gst-play.c:1298
 msgid "enable/disable trick modes"
 msgstr "aktivera/inaktivera tricklägen"
 
+#: tools/gst-play.c:1299
 msgid "change audio track"
 msgstr "byt ljudspår"
 
+#: tools/gst-play.c:1300
 msgid "change video track"
 msgstr "byt videospår"
 
+#: tools/gst-play.c:1301
 msgid "change subtitle track"
 msgstr "byt undertextspår"
 
+#: tools/gst-play.c:1302
 msgid "seek to beginning"
 msgstr "sök till början"
 
+#: tools/gst-play.c:1303
 msgid "show keyboard shortcuts"
 msgstr "visa tangentbordsgenvägar"
 
+#: tools/gst-play.c:1306
 msgid "Interactive mode - keyboard controls:"
 msgstr "Interaktivt läge: tangentbordsstyrning:"
 
+#: tools/gst-play.c:1439
 msgid "Output status information and property notifications"
 msgstr "Mata ut statusinformation och egenskapsaviseringar"
 
+#: tools/gst-play.c:1441
 msgid "Control playback behaviour setting playbin 'flags' property"
-msgstr ""
-"Styr uppspelningsbeteende genom att ställa in playbins egenskap ”flags”"
+msgstr "Styr uppspelningsbeteende genom att ställa in playbins egenskap ”flags”"
 
+#: tools/gst-play.c:1446
 msgid "Video sink to use (default is autovideosink)"
 msgstr "Videoutgång som ska användas (standard är autovideosink)"
 
+#: tools/gst-play.c:1448
 msgid "Audio sink to use (default is autoaudiosink)"
 msgstr "Ljudutgång som ska användas (standard är autoaudiosink)"
 
+#: tools/gst-play.c:1450
 msgid "Enable gapless playback"
 msgstr "Aktivera mellanrumslös uppspelning"
 
+#: tools/gst-play.c:1452
 msgid "Shuffle playlist"
 msgstr "Blanda spellista"
 
+#: tools/gst-play.c:1455
 msgid "Disable interactive control via the keyboard"
 msgstr "Inaktivera interaktiv styrning via tangentbordet"
 
+#: tools/gst-play.c:1457
 msgid "Volume"
 msgstr "Volym"
 
+#: tools/gst-play.c:1459
 msgid "Playlist file containing input media files"
 msgstr "Fil med spellista innehållandes inkommande mediafiler"
 
+#: tools/gst-play.c:1461
 msgid "Do not print any output (apart from errors)"
 msgstr "Mata inte ut någonting (bortsett från fel)"
 
+#: tools/gst-play.c:1463
 msgid "Use playbin3 pipeline"
 msgstr "Använd playbin3-rörledning"
 
+#: tools/gst-play.c:1464
 msgid "(default varies depending on 'USE_PLAYBIN' env variable)"
 msgstr "(standardvärdet beror på miljövariabeln ”USE_PLAYBIN”)"
 
+#: tools/gst-play.c:1468
+msgid "Keep showing the last frame on EOS until quit or playlist change command (gapless is ignored)"
+msgstr "Fortsätt visa den sista ramen vid EOS tills avslutning eller ändringskommando för spellista (mellanrumslös hoppas över)"
+
+#: tools/gst-play.c:1546
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr "Användning: %s FIL1|URI1 [FIL2|URI2] [FIL3|URI3] ..."
 
+#: tools/gst-play.c:1550
 msgid "You must provide at least one filename or URI to play."
 msgstr "Du måste ange åtminstone ett filnamn eller en URI att spela."
 
+#: tools/gst-play.c:1590
 msgid "Press 'k' to see a list of keyboard shortcuts.\n"
 msgstr "Tryck på 'k' för att se en lista över tangentbordsgenvägar.\n"
 
@@ -696,6 +904,4 @@ msgstr "Tryck på 'k' för att se en lista över tangentbordsgenvägar.\n"
 #~ msgstr "Internt dataströmningsfel."
 
 #~ msgid "A %s plugin is required to play this stream, but not installed."
-#~ msgstr ""
-#~ "En %s-insticksmodul krävs för att spela upp den här strömmen men är inte "
-#~ "installerad."
+#~ msgstr "En %s-insticksmodul krävs för att spela upp den här strömmen men är inte installerad."
index a657ef0..aacc16a 100644 (file)
@@ -1,4 +1,4 @@
-# translation of gst-plugins-base-1.10.0.po to Turkish
+# translation of gst-plugins-base-1.16.0.po to Turkish
 # This file is put in the public domain.
 # This file is distributed under the same license as the gst-plugins-base package.
 # Server Acim <serveracim@gmail.com>, 2010.
@@ -7,10 +7,10 @@
 # Mehmet Kececi <mkececi@mehmetkececi.com>, 2017, 2019.
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base 1.15.1\n"
+"Project-Id-Version: gst-plugins-base 1.16.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:43+0000\n"
-"PO-Revision-Date: 2019-01-25 12:06+0300\n"
+"POT-Creation-Date: 2019-04-19 00:20+0100\n"
+"PO-Revision-Date: 2019-09-03 19:42+0300\n"
 "Last-Translator: Mehmet Kececi <mkececi@mehmetkececi.com>\n"
 "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
 "Language: tr\n"
@@ -22,668 +22,877 @@ msgstr ""
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "X-Project-Style: gnome\n"
 
+#: ext/alsa/gstalsasink.c:579
 msgid "Could not open device for playback in mono mode."
 msgstr "Mono kipte çalmak için aygıt açılamıyor."
 
+#: ext/alsa/gstalsasink.c:581
 msgid "Could not open device for playback in stereo mode."
 msgstr "Stereo kipte çalmak için aygıt açılamıyor."
 
+#: ext/alsa/gstalsasink.c:585
 #, c-format
 msgid "Could not open device for playback in %d-channel mode."
 msgstr "Aygıtı %d- kanal kipinde çalmak için açamıyor."
 
-msgid ""
-"Could not open audio device for playback. Device is being used by another "
-"application."
-msgstr ""
-"Aygıtı çalmak için için açamıyor. Aygıt başka bir uygulama tarafından "
-"kullanılmakta."
+#: ext/alsa/gstalsasink.c:858
+msgid "Could not open audio device for playback. Device is being used by another application."
+msgstr "Aygıtı çalmak için için açamıyor. Aygıt başka bir uygulama tarafından kullanılmakta."
 
+#: ext/alsa/gstalsasink.c:863
 msgid "Could not open audio device for playback."
 msgstr "Aygıtı çalma için açamıyor."
 
+#: ext/alsa/gstalsasink.c:1076
 msgid "Error outputting to audio device. The device has been disconnected."
 msgstr "Ses aygıtına çıktı gönderilirken hata. Aygıt bağlantısı kesildi."
 
+#: ext/alsa/gstalsasrc.c:444
 msgid "Could not open device for recording in mono mode."
 msgstr "Mono kipte kaydetmek için aygıtı açamıyor."
 
+#: ext/alsa/gstalsasrc.c:446
 msgid "Could not open device for recording in stereo mode."
 msgstr "Stereo kipte kaydetmek için aygıtı açamıyor."
 
+#: ext/alsa/gstalsasrc.c:450
 #, c-format
 msgid "Could not open device for recording in %d-channel mode"
 msgstr "Aygıtı %d-kanal kipinde kaydetmek için açamıyor"
 
-msgid ""
-"Could not open audio device for recording. Device is being used by another "
-"application."
-msgstr ""
-"Aygıtı kaydetmek için açamıyor. Aygıt başka bir uygulama tarafından "
-"kullanılmakta."
+#: ext/alsa/gstalsasrc.c:741
+msgid "Could not open audio device for recording. Device is being used by another application."
+msgstr "Aygıtı kaydetmek için açamıyor. Aygıt başka bir uygulama tarafından kullanılmakta."
 
+#: ext/alsa/gstalsasrc.c:746
 msgid "Could not open audio device for recording."
 msgstr "Kayıt için ses aygıtı açılamıyor."
 
+#: ext/alsa/gstalsasrc.c:992
 msgid "Error recording from audio device. The device has been disconnected."
 msgstr "Ses aygıtından kayıt sırasında hata. Aygıt bağlantısı kesildi."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:277 ext/cdparanoia/gstcdparanoiasrc.c:283
 msgid "Could not open CD device for reading."
 msgstr "Okumak için CD aygıtı açılamıyor."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:409
 msgid "Could not seek CD."
 msgstr "CD bulunamıyor."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:417
 msgid "Could not read CD."
 msgstr "CD okunamıyor."
 
+#: ext/gl/gstgltestsrc.c:491
 msgid "failed to draw pattern"
 msgstr "desen çizilemedi"
 
+#: ext/gl/gstgltestsrc.c:492
 msgid "A GL error occurred"
 msgstr "Bir GL hatası oluştu"
 
+#: ext/gl/gstgltestsrc.c:498
 msgid "format wasn't negotiated before get function"
 msgstr "İşlev alınmadan önce biçim anlaşması yapılmadı"
 
+#: gst/encoding/gstencodebin.c:1636 gst/playback/gstplaybin2.c:3399
+#: gst/playback/gstplaysink.c:1522 gst/playback/gstplaysink.c:1535
+#: gst/playback/gstplaysink.c:1872 gst/playback/gstplaysink.c:1904
+#: gst/playback/gstplaysink.c:2488 gst/playback/gstplaysink.c:2537
+#: gst/playback/gstplaysink.c:2552 gst/playback/gstplaysink.c:2577
+#: gst/playback/gstplaysink.c:2609 gst/playback/gstplaysink.c:2757
+#: gst/playback/gstplaysink.c:2788 gst/playback/gstplaysink.c:3166
+#: gst/playback/gstplaysink.c:3175 gst/playback/gstplaysink.c:3184
+#: gst/playback/gstplaysink.c:3193 gst/playback/gstplaysink.c:3606
+#: gst/playback/gstplaysink.c:4526 gst/playback/gstplaysinkconvertbin.c:97
+#: gst/playback/gstplaysinkconvertbin.c:117
+#: gst/playback/gsturidecodebin.c:1472 gst/playback/gsturisourcebin.c:1597
 #, c-format
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "Kayıp öge '%s' - GStreamer kurulumunu denetleyin."
 
+#: gst/playback/gstdecodebin2.c:1883 gst/playback/gstparsebin.c:1553
 msgid "Could not determine type of stream"
 msgstr "Akışın türü belirlenemiyor"
 
+#: gst/playback/gstdecodebin2.c:2861 gst/playback/gstparsebin.c:2385
 msgid "This appears to be a text file"
 msgstr "Bu bir metin dosyasına benziyor"
 
+#: gst/playback/gstplaybin2.c:5452
 msgid "Could not create \"uridecodebin\" element."
 msgstr "\"uridecodebin\" ögesi oluşturulamıyor."
 
+#: gst/playback/gstplaybin3.c:4558
 msgid "Could not create \"uridecodebin3\" element."
 msgstr "\"uridecodebin3\" ögesi oluşturulamıyor."
 
+#: gst/playback/gstplaysink.c:2003
 #, c-format
 msgid "Both autovideosink and %s elements are missing."
 msgstr "autovideosink ve %s ögelerininin ikisi de kayıp."
 
+#: gst/playback/gstplaysink.c:2007
 msgid "The autovideosink element is missing."
 msgstr "autovideosink ögesi kayıp."
 
+#: gst/playback/gstplaysink.c:2012
 #, c-format
 msgid "Configured videosink %s is not working."
 msgstr "Yapılandırılmış olan videosink ögesi %s çalışmıyor."
 
+#: gst/playback/gstplaysink.c:2016
 #, c-format
 msgid "Both autovideosink and %s elements are not working."
 msgstr "autovideosink ve %s ögelerinin ikisi de çalışmıyor."
 
+#: gst/playback/gstplaysink.c:2020
 msgid "The autovideosink element is not working."
 msgstr "autovideosink ögesi çalışmıyor."
 
+#: gst/playback/gstplaysink.c:2525
 msgid "Custom text sink element is not usable."
 msgstr "Özel metin gömme ögesi kullanılamaz durumda."
 
+#: gst/playback/gstplaysink.c:2903
 msgid "No volume control found"
 msgstr "Ses denetimi bulunamadı"
 
+#: gst/playback/gstplaysink.c:2933
 #, c-format
 msgid "Both autoaudiosink and %s elements are missing."
 msgstr "autoaudiosink ve %s ögelerinin ikisi de kayıp."
 
+#: gst/playback/gstplaysink.c:2937
 msgid "The autoaudiosink element is missing."
 msgstr "autoaudiosink ögesi kayıp."
 
+#: gst/playback/gstplaysink.c:2942
 #, c-format
 msgid "Configured audiosink %s is not working."
 msgstr "Yapılandırılmış olan audiosink ögesi %s çalışmıyor."
 
+#: gst/playback/gstplaysink.c:2946
 #, c-format
 msgid "Both autoaudiosink and %s elements are not working."
 msgstr "autoaudiosink ve %s ögelerinin ikisi de çalışmıyor."
 
+#: gst/playback/gstplaysink.c:2950
 msgid "The autoaudiosink element is not working."
 msgstr "autoaudiosink ögesi çalışmıyor."
 
+#: gst/playback/gstplaysink.c:3269 gst/playback/gstplaysink.c:3274
 msgid "Can't play a text file without video or visualizations."
 msgstr "Video veya görsellik olmadan metin dosyasını oynatamaz."
 
+#: gst/playback/gsturidecodebin.c:921
 #, c-format
 msgid "No decoder available for type '%s'."
 msgstr "'%s' türü için kod çözücü bulunamadı."
 
+#: gst/playback/gsturidecodebin.c:1378 gst/playback/gsturisourcebin.c:1491
 msgid "No URI specified to play from."
 msgstr "Çalmak için bir ağ adresi belirtilmedi."
 
+#: gst/playback/gsturidecodebin.c:1384 gst/playback/gsturisourcebin.c:1497
 #, c-format
 msgid "Invalid URI \"%s\"."
 msgstr "Geçersiz URI \"%s\"."
 
+#: gst/playback/gsturidecodebin.c:1391 gst/playback/gsturisourcebin.c:1504
 msgid "This stream type cannot be played yet."
 msgstr "Bu akış türü henüz çalınamıyor."
 
+#: gst/playback/gsturidecodebin.c:1409 gst/playback/gsturisourcebin.c:1522
 #, c-format
 msgid "No URI handler implemented for \"%s\"."
 msgstr "\"%s\" için hiçbir URI işleyicisi geliştirilmemiş."
 
+#: gst/playback/gsturidecodebin.c:2289 gst/playback/gsturisourcebin.c:2228
 msgid "Source element is invalid."
 msgstr "Kaynak ögesi geçersiz."
 
+#: gst/tcp/gsttcpclientsink.c:216
 #, c-format
 msgid "Error while sending data to \"%s:%d\"."
 msgstr "Dosyayı şuraya gönderirken hata \"%s:%d\"."
 
+#: gst-libs/gst/audio/gstaudiobasesrc.c:842
 msgid "Can't record audio fast enough"
 msgstr "Sesi yeterince hızlı kaydedemiyor"
 
+#: gst-libs/gst/audio/gstaudiocdsrc.c:1625
 msgid "This CD has no audio tracks"
 msgstr "Bu CD hiç ses izi içermiyor"
 
+#: gst-libs/gst/pbutils/descriptions.c:89
 msgid "ID3 tag"
 msgstr "ID3 etiketi"
 
+#: gst-libs/gst/pbutils/descriptions.c:90
+#: gst-libs/gst/pbutils/descriptions.c:91
 msgid "APE tag"
 msgstr "APE etiketi"
 
+#: gst-libs/gst/pbutils/descriptions.c:92
 msgid "ICY internet radio"
 msgstr "ICY internet radyosu"
 
+#: gst-libs/gst/pbutils/descriptions.c:127
 msgid "Apple Lossless Audio (ALAC)"
 msgstr "Apple Lossless Audio (ALAC)"
 
+#: gst-libs/gst/pbutils/descriptions.c:143
 msgid "Free Lossless Audio Codec (FLAC)"
 msgstr "Free Lossless Audio Codec (FLAC)"
 
+#: gst-libs/gst/pbutils/descriptions.c:173
+#: gst-libs/gst/pbutils/descriptions.c:174
 msgid "Lossless True Audio (TTA)"
 msgstr "Lossless True Audio (TTA)"
 
+#: gst-libs/gst/pbutils/descriptions.c:182
 msgid "Windows Media Speech"
 msgstr "Windows Media Hecelemesi"
 
+#: gst-libs/gst/pbutils/descriptions.c:199
 msgid "CYUV Lossless"
 msgstr "CYUV Kayıpsız"
 
+#: gst-libs/gst/pbutils/descriptions.c:203
 msgid "FFMpeg v1"
 msgstr "FFMpeg v1"
 
+#: gst-libs/gst/pbutils/descriptions.c:217
 msgid "Lossless MSZH"
 msgstr "Kayıpsız MSZH"
 
+#: gst-libs/gst/pbutils/descriptions.c:228
 msgid "Run-length encoding"
 msgstr "Çalıştırma-uzunluğu kodlaması"
 
+#: gst-libs/gst/pbutils/descriptions.c:274
 msgid "Timed Text"
 msgstr "Zamanlanmış Metin"
 
+#: gst-libs/gst/pbutils/descriptions.c:278
 msgid "Subtitle"
 msgstr "Alt yazı"
 
+#: gst-libs/gst/pbutils/descriptions.c:279
 msgid "MPL2 subtitle format"
 msgstr "MPL2 alt yazı kipi"
 
+#: gst-libs/gst/pbutils/descriptions.c:280
 msgid "DKS subtitle format"
 msgstr "DKS alt yazı kipi"
 
+#: gst-libs/gst/pbutils/descriptions.c:281
 msgid "QTtext subtitle format"
 msgstr "QTtext alt yazı kipi"
 
+#: gst-libs/gst/pbutils/descriptions.c:282
 msgid "Sami subtitle format"
 msgstr "Sami alt yazı kipi"
 
+#: gst-libs/gst/pbutils/descriptions.c:283
 msgid "TMPlayer subtitle format"
 msgstr "TMPlayer alt yazı kipi"
 
+#: gst-libs/gst/pbutils/descriptions.c:287
 msgid "CEA 608 Closed Caption"
 msgstr "CEA 608 Kapalı Başlık"
 
+#: gst-libs/gst/pbutils/descriptions.c:288
 msgid "CEA 708 Closed Caption"
 msgstr "CEA 708 Kapalı Başlık"
 
+#: gst-libs/gst/pbutils/descriptions.c:289
 msgid "Kate subtitle format"
 msgstr "Kate alt yazı kipi"
 
+#: gst-libs/gst/pbutils/descriptions.c:290
 msgid "WebVTT subtitle format"
 msgstr "WebVTT alt yazı biçimi"
 
+#: gst-libs/gst/pbutils/descriptions.c:455
+#: gst-libs/gst/pbutils/descriptions.c:458
+#: gst-libs/gst/pbutils/descriptions.c:508
 msgid "Uncompressed video"
 msgstr "Sıkıştırılmamış video"
 
+#: gst-libs/gst/pbutils/descriptions.c:463
 msgid "Uncompressed gray"
 msgstr "Sıkıştırılmamış gri resim"
 
+#: gst-libs/gst/pbutils/descriptions.c:486
 #, c-format
 msgid "Uncompressed packed YUV %s"
 msgstr "Sıkıştırılmamış paket YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:488
 #, c-format
 msgid "Uncompressed semi-planar YUV %s"
 msgstr "Sıkıştırılmamış yarı düzlem YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:490
 #, c-format
 msgid "Uncompressed planar YUV %s"
 msgstr "Sıkıştırılmamış düzlem YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:501
 #, c-format
 msgid "Uncompressed palettized %d-bit %s"
 msgstr "Sıkıştırılmamış paletlenmiş %d-bit %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:504
 #, c-format
 msgid "Uncompressed %d-bit %s"
 msgstr "Şıkıştırılmamış %d-bit %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:586
 #, c-format
 msgid "DivX MPEG-4 Version %d"
 msgstr "DivX MPEG-4 Versiyonu %d"
 
+#: gst-libs/gst/pbutils/descriptions.c:834
 msgid "Uncompressed audio"
 msgstr "Sıkıştırılmamış ses"
 
+#: gst-libs/gst/pbutils/descriptions.c:840
 #, c-format
 msgid "Raw %d-bit %s audio"
 msgstr "Ham %d-bit %s audio"
 
+#: gst-libs/gst/pbutils/descriptions.c:942
 msgid "Audio CD source"
 msgstr "Ses CD'si kaynağı"
 
+#: gst-libs/gst/pbutils/descriptions.c:945
 msgid "DVD source"
 msgstr "DVD kaynağı"
 
+#: gst-libs/gst/pbutils/descriptions.c:948
 msgid "Real Time Streaming Protocol (RTSP) source"
 msgstr "Gerçek Zamanlı Akış Protokolu (RTSP) kaynağı"
 
+#: gst-libs/gst/pbutils/descriptions.c:952
 msgid "Microsoft Media Server (MMS) protocol source"
 msgstr "Microsoft Ortam Sunucusu (MMS) protokol kaynağı"
 
+#: gst-libs/gst/pbutils/descriptions.c:960
 #, c-format
 msgid "%s protocol source"
 msgstr "%s protokol kaynağı"
 
+#: gst-libs/gst/pbutils/descriptions.c:1034
 #, c-format
 msgid "%s video RTP depayloader"
 msgstr "%s video RTP depayloader"
 
+#: gst-libs/gst/pbutils/descriptions.c:1036
 #, c-format
 msgid "%s audio RTP depayloader"
 msgstr "%s audio RTP depayloader"
 
+#: gst-libs/gst/pbutils/descriptions.c:1038
 #, c-format
 msgid "%s RTP depayloader"
 msgstr "%s RTP depayloader"
 
+#: gst-libs/gst/pbutils/descriptions.c:1045
 #, c-format
 msgid "%s demuxer"
 msgstr "%s demuxer"
 
+#: gst-libs/gst/pbutils/descriptions.c:1047
 #, c-format
 msgid "%s decoder"
 msgstr "%s kod çözücü"
 
+#: gst-libs/gst/pbutils/descriptions.c:1086
 #, c-format
 msgid "%s video RTP payloader"
 msgstr "%s video RTP payloader"
 
+#: gst-libs/gst/pbutils/descriptions.c:1088
 #, c-format
 msgid "%s audio RTP payloader"
 msgstr "%s audio RTP payloader"
 
+#: gst-libs/gst/pbutils/descriptions.c:1090
 #, c-format
 msgid "%s RTP payloader"
 msgstr "%s RTP payloader"
 
+#: gst-libs/gst/pbutils/descriptions.c:1097
 #, c-format
 msgid "%s muxer"
 msgstr "%s muxer"
 
+#: gst-libs/gst/pbutils/descriptions.c:1099
 #, c-format
 msgid "%s encoder"
 msgstr "%s kodlayıcı"
 
+#: gst-libs/gst/pbutils/descriptions.c:1133
 #, c-format
 msgid "GStreamer element %s"
 msgstr "GStreamer ögesi %s"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:558
 msgid "Unknown source element"
 msgstr "Bilinmeyen kaynak ögesi"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:561
 msgid "Unknown sink element"
 msgstr "Bilinmeyen gömme ögesi"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:564
 msgid "Unknown element"
 msgstr "Bilinmeyen öge"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:567
 msgid "Unknown decoder element"
 msgstr "Bilinmeyen kod çözücü ögesi"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:570
 msgid "Unknown encoder element"
 msgstr "Bilinmeyen kodlama ögesi"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:575
 msgid "Plugin or element of unknown type"
 msgstr "Bilinmeyen türde eklenti veya öge"
 
+#: gst-libs/gst/tag/gsttagdemux.c:1243
 msgid "Failed to read tag: not enough data"
 msgstr "Etiketi okunamadı: yetersiz veri"
 
+#: gst-libs/gst/tag/tags.c:77
 msgid "track ID"
 msgstr "iz KİMLİĞİ"
 
+#: gst-libs/gst/tag/tags.c:77
 msgid "MusicBrainz track ID"
 msgstr "MusicBrainz iz KİMLİĞİ"
 
+#: gst-libs/gst/tag/tags.c:79
 msgid "artist ID"
 msgstr "sanatçı KİMLİĞİ"
 
+#: gst-libs/gst/tag/tags.c:79
 msgid "MusicBrainz artist ID"
 msgstr "MusicBrainz sanatçı KİMLİĞİ"
 
+#: gst-libs/gst/tag/tags.c:81
 msgid "album ID"
 msgstr "albüm KİMLİĞİ"
 
+#: gst-libs/gst/tag/tags.c:81
 msgid "MusicBrainz album ID"
 msgstr "MusicBrainz albümü KİMLİĞİ"
 
+#: gst-libs/gst/tag/tags.c:84
 msgid "album artist ID"
 msgstr "albüm sanatçısı KİMLİĞİ"
 
+#: gst-libs/gst/tag/tags.c:84
 msgid "MusicBrainz album artist ID"
 msgstr "MusicBrainz albüm sanatçısı KİMLİĞİ"
 
+#: gst-libs/gst/tag/tags.c:86
 msgid "track TRM ID"
 msgstr "iz TRM KİMLİĞİ"
 
+#: gst-libs/gst/tag/tags.c:86
 msgid "MusicBrainz TRM ID"
 msgstr "MusicBrainz TRM BAŞLIĞI"
 
+#: gst-libs/gst/tag/tags.c:108
 msgid "capturing shutter speed"
 msgstr "deklanşör hızını yakalıyor"
 
+#: gst-libs/gst/tag/tags.c:109
 msgid "Shutter speed used when capturing an image, in seconds"
 msgstr "Saniye bazında, bir resim çekerken kullanılan objektif hızı"
 
+#: gst-libs/gst/tag/tags.c:112
 msgid "capturing focal ratio"
 msgstr "odaksal oranı yakalıyor"
 
+#: gst-libs/gst/tag/tags.c:113
 msgid "Focal ratio (f-number) used when capturing the image"
 msgstr "Resim çekerken kullanılan odaksal oran (f-numarası)"
 
+#: gst-libs/gst/tag/tags.c:116
 msgid "capturing focal length"
 msgstr "odaksal uzunluğu yakalıyor"
 
+#: gst-libs/gst/tag/tags.c:117
 msgid "Focal length of the lens used capturing the image, in mm"
 msgstr "Mm bazında, resim çekerken kullanılan odaksal uzunluk"
 
+#: gst-libs/gst/tag/tags.c:121
 msgid "capturing 35 mm equivalent focal length"
 msgstr "35 mm eşdeğer odak uzaklığı yakalıyor"
 
-msgid ""
-"35 mm equivalent focal length of the lens used capturing the image, in mm"
-msgstr ""
-"resim çekerken kullanılan merceğin 35 mm eşdeğer odak uzaklığı, mm bazında"
+#: gst-libs/gst/tag/tags.c:122
+msgid "35 mm equivalent focal length of the lens used capturing the image, in mm"
+msgstr "resim çekerken kullanılan merceğin 35 mm eşdeğer odak uzaklığı, mm bazında"
 
+#: gst-libs/gst/tag/tags.c:126
 msgid "capturing digital zoom ratio"
 msgstr "sayısal zum oranını yakalıyor"
 
+#: gst-libs/gst/tag/tags.c:127
 msgid "Digital zoom ratio used when capturing an image"
 msgstr "Bir resim çekerken kullanılan sayısal yakınlaştırma oranı"
 
+#: gst-libs/gst/tag/tags.c:130
 msgid "capturing iso speed"
 msgstr "iso hızını yakalıyor"
 
+#: gst-libs/gst/tag/tags.c:131
 msgid "The ISO speed used when capturing an image"
 msgstr "Bir resim çekerken kulllanılan ISO hızı"
 
+#: gst-libs/gst/tag/tags.c:134
 msgid "capturing exposure program"
 msgstr "pozlandırma programını yakalıyor"
 
+#: gst-libs/gst/tag/tags.c:135
 msgid "The exposure program used when capturing an image"
 msgstr "Bir resim çekerken kullanılan pozlandırma programı"
 
+#: gst-libs/gst/tag/tags.c:138
 msgid "capturing exposure mode"
 msgstr "pozlandırma kipini yakalıyor"
 
+#: gst-libs/gst/tag/tags.c:139
 msgid "The exposure mode used when capturing an image"
 msgstr "Bir resim çekerken kullanılan pozlandırma kipi"
 
+#: gst-libs/gst/tag/tags.c:142
 msgid "capturing exposure compensation"
 msgstr "pozlandırma kipini yakalanıyor"
 
+#: gst-libs/gst/tag/tags.c:143
 msgid "The exposure compensation used when capturing an image"
 msgstr "Bir resim çekerken kullanılan pozlandırma kipi"
 
+#: gst-libs/gst/tag/tags.c:146
 msgid "capturing scene capture type"
 msgstr "manzara çekme türünü yakalıyor"
 
+#: gst-libs/gst/tag/tags.c:147
 msgid "The scene capture mode used when capturing an image"
 msgstr "Bir resim çekerken kullanılan manzara yakalama kipi"
 
+#: gst-libs/gst/tag/tags.c:150
 msgid "capturing gain adjustment"
 msgstr "kazanç ayarı yakalanıyor"
 
+#: gst-libs/gst/tag/tags.c:151
 msgid "The overall gain adjustment applied on an image"
 msgstr "Bir resime uygulanan kapsamlı kazanç ayarı"
 
+#: gst-libs/gst/tag/tags.c:154
 msgid "capturing white balance"
 msgstr "beyaz dengesi yakalanıyor"
 
+#: gst-libs/gst/tag/tags.c:155
 msgid "The white balance mode set when capturing an image"
 msgstr "Bir resim çekerken kullanılan beyaz dengesi kipi"
 
+#: gst-libs/gst/tag/tags.c:158
 msgid "capturing contrast"
 msgstr "zıtlık yakalanıyor"
 
+#: gst-libs/gst/tag/tags.c:159
 msgid "The direction of contrast processing applied when capturing an image"
 msgstr "Bir resim çekerken uygulanan zıtlık işleminin yönü"
 
+#: gst-libs/gst/tag/tags.c:163
 msgid "capturing saturation"
 msgstr "canlılık yakalanıyor"
 
+#: gst-libs/gst/tag/tags.c:164
 msgid "The direction of saturation processing applied when capturing an image"
 msgstr "Bir resim çekerken uygulanan doygunluk işleminin yönü"
 
+#: gst-libs/gst/tag/tags.c:168
 msgid "capturing sharpness"
 msgstr "keskinlik yakalanıyor"
 
+#: gst-libs/gst/tag/tags.c:169
 msgid "The direction of sharpness processing applied when capturing an image"
 msgstr "Bir resim çekerken uygulanan keskinlik işleminin yönü"
 
+#: gst-libs/gst/tag/tags.c:173
 msgid "capturing flash fired"
 msgstr "flaşın yanışı yakalanıyor"
 
+#: gst-libs/gst/tag/tags.c:174
 msgid "If the flash fired while capturing an image"
 msgstr "Bir resim çekerken eğer flaş patlamışsa"
 
+#: gst-libs/gst/tag/tags.c:177
 msgid "capturing flash mode"
 msgstr "flaş kipi yakalanıyor"
 
+#: gst-libs/gst/tag/tags.c:178
 msgid "The selected flash mode while capturing an image"
 msgstr "Bir resim çekerken kullanılan flaş kipi"
 
+#: gst-libs/gst/tag/tags.c:181
 msgid "capturing metering mode"
 msgstr "metreleme kipi yakalanıyor"
 
-msgid ""
-"The metering mode used while determining exposure for capturing an image"
+#: gst-libs/gst/tag/tags.c:182
+msgid "The metering mode used while determining exposure for capturing an image"
 msgstr "Bir resim çekmek için pozlandırmanın metreleme kipi"
 
+#: gst-libs/gst/tag/tags.c:186
 msgid "capturing source"
 msgstr "kaynak yakalanıyor"
 
+#: gst-libs/gst/tag/tags.c:187
 msgid "The source or type of device used for the capture"
 msgstr "Resim çekerken kullanılan aygıtın kaynak türü"
 
+#: gst-libs/gst/tag/tags.c:190
 msgid "image horizontal ppi"
 msgstr "yatay resim ppi değeri"
 
+#: gst-libs/gst/tag/tags.c:191
 msgid "Media (image/video) intended horizontal pixel density in ppi"
 msgstr "Ortam (resim/video)'nın ppi değerinden yatay piksel yoğunluğu"
 
+#: gst-libs/gst/tag/tags.c:194
 msgid "image vertical ppi"
 msgstr "resim dikey ppi değeri"
 
+#: gst-libs/gst/tag/tags.c:195
 msgid "Media (image/video) intended vertical pixel density in ppi"
 msgstr "Ortam (resim/video)'nun ppi değerinden dikey piksel yoğunluğu"
 
+#: gst-libs/gst/tag/tags.c:198
 msgid "ID3v2 frame"
 msgstr "ID3v2 çerçevesi"
 
+#: gst-libs/gst/tag/tags.c:198
 msgid "unparsed id3v2 tag frame"
 msgstr "ayrıştırılmamış id3v2 etiket çerçevesi"
 
+#: gst-libs/gst/tag/tags.c:202
 msgid "musical-key"
 msgstr "müzik anahtarı"
 
+#: gst-libs/gst/tag/tags.c:202
 msgid "Initial key in which the sound starts"
 msgstr "Sesin başladığı başlangıç anahtarı"
 
+#: tools/gst-device-monitor.c:260 tools/gst-play.c:1444
 msgid "Print version information and exit"
 msgstr "Sürüm bilgisini yaz ve çık"
 
-msgid ""
-"Don't exit after showing the initial device list, but wait for devices to "
-"added/removed."
-msgstr ""
-"Başlangıç aygıt listesini gösterdikten sonra kapanma, eklenecek/çıkartılacak "
-"aygıtları bekle."
+#: tools/gst-device-monitor.c:262
+msgid "Don't exit after showing the initial device list, but wait for devices to added/removed."
+msgstr "Başlangıç aygıt listesini gösterdikten sonra kapanma, eklenecek/çıkartılacak aygıtları bekle."
 
+#: tools/gst-play.c:310
 #, c-format
 msgid "Volume: %.0f%%"
 msgstr "Ses: %%%.0f"
 
+#: tools/gst-play.c:349
 msgid "Buffering..."
 msgstr "Tampon belleğe alınıyor..."
 
+#: tools/gst-play.c:370
 msgid "Clock lost, selecting a new one\n"
 msgstr "Saat kayboldu, yenisi seçiliyor\n"
 
+#: tools/gst-play.c:400 tools/gst-play.c:446 tools/gst-play.c:883
+#: tools/gst-play.c:1347
 msgid "Reached end of play list."
 msgstr "Çalma listesinin sonuna ulaşıldı."
 
+#: tools/gst-play.c:613
 msgid "Paused"
 msgstr "Duraklatıldı"
 
+#: tools/gst-play.c:671
 #, c-format
 msgid "Now playing %s\n"
 msgstr "Şimdi %s oynatılıyor\n"
 
+#: tools/gst-play.c:734
 #, c-format
 msgid "About to finish, preparing next title: %s"
 msgstr "Bitmek üzere, sonraki başlık hazırlanıyor: %s"
 
+#: tools/gst-play.c:979
 #, c-format
 msgid "Playback rate: %.2f"
 msgstr "Oynatma hızı: %.2f"
 
+#: tools/gst-play.c:983
 #, c-format
 msgid "Could not change playback rate to %.2f"
 msgstr "Oynatma hızı %.2f'e değiştirilemiyor"
 
+#: tools/gst-play.c:1287
 msgid "space"
 msgstr "boşluk"
 
+#: tools/gst-play.c:1287
 msgid "pause/unpause"
 msgstr "duraklat/sürdür"
 
+#: tools/gst-play.c:1288
 msgid "q or ESC"
 msgstr "q veya ESC"
 
+#: tools/gst-play.c:1288
 msgid "quit"
 msgstr "çık"
 
+#: tools/gst-play.c:1289
 msgid "> or n"
 msgstr "> veya n"
 
+#: tools/gst-play.c:1289
 msgid "play next"
 msgstr "sonrakini oynat"
 
+#: tools/gst-play.c:1290
 msgid "< or b"
 msgstr "< veya b"
 
+#: tools/gst-play.c:1290
 msgid "play previous"
 msgstr "öncekini oynat"
 
+#: tools/gst-play.c:1291
 msgid "seek forward"
 msgstr "ileri sar"
 
+#: tools/gst-play.c:1292
 msgid "seek backward"
 msgstr "geri sar"
 
+#: tools/gst-play.c:1293
 msgid "volume up"
 msgstr "sesi yükselt"
 
+#: tools/gst-play.c:1294
 msgid "volume down"
 msgstr "sesi alçalt"
 
+#: tools/gst-play.c:1295
 msgid "increase playback rate"
 msgstr "oynatma hızını artır"
 
+#: tools/gst-play.c:1296
 msgid "decrease playback rate"
 msgstr "oynatma hızını azalt"
 
+#: tools/gst-play.c:1297
 msgid "change playback direction"
 msgstr "oynatma yönünü değiştir"
 
+#: tools/gst-play.c:1298
 msgid "enable/disable trick modes"
 msgstr "hile modularını etkinleştir/devre dışı bırak"
 
+#: tools/gst-play.c:1299
 msgid "change audio track"
 msgstr "ses izini değiştir"
 
+#: tools/gst-play.c:1300
 msgid "change video track"
 msgstr "video izini değiştir"
 
+#: tools/gst-play.c:1301
 msgid "change subtitle track"
 msgstr "alt yazı izini değiştir"
 
+#: tools/gst-play.c:1302
 msgid "seek to beginning"
 msgstr "başa sar"
 
+#: tools/gst-play.c:1303
 msgid "show keyboard shortcuts"
 msgstr "klavye kısayollarını göster"
 
+#: tools/gst-play.c:1306
 msgid "Interactive mode - keyboard controls:"
 msgstr "Etkileşimli kip - klavye denetimleri:"
 
+#: tools/gst-play.c:1439
 msgid "Output status information and property notifications"
 msgstr "Çıktı durum bilgisi ve özellik bildirimleri"
 
+#: tools/gst-play.c:1441
 msgid "Control playback behaviour setting playbin 'flags' property"
 msgstr "Oynatma davranışını kontrol etme ayarı playbin 'bayrakları' özelliği"
 
+#: tools/gst-play.c:1446
 msgid "Video sink to use (default is autovideosink)"
 msgstr "Kullanılacak video alıcı (varsayılan autovideosink)"
 
+#: tools/gst-play.c:1448
 msgid "Audio sink to use (default is autoaudiosink)"
 msgstr "Kullanılacak ses alıcı (varsayılan autoaudiosink)"
 
+#: tools/gst-play.c:1450
 msgid "Enable gapless playback"
 msgstr "Aralıksız çalmayı etkinleştir"
 
+#: tools/gst-play.c:1452
 msgid "Shuffle playlist"
 msgstr "Çalma listesini karıştır"
 
+#: tools/gst-play.c:1455
 msgid "Disable interactive control via the keyboard"
 msgstr "Klavye aracılığıyla etkileşimli denetimi devre dışı bırak"
 
+#: tools/gst-play.c:1457
 msgid "Volume"
 msgstr "Ses"
 
+#: tools/gst-play.c:1459
 msgid "Playlist file containing input media files"
 msgstr "Çalma listesi dosyası girdi ortam dosyaları içeriyor"
 
+#: tools/gst-play.c:1461
 msgid "Do not print any output (apart from errors)"
 msgstr "Herhangi bir çıktı yazdırma (hatalar dışında)"
 
+#: tools/gst-play.c:1463
 msgid "Use playbin3 pipeline"
 msgstr "playbin3 ardaşık düzenini kullan"
 
+#: tools/gst-play.c:1464
 msgid "(default varies depending on 'USE_PLAYBIN' env variable)"
 msgstr "(varsayılan 'USE_PLAYBIN' env değişkenine bağlı olarak değişir)"
 
+#: tools/gst-play.c:1468
+msgid "Keep showing the last frame on EOS until quit or playlist change command (gapless is ignored)"
+msgstr "Çıkma veya çalma listesi değiştirme komutuna kadar son kareyi EOS'da göstermeye devam et (boşluksuz göz ardı edilir)"
+
+#: tools/gst-play.c:1546
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr "Kullanım: %s DOSYA1|URI1 [DOSYA2|URI2] [DOSYA3|URI3] ..."
 
+#: tools/gst-play.c:1550
 msgid "You must provide at least one filename or URI to play."
 msgstr "Çalmak için en azından bir dosya adı veya URI sağlamalısınız."
 
+#: tools/gst-play.c:1590
 msgid "Press 'k' to see a list of keyboard shortcuts.\n"
 msgstr "Klavye kısayollarının bir listesini görmek için 'k'ye basın.\n"
 
@@ -753,20 +962,11 @@ msgstr "Klavye kısayollarının bir listesini görmek için 'k'ye basın.\n"
 #~ msgid "RTSP streams cannot be played yet."
 #~ msgstr "RTSP akışları henüz çalınamıyor."
 
-#~ msgid ""
-#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
-#~ "file or some other type of text file, or the media file was not "
-#~ "recognized."
-#~ msgstr ""
-#~ "Bir altyazı dosyası algılandı. Siz ya bir altyazı veya başka bir metin "
-#~ "dosyası yüklemek üzeresiniz, veya çokluortam dosyası tanınamadı."
-
-#~ msgid ""
-#~ "You do not have a decoder installed to handle this file. You might need "
-#~ "to install the necessary plugins."
-#~ msgstr ""
-#~ "Bu yüklü dosyası çözümleyecek bir kod çözücüye sahip değilsiniz. Gerekli "
-#~ "eklentileri kurmak zorundasınız."
+#~ msgid "Only a subtitle stream was detected. Either you are loading a subtitle file or some other type of text file, or the media file was not recognized."
+#~ msgstr "Bir altyazı dosyası algılandı. Siz ya bir altyazı veya başka bir metin dosyası yüklemek üzeresiniz, veya çokluortam dosyası tanınamadı."
+
+#~ msgid "You do not have a decoder installed to handle this file. You might need to install the necessary plugins."
+#~ msgstr "Bu yüklü dosyası çözümleyecek bir kod çözücüye sahip değilsiniz. Gerekli eklentileri kurmak zorundasınız."
 
 #~ msgid "This is not a media file"
 #~ msgstr "Bu bir çokluortam dosyası değil."
index 39dfe83..a4a3a25 100644 (file)
 # Yuri Chornoivan <yurchor@ukr.net>, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2019.
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base 1.15.1\n"
+"Project-Id-Version: gst-plugins-base 1.16.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:43+0000\n"
-"PO-Revision-Date: 2019-01-24 22:01+0200\n"
+"POT-Creation-Date: 2019-04-19 00:20+0100\n"
+"PO-Revision-Date: 2019-09-03 10:25+0300\n"
 "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
-"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
+"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
 "Language: uk\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Lokalize 2.0\n"
+"X-Generator: Lokalize 19.04.0\n"
 
+#: ext/alsa/gstalsasink.c:579
 msgid "Could not open device for playback in mono mode."
 msgstr "Не вдалося відкрити пристрій відтворення у режимі моно."
 
+#: ext/alsa/gstalsasink.c:581
 msgid "Could not open device for playback in stereo mode."
 msgstr "Не вдалося відкрити пристрій відтворення у режимі стерео."
 
+#: ext/alsa/gstalsasink.c:585
 #, c-format
 msgid "Could not open device for playback in %d-channel mode."
 msgstr "Не вдалося відкрити пристрій відтворення у %d канальному режимі."
 
-msgid ""
-"Could not open audio device for playback. Device is being used by another "
-"application."
-msgstr ""
-"Не вдалося відкрити пристрій для відтворення. Пристрій використовується "
-"сторонньою програмою."
+#: ext/alsa/gstalsasink.c:858
+msgid "Could not open audio device for playback. Device is being used by another application."
+msgstr "Не вдалося відкрити пристрій для відтворення. Пристрій використовується сторонньою програмою."
 
+#: ext/alsa/gstalsasink.c:863
 msgid "Could not open audio device for playback."
 msgstr "Не вдалося відкрити пристрій для відтворення."
 
+#: ext/alsa/gstalsasink.c:1076
 msgid "Error outputting to audio device. The device has been disconnected."
-msgstr ""
-"Помилка під час спроби вивести дані на звуковий пристрій. Цей пристрій було "
-"від’єднано."
+msgstr "Помилка під час спроби вивести дані на звуковий пристрій. Цей пристрій було від’єднано."
 
+#: ext/alsa/gstalsasrc.c:444
 msgid "Could not open device for recording in mono mode."
 msgstr "Не вдалося відкрити пристрій запису у режимі моно."
 
+#: ext/alsa/gstalsasrc.c:446
 msgid "Could not open device for recording in stereo mode."
 msgstr "Не вдалося відкрити пристрій запису у режимі стерео."
 
+#: ext/alsa/gstalsasrc.c:450
 #, c-format
 msgid "Could not open device for recording in %d-channel mode"
 msgstr "Не вдалося відкрити пристрій запису у %d-канальному режимі."
 
-msgid ""
-"Could not open audio device for recording. Device is being used by another "
-"application."
-msgstr ""
-"Не вдалося відкрити пристрій для запису. Пристрій використовується "
-"сторонньою програмою."
+#: ext/alsa/gstalsasrc.c:741
+msgid "Could not open audio device for recording. Device is being used by another application."
+msgstr "Не вдалося відкрити пристрій для запису. Пристрій використовується сторонньою програмою."
 
+#: ext/alsa/gstalsasrc.c:746
 msgid "Could not open audio device for recording."
 msgstr "Не вдалося відкрити пристрій для запису."
 
+#: ext/alsa/gstalsasrc.c:992
 msgid "Error recording from audio device. The device has been disconnected."
-msgstr ""
-"Помилка під час записати дані зі звукового пристрою. Цей пристрій було "
-"від’єднано."
+msgstr "Помилка під час записати дані зі звукового пристрою. Цей пристрій було від’єднано."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:277 ext/cdparanoia/gstcdparanoiasrc.c:283
 msgid "Could not open CD device for reading."
 msgstr "Не вдалося відкрити пристрій компакт-дисків для читання."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:409
 msgid "Could not seek CD."
 msgstr "Не вдалося встановити позицію на CD."
 
+#: ext/cdparanoia/gstcdparanoiasrc.c:417
 msgid "Could not read CD."
 msgstr "Не вдалося прочитати CD."
 
+#: ext/gl/gstgltestsrc.c:491
 msgid "failed to draw pattern"
 msgstr "не вдалося намалювати візерунок"
 
+#: ext/gl/gstgltestsrc.c:492
 msgid "A GL error occurred"
 msgstr "Сталася помилка GL"
 
+#: ext/gl/gstgltestsrc.c:498
 msgid "format wasn't negotiated before get function"
 msgstr "формат не було узгоджено до функції отримання"
 
+#: gst/encoding/gstencodebin.c:1636 gst/playback/gstplaybin2.c:3399
+#: gst/playback/gstplaysink.c:1522 gst/playback/gstplaysink.c:1535
+#: gst/playback/gstplaysink.c:1872 gst/playback/gstplaysink.c:1904
+#: gst/playback/gstplaysink.c:2488 gst/playback/gstplaysink.c:2537
+#: gst/playback/gstplaysink.c:2552 gst/playback/gstplaysink.c:2577
+#: gst/playback/gstplaysink.c:2609 gst/playback/gstplaysink.c:2757
+#: gst/playback/gstplaysink.c:2788 gst/playback/gstplaysink.c:3166
+#: gst/playback/gstplaysink.c:3175 gst/playback/gstplaysink.c:3184
+#: gst/playback/gstplaysink.c:3193 gst/playback/gstplaysink.c:3606
+#: gst/playback/gstplaysink.c:4526 gst/playback/gstplaysinkconvertbin.c:97
+#: gst/playback/gstplaysinkconvertbin.c:117
+#: gst/playback/gsturidecodebin.c:1472 gst/playback/gsturisourcebin.c:1597
 #, c-format
 msgid "Missing element '%s' - check your GStreamer installation."
-msgstr ""
-"Відсутній елемент «%s». Перевірте, чи встановлено GStreamer належним чином."
+msgstr "Відсутній елемент «%s». Перевірте, чи встановлено GStreamer належним чином."
 
+#: gst/playback/gstdecodebin2.c:1883 gst/playback/gstparsebin.c:1553
 msgid "Could not determine type of stream"
 msgstr "Не вдалося визначити тип даних потоку"
 
+#: gst/playback/gstdecodebin2.c:2861 gst/playback/gstparsebin.c:2385
 msgid "This appears to be a text file"
 msgstr "Файл схожий на текстовий файл"
 
+#: gst/playback/gstplaybin2.c:5452
 msgid "Could not create \"uridecodebin\" element."
 msgstr "Не вдалося створити елемент \"uridecodebin\"."
 
+#: gst/playback/gstplaybin3.c:4558
 msgid "Could not create \"uridecodebin3\" element."
 msgstr "Не вдалося створити елемент \"uridecodebin3\"."
 
+#: gst/playback/gstplaysink.c:2003
 #, c-format
 msgid "Both autovideosink and %s elements are missing."
 msgstr "Не вказано елементів autovideosink і %s."
 
+#: gst/playback/gstplaysink.c:2007
 msgid "The autovideosink element is missing."
 msgstr "Не вказано елемента autovideosink."
 
+#: gst/playback/gstplaysink.c:2012
 #, c-format
 msgid "Configured videosink %s is not working."
 msgstr "Налаштований приймач відеоданих, %s, не працює."
 
+#: gst/playback/gstplaysink.c:2016
 #, c-format
 msgid "Both autovideosink and %s elements are not working."
 msgstr "Непридатними є обидва елементи: autovideosink і %s."
 
+#: gst/playback/gstplaysink.c:2020
 msgid "The autovideosink element is not working."
 msgstr "Елемент autovideosink є непридатним."
 
+#: gst/playback/gstplaysink.c:2525
 msgid "Custom text sink element is not usable."
-msgstr ""
-"Нетиповий елемент приймача текстових даних непридатний до використання."
+msgstr "Нетиповий елемент приймача текстових даних непридатний до використання."
 
+#: gst/playback/gstplaysink.c:2903
 msgid "No volume control found"
 msgstr "Не знайдено регулятора гучності"
 
+#: gst/playback/gstplaysink.c:2933
 #, c-format
 msgid "Both autoaudiosink and %s elements are missing."
 msgstr "Не вказано обох елементів: autoaudiosink і %s."
 
+#: gst/playback/gstplaysink.c:2937
 msgid "The autoaudiosink element is missing."
 msgstr "Не вказано елемента autoaudiosink."
 
+#: gst/playback/gstplaysink.c:2942
 #, c-format
 msgid "Configured audiosink %s is not working."
 msgstr "Налаштований приймач звукових даних, %s, не працює."
 
+#: gst/playback/gstplaysink.c:2946
 #, c-format
 msgid "Both autoaudiosink and %s elements are not working."
 msgstr "Елементи autoaudiosink і %s є непридатними."
 
+#: gst/playback/gstplaysink.c:2950
 msgid "The autoaudiosink element is not working."
 msgstr "Елемент autoaudiosink є непридатним."
 
+#: gst/playback/gstplaysink.c:3269 gst/playback/gstplaysink.c:3274
 msgid "Can't play a text file without video or visualizations."
 msgstr "Відтворення текстового файла без відео або візуалізації неможливе."
 
+#: gst/playback/gsturidecodebin.c:921
 #, c-format
 msgid "No decoder available for type '%s'."
 msgstr "Для типу '%s' немає доступних декодерів."
 
+#: gst/playback/gsturidecodebin.c:1378 gst/playback/gsturisourcebin.c:1491
 msgid "No URI specified to play from."
 msgstr "Не вказано URI для відтворення."
 
+#: gst/playback/gsturidecodebin.c:1384 gst/playback/gsturisourcebin.c:1497
 #, c-format
 msgid "Invalid URI \"%s\"."
 msgstr "Неправильний URI «%s»."
 
+#: gst/playback/gsturidecodebin.c:1391 gst/playback/gsturisourcebin.c:1504
 msgid "This stream type cannot be played yet."
 msgstr "Цей потік поки-що не може бути відтворений."
 
+#: gst/playback/gsturidecodebin.c:1409 gst/playback/gsturisourcebin.c:1522
 #, c-format
 msgid "No URI handler implemented for \"%s\"."
 msgstr "Не реалізовано обробник URI для «%s»."
 
+#: gst/playback/gsturidecodebin.c:2289 gst/playback/gsturisourcebin.c:2228
 msgid "Source element is invalid."
 msgstr "Неправильний вхідний елемент."
 
+#: gst/tcp/gsttcpclientsink.c:216
 #, c-format
 msgid "Error while sending data to \"%s:%d\"."
 msgstr "Помилка при надсиланні даних до \"%s:%d\"."
 
+#: gst-libs/gst/audio/gstaudiobasesrc.c:842
 msgid "Can't record audio fast enough"
 msgstr "Не вдалося запис аудіоданих з потрібною швидкістю"
 
+#: gst-libs/gst/audio/gstaudiocdsrc.c:1625
 msgid "This CD has no audio tracks"
 msgstr "На цьому компакт-диску немає звукових доріжок"
 
+#: gst-libs/gst/pbutils/descriptions.c:89
 msgid "ID3 tag"
 msgstr "Мітка ID3"
 
+#: gst-libs/gst/pbutils/descriptions.c:90
+#: gst-libs/gst/pbutils/descriptions.c:91
 msgid "APE tag"
 msgstr "Мітка APE"
 
+#: gst-libs/gst/pbutils/descriptions.c:92
 msgid "ICY internet radio"
 msgstr "Інтернет-радіо ICY"
 
+#: gst-libs/gst/pbutils/descriptions.c:127
 msgid "Apple Lossless Audio (ALAC)"
 msgstr "Аудіо без втрат від Apple (ALAC)"
 
+#: gst-libs/gst/pbutils/descriptions.c:143
 msgid "Free Lossless Audio Codec (FLAC)"
 msgstr "Вільний алгоритм аудіо без втрат (FLAC)"
 
+#: gst-libs/gst/pbutils/descriptions.c:173
+#: gst-libs/gst/pbutils/descriptions.c:174
 msgid "Lossless True Audio (TTA)"
 msgstr "Lossless True Audio (TTA)"
 
+#: gst-libs/gst/pbutils/descriptions.c:182
 msgid "Windows Media Speech"
 msgstr "Windows Media Speech"
 
+#: gst-libs/gst/pbutils/descriptions.c:199
 msgid "CYUV Lossless"
 msgstr "CYUV без втрат"
 
+#: gst-libs/gst/pbutils/descriptions.c:203
 msgid "FFMpeg v1"
 msgstr "FFMpeg v1"
 
+#: gst-libs/gst/pbutils/descriptions.c:217
 msgid "Lossless MSZH"
 msgstr "MSZH без втрат"
 
+#: gst-libs/gst/pbutils/descriptions.c:228
 msgid "Run-length encoding"
 msgstr "Кодування Run-length"
 
+#: gst-libs/gst/pbutils/descriptions.c:274
 msgid "Timed Text"
 msgstr "Timed Text"
 
+#: gst-libs/gst/pbutils/descriptions.c:278
 msgid "Subtitle"
 msgstr "Субтитри"
 
+#: gst-libs/gst/pbutils/descriptions.c:279
 msgid "MPL2 subtitle format"
 msgstr "Формат субтитрів MPL2"
 
+#: gst-libs/gst/pbutils/descriptions.c:280
 msgid "DKS subtitle format"
 msgstr "Формат субтитрів DKS"
 
+#: gst-libs/gst/pbutils/descriptions.c:281
 msgid "QTtext subtitle format"
 msgstr "Формат субтитрів QTtext"
 
+#: gst-libs/gst/pbutils/descriptions.c:282
 msgid "Sami subtitle format"
 msgstr "Формат субтитрів Sami"
 
+#: gst-libs/gst/pbutils/descriptions.c:283
 msgid "TMPlayer subtitle format"
 msgstr "Формат субтитрів TMPlayer"
 
+#: gst-libs/gst/pbutils/descriptions.c:287
 msgid "CEA 608 Closed Caption"
 msgstr "Субтитри CEA 608"
 
+#: gst-libs/gst/pbutils/descriptions.c:288
 msgid "CEA 708 Closed Caption"
 msgstr "Субтитри CEA 708"
 
+#: gst-libs/gst/pbutils/descriptions.c:289
 msgid "Kate subtitle format"
 msgstr "Формат субтитрів Kate"
 
+#: gst-libs/gst/pbutils/descriptions.c:290
 msgid "WebVTT subtitle format"
 msgstr "Формат субтитрів WebVTT"
 
+#: gst-libs/gst/pbutils/descriptions.c:455
+#: gst-libs/gst/pbutils/descriptions.c:458
+#: gst-libs/gst/pbutils/descriptions.c:508
 msgid "Uncompressed video"
 msgstr "Нестиснене відео"
 
+#: gst-libs/gst/pbutils/descriptions.c:463
 msgid "Uncompressed gray"
 msgstr "Нестиснене сіре зображення"
 
+#: gst-libs/gst/pbutils/descriptions.c:486
 #, c-format
 msgid "Uncompressed packed YUV %s"
 msgstr "Нестиснений пакетний YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:488
 #, c-format
 msgid "Uncompressed semi-planar YUV %s"
 msgstr "Нестиснений напівпланарний YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:490
 #, c-format
 msgid "Uncompressed planar YUV %s"
 msgstr "Нестиснений планарний YUV %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:501
 #, c-format
 msgid "Uncompressed palettized %d-bit %s"
 msgstr "Нестиснений пакетний %d-бітовий %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:504
 #, c-format
 msgid "Uncompressed %d-bit %s"
 msgstr "Нестиснений %d-бітовий %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:586
 #, c-format
 msgid "DivX MPEG-4 Version %d"
 msgstr "DivX MPEG-4 версії %d"
 
+#: gst-libs/gst/pbutils/descriptions.c:834
 msgid "Uncompressed audio"
 msgstr "Нестиснені звукові дані"
 
+#: gst-libs/gst/pbutils/descriptions.c:840
 #, c-format
 msgid "Raw %d-bit %s audio"
 msgstr "Необроблені %d-бітові звукові дані %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:942
 msgid "Audio CD source"
 msgstr "Джерело аудіо-CD"
 
+#: gst-libs/gst/pbutils/descriptions.c:945
 msgid "DVD source"
 msgstr "Джерело DVD"
 
+#: gst-libs/gst/pbutils/descriptions.c:948
 msgid "Real Time Streaming Protocol (RTSP) source"
 msgstr "Джерело потокового протоколу реального часу (RTSP)"
 
+#: gst-libs/gst/pbutils/descriptions.c:952
 msgid "Microsoft Media Server (MMS) protocol source"
 msgstr "Джерело протоколу Microsoft Media Server (MMS)"
 
+#: gst-libs/gst/pbutils/descriptions.c:960
 #, c-format
 msgid "%s protocol source"
 msgstr "Джерело протоколу %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1034
 #, c-format
 msgid "%s video RTP depayloader"
 msgstr "RTP модуль розпаковування відеоданих %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1036
 #, c-format
 msgid "%s audio RTP depayloader"
 msgstr "RTP модуль розпаковування аудіоданих %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1038
 #, c-format
 msgid "%s RTP depayloader"
 msgstr "RTP модуль розпаковування даних %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1045
 #, c-format
 msgid "%s demuxer"
 msgstr "демультиплексор %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1047
 #, c-format
 msgid "%s decoder"
 msgstr "декодер %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1086
 #, c-format
 msgid "%s video RTP payloader"
 msgstr "RTP модуль запаковування відеоданих %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1088
 #, c-format
 msgid "%s audio RTP payloader"
 msgstr "RTP модуль запаковування аудіоданих %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1090
 #, c-format
 msgid "%s RTP payloader"
 msgstr "RTP модуль запаковування даних %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1097
 #, c-format
 msgid "%s muxer"
 msgstr "мультиплексор %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1099
 #, c-format
 msgid "%s encoder"
 msgstr "кодер %s"
 
+#: gst-libs/gst/pbutils/descriptions.c:1133
 #, c-format
 msgid "GStreamer element %s"
 msgstr "Елемент GStreamer %s"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:558
 msgid "Unknown source element"
 msgstr "Невідомий елемент джерела"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:561
 msgid "Unknown sink element"
 msgstr "Невідомий елемент приймача"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:564
 msgid "Unknown element"
 msgstr "Невідомий елемент"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:567
 msgid "Unknown decoder element"
 msgstr "Невідомий елемент декодера"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:570
 msgid "Unknown encoder element"
 msgstr "Невідомий елемент кодера"
 
+#: gst-libs/gst/pbutils/missing-plugins.c:575
 msgid "Plugin or element of unknown type"
 msgstr "Модуль або елемент невідомого типу"
 
+#: gst-libs/gst/tag/gsttagdemux.c:1243
 msgid "Failed to read tag: not enough data"
 msgstr "Не вдалося прочитати мітку: недостатньо даних"
 
+#: gst-libs/gst/tag/tags.c:77
 msgid "track ID"
 msgstr "ідентифікатор доріжки"
 
+#: gst-libs/gst/tag/tags.c:77
 msgid "MusicBrainz track ID"
 msgstr "Ідентифікатор доріжки у MusicBrainz"
 
+#: gst-libs/gst/tag/tags.c:79
 msgid "artist ID"
 msgstr "ідентифікатор виконавця"
 
+#: gst-libs/gst/tag/tags.c:79
 msgid "MusicBrainz artist ID"
 msgstr "Ідентифікатор виконавця у MusicBrainz"
 
+#: gst-libs/gst/tag/tags.c:81
 msgid "album ID"
 msgstr "ідентифікатор альбому"
 
+#: gst-libs/gst/tag/tags.c:81
 msgid "MusicBrainz album ID"
 msgstr "Ідентифікатор альбому у MusicBrainz"
 
+#: gst-libs/gst/tag/tags.c:84
 msgid "album artist ID"
 msgstr "ідентифікатор виконавця альбому"
 
+#: gst-libs/gst/tag/tags.c:84
 msgid "MusicBrainz album artist ID"
 msgstr "Ідентифікатор виконавця альбому у MusicBrainz"
 
+#: gst-libs/gst/tag/tags.c:86
 msgid "track TRM ID"
 msgstr "ідентифікатор доріжки TRM"
 
+#: gst-libs/gst/tag/tags.c:86
 msgid "MusicBrainz TRM ID"
 msgstr "Ідентифікатор доріжки TRM у MusicBrainz"
 
+#: gst-libs/gst/tag/tags.c:108
 msgid "capturing shutter speed"
 msgstr "швидкість затвору"
 
+#: gst-libs/gst/tag/tags.c:109
 msgid "Shutter speed used when capturing an image, in seconds"
 msgstr "Швидкість затвору (діафрагми) під час створення зображення, у секундах"
 
+#: gst-libs/gst/tag/tags.c:112
 msgid "capturing focal ratio"
 msgstr "фокальний коефіцієнт"
 
+#: gst-libs/gst/tag/tags.c:113
 msgid "Focal ratio (f-number) used when capturing the image"
-msgstr ""
-"Фокальний коефіцієнт (число діафрагми), використаний під час створення "
-"зображення"
+msgstr "Фокальний коефіцієнт (число діафрагми), використаний під час створення зображення"
 
+#: gst-libs/gst/tag/tags.c:116
 msgid "capturing focal length"
 msgstr "фокальна відстань"
 
+#: gst-libs/gst/tag/tags.c:117
 msgid "Focal length of the lens used capturing the image, in mm"
-msgstr ""
-"Фокальна відстань об’єктива, використаного при створенні зображення, у мм"
+msgstr "Фокальна відстань об’єктива, використаного при створенні зображення, у мм"
 
+#: gst-libs/gst/tag/tags.c:121
 msgid "capturing 35 mm equivalent focal length"
 msgstr "захоплюємо у 35-мм еквіваленті фокальної відстані"
 
-msgid ""
-"35 mm equivalent focal length of the lens used capturing the image, in mm"
-msgstr ""
-"35-мм еквівалент фокальної відстані об’єктива, який буде використано для "
-"створення зображення, у мм"
+#: gst-libs/gst/tag/tags.c:122
+msgid "35 mm equivalent focal length of the lens used capturing the image, in mm"
+msgstr "35-мм еквівалент фокальної відстані об’єктива, який буде використано для створення зображення, у мм"
 
+#: gst-libs/gst/tag/tags.c:126
 msgid "capturing digital zoom ratio"
 msgstr "коефіцієнт цифрового збільшення"
 
+#: gst-libs/gst/tag/tags.c:127
 msgid "Digital zoom ratio used when capturing an image"
-msgstr ""
-"Коефіцієнт цифрового збільшення, використаний під час створення зображення"
+msgstr "Коефіцієнт цифрового збільшення, використаний під час створення зображення"
 
+#: gst-libs/gst/tag/tags.c:130
 msgid "capturing iso speed"
 msgstr "світлочутливість ISO"
 
+#: gst-libs/gst/tag/tags.c:131
 msgid "The ISO speed used when capturing an image"
 msgstr "Світлочутливість ISO, використана під час створення зображення"
 
+#: gst-libs/gst/tag/tags.c:134
 msgid "capturing exposure program"
 msgstr "програма експозиції"
 
+#: gst-libs/gst/tag/tags.c:135
 msgid "The exposure program used when capturing an image"
 msgstr "Програма експозиції, використана під час створення зображення"
 
+#: gst-libs/gst/tag/tags.c:138
 msgid "capturing exposure mode"
 msgstr "режим експозиції"
 
+#: gst-libs/gst/tag/tags.c:139
 msgid "The exposure mode used when capturing an image"
 msgstr "Режим експозиції, використаний під час створення зображення"
 
+#: gst-libs/gst/tag/tags.c:142
 msgid "capturing exposure compensation"
 msgstr "компенсація експозиції під час захоплення"
 
+#: gst-libs/gst/tag/tags.c:143
 msgid "The exposure compensation used when capturing an image"
 msgstr "Компенсація часу експозиції, потрібного для захоплення зображення"
 
+#: gst-libs/gst/tag/tags.c:146
 msgid "capturing scene capture type"
 msgstr "тип сцени"
 
+#: gst-libs/gst/tag/tags.c:147
 msgid "The scene capture mode used when capturing an image"
 msgstr "Режим типу сцени, використаний під час створення зображення"
 
+#: gst-libs/gst/tag/tags.c:150
 msgid "capturing gain adjustment"
 msgstr "коригування підсилання"
 
+#: gst-libs/gst/tag/tags.c:151
 msgid "The overall gain adjustment applied on an image"
 msgstr "Загальне коригування підсилення, застосоване до зображення"
 
+#: gst-libs/gst/tag/tags.c:154
 msgid "capturing white balance"
 msgstr "баланс білого"
 
+#: gst-libs/gst/tag/tags.c:155
 msgid "The white balance mode set when capturing an image"
-msgstr ""
-"Режим балансування білого кольору, використаний під час створення зображення"
+msgstr "Режим балансування білого кольору, використаний під час створення зображення"
 
+#: gst-libs/gst/tag/tags.c:158
 msgid "capturing contrast"
 msgstr "контрастність"
 
+#: gst-libs/gst/tag/tags.c:159
 msgid "The direction of contrast processing applied when capturing an image"
 msgstr "Напрям обробки контрастності, застосований при створенні зображення"
 
+#: gst-libs/gst/tag/tags.c:163
 msgid "capturing saturation"
 msgstr "насиченість"
 
+#: gst-libs/gst/tag/tags.c:164
 msgid "The direction of saturation processing applied when capturing an image"
 msgstr "Напрям обробки насиченості, застосований при створенні зображення"
 
+#: gst-libs/gst/tag/tags.c:168
 msgid "capturing sharpness"
 msgstr "різкість"
 
+#: gst-libs/gst/tag/tags.c:169
 msgid "The direction of sharpness processing applied when capturing an image"
 msgstr "Напрям обробки різкості, застосований при створенні зображення"
 
+#: gst-libs/gst/tag/tags.c:173
 msgid "capturing flash fired"
 msgstr "спалах"
 
+#: gst-libs/gst/tag/tags.c:174
 msgid "If the flash fired while capturing an image"
 msgstr "Чи було використано спалах при створенні зображення"
 
+#: gst-libs/gst/tag/tags.c:177
 msgid "capturing flash mode"
 msgstr "режим спалаху"
 
+#: gst-libs/gst/tag/tags.c:178
 msgid "The selected flash mode while capturing an image"
 msgstr "Вибраний режим спалаху під час створення зображення"
 
+#: gst-libs/gst/tag/tags.c:181
 msgid "capturing metering mode"
 msgstr "режим вимірювання"
 
-msgid ""
-"The metering mode used while determining exposure for capturing an image"
-msgstr ""
-"Режим вимірювання, застосований для визначення експозиції створеного "
-"зображення"
+#: gst-libs/gst/tag/tags.c:182
+msgid "The metering mode used while determining exposure for capturing an image"
+msgstr "Режим вимірювання, застосований для визначення експозиції створеного зображення"
 
+#: gst-libs/gst/tag/tags.c:186
 msgid "capturing source"
 msgstr "джерело"
 
+#: gst-libs/gst/tag/tags.c:187
 msgid "The source or type of device used for the capture"
 msgstr "Тип пристрою-джерела зображення"
 
+#: gst-libs/gst/tag/tags.c:190
 msgid "image horizontal ppi"
 msgstr "горизонтальна щільність пікселів"
 
+#: gst-libs/gst/tag/tags.c:191
 msgid "Media (image/video) intended horizontal pixel density in ppi"
-msgstr ""
-"Горизонтальна щільність пікселів на матриці (зображення або відео), у точках "
-"на дюйм"
+msgstr "Горизонтальна щільність пікселів на матриці (зображення або відео), у точках на дюйм"
 
+#: gst-libs/gst/tag/tags.c:194
 msgid "image vertical ppi"
 msgstr "вертикальна щільність пікселів"
 
+#: gst-libs/gst/tag/tags.c:195
 msgid "Media (image/video) intended vertical pixel density in ppi"
-msgstr ""
-"Вертикальна щільність пікселів на матриці (зображення або відео), у точках "
-"на дюйм"
+msgstr "Вертикальна щільність пікселів на матриці (зображення або відео), у точках на дюйм"
 
+#: gst-libs/gst/tag/tags.c:198
 msgid "ID3v2 frame"
 msgstr "Блок ID3v2"
 
+#: gst-libs/gst/tag/tags.c:198
 msgid "unparsed id3v2 tag frame"
 msgstr "необроблений блок теґу id3v2"
 
+#: gst-libs/gst/tag/tags.c:202
 msgid "musical-key"
 msgstr "музична-тональність"
 
+#: gst-libs/gst/tag/tags.c:202
 msgid "Initial key in which the sound starts"
 msgstr "Початкова тональність, якою розпочинається звук"
 
+#: tools/gst-device-monitor.c:260 tools/gst-play.c:1444
 msgid "Print version information and exit"
 msgstr "Показати дані щодо версії і завершити роботу"
 
-msgid ""
-"Don't exit after showing the initial device list, but wait for devices to "
-"added/removed."
-msgstr ""
-"Не завершувати роботу після показу початкового списку пристроїв, чекати на "
-"додавання або вилучення пристроїв."
+#: tools/gst-device-monitor.c:262
+msgid "Don't exit after showing the initial device list, but wait for devices to added/removed."
+msgstr "Не завершувати роботу після показу початкового списку пристроїв, чекати на додавання або вилучення пристроїв."
 
+#: tools/gst-play.c:310
 #, c-format
 msgid "Volume: %.0f%%"
 msgstr "Гучність: %.0f%%"
 
+#: tools/gst-play.c:349
 msgid "Buffering..."
 msgstr "Буферизація…"
 
+#: tools/gst-play.c:370
 msgid "Clock lost, selecting a new one\n"
 msgstr "Доступ до годинника втрачено, вибираємо новий\n"
 
+#: tools/gst-play.c:400 tools/gst-play.c:446 tools/gst-play.c:883
+#: tools/gst-play.c:1347
 msgid "Reached end of play list."
 msgstr "Відтворення списку завершено."
 
+#: tools/gst-play.c:613
 msgid "Paused"
 msgstr "Призупинено"
 
+#: tools/gst-play.c:671
 #, c-format
 msgid "Now playing %s\n"
 msgstr "Відтворюється %s\n"
 
+#: tools/gst-play.c:734
 #, c-format
 msgid "About to finish, preparing next title: %s"
 msgstr "Майже завершили, готуємо наступну композицію: %s"
 
+#: tools/gst-play.c:979
 #, c-format
 msgid "Playback rate: %.2f"
 msgstr "Частота відтворення: %.2f"
 
+#: tools/gst-play.c:983
 #, c-format
 msgid "Could not change playback rate to %.2f"
 msgstr "Не вдалося змінити частоту відтворення на %.2f"
 
+#: tools/gst-play.c:1287
 msgid "space"
 msgstr "пробіл"
 
+#: tools/gst-play.c:1287
 msgid "pause/unpause"
 msgstr "призупинити/поновити"
 
+#: tools/gst-play.c:1288
 msgid "q or ESC"
 msgstr "q або ESC"
 
+#: tools/gst-play.c:1288
 msgid "quit"
 msgstr "вийти"
 
+#: tools/gst-play.c:1289
 msgid "> or n"
 msgstr "> або n"
 
+#: tools/gst-play.c:1289
 msgid "play next"
 msgstr "наступна"
 
+#: tools/gst-play.c:1290
 msgid "< or b"
 msgstr "< або b"
 
+#: tools/gst-play.c:1290
 msgid "play previous"
 msgstr "попередня"
 
+#: tools/gst-play.c:1291
 msgid "seek forward"
 msgstr "до кінця"
 
+#: tools/gst-play.c:1292
 msgid "seek backward"
 msgstr "до початку"
 
+#: tools/gst-play.c:1293
 msgid "volume up"
 msgstr "гучніше"
 
+#: tools/gst-play.c:1294
 msgid "volume down"
 msgstr "тихіше"
 
+#: tools/gst-play.c:1295
 msgid "increase playback rate"
 msgstr "збільшити частоту відтворення"
 
+#: tools/gst-play.c:1296
 msgid "decrease playback rate"
 msgstr "зменшити частоту відтворення"
 
+#: tools/gst-play.c:1297
 msgid "change playback direction"
 msgstr "змінити напрям відтворення"
 
+#: tools/gst-play.c:1298
 msgid "enable/disable trick modes"
 msgstr "увімкнути або вимкнути особливі режими"
 
+#: tools/gst-play.c:1299
 msgid "change audio track"
 msgstr "змінити звукову доріжку"
 
+#: tools/gst-play.c:1300
 msgid "change video track"
 msgstr "змінити відеодоріжку"
 
+#: tools/gst-play.c:1301
 msgid "change subtitle track"
 msgstr "змінити доріжку субтитрів"
 
+#: tools/gst-play.c:1302
 msgid "seek to beginning"
 msgstr "позиціювати на початок"
 
+#: tools/gst-play.c:1303
 msgid "show keyboard shortcuts"
 msgstr "показати клавіатурні скорочення"
 
+#: tools/gst-play.c:1306
 msgid "Interactive mode - keyboard controls:"
 msgstr "Інтерактивне керування за допомогою клавіатури:"
 
+#: tools/gst-play.c:1439
 msgid "Output status information and property notifications"
 msgstr "Виводити дані щодо стану та сповіщення щодо властивостей"
 
+#: tools/gst-play.c:1441
 msgid "Control playback behaviour setting playbin 'flags' property"
-msgstr ""
-"Керувати параметром поведінки відтворення встановленням властивості «flags»"
+msgstr "Керувати параметром поведінки відтворення встановленням властивості «flags»"
 
+#: tools/gst-play.c:1446
 msgid "Video sink to use (default is autovideosink)"
 msgstr "Приймач відеоданих, яким слід скористатися (типовим є autovideosink)"
 
+#: tools/gst-play.c:1448
 msgid "Audio sink to use (default is autoaudiosink)"
 msgstr "Приймач аудіоданих, яким слід скористатися (типовим є autoaudiosink)"
 
+#: tools/gst-play.c:1450
 msgid "Enable gapless playback"
 msgstr "Увімкнути неперервне відтворення"
 
+#: tools/gst-play.c:1452
 msgid "Shuffle playlist"
 msgstr "Перемішати список відтворення"
 
+#: tools/gst-play.c:1455
 msgid "Disable interactive control via the keyboard"
 msgstr "Вимкнути інтерактивне керування за допомогою клавіатури"
 
+#: tools/gst-play.c:1457
 msgid "Volume"
 msgstr "Гучність"
 
+#: tools/gst-play.c:1459
 msgid "Playlist file containing input media files"
 msgstr "Файл списку відтворення, що містить мультимедійні файли вхідних даних"
 
+#: tools/gst-play.c:1461
 msgid "Do not print any output (apart from errors)"
 msgstr "Не виводити повідомлень (окрім повідомлень щодо помилок)"
 
+#: tools/gst-play.c:1463
 msgid "Use playbin3 pipeline"
 msgstr "Використовувати конвеєр playbin3"
 
+#: tools/gst-play.c:1464
 msgid "(default varies depending on 'USE_PLAYBIN' env variable)"
 msgstr "(типове значення залежить від змінної середовища USE_PLAYBIN)"
 
+#: tools/gst-play.c:1468
+msgid "Keep showing the last frame on EOS until quit or playlist change command (gapless is ignored)"
+msgstr "Показувати останній кадр на EOS до команди виходу або зміни списку відтворення (gapless буде проігноровано)"
+
+#: tools/gst-play.c:1546
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr "Користування: %s ФАЙЛ1|АДРЕСА1 [ФАЙЛ2|АДРЕСА2] [ФАЙЛ3|АДРЕСА3] ..."
 
+#: tools/gst-play.c:1550
 msgid "You must provide at least one filename or URI to play."
-msgstr ""
-"Вам слід вказати принаймні одну назву файла або адресу для відтворення."
+msgstr "Вам слід вказати принаймні одну назву файла або адресу для відтворення."
 
+#: tools/gst-play.c:1590
 msgid "Press 'k' to see a list of keyboard shortcuts.\n"
 msgstr "Натисніть «k», щоб переглянути список клавіатурних скорочень.\n"
 
@@ -754,8 +943,7 @@ msgstr "Натисніть «k», щоб переглянути список к
 #~ msgstr "Запис"
 
 #~ msgid "Could not open vfs file \"%s\" for writing: %s."
-#~ msgstr ""
-#~ "Не вдалося відкрити файл віртуальної файлової системи «%s» для запису: %s."
+#~ msgstr "Не вдалося відкрити файл віртуальної файлової системи «%s» для запису: %s."
 
 #~ msgid "No filename given"
 #~ msgstr "Не вказано файл"
@@ -772,20 +960,11 @@ msgstr "Натисніть «k», щоб переглянути список к
 #~ msgid "RTSP streams cannot be played yet."
 #~ msgstr "Відтворення потоків RTSP поки-що не підтримується."
 
-#~ msgid ""
-#~ "Only a subtitle stream was detected. Either you are loading a subtitle "
-#~ "file or some other type of text file, or the media file was not "
-#~ "recognized."
-#~ msgstr ""
-#~ "Виявлено лише потік субтитрів. Або ви завантажили файл субтитрів чи інший "
-#~ "текстовий файл, або носій не розпізнано."
-
-#~ msgid ""
-#~ "You do not have a decoder installed to handle this file. You might need "
-#~ "to install the necessary plugins."
-#~ msgstr ""
-#~ "Не встановлено декодер для обробки цього файлу. Можливо потрібно "
-#~ "встановити додаткові модулі."
+#~ msgid "Only a subtitle stream was detected. Either you are loading a subtitle file or some other type of text file, or the media file was not recognized."
+#~ msgstr "Виявлено лише потік субтитрів. Або ви завантажили файл субтитрів чи інший текстовий файл, або носій не розпізнано."
+
+#~ msgid "You do not have a decoder installed to handle this file. You might need to install the necessary plugins."
+#~ msgstr "Не встановлено декодер для обробки цього файлу. Можливо потрібно встановити додаткові модулі."
 
 #~ msgid "This is not a media file"
 #~ msgstr "Файл не є мультимедійним"
index 1029a9e..6d5262b 100644 (file)
@@ -5,10 +5,10 @@
 # Tianze Wang <zwpwjwtz@126.com>, 2015.
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-base 1.15.1\n"
+"Project-Id-Version: gst-plugins-base 1.16.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-01-17 01:50+0000\n"
-"PO-Revision-Date: 2019-03-05 16:30+0100\n"
+"POT-Creation-Date: 2019-04-19 00:20+0100\n"
+"PO-Revision-Date: 2019-09-22 08:34+0200\n"
 "Last-Translator: Tianze Wang <zwpwjwtz@126.com>\n"
 "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
 "Language: zh_CN\n"
@@ -103,16 +103,16 @@ msgstr "在调用 get 函数之前未确定合适的格式"
 #: gst/playback/gstplaysink.c:3193 gst/playback/gstplaysink.c:3606
 #: gst/playback/gstplaysink.c:4526 gst/playback/gstplaysinkconvertbin.c:97
 #: gst/playback/gstplaysinkconvertbin.c:117
-#: gst/playback/gsturidecodebin.c:1472 gst/playback/gsturisourcebin.c:1596
+#: gst/playback/gsturidecodebin.c:1472 gst/playback/gsturisourcebin.c:1597
 #, c-format
 msgid "Missing element '%s' - check your GStreamer installation."
 msgstr "未找到组件‘%s’-请检查您的 GStreamer 安装情况。"
 
-#: gst/playback/gstdecodebin2.c:1873 gst/playback/gstparsebin.c:1553
+#: gst/playback/gstdecodebin2.c:1883 gst/playback/gstparsebin.c:1553
 msgid "Could not determine type of stream"
 msgstr "无法确定流的类型"
 
-#: gst/playback/gstdecodebin2.c:2851 gst/playback/gstparsebin.c:2385
+#: gst/playback/gstdecodebin2.c:2861 gst/playback/gstparsebin.c:2385
 msgid "This appears to be a text file"
 msgstr "此文件是个文本文件"
 
@@ -187,25 +187,25 @@ msgstr "无法播放不带视频或可视化效果的文本文件。"
 msgid "No decoder available for type '%s'."
 msgstr "找不到‘%s’类型可用的解码器。"
 
-#: gst/playback/gsturidecodebin.c:1378 gst/playback/gsturisourcebin.c:1490
+#: gst/playback/gsturidecodebin.c:1378 gst/playback/gsturisourcebin.c:1491
 msgid "No URI specified to play from."
 msgstr "未指定要播放的 URI。"
 
-#: gst/playback/gsturidecodebin.c:1384 gst/playback/gsturisourcebin.c:1496
+#: gst/playback/gsturidecodebin.c:1384 gst/playback/gsturisourcebin.c:1497
 #, c-format
 msgid "Invalid URI \"%s\"."
 msgstr "无效的 URI“%s”。"
 
-#: gst/playback/gsturidecodebin.c:1391 gst/playback/gsturisourcebin.c:1503
+#: gst/playback/gsturidecodebin.c:1391 gst/playback/gsturisourcebin.c:1504
 msgid "This stream type cannot be played yet."
 msgstr "此类型的数据流尚不能播放。"
 
-#: gst/playback/gsturidecodebin.c:1409 gst/playback/gsturisourcebin.c:1521
+#: gst/playback/gsturidecodebin.c:1409 gst/playback/gsturisourcebin.c:1522
 #, c-format
 msgid "No URI handler implemented for \"%s\"."
 msgstr "“%s”未实现 URI 处理器。"
 
-#: gst/playback/gsturidecodebin.c:2280 gst/playback/gsturisourcebin.c:2227
+#: gst/playback/gsturidecodebin.c:2289 gst/playback/gsturisourcebin.c:2228
 msgid "Source element is invalid."
 msgstr "无效的源组件。"
 
@@ -252,187 +252,187 @@ msgstr "无损高保真音频(TTA)"
 msgid "Windows Media Speech"
 msgstr "Windows Media 语音"
 
-#: gst-libs/gst/pbutils/descriptions.c:198
+#: gst-libs/gst/pbutils/descriptions.c:199
 msgid "CYUV Lossless"
 msgstr "CYUV 无损"
 
-#: gst-libs/gst/pbutils/descriptions.c:202
+#: gst-libs/gst/pbutils/descriptions.c:203
 msgid "FFMpeg v1"
 msgstr "FFMpeg v1"
 
-#: gst-libs/gst/pbutils/descriptions.c:216
+#: gst-libs/gst/pbutils/descriptions.c:217
 msgid "Lossless MSZH"
 msgstr "无损 MSZH"
 
-#: gst-libs/gst/pbutils/descriptions.c:227
+#: gst-libs/gst/pbutils/descriptions.c:228
 msgid "Run-length encoding"
 msgstr "Run-length 编码"
 
-#: gst-libs/gst/pbutils/descriptions.c:273
+#: gst-libs/gst/pbutils/descriptions.c:274
 msgid "Timed Text"
 msgstr "定时文本"
 
-#: gst-libs/gst/pbutils/descriptions.c:277
+#: gst-libs/gst/pbutils/descriptions.c:278
 msgid "Subtitle"
 msgstr "字幕"
 
-#: gst-libs/gst/pbutils/descriptions.c:278
+#: gst-libs/gst/pbutils/descriptions.c:279
 msgid "MPL2 subtitle format"
 msgstr "MPL2 字幕格式"
 
-#: gst-libs/gst/pbutils/descriptions.c:279
+#: gst-libs/gst/pbutils/descriptions.c:280
 msgid "DKS subtitle format"
 msgstr "DKS 字幕格式"
 
-#: gst-libs/gst/pbutils/descriptions.c:280
+#: gst-libs/gst/pbutils/descriptions.c:281
 msgid "QTtext subtitle format"
 msgstr "QTtext 字幕格式"
 
-#: gst-libs/gst/pbutils/descriptions.c:281
+#: gst-libs/gst/pbutils/descriptions.c:282
 msgid "Sami subtitle format"
 msgstr "Sami 字幕格式"
 
-#: gst-libs/gst/pbutils/descriptions.c:282
+#: gst-libs/gst/pbutils/descriptions.c:283
 msgid "TMPlayer subtitle format"
 msgstr "TMPlayer 字幕格式"
 
-#: gst-libs/gst/pbutils/descriptions.c:286
+#: gst-libs/gst/pbutils/descriptions.c:287
 msgid "CEA 608 Closed Caption"
 msgstr "CEA 608 隐藏式字幕"
 
-#: gst-libs/gst/pbutils/descriptions.c:287
+#: gst-libs/gst/pbutils/descriptions.c:288
 msgid "CEA 708 Closed Caption"
 msgstr "CEA 708 隐藏式字幕"
 
-#: gst-libs/gst/pbutils/descriptions.c:288
+#: gst-libs/gst/pbutils/descriptions.c:289
 msgid "Kate subtitle format"
 msgstr "Kate 字幕格式"
 
-#: gst-libs/gst/pbutils/descriptions.c:289
+#: gst-libs/gst/pbutils/descriptions.c:290
 msgid "WebVTT subtitle format"
 msgstr "WebVTT 字幕格式"
 
-#: gst-libs/gst/pbutils/descriptions.c:454
-#: gst-libs/gst/pbutils/descriptions.c:457
-#: gst-libs/gst/pbutils/descriptions.c:507
+#: gst-libs/gst/pbutils/descriptions.c:455
+#: gst-libs/gst/pbutils/descriptions.c:458
+#: gst-libs/gst/pbutils/descriptions.c:508
 msgid "Uncompressed video"
 msgstr "未压缩的视频"
 
-#: gst-libs/gst/pbutils/descriptions.c:462
+#: gst-libs/gst/pbutils/descriptions.c:463
 msgid "Uncompressed gray"
 msgstr "未压缩的灰度图像"
 
-#: gst-libs/gst/pbutils/descriptions.c:485
+#: gst-libs/gst/pbutils/descriptions.c:486
 #, c-format
 msgid "Uncompressed packed YUV %s"
 msgstr "未压缩的紧缩 YUV %s"
 
-#: gst-libs/gst/pbutils/descriptions.c:487
+#: gst-libs/gst/pbutils/descriptions.c:488
 #, c-format
 msgid "Uncompressed semi-planar YUV %s"
 msgstr "未压缩的半平面 YUV %s"
 
-#: gst-libs/gst/pbutils/descriptions.c:489
+#: gst-libs/gst/pbutils/descriptions.c:490
 #, c-format
 msgid "Uncompressed planar YUV %s"
 msgstr "未压缩的平面 YUV %s"
 
-#: gst-libs/gst/pbutils/descriptions.c:500
+#: gst-libs/gst/pbutils/descriptions.c:501
 #, c-format
 msgid "Uncompressed palettized %d-bit %s"
 msgstr "未压缩的调色板映射 %d位 %s"
 
-#: gst-libs/gst/pbutils/descriptions.c:503
+#: gst-libs/gst/pbutils/descriptions.c:504
 #, c-format
 msgid "Uncompressed %d-bit %s"
 msgstr "未压缩的 %d位 %s"
 
-#: gst-libs/gst/pbutils/descriptions.c:585
+#: gst-libs/gst/pbutils/descriptions.c:586
 #, c-format
 msgid "DivX MPEG-4 Version %d"
 msgstr "DivX MPEG-4 第 %d 版"
 
-#: gst-libs/gst/pbutils/descriptions.c:833
+#: gst-libs/gst/pbutils/descriptions.c:834
 msgid "Uncompressed audio"
 msgstr "未压缩的音频"
 
-#: gst-libs/gst/pbutils/descriptions.c:839
+#: gst-libs/gst/pbutils/descriptions.c:840
 #, c-format
 msgid "Raw %d-bit %s audio"
 msgstr "原始 %d位 %s 音频"
 
-#: gst-libs/gst/pbutils/descriptions.c:941
+#: gst-libs/gst/pbutils/descriptions.c:942
 msgid "Audio CD source"
 msgstr "音频 CD 源"
 
-#: gst-libs/gst/pbutils/descriptions.c:944
+#: gst-libs/gst/pbutils/descriptions.c:945
 msgid "DVD source"
 msgstr "DVD 源"
 
-#: gst-libs/gst/pbutils/descriptions.c:947
+#: gst-libs/gst/pbutils/descriptions.c:948
 msgid "Real Time Streaming Protocol (RTSP) source"
 msgstr "实时流协议(RTSP)源"
 
-#: gst-libs/gst/pbutils/descriptions.c:951
+#: gst-libs/gst/pbutils/descriptions.c:952
 msgid "Microsoft Media Server (MMS) protocol source"
 msgstr "Microsoft 媒体服务协议(MMS)源"
 
-#: gst-libs/gst/pbutils/descriptions.c:959
+#: gst-libs/gst/pbutils/descriptions.c:960
 #, c-format
 msgid "%s protocol source"
 msgstr "%s 协议源"
 
-#: gst-libs/gst/pbutils/descriptions.c:1033
+#: gst-libs/gst/pbutils/descriptions.c:1034
 #, c-format
 msgid "%s video RTP depayloader"
 msgstr "%s 视频 RTP 去负载器"
 
-#: gst-libs/gst/pbutils/descriptions.c:1035
+#: gst-libs/gst/pbutils/descriptions.c:1036
 #, c-format
 msgid "%s audio RTP depayloader"
 msgstr "%s 音频 RTP 去负载器"
 
-#: gst-libs/gst/pbutils/descriptions.c:1037
+#: gst-libs/gst/pbutils/descriptions.c:1038
 #, c-format
 msgid "%s RTP depayloader"
 msgstr "%s RTP 去负载器"
 
-#: gst-libs/gst/pbutils/descriptions.c:1044
+#: gst-libs/gst/pbutils/descriptions.c:1045
 #, c-format
 msgid "%s demuxer"
 msgstr "%s 多路分配器"
 
-#: gst-libs/gst/pbutils/descriptions.c:1046
+#: gst-libs/gst/pbutils/descriptions.c:1047
 #, c-format
 msgid "%s decoder"
 msgstr "%s 解码器"
 
-#: gst-libs/gst/pbutils/descriptions.c:1085
+#: gst-libs/gst/pbutils/descriptions.c:1086
 #, c-format
 msgid "%s video RTP payloader"
 msgstr "%s 视频 RTP 负载器"
 
-#: gst-libs/gst/pbutils/descriptions.c:1087
+#: gst-libs/gst/pbutils/descriptions.c:1088
 #, c-format
 msgid "%s audio RTP payloader"
 msgstr "%s 音频 RTP 负载器"
 
-#: gst-libs/gst/pbutils/descriptions.c:1089
+#: gst-libs/gst/pbutils/descriptions.c:1090
 #, c-format
 msgid "%s RTP payloader"
 msgstr "%s RTP 负载器"
 
-#: gst-libs/gst/pbutils/descriptions.c:1096
+#: gst-libs/gst/pbutils/descriptions.c:1097
 #, c-format
 msgid "%s muxer"
 msgstr "%s 混音器"
 
-#: gst-libs/gst/pbutils/descriptions.c:1098
+#: gst-libs/gst/pbutils/descriptions.c:1099
 #, c-format
 msgid "%s encoder"
 msgstr "%s 编码器"
 
-#: gst-libs/gst/pbutils/descriptions.c:1132
+#: gst-libs/gst/pbutils/descriptions.c:1133
 #, c-format
 msgid "GStreamer element %s"
 msgstr "GStreamer 组件 %s"
@@ -689,202 +689,206 @@ msgstr "音调"
 msgid "Initial key in which the sound starts"
 msgstr "音乐开始时的音调"
 
-#: tools/gst-device-monitor.c:255 tools/gst-play.c:1442
+#: tools/gst-device-monitor.c:260 tools/gst-play.c:1444
 msgid "Print version information and exit"
 msgstr "显示版本信息,然后退出。"
 
-#: tools/gst-device-monitor.c:257
+#: tools/gst-device-monitor.c:262
 msgid "Don't exit after showing the initial device list, but wait for devices to added/removed."
 msgstr "显示初始设备列表后不退出,而是等待设备被添加或移除。"
 
-#: tools/gst-play.c:308
+#: tools/gst-play.c:310
 #, c-format
 msgid "Volume: %.0f%%"
 msgstr "音量:%.0f%%"
 
-#: tools/gst-play.c:347
+#: tools/gst-play.c:349
 msgid "Buffering..."
 msgstr "缓冲中..."
 
-#: tools/gst-play.c:368
+#: tools/gst-play.c:370
 msgid "Clock lost, selecting a new one\n"
 msgstr "时钟已丢失,请选择一个新的\n"
 
-#: tools/gst-play.c:398 tools/gst-play.c:444 tools/gst-play.c:881
-#: tools/gst-play.c:1345
+#: tools/gst-play.c:400 tools/gst-play.c:446 tools/gst-play.c:883
+#: tools/gst-play.c:1347
 msgid "Reached end of play list."
 msgstr "到达播放列表结尾。"
 
-#: tools/gst-play.c:611
+#: tools/gst-play.c:613
 msgid "Paused"
 msgstr "已暂停"
 
-#: tools/gst-play.c:669
+#: tools/gst-play.c:671
 #, c-format
 msgid "Now playing %s\n"
 msgstr "正在播放 %s\n"
 
-#: tools/gst-play.c:732
+#: tools/gst-play.c:734
 #, c-format
 msgid "About to finish, preparing next title: %s"
 msgstr "即将结束,准备下一标题:%s"
 
-#: tools/gst-play.c:977
+#: tools/gst-play.c:979
 #, c-format
 msgid "Playback rate: %.2f"
 msgstr "回放速率:%.2f"
 
-#: tools/gst-play.c:981
+#: tools/gst-play.c:983
 #, c-format
 msgid "Could not change playback rate to %.2f"
 msgstr "无法将回放速率改变为%.2f"
 
-#: tools/gst-play.c:1285
+#: tools/gst-play.c:1287
 msgid "space"
 msgstr "空格"
 
-#: tools/gst-play.c:1285
+#: tools/gst-play.c:1287
 msgid "pause/unpause"
 msgstr "暂停/继续"
 
-#: tools/gst-play.c:1286
+#: tools/gst-play.c:1288
 msgid "q or ESC"
 msgstr "q 或 ESC"
 
-#: tools/gst-play.c:1286
+#: tools/gst-play.c:1288
 msgid "quit"
 msgstr "退出"
 
-#: tools/gst-play.c:1287
+#: tools/gst-play.c:1289
 msgid "> or n"
 msgstr "> 或 n"
 
-#: tools/gst-play.c:1287
+#: tools/gst-play.c:1289
 msgid "play next"
 msgstr "下一曲"
 
-#: tools/gst-play.c:1288
+#: tools/gst-play.c:1290
 msgid "< or b"
 msgstr "< 或 b"
 
-#: tools/gst-play.c:1288
+#: tools/gst-play.c:1290
 msgid "play previous"
 msgstr "上一曲"
 
-#: tools/gst-play.c:1289
+#: tools/gst-play.c:1291
 msgid "seek forward"
 msgstr "前进"
 
-#: tools/gst-play.c:1290
+#: tools/gst-play.c:1292
 msgid "seek backward"
 msgstr "后退"
 
-#: tools/gst-play.c:1291
+#: tools/gst-play.c:1293
 msgid "volume up"
 msgstr "增大音量"
 
-#: tools/gst-play.c:1292
+#: tools/gst-play.c:1294
 msgid "volume down"
 msgstr "减小音量"
 
-#: tools/gst-play.c:1293
+#: tools/gst-play.c:1295
 msgid "increase playback rate"
 msgstr "增大回放速率"
 
-#: tools/gst-play.c:1294
+#: tools/gst-play.c:1296
 msgid "decrease playback rate"
 msgstr "减小回访率"
 
-#: tools/gst-play.c:1295
+#: tools/gst-play.c:1297
 msgid "change playback direction"
 msgstr "改变回放方向"
 
-#: tools/gst-play.c:1296
+#: tools/gst-play.c:1298
 msgid "enable/disable trick modes"
 msgstr "启用/禁用特效模式"
 
-#: tools/gst-play.c:1297
+#: tools/gst-play.c:1299
 msgid "change audio track"
 msgstr "改变音频轨"
 
-#: tools/gst-play.c:1298
+#: tools/gst-play.c:1300
 msgid "change video track"
 msgstr "改变视频轨"
 
-#: tools/gst-play.c:1299
+#: tools/gst-play.c:1301
 msgid "change subtitle track"
 msgstr "改变字幕轨"
 
-#: tools/gst-play.c:1300
+#: tools/gst-play.c:1302
 msgid "seek to beginning"
 msgstr "定位至开始处"
 
-#: tools/gst-play.c:1301
+#: tools/gst-play.c:1303
 msgid "show keyboard shortcuts"
 msgstr "显示键盘快捷键"
 
-#: tools/gst-play.c:1304
+#: tools/gst-play.c:1306
 msgid "Interactive mode - keyboard controls:"
 msgstr "交互模式 - 键盘控制:"
 
-#: tools/gst-play.c:1437
+#: tools/gst-play.c:1439
 msgid "Output status information and property notifications"
 msgstr "输出状态信息和属性通知"
 
-#: tools/gst-play.c:1439
+#: tools/gst-play.c:1441
 msgid "Control playback behaviour setting playbin 'flags' property"
 msgstr "控制回放行为设置中 playbin 的“flags”属性"
 
-#: tools/gst-play.c:1444
+#: tools/gst-play.c:1446
 msgid "Video sink to use (default is autovideosink)"
 msgstr "要使用的视频接收组件(默认为autovideosink)"
 
-#: tools/gst-play.c:1446
+#: tools/gst-play.c:1448
 msgid "Audio sink to use (default is autoaudiosink)"
 msgstr "要使用的音频接收组件(默认为autoaudiosink)"
 
-#: tools/gst-play.c:1448
+#: tools/gst-play.c:1450
 msgid "Enable gapless playback"
 msgstr "启用无缝回放"
 
-#: tools/gst-play.c:1450
+#: tools/gst-play.c:1452
 msgid "Shuffle playlist"
 msgstr "随机播放列表"
 
-#: tools/gst-play.c:1453
+#: tools/gst-play.c:1455
 msgid "Disable interactive control via the keyboard"
 msgstr "禁用键盘交互操作"
 
-#: tools/gst-play.c:1455
+#: tools/gst-play.c:1457
 msgid "Volume"
 msgstr "音量"
 
-#: tools/gst-play.c:1457
+#: tools/gst-play.c:1459
 msgid "Playlist file containing input media files"
 msgstr "播放列表文件含有媒体文件"
 
-#: tools/gst-play.c:1459
+#: tools/gst-play.c:1461
 msgid "Do not print any output (apart from errors)"
 msgstr "不显示任何输出(除了错误信息)"
 
-#: tools/gst-play.c:1461
+#: tools/gst-play.c:1463
 msgid "Use playbin3 pipeline"
 msgstr "使用 playbin3 管道"
 
-#: tools/gst-play.c:1462
+#: tools/gst-play.c:1464
 msgid "(default varies depending on 'USE_PLAYBIN' env variable)"
 msgstr "(默认配置取决于“USE_PLAYBIN”环境变量)"
 
-#: tools/gst-play.c:1536
+#: tools/gst-play.c:1468
+msgid "Keep showing the last frame on EOS until quit or playlist change command (gapless is ignored)"
+msgstr "播放结束后,在 EOS 上维持最后一帧,直到用户手动退出或者切换播放列表(忽略“无缝切换”选项)"
+
+#: tools/gst-play.c:1546
 #, c-format
 msgid "Usage: %s FILE1|URI1 [FILE2|URI2] [FILE3|URI3] ..."
 msgstr "用法:%s [文件1|URI1] [文件2|URI2] [文件3|URI3] ..."
 
-#: tools/gst-play.c:1540
+#: tools/gst-play.c:1550
 msgid "You must provide at least one filename or URI to play."
 msgstr "你必须提供至少一个文件名或URI来播放。"
 
-#: tools/gst-play.c:1580
+#: tools/gst-play.c:1590
 msgid "Press 'k' to see a list of keyboard shortcuts.\n"
 msgstr "按“k”键来显示键盘快捷键列表。\n"
 
index 53be146..61915da 100644 (file)
@@ -14,7 +14,7 @@ if libpulse_dep.found()
     pulse_sources,
     c_args : gst_plugins_good_args,
     include_directories : [configinc, libsinc],
-    dependencies : [gst_dep, gstbase_dep, gstaudio_dep, gstpbutils_dep, libpulse_dep],
+    dependencies : [gst_dep, gstbase_dep, gstaudio_dep, gstpbutils_dep, libpulse_dep, gio_dep],
     install : true,
     install_dir : plugins_install_dir,
   )
index a61c93d..e034835 100644 (file)
@@ -60,6 +60,9 @@
 #include <gst/glib-compat-private.h>
 
 #include "gstpulseelements.h"
+#if defined(__TIZEN__) && defined(PCM_DUMP_ENABLE)
+#include <vconf.h>
+#endif /* __TIZEN__ && PCM_DUMP_ENABLE */
 #include "pulsesink.h"
 #include "pulseutil.h"
 
@@ -73,6 +76,10 @@ GST_DEBUG_CATEGORY_EXTERN (pulse_debug);
 #define DEFAULT_VOLUME          1.0
 #define DEFAULT_MUTE            FALSE
 #define MAX_VOLUME              10.0
+#ifdef __TIZEN__
+#define DEFAULT_AUDIO_LATENCY     "mid"
+#define DEFAULT_AUTO_RENDER_DELAY FALSE
+#endif /* __TIZEN__ */
 
 enum
 {
@@ -85,9 +92,21 @@ enum
   PROP_MUTE,
   PROP_CLIENT_NAME,
   PROP_STREAM_PROPERTIES,
+#ifdef __TIZEN__
+  PROP_AUDIO_LATENCY,
+  PROP_AUTO_RENDER_DELAY,
+#endif /* __TIZEN__ */
   PROP_LAST
 };
 
+#if defined(__TIZEN__) && defined(PCM_DUMP_ENABLE)
+#define GST_PULSESINK_DUMP_VCONF_KEY            "memory/private/sound/pcm_dump"
+#define GST_PULSESINK_DUMP_INPUT_PATH_PREFIX    "/tmp/dump_pulsesink_in_"
+#define GST_PULSESINK_DUMP_OUTPUT_PATH_PREFIX   "/tmp/dump_pulsesink_out_"
+#define GST_PULSESINK_DUMP_INPUT_FLAG           0x00000400
+#define GST_PULSESINK_DUMP_OUTPUT_FLAG          0x00000800
+#endif /* __TIZEN__ && PCM_DUMP_ENABLE */
+
 #define GST_TYPE_PULSERING_BUFFER        \
         (gst_pulseringbuffer_get_type())
 #define GST_PULSERING_BUFFER(obj)        \
@@ -204,6 +223,10 @@ static void gst_pulseringbuffer_clear (GstAudioRingBuffer * buf);
 static guint gst_pulseringbuffer_commit (GstAudioRingBuffer * buf,
     guint64 * sample, guchar * data, gint in_samples, gint out_samples,
     gint * accum);
+#ifdef __TIZEN__
+static gboolean gst_pulsering_set_corked (GstPulseRingBuffer * pbuf, gboolean corked,
+    gboolean wait);
+#endif
 
 G_DEFINE_TYPE (GstPulseRingBuffer, gst_pulseringbuffer,
     GST_TYPE_AUDIO_RING_BUFFER);
@@ -323,6 +346,12 @@ gst_pulsering_destroy_stream (GstPulseRingBuffer * pbuf)
     pa_stream_set_write_callback (pbuf->stream, NULL, NULL);
     pa_stream_set_underflow_callback (pbuf->stream, NULL, NULL);
     pa_stream_set_overflow_callback (pbuf->stream, NULL, NULL);
+#ifdef __TIZEN__
+    pa_stream_set_latency_update_callback (pbuf->stream, NULL, NULL);
+    pa_stream_set_suspended_callback (pbuf->stream, NULL, NULL);
+    pa_stream_set_started_callback (pbuf->stream, NULL, NULL);
+    pa_stream_set_event_callback (pbuf->stream, NULL, NULL);
+#endif
 
     pa_stream_unref (pbuf->stream);
     pbuf->stream = NULL;
@@ -640,6 +669,13 @@ gst_pulseringbuffer_close_device (GstAudioRingBuffer * buf)
   gst_pulsering_destroy_context (pbuf);
   pa_threaded_mainloop_unlock (mainloop);
 
+#if defined(__TIZEN__) && defined(PCM_DUMP_ENABLE)
+  if (psink->dump_fd_input) {
+    fclose(psink->dump_fd_input);
+    psink->dump_fd_input = NULL;
+  }
+#endif /* __TIZEN__ && PCM_DUMP_ENABLE */
+
   GST_LOG_OBJECT (psink, "closed device");
 
   return TRUE;
@@ -756,6 +792,19 @@ gst_pulsering_stream_latency_cb (pa_stream * s, void *userdata)
       GST_TIMEVAL_TO_TIME (info->timestamp), info->write_index_corrupt,
       info->write_index, info->read_index_corrupt, info->read_index,
       info->sink_usec, sink_usec);
+#ifdef __TIZEN__
+  if (!psink || !psink->auto_render_delay)
+    return;
+
+  if (sink_usec < info->sink_usec)
+    gst_base_sink_set_render_delay (GST_BASE_SINK(psink),
+        (info->sink_usec - sink_usec) * G_GINT64_CONSTANT (1000));
+  else
+    gst_base_sink_set_render_delay (GST_BASE_SINK(psink), 0);
+
+  GST_DEBUG_OBJECT (psink,
+    "Current render delay is %llu", gst_base_sink_get_render_delay (GST_BASE_SINK(psink)));
+#endif
 }
 
 static void
@@ -844,6 +893,11 @@ gst_pulsering_stream_event_cb (pa_stream * p, const char *name,
       GST_ELEMENT_ERROR (psink, STREAM, FORMAT, ("Sink format changed"),
           ("Sink format changed"));
     }
+#ifdef __TIZEN__
+  } else if (!strcmp (name, PA_STREAM_EVENT_POP_TIMEOUT)) {
+    GST_WARNING_OBJECT (psink, "got event [%s], cork stream now!!!!", name);
+    gst_pulsering_set_corked (pbuf, TRUE, FALSE);
+#endif
   } else {
     GST_DEBUG_OBJECT (psink, "got unknown event %s", name);
   }
@@ -884,7 +938,9 @@ gst_pulseringbuffer_acquire (GstAudioRingBuffer * buf,
   const pa_buffer_attr *actual;
   pa_channel_map channel_map;
   pa_operation *o = NULL;
+#ifndef __TIZEN__
   pa_cvolume v;
+#endif
   pa_cvolume *pv = NULL;
   pa_stream_flags_t flags;
   const gchar *name;
@@ -934,6 +990,22 @@ gst_pulseringbuffer_acquire (GstAudioRingBuffer * buf,
   else
     name = "Playback Stream";
 
+#if defined(__TIZEN__) && defined(PCM_DUMP_ENABLE)
+  if (psink->need_dump_input == TRUE && psink->dump_fd_input == NULL) {
+    char *suffix , *dump_path;
+    GDateTime *time = g_date_time_new_now_local();
+
+    suffix = g_date_time_format(time, "%m%d_%H%M%S");
+    dump_path = g_strdup_printf("%s%dch_%dhz_%s.pcm", GST_PULSESINK_DUMP_INPUT_PATH_PREFIX, pbuf->channels, spec->info.rate, suffix);
+    GST_WARNING_OBJECT(psink, "pulse-sink dumping enabled: dump path [%s]", dump_path);
+    psink->dump_fd_input = fopen(dump_path, "w+");
+
+    g_free(suffix);
+    g_free(dump_path);
+    g_date_time_unref(time);
+  }
+#endif /* __TIZEN__ && PCM_DUMP_ENABLE */
+
   /* create a stream */
   formats[0] = pbuf->format;
   if (!(pbuf->stream = pa_stream_new_extended (pbuf->context, name, formats, 1,
@@ -971,6 +1043,7 @@ gst_pulseringbuffer_acquire (GstAudioRingBuffer * buf,
   GST_INFO_OBJECT (psink, "prebuf:    %d", wanted.prebuf);
   GST_INFO_OBJECT (psink, "minreq:    %d", wanted.minreq);
 
+#ifndef __TIZEN__
   /* configure volume when we changed it, else we leave the default */
   if (psink->volume_set) {
     GST_LOG_OBJECT (psink, "have volume of %f", psink->volume);
@@ -984,17 +1057,20 @@ gst_pulseringbuffer_acquire (GstAudioRingBuffer * buf,
   } else {
     pv = NULL;
   }
+#endif
 
   /* construct the flags */
   flags = PA_STREAM_INTERPOLATE_TIMING | PA_STREAM_AUTO_TIMING_UPDATE |
       PA_STREAM_ADJUST_LATENCY | PA_STREAM_START_CORKED;
 
+#ifndef __TIZEN__
   if (psink->mute_set) {
     if (psink->mute)
       flags |= PA_STREAM_START_MUTED;
     else
       flags |= PA_STREAM_START_UNMUTED;
   }
+#endif
 
   /* we always start corked (see flags above) */
   pbuf->corked = TRUE;
@@ -1022,6 +1098,17 @@ gst_pulseringbuffer_acquire (GstAudioRingBuffer * buf,
   GST_INFO_OBJECT (psink, "negotiated to: %s", print_buf);
 #endif
 
+#ifdef __TIZEN__
+  {
+    uint32_t idx;
+    if ((idx = pa_stream_get_index (pbuf->stream)) == PA_INVALID_INDEX)
+      goto no_index;
+    if (psink->volume_set)
+      gst_pulse_set_volume_ratio (idx, "out", psink->volume);
+    if (psink->mute)
+      gst_pulse_set_volume_ratio (idx, "out", 0);
+  }
+#endif
   /* After we passed the volume off of to PA we never want to set it
      again, since it is PA's job to save/restore volumes.  */
   psink->volume_set = psink->mute_set = FALSE;
@@ -1080,6 +1167,15 @@ connect_failed:
             pa_strerror (pa_context_errno (pbuf->context))), (NULL));
     goto unlock_and_fail;
   }
+#ifdef __TIZEN__
+no_index:
+  {
+    GST_ELEMENT_ERROR (psink, RESOURCE, FAILED,
+        ("Failed to get stream index: %s",
+            pa_strerror (pa_context_errno (pbuf->context))), (NULL));
+    goto unlock_and_fail;
+  }
+#endif
 }
 
 /* free the stream that we acquired before */
@@ -1517,6 +1613,13 @@ gst_pulseringbuffer_commit (GstAudioRingBuffer * buf, guint64 * sample,
   if (pbuf->paused)
     goto was_paused;
 
+#ifdef __TIZEN__
+  /* ensure running clock for whatever out there */
+  if (pbuf->corked) {
+    if (!gst_pulsering_set_corked (pbuf, FALSE, FALSE))
+      goto uncork_failed;
+  }
+#endif
   /* offset is in bytes */
   offset = *sample * bpf;
 
@@ -1881,6 +1984,25 @@ gst_pulsesink_payload (GstAudioBaseSink * sink, GstBuffer * buf)
   }
 }
 
+#if defined(__TIZEN__) && defined(PCM_DUMP_ENABLE)
+static GstPadProbeReturn
+gst_pulsesink_pad_dump_probe (GstPad * pad, GstPadProbeInfo * info, gpointer data)
+{
+  GstPulseSink *psink = GST_PULSESINK_CAST (data);
+  size_t written = 0;
+  GstBuffer *buffer = GST_PAD_PROBE_INFO_BUFFER (info);
+  GstMapInfo in_map;
+  if (psink->dump_fd_input) {
+    gst_buffer_map(buffer, &in_map, GST_MAP_READ);
+    written = fwrite(in_map.data, 1, in_map.size, psink->dump_fd_input);
+    if (written != in_map.size)
+      GST_WARNING("failed to write!!! ferror=%d", ferror(psink->dump_fd_input));
+    gst_buffer_unmap(buffer, &in_map);
+  }
+  return GST_PAD_PROBE_OK;
+}
+#endif /* __TIZEN__ && PCM_DUMP_ENABLE */
+
 static void
 gst_pulsesink_class_init (GstPulseSinkClass * klass)
 {
@@ -1979,6 +2101,21 @@ gst_pulsesink_class_init (GstPulseSinkClass * klass)
           "list of pulseaudio stream properties",
           GST_TYPE_STRUCTURE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
+#ifdef __TIZEN__
+  g_object_class_install_property (gobject_class,
+      PROP_AUDIO_LATENCY,
+      g_param_spec_string ("latency", "Audio Backend Latency",
+          "Audio Backend Latency (\"low\": Low Latency, \"mid\": Mid Latency, \"high\": High Latency)",
+          DEFAULT_AUDIO_LATENCY,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+  g_object_class_install_property (gobject_class,
+      PROP_AUTO_RENDER_DELAY,
+      g_param_spec_boolean ("auto-render-delay", "Auto Render Delay",
+          "Apply render delay automatically", DEFAULT_AUTO_RENDER_DELAY,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+#endif /* __TIZEN__ */
+
   gst_element_class_set_static_metadata (gstelement_class,
       "PulseAudio Audio Sink",
       "Sink/Audio", "Plays audio to a PulseAudio server", "Lennart Poettering");
@@ -2359,6 +2496,11 @@ info_failed:
 static void
 gst_pulsesink_init (GstPulseSink * pulsesink)
 {
+#if defined(__TIZEN__) && defined(PCM_DUMP_ENABLE)
+  GstPad *sinkpad = NULL;
+  int vconf_dump = 0;
+#endif /* __TIZEN__ && PCM_DUMP_ENABLE */
+
   pulsesink->server = NULL;
   pulsesink->device = NULL;
   pulsesink->device_info.description = NULL;
@@ -2379,6 +2521,26 @@ gst_pulsesink_init (GstPulseSink * pulsesink)
 
   pulsesink->properties = NULL;
   pulsesink->proplist = NULL;
+#ifdef __TIZEN__
+  pulsesink->latency = g_strdup (DEFAULT_AUDIO_LATENCY);
+  pulsesink->auto_render_delay = DEFAULT_AUTO_RENDER_DELAY;
+  pulsesink->proplist = pa_proplist_new();
+  pa_proplist_sets(pulsesink->proplist, PA_PROP_MEDIA_TIZEN_AUDIO_LATENCY, pulsesink->latency);
+#ifdef PCM_DUMP_ENABLE
+  if (vconf_get_int(GST_PULSESINK_DUMP_VCONF_KEY, &vconf_dump)) {
+    GST_WARNING("vconf_get_int %s failed", GST_PULSESINK_DUMP_VCONF_KEY);
+  }
+  pulsesink->need_dump_input = vconf_dump & GST_PULSESINK_DUMP_INPUT_FLAG ? TRUE : FALSE;
+  pulsesink->dump_fd_input = NULL;
+  if (pulsesink->need_dump_input) {
+    sinkpad = gst_element_get_static_pad((GstElement *)pulsesink, "sink");
+    if (sinkpad) {
+      gst_pad_add_probe (sinkpad, GST_PAD_PROBE_TYPE_BUFFER, gst_pulsesink_pad_dump_probe, pulsesink, NULL);
+      gst_object_unref (GST_OBJECT(sinkpad));
+    }
+  }
+#endif
+#endif /* __TIZEN__ */
 
   /* override with a custom clock */
   if (GST_AUDIO_BASE_SINK (pulsesink)->provided_clock)
@@ -2406,21 +2568,29 @@ gst_pulsesink_finalize (GObject * object)
   if (pulsesink->proplist)
     pa_proplist_free (pulsesink->proplist);
 
+#ifdef __TIZEN__
+  g_free (pulsesink->latency);
+#endif /* __TIZEN__ */
+
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
 static void
 gst_pulsesink_set_volume (GstPulseSink * psink, gdouble volume)
 {
+#ifndef __TIZEN__
   pa_cvolume v;
   pa_operation *o = NULL;
+#endif
   GstPulseRingBuffer *pbuf;
   uint32_t idx;
 
+#ifndef __TIZEN__
   if (!mainloop)
     goto no_mainloop;
 
   pa_threaded_mainloop_lock (mainloop);
+#endif
 
   GST_DEBUG_OBJECT (psink, "setting volume to %f", volume);
 
@@ -2431,6 +2601,7 @@ gst_pulsesink_set_volume (GstPulseSink * psink, gdouble volume)
   if ((idx = pa_stream_get_index (pbuf->stream)) == PA_INVALID_INDEX)
     goto no_index;
 
+#ifndef __TIZEN__
   if (pbuf->is_pcm)
     gst_pulse_cvolume_from_linear (&v, pbuf->channels, volume);
   else
@@ -2442,17 +2613,26 @@ gst_pulsesink_set_volume (GstPulseSink * psink, gdouble volume)
               &v, NULL, NULL)))
     goto volume_failed;
 
+#else
+  if (!psink->mute)
+    gst_pulse_set_volume_ratio (idx, "out", volume);
+  psink->volume = volume;
+#endif
+
   /* We don't really care about the result of this call */
 unlock:
+#ifndef __TIZEN__
 
   if (o)
     pa_operation_unref (o);
 
   pa_threaded_mainloop_unlock (mainloop);
+#endif
 
   return;
 
   /* ERRORS */
+#ifndef __TIZEN__
 no_mainloop:
   {
     psink->volume = volume;
@@ -2461,6 +2641,7 @@ no_mainloop:
     GST_DEBUG_OBJECT (psink, "we have no mainloop");
     return;
   }
+#endif
 no_buffer:
   {
     psink->volume = volume;
@@ -2474,6 +2655,7 @@ no_index:
     GST_DEBUG_OBJECT (psink, "we don't have a stream index");
     goto unlock;
   }
+#ifndef __TIZEN__
 volume_failed:
   {
     GST_ELEMENT_ERROR (psink, RESOURCE, FAILED,
@@ -2481,19 +2663,24 @@ volume_failed:
             pa_strerror (pa_context_errno (pbuf->context))), (NULL));
     goto unlock;
   }
+#endif
 }
 
 static void
 gst_pulsesink_set_mute (GstPulseSink * psink, gboolean mute)
 {
+#ifndef __TIZEN__
   pa_operation *o = NULL;
+#endif
   GstPulseRingBuffer *pbuf;
   uint32_t idx;
 
+#ifndef __TIZEN__
   if (!mainloop)
     goto no_mainloop;
 
   pa_threaded_mainloop_lock (mainloop);
+#endif
 
   GST_DEBUG_OBJECT (psink, "setting mute state to %d", mute);
 
@@ -2504,21 +2691,29 @@ gst_pulsesink_set_mute (GstPulseSink * psink, gboolean mute)
   if ((idx = pa_stream_get_index (pbuf->stream)) == PA_INVALID_INDEX)
     goto no_index;
 
+#ifndef __TIZEN__
   if (!(o = pa_context_set_sink_input_mute (pbuf->context, idx,
               mute, NULL, NULL)))
     goto mute_failed;
+#else
+  gst_pulse_set_volume_ratio (idx, "out", mute ? 0 : psink->volume);
+  psink->mute = mute;
+#endif
 
   /* We don't really care about the result of this call */
 unlock:
+#ifndef __TIZEN__
 
   if (o)
     pa_operation_unref (o);
 
   pa_threaded_mainloop_unlock (mainloop);
+#endif
 
   return;
 
   /* ERRORS */
+#ifndef __TIZEN__
 no_mainloop:
   {
     psink->mute = mute;
@@ -2527,6 +2722,7 @@ no_mainloop:
     GST_DEBUG_OBJECT (psink, "we have no mainloop");
     return;
   }
+#endif
 no_buffer:
   {
     psink->mute = mute;
@@ -2540,6 +2736,7 @@ no_index:
     GST_DEBUG_OBJECT (psink, "we don't have a stream index");
     goto unlock;
   }
+#ifndef __TIZEN__
 mute_failed:
   {
     GST_ELEMENT_ERROR (psink, RESOURCE, FAILED,
@@ -2547,6 +2744,7 @@ mute_failed:
             pa_strerror (pa_context_errno (pbuf->context))), (NULL));
     goto unlock;
   }
+#endif
 }
 
 static void
@@ -2897,6 +3095,25 @@ gst_pulsesink_set_property (GObject * object,
         pa_proplist_free (pulsesink->proplist);
       pulsesink->proplist = gst_pulse_make_proplist (pulsesink->properties);
       break;
+#ifdef __TIZEN__
+    case PROP_AUDIO_LATENCY:
+      g_free (pulsesink->latency);
+      pulsesink->latency = g_value_dup_string (value);
+      /* setting NULL restores the default latency */
+      if (pulsesink->latency == NULL) {
+        pulsesink->latency = g_strdup (DEFAULT_AUDIO_LATENCY);
+      }
+      if (!pulsesink->proplist) {
+        pulsesink->proplist = pa_proplist_new();
+      }
+      pa_proplist_sets(pulsesink->proplist, PA_PROP_MEDIA_TIZEN_AUDIO_LATENCY, pulsesink->latency);
+      GST_DEBUG_OBJECT(pulsesink, "latency(%s)", pulsesink->latency);
+      break;
+    case PROP_AUTO_RENDER_DELAY:
+      pulsesink->auto_render_delay = g_value_get_boolean (value);
+      GST_DEBUG_OBJECT (pulsesink, "setting auto-render-delay to %d", g_value_get_boolean (value));
+      break;
+#endif /* __TIZEN__ */
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -2931,18 +3148,26 @@ gst_pulsesink_get_property (GObject * object,
       break;
     case PROP_VOLUME:
     {
+#ifndef __TIZEN__
       gdouble volume;
 
       gst_pulsesink_get_sink_input_info (pulsesink, &volume, NULL);
       g_value_set_double (value, volume);
+#else
+      g_value_set_double (value, pulsesink->volume);
+#endif
       break;
     }
     case PROP_MUTE:
     {
+#ifndef __TIZEN__
       gboolean mute;
 
       gst_pulsesink_get_sink_input_info (pulsesink, NULL, &mute);
       g_value_set_boolean (value, mute);
+#else
+      g_value_set_boolean (value, pulsesink->mute);
+#endif
       break;
     }
     case PROP_CLIENT_NAME:
@@ -2951,6 +3176,14 @@ gst_pulsesink_get_property (GObject * object,
     case PROP_STREAM_PROPERTIES:
       gst_value_set_structure (value, pulsesink->properties);
       break;
+#ifdef __TIZEN__
+    case PROP_AUDIO_LATENCY:
+      g_value_set_string (value, pulsesink->latency);
+      break;
+    case PROP_AUTO_RENDER_DELAY:
+      g_value_set_boolean (value, pulsesink->auto_render_delay);
+      break;
+#endif /* __TIZEN__ */
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
index 51ec86a..07a61bf 100644 (file)
 #include "config.h"
 #endif
 
+#if defined(__TIZEN__) && defined(PCM_DUMP_ENABLE)
+#include <stdio.h>
+#endif
+
 #include <gst/gst.h>
 #include <gst/audio/audio.h>
 #include <gst/audio/gstaudiosink.h>
@@ -67,6 +71,15 @@ struct _GstPulseSink
 
   gint notify; /* atomic */
 
+#ifdef __TIZEN__
+  gchar *latency;
+  gboolean auto_render_delay:1;
+#ifdef PCM_DUMP_ENABLE
+  gint need_dump_input;
+  FILE *dump_fd_input;
+#endif
+#endif /* __TIZEN__ */
+
   const gchar *pa_version;
 
   GstStructure *properties;
index a337a59..2714817 100644 (file)
 #include "pulsesrc.h"
 #include "pulseutil.h"
 
+#if defined(__TIZEN__) && defined(PCM_DUMP_ENABLE)
+#include <vconf.h>
+#endif
+
 GST_DEBUG_CATEGORY_EXTERN (pulse_debug);
 #define GST_CAT_DEFAULT pulse_debug
 
@@ -60,6 +64,11 @@ GST_DEBUG_CATEGORY_EXTERN (pulse_debug);
 #define DEFAULT_VOLUME          1.0
 #define DEFAULT_MUTE            FALSE
 #define MAX_VOLUME              10.0
+#ifdef __TIZEN__
+#define DEFAULT_AUDIO_LATENCY   "mid"
+#endif /* __TIZEN__ */
+/* See the pulsesink code for notes on how we interact with the PA mainloop
+ * thread. */
 
 /* See the pulsesink code for notes on how we interact with the PA mainloop
  * thread. */
@@ -76,9 +85,18 @@ enum
   PROP_SOURCE_OUTPUT_INDEX,
   PROP_VOLUME,
   PROP_MUTE,
+#ifdef __TIZEN__
+  PROP_AUDIO_LATENCY,
+#endif /* __TIZEN__ */
   PROP_LAST
 };
 
+#if defined(__TIZEN__) && defined(PCM_DUMP_ENABLE)
+#define GST_PULSESRC_DUMP_VCONF_KEY            "memory/private/sound/pcm_dump"
+#define GST_PULSESRC_DUMP_OUTPUT_PATH_PREFIX   "/tmp/dump_pulsesrc_out"
+#define GST_PULSESRC_DUMP_OUTPUT_FLAG          0x00200000U
+#endif
+
 static void gst_pulsesrc_destroy_stream (GstPulseSrc * pulsesrc);
 static void gst_pulsesrc_destroy_context (GstPulseSrc * pulsesrc);
 
@@ -246,11 +264,43 @@ gst_pulsesrc_class_init (GstPulseSrcClass * klass)
       PROP_MUTE, g_param_spec_boolean ("mute", "Mute",
           "Mute state of this stream",
           DEFAULT_MUTE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
+#ifdef __TIZEN__
+  g_object_class_install_property (gobject_class,
+      PROP_AUDIO_LATENCY,
+      g_param_spec_string ("latency", "Audio Backend Latency",
+          "Audio Backend Latency (\"low\": Low Latency, \"mid\": Mid Latency, \"high\": High Latency)",
+          DEFAULT_AUDIO_LATENCY,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+#endif /* __TIZEN__ */
 }
 
+#if defined(__TIZEN__) && defined(PCM_DUMP_ENABLE)
+static GstPadProbeReturn
+gst_pulsesrc_pad_dump_probe (GstPad *pad, GstPadProbeInfo * info, gpointer data)
+{
+  GstPulseSrc *pulsesrc =  GST_PULSESRC_CAST (data);
+  size_t written = 0;
+  GstBuffer *buffer = GST_PAD_PROBE_INFO_BUFFER (info);
+  GstMapInfo in_map;
+  if (pulsesrc->dump_fd_output) {
+    gst_buffer_map(buffer, &in_map, GST_MAP_READ);
+    written = fwrite(in_map.data, 1, in_map.size, pulsesrc->dump_fd_output);
+    if (written != in_map.size)
+      GST_WARNING("failed to write!!! ferror=%d", ferror(pulsesrc->dump_fd_output));
+    gst_buffer_unmap(buffer, &in_map);
+  }
+  return GST_PAD_PROBE_OK;
+}
+#endif
+
 static void
 gst_pulsesrc_init (GstPulseSrc * pulsesrc)
 {
+#if defined(__TIZEN__) && defined(PCM_DUMP_ENABLE)
+  GstPad *srcpad = NULL;
+  int vconf_dump = 0;
+#endif
   pulsesrc->server = NULL;
   pulsesrc->device = NULL;
   pulsesrc->client_name = gst_pulse_client_name ();
@@ -280,7 +330,23 @@ gst_pulsesrc_init (GstPulseSrc * pulsesrc)
 
   pulsesrc->properties = NULL;
   pulsesrc->proplist = NULL;
-
+#ifdef __TIZEN__
+  pulsesrc->latency = g_strdup (DEFAULT_AUDIO_LATENCY);
+  pulsesrc->proplist = pa_proplist_new();
+  pa_proplist_sets(pulsesrc->proplist, PA_PROP_MEDIA_TIZEN_AUDIO_LATENCY, pulsesrc->latency);
+
+#ifdef PCM_DUMP_ENABLE
+  if (vconf_get_int(GST_PULSESRC_DUMP_VCONF_KEY, &vconf_dump)) {
+    GST_WARNING("vconf_get_int %s failed", GST_PULSESRC_DUMP_VCONF_KEY);
+  }
+  pulsesrc->need_dump_output = vconf_dump & GST_PULSESRC_DUMP_OUTPUT_FLAG ? TRUE : FALSE;
+  pulsesrc->dump_fd_output = NULL;
+  if (pulsesrc->need_dump_output) {
+    srcpad = gst_element_get_static_pad((GstElement *)pulsesrc, "src");
+    gst_pad_add_probe (srcpad, GST_PAD_PROBE_TYPE_BUFFER, gst_pulsesrc_pad_dump_probe, pulsesrc, NULL);
+  }
+#endif /* PCM_DUMP_ENABLE */
+#endif /* __TIZEN__ */
   /* this should be the default but it isn't yet */
   gst_audio_base_src_set_slave_method (GST_AUDIO_BASE_SRC (pulsesrc),
       GST_AUDIO_BASE_SRC_SLAVE_SKEW);
@@ -344,6 +410,10 @@ gst_pulsesrc_finalize (GObject * object)
   if (pulsesrc->proplist)
     pa_proplist_free (pulsesrc->proplist);
 
+#ifdef __TIZEN__
+  g_free (pulsesrc->latency);
+#endif /* __TIZEN__ */
+
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
@@ -814,6 +884,21 @@ gst_pulsesrc_set_property (GObject * object,
     case PROP_MUTE:
       gst_pulsesrc_set_stream_mute (pulsesrc, g_value_get_boolean (value));
       break;
+#ifdef __TIZEN__
+    case PROP_AUDIO_LATENCY:
+      g_free (pulsesrc->latency);
+      pulsesrc->latency = g_value_dup_string (value);
+      /* setting NULL restores the default latency */
+      if (pulsesrc->latency == NULL) {
+        pulsesrc->latency = g_strdup (DEFAULT_AUDIO_LATENCY);
+      }
+      if (!pulsesrc->proplist) {
+        pulsesrc->proplist = pa_proplist_new();
+      }
+      pa_proplist_sets(pulsesrc->proplist, PA_PROP_MEDIA_TIZEN_AUDIO_LATENCY, pulsesrc->latency);
+      GST_DEBUG_OBJECT(pulsesrc, "latency(%s)", pulsesrc->latency);
+      break;
+#endif /* __TIZEN__ */
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -869,6 +954,11 @@ gst_pulsesrc_get_property (GObject * object,
       g_value_set_boolean (value, mute);
       break;
     }
+#ifdef __TIZEN__
+    case PROP_AUDIO_LATENCY:
+      g_value_set_string (value, pulsesrc->latency);
+      break;
+#endif /* __TIZEN__ */
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -1060,7 +1150,12 @@ gst_pulsesrc_close (GstAudioSrc * asrc)
   pa_threaded_mainloop_lock (pulsesrc->mainloop);
   gst_pulsesrc_destroy_context (pulsesrc);
   pa_threaded_mainloop_unlock (pulsesrc->mainloop);
-
+#if defined(__TIZEN__) && defined(PCM_DUMP_ENABLE)
+  if (pulsesrc->dump_fd_output) {
+    fclose(pulsesrc->dump_fd_output);
+    pulsesrc->dump_fd_output = NULL;
+  }
+#endif
   return TRUE;
 }
 
@@ -1575,6 +1670,25 @@ gst_pulsesrc_prepare (GstAudioSrc * asrc, GstAudioRingBufferSpec * spec)
     gst_pulsesrc_set_stream_volume (pulsesrc, pulsesrc->volume);
     pulsesrc->volume_set = FALSE;
   }
+#if defined(__TIZEN__) && defined(PCM_DUMP_ENABLE)
+  if (pulsesrc->need_dump_output) {
+    char *suffix , *dump_path;
+    GDateTime *time = NULL;
+    if (pulsesrc->dump_fd_output) {
+        fclose(pulsesrc->dump_fd_output);
+        pulsesrc->dump_fd_output = NULL;
+    }
+    time = g_date_time_new_now_local();
+    suffix = g_date_time_format(time, "%m%d_%H%M%S");
+    dump_path = g_strdup_printf("%s_%dch_%dhz_%s.pcm", GST_PULSESRC_DUMP_OUTPUT_PATH_PREFIX, pulsesrc->sample_spec.channels, pulsesrc->sample_spec.rate, suffix);
+    GST_WARNING_OBJECT(asrc,"pulse-source dumping enabled: dump path [%s]", dump_path);
+    pulsesrc->dump_fd_output = fopen(dump_path, "w+");
+
+    g_free(suffix);
+    g_free(dump_path);
+    g_date_time_unref(time);
+  }
+#endif
 
   /* get the actual buffering properties now */
   actual = pa_stream_get_buffer_attr (pulsesrc->stream);
index c532afb..f054da6 100644 (file)
 #include <pulse/pulseaudio.h>
 #include <pulse/thread-mainloop.h>
 
+#if defined(__TIZEN__) && defined(PCM_DUMP_ENABLE)
+#include <stdio.h>
+#endif
+
 G_BEGIN_DECLS
 
 #define GST_TYPE_PULSESRC (gst_pulsesrc_get_type())
@@ -70,8 +74,17 @@ struct _GstPulseSrc
   gboolean paused:1;
   gboolean in_read:1;
 
+#ifdef __TIZEN__
+  gchar *latency;
+#endif /* __TIZEN__ */
+
   GstStructure *properties;
   pa_proplist *proplist;
+
+#if defined(__TIZEN__) && defined(PCM_DUMP_ENABLE)
+  gint need_dump_output;
+  FILE *dump_fd_output;
+#endif
 };
 
 G_END_DECLS
index aa90ce9..6f00f75 100644 (file)
@@ -358,6 +358,11 @@ make_proplist_item (GQuark field_id, const GValue * value, gpointer user_data)
     case G_TYPE_STRING:
       pa_proplist_sets (p, prop_id, g_value_get_string (value));
       break;
+#ifdef __TIZEN__
+    case G_TYPE_INT:
+      pa_proplist_setf (p, prop_id, "%d", g_value_get_int (value));
+      break;
+#endif
     default:
       GST_WARNING ("unmapped property type %s", G_VALUE_TYPE_NAME (value));
       break;
@@ -508,6 +513,56 @@ out:
   return ret;
 }
 
+#ifdef __TIZEN__
+#include <gio/gio.h>
+#define PA_BUS_NAME                                    "org.pulseaudio.Server"
+#define PA_STREAM_MANAGER_OBJECT_PATH                  "/org/pulseaudio/StreamManager"
+#define PA_STREAM_MANAGER_INTERFACE                    "org.pulseaudio.StreamManager"
+#define PA_STREAM_MANAGER_METHOD_NAME_SET_VOLUME_RATIO          "SetVolumeRatio"
+void
+gst_pulse_set_volume_ratio (uint32_t stream_index, const char *direction, double ratio)
+{
+  GDBusConnection *conn = NULL;
+  GError *err = NULL;
+  GVariant *result = NULL;
+  const gchar *dbus_ret = NULL;
+
+  conn = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &err);
+  if (!conn || err) {
+      GST_ERROR ("g_bus_get_sync() error (%s)", err ? err->message : NULL);
+    if (err)
+      g_error_free (err);
+    return;
+  }
+
+  result = g_dbus_connection_call_sync (conn,
+        PA_BUS_NAME,
+        PA_STREAM_MANAGER_OBJECT_PATH,
+        PA_STREAM_MANAGER_INTERFACE,
+        PA_STREAM_MANAGER_METHOD_NAME_SET_VOLUME_RATIO,
+        g_variant_new("(sud)", direction, stream_index, ratio),
+        G_VARIANT_TYPE("(s)"),
+        G_DBUS_CALL_FLAGS_NONE,
+        1000,
+        NULL,
+        &err);
+  if (!result || err) {
+    GST_ERROR ("g_dbus_connection_call_sync() for SET_VOLUME_RATIO error (%s)", err ? err->message : NULL);
+    if (err)
+      g_error_free (err);
+    goto finish;
+  }
+  g_variant_get (result, "(&s)", &dbus_ret);
+  GST_DEBUG ("SET_VOLUME_RATIO returns value(%s) for stream index(%u), ratio(%f)", dbus_ret, stream_index, ratio);
+
+finish:
+  g_variant_unref(result);
+  g_object_unref(conn);
+
+  return;
+}
+#endif
+
 GstCaps *
 gst_pulse_fix_pcm_caps (GstCaps * incaps)
 {
index c70369f..67f4a4c 100644 (file)
@@ -92,6 +92,10 @@ pa_proplist *gst_pulse_make_proplist (const GstStructure *properties);
 GstStructure *gst_pulse_make_structure (pa_proplist *properties);
 
 GstCaps * gst_pulse_format_info_to_caps (pa_format_info * format);
+
+#ifdef __TIZEN__
+void gst_pulse_set_volume_ratio (uint32_t stream_index, const char *direction, double ratio);
+#endif
 GstCaps * gst_pulse_fix_pcm_caps (GstCaps * incaps);
 
 #endif
index aba69be..4a3821c 100644 (file)
@@ -144,6 +144,11 @@ enum
 #define REDUCE_BLOCKSIZE_FACTOR 0.5
 #define GROW_TIME_LIMIT (1 * GST_SECOND)
 
+#ifdef TIZEN_FEATURE_SOUP_MODIFICATION
+#define DLNA_OP_TIMED_SEEK  0x02
+#define DLNA_OP_BYTE_SEEK   0x01
+#endif
+
 static void gst_soup_http_src_uri_handler_init (gpointer g_iface,
     gpointer iface_data);
 static void gst_soup_http_src_finalize (GObject * gobject);
@@ -458,6 +463,18 @@ gst_soup_http_src_reset (GstSoupHTTPSrc * src)
   src->increase_blocksize_count = 0;
   src->last_socket_read_time = 0;
 
+#ifdef TIZEN_FEATURE_SOUP_MODIFICATION
+  if (src->dash_oldest_segment) {
+    g_free (src->dash_oldest_segment);
+    src->dash_oldest_segment = NULL;
+  }
+  if (src->dash_newest_segment) {
+    g_free (src->dash_newest_segment);
+    src->dash_newest_segment = NULL;
+  }
+  src->dlna_opt = 0;
+#endif
+
   g_cancellable_reset (src->cancellable);
   g_mutex_lock (&src->mutex);
   if (src->input_stream) {
@@ -508,6 +525,12 @@ gst_soup_http_src_init (GstSoupHTTPSrc * src)
   src->max_retries = DEFAULT_RETRIES;
   src->method = DEFAULT_SOUP_METHOD;
   src->minimum_blocksize = gst_base_src_get_blocksize (GST_BASE_SRC_CAST (src));
+#ifdef TIZEN_FEATURE_SOUP_MODIFICATION
+  src->dash_oldest_segment = NULL;
+  src->dash_newest_segment = NULL;
+  src->received_total = 0;
+  src->dlna_opt = 0;
+#endif
   proxy = g_getenv ("http_proxy");
   if (!gst_soup_http_src_set_proxy (src, proxy)) {
     GST_WARNING_OBJECT (src,
@@ -718,7 +741,6 @@ gst_soup_http_src_get_property (GObject * object, guint prop_id,
         g_value_set_static_string (value, "");
       else {
         char *proxy = soup_uri_to_string (src->proxy, FALSE);
-
         g_value_set_string (value, proxy);
         g_free (proxy);
       }
@@ -811,7 +833,14 @@ gst_soup_http_src_add_range_header (GstSoupHTTPSrc * src, guint64 offset,
   gint rc;
 
   soup_message_headers_remove (src->msg->request_headers, "Range");
-  if (offset || stop_offset != -1) {
+
+/* This changes are needed to enable Seekable Contents from server.
+   We have observed that , for few specific networks ( VODAFONE ) , without theabove headers ,
+   Youtube is sending non-seekable contents to the Client. */
+#ifndef TIZEN_FEATURE_SOUP_MODIFICATION
+  if (offset || stop_offset != -1)
+#endif
+  {
     if (stop_offset != -1) {
       g_assert (offset != stop_offset);
 
@@ -1118,6 +1147,29 @@ insert_http_header (const gchar * name, const gchar * value, gpointer user_data)
   }
 }
 
+#ifdef TIZEN_FEATURE_SOUP_MODIFICATION
+static void
+gst_soup_http_src_headers_foreach (const gchar * name, const gchar * val,
+    gpointer src)
+{
+  GST_INFO_OBJECT (src, " %s: %s", name, val);
+
+  if (g_ascii_strcasecmp (name, "Dash-Oldest-Segment") == 0) {
+    if (val) {
+      GstSoupHTTPSrc * tmp = src;
+      tmp->dash_oldest_segment = g_strdup (val);
+      GST_INFO_OBJECT (src, "Dash-Oldest-Segment set as %s ", tmp->dash_oldest_segment);
+    }
+  } else if (g_ascii_strcasecmp (name, "Dash-Newest-Segment") == 0) {
+    if (val) {
+      GstSoupHTTPSrc * tmp = src;
+      tmp->dash_newest_segment = g_strdup (val);
+      GST_INFO_OBJECT (src, "Dash-Newest-Segment set as %s ", tmp->dash_newest_segment);
+    }
+  }
+}
+#endif
+
 static GstFlowReturn
 gst_soup_http_src_got_headers (GstSoupHTTPSrc * src, SoupMessage * msg)
 {
@@ -1129,9 +1181,15 @@ gst_soup_http_src_got_headers (GstSoupHTTPSrc * src, SoupMessage * msg)
   GstEvent *http_headers_event;
   GstStructure *http_headers, *headers;
   const gchar *accept_ranges;
+#ifdef TIZEN_FEATURE_SOUP_MODIFICATION
+  gint64 start = 0, stop = 0, total = 0;
+#endif
 
-  GST_INFO_OBJECT (src, "got headers");
-
+  GST_INFO_OBJECT (src, "got headers : %d", msg->status_code);
+#ifdef TIZEN_FEATURE_SOUP_MODIFICATION
+  soup_message_headers_foreach (msg->response_headers,
+      gst_soup_http_src_headers_foreach, src);
+#endif
   if (msg->status_code == SOUP_STATUS_PROXY_AUTHENTICATION_REQUIRED &&
       src->proxy_id && src->proxy_pw) {
     /* wait for authenticate callback */
@@ -1175,12 +1233,69 @@ gst_soup_http_src_got_headers (GstSoupHTTPSrc * src, SoupMessage * msg)
   gst_event_replace (&src->http_headers_event, http_headers_event);
   gst_event_unref (http_headers_event);
 
+#ifdef TIZEN_FEATURE_SOUP_MODIFICATION
+  /* Parse DLNA OP CODE */
+  if ((value = soup_message_headers_get_one
+        (msg->response_headers, "contentFeatures.dlna.org")) != NULL) {
+    gchar **token = NULL;
+    gchar **ptr = NULL;
+
+    GST_DEBUG_OBJECT (src, "DLNA server response");
+
+    token = g_strsplit (value, ";", 0);
+    for (ptr = token ; *ptr ; ptr++) {
+      gchar *tmp = NULL;
+      gchar *op_code = NULL;
+
+      if (!strlen (*ptr))
+        continue;
+
+      tmp = g_ascii_strup (*ptr, strlen (*ptr));
+      if (!strstr (tmp, "DLNA.ORG_OP")) {
+        g_free (tmp);
+        continue;
+      }
+
+      g_free (tmp);
+
+      op_code = strchr (*ptr, '=');
+      if (op_code) {
+        op_code++;
+
+        src->dlna_opt = (atoi (op_code) / 10 << 1) | (atoi (op_code) % 10);
+        GST_DEBUG_OBJECT (src, "dlna op code: %s (0x%X)", op_code, src->dlna_opt);
+        break;
+      }
+    }
+    g_strfreev (token);
+  }
+#endif
+
   /* Parse Content-Length. */
   if (SOUP_STATUS_IS_SUCCESSFUL (msg->status_code) &&
       (soup_message_headers_get_encoding (msg->response_headers) ==
           SOUP_ENCODING_CONTENT_LENGTH)) {
+#ifdef TIZEN_FEATURE_SOUP_MODIFICATION
+      if (msg->status_code == SOUP_STATUS_PARTIAL_CONTENT) {
+        newsize = src->request_position +
+            soup_message_headers_get_content_length (msg->response_headers);
+      } else {
+        if (soup_message_headers_get_content_range(msg->response_headers, &start, &stop, &total) && (total > 0)) {
+          GST_DEBUG_OBJECT (src, "get range header : %" G_GINT64_FORMAT
+                                  "~%" G_GINT64_FORMAT"/%"G_GINT64_FORMAT, start, stop, total);
+          newsize = (guint64)total;
+        } else {
+          if ((src->have_size) && (src->content_size <= src->request_position)) {
+            newsize = src->content_size;
+          } else {
+            newsize = soup_message_headers_get_content_length (msg->response_headers);
+          }
+        }
+      }
+#else
     newsize = src->request_position +
         soup_message_headers_get_content_length (msg->response_headers);
+#endif
     if (!src->have_size || (src->content_size != newsize)) {
       src->content_size = newsize;
       src->have_size = TRUE;
@@ -1203,6 +1318,21 @@ gst_soup_http_src_got_headers (GstSoupHTTPSrc * src, SoupMessage * msg)
     if (g_ascii_strcasecmp (accept_ranges, "none") == 0)
       src->seekable = FALSE;
   }
+#ifdef TIZEN_FEATURE_SOUP_MODIFICATION
+  else if (src->dlna_opt & DLNA_OP_BYTE_SEEK) {
+    if (src->have_size) {
+      GST_DEBUG_OBJECT (src, "DLNA server is seekable");
+      src->seekable = TRUE;
+    }
+  }
+  /* The Range request header is always included.
+   * @ref gst_soup_http_src_add_range_header() */
+  else if ((msg->status_code == SOUP_STATUS_OK) &&
+    (soup_message_headers_get_content_range (msg->response_headers, &start, &stop, &total) == FALSE)) {
+    GST_DEBUG_OBJECT (src, "there is no accept range header");
+    src->seekable = FALSE;
+  }
+#endif
 
   /* Icecast stuff */
   tag_list = gst_tag_list_new_empty ();
@@ -1501,6 +1631,14 @@ gst_soup_http_src_build_message (GstSoupHTTPSrc * src, const gchar * method)
     soup_message_headers_append (src->msg->request_headers, "icy-metadata",
         "1");
   }
+
+#ifdef TIZEN_FEATURE_SOUP_MODIFICATION
+  /* This changes are needed to enable Seekable Contents from server.
+   We have observed that , for few specific networks ( VODAFONE ) , without theabove headers ,
+   Youtube is sending non-seekable contents to the Client. */
+  soup_message_headers_append (src->msg->request_headers, "Accept-Ranges","bytes");
+#endif
+
   if (src->cookies) {
     gchar **cookie;
 
@@ -1530,6 +1668,11 @@ gst_soup_http_src_build_message (GstSoupHTTPSrc * src, const gchar * method)
 
   gst_soup_http_src_add_extra_headers (src);
 
+#ifdef TIZEN_FEATURE_SOUP_MODIFICATION
+  soup_message_headers_foreach (src->msg->request_headers,
+      gst_soup_http_src_headers_foreach, src);
+#endif
+
   return TRUE;
 }
 
@@ -1622,8 +1765,14 @@ gst_soup_http_src_do_request (GstSoupHTTPSrc * src, const gchar * method)
   ret = gst_soup_http_src_send_message (src);
 
   /* Check if Range header was respected. */
+#ifdef TIZEN_FEATURE_SOUP_MODIFICATION
+  if (ret == GST_FLOW_OK && src->request_position > 0 &&
+      (src->msg->status_code != SOUP_STATUS_PARTIAL_CONTENT) &&
+         (src->request_position < src->content_size)) {
+#else
   if (ret == GST_FLOW_OK && src->request_position > 0 &&
       src->msg->status_code != SOUP_STATUS_PARTIAL_CONTENT) {
+#endif
     src->seekable = FALSE;
     GST_ELEMENT_ERROR_WITH_DETAILS (src, RESOURCE, SEEK,
         (_("Server does not support seeking.")),
@@ -1751,6 +1900,9 @@ gst_soup_http_src_read_buffer (GstSoupHTTPSrc * src, GstBuffer ** outbuf)
     GST_BUFFER_OFFSET (*outbuf) = bsrc->segment.position;
     ret = GST_FLOW_OK;
     gst_soup_http_src_update_position (src, read_bytes);
+#ifdef TIZEN_FEATURE_SOUP_MODIFICATION
+    src->received_total += read_bytes;
+#endif
 
     /* Got some data, reset retry counter */
     src->retry_count = 0;
@@ -1879,6 +2031,16 @@ gst_soup_http_src_start (GstBaseSrc * bsrc)
 
   GST_DEBUG_OBJECT (src, "start(\"%s\")", src->location);
 
+#ifdef TIZEN_FEATURE_SOUP_MODIFICATION
+  if (src->dash_oldest_segment) {
+    g_free (src->dash_oldest_segment);
+    src->dash_oldest_segment = NULL;
+  }
+  if (src->dash_newest_segment) {
+    g_free (src->dash_newest_segment);
+    src->dash_newest_segment = NULL;
+  }
+#endif
   return gst_soup_http_src_session_open (src);
 }
 
@@ -1907,6 +2069,13 @@ gst_soup_http_src_change_state (GstElement * element, GstStateChange transition)
   src = GST_SOUP_HTTP_SRC (element);
 
   switch (transition) {
+#ifdef TIZEN_FEATURE_SOUP_MODIFICATION
+    case GST_STATE_CHANGE_PAUSED_TO_READY:
+      GST_WARNING_OBJECT (src, "Last read pos"
+            ": %" G_GINT64_FORMAT ", received total : %" G_GINT64_FORMAT,
+            src->read_position, src->received_total);
+      break;
+#endif
     case GST_STATE_CHANGE_READY_TO_NULL:
       gst_soup_http_src_session_close (src);
       break;
@@ -2096,6 +2265,13 @@ gst_soup_http_src_query (GstBaseSrc * bsrc, GstQuery * query)
     case GST_QUERY_SCHEDULING:
       gst_query_parse_scheduling (query, &flags, &minsize, &maxsize, &align);
       flags |= GST_SCHEDULING_FLAG_BANDWIDTH_LIMITED;
+
+#ifdef TIZEN_FEATURE_SOUP_MODIFICATION
+      if (gst_soup_http_src_is_seekable(bsrc)) {
+          GST_DEBUG_OBJECT (src, "set seekable flag");
+          flags |= GST_SCHEDULING_FLAG_SEEKABLE;
+      }
+#endif
       gst_query_set_scheduling (query, flags, minsize, maxsize, align);
       break;
     default:
index f848cde..74a34bb 100644 (file)
@@ -9,7 +9,7 @@
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more 
+ * Library General Public License for more
  */
 
 #ifndef __GST_SOUP_HTTP_SRC_H__
@@ -117,6 +117,13 @@ struct _GstSoupHTTPSrc {
   GstEvent *http_headers_event;
 
   gint64 last_socket_read_time;
+
+#ifdef TIZEN_FEATURE_SOUP_MODIFICATION
+  gchar *dash_oldest_segment;
+  gchar *dash_newest_segment;
+  guint64 received_total;    /* temp: for debugging */
+  guint dlna_opt;            /* DLNA server option */
+#endif
 };
 
 struct _GstSoupHTTPSrcClass {
index 03adba8..92dcdb7 100644 (file)
@@ -742,10 +742,15 @@ gst_vpx_dec_handle_frame (GstVideoDecoder * decoder, GstVideoCodecFrame * frame)
   img = vpx_codec_get_frame (&dec->decoder, &iter);
   if (img) {
     if (vpxclass->get_frame_format (dec, img, &fmt) == FALSE) {
+#ifndef __TIZEN__
       vpx_img_free (img);
+#endif
       GST_ELEMENT_ERROR (decoder, LIBRARY, ENCODE,
           ("Failed to decode frame"), ("Unsupported color format %d",
               img->fmt));
+#ifdef __TIZEN__
+      vpx_img_free (img);
+#endif
       gst_video_codec_frame_unref (frame);
       return GST_FLOW_ERROR;
     }
index b282873..1fb5cb0 100644 (file)
@@ -75,6 +75,15 @@ GST_DEBUG_CATEGORY_STATIC (aacparse_debug);
                                    headers prepended during raw to ADTS
                                    conversion */
 
+#ifdef TIZEN_FEATURE_AACPARSE_MODIFICATION      /* to get more accurate duration */
+#define AAC_MAX_ESTIMATE_DURATION_BUF (1024 * 1024)     /* use first 1 Mbyte */
+#define AAC_SAMPLE_PER_FRAME 1024
+
+#define AAC_MAX_PULL_RANGE_BUF  (1 * 1024 * 1024)       /* 1 MByte */
+#define AAC_LARGE_FILE_SIZE     (2 * 1024 * 1024)       /* 2 MByte */
+#define gst_aac_parse_parent_class parent_class
+#endif
+
 #define AAC_FRAME_DURATION(parse) (GST_SECOND/parse->frames_per_sec)
 
 static const gint loas_sample_rate_table[16] = {
@@ -106,12 +115,36 @@ static gboolean gst_aac_parse_read_audio_specific_config (GstAacParse *
     aacparse, GstBitReader * br, gint * object_type, gint * sample_rate,
     gint * channels, gint * frame_samples);
 
+#ifdef TIZEN_FEATURE_AACPARSE_MODIFICATION
+static guint gst_aac_parse_adts_get_fast_frame_len (const guint8 * data);
+/* make full aac(adts) index table when seek */
+static gboolean gst_aac_parse_adts_src_eventfunc (GstBaseParse * parse,
+    GstEvent * event);
+int get_aac_parse_get_adts_frame_length (const unsigned char *data,
+    gint64 offset);
+static gboolean gst_aac_parse_estimate_duration (GstBaseParse * parse);
+static void gst_aac_parse_check_byte_seekability (GstBaseParse * parse);
+#endif
 
 #define gst_aac_parse_parent_class parent_class
 G_DEFINE_TYPE (GstAacParse, gst_aac_parse, GST_TYPE_BASE_PARSE);
 GST_ELEMENT_REGISTER_DEFINE (aacparse, "aacparse",
     GST_RANK_PRIMARY + 1, GST_TYPE_AAC_PARSE);
 
+#ifdef TIZEN_FEATURE_AACPARSE_MODIFICATION
+static inline gint
+gst_aac_parse_get_sample_rate_from_index (guint sr_idx)
+{
+  static const guint aac_sample_rates[] = { 96000, 88200, 64000, 48000, 44100,
+    32000, 24000, 22050, 16000, 12000, 11025, 8000
+  };
+
+  if (sr_idx < G_N_ELEMENTS (aac_sample_rates))
+    return aac_sample_rates[sr_idx];
+  GST_WARNING ("Invalid sample rate index %u", sr_idx);
+  return 0;
+}
+#endif
 /**
  * gst_aac_parse_class_init:
  * @klass: #GstAacParseClass.
@@ -159,6 +192,10 @@ gst_aac_parse_init (GstAacParse * aacparse)
 
   aacparse->last_parsed_sample_rate = 0;
   aacparse->last_parsed_channels = 0;
+#ifdef TIZEN_FEATURE_AACPARSE_MODIFICATION
+  /* to get more correct duration */
+  aacparse->first_frame = TRUE;
+#endif
 }
 
 
@@ -229,6 +266,19 @@ gst_aac_parse_set_src_caps (GstAacParse * aacparse, GstCaps * sink_caps)
   if (stream_format)
     gst_structure_set (s, "stream-format", G_TYPE_STRING, stream_format, NULL);
 
+#ifdef TIZEN_FEATURE_AACPARSE_MODIFICATION
+  if (!gst_structure_get_value (s, "codec_data")) {
+    GstBuffer *codec_data_buffer;
+    GST_WARNING("Insert codec_data to src_caps");
+    /* The codec_data data is according to AudioSpecificConfig,
+       ISO/IEC 14496-3, 1.6.2.1 */
+    codec_data_buffer = gst_buffer_new_and_alloc (2);
+    gst_buffer_fill (codec_data_buffer, 0, codec_data, 2);
+    gst_caps_set_simple (src_caps, "codec_data", GST_TYPE_BUFFER, codec_data_buffer, NULL);
+    gst_buffer_unref (codec_data_buffer);
+  }
+#endif
+
   peercaps = gst_pad_peer_query_caps (GST_BASE_PARSE_SRC_PAD (aacparse), NULL);
   if (peercaps && !gst_caps_can_intersect (src_caps, peercaps)) {
     GST_DEBUG_OBJECT (GST_BASE_PARSE (aacparse)->srcpad,
@@ -1366,6 +1416,19 @@ gst_aac_parse_handle_frame (GstBaseParse * parse,
       gst_base_parse_set_frame_rate (GST_BASE_PARSE (aacparse),
           aacparse->sample_rate, aacparse->frame_samples, 2, 2);
     }
+#ifdef TIZEN_FEATURE_AACPARSE_MODIFICATION
+    if (aacparse->first_frame == TRUE) {
+      gboolean ret = FALSE;
+      aacparse->first_frame = FALSE;
+
+      ret = gst_aac_parse_estimate_duration (parse);
+      if (!ret) {
+        GST_WARNING_OBJECT (aacparse, "can not estimate total duration");
+        ret = GST_FLOW_NOT_SUPPORTED;
+      }
+      gst_aac_parse_check_byte_seekability (parse);
+    }
+#endif
   } else if (aacparse->header_type == DSPAAC_HEADER_LOAS) {
     gboolean setcaps = FALSE;
 
@@ -1407,6 +1470,19 @@ gst_aac_parse_handle_frame (GstBaseParse * parse,
           aacparse->sample_rate, aacparse->frame_samples, 2, 2);
     }
   }
+#ifdef TIZEN_FEATURE_AACPARSE_MODIFICATION
+  else if (aacparse->header_type == DSPAAC_HEADER_ADIF) {
+    /* to get more correct duration */
+    float estimated_duration = 0;
+    gint64 total_file_size;
+    gst_base_parse_get_upstream_size (parse, &total_file_size);
+    estimated_duration =
+        ((total_file_size * 8) / (float) (aacparse->bitrate * 1000)) *
+        GST_SECOND;
+    gst_base_parse_set_duration (parse, GST_FORMAT_TIME,
+        estimated_duration * 1000, 0);
+  }
+#endif
 
   if (aacparse->header_type == DSPAAC_HEADER_NONE
       && aacparse->output_header_type == DSPAAC_HEADER_ADTS) {
@@ -1672,6 +1748,619 @@ gst_aac_parse_src_event (GstBaseParse * parse, GstEvent * event)
     aacparse->last_parsed_channels = 0;
     aacparse->last_parsed_sample_rate = 0;
   }
-
+#ifdef TIZEN_FEATURE_AACPARSE_MODIFICATION
+  GST_DEBUG ("Entering gst_aac_parse_src_event header type = %d",
+      aacparse->header_type);
+  if (aacparse->header_type == DSPAAC_HEADER_ADTS)
+    return gst_aac_parse_adts_src_eventfunc (parse, event);
+#endif
   return GST_BASE_PARSE_CLASS (parent_class)->src_event (parse, event);
+
+}
+
+#ifdef TIZEN_FEATURE_AACPARSE_MODIFICATION
+/**
+ * get_aac_parse_get_adts_framelength:
+ * @data: #GstBufferData.
+ * @offset: #GstBufferData offset
+ *
+ * Implementation to get adts framelength by using first some frame.
+ *
+ * Returns: frame size
+ */
+int
+get_aac_parse_get_adts_frame_length (const unsigned char *data, gint64 offset)
+{
+  const gint adts_header_length_no_crc = 7;
+  const gint adts_header_length_with_crc = 9;
+  gint frame_size = 0;
+  gint protection_absent;
+  gint head_size;
+
+  /* check of syncword */
+  if ((data[offset + 0] != 0xff) || ((data[offset + 1] & 0xf6) != 0xf0)) {
+    GST_ERROR ("check sync word is fail\n");
+    return -1;
+  }
+
+  /* check of protection absent */
+  protection_absent = (data[offset + 1] & 0x01);
+
+  /*check of frame length */
+  frame_size =
+      (data[offset + 3] & 0x3) << 11 | data[offset + 4] << 3 | data[offset +
+      5] >> 5;
+
+  /* check of header size */
+  /* protectionAbsent is 0 if there is CRC */
+  head_size =
+      protection_absent ? adts_header_length_no_crc :
+      adts_header_length_with_crc;
+  if (head_size > frame_size) {
+    GST_ERROR ("return frame length as 0 (frameSize %u < headSize %u)",
+        frame_size, head_size);
+    return 0;
+  }
+
+  return frame_size;
+}
+
+/**
+ * gst_aac_parse_estimate_duration:
+ * @parse: #GstBaseParse.
+ *
+ * Implementation to get estimated total duration by using first some frame.
+ *
+ * Returns: TRUE if we can get estimated total duraion
+ */
+static gboolean
+gst_aac_parse_estimate_duration (GstBaseParse * parse)
+{
+  gboolean ret = FALSE;
+  GstFlowReturn res = GST_FLOW_OK;
+  gint64 pull_size = 0, file_size = 0, offset = 0, num_frames = 0, duration = 0;
+  guint sample_rate_index = 0, sample_rate = 0, channel = 0;
+  guint frame_size = 0, frame_duration_us = 0, estimated_bitrate = 0;
+  guint lost_sync_count = 0;
+  GstClockTime estimated_duration = GST_CLOCK_TIME_NONE;
+  GstBuffer *buffer = NULL;
+  guint8 *buf = NULL;
+  gint i = 0;
+  GstPadMode pad_mode = GST_PAD_MODE_NONE;
+  GstAacParse *aacparse;
+  gint64 buffer_size = 0;
+  GstMapInfo map;
+
+  aacparse = GST_AAC_PARSE (parse);
+  GST_LOG_OBJECT (aacparse, "gst_aac_parse_estimate_duration enter");
+
+  /* check baseparse define these fuction */
+  gst_base_parse_get_pad_mode (parse, &pad_mode);
+  if (pad_mode != GST_PAD_MODE_PULL) {
+    GST_INFO_OBJECT (aacparse,
+        "aac parser is not pull mode. can not estimate duration");
+    return FALSE;
+  }
+
+  gst_base_parse_get_upstream_size (parse, &file_size);
+
+  if (file_size < ADIF_MAX_SIZE) {
+    GST_ERROR_OBJECT (aacparse, "file size is too short");
+    return FALSE;
+  }
+
+  pull_size = MIN (file_size, AAC_MAX_ESTIMATE_DURATION_BUF);
+
+  res = gst_pad_pull_range (parse->sinkpad, 0, pull_size, &buffer);
+  if (res != GST_FLOW_OK) {
+    GST_ERROR_OBJECT (aacparse, "gst_pad_pull_range failed!");
+    return FALSE;
+  }
+
+  gst_buffer_map (buffer, &map, GST_MAP_READ);
+  buf = map.data;
+  buffer_size = map.size;
+  if (buffer_size != pull_size) {
+    GST_ERROR_OBJECT (aacparse,
+        "We got different buffer_size(%" G_GINT64_FORMAT ") with pull_size(%"
+        G_GINT64_FORMAT ").", buffer_size, pull_size);
+  }
+
+  /* MODIFICATION : add defence codes for real buffer_size is different with pull_size */
+  for (i = 0; i < buffer_size; i++) {
+    if ((buf[i] == 0xff) && ((buf[i + 1] & 0xf6) == 0xf0)) {    /* aac sync word */
+      //guint profile = (buf[i+2] >> 6) & 0x3;
+      sample_rate_index = (buf[i + 2] >> 2) & 0xf;
+      sample_rate =
+          gst_aac_parse_get_sample_rate_from_index (sample_rate_index);
+      if (sample_rate == 0) {
+        GST_WARNING_OBJECT (aacparse, "Invalid sample rate index (0)");
+        goto EXIT;
+      }
+      channel = (buf[i + 2] & 0x1) << 2 | (buf[i + 3] >> 6);
+
+      GST_INFO_OBJECT (aacparse, "found sync. aac fs=%d, ch=%d", sample_rate,
+          channel);
+
+      /* count number of frames */
+      /* MODIFICATION : add defence codes for real buffer_size is different with pull_size */
+      //while (offset < pull_size) {
+      while (offset < buffer_size) {
+        frame_size = get_aac_parse_get_adts_frame_length (buf, i + offset);
+        if (frame_size == 0) {
+          GST_ERROR_OBJECT (aacparse,
+              "framesize error at offset %" G_GINT64_FORMAT, offset);
+          break;
+        } else if (frame_size == -1) {
+          offset++;
+          lost_sync_count++;    //  lost sync count limmitation 2K Bytes
+          if (lost_sync_count > (1024 * 2)) {
+            GST_WARNING_OBJECT (aacparse,
+                "lost_sync_count is larger than 2048");
+            goto EXIT;
+          }
+        } else {
+          offset += frame_size;
+          num_frames++;
+          lost_sync_count = 0;
+        }
+      }                         /* while */
+
+      /* if we can got full file, we can calculate the accurate duration */
+      /* MODIFICATION : add defence codes for real buffer_size is different with pull_size */
+      //if (pull_size == file_size) {
+      if (buffer_size == file_size) {
+        gfloat duration_for_one_frame = 0;
+        GstClockTime calculated_duration = GST_CLOCK_TIME_NONE;
+
+        GST_INFO_OBJECT (aacparse,
+            "we got total file (%" G_GINT64_FORMAT
+            " bytes). do not estimate but make Accurate total duration.",
+            pull_size);
+
+        duration_for_one_frame =
+            (gfloat) AAC_SAMPLE_PER_FRAME / (gfloat) sample_rate;
+        calculated_duration =
+            num_frames * duration_for_one_frame * 1000 * 1000 * 1000;
+
+        GST_INFO_OBJECT (aacparse, "duration_for_one_frame %f ms",
+            duration_for_one_frame);
+        GST_INFO_OBJECT (aacparse, "calculated duration = %" GST_TIME_FORMAT,
+            GST_TIME_ARGS (calculated_duration));
+        /* 0 means disable estimate */
+        gst_base_parse_set_duration (parse, GST_FORMAT_TIME,
+            calculated_duration, 0);
+
+      } else {
+        GST_INFO_OBJECT (aacparse,
+            "we got %" G_GUINT64_FORMAT " bytes in total file (%"
+            G_GINT64_FORMAT "). can not make accurate duration but Estimate.",
+            pull_size, file_size);
+        frame_duration_us =
+            (1024 * 1000000ll + (sample_rate - 1)) / sample_rate;
+        duration = num_frames * frame_duration_us;
+
+        if (duration == 0) {
+          GST_WARNING_OBJECT (aacparse, "Invalid duration");
+          goto EXIT;
+        }
+        estimated_bitrate =
+            (gint) ((gfloat) (offset * 8) / (gfloat) (duration / 1000));
+
+        if (estimated_bitrate == 0) {
+          GST_WARNING_OBJECT (aacparse, "Invalid estimated_bitrate");
+          goto EXIT;
+        }
+        estimated_duration =
+            (GstClockTime) ((file_size * 8) / (estimated_bitrate * 1000)) *
+            GST_SECOND;
+
+        GST_INFO_OBJECT (aacparse, "number of frame = %" G_GINT64_FORMAT,
+            num_frames);
+        GST_INFO_OBJECT (aacparse, "duration = %" G_GINT64_FORMAT,
+            duration / 1000000);
+        GST_INFO_OBJECT (aacparse, "byte = %" G_GINT64_FORMAT, offset);
+        GST_INFO_OBJECT (aacparse, "estimated bitrate = %d bps",
+            estimated_bitrate);
+        GST_INFO_OBJECT (aacparse, "estimated duration = %" GST_TIME_FORMAT,
+            GST_TIME_ARGS (estimated_duration));
+
+        gst_base_parse_set_average_bitrate (parse, estimated_bitrate * 1000);
+        /* set update_interval as duration(sec)/2 */
+        gst_base_parse_set_duration (parse, GST_FORMAT_TIME, estimated_duration,
+            (gint) (duration / 2));
+      }
+
+      break;
+    }
+  }
+  ret = TRUE;
+
+EXIT:
+  gst_buffer_unmap (buffer, &map);
+  gst_buffer_unref (buffer);
+  return ret;
+}
+
+
+/* perform seek in push based mode:
+   find BYTE position to move to based on time and delegate to upstream
+*/
+static gboolean
+gst_aac_audio_parse_do_push_seek (GstBaseParse * parse,
+    GstPad * pad, GstEvent * event)
+{
+  GstAacParse *aacparse = GST_AAC_PARSE (parse);
+  gdouble rate;
+  GstFormat format;
+  GstSeekFlags flags;
+  GstSeekType cur_type, stop_type;
+  gint64 cur, stop;
+  gboolean res;
+  gint64 byte_cur;
+  gint64 esimate_byte;
+  gint32 frame_dur;
+  gint64 upstream_total_bytes = 0;
+  GstFormat fmt = GST_FORMAT_BYTES;
+
+  GST_INFO_OBJECT (parse, "doing aac push-based seek");
+
+  gst_event_parse_seek (event, &rate, &format, &flags, &cur_type, &cur,
+      &stop_type, &stop);
+
+  /* FIXME, always play to the end */
+  stop = -1;
+
+  /* only forward streaming and seeking is possible */
+  if (rate <= 0)
+    goto unsupported_seek;
+
+  if (cur == 0) {
+    /* handle rewind only */
+    cur_type = GST_SEEK_TYPE_SET;
+    byte_cur = 0;
+    stop_type = GST_SEEK_TYPE_NONE;
+    stop = -1;
+    flags |= GST_SEEK_FLAG_FLUSH;
+  } else {
+    /* handle normal seek */
+    cur_type = GST_SEEK_TYPE_SET;
+    stop_type = GST_SEEK_TYPE_NONE;
+    stop = -1;
+    flags |= GST_SEEK_FLAG_FLUSH;
+
+    esimate_byte = (cur / (1000 * 1000)) * aacparse->frame_byte;
+    if (aacparse->sample_rate > 0)
+      frame_dur = (aacparse->spf * 1000) / aacparse->sample_rate;
+    else
+      goto unsupported_seek;
+    if (frame_dur > 0)
+      byte_cur = esimate_byte / (frame_dur);
+    else
+      goto unsupported_seek;
+
+    GST_INFO_OBJECT (parse, "frame_byte(%d) spf(%d)  rate (%d) ",
+        aacparse->frame_byte, aacparse->spf, aacparse->sample_rate);
+    GST_INFO_OBJECT (parse,
+        "seek cur (%" G_GINT64_FORMAT ") = (%" GST_TIME_FORMAT ") ", cur,
+        GST_TIME_ARGS (cur));
+    GST_INFO_OBJECT (parse,
+        "esimate_byte(%" G_GINT64_FORMAT ")  esimate_byte (%d)", esimate_byte,
+        frame_dur);
+  }
+
+  /* obtain real upstream total bytes */
+  if (!gst_pad_peer_query_duration (parse->sinkpad, fmt, &upstream_total_bytes))
+    upstream_total_bytes = 0;
+  GST_INFO_OBJECT (aacparse,
+      "gst_pad_query_peer_duration -upstream_total_bytes (%" G_GUINT64_FORMAT
+      ")", upstream_total_bytes);
+  aacparse->file_size = upstream_total_bytes;
+
+  if ((byte_cur == -1) || (byte_cur > aacparse->file_size)) {
+    GST_INFO_OBJECT (parse,
+        "[WEB-ERROR] seek cur (%" G_GINT64_FORMAT ") > file_size (%"
+        G_GINT64_FORMAT ") ", cur, aacparse->file_size);
+    goto abort_seek;
+  }
+
+  GST_INFO_OBJECT (parse,
+      "Pushing BYTE seek rate %g, " "start %" G_GINT64_FORMAT ", stop %"
+      G_GINT64_FORMAT, rate, byte_cur, stop);
+
+  if (!(flags & GST_SEEK_FLAG_KEY_UNIT)) {
+    GST_INFO_OBJECT (parse,
+        "Requested seek time: %" GST_TIME_FORMAT ", calculated seek offset: %"
+        G_GUINT64_FORMAT, GST_TIME_ARGS (cur), byte_cur);
+  }
+
+  /* BYTE seek event */
+  event =
+      gst_event_new_seek (rate, GST_FORMAT_BYTES, flags, cur_type, byte_cur,
+      stop_type, stop);
+  res = gst_pad_push_event (parse->sinkpad, event);
+
+  return res;
+
+  /* ERRORS */
+
+abort_seek:
+  {
+    GST_DEBUG_OBJECT (parse,
+        "could not determine byte position to seek to, " "seek aborted.");
+    return FALSE;
+  }
+
+unsupported_seek:
+  {
+    GST_DEBUG_OBJECT (parse, "unsupported seek, seek aborted.");
+    return FALSE;
+  }
+}
+
+
+static guint
+gst_aac_parse_adts_get_fast_frame_len (const guint8 * data)
+{
+  int length;
+  if ((data[0] == 0xff) && ((data[1] & 0xf6) == 0xf0)) {
+    length =
+        ((data[3] & 0x03) << 11) | (data[4] << 3) | ((data[5] & 0xe0) >> 5);
+  } else {
+    length = 0;
+  }
+  return length;
+}
+
+/**
+ * gst_aac_parse_adts_src_eventfunc:
+ * @parse: #GstBaseParse. #event
+ *
+ * before baseparse handles seek event, make full amr index table.
+ *
+ * Returns: TRUE on success.
+ */
+static gboolean
+gst_aac_parse_adts_src_eventfunc (GstBaseParse * parse, GstEvent * event)
+{
+  gboolean handled = FALSE;
+  GstAacParse *aacparse = GST_AAC_PARSE (parse);
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEEK:
+    {
+      GstFlowReturn res = GST_FLOW_OK;
+      gint64 base_offset = 0, cur = 0;
+      gint32 frame_count = 1;   /* do not add first frame because it is already in index table */
+      gint64 second_count = 0;  /* initial 1 second */
+      gint64 total_file_size = 0, start_offset = 0;
+      GstClockTime current_ts = GST_CLOCK_TIME_NONE;
+      GstPadMode pad_mode = GST_PAD_MODE_NONE;
+
+      /* check baseparse define these fuction */
+      gst_base_parse_get_pad_mode (parse, &pad_mode);
+      if (pad_mode != GST_PAD_MODE_PULL) {
+        gboolean ret = FALSE;
+        GstPad *srcpad = parse->srcpad;
+        GST_INFO_OBJECT (aacparse, "aac parser is PUSH MODE.");
+        /* check NULL */
+        if (aacparse->byte_seekable) {
+          ret = gst_aac_audio_parse_do_push_seek (parse, srcpad, event);
+          if (!ret) {
+            GST_INFO_OBJECT (aacparse, "PUSH mode seek() failed, Trying base seek()");
+            goto aac_seek_null_exit;
+          }
+          return ret;
+        }
+        GST_INFO_OBJECT (aacparse, "not support byte seek");
+        goto aac_seek_null_exit;
+      }
+
+      gst_base_parse_get_upstream_size (parse, &total_file_size);
+      gst_base_parse_get_index_last_offset (parse, &start_offset);
+      gst_base_parse_get_index_last_ts (parse, &current_ts);
+
+      if (total_file_size > AAC_LARGE_FILE_SIZE) {
+        gst_base_parse_set_seek_mode (parse, 0);
+        GST_INFO_OBJECT (aacparse, "larger than big size (2MB).");
+        goto aac_seek_null_exit;
+      }
+
+      GST_DEBUG ("gst_aac_parse_adts_src_eventfunc GST_EVENT_SEEK enter");
+
+      if (total_file_size == 0 || start_offset >= total_file_size) {
+        GST_ERROR ("last index offset %" G_GINT64_FORMAT
+            " is larger than file size %" G_GINT64_FORMAT, start_offset,
+            total_file_size);
+        break;
+      }
+
+      gst_event_parse_seek (event, NULL, NULL, NULL, NULL, &cur, NULL, NULL);
+      if (cur <= current_ts) {
+        GST_INFO ("seek to %" GST_TIME_FORMAT " within index table %"
+            GST_TIME_FORMAT ". do not make index table", GST_TIME_ARGS (cur),
+            GST_TIME_ARGS (current_ts));
+        break;
+      } else {
+        GST_INFO ("seek to %" GST_TIME_FORMAT " without index table %"
+            GST_TIME_FORMAT ". make index table", GST_TIME_ARGS (cur),
+            GST_TIME_ARGS (current_ts));
+      }
+
+      GST_INFO ("make AAC(ADTS) Index Table. file_size  = %" G_GINT64_FORMAT
+          " last idx offset=%" G_GINT64_FORMAT ", last idx ts=%"
+          GST_TIME_FORMAT, total_file_size, start_offset,
+          GST_TIME_ARGS (current_ts));
+
+      base_offset = start_offset;       /* set base by start offset */
+      second_count = current_ts + GST_SECOND;   /* 1sec */
+
+      /************************************/
+      /* STEP 0: Setting parse information */
+      /************************************/
+      aacparse->spf = aacparse->frame_samples;
+      aacparse->frame_duration = (aacparse->spf * 1000 * 100) / aacparse->sample_rate;  /* duration per frame (msec) */
+      aacparse->frame_per_sec = (aacparse->sample_rate) / aacparse->spf;        /* frames per second (ea) */
+
+      /************************************/
+      /* STEP 1: MAX_PULL_RANGE_BUF cycle */
+      /************************************/
+      while (total_file_size - base_offset >= AAC_MAX_PULL_RANGE_BUF) {
+        gint64 offset = 0;
+        GstBuffer *buffer = NULL;
+        guint8 *buf = NULL;
+        GstMapInfo map;
+        GST_INFO ("gst_pad_pull_range %d bytes (from %" G_GINT64_FORMAT
+            ") use max size", AAC_MAX_PULL_RANGE_BUF, base_offset);
+        res =
+            gst_pad_pull_range (parse->sinkpad, base_offset,
+            base_offset + AAC_MAX_PULL_RANGE_BUF, &buffer);
+        if (res != GST_FLOW_OK) {
+          GST_ERROR ("gst_pad_pull_range failed!");
+          break;
+        }
+
+        gst_buffer_map (buffer, &map, GST_MAP_READ);
+        buf = map.data;
+        if (buf == NULL) {
+          gst_buffer_unmap (buffer, &map);
+          GST_WARNING ("buffer is NULL in make aac seek table's STEP1");
+          gst_buffer_unref (buffer);
+          goto aac_seek_null_exit;
+        }
+
+        while (offset <= AAC_MAX_PULL_RANGE_BUF) {
+          gint frame_size = 0;
+
+          /* make sure the values in the frame header look sane */
+          frame_size = gst_aac_parse_adts_get_fast_frame_len (buf);
+
+          if ((frame_size > 0)
+              && (frame_size < (AAC_MAX_PULL_RANGE_BUF - offset))) {
+            if (current_ts > second_count) {    /* 1 sec == xx frames. we make idx per sec */
+              gst_base_parse_add_index_entry (parse, base_offset + offset, current_ts, TRUE, TRUE);     /* force */
+              GST_DEBUG ("Adding  index ts=%" GST_TIME_FORMAT " offset %"
+                  G_GINT64_FORMAT, GST_TIME_ARGS (current_ts),
+                  base_offset + offset);
+              second_count += GST_SECOND;       /* 1sec */
+            }
+
+            current_ts += (aacparse->frame_duration * GST_MSECOND) / 100;       /* each frame is (frame_duration) ms */
+            offset += frame_size;
+            buf += frame_size;
+            frame_count++;
+          } else if (frame_size >= (AAC_MAX_PULL_RANGE_BUF - offset)) {
+            GST_DEBUG ("we need refill buffer");
+            break;
+          } else {
+            GST_WARNING ("we lost sync");
+            buf++;
+            offset++;
+          }
+        }                       /* while */
+
+        base_offset = base_offset + offset;
+
+        gst_buffer_unmap (buffer, &map);
+        gst_buffer_unref (buffer);
+      }                         /* end MAX buffer cycle */
+
+      /*******************************/
+      /* STEP 2: Remain Buffer cycle */
+      /*******************************/
+      if (total_file_size - base_offset > 0) {
+        gint64 offset = 0;
+        GstBuffer *buffer = NULL;
+        guint8 *buf = NULL;
+        GstMapInfo map;
+
+        GST_INFO ("gst_pad_pull_range %" G_GINT64_FORMAT " bytes (from %"
+            G_GINT64_FORMAT ") use remain_buf size",
+            total_file_size - base_offset, base_offset);
+        res =
+            gst_pad_pull_range (parse->sinkpad, base_offset, total_file_size,
+            &buffer);
+        if (res != GST_FLOW_OK) {
+          GST_ERROR ("gst_pad_pull_range failed!");
+          break;
+        }
+
+        gst_buffer_map (buffer, &map, GST_MAP_READ);
+        buf = map.data;
+        if (buf == NULL) {
+          gst_buffer_unmap (buffer, &map);
+          GST_WARNING ("buffer is NULL in make aac seek table's STEP2");
+          gst_buffer_unref (buffer);
+          goto aac_seek_null_exit;
+        }
+
+        while (base_offset + offset < total_file_size) {
+          gint frame_size = 0;
+
+          /* make sure the values in the frame header look sane */
+          frame_size = gst_aac_parse_adts_get_fast_frame_len (buf);
+
+          if ((frame_size > 0)
+              && (frame_size <= (total_file_size - (base_offset + offset)))) {
+            if (current_ts > second_count) {    /* 1 sec == xx frames. we make idx per sec */
+              gst_base_parse_add_index_entry (parse, base_offset + offset, current_ts, TRUE, TRUE);     /* force */
+              GST_DEBUG ("Adding  index ts=%" GST_TIME_FORMAT " offset %"
+                  G_GINT64_FORMAT, GST_TIME_ARGS (current_ts),
+                  base_offset + offset);
+              second_count += GST_SECOND;       /* 1sec */
+            }
+
+            current_ts += (aacparse->frame_duration * GST_MSECOND) / 100;       /* each frame is (frame_duration) ms */
+            offset += frame_size;
+            buf += frame_size;
+            frame_count++;
+          } else if (frame_size == 0) {
+            GST_DEBUG ("Frame size is 0 so, Decoding end..");
+            break;
+          } else {
+            GST_WARNING ("we lost sync");
+            buf++;
+            offset++;
+          }
+        }                       /* while */
+
+        gst_buffer_unmap (buffer, &map);
+        gst_buffer_unref (buffer);
+      }
+      /* end remain_buf buffer cycle */
+      GST_DEBUG ("gst_aac_parse_adts_src_eventfunc GST_EVENT_SEEK leave");
+    }
+      break;
+
+    default:
+      break;
+  }
+
+aac_seek_null_exit:
+
+  /* call baseparse src_event function to handle event */
+  handled = GST_BASE_PARSE_CLASS (parent_class)->src_event (parse, event);
+  return handled;
+}
+
+static void
+gst_aac_parse_check_byte_seekability (GstBaseParse * parse)
+{
+  GstQuery *query;
+  gboolean seekable = FALSE;
+  GstAacParse *aacparse = GST_AAC_PARSE (parse);
+  GST_LOG_OBJECT (aacparse, "gst_aac_parse_check_byte_seekability enter");
+
+  query = gst_query_new_seeking (GST_FORMAT_BYTES);
+  if (gst_pad_peer_query (parse->sinkpad, query))
+    gst_query_parse_seeking (query, NULL, &seekable, NULL, NULL);
+  else
+    GST_DEBUG_OBJECT (aacparse, "seeking query failed");
+
+  gst_query_unref (query);
+
+  GST_INFO_OBJECT (aacparse, "byte seekable: %d", seekable);
+
+  aacparse->byte_seekable = seekable;
 }
+#endif /* TIZEN_FEATURE_AACPARSE_MODIFICATION */
index 40c96ff..30ea6e5 100644 (file)
@@ -79,6 +79,21 @@ struct _GstAacParse {
   gint           mpegversion;
   gint           frame_samples;
 
+#ifdef TIZEN_FEATURE_AACPARSE_MODIFICATION
+  gboolean       first_frame; /* estimate duration once at the first time */
+  guint          hdr_bitrate;      /* estimated bitrate (bps) */
+  guint          spf;                      /* samples per frame = frame_samples */
+  guint          frame_duration; /* duration per frame (msec) */
+  guint          frame_per_sec; /* frames per second (ea) */
+  guint          bitstream_type; /* bitstream type - constant or variable */
+  guint          adif_header_length;
+  guint          num_program_config_elements;
+  guint          read_bytes;
+  gint64         file_size;
+  guint          frame_byte;
+  gboolean       byte_seekable;
+#endif
+
   GstAacHeaderType header_type;
   GstAacHeaderType output_header_type;
 
index f5e0fc2..c854863 100644 (file)
@@ -73,6 +73,17 @@ GST_DEBUG_CATEGORY_STATIC (mpeg_audio_parse_debug);
 
 #define MIN_FRAME_SIZE       6
 
+#ifdef TIZEN_FEATURE_MP3PARSE_MODIFICATION
+#define DEFAULT_CHECK_HTTP_SEEK FALSE
+
+/* Property */
+enum
+{
+  PROP_0,
+  PROP_CHECK_HTTP_SEEK
+};
+#endif
+
 static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src",
     GST_PAD_SRC,
     GST_PAD_ALWAYS,
@@ -94,6 +105,16 @@ static void gst_mpeg_audio_parse_finalize (GObject * object);
 
 static gboolean gst_mpeg_audio_parse_start (GstBaseParse * parse);
 static gboolean gst_mpeg_audio_parse_stop (GstBaseParse * parse);
+
+#ifdef TIZEN_FEATURE_MP3PARSE_MODIFICATION
+static void gst_mpeg_audio_parse_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec);
+static void gst_mpeg_audio_parse_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec);
+static gboolean gst_mpeg_audio_parse_src_eventfunc (GstBaseParse * parse,
+    GstEvent * event);
+#endif
+
 static GstFlowReturn gst_mpeg_audio_parse_handle_frame (GstBaseParse * parse,
     GstBaseParseFrame * frame, gint * skipsize);
 static GstFlowReturn gst_mpeg_audio_parse_pre_push_frame (GstBaseParse * parse,
@@ -170,6 +191,20 @@ gst_mpeg_audio_parse_class_init (GstMpegAudioParseClass * klass)
   parse_class->get_sink_caps =
       GST_DEBUG_FUNCPTR (gst_mpeg_audio_parse_get_sink_caps);
 
+#ifdef TIZEN_FEATURE_MP3PARSE_MODIFICATION
+  object_class->set_property =
+      GST_DEBUG_FUNCPTR (gst_mpeg_audio_parse_set_property);
+  object_class->get_property =
+      GST_DEBUG_FUNCPTR (gst_mpeg_audio_parse_get_property);
+
+  g_object_class_install_property (object_class, PROP_CHECK_HTTP_SEEK,
+      g_param_spec_boolean ("http-pull-mp3dec", "enable/disable",
+          "enable/disable mp3dec http seek pull mode",
+          DEFAULT_CHECK_HTTP_SEEK, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  /* T.B.D : make full mp3 index table when seek */
+  parse_class->src_event = gst_mpeg_audio_parse_src_eventfunc;
+#endif
+
   /* register tags */
 #define GST_TAG_CRC      "has-crc"
 #define GST_TAG_MODE     "channel-mode"
@@ -250,9 +285,56 @@ gst_mpeg_audio_parse_start (GstBaseParse * parse)
 
   gst_mpeg_audio_parse_reset (mp3parse);
 
+#ifdef TIZEN_FEATURE_MP3PARSE_MODIFICATION
+  if (mp3parse->http_seek_flag) {
+    /* Don't need Accurate Seek table (in http pull mode) */
+    GST_INFO_OBJECT (parse, "Enable (1) : mp3parse->http_seek_flag");
+  } else {
+    GST_INFO_OBJECT (parse, "Disable (0) : mp3parse->http_seek_flag");
+  }
+#endif
+
   return TRUE;
 }
 
+#ifdef TIZEN_FEATURE_MP3PARSE_MODIFICATION
+static void
+gst_mpeg_audio_parse_set_property (GObject * object, guint prop_id,
+    const GValue * value, GParamSpec * pspec)
+{
+  GstMpegAudioParse *mp3parse = GST_MPEG_AUDIO_PARSE (object);
+  GST_INFO_OBJECT (mp3parse, "set_property() START- prop_id(%d)", prop_id);
+  switch (prop_id) {
+    case PROP_CHECK_HTTP_SEEK:
+      mp3parse->http_seek_flag = g_value_get_boolean (value);
+      GST_INFO_OBJECT (mp3parse, "http_seek_flag(%d)",
+          mp3parse->http_seek_flag);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+gst_mpeg_audio_parse_get_property (GObject * object, guint prop_id,
+    GValue * value, GParamSpec * pspec)
+{
+  GstMpegAudioParse *mp3parse = GST_MPEG_AUDIO_PARSE (object);
+  GST_INFO_OBJECT (mp3parse, "get_property() START- prop_id(%d)", prop_id);
+  switch (prop_id) {
+    case PROP_CHECK_HTTP_SEEK:
+      g_value_set_boolean (value, mp3parse->http_seek_flag);
+      GST_INFO_OBJECT (mp3parse, "http_seek_flag(%d)",
+          mp3parse->http_seek_flag);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+#endif
+
 static gboolean
 gst_mpeg_audio_parse_stop (GstBaseParse * parse)
 {
@@ -1476,3 +1558,48 @@ gst_mpeg_audio_parse_get_sink_caps (GstBaseParse * parse, GstCaps * filter)
 
   return res;
 }
+
+#ifdef TIZEN_FEATURE_MP3PARSE_MODIFICATION
+/**
+ * gst_mpeg_audio_parse_src_eventfunc:
+ * @parse: #GstBaseParse. #event
+ *
+ * before baseparse handles seek event, check any mode and flag.
+ *
+ * Returns: TRUE on success.
+ */
+static gboolean
+gst_mpeg_audio_parse_src_eventfunc (GstBaseParse * parse, GstEvent * event)
+{
+  gboolean handled = FALSE;
+  GstMpegAudioParse *mp3parse;
+  mp3parse = GST_MPEG_AUDIO_PARSE (parse);
+
+  GST_DEBUG_OBJECT (parse, "handling event %d, %s", GST_EVENT_TYPE (event),
+      GST_EVENT_TYPE_NAME (event));
+
+  switch (GST_EVENT_TYPE (event)) {
+    case GST_EVENT_SEEK:
+    {
+      GST_INFO_OBJECT (mp3parse, "GST_EVENT_SEEK enter");
+      if (mp3parse->http_seek_flag) {
+        GST_INFO_OBJECT (mp3parse,
+            "souphttpsrc is PULL MODE (so accurate seek mode is OFF)");
+        /* Check the declaration of this function in the baseparse */
+        gst_base_parse_set_seek_mode (parse, 0);
+        goto mp3_seek_null_exit;
+      }
+      GST_INFO_OBJECT (mp3parse, "GST_EVENT_SEEK leave");
+      break;
+    }
+    default:
+      break;
+  }
+
+mp3_seek_null_exit:
+  /* call baseparse src_event function to handle event */
+  handled = GST_BASE_PARSE_CLASS (parent_class)->src_event (parse, event);
+
+  return handled;
+}
+#endif
index e7fa809..c54da57 100644 (file)
@@ -95,6 +95,10 @@ struct _GstMpegAudioParse {
   /* LAME info */
   guint32      encoder_delay;
   guint32      encoder_padding;
+#ifdef TIZEN_FEATURE_MP3PARSE_MODIFICATION
+  /* Additional info */
+  gboolean     http_seek_flag;
+#endif
 };
 
 /**
index e25085f..3794dd8 100644 (file)
@@ -2390,6 +2390,9 @@ gst_avi_demux_parse_stream (GstAviDemux * avi, GstBuffer * buf)
   /* no caps means no stream */
   if (!caps) {
     GST_ERROR_OBJECT (element, "Did not find caps for stream %s", padname);
+#ifdef TIZEN_FEATURE_AVIDEMUX_MODIFICATION
+    g_free (padname);
+#endif
     goto fail;
   }
 
index 51dee81..a044e59 100644 (file)
@@ -997,6 +997,15 @@ gst_flv_demux_push_tags (GstFlvDemux * demux)
     gst_event_set_seqnum (tag_event, demux->segment_seqnum);
   gst_flv_demux_push_src_event (demux, tag_event);
 
+#ifdef TIZEN_FEATURE_FLVDEMUX_MODIFICATION
+  GST_DEBUG_OBJECT (demux, "post tag msg %" GST_PTR_FORMAT, demux->taglist);
+
+  /* post message flv tag (for early recive application) */
+  gst_element_post_message (GST_ELEMENT_CAST (demux),
+      gst_message_new_tag (GST_OBJECT_CAST (demux),
+        gst_tag_list_copy (demux->taglist)));
+#endif
+
   if (demux->audio_pad) {
     GST_DEBUG_OBJECT (demux->audio_pad, "pushing audio %" GST_PTR_FORMAT,
         demux->audio_tags);
index 8872b4b..d627e2c 100644 (file)
@@ -408,6 +408,11 @@ G_BEGIN_DECLS
 #define FOURCC_aavd     GST_MAKE_FOURCC('a','a','v','d')
 #define FOURCC_adrm     GST_MAKE_FOURCC('a','d','r','m')
 
+#ifdef TIZEN_FEATURE_QTDEMUX_MODIFICATION
+/* Spatial Audio */
+#define FOURCC_SA3D     GST_MAKE_FOURCC('S','A','3','D')
+#endif /* TIZEN_FEATURE_QTDEMUX_MODIFICATION */
+
 G_END_DECLS
 
 #endif /* __FOURCC_H__ */
index 999621a..d93c7ba 100644 (file)
@@ -331,6 +331,9 @@ enum
   PROP_START_GAP_THRESHOLD,
   PROP_FORCE_CREATE_TIMECODE_TRAK,
   PROP_FRAGMENT_MODE,
+#ifdef TIZEN_FEATURE_GST_MUX_ENHANCEMENT
+  PROP_EXPECTED_TRAILER_SIZE,
+#endif /* TIZEN_FEATURE_GST_MUX_ENHANCEMENT */  
 };
 
 /* some spare for header size as well */
@@ -403,6 +406,227 @@ static GstFlowReturn gst_qtmux_push_mdat_stored_buffers (GstQTMux * qtmux);
 
 static GstElementClass *parent_class = NULL;
 
+#ifdef TIZEN_FEATURE_GST_MUX_ENHANCEMENT
+/*
+     [[ Metadata Size ]]
+     1. Common
+       free = 8
+       moov = 8
+         mvhd = 108
+       -------------
+       total : 124
+
+     2. Video
+       i. Video common
+         trak = 8
+           tkhd = 92
+           mdia = 8
+             mdhd = 32
+             hdlr = 45
+             minf = 8
+               vmhd = 20
+               dinf = 36 (8, dref : 16 , url : 12)
+               stbl = 8
+         ---------------
+         total : 257
+
+       ii. Variation in file format
+         - MP4
+             ftyp = 32
+             udta = 61
+         - 3GP
+             ftyp = 28
+             udta = 8
+
+       iii. Variation in codec
+         - MPEG4
+           stsd = 137(16, mp4v : 86, esds : 35)
+
+         - H.264 = 487(or 489) + (8*stts_count) + (8*frame) + (4*I-frame)
+           stsd = 134 (SPS 9, PPS 4) or 136 (SPS 111, PPS 4)
+
+         - H.263 = 470 + + (8*stts_count) + (8*frame) + (4*I-frame)
+           stsd = 102 -> different from H.264
+
+       iv. Variation in frame
+         stts = 16 + (8*stts_count)
+         stss = 16 + (4*I-frame)
+         stsc = 28
+         stsz = 20 + (4*frame)
+         stco = 16 + (4*frame)
+
+     3. Audio
+       i. Audio common
+         trak = 8
+           tkhd = 92
+           mdia = 8
+             mdhd = 32
+             hdlr = 45
+             minf = 8
+               smhd = 16
+               dinf = 36 (8, dref : 16, url : 12)
+               stbl = 8
+         ---------------
+         total : 253
+
+                 stts = 16
+                 stsz = 20
+                 stco = 16
+                 ------------
+                 total : 52
+
+       ii. Variation in file format
+         - MP4
+             udta = 61
+         - 3GP
+             udta = 8
+
+       iii. Variation in codec
+         - Common
+             stts = 16 + (8*stts_count)
+             stsc = 28
+             stsz = 20 + (4*frame)
+             stco = 16 + (4*frame)
+
+         - AAC
+             stsd = 94 (16, mp4a : 78(36 ,esds : 42))
+
+         - AMR
+             stsd = 69 (16, samr : 53(36, damr : 17))
+*/
+
+/* trailer entry size */
+#define ENTRY_SIZE_VIDEO_STTS         8
+#define ENTRY_SIZE_VIDEO_STSS         4
+#define ENTRY_SIZE_VIDEO_STSZ         4
+#define ENTRY_SIZE_VIDEO_STCO         4
+#define ENTRY_SIZE_AUDIO_STTS         8
+#define ENTRY_SIZE_AUDIO_STSZ         4
+#define ENTRY_SIZE_AUDIO_STCO         4
+
+#define ENTRY_SIZE_VIDEO_MPEG4_STSD   137
+#define ENTRY_SIZE_VIDEO_H263P_STSD   102
+#define ENTRY_SIZE_AUDIO_AAC_STSD     94
+#define ENTRY_SIZE_AUDIO_AMR_STSD     69
+
+#define ENTRY_SIZE_STSC               28
+#define ENTRY_SIZE_VIDEO_ST           68        /*atom size (stss + stts + stsc + stsz + stco ) * (size + atom + version + flags + sample count)+stsz(sample size) */
+#define ENTRY_SIZE_AUDIO_ST           52        /*atom size (stss + stsc + stsz + stco ) * (size + atom + version + flags + sample count)+stsz(sample size) */
+
+/* common */
+#define MUX_COMMON_SIZE_HEADER             124   /* free + moov + moov.mvhd*/
+
+#define MUX_COMMON_SIZE_VIDEO_HEADER       257
+#define MUX_COMMON_SIZE_AUDIO_HEADER       253
+
+#define MUX_COMMON_SIZE_MP4_FTYP           32
+#define MUX_COMMON_SIZE_3GP_FTYP           28
+
+#define MUX_COMMON_SIZE_MP4_UDTA           61
+#define MUX_COMMON_SIZE_3GP_UDTA           8
+
+static void
+gst_qt_mux_update_expected_trailer_size (GstQTMux *qtmux, GstQTMuxPad *pad)
+{
+  guint nb_video_frames = 0;
+  guint nb_video_i_frames = 0;
+  guint nb_video_stts_entry = 0;
+  guint nb_audio_frames = 0;
+  guint nb_audio_stts_entry = 0;
+  gboolean video_stream = FALSE;
+  gboolean audio_stream = FALSE;
+  guint exp_size = 0;
+  GstQTMuxClass *qtmux_klass = NULL;
+
+  if (qtmux == NULL || pad == NULL) {
+    GST_ERROR_OBJECT (qtmux, "Invalid parameter");
+    return;
+  }
+
+  qtmux_klass = (GstQTMuxClass *)(G_OBJECT_GET_CLASS(qtmux));
+
+  if (!strncmp(GST_PAD_NAME(pad->collect.pad), "video", 5)) {
+    nb_video_frames += pad->trak->mdia.minf.stbl.stsz.table_size;
+    nb_video_i_frames += pad->trak->mdia.minf.stbl.stss.entries.len;
+    nb_video_stts_entry += pad->trak->mdia.minf.stbl.stts.entries.len;
+
+    video_stream = TRUE;
+  } else if (!strncmp(GST_PAD_NAME(pad->collect.pad), "audio", 5)) {
+    nb_audio_frames += pad->trak->mdia.minf.stbl.stsz.table_size;
+    nb_audio_stts_entry += pad->trak->mdia.minf.stbl.stts.entries.len;
+
+    audio_stream = TRUE;
+  }
+
+  /* free + moov + mvhd */
+  qtmux->expected_trailer_size = MUX_COMMON_SIZE_HEADER;
+
+  /* ftyp + udta * 3 (There is 3 udta fields and it's same size) */
+  switch (qtmux_klass->format) {
+  case GST_QT_MUX_FORMAT_MP4:
+    qtmux->expected_trailer_size += MUX_COMMON_SIZE_MP4_FTYP + MUX_COMMON_SIZE_MP4_UDTA * 3;
+    break;
+  case GST_QT_MUX_FORMAT_3GP:
+    qtmux->expected_trailer_size += MUX_COMMON_SIZE_3GP_FTYP + MUX_COMMON_SIZE_3GP_UDTA * 3;
+    break;
+  default:
+    break;
+  }
+
+  /* Calculate trailer size for video stream */
+  if (video_stream) {
+    switch (pad->fourcc) {
+    case FOURCC_h263:
+    case FOURCC_s263:
+      exp_size += MUX_COMMON_SIZE_VIDEO_HEADER + ENTRY_SIZE_VIDEO_H263P_STSD;
+      break;
+    case FOURCC_mp4v:
+    case FOURCC_MP4V:
+    case FOURCC_fmp4:
+    case FOURCC_FMP4:
+    case FOURCC_3gp4:
+    case FOURCC_3gp6:
+    case FOURCC_3gg6:
+      exp_size += MUX_COMMON_SIZE_VIDEO_HEADER + ENTRY_SIZE_VIDEO_MPEG4_STSD;
+      break;
+    default:
+      break;
+    }
+
+    /* frame related */
+    exp_size += ENTRY_SIZE_VIDEO_ST + (ENTRY_SIZE_VIDEO_STTS * nb_video_stts_entry) +
+                (ENTRY_SIZE_VIDEO_STSS * nb_video_i_frames) + (ENTRY_SIZE_STSC) +
+                ((ENTRY_SIZE_VIDEO_STSZ + ENTRY_SIZE_VIDEO_STCO) * nb_video_frames);
+
+    qtmux->video_expected_trailer_size = exp_size;
+  }
+
+  /* Calculate trailer size for audio stream */
+  if (audio_stream) {
+    exp_size += MUX_COMMON_SIZE_AUDIO_HEADER + ENTRY_SIZE_AUDIO_ST + (ENTRY_SIZE_AUDIO_STTS * nb_audio_stts_entry) +
+                (ENTRY_SIZE_STSC) + ((ENTRY_SIZE_AUDIO_STSZ + ENTRY_SIZE_AUDIO_STCO) * nb_audio_frames);
+
+    if (pad->fourcc == FOURCC_samr)
+      exp_size += ENTRY_SIZE_AUDIO_AMR_STSD;
+    else
+      exp_size += ENTRY_SIZE_AUDIO_AAC_STSD;
+
+    qtmux->audio_expected_trailer_size = exp_size;
+  }
+
+  qtmux->expected_trailer_size += qtmux->video_expected_trailer_size + qtmux->audio_expected_trailer_size;
+
+  /*
+  GST_INFO_OBJECT (qtmux, "pad type %s", GST_PAD_NAME(pad->collect.pad));
+  GST_INFO_OBJECT (qtmux, "VIDEO : stts-entry=[%d], i-frame=[%d], video-sample=[%d]", nb_video_stts_entry, nb_video_i_frames, nb_video_frames);
+  GST_INFO_OBJECT (qtmux, "AUDIO : stts-entry=[%d], audio-sample=[%d]", nb_audio_stts_entry, nb_audio_frames);
+  GST_INFO_OBJECT (qtmux, "expected trailer size %d", qtmux->expected_trailer_size);
+  */
+
+  return;
+}
+#endif /* TIZEN_FEATURE_GST_MUX_ENHANCEMENT */
+
 static void
 gst_qt_mux_base_init (gpointer g_class)
 {
@@ -472,6 +696,9 @@ gst_qt_mux_class_init (GstQTMuxClass * klass)
   GObjectClass *gobject_class;
   GstElementClass *gstelement_class;
   GstAggregatorClass *gstagg_class = GST_AGGREGATOR_CLASS (klass);
+#ifdef TIZEN_FEATURE_GST_MUX_ENHANCEMENT
+  GParamSpec *tspec = NULL;
+#endif /* TIZEN_FEATURE_GST_MUX_ENHANCEMENT */
 
   gobject_class = (GObjectClass *) klass;
   gstelement_class = (GstElementClass *) klass;
@@ -620,6 +847,16 @@ gst_qt_mux_class_init (GstQTMuxClass * klass)
           GST_TYPE_QT_MUX_FRAGMENT_MODE, DEFAULT_FRAGMENT_MODE,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
+#ifdef TIZEN_FEATURE_GST_MUX_ENHANCEMENT
+  tspec = g_param_spec_uint("expected-trailer-size", "Expected Trailer Size",
+    "Expected trailer size (bytes)",
+    0, G_MAXUINT, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+  if (tspec)
+    g_object_class_install_property(gobject_class, PROP_EXPECTED_TRAILER_SIZE, tspec);
+  else
+    GST_ERROR("g_param_spec failed for \"expected-trailer-size\"");
+#endif /* TIZEN_FEATURE_GST_MUX_ENHANCEMENT */
+
   gstelement_class->request_new_pad =
       GST_DEBUG_FUNCPTR (gst_qt_mux_request_new_pad);
   gstelement_class->release_pad = GST_DEBUG_FUNCPTR (gst_qt_mux_release_pad);
@@ -757,6 +994,7 @@ gst_qt_mux_reset (GstQTMux * qtmux, gboolean alloc)
 
   if (alloc) {
     qtmux->moov = atom_moov_new (qtmux->context);
+#ifndef TIZEN_FEATURE_GST_MUX_ENHANCEMENT
     /* ensure all is as nice and fresh as request_new_pad would provide it */
     for (l = GST_ELEMENT_CAST (qtmux)->sinkpads; l; l = l->next) {
       GstQTMuxPad *qtpad = (GstQTMuxPad *) l->data;
@@ -764,6 +1002,7 @@ gst_qt_mux_reset (GstQTMux * qtmux, gboolean alloc)
       qtpad->trak = atom_trak_new (qtmux->context);
       atom_moov_add_trak (qtmux->moov, qtpad->trak);
     }
+#endif
   }
   GST_OBJECT_UNLOCK (qtmux);
 
@@ -779,6 +1018,12 @@ gst_qt_mux_reset (GstQTMux * qtmux, gboolean alloc)
   qtmux->last_moov_update = GST_CLOCK_TIME_NONE;
   qtmux->muxed_since_last_update = 0;
   qtmux->reserved_duration_remaining = GST_CLOCK_TIME_NONE;
+
+#ifdef TIZEN_FEATURE_GST_MUX_ENHANCEMENT
+  qtmux->expected_trailer_size = 0;
+  qtmux->video_expected_trailer_size = 0;
+  qtmux->audio_expected_trailer_size = 0;
+#endif /* TIZEN_FEATURE_GST_MUX_ENHANCEMENT */
 }
 
 static GstBuffer *
@@ -5372,6 +5617,10 @@ gst_qt_mux_add_buffer (GstQTMux * qtmux, GstQTMuxPad * pad, GstBuffer * buf)
     }
   }
 
+#ifdef TIZEN_FEATURE_GST_MUX_ENHANCEMENT
+  gst_qt_mux_update_expected_trailer_size(qtmux, pad);
+#endif /* TIZEN_FEATURE_GST_MUX_ENHANCEMENT */
+
 exit:
 
   return ret;
@@ -7180,6 +7429,11 @@ gst_qt_mux_get_property (GObject * object,
       g_value_set_enum (value, mode);
       break;
     }
+#ifdef TIZEN_FEATURE_GST_MUX_ENHANCEMENT
+    case PROP_EXPECTED_TRAILER_SIZE:
+      g_value_set_uint(value, qtmux->expected_trailer_size);
+      break;
+#endif /* TIZEN_FEATURE_GST_MUX_ENHANCEMENT */   
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
index 0e6e7f6..3664344 100644 (file)
@@ -352,6 +352,12 @@ struct _GstQTMux
 
   /* for request pad naming */
   guint video_pads, audio_pads, subtitle_pads, caption_pads;
+
+#ifdef TIZEN_FEATURE_GST_MUX_ENHANCEMENT
+  guint expected_trailer_size;
+  guint audio_expected_trailer_size;
+  guint video_expected_trailer_size;
+#endif /* TIZEN_FEATURE_GST_MUX_ENHANCEMENT */  
 };
 
 struct _GstQTMuxClass
index a1a2b91..8d70aa3 100644 (file)
@@ -78,7 +78,7 @@
 #include <gst/math-compat.h>
 
 #ifdef HAVE_ZLIB
-# include <zlib.h>
+#include <zlib.h>
 #endif
 
 /* max. size considered 'sane' for non-mdat atoms */
@@ -114,6 +114,34 @@ GST_DEBUG_CATEGORY (qtdemux_debug);
 typedef struct _QtDemuxCencSampleSetInfo QtDemuxCencSampleSetInfo;
 typedef struct _QtDemuxAavdEncryptionInfo QtDemuxAavdEncryptionInfo;
 
+#ifdef TIZEN_FEATURE_QTDEMUX_MODIFICATION
+typedef struct _QtDemuxSphericalMetadata QtDemuxSphericalMetadata;
+
+struct _QtDemuxSphericalMetadata
+{
+  gboolean is_spherical;
+  gboolean is_stitched;
+  char *stitching_software;
+  char *projection_type;
+  char *stereo_mode;
+  int source_count;
+  int init_view_heading;
+  int init_view_pitch;
+  int init_view_roll;
+  int timestamp;
+  int full_pano_width_pixels;
+  int full_pano_height_pixels;
+  int cropped_area_image_width;
+  int cropped_area_image_height;
+  int cropped_area_left;
+  int cropped_area_top;
+  QTDEMUX_AMBISONIC_TYPE ambisonic_type;
+  QTDEMUX_AMBISONIC_FORMAT ambisonic_format;
+  QTDEMUX_AMBISONIC_ORDER ambisonic_order;
+};
+
+#endif /* TIZEN_FEATURE_QTDEMUX_MODIFICATION */
+
 /* Macros for converting to/from timescale */
 #define QTSTREAMTIME_TO_GSTTIME(stream, value) (gst_util_uint64_scale((value), GST_SECOND, (stream)->timescale))
 #define GSTTIME_TO_QTSTREAMTIME(stream, value) (gst_util_uint64_scale((value), (stream)->timescale, GST_SECOND))
@@ -383,6 +411,10 @@ static void gst_qtdemux_append_protection_system_id (GstQTDemux * qtdemux,
 static void qtdemux_gst_structure_free (GstStructure * gststructure);
 static void gst_qtdemux_reset (GstQTDemux * qtdemux, gboolean hard);
 
+#ifdef TIZEN_FEATURE_QTDEMUX_MODIFICATION
+static void gst_tag_register_spherical_tags (void);
+#endif /* TIZEN_FEATURE_QTDEMUX_MODIFICATION */
+
 static void
 gst_qtdemux_class_init (GstQTDemuxClass * klass)
 {
@@ -406,6 +438,10 @@ gst_qtdemux_class_init (GstQTDemuxClass * klass)
 
   gst_tag_register_musicbrainz_tags ();
 
+#ifdef TIZEN_FEATURE_QTDEMUX_MODIFICATION
+  gst_tag_register_spherical_tags ();
+#endif /* TIZEN_FEATURE_QTDEMUX_MODIFICATION */
+
   gst_element_class_add_static_pad_template (gstelement_class,
       &gst_qtdemux_sink_template);
   gst_element_class_add_static_pad_template (gstelement_class,
@@ -446,6 +482,33 @@ gst_qtdemux_init (GstQTDemux * qtdemux)
   qtdemux->old_streams = g_ptr_array_new_with_free_func
       ((GDestroyNotify) gst_qtdemux_stream_unref);
 
+#ifdef TIZEN_FEATURE_QTDEMUX_MODIFICATION
+  qtdemux->spherical_metadata = (QtDemuxSphericalMetadata *)
+      malloc (sizeof (QtDemuxSphericalMetadata));
+
+  if (qtdemux->spherical_metadata) {
+    qtdemux->spherical_metadata->is_spherical = FALSE;
+    qtdemux->spherical_metadata->is_stitched = FALSE;
+    qtdemux->spherical_metadata->stitching_software = NULL;
+    qtdemux->spherical_metadata->projection_type = NULL;
+    qtdemux->spherical_metadata->stereo_mode = NULL;
+    qtdemux->spherical_metadata->source_count = 0;
+    qtdemux->spherical_metadata->init_view_heading = 0;
+    qtdemux->spherical_metadata->init_view_pitch = 0;
+    qtdemux->spherical_metadata->init_view_roll = 0;
+    qtdemux->spherical_metadata->timestamp = 0;
+    qtdemux->spherical_metadata->full_pano_width_pixels = 0;
+    qtdemux->spherical_metadata->full_pano_height_pixels = 0;
+    qtdemux->spherical_metadata->cropped_area_image_width = 0;
+    qtdemux->spherical_metadata->cropped_area_image_height = 0;
+    qtdemux->spherical_metadata->cropped_area_left = 0;
+    qtdemux->spherical_metadata->cropped_area_top = 0;
+    qtdemux->spherical_metadata->ambisonic_type = QTDEMUX_AMBISONIC_TYPE_UNKNOWN;
+    qtdemux->spherical_metadata->ambisonic_format = QTDEMUX_AMBISONIC_FORMAT_UNKNOWN;
+    qtdemux->spherical_metadata->ambisonic_order = QTDEMUX_AMBISONIC_ORDER_UNKNOWN;
+  }
+#endif /* TIZEN_FEATURE_QTDEMUX_MODIFICATION */
+
   GST_OBJECT_FLAG_SET (qtdemux, GST_ELEMENT_FLAG_INDEXABLE);
 
   gst_qtdemux_reset (qtdemux, TRUE);
@@ -466,6 +529,20 @@ gst_qtdemux_dispose (GObject * object)
 {
   GstQTDemux *qtdemux = GST_QTDEMUX (object);
 
+#ifdef TIZEN_FEATURE_QTDEMUX_MODIFICATION
+  if (qtdemux->spherical_metadata) {
+    if (qtdemux->spherical_metadata->stitching_software)
+      free(qtdemux->spherical_metadata->stitching_software);
+    if (qtdemux->spherical_metadata->projection_type)
+      free(qtdemux->spherical_metadata->projection_type);
+    if (qtdemux->spherical_metadata->stereo_mode)
+      free(qtdemux->spherical_metadata->stereo_mode);
+
+    free(qtdemux->spherical_metadata);
+    qtdemux->spherical_metadata = NULL;
+  }
+#endif /* TIZEN_FEATURE_QTDEMUX_MODIFICATION */
+
   if (qtdemux->adapter) {
     g_object_unref (G_OBJECT (qtdemux->adapter));
     qtdemux->adapter = NULL;
@@ -790,6 +867,12 @@ gst_qtdemux_push_tags (GstQTDemux * qtdemux, QtDemuxStream * stream)
           stream->stream_tags);
       gst_pad_push_event (stream->pad,
           gst_event_new_tag (gst_tag_list_ref (stream->stream_tags)));
+#ifdef TIZEN_FEATURE_QTDEMUX_MODIFICATION
+      /* post message qtdemux tag (for early recive application) */
+      gst_element_post_message (GST_ELEMENT_CAST (qtdemux),
+            gst_message_new_tag (GST_OBJECT_CAST (qtdemux),
+                  gst_tag_list_copy (stream->stream_tags)));
+#endif
     }
 
     if (G_UNLIKELY (stream->send_global_tags)) {
@@ -2682,6 +2765,475 @@ qtdemux_parse_ftyp (GstQTDemux * qtdemux, const guint8 * buffer, gint length)
   }
 }
 
+#ifdef TIZEN_FEATURE_QTDEMUX_MODIFICATION
+static void
+_get_int_value_from_xml_string (GstQTDemux * qtdemux,
+    const char *xml_str, const char *param_name, int *value)
+{
+  char *value_start, *value_end, *endptr;
+  const short value_length_max = 12;
+  char init_view_ret[12];
+  int value_length = 0;
+  int i = 0;
+
+  value_start = (xml_str && param_name) ? strstr (xml_str, param_name) : NULL;
+
+  if (!value_start) {
+    GST_WARNING_OBJECT (qtdemux, "error: parameter does not exist: %s\n",
+        param_name);
+    return;
+  }
+
+  value_start += strlen (param_name);
+  while ((value_start[0] == ' ') || (value_start[0] == '\t'))
+    value_start++;
+
+  value_end = strchr (value_start, '<');
+  if (!value_end) {
+    GST_ERROR_OBJECT (qtdemux, "error: incorrect XML\n");
+    return;
+  }
+
+  value_length = value_end - value_start;
+  while ((value_length >= 1) && ((value_start[value_length - 1] == ' ')
+          || (value_start[value_length - 1] == '\t')))
+    value_length--;
+
+  if (value_start[i] == '+' || value_start[i] == '-')
+    i++;
+  while (i < value_length) {
+    if (value_start[i] < '0' || value_start[i] > '9') {
+      GST_ERROR_OBJECT (qtdemux,
+          "error: incorrect value, integer was expected\n");
+      return;
+    }
+    i++;
+  }
+
+  if (value_length >= value_length_max || value_length < 1) {
+    GST_ERROR_OBJECT (qtdemux, "error: empty XML value or incorrect range\n");
+    return;
+  }
+
+  strncpy (init_view_ret, value_start, value_length_max);
+  init_view_ret[value_length] = '\0';
+
+  *value = strtol (init_view_ret, &endptr, 10);
+  if (endptr == init_view_ret) {
+    GST_ERROR_OBJECT (qtdemux, "error: no digits were found\n");
+    return;
+  }
+
+  return;
+}
+
+static void
+_get_string_value_from_xml_string (GstQTDemux * qtdemux,
+    const char *xml_str, const char *param_name, char **value)
+{
+  char *value_start, *value_end;
+  const short value_length_max = 256;
+  int value_length = 0;
+
+  value_start = (xml_str && param_name) ? strstr (xml_str, param_name) : NULL;
+
+  if (!value_start) {
+    GST_WARNING_OBJECT (qtdemux, "error: parameter does not exist: %s\n",
+        param_name);
+    return;
+  }
+
+  value_start += strlen (param_name);
+  while ((value_start[0] == ' ') || (value_start[0] == '\t'))
+    value_start++;
+
+  value_end = strchr (value_start, '<');
+  if (!value_end) {
+    GST_ERROR_OBJECT (qtdemux, "error: incorrect XML\n");
+    return;
+  }
+
+  value_length = value_end - value_start;
+  while ((value_length >= 1) && ((value_start[value_length - 1] == ' ')
+          || (value_start[value_length - 1] == '\t')))
+    value_length--;
+
+  if (value_length >= value_length_max || value_length < 1) {
+    GST_ERROR_OBJECT (qtdemux, "error: empty XML value or incorrect range\n");
+    return;
+  }
+
+  *value = strndup(value_start, value_length);
+
+  return;
+}
+
+static void
+_get_bool_value_from_xml_string (GstQTDemux * qtdemux,
+    const char *xml_str, const char *param_name, gboolean * value)
+{
+  char *value_start, *value_end;
+  int value_length = 0;
+
+  value_start = (xml_str && param_name) ? strstr (xml_str, param_name) : NULL;
+
+  if (!value_start) {
+    GST_WARNING_OBJECT (qtdemux, "error: parameter does not exist: %s\n",
+        param_name);
+    return;
+  }
+
+  value_start += strlen (param_name);
+  while ((value_start[0] == ' ') || (value_start[0] == '\t'))
+    value_start++;
+
+  value_end = strchr (value_start, '<');
+  if (!value_end) {
+    GST_ERROR_OBJECT (qtdemux, "error: incorrect XML\n");
+    return;
+  }
+
+  value_length = value_end - value_start;
+  while ((value_length >= 1) && ((value_start[value_length - 1] == ' ')
+          || (value_start[value_length - 1] == '\t')))
+    value_length--;
+
+  if (value_length < 1) {
+    GST_ERROR_OBJECT (qtdemux, "error: empty XML value or incorrect range\n");
+    return;
+  }
+
+  *value = g_strstr_len(value_start, value_length, "true") ? TRUE : FALSE;
+
+  return;
+}
+
+static void
+_parse_spatial_video_metadata_from_xml_string (GstQTDemux * qtdemux, const char *xmlStr)
+{
+  const char is_spherical_str[] = "<GSpherical:Spherical>";
+  const char is_stitched_str[] = "<GSpherical:Stitched>";
+  const char stitching_software_str[] = "<GSpherical:StitchingSoftware>";
+  const char projection_type_str[] = "<GSpherical:ProjectionType>";
+  const char stereo_mode_str[] = "<GSpherical:StereoMode>";
+  const char source_count_str[] = "<GSpherical:SourceCount>";
+  const char init_view_heading_str[] = "<GSpherical:InitialViewHeadingDegrees>";
+  const char init_view_pitch_str[] = "<GSpherical:InitialViewPitchDegrees>";
+  const char init_view_roll_str[] = "<GSpherical:InitialViewRollDegrees>";
+  const char timestamp_str[] = "<GSpherical:Timestamp>";
+  const char full_pano_width_str[] = "<GSpherical:FullPanoWidthPixels>";
+  const char full_pano_height_str[] = "<GSpherical:FullPanoHeightPixels>";
+  const char cropped_area_image_width_str[] =
+      "<GSpherical:CroppedAreaImageWidthPixels>";
+  const char cropped_area_image_height_str[] =
+      "<GSpherical:CroppedAreaImageHeightPixels>";
+  const char cropped_area_left_str[] = "<GSpherical:CroppedAreaLeftPixels>";
+  const char cropped_area_top_str[] = "<GSpherical:CroppedAreaTopPixels>";
+
+  QtDemuxSphericalMetadata * spherical_metadata = qtdemux->spherical_metadata;
+
+  _get_bool_value_from_xml_string (qtdemux, xmlStr, is_spherical_str,
+      (gboolean *) & spherical_metadata->is_spherical);
+  _get_bool_value_from_xml_string (qtdemux, xmlStr, is_stitched_str,
+      (gboolean *) & spherical_metadata->is_stitched);
+
+  if (spherical_metadata->is_spherical && spherical_metadata->is_stitched) {
+    _get_string_value_from_xml_string (qtdemux, xmlStr,
+        stitching_software_str, &spherical_metadata->stitching_software);
+    _get_string_value_from_xml_string (qtdemux, xmlStr,
+        projection_type_str, &spherical_metadata->projection_type);
+    _get_string_value_from_xml_string (qtdemux, xmlStr, stereo_mode_str,
+        &spherical_metadata->stereo_mode);
+    _get_int_value_from_xml_string (qtdemux, xmlStr, source_count_str,
+        &spherical_metadata->source_count);
+    _get_int_value_from_xml_string (qtdemux, xmlStr,
+        init_view_heading_str, &spherical_metadata->init_view_heading);
+    _get_int_value_from_xml_string (qtdemux, xmlStr, init_view_pitch_str,
+        &spherical_metadata->init_view_pitch);
+    _get_int_value_from_xml_string (qtdemux, xmlStr, init_view_roll_str,
+        &spherical_metadata->init_view_roll);
+    _get_int_value_from_xml_string (qtdemux, xmlStr, timestamp_str,
+        &spherical_metadata->timestamp);
+    _get_int_value_from_xml_string (qtdemux, xmlStr, full_pano_width_str,
+        &spherical_metadata->full_pano_width_pixels);
+    _get_int_value_from_xml_string (qtdemux, xmlStr,
+        full_pano_height_str, &spherical_metadata->full_pano_height_pixels);
+    _get_int_value_from_xml_string (qtdemux, xmlStr,
+        cropped_area_image_width_str,
+        &spherical_metadata->cropped_area_image_width);
+    _get_int_value_from_xml_string (qtdemux, xmlStr,
+        cropped_area_image_height_str,
+        &spherical_metadata->cropped_area_image_height);
+    _get_int_value_from_xml_string (qtdemux, xmlStr, cropped_area_left_str,
+        &spherical_metadata->cropped_area_left);
+    _get_int_value_from_xml_string (qtdemux, xmlStr, cropped_area_top_str,
+        &spherical_metadata->cropped_area_top);
+  }
+
+  return;
+}
+
+static void
+gst_tag_register_spherical_tags (void) {
+  gst_tag_register ("is_spherical", GST_TAG_FLAG_META,
+      G_TYPE_INT,
+      _("tag-spherical"),
+      _("Flag indicating if the video is a spherical video"),
+      NULL);
+  gst_tag_register ("is_stitched", GST_TAG_FLAG_META,
+      G_TYPE_INT,
+      _("tag-stitched"),
+      _("Flag indicating if the video is stitched"),
+      NULL);
+  gst_tag_register ("stitching_software", GST_TAG_FLAG_META,
+      G_TYPE_STRING,
+      _("tag-stitching-software"),
+      _("Software used to stitch the spherical video"),
+      NULL);
+  gst_tag_register ("projection_type", GST_TAG_FLAG_META,
+      G_TYPE_STRING,
+      _("tag-projection-type"),
+      _("Projection type used in the video frames"),
+      NULL);
+  gst_tag_register ("stereo_mode", GST_TAG_FLAG_META,
+      G_TYPE_STRING,
+      _("tag-stereo-mode"),
+      _("Description of stereoscopic 3D layout"),
+      NULL);
+  gst_tag_register ("source_count", GST_TAG_FLAG_META,
+      G_TYPE_INT,
+      _("tag-source-count"),
+      _("Number of cameras used to create the spherical video"),
+      NULL);
+  gst_tag_register ("init_view_heading", GST_TAG_FLAG_META,
+      G_TYPE_INT,
+      _("tag-init-view-heading"),
+      _("The heading angle of the initial view in degrees"),
+      NULL);
+  gst_tag_register ("init_view_pitch", GST_TAG_FLAG_META,
+      G_TYPE_INT,
+      _("tag-init-view-pitch"),
+      _("The pitch angle of the initial view in degrees"),
+      NULL);
+  gst_tag_register ("init_view_roll", GST_TAG_FLAG_META,
+      G_TYPE_INT,
+      _("tag-init-view-roll"),
+      _("The roll angle of the initial view in degrees"),
+      NULL);
+  gst_tag_register ("timestamp", GST_TAG_FLAG_META,
+      G_TYPE_INT,
+      _("tag-timestamp"),
+      _("Epoch timestamp of when the first frame in the video was recorded"),
+      NULL);
+  gst_tag_register ("full_pano_width_pixels", GST_TAG_FLAG_META,
+      G_TYPE_INT,
+      _("tag-full-pano-width"),
+      _("Width of the encoded video frame in pixels"),
+      NULL);
+  gst_tag_register ("full_pano_height_pixels", GST_TAG_FLAG_META,
+      G_TYPE_INT,
+      _("tag-full-pano-height"),
+      _("Height of the encoded video frame in pixels"),
+      NULL);
+  gst_tag_register ("cropped_area_image_width", GST_TAG_FLAG_META,
+      G_TYPE_INT,
+      _("tag-cropped-area-image-width"),
+      _("Width of the video frame to display (e.g. cropping)"),
+      NULL);
+  gst_tag_register ("cropped_area_image_height", GST_TAG_FLAG_META,
+      G_TYPE_INT,
+      _("tag-cropped-area-image-height"),
+      _("Height of the video frame to display (e.g. cropping)"),
+      NULL);
+  gst_tag_register ("cropped_area_left", GST_TAG_FLAG_META,
+      G_TYPE_INT,
+      _("tag-cropped-area-left"),
+      _("Column where the left edge of the image was cropped from the"
+          " full sized panorama"),
+      NULL);
+  gst_tag_register ("cropped_area_top", GST_TAG_FLAG_META,
+      G_TYPE_INT,
+      _("tag-cropped-area-top"),
+      _("Row where the top edge of the image was cropped from the"
+          " full sized panorama"),
+      NULL);
+  gst_tag_register ("ambisonic_type", GST_TAG_FLAG_META,
+      G_TYPE_INT,
+      _("tag-ambisonic-type"),
+      _("Specifies the type of ambisonic audio represented"),
+      NULL);
+  gst_tag_register ("ambisonic_format", GST_TAG_FLAG_META,
+      G_TYPE_INT,
+      _("tag-ambisonic-format"),
+      _("Specifies the ambisonic audio format"),
+      NULL);
+  gst_tag_register ("ambisonic_order", GST_TAG_FLAG_META,
+      G_TYPE_INT,
+      _("tag-ambisonic-order"),
+      _("Specifies the ambisonic audio channel order"),
+      NULL);
+
+  return;
+}
+
+static void
+_send_spherical_metadata_msg_to_bus (GstQTDemux * qtdemux)
+{
+  GstTagList *taglist;
+  QtDemuxSphericalMetadata *spherical_metadata = qtdemux->spherical_metadata;
+
+  GST_DEBUG_OBJECT (qtdemux, "is_spherical = %d",
+      spherical_metadata->is_spherical);
+  GST_DEBUG_OBJECT (qtdemux, "is_stitched = %d",
+      spherical_metadata->is_stitched);
+  GST_DEBUG_OBJECT (qtdemux, "stitching_software = %s",
+      spherical_metadata->stitching_software);
+  GST_DEBUG_OBJECT (qtdemux, "projection_type = %s",
+      spherical_metadata->projection_type);
+  GST_DEBUG_OBJECT (qtdemux, "stereo_mode = %s",
+      spherical_metadata->stereo_mode);
+  GST_DEBUG_OBJECT (qtdemux, "source_count %d",
+      spherical_metadata->source_count);
+  GST_DEBUG_OBJECT (qtdemux, "init_view_heading = %d",
+      spherical_metadata->init_view_heading);
+  GST_DEBUG_OBJECT (qtdemux, "init_view_pitch = %d",
+      spherical_metadata->init_view_pitch);
+  GST_DEBUG_OBJECT (qtdemux, "init_view_roll = %d",
+      spherical_metadata->init_view_roll);
+  GST_DEBUG_OBJECT (qtdemux, "timestamp = %d", spherical_metadata->timestamp);
+  GST_DEBUG_OBJECT (qtdemux, "full_pano_width_pixels = %d",
+      spherical_metadata->full_pano_width_pixels);
+  GST_DEBUG_OBJECT (qtdemux, "full_pano_height_pixels = %d",
+      spherical_metadata->full_pano_height_pixels);
+  GST_DEBUG_OBJECT (qtdemux, "cropped_area_image_width = %d",
+      spherical_metadata->cropped_area_image_width);
+  GST_DEBUG_OBJECT (qtdemux, "cropped_area_image_height = %d",
+      spherical_metadata->cropped_area_image_height);
+  GST_DEBUG_OBJECT (qtdemux, "cropped_area_left = %d",
+      spherical_metadata->cropped_area_left);
+  GST_DEBUG_OBJECT (qtdemux, "cropped_area_top = %d",
+      spherical_metadata->cropped_area_top);
+  GST_DEBUG_OBJECT (qtdemux, "ambisonic_type = %d",
+      spherical_metadata->ambisonic_type);
+  GST_DEBUG_OBJECT (qtdemux, "ambisonic_order = %d",
+      spherical_metadata->ambisonic_order);
+  GST_DEBUG_OBJECT (qtdemux, "ambisonic_format = %d",
+      spherical_metadata->ambisonic_format);
+
+  taglist = gst_tag_list_new_empty ();
+  gst_tag_list_add (taglist, GST_TAG_MERGE_REPLACE,
+      "is_spherical", spherical_metadata->is_spherical,
+      "is_stitched", spherical_metadata->is_stitched,
+      "source_count", spherical_metadata->source_count,
+      "init_view_heading", spherical_metadata->init_view_heading,
+      "init_view_pitch", spherical_metadata->init_view_pitch,
+      "init_view_roll", spherical_metadata->init_view_roll,
+      "timestamp", spherical_metadata->timestamp,
+      "full_pano_width_pixels", spherical_metadata->full_pano_width_pixels,
+      "full_pano_height_pixels", spherical_metadata->full_pano_height_pixels,
+      "cropped_area_image_width", spherical_metadata->cropped_area_image_width,
+      "cropped_area_image_height", spherical_metadata->cropped_area_image_height,
+      "cropped_area_left", spherical_metadata->cropped_area_left,
+      "cropped_area_top", spherical_metadata->cropped_area_top,
+      "ambisonic_type", spherical_metadata->ambisonic_type,
+      "ambisonic_format", spherical_metadata->ambisonic_format,
+      "ambisonic_order", spherical_metadata->ambisonic_order,
+      NULL);
+
+  if (spherical_metadata->stitching_software)
+    gst_tag_list_add (taglist, GST_TAG_MERGE_REPLACE,
+        "stitching_software", spherical_metadata->stitching_software,
+        NULL);
+  if (spherical_metadata->projection_type)
+    gst_tag_list_add (taglist, GST_TAG_MERGE_REPLACE,
+        "projection_type", spherical_metadata->projection_type,
+        NULL);
+  if (spherical_metadata->stereo_mode)
+    gst_tag_list_add (taglist, GST_TAG_MERGE_REPLACE,
+        "stereo_mode", spherical_metadata->stereo_mode,
+        NULL);
+
+  gst_element_post_message (GST_ELEMENT_CAST (qtdemux),
+          gst_message_new_tag (GST_OBJECT_CAST (qtdemux),
+                  gst_tag_list_copy (taglist)));
+
+  gst_tag_list_unref(taglist);
+
+  return;
+}
+
+static void
+qtdemux_parse_SA3D (GstQTDemux * qtdemux, const guint8 * buffer, gint length)
+{
+  guint offset = 0;
+
+  guint8 version = 0;
+  guint8 ambisonic_type  = 0;
+  guint32 ambisonic_order = 0;
+  guint8 ambisonic_channel_ordering = 0;
+  guint8 ambisonic_normalization = 0;
+  guint32 num_channels = 0;
+  guint32 channel_map[49] = { 0 };      /* Up to 6th order */
+
+  int i;
+
+  GST_DEBUG_OBJECT (qtdemux, "qtdemux_parse_SA3D");
+
+  qtdemux->header_size += length;
+  offset = (QT_UINT32 (buffer) == 0) ? 16 : 8;
+
+  if (length <= offset + 16) {
+    GST_DEBUG_OBJECT (qtdemux, "SA3D atom is too short, skipping");
+    return;
+  }
+
+  version = QT_UINT8 (buffer + offset);
+  ambisonic_type = QT_UINT8 (buffer + offset + 1);
+  ambisonic_order = QT_UINT32 (buffer + offset + 2);
+  ambisonic_channel_ordering = QT_UINT8 (buffer + offset + 6);
+  ambisonic_normalization = QT_UINT8 (buffer + offset + 7);
+  num_channels = QT_UINT32 (buffer + offset + 8);
+  for (i = 0; i < num_channels; ++i)
+    channel_map[i] = QT_UINT32 (buffer + offset + 12 + i * 4);
+
+  GST_DEBUG_OBJECT (qtdemux, "version: %d", version);
+  GST_DEBUG_OBJECT (qtdemux, "ambisonic_type: %d", ambisonic_type);
+  GST_DEBUG_OBJECT (qtdemux, "ambisonic_order: %d", ambisonic_order);
+  GST_DEBUG_OBJECT (qtdemux, "ambisonic_channel_ordering: %d",
+      ambisonic_channel_ordering);
+  GST_DEBUG_OBJECT (qtdemux, "ambisonic_normalization: %d",
+      ambisonic_normalization);
+  GST_DEBUG_OBJECT (qtdemux, "num_channels: %d", num_channels);
+  for (i = 0; i < num_channels; ++i)
+    GST_DEBUG_OBJECT (qtdemux, "channel_map: %d", channel_map[i]);
+
+  if (version == RFC_AMBISONIC_SA3DBOX_VERSION_SUPPORTED) {
+    if (ambisonic_type == RFC_AMBISONIC_TYPE_PERIPHONIC)
+      qtdemux->spherical_metadata->ambisonic_type = QTDEMUX_AMBISONIC_TYPE_PERIPHONIC;
+
+    if (ambisonic_order == RFC_AMBISONIC_ORDER_FOA) {
+      if (num_channels == 4) {
+        qtdemux->spherical_metadata->ambisonic_order = QTDEMUX_AMBISONIC_ORDER_FOA;
+
+        if ((ambisonic_channel_ordering == RFC_AMBISONIC_CHANNEL_ORDERING_ACN)
+            && (ambisonic_normalization == RFC_AMBISONIC_NORMALIZATION_SN3D)
+            && (channel_map[0] == 0) && (channel_map[1] == 1)
+            && (channel_map[2] == 2) && (channel_map[3] == 3))
+          qtdemux->spherical_metadata->ambisonic_format = QTDEMUX_AMBISONIC_FORMAT_AMBIX;
+
+        if ((ambisonic_channel_ordering == RFC_AMBISONIC_CHANNEL_ORDERING_FUMA)
+            && (ambisonic_normalization == RFC_AMBISONIC_NORMALIZATION_FUMA)
+            && (channel_map[0] == 0) && (channel_map[1] == 3)
+            && (channel_map[2] == 1) && (channel_map[3] == 2))
+          qtdemux->spherical_metadata->ambisonic_format = QTDEMUX_AMBISONIC_FORMAT_AMB;
+      }
+    }
+  }
+
+  return;
+}
+#endif /* TIZEN_FEATURE_QTDEMUX_MODIFICATION */
+
 static void
 qtdemux_update_default_sample_cenc_settings (GstQTDemux * qtdemux,
     QtDemuxCencSampleSetInfo * info, guint32 is_encrypted,
@@ -2930,6 +3482,13 @@ qtdemux_parse_uuid (GstQTDemux * qtdemux, const guint8 * buffer, gint length)
     0xa2, 0x44, 0x6c, 0x42, 0x7c, 0x64, 0x8d, 0xf4
   };
 
+#ifdef TIZEN_FEATURE_QTDEMUX_MODIFICATION
+  static const guint8 spherical_uuid[] = {
+    0xff, 0xcc, 0x82, 0x63, 0xf8, 0x55, 0x4a, 0x93,
+    0x88, 0x14, 0x58, 0x7a, 0x02, 0x52, 0x1f, 0xdd
+  };
+#endif /* TIZEN_FEATURE_QTDEMUX_MODIFICATION */
+
   guint offset;
 
   /* counts as header data */
@@ -2942,6 +3501,21 @@ qtdemux_parse_uuid (GstQTDemux * qtdemux, const guint8 * buffer, gint length)
     return;
   }
 
+#ifdef TIZEN_FEATURE_QTDEMUX_MODIFICATION
+  if (memcmp (buffer + offset, spherical_uuid, 16) == 0) {
+    const char *contents;
+
+    GST_DEBUG_OBJECT (qtdemux, "spherical uuid was found");
+    contents = (char *) (buffer + offset + 16);
+    GST_DEBUG_OBJECT (qtdemux, "contents: %s\n", contents);
+
+    if (qtdemux->spherical_metadata)
+      _parse_spatial_video_metadata_from_xml_string (qtdemux, contents);
+
+    return;
+  }
+#endif /* TIZEN_FEATURE_QTDEMUX_MODIFICATION */
+
   if (memcmp (buffer + offset, xmp_uuid, 16) == 0) {
     GstBuffer *buf;
     GstTagList *taglist;
@@ -4626,6 +5200,10 @@ gst_qtdemux_loop_state_header (GstQTDemux * qtdemux)
 beach:
   if (ret == GST_FLOW_EOS && (qtdemux->got_moov || qtdemux->media_caps)) {
     /* digested all data, show what we have */
+#ifdef TIZEN_FEATURE_QTDEMUX_MODIFICATION
+    if (qtdemux->spherical_metadata)
+      _send_spherical_metadata_msg_to_bus (qtdemux);
+#endif /* TIZEN_FEATURE_QTDEMUX_MODIFICATION */
     qtdemux_prepare_streams (qtdemux);
     QTDEMUX_EXPOSE_LOCK (qtdemux);
     ret = qtdemux_expose_streams (qtdemux);
@@ -8162,6 +8740,13 @@ qtdemux_parse_node (GstQTDemux * qtdemux, GNode * node, const guint8 * buffer,
         qtdemux_parse_container (qtdemux, node, buffer + 36, end);
         break;
       }
+#ifdef TIZEN_FEATURE_QTDEMUX_MODIFICATION
+      case FOURCC_SA3D:
+      {
+        qtdemux_parse_SA3D (qtdemux, buffer, end - buffer);
+        break;
+      }
+#endif /* TIZEN_FEATURE_QTDEMUX_MODIFICATION */
       default:
         if (!strcmp (type->name, "unknown"))
           GST_MEMDUMP ("Unknown tag", buffer + 4, end - buffer - 4);
@@ -8504,9 +9089,16 @@ gst_qtdemux_guess_framerate (GstQTDemux * qtdemux, QtDemuxStream * stream)
           GST_TIME_FORMAT, duration, first_duration,
           n_samples - 1, GST_TIME_ARGS (avg_duration));
 
+#ifdef TIZEN_FEATURE_QTDEMUX_MODIFICATION
+      gst_video_guess_framerate (avg_duration,
+        &CUR_STREAM (stream)->fps_n, &CUR_STREAM (stream)->fps_d);
+      if (CUR_STREAM (stream)->fps_d == 0)
+        fps_available = FALSE;
+#else
       fps_available =
           gst_video_guess_framerate (avg_duration,
           &CUR_STREAM (stream)->fps_n, &CUR_STREAM (stream)->fps_d);
+#endif
 
       GST_DEBUG_OBJECT (qtdemux,
           "Calculating framerate, timescale %u gave fps_n %d fps_d %d",
@@ -10696,6 +11288,22 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak)
   stream = _create_stream (qtdemux, track_id);
   stream->stream_tags = gst_tag_list_make_writable (stream->stream_tags);
 
+#ifdef TIZEN_FEATURE_QTDEMUX_DURATION
+  if (!gst_byte_reader_skip (&tkhd, 4))
+    goto corrupt_file;
+
+  if (tkhd_version == 1) {
+    if (!gst_byte_reader_get_uint64_be (&tkhd, &stream->tkhd_duration))
+      goto corrupt_file;
+  } else {
+    guint32 dur = 0;
+    if (!gst_byte_reader_get_uint32_be (&tkhd, &dur))
+      goto corrupt_file;
+    stream->tkhd_duration = dur;
+  }
+  GST_INFO_OBJECT (qtdemux, "tkhd duration: %" G_GUINT64_FORMAT,
+      stream->tkhd_duration);
+#endif
   /* need defaults for fragments */
   qtdemux_parse_trex (qtdemux, stream, &dummy, &dummy, &dummy);
 
@@ -10820,7 +11428,11 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak)
     guint32 matrix[9];
 
     /* version 1 uses some 64-bit ints */
+#ifdef TIZEN_FEATURE_QTDEMUX_DURATION
+    if (!gst_byte_reader_skip (&tkhd, 16))
+#else
     if (!gst_byte_reader_skip (&tkhd, 20 + value_size))
+#endif
       goto corrupt_file;
 
     if (!qtdemux_parse_transformation_matrix (qtdemux, &tkhd, matrix, "tkhd"))
@@ -13088,6 +13700,9 @@ static GstFlowReturn
 qtdemux_prepare_streams (GstQTDemux * qtdemux)
 {
   GstFlowReturn ret = GST_FLOW_OK;
+#ifdef TIZEN_FEATURE_QTDEMUX_DURATION
+  guint64 tkhd_max_duration = 0;
+#endif
   gint i;
 
   GST_DEBUG_OBJECT (qtdemux, "prepare %u streams", QTDEMUX_N_STREAMS (qtdemux));
@@ -13109,6 +13724,10 @@ qtdemux_prepare_streams (GstQTDemux * qtdemux)
     } else {
       /* discard any stray moof */
       qtdemux->moof_offset = 0;
+#ifdef TIZEN_FEATURE_QTDEMUX_DURATION
+      if (tkhd_max_duration < stream->tkhd_duration)
+        tkhd_max_duration = stream->tkhd_duration;
+#endif
     }
 
     /* prepare braking */
@@ -13140,6 +13759,15 @@ qtdemux_prepare_streams (GstQTDemux * qtdemux)
     }
   }
 
+#ifdef TIZEN_FEATURE_QTDEMUX_DURATION
+  if (!qtdemux->fragmented && (qtdemux->duration > tkhd_max_duration)) {
+    GST_INFO_OBJECT (qtdemux,
+        "Update duration: %" G_GUINT64_FORMAT " -> %" G_GUINT64_FORMAT,
+        qtdemux->duration, tkhd_max_duration);
+    qtdemux->duration = tkhd_max_duration;
+  }
+#endif
+
   return ret;
 }
 
index 81fb9d2..cb3b9f8 100644 (file)
@@ -63,6 +63,10 @@ enum QtDemuxState
   QTDEMUX_STATE_BUFFER_MDAT     /* Buffering the mdat atom */
 };
 
+#ifdef TIZEN_FEATURE_QTDEMUX_MODIFICATION
+typedef struct _QtDemuxSphericalMetadata QtDemuxSphericalMetadata;
+#endif
+
 struct _GstQTDemux {
   GstElement element;
 
@@ -259,6 +263,9 @@ struct _GstQTDemux {
    * fields. */
   gboolean received_seek;
   gboolean first_moof_already_parsed;
+#ifdef TIZEN_FEATURE_QTDEMUX_MODIFICATION
+  QtDemuxSphericalMetadata *spherical_metadata;
+#endif  
 };
 
 struct _GstQTDemuxClass {
@@ -344,6 +351,10 @@ struct _QtDemuxStream
   /* track id */
   guint track_id;
 
+#ifdef TIZEN_FEATURE_QTDEMUX_DURATION
+  guint64 tkhd_duration;
+#endif
+
   /* duration/scale */
   guint64 duration;             /* in timescale units */
   guint32 timescale;
index 43ef77c..441e3b0 100644 (file)
@@ -43,6 +43,16 @@ typedef struct _QtNodeType QtNodeType;
 #define QT_FOURCC(a)  (GST_READ_UINT32_LE(a))
 #define QT_UINT64(a)  ((((guint64)QT_UINT32(a))<<32)|QT_UINT32(((guint8 *)a)+4))
 
+#ifdef TIZEN_FEATURE_QTDEMUX_MODIFICATION
+#define RFC_AMBISONIC_SA3DBOX_VERSION_SUPPORTED 0
+#define RFC_AMBISONIC_TYPE_PERIPHONIC 0
+#define RFC_AMBISONIC_ORDER_FOA 1
+#define RFC_AMBISONIC_CHANNEL_ORDERING_ACN 0
+#define RFC_AMBISONIC_CHANNEL_ORDERING_FUMA 1  /* FIXME: Currently value is not defined in Spatial Audio RFC */
+#define RFC_AMBISONIC_NORMALIZATION_SN3D 0
+#define RFC_AMBISONIC_NORMALIZATION_FUMA 1             /* FIXME: Currently value is not defined in Spatial Audio RFC */
+#endif /* TIZEN_FEATURE_QTDEMUX_MODIFICATION */
+
 typedef enum {
   QT_FLAG_NONE      = (0),
   QT_FLAG_CONTAINER = (1 << 0)
@@ -76,6 +86,47 @@ enum TrFlags
   TR_COMPOSITION_TIME_OFFSETS = 0x000800    /* sample-composition-time-offsets-presents */
 };
 
+#ifdef TIZEN_FEATURE_QTDEMUX_MODIFICATION
+typedef enum
+{
+  QTDEMUX_AMBISONIC_TYPE_UNKNOWN = 0,
+  QTDEMUX_AMBISONIC_TYPE_PERIPHONIC = 1,            /* To comply with Google's Spatial Audio RFC */
+  QTDEMUX_AMBISONIC_TYPE_NON_PERIPHONIC = 2,
+} QTDEMUX_AMBISONIC_TYPE;
+
+typedef enum
+{
+  QTDEMUX_AMBISONIC_FORMAT_UNKNOWN = 0,
+  QTDEMUX_AMBISONIC_FORMAT_AMBIX = 1,               /* AMBIX (Channel sequence: ACN, Normalization: SN3D) */
+  QTDEMUX_AMBISONIC_FORMAT_AMB = 2,                 /* .AMB, Tetraproc (Channel sequence: FuMa, Normalization: FuMa) */
+  QTDEMUX_AMBISONIC_FORMAT_UA = 3,                  /* Universal Ambisonics (Channel sequence: SID, Normalization: N3D) */
+} QTDEMUX_AMBISONIC_FORMAT;
+
+typedef enum
+{
+  QTDEMUX_AMBISONIC_ORDER_UNKNOWN = 0,
+  QTDEMUX_AMBISONIC_ORDER_FOA = 1,                  /* First order Ambisonics */
+  QTDEMUX_AMBISONIC_ORDER_TOA = 3,                  /* Third order Ambisonics */
+  QTDEMUX_AMBISONIC_ORDER_HOA,                      /* Higher order Ambisonics */
+} QTDEMUX_AMBISONIC_ORDER;
+
+typedef enum
+{
+  QTDEMUX_AMBISONIC_CHANNEL_ORDERING_UNKNOWN = 0,
+  QTDEMUX_AMBISONIC_CHANNEL_ORDERING_ACN = 1,       /* Ambisonic Channel Number (ACN) system */
+  QTDEMUX_AMBISONIC_CHANNEL_ORDERING_FUMA = 2,      /* Furse-Malham ordering */
+  QTDEMUX_AMBISONIC_CHANNEL_ORDERING_SID = 3,       /* Single Index Designation ordering */
+} QTDEMUX_AMBISONIC_CHANNEL_ORDERING;
+
+typedef enum
+{
+  QTDEMUX_AMBISONIC_NORMALIZATION_UNKNOWN = 0,
+  QTDEMUX_AMBISONIC_NORMALIZATION_SN3D = 1,         /* Schmidt semi-normalization */
+  QTDEMUX_AMBISONIC_NORMALIZATION_FUMA = 2,         /* Furse-Malham MaxN normalization */
+  QTDEMUX_AMBISONIC_NORMALIZATION_N3D = 3,          /* Full 3D normalization */
+} QTDEMUX_AMBISONIC_NORMALIZATION;
+#endif /* TIZEN_FEATURE_QTDEMUX_MODIFICATION */
+
 const QtNodeType *qtdemux_type_get (guint32 fourcc);
 
 G_END_DECLS
index 1eb429f..8652a6a 100644 (file)
@@ -6410,8 +6410,11 @@ gst_matroska_demux_video_caps (GstMatroskaTrackVideoContext *
         static GstStaticCaps intra_caps = GST_STATIC_CAPS ("image/jpeg; "
             "video/x-raw; image/png; video/x-dv; video/x-huffyuv; video/x-ffv; "
             "video/x-compressed-yuv");
+        GstCaps *tmp = gst_static_caps_get (&intra_caps);
+
         context->intra_only =
-            gst_caps_can_intersect (gst_static_caps_get (&intra_caps), caps);
+            gst_caps_can_intersect (tmp, caps);
+        gst_caps_unref(tmp);
       }
 
       if (buf)
index 1b8ec9b..bc087f1 100644 (file)
@@ -1,19 +1,19 @@
 /* GStreamer ReplayGain volume adjustment
  *
  * Copyright (C) 2007 Rene Stadler <mail@renestadler.de>
- * 
+ *
  * gstrgvolume.c: Element to apply ReplayGain volume adjustment
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public License
  * as published by the Free Software Foundation; either version 2.1 of
  * the License, or (at your option) any later version.
- * 
+ *
  * This library is distributed in the hope that it will be useful, but
  * WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
@@ -74,6 +74,9 @@ GST_DEBUG_CATEGORY_STATIC (gst_rg_volume_debug);
 enum
 {
   PROP_0,
+#ifdef TIZEN_FEATURE_RGVOLUME_MODIFICATION
+  PROP_ENABLE_RGVOLUME,
+#endif
   PROP_ALBUM_MODE,
   PROP_HEADROOM,
   PROP_PRE_AMP,
@@ -82,6 +85,9 @@ enum
   PROP_RESULT_GAIN
 };
 
+#ifdef TIZEN_FEATURE_RGVOLUME_MODIFICATION
+#define DEFAULT_ENABLE_RGVOLUME TRUE
+#endif
 #define DEFAULT_ALBUM_MODE TRUE
 #define DEFAULT_HEADROOM 0.0
 #define DEFAULT_PRE_AMP 0.0
@@ -151,6 +157,20 @@ gst_rg_volume_class_init (GstRgVolumeClass * klass)
   gobject_class->get_property = gst_rg_volume_get_property;
   gobject_class->dispose = gst_rg_volume_dispose;
 
+#ifdef TIZEN_FEATURE_RGVOLUME_MODIFICATION
+  /**
+   * GstRgVolume:enable-rgvolume:
+   *
+   * Whether to enable replaygain volume.
+   *
+   * If rgvulme is disabled, the rgvolume isn't affected by tag and properties.
+   */
+  g_object_class_install_property (gobject_class, PROP_ENABLE_RGVOLUME,
+      g_param_spec_boolean ("enable-rgvolume", "Enable rg volume",
+          "Whether to enable replaygain volume", DEFAULT_ENABLE_RGVOLUME,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+#endif
+
   /**
    * GstRgVolume:album-mode:
    *
@@ -289,6 +309,9 @@ gst_rg_volume_init (GstRgVolume * self)
   GObjectClass *volume_class;
   GstPad *volume_pad, *ghost_pad;
 
+#ifdef TIZEN_FEATURE_RGVOLUME_MODIFICATION
+  self->enable_rgvolume = DEFAULT_ENABLE_RGVOLUME;
+#endif
   self->album_mode = DEFAULT_ALBUM_MODE;
   self->headroom = DEFAULT_HEADROOM;
   self->pre_amp = DEFAULT_PRE_AMP;
@@ -338,6 +361,11 @@ gst_rg_volume_set_property (GObject * object, guint prop_id,
   GstRgVolume *self = GST_RG_VOLUME (object);
 
   switch (prop_id) {
+#ifdef TIZEN_FEATURE_RGVOLUME_MODIFICATION
+    case PROP_ENABLE_RGVOLUME:
+      self->enable_rgvolume = g_value_get_boolean (value);
+      break;
+#endif
     case PROP_ALBUM_MODE:
       self->album_mode = g_value_get_boolean (value);
       break;
@@ -365,6 +393,11 @@ gst_rg_volume_get_property (GObject * object, guint prop_id,
   GstRgVolume *self = GST_RG_VOLUME (object);
 
   switch (prop_id) {
+#ifdef TIZEN_FEATURE_RGVOLUME_MODIFICATION
+    case PROP_ENABLE_RGVOLUME:
+      g_value_set_boolean (value, self->enable_rgvolume);
+      break;
+#endif
     case PROP_ALBUM_MODE:
       g_value_set_boolean (value, self->album_mode);
       break;
@@ -379,9 +412,17 @@ gst_rg_volume_get_property (GObject * object, guint prop_id,
       break;
     case PROP_TARGET_GAIN:
       g_value_set_double (value, self->target_gain);
+#ifdef TIZEN_FEATURE_RGVOLUME_MODIFICATION
+      if (!self->enable_rgvolume)
+        g_value_set_double (value, 0.0);
+#endif
       break;
     case PROP_RESULT_GAIN:
       g_value_set_double (value, self->result_gain);
+#ifdef TIZEN_FEATURE_RGVOLUME_MODIFICATION
+      if (!self->enable_rgvolume)
+        g_value_set_double (value, 0.0);
+#endif
       break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -595,6 +636,12 @@ gst_rg_volume_update_gain (GstRgVolume * self)
   gdouble target_gain, result_gain, result_volume;
   gboolean target_gain_changed, result_gain_changed;
 
+#ifdef TIZEN_FEATURE_RGVOLUME_MODIFICATION
+  if (!self->enable_rgvolume) {
+    g_object_set (self->volume_element, "volume", 1.0, NULL);
+    return;
+  }
+#endif
   gst_rg_volume_determine_gain (self, &target_gain, &result_gain);
 
   result_volume = DB_TO_LINEAR (result_gain);
index f63da9d..93aa6d1 100644 (file)
@@ -8,12 +8,12 @@
  * modify it under the terms of the GNU Lesser General Public License
  * as published by the Free Software Foundation; either version 2.1 of
  * the License, or (at your option) any later version.
- * 
+ *
  * This library is distributed in the hope that it will be useful, but
  * WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
@@ -55,6 +55,9 @@ struct _GstRgVolume
   GstElement *volume_element;
   gdouble max_volume;
 
+#ifdef TIZEN_FEATURE_RGVOLUME_MODIFICATION
+  gboolean enable_rgvolume;
+#endif
   gboolean album_mode;
   gdouble headroom;
   gdouble pre_amp;
index 39596cc..0a22799 100644 (file)
@@ -352,6 +352,9 @@ enum
 #define DEFAULT_MAX_STREAMS          G_MAXUINT
 #define DEFAULT_MAX_TS_OFFSET_ADJUSTMENT G_GUINT64_CONSTANT(0)
 #define DEFAULT_MAX_TS_OFFSET        G_GINT64_CONSTANT(3000000000)
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+#define DEFAULT_RTSP_USE_BUFFERING  FALSE
+#endif
 
 enum
 {
@@ -381,6 +384,9 @@ enum
   PROP_MAX_TS_OFFSET,
   PROP_FEC_DECODERS,
   PROP_FEC_ENCODERS,
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+  PROP_USE_RTSP_BUFFERING       /* use for player RTSP buffering */
+#endif
 };
 
 #define GST_RTP_BIN_RTCP_SYNC_TYPE (gst_rtp_bin_rtcp_sync_get_type())
@@ -455,7 +461,9 @@ struct _GstRtpBinStream
   gulong buffer_ptreq_sig;
   gulong buffer_ntpstop_sig;
   gint percent;
-
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+  gint prev_percent;
+#endif
   /* the PT demuxer of the SSRC */
   GstElement *demux;
   gulong demux_newpad_sig;
@@ -1791,6 +1799,9 @@ static GstRtpBinStream *
 create_stream (GstRtpBinSession * session, guint32 ssrc)
 {
   GstElement *buffer, *demux = NULL;
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+  GstElement *queue2 = NULL;
+#endif
   GstRtpBinStream *stream;
   GstRtpBin *rtpbin;
   GstState target;
@@ -1809,6 +1820,13 @@ create_stream (GstRtpBinSession * session, guint32 ssrc)
     if (!(demux = gst_element_factory_make ("rtpptdemux", NULL)))
       goto no_demux;
   }
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+  if (rtpbin->use_rtsp_buffering &&
+      rtpbin->buffer_mode == RTP_JITTER_BUFFER_MODE_SLAVE) {
+    if (!(queue2 = gst_element_factory_make ("queue2", NULL)))
+      goto no_queue2;
+  }
+#endif
 
   stream = g_new0 (GstRtpBinStream, 1);
   stream->ssrc = ssrc;
@@ -1821,6 +1839,9 @@ create_stream (GstRtpBinSession * session, guint32 ssrc)
   stream->rt_delta = 0;
   stream->rtp_delta = 0;
   stream->percent = 100;
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+  stream->prev_percent = 0;
+#endif
   stream->clock_base = -100 * GST_SECOND;
   session->streams = g_slist_prepend (session->streams, stream);
 
@@ -1863,17 +1884,43 @@ create_stream (GstRtpBinSession * session, guint32 ssrc)
     g_object_set (buffer, "max-ts-offset-adjustment",
         rtpbin->max_ts_offset_adjustment, NULL);
 
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+  /* configure queue2 to use live buffering */
+  if (queue2) {
+    g_object_set_data (G_OBJECT (queue2), "GstRTPBin.stream", stream);
+    g_object_set (queue2, "use-buffering", TRUE, NULL);
+    g_object_set (queue2, "buffer-mode", GST_BUFFERING_LIVE, NULL);
+  }
+#endif
   g_signal_emit (rtpbin, gst_rtp_bin_signals[SIGNAL_NEW_JITTERBUFFER], 0,
       buffer, session->id, ssrc);
 
   if (!rtpbin->ignore_pt)
     gst_bin_add (GST_BIN_CAST (rtpbin), demux);
 
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+  if (queue2)
+    gst_bin_add (GST_BIN_CAST (rtpbin), queue2);
+#endif
+
   /* link stuff */
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+  if (queue2) {
+    gst_element_link_pads_full (buffer, "src", queue2, "sink",
+        GST_PAD_LINK_CHECK_NOTHING);
+    if (demux) {
+      gst_element_link_pads_full (queue2, "src", demux, "sink",
+          GST_PAD_LINK_CHECK_NOTHING);
+    }
+  } else if (demux) {
+    gst_element_link_pads_full (buffer, "src", demux, "sink",
+        GST_PAD_LINK_CHECK_NOTHING);
+  }
+#else
   if (demux)
     gst_element_link_pads_full (buffer, "src", demux, "sink",
         GST_PAD_LINK_CHECK_NOTHING);
-
+#endif
   if (rtpbin->buffering) {
     guint64 last_out;
 
@@ -1896,6 +1943,11 @@ create_stream (GstRtpBinSession * session, guint32 ssrc)
 
   gst_element_set_state (buffer, target);
 
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+  if (queue2)
+    gst_element_set_state (queue2, target);
+#endif
+
   return stream;
 
   /* ERRORS */
@@ -1916,6 +1968,15 @@ no_demux:
     g_warning ("rtpbin: could not create rtpptdemux element");
     return NULL;
   }
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+no_queue2:
+  {
+    gst_object_unref (buffer);
+    gst_object_unref (demux);
+    g_warning ("rtpbin: could not create queue2 element");
+    return NULL;
+  }
+#endif
 }
 
 /* called with RTP_BIN_LOCK */
@@ -2765,6 +2826,14 @@ gst_rtp_bin_class_init (GstRtpBinClass * klass)
           "fec-encoders='fec,0=\"rtpst2022-1-fecenc\\ rows\\=5\\ columns\\=5\";'",
           GST_TYPE_STRUCTURE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
 
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+  g_object_class_install_property (gobject_class, PROP_USE_RTSP_BUFFERING,
+      g_param_spec_boolean ("use-rtsp-buffering", "Use RTSP buffering",
+          "Use RTSP buffering in RTP_JITTER_BUFFER_MODE_SLAVE buffer mode",
+          DEFAULT_RTSP_USE_BUFFERING,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+#endif
+
   gstelement_class->change_state = GST_DEBUG_FUNCPTR (gst_rtp_bin_change_state);
   gstelement_class->request_new_pad =
       GST_DEBUG_FUNCPTR (gst_rtp_bin_request_new_pad);
@@ -2851,6 +2920,9 @@ gst_rtp_bin_init (GstRtpBin * rtpbin)
   rtpbin->max_ts_offset_adjustment = DEFAULT_MAX_TS_OFFSET_ADJUSTMENT;
   rtpbin->max_ts_offset = DEFAULT_MAX_TS_OFFSET;
   rtpbin->max_ts_offset_is_set = FALSE;
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+  rtpbin->use_rtsp_buffering = FALSE;
+#endif
 
   /* some default SDES entries */
   cname = g_strdup_printf ("user%u@host-%x", g_random_int (), g_random_int ());
@@ -3011,6 +3083,13 @@ gst_rtp_bin_set_property (GObject * object, guint prop_id,
   rtpbin = GST_RTP_BIN (object);
 
   switch (prop_id) {
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+    case PROP_USE_RTSP_BUFFERING:
+      GST_RTP_BIN_LOCK (rtpbin);
+      rtpbin->use_rtsp_buffering = g_value_get_boolean (value);
+      GST_RTP_BIN_UNLOCK (rtpbin);
+      break;
+#endif
     case PROP_LATENCY:
       GST_RTP_BIN_LOCK (rtpbin);
       rtpbin->latency_ms = g_value_get_uint (value);
@@ -3186,6 +3265,13 @@ gst_rtp_bin_get_property (GObject * object, guint prop_id,
   rtpbin = GST_RTP_BIN (object);
 
   switch (prop_id) {
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+    case PROP_USE_RTSP_BUFFERING:
+      GST_RTP_BIN_LOCK (rtpbin);
+      g_value_set_boolean (value, rtpbin->use_rtsp_buffering);
+      GST_RTP_BIN_UNLOCK (rtpbin);
+      break;
+#endif
     case PROP_LATENCY:
       GST_RTP_BIN_LOCK (rtpbin);
       g_value_set_uint (value, rtpbin->latency_ms);
@@ -3313,6 +3399,9 @@ gst_rtp_bin_handle_message (GstBin * bin, GstMessage * message)
       gint min_percent = 100;
       GSList *sessions, *streams;
       GstRtpBinStream *stream;
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+      gboolean buffering_flag = FALSE, update_buffering_status = TRUE;
+#endif
       gboolean change = FALSE, active = FALSE;
       GstClockTime min_out_time;
       GstBufferingMode mode;
@@ -3346,9 +3435,54 @@ gst_rtp_bin_handle_message (GstBin * bin, GstMessage * message)
                 streams = g_slist_next (streams)) {
               GstRtpBinStream *stream = (GstRtpBinStream *) streams->data;
 
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+              if (rtpbin->use_rtsp_buffering &&
+                  rtpbin->buffer_mode == RTP_JITTER_BUFFER_MODE_SLAVE) {
+                GstPad *temp_pad_src = NULL;
+                GstCaps *temp_caps_src = NULL;
+                GstStructure *caps_structure;
+                const gchar *caps_str_media = NULL;
+                temp_pad_src = gst_element_get_static_pad (stream->buffer, "src");
+                temp_caps_src = gst_pad_get_current_caps (temp_pad_src);
+                GST_DEBUG_OBJECT (bin,
+                    "stream %p percent %d : temp_caps_src=%" GST_PTR_FORMAT,
+                    stream, stream->percent, temp_caps_src);
+                if (temp_caps_src) {
+                  caps_structure = gst_caps_get_structure (temp_caps_src, 0);
+                  caps_str_media =
+                      gst_structure_get_string (caps_structure, "media");
+                  if (caps_str_media != NULL) {
+                    if ((strcmp (caps_str_media, "video") != 0)
+                        && (strcmp (caps_str_media, "audio") != 0)) {
+                      GST_DEBUG_OBJECT (bin,
+                          "Non Audio/Video Stream.. ignoring the same !!");
+                      gst_caps_unref (temp_caps_src);
+                      gst_object_unref (temp_pad_src);
+                      continue;
+                    } else if (stream->percent >= 100) {
+                      /* Most of the time buffering icon displays in rtsp playback.
+                         Optimizing the buffering updation code. Whenever any stream percentage
+                         reaches 100 do not post buffering messages. */
+                      if (stream->prev_percent < 100)
+                        buffering_flag = TRUE;
+                      else
+                        update_buffering_status = FALSE;
+                    }
+                  }
+                  gst_caps_unref (temp_caps_src);
+                }
+                gst_object_unref (temp_pad_src);
+                /* Updating prev stream percentage */
+                stream->prev_percent = stream->percent;
+              } else {
+                GST_DEBUG_OBJECT (bin, "stream %p percent %d", stream,
+                    stream->percent);
+              }
+#else
               GST_DEBUG_OBJECT (bin, "stream %p percent %d", stream,
                   stream->percent);
 
+#endif
               /* find min percent */
               if (min_percent > stream->percent)
                 min_percent = stream->percent;
@@ -3362,6 +3496,10 @@ gst_rtp_bin_handle_message (GstBin * bin, GstMessage * message)
         }
         GST_DEBUG_OBJECT (bin, "min percent %d", min_percent);
 
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+        if (!(rtpbin->use_rtsp_buffering &&
+            rtpbin->buffer_mode == RTP_JITTER_BUFFER_MODE_SLAVE)) {
+#endif
         if (rtpbin->buffering) {
           if (min_percent == 100) {
             rtpbin->buffering = FALSE;
@@ -3376,16 +3514,35 @@ gst_rtp_bin_handle_message (GstBin * bin, GstMessage * message)
             change = TRUE;
           }
         }
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+        }
+#endif
         GST_RTP_BIN_UNLOCK (rtpbin);
 
         gst_message_unref (message);
 
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+          if (rtpbin->use_rtsp_buffering &&
+              rtpbin->buffer_mode == RTP_JITTER_BUFFER_MODE_SLAVE) {
+          if (update_buffering_status == FALSE)
+            break;
+          if (buffering_flag) {
+            min_percent = 100;
+            GST_DEBUG_OBJECT (bin, "forcefully change min_percent to 100!!!");
+          }
+        }
+#endif
         /* make a new buffering message with the min value */
         message =
             gst_message_new_buffering (GST_OBJECT_CAST (bin), min_percent);
         gst_message_set_buffering_stats (message, mode, avg_in, avg_out,
             buffering_left);
 
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+        if (rtpbin->use_rtsp_buffering &&
+            rtpbin->buffer_mode == RTP_JITTER_BUFFER_MODE_SLAVE)
+          goto slave_buffering;
+#endif
         if (G_UNLIKELY (change)) {
           GstClock *clock;
           guint64 running_time = 0;
@@ -3465,6 +3622,9 @@ gst_rtp_bin_handle_message (GstBin * bin, GstMessage * message)
           GST_RTP_BIN_UNLOCK (rtpbin);
         }
       }
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+slave_buffering:
+#endif
       GST_BIN_CLASS (parent_class)->handle_message (bin, message);
       break;
     }
index 28c8d2b..a6df9c1 100644 (file)
@@ -78,7 +78,9 @@ struct _GstRtpBin {
   guint64         max_ts_offset_adjustment;
   gint64          max_ts_offset;
   gboolean        max_ts_offset_is_set;
-
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+  gboolean        use_rtsp_buffering;
+#endif
   /* a list of session */
   GSList         *sessions;
 
index aef5cbc..41a49b2 100644 (file)
@@ -1265,6 +1265,9 @@ rtp_jitter_buffer_pop (RTPJitterBuffer * jbuf, gint * percent)
 
   /* let's clear the pointers so we can ensure we don't free items that are
    * still in the jitterbuffer */
+#ifdef __TIZEN__
+  if (item)
+#endif
   item->next = item->prev = NULL;
 
   return (RTPJitterBufferItem *) item;
index 0f35046..c879086 100644 (file)
@@ -618,7 +618,11 @@ rtp_twcc_stats_calculate_windowed_stats (RTPTWCCStats * stats)
     if (GST_CLOCK_STIME_IS_VALID (stats->avg_delta_of_delta)) {
       stats->avg_delta_of_delta_change =
           (avg_delta_of_delta -
+#ifndef __TIZEN__
           stats->avg_delta_of_delta) / (250 * GST_USECOND);
+#else
+          stats->avg_delta_of_delta) / (gfloat) (250 * GST_USECOND);
+#endif
     }
     stats->avg_delta_of_delta = avg_delta_of_delta;
   }
index 89bb88a..38ab9b2 100644 (file)
 #endif
 
 #include "gstrtspelements.h"
-
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+#include "gstrtspsrc.h"
+#endif
 static gboolean
 plugin_init (GstPlugin * plugin)
 {
   gboolean ret = FALSE;
 
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+  if (!gst_element_register (plugin, "rtspsrc", GST_RANK_PRIMARY,
+          GST_TYPE_RTSPSRC))
+    return FALSE;
+#else
   ret |= GST_ELEMENT_REGISTER (rtspsrc, plugin);
+#endif
+
   ret |= GST_ELEMENT_REGISTER (rtpdec, plugin);
 
   return ret;
index 063b761..49b0e55 100644 (file)
@@ -294,6 +294,10 @@ gst_rtsp_backchannel_get_type (void)
 #define DEFAULT_IS_LIVE TRUE
 #define DEFAULT_IGNORE_X_SERVER_REPLY FALSE
 
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+#define DEFAULT_START_POSITION   0
+#endif
+
 enum
 {
   PROP_0,
@@ -302,6 +306,10 @@ enum
   PROP_DEBUG,
   PROP_RETRY,
   PROP_TIMEOUT,
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+  PROP_START_POSITION,
+  PROP_RESUME_POSITION,
+#endif
   PROP_TCP_TIMEOUT,
   PROP_LATENCY,
   PROP_DROP_ON_LATENCY,
@@ -514,6 +522,32 @@ cmd_to_string (guint cmd)
 }
 #endif
 
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+static void
+gst_rtspsrc_post_error_message (GstRTSPSrc * src, GstRTSPSrcError error_id,
+    const gchar * error_string)
+{
+  GstMessage *message;
+  GstStructure *structure;
+  gboolean ret = TRUE;
+
+  GST_ERROR_OBJECT (src, "[%d] %s", error_id, error_string);
+
+  structure = gst_structure_new ("streaming_error",
+      "error_id", G_TYPE_UINT, error_id,
+      "error_string", G_TYPE_STRING, error_string, NULL);
+
+  message =
+      gst_message_new_custom (GST_MESSAGE_ERROR, GST_OBJECT (src), structure);
+
+  ret = gst_element_post_message (GST_ELEMENT (src), message);
+  if (!ret)
+    GST_ERROR_OBJECT (src, "fail to post error message.");
+
+  return;
+}
+#endif
+
 static gboolean
 default_select_stream (GstRTSPSrc * src, guint id, GstCaps * caps)
 {
@@ -601,7 +635,18 @@ gst_rtspsrc_class_init (GstRTSPSrcClass * klass)
           "Retry TCP transport after UDP timeout microseconds (0 = disabled)",
           0, G_MAXUINT64, DEFAULT_TIMEOUT,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+  g_object_class_install_property (gobject_class, PROP_START_POSITION,
+      g_param_spec_uint64 ("pending-start-position", "set start position",
+          "Set start position before PLAYING request.",
+          0, G_MAXUINT64, DEFAULT_START_POSITION,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (gobject_class, PROP_RESUME_POSITION,
+      g_param_spec_uint64 ("resume-position", "set resume position",
+          "Set resume position before PLAYING request after pause.",
+          0, G_MAXUINT64, DEFAULT_START_POSITION,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+#endif
   g_object_class_install_property (gobject_class, PROP_TCP_TIMEOUT,
       g_param_spec_uint64 ("tcp-timeout", "TCP Timeout",
           "Fail after timeout microseconds on TCP connections (0 = disabled)",
@@ -1409,6 +1454,14 @@ gst_rtspsrc_init (GstRTSPSrc * src)
   src->debug = DEFAULT_DEBUG;
   src->retry = DEFAULT_RETRY;
   src->udp_timeout = DEFAULT_TIMEOUT;
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+  src->start_position = DEFAULT_START_POSITION;
+  src->is_audio_codec_supported = FALSE;
+  src->is_video_codec_supported = FALSE;
+  src->audio_codec = NULL;
+  src->video_codec = NULL;
+  src->video_frame_size = NULL;
+#endif
   gst_rtspsrc_set_tcp_timeout (src, DEFAULT_TCP_TIMEOUT);
   src->latency = DEFAULT_LATENCY_MS;
   src->drop_on_latency = DEFAULT_DROP_ON_LATENCY;
@@ -1451,6 +1504,10 @@ gst_rtspsrc_init (GstRTSPSrc * src)
   src->seek_seqnum = GST_SEQNUM_INVALID;
   src->group_id = GST_GROUP_ID_INVALID;
 
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+  g_mutex_init (&(src)->pause_lock);
+  g_cond_init (&(src)->open_end);
+#endif
   /* get a list of all extensions */
   src->extensions = gst_rtsp_ext_list_get ();
 
@@ -1497,6 +1554,22 @@ gst_rtspsrc_finalize (GObject * object)
 
   rtspsrc = GST_RTSPSRC (object);
 
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+  rtspsrc->is_audio_codec_supported = FALSE;
+  rtspsrc->is_video_codec_supported = FALSE;
+  if (rtspsrc->audio_codec) {
+    g_free (rtspsrc->audio_codec);
+    rtspsrc->audio_codec = NULL;
+  }
+  if (rtspsrc->video_codec) {
+    g_free (rtspsrc->video_codec);
+    rtspsrc->video_codec = NULL;
+  }
+  if (rtspsrc->video_frame_size) {
+    g_free (rtspsrc->video_frame_size);
+    rtspsrc->video_frame_size = NULL;
+  }
+#endif
   gst_rtsp_ext_list_free (rtspsrc->extensions);
   g_free (rtspsrc->conninfo.location);
   gst_rtsp_url_free (rtspsrc->conninfo.url);
@@ -1506,6 +1579,11 @@ gst_rtspsrc_finalize (GObject * object)
   g_free (rtspsrc->multi_iface);
   g_free (rtspsrc->user_agent);
 
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+  g_mutex_clear (&(rtspsrc)->pause_lock);
+  g_cond_clear (&(rtspsrc)->open_end);
+#endif
+
   if (rtspsrc->sdp) {
     gst_sdp_message_free (rtspsrc->sdp);
     rtspsrc->sdp = NULL;
@@ -1638,6 +1716,16 @@ gst_rtspsrc_set_property (GObject * object, guint prop_id, const GValue * value,
     case PROP_TIMEOUT:
       rtspsrc->udp_timeout = g_value_get_uint64 (value);
       break;
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+    case PROP_START_POSITION:
+      rtspsrc->start_position = g_value_get_uint64 (value);
+      break;
+    case PROP_RESUME_POSITION:
+      rtspsrc->last_pos = g_value_get_uint64 (value);
+      GST_DEBUG_OBJECT (rtspsrc, "src->last_pos value set to %" GST_TIME_FORMAT,
+          GST_TIME_ARGS (rtspsrc->last_pos));
+      break;
+#endif
     case PROP_TCP_TIMEOUT:
       gst_rtspsrc_set_tcp_timeout (rtspsrc, g_value_get_uint64 (value));
       break;
@@ -1819,6 +1907,14 @@ gst_rtspsrc_get_property (GObject * object, guint prop_id, GValue * value,
     case PROP_TIMEOUT:
       g_value_set_uint64 (value, rtspsrc->udp_timeout);
       break;
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+    case PROP_START_POSITION:
+      g_value_set_uint64 (value, rtspsrc->start_position);
+      break;
+    case PROP_RESUME_POSITION:
+      g_value_set_uint64 (value, rtspsrc->last_pos);
+      break;
+#endif
     case PROP_TCP_TIMEOUT:
       g_value_set_uint64 (value, rtspsrc->tcp_timeout);
       break;
@@ -2195,7 +2291,9 @@ gst_rtspsrc_collect_payloads (GstRTSPSrc * src, const GstSDPMessage * sdp,
     GstStructure *s;
     const gchar *enc;
     PtMapItem item;
-
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+    const gchar *encoder, *mediatype;
+#endif
     pt = atoi (gst_sdp_media_get_format (media, i));
 
     GST_DEBUG_OBJECT (src, " looking at %d pt: %d", i, pt);
@@ -2214,6 +2312,51 @@ gst_rtspsrc_collect_payloads (GstRTSPSrc * src, const GstSDPMessage * sdp,
       if (strcmp (enc, "X-ASF-PF") == 0)
         stream->container = TRUE;
     }
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+    if ((mediatype = gst_structure_get_string (s, "media"))) {
+      GST_DEBUG_OBJECT (src, " mediatype : %s", mediatype);
+      if (!strcmp (mediatype, "video")) {
+        if ((encoder = gst_structure_get_string (s, "encoding-name"))) {
+          GST_DEBUG_OBJECT (src, " encoder : %s", encoder);
+          if ((!strcmp (encoder, "H261")) ||
+              (!strcmp (encoder, "H263")) ||
+              (!strcmp (encoder, "H263-1998"))
+              || (!strcmp (encoder, "H263-2000")) || (!strcmp (encoder, "H264"))
+              || (!strcmp (encoder, "MP4V-ES"))) {
+            src->is_video_codec_supported = TRUE;
+            GST_DEBUG_OBJECT (src, "Supported Video Codec %s", encoder);
+          } else {
+            GST_DEBUG_OBJECT (src, "Unsupported Video Codec %s", encoder);
+          }
+        }
+
+        src->video_codec = g_strdup (encoder);
+        src->video_frame_size =
+            g_strdup (gst_structure_get_string (s, "a-framesize"));
+        GST_DEBUG_OBJECT (src, "video_codec %s , video_frame_size %s ",
+            src->video_codec, src->video_frame_size);
+      } else if (!strcmp (mediatype, "audio")) {
+        if ((encoder = gst_structure_get_string (s, "encoding-name"))) {
+          GST_DEBUG_OBJECT (src, " encoder : %s", encoder);
+          if ((!strcmp (encoder, "MP4A-LATM")) ||
+              (!strcmp (encoder, "AMR")) || (!strcmp (encoder, "AMR-WB"))
+              || (!strcmp (encoder, "AMR-NB"))
+              || (!strcmp (encoder, "mpeg4-generic"))
+              || (!strcmp (encoder, "MPEG4-GENERIC"))
+              || (!strcmp (encoder, "QCELP")) || ((strstr (encoder, "G726"))
+                  || (strstr (encoder, "PCMU")))) {
+            src->is_audio_codec_supported = TRUE;
+            GST_DEBUG_OBJECT (src, "Supported Audio Codec %s", encoder);
+          } else {
+            GST_DEBUG_OBJECT (src, "Unsupported Audio Codec %s", encoder);
+          }
+        }
+
+        src->audio_codec = g_strdup (encoder);
+        GST_DEBUG_OBJECT (src, "audio_codec %s ", src->audio_codec);
+      }
+    }
+#endif
 
     /* Merge in global caps */
     /* Intersect will merge in missing fields to the current caps */
@@ -2714,6 +2857,11 @@ gst_rtspsrc_set_state (GstRTSPSrc * src, GstState state)
 {
   GList *walk;
 
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+  GST_WARNING_OBJECT (src, "Setting [%s] element state to: %s \n",
+      GST_ELEMENT_NAME (GST_ELEMENT_CAST (src)),
+      gst_element_state_get_name (state));
+#endif
   if (src->manager)
     gst_element_set_state (GST_ELEMENT_CAST (src->manager), state);
 
@@ -3993,6 +4141,12 @@ gst_rtspsrc_stream_configure_manager (GstRTSPSrc * src, GstRTSPStream * stream,
         if (!(src->manager = gst_element_factory_make (manager, "manager")))
           goto manager_failed;
       }
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+      if (g_strcmp0 (manager, "rtpbin") == 0) {
+          /* set for player rtsp buffering */
+          g_object_set (src->manager, "use-rtsp-buffering", TRUE, NULL);
+      }
+#endif
 
       /* we manage this element */
       gst_element_set_locked_state (src->manager, TRUE);
@@ -5729,8 +5883,13 @@ receive_error:
   {
     gchar *str = gst_rtsp_strresult (res);
 
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+    gst_rtspsrc_post_error_message (src, GST_RTSPSRC_ERROR_BAD_SERVER,
+        "Could not receive message.");
+#else
     GST_ELEMENT_ERROR (src, RESOURCE, READ, (NULL),
         ("Could not receive message. (%s)", str));
+#endif
     g_free (str);
 
     gst_rtsp_message_unset (&message);
@@ -5740,8 +5899,13 @@ handle_request_failed:
   {
     gchar *str = gst_rtsp_strresult (res);
 
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+    gst_rtspsrc_post_error_message (src, GST_RTSPSRC_ERROR_SERVICE_UNAVAILABLE,
+        "Could not handle server message.");
+#else
     GST_ELEMENT_ERROR (src, RESOURCE, WRITE, (NULL),
         ("Could not handle server message. (%s)", str));
+#endif
     g_free (str);
     gst_rtsp_message_unset (&message);
     return GST_FLOW_ERROR;
@@ -5866,8 +6030,13 @@ connect_error:
 
     src->conninfo.connected = FALSE;
     if (res != GST_RTSP_EINTR) {
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+      gst_rtspsrc_post_error_message (src, GST_RTSPSRC_ERROR_CONNECTION_FAIL,
+          "Could not connect to server.");
+#else
       GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ_WRITE, (NULL),
           ("Could not connect to server. (%s)", str));
+#endif
       g_free (str);
       ret = GST_FLOW_ERROR;
     } else {
@@ -5879,8 +6048,13 @@ receive_error:
   {
     gchar *str = gst_rtsp_strresult (res);
 
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+    gst_rtspsrc_post_error_message (src, GST_RTSPSRC_ERROR_SERVER_DISCONNECTED,
+        "Could not receive message.");
+#else
     GST_ELEMENT_ERROR (src, RESOURCE, READ, (NULL),
         ("Could not receive message. (%s)", str));
+#endif
     g_free (str);
     return GST_FLOW_ERROR;
   }
@@ -5891,8 +6065,14 @@ handle_request_failed:
 
     gst_rtsp_message_unset (&message);
     if (res != GST_RTSP_EINTR) {
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+      gst_rtspsrc_post_error_message (src,
+          GST_RTSPSRC_ERROR_SERVICE_UNAVAILABLE,
+          "Could not handle server message.");
+#else
       GST_ELEMENT_ERROR (src, RESOURCE, WRITE, (NULL),
           ("Could not handle server message. (%s)", str));
+#endif
       g_free (str);
       ret = GST_FLOW_ERROR;
     } else {
@@ -5964,10 +6144,15 @@ no_protocols:
   {
     src->cur_protocols = 0;
     /* no transport possible, post an error and stop */
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+    gst_rtspsrc_post_error_message (src, GST_RTSPSRC_ERROR_BAD_TRANSPORT,
+        "Could not receive any UDP packets for seconds, maybe your firewall is blocking it. No other protocols to try.");
+#else
     GST_ELEMENT_ERROR (src, RESOURCE, READ, (NULL),
         ("Could not receive any UDP packets for %.4f seconds, maybe your "
             "firewall is blocking it. No other protocols to try.",
             gst_guint64_to_gdouble (src->udp_timeout) / 1000000.0));
+#endif
     return GST_RTSP_ERROR;
   }
 open_failed:
@@ -6014,9 +6199,38 @@ gst_rtspsrc_loop_start_cmd (GstRTSPSrc * src, gint cmd)
 static void
 gst_rtspsrc_loop_complete_cmd (GstRTSPSrc * src, gint cmd)
 {
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+  GstMessage *s;
+  GST_WARNING_OBJECT (src, "Got cmd %s", cmd_to_string (cmd));
+#endif
+
   switch (cmd) {
     case CMD_OPEN:
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+      GST_DEBUG_OBJECT (src,
+          "rtsp_duration %" GST_TIME_FORMAT
+          ", rtsp_audio_codec %s , rtsp_video_codec %s , rtsp_video_frame_size %s",
+          GST_TIME_ARGS (src->segment.duration), src->audio_codec,
+          src->video_codec, src->video_frame_size);
+
+      /* post message */
+      s = gst_message_new_element (GST_OBJECT_CAST (src),
+          gst_structure_new ("rtspsrc_properties",
+              "rtsp_duration", G_TYPE_UINT64, src->segment.duration,
+              "rtsp_audio_codec", G_TYPE_STRING, src->audio_codec,
+              "rtsp_video_codec", G_TYPE_STRING, src->video_codec,
+              "rtsp_video_frame_size", G_TYPE_STRING, src->video_frame_size,
+              NULL));
+
+      gst_element_post_message (GST_ELEMENT_CAST (src), s);
+#endif
       GST_ELEMENT_PROGRESS (src, COMPLETE, "open", ("Opened Stream"));
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+      /* rtspsrc PAUSE state should be here for parsing sdp before PAUSE state changed. */
+      g_mutex_lock (&(src)->pause_lock);
+      g_cond_signal (&(src)->open_end);
+      g_mutex_unlock (&(src)->pause_lock);
+#endif
       break;
     case CMD_PLAY:
       GST_ELEMENT_PROGRESS (src, COMPLETE, "request", ("Sent PLAY request"));
@@ -6075,6 +6289,14 @@ gst_rtspsrc_loop_error_cmd (GstRTSPSrc * src, gint cmd)
   switch (cmd) {
     case CMD_OPEN:
       GST_ELEMENT_PROGRESS (src, ERROR, "open", ("Open failed"));
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+      /* Ending conditional wait for pause when open fails.*/
+      g_mutex_lock (&(src)->pause_lock);
+      g_cond_signal (&(src)->open_end);
+      g_mutex_unlock (&(src)->pause_lock);
+      GST_WARNING_OBJECT (src,
+          "ending conditional wait for pause as open is failed.");
+#endif
       break;
     case CMD_PLAY:
       GST_ELEMENT_PROGRESS (src, ERROR, "request", ("PLAY failed"));
@@ -6406,8 +6628,13 @@ no_auth_available:
   {
     /* Output an error indicating that we couldn't connect because there were
      * no supported authentication protocols */
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+    gst_rtspsrc_post_error_message (src, GST_RTSPSRC_ERROR_NOT_AUTHORIZED,
+        "No supported authentication protocol was found");
+#else
     GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (NULL),
         ("No supported authentication protocol was found"));
+#endif
     return FALSE;
   }
 no_user_pass:
@@ -6502,8 +6729,14 @@ receive_error:
         gchar *str = gst_rtsp_strresult (res);
 
         if (res != GST_RTSP_EINTR) {
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+          gst_rtspsrc_post_error_message (src,
+              GST_RTSPSRC_ERROR_SERVER_DISCONNECTED,
+              "Could not receive message.");
+#else
           GST_ELEMENT_ERROR (src, RESOURCE, READ, (NULL),
               ("Could not receive message. (%s)", str));
+#endif
         } else {
           GST_WARNING_OBJECT (src, "receive interrupted");
         }
@@ -6586,8 +6819,13 @@ send_error:
     gchar *str = gst_rtsp_strresult (res);
 
     if (res != GST_RTSP_EINTR) {
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+      gst_rtspsrc_post_error_message (src, GST_RTSPSRC_ERROR_CONNECTION_FAIL,
+          "Could not send message.");
+#else
       GST_ELEMENT_ERROR (src, RESOURCE, WRITE, (NULL),
           ("Could not send message. (%s)", str));
+#endif
     } else {
       GST_WARNING_OBJECT (src, "send interrupted");
     }
@@ -6715,12 +6953,22 @@ error_response:
 
     switch (response->type_data.response.code) {
       case GST_RTSP_STS_NOT_FOUND:
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+        gst_rtspsrc_post_error_message (src, GST_RTSPSRC_ERROR_BAD_REQUEST,
+            "STS NOT FOUND");
+#else
         RTSP_SRC_RESPONSE_ERROR (src, response, RESOURCE, NOT_FOUND,
             "Not found");
+#endif
         break;
       case GST_RTSP_STS_UNAUTHORIZED:
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+        gst_rtspsrc_post_error_message (src, GST_RTSPSRC_ERROR_NOT_AUTHORIZED,
+            "STS NOT AUTHORIZED");
+#else
         RTSP_SRC_RESPONSE_ERROR (src, response, RESOURCE, NOT_AUTHORIZED,
             "Unauthorized");
+#endif
         break;
       case GST_RTSP_STS_MOVED_PERMANENTLY:
       case GST_RTSP_STS_MOVE_TEMPORARILY:
@@ -6774,8 +7022,13 @@ error_response:
         res = GST_RTSP_OK;
         break;
       default:
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+        gst_rtspsrc_post_error_message (src, GST_RTSPSRC_ERROR_UNEXPECTED_MSG,
+            "Got error response from Server");
+#else
         RTSP_SRC_RESPONSE_ERROR (src, response, RESOURCE, READ,
             "Unhandled error");
+#endif
         break;
     }
     /* if we return ERROR we should unset the response ourselves */
@@ -6858,14 +7111,24 @@ gst_rtspsrc_parse_methods (GstRTSPSrc * src, GstRTSPMessage * response)
   /* ERRORS */
 no_describe:
   {
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+    gst_rtspsrc_post_error_message (src, GST_RTSPSRC_ERROR_METHOD_NOT_ALLOWED,
+        "Server does not support DESCRIBE.");
+#else
     GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (NULL),
         ("Server does not support DESCRIBE."));
+#endif
     return FALSE;
   }
 no_setup:
   {
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+    gst_rtspsrc_post_error_message (src, GST_RTSPSRC_ERROR_METHOD_NOT_ALLOWED,
+        "Server does not support SETUP.");
+#else
     GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (NULL),
         ("Server does not support SETUP."));
+#endif
     return FALSE;
   }
 }
@@ -7609,39 +7872,66 @@ gst_rtspsrc_setup_streams_start (GstRTSPSrc * src, gboolean async)
   /* ERRORS */
 no_protocols:
   {
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+    gst_rtspsrc_post_error_message (src, GST_RTSPSRC_ERROR_INVALID_PROTOCOL,
+        "Could not connect to server, no protocols left");
+#else
     /* no transport possible, post an error and stop */
     GST_ELEMENT_ERROR (src, RESOURCE, READ, (NULL),
         ("Could not connect to server, no protocols left"));
+#endif
     return GST_RTSP_ERROR;
   }
 no_streams:
   {
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+    gst_rtspsrc_post_error_message (src, GST_RTSPSRC_ERROR_CONTENT_NOT_FOUND,
+        "SDP contains no streams");
+#else
     GST_ELEMENT_ERROR (src, RESOURCE, SETTINGS, (NULL),
         ("SDP contains no streams"));
+#endif
     return GST_RTSP_ERROR;
   }
 create_request_failed:
   {
     gchar *str = gst_rtsp_strresult (res);
 
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+    gst_rtspsrc_post_error_message (src, GST_RTSPSRC_ERROR_BAD_REQUEST,
+        "Could not create request.");
+#else
     GST_ELEMENT_ERROR (src, LIBRARY, INIT, (NULL),
         ("Could not create request. (%s)", str));
+#endif
     g_free (str);
     goto cleanup_error;
   }
 setup_transport_failed:
   {
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+    gst_rtspsrc_post_error_message (src, GST_RTSPSRC_ERROR_BAD_REQUEST,
+        "Could not setup transport.");
+#else
     GST_ELEMENT_ERROR (src, RESOURCE, SETTINGS, (NULL),
         ("Could not setup transport."));
+#endif
     res = GST_RTSP_ERROR;
     goto cleanup_error;
   }
 response_error:
   {
+#ifndef TIZEN_FEATURE_RTSP_MODIFICATION
     const gchar *str = gst_rtsp_status_as_text (code);
+#endif
 
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+    gst_rtspsrc_post_error_message (src, GST_RTSPSRC_ERROR_UNEXPECTED_MSG,
+        "Error from Server .");
+#else
     GST_ELEMENT_ERROR (src, RESOURCE, WRITE, (NULL),
         ("Error (%d): %s", code, GST_STR_NULL (str)));
+#endif
     res = GST_RTSP_ERROR;
     goto cleanup_error;
   }
@@ -7650,8 +7940,13 @@ send_error:
     gchar *str = gst_rtsp_strresult (res);
 
     if (res != GST_RTSP_EINTR) {
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+      gst_rtspsrc_post_error_message (src, GST_RTSPSRC_ERROR_CONNECTION_FAIL,
+          "Could not send message.");
+#else
       GST_ELEMENT_ERROR (src, RESOURCE, WRITE, (NULL),
           ("Could not send message. (%s)", str));
+#endif
     } else {
       GST_WARNING_OBJECT (src, "send interrupted");
     }
@@ -7662,15 +7957,27 @@ nothing_to_activate:
   {
     /* none of the available error codes is really right .. */
     if (unsupported_real) {
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+      gst_rtspsrc_post_error_message (src,
+          GST_RTSPSRC_ERROR_UNSUPPORTED_MEDIA_TYPE,
+          "No supported stream was found. You might need to install a GStreamer RTSP extension plugin for Real media streams.");
+#else
       GST_ELEMENT_ERROR (src, STREAM, CODEC_NOT_FOUND,
           (_("No supported stream was found. You might need to install a "
                   "GStreamer RTSP extension plugin for Real media streams.")),
           (NULL));
+#endif
     } else {
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+      gst_rtspsrc_post_error_message (src,
+          GST_RTSPSRC_ERROR_UNSUPPORTED_MEDIA_TYPE,
+          "No supported stream was found. You might need to allow more transport protocols or may otherwise be missing the right GStreamer RTSP extension plugin.");
+#else
       GST_ELEMENT_ERROR (src, STREAM, CODEC_NOT_FOUND,
           (_("No supported stream was found. You might need to allow "
                   "more transport protocols or may otherwise be missing "
                   "the right GStreamer RTSP extension plugin.")), (NULL));
+#endif
     }
     return GST_RTSP_ERROR;
   }
@@ -7728,10 +8035,21 @@ gst_rtspsrc_parse_range (GstRTSPSrc * src, const gchar * range,
   else
     segment->stop = seconds;
 
+#ifndef TIZEN_FEATURE_RTSP_MODIFICATION
+/*
+The range-min points to the start of the segment , not the current position.
+After getting the current position from MSL during normal pause/resume or during seek , we should not
+update the segment->position again with the rtp header npt timestamp.
+*/
   segment->position = seconds;
+#endif
 
   if (therange->max.type == GST_RTSP_TIME_NOW)
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+    seconds = 0;
+#else
     seconds = -1;
+#endif
   else if (therange->max.type == GST_RTSP_TIME_END)
     seconds = -1;
   else
@@ -7921,6 +8239,11 @@ gst_rtspsrc_open_from_sdp (GstRTSPSrc * src, GstSDPMessage * sdp,
     src->control = g_strdup (control);
   }
 
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+  src->is_audio_codec_supported = FALSE;
+  src->is_video_codec_supported = FALSE;
+#endif
+
   /* create streams */
   n_streams = gst_sdp_message_medias_len (sdp);
   for (i = 0; i < n_streams; i++) {
@@ -7928,7 +8251,15 @@ gst_rtspsrc_open_from_sdp (GstRTSPSrc * src, GstSDPMessage * sdp,
   }
 
   src->state = GST_RTSP_STATE_INIT;
-
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+  /* Check for the support for the Media codecs */
+  if ((!src->is_audio_codec_supported) && (!src->is_video_codec_supported)) {
+    GST_ERROR_OBJECT (src, "UnSupported Media Type !!!! \n");
+    goto unsupported_file_type;
+  } else {
+    GST_DEBUG_OBJECT (src, "Supported Media Type. \n");
+  }
+#endif
   /* setup streams */
   if ((res = gst_rtspsrc_setup_streams_start (src, async)) < 0)
     goto setup_failed;
@@ -7949,6 +8280,17 @@ setup_failed:
     gst_rtspsrc_cleanup (src);
     return res;
   }
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+unsupported_file_type:
+  {
+    gst_rtspsrc_post_error_message (src,
+        GST_RTSPSRC_ERROR_UNSUPPORTED_MEDIA_TYPE,
+        "No supported stream was found");
+    res = GST_RTSP_ERROR;
+    gst_rtspsrc_cleanup (src);
+    return res;
+  }
+#endif
 }
 
 static GstRTSPResult
@@ -8100,8 +8442,13 @@ restart:
   /* ERRORS */
 no_url:
   {
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+    gst_rtspsrc_post_error_message (src, GST_RTSPSRC_ERROR_INVALID_URL,
+        "No valid RTSP URL was provided");
+#else
     GST_ELEMENT_ERROR (src, RESOURCE, NOT_FOUND, (NULL),
         ("No valid RTSP URL was provided"));
+#endif
     goto cleanup_error;
   }
 connect_failed:
@@ -8109,8 +8456,13 @@ connect_failed:
     gchar *str = gst_rtsp_strresult (res);
 
     if (res != GST_RTSP_EINTR) {
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+      gst_rtspsrc_post_error_message (src, GST_RTSPSRC_ERROR_CONNECTION_FAIL,
+          "Failed to connect.");
+#else
       GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ_WRITE, (NULL),
           ("Failed to connect. (%s)", str));
+#endif
     } else {
       GST_WARNING_OBJECT (src, "connect interrupted");
     }
@@ -8121,8 +8473,13 @@ create_request_failed:
   {
     gchar *str = gst_rtsp_strresult (res);
 
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+    gst_rtspsrc_post_error_message (src, GST_RTSPSRC_ERROR_BAD_REQUEST,
+        "Could not create request.");
+#else
     GST_ELEMENT_ERROR (src, LIBRARY, INIT, (NULL),
         ("Could not create request. (%s)", str));
+#endif
     g_free (str);
     goto cleanup_error;
   }
@@ -8140,15 +8497,25 @@ methods_error:
   }
 wrong_content_type:
   {
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+    gst_rtspsrc_post_error_message (src, GST_RTSPSRC_ERROR_OPTION_NOT_SUPPORTED,
+        "Server does not support SDP. ");
+#else
     GST_ELEMENT_ERROR (src, RESOURCE, SETTINGS, (NULL),
         ("Server does not support SDP, got %s.", respcont));
+#endif
     res = GST_RTSP_ERROR;
     goto cleanup_error;
   }
 no_describe:
   {
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+    gst_rtspsrc_post_error_message (src, GST_RTSPSRC_ERROR_METHOD_NOT_ALLOWED,
+        "Server can not provide an SDP.");
+#else
     GST_ELEMENT_ERROR (src, RESOURCE, SETTINGS, (NULL),
         ("Server can not provide an SDP."));
+#endif
     res = GST_RTSP_ERROR;
     goto cleanup_error;
   }
@@ -8314,8 +8681,13 @@ create_request_failed:
   {
     gchar *str = gst_rtsp_strresult (res);
 
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+    gst_rtspsrc_post_error_message (src, GST_RTSPSRC_ERROR_BAD_REQUEST,
+        "Could not create request.");
+#else
     GST_ELEMENT_ERROR (src, LIBRARY, INIT, (NULL),
         ("Could not create request. (%s)", str));
+#endif
     g_free (str);
     goto close;
   }
@@ -8325,8 +8697,13 @@ send_error:
 
     gst_rtsp_message_unset (&request);
     if (res != GST_RTSP_EINTR) {
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+      gst_rtspsrc_post_error_message (src, GST_RTSPSRC_ERROR_CONNECTION_FAIL,
+          "Could not send message.");
+#else
       GST_ELEMENT_ERROR (src, RESOURCE, WRITE, (NULL),
           ("Could not send message. (%s)", str));
+#endif
     } else {
       GST_WARNING_OBJECT (src, "TEARDOWN interrupted");
     }
@@ -8510,11 +8887,22 @@ gen_range_header (GstRTSPSrc * src, GstSegment * segment)
     g_date_time_unref (datetime);
     g_date_time_unref (prime_epoch);
   } else {
+
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+  if (src->start_position != 0 && segment->position == 0) {
+    segment->position = src->start_position;
+    src->start_position = 0;
+  }
+#endif
     range.unit = GST_RTSP_RANGE_NPT;
 
     if (src->range && src->range->min.type == GST_RTSP_TIME_NOW) {
       range.min.type = GST_RTSP_TIME_NOW;
     } else {
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+      if (segment->position != 0)
+        begin_seconds = (gdouble) segment->position / GST_SECOND;
+#endif
       range.min.type = GST_RTSP_TIME_SECONDS;
       range.min.seconds = begin_seconds;
     }
@@ -8653,13 +9041,34 @@ restart:
       goto create_request_failed;
 
     if (src->need_range && src->seekable >= 0.0) {
+#ifndef TIZEN_FEATURE_RTSP_MODIFICATION
       hval = gen_range_header (src, segment);
 
       gst_rtsp_message_take_header (&request, GST_RTSP_HDR_RANGE, hval);
 
+#endif
       /* store the newsegment event so it can be sent from the streaming thread. */
       src->need_segment = TRUE;
     }
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+    else {
+/*
+ Updating position with the MSL current position as gst_rtspsrc_get_position() does not return correct position.
+*/
+      GST_DEBUG_OBJECT (src,
+          " During normal pause-resume , segment->position=%" GST_TIME_FORMAT
+          ",src->start_position=%" GST_TIME_FORMAT,
+          GST_TIME_ARGS (segment->position),
+          GST_TIME_ARGS (src->start_position));
+      segment->position = src->last_pos;
+    }
+
+/*
+ Sending the npt range request for each play request for updating the segment position properly.
+*/
+    hval = gen_range_header (src, segment);
+    gst_rtsp_message_take_header (&request, GST_RTSP_HDR_RANGE, hval);
+#endif
 
     if (segment->rate != 1.0) {
       gchar scale_val[G_ASCII_DTOSTR_BUF_SIZE];
@@ -8873,8 +9282,13 @@ create_request_failed:
   {
     gchar *str = gst_rtsp_strresult (res);
 
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+    gst_rtspsrc_post_error_message (src, GST_RTSPSRC_ERROR_BAD_REQUEST,
+        "Could not create request. ");
+#else
     GST_ELEMENT_ERROR (src, LIBRARY, INIT, (NULL),
         ("Could not create request. (%s)", str));
+#endif
     g_free (str);
     goto done;
   }
@@ -8884,8 +9298,13 @@ send_error:
 
     gst_rtsp_message_unset (&request);
     if (res != GST_RTSP_EINTR) {
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+      gst_rtspsrc_post_error_message (src, GST_RTSPSRC_ERROR_CONNECTION_FAIL,
+          "Could not send message.");
+#else
       GST_ELEMENT_ERROR (src, RESOURCE, WRITE, (NULL),
           ("Could not send message. (%s)", str));
+#endif
     } else {
       GST_WARNING_OBJECT (src, "PLAY interrupted");
     }
@@ -9002,8 +9421,13 @@ create_request_failed:
   {
     gchar *str = gst_rtsp_strresult (res);
 
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+    gst_rtspsrc_post_error_message (src, GST_RTSPSRC_ERROR_BAD_REQUEST,
+        "Could not create request.");
+#else
     GST_ELEMENT_ERROR (src, LIBRARY, INIT, (NULL),
         ("Could not create request. (%s)", str));
+#endif
     g_free (str);
     goto done;
   }
@@ -9013,8 +9437,13 @@ send_error:
 
     gst_rtsp_message_unset (&request);
     if (res != GST_RTSP_EINTR) {
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+      gst_rtspsrc_post_error_message (src, GST_RTSPSRC_ERROR_CONNECTION_FAIL,
+          "Could not send message.");
+#else
       GST_ELEMENT_ERROR (src, RESOURCE, WRITE, (NULL),
           ("Could not send message. (%s)", str));
+#endif
     } else {
       GST_WARNING_OBJECT (src, "PAUSE interrupted");
     }
@@ -9249,8 +9678,14 @@ gst_rtspsrc_change_state (GstElement * element, GstStateChange transition)
 {
   GstRTSPSrc *rtspsrc;
   GstStateChangeReturn ret;
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+  guint64 end_time;
+#endif
 
   rtspsrc = GST_RTSPSRC (element);
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+  GST_WARNING_OBJECT (rtspsrc, "State change transition: %d \n", transition);
+#endif
 
   switch (transition) {
     case GST_STATE_CHANGE_NULL_TO_READY:
@@ -9297,6 +9732,18 @@ gst_rtspsrc_change_state (GstElement * element, GstStateChange transition)
       ret = GST_STATE_CHANGE_SUCCESS;
       break;
     case GST_STATE_CHANGE_READY_TO_PAUSED:
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+      /* don't change to PAUSE state before complete stream opend.
+         see gst_rtspsrc_loop_complete_cmd() */
+      g_mutex_lock (&(rtspsrc)->pause_lock);
+      end_time = g_get_monotonic_time () + 10 * G_TIME_SPAN_SECOND;
+      if (!g_cond_wait_until (&(rtspsrc)->open_end, &(rtspsrc)->pause_lock,
+              end_time)) {
+        GST_WARNING_OBJECT (rtspsrc,
+            "time out: stream opend is not completed yet..");
+      }
+      g_mutex_unlock (&(rtspsrc)->pause_lock);
+#endif
       if (rtspsrc->is_live)
         ret = GST_STATE_CHANGE_NO_PREROLL;
       else
index 5af00f9..bb42826 100644 (file)
@@ -77,6 +77,58 @@ typedef struct _GstRTSPSrcClass GstRTSPSrcClass;
 #define GST_RTSP_STREAM_LOCK(rtsp)       (g_rec_mutex_lock (GST_RTSP_STREAM_GET_LOCK(rtsp)))
 #define GST_RTSP_STREAM_UNLOCK(rtsp)     (g_rec_mutex_unlock (GST_RTSP_STREAM_GET_LOCK(rtsp)))
 
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+typedef enum {
+       GST_RTSPSRC_ERROR_NONE = 0,
+       GST_RTSPSRC_ERROR_UNSUPPORTED_AUDIO,
+       GST_RTSPSRC_ERROR_UNSUPPORTED_VIDEO,
+       GST_RTSPSRC_ERROR_CONNECTION_FAIL,
+       GST_RTSPSRC_ERROR_DNS_FAIL,
+       GST_RTSPSRC_ERROR_SERVER_DISCONNECTED,
+       GST_RTSPSRC_ERROR_BAD_SERVER,
+       GST_RTSPSRC_ERROR_INVALID_PROTOCOL,
+       GST_RTSPSRC_ERROR_INVALID_URL,
+       GST_RTSPSRC_ERROR_UNEXPECTED_MSG,
+       GST_RTSPSRC_ERROR_OUT_OF_MEMORIES,
+       GST_RTSPSRC_ERROR_RTSP_TIMEOUT,
+       GST_RTSPSRC_ERROR_BAD_REQUEST,
+       GST_RTSPSRC_ERROR_NOT_AUTHORIZED,
+       GST_RTSPSRC_ERROR_PAYMENT_REQUIRED,
+       GST_RTSPSRC_ERROR_FORBIDDEN,
+       GST_RTSPSRC_ERROR_CONTENT_NOT_FOUND,
+       GST_RTSPSRC_ERROR_METHOD_NOT_ALLOWED,
+       GST_RTSPSRC_ERROR_NOT_ACCEPTABLE,
+       GST_RTSPSRC_ERROR_PROXY_AUTHENTICATION_REQUIRED,
+       GST_RTSPSRC_ERROR_SERVER_TIMEOUT,
+       GST_RTSPSRC_ERROR_GONE,
+       GST_RTSPSRC_ERROR_LENGTH_REQUIRED,
+       GST_RTSPSRC_ERROR_PRECONDITION_FAILED,
+       GST_RTSPSRC_ERROR_REQUEST_ENTITY_TOO_LARGE,
+       GST_RTSPSRC_ERROR_REQUEST_URI_TOO_LARGE,
+       GST_RTSPSRC_ERROR_UNSUPPORTED_MEDIA_TYPE,
+       GST_RTSPSRC_ERROR_PARAMETER_NOT_UNDERSTOOD,
+       GST_RTSPSRC_ERROR_CONFERENCE_NOT_FOUND,
+       GST_RTSPSRC_ERROR_NOT_ENOUGH_BANDWIDTH,
+       GST_RTSPSRC_ERROR_NO_SESSION_ID,
+       GST_RTSPSRC_ERROR_METHOD_NOT_VALID_IN_THIS_STATE,
+       GST_RTSPSRC_ERROR_HEADER_FIELD_NOT_VALID_FOR_SOURCE,
+       GST_RTSPSRC_ERROR_INVALID_RANGE,
+       GST_RTSPSRC_ERROR_PARAMETER_IS_READONLY,
+       GST_RTSPSRC_ERROR_AGGREGATE_OP_NOT_ALLOWED,
+       GST_RTSPSRC_ERROR_ONLY_AGGREGATE_OP_ALLOWED,
+       GST_RTSPSRC_ERROR_BAD_TRANSPORT,
+       GST_RTSPSRC_ERROR_DESTINATION_UNREACHABLE,
+       GST_RTSPSRC_ERROR_INTERNAL_SERVER_ERROR,
+       GST_RTSPSRC_ERROR_NOT_IMPLEMENTED,
+       GST_RTSPSRC_ERROR_BAD_GATEWAY,
+       GST_RTSPSRC_ERROR_SERVICE_UNAVAILABLE,
+       GST_RTSPSRC_ERROR_GATEWAY_TIME_OUT      ,
+       GST_RTSPSRC_ERROR_RTSP_VERSION_NOT_SUPPORTED,
+       GST_RTSPSRC_ERROR_OPTION_NOT_SUPPORTED,
+}_GstRTSPSrcError;
+typedef _GstRTSPSrcError       GstRTSPSrcError;
+#endif
+
 typedef struct _GstRTSPConnInfo GstRTSPConnInfo;
 
 struct _GstRTSPConnInfo {
@@ -313,6 +365,15 @@ struct _GstRTSPSrc {
   gulong           manager_ptmap_id;
   gboolean         use_buffering;
 
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+  /* media type */
+  gboolean  is_audio_codec_supported;
+  gboolean     is_video_codec_supported;
+  gchar        *audio_codec;
+  gchar                *video_codec;
+  gchar                *video_frame_size;
+#endif
+
   GstRTSPConnInfo  conninfo;
 
   /* SET/GET PARAMETER requests queue */
@@ -328,6 +389,12 @@ struct _GstRTSPSrc {
 
   guint group_id;
   GMutex group_lock;
+
+#ifdef TIZEN_FEATURE_RTSP_MODIFICATION
+  GCond open_end;
+  GMutex pause_lock;
+  guint64 start_position;
+#endif
 };
 
 struct _GstRTSPSrcClass {
index 55656ab..8cbd61b 100644 (file)
@@ -498,8 +498,10 @@ gst_video_balance_transform_caps (GstBaseTransform * trans,
   if (!gst_video_balance_is_passthrough (balance)) {
     static GstStaticCaps raw_caps =
         GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE (PROCESSING_CAPS));
+    GstCaps *tmp = gst_static_caps_get (&raw_caps);
 
-    caps = gst_caps_intersect (caps, gst_static_caps_get (&raw_caps));
+    caps = gst_caps_intersect (caps, tmp);
+    gst_caps_unref (tmp);
 
     if (filter) {
       ret = gst_caps_intersect_full (filter, caps, GST_CAPS_INTERSECT_FIRST);
index 45b9db9..b08081a 100644 (file)
@@ -1418,6 +1418,9 @@ gst_wavparse_stream_headers (GstWavParse * wav)
         const gst_riff_acid *acid = NULL;
         const guint data_size = sizeof (gst_riff_acid);
         gfloat tempo;
+#ifdef TIZEN_FEATURE_WAVPARSE_MODIFICATION
+        const guint8 *data = NULL;
+#endif
 
         GST_INFO_OBJECT (wav, "Have acid chunk");
         if (size < data_size) {
@@ -1434,9 +1437,17 @@ gst_wavparse_stream_headers (GstWavParse * wav)
             goto exit;
           }
           gst_adapter_flush (wav->adapter, 8);
+#ifdef TIZEN_FEATURE_WAVPARSE_MODIFICATION
+          if (gst_adapter_available (wav->adapter) < 24) {
+            goto exit;
+          }
+          data = gst_adapter_map (wav->adapter, 24);
+          tempo = GST_READ_FLOAT_LE (data + 20);
+#else
           acid = (const gst_riff_acid *) gst_adapter_map (wav->adapter,
               data_size);
           tempo = acid->tempo;
+#endif
           gst_adapter_unmap (wav->adapter);
         } else {
           GstMapInfo map;
index f8e1299..e99bec1 100644 (file)
@@ -409,6 +409,34 @@ if host_cpu == 'x86_64'
   endif
 endif
 
+# TIZEN_BUILD_OPTION
+
+tbm_dep = dependency('libtbm', required : get_option('tbm'))
+if tbm_dep.found()
+  cdata.set('TIZEN_FEATURE_V4L2_TBM_SUPPORT', 1)
+endif
+
+gio_dep = dependency('gio-2.0')
+
+cdata.set('TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE', true)
+cdata.set('TIZEN_FEATURE_V4L2SRC_SUPPORT_CAMERA_ID', true)
+cdata.set('TIZEN_FEATURE_V4L2VIDEO_ADJ_RANK', true)
+cdata.set('TIZEN_FEATURE_WAVPARSE_MODIFICATION', true)
+cdata.set('TIZEN_FEATURE_MP3PARSE_MODIFICATION', true)
+cdata.set('TIZEN_FEATURE_AACPARSE_MODIFICATION', true)
+cdata.set('TIZEN_FEATURE_QTDEMUX_MODIFICATION', true)
+cdata.set('TIZEN_FEATURE_QTDEMUX_DURATION', true)
+cdata.set('TIZEN_FEATURE_FLVDEMUX_MODIFICATION', true)
+cdata.set('TIZEN_FEATURE_RTSP_MODIFICATION', true)
+cdata.set('TIZEN_FEATURE_SOUP_MODIFICATION', true)
+cdata.set('TIZEN_FEATURE_RGVOLUME_MODIFICATION', true)
+cdata.set('TIZEN_FEATURE_DISABLE_V4L2_DEPENDENCY', true)
+cdata.set('TIZEN_FEATURE_AVIDEMUX_MODIFICATION', true)
+cdata.set('TIZEN_FEATURE_USE_LIBV4L2', true)
+cdata.set('TIZEN_FEATURE_V4L2_ADDITIONAL_CID_SUPPORT', true)
+
+# TIZEN_BUILD_OPTION end
+
 # Disable compiler warnings for unused variables and args if gst debug system is disabled
 if gst_dep.type_name() == 'internal'
   gst_debug_disabled = not subproject('gstreamer').get_variable('gst_debug')
index 3dafe1f..eb1e945 100644 (file)
@@ -111,3 +111,7 @@ option('package-origin', type : 'string', value : 'Unknown package origin', yiel
        description : 'package origin URL to use in plugins')
 option('doc', type : 'feature', value : 'auto', yield: true,
        description: 'Enable documentation.')
+
+# Tizen Options
+option('tbm', type : 'boolean', value : true,
+       description : 'tizen buffer manager')
index 555bc64..6cfcf3d 100644 (file)
@@ -4,14 +4,14 @@
 #
 # Nicolas Velin <nicolas@velin.fr>, 2008.
 # Claude Paroz <claude@2xlibre.net>, 2008-2011.
-# Stéphane Aulery <lkppo@free.fr>, 2015, 2017.
+# Stéphane Aulery <lkppo@free.fr>, 2015, 2017, 2019.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-good 1.12.0\n"
+"Project-Id-Version: gst-plugins-good 1.15.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:47+0000\n"
-"PO-Revision-Date: 2017-05-05 22:27+0200\n"
+"POT-Creation-Date: 2019-01-17 01:59+0000\n"
+"PO-Revision-Date: 2019-05-12 03:57+0200\n"
 "Last-Translator: Stéphane Aulery <lkppo@free.fr>\n"
 "Language-Team: French <traduc@traduc.org>\n"
 "Language: fr\n"
@@ -20,424 +20,457 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 
+#: ext/jack/gstjackaudiosink.c:356 ext/jack/gstjackaudiosrc.c:364
 msgid "Jack server not found"
 msgstr "serveur Jack introuvable"
 
+#: ext/jpeg/gstjpegdec.c:936 ext/jpeg/gstjpegdec.c:1103
+#: ext/jpeg/gstjpegdec.c:1112 ext/jpeg/gstjpegdec.c:1122
+#: ext/jpeg/gstjpegdec.c:1131 ext/jpeg/gstjpegdec.c:1393
+#: ext/jpeg/gstjpegdec.c:1421
 msgid "Failed to decode JPEG image"
 msgstr "Échec de décodage de l’image JPEG"
 
-msgid ""
-"Failed to configure LAME mp3 audio encoder. Check your encoding parameters."
-msgstr ""
+#: ext/lame/gstlamemp3enc.c:393
+msgid "Failed to configure LAME mp3 audio encoder. Check your encoding parameters."
+msgstr "Configuration de l'encodeur audio LAME mp3 échouée. Vérifiez ses paramètres."
 
+#: ext/lame/gstlamemp3enc.c:425 ext/twolame/gsttwolamemp2enc.c:488
 #, c-format
-msgid ""
-"The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-"bitrate was changed to %d kbit/s."
-msgstr ""
+msgid "The requested bitrate %d kbit/s for property '%s' is not allowed. The bitrate was changed to %d kbit/s."
+msgstr "Le débit demandé de %d kbit/s pour la propriété « %s » n'est pas autorisé. Le débit a été changé en %d kbits/s."
 
 #. TRANSLATORS: 'song title' by 'artist name'
+#: ext/pulse/pulsesink.c:3127
 #, c-format
 msgid "'%s' by '%s'"
 msgstr "« %s » par « %s »"
 
+#: ext/shout2/gstshout2.c:619 ext/shout2/gstshout2.c:629
 msgid "Could not connect to server"
 msgstr "Impossible de se connecter au serveur"
 
+#: ext/soup/gstsouphttpsrc.c:914
 msgid "No URL set."
 msgstr "Aucun URL défini."
 
+#: ext/soup/gstsouphttpsrc.c:1372
 msgid "Could not resolve server name."
 msgstr "Impossible de résoudre le nom du serveur."
 
+#: ext/soup/gstsouphttpsrc.c:1377
 msgid "Could not establish connection to server."
 msgstr "Impossible d’établir une connexion vers le serveur."
 
+#: ext/soup/gstsouphttpsrc.c:1381
 msgid "Secure connection setup failed."
 msgstr "La configuration d’une connexion sécurisée a échoué."
 
-msgid ""
-"A network error occurred, or the server closed the connection unexpectedly."
-msgstr ""
-"Une erreur réseau s’est produite ou le serveur a fermé abruptement la "
-"connexion."
+#: ext/soup/gstsouphttpsrc.c:1387
+msgid "A network error occurred, or the server closed the connection unexpectedly."
+msgstr "Une erreur réseau s’est produite ou le serveur a fermé abruptement la connexion."
 
+#: ext/soup/gstsouphttpsrc.c:1392
 msgid "Server sent bad data."
 msgstr "Le serveur a envoyé de mauvaises données."
 
+#: ext/soup/gstsouphttpsrc.c:1616
 msgid "Server does not support seeking."
 msgstr "Le serveur ne gère pas la recherche."
 
+#: ext/twolame/gsttwolamemp2enc.c:411
 msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-msgstr ""
+msgstr "Configuration de l'encodeur TwoLAME échoué. Vérifiez ses paramètres."
 
+#: gst/avi/gstavimux.c:1832
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "Entrée audio absente ou non valide, le flux AVI sera corrompu."
 
+#: gst/isomp4/qtdemux.c:713 gst/isomp4/qtdemux.c:717
 msgid "This file contains no playable streams."
 msgstr "Ce fichier ne contient aucun flux exploitable."
 
+#: gst/isomp4/qtdemux.c:763 gst/isomp4/qtdemux.c:7003
+#: gst/isomp4/qtdemux.c:7072 gst/isomp4/qtdemux.c:7362
+#: gst/isomp4/qtdemux.c:8800
 msgid "This file is invalid and cannot be played."
 msgstr "Ce fichier n'est pas valide et ne peut donc pas être lu."
 
+#: gst/isomp4/qtdemux.c:3091
 msgid "Cannot play stream because it is encrypted with PlayReady DRM."
 msgstr "Impossible de lire le flux car il est chiffré par un DRM PlayReady."
 
+#: gst/isomp4/qtdemux.c:4312 gst/isomp4/qtdemux.c:8131
+#: gst/isomp4/qtdemux.c:8138 gst/isomp4/qtdemux.c:9283
+#: gst/isomp4/qtdemux.c:9720 gst/isomp4/qtdemux.c:9727
+#: gst/isomp4/qtdemux.c:12528
 msgid "This file is corrupt and cannot be played."
 msgstr "Ce fichier est corrompu et ne peut pas être lu."
 
+#: gst/isomp4/qtdemux.c:4554
 msgid "Invalid atom size."
 msgstr "Taille d’atome non valide."
 
+#: gst/isomp4/qtdemux.c:4633
 msgid "This file is incomplete and cannot be played."
 msgstr "Ce fichier n’est pas complet et ne peut donc pas être lu."
 
+#: gst/isomp4/qtdemux.c:10756
 msgid "The video in this file might not play correctly."
-msgstr ""
-"Il est possible que la vidéo dans ce fichier ne puisse pas être lue "
-"correctement."
+msgstr "Il est possible que la vidéo dans ce fichier ne puisse pas être lue correctement."
 
-msgid ""
-"No supported stream was found. You might need to install a GStreamer RTSP "
-"extension plugin for Real media streams."
-msgstr ""
-"Aucun flux pris en charge n’a été trouvé. Il faut peut-être installer un "
-"greffon d’extension GStreamer RTSP pour les flux Real media."
+#: gst/rtsp/gstrtspsrc.c:7398
+msgid "No supported stream was found. You might need to install a GStreamer RTSP extension plugin for Real media streams."
+msgstr "Aucun flux pris en charge n’a été trouvé. Il faut peut-être installer un greffon d’extension GStreamer RTSP pour les flux Real media."
 
-msgid ""
-"No supported stream was found. You might need to allow more transport "
-"protocols or may otherwise be missing the right GStreamer RTSP extension "
-"plugin."
-msgstr ""
-"Aucun flux pris en charge n’a été trouvé. Il faut peut-être autoriser "
-"davantage de protocoles de transport ou il manque peut-être le bon greffon "
-"d’extension GStreamer RTSP."
+#: gst/rtsp/gstrtspsrc.c:7403
+msgid "No supported stream was found. You might need to allow more transport protocols or may otherwise be missing the right GStreamer RTSP extension plugin."
+msgstr "Aucun flux pris en charge n’a été trouvé. Il faut peut-être autoriser davantage de protocoles de transport ou il manque peut-être le bon greffon d’extension GStreamer RTSP."
 
-msgid ""
-"Could not open audio device for playback. Device is being used by another "
-"application."
-msgstr ""
-"Impossible d’ouvrir le périphérique audio en lecture. Le périphérique est "
-"utilisé par une autre application."
+#: sys/oss4/oss4-sink.c:493 sys/oss4/oss4-source.c:358
+#: sys/oss/gstosssink.c:384
+msgid "Could not open audio device for playback. Device is being used by another application."
+msgstr "Impossible d’ouvrir le périphérique audio en lecture. Le périphérique est utilisé par une autre application."
 
-msgid ""
-"Could not open audio device for playback. You don't have permission to open "
-"the device."
-msgstr ""
-"Impossible d’ouvrir le périphérique audio en lecture. Vous n’avez pas les "
-"droits nécessaires pour ouvrir le périphérique."
+#: sys/oss4/oss4-sink.c:503 sys/oss4/oss4-source.c:368
+#: sys/oss/gstosssink.c:391
+msgid "Could not open audio device for playback. You don't have permission to open the device."
+msgstr "Impossible d’ouvrir le périphérique audio en lecture. Vous n’avez pas les droits nécessaires pour ouvrir le périphérique."
 
+#: sys/oss4/oss4-sink.c:514 sys/oss4/oss4-source.c:379
+#: sys/oss/gstosssink.c:399
 msgid "Could not open audio device for playback."
 msgstr "Impossible d’ouvrir le périphérique audio en lecture."
 
-msgid ""
-"Could not open audio device for playback. This version of the Open Sound "
-"System is not supported by this element."
-msgstr ""
-"Impossible d’ouvrir le périphérique audio en lecture. Cette version d’OSS "
-"(Open Sound System) n’est pas prise en charge par cet élément."
+#: sys/oss4/oss4-sink.c:523 sys/oss4/oss4-source.c:389
+msgid "Could not open audio device for playback. This version of the Open Sound System is not supported by this element."
+msgstr "Impossible d’ouvrir le périphérique audio en lecture. Cette version d’OSS (Open Sound System) n’est pas prise en charge par cet élément."
 
+#: sys/oss4/oss4-sink.c:646
 msgid "Playback is not supported by this audio device."
 msgstr "La lecture n’est pas prise en charge par ce périphérique audio."
 
+#: sys/oss4/oss4-sink.c:653
 msgid "Audio playback error."
 msgstr "Erreur de lecture audio."
 
+#: sys/oss4/oss4-source.c:503
 msgid "Recording is not supported by this audio device."
 msgstr "L’enregistrement n’est pas pris en charge par ce périphérique audio."
 
+#: sys/oss4/oss4-source.c:510
 msgid "Error recording from audio device."
 msgstr "Erreur lors de l’enregistrement à partir du périphérique audio."
 
-msgid ""
-"Could not open audio device for recording. You don't have permission to open "
-"the device."
-msgstr ""
-"Impossible d’ouvrir le périphérique audio pour l’enregistrement. Vous n’avez "
-"pas les droits nécessaires pour ouvrir le périphérique."
+#: sys/oss/gstosssrc.c:376
+msgid "Could not open audio device for recording. You don't have permission to open the device."
+msgstr "Impossible d’ouvrir le périphérique audio pour l’enregistrement. Vous n’avez pas les droits nécessaires pour ouvrir le périphérique."
 
+#: sys/oss/gstosssrc.c:384
 msgid "Could not open audio device for recording."
 msgstr "Impossible d’ouvrir le périphérique audio pour l’enregistrement."
 
+#: sys/osxaudio/gstosxaudioringbuffer.c:149
 msgid "CoreAudio device not found"
 msgstr "Périphèrique CoreAudio introuvable"
 
+#: sys/osxaudio/gstosxaudioringbuffer.c:155
 msgid "CoreAudio device could not be opened"
 msgstr "Le périphèrique CoreAudio n’a pas pu être ouvert"
 
+#: sys/v4l2/gstv4l2bufferpool.c:1712
 #, c-format
 msgid "Error reading %d bytes from device '%s'."
 msgstr "Erreur de lecture de %d octets sur le périphérique « %s »."
 
+#: sys/v4l2/gstv4l2object.c:1223
 #, c-format
 msgid "Failed to enumerate possible video formats device '%s' can work with"
-msgstr ""
-"Impossible d’énumérer les formats vidéo compatibles avec le périphérique "
-"« %s »"
+msgstr "Impossible d’énumérer les formats vidéo compatibles avec le périphérique « %s »"
 
+#: sys/v4l2/gstv4l2object.c:2956
 #, c-format
 msgid "Could not map buffers from device '%s'"
 msgstr "Impossible de mapper les tampons du périphérique « %s »."
 
+#: sys/v4l2/gstv4l2object.c:2964
 #, c-format
 msgid "The driver of device '%s' does not support the IO method %d"
-msgstr ""
-"Le pilote du périphérique « %s » ne prend en charge la méthode d’entrée-"
-"sortie %d"
+msgstr "Le pilote du périphérique « %s » ne prend en charge la méthode d’entrée-sortie %d"
 
+#: sys/v4l2/gstv4l2object.c:2971
 #, c-format
 msgid "The driver of device '%s' does not support any known IO method."
-msgstr ""
-"Le pilote du périphérique « %s » ne prend en charge aucune méthode d’entrée-"
-"sortie connue."
+msgstr "Le pilote du périphérique « %s » ne prend en charge aucune méthode d’entrée-sortie connue."
 
-#, fuzzy, c-format
+#: sys/v4l2/gstv4l2object.c:3741 sys/v4l2/gstv4l2object.c:3765
+#, c-format
 msgid "Device '%s' has no supported format"
-msgstr ""
-"L’encodeur du périphérique « %s » ne prend en charge aucun format d’entrée"
+msgstr "Le périphérique « %s » n'a pas format pris en charge"
 
+#: sys/v4l2/gstv4l2object.c:3747 sys/v4l2/gstv4l2object.c:3771
 #, c-format
 msgid "Device '%s' failed during initialization"
-msgstr ""
+msgstr "L'initialisation du périphérique « %s » a échouée"
 
+#: sys/v4l2/gstv4l2object.c:3759
 #, c-format
 msgid "Device '%s' is busy"
 msgstr "Périphérique « %s » occupé"
 
+#: sys/v4l2/gstv4l2object.c:3782
 #, c-format
 msgid "Device '%s' cannot capture at %dx%d"
-msgstr ""
-"Le périphérique « %s » ne peut pas capturer avec une résolution de %d x %d"
+msgstr "Le périphérique « %s » ne peut pas capturer avec une résolution de %d x %d"
 
+#: sys/v4l2/gstv4l2object.c:3791
 #, c-format
 msgid "Device '%s' cannot capture in the specified format"
 msgstr "Le périphérique « %s » ne peut pas capturer dans le format spécifié"
 
+#: sys/v4l2/gstv4l2object.c:3802
 #, c-format
 msgid "Device '%s' does support non-contiguous planes"
 msgstr "Le périphérique « %s » ne prend pas en charge les plans non contiguës"
 
-#, fuzzy, c-format
+#: sys/v4l2/gstv4l2object.c:3817
+#, c-format
 msgid "Device '%s' does not support %s interlacing"
-msgstr "Le serveur ne gère pas la recherche."
+msgstr "Le périphérique « %s » ne prend pas en charge l'entrelacement %s"
 
-#, fuzzy, c-format
+#: sys/v4l2/gstv4l2object.c:3831
+#, c-format
 msgid "Device '%s' does not support %s colorimetry"
-msgstr "Le périphérique « %s » ne prend pas en charge les plans non contiguës"
+msgstr "Le périphérique « %s » ne prend pas en charge la colorimétrie %s"
 
+#: sys/v4l2/gstv4l2object.c:3843
 #, c-format
 msgid "Could not get parameters on device '%s'"
 msgstr "Impossible d’obtenir les paramètres du périphérique « %s »"
 
+#: sys/v4l2/gstv4l2object.c:3851
 msgid "Video device did not accept new frame rate setting."
-msgstr ""
-"Le périphérique vidéo n’a pas accepté le nouveau paramètre de fréquence "
-"d’image."
+msgstr "Le périphérique vidéo n’a pas accepté le nouveau paramètre de fréquence d’image."
 
+#: sys/v4l2/gstv4l2object.c:3977
 msgid "Video device did not provide output format."
 msgstr "Le périphérique vidéo n’a pas fourni de format de sortie."
 
+#: sys/v4l2/gstv4l2object.c:3983
 msgid "Video device returned invalid dimensions."
 msgstr "Le périphérique vidéo a retourné une dimensions incorrecte."
 
+#: sys/v4l2/gstv4l2object.c:3991
 msgid "Video device uses an unsupported interlacing method."
-msgstr ""
-"Le périphérique vidéo utilise une méthode d’entrelacement non prise en "
-"charge."
+msgstr "Le périphérique vidéo utilise une méthode d’entrelacement non prise en charge."
 
+#: sys/v4l2/gstv4l2object.c:3998
 msgid "Video device uses an unsupported pixel format."
 msgstr "Le périphérique vidéo utilise un format de pixel non pris en charge."
 
+#: sys/v4l2/gstv4l2object.c:4518
 msgid "Failed to configure internal buffer pool."
 msgstr "Impossible de configurer le spooler interne de tampons."
 
+#: sys/v4l2/gstv4l2object.c:4524
 msgid "Video device did not suggest any buffer size."
 msgstr "Le périphérique vidéo n’a suggéré aucune taille de cache."
 
+#: sys/v4l2/gstv4l2object.c:4539
 msgid "No downstream pool to import from."
 msgstr "No downstream pool to import from."
 
+#: sys/v4l2/gstv4l2radio.c:143
 #, c-format
 msgid "Failed to get settings of tuner %d on device '%s'."
-msgstr ""
-"Impossible d’obtenir les paramètres du syntoniseur %d du périphérique « %s »."
+msgstr "Impossible d’obtenir les paramètres du syntoniseur %d du périphérique « %s »."
 
+#: sys/v4l2/gstv4l2radio.c:150
 #, c-format
 msgid "Error getting capabilities for device '%s'."
 msgstr "Erreur d’interrogation des capacités du périphérique « %s »."
 
+#: sys/v4l2/gstv4l2radio.c:157
 #, c-format
 msgid "Device '%s' is not a tuner."
 msgstr "Le périphérique « %s » n'est pas un syntoniseur."
 
+#: sys/v4l2/gstv4l2radio.c:184
 #, c-format
 msgid "Failed to get radio input on device '%s'. "
 msgstr "Impossible d’obtenir un flux radio depuis le périphérique %s."
 
+#: sys/v4l2/gstv4l2radio.c:207 sys/v4l2/v4l2_calls.c:1072
 #, c-format
 msgid "Failed to set input %d on device %s."
 msgstr "Impossible de définir l’entrée %d sur le périphérique %s."
 
+#: sys/v4l2/gstv4l2radio.c:241
 #, c-format
 msgid "Failed to change mute state for device '%s'."
 msgstr "Impossible de modifier la sourdine du périphérique « %s »."
 
+#: sys/v4l2/gstv4l2sink.c:628
 msgid "Failed to allocated required memory."
 msgstr "Impossible d’allouer la mémoire nécessaire."
 
+#: sys/v4l2/gstv4l2src.c:652 sys/v4l2/gstv4l2videodec.c:756
+#: sys/v4l2/gstv4l2videoenc.c:782
 msgid "Failed to allocate required memory."
 msgstr "Impossible d’allouer la mémoire nécessaire."
 
+#: sys/v4l2/gstv4l2transform.c:142
 #, c-format
 msgid "Converter on device %s has no supported input format"
-msgstr ""
-"Le convertisseur du périphérique « %s » ne prend en charge aucun format "
-"d’entrée"
+msgstr "Le convertisseur du périphérique « %s » ne prend en charge aucun format d’entrée"
 
+#: sys/v4l2/gstv4l2transform.c:149
 #, c-format
 msgid "Converter on device %s has no supported output format"
-msgstr ""
-"Le convertisseur du périphérique « %s » ne prend en charge aucun format de "
-"sortie"
+msgstr "Le convertisseur du périphérique « %s » ne prend en charge aucun format de sortie"
 
-#, fuzzy, c-format
+#: sys/v4l2/gstv4l2videodec.c:136
+#, c-format
 msgid "Decoder on device %s has no supported input format"
-msgstr ""
-"L’encodeur du périphérique « %s » ne prend en charge aucun format d’entrée"
+msgstr "Le décodeur du périphérique « %s » ne prend en charge aucun format d’entrée"
 
-#, fuzzy, c-format
+#: sys/v4l2/gstv4l2videodec.c:281
+#, c-format
 msgid "Decoder on device %s has no supported output format"
-msgstr ""
-"L’encodeur du périphérique « %s » ne prend en charge aucun format de sortie"
+msgstr "Le décodeur du périphérique « %s » ne prend en charge aucun format de sortie"
 
+#: sys/v4l2/gstv4l2videodec.c:770
 msgid "Failed to start decoding thread."
 msgstr "Échec de démarrage du processus de décodage."
 
+#: sys/v4l2/gstv4l2videodec.c:777 sys/v4l2/gstv4l2videoenc.c:803
 msgid "Failed to process frame."
 msgstr "Échec du traitement de frame."
 
+#: sys/v4l2/gstv4l2videoenc.c:140
 #, c-format
 msgid "Encoder on device %s has no supported output format"
-msgstr ""
-"L’encodeur du périphérique « %s » ne prend en charge aucun format de sortie"
+msgstr "L’encodeur du périphérique « %s » ne prend en charge aucun format de sortie"
 
+#: sys/v4l2/gstv4l2videoenc.c:147
 #, c-format
 msgid "Encoder on device %s has no supported input format"
-msgstr ""
-"L’encodeur du périphérique « %s » ne prend en charge aucun format d’entrée"
+msgstr "L’encodeur du périphérique « %s » ne prend en charge aucun format d’entrée"
 
-#, fuzzy
+#: sys/v4l2/gstv4l2videoenc.c:795
 msgid "Failed to start encoding thread."
-msgstr "Échec de démarrage du processus de décodage."
+msgstr "Échec de démarrage du processus d'encodage."
 
+#: sys/v4l2/v4l2_calls.c:92
 #, c-format
-msgid ""
-"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
-"it is a v4l1 driver."
-msgstr ""
-"Erreur de récupération des capacités pour le périphérique « %s » : ce n’est "
-"pas un pilote v4l2. Vérifiez si c’est un pilote v4l1."
+msgid "Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if it is a v4l1 driver."
+msgstr "Erreur de récupération des capacités pour le périphérique « %s » : ce n’est pas un pilote v4l2. Vérifiez si c’est un pilote v4l1."
 
+#: sys/v4l2/v4l2_calls.c:156
 #, c-format
 msgid "Failed to query attributes of input %d in device %s"
-msgstr ""
-"Impossible de récupérer les attributs de l’entrée %d du périphérique %s"
+msgstr "Impossible de récupérer les attributs de l’entrée %d du périphérique %s"
 
+#: sys/v4l2/v4l2_calls.c:187
 #, c-format
 msgid "Failed to get setting of tuner %d on device '%s'."
-msgstr ""
-"Impossible de récupérer les paramètres du syntoniseur %d du périphérique "
-"« %s »."
+msgstr "Impossible de récupérer les paramètres du syntoniseur %d du périphérique « %s »."
 
+#: sys/v4l2/v4l2_calls.c:235
 #, c-format
 msgid "Failed to query norm on device '%s'."
 msgstr "Impossible de récupérer la norme du périphérique « %s »."
 
+#: sys/v4l2/v4l2_calls.c:416
 #, c-format
 msgid "Failed getting controls attributes on device '%s'."
-msgstr ""
-"Impossible de récupérer les attributs de contrôle du périphérique « %s »."
+msgstr "Impossible de récupérer les attributs de contrôle du périphérique « %s »."
 
+#: sys/v4l2/v4l2_calls.c:608
 #, c-format
 msgid "Cannot identify device '%s'."
 msgstr "Impossible d’identifier le périphérique « %s »."
 
+#: sys/v4l2/v4l2_calls.c:615
 #, c-format
 msgid "This isn't a device '%s'."
 msgstr "Ceci n’est pas un périphérique « %s »."
 
+#: sys/v4l2/v4l2_calls.c:622
 #, c-format
 msgid "Could not open device '%s' for reading and writing."
 msgstr "Impossible d’ouvrir le périphérique « %s » en lecture et écriture."
 
+#: sys/v4l2/v4l2_calls.c:629
 #, c-format
 msgid "Device '%s' is not a capture device."
 msgstr "Le périphérique « %s » n’est pas un périphérique d’enregistrement."
 
+#: sys/v4l2/v4l2_calls.c:637
 #, c-format
 msgid "Device '%s' is not a output device."
 msgstr "Le périphérique « %s » n’est pas un périphérique de sortie."
 
+#: sys/v4l2/v4l2_calls.c:645
 #, c-format
 msgid "Device '%s' is not a M2M device."
 msgstr "Le périphérique « %s » n’est pas un périphérique M2M."
 
+#: sys/v4l2/v4l2_calls.c:698
 #, c-format
 msgid "Could not dup device '%s' for reading and writing."
 msgstr "Impossible de dupliquer le périphérique « %s » en lecture et écriture."
 
+#: sys/v4l2/v4l2_calls.c:782
 #, c-format
 msgid "Failed to set norm for device '%s'."
 msgstr "La définition de la norme du périphérique « %s » a échoué."
 
+#: sys/v4l2/v4l2_calls.c:820
 #, c-format
 msgid "Failed to get current tuner frequency for device '%s'."
-msgstr ""
-"Impossible de récupérer la fréquence actuelle de syntonisation du "
-"périphérique « %s »."
+msgstr "Impossible de récupérer la fréquence actuelle de syntonisation du périphérique « %s »."
 
+#: sys/v4l2/v4l2_calls.c:862
 #, c-format
 msgid "Failed to set current tuner frequency for device '%s' to %lu Hz."
-msgstr ""
-"Impossible de définir la fréquence de syntonisation du périphérique « %s » à "
-"%lu Hz."
+msgstr "Impossible de définir la fréquence de syntonisation du périphérique « %s » à %lu Hz."
 
+#: sys/v4l2/v4l2_calls.c:896
 #, c-format
 msgid "Failed to get signal strength for device '%s'."
 msgstr "Impossible d’obtenir la force du signal du périphérique « %s »."
 
+#: sys/v4l2/v4l2_calls.c:932
 #, c-format
 msgid "Failed to get value for control %d on device '%s'."
-msgstr ""
-"Impossible de récupérer la valeur du contrôle %d du périphérique « %s »."
+msgstr "Impossible de récupérer la valeur du contrôle %d du périphérique « %s »."
 
+#: sys/v4l2/v4l2_calls.c:967
 #, c-format
 msgid "Failed to set value %d for control %d on device '%s'."
-msgstr ""
-"Impossible de récupérer la valeur %d du contrôle %d du périphérique « %s »."
+msgstr "Impossible de récupérer la valeur %d du contrôle %d du périphérique « %s »."
 
+#: sys/v4l2/v4l2_calls.c:1047
 #, c-format
 msgid "Failed to get current input on device '%s'. May be it is a radio device"
-msgstr ""
-"Impossible de récupérer l’entrée actuelle du périphérique « %s ». C’est peut-"
-"être un périphérique radio"
+msgstr "Impossible de récupérer l’entrée actuelle du périphérique « %s ». C’est peut-être un périphérique radio"
 
+#: sys/v4l2/v4l2_calls.c:1104
 #, c-format
-msgid ""
-"Failed to get current output on device '%s'. May be it is a radio device"
-msgstr ""
-"Impossible de récupérer la sortie actuelle du périphérique « %s ». C’est "
-"peut-être un périphérique radio"
+msgid "Failed to get current output on device '%s'. May be it is a radio device"
+msgstr "Impossible de récupérer la sortie actuelle du périphérique « %s ». C’est peut-être un périphérique radio"
 
+#: sys/v4l2/v4l2_calls.c:1129
 #, c-format
 msgid "Failed to set output %d on device %s."
 msgstr "Impossible de définir la sortie %d du périphérique %s."
 
+#: sys/ximage/gstximagesrc.c:838
 msgid "Changing resolution at runtime is not yet supported."
-msgstr ""
-"La modification de la résolution au cours de l’exécution n’est pas encore "
-"prise en charge."
+msgstr "La modification de la résolution au cours de l’exécution n’est pas encore prise en charge."
 
+#: sys/ximage/gstximagesrc.c:852
 msgid "Cannot operate without a clock"
 msgstr "Impossible de fonctionner sans horloge"
 
index ec371ef..13cd062 100644 (file)
@@ -240,7 +240,7 @@ msgid "Video device uses an unsupported interlacing method."
 msgstr "Videouređaj koristi nepodržanu metodu preplitanja (interlacing)."
 
 msgid "Video device uses an unsupported pixel format."
-msgstr "Videouređaj koristi nepodržani format piksela."
+msgstr "Videouređaj koristi format piksela koji nije podržan."
 
 msgid "Failed to configure internal buffer pool."
 msgstr "Nije uspjelo konfigurirati interne međuspremnike (buffer pool)."
index 2d51a91..f9e5f75 100644 (file)
@@ -1,17 +1,17 @@
 # Hungarian translation for gst-plugins-good.
-# Copyright (C) 2004, 2007, 2008, 2009, 2010, 2012, 2014, 2016, 2017 Free Software Foundation, Inc.
+# Copyright (C) 2004, 2007, 2008, 2009, 2010, 2012, 2014, 2016, 2017, 2019 Free Software Foundation, Inc.
 # This file is distributed under the same license as the gst-plugins-good package.
 #
 # Laszlo Dvornik <dvornik@invitel.hu>, 2004.
 # Gabor Kelemen <kelemeng@gnome.hu>, 2007, 2008, 2009, 2010, 2012, 2014, 2016.
-# Balázs Úr <urbalazs@gmail.com>, 2014, 2015, 2017.
+# Balázs Úr <ur.balazs@fsf.hu>, 2014, 2015, 2017, 2019.
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-good 1.12.0\n"
+"Project-Id-Version: gst-plugins-good 1.15.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:47+0000\n"
-"PO-Revision-Date: 2017-05-05 20:11+0200\n"
-"Last-Translator: Balázs Úr <urbalazs@gmail.com>\n"
+"POT-Creation-Date: 2019-01-17 01:59+0000\n"
+"PO-Revision-Date: 2019-11-23 22:07+0100\n"
+"Last-Translator: Balázs Úr <ur.balazs@fsf.hu>\n"
 "Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
 "Language: hu\n"
 "MIME-Version: 1.0\n"
@@ -19,405 +19,466 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "X-Rosetta-Export-Date: 2007-07-27 19:18:15+0000\n"
-"X-Generator: Lokalize 1.2\n"
+"X-Generator: Lokalize 19.04.3\n"
 "X-Rosetta-Export-Date: 2007-07-27 19:18:15+0000\n"
 "Plural-Forms:  nplurals=2; plural=(n != 1);\n"
 
+#: ext/jack/gstjackaudiosink.c:356 ext/jack/gstjackaudiosrc.c:364
 msgid "Jack server not found"
 msgstr "Jack kiszolgáló nem található"
 
+#: ext/jpeg/gstjpegdec.c:936 ext/jpeg/gstjpegdec.c:1103
+#: ext/jpeg/gstjpegdec.c:1112 ext/jpeg/gstjpegdec.c:1122
+#: ext/jpeg/gstjpegdec.c:1131 ext/jpeg/gstjpegdec.c:1393
+#: ext/jpeg/gstjpegdec.c:1421
 msgid "Failed to decode JPEG image"
 msgstr "A JPEG kép visszafejtése meghiúsult"
 
-msgid ""
-"Failed to configure LAME mp3 audio encoder. Check your encoding parameters."
-msgstr ""
+#: ext/lame/gstlamemp3enc.c:393
+msgid "Failed to configure LAME mp3 audio encoder. Check your encoding parameters."
+msgstr "Nem sikerült beállítani a LAME mp3 hangkódolót. Ellenőrizze a kódolási paramétereket."
 
+#: ext/lame/gstlamemp3enc.c:425 ext/twolame/gsttwolamemp2enc.c:488
 #, c-format
-msgid ""
-"The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-"bitrate was changed to %d kbit/s."
-msgstr ""
+msgid "The requested bitrate %d kbit/s for property '%s' is not allowed. The bitrate was changed to %d kbit/s."
+msgstr "A kért %d kbit/s bitsebesség a(z) „%s” tulajdonságnál nem engedélyezett. A bitsebesség meg lett változtatva %d kbit/s értékre."
 
 #. TRANSLATORS: 'song title' by 'artist name'
+#: ext/pulse/pulsesink.c:3127
 #, c-format
 msgid "'%s' by '%s'"
 msgstr "„%s” ettől: „%s”"
 
+#: ext/shout2/gstshout2.c:619 ext/shout2/gstshout2.c:629
 msgid "Could not connect to server"
 msgstr "Nem sikerült csatlakozni a kiszolgálóhoz"
 
+#: ext/soup/gstsouphttpsrc.c:914
 msgid "No URL set."
 msgstr "Nincs beállítva URL."
 
+#: ext/soup/gstsouphttpsrc.c:1372
 msgid "Could not resolve server name."
 msgstr "Nem sikerült feloldani a kiszolgáló nevét."
 
+#: ext/soup/gstsouphttpsrc.c:1377
 msgid "Could not establish connection to server."
 msgstr "Nem hozható létre kapcsolat a kiszolgálóhoz."
 
+#: ext/soup/gstsouphttpsrc.c:1381
 msgid "Secure connection setup failed."
 msgstr "A biztonságos kapcsolat kialakítása meghiúsult."
 
-msgid ""
-"A network error occurred, or the server closed the connection unexpectedly."
-msgstr ""
-"Hálózati hiba történt, vagy a kiszolgáló váratlanul lezárta a kapcsolatot."
+#: ext/soup/gstsouphttpsrc.c:1387
+msgid "A network error occurred, or the server closed the connection unexpectedly."
+msgstr "Hálózati hiba történt, vagy a kiszolgáló váratlanul lezárta a kapcsolatot."
 
+#: ext/soup/gstsouphttpsrc.c:1392
 msgid "Server sent bad data."
 msgstr "A kiszolgáló hibás adatokat küldött."
 
+#: ext/soup/gstsouphttpsrc.c:1616
 msgid "Server does not support seeking."
 msgstr "A kiszolgáló nem támogatja a tekerést."
 
+#: ext/twolame/gsttwolamemp2enc.c:411
 msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-msgstr ""
+msgstr "Nem sikerült beállítani a TwoLAME kódolót. Ellenőrizze a kódolási paramétereket."
 
+#: gst/avi/gstavimux.c:1832
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "Nincs vagy érvénytelen bemeneti hang, az AVI-folyam sérült lesz."
 
+#: gst/isomp4/qtdemux.c:713 gst/isomp4/qtdemux.c:717
 msgid "This file contains no playable streams."
 msgstr "A fájl nem tartalmaz lejátszható adatfolyamokat."
 
+#: gst/isomp4/qtdemux.c:763 gst/isomp4/qtdemux.c:7003
+#: gst/isomp4/qtdemux.c:7072 gst/isomp4/qtdemux.c:7362
+#: gst/isomp4/qtdemux.c:8800
 msgid "This file is invalid and cannot be played."
 msgstr "A fájl nem érvényes és nem játszható le."
 
+#: gst/isomp4/qtdemux.c:3091
 msgid "Cannot play stream because it is encrypted with PlayReady DRM."
-msgstr ""
-"Nem lehet lejátszani a folyamot, mert PlayReady DRM titkosítás van rajta."
+msgstr "Nem lehet lejátszani a folyamot, mert PlayReady DRM titkosítás van rajta."
 
+#: gst/isomp4/qtdemux.c:4312 gst/isomp4/qtdemux.c:8131
+#: gst/isomp4/qtdemux.c:8138 gst/isomp4/qtdemux.c:9283
+#: gst/isomp4/qtdemux.c:9720 gst/isomp4/qtdemux.c:9727
+#: gst/isomp4/qtdemux.c:12528
 msgid "This file is corrupt and cannot be played."
 msgstr "A fájl sérült és nem játszható le."
 
+#: gst/isomp4/qtdemux.c:4554
 msgid "Invalid atom size."
 msgstr "Érvénytelen atom méret."
 
+#: gst/isomp4/qtdemux.c:4633
 msgid "This file is incomplete and cannot be played."
 msgstr "A fájl nem teljes és nem játszható le."
 
+#: gst/isomp4/qtdemux.c:10756
 msgid "The video in this file might not play correctly."
 msgstr "A fájlban található videó lehet, hogy nem játszható le megfelelően."
 
-msgid ""
-"No supported stream was found. You might need to install a GStreamer RTSP "
-"extension plugin for Real media streams."
-msgstr ""
-"Nem található támogatott adatfolyam. Telepítse a GStreamer RTSP bővítményt a "
-"Real media adatfolyamokhoz."
+#: gst/rtsp/gstrtspsrc.c:7398
+msgid "No supported stream was found. You might need to install a GStreamer RTSP extension plugin for Real media streams."
+msgstr "Nem található támogatott adatfolyam. Telepítse a GStreamer RTSP bővítményt a Real media adatfolyamokhoz."
 
-msgid ""
-"No supported stream was found. You might need to allow more transport "
-"protocols or may otherwise be missing the right GStreamer RTSP extension "
-"plugin."
-msgstr ""
-"Nem található támogatott adatfolyam. Lehet, hogy több átviteli protokollt "
-"kell engedélyezni, vagy hiányzik a megfelelő GStreamer RTSP bővítmény."
+#: gst/rtsp/gstrtspsrc.c:7403
+msgid "No supported stream was found. You might need to allow more transport protocols or may otherwise be missing the right GStreamer RTSP extension plugin."
+msgstr "Nem található támogatott adatfolyam. Lehet, hogy több átviteli protokollt kell engedélyezni, vagy hiányzik a megfelelő GStreamer RTSP bővítmény."
 
-msgid ""
-"Could not open audio device for playback. Device is being used by another "
-"application."
-msgstr ""
-"Nem nyitható meg hangeszköz a lejátszáshoz. Az eszközt másik alkalmazás "
-"használja."
+#: sys/oss4/oss4-sink.c:493 sys/oss4/oss4-source.c:358
+#: sys/oss/gstosssink.c:384
+msgid "Could not open audio device for playback. Device is being used by another application."
+msgstr "Nem nyitható meg hangeszköz a lejátszáshoz. Az eszközt másik alkalmazás használja."
 
-msgid ""
-"Could not open audio device for playback. You don't have permission to open "
-"the device."
-msgstr ""
-"Nem nyitható meg hangeszköz a lejátszáshoz. Nincs jogosultsága az eszköz "
-"megnyitására."
+#: sys/oss4/oss4-sink.c:503 sys/oss4/oss4-source.c:368
+#: sys/oss/gstosssink.c:391
+msgid "Could not open audio device for playback. You don't have permission to open the device."
+msgstr "Nem nyitható meg hangeszköz a lejátszáshoz. Nincs jogosultsága az eszköz megnyitására."
 
+#: sys/oss4/oss4-sink.c:514 sys/oss4/oss4-source.c:379
+#: sys/oss/gstosssink.c:399
 msgid "Could not open audio device for playback."
 msgstr "Nem nyitható meg hangeszköz a lejátszáshoz."
 
-msgid ""
-"Could not open audio device for playback. This version of the Open Sound "
-"System is not supported by this element."
-msgstr ""
-"Nem nyitható meg hangeszköz a lejátszáshoz. Az Open Sound System ezen "
-"verzióját az elem nem támogatja."
+#: sys/oss4/oss4-sink.c:523 sys/oss4/oss4-source.c:389
+msgid "Could not open audio device for playback. This version of the Open Sound System is not supported by this element."
+msgstr "Nem nyitható meg hangeszköz a lejátszáshoz. Az Open Sound System ezen verzióját az elem nem támogatja."
 
+#: sys/oss4/oss4-sink.c:646
 msgid "Playback is not supported by this audio device."
 msgstr "Ez a hangeszköz nem támogatja a lejátszást."
 
+#: sys/oss4/oss4-sink.c:653
 msgid "Audio playback error."
 msgstr "Hanglejátszási hiba."
 
+#: sys/oss4/oss4-source.c:503
 msgid "Recording is not supported by this audio device."
 msgstr "Ez a hangeszköz nem támogatja a felvételt."
 
+#: sys/oss4/oss4-source.c:510
 msgid "Error recording from audio device."
 msgstr "Hiba a hangeszközről való felvételkor."
 
-msgid ""
-"Could not open audio device for recording. You don't have permission to open "
-"the device."
-msgstr ""
-"Nem nyitható meg hangeszköz a felvételhez. Nincs jogosultsága az eszköz "
-"megnyitására."
+#: sys/oss/gstosssrc.c:376
+msgid "Could not open audio device for recording. You don't have permission to open the device."
+msgstr "Nem nyitható meg hangeszköz a felvételhez. Nincs jogosultsága az eszköz megnyitására."
 
+#: sys/oss/gstosssrc.c:384
 msgid "Could not open audio device for recording."
 msgstr "Nem nyitható meg hangeszköz a felvételhez."
 
+#: sys/osxaudio/gstosxaudioringbuffer.c:149
 msgid "CoreAudio device not found"
 msgstr "A CoreAudio eszköz nem található"
 
+#: sys/osxaudio/gstosxaudioringbuffer.c:155
 msgid "CoreAudio device could not be opened"
 msgstr "A CoreAudio eszköz nem nyitható meg"
 
+#: sys/v4l2/gstv4l2bufferpool.c:1712
 #, c-format
 msgid "Error reading %d bytes from device '%s'."
 msgstr "Hiba %d bájt olvasásakor a következő eszközről: „%s”."
 
+#: sys/v4l2/gstv4l2object.c:1223
 #, c-format
 msgid "Failed to enumerate possible video formats device '%s' can work with"
-msgstr ""
-"A(z) „%s” eszköz által kezelhető lehetséges videoformátumok felsorolása "
-"sikertelen"
+msgstr "A(z) „%s” eszköz által kezelhető lehetséges videoformátumok felsorolása sikertelen"
 
+#: sys/v4l2/gstv4l2object.c:2956
 #, c-format
 msgid "Could not map buffers from device '%s'"
 msgstr "Nem képezhetők le a(z) „%s” eszköz pufferei"
 
+#: sys/v4l2/gstv4l2object.c:2964
 #, c-format
 msgid "The driver of device '%s' does not support the IO method %d"
 msgstr "A(z) „%s” eszköz illesztőprogramja nem támogatja a(z) %d. IO módot"
 
+#: sys/v4l2/gstv4l2object.c:2971
 #, c-format
 msgid "The driver of device '%s' does not support any known IO method."
-msgstr ""
-"A(z) „%s” eszköz illesztőprogramja nem támogat egyetlen ismert IO módot sem."
+msgstr "A(z) „%s” eszköz illesztőprogramja nem támogat egyetlen ismert IO módot sem."
 
-#, fuzzy, c-format
+#: sys/v4l2/gstv4l2object.c:3741 sys/v4l2/gstv4l2object.c:3765
+#, c-format
 msgid "Device '%s' has no supported format"
-msgstr "A(z) %s eszközön lévő kódolónak nincs támogatott bemeneti formátuma"
+msgstr "A(z) „%s” eszköznek nincs támogatott formátuma"
 
+#: sys/v4l2/gstv4l2object.c:3747 sys/v4l2/gstv4l2object.c:3771
 #, c-format
 msgid "Device '%s' failed during initialization"
-msgstr ""
+msgstr "A(z) „%s” eszköz meghiúsult az előkészítés során"
 
+#: sys/v4l2/gstv4l2object.c:3759
 #, c-format
 msgid "Device '%s' is busy"
 msgstr "A(z) „%s” eszköz foglalt"
 
+#: sys/v4l2/gstv4l2object.c:3782
 #, c-format
 msgid "Device '%s' cannot capture at %dx%d"
 msgstr "A(z) „%s” eszköz nem képes felvenni %dx%d felbontásban"
 
+#: sys/v4l2/gstv4l2object.c:3791
 #, c-format
 msgid "Device '%s' cannot capture in the specified format"
 msgstr "A(z) „%s” eszköz nem képes felvenni a megadott formátumban"
 
+#: sys/v4l2/gstv4l2object.c:3802
 #, c-format
 msgid "Device '%s' does support non-contiguous planes"
 msgstr "A(z) „%s” eszköz nem támogatja a nem szomszédos síkokat"
 
-#, fuzzy, c-format
+#: sys/v4l2/gstv4l2object.c:3817
+#, c-format
 msgid "Device '%s' does not support %s interlacing"
-msgstr "A kiszolgáló nem támogatja a tekerést."
+msgstr "A(z) „%s” eszköz nem támogat %s váltottsort"
 
-#, fuzzy, c-format
+#: sys/v4l2/gstv4l2object.c:3831
+#, c-format
 msgid "Device '%s' does not support %s colorimetry"
-msgstr "A(z) „%s” eszköz nem támogatja a nem szomszédos síkokat"
+msgstr "A(z) „%s” eszköz nem támogat %s színmetrikát"
 
+#: sys/v4l2/gstv4l2object.c:3843
 #, c-format
 msgid "Could not get parameters on device '%s'"
 msgstr "Nem kérhetők le a(z) „%s” eszköz paraméterei"
 
+#: sys/v4l2/gstv4l2object.c:3851
 msgid "Video device did not accept new frame rate setting."
 msgstr "A videoeszköz nem fogadta el az új képkockasebesség-beállítást."
 
+#: sys/v4l2/gstv4l2object.c:3977
 msgid "Video device did not provide output format."
 msgstr "A videoeszköz nem szolgáltatott kimeneti formátumot."
 
+#: sys/v4l2/gstv4l2object.c:3983
 msgid "Video device returned invalid dimensions."
 msgstr "A videoeszköz érvénytelen dimenziókkal tért vissza."
 
+#: sys/v4l2/gstv4l2object.c:3991
 msgid "Video device uses an unsupported interlacing method."
 msgstr "A videoeszköz nem támogatott váltottsoros módot használ."
 
+#: sys/v4l2/gstv4l2object.c:3998
 msgid "Video device uses an unsupported pixel format."
 msgstr "A videoeszköz nem támogatott képpontformátumot használ."
 
+#: sys/v4l2/gstv4l2object.c:4518
 msgid "Failed to configure internal buffer pool."
 msgstr "Nem sikerült beállítani a belső puffertárolót."
 
+#: sys/v4l2/gstv4l2object.c:4524
 msgid "Video device did not suggest any buffer size."
 msgstr "A videoeszköz nem javasolt semmilyen pufferméretet."
 
+#: sys/v4l2/gstv4l2object.c:4539
 msgid "No downstream pool to import from."
 msgstr "Nincs importálási forrásként használható alárendelt tároló."
 
+#: sys/v4l2/gstv4l2radio.c:143
 #, c-format
 msgid "Failed to get settings of tuner %d on device '%s'."
 msgstr "A(z) %d. tuner beállításának lekérése a(z) „%s” eszközön meghiúsult."
 
+#: sys/v4l2/gstv4l2radio.c:150
 #, c-format
 msgid "Error getting capabilities for device '%s'."
 msgstr "Hiba a(z) „%s” eszköz képességeinek lekérésekor."
 
+#: sys/v4l2/gstv4l2radio.c:157
 #, c-format
 msgid "Device '%s' is not a tuner."
 msgstr "A(z) „%s” eszköz nem tuner."
 
+#: sys/v4l2/gstv4l2radio.c:184
 #, c-format
 msgid "Failed to get radio input on device '%s'. "
 msgstr "A rádióbemenet lekérése meghiúsult a(z) „%s” eszközön."
 
+#: sys/v4l2/gstv4l2radio.c:207 sys/v4l2/v4l2_calls.c:1072
 #, c-format
 msgid "Failed to set input %d on device %s."
 msgstr "A(z) %d. bemenet beállítása meghiúsult a(z) „%s” eszközön."
 
+#: sys/v4l2/gstv4l2radio.c:241
 #, c-format
 msgid "Failed to change mute state for device '%s'."
 msgstr "A némítási állapot módosítása meghiúsult a(z) „%s” eszközön."
 
+#: sys/v4l2/gstv4l2sink.c:628
 msgid "Failed to allocated required memory."
 msgstr "Nem sikerült lefoglalni a szükséges memóriát."
 
+#: sys/v4l2/gstv4l2src.c:652 sys/v4l2/gstv4l2videodec.c:756
+#: sys/v4l2/gstv4l2videoenc.c:782
 msgid "Failed to allocate required memory."
 msgstr "Nem sikerült lefoglalni a szükséges memóriát."
 
+#: sys/v4l2/gstv4l2transform.c:142
 #, c-format
 msgid "Converter on device %s has no supported input format"
 msgstr "A(z) %s eszközön lévő átalakítónak nincs támogatott bemeneti formátuma"
 
+#: sys/v4l2/gstv4l2transform.c:149
 #, c-format
 msgid "Converter on device %s has no supported output format"
 msgstr "A(z) %s eszközön lévő átalakítónak nincs támogatott kimeneti formátuma"
 
-#, fuzzy, c-format
+#: sys/v4l2/gstv4l2videodec.c:136
+#, c-format
 msgid "Decoder on device %s has no supported input format"
-msgstr "A(z) %s eszközön lévő kódolónak nincs támogatott bemeneti formátuma"
+msgstr "A(z) %s eszközön lévő dekódolónak nincs támogatott bemeneti formátuma"
 
-#, fuzzy, c-format
+#: sys/v4l2/gstv4l2videodec.c:281
+#, c-format
 msgid "Decoder on device %s has no supported output format"
-msgstr "A(z) %s eszközön lévő kódolónak nincs támogatott kimeneti formátuma"
+msgstr "A(z) %s eszközön lévő dekódolónak nincs támogatott kimeneti formátuma"
 
+#: sys/v4l2/gstv4l2videodec.c:770
 msgid "Failed to start decoding thread."
 msgstr "Nem sikerült elindítani a dekódolási szálat."
 
+#: sys/v4l2/gstv4l2videodec.c:777 sys/v4l2/gstv4l2videoenc.c:803
 msgid "Failed to process frame."
 msgstr "Nem sikerült feldolgozni a keretet."
 
+#: sys/v4l2/gstv4l2videoenc.c:140
 #, c-format
 msgid "Encoder on device %s has no supported output format"
 msgstr "A(z) %s eszközön lévő kódolónak nincs támogatott kimeneti formátuma"
 
+#: sys/v4l2/gstv4l2videoenc.c:147
 #, c-format
 msgid "Encoder on device %s has no supported input format"
 msgstr "A(z) %s eszközön lévő kódolónak nincs támogatott bemeneti formátuma"
 
-#, fuzzy
+#: sys/v4l2/gstv4l2videoenc.c:795
 msgid "Failed to start encoding thread."
-msgstr "Nem sikerült elindítani a dekódolási szálat."
+msgstr "Nem sikerült elindítani a kódolási szálat."
 
+#: sys/v4l2/v4l2_calls.c:92
 #, c-format
-msgid ""
-"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
-"it is a v4l1 driver."
-msgstr ""
-"Hiba a(z) „%s” eszköz képességeinek lekérésekor. Ez nem egy v4l2 meghajtó. "
-"Ellenőrizze, hogy nem v4l1 meghajtó-e."
+msgid "Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if it is a v4l1 driver."
+msgstr "Hiba a(z) „%s” eszköz képességeinek lekérésekor. Ez nem egy v4l2 meghajtó. Ellenőrizze, hogy nem v4l1 meghajtó-e."
 
+#: sys/v4l2/v4l2_calls.c:156
 #, c-format
 msgid "Failed to query attributes of input %d in device %s"
 msgstr "A(z) %d bemenet attribútumainak lekérése meghiúsult a(z) %s eszközön"
 
+#: sys/v4l2/v4l2_calls.c:187
 #, c-format
 msgid "Failed to get setting of tuner %d on device '%s'."
 msgstr "A(z) %d. tuner beállításának lekérése a(z) „%s” eszközön meghiúsult."
 
+#: sys/v4l2/v4l2_calls.c:235
 #, c-format
 msgid "Failed to query norm on device '%s'."
 msgstr "A norma lekérdezése meghiúsult a(z) „%s” eszköztől."
 
+#: sys/v4l2/v4l2_calls.c:416
 #, c-format
 msgid "Failed getting controls attributes on device '%s'."
 msgstr "A vezérlőattribútumok lekérése meghiúsult a(z) „%s” eszközön."
 
+#: sys/v4l2/v4l2_calls.c:608
 #, c-format
 msgid "Cannot identify device '%s'."
 msgstr "Nem azonosítható a(z) „%s” eszköz."
 
+#: sys/v4l2/v4l2_calls.c:615
 #, c-format
 msgid "This isn't a device '%s'."
 msgstr "Ez nem egy eszköz: „%s”."
 
+#: sys/v4l2/v4l2_calls.c:622
 #, c-format
 msgid "Could not open device '%s' for reading and writing."
 msgstr "Nem sikerült olvasásra és írásra megnyitni a(z) „%s” eszközt."
 
+#: sys/v4l2/v4l2_calls.c:629
 #, c-format
 msgid "Device '%s' is not a capture device."
 msgstr "A(z) „%s” eszköz nem rögzítőeszköz."
 
+#: sys/v4l2/v4l2_calls.c:637
 #, c-format
 msgid "Device '%s' is not a output device."
 msgstr "A(z) „%s” eszköz nem kimeneti eszköz."
 
+#: sys/v4l2/v4l2_calls.c:645
 #, c-format
 msgid "Device '%s' is not a M2M device."
 msgstr "A(z) „%s” eszköz nem M2M eszköz."
 
+#: sys/v4l2/v4l2_calls.c:698
 #, c-format
 msgid "Could not dup device '%s' for reading and writing."
 msgstr "Nem sikerült duplikálni a(z) „%s” eszközt olvasásra és írásra."
 
+#: sys/v4l2/v4l2_calls.c:782
 #, c-format
 msgid "Failed to set norm for device '%s'."
 msgstr "A norma beállítása meghiúsult a(z) „%s” eszközön."
 
+#: sys/v4l2/v4l2_calls.c:820
 #, c-format
 msgid "Failed to get current tuner frequency for device '%s'."
-msgstr ""
-"A tuner aktuális frekvenciájának lekérdezése meghiúsult a(z) „%s” eszköztől."
+msgstr "A tuner aktuális frekvenciájának lekérdezése meghiúsult a(z) „%s” eszköztől."
 
+#: sys/v4l2/v4l2_calls.c:862
 #, c-format
 msgid "Failed to set current tuner frequency for device '%s' to %lu Hz."
-msgstr ""
-"A tuner aktuális frekvenciájának beállítása meghiúsult a(z) „%s” eszközön "
-"%lu Hz-re."
+msgstr "A tuner aktuális frekvenciájának beállítása meghiúsult a(z) „%s” eszközön %lu Hz-re."
 
+#: sys/v4l2/v4l2_calls.c:896
 #, c-format
 msgid "Failed to get signal strength for device '%s'."
 msgstr "A jelerősség lekérdezése meghiúsult a(z) „%s” eszközön."
 
+#: sys/v4l2/v4l2_calls.c:932
 #, c-format
 msgid "Failed to get value for control %d on device '%s'."
 msgstr "A(z) %d. vezérlőelem értékének lekérése meghiúsult a(z) „%s” eszközön."
 
+#: sys/v4l2/v4l2_calls.c:967
 #, c-format
 msgid "Failed to set value %d for control %d on device '%s'."
-msgstr ""
-"A(z) $%2d érték beállítása $%1d vezérlőelemhez meghiúsult a(z) „%s” eszközön."
+msgstr "A(z) $%2d érték beállítása $%1d vezérlőelemhez meghiúsult a(z) „%s” eszközön."
 
+#: sys/v4l2/v4l2_calls.c:1047
 #, c-format
 msgid "Failed to get current input on device '%s'. May be it is a radio device"
-msgstr ""
-"Az aktuális bemenet lekérése meghiúsult a(z) „%s” eszközről. Lehet, hogy ez "
-"egy rádióeszköz."
+msgstr "Az aktuális bemenet lekérése meghiúsult a(z) „%s” eszközről. Lehet, hogy ez egy rádióeszköz."
 
+#: sys/v4l2/v4l2_calls.c:1104
 #, c-format
-msgid ""
-"Failed to get current output on device '%s'. May be it is a radio device"
-msgstr ""
-"Az aktuális kimenet lekérése meghiúsult a(z) „%s” eszközről. Lehet, hogy ez "
-"egy rádióeszköz."
+msgid "Failed to get current output on device '%s'. May be it is a radio device"
+msgstr "Az aktuális kimenet lekérése meghiúsult a(z) „%s” eszközről. Lehet, hogy ez egy rádióeszköz."
 
+#: sys/v4l2/v4l2_calls.c:1129
 #, c-format
 msgid "Failed to set output %d on device %s."
 msgstr "A(z) %d. kimenet beállítása meghiúsult a(z) „%s” eszközön."
 
+#: sys/ximage/gstximagesrc.c:838
 msgid "Changing resolution at runtime is not yet supported."
 msgstr "A felbontás módosítása futás közben még nem támogatott."
 
+#: sys/ximage/gstximagesrc.c:852
 msgid "Cannot operate without a clock"
 msgstr "Óra nélkül lehetetlen a működés"
 
 #~ msgid "This file contains too many streams. Only playing first %d"
-#~ msgstr ""
-#~ "A fájl túl sok adatfolyamot tartalmaz. Csak az első %d kerül lejátszásra."
+#~ msgstr "A fájl túl sok adatfolyamot tartalmaz. Csak az első %d kerül lejátszásra."
 
 #~ msgid "Record Source"
 #~ msgstr "Felvétel forrása"
index bacd3cf..65ca7d7 100644 (file)
@@ -2,14 +2,14 @@
 # This file is put in the public domain.
 #
 # Kjartan Maraas <kmaraas@gnome.org>, 2004-2010.
-# Johnny A. Solbu <johnny@solbu.net>, 2012-2017
+# Johnny A. Solbu <johnny@solbu.net>, 2012-2019
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gst-plugins-good 1.12.0\n"
+"Project-Id-Version: gst-plugins-good 1.15.1\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:47+0000\n"
-"PO-Revision-Date: 2017-05-23 23:04+0200\n"
+"POT-Creation-Date: 2019-01-17 01:59+0000\n"
+"PO-Revision-Date: 2019-09-03 09:55+0200\n"
 "Last-Translator: Johnny A. Solbu <johnny@solbu.net>\n"
 "Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n"
 "Language: nb_NO\n"
@@ -19,386 +19,457 @@ msgstr ""
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "X-Generator: Poedit 1.8.7.1\n"
 
+#: ext/jack/gstjackaudiosink.c:356 ext/jack/gstjackaudiosrc.c:364
 msgid "Jack server not found"
 msgstr "Jack-server ikke funnet"
 
+#: ext/jpeg/gstjpegdec.c:936 ext/jpeg/gstjpegdec.c:1103
+#: ext/jpeg/gstjpegdec.c:1112 ext/jpeg/gstjpegdec.c:1122
+#: ext/jpeg/gstjpegdec.c:1131 ext/jpeg/gstjpegdec.c:1393
+#: ext/jpeg/gstjpegdec.c:1421
 msgid "Failed to decode JPEG image"
 msgstr "Klarte ikke å dekode JPEG-bilde"
 
-msgid ""
-"Failed to configure LAME mp3 audio encoder. Check your encoding parameters."
-msgstr ""
+#: ext/lame/gstlamemp3enc.c:393
+msgid "Failed to configure LAME mp3 audio encoder. Check your encoding parameters."
+msgstr "Kunne ikke konfigurere LAME mp3-lydkoder. Sjekk kodingsparametrene dine."
 
+#: ext/lame/gstlamemp3enc.c:425 ext/twolame/gsttwolamemp2enc.c:488
 #, c-format
-msgid ""
-"The requested bitrate %d kbit/s for property '%s' is not allowed. The "
-"bitrate was changed to %d kbit/s."
-msgstr ""
+msgid "The requested bitrate %d kbit/s for property '%s' is not allowed. The bitrate was changed to %d kbit/s."
+msgstr "Den forespurte bitraten %d-kbit/s for egenskapen «%s» er ikke tillatt. Bitraten ble endret til %d kbit/s."
 
 #. TRANSLATORS: 'song title' by 'artist name'
+#: ext/pulse/pulsesink.c:3127
 #, c-format
 msgid "'%s' by '%s'"
 msgstr "«%s» av «%s»"
 
+#: ext/shout2/gstshout2.c:619 ext/shout2/gstshout2.c:629
 msgid "Could not connect to server"
 msgstr "Kunne ikke koble til tjener."
 
+#: ext/soup/gstsouphttpsrc.c:914
 msgid "No URL set."
 msgstr "Ingen URL satt."
 
+#: ext/soup/gstsouphttpsrc.c:1372
 msgid "Could not resolve server name."
 msgstr "Kunne ikke slå opp navn på tjener."
 
+#: ext/soup/gstsouphttpsrc.c:1377
 msgid "Could not establish connection to server."
 msgstr "Kunne ikke etablere tilkobling til tjener."
 
+#: ext/soup/gstsouphttpsrc.c:1381
 msgid "Secure connection setup failed."
 msgstr "Oppsett av sikker tilkobling feilet."
 
-msgid ""
-"A network error occurred, or the server closed the connection unexpectedly."
+#: ext/soup/gstsouphttpsrc.c:1387
+msgid "A network error occurred, or the server closed the connection unexpectedly."
 msgstr "En nettverksfeil oppstod, eller tjeneren lukket uventet tilkoblingen."
 
+#: ext/soup/gstsouphttpsrc.c:1392
 msgid "Server sent bad data."
 msgstr "Tjener sendte ugyldige data."
 
+#: ext/soup/gstsouphttpsrc.c:1616
 msgid "Server does not support seeking."
 msgstr "Tjener støtter ikke søking."
 
+#: ext/twolame/gsttwolamemp2enc.c:411
 msgid "Failed to configure TwoLAME encoder. Check your encoding parameters."
-msgstr ""
+msgstr "Kunne ikke konfigurere TwoLame-enkoder. Kontroller kodingsparametrene dine."
 
+#: gst/avi/gstavimux.c:1832
 msgid "No or invalid input audio, AVI stream will be corrupt."
 msgstr "Ingen eller ugyldig inndatalyd, AVI-strømmen vil bli skadet."
 
+#: gst/isomp4/qtdemux.c:713 gst/isomp4/qtdemux.c:717
 msgid "This file contains no playable streams."
 msgstr "Filen inneholder ingen spillbare strømmer."
 
+#: gst/isomp4/qtdemux.c:763 gst/isomp4/qtdemux.c:7003
+#: gst/isomp4/qtdemux.c:7072 gst/isomp4/qtdemux.c:7362
+#: gst/isomp4/qtdemux.c:8800
 msgid "This file is invalid and cannot be played."
 msgstr "Filen er ugyldig og kan ikke spilles."
 
+#: gst/isomp4/qtdemux.c:3091
 msgid "Cannot play stream because it is encrypted with PlayReady DRM."
 msgstr "Kan ikke spille av strømmen fordi den er kryptert med PlayReady DRM."
 
+#: gst/isomp4/qtdemux.c:4312 gst/isomp4/qtdemux.c:8131
+#: gst/isomp4/qtdemux.c:8138 gst/isomp4/qtdemux.c:9283
+#: gst/isomp4/qtdemux.c:9720 gst/isomp4/qtdemux.c:9727
+#: gst/isomp4/qtdemux.c:12528
 msgid "This file is corrupt and cannot be played."
 msgstr "Filen er skadet og kan ikke spilles."
 
+#: gst/isomp4/qtdemux.c:4554
 msgid "Invalid atom size."
 msgstr "Ugyldig atomstørrelse."
 
+#: gst/isomp4/qtdemux.c:4633
 msgid "This file is incomplete and cannot be played."
 msgstr "Filen er ufullstendig og kan ikke spilles."
 
+#: gst/isomp4/qtdemux.c:10756
 msgid "The video in this file might not play correctly."
 msgstr "Videoen i denne filen spilles kanskje ikke av korrekt."
 
-msgid ""
-"No supported stream was found. You might need to install a GStreamer RTSP "
-"extension plugin for Real media streams."
-msgstr ""
-"Ingen støttet strøm ble funnet. Du må kanskje installere en GStreamer RTSP "
-"utvidelsesprogramtillegg for Real mediestrømmer."
+#: gst/rtsp/gstrtspsrc.c:7398
+msgid "No supported stream was found. You might need to install a GStreamer RTSP extension plugin for Real media streams."
+msgstr "Ingen støttet strøm ble funnet. Du må kanskje installere en GStreamer RTSP utvidelsesprogramtillegg for Real mediestrømmer."
 
-msgid ""
-"No supported stream was found. You might need to allow more transport "
-"protocols or may otherwise be missing the right GStreamer RTSP extension "
-"plugin."
-msgstr ""
-"Ingen støttet strøm ble funnet. Du må kanskje tillate flere "
-"transportprotokoller eller den kan mangle den rette GStreamer RTSP-"
-"utvidelsestillegget."
+#: gst/rtsp/gstrtspsrc.c:7403
+msgid "No supported stream was found. You might need to allow more transport protocols or may otherwise be missing the right GStreamer RTSP extension plugin."
+msgstr "Ingen støttet strøm ble funnet. Du må kanskje tillate flere transportprotokoller eller den kan mangle den rette GStreamer RTSP-utvidelsestillegget."
 
-msgid ""
-"Could not open audio device for playback. Device is being used by another "
-"application."
-msgstr ""
-"Kunne ikke åpne lydenheten for avspilling. Enheten brukes av et annet "
-"program."
+#: sys/oss4/oss4-sink.c:493 sys/oss4/oss4-source.c:358
+#: sys/oss/gstosssink.c:384
+msgid "Could not open audio device for playback. Device is being used by another application."
+msgstr "Kunne ikke åpne lydenheten for avspilling. Enheten brukes av et annet program."
 
-msgid ""
-"Could not open audio device for playback. You don't have permission to open "
-"the device."
-msgstr ""
-"Kunne ikke åpne lydenheten for avspilling. Du har ikke tillatelse til å åpne "
-"enheten."
+#: sys/oss4/oss4-sink.c:503 sys/oss4/oss4-source.c:368
+#: sys/oss/gstosssink.c:391
+msgid "Could not open audio device for playback. You don't have permission to open the device."
+msgstr "Kunne ikke åpne lydenheten for avspilling. Du har ikke tillatelse til å åpne enheten."
 
+#: sys/oss4/oss4-sink.c:514 sys/oss4/oss4-source.c:379
+#: sys/oss/gstosssink.c:399
 msgid "Could not open audio device for playback."
 msgstr "Kunne ikke åpne lydenhet for avspilling."
 
-msgid ""
-"Could not open audio device for playback. This version of the Open Sound "
-"System is not supported by this element."
-msgstr ""
-"Kunne ikke åpne lydenheten for avspilling. Denne versjonen av «Open Sound "
-"System» støttes ikke av dette elementet."
+#: sys/oss4/oss4-sink.c:523 sys/oss4/oss4-source.c:389
+msgid "Could not open audio device for playback. This version of the Open Sound System is not supported by this element."
+msgstr "Kunne ikke åpne lydenheten for avspilling. Denne versjonen av «Open Sound System» støttes ikke av dette elementet."
 
+#: sys/oss4/oss4-sink.c:646
 msgid "Playback is not supported by this audio device."
 msgstr "Avspilling støttes ikke av denne lydenheten."
 
+#: sys/oss4/oss4-sink.c:653
 msgid "Audio playback error."
 msgstr "Lydavspillingsfeil"
 
+#: sys/oss4/oss4-source.c:503
 msgid "Recording is not supported by this audio device."
 msgstr "Opptak støttes ikke av denne lydenheten."
 
+#: sys/oss4/oss4-source.c:510
 msgid "Error recording from audio device."
 msgstr "Feil ved opptak fra lydenheten."
 
-msgid ""
-"Could not open audio device for recording. You don't have permission to open "
-"the device."
-msgstr ""
-"Kunne ikke åpne lydenheten for opptak. Du har ikke tillatelse til å åpne "
-"enheten."
+#: sys/oss/gstosssrc.c:376
+msgid "Could not open audio device for recording. You don't have permission to open the device."
+msgstr "Kunne ikke åpne lydenheten for opptak. Du har ikke tillatelse til å åpne enheten."
 
+#: sys/oss/gstosssrc.c:384
 msgid "Could not open audio device for recording."
 msgstr "Kunne ikke åpne lydenhet for opptak."
 
+#: sys/osxaudio/gstosxaudioringbuffer.c:149
 msgid "CoreAudio device not found"
 msgstr "CoreAudio-enhet ikke funnet"
 
+#: sys/osxaudio/gstosxaudioringbuffer.c:155
 msgid "CoreAudio device could not be opened"
 msgstr "CoreAudio-enhet kune ikke åpnes"
 
+#: sys/v4l2/gstv4l2bufferpool.c:1712
 #, c-format
 msgid "Error reading %d bytes from device '%s'."
 msgstr "Feil ved lesing av% d bytes fra enheten '% s»."
 
+#: sys/v4l2/gstv4l2object.c:1223
 #, c-format
 msgid "Failed to enumerate possible video formats device '%s' can work with"
 msgstr "Kunne ikke spesifisere mulige videoformater enhet «%s» kan arbeide med"
 
+#: sys/v4l2/gstv4l2object.c:2956
 #, c-format
 msgid "Could not map buffers from device '%s'"
 msgstr "Kunne ikke tilordne buffere fra enheten «%s»."
 
+#: sys/v4l2/gstv4l2object.c:2964
 #, c-format
 msgid "The driver of device '%s' does not support the IO method %d"
 msgstr "Driveren av enheten «%s» støtter ikke IO metoden %d"
 
+#: sys/v4l2/gstv4l2object.c:2971
 #, c-format
 msgid "The driver of device '%s' does not support any known IO method."
 msgstr "Driveren av enheten «%s» støtter ikke noen kjente IO-metoder."
 
-#, fuzzy, c-format
+#: sys/v4l2/gstv4l2object.c:3741 sys/v4l2/gstv4l2object.c:3765
+#, c-format
 msgid "Device '%s' has no supported format"
-msgstr "Enkoder på enhet «%s» har ingen støttede inndataformat"
+msgstr "Enhet «%s» har ingen støttede format"
 
+#: sys/v4l2/gstv4l2object.c:3747 sys/v4l2/gstv4l2object.c:3771
 #, c-format
 msgid "Device '%s' failed during initialization"
-msgstr ""
+msgstr "Enheten «%s» mislyktes under initialiseringen"
 
+#: sys/v4l2/gstv4l2object.c:3759
 #, c-format
 msgid "Device '%s' is busy"
 msgstr "Enheten «%s» er opptatt"
 
+#: sys/v4l2/gstv4l2object.c:3782
 #, c-format
 msgid "Device '%s' cannot capture at %dx%d"
 msgstr "Enhet «%s» kan ikke fange ved %dx%d"
 
+#: sys/v4l2/gstv4l2object.c:3791
 #, c-format
 msgid "Device '%s' cannot capture in the specified format"
 msgstr "Enhet «%s» kan ikke fange i det angitte formatet"
 
+#: sys/v4l2/gstv4l2object.c:3802
 #, c-format
 msgid "Device '%s' does support non-contiguous planes"
 msgstr "Enhet «%s» støtter ikke ikke-sammenhengende plan"
 
-#, fuzzy, c-format
+#: sys/v4l2/gstv4l2object.c:3817
+#, c-format
 msgid "Device '%s' does not support %s interlacing"
-msgstr "Enhet «%s» støtter ikke videoopptak"
+msgstr "Enhet «%s» støtter ikke %s-linjefletting"
 
-#, fuzzy, c-format
+#: sys/v4l2/gstv4l2object.c:3831
+#, c-format
 msgid "Device '%s' does not support %s colorimetry"
-msgstr "Enhet «%s» støtter ikke videoopptak"
+msgstr "Enhet «%s» støtter ikke %s-kolorimetri"
 
+#: sys/v4l2/gstv4l2object.c:3843
 #, c-format
 msgid "Could not get parameters on device '%s'"
 msgstr "Kunne ikke få parametere på enheten «%s»."
 
+#: sys/v4l2/gstv4l2object.c:3851
 msgid "Video device did not accept new frame rate setting."
 msgstr "Videoenheten aksepterte ikke ny bildefrekvensinnstilling."
 
+#: sys/v4l2/gstv4l2object.c:3977
 msgid "Video device did not provide output format."
 msgstr "Videoenhet tilbød ikke utdataformat."
 
+#: sys/v4l2/gstv4l2object.c:3983
 msgid "Video device returned invalid dimensions."
 msgstr "Videoenhet returnerte ugyldige dimensjoner."
 
+#: sys/v4l2/gstv4l2object.c:3991
 msgid "Video device uses an unsupported interlacing method."
 msgstr "Videoenhet bruker en ustøttet linjeflettingsmetode."
 
+#: sys/v4l2/gstv4l2object.c:3998
 msgid "Video device uses an unsupported pixel format."
 msgstr "Videoenhet bruker et ustøttet pikselformat."
 
+#: sys/v4l2/gstv4l2object.c:4518
 msgid "Failed to configure internal buffer pool."
 msgstr "Klarte ikke å konfigurere internt bufferområde"
 
+#: sys/v4l2/gstv4l2object.c:4524
 msgid "Video device did not suggest any buffer size."
 msgstr "Videoenhet foreslo ikke noen bufferstørrelse."
 
+#: sys/v4l2/gstv4l2object.c:4539
 msgid "No downstream pool to import from."
 msgstr "Ingen nedstrømsområde å importere fra."
 
+#: sys/v4l2/gstv4l2radio.c:143
 #, c-format
 msgid "Failed to get settings of tuner %d on device '%s'."
 msgstr "Kunne ikke hente innstillingene fra mottakeren %d på enheten «%s»."
 
+#: sys/v4l2/gstv4l2radio.c:150
 #, c-format
 msgid "Error getting capabilities for device '%s'."
 msgstr "Feil ved henting av funksjoner for enheten «%s»."
 
+#: sys/v4l2/gstv4l2radio.c:157
 #, c-format
 msgid "Device '%s' is not a tuner."
 msgstr "Enheten «%s» er ikke en tuner."
 
+#: sys/v4l2/gstv4l2radio.c:184
 #, c-format
 msgid "Failed to get radio input on device '%s'. "
 msgstr "Mislyktes i å få radio-inndata på enheten «%s»."
 
+#: sys/v4l2/gstv4l2radio.c:207 sys/v4l2/v4l2_calls.c:1072
 #, c-format
 msgid "Failed to set input %d on device %s."
 msgstr "Klarte ikke å sette inngang %d på enhet %s."
 
+#: sys/v4l2/gstv4l2radio.c:241
 #, c-format
 msgid "Failed to change mute state for device '%s'."
 msgstr "Klarte ikke å endre dempe-modus for enheten «%s»."
 
+#: sys/v4l2/gstv4l2sink.c:628
 msgid "Failed to allocated required memory."
 msgstr "Kunne ikke tildele nødvendige minne."
 
+#: sys/v4l2/gstv4l2src.c:652 sys/v4l2/gstv4l2videodec.c:756
+#: sys/v4l2/gstv4l2videoenc.c:782
 msgid "Failed to allocate required memory."
 msgstr "Kunne ikke tildele nødvendige minne."
 
+#: sys/v4l2/gstv4l2transform.c:142
 #, c-format
 msgid "Converter on device %s has no supported input format"
 msgstr "Konverter på enhet «%s» har ingen støttede inndataformat"
 
+#: sys/v4l2/gstv4l2transform.c:149
 #, c-format
 msgid "Converter on device %s has no supported output format"
 msgstr "Konverter på enhet «%s» har ingen støttede utdataformat"
 
-#, fuzzy, c-format
+#: sys/v4l2/gstv4l2videodec.c:136
+#, c-format
 msgid "Decoder on device %s has no supported input format"
-msgstr "Enkoder på enhet «%s» har ingen støttede inndataformat"
+msgstr "Dekoder på enhet «%s» har ingen støttede inndataformat"
 
-#, fuzzy, c-format
+#: sys/v4l2/gstv4l2videodec.c:281
+#, c-format
 msgid "Decoder on device %s has no supported output format"
-msgstr "Enkoder på enhet «%s» har ingen støttede utdataformat"
+msgstr "Dekoder på enhet «%s» har ingen støttede utdataformat"
 
+#: sys/v4l2/gstv4l2videodec.c:770
 msgid "Failed to start decoding thread."
 msgstr "Klarte ikke å starte dekoding av tråden."
 
+#: sys/v4l2/gstv4l2videodec.c:777 sys/v4l2/gstv4l2videoenc.c:803
 msgid "Failed to process frame."
 msgstr "Kunne ikke behandle ramme."
 
+#: sys/v4l2/gstv4l2videoenc.c:140
 #, c-format
 msgid "Encoder on device %s has no supported output format"
 msgstr "Enkoder på enhet «%s» har ingen støttede utdataformat"
 
+#: sys/v4l2/gstv4l2videoenc.c:147
 #, c-format
 msgid "Encoder on device %s has no supported input format"
 msgstr "Enkoder på enhet «%s» har ingen støttede inndataformat"
 
-#, fuzzy
+#: sys/v4l2/gstv4l2videoenc.c:795
 msgid "Failed to start encoding thread."
-msgstr "Klarte ikke å starte dekoding av tråden."
+msgstr "Klarte ikke å starte kodingstråd."
 
+#: sys/v4l2/v4l2_calls.c:92
 #, c-format
-msgid ""
-"Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if "
-"it is a v4l1 driver."
-msgstr ""
-"Feil ved henting av evner for enheten «%s»: Det er ikke en v4l2 driver. "
-"Sjekk om det er en v4l1 driver."
+msgid "Error getting capabilities for device '%s': It isn't a v4l2 driver. Check if it is a v4l1 driver."
+msgstr "Feil ved henting av evner for enheten «%s»: Det er ikke en v4l2 driver. Sjekk om det er en v4l1 driver."
 
+#: sys/v4l2/v4l2_calls.c:156
 #, c-format
 msgid "Failed to query attributes of input %d in device %s"
 msgstr "Feil ved attributtspørring av inndata %d på enhet %s"
 
+#: sys/v4l2/v4l2_calls.c:187
 #, c-format
 msgid "Failed to get setting of tuner %d on device '%s'."
 msgstr "Kunne ikke hente innstillingen av mottakeren %d på enheten «%s»."
 
+#: sys/v4l2/v4l2_calls.c:235
 #, c-format
 msgid "Failed to query norm on device '%s'."
 msgstr "Feil ved norm-spørring på enhet %s."
 
+#: sys/v4l2/v4l2_calls.c:416
 #, c-format
 msgid "Failed getting controls attributes on device '%s'."
 msgstr "Kunne ikke å få inn kontrollattributter på enhet «%s»."
 
+#: sys/v4l2/v4l2_calls.c:608
 #, c-format
 msgid "Cannot identify device '%s'."
 msgstr "Kan ikke identifisere enhet «%s»."
 
+#: sys/v4l2/v4l2_calls.c:615
 #, c-format
 msgid "This isn't a device '%s'."
 msgstr "Dette er ikke en enhet «%s»."
 
+#: sys/v4l2/v4l2_calls.c:622
 #, c-format
 msgid "Could not open device '%s' for reading and writing."
 msgstr "Kunne ikke åpne enhet «%s» for lesing og skriving."
 
+#: sys/v4l2/v4l2_calls.c:629
 #, c-format
 msgid "Device '%s' is not a capture device."
 msgstr "Enhet «%s» kan ikke fange data."
 
+#: sys/v4l2/v4l2_calls.c:637
 #, c-format
 msgid "Device '%s' is not a output device."
 msgstr "Enhet «%s» er ikke en utgangsenhet."
 
+#: sys/v4l2/v4l2_calls.c:645
 #, c-format
 msgid "Device '%s' is not a M2M device."
 msgstr "Enheten «%s» er ikke en M2M-enhet."
 
+#: sys/v4l2/v4l2_calls.c:698
 #, c-format
 msgid "Could not dup device '%s' for reading and writing."
 msgstr "Kunne ikke åpne enhet «%s» for lesing og skriving."
 
+#: sys/v4l2/v4l2_calls.c:782
 #, c-format
 msgid "Failed to set norm for device '%s'."
 msgstr "Kunne ikke sette normen for enhet «%s»."
 
+#: sys/v4l2/v4l2_calls.c:820
 #, c-format
 msgid "Failed to get current tuner frequency for device '%s'."
 msgstr "Klarte ikke å få gjeldende mottakerfrekvens for enheten «%s»."
 
+#: sys/v4l2/v4l2_calls.c:862
 #, c-format
 msgid "Failed to set current tuner frequency for device '%s' to %lu Hz."
-msgstr ""
-"Klarte ikke å sette gjeldende mottakerfrekvens for enheten «%s» til %lu Hz."
+msgstr "Klarte ikke å sette gjeldende mottakerfrekvens for enheten «%s» til %lu Hz."
 
+#: sys/v4l2/v4l2_calls.c:896
 #, c-format
 msgid "Failed to get signal strength for device '%s'."
 msgstr "Klarte ikke å innhente signalstyrken for enheten «%s»."
 
+#: sys/v4l2/v4l2_calls.c:932
 #, c-format
 msgid "Failed to get value for control %d on device '%s'."
 msgstr "Kunne ikke hente verdi for kontroll %d på enheten «%s»."
 
+#: sys/v4l2/v4l2_calls.c:967
 #, c-format
 msgid "Failed to set value %d for control %d on device '%s'."
 msgstr "Klarte ikke å sette verdi %d for kontroll %d på enheten «%s»."
 
+#: sys/v4l2/v4l2_calls.c:1047
 #, c-format
 msgid "Failed to get current input on device '%s'. May be it is a radio device"
-msgstr ""
-"Kunne ikke hente gjeldende inndata på enheten «%s». Kanskje det er en "
-"radioenhet"
+msgstr "Kunne ikke hente gjeldende inndata på enheten «%s». Kanskje det er en radioenhet"
 
+#: sys/v4l2/v4l2_calls.c:1104
 #, c-format
-msgid ""
-"Failed to get current output on device '%s'. May be it is a radio device"
+msgid "Failed to get current output on device '%s'. May be it is a radio device"
 msgstr "Kunne ikke hente utdata fra enheten «%s». Kanskje det er en radioenhet"
 
+#: sys/v4l2/v4l2_calls.c:1129
 #, c-format
 msgid "Failed to set output %d on device %s."
 msgstr "Klarte ikke å sette utgang %d på enhet %s."
 
+#: sys/ximage/gstximagesrc.c:838
 msgid "Changing resolution at runtime is not yet supported."
 msgstr "Endring av oppløsning under kjøring støttes ikke enda."
 
+#: sys/ximage/gstximagesrc.c:852
 msgid "Cannot operate without a clock"
 msgstr "Kan ikke operere uten en klokke"
 
@@ -540,12 +611,8 @@ msgstr "Kan ikke operere uten en klokke"
 #~ msgid "Could not open audio device for mixer control handling."
 #~ msgstr "Kunne ikke åpne lydenheten for mikserkontrollhåndtering."
 
-#~ msgid ""
-#~ "Could not open audio device for mixer control handling. This version of "
-#~ "the Open Sound System is not supported by this element."
-#~ msgstr ""
-#~ "Kunne ikke åpne lydenheten for mikserkontrollhåndtering. Denne versjonen "
-#~ "av «Open Sound System» støttes ikke av dette elementet."
+#~ msgid "Could not open audio device for mixer control handling. This version of the Open Sound System is not supported by this element."
+#~ msgstr "Kunne ikke åpne lydenheten for mikserkontrollhåndtering. Denne versjonen av «Open Sound System» støttes ikke av dette elementet."
 
 #~ msgid "Master"
 #~ msgstr "Hovedvolum"
index 8c356b3..b3525cd 100644 (file)
@@ -773,6 +773,8 @@ struct v4l2_pix_format {
 #define V4L2_META_FMT_D4XX        v4l2_fourcc('D', '4', 'X', 'X') /* D4XX Payload Header metadata */
 #define V4L2_META_FMT_VIVID      v4l2_fourcc('V', 'I', 'V', 'D') /* Vivid Metadata */
 
+#define V4L2_PIX_FMT_INVZ     v4l2_fourcc('I', 'N', 'V', 'Z') /* Intel Planar Depth 16-bit */
+
 /* priv field value to indicates that subsequent fields are valid. */
 #define V4L2_PIX_FMT_PRIV_MAGIC                0xfeedcafe
 
index ec53bc9..888c263 100644 (file)
@@ -98,6 +98,16 @@ gst_v4l2_probe_template_caps (const gchar * device, gint video_fd,
       GstStructure *alt_t = NULL;
 
       switch (format.pixelformat) {
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+        case V4L2_PIX_FMT_YUV420:
+          alt_t = gst_structure_copy (template);
+          gst_structure_set (alt_t, "format", G_TYPE_STRING, "S420", NULL);
+          break;
+        case V4L2_PIX_FMT_NV12:
+          alt_t = gst_structure_copy (template);
+          gst_structure_set (alt_t, "format", G_TYPE_STRING, "SN12", NULL);
+          break;
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
         case V4L2_PIX_FMT_RGB32:
           alt_t = gst_structure_copy (template);
           gst_structure_set (alt_t, "format", G_TYPE_STRING, "ARGB", NULL);
@@ -250,6 +260,7 @@ static gboolean
 plugin_init (GstPlugin * plugin)
 {
   gboolean ret = FALSE;
+#ifndef TIZEN_FEATURE_DISABLE_V4L2_DEPENDENCY
   const gchar *paths[] = { "/dev", "/dev/v4l2", NULL };
   const gchar *names[] = { "video", NULL };
 
@@ -257,6 +268,7 @@ plugin_init (GstPlugin * plugin)
    * /dev/video* */
   gst_plugin_add_dependency (plugin,
       NULL, paths, names, GST_PLUGIN_DEPENDENCY_FLAG_FILE_NAME_IS_PREFIX);
+#endif /* TIZEN_FEATURE_DISABLE_V4L2_DEPENDENCY */
 
 #ifdef GST_V4L2_ENABLE_PROBE
   ret |= gst_v4l2_probe_and_register (plugin);
index e82a853..48429a5 100644 (file)
 #include <sys/types.h>
 #include <sys/mman.h>
 #include <unistd.h>
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+#include <tbm_surface.h>
+#include <tbm_surface_internal.h>
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
 
 #define GST_V4L2_MEMORY_TYPE "V4l2Memory"
 
@@ -235,6 +239,13 @@ gst_v4l2_memory_group_free (GstV4l2MemoryGroup * group)
     if (mem)
       gst_memory_unref (mem);
   }
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+  if (group->surface) {
+    GST_INFO ("unref surface[%p]", group->surface);
+    tbm_surface_destroy (group->surface);
+    group->surface = NULL;
+  }
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
 
   g_slice_free (GstV4l2MemoryGroup, group);
 }
@@ -428,6 +439,13 @@ gst_v4l2_allocator_finalize (GObject * obj)
   GstV4l2Allocator *allocator = (GstV4l2Allocator *) obj;
 
   GST_LOG_OBJECT (obj, "called");
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+  if (allocator->bufmgr) {
+    GST_INFO_OBJECT (obj, "deinit tbm bufmgr %p", allocator->bufmgr);
+    tbm_bufmgr_deinit (allocator->bufmgr);
+    allocator->bufmgr = NULL;
+  }
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
 
   gst_atomic_queue_unref (allocator->free_queue);
   gst_object_unref (allocator->obj->element);
@@ -620,7 +638,20 @@ _cleanup_failed_alloc (GstV4l2Allocator * allocator, GstV4l2MemoryGroup * group)
   }
 }
 
-
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+static tbm_format __get_tbm_format (GstVideoFormat gst_format)
+{
+  switch (gst_format) {
+  case GST_VIDEO_FORMAT_NV12:
+  case GST_VIDEO_FORMAT_SN12:
+    return TBM_FORMAT_NV12;
+  case GST_VIDEO_FORMAT_I420:
+  case GST_VIDEO_FORMAT_S420:
+  default:
+    return TBM_FORMAT_YUV420;
+  }
+}
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
 
 GstV4l2Allocator *
 gst_v4l2_allocator_new (GstObject * parent, GstV4l2Object * v4l2object)
@@ -660,6 +691,33 @@ gst_v4l2_allocator_new (GstObject * parent, GstV4l2Object * v4l2object)
 
   GST_OBJECT_FLAG_SET (allocator, flags);
 
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+  if (v4l2object->tbm_output &&
+      !V4L2_TYPE_IS_OUTPUT (v4l2object->type) &&
+      v4l2object->mode == GST_V4L2_IO_DMABUF) {
+    tbm_surface_h tmp_surface = NULL;
+    int width = GST_VIDEO_INFO_WIDTH (&v4l2object->info);
+    int height = GST_VIDEO_INFO_HEIGHT (&v4l2object->info);
+
+    tmp_surface = tbm_surface_create (width, height,
+        __get_tbm_format (GST_VIDEO_INFO_FORMAT (&v4l2object->info)));
+    if (tmp_surface) {
+      tbm_surface_get_info (tmp_surface, &allocator->s_info);
+      GST_INFO_OBJECT (allocator, "[%dx%d] -> tbm surface info[%dx%d]",
+          width, height, allocator->s_info.width, allocator->s_info.height);
+      tbm_surface_destroy (tmp_surface);
+    } else {
+      GST_ERROR_OBJECT (allocator, "[%dx%d] surface failed", width, height);
+    }
+
+    allocator->bufmgr = tbm_bufmgr_init (-1);
+    if (!allocator->bufmgr) {
+      GST_ERROR_OBJECT (allocator, "tbm bufmgr failed");
+      gst_object_unref (allocator);
+      return NULL;
+    }
+  }
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
   return allocator;
 }
 
@@ -886,6 +944,9 @@ gst_v4l2_allocator_alloc_dmabuf (GstV4l2Allocator * allocator,
   GstV4l2Object *obj = allocator->obj;
   GstV4l2MemoryGroup *group;
   gint i;
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+  tbm_bo bos[VIDEO_MAX_PLANES] = {NULL, };
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
 
   g_return_val_if_fail (allocator->memory == V4L2_MEMORY_MMAP, NULL);
 
@@ -916,6 +977,13 @@ gst_v4l2_allocator_alloc_dmabuf (GstV4l2Allocator * allocator,
           NULL, group->planes[i].length, 0, group->planes[i].data_offset,
           group->planes[i].length - group->planes[i].data_offset, i, NULL,
           expbuf.fd, group);
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+      if (obj->tbm_output) {
+        bos[i] = tbm_bo_import_fd (allocator->bufmgr, expbuf.fd);
+        GST_INFO_OBJECT (allocator, "obj[%p,i:%d]: fd[%d] -> bo[%p]",
+            obj, expbuf.index, expbuf.fd, bos[i]);
+      }
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
     } else {
       /* Take back the allocator reference */
       gst_object_ref (allocator);
@@ -937,6 +1005,16 @@ gst_v4l2_allocator_alloc_dmabuf (GstV4l2Allocator * allocator,
     group->mem[i] = dma_mem;
   }
 
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+  if (obj->tbm_output && !group->surface) {
+    group->surface = tbm_surface_internal_create_with_bos (&allocator->s_info, bos, group->n_mem);
+    GST_INFO_OBJECT (allocator, "new surface[%p] in memory group[%p]", group->surface, group);
+  }
+  /* release bos - they will be kept in surface. */
+  for (i = 0 ; i < VIDEO_MAX_PLANES && bos[i] ; i++)
+    tbm_bo_unref (bos[i]);
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
+
   gst_v4l2_allocator_reset_size (allocator, group);
 
   return group;
index eb51524..25ec2d5 100644 (file)
 #include "ext/videodev2.h"
 #include <gst/gst.h>
 #include <gst/gstatomicqueue.h>
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+#include <tbm_surface.h>
+#include <tbm_surface_internal.h>
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
 
 G_BEGIN_DECLS
 
@@ -90,6 +94,9 @@ struct _GstV4l2MemoryGroup
   gint mems_allocated;
   struct v4l2_buffer buffer;
   struct v4l2_plane planes[VIDEO_MAX_PLANES];
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+  tbm_surface_h surface;
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
 };
 
 struct _GstV4l2Allocator
@@ -104,7 +111,11 @@ struct _GstV4l2Allocator
   GstV4l2MemoryGroup * groups[VIDEO_MAX_FRAME];
   GstAtomicQueue *free_queue;
   GstAtomicQueue *pending_queue;
-
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+  tbm_bufmgr bufmgr;
+  tbm_surface_info_s s_info;
+  gint live_buffer_count;
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
 };
 
 struct _GstV4l2AllocatorClass {
index 7b5050a..bc5ea49 100644 (file)
@@ -45,6 +45,9 @@
 #include "gstv4l2object.h"
 #include "gst/gst-i18n-plugin.h"
 #include <gst/glib-compat-private.h>
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+#include <gst/allocators/gsttizenmemory.h>
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
 
 GST_DEBUG_CATEGORY_STATIC (v4l2bufferpool_debug);
 GST_DEBUG_CATEGORY_STATIC (CAT_PERFORMANCE);
@@ -52,7 +55,6 @@ GST_DEBUG_CATEGORY_STATIC (CAT_PERFORMANCE);
 
 #define GST_V4L2_IMPORT_QUARK gst_v4l2_buffer_pool_import_quark ()
 
-
 /*
  * GstV4l2BufferPool:
  */
@@ -68,6 +70,76 @@ enum _GstV4l2BufferPoolAcquireFlags
 
 static void gst_v4l2_buffer_pool_release_buffer (GstBufferPool * bpool,
     GstBuffer * buffer);
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+typedef struct _GstV4l2TizenBuffer GstV4l2TizenBuffer;
+struct _GstV4l2TizenBuffer {
+  int index;
+  GstBuffer *gst_buffer;
+  GstBuffer *v4l2_buffer;
+  GstV4l2BufferPool *v4l2_pool;
+};
+
+static void gst_v4l2_tizen_buffer_finalize (GstV4l2TizenBuffer *tizen_buffer)
+{
+  GstV4l2BufferPool *pool = NULL;
+
+  if (!tizen_buffer) {
+    GST_ERROR ("NULL buffer");
+    return;
+  }
+
+  pool = tizen_buffer->v4l2_pool;
+
+  gst_v4l2_buffer_pool_release_buffer (GST_BUFFER_POOL_CAST (pool), tizen_buffer->v4l2_buffer);
+
+  g_mutex_lock (&pool->buffer_lock);
+
+  pool->live_buffer_count--;
+
+  GST_DEBUG_OBJECT (pool, "release buffer[%d][tizen:%p,v4l2:%p,gst:%p], live[%d]",
+      tizen_buffer->index, tizen_buffer, tizen_buffer->v4l2_buffer,
+      tizen_buffer->gst_buffer, pool->live_buffer_count);
+
+  g_cond_signal (&pool->buffer_cond);
+
+  g_mutex_unlock (&pool->buffer_lock);
+
+  gst_object_unref (pool);
+
+  g_free(tizen_buffer);
+}
+
+static GstV4l2TizenBuffer *gst_v4l2_tizen_buffer_new (GstBuffer *v4l2_buffer, int index, GstV4l2BufferPool *v4l2_pool)
+{
+  GstV4l2TizenBuffer *tizen_buffer = NULL;
+  GstMemory *memory = NULL;
+
+  tizen_buffer = g_new0 (GstV4l2TizenBuffer, 1);
+  tizen_buffer->index = index;
+  tizen_buffer->v4l2_buffer = v4l2_buffer;
+  tizen_buffer->gst_buffer = gst_buffer_new ();
+  tizen_buffer->v4l2_pool = gst_object_ref (v4l2_pool);
+
+  memory = gst_tizen_allocator_alloc_surface (v4l2_pool->tallocator,
+      &v4l2_pool->obj->info, v4l2_pool->vallocator->groups[index]->surface, (gpointer)tizen_buffer,
+      (GDestroyNotify)gst_v4l2_tizen_buffer_finalize);
+
+  gst_buffer_append_memory (tizen_buffer->gst_buffer, memory);
+  gst_buffer_set_size (tizen_buffer->gst_buffer, v4l2_pool->vallocator->s_info.size);
+
+  g_mutex_lock (&v4l2_pool->buffer_lock);
+
+  v4l2_pool->live_buffer_count++;
+
+  GST_DEBUG_OBJECT (v4l2_pool, "new buffer[tizen:%p,v4l2:%p,gst:%p], size[%d], live[%d]",
+      tizen_buffer, v4l2_buffer, tizen_buffer->gst_buffer,
+      v4l2_pool->vallocator->s_info.size, v4l2_pool->live_buffer_count);
+
+  g_mutex_unlock (&v4l2_pool->buffer_lock);
+
+  return tizen_buffer;
+}
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
 
 static gboolean
 gst_v4l2_is_buffer_valid (GstBuffer * buffer, GstV4l2MemoryGroup ** out_group)
@@ -693,10 +765,38 @@ gst_v4l2_buffer_pool_streamoff (GstV4l2BufferPool * pool)
   GstBufferPoolClass *pclass = GST_BUFFER_POOL_CLASS (parent_class);
   GstV4l2Object *obj = pool->obj;
   gint i;
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+  gint64 end_time = 0;
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
 
   if (!pool->streaming)
     return;
 
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+  if (obj->tbm_output && !V4L2_TYPE_IS_OUTPUT(pool->obj->type)) {
+    g_mutex_lock (&pool->buffer_lock);
+
+    GST_INFO_OBJECT (pool, "live buffer[%d]", pool->live_buffer_count);
+
+    if (pool->live_buffer_count > 0) {
+      end_time = g_get_monotonic_time () + G_TIME_SPAN_SECOND;
+
+      do {
+        GST_WARNING_OBJECT (pool, "wait for live buffer[%d]", pool->live_buffer_count);
+
+        if (!g_cond_wait_until (&pool->buffer_cond, &pool->buffer_lock, end_time)) {
+          GST_ERROR_OBJECT (pool, "failed to wait live buffer[%d]", pool->live_buffer_count);
+          break;
+        }
+
+        GST_WARNING_OBJECT (pool, "signal received, check again : live count[%d]",
+            pool->live_buffer_count);
+      } while (pool->live_buffer_count > 0);
+    }
+
+    g_mutex_unlock (&pool->buffer_lock);
+  }
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
   switch (obj->mode) {
     case GST_V4L2_IO_MMAP:
     case GST_V4L2_IO_USERPTR:
@@ -1261,6 +1361,9 @@ gst_v4l2_buffer_pool_dqbuf (GstV4l2BufferPool * pool, GstBuffer ** buffer,
   GstVideoMeta *vmeta;
   gsize size;
   gint i;
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+  GstV4l2TizenBuffer *tizen_buffer = NULL;
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
 
   if ((res = gst_v4l2_buffer_pool_poll (pool, wait)) < GST_FLOW_OK)
     goto poll_failed;
@@ -1406,6 +1509,16 @@ gst_v4l2_buffer_pool_dqbuf (GstV4l2BufferPool * pool, GstBuffer ** buffer,
   GST_BUFFER_OFFSET (outbuf) = group->buffer.sequence;
   GST_BUFFER_OFFSET_END (outbuf) = group->buffer.sequence + 1;
 
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+  if (group->surface) {
+    tizen_buffer = gst_v4l2_tizen_buffer_new (outbuf, group->buffer.index, pool);
+    if (!tizen_buffer) {
+      GST_ERROR_OBJECT (pool, "tizen buffer failed for index[%d]", group->buffer.index);
+      goto no_buffer;
+    }
+    outbuf = tizen_buffer->gst_buffer;
+  }
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
 done:
   *buffer = outbuf;
 
@@ -1522,6 +1635,14 @@ gst_v4l2_buffer_pool_release_buffer (GstBufferPool * bpool, GstBuffer * buffer)
 
   GST_DEBUG_OBJECT (pool, "release buffer %p", buffer);
 
+  /* If the buffer's pool has been orphaned, dispose of it so that
+   * the pool resources can be freed */
+  if (pool->orphaned) {
+    GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_TAG_MEMORY);
+    pclass->release_buffer (bpool, buffer);
+    return;
+  }
+
   switch (obj->type) {
     case V4L2_BUF_TYPE_VIDEO_CAPTURE:
     case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE:
@@ -1637,6 +1758,14 @@ gst_v4l2_buffer_pool_dispose (GObject * object)
     gst_object_unref (pool->allocator);
   pool->allocator = NULL;
 
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+  g_cond_clear (&pool->buffer_cond);
+  g_mutex_clear (&pool->buffer_lock);
+
+  if (pool->tallocator)
+    gst_object_unref (pool->tallocator);
+  pool->tallocator = NULL;
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
   if (pool->other_pool)
     gst_object_unref (pool->other_pool);
   pool->other_pool = NULL;
@@ -1743,6 +1872,14 @@ gst_v4l2_buffer_pool_new (GstV4l2Object * obj, GstCaps * caps)
   pool->obj = obj;
   pool->can_poll_device = TRUE;
 
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+  pool->tallocator = gst_tizen_allocator_new ();
+  if (pool->tallocator == NULL)
+    goto allocator_failed;
+
+  g_mutex_init (&pool->buffer_lock);
+  g_cond_init (&pool->buffer_cond);
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
   pool->vallocator = gst_v4l2_allocator_new (GST_OBJECT (pool), obj);
   if (pool->vallocator == NULL)
     goto allocator_failed;
@@ -1765,6 +1902,12 @@ dup_failed:
   }
 allocator_failed:
   {
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+    if (pool->tallocator) {
+      gst_object_unref (pool->tallocator);
+      pool->tallocator = NULL;
+    }
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
     GST_ERROR_OBJECT (pool, "Failed to create V4L2 allocator");
     gst_object_unref (pool);
     return NULL;
@@ -1939,11 +2082,19 @@ gst_v4l2_buffer_pool_process (GstV4l2BufferPool * pool, GstBuffer ** buf,
             if (GST_V4L2_IS_M2M (obj->device_caps))
               goto eos;
           }
-
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+          if (pool->obj->tbm_output && pool->obj->mode == GST_V4L2_IO_DMABUF) {
+            gst_buffer_unref (*buf);
+            *buf = tmp;
+          } else {
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
           ret = gst_v4l2_buffer_pool_copy_buffer (pool, *buf, tmp);
 
           /* an queue the buffer again after the copy */
           gst_v4l2_buffer_pool_release_buffer (bpool, tmp);
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+          }
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
 
           if (ret != GST_FLOW_OK)
             goto copy_failed;
index f4fdf92..ab9b161 100644 (file)
@@ -75,6 +75,12 @@ struct _GstV4l2BufferPool
 
   GstV4l2Allocator *vallocator;
   GstAllocator *allocator;
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+  GstAllocator *tallocator;
+  gint live_buffer_count;
+  GMutex buffer_lock;
+  GCond buffer_cond;
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
   GstAllocationParams params;
   GstBufferPool *other_pool;
   guint size;
index 9851ffc..35845d5 100644 (file)
@@ -117,6 +117,7 @@ static const GstV4L2FormatDesc gst_v4l2_formats[] = {
   {V4L2_PIX_FMT_Y16, TRUE, GST_V4L2_RAW},
   {V4L2_PIX_FMT_Y16_BE, TRUE, GST_V4L2_RAW},
   {V4L2_PIX_FMT_Y10BPACK, TRUE, GST_V4L2_RAW},
+  {V4L2_PIX_FMT_INVZ, TRUE, GST_V4L2_RAW},
 
   /* Palette formats */
   {V4L2_PIX_FMT_PAL8, TRUE, GST_V4L2_RAW},
@@ -522,7 +523,11 @@ gst_v4l2_object_new (GstElement * element,
 
   /* We now disable libv4l2 by default, but have an env to enable it. */
 #ifdef HAVE_LIBV4L2
+#ifdef TIZEN_FEATURE_USE_LIBV4L2
+  if (1) {
+#else /* TIZEN_FEATURE_USE_LIBV4L2 */
   if (g_getenv ("GST_V4L2_USE_LIBV4L2")) {
+#endif /* TIZEN_FEATURE_USE_LIBV4L2 */
     v4l2object->fd_open = v4l2_fd_open;
     v4l2object->close = v4l2_close;
     v4l2object->dup = v4l2_dup;
@@ -831,7 +836,19 @@ gst_v4l2_get_driver_min_buffers (GstV4l2Object * v4l2object)
   if (v4l2object->ioctl (v4l2object->video_fd, VIDIOC_G_CTRL, &control) == 0) {
     GST_DEBUG_OBJECT (v4l2object->dbg_obj,
         "driver requires a minimum of %d buffers", control.value);
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+#define DEFAULT_DECODER_OUTPUT_BUFFER_COUNT 5
+    if (v4l2object->tbm_output &&
+        !V4L2_TYPE_IS_OUTPUT (v4l2object->type) && control.value == 1) {
+      v4l2object->min_buffers = DEFAULT_DECODER_OUTPUT_BUFFER_COUNT;
+      GST_WARNING_OBJECT (v4l2object->dbg_obj, "but SET MIN BUFFER COUNT[%d] and it will be [%d] later",
+          v4l2object->min_buffers, v4l2object->min_buffers + 1);
+    } else {
+      v4l2object->min_buffers = control.value;
+    }
+#else /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
     v4l2object->min_buffers = control.value;
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
   } else {
     v4l2object->min_buffers = 0;
   }
@@ -1054,6 +1071,7 @@ gst_v4l2_object_format_get_rank (const struct v4l2_fmtdesc *fmt)
       break;
 
     case V4L2_PIX_FMT_GREY:    /*  8  Greyscale     */
+    case V4L2_PIX_FMT_INVZ:
       rank = GREY_BASE_RANK;
       break;
 
@@ -1386,6 +1404,9 @@ gst_v4l2_object_v4l2fourcc_to_video_format (guint32 fourcc)
     case V4L2_PIX_FMT_NV24:
       format = GST_VIDEO_FORMAT_NV24;
       break;
+    case V4L2_PIX_FMT_INVZ:
+      format = GST_VIDEO_FORMAT_INVZ;
+      break;
     default:
       format = GST_VIDEO_FORMAT_UNKNOWN;
       break;
@@ -1527,7 +1548,8 @@ gst_v4l2_object_v4l2fourcc_to_bare_struct (guint32 fourcc)
     case V4L2_PIX_FMT_UYVY:
     case V4L2_PIX_FMT_YUV422P:
     case V4L2_PIX_FMT_YVYU:
-    case V4L2_PIX_FMT_YUV411P:{
+    case V4L2_PIX_FMT_YUV411P:
+    case V4L2_PIX_FMT_INVZ:{
       GstVideoFormat format;
       format = gst_v4l2_object_v4l2fourcc_to_video_format (fourcc);
       if (format != GST_VIDEO_FORMAT_UNKNOWN)
@@ -1670,6 +1692,16 @@ gst_v4l2_object_get_caps_helper (GstV4L2FormatFlags flags)
       }
 
       switch (gst_v4l2_formats[i].format) {
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+        case V4L2_PIX_FMT_YUV420:
+          alt_s = gst_structure_copy (structure);
+          gst_structure_set (alt_s, "format", G_TYPE_STRING, "S420", NULL);
+          break;
+        case V4L2_PIX_FMT_NV12:
+          alt_s = gst_structure_copy (structure);
+          gst_structure_set (alt_s, "format", G_TYPE_STRING, "SN12", NULL);
+          break;
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
         case V4L2_PIX_FMT_RGB32:
           alt_s = gst_structure_copy (structure);
           gst_structure_set (alt_s, "format", G_TYPE_STRING, "ARGB", NULL);
@@ -1766,6 +1798,9 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps,
   if (g_str_equal (mimetype, "video/x-raw")) {
     switch (GST_VIDEO_INFO_FORMAT (info)) {
       case GST_VIDEO_FORMAT_I420:
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+      case GST_VIDEO_FORMAT_S420:
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
         fourcc = V4L2_PIX_FMT_YUV420;
         fourcc_nc = V4L2_PIX_FMT_YUV420M;
         break;
@@ -1785,6 +1820,9 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps,
         fourcc = V4L2_PIX_FMT_YUV422P;
         break;
       case GST_VIDEO_FORMAT_NV12:
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+      case GST_VIDEO_FORMAT_SN12:
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
         fourcc = V4L2_PIX_FMT_NV12;
         fourcc_nc = V4L2_PIX_FMT_NV12M;
         break;
@@ -1863,6 +1901,9 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps,
         fourcc = V4L2_PIX_FMT_RGB555X;
         fourcc_nc = V4L2_PIX_FMT_XRGB555X;
         break;
+      case GST_VIDEO_FORMAT_INVZ:
+        fourcc = V4L2_PIX_FMT_INVZ;
+        break;
       default:
         break;
     }
@@ -4523,6 +4564,25 @@ gst_v4l2_object_probe_caps (GstV4l2Object * v4l2object, GstCaps * filter)
               gst_caps_get_size (ret) - 1));
     }
 
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+    if (format->pixelformat == V4L2_PIX_FMT_NV12 ||
+        format->pixelformat == V4L2_PIX_FMT_YUV420) {
+      GstStructure *alt_s = gst_structure_copy (template);
+
+      if (format->pixelformat == V4L2_PIX_FMT_NV12)
+        gst_structure_set (alt_s, "format", G_TYPE_STRING, "SN12", NULL);
+      else
+        gst_structure_set (alt_s, "format", G_TYPE_STRING, "S420", NULL);
+
+      tmp = gst_v4l2_object_probe_caps_for_format (v4l2object,
+          format->pixelformat, alt_s);
+
+      if (tmp)
+        gst_caps_append (ret, tmp);
+
+      gst_structure_free (alt_s);
+    }
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
     gst_structure_free (template);
   }
 
@@ -4788,7 +4848,12 @@ gst_v4l2_object_decide_allocation (GstV4l2Object * obj, GstQuery * query)
   GstAllocationParams params = { 0 };
   guint video_idx;
 
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+  GST_INFO_OBJECT (obj->dbg_obj, "decide allocation - %s",
+      V4L2_TYPE_IS_OUTPUT (obj->type) ? "output" : "capture");
+#else /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
   GST_DEBUG_OBJECT (obj->dbg_obj, "decide allocation");
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
 
   g_return_val_if_fail (obj->type == V4L2_BUF_TYPE_VIDEO_CAPTURE ||
       obj->type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE, FALSE);
index e5ed0ac..3b97c5f 100644 (file)
@@ -131,6 +131,14 @@ struct _GstV4l2Object {
   /* the video device */
   char *videodev;
 
+#ifdef TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE
+  /* auto scan device */
+  gboolean auto_scan_device;
+#endif /* TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE */
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+  gboolean tbm_output;
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
+
   /* the video-device's file descriptor */
   gint video_fd;
   GstV4l2IOMode mode;
index d00f7a8..56569a9 100644 (file)
@@ -72,6 +72,15 @@ enum
 {
   PROP_0,
   V4L2_STD_OBJECT_PROPS,
+#ifdef TIZEN_FEATURE_V4L2SRC_SUPPORT_CAMERA_ID
+  PROP_CAMERA_ID,
+#endif /* TIZEN_FEATURE_V4L2SRC_SUPPORT_CAMERA_ID */
+#ifdef TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE
+  PROP_AUTO_SCAN_DEVICE,
+#endif /* TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE */
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+  PROP_TBM_OUTPUT,
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
   PROP_LAST
 };
 
@@ -157,6 +166,37 @@ gst_v4l2src_class_init (GstV4l2SrcClass * klass)
   gst_v4l2_object_install_properties_helper (gobject_class,
       DEFAULT_PROP_DEVICE);
 
+#ifdef TIZEN_FEATURE_V4L2SRC_SUPPORT_CAMERA_ID
+  /**
+   * GstV4l2Src:camera-id:
+   *
+   * The value which is set by application will be used as a number of device node.
+   * ex) 1 -> /dev/video1
+   */
+  g_object_class_install_property (gobject_class, PROP_CAMERA_ID,
+      g_param_spec_uint ("camera-id", "Camera ID",
+          "Camera ID for device node", 0, G_MAXUINT, 0,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+#endif /* TIZEN_FEATURE_V4L2SRC_SUPPORT_CAMERA_ID */
+#ifdef TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE
+  /**
+   * GstV4l2Src:auto-scan-device:
+   */
+  g_object_class_install_property (gobject_class, PROP_AUTO_SCAN_DEVICE,
+      g_param_spec_boolean ("auto-scan-device", "Scan device automatically",
+          "Scan all device nodes automatically until device open success.",
+          TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+#endif /* TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE */
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+  /**
+   * GstV4l2Src:tbm-output
+   */
+  g_object_class_install_property (gobject_class, PROP_TBM_OUTPUT,
+      g_param_spec_boolean ("tbm-output", "Enable TBM for output buffer",
+          "It works for only DMABUF mode.",
+          FALSE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
+
   /**
    * GstV4l2Src::prepare-format:
    * @v4l2src: the v4l2src instance
@@ -212,6 +252,9 @@ gst_v4l2src_init (GstV4l2Src * v4l2src)
 
   /* Avoid the slow probes */
   v4l2src->v4l2object->skip_try_fmt_probes = TRUE;
+#ifdef TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE
+  v4l2src->v4l2object->auto_scan_device = TRUE;
+#endif /* TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE */
 
   gst_base_src_set_format (GST_BASE_SRC (v4l2src), GST_FORMAT_TIME);
   gst_base_src_set_live (GST_BASE_SRC (v4l2src), TRUE);
@@ -236,6 +279,28 @@ gst_v4l2src_set_property (GObject * object,
   if (!gst_v4l2_object_set_property_helper (v4l2src->v4l2object,
           prop_id, value, pspec)) {
     switch (prop_id) {
+#ifdef TIZEN_FEATURE_V4L2SRC_SUPPORT_CAMERA_ID
+      case PROP_CAMERA_ID:
+        g_free (v4l2src->v4l2object->videodev);
+
+        v4l2src->camera_id = g_value_get_uint (value);
+        v4l2src->v4l2object->videodev = g_strdup_printf ("/dev/video%u", v4l2src->camera_id);
+
+        GST_INFO_OBJECT (v4l2src, "videodev [%s]", v4l2src->v4l2object->videodev);
+        break;
+#endif /* TIZEN_FEATURE_V4L2SRC_SUPPORT_CAMERA_ID */
+#ifdef TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE
+      case PROP_AUTO_SCAN_DEVICE:
+        v4l2src->v4l2object->auto_scan_device = g_value_get_boolean (value);
+        GST_INFO_OBJECT (v4l2src, "auto scan device [%d]", v4l2src->v4l2object->auto_scan_device);
+        break;
+#endif /* TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE */
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+      case PROP_TBM_OUTPUT:
+        v4l2src->v4l2object->tbm_output = g_value_get_boolean (value);
+        GST_INFO_OBJECT (v4l2src, "tbm output [%d]", v4l2src->v4l2object->tbm_output);
+        break;
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
       default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
         break;
@@ -252,6 +317,23 @@ gst_v4l2src_get_property (GObject * object,
   if (!gst_v4l2_object_get_property_helper (v4l2src->v4l2object,
           prop_id, value, pspec)) {
     switch (prop_id) {
+#ifdef TIZEN_FEATURE_V4L2SRC_SUPPORT_CAMERA_ID
+      case PROP_CAMERA_ID:
+        g_value_set_uint (value, v4l2src->camera_id);
+        break;
+#endif /* TIZEN_FEATURE_V4L2SRC_SUPPORT_CAMERA_ID */
+#ifdef TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE
+      case PROP_AUTO_SCAN_DEVICE:
+        GST_INFO_OBJECT (v4l2src, "auto scan device [%d]", v4l2src->v4l2object->auto_scan_device);
+        g_value_set_boolean (value, v4l2src->v4l2object->auto_scan_device);
+        break;
+#endif /* TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE */
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+      case PROP_TBM_OUTPUT:
+        GST_INFO_OBJECT (v4l2src, "tbm output [%d]", v4l2src->v4l2object->tbm_output);
+        g_value_set_boolean (value, v4l2src->v4l2object->tbm_output);
+        break;
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
       default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
         break;
index 39a5baf..a47a66d 100644 (file)
@@ -71,6 +71,11 @@ struct _GstV4l2Src
 
   /* maintain signal status, updated during negotiation */
   gboolean no_signal;
+
+#ifdef TIZEN_FEATURE_V4L2SRC_SUPPORT_CAMERA_ID
+  /* Properties */
+  guint camera_id;
+#endif /* TIZEN_FEATURE_V4L2SRC_SUPPORT_CAMERA_ID */
 };
 
 struct _GstV4l2SrcClass
index 097f3ca..851fe7c 100644 (file)
@@ -59,6 +59,9 @@ enum
 {
   PROP_0,
   V4L2_STD_OBJECT_PROPS
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+  , PROP_TBM_OUTPUT
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
 };
 
 #define gst_v4l2_video_dec_parent_class parent_class
@@ -67,6 +70,23 @@ G_DEFINE_ABSTRACT_TYPE (GstV4l2VideoDec, gst_v4l2_video_dec,
 
 static GstFlowReturn gst_v4l2_video_dec_finish (GstVideoDecoder * decoder);
 
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+static void gst_v4l2_video_dec_flush_buffer_event (GstVideoDecoder * decoder)
+{
+  gboolean ret = FALSE;
+
+  if (!decoder) {
+    GST_ERROR("no decoder");
+    return;
+  }
+
+  ret = gst_pad_push_event (decoder->srcpad,
+      gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM | GST_EVENT_TYPE_SERIALIZED,
+          gst_structure_new_empty("tizen/flush-buffer")));
+
+  GST_WARNING_OBJECT(decoder, "event push ret[%d] for flush-buffer", ret);
+}
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
 static void
 gst_v4l2_video_dec_set_property (GObject * object,
     guint prop_id, const GValue * value, GParamSpec * pspec)
@@ -80,6 +100,13 @@ gst_v4l2_video_dec_set_property (GObject * object,
         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       }
       break;
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+    case PROP_TBM_OUTPUT:
+      self->v4l2capture->tbm_output = g_value_get_boolean (value);
+      GST_INFO_OBJECT (self, "tbm output [%d]", self->v4l2capture->tbm_output);
+      break;
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
+
 
       /* By default, only set on output */
     default:
@@ -104,6 +131,12 @@ gst_v4l2_video_dec_get_property (GObject * object,
         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       }
       break;
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+    case PROP_TBM_OUTPUT:
+      GST_INFO_OBJECT (self, "tbm output [%d]", self->v4l2capture->tbm_output);
+      g_value_set_boolean (value, self->v4l2capture->tbm_output);
+      break;
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
 
       /* By default read from output */
     default:
@@ -209,6 +242,9 @@ gst_v4l2_video_dec_stop (GstVideoDecoder * decoder)
 
   /* Should have been flushed already */
   g_assert (g_atomic_int_get (&self->active) == FALSE);
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+  gst_v4l2_video_dec_flush_buffer_event (decoder);
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
 
   gst_v4l2_object_stop (self->v4l2output);
   gst_v4l2_object_stop (self->v4l2capture);
@@ -353,6 +389,9 @@ gst_v4l2_video_dec_flush (GstVideoDecoder * decoder)
   if (self->v4l2output->pool)
     gst_v4l2_buffer_pool_flush (self->v4l2output->pool);
 
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+  gst_v4l2_video_dec_flush_buffer_event (decoder);
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
   /* gst_v4l2_buffer_pool_flush() calls streamon the capture pool and must be
    * called after gst_v4l2_object_unlock_stop() stopped flushing the buffer
    * pool. */
@@ -572,6 +611,10 @@ gst_v4l2_video_dec_loop (GstVideoDecoder * decoder)
 beach:
   GST_DEBUG_OBJECT (decoder, "Leaving output thread: %s",
       gst_flow_get_name (ret));
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+  if (ret == GST_FLOW_EOS)
+    gst_v4l2_video_dec_flush_buffer_event (decoder);
+#endif
 
   gst_buffer_replace (&buffer, NULL);
   self->output_flow = ret;
@@ -623,6 +666,12 @@ gst_v4l2_video_dec_handle_frame (GstVideoDecoder * decoder,
   gboolean processed = FALSE;
   GstBuffer *tmp;
   GstTaskState task_state;
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+  GstStructure *structure = NULL;
+  const gchar *caps_format = NULL;
+  GstMessage *msg = NULL;
+  GstV4l2BufferPool *capture_pool = NULL;
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
 
   GST_DEBUG_OBJECT (self, "Handling frame %d", frame->system_frame_number);
 
@@ -738,6 +787,19 @@ gst_v4l2_video_dec_handle_frame (GstVideoDecoder * decoder,
     caps = gst_caps_fixate (caps);
 
     GST_DEBUG_OBJECT (self, "Chosen decoded caps: %" GST_PTR_FORMAT, caps);
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+    structure = gst_caps_get_structure (caps, 0);
+    caps_format = gst_structure_get_string (structure, "format");
+
+    if (!strcmp (caps_format, "I420")) {
+      GST_INFO_OBJECT (self, "I420 -> S420");
+      gst_caps_set_simple (caps, "format", G_TYPE_STRING, "S420", NULL);
+    } else if (!strcmp (caps_format, "NV12")) {
+      GST_INFO_OBJECT (self, "NV12 -> SN12");
+      gst_caps_set_simple (caps, "format", G_TYPE_STRING, "SN12", NULL);
+    }
+    GST_INFO_OBJECT (self, "Updated decoded caps: %" GST_PTR_FORMAT, caps);
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
 
     /* Try to set negotiated format, on success replace acquired format */
     if (gst_v4l2_object_set_format (self->v4l2capture, caps, &error))
@@ -764,6 +826,18 @@ gst_v4l2_video_dec_handle_frame (GstVideoDecoder * decoder,
     if (!gst_buffer_pool_set_active (GST_BUFFER_POOL (self->v4l2capture->pool),
             TRUE))
       goto activate_failed;
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+    capture_pool = GST_V4L2_BUFFER_POOL (self->v4l2capture->pool);
+
+    msg = gst_message_new_element (GST_OBJECT_CAST (decoder),
+        gst_structure_new ("prepare-decode-buffers",
+            "num_buffers", G_TYPE_INT, capture_pool->num_allocated,
+            "extra_num_buffers", G_TYPE_INT, capture_pool->num_allocated - 2, NULL));
+
+    gst_element_post_message (GST_ELEMENT_CAST (decoder), msg);
+
+    GST_WARNING_OBJECT (self, "output buffer[%d]", capture_pool->num_allocated);
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
   }
 
   task_state = gst_pad_get_task_state (GST_VIDEO_DECODER_SRC_PAD (self));
@@ -1036,6 +1110,9 @@ gst_v4l2_video_dec_subinstance_init (GTypeInstance * instance, gpointer g_class)
       GST_OBJECT (GST_VIDEO_DECODER_SRC_PAD (self)),
       V4L2_BUF_TYPE_VIDEO_CAPTURE, klass->default_device,
       gst_v4l2_get_input, gst_v4l2_set_input, NULL);
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+  self->v4l2capture->tbm_output = TRUE;
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
 }
 
 static void
@@ -1088,6 +1165,12 @@ gst_v4l2_video_dec_class_init (GstV4l2VideoDecClass * klass)
       GST_DEBUG_FUNCPTR (gst_v4l2_video_dec_change_state);
 
   gst_v4l2_object_install_m2m_properties_helper (gobject_class);
+#ifdef TIZEN_FEATURE_V4L2_TBM_SUPPORT
+  g_object_class_install_property (gobject_class, PROP_TBM_OUTPUT,
+      g_param_spec_boolean ("tbm-output", "Enable TBM for output buffer",
+          "It works for only DMABUF mode.",
+          TRUE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+#endif /* TIZEN_FEATURE_V4L2_TBM_SUPPORT */
 }
 
 static void
@@ -1260,6 +1343,7 @@ gst_v4l2_video_dec_register (GstPlugin * plugin, const gchar * basename,
     type_info.instance_init = gst_v4l2_video_dec_subinstance_init;
 
     subtype = g_type_register_static (type, type_name, &type_info, 0);
+
     if (!gst_element_register (plugin, type_name, GST_RANK_PRIMARY + 1,
             subtype))
       GST_WARNING ("Failed to register plugin '%s'", type_name);
index 19496b7..c9455ef 100644 (file)
@@ -1247,8 +1247,13 @@ gst_v4l2_video_enc_register (GstPlugin * plugin, GType type,
 
   subtype = g_type_register_static (type, type_name, &type_info, 0);
 
+#ifdef TIZEN_FEATURE_V4L2VIDEO_ADJ_RANK
+  if (!gst_element_register (plugin, type_name, GST_RANK_SECONDARY, subtype))
+    GST_WARNING ("Failed to register plugin '%s'", type_name);
+#else
   if (!gst_element_register (plugin, type_name, GST_RANK_PRIMARY + 1, subtype))
     GST_WARNING ("Failed to register plugin '%s'", type_name);
+#endif
 
   g_free (type_name);
 }
index 65f551f..6bbec54 100644 (file)
@@ -64,7 +64,7 @@ if have_v4l2
     v4l2_sources,
     c_args : gst_plugins_good_args,
     include_directories : [configinc, libsinc],
-    dependencies : [gstbase_dep, gstvideo_dep, gstallocators_dep, gudev_dep, libv4l2_dep],
+    dependencies : [gstbase_dep, gstvideo_dep, gstallocators_dep, gudev_dep, libv4l2_dep, tbm_dep],
     install : true,
     install_dir : plugins_install_dir,
   )
index 6afdefb..4a8713f 100644 (file)
@@ -33,6 +33,9 @@
 #include <string.h>
 #include <errno.h>
 #include <unistd.h>
+#ifdef TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE
+#include <glob.h>
+#endif /* TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE */
 #ifdef __sun
 /* Needed on older Solaris Nevada builds (72 at least) */
 #include <stropts.h>
 
 #include "gst/gst-i18n-plugin.h"
 
+#ifdef TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE
+enum {
+  V4L2_OPEN_ERROR = 0,
+  V4L2_OPEN_ERROR_STAT_FAILED,
+  V4L2_OPEN_ERROR_NO_DEVICE,
+  V4L2_OPEN_ERROR_NOT_OPEN,
+  V4L2_OPEN_ERROR_NOT_CAPTURE,
+  V4L2_OPEN_ERROR_NOT_OUTPUT
+};
+#endif /* TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE */
+
 GST_DEBUG_CATEGORY_EXTERN (v4l2_debug);
 #define GST_CAT_DEFAULT v4l2_debug
 
@@ -361,6 +375,12 @@ gst_v4l2_fill_lists (GstV4l2Object * v4l2object)
       case V4L2_CID_AUTOGAIN:
       case V4L2_CID_GAIN:
       case V4L2_CID_SHARPNESS:
+#ifdef TIZEN_FEATURE_V4L2_ADDITIONAL_CID_SUPPORT
+      case V4L2_CID_WHITE_BALANCE_TEMPERATURE:
+      case V4L2_CID_EXPOSURE_AUTO:
+      case V4L2_CID_EXPOSURE_ABSOLUTE:
+      case V4L2_CID_EXPOSURE_AUTO_PRIORITY:
+#endif /* TIZEN_FEATURE_V4L2_ADDITIONAL_CID_SUPPORT */
         /* we only handle these for now (why?) */
         break;
       case V4L2_CID_HFLIP:
@@ -520,7 +540,18 @@ gst_v4l2_open (GstV4l2Object * v4l2object, GstV4l2Error * error)
 {
   struct stat st;
   int libv4l2_fd = -1;
+#ifdef TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE
+  int error_type = V4L2_OPEN_ERROR_STAT_FAILED;
+  int device_index = 0;
+  glob_t glob_buf;
+
+  memset (&glob_buf, 0x0, sizeof(glob_t));
 
+  if (!v4l2object) {
+    GST_ERROR ("v4l2object is NULL");
+    return FALSE;
+  }
+#endif /* TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE */
   GST_DEBUG_OBJECT (v4l2object->dbg_obj, "Trying to open device %s",
       v4l2object->videodev);
 
@@ -531,19 +562,45 @@ gst_v4l2_open (GstV4l2Object * v4l2object, GstV4l2Error * error)
   if (!v4l2object->videodev)
     v4l2object->videodev = g_strdup ("/dev/video");
 
+#ifdef TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE
+  if (!v4l2object->videodev) {
+    GST_ERROR_OBJECT (v4l2object->element, "videodev is NULL");
+    return FALSE;
+  }
+
+CHECK_AGAIN:
+  /* check if it is a device */
+  if (stat (v4l2object->videodev, &st) == -1) {
+    error_type = V4L2_OPEN_ERROR_STAT_FAILED;
+    goto pre_error_check;
+  }
+
+  if (!S_ISCHR (st.st_mode)) {
+    error_type = V4L2_OPEN_ERROR_NO_DEVICE;
+    goto pre_error_check;
+  }
+#else /* TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE */
   /* check if it is a device */
   if (stat (v4l2object->videodev, &st) == -1)
     goto stat_failed;
 
   if (!S_ISCHR (st.st_mode))
     goto no_device;
+#endif /* TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE */
 
   /* open the device */
   v4l2object->video_fd =
       open (v4l2object->videodev, O_RDWR /* | O_NONBLOCK */ );
 
+#ifdef TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE
+  if (!GST_V4L2_IS_OPEN (v4l2object)) {
+    error_type = V4L2_OPEN_ERROR_NOT_OPEN;
+    goto pre_error_check;
+  }
+#else /* TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE */
   if (!GST_V4L2_IS_OPEN (v4l2object))
     goto not_open;
+#endif /* TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE */
 
 #ifdef HAVE_LIBV4L2
   if (v4l2object->fd_open)
@@ -561,6 +618,28 @@ gst_v4l2_open (GstV4l2Object * v4l2object, GstV4l2Error * error)
     v4l2object->video_fd = libv4l2_fd;
 
   /* get capabilities, error will be posted */
+#ifdef TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE
+  if (!gst_v4l2_get_capabilities (v4l2object)) {
+    error_type = V4L2_OPEN_ERROR;
+    goto pre_error_check;
+  }
+
+  GST_INFO_OBJECT (v4l2object->element, "device_caps 0x%x", v4l2object->device_caps);
+
+  if (GST_IS_V4L2SRC (v4l2object->element) &&
+      (!(v4l2object->device_caps & (V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_CAPTURE_MPLANE)) ||
+       (v4l2object->device_caps & (V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_VIDEO_OUTPUT_MPLANE)))) {
+    error_type = V4L2_OPEN_ERROR_NOT_CAPTURE;
+    goto pre_error_check;
+  }
+
+  if (GST_IS_V4L2SINK (v4l2object->element) &&
+      !(v4l2object->device_caps & (V4L2_CAP_VIDEO_OUTPUT |
+              V4L2_CAP_VIDEO_OUTPUT_MPLANE))) {
+    error_type = V4L2_OPEN_ERROR_NOT_OUTPUT;
+    goto pre_error_check;
+  }
+#else /* TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE */
   if (!gst_v4l2_get_capabilities (v4l2object))
     goto error;
 
@@ -574,6 +653,7 @@ gst_v4l2_open (GstV4l2Object * v4l2object, GstV4l2Error * error)
       !(v4l2object->device_caps & (V4L2_CAP_VIDEO_OUTPUT |
               V4L2_CAP_VIDEO_OUTPUT_MPLANE)))
     goto not_output;
+#endif /* TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE */
 
   if (GST_IS_V4L2_VIDEO_DEC (v4l2object->element) &&
       !GST_V4L2_IS_M2M (v4l2object->device_caps))
@@ -582,8 +662,15 @@ gst_v4l2_open (GstV4l2Object * v4l2object, GstV4l2Error * error)
   gst_v4l2_adjust_buf_type (v4l2object);
 
   /* create enumerations, posts errors. */
+#ifdef TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE
+  if (!gst_v4l2_fill_lists (v4l2object)) {
+    error_type = V4L2_OPEN_ERROR;
+    goto pre_error_check;
+  }
+#else /* TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE */
   if (!gst_v4l2_fill_lists (v4l2object))
     goto error;
+#endif /* TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE */
 
   GST_INFO_OBJECT (v4l2object->dbg_obj,
       "Opened device '%s' (%s) successfully",
@@ -592,6 +679,10 @@ gst_v4l2_open (GstV4l2Object * v4l2object, GstV4l2Error * error)
   if (v4l2object->extra_controls)
     gst_v4l2_set_controls (v4l2object, v4l2object->extra_controls);
 
+#ifdef TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE
+  globfree (&glob_buf);
+#endif /* TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE */
+
   /* UVC devices are never interlaced, and doing VIDIOC_TRY_FMT on them
    * causes expensive and slow USB IO, so don't probe them for interlaced
    */
@@ -602,6 +693,66 @@ gst_v4l2_open (GstV4l2Object * v4l2object, GstV4l2Error * error)
 
   return TRUE;
 
+#ifdef TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE
+pre_error_check:
+  {
+    if (v4l2object->auto_scan_device == FALSE) {
+      GST_WARNING_OBJECT (v4l2object->element, "auto scan device disabled");
+      goto error;
+    }
+
+    GST_ERROR_OBJECT (v4l2object->element, "device[%s] failed, error[%d]",
+      v4l2object->videodev, error_type);
+
+    if (GST_IS_V4L2SRC (v4l2object->element) && glob_buf.gl_pathc == 0) {
+      if (glob("/dev/video*", 0, 0, &glob_buf) != 0) {
+        GST_WARNING_OBJECT (v4l2object->element, "glob failed");
+      }
+    }
+
+    if (glob_buf.gl_pathc > 0 && device_index < glob_buf.gl_pathc) {
+      if (v4l2object->videodev)
+        g_free (v4l2object->videodev);
+
+      v4l2object->videodev = g_strdup (glob_buf.gl_pathv[device_index]);
+      if (v4l2object->videodev) {
+        device_index++;
+
+        GST_INFO_OBJECT (v4l2object->element, "check device [%s]",
+          v4l2object->videodev);
+
+        if (GST_V4L2_IS_OPEN (v4l2object)) {
+          /* close device */
+          v4l2object->close (v4l2object->video_fd);
+          v4l2object->video_fd = -1;
+        }
+        /* empty lists */
+        gst_v4l2_empty_lists (v4l2object);
+
+        goto CHECK_AGAIN;
+      } else {
+        GST_WARNING_OBJECT (v4l2object->element, "g_strdup failed [%s]",
+          glob_buf.gl_pathv[device_index]);
+      }
+    }
+
+    switch (error_type) {
+    case V4L2_OPEN_ERROR_STAT_FAILED:
+      goto stat_failed;
+    case V4L2_OPEN_ERROR_NO_DEVICE:
+      goto no_device;
+    case V4L2_OPEN_ERROR_NOT_OPEN:
+      goto not_open;
+    case V4L2_OPEN_ERROR_NOT_CAPTURE:
+      goto not_capture;
+    case V4L2_OPEN_ERROR_NOT_OUTPUT:
+      goto not_output;
+    default:
+      goto error;
+    }
+  }
+#endif /* TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE */
+
   /* ERRORS */
 stat_failed:
   {
@@ -655,6 +806,10 @@ error:
     /* empty lists */
     gst_v4l2_empty_lists (v4l2object);
 
+#ifdef TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE
+    globfree (&glob_buf);
+#endif /* TIZEN_FEATURE_V4L2SRC_AUTO_SCAN_DEVICE_NODE */
+
     return FALSE;
   }
 }
index 6692c84..e877718 100644 (file)
@@ -216,7 +216,7 @@ gst_waveform_sink_getcaps (GstBaseSink * bsink, GstCaps * filter)
 
   caps = gst_caps_new_empty ();
 
-  /* create a caps for all wave formats supported by the device 
+  /* create a caps for all wave formats supported by the device
      starting by the best quality format */
   if (wocaps.dwFormats & WAVE_FORMAT_96S16) {
     caps_temp = gst_waveform_sink_create_caps (96000, 2, GST_AUDIO_NE (S16));
index cfd72ad..eb29482 100644 (file)
@@ -112,6 +112,7 @@ gst_dvd_read_src_finalize (GObject * object)
 static void
 gst_dvd_read_src_init (GstDvdReadSrc * src)
 {
+  GstCaps *src_caps = gst_static_pad_template_get_caps (&srctemplate);
   src->dvd = NULL;
   src->vts_file = NULL;
   src->vmg_file = NULL;
@@ -130,8 +131,8 @@ gst_dvd_read_src_init (GstDvdReadSrc * src)
   src->pending_clut_event = NULL;
 
   gst_pad_use_fixed_caps (GST_BASE_SRC_PAD (src));
-  gst_pad_set_caps (GST_BASE_SRC_PAD (src),
-      gst_static_pad_template_get_caps (&srctemplate));
+  gst_pad_set_caps (GST_BASE_SRC_PAD (src), src_caps);
+  gst_caps_unref (src_caps);
 }
 
 static gboolean
index 0c8dc84..bb20b8e 100644 (file)
@@ -328,6 +328,10 @@ gst_asf_demux_init (GstASFDemux * demux)
       GST_DEBUG_FUNCPTR (gst_asf_demux_activate_mode));
   gst_element_add_pad (GST_ELEMENT (demux), demux->sinkpad);
 
+#ifdef TIZEN_FEATURE_ASFDEMUX_DISABLE_UNSUPPORTED_FORMAT
+  demux->is_supported_format = TRUE;
+#endif
+
   /* set initial state */
   gst_asf_demux_reset (demux, FALSE);
 }
@@ -1200,7 +1204,12 @@ gst_asf_demux_parse_data_object_start (GstASFDemux * demux, guint8 * data)
       "data_offset=%" G_GINT64_FORMAT ", data_size=%" G_GINT64_FORMAT
       ", index_offset=%" G_GUINT64_FORMAT, demux->num_packets,
       demux->data_offset, demux->data_size, demux->index_offset);
-
+#ifdef TIZEN_FEATURE_ASFDEMUX_CHECK_DATA_SIZE
+  if (demux->data_size == 0) {
+    GST_WARNING_OBJECT (demux, "DATA object size is zero");
+    return FALSE;
+  }
+#endif
   return TRUE;
 }
 
@@ -2758,6 +2767,14 @@ gst_asf_demux_add_audio_stream (GstASFDemux * demux,
 
   ++demux->num_audio_streams;
 
+#ifdef TIZEN_FEATURE_ASFDEMUX_POST_TAG_MSG
+  if (tags) {
+    /* post now, send event on pad later */
+    gst_element_post_message (GST_ELEMENT_CAST (demux),
+        gst_message_new_tag (GST_OBJECT_CAST (demux), gst_tag_list_copy (tags)));
+  }
+#endif
+
   return gst_asf_demux_setup_pad (demux, src_pad, caps, id, FALSE, NULL, tags);
 }
 
@@ -2962,6 +2979,14 @@ gst_asf_demux_add_video_stream (GstASFDemux * demux,
 
   ++demux->num_video_streams;
 
+#ifdef TIZEN_FEATURE_ASFDEMUX_POST_TAG_MSG
+  if (tags) {
+    /* post now, send event on pad later */
+    gst_element_post_message (GST_ELEMENT_CAST (demux),
+        gst_message_new_tag (GST_OBJECT_CAST (demux), gst_tag_list_copy (tags)));
+  }
+#endif
+
   return gst_asf_demux_setup_pad (demux, src_pad, caps, id, TRUE,
       streamheader, tags);
 }
@@ -3161,7 +3186,15 @@ gst_asf_demux_parse_stream_object (GstASFDemux * demux, guint8 * data,
               &data, &size)) {
         goto not_enough_data;
       }
-
+#ifdef TIZEN_FEATURE_ASFDEMUX_DISABLE_UNSUPPORTED_FORMAT
+      /* Compare video format WMV*, WVC* */
+      if (((video_format_object.tag & 0x00ffffff) == (guint32)(('W')|('M')<<8|('V')<<16))
+          || ((video_format_object.tag & 0x00ffffff) == (guint32)(('W')|('V')<<8|('C')<<16))) {
+          GST_ERROR_OBJECT (demux, "WMV file format is not supported.");
+          demux->is_supported_format = FALSE;
+          return NULL;
+      }
+#endif
       stream = gst_asf_demux_add_video_stream (demux, &video_format_object,
           stream_id, &data, &size);
 
@@ -4273,6 +4306,13 @@ gst_asf_demux_process_ext_stream_props (GstASFDemux * demux, guint8 * data,
   stream = gst_asf_demux_parse_stream_object (demux, stream_obj_data, len);
   g_free (stream_obj_data);
 
+#ifdef TIZEN_FEATURE_ASFDEMUX_DISABLE_UNSUPPORTED_FORMAT
+  if ((stream == NULL) && (demux->is_supported_format == FALSE)) {
+    g_free (esp.payload_extensions);
+    return GST_FLOW_NOT_SUPPORTED;
+  }
+#endif
+
 done:
 
   if (stream) {
@@ -4493,6 +4533,12 @@ gst_asf_demux_process_object (GstASFDemux * demux, guint8 ** p_data,
   switch (obj.id) {
     case ASF_OBJ_STREAM:
       gst_asf_demux_parse_stream_object (demux, *p_data, obj_data_size);
+#ifdef TIZEN_FEATURE_ASFDEMUX_DISABLE_UNSUPPORTED_FORMAT
+      if (demux->is_supported_format == FALSE) {
+        ret = GST_FLOW_NOT_SUPPORTED;
+        break;
+      }
+#endif
       ret = GST_FLOW_OK;
       break;
     case ASF_OBJ_FILE:
index 841b21a..a837c46 100644 (file)
@@ -239,6 +239,9 @@ struct _GstASFDemux {
   GstASF3DMode asf_3D_mode;
 
   gboolean saw_file_header;
+#ifdef TIZEN_FEATURE_ASFDEMUX_DISABLE_UNSUPPORTED_FORMAT
+  gboolean is_supported_format;
+#endif
 };
 
 struct _GstASFDemuxClass {
index 9d0e1d0..c89c576 100644 (file)
@@ -97,6 +97,7 @@ gst_dvd_sub_parse_finalize (GObject * object)
 static void
 gst_dvd_sub_parse_init (GstDvdSubParse * parse)
 {
+  GstCaps *src_caps = gst_static_pad_template_get_caps (&src_template);
   parse->sinkpad = gst_pad_new_from_static_template (&sink_template, "sink");
   gst_pad_set_chain_function (parse->sinkpad,
       GST_DEBUG_FUNCPTR (gst_dvd_sub_parse_chain));
@@ -106,13 +107,13 @@ gst_dvd_sub_parse_init (GstDvdSubParse * parse)
 
   parse->srcpad = gst_pad_new_from_static_template (&src_template, "src");
   gst_pad_use_fixed_caps (parse->srcpad);
-  gst_pad_set_caps (parse->srcpad,
-      gst_static_pad_template_get_caps (&src_template));
+  gst_pad_set_caps (parse->srcpad, src_caps);
   gst_element_add_pad (GST_ELEMENT (parse), parse->srcpad);
 
   /* remainder */
   parse->adapter = gst_adapter_new ();
   gst_dvd_sub_parse_reset (parse);
+  gst_caps_unref (src_caps);
 }
 
 static void
index c5c78fc..1c9a858 100644 (file)
@@ -172,6 +172,12 @@ if gmodule_dep.version().version_compare('< 2.67.4')
   cdata.set('g_memdup2(ptr,sz)', '(G_LIKELY(((guint64)(sz)) < G_MAXUINT)) ? g_memdup(ptr,sz) : (g_abort(),NULL)')
 endif
 
+# TIZEN_BUILD_OPTION
+cdata.set('TIZEN_FEATURE_ASFDEMUX_CHECK_DATA_SIZE', true)
+cdata.set('TIZEN_FEATURE_ASFDEMUX_DISABLE_UNSUPPORTED_FORMAT', true)
+cdata.set('TIZEN_FEATURE_ASFDEMUX_POST_TAG_MSG', true)
+# TIZEN_BUILD_OPTION end
+
 ugly_args = ['-DHAVE_CONFIG_H']
 configinc = include_directories('.')
 libsinc = include_directories('gst-libs')
@@ -185,6 +191,15 @@ else
   gst_debug_disabled = cc.has_header_symbol('gst/gstconfig.h', 'GST_DISABLE_GST_DEBUG', dependencies: gst_dep)
 endif
 
+# TIZEN_OPTION
+
+if get_option('tv-profile')
+  core_conf.set('TIZEN_TV_PROFILE', 1)
+  core_conf.set('TIZEN_FEATURE_TRUSTZONE', 1)
+endif
+
+# TIZEN_OPTION end
+
 if gst_debug_disabled
   message('GStreamer debug system is disabled')
   if cc.has_argument('-Wno-unused')
index 0b59d01..f20dfe3 100644 (file)
@@ -36,4 +36,8 @@ option('package-name', type : 'string', yield : true,
 option('package-origin', type : 'string', value : 'Unknown package origin', yield: true,
        description : 'package origin URL to use in plugins')
 option('doc', type : 'feature', value : 'auto', yield: true,
-       description: 'Enable documentation.')
\ No newline at end of file
+       description: 'Enable documentation.')
+
+# Tizen Options
+option('tv-profile', type : 'boolean', value : false,
+       description : 'tv-profile')
index 5a536c7..43e1329 100644 (file)
@@ -1536,9 +1536,19 @@ gst_bin_add (GstBin * bin, GstElement * element)
   if (G_UNLIKELY (bclass->add_element == NULL))
     goto no_function;
 
+#ifndef TIZEN_PROFILE_TV
   GST_CAT_DEBUG (GST_CAT_PARENTAGE, "adding element %s to bin %s",
       GST_STR_NULL (GST_ELEMENT_NAME (element)),
       GST_STR_NULL (GST_ELEMENT_NAME (bin)));
+#else
+  gst_set_family_id_to_child (element, (GST_OBJECT_CAST (bin)->family_id));
+
+  GST_CAT_DEBUG (GST_CAT_PARENTAGE,
+      "adding element %s (id %d) to bin %s (id %d)",
+      GST_STR_NULL (GST_ELEMENT_NAME (element)),
+      GST_OBJECT_CAST (element)->family_id,
+      GST_STR_NULL (GST_ELEMENT_NAME (bin)), GST_OBJECT_CAST (bin)->family_id);
+#endif
 
   GST_TRACER_BIN_ADD_PRE (bin, element);
   result = bclass->add_element (bin, element);
index 7dab1dc..e3f8a94 100644 (file)
@@ -747,6 +747,11 @@ gst_element_add_pad (GstElement * element, GstPad * pad)
   g_return_val_if_fail (GST_IS_ELEMENT (element), FALSE);
   g_return_val_if_fail (GST_IS_PAD (pad), FALSE);
 
+#ifdef TIZEN_PROFILE_TV
+  g_object_set (G_OBJECT (pad), "family-id",
+      (int) (GST_OBJECT_CAST (element)->family_id), NULL);
+#endif
+
   /* locking pad to look at the name */
   GST_OBJECT_LOCK (pad);
   pad_name = g_strdup (GST_PAD_NAME (pad));
index cd84130..70a183c 100644 (file)
@@ -88,6 +88,11 @@ extern GQuark __gst_elementclass_factory;
 G_DEFINE_TYPE_WITH_CODE (GstElementFactory, gst_element_factory,
     GST_TYPE_PLUGIN_FEATURE, _do_init);
 
+#ifdef TIZEN_PROFILE_TV
+static GMutex pool_mutex;
+static GList *pool = NULL;
+#endif
+
 static void
 gst_element_factory_class_init (GstElementFactoryClass * klass)
 {
@@ -1176,3 +1181,108 @@ gst_element_factory_list_filter (GList * list,
   }
   return results.head;
 }
+
+#ifdef TIZEN_PROFILE_TV
+/**
+ * gst_element_factory_pool_push:
+ *
+ * Pushes the element to the pool. This function increase the refcount of @element.
+ * And the pool will take a reference forever.
+ * MT safe.
+ */
+static gboolean
+gst_element_factory_pool_push (GstElement * element)
+{
+  gboolean ret = FALSE;
+  g_return_val_if_fail (element != NULL, FALSE);
+  g_return_val_if_fail (GST_IS_ELEMENT (element) == TRUE, FALSE);
+  g_return_val_if_fail (GST_IS_BIN (element) == FALSE, FALSE);
+  g_return_val_if_fail (GST_IS_PIPELINE (element) == FALSE, FALSE);
+
+  g_mutex_lock (&pool_mutex);
+  if (!g_list_find (pool, (gconstpointer) element)) {
+    gst_object_ref (element);
+    pool = g_list_prepend (pool, element);
+    ret = TRUE;
+  }
+  //GST_INFO("ret[ %d ], [ %s / %p ] - refcount[ %d ], state[ %d ]", ret, GST_ELEMENT_NAME(element), element, GST_OBJECT_REFCOUNT(element), GST_STATE (element));
+  g_mutex_unlock (&pool_mutex);
+  return ret;
+}
+
+static gint
+is_available_element (gconstpointer data, gconstpointer factory_)
+{
+  GstElement *element = GST_ELEMENT_CAST (data);
+  const GstElementFactory *factory = (const GstElementFactory *) factory_;
+  gboolean found = FALSE;
+  if (gst_element_get_factory (element) == factory
+      && GST_ELEMENT_PARENT (element) == NULL
+      && GST_OBJECT_REFCOUNT (element) == 1
+      && (GST_STATE (element) == GST_STATE_NULL
+          || GST_STATE (element) == GST_STATE_VOID_PENDING)) {
+    found = TRUE;
+  }
+  //GST_DEBUG("PARENT[ %p ], [ %s / %p ] - refcount[ %d ], state[ %d ]", GST_ELEMENT_PARENT(element), GST_ELEMENT_NAME(element), element, GST_OBJECT_REFCOUNT(element), GST_STATE (element));
+
+  if (found)
+    return 0;
+
+  return -1;
+}
+
+/**
+ * gst_element_factory_pool_get:
+ *
+ * Get a element which is created by given @factoryname
+ * You can search any element by this API before you use gst_element_factory_create.
+ * Returns: (transfer full): a pointer to the #GstElement.
+ *         This function guarantee that the refcount of returned #GstElement is 1,
+ *         and it's state is NULL-STATE.
+ *
+ * MT safe.
+ */
+static GstElement *
+gst_element_factory_pool_get (GstElementFactory * factory,
+    const gchar * new_element_name)
+{
+  GstElement *element = NULL;
+  GList *found = NULL;
+  g_return_val_if_fail (factory != NULL, NULL);
+  g_return_val_if_fail (pool != NULL, NULL);
+
+  g_mutex_lock (&pool_mutex);
+  found = g_list_find_custom (pool, factory, is_available_element);
+  if (found) {
+    element = GST_ELEMENT_CAST (found->data);
+    gst_object_ref (element);
+    if (new_element_name)
+      gst_element_set_name (element, new_element_name);
+  }
+  g_mutex_unlock (&pool_mutex);
+  return element;
+}
+
+/* First, Try to get element from pool. */
+GstElement *
+gst_element_factory_get (GstElementFactory * factory, const gchar * name)
+{
+  GstElement *element = NULL;
+  g_return_val_if_fail (factory != NULL, NULL);
+  element = gst_element_factory_pool_get (factory, name);
+  if (!element) {
+    element = gst_element_factory_create (factory, name);
+    if (!element) {
+      GST_ERROR ("[ %s / %p ],  new element name[ %s ]",
+          GST_OBJECT_NAME (factory), factory, name);
+      return NULL;
+    }
+    gst_element_factory_pool_push (element);
+  } else {
+    gst_set_family_id_to_child (element, 0);
+  }
+
+  //GST_INFO("[ %s / %p ] - refcount[ %d ], state[ %d ]", GST_ELEMENT_NAME(element), element, GST_OBJECT_REFCOUNT(element), GST_STATE (element));
+  return element;
+}
+#endif
index 518bb9b..ae501c1 100644 (file)
@@ -107,6 +107,10 @@ GstElement*             gst_element_factory_make_with_properties (const gchar *f
 GST_API
 gboolean                gst_element_register                    (GstPlugin *plugin, const gchar *name,
                                                                  guint rank, GType type);
+#ifdef TIZEN_PROFILE_TV
+GST_API
+GstElement              *gst_element_factory_get                (GstElementFactory * factory, const gchar * name);
+#endif
 
 /* Factory list functions */
 
index 913fe42..5ca7f26 100644 (file)
@@ -280,6 +280,16 @@ dladdr (void *address, Dl_info * dl)
 #endif /* __sgi__ */
 #endif
 
+#if defined(TIZEN_DLOG)
+#include <dlog.h>
+
+#define GST_SLOGW(fmt, arg...) \
+       ({ do { \
+               __dlog_print(LOG_ID_SYSTEM, DLOG_WARN, "GST_LOG", fmt, ##arg); \
+       } while (0); })
+
+#endif
+
 static void gst_debug_reset_threshold (gpointer category, gpointer unused);
 static void gst_debug_reset_all_thresholds (void);
 
@@ -1276,7 +1286,9 @@ gst_debug_log_default (GstDebugCategory * category, GstDebugLevel level,
   gchar *obj = NULL;
   GstDebugColorMode color_mode;
   const gchar *message_str;
+#if defined(G_OS_WIN32) || !defined(TIZEN_DLOG)
   FILE *log_file = user_data ? user_data : stderr;
+#endif
 #ifdef G_OS_WIN32
 #define FPRINTF_DEBUG _gst_debug_fprintf
 /* _gst_debug_fprintf will do fflush if it's required */
@@ -1316,12 +1328,20 @@ gst_debug_log_default (GstDebugCategory * category, GstDebugLevel level,
       levelcolor = levelcolormap[level];
 
 #define PRINT_FMT " %s"PID_FMT"%s "PTR_FMT" %s%s%s %s"CAT_FMT"%s %s\n"
+#if defined(TIZEN_DLOG)
+    GST_SLOGW("%" GST_TIME_FORMAT "%s "PTR_FMT" %s%s%s %s"CAT_FMT"%s %s\n", GST_TIME_ARGS (elapsed),
+        clear, g_thread_self (), levelcolor,
+        gst_debug_level_get_name (level), clear, color,
+        gst_debug_category_get_name (category), file, line, function, obj,
+        clear, message_str);
+#else
       FPRINTF_DEBUG (log_file, "%" GST_TIME_FORMAT PRINT_FMT,
           GST_TIME_ARGS (elapsed), pidcolor, pid, clear, g_thread_self (),
           levelcolor, gst_debug_level_get_name (level), clear, color,
           gst_debug_category_get_name (category), file, line, function, obj,
           clear, message_str);
       FFLUSH_DEBUG (log_file);
+#endif
 #undef PRINT_FMT
       g_free (color);
 #ifdef G_OS_WIN32
@@ -1357,12 +1377,19 @@ gst_debug_log_default (GstDebugCategory * category, GstDebugLevel level,
 #endif
   } else {
     /* no color, all platforms */
+#if defined(TIZEN_DLOG) && !defined(G_OS_WIN32)
+    GST_SLOGW("%" GST_TIME_FORMAT " "PTR_FMT" %s "CAT_FMT" %s\n", GST_TIME_ARGS (elapsed),
+        g_thread_self (), gst_debug_level_get_name (level),
+        gst_debug_category_get_name (category), file, line, function, obj,
+        message_str);
+#else
     FPRINTF_DEBUG (log_file, "%" GST_TIME_FORMAT NOCOLOR_PRINT_FMT,
         GST_TIME_ARGS (elapsed), pid, g_thread_self (),
         gst_debug_level_get_name (level),
         gst_debug_category_get_name (category), file, line, function, obj,
         message_str);
     FFLUSH_DEBUG (log_file);
+#endif
   }
 
   if (object != NULL)
index dfc7a2f..08e7797 100644 (file)
@@ -102,6 +102,9 @@ enum
   PROP_0,
   PROP_NAME,
   PROP_PARENT,
+#ifdef TIZEN_PROFILE_TV
+  PROP_FAMILY_ID,
+#endif
   PROP_LAST
 };
 
@@ -170,6 +173,13 @@ gst_object_class_init (GstObjectClass * klass)
       GST_TYPE_OBJECT,
       G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_DOC_SHOW_DEFAULT);
 
+#ifdef TIZEN_PROFILE_TV
+  properties[PROP_FAMILY_ID] =
+      g_param_spec_int ("family-id", "Family Id",
+      "The family id of this object group, usually inherit from parent.",
+      -G_MAXINT, G_MAXINT, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+#endif
+
   g_object_class_install_properties (gobject_class, PROP_LAST, properties);
 
   /**
@@ -208,7 +218,9 @@ gst_object_init (GstObject * object)
   GST_CAT_TRACE_OBJECT (GST_CAT_REFCOUNTING, object, "%p new", object);
 
   object->flags = 0;
-
+#ifdef TIZEN_PROFILE_TV
+  object->family_id = 0;
+#endif
   object->control_rate = 100 * GST_MSECOND;
   object->last_sync = GST_CLOCK_TIME_NONE;
 }
@@ -940,6 +952,11 @@ gst_object_set_property (GObject * object, guint prop_id,
     case PROP_PARENT:
       gst_object_set_parent (gstobject, g_value_get_object (value));
       break;
+#ifdef TIZEN_PROFILE_TV
+    case PROP_FAMILY_ID:
+      g_atomic_int_set (&gstobject->family_id, g_value_get_int (value));
+      break;
+#endif
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -961,6 +978,11 @@ gst_object_get_property (GObject * object, guint prop_id,
     case PROP_PARENT:
       g_value_take_object (value, gst_object_get_parent (gstobject));
       break;
+#ifdef TIZEN_PROFILE_TV
+    case PROP_FAMILY_ID:
+      g_value_set_int (value, g_atomic_int_get (&gstobject->family_id));
+      break;
+#endif
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
index 85e8275..6035e29 100644 (file)
@@ -177,6 +177,9 @@ struct _GstObject {
   gchar         *name;        /* object name */
   GstObject     *parent;      /* this object's parent, weak ref */
   guint32        flags;
+#ifdef TIZEN_PROFILE_TV
+  gint           family_id;   /* inherit the parent's id */
+#endif
 
   /*< private >*/
   GList         *control_bindings;  /* List of GstControlBinding */
index bccba4e..c3b288d 100644 (file)
@@ -6220,7 +6220,11 @@ do_stream_status (GstPad * pad, GstStreamStatusType type,
         /* create a good task name (we can directly grab the parent and pad
          * names since they both exist at this point, and changing the name of
          * parent and pad when a pad is activating is a big no-no). */
+#ifdef TIZEN_PROFILE_TV
+        tname = g_strdup_printf ("%s-%s", GST_DEBUG_PAD_NAME (pad));
+#else           
         tname = g_strdup_printf ("%s:%s", GST_DEBUG_PAD_NAME (pad));
+#endif         
 
         gst_object_set_name (GST_OBJECT_CAST (task), tname);
         g_free (tname);
index dd9f1c1..93c35b2 100644 (file)
@@ -1,7 +1,7 @@
 /* GStreamer
  * Copyright (C) 2006 Jan Schmidt <thaytan@noraisin.net>
  *
- * gstquark.c: Registered quarks for the _priv_gst_quark_table, private to 
+ * gstquark.c: Registered quarks for the _priv_gst_quark_table, private to
  *   GStreamer
  *
  * This library is free software; you can redistribute it and/or
@@ -77,6 +77,9 @@ static const gchar *_quark_strings[] = {
   "redirect-entry-taglists", "redirect-entry-structures",
   "GstEventStreamGroupDone", "GstQueryBitrate", "nominal-bitrate",
   "GstMessageDeviceChanged", "device-changed", "trickmode-interval",
+#ifdef TIZEN_PROFILE_TV
+  "GstQuarkQueryResource",
+#endif
   "GstEventInstantRateChange",
   "GstEventInstantRateSyncTime", "GstMessageInstantRateRequest",
   "upstream-running-time", "base", "offset", "plugin-api", "plugin-api-flags",
index df2e585..855d89f 100644 (file)
@@ -1,7 +1,7 @@
 /* GStreamer
  * Copyright (C) 2006 Jan Schmidt <thaytan@noraisin.net>
  *
- * gstquark.h: Private header for storing quark info 
+ * gstquark.h: Private header for storing quark info
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -231,7 +231,12 @@ typedef enum _GstQuarkId
   GST_QUARK_PLUGIN_API = 200,
   GST_QUARK_PLUGIN_API_FLAGS = 201,
   GST_QUARK_GAP_FLAGS = 202,
+#ifndef TIZEN_PROFILE_TV
   GST_QUARK_MAX = 203
+#else
+  GST_QUARK_QUERY_RESOURCE = 203,
+  GST_QUARK_MAX = 204
+#endif
 } GstQuarkId;
 
 extern GQuark _priv_gst_quark_table[GST_QUARK_MAX];
index db3586c..d0a2b2a 100644 (file)
@@ -62,6 +62,9 @@
 #include "gstquark.h"
 #include "gsturi.h"
 #include "gstbufferpool.h"
+#ifdef TIZEN_PROFILE_TV
+#include <stdio.h>
+#endif
 
 GST_DEBUG_CATEGORY_STATIC (gst_query_debug);
 #define GST_CAT_DEFAULT gst_query_debug
@@ -106,7 +109,9 @@ static GstQueryQuarks query_quarks[] = {
   {GST_QUERY_DRAIN, "drain", 0},
   {GST_QUERY_CONTEXT, "context", 0},
   {GST_QUERY_BITRATE, "bitrate", 0},
-
+#ifdef TIZEN_PROFILE_TV
+  {GST_QUERY_RESOURCE, "resource", 0},
+#endif
   {0, NULL, 0}
 };
 
@@ -583,6 +588,66 @@ gst_query_new_segment (GstFormat format)
   return query;
 }
 
+#ifdef TIZEN_PROFILE_TV
+/**
+ * gst_query_new_resource:
+ * @resources: pointer to store the resources
+ *
+ * Constructs a new query stream position query object. Use
+ * gst_query_unref()
+ * when done with it. A resource query is used to query the resources used
+ * by the element/bin/pipelein
+ *
+ * Free-function: gst_query_unref
+ *
+ * Returns: (transfer full): a new #GstQuery
+ */
+GstQuery *
+gst_query_new_resource (gchar * resources)
+{
+  GstQuery *query;
+  GstStructure *structure;
+
+  structure = gst_structure_new_id (GST_QUARK (QUERY_RESOURCE),
+      GST_QUARK (QUERY_RESOURCE), G_TYPE_POINTER, resources, NULL);
+
+  query = gst_query_new_custom (GST_QUERY_RESOURCE, structure);
+
+  return query;
+}
+
+/**
+ * gst_query_add_resource:
+ * @query: a #GstQuery
+ * @resource: resource data to add
+ */
+void
+gst_query_add_resource (GstQuery * query, gint resource_id)
+{
+  gchar *resource_info;
+  resource_info = gst_query_parse_resource (query);
+  sprintf (resource_info, "%d", resource_id);
+}
+
+/* gst_query_parse_resources:
+ * @query: a #GstQuery
+ * @resources: (out)  the storage for the resource
+ *   value, or NULL.
+ */
+gchar *
+gst_query_parse_resource (GstQuery * query)
+{
+  GstStructure *structure;
+  void *resources;
+  g_return_val_if_fail (GST_QUERY_TYPE (query) == GST_QUERY_RESOURCE, NULL);
+
+  structure = GST_QUERY_STRUCTURE (query);
+  resources = g_value_get_pointer (gst_structure_id_get_value (structure,
+          GST_QUARK (QUERY_RESOURCE)));
+  return resources;
+}
+#endif
+
 /**
  * gst_query_set_segment:
  * @query: a #GstQuery
index 949e30a..5d5460b 100644 (file)
@@ -126,6 +126,9 @@ typedef enum {
   GST_QUERY_DRAIN        = GST_QUERY_MAKE_TYPE (180, _FLAG(DOWNSTREAM) | _FLAG(SERIALIZED)),
   GST_QUERY_CONTEXT      = GST_QUERY_MAKE_TYPE (190, _FLAG(BOTH)),
   GST_QUERY_BITRATE      = GST_QUERY_MAKE_TYPE (200, _FLAG(DOWNSTREAM)),
+#ifdef TIZEN_PROFILE_TV
+  GST_QUERY_RESOURCE     = GST_QUERY_MAKE_TYPE (210, FLAG (BOTH)), /*< skip >*/
+#endif
 } GstQueryType;
 #undef _FLAG
 
@@ -342,6 +345,18 @@ void            gst_query_set_duration          (GstQuery *query, GstFormat form
 GST_API
 void            gst_query_parse_duration        (GstQuery *query, GstFormat *format, gint64 *duration);
 
+#ifdef TIZEN_PROFILE_TV
+/* resrource query */
+GST_API
+GstQuery*       gst_query_new_resource                 (gchar * resources) G_GNUC_MALLOC;
+
+GST_API
+void            gst_query_add_resource                 (GstQuery * query, gint resource_id);
+
+GST_API
+gchar*          gst_query_parse_resource       (GstQuery * query);
+#endif
+
 /* latency query */
 
 GST_API
diff --git a/subprojects/gstreamer/gst/gstquery.h.tv b/subprojects/gstreamer/gst/gstquery.h.tv
new file mode 100644 (file)
index 0000000..6831966
--- /dev/null
@@ -0,0 +1,674 @@
+/* GStreamer
+ * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
+ *                    2000 Wim Taymans <wim.taymans@chello.be>
+ *                    2005 Wim Taymans <wim@fluendo.com>
+ *                    2011 Wim Taymans <wim.taymans@gmail.com>
+ *
+ * gstquery.h: GstQuery API declaration
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+
+#ifndef __GST_QUERY_H__
+#define __GST_QUERY_H__
+
+#include <glib.h>
+#include <glib-object.h>
+#include <gst/gstconfig.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GstQuery GstQuery;
+
+#include <gst/gstminiobject.h>
+
+/**
+ * GstQueryTypeFlags:
+ * @GST_QUERY_TYPE_UPSTREAM:     Set if the query can travel upstream.
+ * @GST_QUERY_TYPE_DOWNSTREAM:   Set if the query can travel downstream.
+ * @GST_QUERY_TYPE_SERIALIZED:   Set if the query should be serialized with data
+ *                               flow.
+ *
+ * #GstQueryTypeFlags indicate the aspects of the different #GstQueryType
+ * values. You can get the type flags of a #GstQueryType with the
+ * gst_query_type_get_flags() function.
+ */
+typedef enum {
+  GST_QUERY_TYPE_UPSTREAM       = 1 << 0,
+  GST_QUERY_TYPE_DOWNSTREAM     = 1 << 1,
+  GST_QUERY_TYPE_SERIALIZED     = 1 << 2
+} GstQueryTypeFlags;
+
+/**
+ * GST_QUERY_TYPE_BOTH: (value 3) (type GstQueryTypeFlags)
+ *
+ * The same thing as #GST_QUERY_TYPE_UPSTREAM | #GST_QUERY_TYPE_DOWNSTREAM.
+ */
+#define GST_QUERY_TYPE_BOTH \
+    ((GstQueryTypeFlags)(GST_QUERY_TYPE_UPSTREAM | GST_QUERY_TYPE_DOWNSTREAM))
+
+#define GST_QUERY_NUM_SHIFT     (8)
+
+/**
+ * GST_QUERY_MAKE_TYPE:
+ * @num: the query number to create
+ * @flags: the query flags
+ *
+ * when making custom query types, use this macro with the num and
+ * the given flags
+ */
+#define GST_QUERY_MAKE_TYPE(num,flags) \
+    (((num) << GST_QUERY_NUM_SHIFT) | (flags))
+
+#define _FLAG(name) GST_QUERY_TYPE_##name
+
+
+/**
+ * GstQueryType:
+ * @GST_QUERY_UNKNOWN: unknown query type
+ * @GST_QUERY_POSITION: current position in stream
+ * @GST_QUERY_DURATION: total duration of the stream
+ * @GST_QUERY_LATENCY: latency of stream
+ * @GST_QUERY_JITTER: current jitter of stream
+ * @GST_QUERY_RATE: current rate of the stream
+ * @GST_QUERY_SEEKING: seeking capabilities
+ * @GST_QUERY_SEGMENT: segment start/stop positions
+ * @GST_QUERY_CONVERT: convert values between formats
+ * @GST_QUERY_FORMATS: query supported formats for convert
+ * @GST_QUERY_BUFFERING: query available media for efficient seeking.
+ * @GST_QUERY_CUSTOM: a custom application or element defined query.
+ * @GST_QUERY_URI: query the URI of the source or sink.
+ * @GST_QUERY_ALLOCATION: the buffer allocation properties
+ * @GST_QUERY_SCHEDULING: the scheduling properties
+ * @GST_QUERY_ACCEPT_CAPS: the accept caps query
+ * @GST_QUERY_CAPS: the caps query
+ * @GST_QUERY_DRAIN: wait till all serialized data is consumed downstream
+ * @GST_QUERY_CONTEXT: query the pipeline-local context from
+ *     downstream or upstream (since 1.2)
+ * @GST_QUERY_BITRATE: the bitrate query (since 1.16)
+ *
+ * Standard predefined Query types
+ */
+/* NOTE: don't forget to update the table in gstquery.c when changing
+ * this enum */
+typedef enum {
+  GST_QUERY_UNKNOWN      = GST_QUERY_MAKE_TYPE (0, 0),
+  GST_QUERY_POSITION     = GST_QUERY_MAKE_TYPE (10, _FLAG(BOTH)),
+  GST_QUERY_DURATION     = GST_QUERY_MAKE_TYPE (20, _FLAG(BOTH)),
+  GST_QUERY_LATENCY      = GST_QUERY_MAKE_TYPE (30, _FLAG(BOTH)),
+  GST_QUERY_JITTER       = GST_QUERY_MAKE_TYPE (40, _FLAG(BOTH)),
+  GST_QUERY_RATE         = GST_QUERY_MAKE_TYPE (50, _FLAG(BOTH)),
+  GST_QUERY_SEEKING      = GST_QUERY_MAKE_TYPE (60, _FLAG(BOTH)),
+  GST_QUERY_SEGMENT      = GST_QUERY_MAKE_TYPE (70, _FLAG(BOTH)),
+  GST_QUERY_CONVERT      = GST_QUERY_MAKE_TYPE (80, _FLAG(BOTH)),
+  GST_QUERY_FORMATS      = GST_QUERY_MAKE_TYPE (90, _FLAG(BOTH)),
+  GST_QUERY_BUFFERING    = GST_QUERY_MAKE_TYPE (110, _FLAG(BOTH)),
+  GST_QUERY_CUSTOM       = GST_QUERY_MAKE_TYPE (120, _FLAG(BOTH)),
+  GST_QUERY_URI          = GST_QUERY_MAKE_TYPE (130, _FLAG(BOTH)),
+  GST_QUERY_ALLOCATION   = GST_QUERY_MAKE_TYPE (140, _FLAG(DOWNSTREAM) | _FLAG(SERIALIZED)),
+  GST_QUERY_SCHEDULING   = GST_QUERY_MAKE_TYPE (150, _FLAG(UPSTREAM)),
+  GST_QUERY_ACCEPT_CAPS  = GST_QUERY_MAKE_TYPE (160, _FLAG(BOTH)),
+  GST_QUERY_CAPS         = GST_QUERY_MAKE_TYPE (170, _FLAG(BOTH)),
+  GST_QUERY_DRAIN        = GST_QUERY_MAKE_TYPE (180, _FLAG(DOWNSTREAM) | _FLAG(SERIALIZED)),
+  GST_QUERY_CONTEXT      = GST_QUERY_MAKE_TYPE (190, _FLAG(BOTH)),
+  GST_QUERY_BITRATE      = GST_QUERY_MAKE_TYPE (200, _FLAG(DOWNSTREAM)),
+  GST_QUERY_RESOURCE     = GST_QUERY_MAKE_TYPE (210, FLAG (BOTH)),
+} GstQueryType;
+#undef _FLAG
+
+GST_API GType _gst_query_type;
+
+#define GST_TYPE_QUERY                         (_gst_query_type)
+#define GST_IS_QUERY(obj)                      (GST_IS_MINI_OBJECT_TYPE (obj, GST_TYPE_QUERY))
+#define GST_QUERY_CAST(obj)                    ((GstQuery*)(obj))
+#define GST_QUERY(obj)                         (GST_QUERY_CAST(obj))
+
+/**
+ * GST_QUERY_TYPE:
+ * @query: the query to query
+ *
+ * Get the #GstQueryType of the query.
+ */
+#define GST_QUERY_TYPE(query)  (((GstQuery*)(query))->type)
+
+/**
+ * GST_QUERY_TYPE_NAME:
+ * @query: the query to query
+ *
+ * Get a constant string representation of the #GstQueryType of the query.
+ */
+#define GST_QUERY_TYPE_NAME(query) (gst_query_type_get_name(GST_QUERY_TYPE(query)))
+
+/**
+ * GST_QUERY_IS_UPSTREAM:
+ * @ev: the query to query
+ *
+ * Check if an query can travel upstream.
+ */
+#define GST_QUERY_IS_UPSTREAM(ev)       !!(GST_QUERY_TYPE (ev) & GST_QUERY_TYPE_UPSTREAM)
+/**
+ * GST_QUERY_IS_DOWNSTREAM:
+ * @ev: the query to query
+ *
+ * Check if an query can travel downstream.
+ */
+#define GST_QUERY_IS_DOWNSTREAM(ev)     !!(GST_QUERY_TYPE (ev) & GST_QUERY_TYPE_DOWNSTREAM)
+/**
+ * GST_QUERY_IS_SERIALIZED:
+ * @ev: the query to query
+ *
+ * Check if an query is serialized with the data stream.
+ */
+#define GST_QUERY_IS_SERIALIZED(ev)     !!(GST_QUERY_TYPE (ev) & GST_QUERY_TYPE_SERIALIZED)
+
+
+/**
+ * GstQuery:
+ * @mini_object: The parent #GstMiniObject type
+ * @type: the #GstQueryType
+ *
+ * The #GstQuery structure.
+ */
+struct _GstQuery
+{
+  GstMiniObject mini_object;
+
+  /*< public > *//* with COW */
+  GstQueryType type;
+};
+
+/**
+ * GstBufferingMode:
+ * @GST_BUFFERING_STREAM: a small amount of data is buffered
+ * @GST_BUFFERING_DOWNLOAD: the stream is being downloaded
+ * @GST_BUFFERING_TIMESHIFT: the stream is being downloaded in a ringbuffer
+ * @GST_BUFFERING_LIVE: the stream is a live stream
+ *
+ * The different types of buffering methods.
+ */
+typedef enum {
+  GST_BUFFERING_STREAM,
+  GST_BUFFERING_DOWNLOAD,
+  GST_BUFFERING_TIMESHIFT,
+  GST_BUFFERING_LIVE
+} GstBufferingMode;
+
+#include <gst/gstiterator.h>
+#include <gst/gststructure.h>
+#include <gst/gstformat.h>
+#include <gst/gstpad.h>
+#include <gst/gstallocator.h>
+#include <gst/gsttoc.h>
+#include <gst/gstcontext.h>
+
+GST_API
+const gchar*    gst_query_type_get_name        (GstQueryType type);
+
+GST_API
+GQuark          gst_query_type_to_quark        (GstQueryType type);
+
+GST_API
+GstQueryTypeFlags
+                gst_query_type_get_flags       (GstQueryType type);
+
+
+GST_API
+GType           gst_query_get_type             (void);
+
+#ifndef GST_DISABLE_MINIOBJECT_INLINE_FUNCTIONS
+/* refcounting */
+static inline GstQuery *
+gst_query_ref (GstQuery * q)
+{
+  return GST_QUERY_CAST (gst_mini_object_ref (GST_MINI_OBJECT_CAST (q)));
+}
+
+static inline void
+gst_query_unref (GstQuery * q)
+{
+  gst_mini_object_unref (GST_MINI_OBJECT_CAST (q));
+}
+
+static inline void
+gst_clear_query (GstQuery ** query_ptr)
+{
+  gst_clear_mini_object ((GstMiniObject **) query_ptr);
+}
+
+/* copy query */
+static inline GstQuery *
+gst_query_copy (const GstQuery * q)
+{
+  return GST_QUERY_CAST (gst_mini_object_copy (GST_MINI_OBJECT_CONST_CAST (q)));
+}
+#else /* GST_DISABLE_MINIOBJECT_INLINE_FUNCTIONS */
+GST_API
+GstQuery *  gst_query_ref   (GstQuery * q);
+
+GST_API
+void        gst_query_unref (GstQuery * q);
+
+GST_API
+void        gst_clear_query (GstQuery ** query_ptr);
+
+GST_API
+GstQuery *  gst_query_copy  (const GstQuery * q);
+#endif /* GST_DISABLE_MINIOBJECT_INLINE_FUNCTIONS */
+
+/**
+ * gst_query_is_writable:
+ * @q: a #GstQuery
+ *
+ * Tests if you can safely write data into a query's structure.
+ */
+#define         gst_query_is_writable(q)     gst_mini_object_is_writable (GST_MINI_OBJECT_CAST (q))
+/**
+ * gst_query_make_writable:
+ * @q: (transfer full): a #GstQuery to make writable
+ *
+ * Makes a writable query from the given query.
+ *
+ * Returns: (transfer full): a new writable query (possibly same as @q)
+ */
+#define         gst_query_make_writable(q)      GST_QUERY_CAST (gst_mini_object_make_writable (GST_MINI_OBJECT_CAST (q)))
+
+#ifndef GST_DISABLE_MINIOBJECT_INLINE_FUNCTIONS
+static inline gboolean
+gst_query_replace (GstQuery **old_query, GstQuery *new_query)
+{
+  return gst_mini_object_replace ((GstMiniObject **) old_query, (GstMiniObject *) new_query);
+}
+
+static inline gboolean
+gst_query_take (GstQuery **old_query, GstQuery *new_query)
+{
+  return gst_mini_object_take ((GstMiniObject **) old_query,
+      (GstMiniObject *) new_query);
+}
+#else /* GST_DISABLE_MINIOBJECT_INLINE_FUNCTIONS */
+GST_API
+gboolean        gst_query_replace               (GstQuery ** old_query,
+                                                 GstQuery * new_query);
+
+GST_API
+gboolean        gst_query_take                  (GstQuery ** old_query,
+                                                 GstQuery * new_query);
+#endif /* GST_DISABLE_MINIOBJECT_INLINE_FUNCTIONS */
+
+/* application specific query */
+
+GST_API
+GstQuery *      gst_query_new_custom            (GstQueryType type, GstStructure *structure) G_GNUC_MALLOC;
+
+GST_API
+const GstStructure *
+                gst_query_get_structure         (GstQuery *query);
+
+GST_API
+GstStructure *  gst_query_writable_structure    (GstQuery *query);
+
+/* position query */
+
+GST_API
+GstQuery*       gst_query_new_position          (GstFormat format) G_GNUC_MALLOC;
+
+GST_API
+void            gst_query_set_position          (GstQuery *query, GstFormat format, gint64 cur);
+
+GST_API
+void            gst_query_parse_position        (GstQuery *query, GstFormat *format, gint64 *cur);
+
+/* duration query */
+
+GST_API
+GstQuery*       gst_query_new_duration          (GstFormat format) G_GNUC_MALLOC;
+
+GST_API
+void            gst_query_set_duration          (GstQuery *query, GstFormat format, gint64 duration);
+
+GST_API
+void            gst_query_parse_duration        (GstQuery *query, GstFormat *format, gint64 *duration);
+
+#ifdef TIZEN_PROFILE_TV
+/* resrource query */
+GST_API
+GstQuery*       gst_query_new_resource                 (gchar * resources) G_GNUC_MALLOC;
+
+GST_API
+void            gst_query_add_resource                 (GstQuery * query, gint resource_id);
+
+GST_API
+gchar*          gst_query_parse_resource       (GstQuery * query);
+#endif
+
+/* latency query */
+
+GST_API
+GstQuery*       gst_query_new_latency           (void) G_GNUC_MALLOC;
+
+GST_API
+void            gst_query_set_latency           (GstQuery *query, gboolean live, GstClockTime min_latency,
+                                                 GstClockTime max_latency);
+
+GST_API
+void            gst_query_parse_latency         (GstQuery *query, gboolean *live, GstClockTime *min_latency,
+                                                 GstClockTime *max_latency);
+
+/* convert query */
+
+GST_API
+GstQuery*       gst_query_new_convert           (GstFormat src_format, gint64 value, GstFormat dest_format) G_GNUC_MALLOC;
+
+GST_API
+void            gst_query_set_convert           (GstQuery *query, GstFormat src_format, gint64 src_value,
+                                                 GstFormat dest_format, gint64 dest_value);
+
+GST_API
+void            gst_query_parse_convert         (GstQuery *query, GstFormat *src_format, gint64 *src_value,
+                                                 GstFormat *dest_format, gint64 *dest_value);
+/* segment query */
+
+GST_API
+GstQuery*       gst_query_new_segment           (GstFormat format) G_GNUC_MALLOC;
+
+GST_API
+void            gst_query_set_segment           (GstQuery *query, gdouble rate, GstFormat format,
+                                                 gint64 start_value, gint64 stop_value);
+
+GST_API
+void            gst_query_parse_segment         (GstQuery *query, gdouble *rate, GstFormat *format,
+                                                 gint64 *start_value, gint64 *stop_value);
+
+/* seeking query */
+
+GST_API
+GstQuery*       gst_query_new_seeking           (GstFormat format) G_GNUC_MALLOC;
+
+GST_API
+void            gst_query_set_seeking           (GstQuery *query, GstFormat format,
+                                                 gboolean seekable,
+                                                 gint64 segment_start,
+                                                 gint64 segment_end);
+
+GST_API
+void            gst_query_parse_seeking         (GstQuery *query, GstFormat *format,
+                                                 gboolean *seekable,
+                                                 gint64 *segment_start,
+                                                 gint64 *segment_end);
+/* formats query */
+
+GST_API
+GstQuery*       gst_query_new_formats           (void) G_GNUC_MALLOC;
+
+GST_API
+void            gst_query_set_formats           (GstQuery *query, gint n_formats, ...);
+
+GST_API
+void            gst_query_set_formatsv          (GstQuery *query, gint n_formats, const GstFormat *formats);
+
+GST_API
+void            gst_query_parse_n_formats       (GstQuery *query, guint *n_formats);
+
+GST_API
+void            gst_query_parse_nth_format      (GstQuery *query, guint nth, GstFormat *format);
+
+/* buffering query */
+
+GST_API
+GstQuery*       gst_query_new_buffering           (GstFormat format) G_GNUC_MALLOC;
+
+GST_API
+void            gst_query_set_buffering_percent   (GstQuery *query, gboolean busy, gint percent);
+
+GST_API
+void            gst_query_parse_buffering_percent (GstQuery *query, gboolean *busy, gint *percent);
+
+GST_API
+void            gst_query_set_buffering_stats     (GstQuery *query, GstBufferingMode mode,
+                                                   gint avg_in, gint avg_out,
+                                                   gint64 buffering_left);
+
+GST_API
+void            gst_query_parse_buffering_stats    (GstQuery *query, GstBufferingMode *mode,
+                                                   gint *avg_in, gint *avg_out,
+                                                   gint64 *buffering_left);
+
+GST_API
+void            gst_query_set_buffering_range     (GstQuery *query, GstFormat format,
+                                                   gint64 start, gint64 stop,
+                                                   gint64 estimated_total);
+
+GST_API
+void            gst_query_parse_buffering_range   (GstQuery *query, GstFormat *format,
+                                                   gint64 *start, gint64 *stop,
+                                                   gint64 *estimated_total);
+
+GST_API
+gboolean        gst_query_add_buffering_range       (GstQuery *query,
+                                                     gint64 start, gint64 stop);
+
+GST_API
+guint           gst_query_get_n_buffering_ranges    (GstQuery *query);
+
+GST_API
+gboolean        gst_query_parse_nth_buffering_range (GstQuery *query,
+                                                     guint index, gint64 *start,
+                                                     gint64 *stop);
+
+/* URI query */
+
+GST_API
+GstQuery *      gst_query_new_uri                    (void) G_GNUC_MALLOC;
+
+GST_API
+void            gst_query_parse_uri                  (GstQuery *query, gchar **uri);
+
+GST_API
+void            gst_query_set_uri                    (GstQuery *query, const gchar *uri);
+
+GST_API
+void            gst_query_parse_uri_redirection      (GstQuery *query, gchar **uri);
+
+GST_API
+void            gst_query_set_uri_redirection        (GstQuery *query, const gchar *uri);
+
+GST_API
+void            gst_query_parse_uri_redirection_permanent (GstQuery *query, gboolean * permanent);
+
+GST_API
+void            gst_query_set_uri_redirection_permanent (GstQuery *query, gboolean permanent);
+
+/* allocation query */
+
+GST_API
+GstQuery *      gst_query_new_allocation             (GstCaps *caps, gboolean need_pool) G_GNUC_MALLOC;
+
+GST_API
+void            gst_query_parse_allocation           (GstQuery *query, GstCaps **caps, gboolean *need_pool);
+
+/* pools */
+
+GST_API
+void            gst_query_add_allocation_pool        (GstQuery *query, GstBufferPool *pool,
+                                                      guint size, guint min_buffers,
+                                                      guint max_buffers);
+
+GST_API
+guint           gst_query_get_n_allocation_pools     (GstQuery *query);
+
+GST_API
+void            gst_query_parse_nth_allocation_pool  (GstQuery *query, guint index,
+                                                      GstBufferPool **pool,
+                                                      guint *size, guint *min_buffers,
+                                                      guint *max_buffers);
+
+GST_API
+void            gst_query_set_nth_allocation_pool    (GstQuery *query, guint index,
+                                                      GstBufferPool *pool,
+                                                      guint size, guint min_buffers,
+                                                      guint max_buffers);
+
+GST_API
+void            gst_query_remove_nth_allocation_pool (GstQuery *query, guint index);
+
+/* allocators */
+
+GST_API
+void            gst_query_add_allocation_param       (GstQuery *query, GstAllocator *allocator,
+                                                      const GstAllocationParams *params);
+
+GST_API
+guint           gst_query_get_n_allocation_params    (GstQuery *query);
+
+GST_API
+void            gst_query_parse_nth_allocation_param (GstQuery *query, guint index,
+                                                      GstAllocator **allocator,
+                                                      GstAllocationParams *params);
+
+GST_API
+void            gst_query_set_nth_allocation_param   (GstQuery *query, guint index,
+                                                      GstAllocator *allocator,
+                                                      const GstAllocationParams *params);
+
+GST_API
+void            gst_query_remove_nth_allocation_param (GstQuery *query, guint index);
+
+/* metadata */
+
+GST_API
+void            gst_query_add_allocation_meta        (GstQuery *query, GType api, const GstStructure *params);
+
+GST_API
+guint           gst_query_get_n_allocation_metas     (GstQuery *query);
+
+GST_API
+GType           gst_query_parse_nth_allocation_meta  (GstQuery *query, guint index,
+                                                      const GstStructure **params);
+
+GST_API
+void            gst_query_remove_nth_allocation_meta (GstQuery *query, guint index);
+
+GST_API
+gboolean        gst_query_find_allocation_meta       (GstQuery *query, GType api, guint *index);
+
+
+/* scheduling query */
+/**
+ * GstSchedulingFlags:
+ * @GST_SCHEDULING_FLAG_SEEKABLE: if seeking is possible
+ * @GST_SCHEDULING_FLAG_SEQUENTIAL: if sequential access is recommended
+ * @GST_SCHEDULING_FLAG_BANDWIDTH_LIMITED: if bandwidth is limited and buffering possible (since 1.2)
+ *
+ * The different scheduling flags.
+ */
+typedef enum {
+  GST_SCHEDULING_FLAG_SEEKABLE          = (1 << 0),
+  GST_SCHEDULING_FLAG_SEQUENTIAL        = (1 << 1),
+  GST_SCHEDULING_FLAG_BANDWIDTH_LIMITED = (1 << 2)
+} GstSchedulingFlags;
+
+GST_API
+GstQuery *      gst_query_new_scheduling          (void) G_GNUC_MALLOC;
+
+GST_API
+void            gst_query_set_scheduling          (GstQuery *query, GstSchedulingFlags flags,
+                                                   gint minsize, gint maxsize, gint align);
+
+GST_API
+void            gst_query_parse_scheduling        (GstQuery *query, GstSchedulingFlags *flags,
+                                                   gint *minsize, gint *maxsize, gint *align);
+
+GST_API
+void            gst_query_add_scheduling_mode       (GstQuery *query, GstPadMode mode);
+
+GST_API
+guint           gst_query_get_n_scheduling_modes    (GstQuery *query);
+
+GST_API
+GstPadMode      gst_query_parse_nth_scheduling_mode (GstQuery *query, guint index);
+
+GST_API
+gboolean        gst_query_has_scheduling_mode       (GstQuery *query, GstPadMode mode);
+
+GST_API
+gboolean        gst_query_has_scheduling_mode_with_flags (GstQuery * query, GstPadMode mode,
+                                                    GstSchedulingFlags flags);
+
+/* accept-caps query */
+
+GST_API
+GstQuery *      gst_query_new_accept_caps          (GstCaps *caps) G_GNUC_MALLOC;
+
+GST_API
+void            gst_query_parse_accept_caps        (GstQuery *query, GstCaps **caps);
+
+GST_API
+void            gst_query_set_accept_caps_result   (GstQuery *query, gboolean result);
+
+GST_API
+void            gst_query_parse_accept_caps_result (GstQuery *query, gboolean *result);
+
+/* caps query */
+
+GST_API
+GstQuery *      gst_query_new_caps                 (GstCaps *filter) G_GNUC_MALLOC;
+
+GST_API
+void            gst_query_parse_caps               (GstQuery *query, GstCaps **filter);
+
+GST_API
+void            gst_query_set_caps_result          (GstQuery *query, GstCaps *caps);
+
+GST_API
+void            gst_query_parse_caps_result        (GstQuery *query, GstCaps **caps);
+
+/* drain query */
+
+GST_API
+GstQuery *      gst_query_new_drain                (void) G_GNUC_MALLOC;
+
+/* context query */
+
+GST_API
+GstQuery *      gst_query_new_context              (const gchar * context_type) G_GNUC_MALLOC;
+
+GST_API
+gboolean        gst_query_parse_context_type       (GstQuery * query, const gchar ** context_type);
+
+GST_API
+void            gst_query_set_context              (GstQuery *query, GstContext *context);
+
+GST_API
+void            gst_query_parse_context            (GstQuery *query, GstContext **context);
+
+/* bitrate query */
+
+GST_API
+GstQuery *      gst_query_new_bitrate              (void) G_GNUC_MALLOC;
+
+GST_API
+void            gst_query_set_bitrate              (GstQuery * query, guint nominal_bitrate);
+
+GST_API
+void            gst_query_parse_bitrate            (GstQuery * query, guint * nominal_bitrate);
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstQuery, gst_query_unref)
+
+G_END_DECLS
+
+#endif /* __GST_QUERY_H__ */
+
index fedfc37..f74fc51 100644 (file)
@@ -283,6 +283,10 @@ _priv_gst_tag_initialize (void)
       _("freeform name of the language this stream is in"), NULL);
   gst_tag_register_static (GST_TAG_IMAGE, GST_TAG_FLAG_META, GST_TYPE_SAMPLE,
       _("image"), _("image related to this stream"), gst_tag_merge_use_first);
+#ifdef TIZEN_PROFILE_TV
+  gst_tag_register_static (GST_TAG_AUDIO_DUALMONO, GST_TAG_FLAG_DECODED, G_TYPE_UINT,
+      _("dualmono audio"), _("dual/mono related to this audio stream"), NULL);
+#endif
   gst_tag_register_static (GST_TAG_PREVIEW_IMAGE, GST_TAG_FLAG_META,
       GST_TYPE_SAMPLE,
       /* TRANSLATORS: 'preview image' = image that shows a preview of the full image */
index c15ea2d..e8e4f3a 100644 (file)
@@ -747,6 +747,14 @@ gboolean  gst_tag_list_take    (GstTagList ** old_taglist,
  * container format the data is stored in (string)
  */
 #define GST_TAG_CONTAINER_FORMAT       "container-format"
+#ifdef TIZEN_PROFILE_TV
+/**
+ * GST_TAG_AUDIO_DUALMONO:
+ *
+ * dual/mono can available in audio stream (boolean)
+ */
+#define GST_TAG_AUDIO_DUALMONO   "audio-dualmono"
+#endif
 /**
  * GST_TAG_BITRATE:
  *
index 85433b6..0b273d7 100644 (file)
@@ -48,6 +48,9 @@
 #include "gst-i18n-lib.h"
 #include "glib-compat-private.h"
 #include <math.h>
+#ifdef TIZEN_PROFILE_TV
+#include "gstchildproxy.h"
+#endif
 
 
 static void
@@ -4518,6 +4521,109 @@ invalid:
   }
 }
 
+#ifdef TIZEN_PROFILE_TV
+/**
+ * gst_element_query_resource
+ * @element: (in): a #GstElement to invoke the resource query on.
+ * @resources: (out): a pointer to the list of resources asked for.
+ * Returns: TRUE if the query could be performed.
+ */
+gboolean
+gst_element_query_resource (GstElement * element, GList ** resource_list)
+{
+  GstQuery *query;
+  gboolean ret;
+  char resources[250];
+  char *element_resource;
+  guint count = 0, i = 0;
+  GstObject *object;
+  int resource_num;
+
+  if (resource_list == NULL) {
+    return FALSE;
+  }
+
+  query = gst_query_new_resource (resources);
+  if (GST_IS_BIN (element)) {
+    count = gst_child_proxy_get_children_count ((GstChildProxy *)element);
+    for (i = 0; i < count; i++) {
+      if (!(object = gst_child_proxy_get_child_by_index ((GstChildProxy *)element, i)))
+        continue;
+
+      if (GST_IS_BIN (object)) {
+        ret = gst_element_query_resource ((GstElement *)object, resource_list);
+        gst_object_unref (object);
+        continue;
+      }
+
+      ret = gst_element_query ((GstElement *) object, query);
+      if (ret) {
+        element_resource = gst_query_parse_resource (query);
+        resource_num = (int) atoi (element_resource);
+        GST_DEBUG_OBJECT (element,
+            "\n resource ID received after query is :%d\n", resource_num);
+        if (NULL == (g_list_find (*resource_list, (gconstpointer)resource_num))) {
+          *resource_list =
+              g_list_append (*resource_list, GINT_TO_POINTER (resource_num));
+        }
+      }
+      gst_object_unref (object);
+    }
+  } else {
+    ret = gst_element_query ((GstElement *) element, query);
+    if (ret) {
+      element_resource = gst_query_parse_resource (query);
+      resource_num = (int) atoi (element_resource);
+      GST_DEBUG_OBJECT (element, "\n resource ID received after query is :%d\n",
+          resource_num);
+      if (NULL == (g_list_find (*resource_list, (gconstpointer)resource_num))) {
+        *resource_list =
+            g_list_append (*resource_list, GINT_TO_POINTER (resource_num));
+      }
+    }
+  }
+  gst_query_unref (query);
+  return TRUE;
+}
+
+static void
+set_family_id (const GValue * item, gpointer user_data)
+{
+  gpointer object = g_value_get_object (item);
+  if (GST_IS_PAD (object)) {
+    GstPad *pad = GST_PAD_CAST (object);
+    g_object_set (G_OBJECT (pad), "family-id", (int) user_data, NULL);
+  } else if (GST_IS_ELEMENT (object)) {
+    gst_set_family_id_to_child (GST_ELEMENT_CAST (object), (int) user_data);
+  }
+  return;
+}
+
+void
+gst_set_family_id_to_child (GstElement * child, int id)
+{
+  GstIterator *it;
+  if (!GST_IS_ELEMENT (child))
+    return;
+  g_object_set (G_OBJECT (child), "family-id", id, NULL);
+  it = gst_element_iterate_pads (child);
+  gst_iterator_foreach (it, (GstIteratorForeachFunction) set_family_id,
+      (gpointer) id);
+  gst_iterator_free (it);
+  it = NULL;
+
+  if (!GST_IS_BIN (child))
+    return;
+  it = gst_bin_iterate_recurse (GST_BIN (child));
+  gst_iterator_foreach (it, (GstIteratorForeachFunction) set_family_id,
+      (gpointer) id);
+  gst_iterator_free (it);
+  it = NULL;
+  return;
+}
+
+#endif
+
 /**
  * gst_type_mark_as_plugin_api:
  * @type: a GType
index 2957569..daf84df 100644 (file)
@@ -1059,6 +1059,11 @@ gboolean                gst_element_query_duration      (GstElement *element, Gs
 GST_API
 gboolean                gst_element_query_convert       (GstElement *element, GstFormat src_format, gint64 src_val,
                                                          GstFormat dest_format, gint64 *dest_val);
+#ifdef TIZEN_PROFILE_TV
+GST_API
+gboolean                gst_element_query_resource      (GstElement *element, GList **resource_list);
+#endif
+
 
 /* pad functions */
 
@@ -1225,6 +1230,9 @@ void          gst_type_mark_as_plugin_api       (GType type, GstPluginAPIFlags f
 GST_API
 gboolean      gst_type_is_plugin_api            (GType type, GstPluginAPIFlags *flags);
 
+#ifdef TIZEN_PROFILE_TV
+void          gst_set_family_id_to_child        (GstElement* child, int id);
+#endif
 G_END_DECLS
 
 #endif /* __GST_UTILS_H__ */
index c70998c..7c01950 100644 (file)
@@ -246,7 +246,7 @@ libgst = library('gstreamer-1.0', gst_sources,
     # HACK, change include paths in .y and .l in final version.
     include_directories('parse')],
   install : true,
-  dependencies : [gobject_dep, gmodule_dep, glib_dep, mathlib, dl_dep] + backtrace_deps
+  dependencies : [gobject_dep, gmodule_dep, glib_dep, mathlib, dl_dep, dlog_dep] + backtrace_deps
                    + platform_deps,
 )
 
old mode 100755 (executable)
new mode 100644 (file)
index b08a284..f0d489e 100644 (file)
 
 #define GST_BASE_PARSE_FRAME_PRIVATE_FLAG_NOALLOC  (1 << 0)
 
+#ifdef TIZEN_FEATURE_BASEPARSE_MODIFICATION
+#define MIN_FRAMES_TO_POST_BITRATE 1
+#else
 #define MIN_FRAMES_TO_POST_BITRATE 10
+#endif
 #define TARGET_DIFFERENCE          (20 * GST_SECOND)
 #define MAX_INDEX_ENTRIES          4096
 #define UPDATE_THRESHOLD           2
@@ -343,6 +347,16 @@ struct _GstBaseParsePrivate
 
   /* Current segment seqnum */
   guint32 segment_seqnum;
+
+#ifdef TIZEN_FEATURE_BASEPARSE_MODIFICATION
+  /* to get pad mode early */
+  GstPadMode expected_pad_mode;
+  /* check first frame in base parser */
+  gboolean first_frame;
+  /* remove zero padding */
+  gint64 remove_from_total;
+  gboolean accurate_index_seek;
+#endif
 };
 
 typedef struct _GstBaseParseSeek
@@ -631,6 +645,10 @@ gst_base_parse_init (GstBaseParse * parse, GstBaseParseClass * bclass)
 
   parse->priv->pad_mode = GST_PAD_MODE_NONE;
 
+#ifdef TIZEN_FEATURE_BASEPARSE_MODIFICATION
+  parse->priv->expected_pad_mode = GST_PAD_MODE_NONE;
+#endif
+
   g_mutex_init (&parse->priv->index_lock);
 
   /* init state */
@@ -863,6 +881,12 @@ gst_base_parse_reset (GstBaseParse * parse)
 
   parse->priv->skip = 0;
 
+#ifdef TIZEN_FEATURE_BASEPARSE_MODIFICATION
+  parse->priv->first_frame = TRUE;
+  parse->priv->remove_from_total = 0;
+  parse->priv->accurate_index_seek = TRUE;
+#endif
+
   g_list_foreach (parse->priv->pending_events, (GFunc) gst_mini_object_unref,
       NULL);
   g_list_free (parse->priv->pending_events);
@@ -1781,7 +1805,11 @@ gst_base_parse_convert_default (GstBaseParse * parse,
   if (!parse->priv->framecount)
     goto no_framecount;
 
+#ifdef TIZEN_FEATURE_BASEPARSE_MODIFICATION
+  duration = parse->priv->acc_duration / GST_USECOND;
+#else
   duration = parse->priv->acc_duration / GST_MSECOND;
+#endif
   bytes = parse->priv->bytecount;
 
   if (G_UNLIKELY (!duration || !bytes))
@@ -1791,7 +1819,13 @@ gst_base_parse_convert_default (GstBaseParse * parse,
     if (dest_format == GST_FORMAT_TIME) {
       /* BYTES -> TIME conversion */
       GST_DEBUG_OBJECT (parse, "converting bytes -> time");
+#ifdef TIZEN_FEATURE_BASEPARSE_MODIFICATION
+      src_value = src_value - parse->priv->remove_from_total;
+#endif
       *dest_value = gst_util_uint64_scale (src_value, duration, bytes);
+#ifdef TIZEN_FEATURE_BASEPARSE_MODIFICATION
+      *dest_value /= GST_USECOND;
+#endif
       *dest_value *= GST_MSECOND;
       GST_DEBUG_OBJECT (parse, "conversion result: %" G_GINT64_FORMAT " ms",
           *dest_value / GST_MSECOND);
@@ -1802,8 +1836,13 @@ gst_base_parse_convert_default (GstBaseParse * parse,
   } else if (src_format == GST_FORMAT_TIME) {
     if (dest_format == GST_FORMAT_BYTES) {
       GST_DEBUG_OBJECT (parse, "converting time -> bytes");
+#ifdef TIZEN_FEATURE_BASEPARSE_MODIFICATION
+      *dest_value = gst_util_uint64_scale (src_value / GST_USECOND, bytes,
+          duration);
+#else
       *dest_value = gst_util_uint64_scale (src_value / GST_MSECOND, bytes,
           duration);
+#endif
       GST_DEBUG_OBJECT (parse,
           "time %" G_GINT64_FORMAT " ms in bytes = %" G_GINT64_FORMAT,
           src_value / GST_MSECOND, *dest_value);
@@ -2249,6 +2288,14 @@ gst_base_parse_handle_buffer (GstBaseParse * parse, GstBuffer * buffer,
     gst_adapter_push (parse->priv->adapter, buffer);
   }
 
+#ifdef TIZEN_FEATURE_BASEPARSE_MODIFICATION
+  /* some one-time start-up */
+  if (G_UNLIKELY (parse->priv->framecount == 0)) {
+    gst_base_parse_check_seekability (parse);
+    gst_base_parse_check_upstream (parse);
+  }
+#endif
+
   frame = gst_base_parse_prepare_frame (parse, buffer);
   ret = klass->handle_frame (parse, frame, skip);
 
@@ -2409,6 +2456,15 @@ gst_base_parse_handle_and_push_frame (GstBaseParse * parse,
    * we may have new information on frame properties */
   gst_base_parse_parse_frame (parse, frame);
 
+#ifdef TIZEN_FEATURE_BASEPARSE_MODIFICATION
+  if (parse->priv->first_frame) {
+    parse->priv->remove_from_total = GST_BUFFER_OFFSET (buffer);
+    GST_DEBUG_OBJECT (parse, "first frame has offset %" G_GINT64_FORMAT ". remove from total",
+        parse->priv->remove_from_total);
+    parse->priv->first_frame = FALSE;
+  }
+#endif
+
   parse->priv->next_pts = GST_CLOCK_TIME_NONE;
   if (GST_BUFFER_DTS_IS_VALID (buffer) && GST_BUFFER_DURATION_IS_VALID (buffer)) {
     parse->priv->next_dts =
@@ -2475,6 +2531,13 @@ gst_base_parse_push_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
 
   buffer = frame->buffer;
 
+#ifdef TIZEN_PROFILE_TV
+  if (!GST_CLOCK_TIME_IS_VALID (GST_BUFFER_PTS (buffer))) {
+    GST_LOG_OBJECT (parse, "invalid pts, set with dts");
+    GST_BUFFER_PTS (buffer) = GST_BUFFER_DTS (buffer);
+  }
+#endif
+
   GST_LOG_OBJECT (parse,
       "processing buffer of size %" G_GSIZE_FORMAT " with dts %" GST_TIME_FORMAT
       ", pts %" GST_TIME_FORMAT ", duration %" GST_TIME_FORMAT,
@@ -2495,7 +2558,11 @@ gst_base_parse_push_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
   if (parse->priv->update_interval < 0)
     parse->priv->update_interval = 50;
   else if (parse->priv->update_interval > 0 &&
+#ifdef TIZEN_FEATURE_BASEPARSE_MODIFICATION
+      ((parse->priv->framecount - 1) % parse->priv->update_interval) == 0)
+#else
       (parse->priv->framecount % parse->priv->update_interval) == 0)
+#endif
     gst_base_parse_update_duration (parse);
 
   if (GST_BUFFER_PTS_IS_VALID (buffer))
@@ -2535,6 +2602,9 @@ gst_base_parse_push_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
    * like tags added by pre_push_frame */
   if (parse->priv->tags_changed) {
     gst_base_parse_queue_tag_event_update (parse);
+#ifdef TIZEN_FEATURE_BASEPARSE_MODIFICATION
+    gst_base_parse_push_pending_events (parse);
+#endif
     parse->priv->tags_changed = FALSE;
   }
   gst_base_parse_push_pending_events (parse);
@@ -3791,6 +3861,11 @@ gst_base_parse_sink_activate_mode (GstPad * pad, GstObject * parent,
   GST_DEBUG_OBJECT (parse, "sink %sactivate in %s mode",
       (active) ? "" : "de", gst_pad_mode_get_name (mode));
 
+#ifdef TIZEN_FEATURE_BASEPARSE_MODIFICATION
+    /* to know early what is the mode */
+    parse->priv->expected_pad_mode = active ? mode : GST_PAD_MODE_NONE;
+#endif
+
   if (!gst_base_parse_activate (parse, active))
     goto activate_failed;
 
@@ -4630,10 +4705,22 @@ gst_base_parse_handle_seek (GstBaseParse * parse, GstEvent * event)
 
   /* maybe we can be accurate for (almost) free */
   gst_base_parse_find_offset (parse, seeksegment.position, TRUE, &start_ts);
+#ifdef TIZEN_FEATURE_BASEPARSE_MODIFICATION
+  if (parse->priv->accurate_index_seek) {
+    if (seeksegment.position <= start_ts + TARGET_DIFFERENCE) {
+      GST_DEBUG_OBJECT (parse, "accurate seek possible");
+      accurate = TRUE;
+    }
+  } else {
+    GST_DEBUG_OBJECT (parse, "accurate seek NOT possible");
+    accurate = FALSE;
+  }
+#else
   if (seeksegment.position <= start_ts + TARGET_DIFFERENCE) {
     GST_DEBUG_OBJECT (parse, "accurate seek possible");
     accurate = TRUE;
   }
+#endif
 
   if (accurate) {
     GstClockTime startpos;
@@ -5037,3 +5124,62 @@ gst_base_parse_merge_tags (GstBaseParse * parse, GstTagList * tags,
 
   GST_OBJECT_UNLOCK (parse);
 }
+
+#ifdef TIZEN_FEATURE_BASEPARSE_MODIFICATION
+void
+gst_base_parse_get_upstream_size (GstBaseParse * parse,
+    gint64 * upstream_size)
+{
+  GST_BASE_PARSE_INDEX_LOCK (parse);
+  *upstream_size = parse->priv->upstream_size;
+  GST_INFO_OBJECT (parse, "get upstream_size for child parser : (%"G_GUINT64_FORMAT")",
+    parse->priv->upstream_size);
+  GST_BASE_PARSE_INDEX_UNLOCK (parse);
+}
+
+void
+gst_base_parse_get_index_last_offset (GstBaseParse * parse,
+    gint64 * index_last_offset)
+{
+  GST_BASE_PARSE_INDEX_LOCK (parse);
+  *index_last_offset = parse->priv->index_last_offset;
+  GST_INFO_OBJECT (parse, "get index_last_offset for child parser : (%"G_GUINT64_FORMAT")",
+    parse->priv->index_last_offset);
+  GST_BASE_PARSE_INDEX_UNLOCK (parse);
+}
+
+void
+gst_base_parse_get_index_last_ts (GstBaseParse * parse,
+    GstClockTime * index_last_ts)
+{
+  GST_BASE_PARSE_INDEX_LOCK (parse);
+  *index_last_ts = parse->priv->index_last_ts;
+  GST_INFO_OBJECT (parse, "get index_last_ts for child parser : (%"GST_TIME_FORMAT")",
+    GST_TIME_ARGS(parse->priv->index_last_ts));
+  GST_BASE_PARSE_INDEX_UNLOCK (parse);
+}
+
+void
+gst_base_parse_get_pad_mode (GstBaseParse * parse,
+    GstPadMode * pad_mode)
+{
+  GST_BASE_PARSE_INDEX_LOCK (parse);
+  *pad_mode = parse->priv->expected_pad_mode;
+  GST_INFO_OBJECT (parse, "get pad_mode for child parse: mode num (%d)",
+    parse->priv->expected_pad_mode);
+  GST_BASE_PARSE_INDEX_UNLOCK (parse);
+}
+/*
+ * Checks if accurate seek mode are avilable from sub-parse
+ */
+void
+gst_base_parse_set_seek_mode (GstBaseParse * parse, gboolean seek_mode)
+{
+  g_return_if_fail (parse != NULL);
+  parse->priv->accurate_index_seek = seek_mode;
+  if (seek_mode)
+    GST_INFO_OBJECT (parse, "accurate seek mode ON");
+  else
+    GST_INFO_OBJECT (parse, "accurate seek mode OFF - for HTTP SEEK");
+}
+#endif
index 2614e22..a86edf2 100644 (file)
@@ -365,6 +365,27 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstBaseParseFrame, gst_base_parse_frame_free)
 
 G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstBaseParse, gst_object_unref)
 
+#ifdef TIZEN_FEATURE_BASEPARSE_MODIFICATION
+GST_BASE_API
+void            gst_base_parse_get_upstream_size (GstBaseParse * parse,
+                                                  gint64 * upstream_size);
+
+GST_BASE_API
+void            gst_base_parse_get_index_last_offset (GstBaseParse * parse,
+                                                      gint64 * index_last_offset);
+
+GST_BASE_API
+void            gst_base_parse_get_index_last_ts (GstBaseParse * parse,
+                                                  GstClockTime * index_last_ts);
+
+GST_BASE_API
+void            gst_base_parse_get_pad_mode (GstBaseParse * parse,
+                                             GstPadMode * pad_mode);
+
+GST_BASE_API
+void            gst_base_parse_set_seek_mode (GstBaseParse * parse,
+                                              gboolean       seek_mode);
+#endif
 G_END_DECLS
 
 #endif /* __GST_BASE_PARSE_H__ */
index 2ba04cb..31fb505 100644 (file)
@@ -189,6 +189,9 @@ enum
 #define DEFAULT_BLOCKSIZE       4096
 #define DEFAULT_NUM_BUFFERS     -1
 #define DEFAULT_DO_TIMESTAMP    FALSE
+#ifdef TIZEN_PROFILE_TV
+#define DEFAULT_SEGMENT_TIME   -1
+#endif
 
 enum
 {
@@ -199,6 +202,9 @@ enum
   PROP_TYPEFIND,
 #endif
   PROP_DO_TIMESTAMP
+#ifdef TIZEN_PROFILE_TV
+  ,PROP_UPDATE_SEGMENT
+#endif
 };
 
 /* The basesrc implementation need to respect the following locking order:
@@ -403,6 +409,13 @@ gst_base_src_class_init (GstBaseSrcClass * klass)
       g_param_spec_boolean ("do-timestamp", "Do timestamp",
           "Apply current stream time to buffers", DEFAULT_DO_TIMESTAMP,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+#ifdef TIZEN_PROFILE_TV
+  g_object_class_install_property (gobject_class, PROP_UPDATE_SEGMENT,
+      g_param_spec_int64 ("update-segment", "Update Segment",
+          "Timestamp that application want to set (-1 unlimited)",
+         -1, G_MAXINT64, DEFAULT_SEGMENT_TIME,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+#endif
 
   gstelement_class->change_state =
       GST_DEBUG_FUNCPTR (gst_base_src_change_state);
@@ -826,6 +839,31 @@ gst_base_src_set_do_timestamp (GstBaseSrc * src, gboolean timestamp)
   GST_OBJECT_UNLOCK (src);
 }
 
+#ifdef TIZEN_PROFILE_TV
+/**
+*gst_base_src_update_segment:
+*@src: the source
+*@timestamp: timestamp to set
+*/
+void
+gst_base_src_update_segment (GstBaseSrc * src, gint64 timestamp)
+{
+  g_return_if_fail (GST_IS_BASE_SRC (src));
+
+  GST_OBJECT_LOCK (src);
+  if (timestamp != -1) {
+    GST_DEBUG_OBJECT (src,
+        "udpate the segment parameter for es player resume playback,%lld",
+        timestamp);
+    src->segment.start = timestamp;
+    src->segment.time = timestamp;
+    src->segment.position = timestamp;
+  }
+  GST_OBJECT_UNLOCK (src);
+  GST_DEBUG_OBJECT (src, "udpate the segment end");
+}
+#endif
+
 /**
  * gst_base_src_get_do_timestamp:
  * @src: the source
@@ -2199,6 +2237,11 @@ gst_base_src_set_property (GObject * object, guint prop_id,
     case PROP_DO_TIMESTAMP:
       gst_base_src_set_do_timestamp (src, g_value_get_boolean (value));
       break;
+#ifdef TIZEN_PROFILE_TV
+    case PROP_UPDATE_SEGMENT:
+      gst_base_src_update_segment (src, g_value_get_int64 (value));
+      break;
+#endif
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -2606,8 +2649,20 @@ again:
    * discard when the create function returned _OK. */
   if (G_UNLIKELY (g_atomic_int_get (&src->priv->has_pending_eos))) {
     if (ret == GST_FLOW_OK) {
+#ifdef TIZEN_FEATURE_TRUSTZONE
+      if (own_res_buf) {
+        /*tzappsrc patch : release handle when unref res_buf*/
+        if(bclass->tz_src_release_handle)
+        {
+          GST_INFO_OBJECT (src, "tzappsrc release the handle");
+          bclass->tz_src_release_handle(src,res_buf);
+        }
+        gst_buffer_unref (res_buf);
+      }
+#else
       if (own_res_buf)
         gst_buffer_unref (res_buf);
+#endif
     }
     src->priv->forced_eos = TRUE;
     goto eos;
@@ -2675,9 +2730,23 @@ again:
       /* this case is triggered when we were waiting for the clock and
        * it got unlocked because we did a state change. In any case, get rid of
        * the buffer. */
+#ifdef TIZEN_FEATURE_TRUSTZONE
+      if (own_res_buf) {
+
+        /*tzappsrc patch : release handle when unref res_buf*/
+        GstBaseSrcClass *klass = GST_BASE_SRC_GET_CLASS(src);
+        if(klass->tz_src_release_handle)
+        {
+          GST_INFO_OBJECT (src, "tzappsrc release the handle");
+          klass->tz_src_release_handle(src,res_buf);
+        }
+
+        gst_buffer_unref (res_buf);
+      }
+#else
       if (own_res_buf)
         gst_buffer_unref (res_buf);
-
+#endif
       if (!src->live_running) {
         /* We return FLUSHING when we are not running to stop the dataflow also
          * get rid of the produced buffer. */
@@ -2697,8 +2766,21 @@ again:
       GST_ELEMENT_ERROR (src, CORE, CLOCK,
           (_("Internal clock error.")),
           ("clock returned unexpected return value %d", status));
+#ifdef TIZEN_FEATURE_TRUSTZONE
+      if (own_res_buf) {
+        /*tzappsrc patch : release handle when unref res_buf*/
+        GstBaseSrcClass *klass = GST_BASE_SRC_GET_CLASS(src);
+        if(klass->tz_src_release_handle)
+        {
+          GST_INFO_OBJECT (src, "tzappsrc release the handle");
+          klass->tz_src_release_handle(src,res_buf);
+        }
+        gst_buffer_unref (res_buf);
+      }
+#else
       if (own_res_buf)
         gst_buffer_unref (res_buf);
+#endif
       ret = GST_FLOW_ERROR;
       break;
   }
@@ -2725,8 +2807,21 @@ map_failed:
     GST_ELEMENT_ERROR (src, RESOURCE, BUSY,
         (_("Failed to map buffer.")),
         ("failed to map result buffer in WRITE mode"));
+#ifdef TIZEN_FEATURE_TRUSTZONE
+    if (own_res_buf) {
+      /*tzappsrc patch : release handle when unref res_buf*/
+      GstBaseSrcClass *klass = GST_BASE_SRC_GET_CLASS(src);
+      if(klass->tz_src_release_handle)
+      {
+        GST_INFO_OBJECT (src, "tzappsrc release the handle");
+        klass->tz_src_release_handle(src,res_buf);
+      }
+      gst_buffer_unref (res_buf);
+    }
+#else
     if (own_res_buf)
       gst_buffer_unref (res_buf);
+#endif
     return GST_FLOW_ERROR;
   }
 not_started:
@@ -2753,8 +2848,21 @@ reached_num_buffers:
 flushing:
   {
     GST_DEBUG_OBJECT (src, "we are flushing");
+#ifdef TIZEN_FEATURE_TRUSTZONE
+    if (own_res_buf) {
+      /*tzappsrc patch : release handle when unref res_buf*/
+      GstBaseSrcClass *klass = GST_BASE_SRC_GET_CLASS(src);
+      if(klass->tz_src_release_handle)
+      {
+        GST_INFO_OBJECT (src, "tzappsrc release the handle");
+        klass->tz_src_release_handle(src,res_buf);
+      }
+      gst_buffer_unref (res_buf);
+    }
+#else
     if (own_res_buf)
       gst_buffer_unref (res_buf);
+#endif
     return GST_FLOW_FLUSHING;
   }
 eos:
@@ -3031,6 +3139,14 @@ gst_base_src_loop (GstPad * pad)
   }
 
   if (G_UNLIKELY (ret != GST_FLOW_OK)) {
+#ifdef TIZEN_FEATURE_TRUSTZONE
+    /*tzappsrc patch : release handle when unref res_buf*/
+    GstBaseSrcClass *klass = GST_BASE_SRC_GET_CLASS (src);
+    if (klass->tz_src_release_handle) {
+      GST_INFO_OBJECT (src, "tzappsrc release the handle");
+      klass->tz_src_release_handle (src,buf);
+    }
+#endif
     if (ret == GST_FLOW_NOT_NEGOTIATED) {
       goto not_negotiated;
     }
index 04304bf..9fd9c00 100644 (file)
@@ -251,6 +251,12 @@ struct _GstBaseSrcClass {
 
   /*< private >*/
   gpointer       _gst_reserved[GST_PADDING_LARGE];
+#ifdef TIZEN_FEATURE_TRUSTZONE
+  /*tzappsrc patch*/
+  int (*tz_flush) (GstBaseSrc *src, unsigned int handle);
+  int (*tz_src_flush) (GstBaseSrc *src);
+  int (*tz_src_release_handle) (GstBaseSrc *src, GstBuffer *buf);
+#endif
 };
 
 GST_BASE_API
@@ -329,6 +335,11 @@ void            gst_base_src_submit_buffer_list (GstBaseSrc    * src,
 
 G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstBaseSrc, gst_object_unref)
 
+#ifdef TIZEN_PROFILE_TV
+GST_BASE_API
+void            gst_base_src_update_segment   (GstBaseSrc * src, gint64 timestamp);
+#endif
+
 G_END_DECLS
 
 #endif /* __GST_BASE_SRC_H__ */
index 90374fb..a89312c 100644 (file)
@@ -18,6 +18,7 @@
 # Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
 # Boston, MA 02110-1301, USA.
 
+from __future__ import print_function
 import gdb
 import sys
 import re
index bed8c4e..36789a8 100644 (file)
@@ -562,6 +562,31 @@ if bashcomp_dep.found()
   endif
 endif
 
+# TIZEN BUILD OPTION
+
+dlog_dep = dependency('dlog', required : get_option('dlog'))
+if dlog_dep.found()
+  cdata.set('TIZEN_DLOG', 1)
+endif
+
+cdata.set('TIZEN_FEATURE_QUEUE2_MODIFICATION', true)
+cdata.set('TIZEN_FEATURE_FILESINK_MODIFICATION', true)
+cdata.set('TIZEN_FEATURE_MQ_MODIFICATION', true)
+cdata.set('TIZEN_FEATURE_MQ_MODIFICATION_EXTRA_SIZE_TIME', true)
+cdata.set('TIZEN_FEATURE_MQ_SKIP_BUFFERING', true)
+cdata.set('TIZEN_FEATURE_BASEPARSE_MODIFICATION', true)
+cdata.set('TIZEN_FEATURE_QUEUE_MODIFICATION', true)
+cdata.set('TIZEN_FEATURE_FAKESINK_MODIFICATION', true)
+cdata.set('TIZEN_FEATURE_INPUT_SELECTOR_MODIFICATION', true)
+cdata.set('TIZEN_FEATURE_SEEK_THRESHOLD', true)
+cdata.set('TIZEN_FEATURE_RTSPSRC_MODIFICATION', true)
+if get_option('tv-profile')
+  cdata.set('TIZEN_TV_PROFILE', true)
+  cdata.set('TIZEN_FEATURE_TRUSTZONE', true)
+endif
+
+# TIZEN BUILD OPTION end
+
 plugins_install_dir = join_paths(get_option('libdir'), 'gstreamer-1.0')
 
 pkgconfig = import('pkgconfig')
index 7363bdb..ab9c7bd 100644 (file)
@@ -46,3 +46,9 @@ option('package-origin', type : 'string', value : 'Unknown package origin', yiel
        description : 'package origin URL to use in plugins')
 option('doc', type : 'feature', value : 'auto', yield: true,
        description: 'Enable documentation.')
+
+# Tizen options
+option('dlog', type : 'boolean', value : true,
+       description : 'dlog')
+option('tv-profile', type : 'boolean', value : false,
+       description : 'tv-profile')
\ No newline at end of file
index 028c87a..eb91f91 100644 (file)
@@ -71,6 +71,10 @@ enum
 #define DEFAULT_CAN_ACTIVATE_PUSH TRUE
 #define DEFAULT_CAN_ACTIVATE_PULL FALSE
 #define DEFAULT_NUM_BUFFERS -1
+#ifdef TIZEN_FEATURE_FAKESINK_MODIFICATION
+#define DEFAULT_NUMER_FPS 0
+#define DEFAULT_DEN_FPS 1
+#endif
 
 enum
 {
@@ -138,6 +142,11 @@ static GstFlowReturn gst_fake_sink_render (GstBaseSink * bsink,
     GstBuffer * buffer);
 static gboolean gst_fake_sink_event (GstBaseSink * bsink, GstEvent * event);
 static gboolean gst_fake_sink_query (GstBaseSink * bsink, GstQuery * query);
+#ifdef TIZEN_FEATURE_FAKESINK_MODIFICATION
+static gboolean gst_fake_sink_set_caps (GstBaseSink * bsink, GstCaps * caps);
+static void gst_fake_sink_get_times (GstBaseSink * bsink, GstBuffer * buf,
+    GstClockTime * start, GstClockTime * end);
+#endif
 
 static guint gst_fake_sink_signals[LAST_SIGNAL] = { 0 };
 
@@ -245,6 +254,10 @@ gst_fake_sink_class_init (GstFakeSinkClass * klass)
   gstbase_sink_class->preroll = GST_DEBUG_FUNCPTR (gst_fake_sink_preroll);
   gstbase_sink_class->render = GST_DEBUG_FUNCPTR (gst_fake_sink_render);
   gstbase_sink_class->query = GST_DEBUG_FUNCPTR (gst_fake_sink_query);
+#ifdef TIZEN_FEATURE_FAKESINK_MODIFICATION
+  gstbase_sink_class->set_caps = GST_DEBUG_FUNCPTR (gst_fake_sink_set_caps);
+  gstbase_sink_class->get_times = GST_DEBUG_FUNCPTR (gst_fake_sink_get_times);
+#endif
 
   gst_type_mark_as_plugin_api (GST_TYPE_FAKE_SINK_STATE_ERROR, 0);
 }
@@ -258,6 +271,10 @@ gst_fake_sink_init (GstFakeSink * fakesink)
   fakesink->state_error = DEFAULT_STATE_ERROR;
   fakesink->signal_handoffs = DEFAULT_SIGNAL_HANDOFFS;
   fakesink->num_buffers = DEFAULT_NUM_BUFFERS;
+#ifdef TIZEN_FEATURE_FAKESINK_MODIFICATION
+  fakesink->fps_n = DEFAULT_NUMER_FPS;
+  fakesink->fps_d = DEFAULT_DEN_FPS;
+#endif
 
   gst_base_sink_set_sync (GST_BASE_SINK (fakesink), DEFAULT_SYNC);
   gst_base_sink_set_drop_out_of_segment (GST_BASE_SINK (fakesink),
@@ -546,6 +563,62 @@ gst_fake_sink_query (GstBaseSink * bsink, GstQuery * query)
   return ret;
 }
 
+#ifdef TIZEN_FEATURE_FAKESINK_MODIFICATION
+static gboolean
+gst_fake_sink_set_caps (GstBaseSink * bsink, GstCaps * caps)
+{
+  GstFakeSink *sink;
+  GstStructure *structure;
+  const gchar *name;
+  gint fps_n, fps_d;
+
+  sink = GST_FAKE_SINK (bsink);
+  GST_DEBUG_OBJECT (sink, "set caps %" GST_PTR_FORMAT, caps);
+
+  structure = gst_caps_get_structure(caps, 0);
+  name = gst_structure_get_name(structure);
+
+  if (g_strrstr(name, "video/")) {
+    if (gst_structure_get_fraction (structure, "framerate", &fps_n, &fps_d)) {
+      if (fps_n == 0) {
+        /* in case of variable framerate, need to check max-framerate value */
+        gst_structure_get_fraction (structure, "max-framerate", &fps_n, &fps_d);
+      }
+      sink->fps_n = fps_n;
+      sink->fps_d = fps_d;
+    } else {
+      GST_DEBUG_OBJECT (sink, "framerate is unspecified");
+    }
+  }
+
+  return TRUE;
+}
+
+static void
+gst_fake_sink_get_times (GstBaseSink * bsink, GstBuffer * buf,
+    GstClockTime * start, GstClockTime * end)
+{
+  /* to check valid buffer based on the start and end time */
+  GstFakeSink *sink;
+
+  sink = GST_FAKE_SINK (bsink);
+
+  if (GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
+    *start = GST_BUFFER_TIMESTAMP (buf);
+
+    if (GST_BUFFER_DURATION_IS_VALID (buf)) {
+      *end = *start + GST_BUFFER_DURATION (buf);
+    } else {
+      if (sink->fps_n > 0) {
+        *end =
+            *start + gst_util_uint64_scale_int (GST_SECOND, sink->fps_d,
+            sink->fps_n);
+      }
+    }
+  }
+}
+#endif
+
 static GstStateChangeReturn
 gst_fake_sink_change_state (GstElement * element, GstStateChange transition)
 {
index 72b3671..60a92c7 100644 (file)
@@ -82,6 +82,10 @@ struct _GstFakeSink {
   gchar                        *last_message;
   gint                  num_buffers;
   gint                  num_buffers_left;
+#ifdef TIZEN_FEATURE_FAKESINK_MODIFICATION
+  gint                  fps_n;
+  gint                  fps_d;
+#endif
 };
 
 struct _GstFakeSinkClass {
index ce0fba3..8023880 100644 (file)
@@ -119,6 +119,9 @@ enum
   PROP_BUFFER_MODE,
   PROP_BUFFER_SIZE,
   PROP_APPEND,
+#ifdef TIZEN_FEATURE_FILESINK_MODIFICATION
+  PROP_CURRENT_BYTES,
+#endif
   PROP_O_SYNC,
   PROP_MAX_TRANSIENT_ERROR_TIMEOUT,
   PROP_LAST
@@ -226,6 +229,13 @@ gst_file_sink_class_init (GstFileSinkClass * klass)
           "Size of buffer in number of bytes for line or full buffer-mode", 0,
           G_MAXUINT, DEFAULT_BUFFER_SIZE,
           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+#ifdef TIZEN_FEATURE_FILESINK_MODIFICATION
+  g_object_class_install_property (gobject_class, PROP_CURRENT_BYTES,
+      g_param_spec_uint64 ("current-bytes", "Current bytes",
+          "downloaded bytes so far", 0,
+          G_MAXUINT64, 0,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+#endif
 
   /**
    * GstFileSink:append
@@ -386,6 +396,11 @@ gst_file_sink_get_property (GObject * object, guint prop_id, GValue * value,
     case PROP_APPEND:
       g_value_set_boolean (value, sink->append);
       break;
+#ifdef TIZEN_FEATURE_FILESINK_MODIFICATION
+    case PROP_CURRENT_BYTES:
+      g_value_set_uint64(value, sink->current_pos);
+      break;
+#endif
     case PROP_O_SYNC:
       g_value_set_boolean (value, sink->o_sync);
       break;
index 069e732..e9e1541 100644 (file)
@@ -668,6 +668,10 @@ gst_selector_pad_query (GstPad * pad, GstObject * parent, GstQuery * query)
     case GST_QUERY_POSITION:
     case GST_QUERY_DURATION:
     case GST_QUERY_CONTEXT:
+#ifdef TIZEN_FEATURE_INPUT_SELECTOR_MODIFICATION
+    /* to resolve deadlock during reconfiguration. */
+    case GST_QUERY_BITRATE:
+#endif
       /* always proxy caps/position/duration/context queries, regardless of active pad or not
        * See https://bugzilla.gnome.org/show_bug.cgi?id=775445 */
       res = gst_pad_peer_query (self->srcpad, query);
index e13d317..f40200b 100644 (file)
@@ -246,7 +246,11 @@ enum
  * additional extra size. */
 #define DEFAULT_EXTRA_SIZE_BYTES 10 * 1024 * 1024       /* 10 MB */
 #define DEFAULT_EXTRA_SIZE_BUFFERS 5
+#ifdef TIZEN_FEATURE_MQ_MODIFICATION_EXTRA_SIZE_TIME
+#define DEFAULT_EXTRA_SIZE_TIME 10 * GST_SECOND
+#else
 #define DEFAULT_EXTRA_SIZE_TIME 3 * GST_SECOND
+#endif
 
 #define DEFAULT_USE_BUFFERING FALSE
 #define DEFAULT_LOW_WATERMARK  0.01
@@ -266,6 +270,9 @@ enum
   PROP_MAX_SIZE_BYTES,
   PROP_MAX_SIZE_BUFFERS,
   PROP_MAX_SIZE_TIME,
+#ifdef TIZEN_FEATURE_MQ_MODIFICATION
+  PROP_CURR_SIZE_BYTES,
+#endif
   PROP_USE_BUFFERING,
   PROP_LOW_PERCENT,
   PROP_HIGH_PERCENT,
@@ -696,7 +703,13 @@ gst_multi_queue_class_init (GstMultiQueueClass * klass)
           "Max. amount of data in the queue (in ns, 0=disable)", 0, G_MAXUINT64,
           DEFAULT_MAX_SIZE_TIME, G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
           G_PARAM_STATIC_STRINGS));
-
+#ifdef TIZEN_FEATURE_MQ_MODIFICATION
+  g_object_class_install_property (gobject_class, PROP_CURR_SIZE_BYTES,
+      g_param_spec_uint ("curr-size-bytes", "Current buffered size (kB)",
+          "buffered amount of data in the queue (bytes)", 0, G_MAXUINT,
+                 0, G_PARAM_READABLE | GST_PARAM_MUTABLE_PLAYING |
+                 G_PARAM_STATIC_STRINGS));
+#endif
   g_object_class_install_property (gobject_class, PROP_EXTRA_SIZE_BYTES,
       g_param_spec_uint ("extra-size-bytes", "Extra Size (kB)",
           "Amount of data the queues can grow if one of them is empty (bytes, 0=disable)"
@@ -1023,6 +1036,33 @@ gst_multi_queue_set_property (GObject * object, guint prop_id,
   }
 }
 
+#ifdef TIZEN_FEATURE_MQ_MODIFICATION
+static guint
+get_current_size_bytes (GstMultiQueue * mq)
+{
+  GList *tmp;
+  guint current_size_bytes = 0;
+
+  for (tmp = mq->queues; tmp; tmp = g_list_next (tmp)) {
+    GstSingleQueue *sq = (GstSingleQueue *) tmp->data;
+    GstDataQueueSize size;
+
+    gst_data_queue_get_level (sq->queue, &size);
+
+    current_size_bytes += size.bytes;
+
+    GST_DEBUG_OBJECT (mq,
+        "queue %d: bytes %u/%u, time %" G_GUINT64_FORMAT "/%"
+        G_GUINT64_FORMAT, sq->id, size.bytes, sq->max_size.bytes,
+        sq->cur_time, sq->max_size.time);
+  }
+
+  GST_INFO_OBJECT (mq, "current_size_bytes : %u", current_size_bytes);
+
+  return current_size_bytes;
+}
+#endif
+
 /* Called with mutex held */
 static GstStructure *
 gst_multi_queue_get_stats (GstMultiQueue * mq)
@@ -1088,6 +1128,11 @@ gst_multi_queue_get_property (GObject * object, guint prop_id,
     case PROP_MAX_SIZE_TIME:
       g_value_set_uint64 (value, mq->max_size.time);
       break;
+#ifdef TIZEN_FEATURE_MQ_MODIFICATION
+    case PROP_CURR_SIZE_BYTES:
+      g_value_set_uint (value, get_current_size_bytes(mq));
+      break;
+#endif
     case PROP_USE_BUFFERING:
       g_value_set_boolean (value, mq->use_buffering);
       break;
@@ -1282,6 +1327,16 @@ gst_multi_queue_change_state (GstElement * element, GstStateChange transition)
 
       break;
     }
+#ifdef TIZEN_FEATURE_MQ_MODIFICATION
+    /* to stop buffering during playing state */
+    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:{
+      GST_MULTI_QUEUE_MUTEX_LOCK (mqueue);
+      mqueue->buffering = FALSE;
+      GST_MULTI_QUEUE_MUTEX_UNLOCK (mqueue);
+      gst_multi_queue_post_buffering (mqueue);
+      break;
+    }
+#endif
     case GST_STATE_CHANGE_PAUSED_TO_READY:{
       GList *tmp;
 
@@ -1462,6 +1517,27 @@ update_buffering (GstMultiQueue * mq, GstSingleQueue * sq)
   if (!mq->use_buffering)
     return;
 
+#ifdef TIZEN_FEATURE_MQ_SKIP_BUFFERING
+  GstPad *sinkpad = g_weak_ref_get (&sq->sinkpad);
+  if (sinkpad) {
+    GstCaps *caps = gst_pad_get_current_caps (sinkpad);
+    GstStructure *s;
+
+    if (caps) {
+      /* skip buffering except audio and video */
+      if ((s = gst_caps_get_structure (caps, 0)) &&
+          (!g_strrstr (gst_structure_get_name (s), "video")) &&
+          (!g_strrstr (gst_structure_get_name (s), "audio"))) {
+          gst_caps_unref (caps);
+          gst_clear_object (&sinkpad);
+          return;
+      }
+      gst_caps_unref (caps);
+    }
+  }
+  gst_clear_object (&sinkpad);
+#endif
+
   buffering_level = get_buffering_level (mq, sq);
 
   /* scale so that if buffering_level equals the high watermark,
@@ -2610,6 +2686,18 @@ gst_multi_queue_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
 
       gst_single_queue_flush (mq, sq, FALSE, FALSE);
       gst_single_queue_start (mq, sq);
+#ifdef TIZEN_FEATURE_MQ_MODIFICATION
+      /* need to reset the buffering data after seeking */
+      GList *tmp;
+      tmp = mq->queues;
+      while (tmp) {
+        GstSingleQueue *q = (GstSingleQueue *) tmp->data;
+        if (q->flushing)
+          goto done;
+        tmp = g_list_next (tmp);
+      }
+      recheck_buffering_status (mq);
+#endif
       goto done;
 
     case GST_EVENT_SEGMENT:
@@ -2780,8 +2868,15 @@ gst_multi_queue_sink_query (GstPad * pad, GstObject * parent, GstQuery * query)
           GST_MULTI_QUEUE_MUTEX_UNLOCK (mq);
           res = gst_data_queue_push (sq->queue, (GstDataQueueItem *) item);
           GST_MULTI_QUEUE_MUTEX_LOCK (mq);
+#ifdef TIZEN_FEATURE_MQ_MODIFICATION
+          if (!res || sq->flushing) {
+            gst_multi_queue_item_destroy (item);
+            goto out_flushing;
+          }
+#else
           if (!res || sq->flushing)
             goto out_flushing;
+#endif
           /* it might be that the query has been taken out of the queue
            * while we were unlocked. So, we need to check if the last
            * handled query is the same one than the one we just
@@ -3111,6 +3206,10 @@ compute_high_time (GstMultiQueue * mq, guint groupid)
 #define IS_FILLED(q, format, value) (((q)->max_size.format) != 0 && \
      ((q)->max_size.format) <= (value))
 
+#ifdef TIZEN_FEATURE_MQ_MODIFICATION_EXTRA_SIZE_TIME
+#define IS_FILLED_EXTRA(q, format, value) ((((q)->extra_size.format) != 0) && (((q)->max_size.format) != 0) && \
+     (((q)->extra_size.format)+((q)->max_size.format)) <= (value))
+#endif
 /*
  * GstSingleQueue functions
  */
@@ -3270,7 +3369,11 @@ single_queue_check_full (GstDataQueue * dataq, guint visible, guint bytes,
   }
 
   /* check time or bytes */
+#ifdef TIZEN_FEATURE_MQ_MODIFICATION_EXTRA_SIZE_TIME
+  res = IS_FILLED_EXTRA (sq, time, sq->cur_time) || IS_FILLED (sq, bytes, bytes);
+#else
   res = IS_FILLED (sq, bytes, bytes);
+#endif
   /* We only care about limits in time if we're not a sparse stream or
    * we're not syncing by running time */
   if (!sq->is_sparse || !mq->sync_by_running_time) {
index e381083..2ca6673 100644 (file)
@@ -122,6 +122,9 @@ enum
   PROP_MIN_THRESHOLD_TIME,
   PROP_LEAKY,
   PROP_SILENT,
+#ifdef TIZEN_FEATURE_QUEUE_MODIFICATION
+  PROP_EMPTY_BUFFERS,
+#endif /* TIZEN_FEATURE_QUEUE_MODIFICATION */
   PROP_FLUSH_ON_EOS
 };
 
@@ -384,6 +387,13 @@ gst_queue_class_init (GstQueueClass * klass)
           G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
           G_PARAM_STATIC_STRINGS));
 
+#ifdef TIZEN_FEATURE_QUEUE_MODIFICATION
+  g_object_class_install_property (gobject_class, PROP_EMPTY_BUFFERS,
+      g_param_spec_boolean ("empty-buffers", "empty_buffers",
+          "Drop all the incomming buffers and flush buffers in queue",
+         FALSE, G_PARAM_READWRITE));
+#endif /* TIZEN_FEATURE_QUEUE_MODIFICATION */
+
   /**
    * queue:flush-on-eos:
    *
@@ -478,6 +488,10 @@ gst_queue_init (GstQueue * queue)
 
   queue->newseg_applied_to_src = FALSE;
 
+#ifdef TIZEN_FEATURE_QUEUE_MODIFICATION
+  queue->empty_buffers = FALSE;
+#endif /* TIZEN_FEATURE_QUEUE_MODIFICATION */
+
   GST_DEBUG_OBJECT (queue,
       "initialized queue's not_empty & not_full conditions");
 }
@@ -1194,6 +1208,16 @@ gst_queue_chain_buffer_or_list (GstPad * pad, GstObject * parent,
   if (queue->unexpected)
     goto out_unexpected;
 
+#ifdef TIZEN_FEATURE_QUEUE_MODIFICATION
+  /* Added to not enqueue buffers in the queue while paused */
+  if (queue->empty_buffers) {
+    GST_CAT_LOG_OBJECT(queue_dataflow, queue, "drop buffer %p", obj);
+    gst_mini_object_unref(obj);
+    GST_QUEUE_MUTEX_UNLOCK(queue);
+    return GST_FLOW_OK;
+  }
+#endif /* TIZEN_FEATURE_QUEUE_MODIFICATION */
+
   if (!is_list) {
     GstClockTime duration, timestamp;
     GstBuffer *buffer = GST_BUFFER_CAST (obj);
@@ -1841,6 +1865,16 @@ gst_queue_set_property (GObject * object,
     case PROP_SILENT:
       queue->silent = g_value_get_boolean (value);
       break;
+#ifdef TIZEN_FEATURE_QUEUE_MODIFICATION
+    case PROP_EMPTY_BUFFERS:
+      queue->empty_buffers = g_value_get_boolean (value);
+      GST_INFO_OBJECT(queue, "set empty buffer : %d", queue->empty_buffers);
+      if (queue->empty_buffers) {
+        gst_queue_locked_flush(queue, FALSE);
+      }
+      GST_INFO_OBJECT(queue, "done");
+      break;
+#endif /* TIZEN_FEATURE_QUEUE_MODIFICATION */
     case PROP_FLUSH_ON_EOS:
       queue->flush_on_eos = g_value_get_boolean (value);
       break;
@@ -1894,6 +1928,11 @@ gst_queue_get_property (GObject * object,
     case PROP_SILENT:
       g_value_set_boolean (value, queue->silent);
       break;
+#ifdef TIZEN_FEATURE_QUEUE_MODIFICATION
+    case PROP_EMPTY_BUFFERS:
+      g_value_set_boolean(value, queue->empty_buffers);
+      break;
+#endif /* TIZEN_FEATURE_QUEUE_MODIFICATION */
     case PROP_FLUSH_ON_EOS:
       g_value_set_boolean (value, queue->flush_on_eos);
       break;
index 2a9cb36..364d82a 100644 (file)
@@ -107,6 +107,11 @@ struct _GstQueue {
   gboolean      unexpected;
   gboolean      eos;
 
+#ifdef TIZEN_FEATURE_QUEUE_MODIFICATION
+  /* drop incomming buffers and flush buffers in queue */
+  gboolean empty_buffers;
+#endif /* TIZEN_FEATURE_QUEUE_MODIFICATION */
+
   /* the queue of data we're keeping our grubby hands on */
   GstQueueArray *queue;
 
index 6d9dad9..4dffc9b 100644 (file)
@@ -150,6 +150,9 @@ enum
   PROP_AVG_IN_RATE,
   PROP_USE_BITRATE_QUERY,
   PROP_BITRATE,
+#ifdef TIZEN_FEATURE_RTSPSRC_MODIFICATION
+  PROP_BUFFER_MODE,
+#endif
   PROP_LAST
 };
 static GParamSpec *obj_props[PROP_LAST] = { NULL, };
@@ -469,6 +472,19 @@ gst_queue2_class_init (GstQueue2Class * klass)
 
   g_object_class_install_properties (gobject_class, PROP_LAST, obj_props);
 
+#ifdef TIZEN_FEATURE_RTSPSRC_MODIFICATION
+  /**
+   * GstQueue2:buffer-mode:
+   *
+   * Control the buffering mode used by the queue2.
+   */
+  g_object_class_install_property (gobject_class, PROP_BUFFER_MODE,
+      g_param_spec_enum ("buffer-mode", "Buffer Mode",
+          "Control the buffering algorithm in use",
+          GST_TYPE_BUFFERING_MODE, GST_BUFFERING_STREAM,
+          G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+#endif
+
   /* set several parent class virtual functions */
   gobject_class->finalize = gst_queue2_finalize;
 
@@ -565,6 +581,9 @@ gst_queue2_init (GstQueue2 * queue)
 
   queue->use_bitrate_query = DEFAULT_USE_BITRATE_QUERY;
 
+#ifdef TIZEN_FEATURE_RTSPSRC_MODIFICATION
+  queue->mode = -1;
+#endif
   GST_DEBUG_OBJECT (queue,
       "initialized queue's not_empty & not_full conditions");
 }
@@ -1093,6 +1112,22 @@ static void
 get_buffering_stats (GstQueue2 * queue, gint percent, GstBufferingMode * mode,
     gint * avg_in, gint * avg_out, gint64 * buffering_left)
 {
+#ifdef TIZEN_FEATURE_RTSPSRC_MODIFICATION
+  if (queue->mode != -1) {
+    *mode = queue->mode;
+  } else {
+    if (mode) {
+      if (!QUEUE_IS_USING_QUEUE (queue)) {
+        if (QUEUE_IS_USING_RING_BUFFER (queue))
+          *mode = GST_BUFFERING_TIMESHIFT;
+        else
+          *mode = GST_BUFFERING_DOWNLOAD;
+      } else {
+        *mode = GST_BUFFERING_STREAM;
+      }
+    }
+  }
+#else
   if (mode) {
     if (!QUEUE_IS_USING_QUEUE (queue)) {
       if (QUEUE_IS_USING_RING_BUFFER (queue))
@@ -1103,6 +1138,7 @@ get_buffering_stats (GstQueue2 * queue, gint percent, GstBufferingMode * mode,
       *mode = GST_BUFFERING_STREAM;
     }
   }
+#endif
 
   if (avg_in)
     *avg_in = queue->byte_in_rate;
@@ -1404,6 +1440,18 @@ get_seek_threshold (GstQueue2 * queue)
   /* FIXME, find a good threshold based on the incoming rate. */
   threshold = 1024 * 512;
 
+#ifdef TIZEN_FEATURE_SEEK_THRESHOLD
+  guint64 seek_thresholds[] =
+    {(1.5*1024*1024), (1*1024*1024), (512*1024), (256*1024)};
+
+  for (int i = 0 ; i < G_N_ELEMENTS(seek_thresholds) ; i++) {
+    if (seek_thresholds[i] < (guint64)queue->byte_in_rate) {
+      threshold = seek_thresholds[i];
+      break;
+    }
+  }
+#endif
+
   if (QUEUE_IS_USING_RING_BUFFER (queue)) {
     threshold = MIN (threshold,
         QUEUE_MAX_BYTES (queue) - queue->cur_level.bytes);
@@ -2012,8 +2060,10 @@ gst_queue2_create_write (GstQueue2 * queue, GstBuffer * buffer)
         guint64 range_data_start, range_data_end;
         GstQueue2Range *range_to_destroy = NULL;
 
+#ifndef TIZEN_FEATURE_QUEUE2_MODIFICATION
         if (range == queue->current)
           goto next_range;
+#endif
 
         range_data_start = range->rb_offset;
         range_data_end = range->rb_writing_pos;
@@ -2037,7 +2087,11 @@ gst_queue2_create_write (GstQueue2 * queue, GstBuffer * buffer)
             goto next_range;
 
           if (new_writing_pos > range_data_start) {
+#ifdef TIZEN_FEATURE_QUEUE2_MODIFICATION
+            if (new_writing_pos >= range_data_end && range != queue->current) {
+#else
             if (new_writing_pos >= range_data_end) {
+#endif
               GST_DEBUG_OBJECT (queue,
                   "Removing range: offset %" G_GUINT64_FORMAT ", wpos %"
                   G_GUINT64_FORMAT, range->offset, range->writing_pos);
@@ -2062,7 +2116,12 @@ gst_queue2_create_write (GstQueue2 * queue, GstBuffer * buffer)
           if (new_wpos_virt <= range_data_start)
             goto next_range;
 
+#ifdef TIZEN_FEATURE_QUEUE2_MODIFICATION
+          if (new_wpos_virt > rb_size && new_writing_pos >= range_data_end
+            && range != queue->current) {
+#else
           if (new_wpos_virt > rb_size && new_writing_pos >= range_data_end) {
+#endif
             GST_DEBUG_OBJECT (queue,
                 "Removing range: offset %" G_GUINT64_FORMAT ", wpos %"
                 G_GUINT64_FORMAT, range->offset, range->writing_pos);
@@ -2189,9 +2248,20 @@ gst_queue2_create_write (GstQueue2 * queue, GstBuffer * buffer)
       queue->current->rb_writing_pos = writing_pos = new_writing_pos;
     } else {
       queue->current->writing_pos = writing_pos = new_writing_pos;
+#ifdef TIZEN_FEATURE_QUEUE2_MODIFICATION
+      if (do_seek) {
+        if (queue->upstream_size == 0 || new_writing_pos < queue->upstream_size)
+          perform_seek_to_offset (queue, new_writing_pos);
+        else
+          queue->is_eos = TRUE;
+      }
+#endif
     }
+
+#ifndef TIZEN_FEATURE_QUEUE2_MODIFICATION
     if (do_seek)
       perform_seek_to_offset (queue, new_writing_pos);
+#endif
 
     update_cur_level (queue, queue->current);
 
@@ -3175,7 +3245,11 @@ static void
 gst_queue2_loop (GstPad * pad)
 {
   GstQueue2 *queue;
+#ifdef TIZEN_FEATURE_RTSPSRC_MODIFICATION
+  GstFlowReturn ret = GST_FLOW_OK;
+#else
   GstFlowReturn ret;
+#endif
 
   queue = GST_QUEUE2 (GST_PAD_PARENT (pad));
 
@@ -3202,7 +3276,14 @@ gst_queue2_loop (GstPad * pad)
     if (started)
       g_timer_continue (queue->out_timer);
   }
+#ifdef TIZEN_FEATURE_RTSPSRC_MODIFICATION
+  /* if buffering mode is GST_BUFFERING_LIVE, it is rtsp streaming */
+  if (!((queue->mode == GST_BUFFERING_LIVE) && queue->is_buffering)) {
+    ret = gst_queue2_push_one (queue);
+  }
+#else
   ret = gst_queue2_push_one (queue);
+#endif
   queue->srcresult = ret;
   queue->sinkresult = ret;
   if (ret != GST_FLOW_OK)
@@ -3463,15 +3544,25 @@ gst_queue2_handle_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
                 range_stop = 0;
                 break;
               }
+#ifdef TIZEN_FEATURE_QUEUE2_MODIFICATION
+              range_start =
+                  gst_util_uint64_scale (GST_FORMAT_PERCENT_MAX,
+                  queued_ranges->reading_pos, duration);
+#else
               range_start =
                   gst_util_uint64_scale (GST_FORMAT_PERCENT_MAX,
                   queued_ranges->offset, duration);
+#endif
               range_stop =
                   gst_util_uint64_scale (GST_FORMAT_PERCENT_MAX,
                   queued_ranges->writing_pos, duration);
               break;
             case GST_FORMAT_BYTES:
+#ifdef TIZEN_FEATURE_QUEUE2_MODIFICATION
+              range_start = queued_ranges->reading_pos;
+#else
               range_start = queued_ranges->offset;
+#endif
               range_stop = queued_ranges->writing_pos;
               break;
             default:
@@ -3499,7 +3590,11 @@ gst_queue2_handle_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
       GstQuery *upstream;
 
       upstream = gst_query_new_scheduling ();
+#ifdef TIZEN_FEATURE_QUEUE2_MODIFICATION
+      if (!(QUEUE_IS_USING_QUEUE (queue)) && !gst_pad_peer_query (queue->sinkpad, upstream)) {
+#else
       if (!gst_pad_peer_query (queue->sinkpad, upstream)) {
+#endif
         gst_query_unref (upstream);
         goto peer_failed;
       }
@@ -3507,6 +3602,16 @@ gst_queue2_handle_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
       gst_query_parse_scheduling (upstream, &flags, NULL, NULL, NULL);
       gst_query_unref (upstream);
 
+#ifdef TIZEN_FEATURE_QUEUE2_MODIFICATION
+      if (!(flags & GST_SCHEDULING_FLAG_SEEKABLE)) {
+        GST_DEBUG_OBJECT(queue, "peer can support only push mode");
+        gst_query_set_scheduling (query, flags, 0, -1, 0);
+        gst_query_add_scheduling_mode (query, GST_PAD_MODE_PUSH);
+        break;
+      }
+#endif
+      GST_DEBUG_OBJECT(queue, "peer can support pull mode");
+
       /* we can operate in pull mode when we are using a tempfile */
       pull_mode = !QUEUE_IS_USING_QUEUE (queue);
 
@@ -3819,6 +3924,11 @@ gst_queue2_change_state (GstElement * element, GstStateChange transition)
       gst_pad_mark_reconfigure (queue->srcpad);
       break;
     case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
+#ifdef TIZEN_FEATURE_QUEUE2_MODIFICATION
+      GST_QUEUE2_MUTEX_LOCK (queue);
+      queue->is_buffering = FALSE;
+      GST_QUEUE2_MUTEX_UNLOCK (queue);
+#endif
       break;
     default:
       break;
@@ -3982,6 +4092,11 @@ gst_queue2_set_property (GObject * object,
     case PROP_USE_BITRATE_QUERY:
       queue->use_bitrate_query = g_value_get_boolean (value);
       break;
+#ifdef TIZEN_FEATURE_RTSPSRC_MODIFICATION
+    case PROP_BUFFER_MODE:
+      queue->mode = g_value_get_enum (value);
+      break;
+#endif
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -4083,6 +4198,11 @@ gst_queue2_get_property (GObject * object,
       g_value_set_uint64 (value, (guint64) bitrate);
       break;
     }
+#ifdef TIZEN_FEATURE_RTSPSRC_MODIFICATION
+    case PROP_BUFFER_MODE:
+      g_value_set_enum (value, queue->mode);
+      break;
+#endif
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
index 5e8fa9a..5466b56 100644 (file)
@@ -153,6 +153,7 @@ struct _GstQueue2
   /* list of downloaded areas and the current area */
   GstQueue2Range *ranges;
   GstQueue2Range *current;
+
   /* we need this to send the first new segment event of the stream
    * because we can't save it on the file */
   gboolean segment_event_received;
index fb14df6..ad4e7b1 100644 (file)
@@ -99,7 +99,14 @@ GST_STATIC_PAD_TEMPLATE ("src",
 
 /* Require at least 2kB of data before we attempt typefinding in chain-mode.
  * 128kB is massive overkill for the maximum, but doesn't do any harm */
+#ifdef TIZEN_PROFILE_TV
+/* TV demuxer needs 4*1024 as min size to match demuxer, if not
+ * sometimes can't find correct demuxer
+ */
+#define TYPE_FIND_MIN_SIZE   (4*1024)
+#else
 #define TYPE_FIND_MIN_SIZE   (2*1024)
+#endif
 #define TYPE_FIND_MAX_SIZE (128*1024)
 
 /* TypeFind signals and args */
index 3ad3d1b..0025f7c 100644 (file)
@@ -1,17 +1,17 @@
 # Bulgarian translation of gstreamer.
 # Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Free Software Fondation, Inc.
-# Copyright (C) 2011, 2016, 2017 Free Software Fondation, Inc.
+# Copyright (C) 2011, 2016, 2017, 2019 Free Software Fondation, Inc.
 # This file is distributed under the same license as the gstreamer package.
 # Alexander Shopov <ash@kambanaria.org>, 2005, 2006, 2007, 2008, 2009, 2010.
-# Alexander Shopov <ash@kambanaria.org>, 2011, 2016, 2017.
+# Alexander Shopov <ash@kambanaria.org>, 2011, 2016, 2017, 2019.
 #
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gstreamer 1.12.0\n"
+"Project-Id-Version: gstreamer 1.16.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:37+0000\n"
-"PO-Revision-Date: 2017-05-08 11:35+0200\n"
+"POT-Creation-Date: 2019-04-19 00:15+0100\n"
+"PO-Revision-Date: 2019-09-04 08:49+0200\n"
 "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
 "Language-Team: Bulgarian <dict@ludost.net>\n"
 "Language: bg\n"
@@ -21,830 +21,988 @@ msgstr ""
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
 
+#: gst/gst.c:250
 msgid "Print the GStreamer version"
 msgstr "Отпечатване на версията на GStreamer"
 
+#: gst/gst.c:252
 msgid "Make all warnings fatal"
 msgstr "Всички предупреждения да са фатални"
 
+#: gst/gst.c:256
 msgid "Print available debug categories and exit"
 msgstr "Отпечатване на наличните категории за изчистване на грешки и изход"
 
-msgid ""
-"Default debug level from 1 (only error) to 9 (anything) or 0 for no output"
-msgstr ""
-"Стандартното ниво за изчистване на грешки — от 1 (само грешки) до 9 (всичко) "
-"или 0 — без никакви съобщения за изчистване на грешки"
+#: gst/gst.c:260
+msgid "Default debug level from 1 (only error) to 9 (anything) or 0 for no output"
+msgstr "Стандартното ниво за изчистване на грешки — от 1 (само грешки) до 9 (всичко) или 0 — без никакви съобщения за изчистване на грешки"
 
+#: gst/gst.c:262
 msgid "LEVEL"
 msgstr "НИВО"
 
-msgid ""
-"Comma-separated list of category_name:level pairs to set specific levels for "
-"the individual categories. Example: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
-msgstr ""
-"Списък от двойки име_на_категория:ниво разделени със запетаи. Той указва "
-"конкретните нива за съобщения за изчистване на грешки на отделните "
-"категории. Например: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
+#: gst/gst.c:264
+msgid "Comma-separated list of category_name:level pairs to set specific levels for the individual categories. Example: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
+msgstr "Списък от двойки име_на_категория:ниво разделени със запетаи. Той указва конкретните нива за съобщения за изчистване на грешки на отделните категории. Например: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
 
+#: gst/gst.c:267
 msgid "LIST"
 msgstr "СПИСЪК"
 
+#: gst/gst.c:269
 msgid "Disable colored debugging output"
-msgstr "СпиÑ\80ане Ð½Ð° Ð¾Ñ\86веÑ\82ениÑ\82е Ñ\81Ñ\8aобÑ\89ениÑ\8f за изчистване на грешки"
+msgstr "Ð\91ез Ð¾Ñ\86веÑ\82Ñ\8fване Ð½Ð° Ñ\81Ñ\8aобÑ\89ениÑ\8fÑ\82а за изчистване на грешки"
 
-msgid ""
-"Changes coloring mode of the debug log. Possible modes: off, on, disable, "
-"auto, unix"
-msgstr ""
-"Смяна на режима на оцветяване на съобщенията за изчистване на грешки. "
-"Възможните стойности са: „off“ (изключване), „on“ (включване), "
-"„disable“ (спиране), „auto“ (автоматично), „unix“ (стандартно за unix)"
+#: gst/gst.c:273
+msgid "Changes coloring mode of the debug log. Possible modes: off, on, disable, auto, unix"
+msgstr "Смяна на режима на оцветяване на съобщенията за изчистване на грешки. Възможните стойности са: „off“ (изключване), „on“ (включване), „disable“ (спиране), „auto“ (автоматично), „unix“ (стандартно за unix)"
 
+#: gst/gst.c:277
 msgid "Disable debugging"
-msgstr "СпиÑ\80ане Ð½Ð° Ñ\81Ñ\8aобÑ\89ениÑ\8fÑ\82а за изчистване на грешки"
+msgstr "Ð\91ез Ñ\81Ñ\8aобÑ\89ениÑ\8f за изчистване на грешки"
 
+#: gst/gst.c:281
 msgid "Enable verbose plugin loading diagnostics"
 msgstr "Включване на подробни съобщения при зареждане на приставка"
 
+#: gst/gst.c:285
 msgid "Colon-separated paths containing plugins"
 msgstr "Пътища с приставки, разделени с двоеточие"
 
+#: gst/gst.c:285
 msgid "PATHS"
 msgstr "ПЪТИЩА"
 
-msgid ""
-"Comma-separated list of plugins to preload in addition to the list stored in "
-"environment variable GST_PLUGIN_PATH"
-msgstr ""
-"Списък от приставки, разделени със запетая, които да бъдат предварително "
-"заредени в допълнение към тези от списъка в променливата на средата "
-"GST_PPLUGIN_PATH"
+#: gst/gst.c:288
+msgid "Comma-separated list of plugins to preload in addition to the list stored in environment variable GST_PLUGIN_PATH"
+msgstr "Списък от приставки, разделени със запетая, които да бъдат предварително заредени в допълнение към тези от списъка в променливата на средата GST_PPLUGIN_PATH"
 
+#: gst/gst.c:290
 msgid "PLUGINS"
 msgstr "ПРИСТАВКИ"
 
+#: gst/gst.c:293
 msgid "Disable trapping of segmentation faults during plugin loading"
-msgstr ""
-"Спиране на прихващането на сегментационни грешки по времето на зареждане на "
-"приставка"
+msgstr "Без прихващане на сегментационни грешки по времето на зареждане на приставка"
 
+#: gst/gst.c:298
 msgid "Disable updating the registry"
-msgstr "РегиÑ\81Ñ\82Ñ\8aÑ\80Ñ\8aÑ\82 Ð´Ð° Ð½Ðµ Ñ\81е Ð¿Ñ\80оÑ\87иÑ\82а"
+msgstr "Ð\91ез Ð¿Ñ\80оÑ\87иÑ\82ане Ð½Ð° Ñ\80егиÑ\81Ñ\82Ñ\8aÑ\80а"
 
+#: gst/gst.c:303
 msgid "Disable spawning a helper process while scanning the registry"
-msgstr "Без стартирането на спомагателен процес при изчитането на регистъра"
+msgstr "Без стартиране на спомагателен процес при изчитането на регистъра"
 
+#: gst/gst.c:308
 msgid "GStreamer Options"
 msgstr "Настройки на GStreamer"
 
+#: gst/gst.c:309
 msgid "Show GStreamer Options"
 msgstr "Показване на опциите на GStreamer"
 
+#: gst/gst.c:1012
 msgid "Unknown option"
 msgstr "Непозната опция"
 
+#: gst/gsterror.c:130
 msgid "GStreamer encountered a general core library error."
 msgstr "GStreamer получи обща грешка в основна библиотека."
 
-msgid ""
-"GStreamer developers were too lazy to assign an error code to this error."
-msgstr ""
-"Разработчиците на GStreamer са били прекалено мързеливи и не са задали код "
-"за грешка на този проблем."
+#: gst/gsterror.c:132 gst/gsterror.c:174 gst/gsterror.c:198 gst/gsterror.c:240
+msgid "GStreamer developers were too lazy to assign an error code to this error."
+msgstr "Разработчиците на GStreamer са били прекалено мързеливи и не са задали код за грешка на този проблем."
 
+#: gst/gsterror.c:135
 msgid "Internal GStreamer error: code not implemented."
 msgstr "Вътрешна грешка на GStreamer: кодът не е реализиран."
 
-msgid ""
-"GStreamer error: state change failed and some element failed to post a "
-"proper error message with the reason for the failure."
-msgstr ""
-"Грешка на GStreamer: неуспешна промяна на състоянието, а някой от елементите "
-"пропусна да подаде съобщение за грешка с причината за това."
+#: gst/gsterror.c:137
+msgid "GStreamer error: state change failed and some element failed to post a proper error message with the reason for the failure."
+msgstr "Грешка на GStreamer: неуспешна промяна на състоянието, а някой от елементите пропусна да подаде съобщение за грешка с причината за това."
 
+#: gst/gsterror.c:140
 msgid "Internal GStreamer error: pad problem."
 msgstr "Вътрешна грешка на GStreamer: проблем в допълването."
 
+#: gst/gsterror.c:142
 msgid "Internal GStreamer error: thread problem."
 msgstr "Вътрешна грешка на GStreamer: проблем с нишките."
 
+#: gst/gsterror.c:144
 msgid "GStreamer error: negotiation problem."
 msgstr "Вътрешна грешка на GStreamer: проблем с договарянето."
 
+#: gst/gsterror.c:146
 msgid "Internal GStreamer error: event problem."
 msgstr "Вътрешна грешка на GStreamer: проблем със събитията."
 
+#: gst/gsterror.c:148
 msgid "Internal GStreamer error: seek problem."
 msgstr "Вътрешна грешка на GStreamer: проблем при позиционирането."
 
+#: gst/gsterror.c:150
 msgid "Internal GStreamer error: caps problem."
 msgstr "Вътрешна грешка на GStreamer: проблем с възможностите."
 
+#: gst/gsterror.c:152
 msgid "Internal GStreamer error: tag problem."
 msgstr "Вътрешна грешка на GStreamer: проблем с етикетите."
 
+#: gst/gsterror.c:154
 msgid "Your GStreamer installation is missing a plug-in."
 msgstr "Липсва необходима приставка в тази инсталация на GStreamer"
 
+#: gst/gsterror.c:156
 msgid "GStreamer error: clock problem."
 msgstr "Грешка на GStreamer: проблем с часовника."
 
-msgid ""
-"This application is trying to use GStreamer functionality that has been "
-"disabled."
-msgstr ""
-"Това приложение се опитва да ползва функционалност на GStreamer, която е "
-"изключена."
+#: gst/gsterror.c:158
+msgid "This application is trying to use GStreamer functionality that has been disabled."
+msgstr "Това приложение се опитва да ползва функционалност на GStreamer, която е изключена."
 
+#: gst/gsterror.c:172
 msgid "GStreamer encountered a general supporting library error."
 msgstr "GStreamer получи обща грешка в помощна библиотека."
 
+#: gst/gsterror.c:177
 msgid "Could not initialize supporting library."
 msgstr "Помощната библиотека не може да бъде инициализирана."
 
+#: gst/gsterror.c:179
 msgid "Could not close supporting library."
 msgstr "Помощната библиотека не може да бъде затворена."
 
+#: gst/gsterror.c:181
 msgid "Could not configure supporting library."
 msgstr "Помощната библиотека не може да бъде настроена."
 
+#: gst/gsterror.c:183
 msgid "Encoding error."
 msgstr "Грешка при кодиране."
 
+#: gst/gsterror.c:196
 msgid "GStreamer encountered a general resource error."
 msgstr "GStreamer получи обща грешка в ресурс."
 
+#: gst/gsterror.c:201
 msgid "Resource not found."
 msgstr "Ресурсът не е открит."
 
+#: gst/gsterror.c:203
 msgid "Resource busy or not available."
 msgstr "Ресурсът е зает или не е достъпен."
 
+#: gst/gsterror.c:205
 msgid "Could not open resource for reading."
 msgstr "Ресурсът не може да бъде отворен за четене."
 
+#: gst/gsterror.c:207
 msgid "Could not open resource for writing."
 msgstr "Ресурсът не може да бъде отворен за запис."
 
+#: gst/gsterror.c:209
 msgid "Could not open resource for reading and writing."
 msgstr "Ресурсът не може да бъде отворен за четене и запис."
 
+#: gst/gsterror.c:211
 msgid "Could not close resource."
 msgstr "Ресурсът не може да бъде затворен."
 
+#: gst/gsterror.c:213
 msgid "Could not read from resource."
 msgstr "Не може да се чете от ресурса."
 
+#: gst/gsterror.c:215
 msgid "Could not write to resource."
 msgstr "Не може да се записва в ресурса."
 
+#: gst/gsterror.c:217
 msgid "Could not perform seek on resource."
 msgstr "Не може да се позиционира в ресурса."
 
+#: gst/gsterror.c:219
 msgid "Could not synchronize on resource."
 msgstr "Не може да се синхронизира по ресурса."
 
+#: gst/gsterror.c:221
 msgid "Could not get/set settings from/on resource."
 msgstr "Не може да се получи/зададе настройка от/на ресурса."
 
+#: gst/gsterror.c:223
 msgid "No space left on the resource."
 msgstr "Върху ресурса не е останало свободно място."
 
+#: gst/gsterror.c:225
 msgid "Not authorized to access resource."
 msgstr "Няма права за достъп до ресурса."
 
+#: gst/gsterror.c:238
 msgid "GStreamer encountered a general stream error."
 msgstr "GStreamer получи обща грешка в потока от данни."
 
+#: gst/gsterror.c:243
 msgid "Element doesn't implement handling of this stream. Please file a bug."
-msgstr ""
-"Елементът не осъществява обработката на този поток. Моля, подайте доклад за "
-"грешка."
+msgstr "Елементът не осъществява обработката на този поток. Моля, подайте доклад за грешка."
 
+#: gst/gsterror.c:246
 msgid "Could not determine type of stream."
 msgstr "Видът на потока от данни не може да бъде определен."
 
+#: gst/gsterror.c:248
 msgid "The stream is of a different type than handled by this element."
 msgstr "Потокът от данни не е от вида, който се обработва от елемента."
 
+#: gst/gsterror.c:251
 msgid "There is no codec present that can handle the stream's type."
 msgstr "Няма кодер за обработката на този вид поток от данни."
 
+#: gst/gsterror.c:253
 msgid "Could not decode stream."
 msgstr "Потокът от данни не може да бъде декодиран."
 
+#: gst/gsterror.c:255
 msgid "Could not encode stream."
 msgstr "Потокът от данни не може да бъде кодиран."
 
+#: gst/gsterror.c:257
 msgid "Could not demultiplex stream."
 msgstr "Потокът от данни не може да бъде разделен (демултиплексиран)."
 
+#: gst/gsterror.c:259
 msgid "Could not multiplex stream."
 msgstr "Потокът от данни не може да бъде уплътнен (мултиплексиран)."
 
+#: gst/gsterror.c:261
 msgid "The stream is in the wrong format."
 msgstr "Потокът е с грешен формат."
 
+#: gst/gsterror.c:263
 msgid "The stream is encrypted and decryption is not supported."
 msgstr "Потокът е шифриран. Дешифрирането му не се поддържа."
 
-msgid ""
-"The stream is encrypted and can't be decrypted because no suitable key has "
-"been supplied."
-msgstr ""
-"Потокът е шифриран. Дешифрирането му е невъзможно, защото не е подаден "
-"подходящ ключ."
+#: gst/gsterror.c:265
+msgid "The stream is encrypted and can't be decrypted because no suitable key has been supplied."
+msgstr "Потокът е шифриран. Дешифрирането му е невъзможно, защото не е подаден подходящ ключ."
 
+#: gst/gsterror.c:305
 #, c-format
 msgid "No error message for domain %s."
 msgstr "Няма съобщение за грешка за областта „%s“."
 
+#: gst/gsterror.c:313
 #, c-format
 msgid "No standard error message for domain %s and code %d."
 msgstr "Няма стандартно съобщение за грешка за областта „%s“ с код %d."
 
+#: gst/gstpipeline.c:562
 msgid "Selected clock cannot be used in pipeline."
 msgstr "Избраният часовник не може да се използва в конвейер."
 
+#: gst/gstregistry.c:1694
 #, c-format
 msgid "Error writing registry cache to %s: %s"
 msgstr "Грешка при запазване на кеша на регистъра в „%s“: %s"
 
+#: gst/gsttaglist.c:108
 msgid "title"
 msgstr "заглавие"
 
+#: gst/gsttaglist.c:108
 msgid "commonly used title"
 msgstr "популярно заглавие"
 
+#: gst/gsttaglist.c:111
 msgid "title sortname"
 msgstr "заглавие, ползва се при подреждане"
 
+#: gst/gsttaglist.c:111
 msgid "commonly used title for sorting purposes"
 msgstr "популярно заглавие, ползва се при подреждане"
 
+#: gst/gsttaglist.c:114
 msgid "artist"
 msgstr "изпълнител"
 
+#: gst/gsttaglist.c:115
 msgid "person(s) responsible for the recording"
 msgstr "отговорник/ци за записа"
 
+#: gst/gsttaglist.c:119
 msgid "artist sortname"
 msgstr "име на изпълнител, ползва се при подреждане"
 
+#: gst/gsttaglist.c:120
 msgid "person(s) responsible for the recording for sorting purposes"
 msgstr "отговорник/ци за записа, ползва се при подреждане"
 
+#: gst/gsttaglist.c:123
 msgid "album"
 msgstr "албум"
 
+#: gst/gsttaglist.c:124
 msgid "album containing this data"
 msgstr "албум съдържащ тези данни"
 
+#: gst/gsttaglist.c:127
 msgid "album sortname"
 msgstr "албум, ползва се при подреждане"
 
+#: gst/gsttaglist.c:128
 msgid "album containing this data for sorting purposes"
 msgstr "албум съдържащ тези данни, ползва се при подреждане"
 
+#: gst/gsttaglist.c:131
 msgid "album artist"
 msgstr "изпълнител на албум"
 
+#: gst/gsttaglist.c:132
 msgid "The artist of the entire album, as it should be displayed"
 msgstr "изпълнител на целия албум, ползва се при показване"
 
+#: gst/gsttaglist.c:136
 msgid "album artist sortname"
 msgstr "изпълнител на албум, ползва се при подреждане"
 
+#: gst/gsttaglist.c:137
 msgid "The artist of the entire album, as it should be sorted"
 msgstr "изпълнител на целия албум, ползва се при подреждане"
 
+#: gst/gsttaglist.c:139
 msgid "date"
 msgstr "дата"
 
+#: gst/gsttaglist.c:139
 msgid "date the data was created (as a GDate structure)"
 msgstr "дата на създаване на данните (като структура GDate)"
 
+#: gst/gsttaglist.c:141
 msgid "datetime"
 msgstr "момент"
 
+#: gst/gsttaglist.c:142
 msgid "date and time the data was created (as a GstDateTime structure)"
 msgstr "момент на създаване на данните (като структура GstDateTime)"
 
+#: gst/gsttaglist.c:146
 msgid "genre"
 msgstr "жанр"
 
+#: gst/gsttaglist.c:147
 msgid "genre this data belongs to"
 msgstr "жанр на тези данни"
 
+#: gst/gsttaglist.c:150
 msgid "comment"
 msgstr "коментар"
 
+#: gst/gsttaglist.c:151
 msgid "free text commenting the data"
 msgstr "свободен текст относно данните"
 
+#: gst/gsttaglist.c:154
 msgid "extended comment"
 msgstr "допълнителен коментар"
 
+#: gst/gsttaglist.c:155
 msgid "free text commenting the data in key=value or key[en]=comment form"
-msgstr ""
-"свободен текст относно данните във формат ключ=стойност или "
-"ключ[език]=коментар"
+msgstr "свободен текст относно данните във формат ключ=стойност или ключ[език]=коментар"
 
+#: gst/gsttaglist.c:159
 msgid "track number"
 msgstr "номер на песента"
 
+#: gst/gsttaglist.c:160
 msgid "track number inside a collection"
 msgstr "номер на песента в колекция"
 
+#: gst/gsttaglist.c:163
 msgid "track count"
 msgstr "брой песни"
 
+#: gst/gsttaglist.c:164
 msgid "count of tracks inside collection this track belongs to"
 msgstr "брой песните в колекцията, към която принадлежи тази песен"
 
+#: gst/gsttaglist.c:168
 msgid "disc number"
 msgstr "номер на диска"
 
+#: gst/gsttaglist.c:169
 msgid "disc number inside a collection"
 msgstr "номер на диска от колекция"
 
+#: gst/gsttaglist.c:172
 msgid "disc count"
 msgstr "брой дискове"
 
+#: gst/gsttaglist.c:173
 msgid "count of discs inside collection this disc belongs to"
 msgstr "брой дискове в колекция, към която принадлежи този диск"
 
+#: gst/gsttaglist.c:177
 msgid "location"
 msgstr "адрес"
 
-msgid ""
-"Origin of media as a URI (location, where the original of the file or stream "
-"is hosted)"
-msgstr ""
-"Произход на медията като адрес (мястото в Интернет, откъдето е оригиналният "
-"файл или поток)"
+#: gst/gsttaglist.c:177
+msgid "Origin of media as a URI (location, where the original of the file or stream is hosted)"
+msgstr "Произход на медията като адрес (мястото в Интернет, откъдето е оригиналният файл или поток)"
 
+#: gst/gsttaglist.c:182
 msgid "homepage"
 msgstr "сайт"
 
+#: gst/gsttaglist.c:183
 msgid "Homepage for this media (i.e. artist or movie homepage)"
 msgstr "Страница в Интернет за тази медия (напр. сайт на изпълнител или филм)"
 
+#: gst/gsttaglist.c:186
 msgid "description"
 msgstr "описание"
 
+#: gst/gsttaglist.c:187
 msgid "short text describing the content of the data"
 msgstr "кратък текст — съдържание"
 
+#: gst/gsttaglist.c:190
 msgid "version"
 msgstr "версия"
 
+#: gst/gsttaglist.c:190
 msgid "version of this data"
 msgstr "версия на тези данни"
 
+#: gst/gsttaglist.c:192
 msgid "ISRC"
 msgstr "ISRC"
 
+#: gst/gsttaglist.c:194
 msgid "International Standard Recording Code - see http://www.ifpi.org/isrc/"
 msgstr "Стандартен, международен код на запис — http://www.ifpi.org/isrc/"
 
+#: gst/gsttaglist.c:198
 msgid "organization"
 msgstr "организация"
 
+#: gst/gsttaglist.c:201
 msgid "copyright"
 msgstr "авторски права"
 
+#: gst/gsttaglist.c:201
 msgid "copyright notice of the data"
 msgstr "означение на авторските права на данните"
 
+#: gst/gsttaglist.c:203
 msgid "copyright uri"
 msgstr "адрес за авторски права"
 
+#: gst/gsttaglist.c:204
 msgid "URI to the copyright notice of the data"
 msgstr "адрес на означението на авторските права на данните"
 
+#: gst/gsttaglist.c:206
 msgid "encoded by"
 msgstr "кодирано от"
 
+#: gst/gsttaglist.c:206
 msgid "name of the encoding person or organization"
 msgstr "име на човека или организацията извършващи кодирането"
 
+#: gst/gsttaglist.c:210
 msgid "contact"
 msgstr "контакт"
 
+#: gst/gsttaglist.c:210
 msgid "contact information"
 msgstr "информация за контакт"
 
+#: gst/gsttaglist.c:212
 msgid "license"
 msgstr "лиценз"
 
+#: gst/gsttaglist.c:212
 msgid "license of data"
 msgstr "лиценз на данните"
 
+#: gst/gsttaglist.c:214
 msgid "license uri"
 msgstr "адрес на лиценза"
 
+#: gst/gsttaglist.c:215
 msgid "URI to the license of the data"
 msgstr "адрес на лиценза на данните"
 
+#: gst/gsttaglist.c:218
 msgid "performer"
 msgstr "изпълнител"
 
+#: gst/gsttaglist.c:219
 msgid "person(s) performing"
 msgstr "кой изпълнява данните"
 
+#: gst/gsttaglist.c:222
 msgid "composer"
 msgstr "композитор"
 
+#: gst/gsttaglist.c:223
 msgid "person(s) who composed the recording"
 msgstr "композитор/и на записа"
 
+#: gst/gsttaglist.c:227
 msgid "conductor"
 msgstr "диригент"
 
+#: gst/gsttaglist.c:228
 msgid "conductor/performer refinement"
 msgstr "информация за диригента или изпълнителя"
 
+#: gst/gsttaglist.c:231
 msgid "duration"
 msgstr "продължителност"
 
+#: gst/gsttaglist.c:231
 msgid "length in GStreamer time units (nanoseconds)"
 msgstr "продължителност в единици на GStreamer (наносекунди)"
 
+#: gst/gsttaglist.c:234
 msgid "codec"
 msgstr "кодер"
 
+#: gst/gsttaglist.c:235
 msgid "codec the data is stored in"
 msgstr "кодер, чрез който са съхранени данните"
 
+#: gst/gsttaglist.c:238
 msgid "video codec"
 msgstr "видео кодер"
 
+#: gst/gsttaglist.c:238
 msgid "codec the video data is stored in"
 msgstr "кодер, чрез който са съхранени видео данните"
 
+#: gst/gsttaglist.c:241
 msgid "audio codec"
 msgstr "аудио кодер"
 
+#: gst/gsttaglist.c:241
 msgid "codec the audio data is stored in"
 msgstr "кодер, чрез който са съхранени аудио данните"
 
+#: gst/gsttaglist.c:244
 msgid "subtitle codec"
 msgstr "кодер за субтитрите"
 
+#: gst/gsttaglist.c:244
 msgid "codec the subtitle data is stored in"
 msgstr "кодер, чрез който са съхранени данните на субтитрите"
 
+#: gst/gsttaglist.c:246
 msgid "container format"
 msgstr "информация за контейнера"
 
+#: gst/gsttaglist.c:247
 msgid "container format the data is stored in"
 msgstr "формат на контейнера, в който са съхранени данните"
 
+#: gst/gsttaglist.c:249
 msgid "bitrate"
 msgstr "скорост на битовете"
 
+#: gst/gsttaglist.c:249
 msgid "exact or average bitrate in bits/s"
 msgstr "точна или усреднена скорост на битовете"
 
+#: gst/gsttaglist.c:251
 msgid "nominal bitrate"
 msgstr "номинална скорост на битовете"
 
+#: gst/gsttaglist.c:251
 msgid "nominal bitrate in bits/s"
 msgstr "номинална скорост на битовете [bits/s]"
 
+#: gst/gsttaglist.c:253
 msgid "minimum bitrate"
 msgstr "минимална скорост на битовете"
 
+#: gst/gsttaglist.c:253
 msgid "minimum bitrate in bits/s"
 msgstr "минимална скорост на битовете [bits/s]"
 
+#: gst/gsttaglist.c:255
 msgid "maximum bitrate"
 msgstr "максимална скорост на битовете"
 
+#: gst/gsttaglist.c:255
 msgid "maximum bitrate in bits/s"
 msgstr "максимална скорост на битовете [bits/s]"
 
+#: gst/gsttaglist.c:258
 msgid "encoder"
 msgstr "кодер"
 
+#: gst/gsttaglist.c:258
 msgid "encoder used to encode this stream"
 msgstr "кодер, чрез който е кодиран този поток"
 
+#: gst/gsttaglist.c:261
 msgid "encoder version"
 msgstr "версия на кодера"
 
+#: gst/gsttaglist.c:262
 msgid "version of the encoder used to encode this stream"
 msgstr "версия на кодера, чрез който е кодиран този поток"
 
+#: gst/gsttaglist.c:264
 msgid "serial"
 msgstr "сер. №"
 
+#: gst/gsttaglist.c:264
 msgid "serial number of track"
 msgstr "сериен номер на песента"
 
+#: gst/gsttaglist.c:266
 msgid "replaygain track gain"
 msgstr "усилване на песента при изпълнение"
 
+#: gst/gsttaglist.c:266
 msgid "track gain in db"
 msgstr "усилване на песента [db]"
 
+#: gst/gsttaglist.c:268
 msgid "replaygain track peak"
 msgstr "максимално усилване на песента при изпълнение"
 
+#: gst/gsttaglist.c:268
 msgid "peak of the track"
 msgstr "максимално усилване на песента"
 
+#: gst/gsttaglist.c:270
 msgid "replaygain album gain"
 msgstr "усилване на албума при изпълнение"
 
+#: gst/gsttaglist.c:270
 msgid "album gain in db"
 msgstr "усилване на албума [db]"
 
+#: gst/gsttaglist.c:272
 msgid "replaygain album peak"
 msgstr "максимално усилване на албума при изпълнение"
 
+#: gst/gsttaglist.c:272
 msgid "peak of the album"
 msgstr "максимално усилване на албума"
 
+#: gst/gsttaglist.c:274
 msgid "replaygain reference level"
 msgstr "еталонно максимално усилване на песента при изпълнение"
 
+#: gst/gsttaglist.c:275
 msgid "reference level of track and album gain values"
 msgstr "еталонно ниво на усилването на песните и албумите"
 
+#: gst/gsttaglist.c:277
 msgid "language code"
 msgstr "езиков код"
 
+#: gst/gsttaglist.c:278
 msgid "language code for this stream, conforming to ISO-639-1 or ISO-639-2"
 msgstr "езиковият код на този поток според ISO-639-1 или ISO-639-2"
 
+#: gst/gsttaglist.c:281
 msgid "language name"
 msgstr "име на езика"
 
+#: gst/gsttaglist.c:282
 msgid "freeform name of the language this stream is in"
 msgstr "свободно име на езика на потока"
 
+#: gst/gsttaglist.c:284
 msgid "image"
 msgstr "изображение"
 
+#: gst/gsttaglist.c:284
 msgid "image related to this stream"
 msgstr "изображение свързано с този поток"
 
 #. TRANSLATORS: 'preview image' = image that shows a preview of the full image
+#: gst/gsttaglist.c:288
 msgid "preview image"
 msgstr "изображение за преглед"
 
+#: gst/gsttaglist.c:288
 msgid "preview image related to this stream"
 msgstr "изображение за преглед свързано с този поток"
 
+#: gst/gsttaglist.c:290
 msgid "attachment"
 msgstr "притурка"
 
+#: gst/gsttaglist.c:290
 msgid "file attached to this stream"
 msgstr "файл прикачен към този поток"
 
+#: gst/gsttaglist.c:293
 msgid "beats per minute"
 msgstr "такта в минута"
 
+#: gst/gsttaglist.c:294
 msgid "number of beats per minute in audio"
 msgstr "брой тактове в минута в аудио"
 
+#: gst/gsttaglist.c:296
 msgid "keywords"
 msgstr "ключови думи"
 
+#: gst/gsttaglist.c:296
 msgid "comma separated keywords describing the content"
 msgstr "ключови думи за съдържанието, разделени със запетаи"
 
+#: gst/gsttaglist.c:299
 msgid "geo location name"
 msgstr "местоположение"
 
-msgid ""
-"human readable descriptive location of where the media has been recorded or "
-"produced"
+#: gst/gsttaglist.c:300
+msgid "human readable descriptive location of where the media has been recorded or produced"
 msgstr "разбираемо описание на мястото на запис или създаване на медията"
 
+#: gst/gsttaglist.c:303
 msgid "geo location latitude"
 msgstr "географска ширина"
 
-msgid ""
-"geo latitude location of where the media has been recorded or produced in "
-"degrees according to WGS84 (zero at the equator, negative values for "
-"southern latitudes)"
-msgstr ""
-"географска ширина на мястото на запис или създаване на медията в градуси "
-"според WGS84 (0 при екватора, отрицателна в южното полукълбо)"
+#: gst/gsttaglist.c:304
+msgid "geo latitude location of where the media has been recorded or produced in degrees according to WGS84 (zero at the equator, negative values for southern latitudes)"
+msgstr "географска ширина на мястото на запис или създаване на медията в градуси според WGS84 (0 при екватора, отрицателна в южното полукълбо)"
 
+#: gst/gsttaglist.c:308
 msgid "geo location longitude"
 msgstr "географска дължина"
 
-msgid ""
-"geo longitude location of where the media has been recorded or produced in "
-"degrees according to WGS84 (zero at the prime meridian in Greenwich/UK,  "
-"negative values for western longitudes)"
-msgstr ""
-"географска дължина на мястото на запис или създаване на медията в градуси "
-"според WGS84 (0 при Гринуич, Великобритания, отрицателна в западното "
-"полукълбо)"
+#: gst/gsttaglist.c:309
+msgid "geo longitude location of where the media has been recorded or produced in degrees according to WGS84 (zero at the prime meridian in Greenwich/UK,  negative values for western longitudes)"
+msgstr "географска дължина на мястото на запис или създаване на медията в градуси според WGS84 (0 при Гринуич, Великобритания, отрицателна в западното полукълбо)"
 
+#: gst/gsttaglist.c:313
 msgid "geo location elevation"
 msgstr "надморска височина"
 
-msgid ""
-"geo elevation of where the media has been recorded or produced in meters "
-"according to WGS84 (zero is average sea level)"
-msgstr ""
-"надморска височина на мястото на запис или създаване на медията в метри "
-"според WGS84 (0 при средното морско равнище)"
+#: gst/gsttaglist.c:314
+msgid "geo elevation of where the media has been recorded or produced in meters according to WGS84 (zero is average sea level)"
+msgstr "надморска височина на мястото на запис или създаване на медията в метри според WGS84 (0 при средното морско равнище)"
 
+#: gst/gsttaglist.c:317
 msgid "geo location country"
 msgstr "държава по координати"
 
+#: gst/gsttaglist.c:318
 msgid "country (english name) where the media has been recorded or produced"
 msgstr "държавата на запис или създаване на медията (на английски)"
 
+#: gst/gsttaglist.c:321
 msgid "geo location city"
 msgstr "град по координати"
 
+#: gst/gsttaglist.c:322
 msgid "city (english name) where the media has been recorded or produced"
 msgstr "град на запис или създаване на медията (на английски)"
 
+#: gst/gsttaglist.c:325
 msgid "geo location sublocation"
 msgstr "квартал по координати"
 
-msgid ""
-"a location within a city where the media has been produced or created (e.g. "
-"the neighborhood)"
+#: gst/gsttaglist.c:326
+msgid "a location within a city where the media has been produced or created (e.g. the neighborhood)"
 msgstr "място в града на запис или създаване на медията (напр. квартал)"
 
+#: gst/gsttaglist.c:329
 msgid "geo location horizontal error"
 msgstr "хоризонтална грешка по координати"
 
+#: gst/gsttaglist.c:330
 msgid "expected error of the horizontal positioning measures (in meters)"
 msgstr "очаквана грешка по хоризонтал [m]"
 
+#: gst/gsttaglist.c:333
 msgid "geo location movement speed"
 msgstr "скорост по координати"
 
-msgid ""
-"movement speed of the capturing device while performing the capture in m/s"
+#: gst/gsttaglist.c:334
+msgid "movement speed of the capturing device while performing the capture in m/s"
 msgstr "скорост на движение на входното устройство при записа [m/s]"
 
+#: gst/gsttaglist.c:337
 msgid "geo location movement direction"
 msgstr "посока на движение по координати"
 
-msgid ""
-"indicates the movement direction of the device performing the capture of a "
-"media. It is represented as degrees in floating point representation, 0 "
-"means the geographic north, and increases clockwise"
-msgstr ""
-"посока на движение на входното устройство при записа. Стойността е в градуси "
-"в десетично представяне. 0 е географският север. Стойността расте по посока "
-"на часовниковата стрелка"
+#: gst/gsttaglist.c:338
+msgid "indicates the movement direction of the device performing the capture of a media. It is represented as degrees in floating point representation, 0 means the geographic north, and increases clockwise"
+msgstr "посока на движение на входното устройство при записа. Стойността е в градуси в десетично представяне. 0 е географският север. Стойността расте по посока на часовниковата стрелка"
 
+#: gst/gsttaglist.c:343
 msgid "geo location capture direction"
 msgstr "посока на заснемане по координати"
 
-msgid ""
-"indicates the direction the device is pointing to when capturing  a media. "
-"It is represented as degrees in floating point  representation, 0 means the "
-"geographic north, and increases clockwise"
-msgstr ""
-"посока на входното устройство при записа. Стойността е в градуси в десетично "
-"представяне. 0 е географският север. Стойността расте по посока на "
-"часовниковата стрелка"
+#: gst/gsttaglist.c:344
+msgid "indicates the direction the device is pointing to when capturing  a media. It is represented as degrees in floating point  representation, 0 means the geographic north, and increases clockwise"
+msgstr "посока на входното устройство при записа. Стойността е в градуси в десетично представяне. 0 е географският север. Стойността расте по посока на часовниковата стрелка"
 
 #. TRANSLATORS: 'show name' = 'TV/radio/podcast show name' here
+#: gst/gsttaglist.c:350
 msgid "show name"
 msgstr "име на шоу"
 
+#: gst/gsttaglist.c:351
 msgid "Name of the tv/podcast/series show the media is from"
-msgstr ""
-"Името на телевизионно или Интернет шоу, поредица от серии, от което е медията"
+msgstr "Името на телевизионно или Интернет шоу, поредица от серии, от което е медията"
 
 #. TRANSLATORS: 'show sortname' = 'TV/radio/podcast show name as used for sorting purposes' here
+#: gst/gsttaglist.c:356
 msgid "show sortname"
 msgstr "име на шоу за подреждане"
 
-msgid ""
-"Name of the tv/podcast/series show the media is from, for sorting purposes"
-msgstr ""
-"Името на телевизионно или Интернет шоу, поредица от серии, от което е "
-"медията, ползва се при подреждане"
+#: gst/gsttaglist.c:357
+msgid "Name of the tv/podcast/series show the media is from, for sorting purposes"
+msgstr "Името на телевизионно или Интернет шоу, поредица от серии, от което е медията, ползва се при подреждане"
 
+#: gst/gsttaglist.c:360
 msgid "episode number"
 msgstr "номер на епизода"
 
+#: gst/gsttaglist.c:361
 msgid "The episode number in the season the media is part of"
 msgstr "Номерът на епизода в поредицата за сезона"
 
+#: gst/gsttaglist.c:364
 msgid "season number"
 msgstr "номер на сезона"
 
+#: gst/gsttaglist.c:365
 msgid "The season number of the show the media is part of"
 msgstr "Номерът на сезона в поредицата, от която е медията"
 
+#: gst/gsttaglist.c:368
 msgid "lyrics"
 msgstr "текст"
 
+#: gst/gsttaglist.c:368
 msgid "The lyrics of the media, commonly used for songs"
 msgstr "Текстът на медията, често се използва за песни"
 
+#: gst/gsttaglist.c:371
 msgid "composer sortname"
 msgstr "композитор при подреждане"
 
+#: gst/gsttaglist.c:372
 msgid "person(s) who composed the recording, for sorting purposes"
 msgstr "Композитор/и за записа, ползва се при подреждане"
 
+#: gst/gsttaglist.c:374
 msgid "grouping"
 msgstr "групиране"
 
-msgid ""
-"Groups related media that spans multiple tracks, like the different pieces "
-"of a concerto. It is a higher level than a track, but lower than an album"
-msgstr ""
-"Сбира в една група произведение, което е от няколко части, напр. частите на "
-"концерт. Това ниво е по-високо от песен, но по-ниско от албум."
+#: gst/gsttaglist.c:375
+msgid "Groups related media that spans multiple tracks, like the different pieces of a concerto. It is a higher level than a track, but lower than an album"
+msgstr "Сбира в една група произведение, което е от няколко части, напр. частите на концерт. Това ниво е по-високо от песен, но по-ниско от албум."
 
+#: gst/gsttaglist.c:379
 msgid "user rating"
 msgstr "оценка"
 
-msgid ""
-"Rating attributed by a user. The higher the rank, the more the user likes "
-"this media"
-msgstr ""
-"Оценка според потребителя. По-висока стойност означава по-силно предпочитание"
+#: gst/gsttaglist.c:380
+msgid "Rating attributed by a user. The higher the rank, the more the user likes this media"
+msgstr "Оценка според потребителя. По-висока стойност означава по-силно предпочитание"
 
+#: gst/gsttaglist.c:383
 msgid "device manufacturer"
 msgstr "производител на устройство"
 
+#: gst/gsttaglist.c:384
 msgid "Manufacturer of the device used to create this media"
 msgstr "Производител на устройството, с което е създадена медията"
 
+#: gst/gsttaglist.c:386
 msgid "device model"
 msgstr "модел на устройство"
 
+#: gst/gsttaglist.c:387
 msgid "Model of the device used to create this media"
 msgstr "Модел на устройството, с което е създадена медията"
 
+#: gst/gsttaglist.c:389
 msgid "application name"
 msgstr "име на програма"
 
+#: gst/gsttaglist.c:390
 msgid "Application used to create the media"
 msgstr "Програмата, с което е създадена медията"
 
+#: gst/gsttaglist.c:392
 msgid "application data"
 msgstr "данни от програмата"
 
+#: gst/gsttaglist.c:393
 msgid "Arbitrary application data to be serialized into the media"
 msgstr "Произволни данни от програма, поставени в медията"
 
+#: gst/gsttaglist.c:395
 msgid "image orientation"
 msgstr "ориентация"
 
+#: gst/gsttaglist.c:396
 msgid "How the image should be rotated or flipped before display"
 msgstr "Как да се завърти изображението при показване"
 
+#: gst/gsttaglist.c:399
 msgid "publisher"
 msgstr "издател"
 
+#: gst/gsttaglist.c:400
 msgid "Name of the label or publisher"
 msgstr "Името на издателя или издателската къща"
 
+#: gst/gsttaglist.c:403
 msgid "interpreted-by"
 msgstr "интерпретирано от"
 
+#: gst/gsttaglist.c:404
 msgid "Information about the people behind a remix and similar interpretations"
 msgstr "Информация за хората създали ремикс или друга интерпретация"
 
+#: gst/gsttaglist.c:408
 msgid "midi-base-note"
 msgstr "нота за midi"
 
+#: gst/gsttaglist.c:408
 msgid "Midi note number of the audio track."
 msgstr "Номер на нотата по Midi за песента"
 
+#: gst/gsttaglist.c:411
 msgid "private-data"
 msgstr "собствени данни"
 
+#: gst/gsttaglist.c:411
 msgid "Private data"
 msgstr "Собствени данни"
 
+#: gst/gsttaglist.c:451
 msgid ", "
 msgstr ", "
 
+#: gst/gsturi.c:648
 #, c-format
 msgid "No URI handler for the %s protocol found"
 msgstr "Няма модул за обработка на протокола „%s“"
 
+#: gst/gsturi.c:823
 #, c-format
 msgid "URI scheme '%s' not supported"
 msgstr "Схемата „%s“ в адреса не се поддържа"
 
+#: gst/gstutils.c:2632 tools/gst-launch.c:325
 #, c-format
 msgid "ERROR: from element %s: %s\n"
 msgstr "ГРЕШКА: от елемент „%s“: %s\n"
 
+#: gst/gstutils.c:2634 tools/gst-launch.c:327 tools/gst-launch.c:697
 #, c-format
 msgid ""
 "Additional debug info:\n"
@@ -853,351 +1011,422 @@ msgstr ""
 "Допълнителна информация за изчистване на грешки:\n"
 "%s\n"
 
+#: gst/parse/grammar.y:216
 #, c-format
 msgid "link has no source [sink=%s@%p]"
 msgstr "връзка без източник [sink=%s@%p]"
 
+#: gst/parse/grammar.y:221
 #, c-format
 msgid "link has no sink [source=%s@%p]"
 msgstr "връзка без приемник [source=%s@%p]"
 
+#: gst/parse/grammar.y:413
 #, c-format
 msgid "no property \"%s\" in element \"%s\""
 msgstr "елементът „2$%s“ няма свойството „1$%s“"
 
+#: gst/parse/grammar.y:454
 #, c-format
 msgid "could not set property \"%s\" in element \"%s\" to \"%s\""
 msgstr "свойството „%s“ на елемента „%s“ не може да се зададе да е „%s“"
 
+#: gst/parse/grammar.y:507
 msgid "Delayed linking failed."
 msgstr "Неуспешно отложено свързване."
 
+#: gst/parse/grammar.y:719 gst/parse/grammar.y:724
 #, c-format
 msgid "could not link %s to %s, %s can't handle caps %s"
 msgstr "„%s“ не може да се свърже към „%s“, „%s“ не поддържа „%s“"
 
+#: gst/parse/grammar.y:729
 #, c-format
 msgid "could not link %s to %s, neither element can handle caps %s"
 msgstr "„%s“ не може да се свърже към „%s“, никой от тях не поддържа „%s“"
 
+#: gst/parse/grammar.y:733
 #, c-format
 msgid "could not link %s to %s with caps %s"
 msgstr "„%s“ не може да се свърже към „%s“ с възможност „%s“"
 
+#: gst/parse/grammar.y:739
 #, c-format
 msgid "could not link %s to %s"
 msgstr "„%s“ не може да се свърже към „%s“"
 
+#: gst/parse/grammar.y:816
 #, c-format
 msgid "no element \"%s\""
 msgstr "елементът „%s“ липсва"
 
+#: gst/parse/grammar.y:877
 #, c-format
 msgid "unexpected reference \"%s\" - ignoring"
 msgstr "неочакван указател „%s“ — прескача се"
 
+#: gst/parse/grammar.y:883
 #, c-format
 msgid "unexpected pad-reference \"%s\" - ignoring"
 msgstr "неочакван указател за допълване „%s“ — прескача се"
 
+#: gst/parse/grammar.y:915 gst/parse/grammar.y:924
 #, c-format
 msgid "could not parse caps \"%s\""
 msgstr "възможностите „%s“ не могат да бъдат анализирани"
 
+#: gst/parse/grammar.y:952
 #, c-format
 msgid "no sink element for URI \"%s\""
 msgstr "няма елемент-приемник за адрес „%s“"
 
+#: gst/parse/grammar.y:971
 #, c-format
 msgid "no source element for URI \"%s\""
 msgstr "няма елемент-източник за адрес „%s“"
 
+#: gst/parse/grammar.y:1061
 msgid "syntax error"
 msgstr "синтактична грешка"
 
+#: gst/parse/grammar.y:1084
 #, c-format
 msgid "specified empty bin \"%s\", not allowed"
 msgstr "указан е празен резервоар „%s“, това е забранено"
 
+#: gst/parse/grammar.y:1094
 #, c-format
 msgid "no bin \"%s\", unpacking elements"
 msgstr "няма резервоар на име „%s“, елементите се разпакетират"
 
+#: gst/parse/grammar.y:1125
 msgid "empty pipeline not allowed"
 msgstr "не е позволен празен конвейер"
 
+#: libs/gst/base/gstbasesink.c:1210
 msgid "Pipeline construction is invalid, please add queues."
-msgstr ""
+msgstr "Неправилно конструиран конвейер. Добавете опашки."
 
+#: libs/gst/base/gstbasesink.c:3004
 msgid "A lot of buffers are being dropped."
 msgstr "Много буфери се пропускат."
 
+#: libs/gst/base/gstbasesink.c:3496
 msgid "Internal data flow problem."
 msgstr "Вътрешен проблем на потока от данни."
 
+#: libs/gst/base/gstbasesink.c:4222 libs/gst/base/gstbasesrc.c:2708
 msgid "Internal data flow error."
 msgstr "Вътрешна грешка на потока от данни."
 
+#: libs/gst/base/gstbasesrc.c:2638
 msgid "Internal clock error."
 msgstr "Вътрешна грешка на часовника."
 
+#: libs/gst/base/gstbasesrc.c:2666 plugins/elements/gstdownloadbuffer.c:842
+#: plugins/elements/gstdownloadbuffer.c:1265
 msgid "Failed to map buffer."
 msgstr "Неуспешно поместване на буфера в паметта."
 
+#: plugins/elements/gstcapsfilter.c:128
 msgid "Filter caps"
 msgstr "Възможности на филтър"
 
-msgid ""
-"Restrict the possible allowed capabilities (NULL means ANY). Setting this "
-"property takes a reference to the supplied GstCaps object."
-msgstr ""
-"Ограничаване на позволените възможности („NULL“ означава всякакви). "
-"Задаването на това свойство поема указател към подадения обект GstCaps."
+#: plugins/elements/gstcapsfilter.c:129
+msgid "Restrict the possible allowed capabilities (NULL means ANY). Setting this property takes a reference to the supplied GstCaps object."
+msgstr "Ограничаване на позволените възможности („NULL“ означава всякакви). Задаването на това свойство поема указател към подадения обект GstCaps."
 
+#: plugins/elements/gstcapsfilter.c:136
 msgid "Caps Change Mode"
 msgstr "Режим на смяна на възможностите"
 
+#: plugins/elements/gstcapsfilter.c:137
 msgid "Filter caps change behaviour"
 msgstr "Филтриране на поведението на смяна на възможностите"
 
+#: plugins/elements/gstdownloadbuffer.c:927 plugins/elements/gstqueue2.c:1792
 msgid "No Temp directory specified."
 msgstr "Не е указана временна папка"
 
+#: plugins/elements/gstdownloadbuffer.c:933 plugins/elements/gstqueue2.c:1798
 #, c-format
 msgid "Could not create temp file \"%s\"."
 msgstr "Не може да се създаде временният файл „%s“."
 
+#: plugins/elements/gstdownloadbuffer.c:941 plugins/elements/gstfilesrc.c:537
+#: plugins/elements/gstqueue2.c:1806
 #, c-format
 msgid "Could not open file \"%s\" for reading."
 msgstr "Файлът „%s“ не може да се отвори за четене."
 
+#: plugins/elements/gstdownloadbuffer.c:1274 plugins/elements/gstqueue2.c:2225
 msgid "Error while writing to download file."
 msgstr "Грешка при запис в сваления файл."
 
+#: plugins/elements/gstfilesink.c:404
 msgid "No file name specified for writing."
 msgstr "Не е указано име на файл за запис."
 
+#: plugins/elements/gstfilesink.c:410
 #, c-format
 msgid "Could not open file \"%s\" for writing."
 msgstr "Файлът „%s“ не може да се отвори за запис."
 
+#: plugins/elements/gstfilesink.c:422 plugins/elements/gstfilesink.c:426
 #, c-format
 msgid "Error closing file \"%s\"."
 msgstr "Грешка при затварянето на файла „%s“."
 
+#: plugins/elements/gstfilesink.c:605
 #, c-format
 msgid "Error while seeking in file \"%s\"."
 msgstr "Грешка при позициониране във файл „%s“."
 
+#: plugins/elements/gstfilesink.c:613 plugins/elements/gstfilesink.c:620
+#: plugins/elements/gstfilesink.c:793 plugins/elements/gstfilesink.c:848
 #, c-format
 msgid "Error while writing to file \"%s\"."
 msgstr "Грешка при запис във файл „%s“."
 
+#: plugins/elements/gstfilesrc.c:525
 msgid "No file name specified for reading."
 msgstr "Не е указано име на файл за четене."
 
+#: plugins/elements/gstfilesrc.c:546
 #, c-format
 msgid "Could not get info on \"%s\"."
 msgstr "Не може да се получи информация за „%s“."
 
+#: plugins/elements/gstfilesrc.c:552
 #, c-format
 msgid "\"%s\" is a directory."
 msgstr "„%s“ е папка."
 
+#: plugins/elements/gstfilesrc.c:558
 #, c-format
 msgid "File \"%s\" is a socket."
 msgstr "Файлът „%s“ е гнездо."
 
+#: plugins/elements/gstidentity.c:722
 msgid "Failed after iterations as requested."
 msgstr "Грешка след заявения брой повторения."
 
+#: plugins/elements/gstidentity.c:903
 msgid "eos-after and error-after can't both be defined."
-msgstr ""
+msgstr "Невъзможно е едновременното задаване на „eos-after“ и „error-after“."
 
+#: plugins/elements/gsttypefindelement.c:251
 msgid "caps"
 msgstr "възможности"
 
+#: plugins/elements/gsttypefindelement.c:252
 msgid "detected capabilities in stream"
 msgstr "засечените възможности на потока"
 
+#: plugins/elements/gsttypefindelement.c:255
 msgid "minimum"
 msgstr "минимум"
 
+#: plugins/elements/gsttypefindelement.c:260
 msgid "force caps"
 msgstr "принудително прилагане на възможности"
 
+#: plugins/elements/gsttypefindelement.c:261
 msgid "force caps without doing a typefind"
 msgstr "принудително прилагане на възможности без търсене на видовете"
 
+#: plugins/elements/gsttypefindelement.c:987
+#: plugins/elements/gsttypefindelement.c:1009
 msgid "Stream doesn't contain enough data."
 msgstr "Потокът не съдържа достатъчно данни."
 
+#: plugins/elements/gsttypefindelement.c:1129
 msgid "Stream contains no data."
 msgstr "Потокът не съдържа никакви данни"
 
-#, fuzzy, c-format
+#: tools/gst-inspect.c:290
+#, c-format
 msgid "%sImplemented Interfaces%s:\n"
-msgstr "Реализирани интерфейси:\n"
+msgstr "%sРеализирани интерфейси%s:\n"
 
+#: tools/gst-inspect.c:400
 msgid "readable"
 msgstr "с права за четене"
 
+#: tools/gst-inspect.c:405
 msgid "writable"
 msgstr "с права за запис"
 
+#: tools/gst-inspect.c:410
 msgid "deprecated"
 msgstr "изоставен"
 
+#: tools/gst-inspect.c:414
 msgid "controllable"
 msgstr "може да се контролира"
 
+#: tools/gst-inspect.c:420
 msgid "changeable in NULL, READY, PAUSED or PLAYING state"
-msgstr ""
-"може да се променя само в състоянията NULL (зануляване), READY (готовност), "
-"PAUSED (на пауза) или PLAYING (изпълнение)"
+msgstr "може да се променя само в състоянията NULL (зануляване), READY (готовност), PAUSED (на пауза) или PLAYING (изпълнение)"
 
+#: tools/gst-inspect.c:423
 msgid "changeable only in NULL, READY or PAUSED state"
-msgstr ""
-"може да се променя само в състоянията NULL (зануляване), READY (готовност) "
-"или PAUSED (на пауза)"
+msgstr "може да се променя само в състоянията NULL (зануляване), READY (готовност) или PAUSED (на пауза)"
 
+#: tools/gst-inspect.c:426
 msgid "changeable only in NULL or READY state"
-msgstr ""
-"може да се променя само в състоянията NULL (зануляване) или READY (готовност)"
+msgstr "може да се променя само в състоянията NULL (зануляване) или READY (готовност)"
 
+#: tools/gst-inspect.c:1131
 msgid "Blacklisted files:"
 msgstr "Забранени файлове:"
 
-#, fuzzy, c-format
+#: tools/gst-inspect.c:1143 tools/gst-inspect.c:1276
+#, c-format
 msgid "%sTotal count%s: %s"
-msgstr "Общ брой:"
+msgstr "%sОбщ брой%s: %s"
 
+#: tools/gst-inspect.c:1145
 #, c-format
 msgid "%d blacklisted file"
 msgid_plural "%d blacklisted files"
 msgstr[0] "%d забранен файл"
 msgstr[1] "%d забранени файла"
 
+#: tools/gst-inspect.c:1278
 #, c-format
 msgid "%d plugin"
 msgid_plural "%d plugins"
 msgstr[0] "%d приставка"
 msgstr[1] "%d приставки"
 
+#: tools/gst-inspect.c:1281
 #, c-format
 msgid "%d blacklist entry"
 msgid_plural "%d blacklist entries"
 msgstr[0] "%d забранен запис"
 msgstr[1] "%d забранени записа"
 
+#: tools/gst-inspect.c:1286
 #, c-format
 msgid "%d feature"
 msgid_plural "%d features"
 msgstr[0] "%d свойство"
 msgstr[1] "%d свойства"
 
+#: tools/gst-inspect.c:1953
 msgid "Print all elements"
 msgstr "Отпечатване на всички елементи"
 
+#: tools/gst-inspect.c:1955
 msgid "Print list of blacklisted files"
 msgstr "Отпечатване на списъка със забранените файлове"
 
+#: tools/gst-inspect.c:1957
 msgid ""
-"Print a machine-parsable list of features the specified plugin or all "
-"plugins provide.\n"
-"                                       Useful in connection with external "
-"automatic plugin installation mechanisms"
+"Print a machine-parsable list of features the specified plugin or all plugins provide.\n"
+"                                       Useful in connection with external automatic plugin installation mechanisms"
 msgstr ""
-"Отпечатване на списък с възможностите на указаната приставка или всички "
-"приставки.\n"
-"                                       Удобно във връзка с външни механизми "
-"за автоматично инсталиране на приставки"
+"Отпечатване на списък с възможностите на указаната приставка или всички приставки.\n"
+"                                       Удобно във връзка с външни механизми за автоматично инсталиране на приставки"
 
+#: tools/gst-inspect.c:1962
 msgid "List the plugin contents"
 msgstr "Отпечатване на съдържанието на приставките"
 
-msgid ""
-"A slashes ('/') separated list of types of elements (also known as klass) to "
-"list. (unordered)"
+#: tools/gst-inspect.c:1964
+msgid "A slashes ('/') separated list of types of elements (also known as klass) to list. (unordered)"
 msgstr "Списък с разделител наклонена черта („/“) от елементи. (неподреден)"
 
+#: tools/gst-inspect.c:1967
 msgid "Check if the specified element or plugin exists"
 msgstr "Проверка дали избраният елемент или приставка съществуват"
 
-msgid ""
-"When checking if an element or plugin exists, also check that its version is "
-"at least the version specified"
-msgstr ""
-"При проверката за съществуване на елемент или приставка да се проверява дали "
-"версията е минимум указаната"
+#: tools/gst-inspect.c:1970
+msgid "When checking if an element or plugin exists, also check that its version is at least the version specified"
+msgstr "При проверката за съществуване на елемент или приставка да се проверява дали версията е минимум указаната"
 
+#: tools/gst-inspect.c:1974
 msgid "Print supported URI schemes, with the elements that implement them"
-msgstr ""
-"Отпечатване на поддържаните схеми за адреси URI, както и елементите с тяхна "
-"реализация"
+msgstr "Отпечатване на поддържаните схеми за адреси URI, както и елементите с тяхна реализация"
 
-msgid ""
-"Disable colors in output. You can also achieve the same by "
-"setting'GST_INSPECT_NO_COLORS' environment variable to any value."
-msgstr ""
+#: tools/gst-inspect.c:1979
+msgid "Disable colors in output. You can also achieve the same by setting'GST_INSPECT_NO_COLORS' environment variable to any value."
+msgstr "Без цветове на изхода. Това може да се постигне и със задаването на произволна стойност на променливата на средата „GST_INSPECT_NO_COLORS“."
 
+#: tools/gst-inspect.c:2135
 #, c-format
 msgid "Could not load plugin file: %s\n"
 msgstr "Файлът на приставката не може да бъде зареден: %s\n"
 
+#: tools/gst-inspect.c:2141
 #, c-format
 msgid "No such element or plugin '%s'\n"
 msgstr "Няма такъв елемент или приставка „%s“\n"
 
+#: tools/gst-launch.c:252
 msgid "Index statistics"
 msgstr "Статистика на индекса"
 
+#: tools/gst-launch.c:578
 #, c-format
 msgid "Got message #%u from element \"%s\" (%s): "
 msgstr "Получено е съобщение #%u от елемент „%s“ (%s): "
 
+#: tools/gst-launch.c:582
 #, c-format
 msgid "Got message #%u from pad \"%s:%s\" (%s): "
 msgstr "Получено е съобщение #%u от допълването „%s:%s“ (%s): "
 
+#: tools/gst-launch.c:586
 #, c-format
 msgid "Got message #%u from object \"%s\" (%s): "
 msgstr "Получено е съобщение #%u от обект „%s“ (%s): "
 
+#: tools/gst-launch.c:590
 #, c-format
 msgid "Got message #%u (%s): "
 msgstr "Получено е съобщение #%u (%s): "
 
+#: tools/gst-launch.c:622
 #, c-format
 msgid "Got EOS from element \"%s\".\n"
 msgstr "Получен е EOS (край на потока) от елемент „%s“.\n"
 
+#: tools/gst-launch.c:631
 #, c-format
 msgid "FOUND TAG      : found by element \"%s\".\n"
 msgstr "ОТКРИТ ЕТИКЕТ      : открит около елемент „%s“.\n"
 
+#: tools/gst-launch.c:634
 #, c-format
 msgid "FOUND TAG      : found by pad \"%s:%s\".\n"
 msgstr "ОТКРИТ ЕТИКЕТ      : открит около допълването „%s:%s“.\n"
 
+#: tools/gst-launch.c:637
 #, c-format
 msgid "FOUND TAG      : found by object \"%s\".\n"
 msgstr "ОТКРИТ ЕТИКЕТ      : открит около обект „%s“.\n"
 
+#: tools/gst-launch.c:640
 msgid "FOUND TAG\n"
 msgstr "ОТКРИТ ЕТИКЕТ\n"
 
+#: tools/gst-launch.c:655
 #, c-format
 msgid "FOUND TOC      : found by element \"%s\".\n"
 msgstr "ОТКРИТО СЪДЪРЖАНИЕ : открито около елемент „%s“.\n"
 
+#: tools/gst-launch.c:658
 #, c-format
 msgid "FOUND TOC      : found by object \"%s\".\n"
 msgstr "ОТКРИТО СЪДЪРЖАНИЕ : открито около обект „%s“.\n"
 
+#: tools/gst-launch.c:661
 msgid "FOUND TOC\n"
 msgstr "ОТКРИТО СЪДЪРЖАНИЕ\n"
 
+#: tools/gst-launch.c:678
 #, c-format
 msgid ""
 "INFO:\n"
@@ -1206,158 +1435,185 @@ msgstr ""
 "ИНФОРМАЦИЯ:\n"
 "%s\n"
 
+#: tools/gst-launch.c:695
 #, c-format
 msgid "WARNING: from element %s: %s\n"
 msgstr "ПРЕДУПРЕЖДЕНИЕ: от елемент %s: %s\n"
 
+#: tools/gst-launch.c:730
 msgid "Prerolled, waiting for buffering to finish...\n"
 msgstr "Буфериран, изчаква се завършването на буферирането…\n"
 
+#: tools/gst-launch.c:734
 msgid "Prerolled, waiting for progress to finish...\n"
 msgstr "Буфериран, изчаква се завършването…\n"
 
+#: tools/gst-launch.c:746
 msgid "buffering..."
 msgstr "буфериране…"
 
+#: tools/gst-launch.c:757
 msgid "Done buffering, setting pipeline to PLAYING ...\n"
 msgstr "Буферирането завърши, конвейерът се дава за ИЗПЪЛНЕНИЕ…\n"
 
+#: tools/gst-launch.c:765
 msgid "Buffering, setting pipeline to PAUSED ...\n"
 msgstr "Буфериране, конвейерът се дава НА ПАУЗА…\n"
 
+#: tools/gst-launch.c:774
 msgid "Redistribute latency...\n"
 msgstr "Преразпределяне на латентността…\n"
 
+#: tools/gst-launch.c:785
 #, c-format
 msgid "Setting state to %s as requested by %s...\n"
 msgstr "Задаване на състоянието на %s по заявка на %s…\n"
 
+#: tools/gst-launch.c:801
 msgid "Interrupt: Stopping pipeline ...\n"
 msgstr "Прекъсване: Конвейерът се спира…\n"
 
+#: tools/gst-launch.c:830
 #, c-format
 msgid "Progress: (%s) %s\n"
 msgstr "Напредък: (%s) %s\n"
 
+#: tools/gst-launch.c:843
 #, c-format
 msgid "Missing element: %s\n"
 msgstr "Липсващ елемент: „%s“\n"
 
+#: tools/gst-launch.c:857
 #, c-format
 msgid "Got context from element '%s': %s=%s\n"
 msgstr "Получен е контекст от елемента „%s“: %s=%s\n"
 
+#: tools/gst-launch.c:991
 msgid "Output tags (also known as metadata)"
 msgstr "Извеждане на етикетите (метаданните)"
 
+#: tools/gst-launch.c:993
 msgid "Output TOC (chapters and editions)"
 msgstr "Извеждане на съдържанието (глави и издания)"
 
+#: tools/gst-launch.c:995
 msgid "Output status information and property notifications"
 msgstr "Извеждане на съобщения за състоянието и промяната на свойства"
 
+#: tools/gst-launch.c:997
 msgid "Do not print any progress information"
 msgstr "Да не се извежда информация за напредъка"
 
+#: tools/gst-launch.c:999
 msgid "Output messages"
 msgstr "Изходни съобщения"
 
-msgid ""
-"Do not output status information for the specified property if verbose "
-"output is enabled (can be used multiple times)"
-msgstr ""
-"Без извеждане на информацията за състоянието на указаното свойство, ако е "
-"включен подробния изход (може да се ползва много пъти)"
+#: tools/gst-launch.c:1001
+msgid "Do not output status information for the specified property if verbose output is enabled (can be used multiple times)"
+msgstr "Без извеждане на информацията за състоянието на указаното свойство, ако е включен подробния изход (може да се ползва много пъти)"
 
+#: tools/gst-launch.c:1003
 msgid "PROPERTY-NAME"
 msgstr "ИМЕ-НА-СВОЙСТВО"
 
+#: tools/gst-launch.c:1005
 msgid "Do not install a fault handler"
 msgstr "Да не се инсталира модул за обработка на грешки"
 
+#: tools/gst-launch.c:1007
 msgid "Force EOS on sources before shutting the pipeline down"
-msgstr ""
-"Принудително извеждане на EOS за източниците преди спирането на конвейера"
+msgstr "Принудително извеждане на EOS за източниците преди спирането на конвейера"
 
+#: tools/gst-launch.c:1010
 msgid "Gather and print index statistics"
 msgstr "Събиране и показване на статистика за индекса"
 
+#: tools/gst-launch.c:1077
 #, c-format
 msgid "ERROR: pipeline could not be constructed: %s.\n"
 msgstr "ГРЕШКА: конвейерът не може да бъде конструиран: %s.\n"
 
+#: tools/gst-launch.c:1081
 msgid "ERROR: pipeline could not be constructed.\n"
 msgstr "ГРЕШКА: конвейерът не може да бъде конструиран.\n"
 
+#: tools/gst-launch.c:1085
 #, c-format
 msgid "WARNING: erroneous pipeline: %s\n"
 msgstr "ПРЕДУПРЕЖДЕНИЕ: конвейер с грешки: %s\n"
 
+#: tools/gst-launch.c:1101
 msgid "ERROR: the 'pipeline' element wasn't found.\n"
 msgstr "ГРЕШКА: не е открит елемент за конвейер — „pipeline“.\n"
 
+#: tools/gst-launch.c:1132 tools/gst-launch.c:1233
 msgid "Setting pipeline to PAUSED ...\n"
 msgstr "Конвейерът се дава НА ПАУЗА…\n"
 
+#: tools/gst-launch.c:1137
 msgid "ERROR: Pipeline doesn't want to pause.\n"
 msgstr "ГРЕШКА: конвейерът не изпълнява даването на пауза.\n"
 
+#: tools/gst-launch.c:1142
 msgid "Pipeline is live and does not need PREROLL ...\n"
 msgstr "Конвейерът работи и не се нуждае от БУФЕРИРАНЕ…\n"
 
+#: tools/gst-launch.c:1146
 msgid "Pipeline is PREROLLING ...\n"
 msgstr "Конвейерът се БУФЕРИРА…\n"
 
+#: tools/gst-launch.c:1149 tools/gst-launch.c:1163
 msgid "ERROR: pipeline doesn't want to preroll.\n"
 msgstr "ГРЕШКА: конвейерът не иска да превърти напред.\n"
 
+#: tools/gst-launch.c:1156
 msgid "Pipeline is PREROLLED ...\n"
 msgstr "Конвейерът е БУФЕРИРАН…\n"
 
+#: tools/gst-launch.c:1169
 msgid "Setting pipeline to PLAYING ...\n"
 msgstr "Конвейерът се дава за ИЗПЪЛНЕНИЕ…\n"
 
+#: tools/gst-launch.c:1176
 msgid "ERROR: pipeline doesn't want to play.\n"
 msgstr "ГРЕШКА: конвейерът не иска да проработи.\n"
 
+#: tools/gst-launch.c:1195
 msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n"
 msgstr "Включен е EOS при спиране — извеждане на EOS по конвейера\n"
 
+#: tools/gst-launch.c:1199
 msgid "EOS on shutdown enabled -- waiting for EOS after Error\n"
 msgstr "Включен е EOS при спиране — извеждане на EOS след грешка\n"
 
+#: tools/gst-launch.c:1202
 msgid "Waiting for EOS...\n"
 msgstr "Изчакване на EOS…\n"
 
+#: tools/gst-launch.c:1209
 msgid "EOS received - stopping pipeline...\n"
 msgstr "Получен е край на поток: конвейерът се спира…\n"
 
+#: tools/gst-launch.c:1213
 msgid "Interrupt while waiting for EOS - stopping pipeline...\n"
 msgstr "Прекъсване при изчакване: конвейерът се спира…\n"
 
+#: tools/gst-launch.c:1218
 msgid "An error happened while waiting for EOS\n"
 msgstr "Възникна грешка при изчакването на EOS\n"
 
+#: tools/gst-launch.c:1229
 msgid "Execution ended after %"
 msgstr "Изпълнението завърши след %"
 
+#: tools/gst-launch.c:1245
 msgid "Setting pipeline to READY ...\n"
 msgstr "Конвейерът е в ГОТОВНОСТ…\n"
 
+#: tools/gst-launch.c:1257
 msgid "Setting pipeline to NULL ...\n"
 msgstr "Конвейерът се ЗАНУЛЯВА…\n"
 
+#: tools/gst-launch.c:1261
 msgid "Freeing pipeline ...\n"
 msgstr "Конвейерът се освобождава…\n"
-
-#, fuzzy
-#~ msgid "Error creating pipe: %s\n"
-#~ msgstr "Грешка при затварянето на файла „%s“."
-
-#, fuzzy
-#~ msgid "Error forking: %s\n"
-#~ msgstr "Грешка при затварянето на файла „%s“."
-
-#, fuzzy
-#~ msgid "Error writing to console: %s\n"
-#~ msgstr "Грешка при запис във файл „%s“."
index 62aefc4..7f996ff 100644 (file)
@@ -1,16 +1,16 @@
-# German translation for gstreamer 1.7.90
+# German translation for gstreamer 1.16.0
 # Copyright (C) 2004 Free Software Foundation, Inc.
 # This file is distributed under the same license as the gstreamer package.
 #
 # Roland Illig <roland.illig@gmx.de>, 2004.
-# Christian Kirbach <christian.kirbach@gmail.com>, 2009, 2010, 2011, 2012, 2013, 2015, 2016.
+# Christian Kirbach <christian.kirbach@gmail.com>, 2009, 2010, 2011, 2012, 2013, 2015, 2016, 2019.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gstreamer 1.12.0\n"
+"Project-Id-Version: gstreamer 1.16.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:37+0000\n"
-"PO-Revision-Date: 2017-05-25 16:25+0200\n"
+"POT-Creation-Date: 2019-04-19 00:15+0100\n"
+"PO-Revision-Date: 2019-09-08 12:54+0200\n"
 "Last-Translator: Christian Kirbach <christian.kirbach@gmail.com>\n"
 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
 "Language: de\n"
@@ -19,859 +19,993 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 2.0.1\n"
+"X-Generator: Poedit 2.2.1\n"
 "X-Poedit-SourceCharset: UTF-8\n"
 
+#: gst/gst.c:250
 msgid "Print the GStreamer version"
 msgstr "Die Version von GStreamer ausgeben"
 
+#: gst/gst.c:252
 msgid "Make all warnings fatal"
 msgstr "Alle Warnungen wie Fehler behandeln"
 
+#: gst/gst.c:256
 msgid "Print available debug categories and exit"
 msgstr "Verfügbare Fehlerdiagnosekategorien ausgeben und Programm beenden"
 
-msgid ""
-"Default debug level from 1 (only error) to 9 (anything) or 0 for no output"
-msgstr ""
-"Vorgegebene Fehlerdiagnosestufe von 1 (nur Fehler) bis 9 (Alles) oder 0 für "
-"keine Ausgabe"
+#: gst/gst.c:260
+msgid "Default debug level from 1 (only error) to 9 (anything) or 0 for no output"
+msgstr "Vorgegebene Fehlerdiagnosestufe von 1 (nur Fehler) bis 9 (Alles) oder 0 für keine Ausgabe"
 
+#: gst/gst.c:262
 msgid "LEVEL"
 msgstr "STUFE"
 
-msgid ""
-"Comma-separated list of category_name:level pairs to set specific levels for "
-"the individual categories. Example: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
-msgstr ""
-"Durch Kommata getrennte Liste von Paaren »Kategorie_Name:Level«, um "
-"bestimmten Kategorien eigene Stufen  zuzuordnen. Beispiel: GST_AUTOPLUG:5,"
-"GST_ELEMENT_*:3"
+#: gst/gst.c:264
+msgid "Comma-separated list of category_name:level pairs to set specific levels for the individual categories. Example: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
+msgstr "Durch Kommata getrennte Liste von Paaren »Kategorie_Name:Level«, um bestimmten Kategorien eigene Stufen  zuzuordnen. Beispiel: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
 
+#: gst/gst.c:267
 msgid "LIST"
 msgstr "LISTE"
 
+#: gst/gst.c:269
 msgid "Disable colored debugging output"
 msgstr "Farbige Fehlerdiagnoseausgabe deaktivieren"
 
-msgid ""
-"Changes coloring mode of the debug log. Possible modes: off, on, disable, "
-"auto, unix"
-msgstr ""
-"Den Farbmodus des Fehlerdiagnose-Protokolls ändern. Mögliche Modi: off "
-"(aus), on (an), disable (deaktiviert), auto und unix"
+#: gst/gst.c:273
+msgid "Changes coloring mode of the debug log. Possible modes: off, on, disable, auto, unix"
+msgstr "Den Farbmodus des Fehlerdiagnose-Protokolls ändern. Mögliche Modi: off (aus), on (an), disable (deaktiviert), auto und unix"
 
+#: gst/gst.c:277
 msgid "Disable debugging"
 msgstr "Fehlerdiagnose deaktivieren"
 
+#: gst/gst.c:281
 msgid "Enable verbose plugin loading diagnostics"
 msgstr "Ausführliche Meldungen beim Laden von Plugins aktivieren"
 
+#: gst/gst.c:285
 msgid "Colon-separated paths containing plugins"
 msgstr "Durch Doppelpunkte getrennte Pfade zu den Plugins"
 
+#: gst/gst.c:285
 msgid "PATHS"
 msgstr "PFADE"
 
-msgid ""
-"Comma-separated list of plugins to preload in addition to the list stored in "
-"environment variable GST_PLUGIN_PATH"
-msgstr ""
-"Durch Kommata getrennte Liste von Plugins, die zusätzlich zu den Plugins in "
-"der Umgebungsvariable GST_PLUGIN_PATH geladen werden"
+#: gst/gst.c:288
+msgid "Comma-separated list of plugins to preload in addition to the list stored in environment variable GST_PLUGIN_PATH"
+msgstr "Durch Kommata getrennte Liste von Plugins, die zusätzlich zu den Plugins in der Umgebungsvariable GST_PLUGIN_PATH geladen werden"
 
+#: gst/gst.c:290
 msgid "PLUGINS"
 msgstr "PLUGINS"
 
+#: gst/gst.c:293
 msgid "Disable trapping of segmentation faults during plugin loading"
-msgstr ""
-"Verfolgen von Speicherzugriffsfehlern beim Laden von Plugins deaktivieren"
+msgstr "Verfolgen von Speicherzugriffsfehlern beim Laden von Plugins deaktivieren"
 
+#: gst/gst.c:298
 msgid "Disable updating the registry"
 msgstr "Aktualisieren der Registry deaktivieren"
 
+#: gst/gst.c:303
 msgid "Disable spawning a helper process while scanning the registry"
-msgstr ""
-"Die Erstellung eines Hilfsprozesses beim Einlesen der Registry deaktivieren"
+msgstr "Die Erstellung eines Hilfsprozesses beim Einlesen der Registry deaktivieren"
 
+#: gst/gst.c:308
 msgid "GStreamer Options"
 msgstr "Optionen von GStreamer"
 
+#: gst/gst.c:309
 msgid "Show GStreamer Options"
 msgstr "Die Optionen von GStreamer anzeigen"
 
+#: gst/gst.c:1012
 msgid "Unknown option"
 msgstr "Unbekannte Option"
 
+#: gst/gsterror.c:130
 msgid "GStreamer encountered a general core library error."
-msgstr ""
-"GStreamer hat einen allgemeinen Fehler in einer Kernbibliothek festgestellt."
+msgstr "GStreamer hat einen allgemeinen Fehler in einer Kernbibliothek festgestellt."
 
-msgid ""
-"GStreamer developers were too lazy to assign an error code to this error."
-msgstr ""
-"Die Entwickler von GStreamer waren zu faul, diesem Fehler eine Nummer zu "
-"geben."
+#: gst/gsterror.c:132 gst/gsterror.c:174 gst/gsterror.c:198 gst/gsterror.c:240
+msgid "GStreamer developers were too lazy to assign an error code to this error."
+msgstr "Die Entwickler von GStreamer waren zu faul, diesem Fehler eine Nummer zu geben."
 
+#: gst/gsterror.c:135
 msgid "Internal GStreamer error: code not implemented."
 msgstr "Interner GStreamer-Fehler: Code nicht implementiert."
 
-msgid ""
-"GStreamer error: state change failed and some element failed to post a "
-"proper error message with the reason for the failure."
-msgstr ""
-"GStreamer-Fehler: Zustandswechsel schlug fehl und einige Elemente gaben "
-"keine richtige Fehlernachricht mit einer Ursachenbegründung."
+#: gst/gsterror.c:137
+msgid "GStreamer error: state change failed and some element failed to post a proper error message with the reason for the failure."
+msgstr "GStreamer-Fehler: Zustandswechsel schlug fehl und einige Elemente gaben keine richtige Fehlernachricht mit einer Ursachenbegründung."
 
+#: gst/gsterror.c:140
 msgid "Internal GStreamer error: pad problem."
 msgstr "Interner GStreamer-Fehler: Padding-Problem."
 
+#: gst/gsterror.c:142
 msgid "Internal GStreamer error: thread problem."
 msgstr "Interner GStreamer-Fehler: Thread-Problem."
 
+#: gst/gsterror.c:144
 msgid "GStreamer error: negotiation problem."
 msgstr "GStreamer-Fehler: Verhandlungsproblem."
 
+#: gst/gsterror.c:146
 msgid "Internal GStreamer error: event problem."
 msgstr "Interner GStreamer-Fehler: Ereignisproblem."
 
+#: gst/gsterror.c:148
 msgid "Internal GStreamer error: seek problem."
 msgstr "Interner GStreamer-Fehler: Suchlauf-Problem."
 
+#: gst/gsterror.c:150
 msgid "Internal GStreamer error: caps problem."
 msgstr "Interner GStreamer-Fehler: Fähigkeitsproblem."
 
+#: gst/gsterror.c:152
 msgid "Internal GStreamer error: tag problem."
 msgstr "Interner GStreamer-Fehler: Kennzeichnungsproblem."
 
+#: gst/gsterror.c:154
 msgid "Your GStreamer installation is missing a plug-in."
 msgstr "Ihrer Installation von GStreamer fehlt ein Plugin."
 
+#: gst/gsterror.c:156
 msgid "GStreamer error: clock problem."
 msgstr "GStreamer-Fehler: Zeitproblem."
 
-msgid ""
-"This application is trying to use GStreamer functionality that has been "
-"disabled."
-msgstr ""
-"Diese Anwendung versucht Funktionalität von GStreamer zu verwenden, die "
-"deaktiviert worden ist."
+#: gst/gsterror.c:158
+msgid "This application is trying to use GStreamer functionality that has been disabled."
+msgstr "Diese Anwendung versucht Funktionalität von GStreamer zu verwenden, die deaktiviert worden ist."
 
+#: gst/gsterror.c:172
 msgid "GStreamer encountered a general supporting library error."
-msgstr ""
-"Internet GStreamer-Fehler: Problem mit der Unterstützungsbibliothek. Bitte "
-"schicken Sie einen Fehlerbericht."
+msgstr "Internet GStreamer-Fehler: Problem mit der Unterstützungsbibliothek. Bitte schicken Sie einen Fehlerbericht."
 
+#: gst/gsterror.c:177
 msgid "Could not initialize supporting library."
 msgstr "Die Unterstützungsbibliothek konnte nicht initialisiert werden."
 
+#: gst/gsterror.c:179
 msgid "Could not close supporting library."
 msgstr "Die Unterstützungsbibliothek konnte nicht geschlossen werden."
 
+#: gst/gsterror.c:181
 msgid "Could not configure supporting library."
 msgstr "Die Unterstützungsbibliothek konnte nicht konfiguriert werden."
 
+#: gst/gsterror.c:183
 msgid "Encoding error."
 msgstr "Fehler bei der Kodierung."
 
+#: gst/gsterror.c:196
 msgid "GStreamer encountered a general resource error."
 msgstr "GStreamer hat einen allgemeinen Ressourcenfehler festgestellt."
 
+#: gst/gsterror.c:201
 msgid "Resource not found."
 msgstr "Ressource nicht gefunden."
 
+#: gst/gsterror.c:203
 msgid "Resource busy or not available."
 msgstr "Ressource in Benutzung oder nicht verfügbar."
 
+#: gst/gsterror.c:205
 msgid "Could not open resource for reading."
 msgstr "Die Ressource konnte nicht zum Lesen geöffnet werden."
 
+#: gst/gsterror.c:207
 msgid "Could not open resource for writing."
 msgstr "Die Ressource konnte nicht zum Schreiben geöffnet werden."
 
+#: gst/gsterror.c:209
 msgid "Could not open resource for reading and writing."
 msgstr "Die Ressource konnte nicht zum Lesen und Schreiben geöffnet werden."
 
+#: gst/gsterror.c:211
 msgid "Could not close resource."
 msgstr "Die Ressource konnte nicht geschlossen werden."
 
+#: gst/gsterror.c:213
 msgid "Could not read from resource."
 msgstr "Aus der Ressource konnte nicht gelesen werden."
 
+#: gst/gsterror.c:215
 msgid "Could not write to resource."
 msgstr "In die Ressource konnte nicht geschrieben werden."
 
+#: gst/gsterror.c:217
 msgid "Could not perform seek on resource."
 msgstr "In der Ressource konnte kein Suchlauf ausgeführt werden."
 
+#: gst/gsterror.c:219
 msgid "Could not synchronize on resource."
 msgstr "Die Ressource konnte nicht abgeglichen werden."
 
+#: gst/gsterror.c:221
 msgid "Could not get/set settings from/on resource."
-msgstr ""
-"Die Einstellungen konnten nicht aus der Ressource gelesen oder in die "
-"Ressource geschrieben werden."
+msgstr "Die Einstellungen konnten nicht aus der Ressource gelesen oder in die Ressource geschrieben werden."
 
+#: gst/gsterror.c:223
 msgid "No space left on the resource."
 msgstr "Kein Platz in der Ressource übrig."
 
+#: gst/gsterror.c:225
 msgid "Not authorized to access resource."
 msgstr "Keine Berechtigung zum Zugriff auf die Ressource."
 
+#: gst/gsterror.c:238
 msgid "GStreamer encountered a general stream error."
 msgstr "GStreamer hat einen allgemeinen Datenstromfehler festgestellt."
 
+#: gst/gsterror.c:243
 msgid "Element doesn't implement handling of this stream. Please file a bug."
-msgstr ""
-"Das Element kann diesen Datenstrom nicht verarbeiten. Bitte schicken Sie "
-"einen Fehlerbericht."
+msgstr "Das Element kann diesen Datenstrom nicht verarbeiten. Bitte schicken Sie einen Fehlerbericht."
 
+#: gst/gsterror.c:246
 msgid "Could not determine type of stream."
 msgstr "Die Art des Datenstroms konnte nicht ermittelt werden."
 
+#: gst/gsterror.c:248
 msgid "The stream is of a different type than handled by this element."
-msgstr ""
-"Der Datenstrom ist von einer anderen Art als der von diesem Element "
-"verarbeitete."
+msgstr "Der Datenstrom ist von einer anderen Art als der von diesem Element verarbeitete."
 
+#: gst/gsterror.c:251
 msgid "There is no codec present that can handle the stream's type."
-msgstr ""
-"Es ist kein Codec verfügbar, der diese Art von Datenströmen verarbeiten kann."
+msgstr "Es ist kein Codec verfügbar, der diese Art von Datenströmen verarbeiten kann."
 
+#: gst/gsterror.c:253
 msgid "Could not decode stream."
 msgstr "Der Datenstrom konnte nicht dekodiert werden."
 
+#: gst/gsterror.c:255
 msgid "Could not encode stream."
 msgstr "Der Datenstrom konnte nicht kodiert werden."
 
+#: gst/gsterror.c:257
 msgid "Could not demultiplex stream."
 msgstr "Der Datenstrom konnte nicht demultiplext werden."
 
+#: gst/gsterror.c:259
 msgid "Could not multiplex stream."
 msgstr "Der Datenstrom konnte nicht multiplext werden."
 
+#: gst/gsterror.c:261
 msgid "The stream is in the wrong format."
 msgstr "Der Datenstrom hat das falsche Format."
 
+#: gst/gsterror.c:263
 msgid "The stream is encrypted and decryption is not supported."
-msgstr ""
-"Der Datenstrom ist verschlüsselt, aber Entschlüsselung wird nicht "
-"unterstützt."
+msgstr "Der Datenstrom ist verschlüsselt, aber Entschlüsselung wird nicht unterstützt."
 
-msgid ""
-"The stream is encrypted and can't be decrypted because no suitable key has "
-"been supplied."
-msgstr ""
-"Der Datenstrom ist verschlüsselt, kann aber nicht entschlüsselt werden, weil "
-"kein passender Schlüssel vorhanden ist."
+#: gst/gsterror.c:265
+msgid "The stream is encrypted and can't be decrypted because no suitable key has been supplied."
+msgstr "Der Datenstrom ist verschlüsselt, kann aber nicht entschlüsselt werden, weil kein passender Schlüssel vorhanden ist."
 
+#: gst/gsterror.c:305
 #, c-format
 msgid "No error message for domain %s."
 msgstr "Keine Fehlermeldung für den Bereich %s."
 
+#: gst/gsterror.c:313
 #, c-format
 msgid "No standard error message for domain %s and code %d."
 msgstr "Keine Standardfehlermeldung für den Bereich %s und Fehlercode %d."
 
+#: gst/gstpipeline.c:562
 msgid "Selected clock cannot be used in pipeline."
-msgstr ""
-"Der ausgewählte Referenztakt kann nicht in der Pipeline verwendet werden."
+msgstr "Der ausgewählte Referenztakt kann nicht in der Pipeline verwendet werden."
 
+#: gst/gstregistry.c:1694
 #, c-format
 msgid "Error writing registry cache to %s: %s"
 msgstr "Fehler beim Schreiben des Zwischenspeichers der Registry nach %s: %s"
 
+#: gst/gsttaglist.c:108
 msgid "title"
 msgstr "Titel"
 
+#: gst/gsttaglist.c:108
 msgid "commonly used title"
 msgstr "Üblicher Titel"
 
+#: gst/gsttaglist.c:111
 msgid "title sortname"
 msgstr "Sortiername des Titels"
 
+#: gst/gsttaglist.c:111
 msgid "commonly used title for sorting purposes"
 msgstr "Üblicher Titel zu Sortierzwecken"
 
+#: gst/gsttaglist.c:114
 msgid "artist"
 msgstr "Künstler"
 
+#: gst/gsttaglist.c:115
 msgid "person(s) responsible for the recording"
 msgstr "Für die Aufnahme verantwortliche Person(en)"
 
+#: gst/gsttaglist.c:119
 msgid "artist sortname"
 msgstr "Sortiername des Künstlers"
 
+#: gst/gsttaglist.c:120
 msgid "person(s) responsible for the recording for sorting purposes"
 msgstr "Für die Aufnahme verantwortliche Person(en) zu Sortierzwecken"
 
+#: gst/gsttaglist.c:123
 msgid "album"
 msgstr "Album"
 
+#: gst/gsttaglist.c:124
 msgid "album containing this data"
 msgstr "Album, das diese Daten enthält"
 
+#: gst/gsttaglist.c:127
 msgid "album sortname"
 msgstr "Sortiername des Albums"
 
+#: gst/gsttaglist.c:128
 msgid "album containing this data for sorting purposes"
 msgstr "Album, das diese Daten enthält, zu Sortierzwecken"
 
+#: gst/gsttaglist.c:131
 msgid "album artist"
 msgstr "Künstler des Albums"
 
+#: gst/gsttaglist.c:132
 msgid "The artist of the entire album, as it should be displayed"
 msgstr "Der Künstler des gesamten Albums, so wie er angezeigt werden soll"
 
+#: gst/gsttaglist.c:136
 msgid "album artist sortname"
 msgstr "Sortiername des Albenkünstlers"
 
+#: gst/gsttaglist.c:137
 msgid "The artist of the entire album, as it should be sorted"
 msgstr "Der Künstler des gesamten Albums, so wie er einsortiert werden soll"
 
+#: gst/gsttaglist.c:139
 msgid "date"
 msgstr "Datum"
 
+#: gst/gsttaglist.c:139
 msgid "date the data was created (as a GDate structure)"
 msgstr "Datum, an dem die Daten erzeugt wurden (als GDate-Struktur)"
 
+#: gst/gsttaglist.c:141
 msgid "datetime"
 msgstr "DatumUhrzeit"
 
+#: gst/gsttaglist.c:142
 msgid "date and time the data was created (as a GstDateTime structure)"
-msgstr ""
-"Datum und Uhrzeit, an denen die Daten erzeugt wurden (als GstDateTime-"
-"Struktur)"
+msgstr "Datum und Uhrzeit, an denen die Daten erzeugt wurden (als GstDateTime-Struktur)"
 
+#: gst/gsttaglist.c:146
 msgid "genre"
 msgstr "Genre"
 
+#: gst/gsttaglist.c:147
 msgid "genre this data belongs to"
 msgstr "Genre, zu dem diese Daten gehören"
 
+#: gst/gsttaglist.c:150
 msgid "comment"
 msgstr "Kommentar"
 
+#: gst/gsttaglist.c:151
 msgid "free text commenting the data"
 msgstr "Ein freier Text, der die Daten beschreibt"
 
+#: gst/gsttaglist.c:154
 msgid "extended comment"
 msgstr "Erweiterter Kommentar"
 
+#: gst/gsttaglist.c:155
 msgid "free text commenting the data in key=value or key[en]=comment form"
-msgstr ""
-"Ein beliebiger Text, der die Daten beschreibt, in der Form »Schlüssel=Wert« "
-"oder »Schlüssel[de]=Kommentar«"
+msgstr "Ein beliebiger Text, der die Daten beschreibt, in der Form »Schlüssel=Wert« oder »Schlüssel[de]=Kommentar«"
 
+#: gst/gsttaglist.c:159
 msgid "track number"
 msgstr "Titelnummer"
 
+#: gst/gsttaglist.c:160
 msgid "track number inside a collection"
 msgstr "Titelnummer innerhalb der Sammlung"
 
+#: gst/gsttaglist.c:163
 msgid "track count"
 msgstr "Anzahl der Titel"
 
+#: gst/gsttaglist.c:164
 msgid "count of tracks inside collection this track belongs to"
 msgstr "Anzahl der Titel in der Sammlung, zu der dieses Stück gehört"
 
+#: gst/gsttaglist.c:168
 msgid "disc number"
 msgstr "Nummer der Platte"
 
+#: gst/gsttaglist.c:169
 msgid "disc number inside a collection"
 msgstr "Nummer der Platte innerhalb der Sammlung"
 
+#: gst/gsttaglist.c:172
 msgid "disc count"
 msgstr "Anzahl der Platten"
 
+#: gst/gsttaglist.c:173
 msgid "count of discs inside collection this disc belongs to"
 msgstr "Anzahl der Platten innerhalb der Sammlung, zu der diese Platte gehört"
 
+#: gst/gsttaglist.c:177
 msgid "location"
 msgstr "Ort"
 
-msgid ""
-"Origin of media as a URI (location, where the original of the file or stream "
-"is hosted)"
-msgstr ""
-"Ursprung des Mediums als URI (Ort, wo das Original der Datei oder des "
-"Datenstroms bereit steht)"
+#: gst/gsttaglist.c:177
+msgid "Origin of media as a URI (location, where the original of the file or stream is hosted)"
+msgstr "Ursprung des Mediums als URI (Ort, wo das Original der Datei oder des Datenstroms bereit steht)"
 
+#: gst/gsttaglist.c:182
 msgid "homepage"
 msgstr "Internetseite"
 
+#: gst/gsttaglist.c:183
 msgid "Homepage for this media (i.e. artist or movie homepage)"
 msgstr "Internetseite dieses Mediums (z.B. Künstler oder Filmseite)"
 
+#: gst/gsttaglist.c:186
 msgid "description"
 msgstr "Beschreibung"
 
+#: gst/gsttaglist.c:187
 msgid "short text describing the content of the data"
 msgstr "Eine kurze Beschreibung des Inhalts"
 
+#: gst/gsttaglist.c:190
 msgid "version"
 msgstr "Version"
 
+#: gst/gsttaglist.c:190
 msgid "version of this data"
 msgstr "Version dieser Daten"
 
+#: gst/gsttaglist.c:192
 msgid "ISRC"
 msgstr "ISRC"
 
+#: gst/gsttaglist.c:194
 msgid "International Standard Recording Code - see http://www.ifpi.org/isrc/"
-msgstr ""
-"International Standard Recording Code - siehe http://www.ifpi.org/isrc/"
+msgstr "International Standard Recording Code - siehe http://www.ifpi.org/isrc/"
 
+#: gst/gsttaglist.c:198
 msgid "organization"
 msgstr "Organisation"
 
+#: gst/gsttaglist.c:201
 msgid "copyright"
 msgstr "Copyright"
 
+#: gst/gsttaglist.c:201
 msgid "copyright notice of the data"
 msgstr "Copyrightangabe der Daten"
 
+#: gst/gsttaglist.c:203
 msgid "copyright uri"
 msgstr "Copyright-URI"
 
+#: gst/gsttaglist.c:204
 msgid "URI to the copyright notice of the data"
 msgstr "URI zu der Copyrightangabe der Daten"
 
+#: gst/gsttaglist.c:206
 msgid "encoded by"
 msgstr "codiert durch"
 
+#: gst/gsttaglist.c:206
 msgid "name of the encoding person or organization"
 msgstr "Der Name der codierenden Person oder Organisation"
 
+#: gst/gsttaglist.c:210
 msgid "contact"
 msgstr "Kontakt"
 
+#: gst/gsttaglist.c:210
 msgid "contact information"
 msgstr "Kontaktinformation"
 
+#: gst/gsttaglist.c:212
 msgid "license"
 msgstr "Lizenz"
 
+#: gst/gsttaglist.c:212
 msgid "license of data"
 msgstr "Lizenz der Daten"
 
+#: gst/gsttaglist.c:214
 msgid "license uri"
 msgstr "Lizenz-URI"
 
+#: gst/gsttaglist.c:215
 msgid "URI to the license of the data"
 msgstr "URI zur Lizenz der Daten"
 
+#: gst/gsttaglist.c:218
 msgid "performer"
 msgstr "Darsteller"
 
+#: gst/gsttaglist.c:219
 msgid "person(s) performing"
 msgstr "Die das Stück aufführende Person(en)"
 
+#: gst/gsttaglist.c:222
 msgid "composer"
 msgstr "Komponist"
 
+#: gst/gsttaglist.c:223
 msgid "person(s) who composed the recording"
 msgstr "Für die Aufnahme verantwortliche Person(en)"
 
+#: gst/gsttaglist.c:227
 msgid "conductor"
 msgstr "Dirigent"
 
+#: gst/gsttaglist.c:228
 msgid "conductor/performer refinement"
 msgstr "Detaillierung Dirigent/Darsteller"
 
+#: gst/gsttaglist.c:231
 msgid "duration"
 msgstr "Dauer"
 
+#: gst/gsttaglist.c:231
 msgid "length in GStreamer time units (nanoseconds)"
 msgstr "Länge des Stücks in GStreamer-Zeiteinheiten (Nanosekunden)"
 
+#: gst/gsttaglist.c:234
 msgid "codec"
 msgstr "Codec"
 
+#: gst/gsttaglist.c:235
 msgid "codec the data is stored in"
 msgstr "Datenformat, in dem die Daten gespeichert sind"
 
+#: gst/gsttaglist.c:238
 msgid "video codec"
 msgstr "Video-Codec"
 
+#: gst/gsttaglist.c:238
 msgid "codec the video data is stored in"
 msgstr "Datenformat, in dem die Videodaten gespeichert sind"
 
+#: gst/gsttaglist.c:241
 msgid "audio codec"
 msgstr "Audio-Codec"
 
+#: gst/gsttaglist.c:241
 msgid "codec the audio data is stored in"
 msgstr "Datenformat, in dem die Audiodaten gespeichert sind"
 
+#: gst/gsttaglist.c:244
 msgid "subtitle codec"
 msgstr "Untertitel-Codec"
 
+#: gst/gsttaglist.c:244
 msgid "codec the subtitle data is stored in"
 msgstr "Datenformat, in dem der Untertitel gespeichert sind"
 
 # Hier ist ein Containerformat wie AVI oder MPEG gemeint.
+#: gst/gsttaglist.c:246
 msgid "container format"
 msgstr "Containerformat"
 
+#: gst/gsttaglist.c:247
 msgid "container format the data is stored in"
 msgstr "Containerformat, in dem die Daten gespeichert sind"
 
+#: gst/gsttaglist.c:249
 msgid "bitrate"
 msgstr "Bitrate"
 
+#: gst/gsttaglist.c:249
 msgid "exact or average bitrate in bits/s"
 msgstr "Genaue oder durchschnittliche Bitrate in Bits/Sekunde"
 
+#: gst/gsttaglist.c:251
 msgid "nominal bitrate"
 msgstr "Normale Bitrate"
 
+#: gst/gsttaglist.c:251
 msgid "nominal bitrate in bits/s"
 msgstr "Bei variabler Bitrate eine mittlere Bitrate in Bits/Sekunde"
 
+#: gst/gsttaglist.c:253
 msgid "minimum bitrate"
 msgstr "Minimale Bitrate"
 
+#: gst/gsttaglist.c:253
 msgid "minimum bitrate in bits/s"
 msgstr "Minimale Bitrate in Bits/Sekunde"
 
+#: gst/gsttaglist.c:255
 msgid "maximum bitrate"
 msgstr "Maximale Bitrate"
 
+#: gst/gsttaglist.c:255
 msgid "maximum bitrate in bits/s"
 msgstr "Maximale Bitrate in Bits/Sekunde"
 
+#: gst/gsttaglist.c:258
 msgid "encoder"
 msgstr "Codierer"
 
+#: gst/gsttaglist.c:258
 msgid "encoder used to encode this stream"
 msgstr "Codierer für diesen Datenstrom"
 
+#: gst/gsttaglist.c:261
 msgid "encoder version"
 msgstr "Version des Codierers"
 
+#: gst/gsttaglist.c:262
 msgid "version of the encoder used to encode this stream"
 msgstr "Version des Codierers für diesen Datenstrom"
 
+#: gst/gsttaglist.c:264
 msgid "serial"
 msgstr "Seriennummer"
 
+#: gst/gsttaglist.c:264
 msgid "serial number of track"
 msgstr "Seriennummer des Titels"
 
 # http://www.audiohq.de/index.php?showtopic=23#Referenzlautstaerke
+#: gst/gsttaglist.c:266
 msgid "replaygain track gain"
 msgstr "Lautstärkeanpassung des Titelpegels"
 
+#: gst/gsttaglist.c:266
 msgid "track gain in db"
 msgstr "Pegelanpassung des Titels in dB"
 
+#: gst/gsttaglist.c:268
 msgid "replaygain track peak"
 msgstr "Lautstärkeanpassung des Spitzenpegels"
 
+#: gst/gsttaglist.c:268
 msgid "peak of the track"
 msgstr "Spitzenpegel des Titels"
 
+#: gst/gsttaglist.c:270
 msgid "replaygain album gain"
 msgstr "Lautstärkeanpassung des Albenpegels"
 
+#: gst/gsttaglist.c:270
 msgid "album gain in db"
 msgstr "Pegelanpassung des Albums in dB"
 
+#: gst/gsttaglist.c:272
 msgid "replaygain album peak"
 msgstr "Lautstärkeanpassung des Albenspitzenpegels"
 
+#: gst/gsttaglist.c:272
 msgid "peak of the album"
 msgstr "Spitzenpegel des Albums"
 
+#: gst/gsttaglist.c:274
 msgid "replaygain reference level"
 msgstr "Referenzpegel der Lautstärkeanpassung"
 
+#: gst/gsttaglist.c:275
 msgid "reference level of track and album gain values"
 msgstr "Referenzpegel für die Pegelanpassungen von Titel und Album"
 
+#: gst/gsttaglist.c:277
 msgid "language code"
 msgstr "Sprachcode"
 
+#: gst/gsttaglist.c:278
 msgid "language code for this stream, conforming to ISO-639-1 or ISO-639-2"
 msgstr "Sprachcode für diesen Strom nach ISO-639-1 oder ISO-639-2"
 
+#: gst/gsttaglist.c:281
 msgid "language name"
 msgstr "Sprachname"
 
+#: gst/gsttaglist.c:282
 msgid "freeform name of the language this stream is in"
 msgstr "Name der Sprache, in welcher der Datenstrom ist"
 
+#: gst/gsttaglist.c:284
 msgid "image"
 msgstr "Bild"
 
+#: gst/gsttaglist.c:284
 msgid "image related to this stream"
 msgstr "Bild für diesen Datenstrom"
 
 #. TRANSLATORS: 'preview image' = image that shows a preview of the full image
+#: gst/gsttaglist.c:288
 msgid "preview image"
 msgstr "Vorschaubild"
 
+#: gst/gsttaglist.c:288
 msgid "preview image related to this stream"
 msgstr "Vorschaubild für diesen Datenstrom"
 
+#: gst/gsttaglist.c:290
 msgid "attachment"
 msgstr "Anhang"
 
+#: gst/gsttaglist.c:290
 msgid "file attached to this stream"
 msgstr "An diesen Datenstrom angehangene Datei"
 
+#: gst/gsttaglist.c:293
 msgid "beats per minute"
 msgstr "Schläge pro Minute"
 
+#: gst/gsttaglist.c:294
 msgid "number of beats per minute in audio"
 msgstr "Anzahl der Schläge pro Minute im Hörstück"
 
+#: gst/gsttaglist.c:296
 msgid "keywords"
 msgstr "Schlagworte"
 
+#: gst/gsttaglist.c:296
 msgid "comma separated keywords describing the content"
 msgstr "Durch Komma getrennte Schlüsselwörter, die den Inhalt beschreiben"
 
+#: gst/gsttaglist.c:299
 msgid "geo location name"
 msgstr "geologischer Ort"
 
-msgid ""
-"human readable descriptive location of where the media has been recorded or "
-"produced"
-msgstr ""
-"Lesbare Ortsbeschreibung, wo das Medium aufgezeichnet oder produziert wurde"
+#: gst/gsttaglist.c:300
+msgid "human readable descriptive location of where the media has been recorded or produced"
+msgstr "Lesbare Ortsbeschreibung, wo das Medium aufgezeichnet oder produziert wurde"
 
+#: gst/gsttaglist.c:303
 msgid "geo location latitude"
 msgstr "geografischer Breitengrad"
 
-msgid ""
-"geo latitude location of where the media has been recorded or produced in "
-"degrees according to WGS84 (zero at the equator, negative values for "
-"southern latitudes)"
-msgstr ""
-"geografischer Breitengrad des Ortes in Grad nach WGS84 (Null am Äquator, "
-"negative Werte für die südlichen Breitengrade), an dem das Medium "
-"aufgezeichnet oder produziert wurde"
+#: gst/gsttaglist.c:304
+msgid "geo latitude location of where the media has been recorded or produced in degrees according to WGS84 (zero at the equator, negative values for southern latitudes)"
+msgstr "geografischer Breitengrad des Ortes in Grad nach WGS84 (Null am Äquator, negative Werte für die südlichen Breitengrade), an dem das Medium aufgezeichnet oder produziert wurde"
 
+#: gst/gsttaglist.c:308
 msgid "geo location longitude"
 msgstr "geografischer Längengrad"
 
-msgid ""
-"geo longitude location of where the media has been recorded or produced in "
-"degrees according to WGS84 (zero at the prime meridian in Greenwich/UK,  "
-"negative values for western longitudes)"
-msgstr ""
-"geografischer Längengrad des Ortes in Grad nach WGS84 (Null für den "
-"Hauptmeridian durch Greenwich/Großbritannien, negative Werte für die "
-"westlichen Längengrade)"
+#: gst/gsttaglist.c:309
+msgid "geo longitude location of where the media has been recorded or produced in degrees according to WGS84 (zero at the prime meridian in Greenwich/UK,  negative values for western longitudes)"
+msgstr "geografischer Längengrad des Ortes in Grad nach WGS84 (Null für den Hauptmeridian durch Greenwich/Großbritannien, negative Werte für die westlichen Längengrade)"
 
+#: gst/gsttaglist.c:313
 msgid "geo location elevation"
 msgstr "geografische Höhe"
 
-msgid ""
-"geo elevation of where the media has been recorded or produced in meters "
-"according to WGS84 (zero is average sea level)"
-msgstr ""
-"geografische Höhe des Ortes in Metern nach WGS84 (Höhe Null entspricht dem "
-"Meeresspiegel)"
+#: gst/gsttaglist.c:314
+msgid "geo elevation of where the media has been recorded or produced in meters according to WGS84 (zero is average sea level)"
+msgstr "geografische Höhe des Ortes in Metern nach WGS84 (Höhe Null entspricht dem Meeresspiegel)"
 
+#: gst/gsttaglist.c:317
 msgid "geo location country"
 msgstr "geografisches Land"
 
+#: gst/gsttaglist.c:318
 msgid "country (english name) where the media has been recorded or produced"
-msgstr ""
-"Das Land (englischer Name), in dem das Medium aufgezeichnet oder produziert "
-"wurde"
+msgstr "Das Land (englischer Name), in dem das Medium aufgezeichnet oder produziert wurde"
 
+#: gst/gsttaglist.c:321
 msgid "geo location city"
 msgstr "geografische Stadt"
 
+#: gst/gsttaglist.c:322
 msgid "city (english name) where the media has been recorded or produced"
-msgstr ""
-"Die Stadt (englischer Name), in der das Medium aufgezeichnet oder produziert "
-"wurde"
+msgstr "Die Stadt (englischer Name), in der das Medium aufgezeichnet oder produziert wurde"
 
+#: gst/gsttaglist.c:325
 msgid "geo location sublocation"
 msgstr "geografischer Ortsteil"
 
-msgid ""
-"a location within a city where the media has been produced or created (e.g. "
-"the neighborhood)"
-msgstr ""
-"ein Ort innerhalb einer Stadt, an dem das Medium aufgezeichnet oder "
-"produziert wurde (z.B. der Stadtteil)"
+#: gst/gsttaglist.c:326
+msgid "a location within a city where the media has been produced or created (e.g. the neighborhood)"
+msgstr "ein Ort innerhalb einer Stadt, an dem das Medium aufgezeichnet oder produziert wurde (z.B. der Stadtteil)"
 
+#: gst/gsttaglist.c:329
 msgid "geo location horizontal error"
 msgstr "Geografischer horizontaler Fehler"
 
+#: gst/gsttaglist.c:330
 msgid "expected error of the horizontal positioning measures (in meters)"
 msgstr "Erwarteter Fehler der horizontalen Positionsmessung (in Meter)"
 
+#: gst/gsttaglist.c:333
 msgid "geo location movement speed"
 msgstr "Geografische Bewegungsgeschwindigkeit"
 
-msgid ""
-"movement speed of the capturing device while performing the capture in m/s"
-msgstr ""
-"Bewegungsgeschwindigkeit des Aufzeichnungsgeräts während der Aufzeichnung "
-"mit m/s"
+#: gst/gsttaglist.c:334
+msgid "movement speed of the capturing device while performing the capture in m/s"
+msgstr "Bewegungsgeschwindigkeit des Aufzeichnungsgeräts während der Aufzeichnung mit m/s"
 
+#: gst/gsttaglist.c:337
 msgid "geo location movement direction"
 msgstr "Geografische Bewegungsrichtung"
 
-msgid ""
-"indicates the movement direction of the device performing the capture of a "
-"media. It is represented as degrees in floating point representation, 0 "
-"means the geographic north, and increases clockwise"
-msgstr ""
-"Zeigt die Bewegungsrichtung des Aufzeichnungsgeräts während der Aufzeichnung "
-"eines Mediums an. Die Darstellung erfolgt in Grad als Fließkommazahl. 0 "
-"entspricht dem geografischen Norden und die Zahl wächst im Uhrzeigersinn"
+#: gst/gsttaglist.c:338
+msgid "indicates the movement direction of the device performing the capture of a media. It is represented as degrees in floating point representation, 0 means the geographic north, and increases clockwise"
+msgstr "Zeigt die Bewegungsrichtung des Aufzeichnungsgeräts während der Aufzeichnung eines Mediums an. Die Darstellung erfolgt in Grad als Fließkommazahl. 0 entspricht dem geografischen Norden und die Zahl wächst im Uhrzeigersinn"
 
+#: gst/gsttaglist.c:343
 msgid "geo location capture direction"
 msgstr "Geografische Aufzeichnungsrichtung"
 
-msgid ""
-"indicates the direction the device is pointing to when capturing  a media. "
-"It is represented as degrees in floating point  representation, 0 means the "
-"geographic north, and increases clockwise"
-msgstr ""
-"Zeigt die Richtung des Geräts während der Aufzeichnung eines Mediums an. Die "
-"Darstellung erfolgt in Grad als Fließkommazahl. 0 entspricht dem "
-"geografischen Norden und die Zahl wächst im Uhrzeigersinn"
+#: gst/gsttaglist.c:344
+msgid "indicates the direction the device is pointing to when capturing  a media. It is represented as degrees in floating point  representation, 0 means the geographic north, and increases clockwise"
+msgstr "Zeigt die Richtung des Geräts während der Aufzeichnung eines Mediums an. Die Darstellung erfolgt in Grad als Fließkommazahl. 0 entspricht dem geografischen Norden und die Zahl wächst im Uhrzeigersinn"
 
 #. TRANSLATORS: 'show name' = 'TV/radio/podcast show name' here
+#: gst/gsttaglist.c:350
 msgid "show name"
 msgstr "Name zeigen"
 
+#: gst/gsttaglist.c:351
 msgid "Name of the tv/podcast/series show the media is from"
 msgstr "Name des TV/Podcast/der Serie, von dem das Medium stammt"
 
 #. TRANSLATORS: 'show sortname' = 'TV/radio/podcast show name as used for sorting purposes' here
+#: gst/gsttaglist.c:356
 msgid "show sortname"
 msgstr "Sortiername zeigen"
 
-msgid ""
-"Name of the tv/podcast/series show the media is from, for sorting purposes"
-msgstr ""
-"Name des TV/Podcast/der Serie, von dem das Medium stammt, zum Sortieren"
+#: gst/gsttaglist.c:357
+msgid "Name of the tv/podcast/series show the media is from, for sorting purposes"
+msgstr "Name des TV/Podcast/der Serie, von dem das Medium stammt, zum Sortieren"
 
+#: gst/gsttaglist.c:360
 msgid "episode number"
 msgstr "Nummer der Folge"
 
+#: gst/gsttaglist.c:361
 msgid "The episode number in the season the media is part of"
 msgstr "Die Nummer der Folge in der Serie, von der das Medium ein Teil ist"
 
+#: gst/gsttaglist.c:364
 msgid "season number"
 msgstr "Nummer der Serie"
 
+#: gst/gsttaglist.c:365
 msgid "The season number of the show the media is part of"
 msgstr "Die Nummer der Serie der Sendung, von der das Medium ein Teil ist"
 
+#: gst/gsttaglist.c:368
 msgid "lyrics"
 msgstr "Liedtext"
 
+#: gst/gsttaglist.c:368
 msgid "The lyrics of the media, commonly used for songs"
 msgstr "Der Liedtext des Mediums, gewöhnlich für Lieder verwendet"
 
+#: gst/gsttaglist.c:371
 msgid "composer sortname"
 msgstr "Sortiername des Komponisten"
 
+#: gst/gsttaglist.c:372
 msgid "person(s) who composed the recording, for sorting purposes"
 msgstr "Für die Aufnahme verantwortliche Person(en), für Sortierzwecke"
 
+#: gst/gsttaglist.c:374
 msgid "grouping"
 msgstr "Gruppieren"
 
-msgid ""
-"Groups related media that spans multiple tracks, like the different pieces "
-"of a concerto. It is a higher level than a track, but lower than an album"
-msgstr ""
-"Gruppenbezogenes Medium, das  mehrere Titel umfasst, ähnlich der "
-"verschiedenen Stücke eines Konzertes. Es ist eine Ebene höher als ein Titel, "
-"aber niedriger als ein Album"
+#: gst/gsttaglist.c:375
+msgid "Groups related media that spans multiple tracks, like the different pieces of a concerto. It is a higher level than a track, but lower than an album"
+msgstr "Gruppenbezogenes Medium, das  mehrere Titel umfasst, ähnlich der verschiedenen Stücke eines Konzertes. Es ist eine Ebene höher als ein Titel, aber niedriger als ein Album"
 
+#: gst/gsttaglist.c:379
 msgid "user rating"
 msgstr "Benutzerbewertung"
 
-msgid ""
-"Rating attributed by a user. The higher the rank, the more the user likes "
-"this media"
-msgstr ""
-"Bewertet durch einen Benutzer. Je höher die Bewertung, desto beliebter ist "
-"das Medium beim Benutzer"
+#: gst/gsttaglist.c:380
+msgid "Rating attributed by a user. The higher the rank, the more the user likes this media"
+msgstr "Bewertet durch einen Benutzer. Je höher die Bewertung, desto beliebter ist das Medium beim Benutzer"
 
+#: gst/gsttaglist.c:383
 msgid "device manufacturer"
 msgstr "Gerätehersteller"
 
+#: gst/gsttaglist.c:384
 msgid "Manufacturer of the device used to create this media"
 msgstr "Der Hersteller des Geräts zur Erstellung dieses Mediums"
 
+#: gst/gsttaglist.c:386
 msgid "device model"
 msgstr "Gerätemodell"
 
+#: gst/gsttaglist.c:387
 msgid "Model of the device used to create this media"
 msgstr "Das Modell des Geräts zur Erstellung dieses Mediums"
 
+#: gst/gsttaglist.c:389
 msgid "application name"
 msgstr "Anwendungsname"
 
+#: gst/gsttaglist.c:390
 msgid "Application used to create the media"
 msgstr "Die zur Erstellung dieses Mediums verwendete Anwendung"
 
+#: gst/gsttaglist.c:392
 msgid "application data"
 msgstr "Anwendungsdaten"
 
+#: gst/gsttaglist.c:393
 msgid "Arbitrary application data to be serialized into the media"
 msgstr "Beliebige Anwendungsdaten zur Serialisierung in das Medium"
 
+#: gst/gsttaglist.c:395
 msgid "image orientation"
 msgstr "Bildorientierung"
 
+#: gst/gsttaglist.c:396
 msgid "How the image should be rotated or flipped before display"
 msgstr "Wie das Bild vor der Darstellung gedreht oder gespiegelt werden soll"
 
+#: gst/gsttaglist.c:399
 msgid "publisher"
 msgstr "Herausgeber"
 
+#: gst/gsttaglist.c:400
 msgid "Name of the label or publisher"
 msgstr "Name des Labels oder des Herausgebers"
 
+#: gst/gsttaglist.c:403
 msgid "interpreted-by"
 msgstr "interpreted-by"
 
+#: gst/gsttaglist.c:404
 msgid "Information about the people behind a remix and similar interpretations"
-msgstr ""
-"Informationen über die Personen hinter einem Remix und ähnliche "
-"Interpretationen"
+msgstr "Informationen über die Personen hinter einem Remix und ähnliche Interpretationen"
 
+#: gst/gsttaglist.c:408
 msgid "midi-base-note"
 msgstr "midi-base-note"
 
+#: gst/gsttaglist.c:408
 msgid "Midi note number of the audio track."
 msgstr "Midi-Notenzahl der Tonspur."
 
+#: gst/gsttaglist.c:411
 msgid "private-data"
 msgstr "Private-Daten"
 
+#: gst/gsttaglist.c:411
 msgid "Private data"
 msgstr "Private Daten"
 
+#: gst/gsttaglist.c:451
 msgid ", "
 msgstr ", "
 
+#: gst/gsturi.c:648
 #, c-format
 msgid "No URI handler for the %s protocol found"
 msgstr "Es wurde kein Adress-Handler für das %s-Protokoll gefunden"
 
+#: gst/gsturi.c:823
 #, c-format
 msgid "URI scheme '%s' not supported"
 msgstr "Das Adressenschema »%s« wird nicht unterstützt"
 
+#: gst/gstutils.c:2632 tools/gst-launch.c:325
 #, c-format
 msgid "ERROR: from element %s: %s\n"
 msgstr "FEHLER: Von Element %s: %s\n"
 
+#: gst/gstutils.c:2634 tools/gst-launch.c:327 tools/gst-launch.c:697
 #, c-format
 msgid ""
 "Additional debug info:\n"
@@ -880,352 +1014,422 @@ msgstr ""
 "Zusätzliche Fehlerdiagnoseinformation:\n"
 "%s\n"
 
+#: gst/parse/grammar.y:216
 #, c-format
 msgid "link has no source [sink=%s@%p]"
 msgstr "Verknüpfung hat keine Quelle [sink=%s@%p]"
 
+#: gst/parse/grammar.y:221
 #, c-format
 msgid "link has no sink [source=%s@%p]"
 msgstr "Verknüpfung hat kein Ziel [sink=%s@%p]"
 
+#: gst/parse/grammar.y:413
 #, c-format
 msgid "no property \"%s\" in element \"%s\""
 msgstr "Keine Eigenschaft »%s« im Element »%s«"
 
+#: gst/parse/grammar.y:454
 #, c-format
 msgid "could not set property \"%s\" in element \"%s\" to \"%s\""
-msgstr ""
-"Die Eigenschaft »%s« im Element »%s« konnte nicht auf »%s« gesetzt werden"
+msgstr "Die Eigenschaft »%s« im Element »%s« konnte nicht auf »%s« gesetzt werden"
 
+#: gst/parse/grammar.y:507
 msgid "Delayed linking failed."
 msgstr "Verzögertes Verknüpfen ist fehlgeschlagen."
 
+#: gst/parse/grammar.y:719 gst/parse/grammar.y:724
 #, c-format
 msgid "could not link %s to %s, %s can't handle caps %s"
-msgstr ""
-"%s konnte nicht mit %s verknüpft werden. %s kann nicht mit Großbuchstaben %s "
-"umgehen"
+msgstr "%s konnte nicht mit %s verknüpft werden. %s kann nicht mit Großbuchstaben %s umgehen"
 
+#: gst/parse/grammar.y:729
 #, c-format
 msgid "could not link %s to %s, neither element can handle caps %s"
-msgstr ""
-"%s konnte nicht mit %s verknüpft werden. Keines der Elemente kann mit "
-"Großbuchstaben %s umgehen"
+msgstr "%s konnte nicht mit %s verknüpft werden. Keines der Elemente kann mit Großbuchstaben %s umgehen"
 
+#: gst/parse/grammar.y:733
 #, c-format
 msgid "could not link %s to %s with caps %s"
 msgstr "%s konnte nicht mit %s verknüpft werden mit den Großbuchstaben %s"
 
+#: gst/parse/grammar.y:739
 #, c-format
 msgid "could not link %s to %s"
 msgstr "%s konnte nicht mit %s verknüpft werden"
 
+#: gst/parse/grammar.y:816
 #, c-format
 msgid "no element \"%s\""
 msgstr "Kein Element »%s«"
 
+#: gst/parse/grammar.y:877
 #, c-format
 msgid "unexpected reference \"%s\" - ignoring"
 msgstr "unerwartete Referenz »%s« - wird ignoriert"
 
+#: gst/parse/grammar.y:883
 #, c-format
 msgid "unexpected pad-reference \"%s\" - ignoring"
 msgstr "unerwartete pad-Referenz »%s« - wird ignoriert"
 
+#: gst/parse/grammar.y:915 gst/parse/grammar.y:924
 #, c-format
 msgid "could not parse caps \"%s\""
 msgstr "Die Fähigkeiten von »%s« konnten nicht ausgelesen werden"
 
+#: gst/parse/grammar.y:952
 #, c-format
 msgid "no sink element for URI \"%s\""
 msgstr "Kein Zielelement für URI »%s«"
 
+#: gst/parse/grammar.y:971
 #, c-format
 msgid "no source element for URI \"%s\""
 msgstr "Kein Quellelement für URI »%s«"
 
+#: gst/parse/grammar.y:1061
 msgid "syntax error"
 msgstr "Syntaxfehler"
 
+#: gst/parse/grammar.y:1084
 #, c-format
 msgid "specified empty bin \"%s\", not allowed"
 msgstr "Leeren Behälter »%s« angegeben -- nicht erlaubt"
 
+#: gst/parse/grammar.y:1094
 #, c-format
 msgid "no bin \"%s\", unpacking elements"
 msgstr "Kein Behälter »%s« - Elemente werden entpackt"
 
+#: gst/parse/grammar.y:1125
 msgid "empty pipeline not allowed"
 msgstr "Leere Leitung ist nicht erlaubt"
 
+#: libs/gst/base/gstbasesink.c:1210
 msgid "Pipeline construction is invalid, please add queues."
-msgstr ""
+msgstr "Die Zusammensetzung der Leitung ist ungültig. Bitte fügen Sie Warteschlangen hinzu."
 
+#: libs/gst/base/gstbasesink.c:3004
 msgid "A lot of buffers are being dropped."
 msgstr "Es werden viele Puffer verworfen."
 
+#: libs/gst/base/gstbasesink.c:3496
 msgid "Internal data flow problem."
 msgstr "Internes Problem im Datenfluss."
 
+#: libs/gst/base/gstbasesink.c:4222 libs/gst/base/gstbasesrc.c:2708
 msgid "Internal data flow error."
 msgstr "Interner Fehler im Datenfluss."
 
+#: libs/gst/base/gstbasesrc.c:2638
 msgid "Internal clock error."
 msgstr "Interner Zeitfehler"
 
+#: libs/gst/base/gstbasesrc.c:2666 plugins/elements/gstdownloadbuffer.c:842
+#: plugins/elements/gstdownloadbuffer.c:1265
 msgid "Failed to map buffer."
 msgstr "Pufferzuweisung schlug fehl."
 
+#: plugins/elements/gstcapsfilter.c:128
 msgid "Filter caps"
 msgstr "Filterfähigkeiten"
 
-msgid ""
-"Restrict the possible allowed capabilities (NULL means ANY). Setting this "
-"property takes a reference to the supplied GstCaps object."
-msgstr ""
-"Beschränkt die möglichen Filterfähigkeiten (NULL bedeutet ALLE). Setzen "
-"dieser Eigenschaft referenziert ein hinzugefügtes GstCaps-Objekt."
+#: plugins/elements/gstcapsfilter.c:129
+msgid "Restrict the possible allowed capabilities (NULL means ANY). Setting this property takes a reference to the supplied GstCaps object."
+msgstr "Beschränkt die möglichen Filterfähigkeiten (NULL bedeutet ALLE). Setzen dieser Eigenschaft referenziert ein hinzugefügtes GstCaps-Objekt."
 
+#: plugins/elements/gstcapsfilter.c:136
 msgid "Caps Change Mode"
 msgstr "Änderungsmodus der Fähigkeiten"
 
+#: plugins/elements/gstcapsfilter.c:137
 msgid "Filter caps change behaviour"
 msgstr "Änderungsmodus der Filterfähigkeiten"
 
+#: plugins/elements/gstdownloadbuffer.c:927 plugins/elements/gstqueue2.c:1792
 msgid "No Temp directory specified."
 msgstr "Kein temporärer Ordner angegeben."
 
+#: plugins/elements/gstdownloadbuffer.c:933 plugins/elements/gstqueue2.c:1798
 #, c-format
 msgid "Could not create temp file \"%s\"."
 msgstr "Die temporäre Datei »%s« konnte nicht angelegt werden."
 
+#: plugins/elements/gstdownloadbuffer.c:941 plugins/elements/gstfilesrc.c:537
+#: plugins/elements/gstqueue2.c:1806
 #, c-format
 msgid "Could not open file \"%s\" for reading."
 msgstr "Die Datei »%s« konnte nicht zum Lesen geöffnet werden."
 
+#: plugins/elements/gstdownloadbuffer.c:1274 plugins/elements/gstqueue2.c:2225
 msgid "Error while writing to download file."
 msgstr "Fehler beim Schreiben in die Download-Datei."
 
+#: plugins/elements/gstfilesink.c:404
 msgid "No file name specified for writing."
 msgstr "Kein Dateiname zum Schreiben angegeben."
 
+#: plugins/elements/gstfilesink.c:410
 #, c-format
 msgid "Could not open file \"%s\" for writing."
 msgstr "Datei »%s« konnte nicht zum Schreiben geöffnet werden."
 
+#: plugins/elements/gstfilesink.c:422 plugins/elements/gstfilesink.c:426
 #, c-format
 msgid "Error closing file \"%s\"."
 msgstr "Fehler beim Schließen der Datei »%s«."
 
+#: plugins/elements/gstfilesink.c:605
 #, c-format
 msgid "Error while seeking in file \"%s\"."
 msgstr "Fehler beim Durchsuchen der Daten »%s«."
 
+#: plugins/elements/gstfilesink.c:613 plugins/elements/gstfilesink.c:620
+#: plugins/elements/gstfilesink.c:793 plugins/elements/gstfilesink.c:848
 #, c-format
 msgid "Error while writing to file \"%s\"."
 msgstr "Fehler beim Schreiben der Daten »%s«."
 
+#: plugins/elements/gstfilesrc.c:525
 msgid "No file name specified for reading."
 msgstr "Kein Dateiname zum Lesen angegeben."
 
+#: plugins/elements/gstfilesrc.c:546
 #, c-format
 msgid "Could not get info on \"%s\"."
 msgstr "Informationen zu »%s« konnten nicht gelesen werden."
 
+#: plugins/elements/gstfilesrc.c:552
 #, c-format
 msgid "\"%s\" is a directory."
 msgstr "»%s« ist ein Ordner."
 
+#: plugins/elements/gstfilesrc.c:558
 #, c-format
 msgid "File \"%s\" is a socket."
 msgstr "Die Datei »%s« ist ein Socket."
 
+#: plugins/elements/gstidentity.c:722
 msgid "Failed after iterations as requested."
 msgstr "Nach dem Durchlaufen fehlgeschlagen. Wie gewünscht."
 
+#: plugins/elements/gstidentity.c:903
 msgid "eos-after and error-after can't both be defined."
-msgstr ""
+msgstr "»eos-after« und »error-after« dürfen nicht gleichzeitig festgelgt werden."
 
+#: plugins/elements/gsttypefindelement.c:251
 msgid "caps"
 msgstr "Fähigkeiten"
 
+#: plugins/elements/gsttypefindelement.c:252
 msgid "detected capabilities in stream"
 msgstr "Erkannte Fähigkeiten im Datenstrom"
 
+#: plugins/elements/gsttypefindelement.c:255
 msgid "minimum"
 msgstr "Minimum"
 
+#: plugins/elements/gsttypefindelement.c:260
 msgid "force caps"
 msgstr "Fähigkeiten erzwingen"
 
+#: plugins/elements/gsttypefindelement.c:261
 msgid "force caps without doing a typefind"
 msgstr "Fähigkeiten ohne Typensuche erzwingen"
 
+#: plugins/elements/gsttypefindelement.c:987
+#: plugins/elements/gsttypefindelement.c:1009
 msgid "Stream doesn't contain enough data."
 msgstr "Der Datenstrom enthält nicht genug Daten."
 
+#: plugins/elements/gsttypefindelement.c:1129
 msgid "Stream contains no data."
 msgstr "Der Datenstrom enthält keine Daten."
 
-#, fuzzy, c-format
+#: tools/gst-inspect.c:290
+#, c-format
 msgid "%sImplemented Interfaces%s:\n"
-msgstr "Implementierte Schnittstellen:\n"
+msgstr "%sImplementierte Schnittstellen%s:\n"
 
+#: tools/gst-inspect.c:400
 msgid "readable"
 msgstr "lesbar"
 
+#: tools/gst-inspect.c:405
 msgid "writable"
 msgstr "schreibbar"
 
+#: tools/gst-inspect.c:410
 msgid "deprecated"
 msgstr "veraltet"
 
+#: tools/gst-inspect.c:414
 msgid "controllable"
 msgstr "regelbar"
 
+#: tools/gst-inspect.c:420
 msgid "changeable in NULL, READY, PAUSED or PLAYING state"
 msgstr "änderbar in den Status NULL, BEREIT, PAUSIERT oder ABSPIELEN"
 
+#: tools/gst-inspect.c:423
 msgid "changeable only in NULL, READY or PAUSED state"
 msgstr "änderbar nur in den Status NULL, BEREIT oder PAUSIERT"
 
+#: tools/gst-inspect.c:426
 msgid "changeable only in NULL or READY state"
 msgstr "änderbar nur in den Status NULL oder BEREIT"
 
+#: tools/gst-inspect.c:1131
 msgid "Blacklisted files:"
 msgstr "Dateien auf der schwarzen Liste:"
 
-#, fuzzy, c-format
+#: tools/gst-inspect.c:1143 tools/gst-inspect.c:1276
+#, c-format
 msgid "%sTotal count%s: %s"
-msgstr "Gesamtzahl: "
+msgstr "%sGesamtzahl%s: %s"
 
+#: tools/gst-inspect.c:1145
 #, c-format
 msgid "%d blacklisted file"
 msgid_plural "%d blacklisted files"
 msgstr[0] "%d Datei auf der schwarzen Liste"
 msgstr[1] "%d Dateien auf der schwarzen Liste"
 
+#: tools/gst-inspect.c:1278
 #, c-format
 msgid "%d plugin"
 msgid_plural "%d plugins"
 msgstr[0] "%d Plugin"
 msgstr[1] "%d Plugins"
 
+#: tools/gst-inspect.c:1281
 #, c-format
 msgid "%d blacklist entry"
 msgid_plural "%d blacklist entries"
 msgstr[0] "%d Eintrag in der schwarzen Liste"
 msgstr[1] "%d Einträge in der schwarzen Liste"
 
+#: tools/gst-inspect.c:1286
 #, c-format
 msgid "%d feature"
 msgid_plural "%d features"
 msgstr[0] "%d Merkmal"
 msgstr[1] "%d Merkmale"
 
+#: tools/gst-inspect.c:1953
 msgid "Print all elements"
 msgstr "Alle Elemente ausgeben"
 
+#: tools/gst-inspect.c:1955
 msgid "Print list of blacklisted files"
 msgstr "Dateien in der schwarzen Liste ausgeben"
 
+#: tools/gst-inspect.c:1957
 msgid ""
-"Print a machine-parsable list of features the specified plugin or all "
-"plugins provide.\n"
-"                                       Useful in connection with external "
-"automatic plugin installation mechanisms"
+"Print a machine-parsable list of features the specified plugin or all plugins provide.\n"
+"                                       Useful in connection with external automatic plugin installation mechanisms"
 msgstr ""
-"Eine maschinenlesbare Liste der Merkmale, die das angegebene oder alle "
-"Plugins bereit stellen.\n"
-"                                       Nützlich in Verbindung mit externen "
-"Mechanismen zur automatischen Installation von Plugins"
+"Eine maschinenlesbare Liste der Merkmale, die das angegebene oder alle Plugins bereit stellen.\n"
+"                                       Nützlich in Verbindung mit externen Mechanismen zur automatischen Installation von Plugins"
 
+#: tools/gst-inspect.c:1962
 msgid "List the plugin contents"
 msgstr "Die Inhalte des Plugins auflisten"
 
-msgid ""
-"A slashes ('/') separated list of types of elements (also known as klass) to "
-"list. (unordered)"
-msgstr ""
-"Eine mit Schrägstrichen »/« getrennte Liste von Elementtypen (auch bekannt "
-"als »klass«), die (unsortiert) aufgelistet werden soll."
+#: tools/gst-inspect.c:1964
+msgid "A slashes ('/') separated list of types of elements (also known as klass) to list. (unordered)"
+msgstr "Eine mit Schrägstrichen »/« getrennte Liste von Elementtypen (auch bekannt als »klass«), die (unsortiert) aufgelistet werden soll."
 
+#: tools/gst-inspect.c:1967
 msgid "Check if the specified element or plugin exists"
 msgstr "Prüfen Sie, ob das angegebene Element oder Plugin vorhanden ist"
 
-msgid ""
-"When checking if an element or plugin exists, also check that its version is "
-"at least the version specified"
-msgstr ""
-"Kontrollieren Sie beim Prüfen, ob ein Element oder Plugin vorhanden ist, "
-"ebenfalls, ob die Version mindestens der angegebenen entspricht."
+#: tools/gst-inspect.c:1970
+msgid "When checking if an element or plugin exists, also check that its version is at least the version specified"
+msgstr "Kontrollieren Sie beim Prüfen, ob ein Element oder Plugin vorhanden ist, ebenfalls, ob die Version mindestens der angegebenen entspricht."
 
+#: tools/gst-inspect.c:1974
 msgid "Print supported URI schemes, with the elements that implement them"
-msgstr ""
-"Unterstützte URI-Schemata mit den Elementen ausgeben, die sie implementieren"
+msgstr "Unterstützte URI-Schemata mit den Elementen ausgeben, die sie implementieren"
 
-msgid ""
-"Disable colors in output. You can also achieve the same by "
-"setting'GST_INSPECT_NO_COLORS' environment variable to any value."
-msgstr ""
+#: tools/gst-inspect.c:1979
+msgid "Disable colors in output. You can also achieve the same by setting'GST_INSPECT_NO_COLORS' environment variable to any value."
+msgstr "Farben in der Ausgabe deaktivieren. Die Einstellung kann auch erzielt werden, indem die Umgebungsvariable GST_INSPECT_NO_COLORS auf einen beliebigen Wert gesetzt wird."
 
+#: tools/gst-inspect.c:2135
 #, c-format
 msgid "Could not load plugin file: %s\n"
 msgstr "Die Plugin-Datei konnte nicht geladen werden: %s\n"
 
+#: tools/gst-inspect.c:2141
 #, c-format
 msgid "No such element or plugin '%s'\n"
 msgstr "Kein solches Element oder Plugin »%s«\n"
 
+#: tools/gst-launch.c:252
 msgid "Index statistics"
 msgstr "Index-Statistiken"
 
+#: tools/gst-launch.c:578
 #, c-format
 msgid "Got message #%u from element \"%s\" (%s): "
 msgstr "Nachricht #%u wurde von Element »%s« (%s) erhalten: "
 
+#: tools/gst-launch.c:582
 #, c-format
 msgid "Got message #%u from pad \"%s:%s\" (%s): "
 msgstr "Nachricht #%u wurde von Padding »%s:%s« (%s) erhalten: "
 
+#: tools/gst-launch.c:586
 #, c-format
 msgid "Got message #%u from object \"%s\" (%s): "
 msgstr "Nachricht #%u wurde von Objekt »%s« (%s) erhalten: "
 
+#: tools/gst-launch.c:590
 #, c-format
 msgid "Got message #%u (%s): "
 msgstr "Nachricht #%u (%s) wurde erhalten: "
 
+#: tools/gst-launch.c:622
 #, c-format
 msgid "Got EOS from element \"%s\".\n"
 msgstr "EOS wurde von Element »%s« erhalten.\n"
 
+#: tools/gst-launch.c:631
 #, c-format
 msgid "FOUND TAG      : found by element \"%s\".\n"
 msgstr "KENNZEICHEN GEFUNDEN: Gefunden von Element »%s«.\n"
 
+#: tools/gst-launch.c:634
 #, c-format
 msgid "FOUND TAG      : found by pad \"%s:%s\".\n"
 msgstr "KENNZEICHEN GEFUNDEN: Gefunden von Padding »%s:%s«.\n"
 
+#: tools/gst-launch.c:637
 #, c-format
 msgid "FOUND TAG      : found by object \"%s\".\n"
 msgstr "KENNZEICHEN GEFUNDEN: Gefunden von Objekt »%s«.\n"
 
+#: tools/gst-launch.c:640
 msgid "FOUND TAG\n"
 msgstr "KENNZEICHEN GEFUNDEN\n"
 
+#: tools/gst-launch.c:655
 #, c-format
 msgid "FOUND TOC      : found by element \"%s\".\n"
 msgstr "TOC GEFUNDEN: Gefunden durch Element »%s«.\n"
 
+#: tools/gst-launch.c:658
 #, c-format
 msgid "FOUND TOC      : found by object \"%s\".\n"
 msgstr "TOC GEFUNDEN: Gefunden durch Objekt »%s«.\n"
 
+#: tools/gst-launch.c:661
 msgid "FOUND TOC\n"
 msgstr "TOC GEFUNDEN\n"
 
+#: tools/gst-launch.c:678
 #, c-format
 msgid ""
 "INFO:\n"
@@ -1234,169 +1438,191 @@ msgstr ""
 "INFO:\n"
 "%s\n"
 
+#: tools/gst-launch.c:695
 #, c-format
 msgid "WARNING: from element %s: %s\n"
 msgstr "WARNUNG: Von Element %s: %s\n"
 
+#: tools/gst-launch.c:730
 msgid "Prerolled, waiting for buffering to finish...\n"
 msgstr "Vorgelaufen, auf Ende des Zwischenspeicherns warten …\n"
 
+#: tools/gst-launch.c:734
 msgid "Prerolled, waiting for progress to finish...\n"
 msgstr "Vorgelaufen, auf Ende des Zwischenspeicherns warten …\n"
 
+#: tools/gst-launch.c:746
 msgid "buffering..."
 msgstr "Zwischenspeichern läuft …"
 
+#: tools/gst-launch.c:757
 msgid "Done buffering, setting pipeline to PLAYING ...\n"
-msgstr ""
-"Zwischenspeichern abgeschlossen, Leitung wird auf ABSPIELEN gesetzt …\n"
+msgstr "Zwischenspeichern abgeschlossen, Leitung wird auf ABSPIELEN gesetzt …\n"
 
+#: tools/gst-launch.c:765
 msgid "Buffering, setting pipeline to PAUSED ...\n"
 msgstr ""
 "Zwischenspeichern, Leitung wird auf PAUSIERT gesetzt …\n"
 "\n"
 
+#: tools/gst-launch.c:774
 msgid "Redistribute latency...\n"
 msgstr "Verzögerung neu verteilen …\n"
 
+#: tools/gst-launch.c:785
 #, c-format
 msgid "Setting state to %s as requested by %s...\n"
 msgstr "Status wird auf %s gesetzt wie von %s gewünscht...\n"
 
+#: tools/gst-launch.c:801
 msgid "Interrupt: Stopping pipeline ...\n"
 msgstr "Interrupt: Leitung wird gestoppt ...\n"
 
+#: tools/gst-launch.c:830
 #, c-format
 msgid "Progress: (%s) %s\n"
 msgstr "Fortschritt: (%s) %s\n"
 
+#: tools/gst-launch.c:843
 #, c-format
 msgid "Missing element: %s\n"
 msgstr "Fehlendes Element »%s«\n"
 
+#: tools/gst-launch.c:857
 #, c-format
 msgid "Got context from element '%s': %s=%s\n"
 msgstr "Kontext von Element »%s« erhalten: %s=%s\n"
 
+#: tools/gst-launch.c:991
 msgid "Output tags (also known as metadata)"
 msgstr "Kennzeichen (auch bekannt als Metadaten) ausgeben"
 
+#: tools/gst-launch.c:993
 msgid "Output TOC (chapters and editions)"
 msgstr "TOC ausgeben (Kapitel und Editionen)"
 
+#: tools/gst-launch.c:995
 msgid "Output status information and property notifications"
 msgstr "Zustandsinformation und Eigenschaftsmitteilungen ausgeben"
 
+#: tools/gst-launch.c:997
 msgid "Do not print any progress information"
 msgstr "Keine Fortschrittsinformationen ausgeben"
 
+#: tools/gst-launch.c:999
 msgid "Output messages"
 msgstr "Ausgabenachrichten"
 
-msgid ""
-"Do not output status information for the specified property if verbose "
-"output is enabled (can be used multiple times)"
-msgstr ""
-"Keine Statusinformationen für die angegebene Eigenschaft ausgeben, wenn "
-"ausführliche Ausgabe eingeschaltet ist (kann mehrfach verwendet werden)"
+#: tools/gst-launch.c:1001
+msgid "Do not output status information for the specified property if verbose output is enabled (can be used multiple times)"
+msgstr "Keine Statusinformationen für die angegebene Eigenschaft ausgeben, wenn ausführliche Ausgabe eingeschaltet ist (kann mehrfach verwendet werden)"
 
+#: tools/gst-launch.c:1003
 msgid "PROPERTY-NAME"
 msgstr "EIGENSCHAFT-NAME"
 
+#: tools/gst-launch.c:1005
 msgid "Do not install a fault handler"
 msgstr "Keine Routine zum Abfangen von Fehlern installieren"
 
+#: tools/gst-launch.c:1007
 msgid "Force EOS on sources before shutting the pipeline down"
 msgstr "EOS auf Quelle vor dem Beenden der Leitung erzwingen"
 
+#: tools/gst-launch.c:1010
 msgid "Gather and print index statistics"
 msgstr "Index-Statistiken sammeln und ausgeben"
 
+#: tools/gst-launch.c:1077
 #, c-format
 msgid "ERROR: pipeline could not be constructed: %s.\n"
 msgstr "FEHLER: Leitung konnte nicht konstruiert werden: %s.\n"
 
+#: tools/gst-launch.c:1081
 msgid "ERROR: pipeline could not be constructed.\n"
 msgstr "FEHLER: Leitung konnte nicht konstruiert werden.\n"
 
+#: tools/gst-launch.c:1085
 #, c-format
 msgid "WARNING: erroneous pipeline: %s\n"
 msgstr "WARNUNG: Fehlerhafte Leitung: %s\n"
 
+#: tools/gst-launch.c:1101
 msgid "ERROR: the 'pipeline' element wasn't found.\n"
 msgstr "FEHLER: Das Element »Leitung« wurde nicht gefunden.\n"
 
+#: tools/gst-launch.c:1132 tools/gst-launch.c:1233
 msgid "Setting pipeline to PAUSED ...\n"
 msgstr "Leitung wird auf PAUSIERT gesetzt ...\n"
 
+#: tools/gst-launch.c:1137
 msgid "ERROR: Pipeline doesn't want to pause.\n"
 msgstr "FEHLER: Leitung möchte nicht pausiert werden.\n"
 
+#: tools/gst-launch.c:1142
 msgid "Pipeline is live and does not need PREROLL ...\n"
 msgstr "Leitung ist aktiv und erfordert keinen VORLAUF …\n"
 
+#: tools/gst-launch.c:1146
 msgid "Pipeline is PREROLLING ...\n"
 msgstr "Leitung läuft vor …\n"
 
+#: tools/gst-launch.c:1149 tools/gst-launch.c:1163
 msgid "ERROR: pipeline doesn't want to preroll.\n"
 msgstr "FEHLER: Leitung läuft nicht vor.\n"
 
+#: tools/gst-launch.c:1156
 msgid "Pipeline is PREROLLED ...\n"
 msgstr "Leitung ist vorgelaufen …\n"
 
+#: tools/gst-launch.c:1169
 msgid "Setting pipeline to PLAYING ...\n"
 msgstr "Leitung wird auf ABSPIELEN gesetzt ...\n"
 
+#: tools/gst-launch.c:1176
 msgid "ERROR: pipeline doesn't want to play.\n"
 msgstr "FEHLER: Leitung spielt nicht ab.\n"
 
+#: tools/gst-launch.c:1195
 msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n"
-msgstr ""
-"EOS bei Beenden ist eingeschaltet -- EOS wird auf die Leitung erzwungen\n"
+msgstr "EOS bei Beenden ist eingeschaltet -- EOS wird auf die Leitung erzwungen\n"
 
+#: tools/gst-launch.c:1199
 msgid "EOS on shutdown enabled -- waiting for EOS after Error\n"
 msgstr "EOS bei Beenden ist eingeschaltet -- warten auf EOS nach dem Fehler\n"
 
+#: tools/gst-launch.c:1202
 msgid "Waiting for EOS...\n"
 msgstr "Auf EOS wird gewartet …\n"
 
+#: tools/gst-launch.c:1209
 msgid "EOS received - stopping pipeline...\n"
 msgstr "EOS erhalten - Leitung wird angehalten …\n"
 
+#: tools/gst-launch.c:1213
 msgid "Interrupt while waiting for EOS - stopping pipeline...\n"
 msgstr "Interrupt beim Warten auf EOS - Leitung wird gestoppt ...\n"
 
+#: tools/gst-launch.c:1218
 msgid "An error happened while waiting for EOS\n"
 msgstr "Ein Fehler ist beim Warten auf EOS aufgetreten\n"
 
+#: tools/gst-launch.c:1229
 msgid "Execution ended after %"
 msgstr "Ausführung beendet nach %"
 
+#: tools/gst-launch.c:1245
 msgid "Setting pipeline to READY ...\n"
 msgstr "Leitung wird auf BEREIT gesetzt ...\n"
 
+#: tools/gst-launch.c:1257
 msgid "Setting pipeline to NULL ...\n"
 msgstr "Leitung wird auf NULL gesetzt ...\n"
 
+#: tools/gst-launch.c:1261
 msgid "Freeing pipeline ...\n"
 msgstr "Leitung wird geleert ...\n"
 
-#, fuzzy
-#~ msgid "Error creating pipe: %s\n"
-#~ msgstr "Fehler beim Schließen der Datei »%s«."
-
-#, fuzzy
-#~ msgid "Error forking: %s\n"
-#~ msgstr "Fehler beim Schließen der Datei »%s«."
-
-#, fuzzy
-#~ msgid "Error reading from console: %s\n"
-#~ msgstr "Fehler beim erneuten Einlesen der Registry %s : %s"
-
-#, fuzzy
-#~ msgid "Error writing to console: %s\n"
-#~ msgstr "Fehler beim Schreiben der Daten »%s«."
-
 #~ msgid "bin"
 #~ msgstr "Behälter"
 
@@ -1434,9 +1660,7 @@ msgstr "Leitung wird geleert ...\n"
 #~ msgstr "WARNUNG: Zur Zeit wird nur ein Hauptelement unterstützt.\n"
 
 #~ msgid "ERROR: could not parse command line argument %d: %s.\n"
-#~ msgstr ""
-#~ "FEHLER: Das Befehlszeilenargument »%d« konnte nicht ausgelesen werden: "
-#~ "%s.\n"
+#~ msgstr "FEHLER: Das Befehlszeilenargument »%d« konnte nicht ausgelesen werden: %s.\n"
 
 #~ msgid "WARNING: element named '%s' not found.\n"
 #~ msgstr "WARNUNG: Element namens »%s« nicht gefunden.\n"
@@ -1451,8 +1675,10 @@ msgstr "Leitung wird geleert ...\n"
 #~ msgstr "Keine Routinen für SIGUSR1 und SIGUSR2 installieren"
 
 #~ msgid "Print alloc trace (if enabled at compile time)"
-#~ msgstr ""
-#~ "Speicherzuordnungsverfolgung ausgeben (falls zur Kompilierzeit aktiviert)"
+#~ msgstr "Speicherzuordnungsverfolgung ausgeben (falls zur Kompilierzeit aktiviert)"
+
+#~ msgid "Error re-scanning registry %s: %s"
+#~ msgstr "Fehler beim erneuten Einlesen der Registry %s : %s"
 
 #~ msgid "Error re-scanning registry %s"
 #~ msgstr "Fehler beim erneuten Einlesen der Registry %s"
@@ -1485,23 +1711,16 @@ msgstr "Leitung wird geleert ...\n"
 #~ msgstr "Zu benutzender Scheduler (Standard: »%s«)"
 
 #~ msgid "Internal GStreamer error: scheduler problem.  File a bug."
-#~ msgstr ""
-#~ "Internet GStreamer-Fehler: Schedulerproblem. Bitte schicken Sie einen "
-#~ "Fehlerbericht."
+#~ msgstr "Internet GStreamer-Fehler: Schedulerproblem. Bitte schicken Sie einen Fehlerbericht."
 
 #~ msgid "original location of file as a URI"
 #~ msgstr "Originalort der Datei als URI"
 
 #~ msgid "There is no element present to handle the stream's mime type %s."
-#~ msgstr ""
-#~ "Es gibt kein Element, das den MIME-Typ »%s« dieses Datenstroms "
-#~ "verarbeiten kann."
-
-#~ msgid ""
-#~ "could not convert \"%s\" so that it fits property \"%s\" in element \"%s\""
-#~ msgstr ""
-#~ "Konnte »%s« nicht so konvertieren, dass es zur Eigenschaft »%s« im "
-#~ "Element »%s« passt"
+#~ msgstr "Es gibt kein Element, das den MIME-Typ »%s« dieses Datenstroms verarbeiten kann."
+
+#~ msgid "could not convert \"%s\" so that it fits property \"%s\" in element \"%s\""
+#~ msgstr "Konnte »%s« nicht so konvertieren, dass es zur Eigenschaft »%s« im Element »%s« passt"
 
 #~ msgid "Show plugin details"
 #~ msgstr "Plugindetails anzeigen"
index 0b8ca5a..1d48898 100644 (file)
@@ -4,14 +4,14 @@
 #
 # Thomas Vander Stichele <thomas@apestaart.org>, 2004.
 # Claude Paroz <claude@2xlibre.net>, 2008-2012.
-# Stéphane Aulery <lkppo@free.fr>, 2015, 2017.
+# Stéphane Aulery <lkppo@free.fr>, 2015, 2017, 2019.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gstreamer 1.12.0\n"
+"Project-Id-Version: gstreamer 1.16.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:37+0000\n"
-"PO-Revision-Date: 2017-05-05 22:33+0200\n"
+"POT-Creation-Date: 2019-04-19 00:15+0100\n"
+"PO-Revision-Date: 2019-09-10 20:22+0200\n"
 "Last-Translator: Stéphane Aulery <lkppo@free.fr>\n"
 "Language-Team: French <traduc@traduc.org>\n"
 "Language: fr\n"
@@ -21,838 +21,988 @@ msgstr ""
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=n>1;\n"
 
+#: gst/gst.c:250
 msgid "Print the GStreamer version"
 msgstr "Affiche la version de GStreamer"
 
+#: gst/gst.c:252
 msgid "Make all warnings fatal"
 msgstr "Rend tous les avertissements bloquants"
 
+#: gst/gst.c:256
 msgid "Print available debug categories and exit"
 msgstr "Affiche les catégories de débogage disponibles et quitte"
 
-msgid ""
-"Default debug level from 1 (only error) to 9 (anything) or 0 for no output"
-msgstr ""
-"Niveau de débogage par défaut, de 1 (erreurs uniquement) à 9 (tout) ou 0 "
-"pour aucune sortie"
+#: gst/gst.c:260
+msgid "Default debug level from 1 (only error) to 9 (anything) or 0 for no output"
+msgstr "Niveau de débogage par défaut, de 1 (erreurs uniquement) à 9 (tout) ou 0 pour aucune sortie"
 
+#: gst/gst.c:262
 msgid "LEVEL"
 msgstr "NIVEAU"
 
-msgid ""
-"Comma-separated list of category_name:level pairs to set specific levels for "
-"the individual categories. Example: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
-msgstr ""
-"Liste séparée par des virgules de paires nom_catégorie:niveau définissant "
-"des niveaux spécifiques pour chaque catégorie. Exemple : GST_AUTOPLUG:5,"
-"GST_ELEMENT_*:3"
+#: gst/gst.c:264
+msgid "Comma-separated list of category_name:level pairs to set specific levels for the individual categories. Example: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
+msgstr "Liste séparée par des virgules de paires nom_catégorie:niveau définissant des niveaux spécifiques pour chaque catégorie. Exemple : GST_AUTOPLUG:5,GST_ELEMENT_*:3"
 
+#: gst/gst.c:267
 msgid "LIST"
 msgstr "LISTE"
 
+#: gst/gst.c:269
 msgid "Disable colored debugging output"
 msgstr "Désactive la couleur dans la sortie de débogage"
 
-msgid ""
-"Changes coloring mode of the debug log. Possible modes: off, on, disable, "
-"auto, unix"
-msgstr ""
-"Modification du mode de coloration du journal de debug. Modes disponibles : "
-"off, on, disable, auto, unix"
+#: gst/gst.c:273
+msgid "Changes coloring mode of the debug log. Possible modes: off, on, disable, auto, unix"
+msgstr "Modification du mode de coloration du journal de debug. Modes disponibles : off, on, disable, auto, unix"
 
+#: gst/gst.c:277
 msgid "Disable debugging"
 msgstr "Désactive le débogage"
 
+#: gst/gst.c:281
 msgid "Enable verbose plugin loading diagnostics"
 msgstr "Active le diagnostic détaillé du chargement des greffons"
 
+#: gst/gst.c:285
 msgid "Colon-separated paths containing plugins"
 msgstr "Chemins contenant des greffons, séparés par des deux-points"
 
+#: gst/gst.c:285
 msgid "PATHS"
 msgstr "CHEMINS"
 
-msgid ""
-"Comma-separated list of plugins to preload in addition to the list stored in "
-"environment variable GST_PLUGIN_PATH"
-msgstr ""
-"Liste de greffons à précharger, séparée par des virgules, en plus de la "
-"liste contenue dans la variable d’environnement GST_PLUGIN_PATH"
+#: gst/gst.c:288
+msgid "Comma-separated list of plugins to preload in addition to the list stored in environment variable GST_PLUGIN_PATH"
+msgstr "Liste de greffons à précharger, séparée par des virgules, en plus de la liste contenue dans la variable d’environnement GST_PLUGIN_PATH"
 
+#: gst/gst.c:290
 msgid "PLUGINS"
 msgstr "GREFFONS"
 
+#: gst/gst.c:293
 msgid "Disable trapping of segmentation faults during plugin loading"
-msgstr ""
-"Désactive la détection des erreurs de segmentation pendant le chargement des "
-"greffons"
+msgstr "Désactive la détection des erreurs de segmentation pendant le chargement des greffons"
 
+#: gst/gst.c:298
 msgid "Disable updating the registry"
 msgstr "Désactive la mise à jour du registre"
 
+#: gst/gst.c:303
 msgid "Disable spawning a helper process while scanning the registry"
-msgstr ""
-"Désactive le lancement d’un processus annexe lors de l’analyse du registre"
+msgstr "Désactive le lancement d’un processus annexe lors de l’analyse du registre"
 
+#: gst/gst.c:308
 msgid "GStreamer Options"
 msgstr "Options de GStreamer"
 
+#: gst/gst.c:309
 msgid "Show GStreamer Options"
 msgstr "Afficher les options de GStreamer"
 
+#: gst/gst.c:1012
 msgid "Unknown option"
 msgstr "Option inconnue"
 
+#: gst/gsterror.c:130
 msgid "GStreamer encountered a general core library error."
 msgstr "GStreamer a rencontré une erreur générale de bibliothèque centrale."
 
-msgid ""
-"GStreamer developers were too lazy to assign an error code to this error."
-msgstr ""
-"Les développeurs de GStreamer sont trop fainéants pour associer un code "
-"d’erreur à cette erreur."
+#: gst/gsterror.c:132 gst/gsterror.c:174 gst/gsterror.c:198 gst/gsterror.c:240
+msgid "GStreamer developers were too lazy to assign an error code to this error."
+msgstr "Les développeurs de GStreamer sont trop fainéants pour associer un code d’erreur à cette erreur."
 
+#: gst/gsterror.c:135
 msgid "Internal GStreamer error: code not implemented."
 msgstr "Erreur interne de GStreamer : code non implémenté."
 
-msgid ""
-"GStreamer error: state change failed and some element failed to post a "
-"proper error message with the reason for the failure."
-msgstr ""
-"Erreur GStreamer : échec de changement d’état et un élément n’a pas pu "
-"signaler un message d’erreur correct contenant la raison de l’échec."
+#: gst/gsterror.c:137
+msgid "GStreamer error: state change failed and some element failed to post a proper error message with the reason for the failure."
+msgstr "Erreur GStreamer : échec de changement d’état et un élément n’a pas pu signaler un message d’erreur correct contenant la raison de l’échec."
 
+#: gst/gsterror.c:140
 msgid "Internal GStreamer error: pad problem."
 msgstr "Erreur interne de GStreamer : problème de connecteur."
 
+#: gst/gsterror.c:142
 msgid "Internal GStreamer error: thread problem."
 msgstr "Erreur interne de GStreamer : problème de thread."
 
+#: gst/gsterror.c:144
 msgid "GStreamer error: negotiation problem."
 msgstr "Erreur GStreamer : problème de négociation."
 
+#: gst/gsterror.c:146
 msgid "Internal GStreamer error: event problem."
 msgstr "Erreur interne de GStreamer : problème d’événement."
 
+#: gst/gsterror.c:148
 msgid "Internal GStreamer error: seek problem."
 msgstr "Erreur interne de Gstreamer : problème de recherche."
 
+#: gst/gsterror.c:150
 msgid "Internal GStreamer error: caps problem."
 msgstr "Erreur interne de Gstreamer : problème de caps."
 
+#: gst/gsterror.c:152
 msgid "Internal GStreamer error: tag problem."
 msgstr "Erreur interne de Gstreamer : problème de balise."
 
+#: gst/gsterror.c:154
 msgid "Your GStreamer installation is missing a plug-in."
 msgstr "Il manque un greffon dans votre installation de GStreamer."
 
+#: gst/gsterror.c:156
 msgid "GStreamer error: clock problem."
 msgstr "Erreur Gstreamer : problème d’horloge."
 
-msgid ""
-"This application is trying to use GStreamer functionality that has been "
-"disabled."
-msgstr ""
-"Cette application tente d’utiliser une fonctionnalité de GStreamer qui a été "
-"désactivée."
+#: gst/gsterror.c:158
+msgid "This application is trying to use GStreamer functionality that has been disabled."
+msgstr "Cette application tente d’utiliser une fonctionnalité de GStreamer qui a été désactivée."
 
+#: gst/gsterror.c:172
 msgid "GStreamer encountered a general supporting library error."
-msgstr ""
-"GStreamer a rencontré une erreur générale de bibliothèque de prise en charge."
+msgstr "GStreamer a rencontré une erreur générale de bibliothèque de prise en charge."
 
+#: gst/gsterror.c:177
 msgid "Could not initialize supporting library."
 msgstr "Impossible d’initialiser la bibliothèque de prise en charge."
 
+#: gst/gsterror.c:179
 msgid "Could not close supporting library."
 msgstr "Impossible de fermer la bibliothèque de prise en charge."
 
+#: gst/gsterror.c:181
 msgid "Could not configure supporting library."
 msgstr "Impossible de configurer la bibliothèque de prise en charge."
 
+#: gst/gsterror.c:183
 msgid "Encoding error."
 msgstr "Erreur de codage."
 
+#: gst/gsterror.c:196
 msgid "GStreamer encountered a general resource error."
 msgstr "GStreamer a rencontré une erreur générale de ressource."
 
+#: gst/gsterror.c:201
 msgid "Resource not found."
 msgstr "Ressource introuvable."
 
+#: gst/gsterror.c:203
 msgid "Resource busy or not available."
 msgstr "Ressource occupée ou non disponible."
 
+#: gst/gsterror.c:205
 msgid "Could not open resource for reading."
 msgstr "Impossible d’ouvrir la ressource en lecture."
 
+#: gst/gsterror.c:207
 msgid "Could not open resource for writing."
 msgstr "Impossible d’ouvrir la ressource en écriture."
 
+#: gst/gsterror.c:209
 msgid "Could not open resource for reading and writing."
 msgstr "Impossible d’ouvrir la ressource en lecture et écriture."
 
+#: gst/gsterror.c:211
 msgid "Could not close resource."
 msgstr "Impossible de fermer la ressource."
 
+#: gst/gsterror.c:213
 msgid "Could not read from resource."
 msgstr "Impossible de lire à partir de la ressource."
 
+#: gst/gsterror.c:215
 msgid "Could not write to resource."
 msgstr "Impossible d’écrire dans la ressource."
 
+#: gst/gsterror.c:217
 msgid "Could not perform seek on resource."
 msgstr "Impossible de rechercher dans la ressource."
 
+#: gst/gsterror.c:219
 msgid "Could not synchronize on resource."
 msgstr "Impossible de synchroniser dans la ressource."
 
+#: gst/gsterror.c:221
 msgid "Could not get/set settings from/on resource."
 msgstr "Impossible d’obtenir ou de définir un paramètre de ressource."
 
+#: gst/gsterror.c:223
 msgid "No space left on the resource."
 msgstr "Espace libre insuffisant dans la ressource."
 
+#: gst/gsterror.c:225
 msgid "Not authorized to access resource."
 msgstr "Accès à la ressource interdit."
 
+#: gst/gsterror.c:238
 msgid "GStreamer encountered a general stream error."
 msgstr "GStreamer a rencontré une erreur générale de flux."
 
+#: gst/gsterror.c:243
 msgid "Element doesn't implement handling of this stream. Please file a bug."
 msgstr "L’élément ne gère pas ce flux. Veuillez signaler le problème."
 
+#: gst/gsterror.c:246
 msgid "Could not determine type of stream."
 msgstr "Impossible de déterminer le type du flux."
 
+#: gst/gsterror.c:248
 msgid "The stream is of a different type than handled by this element."
 msgstr "Le type du flux est différent de celui qui est géré par cet élément."
 
+#: gst/gsterror.c:251
 msgid "There is no codec present that can handle the stream's type."
 msgstr "Aucun codec disponible pour gérer le type du flux."
 
+#: gst/gsterror.c:253
 msgid "Could not decode stream."
 msgstr "Impossible de décoder le flux."
 
+#: gst/gsterror.c:255
 msgid "Could not encode stream."
 msgstr "Impossible de coder le flux."
 
+#: gst/gsterror.c:257
 msgid "Could not demultiplex stream."
 msgstr "Impossible de démultiplexer le flux."
 
+#: gst/gsterror.c:259
 msgid "Could not multiplex stream."
 msgstr "Impossible de multiplexer le flux."
 
+#: gst/gsterror.c:261
 msgid "The stream is in the wrong format."
 msgstr "Le format du flux n’est pas correct."
 
+#: gst/gsterror.c:263
 msgid "The stream is encrypted and decryption is not supported."
 msgstr "Le flux est chiffré et le déchiffrement n’est pas pris en charge."
 
-msgid ""
-"The stream is encrypted and can't be decrypted because no suitable key has "
-"been supplied."
-msgstr ""
-"Le flux est chiffré et il ne peut être déchiffré car aucune clef valable n’a "
-"été fournie."
+#: gst/gsterror.c:265
+msgid "The stream is encrypted and can't be decrypted because no suitable key has been supplied."
+msgstr "Le flux est chiffré et il ne peut être déchiffré car aucune clef valable n’a été fournie."
 
+#: gst/gsterror.c:305
 #, c-format
 msgid "No error message for domain %s."
 msgstr "Aucun message d’erreur pour le domaine %s."
 
+#: gst/gsterror.c:313
 #, c-format
 msgid "No standard error message for domain %s and code %d."
 msgstr "Aucun message d’erreur standard pour le domaine %s et le code %d."
 
+#: gst/gstpipeline.c:562
 msgid "Selected clock cannot be used in pipeline."
 msgstr "L’horloge sélectionnée ne peut pas être utilisée dans le pipeline."
 
+#: gst/gstregistry.c:1694
 #, c-format
 msgid "Error writing registry cache to %s: %s"
 msgstr "Erreur d’écriture du cache de registre à %s : %s"
 
+#: gst/gsttaglist.c:108
 msgid "title"
 msgstr "titre"
 
+#: gst/gsttaglist.c:108
 msgid "commonly used title"
 msgstr "titre utilisé habituellement"
 
+#: gst/gsttaglist.c:111
 msgid "title sortname"
 msgstr "titre pour le tri"
 
+#: gst/gsttaglist.c:111
 msgid "commonly used title for sorting purposes"
 msgstr "titre utilisé habituellement dans un but de tri"
 
+#: gst/gsttaglist.c:114
 msgid "artist"
 msgstr "artiste"
 
+#: gst/gsttaglist.c:115
 msgid "person(s) responsible for the recording"
 msgstr "personne(s) responsable(s) de l’enregistrement"
 
+#: gst/gsttaglist.c:119
 msgid "artist sortname"
 msgstr "nom d’artiste pour le tri"
 
+#: gst/gsttaglist.c:120
 msgid "person(s) responsible for the recording for sorting purposes"
 msgstr "personne(s) responsable(s) de l’enregistrement, dans un but de tri"
 
+#: gst/gsttaglist.c:123
 msgid "album"
 msgstr "album"
 
+#: gst/gsttaglist.c:124
 msgid "album containing this data"
 msgstr "album contenant ces données"
 
+#: gst/gsttaglist.c:127
 msgid "album sortname"
 msgstr "nom d’album pour le tri"
 
+#: gst/gsttaglist.c:128
 msgid "album containing this data for sorting purposes"
 msgstr "album contenant ces données, dans un but de tri"
 
+#: gst/gsttaglist.c:131
 msgid "album artist"
 msgstr "artiste de l’album"
 
+#: gst/gsttaglist.c:132
 msgid "The artist of the entire album, as it should be displayed"
 msgstr "L’artiste de l’album entier, tel qu’il devrait s’afficher"
 
+#: gst/gsttaglist.c:136
 msgid "album artist sortname"
 msgstr "nom d’artiste de l’album pour le tri"
 
+#: gst/gsttaglist.c:137
 msgid "The artist of the entire album, as it should be sorted"
 msgstr "L’artiste de l’album entier, adapté pour le tri"
 
+#: gst/gsttaglist.c:139
 msgid "date"
 msgstr "date"
 
+#: gst/gsttaglist.c:139
 msgid "date the data was created (as a GDate structure)"
 msgstr "date de création des données (sous forme de structure GDate)"
 
+#: gst/gsttaglist.c:141
 msgid "datetime"
 msgstr "date et heure"
 
+#: gst/gsttaglist.c:142
 msgid "date and time the data was created (as a GstDateTime structure)"
-msgstr ""
-"date et heure de création des données (sous forme de structure GstDateTime)"
+msgstr "date et heure de création des données (sous forme de structure GstDateTime)"
 
+#: gst/gsttaglist.c:146
 msgid "genre"
 msgstr "genre"
 
+#: gst/gsttaglist.c:147
 msgid "genre this data belongs to"
 msgstr "genre auquel ces données appartiennent"
 
+#: gst/gsttaglist.c:150
 msgid "comment"
 msgstr "commentaire"
 
+#: gst/gsttaglist.c:151
 msgid "free text commenting the data"
 msgstr "texte libre décrivant les données"
 
+#: gst/gsttaglist.c:154
 msgid "extended comment"
 msgstr "commentaire étendu"
 
+#: gst/gsttaglist.c:155
 msgid "free text commenting the data in key=value or key[en]=comment form"
-msgstr ""
-"texte libre décrivant les données sous la forme clé=valeur ou "
-"clé[en]=commentaire"
+msgstr "texte libre décrivant les données sous la forme clé=valeur ou clé[en]=commentaire"
 
+#: gst/gsttaglist.c:159
 msgid "track number"
 msgstr "numéro de piste"
 
+#: gst/gsttaglist.c:160
 msgid "track number inside a collection"
 msgstr "numéro de piste au sein d’une collection"
 
+#: gst/gsttaglist.c:163
 msgid "track count"
 msgstr "nombre de pistes"
 
+#: gst/gsttaglist.c:164
 msgid "count of tracks inside collection this track belongs to"
 msgstr "nombre de pistes dans la collection dont ces données font partie"
 
+#: gst/gsttaglist.c:168
 msgid "disc number"
 msgstr "numéro de disque"
 
+#: gst/gsttaglist.c:169
 msgid "disc number inside a collection"
 msgstr "numéro de disque au sein d’une collection"
 
+#: gst/gsttaglist.c:172
 msgid "disc count"
 msgstr "nombre de disques"
 
+#: gst/gsttaglist.c:173
 msgid "count of discs inside collection this disc belongs to"
 msgstr "nombre de disques dans la collection dont ces données font partie"
 
+#: gst/gsttaglist.c:177
 msgid "location"
 msgstr "emplacement"
 
-msgid ""
-"Origin of media as a URI (location, where the original of the file or stream "
-"is hosted)"
-msgstr ""
-"Origine du média sous forme d’URI (emplacement de l’hébergement d’origine du "
-"fichier ou du flux)"
+#: gst/gsttaglist.c:177
+msgid "Origin of media as a URI (location, where the original of the file or stream is hosted)"
+msgstr "Origine du média sous forme d’URI (emplacement de l’hébergement d’origine du fichier ou du flux)"
 
+#: gst/gsttaglist.c:182
 msgid "homepage"
 msgstr "site Web"
 
+#: gst/gsttaglist.c:183
 msgid "Homepage for this media (i.e. artist or movie homepage)"
 msgstr "Site Web de ce média (par ex. site de l’artiste ou du film)"
 
+#: gst/gsttaglist.c:186
 msgid "description"
 msgstr "description"
 
+#: gst/gsttaglist.c:187
 msgid "short text describing the content of the data"
 msgstr "texte court décrivant le contenu des données"
 
+#: gst/gsttaglist.c:190
 msgid "version"
 msgstr "version"
 
+#: gst/gsttaglist.c:190
 msgid "version of this data"
 msgstr "version de ces données"
 
+#: gst/gsttaglist.c:192
 msgid "ISRC"
 msgstr "ISRC"
 
+#: gst/gsttaglist.c:194
 msgid "International Standard Recording Code - see http://www.ifpi.org/isrc/"
 msgstr "International Standard Recording Code - voir http://www.ifpi.org/isrc/"
 
+#: gst/gsttaglist.c:198
 msgid "organization"
 msgstr "organisation"
 
+#: gst/gsttaglist.c:201
 msgid "copyright"
 msgstr "copyright"
 
+#: gst/gsttaglist.c:201
 msgid "copyright notice of the data"
 msgstr "information sur le copyright des données"
 
+#: gst/gsttaglist.c:203
 msgid "copyright uri"
 msgstr "URI du copyright"
 
+#: gst/gsttaglist.c:204
 msgid "URI to the copyright notice of the data"
 msgstr "URI vers l’information de copyright des données"
 
+#: gst/gsttaglist.c:206
 msgid "encoded by"
 msgstr "codé par"
 
+#: gst/gsttaglist.c:206
 msgid "name of the encoding person or organization"
 msgstr "nom de la personne ou de l’organisation qui a effectué le codage"
 
+#: gst/gsttaglist.c:210
 msgid "contact"
 msgstr "contact"
 
+#: gst/gsttaglist.c:210
 msgid "contact information"
 msgstr "informations sur le contact"
 
+#: gst/gsttaglist.c:212
 msgid "license"
 msgstr "licence"
 
+#: gst/gsttaglist.c:212
 msgid "license of data"
 msgstr "licence des données"
 
+#: gst/gsttaglist.c:214
 msgid "license uri"
 msgstr "URI de la licence"
 
+#: gst/gsttaglist.c:215
 msgid "URI to the license of the data"
 msgstr "URI vers la licence des données"
 
+#: gst/gsttaglist.c:218
 msgid "performer"
 msgstr "interprète"
 
+#: gst/gsttaglist.c:219
 msgid "person(s) performing"
 msgstr "personne(s) qui interprète(nt)"
 
+#: gst/gsttaglist.c:222
 msgid "composer"
 msgstr "compositeur"
 
+#: gst/gsttaglist.c:223
 msgid "person(s) who composed the recording"
 msgstr "personne(s) qui a/ont composé l’enregistrement"
 
+#: gst/gsttaglist.c:227
 msgid "conductor"
 msgstr "réalisateur"
 
+#: gst/gsttaglist.c:228
 msgid "conductor/performer refinement"
 msgstr "détails sur le réalisateur / interprète"
 
+#: gst/gsttaglist.c:231
 msgid "duration"
 msgstr "durée"
 
+#: gst/gsttaglist.c:231
 msgid "length in GStreamer time units (nanoseconds)"
 msgstr "longueur en unité de temps GStreamer (nanosecondes)"
 
+#: gst/gsttaglist.c:234
 msgid "codec"
 msgstr "codec"
 
+#: gst/gsttaglist.c:235
 msgid "codec the data is stored in"
 msgstr "codec de stockage des données"
 
+#: gst/gsttaglist.c:238
 msgid "video codec"
 msgstr "codec vidéo"
 
+#: gst/gsttaglist.c:238
 msgid "codec the video data is stored in"
 msgstr "codec de stockage des données vidéo"
 
+#: gst/gsttaglist.c:241
 msgid "audio codec"
 msgstr "codec audio"
 
+#: gst/gsttaglist.c:241
 msgid "codec the audio data is stored in"
 msgstr "codec de stockage des données audio"
 
+#: gst/gsttaglist.c:244
 msgid "subtitle codec"
 msgstr "codec des sous-titres"
 
+#: gst/gsttaglist.c:244
 msgid "codec the subtitle data is stored in"
 msgstr "codec de stockage des sous-titres"
 
+#: gst/gsttaglist.c:246
 msgid "container format"
 msgstr "format du conteneur"
 
+#: gst/gsttaglist.c:247
 msgid "container format the data is stored in"
 msgstr "format du conteneur dans lequel sont stockées les données"
 
+#: gst/gsttaglist.c:249
 msgid "bitrate"
 msgstr "débit"
 
+#: gst/gsttaglist.c:249
 msgid "exact or average bitrate in bits/s"
 msgstr "débit exact ou moyen en bits par seconde"
 
+#: gst/gsttaglist.c:251
 msgid "nominal bitrate"
 msgstr "débit nominal"
 
+#: gst/gsttaglist.c:251
 msgid "nominal bitrate in bits/s"
 msgstr "débit nominal en bits par seconde"
 
+#: gst/gsttaglist.c:253
 msgid "minimum bitrate"
 msgstr "débit minimum"
 
+#: gst/gsttaglist.c:253
 msgid "minimum bitrate in bits/s"
 msgstr "débit minimum en bits par seconde"
 
+#: gst/gsttaglist.c:255
 msgid "maximum bitrate"
 msgstr "débit maximum"
 
+#: gst/gsttaglist.c:255
 msgid "maximum bitrate in bits/s"
 msgstr "débit maximum en bits par seconde"
 
+#: gst/gsttaglist.c:258
 msgid "encoder"
 msgstr "codeur"
 
+#: gst/gsttaglist.c:258
 msgid "encoder used to encode this stream"
 msgstr "codeur utilisé pour le codage du flux"
 
+#: gst/gsttaglist.c:261
 msgid "encoder version"
 msgstr "version du codeur"
 
+#: gst/gsttaglist.c:262
 msgid "version of the encoder used to encode this stream"
 msgstr "version du codeur utilisé pour le codage du flux"
 
+#: gst/gsttaglist.c:264
 msgid "serial"
 msgstr "numéro de série"
 
+#: gst/gsttaglist.c:264
 msgid "serial number of track"
 msgstr "numéro de série de la piste"
 
+#: gst/gsttaglist.c:266
 msgid "replaygain track gain"
 msgstr "gain de piste replaygain"
 
+#: gst/gsttaglist.c:266
 msgid "track gain in db"
 msgstr "gain de la piste en décibels"
 
+#: gst/gsttaglist.c:268
 msgid "replaygain track peak"
 msgstr "crête de piste replaygain"
 
+#: gst/gsttaglist.c:268
 msgid "peak of the track"
 msgstr "crête de la piste"
 
+#: gst/gsttaglist.c:270
 msgid "replaygain album gain"
 msgstr "gain d’album replaygain"
 
+#: gst/gsttaglist.c:270
 msgid "album gain in db"
 msgstr "gain de l’album en décibels"
 
+#: gst/gsttaglist.c:272
 msgid "replaygain album peak"
 msgstr "crête d’album replaygain"
 
+#: gst/gsttaglist.c:272
 msgid "peak of the album"
 msgstr "crête de l’album"
 
+#: gst/gsttaglist.c:274
 msgid "replaygain reference level"
 msgstr "niveau de référence replaygain"
 
+#: gst/gsttaglist.c:275
 msgid "reference level of track and album gain values"
 msgstr "niveau de référence des valeurs de gain de piste et d’album"
 
+#: gst/gsttaglist.c:277
 msgid "language code"
 msgstr "code linguistique"
 
+#: gst/gsttaglist.c:278
 msgid "language code for this stream, conforming to ISO-639-1 or ISO-639-2"
 msgstr "code linguistique du flux, selon la norme ISO-639-1 ou ISO-639-2"
 
+#: gst/gsttaglist.c:281
 msgid "language name"
 msgstr "nom de la langue"
 
+#: gst/gsttaglist.c:282
 msgid "freeform name of the language this stream is in"
 msgstr "nom explicite de la langue de ce flux"
 
+#: gst/gsttaglist.c:284
 msgid "image"
 msgstr "image"
 
+#: gst/gsttaglist.c:284
 msgid "image related to this stream"
 msgstr "image liée à ce flux"
 
 #. TRANSLATORS: 'preview image' = image that shows a preview of the full image
+#: gst/gsttaglist.c:288
 msgid "preview image"
 msgstr "image d’aperçu"
 
+#: gst/gsttaglist.c:288
 msgid "preview image related to this stream"
 msgstr "image d’aperçu liée à ce flux"
 
+#: gst/gsttaglist.c:290
 msgid "attachment"
 msgstr "pièce jointe"
 
+#: gst/gsttaglist.c:290
 msgid "file attached to this stream"
 msgstr "fichier joint à ce flux"
 
+#: gst/gsttaglist.c:293
 msgid "beats per minute"
 msgstr "pulsations par minute"
 
+#: gst/gsttaglist.c:294
 msgid "number of beats per minute in audio"
 msgstr "nombre de pulsations par minute de la piste audio"
 
+#: gst/gsttaglist.c:296
 msgid "keywords"
 msgstr "mots-clés"
 
+#: gst/gsttaglist.c:296
 msgid "comma separated keywords describing the content"
 msgstr "mots-clés décrivant le contenu, séparés par des virgules"
 
+#: gst/gsttaglist.c:299
 msgid "geo location name"
 msgstr "nom d’emplacement géographique"
 
-msgid ""
-"human readable descriptive location of where the media has been recorded or "
-"produced"
-msgstr ""
-"description intelligible de l’endroit où le média a été enregistré ou produit"
+#: gst/gsttaglist.c:300
+msgid "human readable descriptive location of where the media has been recorded or produced"
+msgstr "description intelligible de l’endroit où le média a été enregistré ou produit"
 
+#: gst/gsttaglist.c:303
 msgid "geo location latitude"
 msgstr "latitude de l’emplacement"
 
-msgid ""
-"geo latitude location of where the media has been recorded or produced in "
-"degrees according to WGS84 (zero at the equator, negative values for "
-"southern latitudes)"
-msgstr ""
-"latitude de l’endroit géographique où le média a été enregistré ou produit, "
-"en degrés, conformément à WGS84 (zéro à l’équateur, valeurs négatives dans "
-"l’hémisphère sud)"
+#: gst/gsttaglist.c:304
+msgid "geo latitude location of where the media has been recorded or produced in degrees according to WGS84 (zero at the equator, negative values for southern latitudes)"
+msgstr "latitude de l’endroit géographique où le média a été enregistré ou produit, en degrés, conformément à WGS84 (zéro à l’équateur, valeurs négatives dans l’hémisphère sud)"
 
+#: gst/gsttaglist.c:308
 msgid "geo location longitude"
 msgstr "longitude de l’emplacement"
 
-msgid ""
-"geo longitude location of where the media has been recorded or produced in "
-"degrees according to WGS84 (zero at the prime meridian in Greenwich/UK,  "
-"negative values for western longitudes)"
-msgstr ""
-"longitude de l’endroit géographique où le média a été enregistré ou produit, "
-"en degrés, conformément à WGS84 (zéro au premier méridien de Greenwich (GB), "
-"valeurs négatives pour les longitudes vers l’ouest)"
+#: gst/gsttaglist.c:309
+msgid "geo longitude location of where the media has been recorded or produced in degrees according to WGS84 (zero at the prime meridian in Greenwich/UK,  negative values for western longitudes)"
+msgstr "longitude de l’endroit géographique où le média a été enregistré ou produit, en degrés, conformément à WGS84 (zéro au premier méridien de Greenwich (GB), valeurs négatives pour les longitudes vers l’ouest)"
 
+#: gst/gsttaglist.c:313
 msgid "geo location elevation"
 msgstr "altitude de l’emplacement"
 
-msgid ""
-"geo elevation of where the media has been recorded or produced in meters "
-"according to WGS84 (zero is average sea level)"
-msgstr ""
-"altitude de l’endroit géographique où le média a été enregistré ou produit, "
-"en mètres, conformément à WGS84 (zéro au niveau moyen de la mer)"
+#: gst/gsttaglist.c:314
+msgid "geo elevation of where the media has been recorded or produced in meters according to WGS84 (zero is average sea level)"
+msgstr "altitude de l’endroit géographique où le média a été enregistré ou produit, en mètres, conformément à WGS84 (zéro au niveau moyen de la mer)"
 
+#: gst/gsttaglist.c:317
 msgid "geo location country"
 msgstr "pays de l’emplacement"
 
+#: gst/gsttaglist.c:318
 msgid "country (english name) where the media has been recorded or produced"
 msgstr "pays (nom anglais) où le média a été enregistré ou produit"
 
+#: gst/gsttaglist.c:321
 msgid "geo location city"
 msgstr "ville de l’emplacement"
 
+#: gst/gsttaglist.c:322
 msgid "city (english name) where the media has been recorded or produced"
 msgstr "ville (nom anglais) où le média a été enregistré ou produit"
 
+#: gst/gsttaglist.c:325
 msgid "geo location sublocation"
 msgstr "zone locale de l’emplacement"
 
-msgid ""
-"a location within a city where the media has been produced or created (e.g. "
-"the neighborhood)"
-msgstr ""
-"un endroit de la localité où le média a été enregistré ou produit (par ex. "
-"le voisinage)"
+#: gst/gsttaglist.c:326
+msgid "a location within a city where the media has been produced or created (e.g. the neighborhood)"
+msgstr "un endroit de la localité où le média a été enregistré ou produit (par ex. le voisinage)"
 
+#: gst/gsttaglist.c:329
 msgid "geo location horizontal error"
 msgstr "erreur horizontale de l’emplacement"
 
+#: gst/gsttaglist.c:330
 msgid "expected error of the horizontal positioning measures (in meters)"
 msgstr "erreur probable des mesures de position horizontale (en mètres)"
 
+#: gst/gsttaglist.c:333
 msgid "geo location movement speed"
 msgstr "vitesse de déplacement géolocalisé"
 
-msgid ""
-"movement speed of the capturing device while performing the capture in m/s"
-msgstr ""
-"vitesse du mouvement (en m/s) du périphérique de capture durant la capture"
+#: gst/gsttaglist.c:334
+msgid "movement speed of the capturing device while performing the capture in m/s"
+msgstr "vitesse du mouvement (en m/s) du périphérique de capture durant la capture"
 
+#: gst/gsttaglist.c:337
 msgid "geo location movement direction"
 msgstr "direction du déplacement géolocalisé"
 
-msgid ""
-"indicates the movement direction of the device performing the capture of a "
-"media. It is represented as degrees in floating point representation, 0 "
-"means the geographic north, and increases clockwise"
-msgstr ""
-"indique la direction du déplacement du périphérique effectuant la capture "
-"d’un média. Elle est indiquée en degrés, par un nombre à virgules. 0 indique "
-"le nord géographique et le nombre augmente dans le sens horaire"
+#: gst/gsttaglist.c:338
+msgid "indicates the movement direction of the device performing the capture of a media. It is represented as degrees in floating point representation, 0 means the geographic north, and increases clockwise"
+msgstr "indique la direction du déplacement du périphérique effectuant la capture d’un média. Elle est indiquée en degrés, par un nombre à virgules. 0 indique le nord géographique et le nombre augmente dans le sens horaire"
 
+#: gst/gsttaglist.c:343
 msgid "geo location capture direction"
 msgstr "direction de la capture géolocalisée"
 
-msgid ""
-"indicates the direction the device is pointing to when capturing  a media. "
-"It is represented as degrees in floating point  representation, 0 means the "
-"geographic north, and increases clockwise"
-msgstr ""
-"indique la direction du périphérique au moment de la capture d’un média. "
-"Elle est indiquée en degrés, par un nombre à virgules. 0 indique le nord "
-"géographique et le nombre augmente dans le sens horaire"
+#: gst/gsttaglist.c:344
+msgid "indicates the direction the device is pointing to when capturing  a media. It is represented as degrees in floating point  representation, 0 means the geographic north, and increases clockwise"
+msgstr "indique la direction du périphérique au moment de la capture d’un média. Elle est indiquée en degrés, par un nombre à virgules. 0 indique le nord géographique et le nombre augmente dans le sens horaire"
 
 #. TRANSLATORS: 'show name' = 'TV/radio/podcast show name' here
+#: gst/gsttaglist.c:350
 msgid "show name"
 msgstr "nom d’émission"
 
+#: gst/gsttaglist.c:351
 msgid "Name of the tv/podcast/series show the media is from"
 msgstr "Nom de l’émission TV, du podcast ou de la série d’où provient le média"
 
 #. TRANSLATORS: 'show sortname' = 'TV/radio/podcast show name as used for sorting purposes' here
+#: gst/gsttaglist.c:356
 msgid "show sortname"
 msgstr "nom d’émission pour le tri"
 
-msgid ""
-"Name of the tv/podcast/series show the media is from, for sorting purposes"
-msgstr ""
-"Nom de l’émission TV, du podcast ou de la série d’où provient le média, dans "
-"l’optique du tri"
+#: gst/gsttaglist.c:357
+msgid "Name of the tv/podcast/series show the media is from, for sorting purposes"
+msgstr "Nom de l’émission TV, du podcast ou de la série d’où provient le média, dans l’optique du tri"
 
+#: gst/gsttaglist.c:360
 msgid "episode number"
 msgstr "numéro d’épisode"
 
+#: gst/gsttaglist.c:361
 msgid "The episode number in the season the media is part of"
 msgstr "Le numéro d’épisode de la série dont fait partie le média"
 
+#: gst/gsttaglist.c:364
 msgid "season number"
 msgstr "numéro de saison"
 
+#: gst/gsttaglist.c:365
 msgid "The season number of the show the media is part of"
 msgstr "Le numéro de la saison de l’émission dont fait partie le média"
 
+#: gst/gsttaglist.c:368
 msgid "lyrics"
 msgstr "paroles"
 
+#: gst/gsttaglist.c:368
 msgid "The lyrics of the media, commonly used for songs"
 msgstr "Les paroles du média, utilisé surtout pour les chansons"
 
+#: gst/gsttaglist.c:371
 msgid "composer sortname"
 msgstr "nom du compositeur pour le tri"
 
+#: gst/gsttaglist.c:372
 msgid "person(s) who composed the recording, for sorting purposes"
 msgstr "personne(s) qui ont composé l’enregistrement, dans un but de tri"
 
+#: gst/gsttaglist.c:374
 msgid "grouping"
 msgstr "regroupement"
 
-msgid ""
-"Groups related media that spans multiple tracks, like the different pieces "
-"of a concerto. It is a higher level than a track, but lower than an album"
-msgstr ""
-"Unité de groupe pour des médias qui contiennent plusieurs pistes, comme les "
-"différents morceaux d’un concerto. De plus haut niveau que la piste, mais de "
-"plus bas niveau que l’album"
+#: gst/gsttaglist.c:375
+msgid "Groups related media that spans multiple tracks, like the different pieces of a concerto. It is a higher level than a track, but lower than an album"
+msgstr "Unité de groupe pour des médias qui contiennent plusieurs pistes, comme les différents morceaux d’un concerto. De plus haut niveau que la piste, mais de plus bas niveau que l’album"
 
+#: gst/gsttaglist.c:379
 msgid "user rating"
 msgstr "évaluation par l’utilisateur"
 
-msgid ""
-"Rating attributed by a user. The higher the rank, the more the user likes "
-"this media"
-msgstr ""
-"Note attribuée par une personne. Plus la note est élevée, plus la personne "
-"apprécie ce média"
+#: gst/gsttaglist.c:380
+msgid "Rating attributed by a user. The higher the rank, the more the user likes this media"
+msgstr "Note attribuée par une personne. Plus la note est élevée, plus la personne apprécie ce média"
 
+#: gst/gsttaglist.c:383
 msgid "device manufacturer"
 msgstr "fabricant du périphérique"
 
+#: gst/gsttaglist.c:384
 msgid "Manufacturer of the device used to create this media"
 msgstr "Fabricant du périphérique utilisé pour créer ce média"
 
+#: gst/gsttaglist.c:386
 msgid "device model"
 msgstr "modèle du périphérique"
 
+#: gst/gsttaglist.c:387
 msgid "Model of the device used to create this media"
 msgstr "Modèle du périphérique utilisé pour créer ce média"
 
+#: gst/gsttaglist.c:389
 msgid "application name"
 msgstr "nom de l’application"
 
+#: gst/gsttaglist.c:390
 msgid "Application used to create the media"
 msgstr "Application utilisée pour créer ce média"
 
+#: gst/gsttaglist.c:392
 msgid "application data"
 msgstr "données applicatives"
 
+#: gst/gsttaglist.c:393
 msgid "Arbitrary application data to be serialized into the media"
 msgstr "Données arbitraires de l’application à sérialiser dans le média"
 
+#: gst/gsttaglist.c:395
 msgid "image orientation"
 msgstr "orientation de l’image"
 
+#: gst/gsttaglist.c:396
 msgid "How the image should be rotated or flipped before display"
-msgstr ""
-"Indique la manière de pivoter ou de retourner l’image avant de l’afficher"
+msgstr "Indique la manière de pivoter ou de retourner l’image avant de l’afficher"
 
+#: gst/gsttaglist.c:399
 msgid "publisher"
 msgstr "éditeur"
 
+#: gst/gsttaglist.c:400
 msgid "Name of the label or publisher"
 msgstr "Nom de l’étiquette ou de l’éditeur"
 
+#: gst/gsttaglist.c:403
 msgid "interpreted-by"
 msgstr "interprété-par"
 
+#: gst/gsttaglist.c:404
 msgid "Information about the people behind a remix and similar interpretations"
-msgstr ""
-"Information sur les personnes qui ont fait un remix et interprétations "
-"similaires"
+msgstr "Information sur les personnes qui ont fait un remix et interprétations similaires"
 
+#: gst/gsttaglist.c:408
 msgid "midi-base-note"
 msgstr "midi-base-note"
 
+#: gst/gsttaglist.c:408
 msgid "Midi note number of the audio track."
-msgstr "Numèro de note Midi d’une piste audio."
+msgstr "Numéro de note Midi d’une piste audio."
 
+#: gst/gsttaglist.c:411
 msgid "private-data"
 msgstr "données-privées"
 
+#: gst/gsttaglist.c:411
 msgid "Private data"
 msgstr "Données privées"
 
+#: gst/gsttaglist.c:451
 msgid ", "
 msgstr ", "
 
+#: gst/gsturi.c:648
 #, c-format
 msgid "No URI handler for the %s protocol found"
 msgstr "Aucun gestionnaire d’URI trouvé pour le protocole %s"
 
+#: gst/gsturi.c:823
 #, c-format
 msgid "URI scheme '%s' not supported"
-msgstr "schèma URI « %s » non pris en charge"
+msgstr "schéma URI « %s » non pris en charge"
 
+#: gst/gstutils.c:2632 tools/gst-launch.c:325
 #, c-format
 msgid "ERROR: from element %s: %s\n"
 msgstr "ERREUR : de l’élément %s : %s\n"
 
+#: gst/gstutils.c:2634 tools/gst-launch.c:327 tools/gst-launch.c:697
 #, c-format
 msgid ""
 "Additional debug info:\n"
@@ -861,350 +1011,422 @@ msgstr ""
 "Information de débogage supplémentaire :\n"
 "%s\n"
 
+#: gst/parse/grammar.y:216
 #, c-format
 msgid "link has no source [sink=%s@%p]"
 msgstr "lien sans source [sink=%s@%p]"
 
+#: gst/parse/grammar.y:221
 #, c-format
 msgid "link has no sink [source=%s@%p]"
 msgstr "lien sans sink [source=%s@%p]"
 
+#: gst/parse/grammar.y:413
 #, c-format
 msgid "no property \"%s\" in element \"%s\""
 msgstr "pas de propriété « %s » dans l’élément « %s »"
 
+#: gst/parse/grammar.y:454
 #, c-format
 msgid "could not set property \"%s\" in element \"%s\" to \"%s\""
 msgstr "impossible de définir la propriété « %s » de l’élément « %s » à « %s »"
 
+#: gst/parse/grammar.y:507
 msgid "Delayed linking failed."
 msgstr "Échec du chargement dynamique différé."
 
+#: gst/parse/grammar.y:719 gst/parse/grammar.y:724
 #, c-format
 msgid "could not link %s to %s, %s can't handle caps %s"
 msgstr "impossible de connecter %s à %s, %s n’accepte pas les majuscules %s"
 
+#: gst/parse/grammar.y:729
 #, c-format
 msgid "could not link %s to %s, neither element can handle caps %s"
-msgstr ""
-"impossible de connecter %s à %s, aucun élément n’accepte les majuscules %s"
+msgstr "impossible de connecter %s à %s, aucun élément n’accepte les majuscules %s"
 
+#: gst/parse/grammar.y:733
 #, c-format
 msgid "could not link %s to %s with caps %s"
 msgstr "impossible de connecter %s à %s avec les majuscules %s"
 
+#: gst/parse/grammar.y:739
 #, c-format
 msgid "could not link %s to %s"
 msgstr "impossible de connecter %s à %s"
 
+#: gst/parse/grammar.y:816
 #, c-format
 msgid "no element \"%s\""
 msgstr "pas d’élément « %s »"
 
+#: gst/parse/grammar.y:877
 #, c-format
 msgid "unexpected reference \"%s\" - ignoring"
 msgstr "référence « %s » inattendue - ignoré"
 
+#: gst/parse/grammar.y:883
 #, c-format
 msgid "unexpected pad-reference \"%s\" - ignoring"
 msgstr "pad-référence « %s » inattendue - ignoré"
 
+#: gst/parse/grammar.y:915 gst/parse/grammar.y:924
 #, c-format
 msgid "could not parse caps \"%s\""
 msgstr "impossible d’analyser le caps « %s »"
 
+#: gst/parse/grammar.y:952
 #, c-format
 msgid "no sink element for URI \"%s\""
 msgstr "pas d’élément d’entrée pour l’URI « %s »"
 
+#: gst/parse/grammar.y:971
 #, c-format
 msgid "no source element for URI \"%s\""
 msgstr "pas d’élément source pour l’URI « %s »"
 
+#: gst/parse/grammar.y:1061
 msgid "syntax error"
 msgstr "erreur de syntaxe"
 
+#: gst/parse/grammar.y:1084
 #, c-format
 msgid "specified empty bin \"%s\", not allowed"
 msgstr "conteneur « %s » vide, non autorisé"
 
+#: gst/parse/grammar.y:1094
 #, c-format
 msgid "no bin \"%s\", unpacking elements"
 msgstr "pas de conteneur « %s », dépaquetage des éléments"
 
+#: gst/parse/grammar.y:1125
 msgid "empty pipeline not allowed"
 msgstr "pipeline vide non autorisé"
 
+#: libs/gst/base/gstbasesink.c:1210
 msgid "Pipeline construction is invalid, please add queues."
-msgstr ""
+msgstr "Construction du pipeline invalide, veuillez ajouter des queues."
 
+#: libs/gst/base/gstbasesink.c:3004
 msgid "A lot of buffers are being dropped."
 msgstr "De nombreux tampons sont éliminés."
 
+#: libs/gst/base/gstbasesink.c:3496
 msgid "Internal data flow problem."
 msgstr "Problème interne de flux de données."
 
+#: libs/gst/base/gstbasesink.c:4222 libs/gst/base/gstbasesrc.c:2708
 msgid "Internal data flow error."
 msgstr "Erreur interne de flux de données."
 
+#: libs/gst/base/gstbasesrc.c:2638
 msgid "Internal clock error."
 msgstr "Erreur d’horloge interne."
 
+#: libs/gst/base/gstbasesrc.c:2666 plugins/elements/gstdownloadbuffer.c:842
+#: plugins/elements/gstdownloadbuffer.c:1265
 msgid "Failed to map buffer."
-msgstr "Impossible de mapper les buffer."
+msgstr "Impossible de mapper les buffers."
 
+#: plugins/elements/gstcapsfilter.c:128
 msgid "Filter caps"
 msgstr "Capacités de filtrage"
 
-msgid ""
-"Restrict the possible allowed capabilities (NULL means ANY). Setting this "
-"property takes a reference to the supplied GstCaps object."
-msgstr ""
-"Restreint les capacités possibles autorisées (NULL signifie ANY). La "
-"définition de cette propriété nécessite une référence à l’objet GSTCaps "
-"fourni."
+#: plugins/elements/gstcapsfilter.c:129
+msgid "Restrict the possible allowed capabilities (NULL means ANY). Setting this property takes a reference to the supplied GstCaps object."
+msgstr "Restreint les capacités possibles autorisées (NULL signifie ANY). La définition de cette propriété nécessite une référence à l’objet GSTCaps fourni."
 
+#: plugins/elements/gstcapsfilter.c:136
 msgid "Caps Change Mode"
 msgstr "Mode majuscule activé"
 
+#: plugins/elements/gstcapsfilter.c:137
 msgid "Filter caps change behaviour"
 msgstr "Filtre de comportement de modification des majuscules"
 
+#: plugins/elements/gstdownloadbuffer.c:927 plugins/elements/gstqueue2.c:1792
 msgid "No Temp directory specified."
 msgstr "Aucun répertoire temporaire indiqué."
 
+#: plugins/elements/gstdownloadbuffer.c:933 plugins/elements/gstqueue2.c:1798
 #, c-format
 msgid "Could not create temp file \"%s\"."
 msgstr "Impossible de créer le fichier temporaire « %s »."
 
+#: plugins/elements/gstdownloadbuffer.c:941 plugins/elements/gstfilesrc.c:537
+#: plugins/elements/gstqueue2.c:1806
 #, c-format
 msgid "Could not open file \"%s\" for reading."
 msgstr "Impossible d’ouvrir le fichier « %s » en lecture."
 
+#: plugins/elements/gstdownloadbuffer.c:1274 plugins/elements/gstqueue2.c:2225
 msgid "Error while writing to download file."
 msgstr "Erreur d’écriture dans le fichier de téléchargement."
 
+#: plugins/elements/gstfilesink.c:404
 msgid "No file name specified for writing."
 msgstr "Aucun nom de fichier indiqué pour l’écriture."
 
+#: plugins/elements/gstfilesink.c:410
 #, c-format
 msgid "Could not open file \"%s\" for writing."
 msgstr "Impossible d’ouvrir le fichier « %s » en écriture."
 
+#: plugins/elements/gstfilesink.c:422 plugins/elements/gstfilesink.c:426
 #, c-format
 msgid "Error closing file \"%s\"."
 msgstr "Erreur lors de la fermeture du fichier « %s »."
 
+#: plugins/elements/gstfilesink.c:605
 #, c-format
 msgid "Error while seeking in file \"%s\"."
 msgstr "Erreur de positionnement dans le fichier « %s »."
 
+#: plugins/elements/gstfilesink.c:613 plugins/elements/gstfilesink.c:620
+#: plugins/elements/gstfilesink.c:793 plugins/elements/gstfilesink.c:848
 #, c-format
 msgid "Error while writing to file \"%s\"."
 msgstr "Erreur d’écriture dans le fichier « %s »."
 
+#: plugins/elements/gstfilesrc.c:525
 msgid "No file name specified for reading."
 msgstr "Aucun nom de fichier indiqué pour la lecture."
 
+#: plugins/elements/gstfilesrc.c:546
 #, c-format
 msgid "Could not get info on \"%s\"."
 msgstr "Impossible d’obtenir des infos sur « %s »."
 
+#: plugins/elements/gstfilesrc.c:552
 #, c-format
 msgid "\"%s\" is a directory."
 msgstr "« %s » est un répertoire."
 
+#: plugins/elements/gstfilesrc.c:558
 #, c-format
 msgid "File \"%s\" is a socket."
 msgstr "Le fichier « %s » est un connecteur."
 
+#: plugins/elements/gstidentity.c:722
 msgid "Failed after iterations as requested."
 msgstr "Échec suite aux itérations demandées."
 
+#: plugins/elements/gstidentity.c:903
 msgid "eos-after and error-after can't both be defined."
-msgstr ""
+msgstr "eos-after et error-after ne peuvent pas être définis en même temps."
 
+#: plugins/elements/gsttypefindelement.c:251
 msgid "caps"
 msgstr "capacités"
 
+#: plugins/elements/gsttypefindelement.c:252
 msgid "detected capabilities in stream"
 msgstr "capacités détectées dans le flux"
 
+#: plugins/elements/gsttypefindelement.c:255
 msgid "minimum"
 msgstr "minimum"
 
+#: plugins/elements/gsttypefindelement.c:260
 msgid "force caps"
 msgstr "forcer les capacités"
 
+#: plugins/elements/gsttypefindelement.c:261
 msgid "force caps without doing a typefind"
 msgstr "force les capacités sans faire de recherche de type"
 
+#: plugins/elements/gsttypefindelement.c:987
+#: plugins/elements/gsttypefindelement.c:1009
 msgid "Stream doesn't contain enough data."
 msgstr "Le flux ne contient pas assez de données."
 
+#: plugins/elements/gsttypefindelement.c:1129
 msgid "Stream contains no data."
 msgstr "Le flux ne contient aucune donnée."
 
-#, fuzzy, c-format
+#: tools/gst-inspect.c:290
+#, c-format
 msgid "%sImplemented Interfaces%s:\n"
-msgstr "Interfaces implémentées :\n"
+msgstr "%sinterfaces implémentées%s :\n"
 
+#: tools/gst-inspect.c:400
 msgid "readable"
 msgstr "accès en lecture"
 
+#: tools/gst-inspect.c:405
 msgid "writable"
 msgstr "accès en écriture"
 
+#: tools/gst-inspect.c:410
 msgid "deprecated"
 msgstr "obsolète"
 
+#: tools/gst-inspect.c:414
 msgid "controllable"
 msgstr "contrôlable"
 
+#: tools/gst-inspect.c:420
 msgid "changeable in NULL, READY, PAUSED or PLAYING state"
 msgstr "modifiable en l’état NULL, READY, PAUSED ou PLAYING"
 
+#: tools/gst-inspect.c:423
 msgid "changeable only in NULL, READY or PAUSED state"
 msgstr "modifiable uniquement en l’état NULL, READY ou PAUSED"
 
+#: tools/gst-inspect.c:426
 msgid "changeable only in NULL or READY state"
 msgstr "modifiable uniquement en l’état NULL ou READY"
 
+#: tools/gst-inspect.c:1131
 msgid "Blacklisted files:"
 msgstr "Fichiers sur liste noire :"
 
-#, fuzzy, c-format
+#: tools/gst-inspect.c:1143 tools/gst-inspect.c:1276
+#, c-format
 msgid "%sTotal count%s: %s"
-msgstr "Nombre total :"
+msgstr "%sNombre total%s : %s"
 
+#: tools/gst-inspect.c:1145
 #, c-format
 msgid "%d blacklisted file"
 msgid_plural "%d blacklisted files"
 msgstr[0] "%d fichier sur liste noire"
 msgstr[1] "%d fichiers sur liste noire"
 
+#: tools/gst-inspect.c:1278
 #, c-format
 msgid "%d plugin"
 msgid_plural "%d plugins"
 msgstr[0] "%d greffon"
 msgstr[1] "%d greffons"
 
+#: tools/gst-inspect.c:1281
 #, c-format
 msgid "%d blacklist entry"
 msgid_plural "%d blacklist entries"
 msgstr[0] "%d élément de liste noire"
 msgstr[1] "%d éléments de liste noire"
 
+#: tools/gst-inspect.c:1286
 #, c-format
 msgid "%d feature"
 msgid_plural "%d features"
 msgstr[0] "%d fonctionnalité"
 msgstr[1] "%d fonctionnalités"
 
+#: tools/gst-inspect.c:1953
 msgid "Print all elements"
 msgstr "Affiche tous les éléments"
 
+#: tools/gst-inspect.c:1955
 msgid "Print list of blacklisted files"
 msgstr "Affiche une liste des fichiers sur liste noire"
 
+#: tools/gst-inspect.c:1957
 msgid ""
-"Print a machine-parsable list of features the specified plugin or all "
-"plugins provide.\n"
-"                                       Useful in connection with external "
-"automatic plugin installation mechanisms"
+"Print a machine-parsable list of features the specified plugin or all plugins provide.\n"
+"                                       Useful in connection with external automatic plugin installation mechanisms"
 msgstr ""
-"Affiche sous forme machine une liste de fonctionnalités offertes par le "
-"greffon indiqué ou tous les greffons.\n"
-"                                       Utile en lien avec des mécanismes "
-"externes d’installation automatique de greffons"
+"Affiche sous forme machine une liste de fonctionnalités offertes par le greffon indiqué ou tous les greffons.\n"
+"                                       Utile en lien avec des mécanismes externes d’installation automatique de greffons"
 
+#: tools/gst-inspect.c:1962
 msgid "List the plugin contents"
 msgstr "Énumère le contenu du greffon"
 
-msgid ""
-"A slashes ('/') separated list of types of elements (also known as klass) to "
-"list. (unordered)"
-msgstr ""
-"Une liste de types d’éléments séparés par des barres oblique '/' (nommée "
-"aussi klass) vers une liste (non ordonnée)."
+#: tools/gst-inspect.c:1964
+msgid "A slashes ('/') separated list of types of elements (also known as klass) to list. (unordered)"
+msgstr "Une liste de types d’éléments séparés par des barres oblique '/' (nommée aussi klass) vers une liste (non ordonnée)."
 
+#: tools/gst-inspect.c:1967
 msgid "Check if the specified element or plugin exists"
 msgstr "Vérifie si l’élément ou le greffon indiqué existe"
 
-msgid ""
-"When checking if an element or plugin exists, also check that its version is "
-"at least the version specified"
-msgstr ""
-"Lors de la vérification de l’existence d’un élément ou d’un greffon, vérifie "
-"aussi que sa version est au minimum la version indiquée"
+#: tools/gst-inspect.c:1970
+msgid "When checking if an element or plugin exists, also check that its version is at least the version specified"
+msgstr "Lors de la vérification de l’existence d’un élément ou d’un greffon, vérifie aussi que sa version est au minimum la version indiquée"
 
+#: tools/gst-inspect.c:1974
 msgid "Print supported URI schemes, with the elements that implement them"
-msgstr ""
-"Affiche les types d’URI pris en charge, avec les éléments qui les "
-"implémentent"
+msgstr "Affiche les types d’URI pris en charge, avec les éléments qui les implémentent"
 
-msgid ""
-"Disable colors in output. You can also achieve the same by "
-"setting'GST_INSPECT_NO_COLORS' environment variable to any value."
-msgstr ""
+#: tools/gst-inspect.c:1979
+msgid "Disable colors in output. You can also achieve the same by setting'GST_INSPECT_NO_COLORS' environment variable to any value."
+msgstr "Désactive les couleurs en sortie. Vous pouvez aussi activer cette option en donnant une valeur non nulle à la variable d'environnement GST_INSPECT_NO_COLORS."
 
+#: tools/gst-inspect.c:2135
 #, c-format
 msgid "Could not load plugin file: %s\n"
 msgstr "Impossible de charger le fichier de greffon : %s\n"
 
+#: tools/gst-inspect.c:2141
 #, c-format
 msgid "No such element or plugin '%s'\n"
 msgstr "Aucun élément ou greffon « %s »\n"
 
+#: tools/gst-launch.c:252
 msgid "Index statistics"
 msgstr "Statistiques d’index"
 
+#: tools/gst-launch.c:578
 #, c-format
 msgid "Got message #%u from element \"%s\" (%s): "
 msgstr "Message n° %u reçu de l’élément « %s » (%s) : "
 
+#: tools/gst-launch.c:582
 #, c-format
 msgid "Got message #%u from pad \"%s:%s\" (%s): "
 msgstr "Message n° %u reçu du connecteur « %s:%s » (%s) : "
 
+#: tools/gst-launch.c:586
 #, c-format
 msgid "Got message #%u from object \"%s\" (%s): "
 msgstr "Message n° %u reçu de l’objet « %s » (%s) : "
 
+#: tools/gst-launch.c:590
 #, c-format
 msgid "Got message #%u (%s): "
 msgstr "Message n°%u reçu (%s) : "
 
+#: tools/gst-launch.c:622
 #, c-format
 msgid "Got EOS from element \"%s\".\n"
 msgstr "EOS reçu de l’élément « %s ».\n"
 
+#: tools/gst-launch.c:631
 #, c-format
 msgid "FOUND TAG      : found by element \"%s\".\n"
 msgstr "BALISE TROUVÉE  : découverte par l’élément « %s ».\n"
 
+#: tools/gst-launch.c:634
 #, c-format
 msgid "FOUND TAG      : found by pad \"%s:%s\".\n"
 msgstr "BALISE TROUVÉE  : découverte par le connecteur « %s:%s ».\n"
 
+#: tools/gst-launch.c:637
 #, c-format
 msgid "FOUND TAG      : found by object \"%s\".\n"
 msgstr "BALISE TROUVÉE  : découverte par l’objet « %s ».\n"
 
+#: tools/gst-launch.c:640
 msgid "FOUND TAG\n"
 msgstr "BALISE TROUVÉE\n"
 
+#: tools/gst-launch.c:655
 #, c-format
 msgid "FOUND TOC      : found by element \"%s\".\n"
 msgstr "TDM TROUVÉE     : découverte par l’élément « %s ».\n"
 
+#: tools/gst-launch.c:658
 #, c-format
 msgid "FOUND TOC      : found by object \"%s\".\n"
 msgstr "TDM TROUVÉE     : découverte par l’objet « %s ».\n"
 
+#: tools/gst-launch.c:661
 msgid "FOUND TOC\n"
 msgstr "TDM TROUVÉE\n"
 
+#: tools/gst-launch.c:678
 #, c-format
 msgid ""
 "INFO:\n"
@@ -1213,160 +1435,200 @@ msgstr ""
 "INFO :\n"
 "%s\n"
 
+#: tools/gst-launch.c:695
 #, c-format
 msgid "WARNING: from element %s: %s\n"
 msgstr "AVERTISSEMENT : de l’élément %s : %s\n"
 
+#: tools/gst-launch.c:730
 msgid "Prerolled, waiting for buffering to finish...\n"
 msgstr "Préparation terminée, attente de la fin de remplissage du tampon…\n"
 
+#: tools/gst-launch.c:734
 msgid "Prerolled, waiting for progress to finish...\n"
 msgstr "Préparation terminée, attente de la fin du traitement…\n"
 
+#: tools/gst-launch.c:746
 msgid "buffering..."
 msgstr "mise en mémoire tampon…"
 
+#: tools/gst-launch.c:757
 msgid "Done buffering, setting pipeline to PLAYING ...\n"
 msgstr "Mémoire tampon pleine, définition du pipeline à PLAYING…\n"
 
+#: tools/gst-launch.c:765
 msgid "Buffering, setting pipeline to PAUSED ...\n"
 msgstr "Remplissage du tampon, définition du pipeline à PAUSED…\n"
 
+#: tools/gst-launch.c:774
 msgid "Redistribute latency...\n"
 msgstr "Redistribution de latence…\n"
 
+#: tools/gst-launch.c:785
 #, c-format
 msgid "Setting state to %s as requested by %s...\n"
 msgstr "Définition de l’état à %s comme demandé par %s…\n"
 
+#: tools/gst-launch.c:801
 msgid "Interrupt: Stopping pipeline ...\n"
 msgstr "Interruption : arrêt du pipeline…\n"
 
+#: tools/gst-launch.c:830
 #, c-format
 msgid "Progress: (%s) %s\n"
 msgstr "Progression : (%s) %s\n"
 
+#: tools/gst-launch.c:843
 #, c-format
 msgid "Missing element: %s\n"
 msgstr "Élément manquant : %s\n"
 
+#: tools/gst-launch.c:857
 #, c-format
 msgid "Got context from element '%s': %s=%s\n"
 msgstr "Contexte de l’élément « %s » : %s=%s\n"
 
+#: tools/gst-launch.c:991
 msgid "Output tags (also known as metadata)"
 msgstr "Affiche les balises (aussi connues sous le nom de métadonnées)"
 
+#: tools/gst-launch.c:993
 msgid "Output TOC (chapters and editions)"
 msgstr "Affiche la table des matières (chapitres et éditions)"
 
+#: tools/gst-launch.c:995
 msgid "Output status information and property notifications"
 msgstr "Affiche des informations d’état et des notifications de propriétés"
 
+#: tools/gst-launch.c:997
 msgid "Do not print any progress information"
 msgstr "N’affiche pas d’informations de progression"
 
+#: tools/gst-launch.c:999
 msgid "Output messages"
 msgstr "Affiche des messages"
 
-msgid ""
-"Do not output status information for the specified property if verbose "
-"output is enabled (can be used multiple times)"
-msgstr ""
-"Ne pas afficher les informations de la propriété spécifiée si le mode "
-"verbeux est activé (peut être utilisé plusieurs fois)"
+#: tools/gst-launch.c:1001
+msgid "Do not output status information for the specified property if verbose output is enabled (can be used multiple times)"
+msgstr "Ne pas afficher les informations de la propriété spécifiée si le mode verbeux est activé (peut être utilisé plusieurs fois)"
 
+#: tools/gst-launch.c:1003
 msgid "PROPERTY-NAME"
 msgstr "NOM-PROPRIÉTÉ"
 
+#: tools/gst-launch.c:1005
 msgid "Do not install a fault handler"
 msgstr "N’installe pas de gestionnaire de dysfonctionnement"
 
+#: tools/gst-launch.c:1007
 msgid "Force EOS on sources before shutting the pipeline down"
 msgstr "Force l’EOS sur les sources avant de fermer le pipeline"
 
+#: tools/gst-launch.c:1010
 msgid "Gather and print index statistics"
 msgstr "Rassemble et affiche les statistiques d’index"
 
+#: tools/gst-launch.c:1077
 #, c-format
 msgid "ERROR: pipeline could not be constructed: %s.\n"
 msgstr "ERREUR : le pipeline n’a pas pu être construit : %s.\n"
 
+#: tools/gst-launch.c:1081
 msgid "ERROR: pipeline could not be constructed.\n"
 msgstr "ERREUR : le pipeline n’a pas pu être construit.\n"
 
+#: tools/gst-launch.c:1085
 #, c-format
 msgid "WARNING: erroneous pipeline: %s\n"
 msgstr "AVERTISSEMENT : pipeline erroné : %s\n"
 
+#: tools/gst-launch.c:1101
 msgid "ERROR: the 'pipeline' element wasn't found.\n"
 msgstr "ERREUR : l’élément « pipeline » est introuvable.\n"
 
+#: tools/gst-launch.c:1132 tools/gst-launch.c:1233
 msgid "Setting pipeline to PAUSED ...\n"
 msgstr "Définition du pipeline à PAUSED...\n"
 
+#: tools/gst-launch.c:1137
 msgid "ERROR: Pipeline doesn't want to pause.\n"
 msgstr "ERREUR : le pipeline refuse de se mettre en pause.\n"
 
+#: tools/gst-launch.c:1142
 msgid "Pipeline is live and does not need PREROLL ...\n"
 msgstr "Le pipeline est actif et n’a pas besoin de phase PREROLL…\n"
 
+#: tools/gst-launch.c:1146
 msgid "Pipeline is PREROLLING ...\n"
 msgstr "Le pipeline est en phase de PREROLL…\n"
 
+#: tools/gst-launch.c:1149 tools/gst-launch.c:1163
 msgid "ERROR: pipeline doesn't want to preroll.\n"
 msgstr "ERREUR : le pipeline refuse de passer en phase de préparation.\n"
 
+#: tools/gst-launch.c:1156
 msgid "Pipeline is PREROLLED ...\n"
 msgstr "Le pipeline a terminé la phase PREROLL…\n"
 
+#: tools/gst-launch.c:1169
 msgid "Setting pipeline to PLAYING ...\n"
 msgstr "Passage du pipeline à la phase PLAYING…\n"
 
+#: tools/gst-launch.c:1176
 msgid "ERROR: pipeline doesn't want to play.\n"
 msgstr "ERREUR : le pipeline refuse de passer en mode actif.\n"
 
+#: tools/gst-launch.c:1195
 msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n"
 msgstr "EOS à la fermeture est activé -- EOS forcé sur le pipeline\n"
 
+#: tools/gst-launch.c:1199
 msgid "EOS on shutdown enabled -- waiting for EOS after Error\n"
 msgstr "EOS à la fermeture est activé -- attente d’EOS après erreur\n"
 
+#: tools/gst-launch.c:1202
 msgid "Waiting for EOS...\n"
 msgstr "Attente d’EOS.\n"
 
+#: tools/gst-launch.c:1209
 msgid "EOS received - stopping pipeline...\n"
 msgstr "EOS reçu - arrêt du pipeline…\n"
 
+#: tools/gst-launch.c:1213
 msgid "Interrupt while waiting for EOS - stopping pipeline...\n"
-msgstr "Interruption lors de l’attende d’EOS - arrêt du pipeline…\n"
+msgstr "Interruption lors de l’attente d’EOS - arrêt du pipeline…\n"
 
+#: tools/gst-launch.c:1218
 msgid "An error happened while waiting for EOS\n"
 msgstr "Une erreur s’est produite lors de l’attente de l’EOS\n"
 
+#: tools/gst-launch.c:1229
 msgid "Execution ended after %"
 msgstr "L’exécution s’est terminée après %"
 
+#: tools/gst-launch.c:1245
 msgid "Setting pipeline to READY ...\n"
 msgstr "Définition du pipeline à READY (prêt)…\n"
 
+#: tools/gst-launch.c:1257
 msgid "Setting pipeline to NULL ...\n"
 msgstr "Définition du pipeline à NULL…\n"
 
+#: tools/gst-launch.c:1261
 msgid "Freeing pipeline ...\n"
 msgstr "Libération du pipeline…\n"
 
-#, fuzzy
 #~ msgid "Error creating pipe: %s\n"
-#~ msgstr "Erreur lors de la fermeture du fichier « %s »."
+#~ msgstr "Erreur lors de la création du tube : %s\n"
 
-#, fuzzy
 #~ msgid "Error forking: %s\n"
-#~ msgstr "Erreur lors de la fermeture du fichier « %s »."
+#~ msgstr "Erreur lors du fork : %s\n"
+
+#~ msgid "Error reading from console: %s\n"
+#~ msgstr "Erreur lors de la lecture depuis la console : %s\n"
 
-#, fuzzy
 #~ msgid "Error writing to console: %s\n"
-#~ msgstr "Erreur d’écriture dans le fichier « %s »."
+#~ msgstr "Erreur d’écriture vers la console : %s\n"
 
 #~ msgid "bin"
 #~ msgstr "bin"
index 6813703..a9dbddb 100644 (file)
 # Božidar Putanec <bozidarp@yahoo.com>, 2016, 2017, 2018, 2019.
 msgid ""
 msgstr ""
-"Project-Id-Version: gstreamer-1.15.1\n"
+"Project-Id-Version: gstreamer-1.16.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:37+0000\n"
-"PO-Revision-Date: 2019-02-03 13:10-0800\n"
+"POT-Creation-Date: 2019-04-19 00:15+0100\n"
+"PO-Revision-Date: 2019-09-03 14:53+0200\n"
 "Last-Translator: Božidar Putanec <bozidarp@yahoo.com>\n"
 "Language-Team: Croatian <lokalizacija@linux.hr>\n"
 "Language: hr_HR\n"
@@ -21,838 +21,996 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n"
-"X-Generator: Lokalize 2.0\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n"
+"X-Generator: Poedit 2.2.3\n"
 
+#: gst/gst.c:250
 msgid "Print the GStreamer version"
 msgstr "ispiše inačicu GStreamera"
 
+#: gst/gst.c:252
 msgid "Make all warnings fatal"
 msgstr "svako upozorenje tretira kao da je fatalno"
 
+#: gst/gst.c:256
 msgid "Print available debug categories and exit"
 msgstr "ispiše postojeće kategorije za debugiranje i iziđe"
 
-msgid ""
-"Default debug level from 1 (only error) to 9 (anything) or 0 for no output"
-msgstr ""
-"RAZINA poruka za debugiranje od 1 (samo greške) do 9 (sve) ili 0 (bez poruka)"
+#: gst/gst.c:260
+msgid "Default debug level from 1 (only error) to 9 (anything) or 0 for no output"
+msgstr "RAZINA poruka za debugiranje od 1 (samo greške) do 9 (sve) ili 0 (bez poruka)"
 
+#: gst/gst.c:262
 msgid "LEVEL"
 msgstr "RAZINA"
 
-msgid ""
-"Comma-separated list of category_name:level pairs to set specific levels for "
-"the individual categories. Example: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
-msgstr ""
-"POPIS parova (odvojenih zarezom) u formatu „category_name:level“ za "
-"postavljanje razine debugiranja za pojedine kategorije; Primjer: GST_CAT:5,"
-"GST_ELEMENT_*:3,oggdemux:5"
+#: gst/gst.c:264
+msgid "Comma-separated list of category_name:level pairs to set specific levels for the individual categories. Example: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
+msgstr "POPIS parova (odvojenih zarezom) u formatu „category_name:level“ za postavljanje razine debugiranja za pojedine kategorije; Primjer: GST_CAT:5,GST_ELEMENT_*:3,oggdemux:5"
 
+#: gst/gst.c:267
 msgid "LIST"
 msgstr "POPIS"
 
+#: gst/gst.c:269
 msgid "Disable colored debugging output"
 msgstr "onemogući obojeni ispis poruka za debugiranje"
 
-msgid ""
-"Changes coloring mode of the debug log. Possible modes: off, on, disable, "
-"auto, unix"
-msgstr ""
-"mȏd za bojenje poruka za debugiranje je jedan od: off, on, disable, auto ili "
-"unix"
+#: gst/gst.c:273
+msgid "Changes coloring mode of the debug log. Possible modes: off, on, disable, auto, unix"
+msgstr "mȏd za bojenje poruka za debugiranje je jedan od: off, on, disable, auto ili unix"
 
+#: gst/gst.c:277
 msgid "Disable debugging"
 msgstr "onemogući debugiranje"
 
+#: gst/gst.c:281
 msgid "Enable verbose plugin loading diagnostics"
 msgstr "omogući opširne poruke tijekom učitavanja plugina"
 
+#: gst/gst.c:285
 msgid "Colon-separated paths containing plugins"
 msgstr "popis STAZA (odvojenih dvotočkom) koje sadrže plugine"
 
+#: gst/gst.c:285
 msgid "PATHS"
 msgstr "STAZE"
 
-msgid ""
-"Comma-separated list of plugins to preload in addition to the list stored in "
-"environment variable GST_PLUGIN_PATH"
-msgstr ""
-"popis PLUGINA (odvojenih zarezom) koje treba učitati pored onih iz popisa "
-"spremljenog u varijabli okoline GST_PLUGIN_PATH"
+#: gst/gst.c:288
+msgid "Comma-separated list of plugins to preload in addition to the list stored in environment variable GST_PLUGIN_PATH"
+msgstr "popis PLUGINA (odvojenih zarezom) koje treba učitati pored onih iz popisa spremljenog u varijabli okoline GST_PLUGIN_PATH"
 
+#: gst/gst.c:290
 msgid "PLUGINS"
 msgstr "PLUGINI"
 
+#: gst/gst.c:293
 msgid "Disable trapping of segmentation faults during plugin loading"
-msgstr ""
-"onemogući presretanje segmentacijskih grešaka tijekom učitavanja plugina"
+msgstr "onemogući presretanje segmentacijskih grešaka tijekom učitavanja plugina"
 
+#: gst/gst.c:298
 msgid "Disable updating the registry"
 msgstr "onemogući ažuriranje registra"
 
+#: gst/gst.c:303
 msgid "Disable spawning a helper process while scanning the registry"
 msgstr "onemogući stvaranje procesa „helper“ tijekom skeniranja registra"
 
+#: gst/gst.c:308
 msgid "GStreamer Options"
 msgstr "Opcije GStreamera"
 
+#: gst/gst.c:309
 msgid "Show GStreamer Options"
 msgstr "pokaže opcije GStreamera"
 
+#: gst/gst.c:1012
 msgid "Unknown option"
 msgstr "Nepoznata opcija"
 
+#: gst/gsterror.c:130
 msgid "GStreamer encountered a general core library error."
 msgstr "GStreamer: otkrivena je opća greška u osnovnoj (core) biblioteci."
 
-msgid ""
-"GStreamer developers were too lazy to assign an error code to this error."
+#: gst/gsterror.c:132 gst/gsterror.c:174 gst/gsterror.c:198 gst/gsterror.c:240
+msgid "GStreamer developers were too lazy to assign an error code to this error."
 msgstr "Ovoj grešci nije dodijeljen broj greške."
 
+#: gst/gsterror.c:135
 msgid "Internal GStreamer error: code not implemented."
 msgstr "Interna greška GStreamera: rutina nije realizirana."
 
-msgid ""
-"GStreamer error: state change failed and some element failed to post a "
-"proper error message with the reason for the failure."
-msgstr ""
-"Greška GStreamera: nije uspjela promjena stanja i neki elementi nisu poslali "
-"ispravnu poruku o grešci s razlogom za neuspjeh."
+#: gst/gsterror.c:137
+msgid "GStreamer error: state change failed and some element failed to post a proper error message with the reason for the failure."
+msgstr "Greška GStreamera: nije uspjela promjena stanja i neki elementi nisu poslali ispravnu poruku o grešci s razlogom za neuspjeh."
 
+#: gst/gsterror.c:140
 msgid "Internal GStreamer error: pad problem."
 msgstr "Interna greška GStreamera: problem s konekcijom."
 
 # Rač.: nezavisni skup naredbi koji se samostalno izvršavaju u programu
+#: gst/gsterror.c:142
 msgid "Internal GStreamer error: thread problem."
 msgstr "Interna greška GStreamera: problem s dretvom."
 
+#: gst/gsterror.c:144
 msgid "GStreamer error: negotiation problem."
-msgstr ""
-"Interna greška GStreamera: problem u dogovaranju (za povezivanje elemenata)."
+msgstr "Interna greška GStreamera: problem u dogovaranju (za povezivanje elemenata)."
 
+#: gst/gsterror.c:146
 msgid "Internal GStreamer error: event problem."
 msgstr "Interna greška GStreamera: problem s događajem."
 
+#: gst/gsterror.c:148
 msgid "Internal GStreamer error: seek problem."
 msgstr "Interna GStreamer greška: problem u pozicioniranju."
 
+#: gst/gsterror.c:150
 msgid "Internal GStreamer error: caps problem."
 msgstr "Interna greška GStreamera: problem sa sposobnostima"
 
+#: gst/gsterror.c:152
 msgid "Internal GStreamer error: tag problem."
 msgstr "Interna greška GStreamera: problem s tagom."
 
+#: gst/gsterror.c:154
 msgid "Your GStreamer installation is missing a plug-in."
 msgstr "Vašoj instalaciji GStreamera nedostaje plugin."
 
+#: gst/gsterror.c:156
 msgid "GStreamer error: clock problem."
 msgstr "Greška GStreamera: problem sa sinkronizacijom (clock)."
 
-msgid ""
-"This application is trying to use GStreamer functionality that has been "
-"disabled."
-msgstr ""
-"Aplikacija pokušava koristiti funkcionalnost GStreamera a koja je bila "
-"onemogućena."
+#: gst/gsterror.c:158
+msgid "This application is trying to use GStreamer functionality that has been disabled."
+msgstr "Aplikacija pokušava koristiti funkcionalnost GStreamera koja je bila onemogućena."
 
+#: gst/gsterror.c:172
 msgid "GStreamer encountered a general supporting library error."
-msgstr ""
-"GStreamer: otkrivena je opća greška (problem) s dopunskom pomoćnom "
-"bibliotekom."
+msgstr "GStreamer: otkrivena je opća greška (problem) s dopunskom pomoćnom bibliotekom."
 
+#: gst/gsterror.c:177
 msgid "Could not initialize supporting library."
 msgstr "Nije moguće inicijalizirati pomoćnu biblioteku."
 
+#: gst/gsterror.c:179
 msgid "Could not close supporting library."
 msgstr "Nije moguće zatvoriti pomoćnu biblioteku."
 
+#: gst/gsterror.c:181
 msgid "Could not configure supporting library."
 msgstr "Nije moguće konfigurirati pomoćnu biblioteku."
 
+#: gst/gsterror.c:183
 msgid "Encoding error."
 msgstr "Greška u kodiranju."
 
+#: gst/gsterror.c:196
 msgid "GStreamer encountered a general resource error."
 msgstr "GStreamer: otkrivena je opća greška (problem) s resursom."
 
+#: gst/gsterror.c:201
 msgid "Resource not found."
 msgstr "Resurs nije pronađen."
 
+#: gst/gsterror.c:203
 msgid "Resource busy or not available."
 msgstr "Resurs je zauzet ili nije na raspolaganju."
 
+#: gst/gsterror.c:205
 msgid "Could not open resource for reading."
 msgstr "Resurs nije moguće otvoriti za čitanje."
 
+#: gst/gsterror.c:207
 msgid "Could not open resource for writing."
 msgstr "Resurs nije moguće otvoriti za pisanje."
 
+#: gst/gsterror.c:209
 msgid "Could not open resource for reading and writing."
 msgstr "Resurs nije moguće otvoriti za čitanje i pisanje."
 
+#: gst/gsterror.c:211
 msgid "Could not close resource."
 msgstr "Resurs nije moguće zatvoriti."
 
+#: gst/gsterror.c:213
 msgid "Could not read from resource."
 msgstr "Nije moguće čitati iz resursa."
 
+#: gst/gsterror.c:215
 msgid "Could not write to resource."
 msgstr "Nije moguće pisati u resurs."
 
+#: gst/gsterror.c:217
 msgid "Could not perform seek on resource."
 msgstr "Nije moguće pozicioniranje na resursu."
 
+#: gst/gsterror.c:219
 msgid "Could not synchronize on resource."
 msgstr "Nije moguće sinkroniziranje na resursu."
 
+#: gst/gsterror.c:221
 msgid "Could not get/set settings from/on resource."
 msgstr "Nije moguće dobiti/promijeniti postavke resursa."
 
+#: gst/gsterror.c:223
 msgid "No space left on the resource."
 msgstr "Na resursu nema slobodnog prostora."
 
+#: gst/gsterror.c:225
 msgid "Not authorized to access resource."
 msgstr "Neovlašteni pristup resursu."
 
+#: gst/gsterror.c:238
 msgid "GStreamer encountered a general stream error."
 msgstr "GStreamer: otkrivena je opća greška (problem) s protokom podataka."
 
+#: gst/gsterror.c:243
 msgid "Element doesn't implement handling of this stream. Please file a bug."
-msgstr ""
-"U ovom elementu nije realizirana manipulacija s ovakvim protokom. Prijavite "
-"ovaj bug."
+msgstr "U ovom elementu nije realizirana manipulacija s ovakvim protokom. Prijavite ovaj bug."
 
+#: gst/gsterror.c:246
 msgid "Could not determine type of stream."
 msgstr "Nije moguće odrediti vrstu ovog protoka."
 
+#: gst/gsterror.c:248
 msgid "The stream is of a different type than handled by this element."
 msgstr "Protok je vrste kojom ovaj element ne može manipulirati."
 
+#: gst/gsterror.c:251
 msgid "There is no codec present that can handle the stream's type."
 msgstr "Nema kodeka koji može manipulirati s ovom vrstom protoka."
 
+#: gst/gsterror.c:253
 msgid "Could not decode stream."
 msgstr "Nije moguće dekodirati protok."
 
+#: gst/gsterror.c:255
 msgid "Could not encode stream."
 msgstr "Nije moguće kodirati protok."
 
+#: gst/gsterror.c:257
 msgid "Could not demultiplex stream."
 msgstr "Nije moguće demultipleksirati protok."
 
+#: gst/gsterror.c:259
 msgid "Could not multiplex stream."
 msgstr "Nije moguće multipleksirati protok."
 
+#: gst/gsterror.c:261
 msgid "The stream is in the wrong format."
 msgstr "Protok je u krivom formatu."
 
+#: gst/gsterror.c:263
 msgid "The stream is encrypted and decryption is not supported."
 msgstr "Protok je šifriran a dešifriranje nije podržano."
 
-msgid ""
-"The stream is encrypted and can't be decrypted because no suitable key has "
-"been supplied."
-msgstr ""
-"Protok je šifriran i ne može se dešifrirati jer nije dobiven prikladni ključ."
+#: gst/gsterror.c:265
+msgid "The stream is encrypted and can't be decrypted because no suitable key has been supplied."
+msgstr "Protok je šifriran i ne može se dešifrirati jer nije dobiven prikladni ključ."
 
+#: gst/gsterror.c:305
 #, c-format
 msgid "No error message for domain %s."
 msgstr "Nema poruke o grešci za domenu %s."
 
+#: gst/gsterror.c:313
 #, c-format
 msgid "No standard error message for domain %s and code %d."
 msgstr "Nema standardne poruke o grešci za domenu %s i za kȏd %d."
 
+#: gst/gstpipeline.c:562
 msgid "Selected clock cannot be used in pipeline."
 msgstr "Odabrani sat ne može se koristiti u cjevovodu."
 
+#: gst/gstregistry.c:1694
 #, c-format
 msgid "Error writing registry cache to %s: %s"
 msgstr "Greška pri zapisivanju u predmemoriju registra u %s: %s"
 
+#: gst/gsttaglist.c:108
 msgid "title"
 msgstr "naslov"
 
+#: gst/gsttaglist.c:108
 msgid "commonly used title"
 msgstr "uobičajeni naslov"
 
+#: gst/gsttaglist.c:111
 msgid "title sortname"
 msgstr "naslov (za sortiranje)"
 
+#: gst/gsttaglist.c:111
 msgid "commonly used title for sorting purposes"
 msgstr "uobičajeni naslov (za sortiranje)"
 
+#: gst/gsttaglist.c:114
 msgid "artist"
 msgstr "izvođač"
 
+#: gst/gsttaglist.c:115
 msgid "person(s) responsible for the recording"
 msgstr "osobe odgovorne za snimanje"
 
+#: gst/gsttaglist.c:119
 msgid "artist sortname"
 msgstr "izvođač (za sortiranje)"
 
+#: gst/gsttaglist.c:120
 msgid "person(s) responsible for the recording for sorting purposes"
 msgstr "osobe odgovorne za snimanje (za sortiranje)"
 
+#: gst/gsttaglist.c:123
 msgid "album"
 msgstr "album"
 
+#: gst/gsttaglist.c:124
 msgid "album containing this data"
 msgstr "album koji sadrži ove podatke"
 
+#: gst/gsttaglist.c:127
 msgid "album sortname"
 msgstr "album (za sortiranje)"
 
+#: gst/gsttaglist.c:128
 msgid "album containing this data for sorting purposes"
 msgstr "album koji sadrži ove podatke (za sortiranje)"
 
+#: gst/gsttaglist.c:131
 msgid "album artist"
 msgstr "izvođač albuma"
 
+#: gst/gsttaglist.c:132
 msgid "The artist of the entire album, as it should be displayed"
 msgstr "Izvođač cijelog albuma (prikazan onako kako  treba)"
 
+#: gst/gsttaglist.c:136
 msgid "album artist sortname"
 msgstr "izvođač albuma (za sortiranje)"
 
+#: gst/gsttaglist.c:137
 msgid "The artist of the entire album, as it should be sorted"
 msgstr "Izvođač cijelog albuma sortiran kako treba"
 
+#: gst/gsttaglist.c:139
 msgid "date"
 msgstr "datum"
 
+#: gst/gsttaglist.c:139
 msgid "date the data was created (as a GDate structure)"
 msgstr "datum stvaranja podataka (kao GDate)"
 
+#: gst/gsttaglist.c:141
 msgid "datetime"
 msgstr "datum-vrijeme"
 
+#: gst/gsttaglist.c:142
 msgid "date and time the data was created (as a GstDateTime structure)"
 msgstr "datum i vrijeme stvaranja podataka (kao GstDateTime)"
 
+#: gst/gsttaglist.c:146
 msgid "genre"
 msgstr "žanr"
 
+#: gst/gsttaglist.c:147
 msgid "genre this data belongs to"
 msgstr "žanr kojem pripadaju podaci"
 
+#: gst/gsttaglist.c:150
 msgid "comment"
 msgstr "komentar"
 
+#: gst/gsttaglist.c:151
 msgid "free text commenting the data"
 msgstr "slobodni (tekst)komentar o tim podacima"
 
+#: gst/gsttaglist.c:154
 msgid "extended comment"
 msgstr "prošireni komentar"
 
+#: gst/gsttaglist.c:155
 msgid "free text commenting the data in key=value or key[en]=comment form"
-msgstr ""
-"slobodni (tekst) komentar o tim podacima u obliku ključ=vrijednost ili "
-"ključ[hr]=komentar"
+msgstr "slobodni (tekst) komentar o tim podacima u obliku ključ=vrijednost ili ključ[hr]=komentar"
 
+#: gst/gsttaglist.c:159
 msgid "track number"
 msgstr "redni broj zapisa"
 
+#: gst/gsttaglist.c:160
 msgid "track number inside a collection"
 msgstr "redni broj zapisa u kolekciji"
 
+#: gst/gsttaglist.c:163
 msgid "track count"
 msgstr "ukupni broj zapisa"
 
+#: gst/gsttaglist.c:164
 msgid "count of tracks inside collection this track belongs to"
 msgstr "količina zapisa u kolekciji kojoj pripada ovaj zapis"
 
+#: gst/gsttaglist.c:168
 msgid "disc number"
 msgstr "redni broj diska"
 
+#: gst/gsttaglist.c:169
 msgid "disc number inside a collection"
 msgstr "redni broj diska u kolekciji"
 
+#: gst/gsttaglist.c:172
 msgid "disc count"
 msgstr "ukupni broj diskova"
 
+#: gst/gsttaglist.c:173
 msgid "count of discs inside collection this disc belongs to"
 msgstr "količina diskova u kolekciji kojoj pripada ovaj disk"
 
+#: gst/gsttaglist.c:177
 msgid "location"
 msgstr "mjesto"
 
-msgid ""
-"Origin of media as a URI (location, where the original of the file or stream "
-"is hosted)"
-msgstr ""
-"Porijeklo medija kao URI (mjesto gdje se nalazi originalna datoteka ili "
-"originalni izvor protoka)"
+#: gst/gsttaglist.c:177
+msgid "Origin of media as a URI (location, where the original of the file or stream is hosted)"
+msgstr "Porijeklo medija kao URI (mjesto gdje se nalazi originalna datoteka ili originalni izvor protoka)"
 
+#: gst/gsttaglist.c:182
 msgid "homepage"
 msgstr "internetska stranica"
 
+#: gst/gsttaglist.c:183
 msgid "Homepage for this media (i.e. artist or movie homepage)"
-msgstr ""
-"Internetska stranica ovog medija (tj. internetska stranica izvođača ili "
-"filma)"
+msgstr "Internetska stranica ovog medija (tj. internetska stranica izvođača ili filma)"
 
+#: gst/gsttaglist.c:186
 msgid "description"
 msgstr "opis"
 
+#: gst/gsttaglist.c:187
 msgid "short text describing the content of the data"
 msgstr "sažetak koji opisuje sadržaj podataka"
 
+#: gst/gsttaglist.c:190
 msgid "version"
 msgstr "inačica"
 
+#: gst/gsttaglist.c:190
 msgid "version of this data"
 msgstr "inačica ovih podataka"
 
+#: gst/gsttaglist.c:192
 msgid "ISRC"
 msgstr "ISRC"
 
+#: gst/gsttaglist.c:194
 msgid "International Standard Recording Code - see http://www.ifpi.org/isrc/"
-msgstr ""
-"International Standard Recording Code - posjetite http://www.ifpi.org/isrc/"
+msgstr "International Standard Recording Code - posjetite http://www.ifpi.org/isrc/"
 
+#: gst/gsttaglist.c:198
 msgid "organization"
 msgstr "organizacija"
 
+#: gst/gsttaglist.c:201
 msgid "copyright"
 msgstr "autorska prava"
 
+#: gst/gsttaglist.c:201
 msgid "copyright notice of the data"
 msgstr "napomena o autorskim pravima podataka"
 
+#: gst/gsttaglist.c:203
 msgid "copyright uri"
 msgstr "copyright URI"
 
+#: gst/gsttaglist.c:204
 msgid "URI to the copyright notice of the data"
 msgstr "URI s napomenom o autorskim pravima na podatke"
 
+#: gst/gsttaglist.c:206
 msgid "encoded by"
 msgstr "kodirao"
 
+#: gst/gsttaglist.c:206
 msgid "name of the encoding person or organization"
 msgstr "ime osobe ili organizacije koja je kodirala"
 
+#: gst/gsttaglist.c:210
 msgid "contact"
 msgstr "kontakt"
 
+#: gst/gsttaglist.c:210
 msgid "contact information"
 msgstr "informacije o kontaktu"
 
+#: gst/gsttaglist.c:212
 msgid "license"
 msgstr "licencija"
 
+#: gst/gsttaglist.c:212
 msgid "license of data"
 msgstr "licencija za podatke"
 
+#: gst/gsttaglist.c:214
 msgid "license uri"
 msgstr "URI licencija"
 
+#: gst/gsttaglist.c:215
 msgid "URI to the license of the data"
 msgstr "URI za licenciju tih podataka"
 
+#: gst/gsttaglist.c:218
 msgid "performer"
 msgstr "izvođač"
 
+#: gst/gsttaglist.c:219
 msgid "person(s) performing"
 msgstr "osoba/osobe, izvođači"
 
+#: gst/gsttaglist.c:222
 msgid "composer"
 msgstr "skladatelj"
 
+#: gst/gsttaglist.c:223
 msgid "person(s) who composed the recording"
 msgstr "osoba/osobe), skladatelji snimljene glazbe"
 
+#: gst/gsttaglist.c:227
 msgid "conductor"
 msgstr "dirigent"
 
+#: gst/gsttaglist.c:228
 msgid "conductor/performer refinement"
 msgstr "dirigent/izvođač u obradi"
 
+#: gst/gsttaglist.c:231
 msgid "duration"
 msgstr "trajanje"
 
+#: gst/gsttaglist.c:231
 msgid "length in GStreamer time units (nanoseconds)"
 msgstr "dužina u vremenskim jedinicama GStreamera (nanosekunde)"
 
+#: gst/gsttaglist.c:234
 msgid "codec"
 msgstr "kodek"
 
+#: gst/gsttaglist.c:235
 msgid "codec the data is stored in"
 msgstr "kodek u kojem su spremljeni podaci"
 
+#: gst/gsttaglist.c:238
 msgid "video codec"
 msgstr "videokodek"
 
+#: gst/gsttaglist.c:238
 msgid "codec the video data is stored in"
 msgstr "kodek u kojem su spremljeni video podaci"
 
+#: gst/gsttaglist.c:241
 msgid "audio codec"
 msgstr "audiokodek"
 
+#: gst/gsttaglist.c:241
 msgid "codec the audio data is stored in"
 msgstr "kodek u kojem su spremljeni audio podaci"
 
+#: gst/gsttaglist.c:244
 msgid "subtitle codec"
 msgstr "kodek za titlovanje"
 
+#: gst/gsttaglist.c:244
 msgid "codec the subtitle data is stored in"
 msgstr "kodek u kojem su spremljeni podaci titlova"
 
+#: gst/gsttaglist.c:246
 msgid "container format"
 msgstr "format kontejnera"
 
+#: gst/gsttaglist.c:247
 msgid "container format the data is stored in"
 msgstr "format kontejnera u kojem su spremljeni podaci"
 
+#: gst/gsttaglist.c:249
 msgid "bitrate"
 msgstr "bitrate"
 
+#: gst/gsttaglist.c:249
 msgid "exact or average bitrate in bits/s"
 msgstr "točni ili prosječni bitrate u bit/s"
 
+#: gst/gsttaglist.c:251
 msgid "nominal bitrate"
 msgstr "nominalni bitrate"
 
+#: gst/gsttaglist.c:251
 msgid "nominal bitrate in bits/s"
 msgstr "nominalni bitrate u bit/a"
 
+#: gst/gsttaglist.c:253
 msgid "minimum bitrate"
 msgstr "najmanji bitrate"
 
+#: gst/gsttaglist.c:253
 msgid "minimum bitrate in bits/s"
 msgstr "najmanji bitrate u bit/s"
 
+#: gst/gsttaglist.c:255
 msgid "maximum bitrate"
 msgstr "najveći bitrate"
 
+#: gst/gsttaglist.c:255
 msgid "maximum bitrate in bits/s"
 msgstr "najveći bitrate u bit/s"
 
+#: gst/gsttaglist.c:258
 msgid "encoder"
 msgstr "koder"
 
+#: gst/gsttaglist.c:258
 msgid "encoder used to encode this stream"
 msgstr "koder s kojim je kodiran ovaj protok"
 
+#: gst/gsttaglist.c:261
 msgid "encoder version"
 msgstr "inačica kodera"
 
+#: gst/gsttaglist.c:262
 msgid "version of the encoder used to encode this stream"
 msgstr "inačica kodera s kojim je kodiran ovaj protok"
 
+#: gst/gsttaglist.c:264
 msgid "serial"
 msgstr "serijski broj"
 
+#: gst/gsttaglist.c:264
 msgid "serial number of track"
 msgstr "serijski broj zapisa"
 
 # https://en.wikipedia.org/wiki/ReplayGain
 # http://www.audiohq.de/index.php?showtopic=23#Referenzlautstaerke
+#: gst/gsttaglist.c:266
 msgid "replaygain track gain"
 msgstr "normalizacija razine glasnoće zapisa"
 
+#: gst/gsttaglist.c:266
 msgid "track gain in db"
 msgstr "razina pojačanja zapisa u db"
 
+#: gst/gsttaglist.c:268
 msgid "replaygain track peak"
 msgstr "normalizacija vršne glasnoće zapisa"
 
+#: gst/gsttaglist.c:268
 msgid "peak of the track"
 msgstr "vršna razina zapisa"
 
+#: gst/gsttaglist.c:270
 msgid "replaygain album gain"
 msgstr "normalizacija razine glasnoće albuma"
 
+#: gst/gsttaglist.c:270
 msgid "album gain in db"
 msgstr "razina pojačanja albuma u db"
 
+#: gst/gsttaglist.c:272
 msgid "replaygain album peak"
 msgstr "normalizacija vršne glasnoće albuma"
 
+#: gst/gsttaglist.c:272
 msgid "peak of the album"
 msgstr "vršna razina albuma"
 
+#: gst/gsttaglist.c:274
 msgid "replaygain reference level"
 msgstr "normalizacija referentne razine"
 
+#: gst/gsttaglist.c:275
 msgid "reference level of track and album gain values"
 msgstr "referentna razina pojačanja zapisa i albuma"
 
+#: gst/gsttaglist.c:277
 msgid "language code"
 msgstr "jezični kȏd"
 
+#: gst/gsttaglist.c:278
 msgid "language code for this stream, conforming to ISO-639-1 or ISO-639-2"
 msgstr "jezični kȏd za ovaj protok, u skladu s ISO-639-1 ili ISO-639-2"
 
+#: gst/gsttaglist.c:281
 msgid "language name"
 msgstr "ime jezika"
 
+#: gst/gsttaglist.c:282
 msgid "freeform name of the language this stream is in"
 msgstr "uobičajeno ime jezika u ovom protoku"
 
+#: gst/gsttaglist.c:284
 msgid "image"
 msgstr "slika"
 
+#: gst/gsttaglist.c:284
 msgid "image related to this stream"
 msgstr "slika za ovaj protok"
 
 # thumbnail
 #. TRANSLATORS: 'preview image' = image that shows a preview of the full image
+#: gst/gsttaglist.c:288
 msgid "preview image"
 msgstr "pregledna slika"
 
+#: gst/gsttaglist.c:288
 msgid "preview image related to this stream"
 msgstr "pregledna slika za ovaj protok"
 
+#: gst/gsttaglist.c:290
 msgid "attachment"
 msgstr "privitak"
 
+#: gst/gsttaglist.c:290
 msgid "file attached to this stream"
 msgstr "datoteka privijena ovom protoku"
 
+#: gst/gsttaglist.c:293
 msgid "beats per minute"
 msgstr "otkucaja u minuti (tempo)"
 
+#: gst/gsttaglist.c:294
 msgid "number of beats per minute in audio"
 msgstr "broj otkucaja u minuti (tempo) u tonskom zapisu"
 
+#: gst/gsttaglist.c:296
 msgid "keywords"
 msgstr "ključne riječi"
 
+#: gst/gsttaglist.c:296
 msgid "comma separated keywords describing the content"
 msgstr "ključne riječi (odvojene zarezima) koje opisuju sadržaj"
 
 # https://en.wikipedia.org/wiki/Geolocation
+#: gst/gsttaglist.c:299
 msgid "geo location name"
 msgstr "geografsko ime mjesta"
 
-msgid ""
-"human readable descriptive location of where the media has been recorded or "
-"produced"
+#: gst/gsttaglist.c:300
+msgid "human readable descriptive location of where the media has been recorded or produced"
 msgstr "opis mjesta gdje je medij snimljen ili proizveden"
 
+#: gst/gsttaglist.c:303
 msgid "geo location latitude"
 msgstr "geografska širina"
 
-msgid ""
-"geo latitude location of where the media has been recorded or produced in "
-"degrees according to WGS84 (zero at the equator, negative values for "
-"southern latitudes)"
-msgstr ""
-"geografska širina mjesta gdje je medij snimljen ili proizveden, u "
-"stupnjevima prema WGS84 (nula na ekvatoru, negativne vrijednosti za južne "
-"širine)"
+#: gst/gsttaglist.c:304
+msgid "geo latitude location of where the media has been recorded or produced in degrees according to WGS84 (zero at the equator, negative values for southern latitudes)"
+msgstr "geografska širina mjesta gdje je medij snimljen ili proizveden, u stupnjevima prema WGS84 (nula na ekvatoru, negativne vrijednosti za južne širine)"
 
+#: gst/gsttaglist.c:308
 msgid "geo location longitude"
 msgstr "geografska dužina"
 
-msgid ""
-"geo longitude location of where the media has been recorded or produced in "
-"degrees according to WGS84 (zero at the prime meridian in Greenwich/UK,  "
-"negative values for western longitudes)"
-msgstr ""
-"geografska dužina mjesta gdje je medij snimljen ili proizveden, u "
-"stupnjevima prema WGS84 (nula na nultom meridijanu Greenwich/UK, negativne "
-"vrijednosti za zapadne dužine)"
+#: gst/gsttaglist.c:309
+msgid "geo longitude location of where the media has been recorded or produced in degrees according to WGS84 (zero at the prime meridian in Greenwich/UK,  negative values for western longitudes)"
+msgstr "geografska dužina mjesta gdje je medij snimljen ili proizveden, u stupnjevima prema WGS84 (nula na nultom meridijanu Greenwich/UK, negativne vrijednosti za zapadne dužine)"
 
+#: gst/gsttaglist.c:313
 msgid "geo location elevation"
 msgstr "geografska visina"
 
-msgid ""
-"geo elevation of where the media has been recorded or produced in meters "
-"according to WGS84 (zero is average sea level)"
-msgstr ""
-"nadmorska visina mjesta gdje je medij snimljen ili proizveden, u metrima "
-"prema WGS84 (nula je prosječna razina mora)"
+#: gst/gsttaglist.c:314
+msgid "geo elevation of where the media has been recorded or produced in meters according to WGS84 (zero is average sea level)"
+msgstr "nadmorska visina mjesta gdje je medij snimljen ili proizveden, u metrima prema WGS84 (nula je prosječna razina mora)"
 
+#: gst/gsttaglist.c:317
 msgid "geo location country"
 msgstr "geografski položaj države"
 
+#: gst/gsttaglist.c:318
 msgid "country (english name) where the media has been recorded or produced"
 msgstr "država (englesko ime) gdje je medij snimljen ili proizveden"
 
+#: gst/gsttaglist.c:321
 msgid "geo location city"
 msgstr "geografski položaj grada"
 
+#: gst/gsttaglist.c:322
 msgid "city (english name) where the media has been recorded or produced"
 msgstr "grad (englesko ime) gdje je medij snimljen ili proizveden"
 
+#: gst/gsttaglist.c:325
 msgid "geo location sublocation"
 msgstr "geografski položaj djela grada"
 
-msgid ""
-"a location within a city where the media has been produced or created (e.g. "
-"the neighborhood)"
+#: gst/gsttaglist.c:326
+msgid "a location within a city where the media has been produced or created (e.g. the neighborhood)"
 msgstr "mjesto u gradu gdje je medij snimljen ili proizveden (npr. Trešnjevka)"
 
+#: gst/gsttaglist.c:329
 msgid "geo location horizontal error"
 msgstr "greška u vodoravnoj geografskoj lokaciji"
 
+#: gst/gsttaglist.c:330
 msgid "expected error of the horizontal positioning measures (in meters)"
 msgstr "očekivana greška u mjerenju vodoravnog položaja (u metrima)"
 
+#: gst/gsttaglist.c:333
 msgid "geo location movement speed"
 msgstr "geografska brzina kretanja"
 
-msgid ""
-"movement speed of the capturing device while performing the capture in m/s"
+#: gst/gsttaglist.c:334
+msgid "movement speed of the capturing device while performing the capture in m/s"
 msgstr "brzina kretanja uređaja za snimanje pri snimanju u m/s"
 
+#: gst/gsttaglist.c:337
 msgid "geo location movement direction"
 msgstr "geografski smjer kretanja"
 
-msgid ""
-"indicates the movement direction of the device performing the capture of a "
-"media. It is represented as degrees in floating point representation, 0 "
-"means the geographic north, and increases clockwise"
-msgstr ""
-"smjer kretanja uređaja za snimanje; mjeri se u stupnjevima u formatu realnog "
-"broja; 0 je smjer geografskog sjevera a raste u smjeru kazaljke na satu (kao "
-"kompas)"
+#: gst/gsttaglist.c:338
+msgid "indicates the movement direction of the device performing the capture of a media. It is represented as degrees in floating point representation, 0 means the geographic north, and increases clockwise"
+msgstr "smjer kretanja uređaja za snimanje; mjeri se u stupnjevima u formatu realnog broja; 0 je smjer geografskog sjevera a raste u smjeru kazaljke na satu (kao kompas)"
 
+#: gst/gsttaglist.c:343
 msgid "geo location capture direction"
 msgstr "geografski smjer pri snimanju"
 
-msgid ""
-"indicates the direction the device is pointing to when capturing  a media. "
-"It is represented as degrees in floating point  representation, 0 means the "
-"geographic north, and increases clockwise"
-msgstr ""
-"smjer u kojem je uređaj bio usmjeren pri snimanju; mjeri se u stupnjevima u "
-"formatu realnog broja; 0 je smjer geografskog sjevera a raste u smjeru "
-"kazaljke na satu (kao kompas)"
+#: gst/gsttaglist.c:344
+msgid "indicates the direction the device is pointing to when capturing  a media. It is represented as degrees in floating point  representation, 0 means the geographic north, and increases clockwise"
+msgstr "smjer u kojem je uređaj bio usmjeren pri snimanju; mjeri se u stupnjevima u formatu realnog broja; 0 je smjer geografskog sjevera a raste u smjeru kazaljke na satu (kao kompas)"
 
 #. TRANSLATORS: 'show name' = 'TV/radio/podcast show name' here
+#: gst/gsttaglist.c:350
 msgid "show name"
 msgstr "ime predstave (TV/podcast/serije...)"
 
+#: gst/gsttaglist.c:351
 msgid "Name of the tv/podcast/series show the media is from"
 msgstr "Ime od (TV/podcast/serije...) predstave iz koje je nastao ovaj medij"
 
 #. TRANSLATORS: 'show sortname' = 'TV/radio/podcast show name as used for sorting purposes' here
+#: gst/gsttaglist.c:356
 msgid "show sortname"
 msgstr "ime predstave (za sortiranje)"
 
-msgid ""
-"Name of the tv/podcast/series show the media is from, for sorting purposes"
-msgstr ""
-"Ime od (TV/podcast/serije...) predstave iz koje je nastao ovaj medij (za "
-"sortiranje)"
+#: gst/gsttaglist.c:357
+msgid "Name of the tv/podcast/series show the media is from, for sorting purposes"
+msgstr "Ime od (TV/podcast/serije...) predstave iz koje je nastao ovaj medij (za sortiranje)"
 
+#: gst/gsttaglist.c:360
 msgid "episode number"
 msgstr "redni broj epizode"
 
+#: gst/gsttaglist.c:361
 msgid "The episode number in the season the media is part of"
 msgstr "Redni broj epizode u sezoni čiji je medij dio"
 
+#: gst/gsttaglist.c:364
 msgid "season number"
 msgstr "redni broj sezone"
 
+#: gst/gsttaglist.c:365
 msgid "The season number of the show the media is part of"
 msgstr "Redni broj sezone serije čiji je medij dio"
 
+#: gst/gsttaglist.c:368
 msgid "lyrics"
 msgstr "stihovi"
 
+#: gst/gsttaglist.c:368
 msgid "The lyrics of the media, commonly used for songs"
 msgstr "Stihovi pjesma na mediju"
 
+#: gst/gsttaglist.c:371
 msgid "composer sortname"
 msgstr "skladatelj (za sortiranje)"
 
+#: gst/gsttaglist.c:372
 msgid "person(s) who composed the recording, for sorting purposes"
 msgstr "osoba/osobe, skladatelji snimljene glazbe (za sortiranje)"
 
+#: gst/gsttaglist.c:374
 msgid "grouping"
 msgstr "grupiranje"
 
-msgid ""
-"Groups related media that spans multiple tracks, like the different pieces "
-"of a concerto. It is a higher level than a track, but lower than an album"
-msgstr ""
-"Svrsta u grupe srodne medije koji obuhvaćaju nekoliko zapisa kao npr. "
-"različiti dijelovi koncerta; to je viša razina od zapisa, ali niža od albuma"
+#: gst/gsttaglist.c:375
+msgid "Groups related media that spans multiple tracks, like the different pieces of a concerto. It is a higher level than a track, but lower than an album"
+msgstr "Svrsta u grupe srodne medije koji obuhvaćaju nekoliko zapisa kao npr. različiti dijelovi koncerta; to je viša razina od zapisa, ali niža od albuma"
 
+#: gst/gsttaglist.c:379
 msgid "user rating"
 msgstr "ocjena korisnika"
 
-msgid ""
-"Rating attributed by a user. The higher the rank, the more the user likes "
-"this media"
-msgstr ""
-"Ocjena koju je dao korisnik; što je ocjena viša, više mu se sviđa medij"
+#: gst/gsttaglist.c:380
+msgid "Rating attributed by a user. The higher the rank, the more the user likes this media"
+msgstr "Ocjena koju je dao korisnik; što je ocjena viša, više mu se sviđa medij"
 
+#: gst/gsttaglist.c:383
 msgid "device manufacturer"
 msgstr "proizvođač uređaja"
 
+#: gst/gsttaglist.c:384
 msgid "Manufacturer of the device used to create this media"
 msgstr "Proizvođač uređaja kojim je izrađen medij"
 
+#: gst/gsttaglist.c:386
 msgid "device model"
 msgstr "model uređaja"
 
+#: gst/gsttaglist.c:387
 msgid "Model of the device used to create this media"
 msgstr "Model uređaja s kojim je izrađen medij"
 
+#: gst/gsttaglist.c:389
 msgid "application name"
 msgstr "ime aplikacije"
 
+#: gst/gsttaglist.c:390
 msgid "Application used to create the media"
 msgstr "Aplikacija s kojom je izrađen medij"
 
+#: gst/gsttaglist.c:392
 msgid "application data"
 msgstr "podaci o aplikaciji"
 
+#: gst/gsttaglist.c:393
 msgid "Arbitrary application data to be serialized into the media"
 msgstr "Proizvoljni podaci o aplikaciji za serijalizaciju u medij"
 
+#: gst/gsttaglist.c:395
 msgid "image orientation"
 msgstr "orijentacija slike"
 
+#: gst/gsttaglist.c:396
 msgid "How the image should be rotated or flipped before display"
 msgstr "Kako sliku treba rotirati ili preokrenuti prije prikaza"
 
+#: gst/gsttaglist.c:399
 msgid "publisher"
 msgstr "izdavač"
 
+#: gst/gsttaglist.c:400
 msgid "Name of the label or publisher"
 msgstr "Ime studija (label) ili izdavača"
 
+#: gst/gsttaglist.c:403
 msgid "interpreted-by"
 msgstr "interpreted-by"
 
+#: gst/gsttaglist.c:404
 msgid "Information about the people behind a remix and similar interpretations"
 msgstr "Informacije o ljudima koji su radili na remiksu i sličnim obradama"
 
+#: gst/gsttaglist.c:408
 msgid "midi-base-note"
 msgstr "midi-base-note"
 
+#: gst/gsttaglist.c:408
 msgid "Midi note number of the audio track."
 msgstr "Broj note MIDI na audio zapisu."
 
+#: gst/gsttaglist.c:411
 msgid "private-data"
 msgstr "privatni-podaci"
 
+#: gst/gsttaglist.c:411
 msgid "Private data"
 msgstr "Privatni podaci"
 
+#: gst/gsttaglist.c:451
 msgid ", "
 msgstr ", "
 
+#: gst/gsturi.c:648
 #, c-format
 msgid "No URI handler for the %s protocol found"
 msgstr "Za protokol %s nije pronađen URI rukovatelj"
 
+#: gst/gsturi.c:823
 #, c-format
 msgid "URI scheme '%s' not supported"
 msgstr "URI shema „%s“ nije podržana"
 
+#: gst/gstutils.c:2632 tools/gst-launch.c:325
 #, c-format
 msgid "ERROR: from element %s: %s\n"
 msgstr "GREŠKA: iz elementa %s: %s\n"
 
+#: gst/gstutils.c:2634 tools/gst-launch.c:327 tools/gst-launch.c:697
 #, c-format
 msgid ""
 "Additional debug info:\n"
@@ -861,222 +1019,283 @@ msgstr ""
 "Dodatne informacije za debugiranje:\n"
 "%s\n"
 
+#: gst/parse/grammar.y:216
 #, c-format
 msgid "link has no source [sink=%s@%p]"
 msgstr "poveznica nema izvor [sink=%s@%p]"
 
+#: gst/parse/grammar.y:221
 #, c-format
 msgid "link has no sink [source=%s@%p]"
 msgstr "poveznica nema ponor [source=%s@%p]"
 
+#: gst/parse/grammar.y:413
 #, c-format
 msgid "no property \"%s\" in element \"%s\""
 msgstr "nema svojstva „%s“ u elementu „%s“"
 
+#: gst/parse/grammar.y:454
 #, c-format
 msgid "could not set property \"%s\" in element \"%s\" to \"%s\""
 msgstr "nije moguće postaviti svojstvo „%s“ u elementu „%s“ na „%s“"
 
+#: gst/parse/grammar.y:507
 msgid "Delayed linking failed."
 msgstr "Odgođeno povezivanje nije uspjelo."
 
+#: gst/parse/grammar.y:719 gst/parse/grammar.y:724
 #, c-format
 msgid "could not link %s to %s, %s can't handle caps %s"
 msgstr "nije moguće povezati %s na %s -- %s ne podržava sposobnosti %s"
 
+#: gst/parse/grammar.y:729
 #, c-format
 msgid "could not link %s to %s, neither element can handle caps %s"
-msgstr ""
-"nije moguće povezati %s na %s -- nijedan element ne podržava sposobnosti %s"
+msgstr "nije moguće povezati %s na %s -- nijedan element ne podržava sposobnosti %s"
 
+#: gst/parse/grammar.y:733
 #, c-format
 msgid "could not link %s to %s with caps %s"
 msgstr "nije moguće povezati %s sa %s sa sposobnostima %s"
 
+#: gst/parse/grammar.y:739
 #, c-format
 msgid "could not link %s to %s"
 msgstr "nije moguće povezati %s sa %s"
 
+#: gst/parse/grammar.y:816
 #, c-format
 msgid "no element \"%s\""
 msgstr "nema elementa „%s“"
 
+#: gst/parse/grammar.y:877
 #, c-format
 msgid "unexpected reference \"%s\" - ignoring"
 msgstr "neočekivana referencija „%s“ - ignorira se"
 
 # pad (u elektronskoj glazbi) > A category of synthsizer patches which produce a soft, pleasing sound.
+#: gst/parse/grammar.y:883
 #, c-format
 msgid "unexpected pad-reference \"%s\" - ignoring"
 msgstr "neočekivana poveznica (pad-reference) „%s“ - ignorira se"
 
+#: gst/parse/grammar.y:915 gst/parse/grammar.y:924
 #, c-format
 msgid "could not parse caps \"%s\""
 msgstr "nije moguće raščlaniti sposobnosti „%s“"
 
+#: gst/parse/grammar.y:952
 #, c-format
 msgid "no sink element for URI \"%s\""
 msgstr "nema elementa-ponor za URI „%s“"
 
+#: gst/parse/grammar.y:971
 #, c-format
 msgid "no source element for URI \"%s\""
 msgstr "nema elementa-izvor za URI „%s“"
 
+#: gst/parse/grammar.y:1061
 msgid "syntax error"
 msgstr "greška u sintaksi"
 
+#: gst/parse/grammar.y:1084
 #, c-format
 msgid "specified empty bin \"%s\", not allowed"
 msgstr "specificiran je prazni spremnik „%s“ -- to nije dopušteno"
 
+#: gst/parse/grammar.y:1094
 #, c-format
 msgid "no bin \"%s\", unpacking elements"
 msgstr "nema „%s“ bin -- raspakiravanje elemenata"
 
+#: gst/parse/grammar.y:1125
 msgid "empty pipeline not allowed"
 msgstr "prazan cjevovod nije dopušten"
 
+#: libs/gst/base/gstbasesink.c:1210
 msgid "Pipeline construction is invalid, please add queues."
 msgstr "Konstrukcija cjevovoda nije valjana -- dodajte redove čekanja."
 
+#: libs/gst/base/gstbasesink.c:3004
 msgid "A lot of buffers are being dropped."
 msgstr "Puno međuspremnika je odbačeno."
 
+#: libs/gst/base/gstbasesink.c:3496
 msgid "Internal data flow problem."
 msgstr "Problem s internim tokom podataka."
 
+#: libs/gst/base/gstbasesink.c:4222 libs/gst/base/gstbasesrc.c:2708
 msgid "Internal data flow error."
 msgstr "Interna greška toka podataka."
 
+#: libs/gst/base/gstbasesrc.c:2638
 msgid "Internal clock error."
 msgstr "Interna greška sinkronizacije (clock)."
 
+#: libs/gst/base/gstbasesrc.c:2666 plugins/elements/gstdownloadbuffer.c:842
+#: plugins/elements/gstdownloadbuffer.c:1265
 msgid "Failed to map buffer."
 msgstr "Nije uspjelo mapirati međuspremnik."
 
+#: plugins/elements/gstcapsfilter.c:128
 msgid "Filter caps"
 msgstr "Filtriranje (ograničavanje) sposobnosti"
 
-msgid ""
-"Restrict the possible allowed capabilities (NULL means ANY). Setting this "
-"property takes a reference to the supplied GstCaps object."
-msgstr ""
-"Ograniči moguće dopuštene sposobnosti (NULL znači ANY (sve)). Postavljanje "
-"ovog svojstva povećava se količina poveznica na taj GstCaps objekt."
+#: plugins/elements/gstcapsfilter.c:129
+msgid "Restrict the possible allowed capabilities (NULL means ANY). Setting this property takes a reference to the supplied GstCaps object."
+msgstr "Ograniči moguće dopuštene sposobnosti (NULL znači ANY (sve)). Postavljanje ovog svojstva povećava se količina poveznica na taj GstCaps objekt."
 
+#: plugins/elements/gstcapsfilter.c:136
 msgid "Caps Change Mode"
 msgstr "Mȏd (način) izmjena sposobnosti"
 
+#: plugins/elements/gstcapsfilter.c:137
 msgid "Filter caps change behaviour"
 msgstr "Ponašanje se mijenja filtriranjem (ograničavanjem) sposobnosti"
 
+#: plugins/elements/gstdownloadbuffer.c:927 plugins/elements/gstqueue2.c:1792
 msgid "No Temp directory specified."
 msgstr "Nijedan privremeni direktorij nije specificiran."
 
+#: plugins/elements/gstdownloadbuffer.c:933 plugins/elements/gstqueue2.c:1798
 #, c-format
 msgid "Could not create temp file \"%s\"."
 msgstr "Nije moguće kreirati privremenu datoteku „%s“."
 
+#: plugins/elements/gstdownloadbuffer.c:941 plugins/elements/gstfilesrc.c:537
+#: plugins/elements/gstqueue2.c:1806
 #, c-format
 msgid "Could not open file \"%s\" for reading."
 msgstr "Nije moguće otvoriti datoteku „%s“ za čitanje."
 
+#: plugins/elements/gstdownloadbuffer.c:1274 plugins/elements/gstqueue2.c:2225
 msgid "Error while writing to download file."
 msgstr "Greška pri pisanju u preuzetu datoteku."
 
+#: plugins/elements/gstfilesink.c:404
 msgid "No file name specified for writing."
 msgstr "Nije specificirana datoteka za pisanje."
 
+#: plugins/elements/gstfilesink.c:410
 #, c-format
 msgid "Could not open file \"%s\" for writing."
 msgstr "Nije moguće otvoriti datoteku „%s“ za pisanje."
 
+#: plugins/elements/gstfilesink.c:422 plugins/elements/gstfilesink.c:426
 #, c-format
 msgid "Error closing file \"%s\"."
 msgstr "Greška pri zatvaranju datoteke „%s“."
 
+#: plugins/elements/gstfilesink.c:605
 #, c-format
 msgid "Error while seeking in file \"%s\"."
 msgstr "Greška pri pozicioniranju u datoteci „%s“."
 
+#: plugins/elements/gstfilesink.c:613 plugins/elements/gstfilesink.c:620
+#: plugins/elements/gstfilesink.c:793 plugins/elements/gstfilesink.c:848
 #, c-format
 msgid "Error while writing to file \"%s\"."
 msgstr "Greška pri pisanju u datoteku „%s“."
 
+#: plugins/elements/gstfilesrc.c:525
 msgid "No file name specified for reading."
 msgstr "Nije specificirana datoteka za čitanje."
 
+#: plugins/elements/gstfilesrc.c:546
 #, c-format
 msgid "Could not get info on \"%s\"."
 msgstr "Nije moguće dobiti podatke o „%s“."
 
+#: plugins/elements/gstfilesrc.c:552
 #, c-format
 msgid "\"%s\" is a directory."
 msgstr "„%s“ je direktorij."
 
+#: plugins/elements/gstfilesrc.c:558
 #, c-format
 msgid "File \"%s\" is a socket."
 msgstr "Datoteka „%s“ je utičnica (socket)."
 
+#: plugins/elements/gstidentity.c:722
 msgid "Failed after iterations as requested."
 msgstr "Neuspjeh nakon iteracija na zahtjev."
 
+#: plugins/elements/gstidentity.c:903
 msgid "eos-after and error-after can't both be defined."
 msgstr "oba, eos-after i error-error se ne mogu definirati ."
 
+#: plugins/elements/gsttypefindelement.c:251
 msgid "caps"
 msgstr "sposobnosti (caps)"
 
+#: plugins/elements/gsttypefindelement.c:252
 msgid "detected capabilities in stream"
 msgstr "doznata su svojstva strujanja"
 
+#: plugins/elements/gsttypefindelement.c:255
 msgid "minimum"
 msgstr "minimum"
 
+#: plugins/elements/gsttypefindelement.c:260
 msgid "force caps"
 msgstr "nametne sposobnosti"
 
+#: plugins/elements/gsttypefindelement.c:261
 msgid "force caps without doing a typefind"
 msgstr "nametne sposobnosti bez upotrebe „typefind“"
 
+#: plugins/elements/gsttypefindelement.c:987
+#: plugins/elements/gsttypefindelement.c:1009
 msgid "Stream doesn't contain enough data."
 msgstr "Protok ne sadrži dovoljno podataka."
 
+#: plugins/elements/gsttypefindelement.c:1129
 msgid "Stream contains no data."
 msgstr "Protok ne sadrži podatke."
 
+#: tools/gst-inspect.c:290
 #, c-format
 msgid "%sImplemented Interfaces%s:\n"
 msgstr "%sRealizirana sučelja%s:\n"
 
+#: tools/gst-inspect.c:400
 msgid "readable"
 msgstr "čitljivo"
 
+#: tools/gst-inspect.c:405
 msgid "writable"
 msgstr "zapisivo"
 
+#: tools/gst-inspect.c:410
 msgid "deprecated"
 msgstr "zastarjelo"
 
+#: tools/gst-inspect.c:414
 msgid "controllable"
 msgstr "upravljivo"
 
+#: tools/gst-inspect.c:420
 msgid "changeable in NULL, READY, PAUSED or PLAYING state"
 msgstr "promjenjivo u stanje NULL, READY, PAUSED ili PLAYING"
 
+#: tools/gst-inspect.c:423
 msgid "changeable only in NULL, READY or PAUSED state"
 msgstr "promjenjivo samo u stanje NULL, READY ili PAUSED"
 
+#: tools/gst-inspect.c:426
 msgid "changeable only in NULL or READY state"
 msgstr "promjenjivo samo u stanje NULL ili READY"
 
+#: tools/gst-inspect.c:1131
 msgid "Blacklisted files:"
 msgstr "Datoteke na crnoj listi:"
 
+#: tools/gst-inspect.c:1143 tools/gst-inspect.c:1276
 #, c-format
 msgid "%sTotal count%s: %s"
 msgstr "%sUkupna količina%s: %s"
 
+#: tools/gst-inspect.c:1145
 #, c-format
 msgid "%d blacklisted file"
 msgid_plural "%d blacklisted files"
@@ -1084,6 +1303,7 @@ msgstr[0] "%d datoteka na crnoj listi"
 msgstr[1] "%d datoteke na crnoj listi"
 msgstr[2] "%d datoteka na crnoj listi"
 
+#: tools/gst-inspect.c:1278
 #, c-format
 msgid "%d plugin"
 msgid_plural "%d plugins"
@@ -1091,6 +1311,7 @@ msgstr[0] "%d plugin"
 msgstr[1] "%d plugina"
 msgstr[2] "%d plugina"
 
+#: tools/gst-inspect.c:1281
 #, c-format
 msgid "%d blacklist entry"
 msgid_plural "%d blacklist entries"
@@ -1098,6 +1319,7 @@ msgstr[0] "%d stavka na crnoj listi"
 msgstr[1] "%d stavke na crnoj listi"
 msgstr[2] "%d stavki na crnoj listi"
 
+#: tools/gst-inspect.c:1286
 #, c-format
 msgid "%d feature"
 msgid_plural "%d features"
@@ -1105,17 +1327,18 @@ msgstr[0] "%d značajka"
 msgstr[1] "%d značajke"
 msgstr[2] "%d značajki"
 
+#: tools/gst-inspect.c:1953
 msgid "Print all elements"
 msgstr "ispiše sve elemente"
 
+#: tools/gst-inspect.c:1955
 msgid "Print list of blacklisted files"
 msgstr "ispiše popis datoteka na crnoj listi"
 
+#: tools/gst-inspect.c:1957
 msgid ""
-"Print a machine-parsable list of features the specified plugin or all "
-"plugins provide.\n"
-"                                       Useful in connection with external "
-"automatic plugin installation mechanisms"
+"Print a machine-parsable list of features the specified plugin or all plugins provide.\n"
+"                                       Useful in connection with external automatic plugin installation mechanisms"
 msgstr ""
 "ispiše (raščlanjiv) popis značajki\n"
 "                                         samo navedenog ili svih plugina;\n"
@@ -1123,99 +1346,113 @@ msgstr ""
 "                                         automatskim mehanizmima za\n"
 "                                         instalaciju plugina"
 
+#: tools/gst-inspect.c:1962
 msgid "List the plugin contents"
 msgstr "izlista sadržaj plugina"
 
-msgid ""
-"A slashes ('/') separated list of types of elements (also known as klass) to "
-"list. (unordered)"
+#: tools/gst-inspect.c:1964
+msgid "A slashes ('/') separated list of types of elements (also known as klass) to list. (unordered)"
 msgstr ""
 "izlista nesortirani popis vrsta elemenata\n"
 "                                         (odvojenih s „/“); taj popis je\n"
 "                                          poznat kao „klass“"
 
+#: tools/gst-inspect.c:1967
 msgid "Check if the specified element or plugin exists"
 msgstr ""
 "provjeri postoji li specificirani\n"
 "                                         element ili plugin"
 
-msgid ""
-"When checking if an element or plugin exists, also check that its version is "
-"at least the version specified"
+#: tools/gst-inspect.c:1970
+msgid "When checking if an element or plugin exists, also check that its version is at least the version specified"
 msgstr ""
 "isto kao gore ali dodatno provjeri\n"
 "                                         da njihova inačica nije niža\n"
 "                                         od specificirane"
 
+#: tools/gst-inspect.c:1974
 msgid "Print supported URI schemes, with the elements that implement them"
 msgstr ""
 "ispiše podržane URI sheme s elementima\n"
 "                                         koji ih realiziraju"
 
-msgid ""
-"Disable colors in output. You can also achieve the same by "
-"setting'GST_INSPECT_NO_COLORS' environment variable to any value."
-msgstr ""
-"Onemogućite obojeni ispis. To možete učiniti i postavljanjem varijable "
-"okruženja „GST_INSPECT_NO_COLORS“ na bilo koju vrijednost."
+#: tools/gst-inspect.c:1979
+msgid "Disable colors in output. You can also achieve the same by setting'GST_INSPECT_NO_COLORS' environment variable to any value."
+msgstr "Onemogućite obojeni ispis. To možete učiniti i postavljanjem varijable okruženja „GST_INSPECT_NO_COLORS“ na bilo koju vrijednost."
 
+#: tools/gst-inspect.c:2135
 #, c-format
 msgid "Could not load plugin file: %s\n"
 msgstr "Nije moguće učitati datoteku plugina: %s\n"
 
+#: tools/gst-inspect.c:2141
 #, c-format
 msgid "No such element or plugin '%s'\n"
 msgstr "Nema takvog elementa ili plugina „%s“\n"
 
+#: tools/gst-launch.c:252
 msgid "Index statistics"
 msgstr "Indeksna statistika"
 
+#: tools/gst-launch.c:578
 #, c-format
 msgid "Got message #%u from element \"%s\" (%s): "
 msgstr "Primljena je poruka #%u od elementa „%s“ (%s): "
 
+#: tools/gst-launch.c:582
 #, c-format
 msgid "Got message #%u from pad \"%s:%s\" (%s): "
 msgstr "Primljena je poruka #%u od konekcije „%s:%s“ (%s): "
 
+#: tools/gst-launch.c:586
 #, c-format
 msgid "Got message #%u from object \"%s\" (%s): "
 msgstr "Primljena je poruka #%u od objekta „%s“ (%s): "
 
+#: tools/gst-launch.c:590
 #, c-format
 msgid "Got message #%u (%s): "
 msgstr "Primljena je poruka #%u (%s): "
 
+#: tools/gst-launch.c:622
 #, c-format
 msgid "Got EOS from element \"%s\".\n"
 msgstr "Primljen je EOS (znak kraja protoka) od elementa „%s“.\n"
 
+#: tools/gst-launch.c:631
 #, c-format
 msgid "FOUND TAG      : found by element \"%s\".\n"
 msgstr "PRONAĐEN TAG   : pronađen elementom „%s“.\n"
 
+#: tools/gst-launch.c:634
 #, c-format
 msgid "FOUND TAG      : found by pad \"%s:%s\".\n"
 msgstr "PRONAĐEN TAG   : pronađen s konekcijom „%s:%s“.\n"
 
+#: tools/gst-launch.c:637
 #, c-format
 msgid "FOUND TAG      : found by object \"%s\".\n"
 msgstr "PRONAĐEN TAG   : pronađen objektom „%s“.\n"
 
+#: tools/gst-launch.c:640
 msgid "FOUND TAG\n"
 msgstr "PRONAĐEN TAG\n"
 
+#: tools/gst-launch.c:655
 #, c-format
 msgid "FOUND TOC      : found by element \"%s\".\n"
 msgstr "PRONAĐEN TOC   : pronađen elementom „%s“.\n"
 
+#: tools/gst-launch.c:658
 #, c-format
 msgid "FOUND TOC      : found by object \"%s\".\n"
 msgstr "PRONAĐEN TOC   : pronađen objektom „%s“.\n"
 
+#: tools/gst-launch.c:661
 msgid "FOUND TOC\n"
 msgstr "PRONAĐEN TOC\n"
 
+#: tools/gst-launch.c:678
 #, c-format
 msgid ""
 "INFO:\n"
@@ -1224,148 +1461,190 @@ msgstr ""
 "INFORMACIJE:\n"
 "%s\n"
 
+#: tools/gst-launch.c:695
 #, c-format
 msgid "WARNING: from element %s: %s\n"
 msgstr "UPOZORENJE: od elementa %s: %s\n"
 
+#: tools/gst-launch.c:730
 msgid "Prerolled, waiting for buffering to finish...\n"
 msgstr "Pripremljeno, čeka se završetak punjenja međuspremnika...\n"
 
+#: tools/gst-launch.c:734
 msgid "Prerolled, waiting for progress to finish...\n"
 msgstr "Pripremljeno, čeka se završetak procesa...\n"
 
+#: tools/gst-launch.c:746
 msgid "buffering..."
 msgstr "punjenje međuspremnika..."
 
+#: tools/gst-launch.c:757
 msgid "Done buffering, setting pipeline to PLAYING ...\n"
 msgstr "Gotovo je s punjenjem, cjevovod se stavlja u stanje PLAYING ...\n"
 
+#: tools/gst-launch.c:765
 msgid "Buffering, setting pipeline to PAUSED ...\n"
 msgstr "Punjenje međuspremnika, cjevovod se stavlja u stanje PAUSED ...\n"
 
+#: tools/gst-launch.c:774
 msgid "Redistribute latency...\n"
 msgstr "Preraspodjela latencije...\n"
 
+#: tools/gst-launch.c:785
 #, c-format
 msgid "Setting state to %s as requested by %s...\n"
 msgstr "Uspostavlja se stanje %s prema zahtjevu od %s...\n"
 
+#: tools/gst-launch.c:801
 msgid "Interrupt: Stopping pipeline ...\n"
 msgstr "Prekid: Zaustavlja se cjevovod ...\n"
 
+#: tools/gst-launch.c:830
 #, c-format
 msgid "Progress: (%s) %s\n"
 msgstr "Progres: (%s) %s\n"
 
+#: tools/gst-launch.c:843
 #, c-format
 msgid "Missing element: %s\n"
 msgstr "Nedostaje element %s\n"
 
+#: tools/gst-launch.c:857
 #, c-format
 msgid "Got context from element '%s': %s=%s\n"
 msgstr "Primljen je kontekst od elementa „%s“: %s=%s\n"
 
+#: tools/gst-launch.c:991
 msgid "Output tags (also known as metadata)"
 msgstr "izlazni tagovi (znani i kao „metapodaci“)"
 
+#: tools/gst-launch.c:993
 msgid "Output TOC (chapters and editions)"
 msgstr "ispiše TOC (sadržaj: poglavlja i izdanja)"
 
+#: tools/gst-launch.c:995
 msgid "Output status information and property notifications"
 msgstr "ispiše status i obavijesti o svojstvima"
 
+#: tools/gst-launch.c:997
 msgid "Do not print any progress information"
 msgstr "ne ispisivati informacije o progresu"
 
+#: tools/gst-launch.c:999
 msgid "Output messages"
 msgstr "izlazne poruke"
 
-msgid ""
-"Do not output status information for the specified property if verbose "
-"output is enabled (can be used multiple times)"
+#: tools/gst-launch.c:1001
+msgid "Do not output status information for the specified property if verbose output is enabled (can be used multiple times)"
 msgstr ""
 "ne ispiše status za IME-SVOJSTVA iako je\n"
 "                                      aktivna opcija za opširno ispisivanje"
 
+#: tools/gst-launch.c:1003
 msgid "PROPERTY-NAME"
 msgstr "IME-SVOJSTVA"
 
+#: tools/gst-launch.c:1005
 msgid "Do not install a fault handler"
 msgstr "ne instalira rutinu za obradu greški"
 
+#: tools/gst-launch.c:1007
 msgid "Force EOS on sources before shutting the pipeline down"
 msgstr ""
 "nametni EOS na sources prije zatvaranja\n"
 "                                      cjevovoda"
 
+#: tools/gst-launch.c:1010
 msgid "Gather and print index statistics"
 msgstr "Prikupiti i ispisati indeksne statistike"
 
+#: tools/gst-launch.c:1077
 #, c-format
 msgid "ERROR: pipeline could not be constructed: %s.\n"
 msgstr "GREŠKA: nije moguće sastaviti cjevovod: %s.\n"
 
+#: tools/gst-launch.c:1081
 msgid "ERROR: pipeline could not be constructed.\n"
 msgstr "GREŠKA: nije moguće sastaviti cjevovod.\n"
 
+#: tools/gst-launch.c:1085
 #, c-format
 msgid "WARNING: erroneous pipeline: %s\n"
 msgstr "UPOZORENJE: pogrešni cjevovod: %s\n"
 
+#: tools/gst-launch.c:1101
 msgid "ERROR: the 'pipeline' element wasn't found.\n"
 msgstr "GREŠKA: nije pronađen element „pipeline“.\n"
 
+#: tools/gst-launch.c:1132 tools/gst-launch.c:1233
 msgid "Setting pipeline to PAUSED ...\n"
 msgstr "Cjevovod se stavlja u stanje PAUSED ...\n"
 
+#: tools/gst-launch.c:1137
 msgid "ERROR: Pipeline doesn't want to pause.\n"
 msgstr "GREŠKA: Cjevovod ne želi pauzirati.\n"
 
+#: tools/gst-launch.c:1142
 msgid "Pipeline is live and does not need PREROLL ...\n"
 msgstr "Cjevovod je aktiv i ne treba PREROLL (pripravu)...\n"
 
+#: tools/gst-launch.c:1146
 msgid "Pipeline is PREROLLING ...\n"
 msgstr "Cjevovod se priprema (PREROLLING)....\n"
 
+#: tools/gst-launch.c:1149 tools/gst-launch.c:1163
 msgid "ERROR: pipeline doesn't want to preroll.\n"
 msgstr "GREŠKA: cjevovod se ne želi pripremiti (preroll).\n"
 
+#: tools/gst-launch.c:1156
 msgid "Pipeline is PREROLLED ...\n"
 msgstr "Cjevovod je pripremljen (PREROLLED) ...\n"
 
+#: tools/gst-launch.c:1169
 msgid "Setting pipeline to PLAYING ...\n"
 msgstr "Cjevovod je stavlja u stanje PLAYING ...\n"
 
+#: tools/gst-launch.c:1176
 msgid "ERROR: pipeline doesn't want to play.\n"
 msgstr "GREŠKA: cjevovod ne želi reproducirati (play).\n"
 
+#: tools/gst-launch.c:1195
 msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n"
 msgstr "Omogućen je EOS pri zatvaranju -- nameće se EOS na cjevovod\n"
 
+#: tools/gst-launch.c:1199
 msgid "EOS on shutdown enabled -- waiting for EOS after Error\n"
 msgstr "Omogućen je EOS pri zatvaranju -- čekanje na EOS nakon greške\n"
 
+#: tools/gst-launch.c:1202
 msgid "Waiting for EOS...\n"
 msgstr "Čeka se EOS...\n"
 
+#: tools/gst-launch.c:1209
 msgid "EOS received - stopping pipeline...\n"
 msgstr "Primljen je EOS - cjevovod se zaustavlja...\n"
 
+#: tools/gst-launch.c:1213
 msgid "Interrupt while waiting for EOS - stopping pipeline...\n"
 msgstr "Prekid dok se čeka na EOS - cjevovod se zaustavlja...\n"
 
+#: tools/gst-launch.c:1218
 msgid "An error happened while waiting for EOS\n"
 msgstr "Dogodila se greška pri čekanju na EOS\n"
 
+#: tools/gst-launch.c:1229
 msgid "Execution ended after %"
 msgstr "Izvršavanje je završilo nakon %"
 
+#: tools/gst-launch.c:1245
 msgid "Setting pipeline to READY ...\n"
 msgstr "Cjevovod se stavlja u stanje READY ...\n"
 
+#: tools/gst-launch.c:1257
 msgid "Setting pipeline to NULL ...\n"
 msgstr "Cjevovod se stavlja u stanje NULL ...\n"
 
+#: tools/gst-launch.c:1261
 msgid "Freeing pipeline ...\n"
 msgstr "Cjevovod se prazni...\n"
 
@@ -1400,9 +1679,7 @@ msgstr "Cjevovod se prazni...\n"
 #~ msgstr "najviše"
 
 #~ msgid "Usage: gst-xmllaunch <file.xml> [ element.property=value ... ]\n"
-#~ msgstr ""
-#~ "Uporaba: gst-xmllaunch <datoteka.xml> [ element."
-#~ "svojstvo=vrijednost ... ]\n"
+#~ msgstr "Uporaba: gst-xmllaunch <datoteka.xml> [ element.svojstvo=vrijednost ... ]\n"
 
 #~ msgid "ERROR: parse of xml file '%s' failed.\n"
 #~ msgstr "GREŠKA: analiza xml datoteke „%s” nije uspjela.\n"
index ab5f8f4..38cfa7f 100644 (file)
-# Hungarian translation for gstreamer
-# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2012, 2014, 2015, 2016, 2017 Canonical Ltd, and Rosetta Contributors
+# Hungarian translation for gstreamer.
+# Copyright (c) 2006, 2007, 2008, 2009, 2010, 2012, 2014, 2015, 2016, 2017, 2019 Canonical Ltd, and Rosetta Contributors
 # This file is distributed under the same license as the gstreamer package.
 #
 # Gabor Kelemen <kelemeng@gnome.hu>, 2006, 2007, 2008, 2009, 2010, 2012, 2016.
-# Balázs Úr <urbalazs@gmail.com>, 2014, 2015, 2017.
+# Balázs Úr <ur.balazs@fsf.hu>, 2014, 2015, 2017, 2019.
 msgid ""
 msgstr ""
-"Project-Id-Version: gstreamer 1.12.0\n"
+"Project-Id-Version: gstreamer 1.16.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:37+0000\n"
-"PO-Revision-Date: 2017-05-05 20:17+0200\n"
-"Last-Translator: Balázs Úr <urbalazs@gmail.com>\n"
+"POT-Creation-Date: 2019-04-19 00:15+0100\n"
+"PO-Revision-Date: 2019-11-23 22:13+0100\n"
+"Last-Translator: Balázs Úr <ur.balazs@fsf.hu>\n"
 "Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
 "Language: hu\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
-"X-Generator: Lokalize 1.2\n"
+"X-Generator: Lokalize 19.04.3\n"
 "Plural-Forms:  nplurals=2; plural=(n != 1);\n"
 
+#: gst/gst.c:250
 msgid "Print the GStreamer version"
 msgstr "A GStreamer verziójának kiírása"
 
+#: gst/gst.c:252
 msgid "Make all warnings fatal"
 msgstr "Minden figyelmeztetés végzetes legyen"
 
+#: gst/gst.c:256
 msgid "Print available debug categories and exit"
 msgstr "Az elérhető hibakeresési kategóriák kiírása és kilépés"
 
-msgid ""
-"Default debug level from 1 (only error) to 9 (anything) or 0 for no output"
-msgstr ""
-"Alapértelmezett hibakeresési szint 1 (csak hibák) és 9 (bármi) között, vagy "
-"0 esetén nincs kimenet"
+#: gst/gst.c:260
+msgid "Default debug level from 1 (only error) to 9 (anything) or 0 for no output"
+msgstr "Alapértelmezett hibakeresési szint 1 (csak hibák) és 9 (bármi) között, vagy 0 esetén nincs kimenet"
 
+#: gst/gst.c:262
 msgid "LEVEL"
 msgstr "SZINT"
 
-msgid ""
-"Comma-separated list of category_name:level pairs to set specific levels for "
-"the individual categories. Example: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
-msgstr ""
-"A kategórianév:szint párok vesszőkkel elválasztott listája adott szintek "
-"beállításához az egyes kategóriákhoz. Például: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
+#: gst/gst.c:264
+msgid "Comma-separated list of category_name:level pairs to set specific levels for the individual categories. Example: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
+msgstr "A kategórianév:szint párok vesszőkkel elválasztott listája adott szintek beállításához az egyes kategóriákhoz. Például: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
 
+#: gst/gst.c:267
 msgid "LIST"
 msgstr "LISTA"
 
+#: gst/gst.c:269
 msgid "Disable colored debugging output"
 msgstr "Színes hibakeresési kimenet letiltása"
 
-msgid ""
-"Changes coloring mode of the debug log. Possible modes: off, on, disable, "
-"auto, unix"
-msgstr ""
-"Megváltoztatja a hibakeresési napló színezési módját. Lehetséges módok: off, "
-"on, disable, auto, unix"
+#: gst/gst.c:273
+msgid "Changes coloring mode of the debug log. Possible modes: off, on, disable, auto, unix"
+msgstr "Megváltoztatja a hibakeresési napló színezési módját. Lehetséges módok: off, on, disable, auto, unix"
 
+#: gst/gst.c:277
 msgid "Disable debugging"
 msgstr "Hibakeresés letiltása"
 
+#: gst/gst.c:281
 msgid "Enable verbose plugin loading diagnostics"
 msgstr "Részletes bővítménybetöltési diagnosztika engedélyezése"
 
+#: gst/gst.c:285
 msgid "Colon-separated paths containing plugins"
 msgstr "Bővítményeket tartalmazó útvonalak vesszőkkel elválasztott listája"
 
+#: gst/gst.c:285
 msgid "PATHS"
 msgstr "ÚTVONALAK"
 
-msgid ""
-"Comma-separated list of plugins to preload in addition to the list stored in "
-"environment variable GST_PLUGIN_PATH"
-msgstr ""
-"A GST_PLUGIN_PATH környezeti változóban megadott listán kívül előre "
-"betöltendő bővítmények vesszővel elválasztott listája."
+#: gst/gst.c:288
+msgid "Comma-separated list of plugins to preload in addition to the list stored in environment variable GST_PLUGIN_PATH"
+msgstr "A GST_PLUGIN_PATH környezeti változóban megadott listán kívül előre betöltendő bővítmények vesszővel elválasztott listája."
 
+#: gst/gst.c:290
 msgid "PLUGINS"
 msgstr "BŐVÍTMÉNYEK"
 
+#: gst/gst.c:293
 msgid "Disable trapping of segmentation faults during plugin loading"
 msgstr "Szegmentálási hibák elfogásának letiltása a bővítménybetöltés során"
 
+#: gst/gst.c:298
 msgid "Disable updating the registry"
 msgstr "A nyilvántartás frissítésének letiltása"
 
+#: gst/gst.c:303
 msgid "Disable spawning a helper process while scanning the registry"
 msgstr "Segédfolyamat indításának letiltása a nyilvántartás elemzése közben"
 
+#: gst/gst.c:308
 msgid "GStreamer Options"
 msgstr "GStreamer beállításai"
 
+#: gst/gst.c:309
 msgid "Show GStreamer Options"
 msgstr "A GStreamer beállításainak megjelenítése"
 
+#: gst/gst.c:1012
 msgid "Unknown option"
 msgstr "Ismeretlen beállítás"
 
+#: gst/gsterror.c:130
 msgid "GStreamer encountered a general core library error."
 msgstr "A GStreamer általános magkönyvtárhibát tapasztalt."
 
-msgid ""
-"GStreamer developers were too lazy to assign an error code to this error."
-msgstr ""
-"A GStreamer fejlesztők túl lusták voltak hibakódot rendelni ehhez a hibához."
+#: gst/gsterror.c:132 gst/gsterror.c:174 gst/gsterror.c:198 gst/gsterror.c:240
+msgid "GStreamer developers were too lazy to assign an error code to this error."
+msgstr "A GStreamer fejlesztők túl lusták voltak hibakódot rendelni ehhez a hibához."
 
+#: gst/gsterror.c:135
 msgid "Internal GStreamer error: code not implemented."
 msgstr "Belső GStreamer hiba: a kód nincs megvalósítva."
 
-msgid ""
-"GStreamer error: state change failed and some element failed to post a "
-"proper error message with the reason for the failure."
-msgstr ""
-"GStreamer hiba: az állapotváltás meghiúsult és néhány elem nem volt képes "
-"megfelelő hibaüzenetet küldeni a hiba okáról."
+#: gst/gsterror.c:137
+msgid "GStreamer error: state change failed and some element failed to post a proper error message with the reason for the failure."
+msgstr "GStreamer hiba: az állapotváltás meghiúsult és néhány elem nem volt képes megfelelő hibaüzenetet küldeni a hiba okáról."
 
+#: gst/gsterror.c:140
 msgid "Internal GStreamer error: pad problem."
 msgstr "Belső GStreamer hiba: kitöltési probléma."
 
+#: gst/gsterror.c:142
 msgid "Internal GStreamer error: thread problem."
 msgstr "Belső GStreamer hiba: szálprobléma."
 
+#: gst/gsterror.c:144
 msgid "GStreamer error: negotiation problem."
 msgstr "GStreamer hiba: megállapodási probléma."
 
+#: gst/gsterror.c:146
 msgid "Internal GStreamer error: event problem."
 msgstr "Belső GStreamer hiba: eseményprobléma."
 
+#: gst/gsterror.c:148
 msgid "Internal GStreamer error: seek problem."
 msgstr "Belső GStreamer hiba: pozicionálási probléma."
 
+#: gst/gsterror.c:150
 msgid "Internal GStreamer error: caps problem."
 msgstr "Belső GStreamer hiba: képességprobléma."
 
+#: gst/gsterror.c:152
 msgid "Internal GStreamer error: tag problem."
 msgstr "Belső GStreamer hiba: címkeprobléma."
 
+#: gst/gsterror.c:154
 msgid "Your GStreamer installation is missing a plug-in."
 msgstr "A GStreamer telepítésből hiányzik egy bővítmény."
 
+#: gst/gsterror.c:156
 msgid "GStreamer error: clock problem."
 msgstr "GStreamer hiba: óraprobléma."
 
-msgid ""
-"This application is trying to use GStreamer functionality that has been "
-"disabled."
+#: gst/gsterror.c:158
+msgid "This application is trying to use GStreamer functionality that has been disabled."
 msgstr "Az alkalmazás letiltott GStreamer funkciókat próbál meg használni."
 
+#: gst/gsterror.c:172
 msgid "GStreamer encountered a general supporting library error."
 msgstr "A GStreamer általános támogató programkönyvtárhibát észlelt."
 
+#: gst/gsterror.c:177
 msgid "Could not initialize supporting library."
 msgstr "Nem sikerült inicializálni a támogató programkönyvtárat."
 
+#: gst/gsterror.c:179
 msgid "Could not close supporting library."
 msgstr "Nem zárható be a támogató programkönyvtár."
 
+#: gst/gsterror.c:181
 msgid "Could not configure supporting library."
 msgstr "Nem állítható be a támogató programkönyvtár."
 
+#: gst/gsterror.c:183
 msgid "Encoding error."
 msgstr "Kódolási hiba."
 
+#: gst/gsterror.c:196
 msgid "GStreamer encountered a general resource error."
 msgstr "A GStreamer általános erőforráshibát észlelt."
 
+#: gst/gsterror.c:201
 msgid "Resource not found."
 msgstr "Az erőforrás nem található."
 
+#: gst/gsterror.c:203
 msgid "Resource busy or not available."
 msgstr "Az erőforrás foglalt vagy nem érhető el."
 
+#: gst/gsterror.c:205
 msgid "Could not open resource for reading."
 msgstr "Az erőforrás nem nyitható meg olvasásra."
 
+#: gst/gsterror.c:207
 msgid "Could not open resource for writing."
 msgstr "Az erőforrás nem nyitható meg írásra."
 
+#: gst/gsterror.c:209
 msgid "Could not open resource for reading and writing."
 msgstr "Az erőforrás nem nyitható meg olvasásra és írásra."
 
+#: gst/gsterror.c:211
 msgid "Could not close resource."
 msgstr "Az erőforrás nem zárható le."
 
+#: gst/gsterror.c:213
 msgid "Could not read from resource."
 msgstr "Nem lehet olvasni az erőforrásból."
 
+#: gst/gsterror.c:215
 msgid "Could not write to resource."
 msgstr "Nem lehet írni az erőforrásba."
 
+#: gst/gsterror.c:217
 msgid "Could not perform seek on resource."
 msgstr "Nem végezhető pozicionálás az erőforráson."
 
+#: gst/gsterror.c:219
 msgid "Could not synchronize on resource."
 msgstr "Nem lehet szinkronizálni az erőforráson."
 
+#: gst/gsterror.c:221
 msgid "Could not get/set settings from/on resource."
 msgstr "Nem lehet lekérni/beállítani az erőforrás beállításait."
 
+#: gst/gsterror.c:223
 msgid "No space left on the resource."
 msgstr "Nincs több hely az erőforráson."
 
+#: gst/gsterror.c:225
 msgid "Not authorized to access resource."
 msgstr "Nincs jogosultsága az erőforrás eléréséhez."
 
+#: gst/gsterror.c:238
 msgid "GStreamer encountered a general stream error."
 msgstr "A GStreamer általános adatfolyamhibát észlelt."
 
+#: gst/gsterror.c:243
 msgid "Element doesn't implement handling of this stream. Please file a bug."
-msgstr ""
-"Az elem nem valósítja meg az adatfolyam kezelését. Küldjön be egy "
-"hibajelentést."
+msgstr "Az elem nem valósítja meg az adatfolyam kezelését. Küldjön be egy hibajelentést."
 
+#: gst/gsterror.c:246
 msgid "Could not determine type of stream."
 msgstr "Nem állapítható meg az adatfolyam típusa."
 
+#: gst/gsterror.c:248
 msgid "The stream is of a different type than handled by this element."
 msgstr "Az adatfolyam típusa eltér az elem által kezelttől."
 
+#: gst/gsterror.c:251
 msgid "There is no codec present that can handle the stream's type."
 msgstr "Nincs jelen az adatfolyam típusát kezelni képes kodek."
 
+#: gst/gsterror.c:253
 msgid "Could not decode stream."
 msgstr "Nem fejthető vissza az adatfolyam."
 
+#: gst/gsterror.c:255
 msgid "Could not encode stream."
 msgstr "Az adatfolyam nem kódolható."
 
+#: gst/gsterror.c:257
 msgid "Could not demultiplex stream."
 msgstr "Nem választható szét az adatfolyam."
 
+#: gst/gsterror.c:259
 msgid "Could not multiplex stream."
 msgstr "Nem egyesíthető az adatfolyam."
 
+#: gst/gsterror.c:261
 msgid "The stream is in the wrong format."
 msgstr "Az adatfolyam formátuma rossz."
 
+#: gst/gsterror.c:263
 msgid "The stream is encrypted and decryption is not supported."
 msgstr "Az adatfolyam titkosított és a visszafejtés nem támogatott."
 
-msgid ""
-"The stream is encrypted and can't be decrypted because no suitable key has "
-"been supplied."
-msgstr ""
-"Az adatfolyam titkosított és nem fejthető vissza, mivel nem került megadásra "
-"megfelelő kulcs."
+#: gst/gsterror.c:265
+msgid "The stream is encrypted and can't be decrypted because no suitable key has been supplied."
+msgstr "Az adatfolyam titkosított és nem fejthető vissza, mivel nem került megadásra megfelelő kulcs."
 
+#: gst/gsterror.c:305
 #, c-format
 msgid "No error message for domain %s."
 msgstr "Nincs hibaüzenet a következő tartományhoz: %s."
 
+#: gst/gsterror.c:313
 #, c-format
 msgid "No standard error message for domain %s and code %d."
-msgstr ""
-"Nincs szabványos hibaüzenet a következő tartományhoz: %s és kódhoz: %d."
+msgstr "Nincs szabványos hibaüzenet a következő tartományhoz: %s és kódhoz: %d."
 
+#: gst/gstpipeline.c:562
 msgid "Selected clock cannot be used in pipeline."
 msgstr "A kijelölt óra nem használható adatcsatornában."
 
+#: gst/gstregistry.c:1694
 #, c-format
 msgid "Error writing registry cache to %s: %s"
 msgstr "Hiba a regisztrációs gyorsítótár írásakor ebbe: %s: %s"
 
+#: gst/gsttaglist.c:108
 msgid "title"
 msgstr "cím"
 
+#: gst/gsttaglist.c:108
 msgid "commonly used title"
 msgstr "általánosan használt cím"
 
+#: gst/gsttaglist.c:111
 msgid "title sortname"
 msgstr "cím rendezési neve"
 
+#: gst/gsttaglist.c:111
 msgid "commonly used title for sorting purposes"
 msgstr "általánosan, rendezési céllal használt cím"
 
+#: gst/gsttaglist.c:114
 msgid "artist"
 msgstr "előadó"
 
+#: gst/gsttaglist.c:115
 msgid "person(s) responsible for the recording"
 msgstr "a felvételért felelős személyek"
 
+#: gst/gsttaglist.c:119
 msgid "artist sortname"
 msgstr "előadó rendezési neve"
 
+#: gst/gsttaglist.c:120
 msgid "person(s) responsible for the recording for sorting purposes"
 msgstr "a felvételért felelős személyek, rendezési céllal"
 
+#: gst/gsttaglist.c:123
 msgid "album"
 msgstr "album"
 
+#: gst/gsttaglist.c:124
 msgid "album containing this data"
 msgstr "az adatokat tartalmazó album"
 
+#: gst/gsttaglist.c:127
 msgid "album sortname"
 msgstr "album rendezési neve"
 
+#: gst/gsttaglist.c:128
 msgid "album containing this data for sorting purposes"
 msgstr "az adatokat tartalmazó album, rendezési céllal"
 
+#: gst/gsttaglist.c:131
 msgid "album artist"
 msgstr "albumelőadó"
 
+#: gst/gsttaglist.c:132
 msgid "The artist of the entire album, as it should be displayed"
 msgstr "A teljes album előadója, megjelenítendő formában"
 
+#: gst/gsttaglist.c:136
 msgid "album artist sortname"
 msgstr "albumelőadó rendezési neve"
 
+#: gst/gsttaglist.c:137
 msgid "The artist of the entire album, as it should be sorted"
 msgstr "A teljes album előadója, rendezéshez használható formában"
 
+#: gst/gsttaglist.c:139
 msgid "date"
 msgstr "dátum"
 
+#: gst/gsttaglist.c:139
 msgid "date the data was created (as a GDate structure)"
 msgstr "az adatok létrehozási dátuma (GDate struktúraként)"
 
+#: gst/gsttaglist.c:141
 msgid "datetime"
 msgstr "dátumidő"
 
+#: gst/gsttaglist.c:142
 msgid "date and time the data was created (as a GstDateTime structure)"
 msgstr "az adatok létrehozási dátuma és ideje (GstDateTime struktúraként)"
 
+#: gst/gsttaglist.c:146
 msgid "genre"
 msgstr "műfaj"
 
+#: gst/gsttaglist.c:147
 msgid "genre this data belongs to"
 msgstr "a stílus, amelyhez az adatok tartoznak"
 
+#: gst/gsttaglist.c:150
 msgid "comment"
 msgstr "megjegyzés"
 
+#: gst/gsttaglist.c:151
 msgid "free text commenting the data"
 msgstr "az adatokhoz tartozó szabad szöveges megjegyzés"
 
+#: gst/gsttaglist.c:154
 msgid "extended comment"
 msgstr "kiterjesztett megjegyzés"
 
+#: gst/gsttaglist.c:155
 msgid "free text commenting the data in key=value or key[en]=comment form"
-msgstr ""
-"az adatokhoz fűzött szabad szöveges megjegyzés kulcs=érték vagy "
-"kulcs[hu]=megjegyzés formában"
+msgstr "az adatokhoz fűzött szabad szöveges megjegyzés kulcs=érték vagy kulcs[hu]=megjegyzés formában"
 
+#: gst/gsttaglist.c:159
 msgid "track number"
 msgstr "dalsorszám"
 
+#: gst/gsttaglist.c:160
 msgid "track number inside a collection"
 msgstr "dalsorszám egy gyűjteményen belül"
 
+#: gst/gsttaglist.c:163
 msgid "track count"
 msgstr "dalszám"
 
+#: gst/gsttaglist.c:164
 msgid "count of tracks inside collection this track belongs to"
 msgstr "dalok mennyisége azon gyűjteményen belül, amelyhez ez a dal tartozik"
 
+#: gst/gsttaglist.c:168
 msgid "disc number"
 msgstr "lemezszám"
 
+#: gst/gsttaglist.c:169
 msgid "disc number inside a collection"
 msgstr "lemezszám egy gyűjteményen belül"
 
+#: gst/gsttaglist.c:172
 msgid "disc count"
 msgstr "lemezek mennyisége"
 
+#: gst/gsttaglist.c:173
 msgid "count of discs inside collection this disc belongs to"
-msgstr ""
-"lemezek mennyisége azon gyűjteményen belül, amelyhez ez a lemez tartozik"
+msgstr "lemezek mennyisége azon gyűjteményen belül, amelyhez ez a lemez tartozik"
 
+#: gst/gsttaglist.c:177
 msgid "location"
 msgstr "hely"
 
-msgid ""
-"Origin of media as a URI (location, where the original of the file or stream "
-"is hosted)"
-msgstr ""
-"A média eredete URI címként (az a hely, ahol az eredeti fájl vagy műsor "
-"megtalálható)"
+#: gst/gsttaglist.c:177
+msgid "Origin of media as a URI (location, where the original of the file or stream is hosted)"
+msgstr "A média eredete URI címként (az a hely, ahol az eredeti fájl vagy műsor megtalálható)"
 
+#: gst/gsttaglist.c:182
 msgid "homepage"
 msgstr "honlap"
 
+#: gst/gsttaglist.c:183
 msgid "Homepage for this media (i.e. artist or movie homepage)"
 msgstr "A média honlapja (előadó vagy film honlapja)"
 
+#: gst/gsttaglist.c:186
 msgid "description"
 msgstr "leírás"
 
+#: gst/gsttaglist.c:187
 msgid "short text describing the content of the data"
 msgstr "az adatokat leíró rövid szöveg"
 
+#: gst/gsttaglist.c:190
 msgid "version"
 msgstr "verzió"
 
+#: gst/gsttaglist.c:190
 msgid "version of this data"
 msgstr "az adatok verziószáma"
 
+#: gst/gsttaglist.c:192
 msgid "ISRC"
 msgstr "ISRC"
 
+#: gst/gsttaglist.c:194
 msgid "International Standard Recording Code - see http://www.ifpi.org/isrc/"
-msgstr ""
-"International Standard Recording Code – lásd: http://www.ifpi.org/isrc/"
+msgstr "International Standard Recording Code – lásd: http://www.ifpi.org/isrc/"
 
+#: gst/gsttaglist.c:198
 msgid "organization"
 msgstr "szervezet"
 
+#: gst/gsttaglist.c:201
 msgid "copyright"
 msgstr "copyright"
 
+#: gst/gsttaglist.c:201
 msgid "copyright notice of the data"
 msgstr "az adatok copyright megjegyzése"
 
+#: gst/gsttaglist.c:203
 msgid "copyright uri"
 msgstr "védjegy uri"
 
+#: gst/gsttaglist.c:204
 msgid "URI to the copyright notice of the data"
 msgstr "Az adatok védjegymegjegyzésének URI címe"
 
+#: gst/gsttaglist.c:206
 msgid "encoded by"
 msgstr "kódolta"
 
+#: gst/gsttaglist.c:206
 msgid "name of the encoding person or organization"
 msgstr "a kódoló személy vagy szervezet"
 
+#: gst/gsttaglist.c:210
 msgid "contact"
 msgstr "névjegy"
 
+#: gst/gsttaglist.c:210
 msgid "contact information"
 msgstr "kapcsolatinformációk"
 
+#: gst/gsttaglist.c:212
 msgid "license"
 msgstr "licenc"
 
+#: gst/gsttaglist.c:212
 msgid "license of data"
 msgstr "az adatok licence"
 
+#: gst/gsttaglist.c:214
 msgid "license uri"
 msgstr "licenc uri"
 
+#: gst/gsttaglist.c:215
 msgid "URI to the license of the data"
 msgstr "Az adatok licencének URI címe"
 
+#: gst/gsttaglist.c:218
 msgid "performer"
 msgstr "előadó"
 
+#: gst/gsttaglist.c:219
 msgid "person(s) performing"
 msgstr "az előadó(k)"
 
+#: gst/gsttaglist.c:222
 msgid "composer"
 msgstr "zeneszerző"
 
+#: gst/gsttaglist.c:223
 msgid "person(s) who composed the recording"
 msgstr "a felvétel szerzői"
 
+#: gst/gsttaglist.c:227
 msgid "conductor"
 msgstr "vezényel"
 
+#: gst/gsttaglist.c:228
 msgid "conductor/performer refinement"
 msgstr "vezényel/előadó finomítása"
 
+#: gst/gsttaglist.c:231
 msgid "duration"
 msgstr "időtartam"
 
+#: gst/gsttaglist.c:231
 msgid "length in GStreamer time units (nanoseconds)"
 msgstr "hossz GStreamer időegységekben (nanomásodperc)"
 
+#: gst/gsttaglist.c:234
 msgid "codec"
 msgstr "kodek"
 
+#: gst/gsttaglist.c:235
 msgid "codec the data is stored in"
 msgstr "az adatok tárolására használt kodek"
 
+#: gst/gsttaglist.c:238
 msgid "video codec"
 msgstr "videokodek"
 
+#: gst/gsttaglist.c:238
 msgid "codec the video data is stored in"
 msgstr "a videoadatok tárolására használt kodek"
 
+#: gst/gsttaglist.c:241
 msgid "audio codec"
 msgstr "hangkodek"
 
+#: gst/gsttaglist.c:241
 msgid "codec the audio data is stored in"
 msgstr "a hangadatok tárolására használt kodek"
 
+#: gst/gsttaglist.c:244
 msgid "subtitle codec"
 msgstr "feliratkodek"
 
+#: gst/gsttaglist.c:244
 msgid "codec the subtitle data is stored in"
 msgstr "a feliratadatok tárolására használt kodek"
 
+#: gst/gsttaglist.c:246
 msgid "container format"
 msgstr "tárolóformátum"
 
+#: gst/gsttaglist.c:247
 msgid "container format the data is stored in"
 msgstr "az adatok tárolására használt tárolóformátum"
 
+#: gst/gsttaglist.c:249
 msgid "bitrate"
 msgstr "bitsebesség"
 
+#: gst/gsttaglist.c:249
 msgid "exact or average bitrate in bits/s"
 msgstr "pontos vagy átlagos bitsebesség bit/mp-ben"
 
+#: gst/gsttaglist.c:251
 msgid "nominal bitrate"
 msgstr "névleges bitsebesség"
 
+#: gst/gsttaglist.c:251
 msgid "nominal bitrate in bits/s"
 msgstr "névleges bitsebesség bit/mp-ben"
 
+#: gst/gsttaglist.c:253
 msgid "minimum bitrate"
 msgstr "minimális bitsebesség"
 
+#: gst/gsttaglist.c:253
 msgid "minimum bitrate in bits/s"
 msgstr "minimális bitsebesség bit/mp-ben"
 
+#: gst/gsttaglist.c:255
 msgid "maximum bitrate"
 msgstr "maximális bitsebesség"
 
+#: gst/gsttaglist.c:255
 msgid "maximum bitrate in bits/s"
 msgstr "maximális bitsebesség bit/mp-ben"
 
+#: gst/gsttaglist.c:258
 msgid "encoder"
 msgstr "kódoló"
 
+#: gst/gsttaglist.c:258
 msgid "encoder used to encode this stream"
 msgstr "az adatfolyam kódolására használt kódoló"
 
+#: gst/gsttaglist.c:261
 msgid "encoder version"
 msgstr "kódoló verziószáma"
 
+#: gst/gsttaglist.c:262
 msgid "version of the encoder used to encode this stream"
 msgstr "az adatfolyam kódolására használt kódoló verziószáma"
 
+#: gst/gsttaglist.c:264
 msgid "serial"
 msgstr "soros"
 
+#: gst/gsttaglist.c:264
 msgid "serial number of track"
 msgstr "a dal sorszáma"
 
+#: gst/gsttaglist.c:266
 msgid "replaygain track gain"
 msgstr "visszajátszási hangerő: dal hangosítása"
 
+#: gst/gsttaglist.c:266
 msgid "track gain in db"
 msgstr "dal hangosítása dB-ben"
 
+#: gst/gsttaglist.c:268
 msgid "replaygain track peak"
 msgstr "visszajátszási hangerő: dal hangerejének csúcsértéke"
 
+#: gst/gsttaglist.c:268
 msgid "peak of the track"
 msgstr "a dal hangerejének csúcsértéke"
 
+#: gst/gsttaglist.c:270
 msgid "replaygain album gain"
 msgstr "visszajátszási hangerő: album hangosítása"
 
+#: gst/gsttaglist.c:270
 msgid "album gain in db"
 msgstr "album hangosítása dB-ben"
 
+#: gst/gsttaglist.c:272
 msgid "replaygain album peak"
 msgstr "visszajátszási hangerő: album hangerejének csúcsértéke"
 
+#: gst/gsttaglist.c:272
 msgid "peak of the album"
 msgstr "az album hangerejének csúcsértéke"
 
+#: gst/gsttaglist.c:274
 msgid "replaygain reference level"
 msgstr "visszajátszási hangerő referenciaszintje"
 
+#: gst/gsttaglist.c:275
 msgid "reference level of track and album gain values"
 msgstr "szám és album hangosításának referenciaszintje"
 
+#: gst/gsttaglist.c:277
 msgid "language code"
 msgstr "nyelvi kód"
 
+#: gst/gsttaglist.c:278
 msgid "language code for this stream, conforming to ISO-639-1 or ISO-639-2"
-msgstr ""
-"az adatfolyam ISO-639-1 vagy ISO-639-2 szabványnak megfelelő nyelvi kódja"
+msgstr "az adatfolyam ISO-639-1 vagy ISO-639-2 szabványnak megfelelő nyelvi kódja"
 
+#: gst/gsttaglist.c:281
 msgid "language name"
 msgstr "nyelvi kód"
 
+#: gst/gsttaglist.c:282
 msgid "freeform name of the language this stream is in"
 msgstr "az adatfolyam nyelvének szabad formátumú neve"
 
+#: gst/gsttaglist.c:284
 msgid "image"
 msgstr "kép"
 
+#: gst/gsttaglist.c:284
 msgid "image related to this stream"
 msgstr "az adatfolyamhoz kapcsolódó kép"
 
 #. TRANSLATORS: 'preview image' = image that shows a preview of the full image
+#: gst/gsttaglist.c:288
 msgid "preview image"
 msgstr "előnézeti kép"
 
+#: gst/gsttaglist.c:288
 msgid "preview image related to this stream"
 msgstr "az adatfolyamhoz kapcsolódó előnézeti kép"
 
+#: gst/gsttaglist.c:290
 msgid "attachment"
 msgstr "melléklet"
 
+#: gst/gsttaglist.c:290
 msgid "file attached to this stream"
 msgstr "az adatfolyamhoz mellékelt fájl"
 
+#: gst/gsttaglist.c:293
 msgid "beats per minute"
 msgstr "percenkénti ütések száma"
 
+#: gst/gsttaglist.c:294
 msgid "number of beats per minute in audio"
 msgstr "percenkénti ütések száma a hangban"
 
+#: gst/gsttaglist.c:296
 msgid "keywords"
 msgstr "kulcsszavak"
 
+#: gst/gsttaglist.c:296
 msgid "comma separated keywords describing the content"
 msgstr "a tartalmat leíró, vesszővel elválasztott kulcsszavak"
 
+#: gst/gsttaglist.c:299
 msgid "geo location name"
 msgstr "földrajzi hely neve"
 
-msgid ""
-"human readable descriptive location of where the media has been recorded or "
-"produced"
-msgstr ""
-"emberek által olvasható leíró jellegű hely, ahol a média felvételre vagy "
-"előállításra került"
+#: gst/gsttaglist.c:300
+msgid "human readable descriptive location of where the media has been recorded or produced"
+msgstr "emberek által olvasható leíró jellegű hely, ahol a média felvételre vagy előállításra került"
 
+#: gst/gsttaglist.c:303
 msgid "geo location latitude"
 msgstr "földrajzi hely szélessége"
 
-msgid ""
-"geo latitude location of where the media has been recorded or produced in "
-"degrees according to WGS84 (zero at the equator, negative values for "
-"southern latitudes)"
-msgstr ""
-"azon hely földrajzi szélessége, ahol a média felvételre vagy előállításra "
-"került fokokban, a WGS84-nek megfelelően (nulla az egyenlítőnél, negatív "
-"értékek déli szélességeken)"
+#: gst/gsttaglist.c:304
+msgid "geo latitude location of where the media has been recorded or produced in degrees according to WGS84 (zero at the equator, negative values for southern latitudes)"
+msgstr "azon hely földrajzi szélessége, ahol a média felvételre vagy előállításra került fokokban, a WGS84-nek megfelelően (nulla az egyenlítőnél, negatív értékek déli szélességeken)"
 
+#: gst/gsttaglist.c:308
 msgid "geo location longitude"
 msgstr "földrajzi hely hosszúsága"
 
-msgid ""
-"geo longitude location of where the media has been recorded or produced in "
-"degrees according to WGS84 (zero at the prime meridian in Greenwich/UK,  "
-"negative values for western longitudes)"
-msgstr ""
-"azon hely földrajzi hosszúsága, ahol a média felvételre vagy előállításra "
-"került fokokban, a WGS84-nek megfelelően (nulla a kezdő délkörnél "
-"Greenwichben, negatív értékek nyugati hosszúságokon)"
+#: gst/gsttaglist.c:309
+msgid "geo longitude location of where the media has been recorded or produced in degrees according to WGS84 (zero at the prime meridian in Greenwich/UK,  negative values for western longitudes)"
+msgstr "azon hely földrajzi hosszúsága, ahol a média felvételre vagy előállításra került fokokban, a WGS84-nek megfelelően (nulla a kezdő délkörnél Greenwichben, negatív értékek nyugati hosszúságokon)"
 
+#: gst/gsttaglist.c:313
 msgid "geo location elevation"
 msgstr "földrajzi hely magassága"
 
-msgid ""
-"geo elevation of where the media has been recorded or produced in meters "
-"according to WGS84 (zero is average sea level)"
-msgstr ""
-"azon hely földrajzi magassága, ahol a média felvételre vagy előállításra "
-"került méterben, a WGS84-nek megfelelően (nulla az átlagos tengerszinten)"
+#: gst/gsttaglist.c:314
+msgid "geo elevation of where the media has been recorded or produced in meters according to WGS84 (zero is average sea level)"
+msgstr "azon hely földrajzi magassága, ahol a média felvételre vagy előállításra került méterben, a WGS84-nek megfelelően (nulla az átlagos tengerszinten)"
 
+#: gst/gsttaglist.c:317
 msgid "geo location country"
 msgstr "földrajzi hely országa"
 
+#: gst/gsttaglist.c:318
 msgid "country (english name) where the media has been recorded or produced"
 msgstr "ország (angol név), ahol a média felvételre vagy előállításra került"
 
+#: gst/gsttaglist.c:321
 msgid "geo location city"
 msgstr "földrajzi hely városa"
 
+#: gst/gsttaglist.c:322
 msgid "city (english name) where the media has been recorded or produced"
 msgstr "város (angol név), ahol a média felvételre vagy előállításra került"
 
+#: gst/gsttaglist.c:325
 msgid "geo location sublocation"
 msgstr "földrajzi hely részhelye"
 
-msgid ""
-"a location within a city where the media has been produced or created (e.g. "
-"the neighborhood)"
-msgstr ""
-"a városon belüli hely, ahol a média előállításra vagy létrehozásra került "
-"(például környék)"
+#: gst/gsttaglist.c:326
+msgid "a location within a city where the media has been produced or created (e.g. the neighborhood)"
+msgstr "a városon belüli hely, ahol a média előállításra vagy létrehozásra került (például környék)"
 
+#: gst/gsttaglist.c:329
 msgid "geo location horizontal error"
 msgstr "földrajzi hely vízszintes hibája"
 
+#: gst/gsttaglist.c:330
 msgid "expected error of the horizontal positioning measures (in meters)"
 msgstr "a vízszintes pozicionálási értékek várt hibája (méterben)"
 
+#: gst/gsttaglist.c:333
 msgid "geo location movement speed"
 msgstr "földrajzi hely mozgási sebessége"
 
-msgid ""
-"movement speed of the capturing device while performing the capture in m/s"
+#: gst/gsttaglist.c:334
+msgid "movement speed of the capturing device while performing the capture in m/s"
 msgstr "a felvevőeszköz mozgási sebessége a felvétel készítésekor, m/s-ban"
 
+#: gst/gsttaglist.c:337
 msgid "geo location movement direction"
 msgstr "földrajzi hely mozgási iránya"
 
-msgid ""
-"indicates the movement direction of the device performing the capture of a "
-"media. It is represented as degrees in floating point representation, 0 "
-"means the geographic north, and increases clockwise"
-msgstr ""
-"a média felvételét végző eszköz mozgási irányát jelzi. lebegőpontosan "
-"ábrázolt fokok képviselik, a 0 a földrajzi északot jelzi és az óra járásának "
-"irányába nő."
+#: gst/gsttaglist.c:338
+msgid "indicates the movement direction of the device performing the capture of a media. It is represented as degrees in floating point representation, 0 means the geographic north, and increases clockwise"
+msgstr "a média felvételét végző eszköz mozgási irányát jelzi. lebegőpontosan ábrázolt fokok képviselik, a 0 a földrajzi északot jelzi és az óra járásának irányába nő."
 
+#: gst/gsttaglist.c:343
 msgid "geo location capture direction"
 msgstr "földrajzi hely felvételi iránya"
 
-msgid ""
-"indicates the direction the device is pointing to when capturing  a media. "
-"It is represented as degrees in floating point  representation, 0 means the "
-"geographic north, and increases clockwise"
-msgstr ""
-"a média felvételét végző eszköz irányát jelzi. lebegőpontosan ábrázolt fokok "
-"képviselik, a 0 a földrajzi északot jelzi és az óra járásának irányába nő."
+#: gst/gsttaglist.c:344
+msgid "indicates the direction the device is pointing to when capturing  a media. It is represented as degrees in floating point  representation, 0 means the geographic north, and increases clockwise"
+msgstr "a média felvételét végző eszköz irányát jelzi. lebegőpontosan ábrázolt fokok képviselik, a 0 a földrajzi északot jelzi és az óra járásának irányába nő."
 
 #. TRANSLATORS: 'show name' = 'TV/radio/podcast show name' here
+#: gst/gsttaglist.c:350
 msgid "show name"
 msgstr "műsornév"
 
+#: gst/gsttaglist.c:351
 msgid "Name of the tv/podcast/series show the media is from"
 msgstr "A tv/podcast/sorozat műsor neve, amelyből a média származik"
 
 #. TRANSLATORS: 'show sortname' = 'TV/radio/podcast show name as used for sorting purposes' here
+#: gst/gsttaglist.c:356
 msgid "show sortname"
 msgstr "műsor rendezési neve"
 
-msgid ""
-"Name of the tv/podcast/series show the media is from, for sorting purposes"
-msgstr ""
-"A tv/podcast/sorozat műsor neve, amelyből a média származik, rendezési célra"
+#: gst/gsttaglist.c:357
+msgid "Name of the tv/podcast/series show the media is from, for sorting purposes"
+msgstr "A tv/podcast/sorozat műsor neve, amelyből a média származik, rendezési célra"
 
+#: gst/gsttaglist.c:360
 msgid "episode number"
 msgstr "epizódszám"
 
+#: gst/gsttaglist.c:361
 msgid "The episode number in the season the media is part of"
 msgstr "Azon évadon belüli epizód száma, amelynek ez a média része"
 
+#: gst/gsttaglist.c:364
 msgid "season number"
 msgstr "évadszám"
 
+#: gst/gsttaglist.c:365
 msgid "The season number of the show the media is part of"
 msgstr "Azon műsor évadszáma, amelynek ez a média része"
 
+#: gst/gsttaglist.c:368
 msgid "lyrics"
 msgstr "dalszöveg"
 
+#: gst/gsttaglist.c:368
 msgid "The lyrics of the media, commonly used for songs"
 msgstr "A média dalszövege"
 
+#: gst/gsttaglist.c:371
 msgid "composer sortname"
 msgstr "szerző rendezési neve"
 
+#: gst/gsttaglist.c:372
 msgid "person(s) who composed the recording, for sorting purposes"
 msgstr "a felvételt szerző személyek, rendezési céllal"
 
+#: gst/gsttaglist.c:374
 msgid "grouping"
 msgstr "csoportosítás"
 
-msgid ""
-"Groups related media that spans multiple tracks, like the different pieces "
-"of a concerto. It is a higher level than a track, but lower than an album"
-msgstr ""
-"Több számot átfogó média csoportosítása, például egy koncert különböző "
-"darabjai. Magasabb szintű a számnál, de alacsonyabb az albumnál"
+#: gst/gsttaglist.c:375
+msgid "Groups related media that spans multiple tracks, like the different pieces of a concerto. It is a higher level than a track, but lower than an album"
+msgstr "Több számot átfogó média csoportosítása, például egy koncert különböző darabjai. Magasabb szintű a számnál, de alacsonyabb az albumnál"
 
+#: gst/gsttaglist.c:379
 msgid "user rating"
 msgstr "felhasználói értékelés"
 
-msgid ""
-"Rating attributed by a user. The higher the rank, the more the user likes "
-"this media"
-msgstr ""
-"Felhasználó által társított értékelés. Minél magasabb, annál jobban kedveli "
-"a felhasználó a médiát"
+#: gst/gsttaglist.c:380
+msgid "Rating attributed by a user. The higher the rank, the more the user likes this media"
+msgstr "Felhasználó által társított értékelés. Minél magasabb, annál jobban kedveli a felhasználó a médiát"
 
+#: gst/gsttaglist.c:383
 msgid "device manufacturer"
 msgstr "eszköz gyártója"
 
+#: gst/gsttaglist.c:384
 msgid "Manufacturer of the device used to create this media"
 msgstr "A média előállításához használt eszköz gyártója"
 
+#: gst/gsttaglist.c:386
 msgid "device model"
 msgstr "eszközmodell"
 
+#: gst/gsttaglist.c:387
 msgid "Model of the device used to create this media"
 msgstr "A média létrehozására használt eszközmodell"
 
+#: gst/gsttaglist.c:389
 msgid "application name"
 msgstr "alkalmazás neve"
 
+#: gst/gsttaglist.c:390
 msgid "Application used to create the media"
 msgstr "A média létrehozására használt alkalmazás"
 
+#: gst/gsttaglist.c:392
 msgid "application data"
 msgstr "alkalmazásadatok"
 
+#: gst/gsttaglist.c:393
 msgid "Arbitrary application data to be serialized into the media"
 msgstr "Tetszőleges, a médiába mentendő alkalmazásadatok"
 
+#: gst/gsttaglist.c:395
 msgid "image orientation"
 msgstr "kép tájolása"
 
+#: gst/gsttaglist.c:396
 msgid "How the image should be rotated or flipped before display"
 msgstr "A kép hogyan forgatandó vagy tükrözendő megjelenítés előtt"
 
+#: gst/gsttaglist.c:399
 msgid "publisher"
 msgstr "kiadó"
 
+#: gst/gsttaglist.c:400
 msgid "Name of the label or publisher"
 msgstr "A címke vagy kiadó neve"
 
+#: gst/gsttaglist.c:403
 msgid "interpreted-by"
 msgstr "feldolgozta"
 
+#: gst/gsttaglist.c:404
 msgid "Information about the people behind a remix and similar interpretations"
 msgstr "Információ a remix mögött lévő személyekről és hasonló feldolgozások"
 
+#: gst/gsttaglist.c:408
 msgid "midi-base-note"
 msgstr "midi-alapú-hangjegy"
 
+#: gst/gsttaglist.c:408
 msgid "Midi note number of the audio track."
 msgstr "A hangsáv midi hangjegy száma."
 
+#: gst/gsttaglist.c:411
 msgid "private-data"
 msgstr "privát-adatok"
 
+#: gst/gsttaglist.c:411
 msgid "Private data"
 msgstr "Privát adatok"
 
+#: gst/gsttaglist.c:451
 msgid ", "
 msgstr ", "
 
+#: gst/gsturi.c:648
 #, c-format
 msgid "No URI handler for the %s protocol found"
 msgstr "Nem található URI-kezelő a(z) %s protokollhoz"
 
+#: gst/gsturi.c:823
 #, c-format
 msgid "URI scheme '%s' not supported"
 msgstr "A(z) „%s” URI-séma nem támogatott"
 
+#: gst/gstutils.c:2632 tools/gst-launch.c:325
 #, c-format
 msgid "ERROR: from element %s: %s\n"
 msgstr "HIBA: a következő elemtől: %s: %s\n"
 
+#: gst/gstutils.c:2634 tools/gst-launch.c:327 tools/gst-launch.c:697
 #, c-format
 msgid ""
 "Additional debug info:\n"
@@ -851,349 +1010,422 @@ msgstr ""
 "További hibakeresési információk:\n"
 "%s\n"
 
+#: gst/parse/grammar.y:216
 #, c-format
 msgid "link has no source [sink=%s@%p]"
 msgstr "a hivatkozásnak nincs forrása [nyelő=%s@%p]"
 
+#: gst/parse/grammar.y:221
 #, c-format
 msgid "link has no sink [source=%s@%p]"
 msgstr "a hivatkozásnak nincs nyelője [forrás=%s@%p]"
 
+#: gst/parse/grammar.y:413
 #, c-format
 msgid "no property \"%s\" in element \"%s\""
 msgstr "nincs „%s” tulajdonság a(z) „%s” elemben"
 
+#: gst/parse/grammar.y:454
 #, c-format
 msgid "could not set property \"%s\" in element \"%s\" to \"%s\""
 msgstr "nem állítható be a(z) „%2$s” elem „%1$s” tulajdonsága „%3$s” értékre"
 
+#: gst/parse/grammar.y:507
 msgid "Delayed linking failed."
 msgstr "A késleltetett linkelés meghiúsult."
 
+#: gst/parse/grammar.y:719 gst/parse/grammar.y:724
 #, c-format
 msgid "could not link %s to %s, %s can't handle caps %s"
-msgstr ""
-"%s nem linkelhető a következőre: %s, a(z) %s nem tudja kezelni a következő "
-"képességeket: %s"
+msgstr "%s nem linkelhető a következőre: %s, a(z) %s nem tudja kezelni a következő képességeket: %s"
 
+#: gst/parse/grammar.y:729
 #, c-format
 msgid "could not link %s to %s, neither element can handle caps %s"
-msgstr ""
-"%s nem linkelhető a következőre: %s, egyik elem sem tudja kezelni a "
-"következő képességeket: %s"
+msgstr "%s nem linkelhető a következőre: %s, egyik elem sem tudja kezelni a következő képességeket: %s"
 
+#: gst/parse/grammar.y:733
 #, c-format
 msgid "could not link %s to %s with caps %s"
 msgstr "%s nem linkelhető a következőre: %s ezekkel a képességekkel: %s"
 
+#: gst/parse/grammar.y:739
 #, c-format
 msgid "could not link %s to %s"
 msgstr "%s nem linkelhető a következőre: %s"
 
+#: gst/parse/grammar.y:816
 #, c-format
 msgid "no element \"%s\""
 msgstr "nincs „%s” elem"
 
+#: gst/parse/grammar.y:877
 #, c-format
 msgid "unexpected reference \"%s\" - ignoring"
 msgstr "nem várt „%s” hivatkozás - mellőzés"
 
+#: gst/parse/grammar.y:883
 #, c-format
 msgid "unexpected pad-reference \"%s\" - ignoring"
 msgstr "nem várt „%s” kitöltési hivatkozás - mellőzés"
 
+#: gst/parse/grammar.y:915 gst/parse/grammar.y:924
 #, c-format
 msgid "could not parse caps \"%s\""
 msgstr "a(z) „%s” képesség nem elemezhető"
 
+#: gst/parse/grammar.y:952
 #, c-format
 msgid "no sink element for URI \"%s\""
 msgstr "nincs nyelőelem a következő URI címhez: „%s”"
 
+#: gst/parse/grammar.y:971
 #, c-format
 msgid "no source element for URI \"%s\""
 msgstr "nincs forráselem a következő URI címhez: „%s”"
 
+#: gst/parse/grammar.y:1061
 msgid "syntax error"
 msgstr "szintaktikai hiba"
 
+#: gst/parse/grammar.y:1084
 #, c-format
 msgid "specified empty bin \"%s\", not allowed"
 msgstr "a megadott üres „%s” tároló nem engedélyezett"
 
+#: gst/parse/grammar.y:1094
 #, c-format
 msgid "no bin \"%s\", unpacking elements"
 msgstr "nincs „%s” tároló, elemek kicsomagolása"
 
+#: gst/parse/grammar.y:1125
 msgid "empty pipeline not allowed"
 msgstr "üres adatcsatorna nem engedélyezett"
 
+#: libs/gst/base/gstbasesink.c:1210
 msgid "Pipeline construction is invalid, please add queues."
-msgstr ""
+msgstr "A csővezetés felépítése érvénytelen, adjon hozzá sorokat."
 
+#: libs/gst/base/gstbasesink.c:3004
 msgid "A lot of buffers are being dropped."
 msgstr "Rengetek puffer kerül eldobásra."
 
+#: libs/gst/base/gstbasesink.c:3496
 msgid "Internal data flow problem."
 msgstr "Belső adatfolyam-probléma."
 
+#: libs/gst/base/gstbasesink.c:4222 libs/gst/base/gstbasesrc.c:2708
 msgid "Internal data flow error."
 msgstr "Belső adatfolyam-hiba."
 
+#: libs/gst/base/gstbasesrc.c:2638
 msgid "Internal clock error."
 msgstr "Belső órahiba."
 
+#: libs/gst/base/gstbasesrc.c:2666 plugins/elements/gstdownloadbuffer.c:842
+#: plugins/elements/gstdownloadbuffer.c:1265
 msgid "Failed to map buffer."
 msgstr "Nem sikerült a puffer leképezése."
 
+#: plugins/elements/gstcapsfilter.c:128
 msgid "Filter caps"
 msgstr "Képességek szűrése"
 
-msgid ""
-"Restrict the possible allowed capabilities (NULL means ANY). Setting this "
-"property takes a reference to the supplied GstCaps object."
-msgstr ""
-"Az engedélyezhető képességek korlátozása (a NULL, ANY-t jelent). Ezen "
-"tulajdonság beállítása a biztosított GstCaps objektumra hivatkozik."
+#: plugins/elements/gstcapsfilter.c:129
+msgid "Restrict the possible allowed capabilities (NULL means ANY). Setting this property takes a reference to the supplied GstCaps object."
+msgstr "Az engedélyezhető képességek korlátozása (a NULL, ANY-t jelent). Ezen tulajdonság beállítása a biztosított GstCaps objektumra hivatkozik."
 
+#: plugins/elements/gstcapsfilter.c:136
 msgid "Caps Change Mode"
 msgstr "Képességek változtatása mód"
 
+#: plugins/elements/gstcapsfilter.c:137
 msgid "Filter caps change behaviour"
 msgstr "Képességek változtatása viselkedés szűrése"
 
+#: plugins/elements/gstdownloadbuffer.c:927 plugins/elements/gstqueue2.c:1792
 msgid "No Temp directory specified."
 msgstr "Nincs megadva ideiglenes könyvtár."
 
+#: plugins/elements/gstdownloadbuffer.c:933 plugins/elements/gstqueue2.c:1798
 #, c-format
 msgid "Could not create temp file \"%s\"."
 msgstr "Nem hozható létre a következő ideiglenes fájl: „%s”."
 
+#: plugins/elements/gstdownloadbuffer.c:941 plugins/elements/gstfilesrc.c:537
+#: plugins/elements/gstqueue2.c:1806
 #, c-format
 msgid "Could not open file \"%s\" for reading."
 msgstr "Nem nyitható meg a(z) „%s” fájl olvasásra."
 
+#: plugins/elements/gstdownloadbuffer.c:1274 plugins/elements/gstqueue2.c:2225
 msgid "Error while writing to download file."
 msgstr "Hiba a letöltési fájl írása közben."
 
+#: plugins/elements/gstfilesink.c:404
 msgid "No file name specified for writing."
 msgstr "Nincs fájlnév megadva az íráshoz."
 
+#: plugins/elements/gstfilesink.c:410
 #, c-format
 msgid "Could not open file \"%s\" for writing."
 msgstr "Nem lehet írásra megnyitni a(z) „%s” fájlt."
 
+#: plugins/elements/gstfilesink.c:422 plugins/elements/gstfilesink.c:426
 #, c-format
 msgid "Error closing file \"%s\"."
 msgstr "Hiba a(z) „%s” fájl bezárása közben."
 
+#: plugins/elements/gstfilesink.c:605
 #, c-format
 msgid "Error while seeking in file \"%s\"."
 msgstr "Hiba a következő fájlban való tekerés közben: „%s”."
 
+#: plugins/elements/gstfilesink.c:613 plugins/elements/gstfilesink.c:620
+#: plugins/elements/gstfilesink.c:793 plugins/elements/gstfilesink.c:848
 #, c-format
 msgid "Error while writing to file \"%s\"."
 msgstr "Hiba a(z) „%s” fájl írása közben."
 
+#: plugins/elements/gstfilesrc.c:525
 msgid "No file name specified for reading."
 msgstr "Nincs megadva fájlnév az olvasáshoz."
 
+#: plugins/elements/gstfilesrc.c:546
 #, c-format
 msgid "Could not get info on \"%s\"."
 msgstr "Nem kérhetők le információk a következőkről: „%s”."
 
+#: plugins/elements/gstfilesrc.c:552
 #, c-format
 msgid "\"%s\" is a directory."
 msgstr "„%s” egy könyvtár."
 
+#: plugins/elements/gstfilesrc.c:558
 #, c-format
 msgid "File \"%s\" is a socket."
 msgstr "A(z) „%s” fájl egy foglalat."
 
+#: plugins/elements/gstidentity.c:722
 msgid "Failed after iterations as requested."
 msgstr "Ismétlések után kérésére meghiúsult."
 
+#: plugins/elements/gstidentity.c:903
 msgid "eos-after and error-after can't both be defined."
-msgstr ""
+msgstr "Az eos-after és error-after nem lehet egyszerre meghatározva."
 
+#: plugins/elements/gsttypefindelement.c:251
 msgid "caps"
 msgstr "képességek"
 
+#: plugins/elements/gsttypefindelement.c:252
 msgid "detected capabilities in stream"
 msgstr "az adatfolyamban észlelt képességek"
 
+#: plugins/elements/gsttypefindelement.c:255
 msgid "minimum"
 msgstr "minimum"
 
+#: plugins/elements/gsttypefindelement.c:260
 msgid "force caps"
 msgstr "nagybetűk kényszerítése"
 
+#: plugins/elements/gsttypefindelement.c:261
 msgid "force caps without doing a typefind"
 msgstr "nagybetűk kényszerítése betűkeresés nélkül"
 
+#: plugins/elements/gsttypefindelement.c:987
+#: plugins/elements/gsttypefindelement.c:1009
 msgid "Stream doesn't contain enough data."
 msgstr "Az adatfolyam nem tartalmaz elég adatot."
 
+#: plugins/elements/gsttypefindelement.c:1129
 msgid "Stream contains no data."
 msgstr "Az adatfolyam nem tartalmaz adatokat."
 
-#, fuzzy, c-format
+#: tools/gst-inspect.c:290
+#, c-format
 msgid "%sImplemented Interfaces%s:\n"
-msgstr "Megvalósított felületek:\n"
+msgstr "%sMegvalósított felületek%s:\n"
 
+#: tools/gst-inspect.c:400
 msgid "readable"
 msgstr "olvasható"
 
+#: tools/gst-inspect.c:405
 msgid "writable"
 msgstr "írható"
 
+#: tools/gst-inspect.c:410
 msgid "deprecated"
 msgstr "elavult"
 
+#: tools/gst-inspect.c:414
 msgid "controllable"
 msgstr "vezérelhető"
 
+#: tools/gst-inspect.c:420
 msgid "changeable in NULL, READY, PAUSED or PLAYING state"
 msgstr "módosítható a NULL, KÉSZ, SZÜNETEL vagy LEJÁTSZÁS állapotban"
 
+#: tools/gst-inspect.c:423
 msgid "changeable only in NULL, READY or PAUSED state"
 msgstr "csak a NULL, KÉSZ vagy SZÜNETEL állapotban módosítható"
 
+#: tools/gst-inspect.c:426
 msgid "changeable only in NULL or READY state"
 msgstr "csak a NULL vagy KÉSZ állapotban módosítható"
 
+#: tools/gst-inspect.c:1131
 msgid "Blacklisted files:"
 msgstr "Feketelistás fájlok:"
 
-#, fuzzy, c-format
+#: tools/gst-inspect.c:1143 tools/gst-inspect.c:1276
+#, c-format
 msgid "%sTotal count%s: %s"
-msgstr "Teljes szám: "
+msgstr "%sTeljes szám%s: %s"
 
+#: tools/gst-inspect.c:1145
 #, c-format
 msgid "%d blacklisted file"
 msgid_plural "%d blacklisted files"
 msgstr[0] "%d feketelistás fájl"
 msgstr[1] "%d feketelistás fájl"
 
+#: tools/gst-inspect.c:1278
 #, c-format
 msgid "%d plugin"
 msgid_plural "%d plugins"
 msgstr[0] "%d bővítmény"
 msgstr[1] "%d bővítmény"
 
+#: tools/gst-inspect.c:1281
 #, c-format
 msgid "%d blacklist entry"
 msgid_plural "%d blacklist entries"
 msgstr[0] "%d feketelista-bejegyzés"
 msgstr[1] "%d feketelista-bejegyzés"
 
+#: tools/gst-inspect.c:1286
 #, c-format
 msgid "%d feature"
 msgid_plural "%d features"
 msgstr[0] "%d szolgáltatás"
 msgstr[1] "%d szolgáltatás"
 
+#: tools/gst-inspect.c:1953
 msgid "Print all elements"
 msgstr "Az összes elem kiírása"
 
+#: tools/gst-inspect.c:1955
 msgid "Print list of blacklisted files"
 msgstr "Feketelistás fájlok listájának kiírása"
 
+#: tools/gst-inspect.c:1957
 msgid ""
-"Print a machine-parsable list of features the specified plugin or all "
-"plugins provide.\n"
-"                                       Useful in connection with external "
-"automatic plugin installation mechanisms"
+"Print a machine-parsable list of features the specified plugin or all plugins provide.\n"
+"                                       Useful in connection with external automatic plugin installation mechanisms"
 msgstr ""
-"A megadott bővítmény által biztosított szolgáltatások gépileg feldolgozható "
-"listájának kiírása.\n"
+"A megadott bővítmény által biztosított szolgáltatások gépileg feldolgozható listájának kiírása.\n"
 "Külső bővítménytelepítési módszerekkel együtt hasznos."
 
+#: tools/gst-inspect.c:1962
 msgid "List the plugin contents"
 msgstr "A bővítmény tartalmának felsorolása"
 
-msgid ""
-"A slashes ('/') separated list of types of elements (also known as klass) to "
-"list. (unordered)"
-msgstr ""
-"A felsorolandó elemek típusainak perjellel („/”) elválasztott listája (klass "
-"néven is ismert). (nem sorrendezett)"
+#: tools/gst-inspect.c:1964
+msgid "A slashes ('/') separated list of types of elements (also known as klass) to list. (unordered)"
+msgstr "A felsorolandó elemek típusainak perjellel („/”) elválasztott listája (klass néven is ismert). (nem sorrendezett)"
 
+#: tools/gst-inspect.c:1967
 msgid "Check if the specified element or plugin exists"
 msgstr "Ellenőrizze, hogy a megadott elem vagy bővítmény létezik-e"
 
-msgid ""
-"When checking if an element or plugin exists, also check that its version is "
-"at least the version specified"
-msgstr ""
-"Elem vagy bővítmény létezésének ellenőrzésekor azt is ellenőrizze, hogy a "
-"verziója legalább a megadott-e"
+#: tools/gst-inspect.c:1970
+msgid "When checking if an element or plugin exists, also check that its version is at least the version specified"
+msgstr "Elem vagy bővítmény létezésének ellenőrzésekor azt is ellenőrizze, hogy a verziója legalább a megadott-e"
 
+#: tools/gst-inspect.c:1974
 msgid "Print supported URI schemes, with the elements that implement them"
 msgstr "Támogatott URI sémák kiírása, az azokat megvalósító elemmel"
 
-msgid ""
-"Disable colors in output. You can also achieve the same by "
-"setting'GST_INSPECT_NO_COLORS' environment variable to any value."
-msgstr ""
+#: tools/gst-inspect.c:1979
+msgid "Disable colors in output. You can also achieve the same by setting'GST_INSPECT_NO_COLORS' environment variable to any value."
+msgstr "Színek letiltása a kimeneten. Ugyanezt érheti el a „GST_INSPECT_NO_COLORS” környezeti változó bármilyen értékre történő beállításával."
 
+#: tools/gst-inspect.c:2135
 #, c-format
 msgid "Could not load plugin file: %s\n"
 msgstr "Nem tölthető be a bővítményfájl: %s\n"
 
+#: tools/gst-inspect.c:2141
 #, c-format
 msgid "No such element or plugin '%s'\n"
 msgstr "Nincs ilyen elem vagy bővítmény: „%s”\n"
 
+#: tools/gst-launch.c:252
 msgid "Index statistics"
 msgstr "Indexstatisztika"
 
+#: tools/gst-launch.c:578
 #, c-format
 msgid "Got message #%u from element \"%s\" (%s): "
 msgstr "%u számú üzenet érkezett a következő elemtől: „%s” (%s)."
 
+#: tools/gst-launch.c:582
 #, c-format
 msgid "Got message #%u from pad \"%s:%s\" (%s): "
 msgstr "%u számú üzenet érkezett a(z) „%s:%s” (%s) kitöltőtől: "
 
+#: tools/gst-launch.c:586
 #, c-format
 msgid "Got message #%u from object \"%s\" (%s): "
 msgstr "%u számú üzenet érkezett a(z) „%s” (%s) objektumtól: "
 
+#: tools/gst-launch.c:590
 #, c-format
 msgid "Got message #%u (%s): "
 msgstr "%u számú üzenet (%s) érkezett:"
 
+#: tools/gst-launch.c:622
 #, c-format
 msgid "Got EOS from element \"%s\".\n"
 msgstr "EOS érkezett a következő elemtől: „%s”.\n"
 
+#: tools/gst-launch.c:631
 #, c-format
 msgid "FOUND TAG      : found by element \"%s\".\n"
 msgstr "CÍMKE MEGTALÁLVA: a(z) „%s” elem által.\n"
 
+#: tools/gst-launch.c:634
 #, c-format
 msgid "FOUND TAG      : found by pad \"%s:%s\".\n"
 msgstr "CÍMKE MEGTALÁLVA: a(z) „%s:%s” kitöltő által.\n"
 
+#: tools/gst-launch.c:637
 #, c-format
 msgid "FOUND TAG      : found by object \"%s\".\n"
 msgstr "CÍMKE MEGTALÁLVA: a(z) „%s” objektum által.\n"
 
+#: tools/gst-launch.c:640
 msgid "FOUND TAG\n"
 msgstr "CÍMKE MEGTALÁLVA\n"
 
+#: tools/gst-launch.c:655
 #, c-format
 msgid "FOUND TOC      : found by element \"%s\".\n"
 msgstr "TARTALOMJEGYZÉK MEGTALÁLVA: a(z) „%s” elem által.\n"
 
+#: tools/gst-launch.c:658
 #, c-format
 msgid "FOUND TOC      : found by object \"%s\".\n"
 msgstr "TARTALOMJEGYZÉK MEGTALÁLVA: a(z) „%s” objektum által.\n"
 
+#: tools/gst-launch.c:661
 msgid "FOUND TOC\n"
 msgstr "TARTALOMJEGYZÉK MEGTALÁLVA\n"
 
+#: tools/gst-launch.c:678
 #, c-format
 msgid ""
 "INFO:\n"
@@ -1202,157 +1434,185 @@ msgstr ""
 "INFORMÁCIÓ:\n"
 "%s\n"
 
+#: tools/gst-launch.c:695
 #, c-format
 msgid "WARNING: from element %s: %s\n"
 msgstr "FIGYELMEZTETÉS: a következő elemtől: %s: %s\n"
 
+#: tools/gst-launch.c:730
 msgid "Prerolled, waiting for buffering to finish...\n"
 msgstr "Előzetesen betöltve, várakozás a pufferelés befejeződésére…\n"
 
+#: tools/gst-launch.c:734
 msgid "Prerolled, waiting for progress to finish...\n"
 msgstr "Előzetesen betöltve, várakozás a folyamat befejeződésére…\n"
 
+#: tools/gst-launch.c:746
 msgid "buffering..."
 msgstr "pufferelés…"
 
+#: tools/gst-launch.c:757
 msgid "Done buffering, setting pipeline to PLAYING ...\n"
 msgstr "A pufferelés kész, adatcsatorna beállítása LEJÁTSZÁSRA…\n"
 
+#: tools/gst-launch.c:765
 msgid "Buffering, setting pipeline to PAUSED ...\n"
 msgstr "Pufferelés, az adatcsatorna beállítása SZÜNETELTETETT állapotúra…\n"
 
+#: tools/gst-launch.c:774
 msgid "Redistribute latency...\n"
 msgstr "Késleltetés újraelosztása…\n"
 
+#: tools/gst-launch.c:785
 #, c-format
 msgid "Setting state to %s as requested by %s...\n"
 msgstr "Állapot beállítása erre: %s, %s kérésének megfelelően…\n"
 
+#: tools/gst-launch.c:801
 msgid "Interrupt: Stopping pipeline ...\n"
 msgstr "Megszakítás: Adatcsatorna leállítása…\n"
 
+#: tools/gst-launch.c:830
 #, c-format
 msgid "Progress: (%s) %s\n"
 msgstr "Folyamat: (%s) %s\n"
 
+#: tools/gst-launch.c:843
 #, c-format
 msgid "Missing element: %s\n"
 msgstr "Hiányzó elem: „%s”\n"
 
+#: tools/gst-launch.c:857
 #, c-format
 msgid "Got context from element '%s': %s=%s\n"
 msgstr "Környezet lekérése a(z) „%s” elemtől: %s=%s\n"
 
+#: tools/gst-launch.c:991
 msgid "Output tags (also known as metadata)"
 msgstr "Kimeneti címkék (metaadatok)"
 
+#: tools/gst-launch.c:993
 msgid "Output TOC (chapters and editions)"
 msgstr "TARTALOMJEGYZÉK (fejezetek és változatok) kiírása"
 
+#: tools/gst-launch.c:995
 msgid "Output status information and property notifications"
 msgstr "Kimeneti állapotinformációk és tulajdonság-értesítések"
 
+#: tools/gst-launch.c:997
 msgid "Do not print any progress information"
 msgstr "Ne írjon ki előrehaladás-információkat"
 
+#: tools/gst-launch.c:999
 msgid "Output messages"
 msgstr "Kimeneti üzenetek"
 
-msgid ""
-"Do not output status information for the specified property if verbose "
-"output is enabled (can be used multiple times)"
-msgstr ""
-"Ne írja ki az állapotinformációkat a megadott tulajdonságnál, ha a részletes "
-"kimenet engedélyezve van (többször is használható)"
+#: tools/gst-launch.c:1001
+msgid "Do not output status information for the specified property if verbose output is enabled (can be used multiple times)"
+msgstr "Ne írja ki az állapotinformációkat a megadott tulajdonságnál, ha a részletes kimenet engedélyezve van (többször is használható)"
 
+#: tools/gst-launch.c:1003
 msgid "PROPERTY-NAME"
 msgstr "TULAJDONSÁGNÉV"
 
+#: tools/gst-launch.c:1005
 msgid "Do not install a fault handler"
 msgstr "Ne telepítsen hibakezelőt"
 
+#: tools/gst-launch.c:1007
 msgid "Force EOS on sources before shutting the pipeline down"
 msgstr "EOS kényszerítése a forrásokra az adatcsatorna leállítása előtt"
 
+#: tools/gst-launch.c:1010
 msgid "Gather and print index statistics"
 msgstr "Indexstatisztikák gyűjtése és kiírása"
 
+#: tools/gst-launch.c:1077
 #, c-format
 msgid "ERROR: pipeline could not be constructed: %s.\n"
 msgstr "HIBA: az adatcsatorna nem építhető fel: %s.\n"
 
+#: tools/gst-launch.c:1081
 msgid "ERROR: pipeline could not be constructed.\n"
 msgstr "HIBA: az adatcsatorna nem építhető fel.\n"
 
+#: tools/gst-launch.c:1085
 #, c-format
 msgid "WARNING: erroneous pipeline: %s\n"
 msgstr "FIGYELMEZTETÉS: hibás adatcsatorna: %s\n"
 
+#: tools/gst-launch.c:1101
 msgid "ERROR: the 'pipeline' element wasn't found.\n"
 msgstr "HIBA: az „adatcsatorna” elem nem található.\n"
 
+#: tools/gst-launch.c:1132 tools/gst-launch.c:1233
 msgid "Setting pipeline to PAUSED ...\n"
 msgstr "Adatcsatorna beállítása SZÜNETELTETETT állapotúra…\n"
 
+#: tools/gst-launch.c:1137
 msgid "ERROR: Pipeline doesn't want to pause.\n"
 msgstr "HIBA: az adatcsatorna nem akar megállni.\n"
 
+#: tools/gst-launch.c:1142
 msgid "Pipeline is live and does not need PREROLL ...\n"
 msgstr "Az adatcsatorna él és nem szükséges ELINDÍTANI…\n"
 
+#: tools/gst-launch.c:1146
 msgid "Pipeline is PREROLLING ...\n"
 msgstr "Az adatcsatorna INDÍTÁSA…\n"
 
+#: tools/gst-launch.c:1149 tools/gst-launch.c:1163
 msgid "ERROR: pipeline doesn't want to preroll.\n"
 msgstr "HIBA: az adatcsatorna nem akar elindulni.\n"
 
+#: tools/gst-launch.c:1156
 msgid "Pipeline is PREROLLED ...\n"
 msgstr "Az adatcsatorna ELINDÍTVA…\n"
 
+#: tools/gst-launch.c:1169
 msgid "Setting pipeline to PLAYING ...\n"
 msgstr "Adatcsatorna beállítása LEJÁTSZÁSRA…\n"
 
+#: tools/gst-launch.c:1176
 msgid "ERROR: pipeline doesn't want to play.\n"
 msgstr "HIBA: az adatcsatorna nem akar lejátszani.\n"
 
+#: tools/gst-launch.c:1195
 msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n"
 msgstr "Leállításkor EOS engedélyezve – EOS kényszerítése az adatcsatornára\n"
 
+#: tools/gst-launch.c:1199
 msgid "EOS on shutdown enabled -- waiting for EOS after Error\n"
 msgstr "Leállításkor EOS engedélyezve – várakozás EOS-ra hiba után\n"
 
+#: tools/gst-launch.c:1202
 msgid "Waiting for EOS...\n"
 msgstr "Várakozás EOS-ra…\n"
 
+#: tools/gst-launch.c:1209
 msgid "EOS received - stopping pipeline...\n"
 msgstr "EOS érkezett – adatcsatorna leállítása…\n"
 
+#: tools/gst-launch.c:1213
 msgid "Interrupt while waiting for EOS - stopping pipeline...\n"
 msgstr "Megszakítás az EOS-ra várakozás közben – adatcsatorna leállítása…\n"
 
+#: tools/gst-launch.c:1218
 msgid "An error happened while waiting for EOS\n"
 msgstr "Hiba történt az EOS-ra várakozáskor\n"
 
+#: tools/gst-launch.c:1229
 msgid "Execution ended after %"
 msgstr "A végrehajtás befejeződött %"
 
+#: tools/gst-launch.c:1245
 msgid "Setting pipeline to READY ...\n"
 msgstr "Az adatcsatorna beállítása KÉSZ állapotra…\n"
 
+#: tools/gst-launch.c:1257
 msgid "Setting pipeline to NULL ...\n"
 msgstr "Az adatcsatorna beállítása NULL értékre…\n"
 
+#: tools/gst-launch.c:1261
 msgid "Freeing pipeline ...\n"
 msgstr "Adatcsatorna felszabadítása…\n"
-
-#, fuzzy
-#~ msgid "Error creating pipe: %s\n"
-#~ msgstr "Hiba a(z) „%s” fájl bezárása közben."
-
-#, fuzzy
-#~ msgid "Error forking: %s\n"
-#~ msgstr "Hiba a(z) „%s” fájl bezárása közben."
-
-#, fuzzy
-#~ msgid "Error writing to console: %s\n"
-#~ msgstr "Hiba a(z) „%s” fájl írása közben."
index 5480522..ff4fc6f 100644 (file)
@@ -2,14 +2,14 @@
 # This file is put in the public domain.
 #
 # Kjartan Maraas <kmaraas@gnome.org>, 2004-2010.
-# Johnny A. Solbu <johnny@solbu.net>, 2015-2017
+# Johnny A. Solbu <johnny@solbu.net>, 2015-2019
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: gstreamer 1.12.0\n"
+"Project-Id-Version: gstreamer 1.16.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:37+0000\n"
-"PO-Revision-Date: 2017-05-23 22:59+0200\n"
+"POT-Creation-Date: 2019-04-19 00:15+0100\n"
+"PO-Revision-Date: 2019-09-03 09:32+0200\n"
 "Last-Translator: Johnny A. Solbu <johnny@solbu.net>\n"
 "Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n"
 "Language: nb_NO\n"
@@ -20,828 +20,988 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Poedit 1.8.7.1\n"
 
+#: gst/gst.c:250
 msgid "Print the GStreamer version"
 msgstr "Skriv ut versjonsnummer for GStreamer"
 
+#: gst/gst.c:252
 msgid "Make all warnings fatal"
 msgstr "La alle advarsler være fatale"
 
+#: gst/gst.c:256
 msgid "Print available debug categories and exit"
 msgstr "Skriv ut tilgjengelige feilsøkingskategorier og avslutt"
 
-msgid ""
-"Default debug level from 1 (only error) to 9 (anything) or 0 for no output"
-msgstr ""
-"Standard feilsøkingsnivå fra 1 (kun feil) til 9 (noe) eller 0 for ingen "
-"utdata"
+#: gst/gst.c:260
+msgid "Default debug level from 1 (only error) to 9 (anything) or 0 for no output"
+msgstr "Standard feilsøkingsnivå fra 1 (kun feil) til 9 (noe) eller 0 for ingen utdata"
 
+#: gst/gst.c:262
 msgid "LEVEL"
 msgstr "NIVÅ"
 
-msgid ""
-"Comma-separated list of category_name:level pairs to set specific levels for "
-"the individual categories. Example: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
-msgstr ""
-"Kommaseparert liste over kategori_navn:nivåpar for å sette spesifikke nivåer "
-"for de enkelte kategoriene. Eksempel: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
+#: gst/gst.c:264
+msgid "Comma-separated list of category_name:level pairs to set specific levels for the individual categories. Example: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
+msgstr "Kommaseparert liste over kategori_navn:nivåpar for å sette spesifikke nivåer for de enkelte kategoriene. Eksempel: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
 
+#: gst/gst.c:267
 msgid "LIST"
 msgstr "LISTE"
 
+#: gst/gst.c:269
 msgid "Disable colored debugging output"
 msgstr "Deaktiver farget feilsøkingsinformasjon"
 
-msgid ""
-"Changes coloring mode of the debug log. Possible modes: off, on, disable, "
-"auto, unix"
-msgstr ""
-"Endrer fargemodus for feilsøking logg. Mulige moduser: av, på, deaktiver, "
-"auto, unix"
+#: gst/gst.c:273
+msgid "Changes coloring mode of the debug log. Possible modes: off, on, disable, auto, unix"
+msgstr "Endrer fargemodus for feilsøking logg. Mulige moduser: av, på, deaktiver, auto, unix"
 
+#: gst/gst.c:277
 msgid "Disable debugging"
 msgstr "Slå av feilsøking"
 
+#: gst/gst.c:281
 msgid "Enable verbose plugin loading diagnostics"
 msgstr "Aktiver utførlig diagnostikk ved lasting av programtillegg"
 
+#: gst/gst.c:285
 msgid "Colon-separated paths containing plugins"
 msgstr "Kolon-separerte stier som inneholder programtillegg"
 
+#: gst/gst.c:285
 msgid "PATHS"
 msgstr "STIER"
 
-msgid ""
-"Comma-separated list of plugins to preload in addition to the list stored in "
-"environment variable GST_PLUGIN_PATH"
-msgstr ""
-"Kommaseparert liste av programtillegg til å forhåndslaste i tillegg til "
-"listen som er lagret i miljøvariabelen GST_PLUGIN_PATH"
+#: gst/gst.c:288
+msgid "Comma-separated list of plugins to preload in addition to the list stored in environment variable GST_PLUGIN_PATH"
+msgstr "Kommaseparert liste av programtillegg til å forhåndslaste i tillegg til listen som er lagret i miljøvariabelen GST_PLUGIN_PATH"
 
+#: gst/gst.c:290
 msgid "PLUGINS"
 msgstr "TILLEGG"
 
+#: gst/gst.c:293
 msgid "Disable trapping of segmentation faults during plugin loading"
 msgstr "Deaktiver fangst av segmenteringsfeil under programtillegglasting"
 
+#: gst/gst.c:298
 msgid "Disable updating the registry"
 msgstr "Deaktiver oppdatering av registeret"
 
+#: gst/gst.c:303
 msgid "Disable spawning a helper process while scanning the registry"
 msgstr "Deaktiver forgrening av hjelperprosess under scanning av registeret"
 
+#: gst/gst.c:308
 msgid "GStreamer Options"
 msgstr "GStreamer-flagg"
 
+#: gst/gst.c:309
 msgid "Show GStreamer Options"
 msgstr "Vis flagg for GStreamer"
 
+#: gst/gst.c:1012
 msgid "Unknown option"
 msgstr "Ukjent flagg"
 
+#: gst/gsterror.c:130
 msgid "GStreamer encountered a general core library error."
 msgstr "GStreamer møtte en generell kjernebiblioteksfeil."
 
-msgid ""
-"GStreamer developers were too lazy to assign an error code to this error."
-msgstr ""
-"GStreamerutviklerne var for lat til å tildele denne feilen en feilkode ."
+#: gst/gsterror.c:132 gst/gsterror.c:174 gst/gsterror.c:198 gst/gsterror.c:240
+msgid "GStreamer developers were too lazy to assign an error code to this error."
+msgstr "GStreamerutviklerne var for lat til å tildele denne feilen en feilkode ."
 
+#: gst/gsterror.c:135
 msgid "Internal GStreamer error: code not implemented."
 msgstr "Intern GStreamerfeil: kode ikke implementert."
 
-msgid ""
-"GStreamer error: state change failed and some element failed to post a "
-"proper error message with the reason for the failure."
-msgstr ""
-"GStreamerfeil: statusendring mislyktes og noen element mislyktes i å legge "
-"inn en skikkelig feilmelding med årsaken til svikten."
+#: gst/gsterror.c:137
+msgid "GStreamer error: state change failed and some element failed to post a proper error message with the reason for the failure."
+msgstr "GStreamerfeil: statusendring mislyktes og noen element mislyktes i å legge inn en skikkelig feilmelding med årsaken til svikten."
 
+#: gst/gsterror.c:140
 msgid "Internal GStreamer error: pad problem."
 msgstr "Intern GStreamerfeil: utfyllingsproblem."
 
+#: gst/gsterror.c:142
 msgid "Internal GStreamer error: thread problem."
 msgstr "Intern GStreamerfeil: trådproblem."
 
+#: gst/gsterror.c:144
 msgid "GStreamer error: negotiation problem."
 msgstr "Intern GStreamerfeil: forhandlingsproblem."
 
+#: gst/gsterror.c:146
 msgid "Internal GStreamer error: event problem."
 msgstr "Intern GStreamerfeil: hendelsesproblem."
 
+#: gst/gsterror.c:148
 msgid "Internal GStreamer error: seek problem."
 msgstr "Intern GStreamerfeil: søkeproblem."
 
+#: gst/gsterror.c:150
 msgid "Internal GStreamer error: caps problem."
 msgstr "Intern GStreamerfeil: caps-problem."
 
+#: gst/gsterror.c:152
 msgid "Internal GStreamer error: tag problem."
 msgstr "Intern GStreamerfeil: taggproblem."
 
+#: gst/gsterror.c:154
 msgid "Your GStreamer installation is missing a plug-in."
 msgstr "GStreamerinstallasjonen din mangler et programtillegg."
 
+#: gst/gsterror.c:156
 msgid "GStreamer error: clock problem."
 msgstr "Intern GStreamerfeil: klokkeproblem."
 
-msgid ""
-"This application is trying to use GStreamer functionality that has been "
-"disabled."
-msgstr ""
-"Dette programmet prøver å bruke GStreamerfunksjonalitet som har blitt "
-"deaktivert."
+#: gst/gsterror.c:158
+msgid "This application is trying to use GStreamer functionality that has been disabled."
+msgstr "Dette programmet prøver å bruke GStreamerfunksjonalitet som har blitt deaktivert."
 
+#: gst/gsterror.c:172
 msgid "GStreamer encountered a general supporting library error."
 msgstr "GStreamer har møtt et generelt støttebiblioteksfeil."
 
+#: gst/gsterror.c:177
 msgid "Could not initialize supporting library."
 msgstr "Kunne ikke initiere støttebibliotek."
 
+#: gst/gsterror.c:179
 msgid "Could not close supporting library."
 msgstr "Kunne ikke lukke støttebibliotek."
 
+#: gst/gsterror.c:181
 msgid "Could not configure supporting library."
 msgstr "Kunne ikke konfigurere støttebibliotek."
 
+#: gst/gsterror.c:183
 msgid "Encoding error."
 msgstr "Feil i koding."
 
+#: gst/gsterror.c:196
 msgid "GStreamer encountered a general resource error."
 msgstr "GStreamer har møtt en generelt resursfeil."
 
+#: gst/gsterror.c:201
 msgid "Resource not found."
 msgstr "Ressursen ble ikke funnet."
 
+#: gst/gsterror.c:203
 msgid "Resource busy or not available."
 msgstr "Ressursen er opptatt eller ikke tilgjengelig."
 
+#: gst/gsterror.c:205
 msgid "Could not open resource for reading."
 msgstr "Kunne ikke åpne ressurs for lesing."
 
+#: gst/gsterror.c:207
 msgid "Could not open resource for writing."
 msgstr "Kunne ikke åpne ressurs for skriving."
 
+#: gst/gsterror.c:209
 msgid "Could not open resource for reading and writing."
 msgstr "Kunne ikke åpne ressurs for lesing og skriving."
 
+#: gst/gsterror.c:211
 msgid "Could not close resource."
 msgstr "Kunne ikke luke ressurs."
 
+#: gst/gsterror.c:213
 msgid "Could not read from resource."
 msgstr "Kunne ikke lese fra ressurs."
 
+#: gst/gsterror.c:215
 msgid "Could not write to resource."
 msgstr "Kunne ikke skrive til ressurs."
 
+#: gst/gsterror.c:217
 msgid "Could not perform seek on resource."
 msgstr "Kunne ikke søke i ressurs."
 
+#: gst/gsterror.c:219
 msgid "Could not synchronize on resource."
 msgstr "Kunne ikke synkronisere på ressurs."
 
+#: gst/gsterror.c:221
 msgid "Could not get/set settings from/on resource."
 msgstr "Kunne ikke hente/sette innstillinger fra/på ressurs."
 
+#: gst/gsterror.c:223
 msgid "No space left on the resource."
 msgstr "Ingen plass igjen på ressursen."
 
+#: gst/gsterror.c:225
 msgid "Not authorized to access resource."
 msgstr "Ikke autorisert til å få tilgang til ressursen."
 
+#: gst/gsterror.c:238
 msgid "GStreamer encountered a general stream error."
 msgstr "GStreamer har møtt en generelt strømmefeil."
 
+#: gst/gsterror.c:243
 msgid "Element doesn't implement handling of this stream. Please file a bug."
-msgstr ""
-"Element implementerer ikke håndtering av denne strømmen. Send inn en "
-"feilrapport."
+msgstr "Element implementerer ikke håndtering av denne strømmen. Send inn en feilrapport."
 
+#: gst/gsterror.c:246
 msgid "Could not determine type of stream."
 msgstr "Kunne ikke bestemme type strøm."
 
+#: gst/gsterror.c:248
 msgid "The stream is of a different type than handled by this element."
 msgstr "Strømmen er av en annen type enn det som håndteres av dette elementet."
 
+#: gst/gsterror.c:251
 msgid "There is no codec present that can handle the stream's type."
 msgstr "Det er ingen kodek til stede som kan håndtere strømmens type."
 
+#: gst/gsterror.c:253
 msgid "Could not decode stream."
 msgstr "Kunne ikke dekode strøm."
 
+#: gst/gsterror.c:255
 msgid "Could not encode stream."
 msgstr "Kunne ikke kode strøm."
 
+#: gst/gsterror.c:257
 msgid "Could not demultiplex stream."
 msgstr "Kunne ikke bryte opp strøm."
 
+#: gst/gsterror.c:259
 msgid "Could not multiplex stream."
 msgstr "Kunne ikke sette sammen strøm."
 
+#: gst/gsterror.c:261
 msgid "The stream is in the wrong format."
 msgstr "Strømmen er i feil format."
 
+#: gst/gsterror.c:263
 msgid "The stream is encrypted and decryption is not supported."
 msgstr "Strømmen er kryptert og dekryptering er ikke støttet."
 
-msgid ""
-"The stream is encrypted and can't be decrypted because no suitable key has "
-"been supplied."
-msgstr ""
-"Strømmen er kryptert og kan ikke dekrypteres fordi ingen passende nøkkel er "
-"oppgitt."
+#: gst/gsterror.c:265
+msgid "The stream is encrypted and can't be decrypted because no suitable key has been supplied."
+msgstr "Strømmen er kryptert og kan ikke dekrypteres fordi ingen passende nøkkel er oppgitt."
 
+#: gst/gsterror.c:305
 #, c-format
 msgid "No error message for domain %s."
 msgstr "Ingen feilmelding for domene %s."
 
+#: gst/gsterror.c:313
 #, c-format
 msgid "No standard error message for domain %s and code %d."
 msgstr "Ingen standard feilmelding for domene %s og kode %d."
 
+#: gst/gstpipeline.c:562
 msgid "Selected clock cannot be used in pipeline."
 msgstr "Valgt klokke kan ikke brukes i røret."
 
+#: gst/gstregistry.c:1694
 #, c-format
 msgid "Error writing registry cache to %s: %s"
 msgstr "Kunne ikke skrive registerbuffer til %s: %s"
 
+#: gst/gsttaglist.c:108
 msgid "title"
 msgstr "tittel"
 
+#: gst/gsttaglist.c:108
 msgid "commonly used title"
 msgstr "ofte brukt tittel"
 
+#: gst/gsttaglist.c:111
 msgid "title sortname"
 msgstr "tittelsorteringsstreng"
 
+#: gst/gsttaglist.c:111
 msgid "commonly used title for sorting purposes"
 msgstr "ofte brukt tittel for sorteringsformål"
 
+#: gst/gsttaglist.c:114
 msgid "artist"
 msgstr "artist"
 
+#: gst/gsttaglist.c:115
 msgid "person(s) responsible for the recording"
 msgstr "person(er) som er ansvarlige for opptaket"
 
+#: gst/gsttaglist.c:119
 msgid "artist sortname"
 msgstr "sorteringsnavn for artist"
 
+#: gst/gsttaglist.c:120
 msgid "person(s) responsible for the recording for sorting purposes"
 msgstr "person(er) som er ansvarlige for opptaket - til sortering"
 
+#: gst/gsttaglist.c:123
 msgid "album"
 msgstr "album"
 
+#: gst/gsttaglist.c:124
 msgid "album containing this data"
 msgstr "album som inneholder disse dataene"
 
+#: gst/gsttaglist.c:127
 msgid "album sortname"
 msgstr "albumsorteringsstreng"
 
+#: gst/gsttaglist.c:128
 msgid "album containing this data for sorting purposes"
 msgstr "album som inneholder disse dataene for sorteringsformål"
 
+#: gst/gsttaglist.c:131
 msgid "album artist"
 msgstr "albumartist"
 
+#: gst/gsttaglist.c:132
 msgid "The artist of the entire album, as it should be displayed"
 msgstr "Artisten av hele albumet, som det burde bli vist"
 
+#: gst/gsttaglist.c:136
 msgid "album artist sortname"
 msgstr "album-, artistsorteringsstreng"
 
+#: gst/gsttaglist.c:137
 msgid "The artist of the entire album, as it should be sorted"
 msgstr "Artisten av hele albumet, som det burde bli sortert"
 
+#: gst/gsttaglist.c:139
 msgid "date"
 msgstr "dato"
 
+#: gst/gsttaglist.c:139
 msgid "date the data was created (as a GDate structure)"
 msgstr "dato for oppretting av dataene (som en GDate-struktur)"
 
+#: gst/gsttaglist.c:141
 msgid "datetime"
 msgstr "datotid"
 
+#: gst/gsttaglist.c:142
 msgid "date and time the data was created (as a GstDateTime structure)"
-msgstr ""
-"dato og klokkeslett dataene ble opprettet (som et GstDateTime-struktur)"
+msgstr "dato og klokkeslett dataene ble opprettet (som et GstDateTime-struktur)"
 
+#: gst/gsttaglist.c:146
 msgid "genre"
 msgstr "sjanger"
 
+#: gst/gsttaglist.c:147
 msgid "genre this data belongs to"
 msgstr "sjanger disse dataene tilhører"
 
+#: gst/gsttaglist.c:150
 msgid "comment"
 msgstr "kommentar"
 
+#: gst/gsttaglist.c:151
 msgid "free text commenting the data"
 msgstr "fritekstkommentar som beskriver dataene"
 
+#: gst/gsttaglist.c:154
 msgid "extended comment"
 msgstr "utvidet kommentar"
 
+#: gst/gsttaglist.c:155
 msgid "free text commenting the data in key=value or key[en]=comment form"
 msgstr "fritekstkommentar som beskriver dataene"
 
+#: gst/gsttaglist.c:159
 msgid "track number"
 msgstr "spornummer"
 
+#: gst/gsttaglist.c:160
 msgid "track number inside a collection"
 msgstr "spornummer i en samling"
 
+#: gst/gsttaglist.c:163
 msgid "track count"
 msgstr "antall spor"
 
+#: gst/gsttaglist.c:164
 msgid "count of tracks inside collection this track belongs to"
 msgstr "telling av sporene inne i samlingen dette sporet tilhører"
 
+#: gst/gsttaglist.c:168
 msgid "disc number"
 msgstr "platenummer"
 
+#: gst/gsttaglist.c:169
 msgid "disc number inside a collection"
 msgstr "disknummer inne i en samling"
 
+#: gst/gsttaglist.c:172
 msgid "disc count"
 msgstr "disktelling"
 
+#: gst/gsttaglist.c:173
 msgid "count of discs inside collection this disc belongs to"
 msgstr "telling av diskene i samlingen denne disken tilhører"
 
+#: gst/gsttaglist.c:177
 msgid "location"
 msgstr "plassering"
 
-msgid ""
-"Origin of media as a URI (location, where the original of the file or stream "
-"is hosted)"
-msgstr ""
-"Opprinnelsen til mediet som en URI (plassering, hvor den originale fil eller "
-"strøm ligger)"
+#: gst/gsttaglist.c:177
+msgid "Origin of media as a URI (location, where the original of the file or stream is hosted)"
+msgstr "Opprinnelsen til mediet som en URI (plassering, hvor den originale fil eller strøm ligger)"
 
+#: gst/gsttaglist.c:182
 msgid "homepage"
 msgstr "hjemmeside"
 
+#: gst/gsttaglist.c:183
 msgid "Homepage for this media (i.e. artist or movie homepage)"
-msgstr ""
-"Hjemmesiden til dette mediet (dvs. hjemmesiden til artisten eller filmen)"
+msgstr "Hjemmesiden til dette mediet (dvs. hjemmesiden til artisten eller filmen)"
 
+#: gst/gsttaglist.c:186
 msgid "description"
 msgstr "beskrivelse"
 
+#: gst/gsttaglist.c:187
 msgid "short text describing the content of the data"
 msgstr "kort tekst som beskriver datainnholdet"
 
+#: gst/gsttaglist.c:190
 msgid "version"
 msgstr "versjon"
 
+#: gst/gsttaglist.c:190
 msgid "version of this data"
 msgstr "versjon for data"
 
+#: gst/gsttaglist.c:192
 msgid "ISRC"
 msgstr "ISRC"
 
+#: gst/gsttaglist.c:194
 msgid "International Standard Recording Code - see http://www.ifpi.org/isrc/"
 msgstr "International Standard Recording Code - se http://www.ifpi.org/isrc/"
 
+#: gst/gsttaglist.c:198
 msgid "organization"
 msgstr "organisasjon"
 
+#: gst/gsttaglist.c:201
 msgid "copyright"
 msgstr "opphavsrett"
 
+#: gst/gsttaglist.c:201
 msgid "copyright notice of the data"
 msgstr "melding om opphavsrett for data"
 
+#: gst/gsttaglist.c:203
 msgid "copyright uri"
 msgstr "lenke til informasjon om opphavsrett"
 
+#: gst/gsttaglist.c:204
 msgid "URI to the copyright notice of the data"
 msgstr "Lenke til melding om opphavsrett for data"
 
+#: gst/gsttaglist.c:206
 msgid "encoded by"
 msgstr "kodet av"
 
+#: gst/gsttaglist.c:206
 msgid "name of the encoding person or organization"
 msgstr "Navnet på personen eller organisasjonen som kodet"
 
+#: gst/gsttaglist.c:210
 msgid "contact"
 msgstr "kontakt"
 
+#: gst/gsttaglist.c:210
 msgid "contact information"
 msgstr "kontaktinformasjon"
 
+#: gst/gsttaglist.c:212
 msgid "license"
 msgstr "lisens"
 
+#: gst/gsttaglist.c:212
 msgid "license of data"
 msgstr "lisens for data"
 
+#: gst/gsttaglist.c:214
 msgid "license uri"
 msgstr "lenke til lisens"
 
+#: gst/gsttaglist.c:215
 msgid "URI to the license of the data"
 msgstr "Lenke til lisensen for dataene"
 
+#: gst/gsttaglist.c:218
 msgid "performer"
 msgstr "utøver"
 
+#: gst/gsttaglist.c:219
 msgid "person(s) performing"
 msgstr "personer som spiller"
 
+#: gst/gsttaglist.c:222
 msgid "composer"
 msgstr "komponist"
 
+#: gst/gsttaglist.c:223
 msgid "person(s) who composed the recording"
 msgstr "person(er) som er komponerte opptaket"
 
+#: gst/gsttaglist.c:227
 msgid "conductor"
 msgstr "dirigent"
 
+#: gst/gsttaglist.c:228
 msgid "conductor/performer refinement"
 msgstr "dirigent/utøver-raffinering"
 
+#: gst/gsttaglist.c:231
 msgid "duration"
 msgstr "varighet"
 
+#: gst/gsttaglist.c:231
 msgid "length in GStreamer time units (nanoseconds)"
 msgstr "lengde i GStreamer tidsenheter (nanosekunder)"
 
+#: gst/gsttaglist.c:234
 msgid "codec"
 msgstr "codec"
 
+#: gst/gsttaglist.c:235
 msgid "codec the data is stored in"
 msgstr "kodek dataene er lagret i"
 
+#: gst/gsttaglist.c:238
 msgid "video codec"
 msgstr "videokodek"
 
+#: gst/gsttaglist.c:238
 msgid "codec the video data is stored in"
 msgstr "kodek videodataene er lagret i"
 
+#: gst/gsttaglist.c:241
 msgid "audio codec"
 msgstr "lydkodek"
 
+#: gst/gsttaglist.c:241
 msgid "codec the audio data is stored in"
 msgstr "kodek lyddataene er lagret i"
 
+#: gst/gsttaglist.c:244
 msgid "subtitle codec"
 msgstr "undertekstkodek"
 
+#: gst/gsttaglist.c:244
 msgid "codec the subtitle data is stored in"
 msgstr "kodek undertekstdataene er lagret i"
 
+#: gst/gsttaglist.c:246
 msgid "container format"
 msgstr "beholderformat"
 
+#: gst/gsttaglist.c:247
 msgid "container format the data is stored in"
 msgstr "beholderformatet dataene er lagret i"
 
+#: gst/gsttaglist.c:249
 msgid "bitrate"
 msgstr "bitrate"
 
+#: gst/gsttaglist.c:249
 msgid "exact or average bitrate in bits/s"
 msgstr "eksakt eller gjennomsnittlig bitrate i bits/s"
 
+#: gst/gsttaglist.c:251
 msgid "nominal bitrate"
 msgstr "nominell bitrate"
 
+#: gst/gsttaglist.c:251
 msgid "nominal bitrate in bits/s"
 msgstr "nominell bitrate i bits/s"
 
+#: gst/gsttaglist.c:253
 msgid "minimum bitrate"
 msgstr "minste bitrate"
 
+#: gst/gsttaglist.c:253
 msgid "minimum bitrate in bits/s"
 msgstr "minste bitrate i bits/s"
 
+#: gst/gsttaglist.c:255
 msgid "maximum bitrate"
 msgstr "maksimal bitrate"
 
+#: gst/gsttaglist.c:255
 msgid "maximum bitrate in bits/s"
 msgstr "maksimal bitrate i bits/s"
 
+#: gst/gsttaglist.c:258
 msgid "encoder"
 msgstr "koder"
 
+#: gst/gsttaglist.c:258
 msgid "encoder used to encode this stream"
 msgstr "omkoder som skal brukes til å kode denne strømmen"
 
+#: gst/gsttaglist.c:261
 msgid "encoder version"
 msgstr "versjon av koder"
 
+#: gst/gsttaglist.c:262
 msgid "version of the encoder used to encode this stream"
 msgstr "versjon av omkoderen som brukes til å kode denne strømmen"
 
+#: gst/gsttaglist.c:264
 msgid "serial"
 msgstr "serienummer"
 
+#: gst/gsttaglist.c:264
 msgid "serial number of track"
 msgstr "serienummer for spor"
 
+#: gst/gsttaglist.c:266
 msgid "replaygain track gain"
 msgstr "avspillingsforsterkning sporforsterkning"
 
+#: gst/gsttaglist.c:266
 msgid "track gain in db"
 msgstr "sporforsterkning i db"
 
+#: gst/gsttaglist.c:268
 msgid "replaygain track peak"
 msgstr "avspillingsforsterkning sportmaksimum"
 
+#: gst/gsttaglist.c:268
 msgid "peak of the track"
 msgstr "sporets maksimum"
 
+#: gst/gsttaglist.c:270
 msgid "replaygain album gain"
 msgstr "avspillingsforsterkning albumforsterkning"
 
+#: gst/gsttaglist.c:270
 msgid "album gain in db"
 msgstr "albumforsterkning i db"
 
+#: gst/gsttaglist.c:272
 msgid "replaygain album peak"
 msgstr "avspillingsforsterkning albummaksimum"
 
+#: gst/gsttaglist.c:272
 msgid "peak of the album"
 msgstr "albumets maksimum"
 
+#: gst/gsttaglist.c:274
 msgid "replaygain reference level"
 msgstr "avspillingsforsterkning referansenivå"
 
+#: gst/gsttaglist.c:275
 msgid "reference level of track and album gain values"
 msgstr "referansenivå for spor- og albumforsterkningsverdier"
 
+#: gst/gsttaglist.c:277
 msgid "language code"
 msgstr "språkkode"
 
+#: gst/gsttaglist.c:278
 msgid "language code for this stream, conforming to ISO-639-1 or ISO-639-2"
 msgstr "språkkoden for denne strømmen, i samsvar med ISO-639-1 eller ISO-639-2"
 
+#: gst/gsttaglist.c:281
 msgid "language name"
 msgstr "språknavn"
 
+#: gst/gsttaglist.c:282
 msgid "freeform name of the language this stream is in"
 msgstr "friformnavnet på språket denne strømmen er i"
 
+#: gst/gsttaglist.c:284
 msgid "image"
 msgstr "bilde"
 
+#: gst/gsttaglist.c:284
 msgid "image related to this stream"
 msgstr "bilde relatert til denne strømmen"
 
 #. TRANSLATORS: 'preview image' = image that shows a preview of the full image
+#: gst/gsttaglist.c:288
 msgid "preview image"
 msgstr "forhåndsvis bilde"
 
+#: gst/gsttaglist.c:288
 msgid "preview image related to this stream"
 msgstr "forhåndsvis bilde relatert til denne strømmen"
 
+#: gst/gsttaglist.c:290
 msgid "attachment"
 msgstr "vedlegg"
 
+#: gst/gsttaglist.c:290
 msgid "file attached to this stream"
 msgstr "fil vedlagt denne strømmen"
 
+#: gst/gsttaglist.c:293
 msgid "beats per minute"
 msgstr "slag i minuttet"
 
+#: gst/gsttaglist.c:294
 msgid "number of beats per minute in audio"
 msgstr "antall slag i minuttet i lyd"
 
+#: gst/gsttaglist.c:296
 msgid "keywords"
 msgstr "nøkkelord"
 
+#: gst/gsttaglist.c:296
 msgid "comma separated keywords describing the content"
 msgstr "kommaseparerte nøkkelord som beskriver innholdet"
 
+#: gst/gsttaglist.c:299
 msgid "geo location name"
 msgstr "geografisk stedsnavn"
 
-msgid ""
-"human readable descriptive location of where the media has been recorded or "
-"produced"
-msgstr ""
-"lesbar beskrivende plassering av hvor mediene har blitt innspilt eller "
-"produsert"
+#: gst/gsttaglist.c:300
+msgid "human readable descriptive location of where the media has been recorded or produced"
+msgstr "lesbar beskrivende plassering av hvor mediene har blitt innspilt eller produsert"
 
+#: gst/gsttaglist.c:303
 msgid "geo location latitude"
 msgstr "geografisk breddegrad"
 
-msgid ""
-"geo latitude location of where the media has been recorded or produced in "
-"degrees according to WGS84 (zero at the equator, negative values for "
-"southern latitudes)"
-msgstr ""
-"geografisk breddegradplassering hvor mediene har vært innspilt eller "
-"produsert i grader i henhold til WGS84 (null ved ekvator, negative verdier "
-"for sydlige breddegrader)"
+#: gst/gsttaglist.c:304
+msgid "geo latitude location of where the media has been recorded or produced in degrees according to WGS84 (zero at the equator, negative values for southern latitudes)"
+msgstr "geografisk breddegradplassering hvor mediene har vært innspilt eller produsert i grader i henhold til WGS84 (null ved ekvator, negative verdier for sydlige breddegrader)"
 
+#: gst/gsttaglist.c:308
 msgid "geo location longitude"
 msgstr "geografisk lengdegrad"
 
-msgid ""
-"geo longitude location of where the media has been recorded or produced in "
-"degrees according to WGS84 (zero at the prime meridian in Greenwich/UK,  "
-"negative values for western longitudes)"
-msgstr ""
-"geografisk lengdegradplassering hvor mediene har vært innspilt eller "
-"produsert i grader i henhold til WGS84 (null ved nullmeridianen i "
-"Greenwich / UK, negative verdier for vestlige lengdegrader)"
+#: gst/gsttaglist.c:309
+msgid "geo longitude location of where the media has been recorded or produced in degrees according to WGS84 (zero at the prime meridian in Greenwich/UK,  negative values for western longitudes)"
+msgstr "geografisk lengdegradplassering hvor mediene har vært innspilt eller produsert i grader i henhold til WGS84 (null ved nullmeridianen i Greenwich / UK, negative verdier for vestlige lengdegrader)"
 
+#: gst/gsttaglist.c:313
 msgid "geo location elevation"
 msgstr "geografisk høyde"
 
-msgid ""
-"geo elevation of where the media has been recorded or produced in meters "
-"according to WGS84 (zero is average sea level)"
-msgstr ""
-"geografisk høyde i meter der mediene er innspilt eller produsert, i henhold "
-"til WGS84 (null er gjennomsnittlig havnivå)"
+#: gst/gsttaglist.c:314
+msgid "geo elevation of where the media has been recorded or produced in meters according to WGS84 (zero is average sea level)"
+msgstr "geografisk høyde i meter der mediene er innspilt eller produsert, i henhold til WGS84 (null er gjennomsnittlig havnivå)"
 
+#: gst/gsttaglist.c:317
 msgid "geo location country"
 msgstr "geografisk nasjon"
 
+#: gst/gsttaglist.c:318
 msgid "country (english name) where the media has been recorded or produced"
 msgstr "land (engelsk navn) der mediene er innspilt eller produsert"
 
+#: gst/gsttaglist.c:321
 msgid "geo location city"
 msgstr "geografisk by"
 
+#: gst/gsttaglist.c:322
 msgid "city (english name) where the media has been recorded or produced"
 msgstr "by (engelsk navn) der mediene er innspilt eller produsert"
 
+#: gst/gsttaglist.c:325
 msgid "geo location sublocation"
 msgstr "geografisk underlokasjon"
 
-msgid ""
-"a location within a city where the media has been produced or created (e.g. "
-"the neighborhood)"
-msgstr ""
-"et sted i en by hvor mediene har blitt produsert eller laget (f.eks "
-"nabolaget)"
+#: gst/gsttaglist.c:326
+msgid "a location within a city where the media has been produced or created (e.g. the neighborhood)"
+msgstr "et sted i en by hvor mediene har blitt produsert eller laget (f.eks nabolaget)"
 
+#: gst/gsttaglist.c:329
 msgid "geo location horizontal error"
 msgstr "geografisk plassering horisontalfeil"
 
+#: gst/gsttaglist.c:330
 msgid "expected error of the horizontal positioning measures (in meters)"
 msgstr "forventet feil i den horisontale posisjoneringsmål (i meter)"
 
+#: gst/gsttaglist.c:333
 msgid "geo location movement speed"
 msgstr "geografisk bevegelseshastighet"
 
-msgid ""
-"movement speed of the capturing device while performing the capture in m/s"
+#: gst/gsttaglist.c:334
+msgid "movement speed of the capturing device while performing the capture in m/s"
 msgstr "bevegelseshastigheten til opptaksenheten mens du utfører opptak i m/s"
 
+#: gst/gsttaglist.c:337
 msgid "geo location movement direction"
 msgstr "geografisk bevegelsesretning"
 
-msgid ""
-"indicates the movement direction of the device performing the capture of a "
-"media. It is represented as degrees in floating point representation, 0 "
-"means the geographic north, and increases clockwise"
-msgstr ""
-"indikerer bevegelsesretningen av innretningen som utfører opptak av et "
-"medium. Det er representert som grader i flyttall-representasjon, 0 betyr "
-"geografisk nord og øker med klokken"
+#: gst/gsttaglist.c:338
+msgid "indicates the movement direction of the device performing the capture of a media. It is represented as degrees in floating point representation, 0 means the geographic north, and increases clockwise"
+msgstr "indikerer bevegelsesretningen av innretningen som utfører opptak av et medium. Det er representert som grader i flyttall-representasjon, 0 betyr geografisk nord og øker med klokken"
 
+#: gst/gsttaglist.c:343
 msgid "geo location capture direction"
 msgstr "geografisk opptaksretning"
 
-msgid ""
-"indicates the direction the device is pointing to when capturing  a media. "
-"It is represented as degrees in floating point  representation, 0 means the "
-"geographic north, and increases clockwise"
-msgstr ""
-"indikerer i hvilken retning enheten peker når du tar opp et medie. Det er "
-"representert som grader i flyttall-representasjon, 0 betyr geografisk nord "
-"og øker med klokken"
+#: gst/gsttaglist.c:344
+msgid "indicates the direction the device is pointing to when capturing  a media. It is represented as degrees in floating point  representation, 0 means the geographic north, and increases clockwise"
+msgstr "indikerer i hvilken retning enheten peker når du tar opp et medie. Det er representert som grader i flyttall-representasjon, 0 betyr geografisk nord og øker med klokken"
 
 #. TRANSLATORS: 'show name' = 'TV/radio/podcast show name' here
+#: gst/gsttaglist.c:350
 msgid "show name"
 msgstr "navn på program"
 
+#: gst/gsttaglist.c:351
 msgid "Name of the tv/podcast/series show the media is from"
 msgstr "Navnet på serien tv- eller podcasten mediet stammer fra"
 
 #. TRANSLATORS: 'show sortname' = 'TV/radio/podcast show name as used for sorting purposes' here
+#: gst/gsttaglist.c:356
 msgid "show sortname"
 msgstr "serie-sorteringsnavn"
 
-msgid ""
-"Name of the tv/podcast/series show the media is from, for sorting purposes"
-msgstr ""
-"Navnet på serien tv- eller podcasten mediet stammer fra, for sorteringsformål"
+#: gst/gsttaglist.c:357
+msgid "Name of the tv/podcast/series show the media is from, for sorting purposes"
+msgstr "Navnet på serien tv- eller podcasten mediet stammer fra, for sorteringsformål"
 
+#: gst/gsttaglist.c:360
 msgid "episode number"
 msgstr "episodenummer"
 
+#: gst/gsttaglist.c:361
 msgid "The episode number in the season the media is part of"
 msgstr "Episodenummeret i sesongen mediet er en del av"
 
+#: gst/gsttaglist.c:364
 msgid "season number"
 msgstr "sesongnummer"
 
+#: gst/gsttaglist.c:365
 msgid "The season number of the show the media is part of"
 msgstr "Sesongnummeret i serien mediet er en del av"
 
+#: gst/gsttaglist.c:368
 msgid "lyrics"
 msgstr "tekster"
 
+#: gst/gsttaglist.c:368
 msgid "The lyrics of the media, commonly used for songs"
 msgstr "Teksten til mediene, vanligvis brukt for sanger"
 
+#: gst/gsttaglist.c:371
 msgid "composer sortname"
 msgstr "komponist-sorteringsnavn"
 
+#: gst/gsttaglist.c:372
 msgid "person(s) who composed the recording, for sorting purposes"
 msgstr "person(er) som komponert opptaket, for sorteringsformål"
 
+#: gst/gsttaglist.c:374
 msgid "grouping"
 msgstr "gruppering"
 
-msgid ""
-"Groups related media that spans multiple tracks, like the different pieces "
-"of a concerto. It is a higher level than a track, but lower than an album"
-msgstr ""
-"Grupperelaterte media som går over flere spor, som de forskjellige delene av "
-"en konsert. Det er et høyere nivå enn et spor, men lavere enn et album"
+#: gst/gsttaglist.c:375
+msgid "Groups related media that spans multiple tracks, like the different pieces of a concerto. It is a higher level than a track, but lower than an album"
+msgstr "Grupperelaterte media som går over flere spor, som de forskjellige delene av en konsert. Det er et høyere nivå enn et spor, men lavere enn et album"
 
+#: gst/gsttaglist.c:379
 msgid "user rating"
 msgstr "brukerrangering"
 
-msgid ""
-"Rating attributed by a user. The higher the rank, the more the user likes "
-"this media"
-msgstr ""
-"Rating tilskrevet av en bruker. Jo høyere rang, jo mer liker brukeren dette "
-"mediet"
+#: gst/gsttaglist.c:380
+msgid "Rating attributed by a user. The higher the rank, the more the user likes this media"
+msgstr "Rating tilskrevet av en bruker. Jo høyere rang, jo mer liker brukeren dette mediet"
 
+#: gst/gsttaglist.c:383
 msgid "device manufacturer"
 msgstr "enhetsprodusent"
 
+#: gst/gsttaglist.c:384
 msgid "Manufacturer of the device used to create this media"
 msgstr "Produsenten av enheten som brukes til å lage dette mediet"
 
+#: gst/gsttaglist.c:386
 msgid "device model"
 msgstr "enhetsmodell"
 
+#: gst/gsttaglist.c:387
 msgid "Model of the device used to create this media"
 msgstr "Modell av enheten som brukes til å lage dette mediet"
 
+#: gst/gsttaglist.c:389
 msgid "application name"
 msgstr "Programnavn"
 
+#: gst/gsttaglist.c:390
 msgid "Application used to create the media"
 msgstr "Program brukt til å lage mediet"
 
+#: gst/gsttaglist.c:392
 msgid "application data"
 msgstr "Programdata"
 
+#: gst/gsttaglist.c:393
 msgid "Arbitrary application data to be serialized into the media"
 msgstr "Vilkårlige programdata som skal serialiseres i mediet"
 
+#: gst/gsttaglist.c:395
 msgid "image orientation"
 msgstr "bildeorientering"
 
+#: gst/gsttaglist.c:396
 msgid "How the image should be rotated or flipped before display"
 msgstr "Hvordan bildet skal roteres eller snus før visning"
 
+#: gst/gsttaglist.c:399
 msgid "publisher"
 msgstr "utgiver"
 
+#: gst/gsttaglist.c:400
 msgid "Name of the label or publisher"
 msgstr "Navnet på forlaget eller utgiveren"
 
+#: gst/gsttaglist.c:403
 msgid "interpreted-by"
 msgstr "tolket av"
 
+#: gst/gsttaglist.c:404
 msgid "Information about the people behind a remix and similar interpretations"
 msgstr "Informasjon om menneskene bak en remiks og lignende tolkninger"
 
+#: gst/gsttaglist.c:408
 msgid "midi-base-note"
 msgstr "midi-base-node"
 
+#: gst/gsttaglist.c:408
 msgid "Midi note number of the audio track."
 msgstr "Midi-nodenummer på lydsporet."
 
+#: gst/gsttaglist.c:411
 msgid "private-data"
 msgstr "private-data"
 
+#: gst/gsttaglist.c:411
 msgid "Private data"
 msgstr "Private data"
 
+#: gst/gsttaglist.c:451
 msgid ", "
 msgstr ", "
 
+#: gst/gsturi.c:648
 #, c-format
 msgid "No URI handler for the %s protocol found"
 msgstr "Ingen URI-behandler for %s protokollen funnet"
 
+#: gst/gsturi.c:823
 #, c-format
 msgid "URI scheme '%s' not supported"
 msgstr "URI-ordningen «%s» støttes ikke"
 
+#: gst/gstutils.c:2632 tools/gst-launch.c:325
 #, c-format
 msgid "ERROR: from element %s: %s\n"
 msgstr "FEIL: fra element %s: %s\n"
 
+#: gst/gstutils.c:2634 tools/gst-launch.c:327 tools/gst-launch.c:697
 #, c-format
 msgid ""
 "Additional debug info:\n"
@@ -850,348 +1010,422 @@ msgstr ""
 "Tilleggsinformasjon for feilsøking:\n"
 "%s\n"
 
+#: gst/parse/grammar.y:216
 #, c-format
 msgid "link has no source [sink=%s@%p]"
 msgstr "link har ingen slik kilde [sink=%s@%p]"
 
+#: gst/parse/grammar.y:221
 #, c-format
 msgid "link has no sink [source=%s@%p]"
 msgstr "link har ingen slik sink [source=%s@%p]"
 
+#: gst/parse/grammar.y:413
 #, c-format
 msgid "no property \"%s\" in element \"%s\""
 msgstr "ingen egenskap «%s» i element «%s»"
 
+#: gst/parse/grammar.y:454
 #, c-format
 msgid "could not set property \"%s\" in element \"%s\" to \"%s\""
 msgstr "kunne ikke sette egenskapen «%s» i elementet «%s» til «%s»"
 
+#: gst/parse/grammar.y:507
 msgid "Delayed linking failed."
 msgstr "Forsinket linking feilet."
 
+#: gst/parse/grammar.y:719 gst/parse/grammar.y:724
 #, c-format
 msgid "could not link %s to %s, %s can't handle caps %s"
 msgstr "kunne ikke lenke %s til %s,  %s kan ikke håndtere store bokstaver %s"
 
+#: gst/parse/grammar.y:729
 #, c-format
 msgid "could not link %s to %s, neither element can handle caps %s"
-msgstr ""
-"kunne ikke linke %s til %s, ingen av elementene kan håndtere store bokstaver "
-"%s"
+msgstr "kunne ikke linke %s til %s, ingen av elementene kan håndtere store bokstaver %s"
 
+#: gst/parse/grammar.y:733
 #, c-format
 msgid "could not link %s to %s with caps %s"
 msgstr "kunne ikke lenke %s til %s med store bokstaver %s"
 
+#: gst/parse/grammar.y:739
 #, c-format
 msgid "could not link %s to %s"
 msgstr "kunne ikke lenke %s til %s"
 
+#: gst/parse/grammar.y:816
 #, c-format
 msgid "no element \"%s\""
 msgstr "ingen element «%s»"
 
+#: gst/parse/grammar.y:877
 #, c-format
 msgid "unexpected reference \"%s\" - ignoring"
 msgstr "uventet referanse «%s» – ignorerer"
 
+#: gst/parse/grammar.y:883
 #, c-format
 msgid "unexpected pad-reference \"%s\" - ignoring"
 msgstr "uventet pad-referanse «%s» – ignorerer"
 
+#: gst/parse/grammar.y:915 gst/parse/grammar.y:924
 #, c-format
 msgid "could not parse caps \"%s\""
 msgstr "kunne ikke analysere capskunne ikke analysere caps «%s»"
 
+#: gst/parse/grammar.y:952
 #, c-format
 msgid "no sink element for URI \"%s\""
 msgstr "ingen sink-element for URI «%s»"
 
+#: gst/parse/grammar.y:971
 #, c-format
 msgid "no source element for URI \"%s\""
 msgstr "ingen kilde-element for URI «%s»"
 
+#: gst/parse/grammar.y:1061
 msgid "syntax error"
 msgstr "Syntaksfeil"
 
+#: gst/parse/grammar.y:1084
 #, c-format
 msgid "specified empty bin \"%s\", not allowed"
 msgstr "spesifisert tomt lager «%s», ikke tillat"
 
+#: gst/parse/grammar.y:1094
 #, c-format
 msgid "no bin \"%s\", unpacking elements"
 msgstr "intet lager «%s», pakker ut elementer"
 
+#: gst/parse/grammar.y:1125
 msgid "empty pipeline not allowed"
 msgstr "Tom rørledning ikke tillatt"
 
+#: libs/gst/base/gstbasesink.c:1210
 msgid "Pipeline construction is invalid, please add queues."
-msgstr ""
+msgstr "Datakanal-konstruksjon er ugyldig, vennligst legg til køer."
 
+#: libs/gst/base/gstbasesink.c:3004
 msgid "A lot of buffers are being dropped."
 msgstr "Mange av buffere blir droppet."
 
+#: libs/gst/base/gstbasesink.c:3496
 msgid "Internal data flow problem."
 msgstr "Intern dataflytproblem."
 
+#: libs/gst/base/gstbasesink.c:4222 libs/gst/base/gstbasesrc.c:2708
 msgid "Internal data flow error."
 msgstr "Intern feil med dataflyt."
 
+#: libs/gst/base/gstbasesrc.c:2638
 msgid "Internal clock error."
 msgstr "Feil i intern klokke"
 
+#: libs/gst/base/gstbasesrc.c:2666 plugins/elements/gstdownloadbuffer.c:842
+#: plugins/elements/gstdownloadbuffer.c:1265
 msgid "Failed to map buffer."
 msgstr "Klarte ikke å kartlegge buffer."
 
+#: plugins/elements/gstcapsfilter.c:128
 msgid "Filter caps"
 msgstr "Filtrer caps"
 
-msgid ""
-"Restrict the possible allowed capabilities (NULL means ANY). Setting this "
-"property takes a reference to the supplied GstCaps object."
-msgstr ""
-"Begrense mulige tillatt evner (NULL betyr ALT). Innstilling av denne "
-"egenskapen tar en referanse til det medfølgende GstCaps-objektet."
+#: plugins/elements/gstcapsfilter.c:129
+msgid "Restrict the possible allowed capabilities (NULL means ANY). Setting this property takes a reference to the supplied GstCaps object."
+msgstr "Begrense mulige tillatt evner (NULL betyr ALT). Innstilling av denne egenskapen tar en referanse til det medfølgende GstCaps-objektet."
 
+#: plugins/elements/gstcapsfilter.c:136
 msgid "Caps Change Mode"
 msgstr "Caps-endringstilstand"
 
+#: plugins/elements/gstcapsfilter.c:137
 msgid "Filter caps change behaviour"
 msgstr "Filter caps-endringsatferd"
 
+#: plugins/elements/gstdownloadbuffer.c:927 plugins/elements/gstqueue2.c:1792
 msgid "No Temp directory specified."
 msgstr "Inten temp-mappe spesifisert."
 
+#: plugins/elements/gstdownloadbuffer.c:933 plugins/elements/gstqueue2.c:1798
 #, c-format
 msgid "Could not create temp file \"%s\"."
 msgstr "Kunne ikke lage midlertidig fil «%s»."
 
+#: plugins/elements/gstdownloadbuffer.c:941 plugins/elements/gstfilesrc.c:537
+#: plugins/elements/gstqueue2.c:1806
 #, c-format
 msgid "Could not open file \"%s\" for reading."
 msgstr "Kunne ikke åpne fil «%s» for lesing."
 
+#: plugins/elements/gstdownloadbuffer.c:1274 plugins/elements/gstqueue2.c:2225
 msgid "Error while writing to download file."
 msgstr "Feil ved skriving til nedastingsfilen."
 
+#: plugins/elements/gstfilesink.c:404
 msgid "No file name specified for writing."
 msgstr "Ingen filnavn oppgitt for skriving."
 
+#: plugins/elements/gstfilesink.c:410
 #, c-format
 msgid "Could not open file \"%s\" for writing."
 msgstr "Kunne ikke åpne fil «%s» for skriving."
 
+#: plugins/elements/gstfilesink.c:422 plugins/elements/gstfilesink.c:426
 #, c-format
 msgid "Error closing file \"%s\"."
 msgstr "Feil ved lukking av fil «%s»."
 
+#: plugins/elements/gstfilesink.c:605
 #, c-format
 msgid "Error while seeking in file \"%s\"."
 msgstr "Feil ved søking i fil «%s»."
 
+#: plugins/elements/gstfilesink.c:613 plugins/elements/gstfilesink.c:620
+#: plugins/elements/gstfilesink.c:793 plugins/elements/gstfilesink.c:848
 #, c-format
 msgid "Error while writing to file \"%s\"."
 msgstr "Feil ved skriving til fil «%s»."
 
+#: plugins/elements/gstfilesrc.c:525
 msgid "No file name specified for reading."
 msgstr "Ingen filnavn oppgitt for lesing."
 
+#: plugins/elements/gstfilesrc.c:546
 #, c-format
 msgid "Could not get info on \"%s\"."
 msgstr "Kunne ikke hente informasjon om «%s»."
 
+#: plugins/elements/gstfilesrc.c:552
 #, c-format
 msgid "\"%s\" is a directory."
 msgstr "«%s» er en katalog."
 
+#: plugins/elements/gstfilesrc.c:558
 #, c-format
 msgid "File \"%s\" is a socket."
 msgstr "Fil «%s» er en plugg."
 
+#: plugins/elements/gstidentity.c:722
 msgid "Failed after iterations as requested."
 msgstr "Mislyktes etter iterasjoner som forespurt."
 
+#: plugins/elements/gstidentity.c:903
 msgid "eos-after and error-after can't both be defined."
-msgstr ""
+msgstr "eos-after og error-after kan ikke begge være definert."
 
+#: plugins/elements/gsttypefindelement.c:251
 msgid "caps"
 msgstr "caps"
 
+#: plugins/elements/gsttypefindelement.c:252
 msgid "detected capabilities in stream"
 msgstr "oppdaget evner i strøm"
 
+#: plugins/elements/gsttypefindelement.c:255
 msgid "minimum"
 msgstr "minimum"
 
+#: plugins/elements/gsttypefindelement.c:260
 msgid "force caps"
 msgstr "tving caps"
 
+#: plugins/elements/gsttypefindelement.c:261
 msgid "force caps without doing a typefind"
 msgstr "tving caps uten å foreta typefind"
 
+#: plugins/elements/gsttypefindelement.c:987
+#: plugins/elements/gsttypefindelement.c:1009
 msgid "Stream doesn't contain enough data."
 msgstr "Strømmen inneholder ikke nok data."
 
+#: plugins/elements/gsttypefindelement.c:1129
 msgid "Stream contains no data."
 msgstr "Strømmen inneholder ikke data."
 
-#, fuzzy, c-format
+#: tools/gst-inspect.c:290
+#, c-format
 msgid "%sImplemented Interfaces%s:\n"
-msgstr "Implementerte grensesnitt:\n"
+msgstr "%sImplementerte grensesnitt%s:\n"
 
+#: tools/gst-inspect.c:400
 msgid "readable"
 msgstr "lesbar"
 
+#: tools/gst-inspect.c:405
 msgid "writable"
 msgstr "skrivbar"
 
+#: tools/gst-inspect.c:410
 msgid "deprecated"
 msgstr "foreldet"
 
+#: tools/gst-inspect.c:414
 msgid "controllable"
 msgstr "kontrollerbar"
 
+#: tools/gst-inspect.c:420
 msgid "changeable in NULL, READY, PAUSED or PLAYING state"
 msgstr "kan bare endres i NULL-, KLAR-, PAUSE- eller SPILLER-tilstand"
 
+#: tools/gst-inspect.c:423
 msgid "changeable only in NULL, READY or PAUSED state"
 msgstr "kan bare endres i NULL-, KLAR- eller PAUSE-tilstand"
 
+#: tools/gst-inspect.c:426
 msgid "changeable only in NULL or READY state"
 msgstr "kan bare endres i NULL-, eller KLAR-tilstand"
 
+#: tools/gst-inspect.c:1131
 msgid "Blacklisted files:"
 msgstr "Svartelistede filer:"
 
-#, fuzzy, c-format
+#: tools/gst-inspect.c:1143 tools/gst-inspect.c:1276
+#, c-format
 msgid "%sTotal count%s: %s"
-msgstr "Totalt antall: "
+msgstr "%sTotalt antall%s: %s"
 
+#: tools/gst-inspect.c:1145
 #, c-format
 msgid "%d blacklisted file"
 msgid_plural "%d blacklisted files"
 msgstr[0] "%d sortelistet fil"
 msgstr[1] "%d sortelistede filer"
 
+#: tools/gst-inspect.c:1278
 #, c-format
 msgid "%d plugin"
 msgid_plural "%d plugins"
 msgstr[0] "%d programtillegg"
 msgstr[1] "%d programtillegg"
 
+#: tools/gst-inspect.c:1281
 #, c-format
 msgid "%d blacklist entry"
 msgid_plural "%d blacklist entries"
 msgstr[0] "%d sortelisteoppføring"
 msgstr[1] "%d sortelisteoppføringer"
 
+#: tools/gst-inspect.c:1286
 #, c-format
 msgid "%d feature"
 msgid_plural "%d features"
 msgstr[0] "%d funksjon"
 msgstr[1] "%d funksjoner"
 
+#: tools/gst-inspect.c:1953
 msgid "Print all elements"
 msgstr "Skriv ut alle elementene"
 
+#: tools/gst-inspect.c:1955
 msgid "Print list of blacklisted files"
 msgstr "Skriv ut liste med sortelistede filer"
 
+#: tools/gst-inspect.c:1957
 msgid ""
-"Print a machine-parsable list of features the specified plugin or all "
-"plugins provide.\n"
-"                                       Useful in connection with external "
-"automatic plugin installation mechanisms"
+"Print a machine-parsable list of features the specified plugin or all plugins provide.\n"
+"                                       Useful in connection with external automatic plugin installation mechanisms"
 msgstr ""
-"Skriv ut en maskin-analyseres liste over funksjoner det angitte "
-"programtillegget eller alle programtillegg gir.\n"
-"                                       Nyttig i forbindelse med eksterne "
-"automatiske installasjonsmekanismer for programtillegg"
+"Skriv ut en maskin-analyseres liste over funksjoner det angitte programtillegget eller alle programtillegg gir.\n"
+"                                       Nyttig i forbindelse med eksterne automatiske installasjonsmekanismer for programtillegg"
 
+#: tools/gst-inspect.c:1962
 msgid "List the plugin contents"
 msgstr "List innhold i programtillegg"
 
-msgid ""
-"A slashes ('/') separated list of types of elements (also known as klass) to "
-"list. (unordered)"
-msgstr ""
-"En skråstrekseparert («/») liste av typer av elementer (også kjent som "
-"klasse) til listen. (Uordnet)"
+#: tools/gst-inspect.c:1964
+msgid "A slashes ('/') separated list of types of elements (also known as klass) to list. (unordered)"
+msgstr "En skråstrekseparert («/») liste av typer av elementer (også kjent som klasse) til listen. (Uordnet)"
 
+#: tools/gst-inspect.c:1967
 msgid "Check if the specified element or plugin exists"
 msgstr "Sjekk om det spesifiserte elementet eller programtillegg eksisterer"
 
-msgid ""
-"When checking if an element or plugin exists, also check that its version is "
-"at least the version specified"
-msgstr ""
-"Ved sjekking om et element eller programtillegg eksisterer, sjekk også at "
-"dens versjon er minst den angitte versjonen"
+#: tools/gst-inspect.c:1970
+msgid "When checking if an element or plugin exists, also check that its version is at least the version specified"
+msgstr "Ved sjekking om et element eller programtillegg eksisterer, sjekk også at dens versjon er minst den angitte versjonen"
 
+#: tools/gst-inspect.c:1974
 msgid "Print supported URI schemes, with the elements that implement them"
 msgstr "Skrive ut støttede URI-schemes, med elementer som implementerer dem"
 
-msgid ""
-"Disable colors in output. You can also achieve the same by "
-"setting'GST_INSPECT_NO_COLORS' environment variable to any value."
-msgstr ""
+#: tools/gst-inspect.c:1979
+msgid "Disable colors in output. You can also achieve the same by setting'GST_INSPECT_NO_COLORS' environment variable to any value."
+msgstr "Deaktiver farger i utdata. Du kan også oppnå det samme ved å stille inn miljøvariabelen «GST_INSPECT_NO_COLORS» til hvilken som helst verdi."
 
+#: tools/gst-inspect.c:2135
 #, c-format
 msgid "Could not load plugin file: %s\n"
 msgstr "Kunne ikke laste programtilleggsfil: «%s»\n"
 
+#: tools/gst-inspect.c:2141
 #, c-format
 msgid "No such element or plugin '%s'\n"
 msgstr "Ingen slik element eller programtillegg '%s'\n"
 
+#: tools/gst-launch.c:252
 msgid "Index statistics"
 msgstr "Indeksstatistikk"
 
+#: tools/gst-launch.c:578
 #, c-format
 msgid "Got message #%u from element \"%s\" (%s): "
 msgstr "Fikk melding #%u fra element «%s» (%s): "
 
+#: tools/gst-launch.c:582
 #, c-format
 msgid "Got message #%u from pad \"%s:%s\" (%s): "
 msgstr "Fikk melding #%u fra pad «%s:%s» (%s): "
 
+#: tools/gst-launch.c:586
 #, c-format
 msgid "Got message #%u from object \"%s\" (%s): "
 msgstr "Fikk melding #%u fra objekt «%s» (%s): "
 
+#: tools/gst-launch.c:590
 #, c-format
 msgid "Got message #%u (%s): "
 msgstr "Fikk melding #%u (%s): "
 
+#: tools/gst-launch.c:622
 #, c-format
 msgid "Got EOS from element \"%s\".\n"
 msgstr "Fikk EOS fra element «%s».\n"
 
+#: tools/gst-launch.c:631
 #, c-format
 msgid "FOUND TAG      : found by element \"%s\".\n"
 msgstr "FANT TAG      : funnet av element «%s».\n"
 
+#: tools/gst-launch.c:634
 #, c-format
 msgid "FOUND TAG      : found by pad \"%s:%s\".\n"
 msgstr "FANT TAG      : funnet av pad «%s:%s».\n"
 
+#: tools/gst-launch.c:637
 #, c-format
 msgid "FOUND TAG      : found by object \"%s\".\n"
 msgstr "FANT TAG      : funnet av objekt «%s».\n"
 
+#: tools/gst-launch.c:640
 msgid "FOUND TAG\n"
 msgstr "FANT TAGG\n"
 
+#: tools/gst-launch.c:655
 #, c-format
 msgid "FOUND TOC      : found by element \"%s\".\n"
 msgstr "FANT TOC      : funnet av element «%s».\n"
 
+#: tools/gst-launch.c:658
 #, c-format
 msgid "FOUND TOC      : found by object \"%s\".\n"
 msgstr "FANT TOC      : funnet av objekt «%s».\n"
 
+#: tools/gst-launch.c:661
 msgid "FOUND TOC\n"
 msgstr "FANT TOC\n"
 
+#: tools/gst-launch.c:678
 #, c-format
 msgid ""
 "INFO:\n"
@@ -1200,161 +1434,189 @@ msgstr ""
 "INFO:\n"
 "%s\n"
 
+#: tools/gst-launch.c:695
 #, c-format
 msgid "WARNING: from element %s: %s\n"
 msgstr "ADVARSEL: fra element %s: %s\n"
 
+#: tools/gst-launch.c:730
 msgid "Prerolled, waiting for buffering to finish...\n"
 msgstr "Forbereder, venter på at buffering fullfører ...\n"
 
+#: tools/gst-launch.c:734
 msgid "Prerolled, waiting for progress to finish...\n"
 msgstr "Forbereder, venter på at fremdriften fullfører ...\n"
 
+#: tools/gst-launch.c:746
 msgid "buffering..."
 msgstr "bufrer ..."
 
+#: tools/gst-launch.c:757
 msgid "Done buffering, setting pipeline to PLAYING ...\n"
 msgstr "Ferdig med bufring, setter rørledning til SPILLER\n"
 
+#: tools/gst-launch.c:765
 msgid "Buffering, setting pipeline to PAUSED ...\n"
 msgstr "Bufrer, setter rørledning til PAUSE ...\n"
 
+#: tools/gst-launch.c:774
 msgid "Redistribute latency...\n"
 msgstr "Redistribuer ventetid ...\n"
 
+#: tools/gst-launch.c:785
 #, c-format
 msgid "Setting state to %s as requested by %s...\n"
 msgstr "Setter status til %s som foresåurt av  %s...\n"
 
+#: tools/gst-launch.c:801
 msgid "Interrupt: Stopping pipeline ...\n"
 msgstr "Avbrudd: Stopper rørledning ...\n"
 
+#: tools/gst-launch.c:830
 #, c-format
 msgid "Progress: (%s) %s\n"
 msgstr "Fremdrift: (%s) %s\n"
 
+#: tools/gst-launch.c:843
 #, c-format
 msgid "Missing element: %s\n"
 msgstr "Mangler element: %s\n"
 
+#: tools/gst-launch.c:857
 #, c-format
 msgid "Got context from element '%s': %s=%s\n"
 msgstr "Fikk sammenheng fra element «%s»: %s=%s\n"
 
+#: tools/gst-launch.c:991
 msgid "Output tags (also known as metadata)"
 msgstr "skriv ut tagger (også kjent som metadata)"
 
+#: tools/gst-launch.c:993
 msgid "Output TOC (chapters and editions)"
 msgstr "Skriv ut TOC (kapitler og utgaver)"
 
+#: tools/gst-launch.c:995
 msgid "Output status information and property notifications"
 msgstr "Skriv ut statusinformasjon og egenskapsvarslinger"
 
+#: tools/gst-launch.c:997
 msgid "Do not print any progress information"
 msgstr "Ikke skriv ut fremdriftsinformasjon"
 
+#: tools/gst-launch.c:999
 msgid "Output messages"
 msgstr "Utdatameldinger"
 
-msgid ""
-"Do not output status information for the specified property if verbose "
-"output is enabled (can be used multiple times)"
-msgstr ""
-"Ikke gi ut statusinformasjon for den angitte egenskapen hvis verbose-utgang "
-"er aktivert (kan brukes flere ganger)"
+#: tools/gst-launch.c:1001
+msgid "Do not output status information for the specified property if verbose output is enabled (can be used multiple times)"
+msgstr "Ikke gi ut statusinformasjon for den angitte egenskapen hvis verbose-utgang er aktivert (kan brukes flere ganger)"
 
+#: tools/gst-launch.c:1003
 msgid "PROPERTY-NAME"
 msgstr "EGENSKAPSNAVN"
 
+#: tools/gst-launch.c:1005
 msgid "Do not install a fault handler"
 msgstr "ikke installer feilhåndterer"
 
+#: tools/gst-launch.c:1007
 msgid "Force EOS on sources before shutting the pipeline down"
 msgstr "Tvinge EOS på kilder før rørledningen stenges"
 
+#: tools/gst-launch.c:1010
 msgid "Gather and print index statistics"
 msgstr "Samle og skriv ut indeksstatistikk"
 
+#: tools/gst-launch.c:1077
 #, c-format
 msgid "ERROR: pipeline could not be constructed: %s.\n"
 msgstr "FEIL: rørledningen kunne ikke bygges: %s.\n"
 
+#: tools/gst-launch.c:1081
 msgid "ERROR: pipeline could not be constructed.\n"
 msgstr "FEIL: rørledningen kunne ikke bygges.\n"
 
+#: tools/gst-launch.c:1085
 #, c-format
 msgid "WARNING: erroneous pipeline: %s\n"
 msgstr "ADVARSEL: feilaktig rørledning: %s\n"
 
+#: tools/gst-launch.c:1101
 msgid "ERROR: the 'pipeline' element wasn't found.\n"
 msgstr "FEIL: elementet «rørledning» ble ike funnet.\n"
 
+#: tools/gst-launch.c:1132 tools/gst-launch.c:1233
 msgid "Setting pipeline to PAUSED ...\n"
 msgstr "Setter rørledning til PAUSE\n"
 
+#: tools/gst-launch.c:1137
 msgid "ERROR: Pipeline doesn't want to pause.\n"
 msgstr "FEIL: rørledningen vil ikke pause\n"
 
+#: tools/gst-launch.c:1142
 msgid "Pipeline is live and does not need PREROLL ...\n"
 msgstr "Rørledningen er live og trenger ikke forberedelse\n"
 
+#: tools/gst-launch.c:1146
 msgid "Pipeline is PREROLLING ...\n"
 msgstr "Rørledningen forbereder ...\n"
 
+#: tools/gst-launch.c:1149 tools/gst-launch.c:1163
 msgid "ERROR: pipeline doesn't want to preroll.\n"
 msgstr "FEIL: rørledningen vil ikke forberede.\n"
 
+#: tools/gst-launch.c:1156
 msgid "Pipeline is PREROLLED ...\n"
 msgstr "Rørledning er forberedt ...\n"
 
+#: tools/gst-launch.c:1169
 msgid "Setting pipeline to PLAYING ...\n"
 msgstr "Setter rørledning til SPILLER ...\n"
 
+#: tools/gst-launch.c:1176
 msgid "ERROR: pipeline doesn't want to play.\n"
 msgstr "FEIL: rørledningen vil ikke spille.\n"
 
+#: tools/gst-launch.c:1195
 msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n"
 msgstr "EOS ved avslutning aktivert - Tvinger EOS på rørledningen\n"
 
+#: tools/gst-launch.c:1199
 msgid "EOS on shutdown enabled -- waiting for EOS after Error\n"
 msgstr "EOS ved avslutning aktivert - venter på AOS etter feil\n"
 
+#: tools/gst-launch.c:1202
 msgid "Waiting for EOS...\n"
 msgstr "Venter på EOS...\n"
 
+#: tools/gst-launch.c:1209
 msgid "EOS received - stopping pipeline...\n"
 msgstr "EOS mottatt - stopper rørledning...\n"
 
+#: tools/gst-launch.c:1213
 msgid "Interrupt while waiting for EOS - stopping pipeline...\n"
 msgstr "Avbryt mens du venter på EOS - stopper rørledning...\n"
 
+#: tools/gst-launch.c:1218
 msgid "An error happened while waiting for EOS\n"
 msgstr "En feil oppsto ved venting på EOS\n"
 
+#: tools/gst-launch.c:1229
 msgid "Execution ended after %"
 msgstr "Kjøring endte etter %"
 
+#: tools/gst-launch.c:1245
 msgid "Setting pipeline to READY ...\n"
 msgstr "Setter rørledning til KLAR ...\n"
 
+#: tools/gst-launch.c:1257
 msgid "Setting pipeline to NULL ...\n"
 msgstr "Setter rørledning til NULL ...\n"
 
+#: tools/gst-launch.c:1261
 msgid "Freeing pipeline ...\n"
 msgstr "Frigjør rør ...\n"
 
-#, fuzzy
-#~ msgid "Error creating pipe: %s\n"
-#~ msgstr "Feil ved lukking av fil «%s»."
-
-#, fuzzy
-#~ msgid "Error forking: %s\n"
-#~ msgstr "Feil ved lukking av fil «%s»."
-
-#, fuzzy
-#~ msgid "Error writing to console: %s\n"
-#~ msgstr "Feil ved skriving til fil «%s»."
-
 #~ msgid "bin"
 #~ msgstr "bin"
 
index 7717a09..f6c130c 100644 (file)
@@ -5,10 +5,10 @@
 # Mehmet Kececi <mkececi@mehmetkececi.com>, 2017, 2019.
 msgid ""
 msgstr ""
-"Project-Id-Version: gstreamer 1.15.1\n"
+"Project-Id-Version: gstreamer 1.16.0\n"
 "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2019-02-26 11:37+0000\n"
-"PO-Revision-Date: 2019-01-25 11:54+0300\n"
+"POT-Creation-Date: 2019-04-19 00:15+0100\n"
+"PO-Revision-Date: 2019-09-03 19:52+0300\n"
 "Last-Translator: Mehmet Kececi <mkececi@mehmetkececi.com>\n"
 "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
 "Language: tr\n"
@@ -20,821 +20,988 @@ msgstr ""
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "X-Project-Style: gnome\n"
 
+#: gst/gst.c:250
 msgid "Print the GStreamer version"
 msgstr "GStreamer sürünümü yazdır"
 
+#: gst/gst.c:252
 msgid "Make all warnings fatal"
 msgstr "Tüm uyarıları ölümcül yap"
 
+#: gst/gst.c:256
 msgid "Print available debug categories and exit"
 msgstr "Geçerli hata ayıklama sınıflarını yazdır ve çık"
 
-msgid ""
-"Default debug level from 1 (only error) to 9 (anything) or 0 for no output"
-msgstr ""
-"Öntanımlı hata ayıklama seviyesi 1'den (sadece hatalar) 9'a (her şey) ya da "
-"çıktı olmaması için 0"
+#: gst/gst.c:260
+msgid "Default debug level from 1 (only error) to 9 (anything) or 0 for no output"
+msgstr "Öntanımlı hata ayıklama seviyesi 1'den (sadece hatalar) 9'a (her şey) ya da çıktı olmaması için 0"
 
+#: gst/gst.c:262
 msgid "LEVEL"
 msgstr "SEVİYE"
 
-msgid ""
-"Comma-separated list of category_name:level pairs to set specific levels for "
-"the individual categories. Example: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
-msgstr ""
-"Ayrı sınıfların belirli seviyeleri için sınıf_ismi:seviye çiftlerinin virgül "
-"ile ayrılmış listesi. Örnek: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
+#: gst/gst.c:264
+msgid "Comma-separated list of category_name:level pairs to set specific levels for the individual categories. Example: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
+msgstr "Ayrı sınıfların belirli seviyeleri için sınıf_ismi:seviye çiftlerinin virgül ile ayrılmış listesi. Örnek: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
 
+#: gst/gst.c:267
 msgid "LIST"
 msgstr "LİSTE"
 
+#: gst/gst.c:269
 msgid "Disable colored debugging output"
 msgstr "Renkli hata ayıklama çıktısını kapat"
 
-msgid ""
-"Changes coloring mode of the debug log. Possible modes: off, on, disable, "
-"auto, unix"
-msgstr ""
-"Hata ayıklama günlüklerini renklendirme kipini değiştirir. Olası kipler: "
-"kapalı, açık, devredışı, otomatik, unix"
+#: gst/gst.c:273
+msgid "Changes coloring mode of the debug log. Possible modes: off, on, disable, auto, unix"
+msgstr "Hata ayıklama günlüklerini renklendirme kipini değiştirir. Olası kipler: kapalı, açık, devredışı, otomatik, unix"
 
+#: gst/gst.c:277
 msgid "Disable debugging"
 msgstr "Hata ayıklamayı kapat"
 
+#: gst/gst.c:281
 msgid "Enable verbose plugin loading diagnostics"
 msgstr "Ayrıntılı eklenti yükleme detaylarını etkinleştir"
 
+#: gst/gst.c:285
 msgid "Colon-separated paths containing plugins"
 msgstr "Eklentileri içeren iki nokta üst üste ile ayrılmış yollar"
 
+#: gst/gst.c:285
 msgid "PATHS"
 msgstr "YOLLAR"
 
-msgid ""
-"Comma-separated list of plugins to preload in addition to the list stored in "
-"environment variable GST_PLUGIN_PATH"
-msgstr ""
-"Çevre değişkeni GST_PLUGIN_PATH içinde saklanan listeye ek olarak önceden "
-"yüklenecek virgün ile ayrılmış eklenti listesi"
+#: gst/gst.c:288
+msgid "Comma-separated list of plugins to preload in addition to the list stored in environment variable GST_PLUGIN_PATH"
+msgstr "Çevre değişkeni GST_PLUGIN_PATH içinde saklanan listeye ek olarak önceden yüklenecek virgün ile ayrılmış eklenti listesi"
 
+#: gst/gst.c:290
 msgid "PLUGINS"
 msgstr "EKLENTİLER"
 
+#: gst/gst.c:293
 msgid "Disable trapping of segmentation faults during plugin loading"
 msgstr "Eklenti yüklenirken kesimleme hatalarını yakalamayı kapat"
 
+#: gst/gst.c:298
 msgid "Disable updating the registry"
 msgstr "Kayıt defteri güncellemeyi devre dışı bırak"
 
+#: gst/gst.c:303
 msgid "Disable spawning a helper process while scanning the registry"
-msgstr ""
-"Kayıt defteri taranırken yardımcı bir işlem oluşturmayı devre dışı bırak"
+msgstr "Kayıt defteri taranırken yardımcı bir işlem oluşturmayı devre dışı bırak"
 
+#: gst/gst.c:308
 msgid "GStreamer Options"
 msgstr "GStreamer Seçenekleri"
 
+#: gst/gst.c:309
 msgid "Show GStreamer Options"
 msgstr "GStreamer Seçeneklerini Göster"
 
+#: gst/gst.c:1012
 msgid "Unknown option"
 msgstr "Bilinmeyen seçenek"
 
+#: gst/gsterror.c:130
 msgid "GStreamer encountered a general core library error."
 msgstr "GStreamer genel temel kütüphane hatası ile karşılaştı."
 
-msgid ""
-"GStreamer developers were too lazy to assign an error code to this error."
-msgstr ""
-"GStreamer geliştiricileri bu hata için bir hata kodu atamaya üşenmişler."
+#: gst/gsterror.c:132 gst/gsterror.c:174 gst/gsterror.c:198 gst/gsterror.c:240
+msgid "GStreamer developers were too lazy to assign an error code to this error."
+msgstr "GStreamer geliştiricileri bu hata için bir hata kodu atamaya üşenmişler."
 
+#: gst/gsterror.c:135
 msgid "Internal GStreamer error: code not implemented."
 msgstr "İç GStreamer hatası: kod tamamlanmamış."
 
-msgid ""
-"GStreamer error: state change failed and some element failed to post a "
-"proper error message with the reason for the failure."
-msgstr ""
-"GStreamer hatası: durum değişikliği başarısız oldu ve bazı öge başarısızlık "
-"nedeni ile ilgili uygun bir hata iletisi göndermede başarısız oldu."
+#: gst/gsterror.c:137
+msgid "GStreamer error: state change failed and some element failed to post a proper error message with the reason for the failure."
+msgstr "GStreamer hatası: durum değişikliği başarısız oldu ve bazı öge başarısızlık nedeni ile ilgili uygun bir hata iletisi göndermede başarısız oldu."
 
+#: gst/gsterror.c:140
 msgid "Internal GStreamer error: pad problem."
 msgstr "Dahili GStreamer hatası: dolgu problemi."
 
+#: gst/gsterror.c:142
 msgid "Internal GStreamer error: thread problem."
 msgstr "İç GStreamer hatası: iş parçacığı sorunu."
 
+#: gst/gsterror.c:144
 msgid "GStreamer error: negotiation problem."
 msgstr "İç GStreamer hatası: uzlaşma sorunu."
 
+#: gst/gsterror.c:146
 msgid "Internal GStreamer error: event problem."
 msgstr "İç GStreamer hatası: olay sorunu."
 
+#: gst/gsterror.c:148
 msgid "Internal GStreamer error: seek problem."
 msgstr "İç GStreamer hatası: arama sorunu."
 
+#: gst/gsterror.c:150
 msgid "Internal GStreamer error: caps problem."
 msgstr "İç GStreamer hatası: kapasite sorunu."
 
+#: gst/gsterror.c:152
 msgid "Internal GStreamer error: tag problem."
 msgstr "İç GStreamer hatası: etiket sorunu."
 
+#: gst/gsterror.c:154
 msgid "Your GStreamer installation is missing a plug-in."
 msgstr "GStreamer kurulumunuzda bir eklenti eksik."
 
+#: gst/gsterror.c:156
 msgid "GStreamer error: clock problem."
 msgstr "GStreamer hatası: saat sorunu."
 
-msgid ""
-"This application is trying to use GStreamer functionality that has been "
-"disabled."
-msgstr ""
-"Bu uygulama devre dışı bırakılmış GStreamer işlevini kullanmayı deniyor."
+#: gst/gsterror.c:158
+msgid "This application is trying to use GStreamer functionality that has been disabled."
+msgstr "Bu uygulama devre dışı bırakılmış GStreamer işlevini kullanmayı deniyor."
 
+#: gst/gsterror.c:172
 msgid "GStreamer encountered a general supporting library error."
 msgstr "GStreamer genel kütüphane destekleme hatası ile karşılaştı."
 
+#: gst/gsterror.c:177
 msgid "Could not initialize supporting library."
 msgstr "Destekleyici kütüphane başlatılamadı."
 
+#: gst/gsterror.c:179
 msgid "Could not close supporting library."
 msgstr "Destekleyici kütüphane kapatılamadı."
 
+#: gst/gsterror.c:181
 msgid "Could not configure supporting library."
 msgstr "Desteklenen kütüphane yapılandırılamadı."
 
+#: gst/gsterror.c:183
 msgid "Encoding error."
 msgstr "Kodlama hatası."
 
+#: gst/gsterror.c:196
 msgid "GStreamer encountered a general resource error."
 msgstr "GStreamer genel bir kaynak hatası ile karşılaştı."
 
+#: gst/gsterror.c:201
 msgid "Resource not found."
 msgstr "Kaynak bulunamadı."
 
+#: gst/gsterror.c:203
 msgid "Resource busy or not available."
 msgstr "Kaynak meşgul veya ulaşılabilir değil."
 
+#: gst/gsterror.c:205
 msgid "Could not open resource for reading."
 msgstr "Okuma için kaynak açılamadı."
 
+#: gst/gsterror.c:207
 msgid "Could not open resource for writing."
 msgstr "Yazma için kaynak açılamadı."
 
+#: gst/gsterror.c:209
 msgid "Could not open resource for reading and writing."
 msgstr "Okuma ve yazma için kaynak açılamadı."
 
+#: gst/gsterror.c:211
 msgid "Could not close resource."
 msgstr "Kaynak kapatılamadı."
 
+#: gst/gsterror.c:213
 msgid "Could not read from resource."
 msgstr "Kaynaktan okunamadı."
 
+#: gst/gsterror.c:215
 msgid "Could not write to resource."
 msgstr "Kaynağa yazılamadı."
 
+#: gst/gsterror.c:217
 msgid "Could not perform seek on resource."
 msgstr "Kaynak üzerinde atlama yapılamadı."
 
+#: gst/gsterror.c:219
 msgid "Could not synchronize on resource."
 msgstr "Kaynak eşzamanlandırılamadı."
 
+#: gst/gsterror.c:221
 msgid "Could not get/set settings from/on resource."
 msgstr "Kaynağa değerler atanamadı ya da alınamadı."
 
+#: gst/gsterror.c:223
 msgid "No space left on the resource."
 msgstr "Kaynakta boş alan kalmadı."
 
+#: gst/gsterror.c:225
 msgid "Not authorized to access resource."
 msgstr "Kaynağa erişmek için yetkili değil."
 
+#: gst/gsterror.c:238
 msgid "GStreamer encountered a general stream error."
 msgstr "GStreamer genel bir akış hatası ile karşılaştı."
 
+#: gst/gsterror.c:243
 msgid "Element doesn't implement handling of this stream. Please file a bug."
-msgstr ""
-"Öğe bu akımın işlemesini gerçekleştiremiyor. Lütfen hata bildiriminde "
-"bulunun."
+msgstr "Öğe bu akımın işlemesini gerçekleştiremiyor. Lütfen hata bildiriminde bulunun."
 
+#: gst/gsterror.c:246
 msgid "Could not determine type of stream."
 msgstr "Akım türü belirlenemedi."
 
+#: gst/gsterror.c:248
 msgid "The stream is of a different type than handled by this element."
 msgstr "Akım bu öğe tarafından işlenen türden farklı bir türde."
 
+#: gst/gsterror.c:251
 msgid "There is no codec present that can handle the stream's type."
 msgstr "Akım türünü işleyebilecek kodek bulunmuyor."
 
+#: gst/gsterror.c:253
 msgid "Could not decode stream."
 msgstr "Akım çözümlenemedi."
 
+#: gst/gsterror.c:255
 msgid "Could not encode stream."
 msgstr "Akım kodlanamadı."
 
+#: gst/gsterror.c:257
 msgid "Could not demultiplex stream."
 msgstr "Akım çoklaması geriye alınamadı."
 
+#: gst/gsterror.c:259
 msgid "Could not multiplex stream."
 msgstr "Akım çoklandırılamadı."
 
+#: gst/gsterror.c:261
 msgid "The stream is in the wrong format."
 msgstr "Akış yanlış biçimdedir."
 
+#: gst/gsterror.c:263
 msgid "The stream is encrypted and decryption is not supported."
 msgstr "Akış şifrelidir ve şifre açma desteklenmiyor."
 
-msgid ""
-"The stream is encrypted and can't be decrypted because no suitable key has "
-"been supplied."
-msgstr ""
-"Akış şifrelidir ve şifresi açılamaz çünkü uygun anahtar temin edilmemiştir."
+#: gst/gsterror.c:265
+msgid "The stream is encrypted and can't be decrypted because no suitable key has been supplied."
+msgstr "Akış şifrelidir ve şifresi açılamaz çünkü uygun anahtar temin edilmemiştir."
 
+#: gst/gsterror.c:305
 #, c-format
 msgid "No error message for domain %s."
 msgstr "%s etki alanı için hiç hata iletisi yok."
 
+#: gst/gsterror.c:313
 #, c-format
 msgid "No standard error message for domain %s and code %d."
 msgstr "%s etki alanı ve %d kodu için standart hata iletisi yok."
 
+#: gst/gstpipeline.c:562
 msgid "Selected clock cannot be used in pipeline."
 msgstr "Seçilen saat ardışık düzende kulanılamıyor."
 
+#: gst/gstregistry.c:1694
 #, c-format
 msgid "Error writing registry cache to %s: %s"
 msgstr "%s konumuna kayıt defteri önbelleğini yazmada hata: %s"
 
+#: gst/gsttaglist.c:108
 msgid "title"
 msgstr "başlık"
 
+#: gst/gsttaglist.c:108
 msgid "commonly used title"
 msgstr "yaygın olarak kullanılan başlık"
 
+#: gst/gsttaglist.c:111
 msgid "title sortname"
 msgstr "sıralamaadı başlığı"
 
+#: gst/gsttaglist.c:111
 msgid "commonly used title for sorting purposes"
 msgstr "amaçları sıralamak için yaygın olarak kullanılan başlık"
 
+#: gst/gsttaglist.c:114
 msgid "artist"
 msgstr "sanatçı"
 
+#: gst/gsttaglist.c:115
 msgid "person(s) responsible for the recording"
-msgstr "kayıttan sorumlu olan kişi ya da kişiler"
+msgstr "kayıttan sorumlu olan kişi(ler)"
 
+#: gst/gsttaglist.c:119
 msgid "artist sortname"
 msgstr "sanatçı sıralamadı"
 
+#: gst/gsttaglist.c:120
 msgid "person(s) responsible for the recording for sorting purposes"
 msgstr "sıralama amaçlı kayıttan sorumlu kişi(ler)"
 
+#: gst/gsttaglist.c:123
 msgid "album"
 msgstr "albüm"
 
+#: gst/gsttaglist.c:124
 msgid "album containing this data"
 msgstr "bu bilgiyi içeren albüm"
 
+#: gst/gsttaglist.c:127
 msgid "album sortname"
 msgstr "albüm sıralama adı"
 
+#: gst/gsttaglist.c:128
 msgid "album containing this data for sorting purposes"
 msgstr "sıralama amaçlı bu verileri içeren albüm"
 
+#: gst/gsttaglist.c:131
 msgid "album artist"
 msgstr "albüm sanatçısı"
 
+#: gst/gsttaglist.c:132
 msgid "The artist of the entire album, as it should be displayed"
 msgstr "Gerektiği gibi gösterilen tüm albümlerin sanatçıları"
 
+#: gst/gsttaglist.c:136
 msgid "album artist sortname"
 msgstr "albüm sanatçıları sıralamaadı"
 
+#: gst/gsttaglist.c:137
 msgid "The artist of the entire album, as it should be sorted"
 msgstr "Gerektiği gibi sıralanan tüm albümlerin sanatçıları"
 
+#: gst/gsttaglist.c:139
 msgid "date"
 msgstr "tarih"
 
+#: gst/gsttaglist.c:139
 msgid "date the data was created (as a GDate structure)"
 msgstr "tarih verisi oluşturuldu (bir GDate yapısı olarak)"
 
+#: gst/gsttaglist.c:141
 msgid "datetime"
 msgstr "tarihsaat"
 
+#: gst/gsttaglist.c:142
 msgid "date and time the data was created (as a GstDateTime structure)"
 msgstr "tarih ve saat verisi oluşturuldu (bir GstDateTime yapısı olarak)"
 
+#: gst/gsttaglist.c:146
 msgid "genre"
 msgstr "tür"
 
+#: gst/gsttaglist.c:147
 msgid "genre this data belongs to"
 msgstr "bu verinin ait olduğu tür"
 
+#: gst/gsttaglist.c:150
 msgid "comment"
 msgstr "yorum"
 
+#: gst/gsttaglist.c:151
 msgid "free text commenting the data"
 msgstr "veriyi yorumlayan serbest metin"
 
+#: gst/gsttaglist.c:154
 msgid "extended comment"
 msgstr "genişletilmiş yorum"
 
+#: gst/gsttaglist.c:155
 msgid "free text commenting the data in key=value or key[en]=comment form"
 msgstr "anahtar=deger ya da anahtar[en]=yorum biçimindeki metin yorumlama"
 
+#: gst/gsttaglist.c:159
 msgid "track number"
 msgstr "parça numarası"
 
+#: gst/gsttaglist.c:160
 msgid "track number inside a collection"
 msgstr "kolleksiyon içindeki parça numarası"
 
+#: gst/gsttaglist.c:163
 msgid "track count"
 msgstr "parça sayısı"
 
+#: gst/gsttaglist.c:164
 msgid "count of tracks inside collection this track belongs to"
 msgstr "bu parçanın ait olduğu kolleksiyonun parça sayısı"
 
+#: gst/gsttaglist.c:168
 msgid "disc number"
 msgstr "disk numarası"
 
+#: gst/gsttaglist.c:169
 msgid "disc number inside a collection"
 msgstr "kolleksiyon içindeki disk numarası"
 
+#: gst/gsttaglist.c:172
 msgid "disc count"
 msgstr "disk sayısı"
 
+#: gst/gsttaglist.c:173
 msgid "count of discs inside collection this disc belongs to"
 msgstr "bu diskin ait olduğu kolleksiyondaki disklerin sayısı"
 
+#: gst/gsttaglist.c:177
 msgid "location"
 msgstr "konum"
 
-msgid ""
-"Origin of media as a URI (location, where the original of the file or stream "
-"is hosted)"
-msgstr ""
-"URI olarak ortam kaynağı (dosyanın özgün konumu ya da akışın barındırıldığı "
-"konum)"
+#: gst/gsttaglist.c:177
+msgid "Origin of media as a URI (location, where the original of the file or stream is hosted)"
+msgstr "URI olarak ortam kaynağı (dosyanın özgün konumu ya da akışın barındırıldığı konum)"
 
+#: gst/gsttaglist.c:182
 msgid "homepage"
 msgstr "anasayfa"
 
+#: gst/gsttaglist.c:183
 msgid "Homepage for this media (i.e. artist or movie homepage)"
 msgstr "Bu ortamın anasayfası (yani sanatçı ya da film anasayfası)"
 
+#: gst/gsttaglist.c:186
 msgid "description"
 msgstr "tanım"
 
+#: gst/gsttaglist.c:187
 msgid "short text describing the content of the data"
 msgstr "verinin içeriğini tanımlayan kısa metin"
 
+#: gst/gsttaglist.c:190
 msgid "version"
 msgstr "sürüm"
 
+#: gst/gsttaglist.c:190
 msgid "version of this data"
 msgstr "bu verinin sürümü"
 
+#: gst/gsttaglist.c:192
 msgid "ISRC"
 msgstr "ISRC"
 
+#: gst/gsttaglist.c:194
 msgid "International Standard Recording Code - see http://www.ifpi.org/isrc/"
-msgstr ""
-"Uluslararası Standart Kayıt Kodu - http://www.ifpi.org/isrc/ adresine bakın"
+msgstr "Uluslararası Standart Kayıt Kodu - http://www.ifpi.org/isrc/ adresine bakın"
 
+#: gst/gsttaglist.c:198
 msgid "organization"
 msgstr "kurum"
 
+#: gst/gsttaglist.c:201
 msgid "copyright"
 msgstr "telif hakkı"
 
+#: gst/gsttaglist.c:201
 msgid "copyright notice of the data"
 msgstr "verinin telif hakkı notu"
 
+#: gst/gsttaglist.c:203
 msgid "copyright uri"
 msgstr "telif hakkı uri"
 
+#: gst/gsttaglist.c:204
 msgid "URI to the copyright notice of the data"
 msgstr "Verinin telif hakkı bildirimi için URI"
 
+#: gst/gsttaglist.c:206
 msgid "encoded by"
 msgstr "kodlayan"
 
+#: gst/gsttaglist.c:206
 msgid "name of the encoding person or organization"
 msgstr "kodlayan kişi ya da organizasyonun adı"
 
+#: gst/gsttaglist.c:210
 msgid "contact"
 msgstr "iletişim"
 
+#: gst/gsttaglist.c:210
 msgid "contact information"
 msgstr "iletişim bilgisi"
 
+#: gst/gsttaglist.c:212
 msgid "license"
 msgstr "lisans"
 
+#: gst/gsttaglist.c:212
 msgid "license of data"
 msgstr "verinin lisansı"
 
+#: gst/gsttaglist.c:214
 msgid "license uri"
 msgstr "lisans uri"
 
+#: gst/gsttaglist.c:215
 msgid "URI to the license of the data"
 msgstr "Verinin lisansı için URI"
 
+#: gst/gsttaglist.c:218
 msgid "performer"
 msgstr "icra eden"
 
+#: gst/gsttaglist.c:219
 msgid "person(s) performing"
-msgstr "icra eden kişi"
+msgstr "icra eden kişi(ler)"
 
+#: gst/gsttaglist.c:222
 msgid "composer"
 msgstr "düzenleyici"
 
+#: gst/gsttaglist.c:223
 msgid "person(s) who composed the recording"
 msgstr "kayıt oluşturan kişi(ler)"
 
+#: gst/gsttaglist.c:227
 msgid "conductor"
 msgstr "kondüktör"
 
+#: gst/gsttaglist.c:228
 msgid "conductor/performer refinement"
 msgstr "kondüktör/performans iyileştirmesi"
 
+#: gst/gsttaglist.c:231
 msgid "duration"
 msgstr "süre"
 
+#: gst/gsttaglist.c:231
 msgid "length in GStreamer time units (nanoseconds)"
 msgstr "GStreamer zaman birimi (nano saniye) olarak uzunluk"
 
+#: gst/gsttaglist.c:234
 msgid "codec"
 msgstr "kodek"
 
+#: gst/gsttaglist.c:235
 msgid "codec the data is stored in"
 msgstr "verinin saklandığı kodek"
 
+#: gst/gsttaglist.c:238
 msgid "video codec"
 msgstr "video kodeki"
 
+#: gst/gsttaglist.c:238
 msgid "codec the video data is stored in"
 msgstr "videonun saklandığı kodek"
 
+#: gst/gsttaglist.c:241
 msgid "audio codec"
 msgstr "ses kodeki"
 
+#: gst/gsttaglist.c:241
 msgid "codec the audio data is stored in"
 msgstr "ses verisinin saklandığı kodek"
 
+#: gst/gsttaglist.c:244
 msgid "subtitle codec"
 msgstr "altyazı kodlayıcı-kod çözücüsü"
 
+#: gst/gsttaglist.c:244
 msgid "codec the subtitle data is stored in"
 msgstr "altyazı verisinin saklandığı kodlayıcı-kod çözücü"
 
+#: gst/gsttaglist.c:246
 msgid "container format"
 msgstr "kap biçimi"
 
+#: gst/gsttaglist.c:247
 msgid "container format the data is stored in"
 msgstr "verilerin saklandığı kap biçemi"
 
+#: gst/gsttaglist.c:249
 msgid "bitrate"
 msgstr "örnekleme hızı"
 
+#: gst/gsttaglist.c:249
 msgid "exact or average bitrate in bits/s"
 msgstr "bit/s olarak ortalama veya kesin örnekleme hızı"
 
+#: gst/gsttaglist.c:251
 msgid "nominal bitrate"
 msgstr "nominal örnekleme hızı"
 
+#: gst/gsttaglist.c:251
 msgid "nominal bitrate in bits/s"
 msgstr "bit/s olarak nominal örnekleme hızı"
 
+#: gst/gsttaglist.c:253
 msgid "minimum bitrate"
 msgstr "asgari örnekleme hızı"
 
+#: gst/gsttaglist.c:253
 msgid "minimum bitrate in bits/s"
 msgstr "bit/s olarak asgari örnekleme hızı"
 
+#: gst/gsttaglist.c:255
 msgid "maximum bitrate"
 msgstr "azami örnekleme hızı"
 
+#: gst/gsttaglist.c:255
 msgid "maximum bitrate in bits/s"
 msgstr "bit/s olarak azami örnekleme hızı"
 
+#: gst/gsttaglist.c:258
 msgid "encoder"
 msgstr "kodlayıcı"
 
+#: gst/gsttaglist.c:258
 msgid "encoder used to encode this stream"
 msgstr "bu akımı kodlarken kullanılacak kodlayıcı"
 
+#: gst/gsttaglist.c:261
 msgid "encoder version"
 msgstr "kodlayıcı sürümü"
 
+#: gst/gsttaglist.c:262
 msgid "version of the encoder used to encode this stream"
 msgstr "bu akımı kodlarken kullanılan kodlayıcının sürümü"
 
+#: gst/gsttaglist.c:264
 msgid "serial"
 msgstr "seri numarası"
 
+#: gst/gsttaglist.c:264
 msgid "serial number of track"
 msgstr "parçanın seri numarası"
 
+#: gst/gsttaglist.c:266
 msgid "replaygain track gain"
 msgstr "tekrarkazanç parça kazancı"
 
+#: gst/gsttaglist.c:266
 msgid "track gain in db"
 msgstr "db olarak parça kazancı"
 
+#: gst/gsttaglist.c:268
 msgid "replaygain track peak"
 msgstr "tekrarkazanç parça üst sınırı"
 
+#: gst/gsttaglist.c:268
 msgid "peak of the track"
 msgstr "parçanın üst sınırı"
 
+#: gst/gsttaglist.c:270
 msgid "replaygain album gain"
 msgstr "tekrarkazanç albüm kazancı"
 
+#: gst/gsttaglist.c:270
 msgid "album gain in db"
 msgstr "db olarak albüm kazancı"
 
+#: gst/gsttaglist.c:272
 msgid "replaygain album peak"
 msgstr "tekrarkazanç albüm üst sınırı"
 
+#: gst/gsttaglist.c:272
 msgid "peak of the album"
 msgstr "albüm üst sınırı"
 
+#: gst/gsttaglist.c:274
 msgid "replaygain reference level"
 msgstr "yeniden kazanç kaynak seviyesi"
 
+#: gst/gsttaglist.c:275
 msgid "reference level of track and album gain values"
 msgstr "şarkı ve albüm kazanç değerlerinin kaynak seviyesi"
 
+#: gst/gsttaglist.c:277
 msgid "language code"
 msgstr "dil kodu"
 
+#: gst/gsttaglist.c:278
 msgid "language code for this stream, conforming to ISO-639-1 or ISO-639-2"
 msgstr "bu akış için ISO-639-1 ya da ISO-639-2 standartlarına uygun dil kodu"
 
+#: gst/gsttaglist.c:281
 msgid "language name"
 msgstr "dil adı"
 
+#: gst/gsttaglist.c:282
 msgid "freeform name of the language this stream is in"
 msgstr "bu akıştaki dilin serbest biçem adı"
 
+#: gst/gsttaglist.c:284
 msgid "image"
 msgstr "görüntü"
 
+#: gst/gsttaglist.c:284
 msgid "image related to this stream"
 msgstr "bu akış ile ilişkili görüntü"
 
 #. TRANSLATORS: 'preview image' = image that shows a preview of the full image
+#: gst/gsttaglist.c:288
 msgid "preview image"
 msgstr "görüntüyü önizle"
 
+#: gst/gsttaglist.c:288
 msgid "preview image related to this stream"
 msgstr "bu akış ile ilişkili görüntüyü önizle"
 
+#: gst/gsttaglist.c:290
 msgid "attachment"
 msgstr "ek"
 
+#: gst/gsttaglist.c:290
 msgid "file attached to this stream"
 msgstr "bu akışa dosya eklendi"
 
+#: gst/gsttaglist.c:293
 msgid "beats per minute"
 msgstr "dakikadaki vuruş"
 
+#: gst/gsttaglist.c:294
 msgid "number of beats per minute in audio"
 msgstr "seste dakikadaki vuruş sayısı"
 
+#: gst/gsttaglist.c:296
 msgid "keywords"
 msgstr "anahtar sözcükler"
 
+#: gst/gsttaglist.c:296
 msgid "comma separated keywords describing the content"
 msgstr "içeriği tanımlayan virgülle ayrılmış anahtar sözcükler"
 
+#: gst/gsttaglist.c:299
 msgid "geo location name"
 msgstr "coğrafi konum adı"
 
-msgid ""
-"human readable descriptive location of where the media has been recorded or "
-"produced"
+#: gst/gsttaglist.c:300
+msgid "human readable descriptive location of where the media has been recorded or produced"
 msgstr "ortamın kaydedildiği ya da üretildiği okunabilir açıklayıcı konum"
 
+#: gst/gsttaglist.c:303
 msgid "geo location latitude"
 msgstr "coğrafi konum enlemi"
 
-msgid ""
-"geo latitude location of where the media has been recorded or produced in "
-"degrees according to WGS84 (zero at the equator, negative values for "
-"southern latitudes)"
-msgstr ""
-"WGS84 yerlem derecesinde (ekvatorda sıfır, güney enlemler için negatif "
-"değerler) üretilen ya da kaydedilen ortamın coğrafik enlem konumu"
+#: gst/gsttaglist.c:304
+msgid "geo latitude location of where the media has been recorded or produced in degrees according to WGS84 (zero at the equator, negative values for southern latitudes)"
+msgstr "WGS84 yerlem derecesinde (ekvatorda sıfır, güney enlemler için negatif değerler) üretilen ya da kaydedilen ortamın coğrafik enlem konumu"
 
+#: gst/gsttaglist.c:308
 msgid "geo location longitude"
 msgstr "coğrafi konum boylamı"
 
-msgid ""
-"geo longitude location of where the media has been recorded or produced in "
-"degrees according to WGS84 (zero at the prime meridian in Greenwich/UK,  "
-"negative values for western longitudes)"
-msgstr ""
-"WGS84 yerlem derecesinde (Greenwich/UK baş meridyeninde sıfır,  batı "
-"boylamları için negatif değerler) üretilen ya da kaydedilen ortamın coğrafik "
-"boylam konumu"
+#: gst/gsttaglist.c:309
+msgid "geo longitude location of where the media has been recorded or produced in degrees according to WGS84 (zero at the prime meridian in Greenwich/UK,  negative values for western longitudes)"
+msgstr "WGS84 yerlem derecesinde (Greenwich/UK baş meridyeninde sıfır,  batı boylamları için negatif değerler) üretilen ya da kaydedilen ortamın coğrafik boylam konumu"
 
+#: gst/gsttaglist.c:313
 msgid "geo location elevation"
 msgstr "coğrafi konum yüksekliği"
 
-msgid ""
-"geo elevation of where the media has been recorded or produced in meters "
-"according to WGS84 (zero is average sea level)"
-msgstr ""
-"WGS84 yerlem ölçüsünde (ortalama deniz seviyesi sıfırdır) üretilen ya da "
-"kaydedilen ortamın coğrafik yüksekliği"
+#: gst/gsttaglist.c:314
+msgid "geo elevation of where the media has been recorded or produced in meters according to WGS84 (zero is average sea level)"
+msgstr "WGS84 yerlem ölçüsünde (ortalama deniz seviyesi sıfırdır) üretilen ya da kaydedilen ortamın coğrafik yüksekliği"
 
+#: gst/gsttaglist.c:317
 msgid "geo location country"
 msgstr "ülke coğrafi konumu"
 
+#: gst/gsttaglist.c:318
 msgid "country (english name) where the media has been recorded or produced"
 msgstr "ortamın üretildiği ya da kaydedildiği ülke (ingilizce adı)"
 
+#: gst/gsttaglist.c:321
 msgid "geo location city"
 msgstr "şehir coğrafi konumu"
 
+#: gst/gsttaglist.c:322
 msgid "city (english name) where the media has been recorded or produced"
 msgstr "ortamın kaydedildiği ya da üretildiği şehir (ingilizce adı)"
 
+#: gst/gsttaglist.c:325
 msgid "geo location sublocation"
 msgstr "bölge coğrafi konumu"
 
-msgid ""
-"a location within a city where the media has been produced or created (e.g. "
-"the neighborhood)"
-msgstr ""
-"ortamın üretildiği ya da oluşturulduğu şehirdeki bir konum (örneğin semt)"
+#: gst/gsttaglist.c:326
+msgid "a location within a city where the media has been produced or created (e.g. the neighborhood)"
+msgstr "ortamın üretildiği ya da oluşturulduğu şehirdeki bir konum (örneğin semt)"
 
+#: gst/gsttaglist.c:329
 msgid "geo location horizontal error"
 msgstr "coğrafi yatay konum hatası"
 
+#: gst/gsttaglist.c:330
 msgid "expected error of the horizontal positioning measures (in meters)"
 msgstr "yatay konumlandırma ölçümlerinde beklenen hata (metre cinsinden)"
 
+#: gst/gsttaglist.c:333
 msgid "geo location movement speed"
 msgstr "coğrafi konum hareket hızı"
 
-msgid ""
-"movement speed of the capturing device while performing the capture in m/s"
+#: gst/gsttaglist.c:334
+msgid "movement speed of the capturing device while performing the capture in m/s"
 msgstr "yakalama aygıtının m/s cinsinden yakalama yaparken ki hareket hızı"
 
+#: gst/gsttaglist.c:337
 msgid "geo location movement direction"
 msgstr "coğrafi konum hareket doğrultusu"
 
-msgid ""
-"indicates the movement direction of the device performing the capture of a "
-"media. It is represented as degrees in floating point representation, 0 "
-"means the geographic north, and increases clockwise"
-msgstr ""
-"Bir medyada yakalama yapan aygıtın haraket yönünü belirtir. Kayan noktalı "
-"sayı olarak, derece biçiminde gösterilir, 0 çoğrafik kuzeydir ve saat "
-"yönünde belirtilir"
+#: gst/gsttaglist.c:338
+msgid "indicates the movement direction of the device performing the capture of a media. It is represented as degrees in floating point representation, 0 means the geographic north, and increases clockwise"
+msgstr "Bir medyada yakalama yapan aygıtın haraket yönünü belirtir. Kayan noktalı sayı olarak, derece biçiminde gösterilir, 0 çoğrafik kuzeydir ve saat yönünde belirtilir"
 
+#: gst/gsttaglist.c:343
 msgid "geo location capture direction"
 msgstr "coğrafi konum yakalama açıklaması"
 
-msgid ""
-"indicates the direction the device is pointing to when capturing  a media. "
-"It is represented as degrees in floating point  representation, 0 means the "
-"geographic north, and increases clockwise"
-msgstr ""
-"Bir medya yakalanırken işaret edilen aygıtın yönünü belirtir. Kayan noktalı "
-"sayı olarak, derece biçiminde gösterilir, 0 çoğrafik kuzeydir ve saat "
-"yönünde belirtilir"
+#: gst/gsttaglist.c:344
+msgid "indicates the direction the device is pointing to when capturing  a media. It is represented as degrees in floating point  representation, 0 means the geographic north, and increases clockwise"
+msgstr "Bir medya yakalanırken işaret edilen aygıtın yönünü belirtir. Kayan noktalı sayı olarak, derece biçiminde gösterilir, 0 çoğrafik kuzeydir ve saat yönünde belirtilir"
 
 #. TRANSLATORS: 'show name' = 'TV/radio/podcast show name' here
+#: gst/gsttaglist.c:350
 msgid "show name"
 msgstr "adı göster"
 
+#: gst/gsttaglist.c:351
 msgid "Name of the tv/podcast/series show the media is from"
 msgstr "Ortamın tv/podcast/serie den birisinin adı"
 
 #. TRANSLATORS: 'show sortname' = 'TV/radio/podcast show name as used for sorting purposes' here
+#: gst/gsttaglist.c:356
 msgid "show sortname"
 msgstr "sıralamaadını göster"
 
-msgid ""
-"Name of the tv/podcast/series show the media is from, for sorting purposes"
+#: gst/gsttaglist.c:357
+msgid "Name of the tv/podcast/series show the media is from, for sorting purposes"
 msgstr "Ortamın tv/podcast/serie den birisinin adı, sıralama için"
 
+#: gst/gsttaglist.c:360
 msgid "episode number"
 msgstr "bölüm numarası"
 
+#: gst/gsttaglist.c:361
 msgid "The episode number in the season the media is part of"
 msgstr "Ortamın parçası olduğu sezonun bölüm numarası"
 
+#: gst/gsttaglist.c:364
 msgid "season number"
 msgstr "oturum numarası"
 
+#: gst/gsttaglist.c:365
 msgid "The season number of the show the media is part of"
 msgstr "Ortamın parçası olduğu sezon numarası"
 
+#: gst/gsttaglist.c:368
 msgid "lyrics"
 msgstr "şarkı sözleri"
 
+#: gst/gsttaglist.c:368
 msgid "The lyrics of the media, commonly used for songs"
 msgstr "Ortamın şarkı sözleri, genellikle şarkılar için kullanılır"
 
+#: gst/gsttaglist.c:371
 msgid "composer sortname"
 msgstr "besteci sıralama adı"
 
+#: gst/gsttaglist.c:372
 msgid "person(s) who composed the recording, for sorting purposes"
 msgstr "sıralama amaçlı kayıt oluşturan kişi(ler)"
 
+#: gst/gsttaglist.c:374
 msgid "grouping"
 msgstr "gruplandırma"
 
-msgid ""
-"Groups related media that spans multiple tracks, like the different pieces "
-"of a concerto. It is a higher level than a track, but lower than an album"
-msgstr ""
-"Grup ilgili ortam çoklu şarkılar içerir, bir konçertonun farklı parçaları "
-"gibi. Bu şarkıdan daha üst seviyedir ancak albümden alt seviyedir"
+#: gst/gsttaglist.c:375
+msgid "Groups related media that spans multiple tracks, like the different pieces of a concerto. It is a higher level than a track, but lower than an album"
+msgstr "Grup ilgili ortam çoklu şarkılar içerir, bir konçertonun farklı parçaları gibi. Bu şarkıdan daha üst seviyedir ancak albümden alt seviyedir"
 
+#: gst/gsttaglist.c:379
 msgid "user rating"
 msgstr "kullanıcı değerlendirmesi"
 
-msgid ""
-"Rating attributed by a user. The higher the rank, the more the user likes "
-"this media"
-msgstr ""
-"Kullanıcı tarafından verilmiş puanlama. En yüksek puanlama, bir çok "
-"kullanıcı bu ortamı beğenmiş"
+#: gst/gsttaglist.c:380
+msgid "Rating attributed by a user. The higher the rank, the more the user likes this media"
+msgstr "Kullanıcı tarafından verilmiş puanlama. En yüksek puanlama, bir çok kullanıcı bu ortamı beğenmiş"
 
+#: gst/gsttaglist.c:383
 msgid "device manufacturer"
 msgstr "aygıt üreticisi"
 
+#: gst/gsttaglist.c:384
 msgid "Manufacturer of the device used to create this media"
 msgstr "Bu ortamı oluşturmak için kullanılan aygıt üreticisi"
 
+#: gst/gsttaglist.c:386
 msgid "device model"
 msgstr "aygıt modeli"
 
+#: gst/gsttaglist.c:387
 msgid "Model of the device used to create this media"
 msgstr "Bu ortamı oluşturmak için kullanılan aygıtın modeli"
 
+#: gst/gsttaglist.c:389
 msgid "application name"
 msgstr "uygulama adı"
 
+#: gst/gsttaglist.c:390
 msgid "Application used to create the media"
 msgstr "Bu ortamı oluşturmak için kullanılan uygulama"
 
+#: gst/gsttaglist.c:392
 msgid "application data"
 msgstr "uygulama verileri"
 
+#: gst/gsttaglist.c:393
 msgid "Arbitrary application data to be serialized into the media"
 msgstr "Ortamda serileştirilecek gelişigüzel uygulama verileri"
 
+#: gst/gsttaglist.c:395
 msgid "image orientation"
 msgstr "görüntü yönü"
 
+#: gst/gsttaglist.c:396
 msgid "How the image should be rotated or flipped before display"
 msgstr "Görüntü gösterilmeden önce nasıl döndürülmelidir ya da çevirilmelidir"
 
+#: gst/gsttaglist.c:399
 msgid "publisher"
 msgstr "yayımcı"
 
+#: gst/gsttaglist.c:400
 msgid "Name of the label or publisher"
 msgstr "Marka ya da yayımcının adı"
 
+#: gst/gsttaglist.c:403
 msgid "interpreted-by"
 msgstr "tarafından-yorumlanmış"
 
+#: gst/gsttaglist.c:404
 msgid "Information about the people behind a remix and similar interpretations"
 msgstr "Yeniden düzenleme ve benzer yorumların arkasındaki kişi hakkında bilgi"
 
+#: gst/gsttaglist.c:408
 msgid "midi-base-note"
 msgstr "midi-base-note"
 
+#: gst/gsttaglist.c:408
 msgid "Midi note number of the audio track."
 msgstr "Ses kaydının midi notu numarası."
 
+#: gst/gsttaglist.c:411
 msgid "private-data"
 msgstr "özel-veri"
 
+#: gst/gsttaglist.c:411
 msgid "Private data"
 msgstr "Özel veri"
 
+#: gst/gsttaglist.c:451
 msgid ", "
 msgstr ", "
 
+#: gst/gsturi.c:648
 #, c-format
 msgid "No URI handler for the %s protocol found"
 msgstr "%s protokolü için URI işleyicisi bulunamadı"
 
+#: gst/gsturi.c:823
 #, c-format
 msgid "URI scheme '%s' not supported"
 msgstr "URI şema '%s' desteklenmez"
 
+#: gst/gstutils.c:2632 tools/gst-launch.c:325
 #, c-format
 msgid "ERROR: from element %s: %s\n"
 msgstr "HATA: %s öğesinden: %s\n"
 
+#: gst/gstutils.c:2634 tools/gst-launch.c:327 tools/gst-launch.c:697
 #, c-format
 msgid ""
 "Additional debug info:\n"
@@ -843,349 +1010,422 @@ msgstr ""
 "Ek hata ayıklama bilgisi:\n"
 "%s\n"
 
+#: gst/parse/grammar.y:216
 #, c-format
 msgid "link has no source [sink=%s@%p]"
 msgstr "bağlantı kaynağı yok [alıcı=%s@%p]"
 
+#: gst/parse/grammar.y:221
 #, c-format
 msgid "link has no sink [source=%s@%p]"
 msgstr "bağlantı alış noktası yok [kaynak=%s@%p]"
 
+#: gst/parse/grammar.y:413
 #, c-format
 msgid "no property \"%s\" in element \"%s\""
 msgstr "\"%s\" öğesinde \"%s\" özelliği yok"
 
+#: gst/parse/grammar.y:454
 #, c-format
 msgid "could not set property \"%s\" in element \"%s\" to \"%s\""
 msgstr "\"%s\" öğesindeki \"%s\" özelliğine \"%s\" değeri atanamadı"
 
+#: gst/parse/grammar.y:507
 msgid "Delayed linking failed."
 msgstr "Gecikmeli bağlama başarısız oldu."
 
+#: gst/parse/grammar.y:719 gst/parse/grammar.y:724
 #, c-format
 msgid "could not link %s to %s, %s can't handle caps %s"
 msgstr "%s i %s e bağlanamadı, %s başlıklar işlenemiyor %s"
 
+#: gst/parse/grammar.y:729
 #, c-format
 msgid "could not link %s to %s, neither element can handle caps %s"
-msgstr "%s i %s e bağlanamadı, hiçbir başlık başlık öğesi işlenemiyor %s"
+msgstr "%s i %s e bağlanamadı, hiçbir başlık öğesi işlenemiyor %s"
 
+#: gst/parse/grammar.y:733
 #, c-format
 msgid "could not link %s to %s with caps %s"
 msgstr "%s, %s e %s başlıklar ile bağlanamadı"
 
+#: gst/parse/grammar.y:739
 #, c-format
 msgid "could not link %s to %s"
 msgstr "%s, %s'a bağlanamadı"
 
+#: gst/parse/grammar.y:816
 #, c-format
 msgid "no element \"%s\""
 msgstr "\"%s\" öğesi yok"
 
+#: gst/parse/grammar.y:877
 #, c-format
 msgid "unexpected reference \"%s\" - ignoring"
 msgstr "beklenmeyen kaynak \"%s\" - yoksayılıyor"
 
+#: gst/parse/grammar.y:883
 #, c-format
 msgid "unexpected pad-reference \"%s\" - ignoring"
 msgstr "beklenmedik dolgu-kaynağı \"%s\" - yoksayılıyor"
 
+#: gst/parse/grammar.y:915 gst/parse/grammar.y:924
 #, c-format
 msgid "could not parse caps \"%s\""
 msgstr "\"%s\" kabiliyetleri ayrıştırılamadı"
 
+#: gst/parse/grammar.y:952
 #, c-format
 msgid "no sink element for URI \"%s\""
-msgstr "\"%s\" URI'si için 'sink' öğesi yok"
+msgstr "\"%s\" URI'si için sink öğesi yok"
 
+#: gst/parse/grammar.y:971
 #, c-format
 msgid "no source element for URI \"%s\""
 msgstr "\"%s\" URI'si için kaynak öğesi yok"
 
+#: gst/parse/grammar.y:1061
 msgid "syntax error"
 msgstr "söz dizim hatası"
 
+#: gst/parse/grammar.y:1084
 #, c-format
 msgid "specified empty bin \"%s\", not allowed"
 msgstr "belirtilen boş ikili \"%s\", izin verilmedi"
 
+#: gst/parse/grammar.y:1094
 #, c-format
 msgid "no bin \"%s\", unpacking elements"
 msgstr "\"%s\" ikilisi yok, öge açılamıyor"
 
+#: gst/parse/grammar.y:1125
 msgid "empty pipeline not allowed"
 msgstr "boş boruhattına izin verilmiyor"
 
+#: libs/gst/base/gstbasesink.c:1210
 msgid "Pipeline construction is invalid, please add queues."
 msgstr "Ardışık düzen yapısı geçersiz, lütfen sıralar ekleyin."
 
+#: libs/gst/base/gstbasesink.c:3004
 msgid "A lot of buffers are being dropped."
 msgstr "Tampon belleklerin bir çoğu bırakılıyor."
 
+#: libs/gst/base/gstbasesink.c:3496
 msgid "Internal data flow problem."
 msgstr "İç veri akış sorunu."
 
+#: libs/gst/base/gstbasesink.c:4222 libs/gst/base/gstbasesrc.c:2708
 msgid "Internal data flow error."
 msgstr "İç veri akış hatası."
 
+#: libs/gst/base/gstbasesrc.c:2638
 msgid "Internal clock error."
 msgstr "İç saat hatası."
 
+#: libs/gst/base/gstbasesrc.c:2666 plugins/elements/gstdownloadbuffer.c:842
+#: plugins/elements/gstdownloadbuffer.c:1265
 msgid "Failed to map buffer."
 msgstr "Tampon eşleştirme başarısız."
 
+#: plugins/elements/gstcapsfilter.c:128
 msgid "Filter caps"
 msgstr "Büyük harfleri süz"
 
-msgid ""
-"Restrict the possible allowed capabilities (NULL means ANY). Setting this "
-"property takes a reference to the supplied GstCaps object."
-msgstr ""
-"İzin verilen yetenekleri kısıtla (NULL HİÇ anlamına gelir). Bu özelliklerin "
-"ayarlanması verilen GstCaps nesnesini kaynak olarak alır."
+#: plugins/elements/gstcapsfilter.c:129
+msgid "Restrict the possible allowed capabilities (NULL means ANY). Setting this property takes a reference to the supplied GstCaps object."
+msgstr "İzin verilen yetenekleri kısıtla (NULL HİÇ anlamına gelir). Bu özelliklerin ayarlanması verilen GstCaps nesnesini kaynak olarak alır."
 
+#: plugins/elements/gstcapsfilter.c:136
 msgid "Caps Change Mode"
 msgstr "Başlıklar Modunu Değiştir"
 
+#: plugins/elements/gstcapsfilter.c:137
 msgid "Filter caps change behaviour"
 msgstr "Büyük harf değişiklik davranışını filtrele"
 
+#: plugins/elements/gstdownloadbuffer.c:927 plugins/elements/gstqueue2.c:1792
 msgid "No Temp directory specified."
 msgstr "Geçici dizin belirtilmedi."
 
+#: plugins/elements/gstdownloadbuffer.c:933 plugins/elements/gstqueue2.c:1798
 #, c-format
 msgid "Could not create temp file \"%s\"."
 msgstr "Geçici dosya \"%s\" oluşturulamadı."
 
+#: plugins/elements/gstdownloadbuffer.c:941 plugins/elements/gstfilesrc.c:537
+#: plugins/elements/gstqueue2.c:1806
 #, c-format
 msgid "Could not open file \"%s\" for reading."
 msgstr "\"%s\" dosyası okuma için açılamadı."
 
+#: plugins/elements/gstdownloadbuffer.c:1274 plugins/elements/gstqueue2.c:2225
 msgid "Error while writing to download file."
 msgstr "Dosya indirmek için yazarken hata."
 
+#: plugins/elements/gstfilesink.c:404
 msgid "No file name specified for writing."
 msgstr "Yazım için hiç bir dosya adı belirtilmedi."
 
+#: plugins/elements/gstfilesink.c:410
 #, c-format
 msgid "Could not open file \"%s\" for writing."
 msgstr "\"%s\" dosyası yazım için açılamadı."
 
+#: plugins/elements/gstfilesink.c:422 plugins/elements/gstfilesink.c:426
 #, c-format
 msgid "Error closing file \"%s\"."
 msgstr "\"%s\" kapatılırken hata."
 
+#: plugins/elements/gstfilesink.c:605
 #, c-format
 msgid "Error while seeking in file \"%s\"."
 msgstr "\"%s\" dosyasında arama yaparken hata."
 
+#: plugins/elements/gstfilesink.c:613 plugins/elements/gstfilesink.c:620
+#: plugins/elements/gstfilesink.c:793 plugins/elements/gstfilesink.c:848
 #, c-format
 msgid "Error while writing to file \"%s\"."
 msgstr "\"%s\" dosyası yazılırken hata."
 
+#: plugins/elements/gstfilesrc.c:525
 msgid "No file name specified for reading."
 msgstr "Okuma için hiç bir dosya adı belirtilmedi."
 
+#: plugins/elements/gstfilesrc.c:546
 #, c-format
 msgid "Could not get info on \"%s\"."
 msgstr "\"%s\" ögesinden bilgi alınamadı."
 
+#: plugins/elements/gstfilesrc.c:552
 #, c-format
 msgid "\"%s\" is a directory."
 msgstr "\"%s\" bir dizindir."
 
+#: plugins/elements/gstfilesrc.c:558
 #, c-format
 msgid "File \"%s\" is a socket."
 msgstr "Dosya \"%s\" bir sokettir."
 
+#: plugins/elements/gstidentity.c:722
 msgid "Failed after iterations as requested."
 msgstr "İstenildiği gibi tekrarlama başarısız oldu."
 
+#: plugins/elements/gstidentity.c:903
 msgid "eos-after and error-after can't both be defined."
 msgstr "eos-sonra ve hata-sonra her ikisi de tanımlanamaz."
 
+#: plugins/elements/gsttypefindelement.c:251
 msgid "caps"
 msgstr "kabiliyetler"
 
+#: plugins/elements/gsttypefindelement.c:252
 msgid "detected capabilities in stream"
 msgstr "akımda tesbit edilen kabiliyetler"
 
+#: plugins/elements/gsttypefindelement.c:255
 msgid "minimum"
 msgstr "asgari"
 
+#: plugins/elements/gsttypefindelement.c:260
 msgid "force caps"
 msgstr "kapasiteyi zorla"
 
+#: plugins/elements/gsttypefindelement.c:261
 msgid "force caps without doing a typefind"
 msgstr "bir tür tanımlaması yapmadan kapasiteyi zorla"
 
+#: plugins/elements/gsttypefindelement.c:987
+#: plugins/elements/gsttypefindelement.c:1009
 msgid "Stream doesn't contain enough data."
 msgstr "Akışı yeterli veri içermiyor."
 
+#: plugins/elements/gsttypefindelement.c:1129
 msgid "Stream contains no data."
 msgstr "Akış hiçbir veri içermiyor."
 
+#: tools/gst-inspect.c:290
 #, c-format
 msgid "%sImplemented Interfaces%s:\n"
 msgstr "%serçeklenmiş Arayüzler%s:\n"
 
+#: tools/gst-inspect.c:400
 msgid "readable"
 msgstr "okunabilir"
 
+#: tools/gst-inspect.c:405
 msgid "writable"
 msgstr "yazılabilir"
 
+#: tools/gst-inspect.c:410
 msgid "deprecated"
 msgstr "kullanım dışı"
 
+#: tools/gst-inspect.c:414
 msgid "controllable"
 msgstr "yöneltilebilir"
 
+#: tools/gst-inspect.c:420
 msgid "changeable in NULL, READY, PAUSED or PLAYING state"
 msgstr "BOŞ, HAZIR, DURDURULMUŞ ya da YÜRÜTÜLÜYOR durumlarına değiştirilebilir"
 
+#: tools/gst-inspect.c:423
 msgid "changeable only in NULL, READY or PAUSED state"
 msgstr "sadece NULL, READY ya da PAUSED olarak değiştirilebilir"
 
+#: tools/gst-inspect.c:426
 msgid "changeable only in NULL or READY state"
 msgstr "sadece NULL ya da READY olarak değiştirilebilir"
 
+#: tools/gst-inspect.c:1131
 msgid "Blacklisted files:"
 msgstr "Kara listeye alınan dosyalar:"
 
+#: tools/gst-inspect.c:1143 tools/gst-inspect.c:1276
 #, c-format
 msgid "%sTotal count%s: %s"
 msgstr "%sToplam sayı%s: %s"
 
+#: tools/gst-inspect.c:1145
 #, c-format
 msgid "%d blacklisted file"
 msgid_plural "%d blacklisted files"
 msgstr[0] "%d kara listeye alınan dosya"
 msgstr[1] "%d kara listeye alınan dosya"
 
+#: tools/gst-inspect.c:1278
 #, c-format
 msgid "%d plugin"
 msgid_plural "%d plugins"
 msgstr[0] "%d eklentisi"
 msgstr[1] "%d eklentisi"
 
+#: tools/gst-inspect.c:1281
 #, c-format
 msgid "%d blacklist entry"
 msgid_plural "%d blacklist entries"
 msgstr[0] "%d kara liste girdisi"
 msgstr[1] "%d kara liste girdisi"
 
+#: tools/gst-inspect.c:1286
 #, c-format
 msgid "%d feature"
 msgid_plural "%d features"
 msgstr[0] "%d özelliği"
 msgstr[1] "%d özelliği"
 
+#: tools/gst-inspect.c:1953
 msgid "Print all elements"
 msgstr "Bütün ögeleri yazdır"
 
+#: tools/gst-inspect.c:1955
 msgid "Print list of blacklisted files"
 msgstr "Kara listeye alınmış dosyaların listesini yazdır"
 
+#: tools/gst-inspect.c:1957
 msgid ""
-"Print a machine-parsable list of features the specified plugin or all "
-"plugins provide.\n"
-"                                       Useful in connection with external "
-"automatic plugin installation mechanisms"
+"Print a machine-parsable list of features the specified plugin or all plugins provide.\n"
+"                                       Useful in connection with external automatic plugin installation mechanisms"
 msgstr ""
-"Belirtilen eklenti ya da sağlanan bütün eklentilerin özelliklerinin makine-"
-"çözümlenebilir bir listesini yazdır.\n"
-"                                       Harici otomatik eklenti kurulum "
-"tekniği ile bağlantıda faydalı"
+"Belirtilen eklenti ya da sağlanan bütün eklentilerin özelliklerinin makine-çözümlenebilir bir listesini yazdır.\n"
+"                                       Harici otomatik eklenti kurulum tekniği ile bağlantıda faydalı"
 
+#: tools/gst-inspect.c:1962
 msgid "List the plugin contents"
 msgstr "Eklenti içeriklerini listele"
 
-msgid ""
-"A slashes ('/') separated list of types of elements (also known as klass) to "
-"list. (unordered)"
-msgstr ""
-"Bir eğik çizgi ('/') öğelernin türlerini listelemek için (klass olarak da "
-"bilinen) listelerine ayrılmış. (sıralı değil)"
+#: tools/gst-inspect.c:1964
+msgid "A slashes ('/') separated list of types of elements (also known as klass) to list. (unordered)"
+msgstr "Bir eğik çizgi ('/') öğelernin türlerini listelemek için (klass olarak da bilinen) listelerine ayrılmış. (sıralı değil)"
 
+#: tools/gst-inspect.c:1967
 msgid "Check if the specified element or plugin exists"
 msgstr "Belirtilen öge ya da eklentinin var olup olmadığını kontrol et"
 
-msgid ""
-"When checking if an element or plugin exists, also check that its version is "
-"at least the version specified"
-msgstr ""
-"Bir öge ya da eklentinin var olup olmadığını kontrol ettiğinizde ayrıca "
-"onların belirtilen en son versiyonda olup olmadıklarını da kontrol edin"
+#: tools/gst-inspect.c:1970
+msgid "When checking if an element or plugin exists, also check that its version is at least the version specified"
+msgstr "Bir öge ya da eklentinin var olup olmadığını kontrol ettiğinizde ayrıca onların belirtilen en son versiyonda olup olmadıklarını da kontrol edin"
 
+#: tools/gst-inspect.c:1974
 msgid "Print supported URI schemes, with the elements that implement them"
 msgstr "Desteklenen URI şemalarını onlara uygulanan ögelerle yazdır"
 
-msgid ""
-"Disable colors in output. You can also achieve the same by "
-"setting'GST_INSPECT_NO_COLORS' environment variable to any value."
-msgstr ""
-"Çıktıda renkleri devre dışı bırakın. Aynı zamanda 'GST_INSPECT_NO_COLORS' "
-"ortam değişkenini herhangi bir değere ayarlayarak da aynı şekilde elde "
-"edebilirsiniz."
+#: tools/gst-inspect.c:1979
+msgid "Disable colors in output. You can also achieve the same by setting'GST_INSPECT_NO_COLORS' environment variable to any value."
+msgstr "Çıktıda renkleri devre dışı bırakın. Aynı zamanda'GST_INSPECT_NO_COLORS' ortam değişkenini herhangi bir değere ayarlayarak da aynı şekilde elde edebilirsiniz."
 
+#: tools/gst-inspect.c:2135
 #, c-format
 msgid "Could not load plugin file: %s\n"
 msgstr "Eklenti dosyası yüklenemedi: %s\n"
 
+#: tools/gst-inspect.c:2141
 #, c-format
 msgid "No such element or plugin '%s'\n"
 msgstr "Böyle bir öge ya da '%s' eklentisi yok\n"
 
+#: tools/gst-launch.c:252
 msgid "Index statistics"
 msgstr "Dizin istatistikleri"
 
+#: tools/gst-launch.c:578
 #, c-format
 msgid "Got message #%u from element \"%s\" (%s): "
 msgstr "#%u iletisi \"%s\" ögesinden alındı (%s): "
 
+#: tools/gst-launch.c:582
 #, c-format
 msgid "Got message #%u from pad \"%s:%s\" (%s): "
 msgstr "#%u iletisi dolgu \"%s:%s\" (%s) üzerinden alındı: "
 
+#: tools/gst-launch.c:586
 #, c-format
 msgid "Got message #%u from object \"%s\" (%s): "
 msgstr "#%u iletisi \"%s\" nesnesinden alındı (%s): "
 
+#: tools/gst-launch.c:590
 #, c-format
 msgid "Got message #%u (%s): "
 msgstr "İleti #%u alındı (%s): "
 
+#: tools/gst-launch.c:622
 #, c-format
 msgid "Got EOS from element \"%s\".\n"
 msgstr "\"%s\" ögesinden gelen EOS.\n"
 
+#: tools/gst-launch.c:631
 #, c-format
 msgid "FOUND TAG      : found by element \"%s\".\n"
 msgstr "ETİKET BULUNDU      : \"%s\" öğesi tarafından bulundu.\n"
 
+#: tools/gst-launch.c:634
 #, c-format
 msgid "FOUND TAG      : found by pad \"%s:%s\".\n"
 msgstr "ETİKET BULUNDU      : \"%s:%s\" dolgusu tarafından bulundu.\n"
 
+#: tools/gst-launch.c:637
 #, c-format
 msgid "FOUND TAG      : found by object \"%s\".\n"
 msgstr "ETİKET BULUNDU      : \"%s\" nesnesi tarafından bulundu.\n"
 
+#: tools/gst-launch.c:640
 msgid "FOUND TAG\n"
 msgstr "ETİKET BULUNDU\n"
 
+#: tools/gst-launch.c:655
 #, c-format
 msgid "FOUND TOC      : found by element \"%s\".\n"
 msgstr "İÇİNDEKİLER BULUNDU      : \"%s\" ögesi tarafından bulundu.\n"
 
+#: tools/gst-launch.c:658
 #, c-format
 msgid "FOUND TOC      : found by object \"%s\".\n"
 msgstr "İÇİNDEKİLER BULUNDU      : \"%s\" nesnesi tarafından bulundu.\n"
 
+#: tools/gst-launch.c:661
 msgid "FOUND TOC\n"
 msgstr "İÇİNDEKİLER BULUNDU\n"
 
+#: tools/gst-launch.c:678
 #, c-format
 msgid ""
 "INFO:\n"
@@ -1194,148 +1434,186 @@ msgstr ""
 "BİLGİ:\n"
 "%s\n"
 
+#: tools/gst-launch.c:695
 #, c-format
 msgid "WARNING: from element %s: %s\n"
 msgstr "UYARI: %s ögesinden: %s\n"
 
+#: tools/gst-launch.c:730
 msgid "Prerolled, waiting for buffering to finish...\n"
 msgstr "Kullanım öncesi, önbelleğe alma işleminin bitmesi bekleniyor...\n"
 
+#: tools/gst-launch.c:734
 msgid "Prerolled, waiting for progress to finish...\n"
 msgstr "Kullanım öncesi, ilerlemenin bitmesi için bekleniyor...\n"
 
+#: tools/gst-launch.c:746
 msgid "buffering..."
 msgstr "tamponlanıyor..."
 
+#: tools/gst-launch.c:757
 msgid "Done buffering, setting pipeline to PLAYING ...\n"
-msgstr ""
-"Önbelleğe alma işlemi, YÜRÜTÜLÜYOR durumu için ardışık düzen ayarlamaları "
-"yapıldı ...\n"
+msgstr "Önbelleğe alma işlemi, YÜRÜTÜLÜYOR durumu için ardışık düzen ayarlamaları yapıldı ...\n"
 
+#: tools/gst-launch.c:765
 msgid "Buffering, setting pipeline to PAUSED ...\n"
 msgstr "Tamponlama, DURAKLAT olarak ayarlanıyor ...\n"
 
+#: tools/gst-launch.c:774
 msgid "Redistribute latency...\n"
 msgstr "Yeniden dağıtım gecikmesi...\n"
 
+#: tools/gst-launch.c:785
 #, c-format
 msgid "Setting state to %s as requested by %s...\n"
 msgstr "Durum %s olarak ayarlanıyor, %s tarafından istenmiş...\n"
 
+#: tools/gst-launch.c:801
 msgid "Interrupt: Stopping pipeline ...\n"
 msgstr "Kesme: Boru hattı durduruluyor ...\n"
 
+#: tools/gst-launch.c:830
 #, c-format
 msgid "Progress: (%s) %s\n"
 msgstr "İlerleme: (%s) %s\n"
 
+#: tools/gst-launch.c:843
 #, c-format
 msgid "Missing element: %s\n"
 msgstr "Eksik öge: %s\n"
 
+#: tools/gst-launch.c:857
 #, c-format
 msgid "Got context from element '%s': %s=%s\n"
 msgstr "Ögeden '%s' içerik alındı: %s=%s\n"
 
+#: tools/gst-launch.c:991
 msgid "Output tags (also known as metadata)"
 msgstr "Çıktı etiketleri (metadata olarak da bilinir)"
 
+#: tools/gst-launch.c:993
 msgid "Output TOC (chapters and editions)"
 msgstr "İçindekiler Çıktısı (bölümler ve sürümleri)"
 
+#: tools/gst-launch.c:995
 msgid "Output status information and property notifications"
 msgstr "Çıktı durum bilgisi ve özellik uyarıları"
 
+#: tools/gst-launch.c:997
 msgid "Do not print any progress information"
 msgstr "Herhangi bir ilerleme bilgisi yazdırmayın"
 
+#: tools/gst-launch.c:999
 msgid "Output messages"
 msgstr "Çıktı iletileri"
 
-msgid ""
-"Do not output status information for the specified property if verbose "
-"output is enabled (can be used multiple times)"
-msgstr ""
-"Ayrıntılı çıktı etkinse, durum bilgilerini belirtilen özellik için çıkış "
-"değil (birden çok kez kullanılabilir)"
+#: tools/gst-launch.c:1001
+msgid "Do not output status information for the specified property if verbose output is enabled (can be used multiple times)"
+msgstr "Ayrıntılı çıktı etkinse, durum bilgilerini belirtilen özellik için çıkış değil (birden çok kez kullanılabilir)"
 
+#: tools/gst-launch.c:1003
 msgid "PROPERTY-NAME"
 msgstr "ÖZELLİK-ADI"
 
+#: tools/gst-launch.c:1005
 msgid "Do not install a fault handler"
 msgstr "Hatalı işleticiyi kurma"
 
+#: tools/gst-launch.c:1007
 msgid "Force EOS on sources before shutting the pipeline down"
 msgstr "Boru hattı kapatılmadan önce kaynaklarda EOS zorla"
 
+#: tools/gst-launch.c:1010
 msgid "Gather and print index statistics"
 msgstr "Dizin istatistiklerini topla ve yazdır"
 
+#: tools/gst-launch.c:1077
 #, c-format
 msgid "ERROR: pipeline could not be constructed: %s.\n"
 msgstr "HATA: boruhattı oluşturulamadı: %s.\n"
 
+#: tools/gst-launch.c:1081
 msgid "ERROR: pipeline could not be constructed.\n"
 msgstr "HATA: boruhattı oluşturulamadı.\n"
 
+#: tools/gst-launch.c:1085
 #, c-format
 msgid "WARNING: erroneous pipeline: %s\n"
 msgstr "UYARI: hatalı boruhattı: %s\n"
 
+#: tools/gst-launch.c:1101
 msgid "ERROR: the 'pipeline' element wasn't found.\n"
 msgstr "HATA: 'pipeline' öğesi bulunamadı.\n"
 
+#: tools/gst-launch.c:1132 tools/gst-launch.c:1233
 msgid "Setting pipeline to PAUSED ...\n"
 msgstr "DURDURULDU durumu için ardışık düzen ayarlamaları ...\n"
 
+#: tools/gst-launch.c:1137
 msgid "ERROR: Pipeline doesn't want to pause.\n"
 msgstr "HATA: Ardışık düzen durdurmayı istemez.\n"
 
+#: tools/gst-launch.c:1142
 msgid "Pipeline is live and does not need PREROLL ...\n"
 msgstr "Boru hattı çalışıyor ve PREROLL ihtiyacı yok ...\n"
 
+#: tools/gst-launch.c:1146
 msgid "Pipeline is PREROLLING ...\n"
 msgstr "Boru hattı PREROLLING yapıyor ...\n"
 
+#: tools/gst-launch.c:1149 tools/gst-launch.c:1163
 msgid "ERROR: pipeline doesn't want to preroll.\n"
 msgstr "HATA: boru hattı kullanım öncesi yapmak istemiyor.\n"
 
+#: tools/gst-launch.c:1156
 msgid "Pipeline is PREROLLED ...\n"
 msgstr "Boru hattı PREROLLED ...\n"
 
+#: tools/gst-launch.c:1169
 msgid "Setting pipeline to PLAYING ...\n"
 msgstr "Boru hattı PLAYING olarak ayarlanıyor ...\n"
 
+#: tools/gst-launch.c:1176
 msgid "ERROR: pipeline doesn't want to play.\n"
 msgstr "HATA: boruhattı çalmak istemiyor.\n"
 
+#: tools/gst-launch.c:1195
 msgid "EOS on shutdown enabled -- Forcing EOS on the pipeline\n"
 msgstr "Kapanmada EOS etkin - Boru hattında EOS zorlanıyor\n"
 
+#: tools/gst-launch.c:1199
 msgid "EOS on shutdown enabled -- waiting for EOS after Error\n"
 msgstr "Kapanmada EOS etkin -- Hatadan sonra EOS için bekleniyor\n"
 
+#: tools/gst-launch.c:1202
 msgid "Waiting for EOS...\n"
 msgstr "EOS için bekleniyor...\n"
 
+#: tools/gst-launch.c:1209
 msgid "EOS received - stopping pipeline...\n"
 msgstr "EOS alındı - boru hattı durduruluyor...\n"
 
+#: tools/gst-launch.c:1213
 msgid "Interrupt while waiting for EOS - stopping pipeline...\n"
 msgstr "EOS için beklenirken kesme - boru hattı durduruluyor...\n"
 
+#: tools/gst-launch.c:1218
 msgid "An error happened while waiting for EOS\n"
 msgstr "Akış sonu için beklerken bir hata oldu\n"
 
+#: tools/gst-launch.c:1229
 msgid "Execution ended after %"
 msgstr "Çalıştırma % sonrası bitti"
 
+#: tools/gst-launch.c:1245
 msgid "Setting pipeline to READY ...\n"
 msgstr "Boru hattı READY olarak ayarlanıyor ...\n"
 
+#: tools/gst-launch.c:1257
 msgid "Setting pipeline to NULL ...\n"
 msgstr "Boru hattı NULL olarak ayarlanıyor ...\n"
 
+#: tools/gst-launch.c:1261
 msgid "Freeing pipeline ...\n"
 msgstr "Boru hattı boşaltılıyor ...\n"
 
@@ -1388,14 +1666,10 @@ msgstr "Boru hattı boşaltılıyor ...\n"
 #~ msgstr "KAYIT"
 
 #~ msgid "Internal GStreamer error: state change failed.  File a bug."
-#~ msgstr ""
-#~ "Dahili GStreamer hatası: durum değiştirilemedi.  Hata bildiriminde "
-#~ "bulunun."
+#~ msgstr "Dahili GStreamer hatası: durum değiştirilemedi.  Hata bildiriminde bulunun."
 
 #~ msgid "Internal GStreamer error: scheduler problem.  File a bug."
-#~ msgstr ""
-#~ "Dahili GStreamer hatası: zamanlandırıcı sorunu.  Hata bildiriminde "
-#~ "bulunun."
+#~ msgstr "Dahili GStreamer hatası: zamanlandırıcı sorunu.  Hata bildiriminde bulunun."
 
 #~ msgid "original location of file as a URI"
 #~ msgstr "dosyanın URI olarak özgün konumu"
@@ -1406,11 +1680,8 @@ msgstr "Boru hattı boşaltılıyor ...\n"
 #~ msgid "maximum"
 #~ msgstr "azami"
 
-#~ msgid ""
-#~ "could not convert \"%s\" so that it fits property \"%s\" in element \"%s\""
-#~ msgstr ""
-#~ "\"%1$s\", \"%3$s\" öğesindeki \"%2$s\" özelliğinine uyacak şekilde "
-#~ "dönüştürülemedi"
+#~ msgid "could not convert \"%s\" so that it fits property \"%s\" in element \"%s\""
+#~ msgstr "\"%1$s\", \"%3$s\" öğesindeki \"%2$s\" özelliğinine uyacak şekilde dönüştürülemedi"
 
 #~ msgid "link without source element"
 #~ msgstr "kaynak öğesi olmayan bağ"
old mode 100755 (executable)
new mode 100644 (file)