* Add subtitle view.
+2014-06-26 Carl Hetherington <cth@carlh.net>
+
+ * Version 1.70.1 released.
+
+2014-06-26 Carl Hetherington <cth@carlh.net>
+
+ * Support different KDM formulations.
+
+ * Allow override of detected video frame rates.
+
+ * Optimisation of uncertain effect to encoder and server
+ thread handling.
+
+ * Version 1.70.0 released.
+
+2014-06-25 Carl Hetherington <cth@carlh.net>
+
+ * Version 1.69.37 released.
+
+2014-06-25 Carl Hetherington <cth@carlh.net>
+
+ * Version 1.69.36 released.
+
+2014-06-25 Carl Hetherington <cth@carlh.net>
+
+ * Support pixel format 46 in make_black().
+
+2014-06-24 Carl Hetherington <cth@carlh.net>
+
+ * Re-assign timeline tracks when things are
+ moved about.
+
2014-06-23 Carl Hetherington <cth@carlh.net>
+ * Try harder to cope with DCP names specified
+ already in CamelCase.
+
* Add option to CC a KDM email, and add
$SCREENS and $CINEMA_NAME as variables
in the email.
'libcurl3': '7.26.0',
'libzip2': '0.10.1'}
+deb_depends['unstable'] = {'libc6': '2.13',
+ 'libssh-4': '0.5.4',
+ 'libboost-filesystem1.55.0': '1.55.0',
+ 'libboost-thread1.55.0': '1.55.0',
+ 'libsndfile1': '1.0.25',
+ 'libmagick++5': '8:6.7.7.10',
+ 'libxml++2.6-2': '2.34.2',
+ 'libgtk2.0-0': '2.24.10',
+ 'libxmlsec1': '1.2.18',
+ 'libboost-date-time1.55.0': '1.55.0',
+ 'libxmlsec1-openssl': '1.2.18',
+ 'libcurl3': '7.26.0',
+ 'libzip2': '0.10.1'}
+
+
def packages(name, packages, f):
s = '%s: ' % name
for p in packages:
elif target.platform == 'linux':
if target.distro == 'debian' or target.distro == 'ubuntu':
cmd += ' --target-debian'
+ if target.version == 'unstable':
+ cmd += ' --debian-unstable'
elif target.distro == 'centos':
cmd += ' --target-centos'
target.set('CDIST_LINKFLAGS', target.get('LINKFLAGS'))
target.set('CDIST_CXXFLAGS', target.get('CXXFLAGS'))
target.set('CDIST_PKG_CONFIG_PATH', target.get('PKG_CONFIG_PATH'))
+ if target.version == 'unstable':
+ target.set('CDIST_EXTRA_CONFIGURE', '--debian-unstable')
target.command('dpkg-buildpackage')
debs = []
-dcpomatic (1.69.35-1) UNRELEASED; urgency=low
+dcpomatic (1.70.1-1) UNRELEASED; urgency=low
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
* New upstream release.
+ * New upstream release.
+ * New upstream release.
+ * New upstream release.
+ * New upstream release.
- -- Carl Hetherington <carl@d1stkfactory> Sun, 22 Jun 2014 21:49:09 +0100
+ -- Carl Hetherington <carl@d1stkfactory> Thu, 26 Jun 2014 19:30:39 +0100
dcpomatic (0.87-1) UNRELEASED; urgency=low
override_dh_auto_configure:
LINKFLAGS=$(CDIST_LINKFLAGS) CXXFLAGS="$(CXXFLAGS) $(CDIST_CXXFLAGS)" PKG_CONFIG_PATH=$(CDIST_PKG_CONFIG_PATH) \
- ./waf --nocache configure --prefix=/usr --target-debian --enable-debug
+ ./waf --nocache configure --prefix=/usr --target-debian --enable-debug $(CDIST_EXTRA_CONFIGURE)
override_dh_auto_build:
./waf --nocache build
all: html pdf
-DIAGRAMS := file-structure.svg 3d-left-right.svg 3d-top-bottom.svg timecode.svg
+DIAGRAMS := file-structure.svg 3d-left-right.svg 3d-top-bottom.svg timecode.svg pipeline1.svg pipeline2.svg \
+ pipeline3.svg pipeline4.svg
SCREENSHOTS := file-new.png video-new-film.png still-new-film.png video-select-content-file.png \
still-select-content-file.png examine-thumbs.png examine-content.png timing-tab.png \
</section>
+<section>
+<title>Video processing pipeline</title>
+
+<para>
+This section gives a little more detail about how DCP-o-matic process
+video as it takes it from a source and puts it into a DCP.
+</para>
+
+<para>
+Consider, as a somewhat over-the-top example, that we have a 720 x 576
+image which is letterboxed with 36 black pixels each at the top and
+bottom, and the video content within the letterbox should be presented
+in the DCP at ratio of 2.39:1 within a 1.85:1 frame (such as might
+happen with a trailer). The source image is shown in <xref
+linkend="fig-pipeline1"/>.
+</para>
+
+<figure id="fig-pipeline1">
+ <title>Example image to demonstrate video processing</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata scale="100" fileref="diagrams/pipeline1&dia;"/>
+ </imageobject>
+ </mediaobject>
+</figure>
+
+<para>
+DCP-o-matic runs through the following steps when preparing an image for a DCP:
+</para>
+
+<itemizedlist>
+<listitem>Crop</listitem>
+<listitem>Scale</listitem>
+<listitem>Place in container</listitem>
+</itemizedlist>
+
+<para>
+First, some amount of the image can be cropped. This is almost always
+used to remove black borders (letterboxing and/or pillarboxing) around
+images.
+</para>
+
+<para>
+In our example image, we would use 36 pixels of crop from the top and
+bottom. This would give the new image shown in <xref
+linkend="fig-pipeline2"/>.
+</para>
+
+<figure id="fig-pipeline2">
+ <title>Example image after cropping</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata scale="100" fileref="diagrams/pipeline2&dia;"/>
+ </imageobject>
+ </mediaobject>
+</figure>
+
+<para>
+The next step is to scale the image. Since this content should be
+presented in a 2.39:1 aspect ratio inside a 1.85:1 DCP we would select
+<guilabel>Scope</guilabel> from the <guilabel>Scale to</guilabel>
+option in the <guilabel>Video</guilabel> tab and
+<guilabel>Flat</guilabel> from the <guilabel>Container</guilabel>
+option in the <guilabel>DCP</guilabel> tab.
+</para>
+
+<para>The <guilabel>Scale to</guilabel> option should always be set to
+the aspect ratio at which the content should be seen. The
+<guilabel>Container</guilabel> option should be set to the preset that
+you want to use on the projector. Of course, these two settings will
+often be the same.
+</para>
+
+<para>
+Given the scaling and container information, DCP-o-matic will look at
+the DCP's container size, and then scale the source image up until one
+or both of its dimensions (width, height or both) fits the size of the
+container, all the while preserving the desired aspect ratio.
+</para>
+
+<para>
+In our example here, the DCP's container is specified as 1.85:1 (so
+that the DCP will play back correctly using the projector's
+‘Flat’ preset). At 2K, 1.85:1 is 1998 pixels by 1080.
+Scaling the source up whilst preserving its 1.85:1 aspect ratio will
+result in the image hitting the sides of the container first, at a
+size of 1998 x 836. This gives us a new version of the image as shown
+in <xref linkend="fig-pipeline3"/>.
+</para>
+
+<figure id="fig-pipeline3">
+ <title>Example image after cropping and scaling</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata scale="100" fileref="diagrams/pipeline3&dia;"/>
+ </imageobject>
+ </mediaobject>
+</figure>
+
+<para>
+The final step is to place the image into the DCP. In this case,
+since we have a 2.39:1 image that should be presented as a 1.85:1 DCP,
+we have set the <guilabel>container</guilabel> in the
+<guilabel>DCP</guilabel> tab to be Scope. Since the content has been
+scaled to 1998 x 836, and a Flat container is 1998 x 1080, there will
+be some black bars at the top and bottom of the image. DCP-o-matic
+shares out this black equally, as shown in <xref
+linkend="fig-pipeline3"/>.
+</para>
+
+<figure id="fig-pipeline4">
+ <title>Example image in the DCP</title>
+ <mediaobject>
+ <imageobject>
+ <imagedata scale="100" fileref="diagrams/pipeline4&dia;"/>
+ </imageobject>
+ </mediaobject>
+</figure>
+
+</section>
+
</chapter>
<chapter xml:id="ch-dcp" xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="en">
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="744.09448819"
+ height="1052.3622047"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="pipeline1.svg">
+ <defs
+ id="defs4">
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Mend"
+ style="overflow:visible;">
+ <path
+ id="path3804"
+ style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(0.6) rotate(180) translate(0,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-2"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-6"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-6"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-68"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-27"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-3"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-63"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-0"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4324"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4326"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4328"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4330"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4332"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4334"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-4"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-37"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-0"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-69"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-62"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-8"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-8"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-7"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4517"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4519"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-5"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-9"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4564"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4566"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.68026787"
+ inkscape:cx="68.529071"
+ inkscape:cy="731.88908"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1366"
+ inkscape:window-height="714"
+ inkscape:window-x="1024"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g2997"
+ transform="matrix(0.5,0,0,0.5,42.040939,-158.30444)">
+ <rect
+ y="373.03476"
+ x="59.186138"
+ height="576"
+ width="720"
+ id="rect2993"
+ style="color:#000000;fill:#000000;stroke:#000000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <rect
+ y="409.03476"
+ x="59.186138"
+ height="504"
+ width="720"
+ id="rect2995"
+ style="color:#000000;fill:#ffffff;stroke:#ff0000;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ </g>
+ <rect
+ style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect3001-5"
+ width="356.93597"
+ height="248.66312"
+ x="73.139694"
+ y="47.699894" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
+ d="M 119.40168,123.4643 75.898647,50.852713"
+ id="path3003-3"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
+ d="M 119.6764,220.30008 76.173359,292.91167"
+ id="path3003-2-1"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
+ d="m 383.11031,220.01077 43.50304,72.61159"
+ id="path3003-2-6-6"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
+ d="M 383.67493,123.63022 427.17796,51.018628"
+ id="path3003-2-6-1-2"
+ inkscape:connector-curvature="0" />
+ <text
+ xml:space="preserve"
+ style="font-size:31.10634041px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Latin Modern Sans;-inkscape-font-specification:Latin Modern Sans"
+ x="218.78021"
+ y="72.278893"
+ id="text4289-2"
+ sodipodi:linespacing="125%"
+ transform="scale(0.77402823,1.2919425)"><tspan
+ sodipodi:role="line"
+ x="218.78021"
+ y="72.278893"
+ id="tspan4293-6">My scope image</tspan></text>
+ <path
+ sodipodi:type="arc"
+ style="color:#000000;fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:#0000ff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path4297-6"
+ sodipodi:cx="66.00634"
+ sodipodi:cy="392.02936"
+ sodipodi:rx="19.128368"
+ sodipodi:ry="19.128368"
+ d="m 85.134708,392.02936 a 19.128368,19.128368 0 1 1 -38.256736,0 19.128368,19.128368 0 1 1 38.256736,0 z"
+ transform="matrix(1.5048241,0,0,2.5117253,96.288613,-775.54059)" />
+ <path
+ sodipodi:type="star"
+ style="color:#000000;fill:#808000;fill-opacity:1;fill-rule:nonzero;stroke:#808000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path4299-6"
+ sodipodi:sides="5"
+ sodipodi:cx="76.513474"
+ sodipodi:cy="378.82809"
+ sodipodi:r1="37.006886"
+ sodipodi:r2="18.503443"
+ sodipodi:arg1="2.861293"
+ sodipodi:arg2="3.4896115"
+ inkscape:flatsided="false"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 40.950871,389.06581 18.168437,-16.54806 -3.331932,-24.34807 21.352497,12.16558 22.12677,-10.69283 -4.971868,24.0668 17.007025,17.73955 -24.425277,2.70852 -11.615849,21.65647 -10.123785,-22.39284 z"
+ inkscape:transform-center-x="3.2284995"
+ inkscape:transform-center-y="-3.7074407"
+ transform="matrix(1.0899007,0,0,1.8191701,221.12185,-485.77846)" />
+ <g
+ id="g4546">
+ <text
+ sodipodi:linespacing="125%"
+ id="text4415"
+ y="39.445469"
+ x="-21.738394"
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Latin Modern Mono;-inkscape-font-specification:Latin Modern Mono"
+ xml:space="preserve"><tspan
+ y="39.445469"
+ x="-21.738394"
+ id="tspan4417"
+ sodipodi:role="line">36 pixels</tspan></text>
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path4419-3"
+ d="m 60.126683,65.320801 0,-18.125005"
+ style="color:#000000;fill:none;stroke:#000000;stroke-width:0.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;marker-end:url(#Arrow2Mend);visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path4419-3-2"
+ d="m 60.107467,7.7999961 0,18.1250059"
+ style="color:#000000;fill:none;stroke:#000000;stroke-width:0.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;marker-end:url(#Arrow2Mend);visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ </g>
+ <g
+ transform="translate(0,271.37284)"
+ id="g4546-3">
+ <text
+ sodipodi:linespacing="125%"
+ id="text4415-0"
+ y="39.445469"
+ x="-21.738394"
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Latin Modern Mono;-inkscape-font-specification:Latin Modern Mono"
+ xml:space="preserve"><tspan
+ y="39.445469"
+ x="-21.738394"
+ id="tspan4417-4"
+ sodipodi:role="line">36 pixels</tspan></text>
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path4419-3-6"
+ d="m 60.126683,65.320801 0,-18.125005"
+ style="color:#000000;fill:none;stroke:#000000;stroke-width:0.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;marker-end:url(#Arrow2Mend);visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path4419-3-2-6"
+ d="m 60.107467,7.7999961 0,18.1250059"
+ style="color:#000000;fill:none;stroke:#000000;stroke-width:0.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;marker-end:url(#Arrow2Mend);visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="744.09448819"
+ height="1052.3622047"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="pipeline2.svg">
+ <defs
+ id="defs4">
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Mend"
+ style="overflow:visible;">
+ <path
+ id="path3804"
+ style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(0.6) rotate(180) translate(0,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-2"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-6"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-6"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-68"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-27"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-3"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-63"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-0"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4324"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4326"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4328"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4330"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4332"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4334"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-4"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-37"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-0"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-69"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-62"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-8"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-8"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-7"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4517"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4519"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-5"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-9"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4564"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4566"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.68026787"
+ inkscape:cx="68.529071"
+ inkscape:cy="731.88908"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1366"
+ inkscape:window-height="714"
+ inkscape:window-x="1024"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <rect
+ style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect3001-5"
+ width="356.93597"
+ height="248.66312"
+ x="73.139694"
+ y="47.699894" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
+ d="M 119.40168,123.4643 75.898647,50.852713"
+ id="path3003-3"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
+ d="M 119.6764,220.30008 76.173359,292.91167"
+ id="path3003-2-1"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
+ d="m 383.11031,220.01077 43.50304,72.61159"
+ id="path3003-2-6-6"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
+ d="M 383.67493,123.63022 427.17796,51.018628"
+ id="path3003-2-6-1-2"
+ inkscape:connector-curvature="0" />
+ <text
+ xml:space="preserve"
+ style="font-size:31.10634041px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Latin Modern Sans;-inkscape-font-specification:Latin Modern Sans"
+ x="218.78021"
+ y="72.278893"
+ id="text4289-2"
+ sodipodi:linespacing="125%"
+ transform="scale(0.77402823,1.2919425)"><tspan
+ sodipodi:role="line"
+ x="218.78021"
+ y="72.278893"
+ id="tspan4293-6">My scope image</tspan></text>
+ <path
+ sodipodi:type="arc"
+ style="color:#000000;fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:#0000ff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path4297-6"
+ sodipodi:cx="66.00634"
+ sodipodi:cy="392.02936"
+ sodipodi:rx="19.128368"
+ sodipodi:ry="19.128368"
+ d="m 85.134708,392.02936 a 19.128368,19.128368 0 1 1 -38.256736,0 19.128368,19.128368 0 1 1 38.256736,0 z"
+ transform="matrix(1.5048241,0,0,2.5117253,96.288613,-775.54059)" />
+ <path
+ sodipodi:type="star"
+ style="color:#000000;fill:#808000;fill-opacity:1;fill-rule:nonzero;stroke:#808000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path4299-6"
+ sodipodi:sides="5"
+ sodipodi:cx="76.513474"
+ sodipodi:cy="378.82809"
+ sodipodi:r1="37.006886"
+ sodipodi:r2="18.503443"
+ sodipodi:arg1="2.861293"
+ sodipodi:arg2="3.4896115"
+ inkscape:flatsided="false"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 40.950871,389.06581 18.168437,-16.54806 -3.331932,-24.34807 21.352497,12.16558 22.12677,-10.69283 -4.971868,24.0668 17.007025,17.73955 -24.425277,2.70852 -11.615849,21.65647 -10.123785,-22.39284 z"
+ inkscape:transform-center-x="3.2284995"
+ inkscape:transform-center-y="-3.7074407"
+ transform="matrix(1.0899007,0,0,1.8191701,221.12185,-485.77846)" />
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="744.09448819"
+ height="1052.3622047"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="pipeline3.svg">
+ <defs
+ id="defs4">
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Mend"
+ style="overflow:visible;">
+ <path
+ id="path3804"
+ style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(0.6) rotate(180) translate(0,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-2"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-6"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-6"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-68"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-27"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-3"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-63"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-0"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4324"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4326"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4328"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4330"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4332"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4334"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-4"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-37"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-0"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-69"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-62"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-8"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-8"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-7"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4517"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4519"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-5"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-9"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4564"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4566"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.68026787"
+ inkscape:cx="-16.846029"
+ inkscape:cy="731.88908"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1366"
+ inkscape:window-height="714"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g4634"
+ transform="matrix(1.3949981,0,0,0.80970039,-33.234153,29.7975)">
+ <rect
+ y="47.699894"
+ x="73.139694"
+ height="248.66312"
+ width="356.93597"
+ id="rect3001-5"
+ style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:3.76366544;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3003-3"
+ d="M 119.40168,123.4643 75.898647,50.852713"
+ style="fill:none;stroke:#000000;stroke-width:0.94091618px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3003-2-1"
+ d="M 119.6764,220.30008 76.173359,292.91167"
+ style="fill:none;stroke:#000000;stroke-width:0.94091618px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3003-2-6-6"
+ d="m 383.11031,220.01077 43.50304,72.61159"
+ style="fill:none;stroke:#000000;stroke-width:0.94091618px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3003-2-6-1-2"
+ d="M 383.67493,123.63022 427.17796,51.018628"
+ style="fill:none;stroke:#000000;stroke-width:0.94091618px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
+ <text
+ transform="scale(0.77402823,1.2919425)"
+ sodipodi:linespacing="125%"
+ id="text4289-2"
+ y="72.278893"
+ x="218.78021"
+ style="font-size:31.10634041px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Latin Modern Sans;-inkscape-font-specification:Latin Modern Sans"
+ xml:space="preserve"><tspan
+ id="tspan4293-6"
+ y="72.278893"
+ x="218.78021"
+ sodipodi:role="line">My scope image</tspan></text>
+ <path
+ transform="matrix(1.5048241,0,0,2.5117253,96.288613,-775.54059)"
+ d="m 85.134708,392.02936 c 0,10.5643 -8.564062,19.12837 -19.128368,19.12837 -10.564306,0 -19.128368,-8.56407 -19.128368,-19.12837 0,-10.56431 8.564062,-19.12837 19.128368,-19.12837 10.564306,0 19.128368,8.56406 19.128368,19.12837 z"
+ sodipodi:ry="19.128368"
+ sodipodi:rx="19.128368"
+ sodipodi:cy="392.02936"
+ sodipodi:cx="66.00634"
+ id="path4297-6"
+ style="color:#000000;fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:#0000ff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(1.0899007,0,0,1.8191701,221.12185,-485.77846)"
+ inkscape:transform-center-y="-3.7074407"
+ inkscape:transform-center-x="3.2284995"
+ d="m 40.950871,389.06581 18.168437,-16.54806 -3.331932,-24.34807 21.352497,12.16558 22.12677,-10.69283 -4.971868,24.0668 17.007025,17.73955 -24.425277,2.70852 -11.615849,21.65647 -10.123785,-22.39284 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="false"
+ sodipodi:arg2="3.4896115"
+ sodipodi:arg1="2.861293"
+ sodipodi:r2="18.503443"
+ sodipodi:r1="37.006886"
+ sodipodi:cy="378.82809"
+ sodipodi:cx="76.513474"
+ sodipodi:sides="5"
+ id="path4299-6"
+ style="color:#000000;fill:#808000;fill-opacity:1;fill-rule:nonzero;stroke:#808000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="star" />
+ </g>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="744.09448819"
+ height="1052.3622047"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="pipeline4.svg">
+ <defs
+ id="defs4">
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Mend"
+ style="overflow:visible;">
+ <path
+ id="path3804"
+ style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(0.6) rotate(180) translate(0,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-2"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-6"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-6"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-68"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-27"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-3"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-63"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-0"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4324"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4326"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4328"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4330"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4332"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4334"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-4"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-37"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-0"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-69"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-62"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-8"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-8"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-7"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4517"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4519"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend-5"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3804-9"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4564"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4566"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6,-0.6)" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.2898269"
+ inkscape:cx="292.85461"
+ inkscape:cy="838.64023"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1366"
+ inkscape:window-height="714"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <rect
+ style="color:#000000;fill:#000000;stroke:#000000;stroke-width:0.99999987999999995px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="rect4773"
+ width="499.5"
+ height="270"
+ x="68.635796"
+ y="35.863335" />
+ <g
+ id="g4634"
+ transform="matrix(1.3905207,0,0,0.8071016,-32.107615,30.244575)">
+ <rect
+ y="47.699894"
+ x="73.139694"
+ height="248.66312"
+ width="356.93597"
+ id="rect3001-5"
+ style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:3.77578402;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3003-3"
+ d="M 119.40168,123.4643 75.898647,50.852713"
+ style="fill:none;stroke:#000000;stroke-width:0.94394588px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3003-2-1"
+ d="M 119.6764,220.30008 76.173359,292.91167"
+ style="fill:none;stroke:#000000;stroke-width:0.94394588px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3003-2-6-6"
+ d="m 383.11031,220.01077 43.50304,72.61159"
+ style="fill:none;stroke:#000000;stroke-width:0.94394588px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path3003-2-6-1-2"
+ d="M 383.67493,123.63022 427.17796,51.018628"
+ style="fill:none;stroke:#000000;stroke-width:0.94394588px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
+ <text
+ transform="scale(0.77402823,1.2919425)"
+ sodipodi:linespacing="125%"
+ id="text4289-2"
+ y="72.278893"
+ x="218.78021"
+ style="font-size:31.10634041px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Latin Modern Sans;-inkscape-font-specification:Latin Modern Sans"
+ xml:space="preserve"><tspan
+ id="tspan4293-6"
+ y="72.278893"
+ x="218.78021"
+ sodipodi:role="line">My scope image</tspan></text>
+ <path
+ transform="matrix(1.5048241,0,0,2.5117253,96.288613,-775.54059)"
+ d="m 85.134708,392.02936 c 0,10.5643 -8.564062,19.12837 -19.128368,19.12837 -10.564306,0 -19.128368,-8.56407 -19.128368,-19.12837 0,-10.56431 8.564062,-19.12837 19.128368,-19.12837 10.564306,0 19.128368,8.56406 19.128368,19.12837 z"
+ sodipodi:ry="19.128368"
+ sodipodi:rx="19.128368"
+ sodipodi:cy="392.02936"
+ sodipodi:cx="66.00634"
+ id="path4297-6"
+ style="color:#000000;fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:#0000ff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(1.0899007,0,0,1.8191701,221.12185,-485.77846)"
+ inkscape:transform-center-y="-3.7074407"
+ inkscape:transform-center-x="3.2284995"
+ d="m 40.950871,389.06581 18.168437,-16.54806 -3.331932,-24.34807 21.352497,12.16558 22.12677,-10.69283 -4.971868,24.0668 17.007025,17.73955 -24.425277,2.70852 -11.615849,21.65647 -10.123785,-22.39284 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="false"
+ sodipodi:arg2="3.4896115"
+ sodipodi:arg1="2.861293"
+ sodipodi:r2="18.503443"
+ sodipodi:r1="37.006886"
+ sodipodi:cy="378.82809"
+ sodipodi:cx="76.513474"
+ sodipodi:sides="5"
+ id="path4299-6"
+ style="color:#000000;fill:#808000;fill-opacity:1;fill-rule:nonzero;stroke:#808000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ sodipodi:type="star" />
+ </g>
+ </g>
+</svg>
/* Keep waking workers until the queue is empty */
while (!_queue.empty ()) {
- _condition.notify_all ();
- _condition.wait (lock);
+ _empty_condition.notify_all ();
+ _full_condition.wait (lock);
}
lock.unlock ();
/* Wait until the queue has gone down a bit */
while (_queue.size() >= _threads.size() * 2 && !_terminate) {
LOG_TIMING ("decoder sleeps with queue of %1", _queue.size());
- _condition.wait (lock);
+ _full_condition.wait (lock);
LOG_TIMING ("decoder wakes with queue of %1", _queue.size());
}
_film->log()
)
));
-
- _condition.notify_all ();
+
+ /* The queue might not be empty any more, so notify anything which is
+ waiting on that.
+ */
+ _empty_condition.notify_all ();
}
if (pvf->eyes() != EYES_LEFT) {
{
boost::mutex::scoped_lock lock (_mutex);
_terminate = true;
- _condition.notify_all ();
+ _full_condition.notify_all ();
+ _empty_condition.notify_all ();
}
for (list<boost::thread *>::iterator i = _threads.begin(); i != _threads.end(); ++i) {
*/
int remote_backoff = 0;
- while (1) {
+ while (true) {
LOG_TIMING ("[%1] encoder thread sleeps", boost::this_thread::get_id());
boost::mutex::scoped_lock lock (_mutex);
while (_queue.empty () && !_terminate) {
- _condition.wait (lock);
+ _empty_condition.wait (lock);
}
if (_terminate) {
dcpomatic_sleep (remote_backoff);
}
+ /* The queue might not be full any more, so notify anything that is waiting on that */
lock.lock ();
- _condition.notify_all ();
+ _full_condition.notify_all ();
}
}
catch (...)
std::list<boost::shared_ptr<DCPVideoFrame> > _queue;
std::list<boost::thread *> _threads;
mutable boost::mutex _mutex;
- boost::condition _condition;
+ /** condition to manage thread wakeups when we have nothing to do */
+ boost::condition _empty_condition;
+ /** condition to manage thread wakeups when we have too much to do */
+ boost::condition _full_condition;
boost::shared_ptr<Writer> _writer;
Waker _waker;
using boost::ends_with;
using boost::starts_with;
using boost::optional;
+using boost::is_any_of;
using dcp::Size;
using dcp::Signer;
using dcp::raw_convert;
+using dcp::raw_convert;
#define LOG_GENERAL(...) log()->log (String::compose (__VA_ARGS__), Log::TYPE_GENERAL);
#define LOG_GENERAL_NC(...) log()->log (__VA_ARGS__, Log::TYPE_GENERAL);
stringstream d;
string raw_name = name ();
+
+ /* Split the raw name up into words */
+ vector<string> words;
+ split (words, raw_name, is_any_of (" "));
+
string fixed_name;
- bool cap_next = true;
- for (size_t i = 0; i < raw_name.length(); ++i) {
- if (raw_name[i] == ' ') {
- cap_next = true;
- } else if (cap_next) {
- fixed_name += toupper (raw_name[i]);
- cap_next = false;
- } else {
- fixed_name += tolower (raw_name[i]);
+
+ /* Add each word to fixed_name */
+ for (vector<string>::const_iterator i = words.begin(); i != words.end(); ++i) {
+ string w = *i;
+
+ /* First letter is always capitalised */
+ w[0] = toupper (w[0]);
+
+ /* Count caps in w */
+ size_t caps = 0;
+ for (size_t i = 0; i < w.size(); ++i) {
+ if (isupper (w[i])) {
+ ++caps;
+ }
+ }
+
+ /* If w is all caps make the rest of it lower case, otherwise
+ leave it alone.
+ */
+ if (caps == w.size ()) {
+ for (size_t i = 1; i < w.size(); ++i) {
+ w[i] = tolower (w[i]);
+ }
+ }
+
+ for (size_t i = 0; i < w.size(); ++i) {
+ fixed_name += w[i];
}
}
return file (p);
}
-/** Find all the DCPs in our directory that can be libdcp::DCP::read() and return details of their CPLs */
+/** Find all the DCPs in our directory that can be dcp::DCP::read() and return details of their CPLs */
vector<CPLSummary>
Film::cpls () const
{
shared_ptr<dcp::Certificate> target,
boost::filesystem::path cpl_file,
dcp::LocalTime from,
- dcp::LocalTime until
+ dcp::LocalTime until,
+ dcp::Formulation formulation
) const
{
shared_ptr<const dcp::CPL> cpl (new dcp::CPL (cpl_file));
return dcp::DecryptedKDM (
cpl, from, until, "DCP-o-matic", cpl->content_title_text(), dcp::LocalTime().as_string()
- ).encrypt (make_signer(), target);
+ ).encrypt (make_signer(), target, formulation);
}
list<dcp::EncryptedKDM>
list<shared_ptr<Screen> > screens,
boost::filesystem::path dcp,
dcp::LocalTime from,
- dcp::LocalTime until
+ dcp::LocalTime until,
+ dcp::Formulation formulation
) const
{
list<dcp::EncryptedKDM> kdms;
for (list<shared_ptr<Screen> >::iterator i = screens.begin(); i != screens.end(); ++i) {
- kdms.push_back (make_kdm ((*i)->certificate, dcp, from, until));
+ kdms.push_back (make_kdm ((*i)->certificate, dcp, from, until, formulation));
}
return kdms;
boost::shared_ptr<dcp::Certificate> target,
boost::filesystem::path cpl_file,
dcp::LocalTime from,
- dcp::LocalTime until
+ dcp::LocalTime until,
+ dcp::Formulation formulation
) const;
std::list<dcp::EncryptedKDM> make_kdms (
std::list<boost::shared_ptr<Screen> >,
boost::filesystem::path cpl_file,
dcp::LocalTime from,
- dcp::LocalTime until
+ dcp::LocalTime until,
+ dcp::Formulation formulation
) const;
dcp::Key key () const {
NONE,
NAME,
USE_ISDCF_NAME,
- /** The playlist's content list has changed (i.e. content has been added, moved around or removed) */
+ /** The playlist's content list has changed (i.e. content has been added or removed) */
CONTENT,
DCP_CONTENT_TYPE,
CONTAINER,
case PIX_FMT_RGBA:
case PIX_FMT_ABGR:
case PIX_FMT_BGRA:
+ case PIX_FMT_RGB555LE:
memset (data()[0], 0, lines(0) * stride()[0]);
break;
#include <quickmail.h>
#include <zip.h>
#include <dcp/encrypted_kdm.h>
+#include <dcp/types.h>
#include "kdm.h"
#include "cinema.h"
#include "exceptions.h"
list<shared_ptr<Screen> > screens,
boost::filesystem::path cpl,
dcp::LocalTime from,
- dcp::LocalTime to
+ dcp::LocalTime to,
+ dcp::Formulation formulation
)
{
- list<dcp::EncryptedKDM> kdms = film->make_kdms (screens, cpl, from, to);
+ list<dcp::EncryptedKDM> kdms = film->make_kdms (screens, cpl, from, to, formulation);
list<ScreenKDM> screen_kdms;
list<shared_ptr<Screen> > screens,
boost::filesystem::path cpl,
dcp::LocalTime from,
- dcp::LocalTime to
+ dcp::LocalTime to,
+ dcp::Formulation formulation
)
{
- list<ScreenKDM> screen_kdms = make_screen_kdms (film, screens, cpl, from, to);
+ list<ScreenKDM> screen_kdms = make_screen_kdms (film, screens, cpl, from, to, formulation);
list<CinemaKDMs> cinema_kdms;
while (!screen_kdms.empty ()) {
boost::filesystem::path cpl,
dcp::LocalTime from,
dcp::LocalTime to,
+ dcp::Formulation formulation,
boost::filesystem::path directory
)
{
- list<ScreenKDM> screen_kdms = make_screen_kdms (film, screens, cpl, from, to);
+ list<ScreenKDM> screen_kdms = make_screen_kdms (film, screens, cpl, from, to, formulation);
/* Write KDMs to the specified directory */
for (list<ScreenKDM>::iterator i = screen_kdms.begin(); i != screen_kdms.end(); ++i) {
boost::filesystem::path cpl,
dcp::LocalTime from,
dcp::LocalTime to,
+ dcp::Formulation formulation,
boost::filesystem::path directory
)
{
- list<CinemaKDMs> cinema_kdms = make_cinema_kdms (film, screens, cpl, from, to);
+ list<CinemaKDMs> cinema_kdms = make_cinema_kdms (film, screens, cpl, from, to, formulation);
for (list<CinemaKDMs>::const_iterator i = cinema_kdms.begin(); i != cinema_kdms.end(); ++i) {
boost::filesystem::path path = directory;
list<shared_ptr<Screen> > screens,
boost::filesystem::path cpl,
dcp::LocalTime from,
- dcp::LocalTime to
+ dcp::LocalTime to,
+ dcp::Formulation formulation
)
{
- list<CinemaKDMs> cinema_kdms = make_cinema_kdms (film, screens, cpl, from, to);
+ list<CinemaKDMs> cinema_kdms = make_cinema_kdms (film, screens, cpl, from, to, formulation);
for (list<CinemaKDMs>::const_iterator i = cinema_kdms.begin(); i != cinema_kdms.end(); ++i) {
boost::filesystem::path cpl,
dcp::LocalTime from,
dcp::LocalTime to,
+ dcp::Formulation formulation,
boost::filesystem::path directory
);
boost::filesystem::path cpl,
dcp::LocalTime from,
dcp::LocalTime to,
+ dcp::Formulation formulation,
boost::filesystem::path directory
);
std::list<boost::shared_ptr<Screen> > screens,
boost::filesystem::path cpl,
dcp::LocalTime from,
- dcp::LocalTime to
+ dcp::LocalTime to,
+ dcp::Formulation formulation
);
(*previous)->set_position (p + c->length_after_trim ());
c->set_position (p);
sort (_content.begin(), _content.end(), ContentSorter ());
-
- Changed ();
}
void
(*next)->set_position (c->position ());
c->set_position (p + c->length_after_trim ());
sort (_content.begin(), _content.end(), ContentSorter ());
-
- Changed ();
}
void repeat (ContentList, int);
+ /** Emitted when content has been added to or removed from the playlist */
mutable boost::signals2::signal<void ()> Changed;
- /** Third parameter is true if signals are currently being emitted frequently */
+ /** Emitted when something about a piece of our content has changed;
+ * these emissions include when the position of the content changes.
+ * Third parameter is true if signals are currently being emitted frequently.
+ */
mutable boost::signals2::signal<void (boost::weak_ptr<Content>, int, bool)> ContentChanged;
private:
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-06-23 00:25+0100\n"
+"POT-Creation-Date: 2014-06-24 14:53+0100\n"
"PO-Revision-Date: 2014-06-21 03:55+0100\n"
"Last-Translator: Carsten Kurz\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
msgid "Checking existing image data"
msgstr "Überprüfe bestehende Bilddateien"
-#: src/lib/writer.cc:464
+#: src/lib/writer.cc:471
msgid "Computing audio digest"
msgstr "Tonübersicht berechnen"
msgid "Computing digest"
msgstr "Zusammenfassung berechnen"
-#: src/lib/writer.cc:460
+#: src/lib/writer.cc:467
msgid "Computing image digest"
msgstr "Bildübersicht berechnen"
msgid "There was not enough memory to do this."
msgstr "Zu wenig Speicher für diese Operation."
-#: src/lib/film.cc:412
+#: src/lib/film.cc:413
msgid ""
"This film was created with a newer version of DCP-o-matic, and it cannot be "
"loaded into this version. Sorry!"
"kann leider nicht mit dieser älteren Version geladen werden. Sie müssen den "
"Film neu erstellen. Sorry!"
-#: src/lib/film.cc:404
+#: src/lib/film.cc:405
msgid ""
"This film was created with an older version of DCP-o-matic, and "
"unfortunately it cannot be loaded into this version. You will need to "
msgid "Yet Another Deinterlacing Filter"
msgstr "Und ein weiterer De-Interlacer..."
-#: src/lib/film.cc:309
+#: src/lib/film.cc:310
msgid "You must add some content to the DCP before creating it"
msgstr "Sie müssen erst Inhalte hinzufügen bevor Sie ein DCP erstellen können!"
msgid "[still]"
msgstr "[Standbild]"
-#: src/lib/film.cc:257
+#: src/lib/film.cc:258
msgid "cannot contain slashes"
msgstr "Darf keine Schrägstriche enthalten"
msgid "connecting"
msgstr "verbinde..."
-#: src/lib/film.cc:305
+#: src/lib/film.cc:306
msgid "container"
msgstr "Containerformat"
-#: src/lib/film.cc:313
+#: src/lib/film.cc:314
msgid "content type"
msgstr "Inhaltsbeschreibung"
msgid "could not find video decoder"
msgstr "Bild-Dekoder nicht gefunden"
-#: src/lib/writer.cc:428
+#: src/lib/writer.cc:435
msgid "could not move audio MXF into the DCP (%1)"
msgstr "Ton MXF kann nicht in das DCP verschoben werden (%1)"
msgid "multi-part subtitles not yet supported"
msgstr "Mehr-Segment Untertitel werden noch nicht unterstützt"
-#: src/lib/film.cc:257 src/lib/film.cc:317
+#: src/lib/film.cc:258 src/lib/film.cc:318
msgid "name"
msgstr "Name"
msgstr ""
"Project-Id-Version: LIBDCPOMATIC\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-06-23 00:25+0100\n"
+"POT-Creation-Date: 2014-06-24 14:53+0100\n"
"PO-Revision-Date: 2014-04-20 10:12-0500\n"
"Last-Translator: Manuel AC <manuel.acevedo@civantos.>\n"
"Language-Team: Manuel AC <manuel.acevedo@civantos.com>\n"
msgid "Checking existing image data"
msgstr "Comprobando las imágenes existentes"
-#: src/lib/writer.cc:464
+#: src/lib/writer.cc:471
msgid "Computing audio digest"
msgstr "Calculando la firma resumen del audio"
msgid "Computing digest"
msgstr "Calculando la firma resumen"
-#: src/lib/writer.cc:460
+#: src/lib/writer.cc:467
msgid "Computing image digest"
msgstr "Calculando la firma resumen de imagen"
msgid "There was not enough memory to do this."
msgstr "No hubo suficiente memoria para hacer esto."
-#: src/lib/film.cc:412
+#: src/lib/film.cc:413
msgid ""
"This film was created with a newer version of DCP-o-matic, and it cannot be "
"loaded into this version. Sorry!"
"desgraciadamente no s puede cargar. Necesitas crear una nueva película, "
"volver a añadir y configurar ton contenido. ¡Lo siento!"
-#: src/lib/film.cc:404
+#: src/lib/film.cc:405
msgid ""
"This film was created with an older version of DCP-o-matic, and "
"unfortunately it cannot be loaded into this version. You will need to "
msgid "Yet Another Deinterlacing Filter"
msgstr "Yet Another Deinterlacing Filter"
-#: src/lib/film.cc:309
+#: src/lib/film.cc:310
msgid "You must add some content to the DCP before creating it"
msgstr "Tienes que añadir contenido al DCP antes de crearlo."
msgid "[still]"
msgstr "[imagen fija]"
-#: src/lib/film.cc:257
+#: src/lib/film.cc:258
msgid "cannot contain slashes"
msgstr "no puede contener barras"
msgid "connecting"
msgstr "conectando"
-#: src/lib/film.cc:305
+#: src/lib/film.cc:306
msgid "container"
msgstr "continente"
-#: src/lib/film.cc:313
+#: src/lib/film.cc:314
msgid "content type"
msgstr "tipo de contenido"
msgid "could not find video decoder"
msgstr "no se pudo encontrar decodificador de vídeo"
-#: src/lib/writer.cc:428
+#: src/lib/writer.cc:435
msgid "could not move audio MXF into the DCP (%1)"
msgstr "no s puedo mover el audio MXF en el DCP (%1)"
msgid "multi-part subtitles not yet supported"
msgstr "todavía no se soportan subtítulos en múltiples partes"
-#: src/lib/film.cc:257 src/lib/film.cc:317
+#: src/lib/film.cc:258 src/lib/film.cc:318
msgid "name"
msgstr "nombre"
msgstr ""
"Project-Id-Version: DCP-o-matic FRENCH\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-06-23 00:25+0100\n"
+"POT-Creation-Date: 2014-06-24 14:53+0100\n"
"PO-Revision-Date: 2014-06-20 15:53+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
msgid "Checking existing image data"
msgstr "Recherche de données images existantes"
-#: src/lib/writer.cc:464
+#: src/lib/writer.cc:471
msgid "Computing audio digest"
msgstr "Fabrication rendu audio"
msgid "Computing digest"
msgstr "fabrication rendu"
-#: src/lib/writer.cc:460
+#: src/lib/writer.cc:467
msgid "Computing image digest"
msgstr "Fabrication rendu image"
msgid "There was not enough memory to do this."
msgstr "Il n'y avait pas assez de mémoire pour faire cela."
-#: src/lib/film.cc:412
+#: src/lib/film.cc:413
msgid ""
"This film was created with a newer version of DCP-o-matic, and it cannot be "
"loaded into this version. Sorry!"
"Ce film a été créé avec une nouvelle version de DCP-o-matic et il ne peut "
"être ouvert dans cette version du programme. Désolé!"
-#: src/lib/film.cc:404
+#: src/lib/film.cc:405
msgid ""
"This film was created with an older version of DCP-o-matic, and "
"unfortunately it cannot be loaded into this version. You will need to "
msgid "Yet Another Deinterlacing Filter"
msgstr "Un autre filtre de désentrelacement"
-#: src/lib/film.cc:309
+#: src/lib/film.cc:310
msgid "You must add some content to the DCP before creating it"
msgstr "Ajoutez un contenu pour créer le DCP"
msgid "[still]"
msgstr "[restant]"
-#: src/lib/film.cc:257
+#: src/lib/film.cc:258
msgid "cannot contain slashes"
msgstr "slash interdit"
msgid "connecting"
msgstr "connexion"
-#: src/lib/film.cc:305
+#: src/lib/film.cc:306
msgid "container"
msgstr "conteneur"
-#: src/lib/film.cc:313
+#: src/lib/film.cc:314
msgid "content type"
msgstr "type de contenu"
msgid "could not find video decoder"
msgstr "décodeur vidéo introuvable"
-#: src/lib/writer.cc:428
+#: src/lib/writer.cc:435
msgid "could not move audio MXF into the DCP (%1)"
msgstr "ne peut déplacer un MXF son dans le DCP (%1)"
msgid "multi-part subtitles not yet supported"
msgstr "sous-titres en plusieurs parties non supportés"
-#: src/lib/film.cc:257 src/lib/film.cc:317
+#: src/lib/film.cc:258 src/lib/film.cc:318
msgid "name"
msgstr "nom"
msgstr ""
"Project-Id-Version: IT VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-06-23 00:25+0100\n"
+"POT-Creation-Date: 2014-06-24 14:53+0100\n"
"PO-Revision-Date: 2014-02-03 10:48+0100\n"
"Last-Translator: William Fanelli <william.f@impronte.com>\n"
"Language-Team: \n"
msgid "Checking existing image data"
msgstr ""
-#: src/lib/writer.cc:464
+#: src/lib/writer.cc:471
msgid "Computing audio digest"
msgstr ""
msgid "Computing digest"
msgstr ""
-#: src/lib/writer.cc:460
+#: src/lib/writer.cc:467
msgid "Computing image digest"
msgstr ""
msgid "There was not enough memory to do this."
msgstr ""
-#: src/lib/film.cc:412
+#: src/lib/film.cc:413
#, fuzzy
msgid ""
"This film was created with a newer version of DCP-o-matic, and it cannot be "
"un nuovo film, ri-aggiungere i tuoi contenuti e configurarlo di nuovo. Ci "
"dispiace!"
-#: src/lib/film.cc:404
+#: src/lib/film.cc:405
msgid ""
"This film was created with an older version of DCP-o-matic, and "
"unfortunately it cannot be loaded into this version. You will need to "
msgid "Yet Another Deinterlacing Filter"
msgstr "Altro filtro di deinterlacciamento"
-#: src/lib/film.cc:309
+#: src/lib/film.cc:310
msgid "You must add some content to the DCP before creating it"
msgstr "Devi aggiungere dei contenuti al DCP prima di crearlo"
msgid "[still]"
msgstr "ancora"
-#: src/lib/film.cc:257
+#: src/lib/film.cc:258
msgid "cannot contain slashes"
msgstr "non può contenere barre"
msgid "connecting"
msgstr "mi sto connettendo"
-#: src/lib/film.cc:305
+#: src/lib/film.cc:306
msgid "container"
msgstr "contenitore"
-#: src/lib/film.cc:313
+#: src/lib/film.cc:314
msgid "content type"
msgstr "tipo di contenuto"
msgid "could not find video decoder"
msgstr "non riesco a trovare il decoder video"
-#: src/lib/writer.cc:428
+#: src/lib/writer.cc:435
msgid "could not move audio MXF into the DCP (%1)"
msgstr ""
msgid "multi-part subtitles not yet supported"
msgstr "sottotitoli multi-part non ancora supportati"
-#: src/lib/film.cc:257 src/lib/film.cc:317
+#: src/lib/film.cc:258 src/lib/film.cc:318
msgid "name"
msgstr "nome"
msgstr ""
"Project-Id-Version: DCP-o-matic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-06-23 00:25+0100\n"
+"POT-Creation-Date: 2014-06-24 14:53+0100\n"
"PO-Revision-Date: 2014-03-30 19:39+0100\n"
"Last-Translator: Theo Kooijmans <tkooijmans@universaldv.nl>\n"
"Language-Team: UniversalDV <Tkooijmans@universaldv.nl>\n"
msgid "Checking existing image data"
msgstr "Controleer bestaande videodata"
-#: src/lib/writer.cc:464
+#: src/lib/writer.cc:471
msgid "Computing audio digest"
msgstr "Verwerk audio data"
msgid "Computing digest"
msgstr "Verwerken..."
-#: src/lib/writer.cc:460
+#: src/lib/writer.cc:467
msgid "Computing image digest"
msgstr "Verwerk video data"
msgid "There was not enough memory to do this."
msgstr "Er was niet genoeg geheugen om dit uit te voeren."
-#: src/lib/film.cc:412
+#: src/lib/film.cc:413
msgid ""
"This film was created with a newer version of DCP-o-matic, and it cannot be "
"loaded into this version. Sorry!"
"Deze film is gemaakt met een nieuwere versie van DCP-o-matic en kan niet "
"geopend worden. Sorry!"
-#: src/lib/film.cc:404
+#: src/lib/film.cc:405
msgid ""
"This film was created with an older version of DCP-o-matic, and "
"unfortunately it cannot be loaded into this version. You will need to "
msgid "Yet Another Deinterlacing Filter"
msgstr "Yet Another Deinterlacing Filter"
-#: src/lib/film.cc:309
+#: src/lib/film.cc:310
msgid "You must add some content to the DCP before creating it"
msgstr "U moet wat content toevoegen voor het maken van de DCP"
msgid "[still]"
msgstr "[still]"
-#: src/lib/film.cc:257
+#: src/lib/film.cc:258
msgid "cannot contain slashes"
msgstr "er mag geen '\" gebruikt worden"
msgid "connecting"
msgstr "verbinden"
-#: src/lib/film.cc:305
+#: src/lib/film.cc:306
msgid "container"
msgstr "container"
-#: src/lib/film.cc:313
+#: src/lib/film.cc:314
msgid "content type"
msgstr "content type"
msgid "could not find video decoder"
msgstr "kan geen videodecoder vinden"
-#: src/lib/writer.cc:428
+#: src/lib/writer.cc:435
msgid "could not move audio MXF into the DCP (%1)"
msgstr "kan MXF audio niet plaatsen in DCP (%1)"
msgid "multi-part subtitles not yet supported"
msgstr "ondertitels met meerdere delen worden nog niet ondersteund."
-#: src/lib/film.cc:257 src/lib/film.cc:317
+#: src/lib/film.cc:258 src/lib/film.cc:318
msgid "name"
msgstr "naam"
msgstr ""
"Project-Id-Version: DCP-o-matic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-06-23 00:25+0100\n"
+"POT-Creation-Date: 2014-06-24 14:53+0100\n"
"PO-Revision-Date: 2014-01-19 08:59+0100\n"
"Last-Translator: Adam Klotblixt <adam.klotblixt@gmail.com>\n"
"Language-Team: \n"
msgid "Checking existing image data"
msgstr "Kontrollerar befintligt bilddata"
-#: src/lib/writer.cc:464
+#: src/lib/writer.cc:471
msgid "Computing audio digest"
msgstr "Beräknar audiosammanfattning"
msgid "Computing digest"
msgstr "Beräknar sammanfattning"
-#: src/lib/writer.cc:460
+#: src/lib/writer.cc:467
msgid "Computing image digest"
msgstr "Beräknar bildsammanfattning"
msgid "There was not enough memory to do this."
msgstr ""
-#: src/lib/film.cc:412
+#: src/lib/film.cc:413
#, fuzzy
msgid ""
"This film was created with a newer version of DCP-o-matic, and it cannot be "
"inte öppnas i denna version. Du måste skapa en ny Film, lägga till ditt "
"innehåll och konfigurera allt igen. Ursäkta!"
-#: src/lib/film.cc:404
+#: src/lib/film.cc:405
msgid ""
"This film was created with an older version of DCP-o-matic, and "
"unfortunately it cannot be loaded into this version. You will need to "
msgid "Yet Another Deinterlacing Filter"
msgstr "Yet Another Deinterlacing Filter"
-#: src/lib/film.cc:309
+#: src/lib/film.cc:310
msgid "You must add some content to the DCP before creating it"
msgstr "Du måste lägga till något innehåll till DCP:n innan du skapar den"
msgid "[still]"
msgstr "[stillbild]"
-#: src/lib/film.cc:257
+#: src/lib/film.cc:258
msgid "cannot contain slashes"
msgstr "får inte innehålla snedstreck"
msgid "connecting"
msgstr "kopplar upp"
-#: src/lib/film.cc:305
+#: src/lib/film.cc:306
msgid "container"
msgstr "behållare"
-#: src/lib/film.cc:313
+#: src/lib/film.cc:314
msgid "content type"
msgstr "innehållstyp"
msgid "could not find video decoder"
msgstr "kunde inte hitta video-avkodare"
-#: src/lib/writer.cc:428
+#: src/lib/writer.cc:435
msgid "could not move audio MXF into the DCP (%1)"
msgstr "kunde inte flytta audio-MXF in i DCP:n (%1)"
msgid "multi-part subtitles not yet supported"
msgstr "undertexter i flera delar stöds inte ännu"
-#: src/lib/film.cc:257 src/lib/film.cc:317
+#: src/lib/film.cc:258 src/lib/film.cc:318
msgid "name"
msgstr "namn"
list<shared_ptr<Screen> > screens,
boost::filesystem::path dcp,
boost::posix_time::ptime from,
- boost::posix_time::ptime to
+ boost::posix_time::ptime to,
+ dcp::Formulation formulation
)
: Job (f)
, _screens (screens)
, _dcp (dcp)
, _from (from)
, _to (to)
+ , _formulation (formulation)
{
}
try {
set_progress_unknown ();
- email_kdms (_film, _screens, _dcp, _from, _to);
+ email_kdms (_film, _screens, _dcp, _from, _to, _formulation);
set_progress (1);
set_state (FINISHED_OK);
*/
#include <boost/filesystem.hpp>
+#include <dcp/types.h>
#include "job.h"
class Screen;
std::list<boost::shared_ptr<Screen> >,
boost::filesystem::path,
boost::posix_time::ptime,
- boost::posix_time::ptime
+ boost::posix_time::ptime,
+ dcp::Formulation
);
std::string name () const;
boost::filesystem::path _dcp;
boost::posix_time::ptime _from;
boost::posix_time::ptime _to;
+ dcp::Formulation _formulation;
};
{
boost::mutex::scoped_lock lm (_worker_mutex);
_terminate = true;
- _worker_condition.notify_all ();
+ _empty_condition.notify_all ();
}
for (vector<boost::thread*>::iterator i = _worker_threads.begin(); i != _worker_threads.end(); ++i) {
while (1) {
boost::mutex::scoped_lock lock (_worker_mutex);
while (_queue.empty () && !_terminate) {
- _worker_condition.wait (lock);
+ _empty_condition.wait (lock);
}
if (_terminate) {
LOG_GENERAL_NC (message.str ());
}
- _worker_condition.notify_all ();
+ _full_condition.notify_all ();
}
}
/* Wait until the queue has gone down a bit */
while (_queue.size() >= _worker_threads.size() * 2 && !_terminate) {
- _worker_condition.wait (lock);
+ _full_condition.wait (lock);
}
_queue.push_back (socket);
- _worker_condition.notify_all ();
+ _empty_condition.notify_all ();
start_accept ();
}
std::vector<boost::thread *> _worker_threads;
std::list<boost::shared_ptr<Socket> > _queue;
boost::mutex _worker_mutex;
- boost::condition _worker_condition;
-
+ boost::condition _full_condition;
+ boost::condition _empty_condition;
boost::shared_ptr<Log> _log;
bool _verbose;
#define DCPOMATIC_HELLO "Boys, you gotta learn not to talk to nuns that way"
-namespace libdcp {
+namespace dcp {
class Signer;
}
set_right_crop (crop / 2);
}
+void
+VideoContent::set_video_frame_rate (float r)
+{
+ {
+ boost::mutex::scoped_lock lm (_mutex);
+ if (_video_frame_rate == r) {
+ return;
+ }
+
+ _video_frame_rate = r;
+ }
+
+ signal_changed (VideoContentProperty::VIDEO_FRAME_RATE);
+}
+
VideoContentScale::VideoContentScale (Ratio const * r)
: _ratio (r)
, _scale (true)
}
void set_video_frame_type (VideoFrameType);
+ void set_video_frame_rate (float);
void set_left_crop (int);
void set_right_crop (int);
boost::mutex::scoped_lock lock (_mutex);
while (_queued_full_in_memory > _maximum_frames_in_memory) {
+ /* The queue is too big; wait until that is sorted out */
_full_condition.wait (lock);
}
_queue.push_back (qi);
++_queued_full_in_memory;
}
-
+
+ /* Now there's something to do: wake anything wait()ing on _empty_condition */
_empty_condition.notify_all ();
}
boost::mutex::scoped_lock lock (_mutex);
while (_queued_full_in_memory > _maximum_frames_in_memory) {
+ /* The queue is too big; wait until that is sorted out */
_full_condition.wait (lock);
}
_queue.push_back (qi);
}
+ /* Now there's something to do: wake anything wait()ing on _empty_condition */
_empty_condition.notify_all ();
}
while (1) {
if (_finish || _queued_full_in_memory > _maximum_frames_in_memory || have_sequenced_image_at_queue_head ()) {
+ /* We've got something to do: go and do it */
break;
}
+ /* Nothing to do: wait until something happens which may indicate that we do */
LOG_TIMING (N_("writer sleeps with a queue of %1"), _queue.size());
_empty_condition.wait (lock);
LOG_TIMING (N_("writer wakes with a queue of %1"), _queue.size());
--_queued_full_in_memory;
}
+ /* The queue has probably just gone down a bit; notify anything wait()ing on _full_condition */
_full_condition.notify_all ();
}
}
try {
if (d->write_to ()) {
- write_kdm_files (film, d->screens (), d->cpl (), d->from (), d->until (), d->directory ());
+ write_kdm_files (film, d->screens (), d->cpl (), d->from (), d->until (), d->formulation (), d->directory ());
} else {
JobManager::instance()->add (
- shared_ptr<Job> (new SendKDMEmailJob (film, d->screens (), d->cpl (), d->from (), d->until ()))
+ shared_ptr<Job> (new SendKDMEmailJob (film, d->screens (), d->cpl (), d->from (), d->until (), d->formulation ()))
);
}
} catch (dcp::NotEncryptedError& e) {
" -f, --valid-from valid from time (in local time zone) (e.g. \"2013-09-28 01:41:51\") or \"now\"\n"
" -t, --valid-to valid to time (in local time zone) (e.g. \"2014-09-28 01:41:51\")\n"
" -d, --valid-duration valid duration (e.g. \"1 day\", \"4 hours\", \"2 weeks\")\n"
+ " --formulation modified-transitional-1, dci-any or dci-specific [default modified-transitional-1]\n"
" -z, --zip ZIP each cinema's KDMs into its own file\n"
" -v, --verbose be verbose\n"
" -c, --cinema specify a cinema, either by name or email address\n"
bool cinemas = false;
string duration_string;
bool verbose = false;
+ dcp::Formulation formulation = dcp::MODIFIED_TRANSITIONAL_1;
program_name = argv[0];
{ "zip", no_argument, 0, 'z' },
{ "duration", required_argument, 0, 'd' },
{ "verbose", no_argument, 0, 'v' },
+ { "formulation", required_argument, 0, 'C' },
{ 0, 0, 0, 0 }
};
- int c = getopt_long (argc, argv, "ho:f:t:c:A:Bzd:v", long_options, &option_index);
+ int c = getopt_long (argc, argv, "ho:f:t:c:A:Bzd:vC:", long_options, &option_index);
if (c == -1) {
break;
case 'v':
verbose = true;
break;
+ case 'C':
+ if (string (optarg) == "modified-transitional-1") {
+ formulation = dcp::MODIFIED_TRANSITIONAL_1;
+ } else if (string (optarg) == "dci-any") {
+ formulation = dcp::DCI_ANY;
+ } else if (string (optarg) == "dci-specific") {
+ formulation = dcp::DCI_SPECIFIC;
+ } else {
+ error ("unrecognised KDM formulation " + formulation);
+ }
}
}
}
shared_ptr<dcp::Certificate> certificate (new dcp::Certificate (boost::filesystem::path (certificate_file)));
- dcp::EncryptedKDM kdm = film->make_kdm (certificate, cpl, valid_from.get(), valid_to.get());
+ dcp::EncryptedKDM kdm = film->make_kdm (certificate, cpl, valid_from.get(), valid_to.get(), formulation);
kdm.as_xml (output);
if (verbose) {
cout << "Generated KDM " << output << " for certificate.\n";
try {
if (zip) {
- write_kdm_zip_files (film, (*i)->screens(), cpl, dcp::LocalTime (valid_from.get()), dcp::LocalTime (valid_to.get()), output);
-
+ write_kdm_zip_files (
+ film, (*i)->screens(), cpl, dcp::LocalTime (valid_from.get()), dcp::LocalTime (valid_to.get()), formulation, output
+ );
+
if (verbose) {
cout << "Wrote ZIP files to " << output << "\n";
}
} else {
- write_kdm_files (film, (*i)->screens(), cpl, dcp::LocalTime (valid_from.get()), dcp::LocalTime (valid_to.get()), output);
+ write_kdm_files (
+ film, (*i)->screens(), cpl, dcp::LocalTime (valid_from.get()), dcp::LocalTime (valid_to.get()), formulation, output
+ );
+
if (verbose) {
cout << "Wrote KDM files to " << output << "\n";
}
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-06-23 00:25+0100\n"
+"POT-Creation-Date: 2014-06-24 14:53+0100\n"
"PO-Revision-Date: 2014-06-21 02:38+0100\n"
"Last-Translator: Carsten Kurz\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
msgstr ""
"Project-Id-Version: DCPOMATIC\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-06-23 00:25+0100\n"
+"POT-Creation-Date: 2014-06-24 14:53+0100\n"
"PO-Revision-Date: 2014-04-20 10:21-0500\n"
"Last-Translator: Manuel AC <manuel.acevedo@civantos.>\n"
"Language-Team: Manuel AC <manuel.acevedo@civantos.com>\n"
msgstr ""
"Project-Id-Version: DCP-o-matic FRENCH\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-06-23 00:25+0100\n"
+"POT-Creation-Date: 2014-06-24 14:53+0100\n"
"PO-Revision-Date: 2014-06-20 15:57+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
msgstr ""
"Project-Id-Version: IT VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-06-23 00:25+0100\n"
+"POT-Creation-Date: 2014-06-24 14:53+0100\n"
"PO-Revision-Date: 2014-02-03 09:36+0100\n"
"Last-Translator: William Fanelli <william.f@impronte.com>\n"
"Language-Team: \n"
msgstr ""
"Project-Id-Version: DCP-o-matic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-06-23 00:25+0100\n"
+"POT-Creation-Date: 2014-06-24 14:53+0100\n"
"PO-Revision-Date: 2014-03-30 19:38+0100\n"
"Last-Translator: Theo Kooijmans <tkooijmans@universaldv.nl>\n"
"Language-Team: UniversalDV <Tkooijmans@universaldv.nl>\n"
msgstr ""
"Project-Id-Version: DCP-o-matic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-06-23 00:25+0100\n"
+"POT-Creation-Date: 2014-06-24 14:53+0100\n"
"PO-Revision-Date: 2014-01-19 08:59+0100\n"
"Last-Translator: Adam Klotblixt <adam.klotblixt@gmail.com>\n"
"Language-Team: \n"
supported_by.Add (wxT ("Manual AC"));
supported_by.Add (wxT ("Kambiz Afshar"));
supported_by.Add (wxT ("Louis Belloisy"));
+ supported_by.Add (wxT ("Mike Blakesley"));
supported_by.Add (wxT ("Jeff Boot"));
supported_by.Add (wxT ("Kieran Carroll"));
supported_by.Add (wxT ("Frank Cianciolo"));
table = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, 0);
+ add_label_to_sizer (table, this, _("KDM type"), true);
+ _type = new wxChoice (this, wxID_ANY);
+ _type->Append ("Modified Transitional 1");
+ _type->Append ("DCI Any");
+ _type->Append ("DCI Specific");
+ table->Add (_type, 1, wxEXPAND);
+ _type->SetSelection (0);
+
_write_to = new wxRadioButton (this, wxID_ANY, _("Write to"));
table->Add (_write_to, 1, wxEXPAND);
return _write_to->GetValue ();
}
+dcp::Formulation
+KDMDialog::formulation () const
+{
+ switch (_type->GetSelection()) {
+ case 0:
+ return dcp::MODIFIED_TRANSITIONAL_1;
+ case 1:
+ return dcp::DCI_ANY;
+ case 2:
+ return dcp::DCI_SPECIFIC;
+ default:
+ assert (false);
+ }
+}
+
void
KDMDialog::update_cpl_choice ()
{
boost::filesystem::path cpl () const;
boost::filesystem::path directory () const;
bool write_to () const;
+ dcp::Formulation formulation () const;
private:
void add_cinema (boost::shared_ptr<Cinema>);
wxStaticText* _dcp_directory;
wxStaticText* _cpl_id;
wxStaticText* _cpl_annotation_text;
+ wxChoice* _type;
wxRadioButton* _write_to;
#ifdef DCPOMATIC_USE_OWN_DIR_PICKER
DirPickerCtrl* _folder;
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-06-23 00:25+0100\n"
+"POT-Creation-Date: 2014-06-24 14:53+0100\n"
"PO-Revision-Date: 2014-06-21 04:06+0100\n"
"Last-Translator: Carsten Kurz\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
msgid "Subtitles"
msgstr "Untertitel"
-#: src/wx/about_dialog.cc:152
+#: src/wx/about_dialog.cc:153
msgid "Supported by"
msgstr "Unterstützt durch"
msgid "Test version "
msgstr "Test Version"
-#: src/wx/about_dialog.cc:197
+#: src/wx/about_dialog.cc:198
msgid "Tested by"
msgstr "Getestet von"
"Ihr DCP hat weniger als 6 Audiokanäle. Das kann auf manchen Projektoren zu "
"Problemen führen."
-#: src/wx/timeline.cc:216
+#: src/wx/timeline.cc:220
msgid "audio"
msgstr "Ton"
msgid "s"
msgstr "s"
-#: src/wx/timeline.cc:239
+#: src/wx/timeline.cc:243
msgid "still"
msgstr "Standbild"
msgid "times"
msgstr "Zeiten"
-#: src/wx/timeline.cc:237
+#: src/wx/timeline.cc:241
msgid "video"
msgstr "Bild"
msgstr ""
"Project-Id-Version: libdcpomatic-wx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-06-23 00:25+0100\n"
+"POT-Creation-Date: 2014-06-24 14:53+0100\n"
"PO-Revision-Date: 2014-04-20 12:06-0500\n"
"Last-Translator: Manuel AC <manuel.acevedo@civantos.>\n"
"Language-Team: Manuel AC <manuel.acevedo@civantos.com>\n"
msgid "Subtitles"
msgstr "Subtítulos"
-#: src/wx/about_dialog.cc:152
+#: src/wx/about_dialog.cc:153
msgid "Supported by"
msgstr "Soportado por"
msgid "Test version "
msgstr "Versión en prueba"
-#: src/wx/about_dialog.cc:197
+#: src/wx/about_dialog.cc:198
msgid "Tested by"
msgstr "Comprobado por"
"Tu DCP tiene menos de 6 canales de audio. Esto puede causar problemas con "
"algunos proyectores."
-#: src/wx/timeline.cc:216
+#: src/wx/timeline.cc:220
msgid "audio"
msgstr "audio"
msgid "s"
msgstr "s"
-#: src/wx/timeline.cc:239
+#: src/wx/timeline.cc:243
msgid "still"
msgstr "fijo"
msgid "times"
msgstr "veces"
-#: src/wx/timeline.cc:237
+#: src/wx/timeline.cc:241
msgid "video"
msgstr "vídeo"
msgstr ""
"Project-Id-Version: DCP-o-matic FRENCH\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-06-23 00:25+0100\n"
+"POT-Creation-Date: 2014-06-24 14:53+0100\n"
"PO-Revision-Date: 2014-06-20 16:08+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
msgid "Subtitles"
msgstr "Sous-titres"
-#: src/wx/about_dialog.cc:152
+#: src/wx/about_dialog.cc:153
msgid "Supported by"
msgstr "Soutenu par"
msgid "Test version "
msgstr "Version Test"
-#: src/wx/about_dialog.cc:197
+#: src/wx/about_dialog.cc:198
msgid "Tested by"
msgstr "Testé par"
"Votre DCP a moins de 6 canaux audio. Cela peut créer des problèmes de "
"lecture sur certains projecteurs."
-#: src/wx/timeline.cc:216
+#: src/wx/timeline.cc:220
msgid "audio"
msgstr "audio"
msgid "s"
msgstr "s"
-#: src/wx/timeline.cc:239
+#: src/wx/timeline.cc:243
msgid "still"
msgstr "fixe"
msgid "times"
msgstr "fois"
-#: src/wx/timeline.cc:237
+#: src/wx/timeline.cc:241
msgid "video"
msgstr "vidéo"
msgstr ""
"Project-Id-Version: IT VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-06-23 00:25+0100\n"
+"POT-Creation-Date: 2014-06-24 14:53+0100\n"
"PO-Revision-Date: 2014-02-03 10:46+0100\n"
"Last-Translator: William Fanelli <william.f@impronte.com>\n"
"Language-Team: \n"
msgid "Subtitles"
msgstr "Sottotitoli"
-#: src/wx/about_dialog.cc:152
+#: src/wx/about_dialog.cc:153
msgid "Supported by"
msgstr ""
msgid "Test version "
msgstr "Versione di test"
-#: src/wx/about_dialog.cc:197
+#: src/wx/about_dialog.cc:198
msgid "Tested by"
msgstr ""
"Il vostro DCP ha meno di 6 canali audio. Questo può causare problemi su "
"alcuni proiettori."
-#: src/wx/timeline.cc:216
+#: src/wx/timeline.cc:220
#, fuzzy
msgid "audio"
msgstr "Audio"
msgid "s"
msgstr "s"
-#: src/wx/timeline.cc:239
+#: src/wx/timeline.cc:243
msgid "still"
msgstr ""
msgid "times"
msgstr ""
-#: src/wx/timeline.cc:237
+#: src/wx/timeline.cc:241
#, fuzzy
msgid "video"
msgstr "Video"
msgstr ""
"Project-Id-Version: DCP-o-matic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-06-23 00:25+0100\n"
+"POT-Creation-Date: 2014-06-24 14:53+0100\n"
"PO-Revision-Date: 2014-03-30 19:40+0100\n"
"Last-Translator: Theo Kooijmans <tkooijmans@universaldv.nl>\n"
"Language-Team: UniversalDV <TKooijmans@universaldv.nl>\n"
msgid "Subtitles"
msgstr "Ondertitels"
-#: src/wx/about_dialog.cc:152
+#: src/wx/about_dialog.cc:153
msgid "Supported by"
msgstr "Ondersteund door"
msgid "Test version "
msgstr "Test Versie"
-#: src/wx/about_dialog.cc:197
+#: src/wx/about_dialog.cc:198
msgid "Tested by"
msgstr "Getest door"
"Uw DCP heeft minder dan 6 audio kanalen. This kan problemen geven op sommige "
"projectors."
-#: src/wx/timeline.cc:216
+#: src/wx/timeline.cc:220
msgid "audio"
msgstr "audio"
msgid "s"
msgstr "s"
-#: src/wx/timeline.cc:239
+#: src/wx/timeline.cc:243
msgid "still"
msgstr "still"
msgid "times"
msgstr "tijden"
-#: src/wx/timeline.cc:237
+#: src/wx/timeline.cc:241
msgid "video"
msgstr "video"
msgstr ""
"Project-Id-Version: DCP-o-matic\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-06-23 00:25+0100\n"
+"POT-Creation-Date: 2014-06-24 14:53+0100\n"
"PO-Revision-Date: 2014-01-19 09:14+0100\n"
"Last-Translator: Adam Klotblixt <adam.klotblixt@gmail.com>\n"
"Language-Team: \n"
msgid "Subtitles"
msgstr "Undertexter"
-#: src/wx/about_dialog.cc:152
+#: src/wx/about_dialog.cc:153
msgid "Supported by"
msgstr "Stöd från"
msgid "Test version "
msgstr "Testversion"
-#: src/wx/about_dialog.cc:197
+#: src/wx/about_dialog.cc:198
#, fuzzy
msgid "Tested by"
msgstr "Översatt av"
"Din DCP har mindre än 6 audiokanaler. Detta kan medföra problem på vissa "
"projektorer."
-#: src/wx/timeline.cc:216
+#: src/wx/timeline.cc:220
msgid "audio"
msgstr "audio"
msgid "s"
msgstr "s"
-#: src/wx/timeline.cc:239
+#: src/wx/timeline.cc:243
msgid "still"
msgstr "stillbild"
msgid "times"
msgstr "tider"
-#: src/wx/timeline.cc:237
+#: src/wx/timeline.cc:241
msgid "video"
msgstr "video"
_track = t;
}
+ void unset_track () {
+ _track = boost::optional<int> ();
+ }
+
optional<int> track () const {
return _track;
}
SetMinSize (wxSize (640, tracks() * track_height() + 96));
- _playlist_connection = film->playlist()->Changed.connect (bind (&Timeline::playlist_changed, this));
+ _playlist_changed_connection = film->playlist()->Changed.connect (bind (&Timeline::playlist_changed, this));
+ _playlist_content_changed_connection = film->playlist()->ContentChanged.connect (bind (&Timeline::playlist_content_changed, this, _2));
}
void
Refresh ();
}
+void
+Timeline::playlist_content_changed (int property)
+{
+ ensure_ui_thread ();
+
+ if (property == ContentProperty::POSITION) {
+ assign_tracks ();
+ setup_pixels_per_second ();
+ Refresh ();
+ }
+}
+
void
Timeline::assign_tracks ()
{
+ for (ViewList::iterator i = _views.begin(); i != _views.end(); ++i) {
+ shared_ptr<ContentView> c = dynamic_pointer_cast<ContentView> (*i);
+ if (c) {
+ c->unset_track ();
+ }
+ }
+
for (ViewList::iterator i = _views.begin(); i != _views.end(); ++i) {
shared_ptr<ContentView> cv = dynamic_pointer_cast<ContentView> (*i);
if (!cv) {
if (new_position < DCPTime ()) {
new_position = DCPTime ();
}
-
+
_down_view->content()->set_position (new_position);
shared_ptr<Film> film = _film.lock ();
void right_down (wxMouseEvent &);
void mouse_moved (wxMouseEvent &);
void playlist_changed ();
+ void playlist_content_changed (int);
void resized ();
void assign_tracks ();
void set_position_from_event (wxMouseEvent &);
ContentMenu _menu;
bool _snap;
- boost::signals2::scoped_connection _playlist_connection;
+ boost::signals2::scoped_connection _playlist_changed_connection;
+ boost::signals2::scoped_connection _playlist_content_changed_connection;
};
*/
+#include <dcp/raw_convert.h>
#include "lib/content.h"
#include "lib/image_content.h"
#include "timing_panel.h"
using std::string;
using boost::shared_ptr;
using boost::dynamic_pointer_cast;
-using boost::lexical_cast;
+using dcp::raw_convert;
TimingPanel::TimingPanel (FilmEditor* e)
/* horrid hack for apparent lack of context support with wxWidgets i18n code */
if (content) {
shared_ptr<VideoContent> vc = dynamic_pointer_cast<VideoContent> (content);
if (vc) {
- _video_frame_rate->SetValue (std_to_wx (lexical_cast<string> (vc->video_frame_rate ())));
+ _video_frame_rate->SetValue (std_to_wx (raw_convert<string> (vc->video_frame_rate (), 5)));
} else {
_video_frame_rate->SetValue ("24");
}
}
}
+ shared_ptr<VideoContent> vc = dynamic_pointer_cast<VideoContent> (content);
shared_ptr<ImageContent> ic = dynamic_pointer_cast<ImageContent> (content);
_full_length->set_editable (ic && ic->still ());
_play_length->set_editable (!ic || !ic->still ());
- _video_frame_rate->Enable (ic && !ic->still ());
+ _video_frame_rate->Enable (vc);
_set_video_frame_rate->Enable (false);
}
{
ContentList c = _editor->selected_content ();
if (c.size() == 1) {
- shared_ptr<ImageContent> ic = dynamic_pointer_cast<ImageContent> (c.front ());
- if (ic) {
- ic->set_video_frame_rate (lexical_cast<float> (wx_to_std (_video_frame_rate->GetValue ())));
+ shared_ptr<VideoContent> vc = dynamic_pointer_cast<VideoContent> (c.front ());
+ if (vc) {
+ vc->set_video_frame_rate (raw_convert<float> (wx_to_std (_video_frame_rate->GetValue ())));
}
_set_video_frame_rate->Enable (false);
}
conf.env.STLIB_WXWIDGETS = ['wx_gtk2u_richtext-3.0', 'wx_gtk2u_xrc-3.0', 'wx_gtk2u_qa-3.0', 'wx_baseu_net-3.0', 'wx_gtk2u_html-3.0',
'wx_gtk2u_adv-3.0', 'wx_gtk2u_core-3.0', 'wx_baseu_xml-3.0', 'wx_baseu-3.0']
conf.env.LIB_WXWIDGETS = ['tiff', 'SM', 'dl', 'jpeg', 'png', 'X11', 'expat']
+ if conf.env.TARGET_DEBIAN and conf.env.DEBIAN_UNSTABLE:
+ conf.env.LIB_WXWIDGETS.append('Xxf86vm')
+ conf.env.LIB_WXWIDGETS.append('Xext')
+ conf.env.LIB_WXWIDGETS.append('X11')
conf.in_msg = 1
wx_version = conf.check_cfg(package='', path=conf.options.wx_config, args='--version').strip()
film->set_isdcf_metadata (m);
film->set_video_frame_rate (48);
BOOST_CHECK_EQUAL (film->isdcf_name(false), "MyNiceFilmWith_XSN-2-Temp-Pre-RedBand-MyChain-2D-4fl-48_F-133_DE-FR_US-R_10_4K_DI_20140704_PP_SMPTE_VF");
+
+ /* Test a name which is already in camelCase */
+
+ film->set_three_d (false);
+ m.temp_version = false;
+ m.pre_release = false;
+ m.red_band = false;
+ m.chain = "";
+ m.two_d_version_of_three_d = false;
+ m.mastered_luminance = "";
+ film->set_isdcf_metadata (m);
+ film->set_video_frame_rate (24);
+ film->set_name ("IKnowCamels");
+ BOOST_CHECK_EQUAL (film->isdcf_name(false), "IKnowCamels_XSN-2_F-133_DE-FR_US-R_10_4K_DI_20140704_PP_SMPTE_VF");
+
+ /* And one in capitals */
+
+ film->set_name ("LIKE SHOUTING");
+ BOOST_CHECK_EQUAL (film->isdcf_name(false), "LikeShouting_XSN-2_F-133_DE-FR_US-R_10_4K_DI_20140704_PP_SMPTE_VF");
}
+
dcp::Size out_size (1024, 1024);
list<AVPixelFormat> pix_fmts;
- pix_fmts.push_back (AV_PIX_FMT_RGB24);
+ pix_fmts.push_back (AV_PIX_FMT_RGB24); // 2
pix_fmts.push_back (AV_PIX_FMT_ARGB);
pix_fmts.push_back (AV_PIX_FMT_RGBA);
pix_fmts.push_back (AV_PIX_FMT_ABGR);
pix_fmts.push_back (AV_PIX_FMT_BGRA);
- pix_fmts.push_back (AV_PIX_FMT_YUV420P);
+ pix_fmts.push_back (AV_PIX_FMT_YUV420P); // 0
pix_fmts.push_back (AV_PIX_FMT_YUV411P);
pix_fmts.push_back (AV_PIX_FMT_YUV422P10LE);
pix_fmts.push_back (AV_PIX_FMT_YUV422P16LE);
pix_fmts.push_back (AV_PIX_FMT_YUVA420P16LE);
pix_fmts.push_back (AV_PIX_FMT_YUVA422P16LE);
pix_fmts.push_back (AV_PIX_FMT_YUVA444P16LE);
-
+ pix_fmts.push_back (AV_PIX_FMT_RGB555LE); // 46
+
int N = 0;
for (list<AVPixelFormat>::const_iterator i = pix_fmts.begin(); i != pix_fmts.end(); ++i) {
boost::shared_ptr<Image> foo (new Image (*i, in_size, true));
opt.add_option('--disable-gui', action='store_true', default=False, help='disable building of GUI tools')
opt.add_option('--target-windows', action='store_true', default=False, help='set up to do a cross-compile to make a Windows package')
opt.add_option('--target-debian', action='store_true', default=False, help='set up to compile for a Debian/Ubuntu package')
+ opt.add_option('--debian-unstable', action='store_true', default=False, help='add extra libraries to static-build correctly on Debian unstable')
opt.add_option('--target-centos', action='store_true', default=False, help='set up to compile for a Centos package')
opt.add_option('--magickpp-config', action='store', default='Magick++-config', help='path to Magick++-config')
opt.add_option('--wx-config', action='store', default='wx-config', help='path to wx-config')
conf.check_cfg(package='libopenjpeg', args='--cflags --libs', max_version='1.5.2', mandatory=True)
def static_dcp(conf, static_boost, static_xmlpp, static_xmlsec, static_ssh):
- conf.check_cfg(package='libdcp-1.0', atleast_version='0.92', args='--cflags', uselib_store='DCP', mandatory=True)
+ conf.check_cfg(package='libdcp-1.0', atleast_version='0.95', args='--cflags', uselib_store='DCP', mandatory=True)
conf.env.DEFINES_DCP = [f.replace('\\', '') for f in conf.env.DEFINES_DCP]
conf.env.STLIB_DCP = ['dcp-1.0', 'asdcp-libdcp-1.0', 'kumu-libdcp-1.0']
conf.env.LIB_DCP = ['glibmm-2.4', 'ssl', 'crypto', 'bz2', 'xslt']
conf.env.TARGET_WINDOWS = conf.options.target_windows
conf.env.DISABLE_GUI = conf.options.disable_gui
conf.env.TARGET_DEBIAN = conf.options.target_debian
+ conf.env.DEBIAN_UNSTABLE = conf.options.debian_unstable
conf.env.TARGET_CENTOS = conf.options.target_centos
conf.env.VERSION = VERSION
conf.env.TARGET_OSX = sys.platform == 'darwin'