diff options
author | Damiano Galassi <[email protected]> | 2016-01-15 08:20:42 +0100 |
---|---|---|
committer | Damiano Galassi <[email protected]> | 2016-01-15 08:20:42 +0100 |
commit | 9d4bbeefaba8f6dabdc8e48b34feb7de2d057a68 (patch) | |
tree | 9b9933c43bc80b29937cdb3040c26678c41adc77 | |
parent | b0c52adc40ee25b6be77a3598a319d75bc6d9025 (diff) |
MacGui: add the rotate filter to the picture tab.
-rw-r--r-- | macosx/English.lproj/HBPictureViewController.xib | 127 | ||||
-rw-r--r-- | macosx/HBFilters.h | 5 | ||||
-rw-r--r-- | macosx/HBFilters.m | 35 | ||||
-rw-r--r-- | macosx/HBJob+HBJobConversion.m | 4 |
4 files changed, 98 insertions, 73 deletions
diff --git a/macosx/English.lproj/HBPictureViewController.xib b/macosx/English.lproj/HBPictureViewController.xib index 44e364914..1f6315a0d 100644 --- a/macosx/English.lproj/HBPictureViewController.xib +++ b/macosx/English.lproj/HBPictureViewController.xib @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9052" systemVersion="15B22c" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none"> +<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9531" systemVersion="15E27e" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none"> <dependencies> <deployment identifier="macosx"/> <development version="6300" identifier="xcode"/> - <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9052"/> + <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9531"/> </dependencies> <objects> <customObject id="-2" userLabel="File's Owner" customClass="HBPictureViewController"> @@ -22,7 +22,6 @@ <stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" id="Mke-9L-LvB"> <rect key="frame" x="726" y="252" width="15" height="22"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <stepperCell key="cell" controlSize="small" continuous="YES" alignment="left" increment="2" maxValue="59" id="jWe-et-eOH"> <font key="font" metaFont="smallSystem"/> </stepperCell> @@ -48,7 +47,6 @@ <matrix verticalHuggingPriority="750" allowsEmptySelection="NO" autosizesCells="NO" id="RTr-3u-52l"> <rect key="frame" x="613" y="280" width="90" height="43"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> <size key="cellSize" width="90" height="20"/> <size key="intercellSpacing" width="2" height="3"/> @@ -85,7 +83,6 @@ <textField verticalHuggingPriority="750" id="41c-48-2XJ"> <rect key="frame" x="691" y="254" width="36" height="19"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="left" drawsBackground="YES" id="CZs-y7-1JV"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> @@ -118,7 +115,6 @@ <textField verticalHuggingPriority="750" id="1Z0-JT-vst"> <rect key="frame" x="691" y="208" width="36" height="19"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="left" drawsBackground="YES" id="DzX-1f-HsP"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> @@ -151,7 +147,6 @@ <stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" id="r9l-cH-pFW"> <rect key="frame" x="671" y="229" width="15" height="22"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <stepperCell key="cell" controlSize="small" continuous="YES" alignment="left" increment="2" maxValue="59" id="Z4J-oE-seK"> <font key="font" metaFont="smallSystem"/> </stepperCell> @@ -177,7 +172,6 @@ <textField verticalHuggingPriority="750" id="LTu-ic-Ty9"> <rect key="frame" x="636" y="231" width="36" height="19"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="left" drawsBackground="YES" id="XZs-gj-hoo"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> @@ -210,7 +204,6 @@ <stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" id="6W6-RI-fBx"> <rect key="frame" x="726" y="206" width="15" height="22"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <stepperCell key="cell" controlSize="small" continuous="YES" alignment="left" increment="2" maxValue="59" id="Fll-IT-6Ex"> <font key="font" metaFont="smallSystem"/> </stepperCell> @@ -236,7 +229,6 @@ <textField verticalHuggingPriority="750" id="Bmd-c8-9hp"> <rect key="frame" x="552" y="307" width="59" height="14"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Cropping:" id="haC-cO-jDm"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> @@ -249,7 +241,6 @@ <textField verticalHuggingPriority="750" id="wsq-TS-cC6"> <rect key="frame" x="750" y="231" width="36" height="19"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="left" drawsBackground="YES" id="CIG-PU-RMT"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> @@ -282,7 +273,6 @@ <box verticalHuggingPriority="750" title="Box" boxType="separator" titlePosition="noTitle" id="BpX-Ee-wct"> <rect key="frame" x="66" y="163" width="789" height="5"/> <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/> - <animations/> <color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/> <color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> <font key="titleFont" metaFont="system"/> @@ -290,7 +280,6 @@ <textField verticalHuggingPriority="750" id="1a5-Yb-uwn"> <rect key="frame" x="18" y="130" width="71" height="14"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Detelecine:" id="vTS-MJ-8nt"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> @@ -303,7 +292,6 @@ <textField verticalHuggingPriority="750" id="Mwp-XS-2tc"> <rect key="frame" x="18" y="104" width="71" height="14"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Custom:" id="DvX-m9-Q6u"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> @@ -323,7 +311,6 @@ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> <string key="toolTip">This filter removes 'combing' artifacts that are the result of telecining. Telecining is a process that adjusts film framerates that are 24fps to NTSC video frame rates which are 30fps.</string> - <animations/> <popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" id="OXp-Ux-Kwq"> <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/> <font key="font" metaFont="smallSystem"/> @@ -348,7 +335,6 @@ Telecining is a process that adjusts film framerates that are 24fps to NTSC vide <textField toolTip="Custom detelecine filter string format: JunkLeft:JunkRight:JunkTop:JunkBottom:StrictBreaks:MetricPlane:Parity" verticalHuggingPriority="750" id="ipJ-z3-XnJ"> <rect key="frame" x="95" y="101" width="108" height="19"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="Vb4-om-eIT"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> @@ -367,7 +353,6 @@ Telecining is a process that adjusts film framerates that are 24fps to NTSC vide <textField verticalHuggingPriority="750" id="N8y-at-fwU"> <rect key="frame" x="656" y="130" width="64" height="14"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Deblock:" id="gKq-xF-AZE"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> @@ -378,9 +363,8 @@ Telecining is a process that adjusts film framerates that are 24fps to NTSC vide </connections> </textField> <textField verticalHuggingPriority="750" id="ns7-Ww-hmX"> - <rect key="frame" x="656" y="105" width="64" height="14"/> + <rect key="frame" x="656" y="104" width="64" height="14"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Color:" id="uDH-ts-vs5"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> @@ -390,10 +374,21 @@ Telecining is a process that adjusts film framerates that are 24fps to NTSC vide <binding destination="-2" name="textColor" keyPath="self.labelColor" id="pzU-oe-yEE"/> </connections> </textField> + <textField verticalHuggingPriority="750" id="xGD-5W-CDB"> + <rect key="frame" x="656" y="78" width="64" height="14"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Rotate:" id="1nr-nE-3a6"> + <font key="font" metaFont="smallSystem"/> + <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> + <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/> + </textFieldCell> + <connections> + <binding destination="-2" name="textColor" keyPath="self.labelColor" id="IrA-1f-C6F"/> + </connections> + </textField> <textField verticalHuggingPriority="750" id="peM-dW-Ef8"> <rect key="frame" x="719" y="130" width="31" height="14"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="center" title="Off" id="CIX-Cq-deK"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> @@ -412,7 +407,6 @@ Telecining is a process that adjusts film framerates that are 24fps to NTSC vide <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> <string key="toolTip">The deblocking filter removes a common type of compression artifact. If your source exhibits 'blockiness', this filter may help clean it up.</string> - <animations/> <sliderCell key="cell" controlSize="small" continuous="YES" state="on" alignment="left" maxValue="15" doubleValue="3" tickMarkPosition="below" numberOfTickMarks="16" allowsTickMarkValuesOnly="YES" sliderType="linear" id="L61-gd-9Qf"/> <connections> <accessibilityConnection property="title" destination="N8y-at-fwU" id="s2N-Mt-w93"/> @@ -427,7 +421,6 @@ If your source exhibits 'blockiness', this filter may help clean it up.</string> <textField verticalHuggingPriority="750" id="9hM-c1-7hB"> <rect key="frame" x="457" y="130" width="61" height="14"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Denoise:" id="Rxe-Xm-vXj"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> @@ -443,7 +436,6 @@ If your source exhibits 'blockiness', this filter may help clean it up.</string> <string key="toolTip">Denoise filtering reduces or removes the appearance of noise and grain. Film grain and other types of high frequency noise are difficult to compress. Using this filter on such sources can result in smaller file sizes.</string> - <animations/> <popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" id="a2c-wR-CQ6"> <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/> <font key="font" metaFont="smallSystem"/> @@ -468,7 +460,6 @@ Using this filter on such sources can result in smaller file sizes.</string> <textField verticalHuggingPriority="750" id="k1h-3F-Xh0"> <rect key="frame" x="457" y="104" width="61" height="14"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Preset:" id="8am-ve-1Xl"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> @@ -486,7 +477,6 @@ Using this filter on such sources can result in smaller file sizes.</string> <popUpButton verticalHuggingPriority="750" id="cTy-PO-BSd"> <rect key="frame" x="521" y="99" width="113" height="22"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" id="eym-Bg-FVe"> <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/> <font key="font" metaFont="smallSystem"/> @@ -511,7 +501,6 @@ Using this filter on such sources can result in smaller file sizes.</string> <popUpButton verticalHuggingPriority="750" id="1XQ-md-5cQ"> <rect key="frame" x="520" y="73" width="113" height="22"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" id="QNk-3W-T3X"> <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/> <font key="font" metaFont="smallSystem"/> @@ -534,7 +523,6 @@ Using this filter on such sources can result in smaller file sizes.</string> <textField verticalHuggingPriority="750" id="O3I-G6-dfv"> <rect key="frame" x="457" y="78" width="61" height="14"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Custom:" id="KiY-kz-54k"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> @@ -550,9 +538,8 @@ Using this filter on such sources can result in smaller file sizes.</string> </connections> </textField> <textField verticalHuggingPriority="750" id="ZR9-YG-pfn"> - <rect key="frame" x="524" y="75" width="107" height="19"/> + <rect key="frame" x="524" y="76" width="107" height="19"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="EhQ-sa-Xvv"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> @@ -571,7 +558,6 @@ Using this filter on such sources can result in smaller file sizes.</string> <textField verticalHuggingPriority="750" id="A6i-ft-02b"> <rect key="frame" x="484" y="78" width="34" height="14"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Tune:" id="tje-4P-jKt"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> @@ -587,9 +573,8 @@ Using this filter on such sources can result in smaller file sizes.</string> </connections> </textField> <button toolTip="If enabled, filter colour components out of video." id="Psx-nN-XiT"> - <rect key="frame" x="723" y="103" width="103" height="18"/> + <rect key="frame" x="723" y="102" width="103" height="18"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <buttonCell key="cell" type="check" title="Grayscale" bezelStyle="regularSquare" imagePosition="left" alignment="left" controlSize="small" inset="2" id="h7g-eE-vgv"> <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> <font key="font" metaFont="smallSystem"/> @@ -606,7 +591,6 @@ Using this filter on such sources can result in smaller file sizes.</string> <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="hM5-HQ-Scu"> <rect key="frame" x="18" y="158" width="42" height="14"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Filters" id="wQL-qX-JeA"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> @@ -616,7 +600,6 @@ Using this filter on such sources can result in smaller file sizes.</string> <textField toolTip="This is the display width. It is the result of scaling the storage dimensions by the pixel aspect." verticalHuggingPriority="750" id="LWv-Y9-b0S"> <rect key="frame" x="375" y="283" width="54" height="19"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="left" drawsBackground="YES" id="XYg-xi-ExT"> <numberFormatter key="formatter" formatterBehavior="default10_4" usesGroupingSeparator="NO" minimumIntegerDigits="0" maximumIntegerDigits="42" id="jW5-N6-2cB"/> <font key="font" metaFont="smallSystem"/> @@ -638,7 +621,6 @@ Using this filter on such sources can result in smaller file sizes.</string> <textField verticalHuggingPriority="750" id="nQe-Vq-Og2"> <rect key="frame" x="457" y="283" width="54" height="19"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="left" drawsBackground="YES" id="0ho-7Y-adD"> <numberFormatter key="formatter" formatterBehavior="default10_4" usesGroupingSeparator="NO" minimumIntegerDigits="0" maximumIntegerDigits="42" id="gd7-JE-NQS"/> <font key="font" metaFont="smallSystem"/> @@ -662,7 +644,6 @@ Using this filter on such sources can result in smaller file sizes.</string> <string key="toolTip">Pixel aspect defines the shape of the pixels. A 1:1 ratio defines a square pixel. Other values define rectangular shapes. Players will scale the image in order to achieve the specified aspect.</string> - <animations/> <textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="left" drawsBackground="YES" id="w99-9Y-YN4"> <numberFormatter key="formatter" formatterBehavior="default10_4" usesGroupingSeparator="NO" minimumIntegerDigits="0" maximumIntegerDigits="42" id="ygx-uC-eb0"/> <font key="font" metaFont="smallSystem"/> @@ -685,7 +666,6 @@ Players will scale the image in order to achieve the specified aspect.</string> <textField verticalHuggingPriority="750" id="vOY-Ix-eha"> <rect key="frame" x="291" y="258" width="78" height="14"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="right" title="PAR:" id="gVj-RG-PcL"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> @@ -698,7 +678,6 @@ Players will scale the image in order to achieve the specified aspect.</string> <stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" id="FwZ-6T-zJe"> <rect key="frame" x="151" y="281" width="15" height="22"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <stepperCell key="cell" controlSize="small" continuous="YES" alignment="left" increment="16" minValue="64" maxValue="59" doubleValue="64" id="NP7-P2-Qga"> <font key="font" metaFont="smallSystem"/> </stepperCell> @@ -723,8 +702,7 @@ Players will scale the image in order to achieve the specified aspect.</string> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> <string key="toolTip">Align storage dimensions to multiples of this value.
This setting is only necessary for compatibility with some devices. You should use 2 unless you experience compatibility issues.</string> - <animations/> - <popUpButtonCell key="cell" type="push" title="2" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" inset="2" selectedItem="OWb-6v-ggg" id="H0L-sP-ky8"> + <popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" inset="2" id="H0L-sP-ky8"> <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/> <font key="font" metaFont="smallSystem"/> <menu key="menu" title="OtherViews" id="und-OA-MLn"> @@ -732,7 +710,7 @@ You should use 2 unless you experience compatibility issues.</string> <menuItem title="16" id="uTT-yC-MFJ"/> <menuItem title="8" id="Lbl-i2-YJg"/> <menuItem title="4" id="MgF-Gw-0fD"/> - <menuItem title="2" state="on" id="OWb-6v-ggg"/> + <menuItem title="2" id="OWb-6v-ggg"/> </items> </menu> </popUpButtonCell> @@ -750,7 +728,6 @@ You should use 2 unless you experience compatibility issues.</string> <rect key="frame" x="96" y="283" width="56" height="19"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> <string key="toolTip">This is the width that the video will be stored at.
The actual display dimensions will differ if the pixel aspect ratio is not 1:1.</string> - <animations/> <textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="left" drawsBackground="YES" id="fVv-0N-MQB"> <numberFormatter key="formatter" formatterBehavior="default10_4" localizesFormat="NO" usesGroupingSeparator="NO" minimumIntegerDigits="0" maximumIntegerDigits="42" id="6jd-2b-RPM"/> <font key="font" metaFont="smallSystem"/> @@ -777,7 +754,6 @@ You should use 2 unless you experience compatibility issues.</string> <textField verticalHuggingPriority="750" id="JBo-0E-AsU"> <rect key="frame" x="18" y="237" width="74" height="14"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" controlSize="small" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Anamorphic:" id="8vS-Mw-bny"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> @@ -790,7 +766,6 @@ You should use 2 unless you experience compatibility issues.</string> <textField verticalHuggingPriority="750" id="uqQ-uA-3xF"> <rect key="frame" x="171" y="286" width="10" height="14"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="right" title="x" id="hN1-S9-zl8"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> @@ -800,7 +775,6 @@ You should use 2 unless you experience compatibility issues.</string> <textField verticalHuggingPriority="750" id="IVk-ye-fOe"> <rect key="frame" x="438" y="286" width="10" height="14"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="right" title="x" id="uuL-JR-73C"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> @@ -810,7 +784,6 @@ You should use 2 unless you experience compatibility issues.</string> <textField verticalHuggingPriority="750" id="sKT-h2-mAF"> <rect key="frame" x="438" y="260" width="10" height="14"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="right" title="x" id="cNr-IZ-H9j"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> @@ -823,13 +796,12 @@ You should use 2 unless you experience compatibility issues.</string> <string key="toolTip">None - Force pixel aspect ratio to 1:1. Loose - Align dimensions to chosen 'Alignment' value and pick pixel aspect ratio that preserves the original display aspect ratio Strict - Keep original source dimensions and pixel aspect ratio</string> - <animations/> - <popUpButtonCell key="cell" type="push" title="Off" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" inset="2" selectedItem="1O3-th-4M5" id="vx1-8S-fyc"> + <popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" inset="2" id="vx1-8S-fyc"> <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/> <font key="font" metaFont="smallSystem"/> <menu key="menu" title="OtherViews" id="qSV-uB-Iup"> <items> - <menuItem title="Off" state="on" id="1O3-th-4M5"/> + <menuItem title="Off" id="1O3-th-4M5"/> <menuItem title="Strict" id="JyN-AK-Hae"/> <menuItem title="Loose" id="Uiw-Nb-u5X"/> <menuItem title="Custom" id="f12-Dh-fDw"/> @@ -849,7 +821,6 @@ Strict - Keep original source dimensions and pixel aspect ratio</string> <textField verticalHuggingPriority="750" id="tHY-g2-oWj"> <rect key="frame" x="18" y="211" width="74" height="14"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" controlSize="small" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Modulus:" id="jXn-fo-wNU"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> @@ -862,7 +833,6 @@ Strict - Keep original source dimensions and pixel aspect ratio</string> <textField verticalHuggingPriority="750" id="9oG-zm-Y0W"> <rect key="frame" x="18" y="285" width="74" height="14"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="right" title="Storage Size:" id="L7V-2e-qf9"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> @@ -875,7 +845,6 @@ Strict - Keep original source dimensions and pixel aspect ratio</string> <textField verticalHuggingPriority="750" id="hei-Cd-vcN"> <rect key="frame" x="291" y="286" width="78" height="14"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="right" title="Display Size:" id="SPg-s0-Oh0"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> @@ -888,7 +857,6 @@ Strict - Keep original source dimensions and pixel aspect ratio</string> <textField verticalHuggingPriority="750" id="7ds-FA-XrD"> <rect key="frame" x="18" y="309" width="74" height="14"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="right" title="Source:" id="nrd-lP-SHD"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> @@ -902,7 +870,6 @@ Strict - Keep original source dimensions and pixel aspect ratio</string> <rect key="frame" x="185" y="283" width="56" height="19"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> <string key="toolTip">This is the height that the video will be stored at.
The actual display dimensions will differ if the pixel aspect ratio is not 1:1.</string> - <animations/> <textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="left" drawsBackground="YES" id="ZHl-Y5-C5P"> <numberFormatter key="formatter" formatterBehavior="default10_4" localizesFormat="NO" usesGroupingSeparator="NO" minimumIntegerDigits="0" maximumIntegerDigits="42" id="Ts7-R5-Oye"/> <font key="font" metaFont="smallSystem"/> @@ -929,7 +896,6 @@ Strict - Keep original source dimensions and pixel aspect ratio</string> <button toolTip="If enabled, the original display aspect of the source will be maintained." id="6G0-MW-iVa"> <rect key="frame" x="93" y="258" width="145" height="18"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <buttonCell key="cell" type="check" title="Keep Aspect Ratio" bezelStyle="regularSquare" imagePosition="left" alignment="left" controlSize="small" inset="2" id="hcF-CZ-p0E"> <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> <font key="font" metaFont="smallSystem"/> @@ -954,7 +920,6 @@ Strict - Keep original source dimensions and pixel aspect ratio</string> <string key="toolTip">Pixel aspect defines the shape of the pixels. A 1:1 ratio defines a square pixel. Other values define rectangular shapes. Players will scale the image in order to achieve the specified aspect.</string> - <animations/> <textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="left" drawsBackground="YES" id="QSZ-2r-Ydl"> <numberFormatter key="formatter" formatterBehavior="default10_4" usesGroupingSeparator="NO" minimumIntegerDigits="0" maximumIntegerDigits="42" id="Tzx-xq-0zo"/> <font key="font" metaFont="smallSystem"/> @@ -975,7 +940,6 @@ Players will scale the image in order to achieve the specified aspect.</string> <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="ieR-o9-ztI"> <rect key="frame" x="96" y="309" width="417" height="14"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="source size" id="mzN-4A-GZq"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/> @@ -988,7 +952,6 @@ Players will scale the image in order to achieve the specified aspect.</string> <stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" id="2s0-5k-fjU"> <rect key="frame" x="240" y="281" width="15" height="22"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <stepperCell key="cell" controlSize="small" continuous="YES" alignment="left" increment="16" minValue="64" maxValue="59" doubleValue="64" id="MwK-aS-Oaf"> <font key="font" metaFont="smallSystem"/> </stepperCell> @@ -1010,7 +973,6 @@ Players will scale the image in order to achieve the specified aspect.</string> <stepper horizontalHuggingPriority="750" verticalHuggingPriority="750" id="Ddg-4D-el9"> <rect key="frame" x="785" y="229" width="15" height="22"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <stepperCell key="cell" controlSize="small" continuous="YES" alignment="left" increment="2" maxValue="59" id="QFM-0O-SjJ"> <font key="font" metaFont="smallSystem"/> </stepperCell> @@ -1036,7 +998,6 @@ Players will scale the image in order to achieve the specified aspect.</string> <textField verticalHuggingPriority="750" id="xKf-yr-nCk"> <rect key="frame" x="240" y="130" width="68" height="14"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Deinterlace:" id="VsK-mC-9Pj"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> @@ -1049,7 +1010,6 @@ Players will scale the image in order to achieve the specified aspect.</string> <textField verticalHuggingPriority="750" id="C83-aJ-v3x"> <rect key="frame" x="259" y="79" width="49" height="14"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Custom:" id="n6U-tH-vo0"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> @@ -1072,7 +1032,6 @@ The decomb filter selectively deinterlaces frames that appear to be interlaced. This will preserve quality in frames that are not interlaced. The classic deinterlace filter is applied to all frames. Frames that are not interlaced will suffer some quality degradation.</string> - <animations/> <popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" id="CsF-zp-vt2"> <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/> <font key="font" metaFont="smallSystem"/> @@ -1096,7 +1055,6 @@ Frames that are not interlaced will suffer some quality degradation.</string> <textField verticalHuggingPriority="750" id="r64-vI-ymx"> <rect key="frame" x="314" y="76" width="108" height="19"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="OKz-qW-7ai"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> @@ -1115,7 +1073,6 @@ Frames that are not interlaced will suffer some quality degradation.</string> <textField verticalHuggingPriority="750" id="9Uz-PL-igg"> <rect key="frame" x="248" y="104" width="61" height="14"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Preset:" id="zvZ-ZX-yKE"> <font key="font" metaFont="smallSystem"/> <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/> @@ -1133,7 +1090,6 @@ Frames that are not interlaced will suffer some quality degradation.</string> <popUpButton verticalHuggingPriority="750" id="6nG-zk-FMo"> <rect key="frame" x="312" y="99" width="113" height="22"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> - <animations/> <popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" id="at1-DR-WGs"> <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/> <font key="font" metaFont="smallSystem"/> @@ -1155,8 +1111,47 @@ Frames that are not interlaced will suffer some quality degradation.</string> <outlet property="nextKeyView" destination="1XQ-md-5cQ" id="LJa-RO-dzf"/> </connections> </popUpButton> + <popUpButton toolTip="Angle rotates clockwise." verticalHuggingPriority="750" id="dsH-ZQ-dBs"> + <rect key="frame" x="723" y="73" width="66" height="22"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <popUpButtonCell key="cell" type="push" title="0°" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" selectedItem="eZj-V7-e0o" id="ee3-w2-XRX"> + <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/> + <font key="font" metaFont="smallSystem"/> + <menu key="menu" id="HcI-ak-pPG"> + <items> + <menuItem title="0°" state="on" id="eZj-V7-e0o"/> + <menuItem title="90°" tag="90" id="OyA-fK-x19"/> + <menuItem title="180°" tag="180" id="bEe-EV-Q73"/> + <menuItem title="270°" tag="270" id="PY6-PT-J4z"/> + </items> + </menu> + </popUpButtonCell> + <connections> + <binding destination="-2" name="enabled" keyPath="self.filters" id="H8L-zc-UcO"> + <dictionary key="options"> + <string key="NSValueTransformerName">NSIsNotNil</string> + </dictionary> + </binding> + <binding destination="-2" name="selectedTag" keyPath="self.filters.rotate" id="tcT-dR-5Fw"/> + </connections> + </popUpButton> + <button toolTip="Mirror flips the image on the x axis." id="IWV-25-FSC"> + <rect key="frame" x="791" y="75" width="58" height="20"/> + <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/> + <buttonCell key="cell" type="check" title="Flip" bezelStyle="regularSquare" imagePosition="left" controlSize="small" state="on" inset="2" id="Tvl-40-1Tc"> + <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/> + <font key="font" metaFont="smallSystem"/> + </buttonCell> + <connections> + <binding destination="-2" name="enabled" keyPath="self.filters" id="99W-3A-fiF"> + <dictionary key="options"> + <string key="NSValueTransformerName">NSIsNotNil</string> + </dictionary> + </binding> + <binding destination="-2" name="value" keyPath="self.filters.flip" id="xdh-96-5s5"/> + </connections> + </button> </subviews> - <animations/> <point key="canvasLocation" x="403.5" y="86.5"/> </customView> <userDefaultsController representsSharedInstance="YES" id="UZ0-eg-oV8"/> diff --git a/macosx/HBFilters.h b/macosx/HBFilters.h index 432e232ff..e173e3630 100644 --- a/macosx/HBFilters.h +++ b/macosx/HBFilters.h @@ -29,9 +29,12 @@ extern NSString * const HBFiltersChangedNotification; @property (nonatomic, readwrite, copy) NSString *denoiseCustomString; @property (nonatomic, readwrite) int deblock; -@property (nonatomic, readwrite) int rotate; + @property (nonatomic, readwrite) BOOL grayscale; +@property (nonatomic, readwrite) int rotate; +@property (nonatomic, readwrite) BOOL flip; + @property (nonatomic, readwrite, weak, nullable) NSUndoManager *undo; @end diff --git a/macosx/HBFilters.m b/macosx/HBFilters.m index da90e78af..fe7d80e37 100644 --- a/macosx/HBFilters.m +++ b/macosx/HBFilters.m @@ -265,6 +265,16 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification"; [self postChangedNotification]; } +- (void)setFlip:(BOOL)flip +{ + if (flip != _flip) + { + [[self.undo prepareWithInvocationTarget:self] setFlip:_flip]; + } + _flip = flip; + [self postChangedNotification]; +} + + (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key { NSSet *retval = nil; @@ -327,6 +337,7 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification"; copy->_deblock = _deblock; copy->_grayscale = _grayscale; copy->_rotate = _rotate; + copy->_flip = _flip; } return copy; @@ -358,6 +369,7 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification"; encodeInt(_deblock); encodeBool(_grayscale); encodeInt(_rotate); + encodeBool(_flip); } - (instancetype)initWithCoder:(NSCoder *)decoder @@ -379,6 +391,7 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification"; decodeInt(_deblock); decodeBool(_grayscale); decodeInt(_rotate); + decodeBool(_flip); _notificationsEnabled = YES; @@ -403,7 +416,7 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification"; preset[@"PictureDeblock"] = @(self.deblock); preset[@"VideoGrayScale"] = @(self.grayscale); - preset[@"PictureRotate"] = @(self.grayscale); + preset[@"PictureRotate"] = [NSString stringWithFormat:@"%d:%d", self.rotate, self.flip]; } - (void)applyPreset:(HBPreset *)preset @@ -429,11 +442,25 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification"; self.denoiseCustomString = preset[@"PictureDenoiseCustom"]; - // Deblock self.deblock = [preset[@"PictureDeblock"] intValue]; - self.grayscale = [preset[@"VideoGrayScale"] boolValue]; - self.rotate = [preset[@"PictureRotate"] intValue]; + + // Rotate + NSString *rotate = preset[@"PictureRotate"]; + if ([rotate isKindOfClass:[NSString class]]) + { + NSArray<NSString *> *components = [rotate componentsSeparatedByString:@":"]; + if (components.count == 2) + { + self.rotate = [components[0] intValue]; + self.flip = [components[1] boolValue]; + } + else + { + self.rotate = 0; + self.flip = NO; + } + } } self.notificationsEnabled = YES; diff --git a/macosx/HBJob+HBJobConversion.m b/macosx/HBJob+HBJobConversion.m index 1a7bd4c08..11009b6a9 100644 --- a/macosx/HBJob+HBJobConversion.m +++ b/macosx/HBJob+HBJobConversion.m @@ -483,10 +483,10 @@ } // Add rotate filter - if (self.filters.rotate) + if (self.filters.rotate || self.filters.flip) { filter = hb_filter_init(HB_FILTER_ROTATE); - hb_add_filter(job, filter, [NSString stringWithFormat:@"%d", self.filters.rotate].UTF8String); + hb_add_filter(job, filter, [NSString stringWithFormat:@"%d:%d", self.filters.rotate, self.filters.flip].UTF8String); } // Add framerate shaping filter |