]> granicus.if.org Git - handbrake/commitdiff
MacGui: generalize video preset/tune/profile/level handling to make it works with...
authorritsuka <damiog@gmail.com>
Thu, 21 Aug 2014 17:26:28 +0000 (17:26 +0000)
committerritsuka <damiog@gmail.com>
Thu, 21 Aug 2014 17:26:28 +0000 (17:26 +0000)
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@6334 b64f7644-9d1e-0410-96f1-a4d463321fa5

macosx/Controller.m
macosx/English.lproj/AdvancedView.xib
macosx/English.lproj/Video.xib
macosx/HBAdvancedController.h
macosx/HBAdvancedController.m
macosx/HBPresetsManager.m
macosx/HBQueueController.mm
macosx/HBVideoController.h
macosx/HBVideoController.m

index e9a20c61d34572ec4d0d3a3007f2dc1a12936bf4..d9327b0a10b996531a91c5321eea839182ee464f 100644 (file)
@@ -893,7 +893,8 @@ static NSString *        ChooseSourceIdentifier             = @"Choose Source It
                        /* Update text field */
             if (p.job_cur == 1 && p.job_count > 1)
             {
-                if ([[QueueFileArray objectAtIndex:currentQueueEncodeIndex] objectForKey:@"SubtitleList"] && [[[[[QueueFileArray objectAtIndex:currentQueueEncodeIndex]objectForKey:@"SubtitleList"] objectAtIndex:0] objectForKey:@"subtitleSourceTrackNum"] intValue] == 1)
+                if (QueueFileArray[currentQueueEncodeIndex][@"SubtitleList"] &&
+                    [[QueueFileArray[currentQueueEncodeIndex][@"SubtitleList"] firstObject][keySubTrackIndex] intValue] == -1)
                 {
                     pass_desc = @"(subtitle scan)";   
                 }
@@ -3358,7 +3359,7 @@ fWorkingCount = 0;
         job->chapter_markers = 0;
     }
     
-    if (job->vcodec == HB_VCODEC_X264)
+    if (job->vcodec == HB_VCODEC_X264 || job->vcodec == HB_VCODEC_X265)
     {
         /* iPod 5G atom */
         job->ipod_atom = ([[queueToApply objectForKey:@"Mp4iPodCompatible"]
@@ -3390,23 +3391,23 @@ fWorkingCount = 0;
         else
         {
             // we are using the x264 preset system
-            if ([(tmpString = [queueToApply objectForKey:@"x264Tune"]) length])
+            if ([(tmpString = [queueToApply objectForKey:@"VideoTune"]) length])
             {
                 encoder_tune = [tmpString UTF8String];
             }
-            if ([(tmpString = [queueToApply objectForKey:@"x264OptionExtra"]) length])
+            if ([(tmpString = [queueToApply objectForKey:@"VideoOptionExtra"]) length])
             {
                 encoder_options = [tmpString UTF8String];
             }
-            if ([(tmpString = [queueToApply objectForKey:@"h264Profile"]) length])
+            if ([(tmpString = [queueToApply objectForKey:@"VideoProfile"]) length])
             {
                 encoder_profile = [tmpString UTF8String];
             }
-            if ([(tmpString = [queueToApply objectForKey:@"h264Level"]) length])
+            if ([(tmpString = [queueToApply objectForKey:@"VideoLevel"]) length])
             {
                 encoder_level = [tmpString UTF8String];
             }
-            encoder_preset = [[queueToApply objectForKey:@"x264Preset"] UTF8String];
+            encoder_preset = [[queueToApply objectForKey:@"VideoPreset"] UTF8String];
         }
         hb_job_set_encoder_preset (job, encoder_preset);
         hb_job_set_encoder_tune   (job, encoder_tune);
@@ -4200,9 +4201,9 @@ fWorkingCount = 0;
     NSString *fileName = [HBUtilities automaticNameForSource:@(title->name)
                                                        title:title->index
                                                     chapters:NSMakeRange([fSrcChapterStartPopUp indexOfSelectedItem] + 1, [fSrcChapterEndPopUp indexOfSelectedItem] + 1)
-                                                     quality:fVideoController.selectedQualityType ? fVideoController.selectedQuality : 0
-                                                     bitrate:!fVideoController.selectedQualityType ? fVideoController.selectedBitrate : 0
-                                                  videoCodec:fVideoController.selectedCodec];
+                                                     quality:fVideoController.qualityType ? fVideoController.selectedQuality : 0
+                                                     bitrate:!fVideoController.qualityType ? fVideoController.selectedBitrate : 0
+                                                  videoCodec:fVideoController.codec];
 
     // Swap the old one with the new one
     [fDstFile2Field setStringValue: [NSString stringWithFormat:@"%@/%@.%@",
@@ -4483,7 +4484,7 @@ fWorkingCount = 0;
 
 - (void)updateMp4Checkboxes:(NSNotification *)notification
 {
-    if (fVideoController.selectedCodec != HB_VCODEC_X264)
+    if (fVideoController.codec != HB_VCODEC_X264)
     {
         /* We set the iPod atom checkbox to disabled and uncheck it as its only for x264 in the mp4
          * container. Format is taken care of in formatPopUpChanged method by hiding and unchecking
@@ -4533,8 +4534,8 @@ the user is using "Custom" settings by determining the sender*/
     /* Store storage resolution for unparse */
     if (fTitle)
     {
-        fVideoController.fX264PresetsWidthForUnparse  = fTitle->job->width;
-        fVideoController.fX264PresetsHeightForUnparse = fTitle->job->height;
+        fVideoController.fPresetsWidthForUnparse  = fTitle->job->width;
+        fVideoController.fPresetsHeightForUnparse = fTitle->job->height;
         // width or height may have changed, unparse
         [fVideoController x264PresetsChangedDisplayExpandedOptions:nil];
     }
@@ -4715,17 +4716,7 @@ the user is using "Custom" settings by determining the sender*/
         /* Video encoder */
         [fVideoController applySettingsFromPreset:chosenPreset];
 
-        if ([chosenPreset objectForKey:@"lavcOption"])
-        {
-            [fAdvancedOptions setLavcOptions:[chosenPreset objectForKey:@"lavcOption"]];
-        }
-        else
-        {
-            [fAdvancedOptions setLavcOptions:@""];   
-        }
-        
         /* Lets run through the following functions to get variables set there */
-        //[self videoEncoderPopUpChanged:nil];
         /* Set the state of ipod compatible with Mp4iPodCompatible. Only for x264*/
         [fDstMp4iPodFileCheck setState:[[chosenPreset objectForKey:@"Mp4iPodCompatible"] intValue]];
 
index 0d1d888cf0b68b6f72093e7d80069f920b9c972d..714b58c9811940fecc885747d14ccbdb6f1cd3ef 100644 (file)
@@ -1,19 +1,15 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="5056" systemVersion="13F12" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="5056" systemVersion="13F14" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
     <dependencies>
-        <deployment version="1060" identifier="macosx"/>
+        <deployment version="1060" defaultVersion="1060" identifier="macosx"/>
         <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="5056"/>
     </dependencies>
     <objects>
         <customObject id="-2" userLabel="File's Owner" customClass="HBAdvancedController">
             <connections>
-                <outlet property="fDisplayLavcOptions" destination="450" id="455"/>
-                <outlet property="fDisplayLavcOptionsLabel" destination="453" id="456"/>
-                <outlet property="fDisplayTheoraOptionsLabel" destination="457" id="459"/>
                 <outlet property="fDisplayX264Options" destination="30" id="191"/>
                 <outlet property="fDisplayX264OptionsLabel" destination="55" id="192"/>
-                <outlet property="fEmptyView" destination="254" id="256"/>
-                <outlet property="fFFmpegView" destination="254" id="BvK-gC-9EN"/>
+                <outlet property="fEmptyView" destination="nxI-yk-oWT" id="vLJ-P2-ROb"/>
                 <outlet property="fOptionsBox" destination="sPV-JX-8CO" id="OhE-r2-gaB"/>
                 <outlet property="fX264opt8x8dctLabel" destination="88" id="196"/>
                 <outlet property="fX264opt8x8dctSwitch" destination="87" id="195"/>
@@ -53,7 +49,7 @@
                 <outlet property="fX264optView" destination="5" id="194"/>
                 <outlet property="fX264optWeightPLabel" destination="408" id="413"/>
                 <outlet property="fX264optWeightPSwitch" destination="407" id="414"/>
-                <outlet property="view" destination="kZH-f0-3MZ" id="0dl-gO-Cma"/>
+                <outlet property="view" destination="kZH-f0-3MZ" id="vhL-OP-goq"/>
             </connections>
         </customObject>
         <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
                 </textField>
             </subviews>
         </customView>
-        <customView id="254" userLabel="ffmpeg">
-            <rect key="frame" x="0.0" y="0.0" width="891" height="290"/>
-            <autoresizingMask key="autoresizingMask"/>
-            <subviews>
-                <textField verticalHuggingPriority="750" id="450">
-                    <rect key="frame" x="4" y="4" width="882" height="34"/>
-                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
-                    <textFieldCell key="cell" controlSize="small" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="451">
-                        <font key="font" metaFont="smallSystem"/>
-                        <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
-                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
-                    </textFieldCell>
-                    <connections>
-                        <action selector="X264AdvancedOptionsSet:" target="-2" id="452"/>
-                    </connections>
-                </textField>
-                <textField verticalHuggingPriority="750" id="453">
-                    <rect key="frame" x="1" y="42" width="888" height="17"/>
-                    <autoresizingMask key="autoresizingMask"/>
-                    <textFieldCell key="cell" sendsActionOnEndEditing="YES" title="Current FFmpeg Advanced Option String:" id="454">
-                        <font key="font" metaFont="smallSystemBold"/>
-                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
-                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
-                    </textFieldCell>
-                </textField>
-                <textField verticalHuggingPriority="750" id="457">
-                    <rect key="frame" x="191" y="137" width="509" height="17"/>
-                    <autoresizingMask key="autoresizingMask"/>
-                    <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="center" title="HandBrake Does Not Support Advanced Theora Options" id="458">
-                        <font key="font" metaFont="smallSystemBold"/>
-                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
-                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
-                    </textFieldCell>
-                </textField>
-            </subviews>
-        </customView>
-        <customView id="kZH-f0-3MZ" userLabel="empty">
+        <customView id="kZH-f0-3MZ" userLabel="view">
             <rect key="frame" x="0.0" y="0.0" width="905" height="294"/>
             <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
             <subviews>
                 </box>
             </subviews>
         </customView>
+        <customView id="nxI-yk-oWT" userLabel="empty">
+            <rect key="frame" x="0.0" y="0.0" width="905" height="294"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" id="60D-Fv-Yl5">
+                    <rect key="frame" x="18" y="139" width="869" height="17"/>
+                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
+                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="Advanced options not available for the selected codec." id="lPc-aK-FOh">
+                        <font key="font" metaFont="system"/>
+                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                    </textFieldCell>
+                </textField>
+            </subviews>
+        </customView>
     </objects>
 </document>
index 3009e8451da698ae7c7ffdfd716bf343152f54bd..299cea6eca51a10d2f77552ac414250adf6accfa 100644 (file)
@@ -1,20 +1,35 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="5056" systemVersion="13F12" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="5056" systemVersion="13F14" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
     <dependencies>
-        <deployment version="1060" identifier="macosx"/>
+        <deployment version="1060" defaultVersion="1060" identifier="macosx"/>
         <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="5056"/>
     </dependencies>
     <objects>
         <customObject id="-2" userLabel="File's Owner" customClass="HBVideoController">
             <connections>
-                <outlet property="fDisplayX264PresetsAdditonalOptionsLabel" destination="z5f-9f-CkC" id="Vjj-gk-xgv"/>
-                <outlet property="fDisplayX264PresetsAdditonalOptionsTextField" destination="nd4-77-0zJ" id="6Gt-Hx-Bda"/>
-                <outlet property="fDisplayX264PresetsUnparseTextField" destination="5rt-5S-acT" id="YST-Hq-mBY"/>
+                <outlet property="fDisplayPresetsAdditonalOptionsLabel" destination="ijg-ux-uvb" id="Zhw-D7-xOs"/>
+                <outlet property="fDisplayPresetsAdditonalOptionsTextField" destination="oJk-ur-wgc" id="TUr-Lt-UHQ"/>
+                <outlet property="fDisplayX264PresetsUnparseTextField" destination="wk1-2U-z4i" id="aIk-h1-bOP"/>
+                <outlet property="fFastDecodeCheck" destination="z7F-H2-Vfr" id="usU-aE-DUt"/>
                 <outlet property="fFramerateCfrCell" destination="ZRE-Ig-mhJ" id="vqQ-Pd-63o"/>
                 <outlet property="fFramerateMatrix" destination="Xe2-d5-nEH" id="GCQ-qu-zBk"/>
                 <outlet property="fFramerateVfrPfrCell" destination="DD4-13-4gw" id="Cwu-GV-AKd"/>
+                <outlet property="fLavcOptionsLabel" destination="26w-dz-St2" id="R7C-nz-BBZ"/>
+                <outlet property="fLavcOptionsTextField" destination="mL3-yC-hUj" id="DHu-CV-Emx"/>
+                <outlet property="fLevelPopUp" destination="P7c-Zk-G99" id="dHU-91-P9m"/>
+                <outlet property="fLevelPopUpLabel" destination="BY1-IG-JvI" id="kmr-tF-K73"/>
                 <outlet property="fPictureFiltersField" destination="gPF-Jh-4d0" id="6AQ-Ee-tFl"/>
                 <outlet property="fPictureSettingsField" destination="9L5-i4-5eu" id="elr-IU-9BI"/>
+                <outlet property="fPresetSelectedTextField" destination="gvn-wG-crj" id="vzQ-yp-EBS"/>
+                <outlet property="fPresetSliderLabel" destination="0sa-ep-yfr" id="DVa-aK-Cq4"/>
+                <outlet property="fPresetView" destination="2dX-Hf-Hxl" id="OEP-rM-gGp"/>
+                <outlet property="fPresetsBox" destination="A4U-3F-pYq" id="m5l-h9-Ak8"/>
+                <outlet property="fPresetsSlider" destination="Biw-5K-pPD" id="ixn-dK-MaZ"/>
+                <outlet property="fProfilePopUp" destination="CPP-lh-FbN" id="rch-3L-jwi"/>
+                <outlet property="fProfilePopUpLabel" destination="dY9-5D-mXX" id="Lno-BZ-ZMH"/>
+                <outlet property="fSimplePresetView" destination="aRi-vN-oR0" id="e0P-NK-oHv"/>
+                <outlet property="fTunePopUp" destination="A7d-wM-Xmp" id="J1a-PP-NEr"/>
+                <outlet property="fTunePopUpLabel" destination="gzq-SL-YVY" id="uCk-oz-Mow"/>
                 <outlet property="fVidBitrateCell" destination="6tI-Qz-3bJ" id="oWy-lK-5aZ"/>
                 <outlet property="fVidBitrateField" destination="A3o-Zx-OfM" id="IzD-XM-sDC"/>
                 <outlet property="fVidConstantCell" destination="au3-pU-KX6" id="M31-Xr-Rsv"/>
                 <outlet property="fVidRatePopUp" destination="9tc-EO-QMd" id="O1B-x4-qfm"/>
                 <outlet property="fVidTurboPassCheck" destination="olm-zg-k9Y" id="r9Y-Ym-R0Y"/>
                 <outlet property="fVidTwoPassCheck" destination="bnV-aE-FVh" id="yPb-4E-8CL"/>
-                <outlet property="fX264FastDecodeCheck" destination="40r-Rt-3Kj" id="32H-ba-oMp"/>
-                <outlet property="fX264LevelPopUp" destination="Bc9-RS-X0z" id="pUh-ol-tli"/>
-                <outlet property="fX264LevelPopUpLabel" destination="Zx9-aq-QUO" id="jjZ-4j-1QK"/>
-                <outlet property="fX264PresetSelectedTextField" destination="Dau-qh-WdE" id="u7d-d0-Rnq"/>
-                <outlet property="fX264PresetSliderLabel" destination="3O9-81-H2o" id="ICQ-EA-fXq"/>
-                <outlet property="fX264PresetsBox" destination="A4U-3F-pYq" id="ZWI-nV-Xch"/>
-                <outlet property="fX264PresetsSlider" destination="bWg-Ip-WlZ" id="vOO-eN-auR"/>
-                <outlet property="fX264ProfilePopUp" destination="M7o-me-kIK" id="B3q-AD-eth"/>
-                <outlet property="fX264ProfilePopUpLabel" destination="xhg-dJ-Jmi" id="V3u-jn-fcf"/>
-                <outlet property="fX264TunePopUp" destination="KOr-SM-yFa" id="plC-0t-1Bk"/>
-                <outlet property="fX264TunePopUpLabel" destination="6q1-ib-FgH" id="M4n-rc-szP"/>
-                <outlet property="fX264UseAdvancedOptionsCheck" destination="304-sL-Qb9" id="rPi-LC-n0h"/>
+                <outlet property="fX264UseAdvancedOptionsCheck" destination="Zs7-1Y-50A" id="WWx-OC-tor"/>
                 <outlet property="view" destination="wAC-5p-nXb" id="i3V-vv-tDn"/>
             </connections>
         </customObject>
@@ -69,7 +73,7 @@
                     </textFieldCell>
                 </textField>
                 <textField verticalHuggingPriority="750" id="9L5-i4-5eu">
-                    <rect key="frame" x="18" y="21" width="892" height="14"/>
+                    <rect key="frame" x="18" y="21" width="884" height="14"/>
                     <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
                     <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" title="Picture Settings:" id="UWU-31-FxR">
                         <font key="font" metaFont="smallSystem"/>
@@ -91,7 +95,7 @@
                     </textFieldCell>
                 </textField>
                 <textField verticalHuggingPriority="750" id="gPF-Jh-4d0">
-                    <rect key="frame" x="18" y="5" width="892" height="14"/>
+                    <rect key="frame" x="18" y="5" width="884" height="14"/>
                     <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
                     <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" title="Picture Filters:" id="l1l-8S-ttm">
                         <font key="font" metaFont="smallSystem"/>
                     </connections>
                 </textField>
                 <popUpButton verticalHuggingPriority="750" id="9tc-EO-QMd">
-                    <rect key="frame" x="112" y="258" width="149" height="22"/>
+                    <rect key="frame" x="110" y="258" width="149" height="22"/>
                     <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                    <popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="clipping" state="on" borderStyle="borderAndBezel" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" selectedItem="Xzy-hl-maq" id="0VS-Ah-Q3S">
+                    <popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="clipping" borderStyle="borderAndBezel" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" id="0VS-Ah-Q3S">
                         <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
                         <font key="font" metaFont="smallSystem"/>
                         <menu key="menu" title="OtherViews" id="Jj0-Qw-HF8">
                             <items>
-                                <menuItem state="on" id="Xzy-hl-maq"/>
+                                <menuItem id="Xzy-hl-maq"/>
                             </items>
                         </menu>
                     </popUpButtonCell>
                     </buttonCell>
                 </button>
                 <popUpButton verticalHuggingPriority="750" id="xwK-Yu-a1e">
-                    <rect key="frame" x="112" y="284" width="149" height="22"/>
+                    <rect key="frame" x="110" y="284" width="149" height="22"/>
                     <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                    <popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="clipping" state="on" borderStyle="borderAndBezel" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" selectedItem="cZC-bI-lgS" id="KHu-7m-NR7">
+                    <popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="clipping" borderStyle="borderAndBezel" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" id="KHu-7m-NR7">
                         <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
                         <font key="font" metaFont="smallSystem"/>
                         <menu key="menu" title="OtherViews" id="6Cs-jo-8Q6">
                             <items>
-                                <menuItem state="on" id="cZC-bI-lgS"/>
+                                <menuItem id="cZC-bI-lgS"/>
                             </items>
                         </menu>
                     </popUpButtonCell>
                     <connections>
                         <action selector="videoEncoderPopUpChanged:" target="-2" id="ojB-Jd-Au6"/>
+                        <binding destination="-2" name="selectedTag" keyPath="self.codec" id="CvW-H4-Tco"/>
                     </connections>
                 </popUpButton>
                 <textField verticalHuggingPriority="750" id="bAn-iZ-ieF">
-                    <rect key="frame" x="20" y="263" width="90" height="14"/>
+                    <rect key="frame" x="18" y="263" width="90" height="14"/>
                     <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
                     <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Framerate (FPS):" id="SJc-tv-AMH">
                         <font key="font" metaFont="smallSystem"/>
                     </textFieldCell>
                 </textField>
                 <textField verticalHuggingPriority="750" id="rOd-nt-22T">
-                    <rect key="frame" x="18" y="289" width="91" height="14"/>
+                    <rect key="frame" x="16" y="289" width="91" height="14"/>
                     <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
                     <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Video Codec:" id="Mrb-6Q-0YM">
                         <font key="font" metaFont="smallSystem"/>
                     </cells>
                     <connections>
                         <action selector="videoMatrixChanged:" target="-2" id="rGb-Wc-eBW"/>
+                        <binding destination="-2" name="selectedTag" keyPath="self.qualityType" id="JkP-GB-eWw"/>
                     </connections>
                 </matrix>
                 <matrix verticalHuggingPriority="750" allowsEmptySelection="NO" id="Xe2-d5-nEH">
-                    <rect key="frame" x="115" y="215" width="157" height="38"/>
+                    <rect key="frame" x="113" y="215" width="157" height="38"/>
                     <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
                     <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
                     <size key="cellSize" width="157" height="18"/>
                         </column>
                     </cells>
                 </matrix>
-                <box autoresizesSubviews="NO" title="x264 Presets" borderType="bezel" titlePosition="noTitle" id="A4U-3F-pYq">
-                    <rect key="frame" x="17" y="36" width="886" height="160"/>
+                <box autoresizesSubviews="NO" title="x264 Presets" borderType="none" titlePosition="noTitle" id="A4U-3F-pYq">
+                    <rect key="frame" x="0.0" y="52" width="923" height="134"/>
                     <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
                     <view key="contentView">
-                        <rect key="frame" x="3" y="3" width="880" height="154"/>
+                        <rect key="frame" x="0.0" y="0.0" width="923" height="134"/>
                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                        <subviews>
-                            <slider verticalHuggingPriority="750" id="bWg-Ip-WlZ">
-                                <rect key="frame" x="246" y="109" width="618" height="16"/>
-                                <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
-                                <sliderCell key="cell" controlSize="mini" continuous="YES" state="on" alignment="left" maxValue="5" tickMarkPosition="above" numberOfTickMarks="2" allowsTickMarkValuesOnly="YES" sliderType="linear" id="4Su-5w-YOc"/>
-                                <connections>
-                                    <action selector="x264PresetsSliderChanged:" target="-2" id="AqS-DX-fly"/>
-                                </connections>
-                            </slider>
-                            <textField verticalHuggingPriority="750" id="3O9-81-H2o">
-                                <rect key="frame" x="18" y="111" width="79" height="13"/>
-                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                                <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="x264 Preset:" id="Ukc-RA-XL5">
-                                    <font key="font" metaFont="smallSystem"/>
-                                    <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
-                                    <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
-                                </textFieldCell>
-                            </textField>
-                            <textField verticalHuggingPriority="750" id="6q1-ib-FgH">
-                                <rect key="frame" x="18" y="90" width="79" height="13"/>
-                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                                <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="x264 Tune:" id="2eQ-Jg-bXh">
-                                    <font key="font" metaFont="smallSystem"/>
-                                    <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
-                                    <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
-                                </textFieldCell>
-                            </textField>
-                            <textField verticalHuggingPriority="750" id="xhg-dJ-Jmi">
-                                <rect key="frame" x="18" y="69" width="79" height="13"/>
-                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                                <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="H.264 Profile:" id="brS-VD-Laz">
-                                    <font key="font" metaFont="smallSystem"/>
-                                    <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
-                                    <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
-                                </textFieldCell>
-                            </textField>
-                            <textField verticalHuggingPriority="750" id="Zx9-aq-QUO">
-                                <rect key="frame" x="18" y="48" width="79" height="13"/>
-                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                                <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="H.264 Level:" id="KrD-UK-LYs">
-                                    <font key="font" metaFont="smallSystem"/>
-                                    <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
-                                    <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
-                                </textFieldCell>
-                            </textField>
-                            <popUpButton verticalHuggingPriority="750" id="KOr-SM-yFa">
-                                <rect key="frame" x="101" y="88" width="126" height="15"/>
-                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                                <popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" controlSize="mini" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" selectedItem="cfq-xj-BRo" id="bLm-PZ-R5A">
-                                    <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
-                                    <font key="font" metaFont="miniSystem"/>
-                                    <menu key="menu" title="OtherViews" id="7nV-xW-qaD">
-                                        <items>
-                                            <menuItem title="Item 1" state="on" id="cfq-xj-BRo"/>
-                                            <menuItem title="Item 2" id="UPL-Zb-3Xd"/>
-                                            <menuItem title="Item 3" id="EtH-09-EHF"/>
-                                        </items>
-                                    </menu>
-                                </popUpButtonCell>
-                                <connections>
-                                    <action selector="x264PresetsChangedDisplayExpandedOptions:" target="-2" id="ht2-EV-ydT"/>
-                                </connections>
-                            </popUpButton>
-                            <popUpButton verticalHuggingPriority="750" id="M7o-me-kIK">
-                                <rect key="frame" x="101" y="67" width="126" height="15"/>
-                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                                <popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" controlSize="mini" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" selectedItem="kBz-wm-XOZ" id="IEi-CG-TxH">
-                                    <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
-                                    <font key="font" metaFont="miniSystem"/>
-                                    <menu key="menu" title="OtherViews" id="G1A-9W-cJa">
-                                        <items>
-                                            <menuItem title="Item 1" state="on" id="kBz-wm-XOZ"/>
-                                            <menuItem title="Item 2" id="5Rp-9r-HV3"/>
-                                            <menuItem title="Item 3" id="nRE-UN-2Au"/>
-                                        </items>
-                                    </menu>
-                                </popUpButtonCell>
-                                <connections>
-                                    <action selector="x264PresetsChangedDisplayExpandedOptions:" target="-2" id="eCE-Aq-zNc"/>
-                                </connections>
-                            </popUpButton>
-                            <popUpButton verticalHuggingPriority="750" id="Bc9-RS-X0z">
-                                <rect key="frame" x="101" y="46" width="126" height="15"/>
-                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                                <popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" controlSize="mini" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" selectedItem="3yN-hT-w38" id="6MD-Fg-LbH">
-                                    <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
-                                    <font key="font" metaFont="miniSystem"/>
-                                    <menu key="menu" title="OtherViews" id="awh-D2-IGg">
-                                        <items>
-                                            <menuItem title="Item 1" state="on" id="3yN-hT-w38"/>
-                                            <menuItem title="Item 2" id="Ifh-EU-YmV"/>
-                                            <menuItem title="Item 3" id="Is1-hb-ZV9"/>
-                                        </items>
-                                    </menu>
-                                </popUpButtonCell>
-                                <connections>
-                                    <action selector="x264PresetsChangedDisplayExpandedOptions:" target="-2" id="Iak-Zl-GR9"/>
-                                </connections>
-                            </popUpButton>
-                            <button id="40r-Rt-3Kj">
-                                <rect key="frame" x="243" y="88" width="108" height="18"/>
-                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                                <buttonCell key="cell" type="check" title="Fast Decode" bezelStyle="regularSquare" imagePosition="left" alignment="left" controlSize="small" inset="2" id="k1V-Fa-g1s">
-                                    <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
-                                    <font key="font" metaFont="smallSystem"/>
-                                </buttonCell>
-                                <connections>
-                                    <action selector="x264PresetsChangedDisplayExpandedOptions:" target="-2" id="2Zq-Jp-9Me"/>
-                                </connections>
-                            </button>
-                            <textField verticalHuggingPriority="750" id="z5f-9f-CkC">
-                                <rect key="frame" x="243" y="69" width="110" height="13"/>
-                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                                <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Additional Options:" id="xtl-bu-yOc">
-                                    <font key="font" metaFont="smallSystem"/>
-                                    <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
-                                    <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
-                                </textFieldCell>
-                            </textField>
-                            <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" id="nd4-77-0zJ">
-                                <rect key="frame" x="359" y="51" width="505" height="32"/>
-                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                                <textFieldCell key="cell" controlSize="small" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="Sgj-JS-4Un">
-                                    <font key="font" metaFont="smallSystem"/>
-                                    <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
-                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
-                                </textFieldCell>
-                                <connections>
-                                    <action selector="x264PresetsChangedDisplayExpandedOptions:" target="-2" id="7Ee-gb-ZSL"/>
-                                </connections>
-                            </textField>
-                            <textField verticalHuggingPriority="750" id="Dau-qh-WdE">
-                                <rect key="frame" x="99" y="111" width="129" height="13"/>
-                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                                <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" id="GFY-BH-2SD">
-                                    <font key="font" metaFont="smallSystem"/>
-                                    <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
-                                    <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
-                                </textFieldCell>
-                            </textField>
-                            <button id="304-sL-Qb9">
-                                <rect key="frame" x="13" y="129" width="209" height="18"/>
-                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                                <buttonCell key="cell" type="check" title="Use x264 Advanced Options Panel" bezelStyle="regularSquare" imagePosition="left" alignment="left" controlSize="small" inset="2" id="mRh-IJ-juS">
-                                    <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
-                                    <font key="font" metaFont="smallSystem"/>
-                                </buttonCell>
-                                <connections>
-                                    <action selector="updateX264Widgets:" target="-2" id="9Vz-FZ-hTj"/>
-                                </connections>
-                            </button>
-                            <textField verticalHuggingPriority="750" id="5rt-5S-acT">
-                                <rect key="frame" x="15" y="11" width="851" height="29"/>
-                                <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
-                                <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" title="x264 Unparse:" id="CW8-Fr-sh7">
-                                    <font key="font" metaFont="smallSystem"/>
-                                    <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
-                                    <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
-                                </textFieldCell>
-                            </textField>
-                        </subviews>
                     </view>
                     <color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
                     <color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
                         <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
                     </textFieldCell>
                 </textField>
+                <box autoresizesSubviews="NO" verticalHuggingPriority="750" title="Box" boxType="separator" titlePosition="noTitle" id="aeW-F6-jrd">
+                    <rect key="frame" x="20" y="41" width="880" height="5"/>
+                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
+                    <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"/>
+                </box>
+                <box autoresizesSubviews="NO" verticalHuggingPriority="750" title="Box" boxType="separator" titlePosition="noTitle" id="NtL-8e-tS7">
+                    <rect key="frame" x="20" y="194" width="880" height="5"/>
+                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
+                    <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"/>
+                </box>
             </subviews>
         </view>
+        <customView id="2dX-Hf-Hxl" userLabel="x264/x264 presets view">
+            <rect key="frame" x="0.0" y="0.0" width="920" height="134"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <slider verticalHuggingPriority="750" id="Biw-5K-pPD">
+                    <rect key="frame" x="120" y="97" width="123" height="17"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <string key="toolTip">Adjust encoder settings to trade off compression efficiency against encoding speed.
+
+This estabilishes your default encoder settings. Tunes, profiles, levels and advances option string will be applied to this.
+You should generally set this option to the slowest you can bear since slower settings will result in better quality or smaller files.</string>
+                    <sliderCell key="cell" controlSize="mini" continuous="YES" state="on" alignment="left" maxValue="5" tickMarkPosition="above" numberOfTickMarks="2" allowsTickMarkValuesOnly="YES" sliderType="linear" id="suZ-F3-AGy"/>
+                    <connections>
+                        <action selector="presetsSliderChanged:" target="-2" id="bKH-cB-TyO"/>
+                    </connections>
+                </slider>
+                <textField verticalHuggingPriority="750" id="0sa-ep-yfr">
+                    <rect key="frame" x="35" y="99" width="79" height="14"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Preset:" id="iab-iA-j04">
+                        <font key="font" metaFont="smallSystem"/>
+                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                    </textFieldCell>
+                </textField>
+                <textField verticalHuggingPriority="750" id="gzq-SL-YVY">
+                    <rect key="frame" x="35" y="78" width="79" height="14"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Tune:" id="zSD-4Y-1cI">
+                        <font key="font" metaFont="smallSystem"/>
+                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                    </textFieldCell>
+                </textField>
+                <textField verticalHuggingPriority="750" id="dY9-5D-mXX">
+                    <rect key="frame" x="35" y="57" width="79" height="14"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Profile:" id="hib-wi-BDx">
+                        <font key="font" metaFont="smallSystem"/>
+                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                    </textFieldCell>
+                </textField>
+                <textField verticalHuggingPriority="750" id="BY1-IG-JvI">
+                    <rect key="frame" x="35" y="36" width="79" height="14"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Level:" id="QyZ-rl-uGw">
+                        <font key="font" metaFont="smallSystem"/>
+                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                    </textFieldCell>
+                </textField>
+                <popUpButton verticalHuggingPriority="750" id="A7d-wM-Xmp">
+                    <rect key="frame" x="119" y="77" width="126" height="15"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <string key="toolTip">Tune settings to optimize for common scenarios.
+
+This can improve efficiency for particular source characteristics or set characteristics of the output file. Changes will be applied after the preset but before all other parameters.</string>
+                    <popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" controlSize="mini" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" selectedItem="rl3-yb-lhe" id="dy8-w4-ycN">
+                        <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
+                        <font key="font" metaFont="miniSystem"/>
+                        <menu key="menu" title="OtherViews" id="c4N-uO-iVC">
+                            <items>
+                                <menuItem title="Item 1" state="on" id="rl3-yb-lhe"/>
+                                <menuItem title="Item 2" id="Oh1-Pi-VOR"/>
+                                <menuItem title="Item 3" id="8PG-Nw-5ky"/>
+                            </items>
+                        </menu>
+                    </popUpButtonCell>
+                    <connections>
+                        <action selector="x264PresetsChangedDisplayExpandedOptions:" target="-2" id="NXN-UM-juC"/>
+                    </connections>
+                </popUpButton>
+                <popUpButton verticalHuggingPriority="750" id="CPP-lh-FbN">
+                    <rect key="frame" x="119" y="56" width="126" height="15"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <string key="toolTip">Sets and ensures compliance with the specified profile.
+Overrides all other settings.</string>
+                    <popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" controlSize="mini" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" selectedItem="mmg-zN-rCB" id="oOm-hC-AoS">
+                        <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
+                        <font key="font" metaFont="miniSystem"/>
+                        <menu key="menu" title="OtherViews" id="7CG-ga-88H">
+                            <items>
+                                <menuItem title="Item 1" state="on" id="mmg-zN-rCB"/>
+                                <menuItem title="Item 2" id="got-Ie-NJ2"/>
+                                <menuItem title="Item 3" id="Dgy-rE-2Tr"/>
+                            </items>
+                        </menu>
+                    </popUpButtonCell>
+                    <connections>
+                        <action selector="x264PresetsChangedDisplayExpandedOptions:" target="-2" id="WDW-WH-NRA"/>
+                    </connections>
+                </popUpButton>
+                <popUpButton toolTip="Sets and ensures compliance with the specified level.
Overrides all other settings." verticalHuggingPriority="750" id="P7c-Zk-G99">
+                    <rect key="frame" x="119" y="35" width="126" height="15"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <popUpButtonCell key="cell" type="push" title="Item 1" bezelStyle="rounded" alignment="left" controlSize="mini" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" selectedItem="kAg-9O-5hF" id="PhX-Wa-Vhs">
+                        <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
+                        <font key="font" metaFont="miniSystem"/>
+                        <menu key="menu" title="OtherViews" id="pPu-oR-2R8">
+                            <items>
+                                <menuItem title="Item 1" state="on" id="kAg-9O-5hF"/>
+                                <menuItem title="Item 2" id="D7y-fr-REA"/>
+                                <menuItem title="Item 3" id="b0U-ow-7Mq"/>
+                            </items>
+                        </menu>
+                    </popUpButtonCell>
+                    <connections>
+                        <action selector="x264PresetsChangedDisplayExpandedOptions:" target="-2" id="vbv-LQ-CX5"/>
+                    </connections>
+                </popUpButton>
+                <button id="z7F-H2-Vfr">
+                    <rect key="frame" x="261" y="77" width="108" height="18"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <string key="toolTip">Reduce decoder CPU usage.
+Set this if your device is struggling to play the output (dropped frames).</string>
+                    <buttonCell key="cell" type="check" title="Fast Decode" bezelStyle="regularSquare" imagePosition="left" alignment="left" controlSize="small" inset="2" id="5De-nU-l3h">
+                        <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                        <font key="font" metaFont="smallSystem"/>
+                    </buttonCell>
+                    <connections>
+                        <action selector="x264PresetsChangedDisplayExpandedOptions:" target="-2" id="UYm-bq-oxP"/>
+                    </connections>
+                </button>
+                <textField verticalHuggingPriority="750" id="ijg-ux-uvb">
+                    <rect key="frame" x="261" y="58" width="110" height="13"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Additional Options:" id="ZSm-03-g0B">
+                        <font key="font" metaFont="smallSystem"/>
+                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                    </textFieldCell>
+                </textField>
+                <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" id="oJk-ur-wgc">
+                    <rect key="frame" x="377" y="35" width="523" height="37"/>
+                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
+                    <textFieldCell key="cell" controlSize="small" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="IID-yp-or8">
+                        <font key="font" metaFont="smallSystem"/>
+                        <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
+                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                    </textFieldCell>
+                    <connections>
+                        <action selector="x264PresetsChangedDisplayExpandedOptions:" target="-2" id="wJH-X4-1oP"/>
+                    </connections>
+                </textField>
+                <textField verticalHuggingPriority="750" id="gvn-wG-crj">
+                    <rect key="frame" x="250" y="100" width="129" height="13"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" id="rHx-Kg-tc2">
+                        <font key="font" metaFont="smallSystem"/>
+                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                    </textFieldCell>
+                </textField>
+                <button toolTip="Use Advanced Options tab for x264 settings. Use at your own risk!" id="Zs7-1Y-50A">
+                    <rect key="frame" x="117" y="118" width="209" height="18"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <buttonCell key="cell" type="check" title="Use Advanced Options Panel" bezelStyle="regularSquare" imagePosition="left" alignment="left" controlSize="small" inset="2" id="sa6-r3-eVr">
+                        <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                        <font key="font" metaFont="smallSystem"/>
+                    </buttonCell>
+                    <connections>
+                        <action selector="updateEncoderOptionsWidgets:" target="-2" id="kT9-0X-dVp"/>
+                    </connections>
+                </button>
+                <textField verticalHuggingPriority="750" id="wk1-2U-z4i">
+                    <rect key="frame" x="18" y="0.0" width="883" height="29"/>
+                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
+                    <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" title="Unparse:" id="G8P-IF-mpl">
+                        <font key="font" metaFont="smallSystem"/>
+                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                    </textFieldCell>
+                </textField>
+                <textField verticalHuggingPriority="750" id="mkM-81-g3d">
+                    <rect key="frame" x="18" y="120" width="96" height="14"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Encoder Options:" id="XIe-8Z-tIF">
+                        <font key="font" metaFont="smallSystem"/>
+                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                    </textFieldCell>
+                </textField>
+            </subviews>
+        </customView>
+        <customView id="aRi-vN-oR0" userLabel="ffmpeg presets view">
+            <rect key="frame" x="0.0" y="0.0" width="920" height="34"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" id="mL3-yC-hUj">
+                    <rect key="frame" x="120" y="2" width="545" height="32"/>
+                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
+                    <textFieldCell key="cell" controlSize="small" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="z0u-VS-m0l">
+                        <font key="font" metaFont="smallSystem"/>
+                        <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
+                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                    </textFieldCell>
+                </textField>
+                <textField verticalHuggingPriority="750" id="26w-dz-St2">
+                    <rect key="frame" x="18" y="20" width="96" height="14"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Encoder Options:" id="7bP-tR-sAX">
+                        <font key="font" metaFont="smallSystem"/>
+                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                    </textFieldCell>
+                </textField>
+            </subviews>
+        </customView>
     </objects>
 </document>
index d80923ddd301d984f35f47f87b11dd7c66a6f2c8..e7267cfe09ca1f1249f6a1d3675bedd805d8d09b 100644 (file)
 {
     /* Advanced Tab for opts fX264optView*/
     IBOutlet NSBox              * fOptionsBox;
-    
+
+    IBOutlet NSView             * fEmptyView;
+
     IBOutlet NSView             * fX264optView;
-    IBOutlet NSView             * fFFmpegView;
     IBOutlet NSTextField        * fX264optViewTitleLabel;
     IBOutlet NSTextField        * fDisplayX264OptionsLabel;
     IBOutlet NSTextField        * fDisplayX264Options;
-    IBOutlet NSTextField        * fDisplayLavcOptionsLabel;
-    IBOutlet NSTextField        * fDisplayLavcOptions;
-    
-    IBOutlet NSTextField        * fDisplayTheoraOptionsLabel;
-    
+
     IBOutlet NSTextField        * fX264optBframesLabel;
     IBOutlet NSPopUpButton      * fX264optBframesPopUp;
     IBOutlet NSTextField        * fX264optRefLabel;
 // x264 Advanced Panel Methods
 
 - (NSString *) optionsString;
-- (NSString *) optionsStringLavc;
 - (void) setOptions: (NSString *)string;
-- (void) setLavcOptions: (NSString *)string;
 - (void) setHidden: (BOOL) hide;
-- (void) setLavcOptsEnabled: (BOOL) lavc;
 - (IBAction) X264AdvancedOptionsAnimate: (id) sender;
 - (IBAction) X264AdvancedOptionsSet: (id) sender;
 - (IBAction) X264AdvancedOptionsStandardizeOptString: (id) sender;
index e0f509235a0f2ca0ff9de02cc8f24a85708f5350..e005dc61dc3007702b825463813939887b9440c0 100644 (file)
     return [fDisplayX264Options stringValue];
 }
 
-- (NSString *) optionsStringLavc
-{
-    return [fDisplayLavcOptions stringValue];
-}
-
 - (void) setOptions: (NSString *)string
 {
     [fDisplayX264Options setStringValue:string];
     [self X264AdvancedOptionsSet:nil];
 }
 
-- (void) setLavcOptions: (NSString *)string
-{
-    [fDisplayLavcOptions setStringValue:string];
-}
-
 - (void) setHidden: (BOOL) hide
 {
-    if(hide)
+    if (hide)
     {
-        [fOptionsBox setContentView:fFFmpegView];
+        [fOptionsBox setContentView:fEmptyView];
     }
     else
     {
     return;
 }
 
-- (void) setLavcOptsEnabled: (BOOL) lavc
-{
-    if(lavc)
-    {
-        [fDisplayLavcOptions setHidden:NO];
-        [fDisplayLavcOptionsLabel setHidden:NO];
-        [fDisplayTheoraOptionsLabel setHidden:YES];
-    }
-    else
-    {
-        [fDisplayLavcOptions setHidden:YES];
-        [fDisplayLavcOptionsLabel setHidden:YES];
-        [fDisplayTheoraOptionsLabel setHidden:NO];
-    }
-    return;
-}
-
  - (void)setUIEnabled:(BOOL)flag
 {
     unsigned i;
         [controls[i] setEnabled: flag];
 
     }
-    
-    //[fX264optView setWantsLayer:YES];
 }
 
 - (void)dealloc
index c8dc9b797f8606cf4fc11ea32efa648ab143aef9..1384a7438acabeb489be5696883cee911fb8d782 100644 (file)
@@ -435,11 +435,11 @@ NSString *HBPresetsChangedNotification = @"HBPresetsChangedNotification";
     preset[@"lavcOption"] = @"";
     preset[@"x264Option"] = @"";
     preset[@"x264UseAdvancedOptions"] = @0;
-    preset[@"x264Preset"] = @"fast";
-    preset[@"x264Tune"] = @"";
-    preset[@"x264OptionExtra"] = @"";
-    preset[@"h264Profile"] = @"baseline";
-    preset[@"h264Level"] = @"3.0";
+    preset[@"VideoPreset"] = @"fast";
+    preset[@"VideoTune"] = @"";
+    preset[@"VideoOptionExtra"] = @"";
+    preset[@"VideoProfile"] = @"baseline";
+    preset[@"VideoLevel"] = @"3.0";
     
     /* Video rate control */
     preset[@"VideoAvgBitrate"] = @"2500";
@@ -550,11 +550,11 @@ NSString *HBPresetsChangedNotification = @"HBPresetsChangedNotification";
     preset[@"lavcOption"] = @"";
     preset[@"x264Option"] = @"";
     preset[@"x264UseAdvancedOptions"] = @0;
-    preset[@"x264Preset"] = @"medium";
-    preset[@"x264Tune"] = @"";
-    preset[@"x264OptionExtra"] = @"";
-    preset[@"h264Profile"] = @"baseline";
-    preset[@"h264Level"] = @"1.3";
+    preset[@"VideoPreset"] = @"medium";
+    preset[@"VideoTune"] = @"";
+    preset[@"VideoOptionExtra"] = @"";
+    preset[@"VideoProfile"] = @"baseline";
+    preset[@"VideoLevel"] = @"1.3";
     
     /* Video rate control */
     preset[@"VideoAvgBitrate"] = @"2500";
@@ -654,11 +654,11 @@ NSString *HBPresetsChangedNotification = @"HBPresetsChangedNotification";
     preset[@"lavcOption"] = @"";
     preset[@"x264Option"] = @"";
     preset[@"x264UseAdvancedOptions"] = @0;
-    preset[@"x264Preset"] = @"medium";
-    preset[@"x264Tune"] = @"";
-    preset[@"x264OptionExtra"] = @"";
-    preset[@"h264Profile"] = @"high";
-    preset[@"h264Level"] = @"3.1";
+    preset[@"VideoPreset"] = @"medium";
+    preset[@"VideoTune"] = @"";
+    preset[@"VideoOptionExtra"] = @"";
+    preset[@"VideoProfile"] = @"high";
+    preset[@"VideoLevel"] = @"3.1";
     
     /* Video rate control */
     preset[@"VideoAvgBitrate"] = @"2500";
@@ -758,11 +758,11 @@ NSString *HBPresetsChangedNotification = @"HBPresetsChangedNotification";
     preset[@"lavcOption"] = @"";
     preset[@"x264Option"] = @"";
     preset[@"x264UseAdvancedOptions"] = @0;
-    preset[@"x264Preset"] = @"medium";
-    preset[@"x264Tune"] = @"";
-    preset[@"x264OptionExtra"] = @"";
-    preset[@"h264Profile"] = @"high";
-    preset[@"h264Level"] = @"3.1";
+    preset[@"VideoPreset"] = @"medium";
+    preset[@"VideoTune"] = @"";
+    preset[@"VideoOptionExtra"] = @"";
+    preset[@"VideoProfile"] = @"high";
+    preset[@"VideoLevel"] = @"3.1";
     
     /* Video rate control */
     preset[@"VideoAvgBitrate"] = @"2500";
@@ -862,11 +862,11 @@ NSString *HBPresetsChangedNotification = @"HBPresetsChangedNotification";
     preset[@"lavcOption"] = @"";
     preset[@"x264Option"] = @"";
     preset[@"x264UseAdvancedOptions"] = @0;
-    preset[@"x264Preset"] = @"medium";
-    preset[@"x264Tune"] = @"";
-    preset[@"x264OptionExtra"] = @"qpmin=4:cabac=0:ref=2:b-pyramid=none:weightb=0:weightp=0:vbv-maxrate=9500:vbv-bufsize=9500";
-    preset[@"h264Profile"] = @"high";
-    preset[@"h264Level"] = @"3.1";
+    preset[@"VideoPreset"] = @"medium";
+    preset[@"VideoTune"] = @"";
+    preset[@"VideoOptionExtra"] = @"qpmin=4:cabac=0:ref=2:b-pyramid=none:weightb=0:weightp=0:vbv-maxrate=9500:vbv-bufsize=9500";
+    preset[@"VideoProfile"] = @"high";
+    preset[@"VideoLevel"] = @"3.1";
     
     /* Video rate control */
     preset[@"VideoAvgBitrate"] = @"2500";
@@ -977,11 +977,11 @@ NSString *HBPresetsChangedNotification = @"HBPresetsChangedNotification";
     preset[@"lavcOption"] = @"";
     preset[@"x264Option"] = @"";
     preset[@"x264UseAdvancedOptions"] = @0;
-    preset[@"x264Preset"] = @"medium";
-    preset[@"x264Tune"] = @"";
-    preset[@"x264OptionExtra"] = @"";
-    preset[@"h264Profile"] = @"high";
-    preset[@"h264Level"] = @"3.1";
+    preset[@"VideoPreset"] = @"medium";
+    preset[@"VideoTune"] = @"";
+    preset[@"VideoOptionExtra"] = @"";
+    preset[@"VideoProfile"] = @"high";
+    preset[@"VideoLevel"] = @"3.1";
     
     /* Video rate control */
     preset[@"VideoAvgBitrate"] = @"2500";
@@ -1092,11 +1092,11 @@ NSString *HBPresetsChangedNotification = @"HBPresetsChangedNotification";
     preset[@"lavcOption"] = @"";
     preset[@"x264Option"] = @"";
     preset[@"x264UseAdvancedOptions"] = @0;
-    preset[@"x264Preset"] = @"medium";
-    preset[@"x264Tune"] = @"";
-    preset[@"x264OptionExtra"] = @"";
-    preset[@"h264Profile"] = @"high";
-    preset[@"h264Level"] = @"4.0";
+    preset[@"VideoPreset"] = @"medium";
+    preset[@"VideoTune"] = @"";
+    preset[@"VideoOptionExtra"] = @"";
+    preset[@"VideoProfile"] = @"high";
+    preset[@"VideoLevel"] = @"4.0";
     
     /* Video rate control */
     preset[@"VideoAvgBitrate"] = @"2500";
@@ -1207,11 +1207,11 @@ NSString *HBPresetsChangedNotification = @"HBPresetsChangedNotification";
     preset[@"lavcOption"] = @"";
     preset[@"x264Option"] = @"";
     preset[@"x264UseAdvancedOptions"] = @0;
-    preset[@"x264Preset"] = @"medium";
-    preset[@"x264Tune"] = @"";
-    preset[@"x264OptionExtra"] = @"";
-    preset[@"h264Profile"] = @"main";
-    preset[@"h264Level"] = @"3.0";
+    preset[@"VideoPreset"] = @"medium";
+    preset[@"VideoTune"] = @"";
+    preset[@"VideoOptionExtra"] = @"";
+    preset[@"VideoProfile"] = @"main";
+    preset[@"VideoLevel"] = @"3.0";
     
     /* Video rate control */
     preset[@"VideoAvgBitrate"] = @"2500";
@@ -1311,11 +1311,11 @@ NSString *HBPresetsChangedNotification = @"HBPresetsChangedNotification";
     preset[@"lavcOption"] = @"";
     preset[@"x264Option"] = @"";
     preset[@"x264UseAdvancedOptions"] = @0;
-    preset[@"x264Preset"] = @"medium";
-    preset[@"x264Tune"] = @"";
-    preset[@"x264OptionExtra"] = @"";
-    preset[@"h264Profile"] = @"main";
-    preset[@"h264Level"] = @"3.1";
+    preset[@"VideoPreset"] = @"medium";
+    preset[@"VideoTune"] = @"";
+    preset[@"VideoOptionExtra"] = @"";
+    preset[@"VideoProfile"] = @"main";
+    preset[@"VideoLevel"] = @"3.1";
     
     /* Video rate control */
     preset[@"VideoAvgBitrate"] = @"2500";
@@ -1415,11 +1415,11 @@ NSString *HBPresetsChangedNotification = @"HBPresetsChangedNotification";
     preset[@"lavcOption"] = @"";
     preset[@"x264Option"] = @"";
     preset[@"x264UseAdvancedOptions"] = @0;
-    preset[@"x264Preset"] = @"medium";
-    preset[@"x264Tune"] = @"";
-    preset[@"x264OptionExtra"] = @"";
-    preset[@"h264Profile"] = @"main";
-    preset[@"h264Level"] = @"3.1";
+    preset[@"VideoPreset"] = @"medium";
+    preset[@"VideoTune"] = @"";
+    preset[@"VideoOptionExtra"] = @"";
+    preset[@"VideoProfile"] = @"main";
+    preset[@"VideoLevel"] = @"3.1";
     
     /* Video rate control */
     preset[@"VideoAvgBitrate"] = @"2500";
@@ -1519,11 +1519,11 @@ NSString *HBPresetsChangedNotification = @"HBPresetsChangedNotification";
     preset[@"lavcOption"] = @"";
     preset[@"x264Option"] = @"";
     preset[@"x264UseAdvancedOptions"] = @0;
-    preset[@"x264Preset"] = @"veryfast";
-    preset[@"x264Tune"] = @"";
-    preset[@"x264OptionExtra"] = @"";
-    preset[@"h264Profile"] = @"main";
-    preset[@"h264Level"] = @"4.0";
+    preset[@"VideoPreset"] = @"veryfast";
+    preset[@"VideoTune"] = @"";
+    preset[@"VideoOptionExtra"] = @"";
+    preset[@"VideoProfile"] = @"main";
+    preset[@"VideoLevel"] = @"4.0";
     
     /* Video rate control */
     preset[@"VideoAvgBitrate"] = @"2500";
@@ -1623,11 +1623,11 @@ NSString *HBPresetsChangedNotification = @"HBPresetsChangedNotification";
     preset[@"lavcOption"] = @"";
     preset[@"x264Option"] = @"";
     preset[@"x264UseAdvancedOptions"] = @0;
-    preset[@"x264Preset"] = @"medium";
-    preset[@"x264Tune"] = @"";
-    preset[@"x264OptionExtra"] = @"";
-    preset[@"h264Profile"] = @"high";
-    preset[@"h264Level"] = @"4.1";
+    preset[@"VideoPreset"] = @"medium";
+    preset[@"VideoTune"] = @"";
+    preset[@"VideoOptionExtra"] = @"";
+    preset[@"VideoProfile"] = @"high";
+    preset[@"VideoLevel"] = @"4.1";
     
     /* Video rate control */
     preset[@"VideoAvgBitrate"] = @"2500";
index ef2fb3889a5819e6b9fef6e253217700300512e4..9fedcf9433e51ce87aa5cd9f80580e152ed92347 100644 (file)
         [finalString appendString: videoInfo withAttributes:detailAttr];
         [finalString appendString:@"\n" withAttributes:detailAttr];
         
-        if ([item[@"VideoEncoder"] isEqualToString: @"H.264 (x264)"])
+        if ([item[@"VideoEncoder"] isEqualToString: @"H.264 (x264)"] || [item[@"VideoEncoder"] isEqualToString: @"H.265 (x265)"])
         {
-            /* we are using x264 */
-            NSString *x264Info = @"";
+            /* we are using x264/x265 */
+            NSString *encoderPresetInfo = @"";
             if ([item[@"x264UseAdvancedOptions"] intValue])
             {
                 // we are using the old advanced panel
                 if (item[@"x264Option"] &&
                     [item[@"x264Option"] length])
                 {
-                    x264Info = [x264Info stringByAppendingString: item[@"x264Option"]];
+                    encoderPresetInfo = [encoderPresetInfo stringByAppendingString: item[@"x264Option"]];
                 }
                 else
                 {
-                    x264Info = [x264Info stringByAppendingString: @"default settings"];
+                    encoderPresetInfo = [encoderPresetInfo stringByAppendingString: @"default settings"];
                 }
             }
             else
             {
                 // we are using the x264 system
-                x264Info = [x264Info stringByAppendingString: [NSString stringWithFormat:@"Preset: %@", item[@"x264Preset"]]];
-                if ([item[@"x264Tune"] length])
+                encoderPresetInfo = [encoderPresetInfo stringByAppendingString: [NSString stringWithFormat:@"Preset: %@", item[@"VideoPreset"]]];
+                if ([item[@"VideoTune"] length])
                 {
-                    x264Info = [x264Info stringByAppendingString: [NSString stringWithFormat:@" - Tune: %@", item[@"x264Tune"]]];
+                    encoderPresetInfo = [encoderPresetInfo stringByAppendingString: [NSString stringWithFormat:@" - Tune: %@", item[@"VideoTune"]]];
                 }
-                if ([item[@"x264OptionExtra"] length])
+                if ([item[@"VideoOptionExtra"] length])
                 {
-                    x264Info = [x264Info stringByAppendingString: [NSString stringWithFormat:@" - Options: %@", item[@"x264OptionExtra"]]];
+                    encoderPresetInfo = [encoderPresetInfo stringByAppendingString: [NSString stringWithFormat:@" - Options: %@", item[@"VideoOptionExtra"]]];
                 }
-                if ([item[@"h264Profile"] length])
+                if ([item[@"VideoProfile"] length])
                 {
-                    x264Info = [x264Info stringByAppendingString: [NSString stringWithFormat:@" - Profile: %@", item[@"h264Profile"]]];
+                    encoderPresetInfo = [encoderPresetInfo stringByAppendingString: [NSString stringWithFormat:@" - Profile: %@", item[@"VideoProfile"]]];
                 }
-                if ([item[@"h264Level"] length])
+                if ([item[@"VideoLevel"] length])
                 {
-                    x264Info = [x264Info stringByAppendingString: [NSString stringWithFormat:@" - Level: %@", item[@"h264Level"]]];
+                    encoderPresetInfo = [encoderPresetInfo stringByAppendingString: [NSString stringWithFormat:@" - Level: %@", item[@"VideoLevel"]]];
                 }
             }
-            [finalString appendString: @"x264: " withAttributes:detailBoldAttr];
-            [finalString appendString: x264Info withAttributes:detailAttr];
+            [finalString appendString: @"Encoder Options: " withAttributes:detailBoldAttr];
+            [finalString appendString: encoderPresetInfo withAttributes:detailAttr];
             [finalString appendString:@"\n" withAttributes:detailAttr];
         }
         else if (![item[@"VideoEncoder"] isEqualToString: @"VP3 (Theora)"])
index b3d0637bcdbfedb657eab80ef42ea7d1c868b7ef..6845ed7031f9add0305eebbe3779069500e95556 100644 (file)
@@ -36,14 +36,14 @@ extern NSString *HBVideoEncoderChangedNotification;
 @property (nonatomic, copy, readwrite) NSString *pictureFiltersField;
 
 // Property exposed for the auto name function
-@property (nonatomic, readonly) int selectedCodec;
-@property (nonatomic, readonly) int selectedQualityType;
+@property (nonatomic, readonly) int codec;
+@property (nonatomic, readonly) int qualityType;
 @property (nonatomic, readonly) NSString *selectedBitrate;
 @property (nonatomic, readonly) NSString *selectedQuality;
 
 // Property updates when the video size changes
-@property (nonatomic, readwrite) NSUInteger fX264PresetsWidthForUnparse;
-@property (nonatomic, readwrite) NSUInteger fX264PresetsHeightForUnparse;
+@property (nonatomic, readwrite) NSUInteger fPresetsWidthForUnparse;
+@property (nonatomic, readwrite) NSUInteger fPresetsHeightForUnparse;
 
 @property (nonatomic, retain, readwrite) HBController *fHBController;
 @property (nonatomic, retain, readwrite) HBAdvancedController *fAdvancedOptions;
index 3490b483d5953617074ccea2b0c63a5d5356e2e3..9a6cb4b734d7f793ab12c65f51dbfb833971d007 100644 (file)
@@ -40,37 +40,44 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
     IBOutlet NSTextField         * fPictureSettingsField;
     IBOutlet NSTextField         * fPictureFiltersField;
 
-    /* x264 Presets Box */
-    NSArray                      * fX264PresetNames;
-    NSUInteger                     fX264MediumPresetIndex;
+
+    /* Encoder options views */
+    IBOutlet NSView         *fPresetView;
+    IBOutlet NSView         *fSimplePresetView;
+
+    /* Simple Presets Box */
+    IBOutlet NSTextField    *fLavcOptionsTextField;
+    IBOutlet NSTextField    *fLavcOptionsLabel;
+
+    /* x264/x265 Presets Box */
+    NSArray                      * fPresetNames;
+    NSUInteger                     fMediumPresetIndex;
     IBOutlet NSButton            * fX264UseAdvancedOptionsCheck;
-    IBOutlet NSBox               * fX264PresetsBox;
-    IBOutlet NSSlider            * fX264PresetsSlider;
-    IBOutlet NSTextField         * fX264PresetSliderLabel;
-    IBOutlet NSTextField         * fX264PresetSelectedTextField;
-    IBOutlet NSPopUpButton       * fX264TunePopUp;
-    IBOutlet NSTextField         * fX264TunePopUpLabel;
-    IBOutlet NSPopUpButton       * fX264ProfilePopUp;
-    IBOutlet NSTextField         * fX264ProfilePopUpLabel;
-    IBOutlet NSPopUpButton       * fX264LevelPopUp;
-    IBOutlet NSTextField         * fX264LevelPopUpLabel;
-    IBOutlet NSButton            * fX264FastDecodeCheck;
-    IBOutlet NSTextField         * fDisplayX264PresetsAdditonalOptionsTextField;
-    IBOutlet NSTextField         * fDisplayX264PresetsAdditonalOptionsLabel;
+    IBOutlet NSBox               * fPresetsBox;
+    IBOutlet NSSlider            * fPresetsSlider;
+    IBOutlet NSTextField         * fPresetSliderLabel;
+    IBOutlet NSTextField         * fPresetSelectedTextField;
+    IBOutlet NSPopUpButton       * fTunePopUp;
+    IBOutlet NSTextField         * fTunePopUpLabel;
+    IBOutlet NSPopUpButton       * fProfilePopUp;
+    IBOutlet NSTextField         * fProfilePopUpLabel;
+    IBOutlet NSPopUpButton       * fLevelPopUp;
+    IBOutlet NSTextField         * fLevelPopUpLabel;
+    IBOutlet NSButton            * fFastDecodeCheck;
+    IBOutlet NSTextField         * fDisplayPresetsAdditonalOptionsTextField;
+    IBOutlet NSTextField         * fDisplayPresetsAdditonalOptionsLabel;
     // Text Field to show the expanded opts from unparse()
     IBOutlet NSTextField         * fDisplayX264PresetsUnparseTextField;
     char                         * fX264PresetsUnparsedUTF8String;
-    NSUInteger                     _fX264PresetsHeightForUnparse;
-    NSUInteger                     _fX264PresetsWidthForUnparse;
 }
 
+@property (nonatomic, readwrite) int codec;
+@property (nonatomic, readwrite) int qualityType;
+
 @end
 
 @implementation HBVideoController
 
-@synthesize fX264PresetsHeightForUnparse = _fX264PresetsHeightForUnparse;
-@synthesize fX264PresetsWidthForUnparse = _fX264PresetsWidthForUnparse;
-
 - (void)setPictureSettingsField:(NSString *)string
 {
     if (string)
@@ -89,16 +96,6 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
     }
 }
 
-- (int)selectedCodec
-{
-    return (int)[[fVidEncoderPopUp selectedItem] tag];
-}
-
-- (int)selectedQualityType
-{
-    return (int)[[fVidQualityMatrix selectedCell] tag];
-}
-
 - (NSString *)selectedBitrate
 {
     return [fVidBitrateField stringValue];
@@ -138,14 +135,15 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
 
     /* Video encoder */
     [fVidEncoderPopUp removeAllItems];
-    [fVidEncoderPopUp addItemWithTitle: @"FFmpeg"];
+    [fVidEncoderPopUp addItemWithTitle:@"H.264 (x264)"];
 
-    /* setup our x264 presets widgets - this only needs to be done once */
-    [self setupX264PresetsWidgets];
+    /* setup our x264/x265 presets widgets */
+    [self switchPresetViewForEncoder:HB_VCODEC_X264];
 
     /* Video quality */
-       [fVidBitrateField    setIntValue: 1000];
-    [fVidQualityMatrix   selectCell: fVidBitrateCell];
+       [fVidBitrateField setIntValue: 1000];
+    self.qualityType = 0;
+
     [self videoMatrixChanged:nil];
 
     /* Video framerate */
@@ -173,7 +171,7 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
         }
         else
         {
-            itemTitle = [NSString stringWithUTF8String:video_framerate->name];
+            itemTitle = @(video_framerate->name);
         }
         menuItem = [[fVidRatePopUp menu] addItemWithTitle:itemTitle
                                                    action:nil
@@ -224,17 +222,18 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
     }
 
     [self videoMatrixChanged:nil];
-    [self enableX264Widgets:flag];
+    [self enableEncoderOptionsWidgets:flag];
 }
 
 - (void)containerChanged:(NSNotification *)aNotification
 {
     NSDictionary *notDict = [aNotification userInfo];
 
-    int videoContainer = [[notDict objectForKey: keyContainerTag] intValue];
+    int videoContainer = [notDict[keyContainerTag] intValue];
 
     /* lets get the tag of the currently selected item first so we might reset it later */
-    int selectedVidEncoderTag = (int)[[fVidEncoderPopUp selectedItem] tag];
+    int selectedVidEncoderTag = self.codec;
+    BOOL encoderSupported = NO;
 
     /* Note: we now store the video encoder int values from common.c in the tags of each popup for easy retrieval later */
     [fVidEncoderPopUp removeAllItems];
@@ -244,30 +243,21 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
     {
         if (video_encoder->muxers & videoContainer)
         {
-            NSMenuItem *menuItem = [[fVidEncoderPopUp menu] addItemWithTitle:[NSString stringWithUTF8String:video_encoder->name]
+            NSMenuItem *menuItem = [[fVidEncoderPopUp menu] addItemWithTitle:@(video_encoder->name)
                                                           action:nil
                                                    keyEquivalent:@""];
             [menuItem setTag:video_encoder->codec];
-        }
-    }
 
-    /*
-     * item 0 will be selected by default
-     * deselect it so that we can detect whether the video encoder has changed
-     */
-    [fVidEncoderPopUp selectItem:nil];
-    if (selectedVidEncoderTag)
-    {
-        // if we have a tag for previously selected encoder, try to select it
-        // if this fails, [fVidEncoderPopUp selectedItem] will be nil
-        // we'll handle that scenario further down
-        [fVidEncoderPopUp selectItemWithTag:selectedVidEncoderTag];
+            if (selectedVidEncoderTag == video_encoder->codec)
+            {
+                encoderSupported = YES;
+            }
+        }
     }
 
-    if ([fVidEncoderPopUp selectedItem] == nil)
+    if (!encoderSupported)
     {
-        /* this means the above call to selectItemWithTag failed */
-        [fVidEncoderPopUp selectItemAtIndex:0];
+        self.codec = hb_video_encoder_get_default(videoContainer);
         [self videoEncoderPopUpChanged:nil];
     }
 }
@@ -282,53 +272,56 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
 - (void)applyVideoSettingsFromQueue:(NSDictionary *)queueToApply
 {
     /* video encoder */
-    [fVidEncoderPopUp selectItemWithTitle:[queueToApply objectForKey:@"VideoEncoder"]];
-    [self.fAdvancedOptions setLavcOptions:     [queueToApply objectForKey:@"lavcOption"]];
+    self.codec = [queueToApply[@"JobVideoEncoderVcodec"] intValue];
+
+    self.lavcOptions = queueToApply[@"lavcOption"];
+
     /* advanced x264 options */
-    if ([[queueToApply objectForKey:@"x264UseAdvancedOptions"] intValue])
+    if ([queueToApply[@"x264UseAdvancedOptions"] intValue])
     {
         // we are using the advanced panel
-        [self.fAdvancedOptions setOptions:[queueToApply objectForKey:@"x264Option"]];
+        [self.fAdvancedOptions setOptions:queueToApply[@"x264Option"]];
         // preset does not use the x264 preset system, reset the widgets
-        [self setX264Preset:     nil];
-        [self setX264Tune:       nil];
-        [self setX264OptionExtra:[queueToApply objectForKey:@"x264Option"]];
-        [self setH264Profile:    nil];
-        [self setH264Level:      nil];
+        [self setPreset:     nil];
+        [self setTune:       nil];
+        [self setOptionExtra:queueToApply[@"x264Option"]];
+        [self setProfile:    nil];
+        [self setLevel:      nil];
         // enable the advanced panel and update the widgets
         [fX264UseAdvancedOptionsCheck setState:NSOnState];
-        [self updateX264Widgets:nil];
+        [self updateEncoderOptionsWidgets:nil];
     }
     else
     {
         // we are using the x264 preset system
-        [self setX264Preset:     [queueToApply objectForKey:@"x264Preset"]];
-        [self setX264Tune:       [queueToApply objectForKey:@"x264Tune"]];
-        [self setX264OptionExtra:[queueToApply objectForKey:@"x264OptionExtra"]];
-        [self setH264Profile:    [queueToApply objectForKey:@"h264Profile"]];
-        [self setH264Level:      [queueToApply objectForKey:@"h264Level"]];
+        [self setPreset:     queueToApply[@"VideoPreset"]];
+        [self setTune:       queueToApply[@"VideoTune"]];
+        [self setOptionExtra:queueToApply[@"VideoOptionExtra"]];
+        [self setProfile:    queueToApply[@"VideoProfile"]];
+        [self setLevel:      queueToApply[@"VideoLevel"]];
         // preset does not use the advanced panel, reset it
         [self.fAdvancedOptions setOptions:@""];
         // disable the advanced panel and update the widgets
         [fX264UseAdvancedOptionsCheck setState:NSOffState];
-        [self updateX264Widgets:nil];
+        [self updateEncoderOptionsWidgets:nil];
     }
 
     /* Lets run through the following functions to get variables set there */
     [self videoEncoderPopUpChanged:nil];
 
     /* Video quality */
-    [fVidQualityMatrix selectCellAtRow:[[queueToApply objectForKey:@"VideoQualityType"] intValue] column:0];
+    self.qualityType = [queueToApply[@"VideoQualityType"] intValue];
 
-    [fVidBitrateField setStringValue:[queueToApply objectForKey:@"VideoAvgBitrate"]];
+    [fVidBitrateField setStringValue:queueToApply[@"VideoAvgBitrate"]];
 
     int direction;
     float minValue, maxValue, granularity;
-    hb_video_quality_get_limits((int)[[fVidEncoderPopUp selectedItem] tag],
-                                &minValue, &maxValue, &granularity, &direction);
+
+    hb_video_quality_get_limits(self.codec, &minValue, &maxValue, &granularity, &direction);
+
     if (!direction)
     {
-        [fVidQualitySlider setFloatValue:[[queueToApply objectForKey:@"VideoQualitySlider"] floatValue]];
+        [fVidQualitySlider setFloatValue:[queueToApply[@"VideoQualitySlider"] floatValue]];
     }
     else
     {
@@ -338,16 +331,16 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
          */
         [fVidQualitySlider setFloatValue:([fVidQualitySlider minValue] +
                                           [fVidQualitySlider maxValue] -
-                                          [[queueToApply objectForKey:@"VideoQualitySlider"] floatValue])];
+                                          [queueToApply[@"VideoQualitySlider"] floatValue])];
     }
 
     [self videoMatrixChanged:nil];
 
     /* Video framerate */
-    if ([[queueToApply objectForKey:@"VideoFramerate"] isEqualToString:@"Same as source"])
+    if ([queueToApply[@"VideoFramerate"] isEqualToString:@"Same as source"])
     {
         /* Now set the Video Frame Rate Mode to either vfr or cfr according to the preset */
-        if ([[queueToApply objectForKey:@"VideoFramerateMode"] isEqualToString:@"vfr"])
+        if ([queueToApply[@"VideoFramerateMode"] isEqualToString:@"vfr"])
         {
             [fFramerateMatrix selectCellAtRow:0 column:0]; // we want vfr
         }
@@ -359,7 +352,7 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
     else
     {
         /* Now set the Video Frame Rate Mode to either pfr or cfr according to the preset */
-        if ([[queueToApply objectForKey:@"VideoFramerateMode"] isEqualToString:@"pfr"])
+        if ([queueToApply[@"VideoFramerateMode"] isEqualToString:@"pfr"])
         {
             [fFramerateMatrix selectCellAtRow:0 column:0]; // we want pfr
         }
@@ -368,51 +361,53 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
             [fFramerateMatrix selectCellAtRow:1 column:0]; // we want cfr
         }
     }
-    [fVidRatePopUp selectItemWithTitle:[queueToApply objectForKey:@"VideoFramerate"]];
+    [fVidRatePopUp selectItemWithTitle:queueToApply[@"VideoFramerate"]];
     [self videoFrameRateChanged:nil];
 
     /* 2 Pass Encoding */
-    [fVidTwoPassCheck setState:[[queueToApply objectForKey:@"VideoTwoPass"] intValue]];
+    [fVidTwoPassCheck setState:[queueToApply[@"VideoTwoPass"] intValue]];
     [self twoPassCheckboxChanged:nil];
     /* Turbo 1st pass for 2 Pass Encoding */
-    [fVidTurboPassCheck setState:[[queueToApply objectForKey:@"VideoTurboTwoPass"] intValue]];
+    [fVidTurboPassCheck setState:[queueToApply[@"VideoTurboTwoPass"] intValue]];
 }
 
 - (void)applySettingsFromPreset:(NSDictionary *)preset
 {
     /* map legacy encoder names via libhb */
-    const char *strValue = hb_video_encoder_sanitize_name([[preset objectForKey:@"VideoEncoder"] UTF8String]);
-    [fVidEncoderPopUp selectItemWithTitle:[NSString stringWithFormat:@"%s", strValue]];
+    const char *strValue = hb_video_encoder_sanitize_name([preset[@"VideoEncoder"] UTF8String]);
+
+    self.codec = hb_video_encoder_get_from_name(strValue);
     [self videoEncoderPopUpChanged:nil];
 
-    if ([[fVidEncoderPopUp selectedItem] tag] == HB_VCODEC_X264)
+    if (self.codec == HB_VCODEC_X264 || self.codec == HB_VCODEC_X265)
     {
-        if (![preset objectForKey:@"x264UseAdvancedOptions"] ||
-            [[preset objectForKey:@"x264UseAdvancedOptions"] intValue])
+        if (self.codec == HB_VCODEC_X264 &&
+            (!preset[@"x264UseAdvancedOptions"] ||
+            [preset[@"x264UseAdvancedOptions"] intValue]))
         {
             /*
              * x264UseAdvancedOptions is not set (legacy preset)
              * or set to 1 (enabled), so we use the old advanced panel
              */
-            if ([preset objectForKey:@"x264Option"])
+            if (preset[@"x264Option"])
             {
                 /* we set the advanced options string here if applicable */
-                [self.fAdvancedOptions setOptions:[preset objectForKey:@"x264Option"]];
-                [self setX264OptionExtra:[preset objectForKey:@"x264Option"]];
+                [self.fAdvancedOptions setOptions:preset[@"x264Option"]];
+                [self setOptionExtra:preset[@"x264Option"]];
             }
             else
             {
                 [self.fAdvancedOptions setOptions:        @""];
-                [self             setX264OptionExtra:nil];
+                [self             setOptionExtra:nil];
             }
             /* preset does not use the x264 preset system, reset the widgets */
-            [self setX264Preset: nil];
-            [self setX264Tune:   nil];
-            [self setH264Profile:nil];
-            [self setH264Level:  nil];
+            [self setPreset: nil];
+            [self setTune:   nil];
+            [self setProfile:nil];
+            [self setLevel:  nil];
             /* we enable the advanced panel and update the widgets */
             [fX264UseAdvancedOptionsCheck setState:NSOnState];
-            [self updateX264Widgets:nil];
+            [self updateEncoderOptionsWidgets:nil];
         }
         else
         {
@@ -420,20 +415,31 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
              * x264UseAdvancedOptions is set to 0 (disabled),
              * so we use the x264 preset system
              */
-            [self setX264Preset:     [preset objectForKey:@"x264Preset"]];
-            [self setX264Tune:       [preset objectForKey:@"x264Tune"]];
-            [self setX264OptionExtra:[preset objectForKey:@"x264OptionExtra"]];
-            [self setH264Profile:    [preset objectForKey:@"h264Profile"]];
-            [self setH264Level:      [preset objectForKey:@"h264Level"]];
+            if (preset[@"x264Preset"])
+            {
+                [self setPreset:     preset[@"x264Preset"]];
+                [self setTune:       preset[@"x264Tune"]];
+                [self setOptionExtra:preset[@"x264OptionExtra"]];
+                [self setProfile:    preset[@"h264Profile"]];
+                [self setLevel:      preset[@"h264Level"]];
+            }
+            else
+            {
+                [self setPreset:     preset[@"VideoPreset"]];
+                [self setTune:       preset[@"VideoTune"]];
+                [self setOptionExtra:preset[@"VideoOptionExtra"]];
+                [self setProfile:    preset[@"VideoProfile"]];
+                [self setLevel:      preset[@"VideoLevel"]];
+            }
             /* preset does not use the advanced panel, reset it */
             [self.fAdvancedOptions setOptions:@""];
             /* we disable the advanced panel and update the widgets */
             [fX264UseAdvancedOptionsCheck setState:NSOffState];
-            [self updateX264Widgets:nil];
+            [self updateEncoderOptionsWidgets:nil];
         }
     }
 
-    int qualityType = [[preset objectForKey:@"VideoQualityType"] intValue] - 1;
+    int qualityType = [preset[@"VideoQualityType"] intValue] - 1;
     /* Note since the removal of Target Size encoding, the possible values for VideoQuality type are 0 - 1.
      * Therefore any preset that uses the old 2 for Constant Quality would now use 1 since there is one less index
      * for the fVidQualityMatrix. It should also be noted that any preset that used the deprecated Target Size
@@ -443,17 +449,18 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
     {
         qualityType = 0;
     }
-    [fVidQualityMatrix selectCellWithTag:qualityType];
+    self.qualityType = qualityType;
 
-    [fVidBitrateField setStringValue:[preset objectForKey:@"VideoAvgBitrate"]];
+    [fVidBitrateField setStringValue:preset[@"VideoAvgBitrate"]];
 
     int direction;
     float minValue, maxValue, granularity;
-    hb_video_quality_get_limits((int)[[fVidEncoderPopUp selectedItem] tag],
-                                &minValue, &maxValue, &granularity, &direction);
+
+    hb_video_quality_get_limits(self.codec, &minValue, &maxValue, &granularity, &direction);
+
     if (!direction)
     {
-        [fVidQualitySlider setFloatValue:[[preset objectForKey:@"VideoQualitySlider"] floatValue]];
+        [fVidQualitySlider setFloatValue:[preset[@"VideoQualitySlider"] floatValue]];
     }
     else
     {
@@ -463,17 +470,17 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
          */
         [fVidQualitySlider setFloatValue:([fVidQualitySlider minValue] +
                                           [fVidQualitySlider maxValue] -
-                                          [[preset objectForKey:@"VideoQualitySlider"] floatValue])];
+                                          [preset[@"VideoQualitySlider"] floatValue])];
     }
 
     [self videoMatrixChanged:nil];
 
     /* Video framerate */
-    if ([[preset objectForKey:@"VideoFramerate"] isEqualToString:@"Same as source"])
+    if ([preset[@"VideoFramerate"] isEqualToString:@"Same as source"])
     {
         /* Now set the Video Frame Rate Mode to either vfr or cfr according to the preset */
-        if (![preset objectForKey:@"VideoFramerateMode"] ||
-            [[preset objectForKey:@"VideoFramerateMode"] isEqualToString:@"vfr"])
+        if (!preset[@"VideoFramerateMode"] ||
+            [preset[@"VideoFramerateMode"] isEqualToString:@"vfr"])
         {
             [fFramerateMatrix selectCellAtRow:0 column:0]; // we want vfr
         }
@@ -485,8 +492,8 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
     else
     {
         /* Now set the Video Frame Rate Mode to either pfr or cfr according to the preset */
-        if ([[preset objectForKey:@"VideoFramerateMode"] isEqualToString:@"pfr"] ||
-            [[preset objectForKey:@"VideoFrameratePFR"]  intValue] == 1)
+        if ([preset[@"VideoFramerateMode"] isEqualToString:@"pfr"] ||
+            [preset[@"VideoFrameratePFR"]  intValue] == 1)
         {
             [fFramerateMatrix selectCellAtRow:0 column:0]; // we want pfr
         }
@@ -496,81 +503,81 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
         }
     }
     /* map legacy names via libhb */
-    int intValue = hb_video_framerate_get_from_name([[preset objectForKey:@"VideoFramerate"] UTF8String]);
+    int intValue = hb_video_framerate_get_from_name([preset[@"VideoFramerate"] UTF8String]);
     [fVidRatePopUp selectItemWithTag:intValue];
     [self videoFrameRateChanged:nil];
 
     /* 2 Pass Encoding */
-    [fVidTwoPassCheck setState:[[preset objectForKey:@"VideoTwoPass"] intValue]];
+    [fVidTwoPassCheck setState:[preset[@"VideoTwoPass"] intValue]];
     [self twoPassCheckboxChanged:nil];
 
     /* Turbo 1st pass for 2 Pass Encoding */
-    [fVidTurboPassCheck setState:[[preset objectForKey:@"VideoTurboTwoPass"] intValue]];
+    [fVidTurboPassCheck setState:[preset[@"VideoTurboTwoPass"] intValue]];
 }
 
 - (void)prepareVideoForQueueFileJob:(NSMutableDictionary *)queueFileJob
 {
-       [queueFileJob setObject:[fVidEncoderPopUp titleOfSelectedItem] forKey:@"VideoEncoder"];
+    queueFileJob[@"VideoEncoder"] = @(hb_video_encoder_get_name(self.codec));
 
     /* x264 advanced options */
     if ([fX264UseAdvancedOptionsCheck state])
     {
         // we are using the advanced panel
-        [queueFileJob setObject:[NSNumber numberWithInt:1]       forKey: @"x264UseAdvancedOptions"];
-        [queueFileJob setObject:[self.fAdvancedOptions optionsString] forKey:@"x264Option"];
+        queueFileJob[@"x264UseAdvancedOptions"] = @1;
+        queueFileJob[@"x264Option"] = [self.fAdvancedOptions optionsString];
     }
     else
     {
-        // we are using the x264 preset system
-        [queueFileJob setObject:[NSNumber numberWithInt:0] forKey: @"x264UseAdvancedOptions"];
-        [queueFileJob setObject:[self x264Preset]          forKey: @"x264Preset"];
-        [queueFileJob setObject:[self x264Tune]            forKey: @"x264Tune"];
-        [queueFileJob setObject:[self x264OptionExtra]     forKey: @"x264OptionExtra"];
-        [queueFileJob setObject:[self h264Profile]         forKey: @"h264Profile"];
-        [queueFileJob setObject:[self h264Level]           forKey: @"h264Level"];
+        // we are using the x264/x265 preset system
+        queueFileJob[@"x264UseAdvancedOptions"] = @0;
+        queueFileJob[@"VideoPreset"] = [self preset];
+        queueFileJob[@"VideoTune"] = [self tune];
+        queueFileJob[@"VideoOptionExtra"] = [self optionExtra];
+        queueFileJob[@"VideoProfile"] = [self profile];
+        queueFileJob[@"VideoLevel"] = [self level];
     }
 
     /* FFmpeg (lavc) Option String */
-    [queueFileJob setObject:[self.fAdvancedOptions optionsStringLavc] forKey:@"lavcOption"];
+    queueFileJob[@"lavcOption"] = self.lavcOptions;
 
-       [queueFileJob setObject:[NSNumber numberWithInteger:[[fVidQualityMatrix selectedCell] tag] + 1] forKey:@"VideoQualityType"];
-       [queueFileJob setObject:[fVidBitrateField stringValue] forKey:@"VideoAvgBitrate"];
-       [queueFileJob setObject:[NSNumber numberWithFloat:[fVidQualityRFField floatValue]] forKey:@"VideoQualitySlider"];
+       queueFileJob[@"VideoQualityType"] = @(self.qualityType + 1);
+       queueFileJob[@"VideoAvgBitrate"] = [fVidBitrateField stringValue];
+       queueFileJob[@"VideoQualitySlider"] = @([fVidQualityRFField floatValue]);
     /* Framerate */
-    [queueFileJob setObject:[fVidRatePopUp titleOfSelectedItem] forKey:@"VideoFramerate"];
+    queueFileJob[@"VideoFramerate"] = [fVidRatePopUp titleOfSelectedItem];
     /* Frame Rate Mode */
     if ([fFramerateMatrix selectedRow] == 1) // if selected we are cfr regardless of the frame rate popup
     {
-        [queueFileJob setObject:@"cfr" forKey:@"VideoFramerateMode"];
+        queueFileJob[@"VideoFramerateMode"] = @"cfr";
     }
     else
     {
         if ([fVidRatePopUp indexOfSelectedItem] == 0) // Same as source frame rate
         {
-            [queueFileJob setObject:@"vfr" forKey:@"VideoFramerateMode"];
+            queueFileJob[@"VideoFramerateMode"] = @"vfr";
         }
         else
         {
-            [queueFileJob setObject:@"pfr" forKey:@"VideoFramerateMode"];
+            queueFileJob[@"VideoFramerateMode"] = @"pfr";
         }
 
     }
 
        /* 2 Pass Encoding */
-       [queueFileJob setObject:[NSNumber numberWithInteger:[fVidTwoPassCheck state]] forKey:@"VideoTwoPass"];
+       queueFileJob[@"VideoTwoPass"] = @([fVidTwoPassCheck state]);
        /* Turbo 2 pass Encoding fVidTurboPassCheck*/
-       [queueFileJob setObject:[NSNumber numberWithInteger:[fVidTurboPassCheck state]] forKey:@"VideoTurboTwoPass"];
+       queueFileJob[@"VideoTurboTwoPass"] = @([fVidTurboPassCheck state]);
 
     /* Video encoder */
-       [queueFileJob setObject:[NSNumber numberWithInteger:[[fVidEncoderPopUp selectedItem] tag]] forKey:@"JobVideoEncoderVcodec"];
+       queueFileJob[@"JobVideoEncoderVcodec"] = @(self.codec);
 
     /* Framerate */
-    [queueFileJob setObject:[NSNumber numberWithInteger:[[fVidRatePopUp selectedItem] tag]] forKey:@"JobIndexVideoFramerate"];
+    queueFileJob[@"JobIndexVideoFramerate"] = @([[fVidRatePopUp selectedItem] tag]);
 }
 
 - (void)prepareVideoForJobPreview:(hb_job_t *)job andTitle:(hb_title_t *)title
 {
-    job->vcodec = (int)[[fVidEncoderPopUp selectedItem] tag];
+    job->vcodec = self.codec;
     job->fastfirstpass = 0;
 
     job->chapter_markers = 0;
@@ -596,23 +603,23 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
         else
         {
             // we are using the x264 preset system
-            if ([(tmpString = [self x264Tune]) length])
+            if ([(tmpString = [self tune]) length])
             {
                 encoder_tune = [tmpString UTF8String];
             }
-            if ([(tmpString = [self x264OptionExtra]) length])
+            if ([(tmpString = [self optionExtra]) length])
             {
                 encoder_options = [tmpString UTF8String];
             }
-            if ([(tmpString = [self h264Profile]) length])
+            if ([(tmpString = [self profile]) length])
             {
                 encoder_profile = [tmpString UTF8String];
             }
-            if ([(tmpString = [self h264Level]) length])
+            if ([(tmpString = [self level]) length])
             {
                 encoder_level = [tmpString UTF8String];
             }
-            encoder_preset = [[self x264Preset] UTF8String];
+            encoder_preset = [[self preset] UTF8String];
         }
         hb_job_set_encoder_preset (job, encoder_preset);
         hb_job_set_encoder_tune   (job, encoder_tune);
@@ -622,9 +629,7 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
     }
     else if (job->vcodec & HB_VCODEC_FFMPEG_MASK)
     {
-        hb_job_set_encoder_options(job,
-                                   [[self.fAdvancedOptions optionsStringLavc]
-                                    UTF8String]);
+        hb_job_set_encoder_options(job, [self.lavcOptions UTF8String]);
     }
 
     /* Video settings */
@@ -662,7 +667,7 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
         }
     }
 
-    switch( [[fVidQualityMatrix selectedCell] tag] )
+    switch (self.qualityType)
     {
         case 0:
             /* ABR */
@@ -684,119 +689,87 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
 
 - (void)prepareVideoForPreset:(NSMutableDictionary *)preset
 {
-    [preset setObject:[fVidEncoderPopUp titleOfSelectedItem] forKey:@"VideoEncoder"];
-    /* x264 Options, this will either be advanced panel or the video tabs x264 presets panel with modded option string */
+    preset[@"VideoEncoder"] = @(hb_video_encoder_get_name(self.codec));
 
+    /* x264 Options, this will either be advanced panel or the video tabs x264 presets panel with modded option string */
     if ([fX264UseAdvancedOptionsCheck state] == NSOnState)
     {
         /* use the old advanced panel */
-        [preset setObject:[NSNumber numberWithInt:1]       forKey:@"x264UseAdvancedOptions"];
-        [preset setObject:[self.fAdvancedOptions optionsString] forKey:@"x264Option"];
+        preset[@"x264UseAdvancedOptions"] = @1;
+        preset[@"x264Option"] = [self.fAdvancedOptions optionsString];
     }
     else
     {
         /* use the x264 preset system */
-        [preset setObject:[NSNumber numberWithInt:0] forKey:@"x264UseAdvancedOptions"];
-        [preset setObject:[self x264Preset]          forKey:@"x264Preset"];
-        [preset setObject:[self x264Tune]            forKey:@"x264Tune"];
-        [preset setObject:[self x264OptionExtra]     forKey:@"x264OptionExtra"];
-        [preset setObject:[self h264Profile]         forKey:@"h264Profile"];
-        [preset setObject:[self h264Level]           forKey:@"h264Level"];
+        preset[@"x264UseAdvancedOptions"] = @0;
+        preset[@"VideoPreset"]      = [self preset];
+        preset[@"VideoTune"]        = [self tune];
+        preset[@"VideoOptionExtra"] = [self optionExtra];
+        preset[@"VideoProfile"]     = [self profile];
+        preset[@"VideoLevel"]       = [self level];
+
         /*
          * bonus: set the unparsed options to make the preset compatible
          * with old HB versions
          */
         if (fX264PresetsUnparsedUTF8String != NULL)
         {
-            [preset setObject:[NSString stringWithUTF8String:fX264PresetsUnparsedUTF8String]
-                       forKey:@"x264Option"];
+            preset[@"x264Option"] = @(fX264PresetsUnparsedUTF8String);
         }
         else
         {
-            [preset setObject:@"" forKey:@"x264Option"];
+            preset[@"x264Option"] = @"";
         }
     }
 
     /* FFmpeg (lavc) Option String */
-    [preset setObject:[self.fAdvancedOptions optionsStringLavc] forKey:@"lavcOption"];
+    preset[@"lavcOption"] = self.lavcOptions;
 
     /* though there are actually only 0 - 1 types available in the ui we need to map to the old 0 - 2
      * set of indexes from when we had 0 == Target , 1 == Abr and 2 == Constant Quality for presets
      * to take care of any legacy presets. */
-    [preset setObject:[NSNumber numberWithInteger:[[fVidQualityMatrix selectedCell] tag] +1 ] forKey:@"VideoQualityType"];
-    [preset setObject:[fVidBitrateField stringValue] forKey:@"VideoAvgBitrate"];
-    [preset setObject:[NSNumber numberWithFloat:[fVidQualityRFField floatValue]] forKey:@"VideoQualitySlider"];
+    preset[@"VideoQualityType"] = @(self.qualityType +1);
+    preset[@"VideoAvgBitrate"] = [fVidBitrateField stringValue];
+    preset[@"VideoQualitySlider"] = @([fVidQualityRFField floatValue]);
 
     /* Video framerate and framerate mode */
     if ([fFramerateMatrix selectedRow] == 1)
     {
-        [preset setObject:@"cfr" forKey:@"VideoFramerateMode"];
+        preset[@"VideoFramerateMode"] = @"cfr";
     }
     if ([fVidRatePopUp indexOfSelectedItem] == 0) // Same as source is selected
     {
-        [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
+        preset[@"VideoFramerate"] = @"Same as source";
 
         if ([fFramerateMatrix selectedRow] == 0)
         {
-            [preset setObject:@"vfr" forKey:@"VideoFramerateMode"];
+            preset[@"VideoFramerateMode"] = @"vfr";
         }
     }
     else // translate the rate (selected item's tag) to the official libhb name
     {
-        [preset setObject:[NSString stringWithFormat:@"%s",
-                           hb_video_framerate_get_name((int)[[fVidRatePopUp selectedItem] tag])]
-                   forKey:@"VideoFramerate"];
+        preset[@"VideoFramerate"] = [NSString stringWithFormat:@"%s",
+                           hb_video_framerate_get_name((int)[[fVidRatePopUp selectedItem] tag])];
 
         if ([fFramerateMatrix selectedRow] == 0)
         {
-            [preset setObject:@"pfr" forKey:@"VideoFramerateMode"];
+            preset[@"VideoFramerateMode"] = @"pfr";
         }
     }
 
 
 
     /* 2 Pass Encoding */
-    [preset setObject:[NSNumber numberWithInteger:[fVidTwoPassCheck state]] forKey:@"VideoTwoPass"];
+    preset[@"VideoTwoPass"] = @([fVidTwoPassCheck state]);
     /* Turbo 2 pass Encoding fVidTurboPassCheck*/
-    [preset setObject:[NSNumber numberWithInteger:[fVidTurboPassCheck state]] forKey:@"VideoTurboTwoPass"];
+    preset[@"VideoTurboTwoPass"] = @([fVidTurboPassCheck state]);
 }
 
 #pragma mark - Video
 
 - (IBAction) videoEncoderPopUpChanged: (id) sender
 {
-    /* if no valid encoder is selected, use the first one */
-    if ([fVidEncoderPopUp selectedItem] == nil)
-    {
-        [fVidEncoderPopUp selectItemAtIndex:0];
-    }
-
-    int videoEncoder = (int)[[fVidEncoderPopUp selectedItem] tag];
-
-    [self.fAdvancedOptions setHidden:YES];
-    /* If we are using x264 then show the x264 advanced panel and the x264 presets box */
-    if (videoEncoder == HB_VCODEC_X264)
-    {
-        [self.fAdvancedOptions setHidden:NO];
-
-        // show the x264 presets box
-        [fX264PresetsBox setHidden:NO];
-    }
-    else // we are FFmpeg (lavc) or Theora
-    {
-        [self.fAdvancedOptions setHidden:YES];
-        [fX264PresetsBox setHidden:YES];
-
-        // We Are Lavc
-        if ([[fVidEncoderPopUp selectedItem] tag] & HB_VCODEC_FFMPEG_MASK)
-        {
-            [self.fAdvancedOptions setLavcOptsEnabled:YES];
-        }
-        else /// We are Theora
-        {
-            [self.fAdvancedOptions setLavcOptsEnabled:NO];
-        }
-    }
+    [self switchPresetViewForEncoder:self.codec];
 
     [[NSNotificationCenter defaultCenter] postNotificationName:HBVideoEncoderChangedNotification object:self];
 
@@ -804,11 +777,10 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
        [self twoPassCheckboxChanged: sender];
 }
 
-
 - (IBAction) twoPassCheckboxChanged: (id) sender
 {
        /* check to see if x264 is chosen */
-       if([[fVidEncoderPopUp selectedItem] tag] == HB_VCODEC_X264)
+       if(self.codec == HB_VCODEC_X264)
     {
                if( [fVidTwoPassCheck state] == NSOnState)
                {
@@ -870,7 +842,7 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
     bitrate = quality = false;
     if( [fVidQualityMatrix isEnabled] )
     {
-        switch( [[fVidQualityMatrix selectedCell] tag] )
+        switch(self.qualityType)
         {
             case 0:
                 bitrate = true;
@@ -912,11 +884,10 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
                                           ([fVidQualitySlider maxValue] -
                                            [fVidQualitySlider minValue] + 1));
     [fVidQualityRFLabel setStringValue:[NSString stringWithFormat:@"%s",
-                                        hb_video_quality_get_name((int)[[fVidEncoderPopUp
-                                                                         selectedItem] tag])]];
+                                        hb_video_quality_get_name(self.codec)]];
     int direction;
     float minValue, maxValue, granularity;
-    hb_video_quality_get_limits((int)[[fVidEncoderPopUp selectedItem] tag],
+    hb_video_quality_get_limits([self codec],
                                 &minValue, &maxValue, &granularity, &direction);
     if (granularity < 1.0f)
     {
@@ -966,8 +937,9 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
     float inverseValue = ([fVidQualitySlider minValue] +
                           [fVidQualitySlider maxValue] -
                           [fVidQualitySlider floatValue]);
-    hb_video_quality_get_limits((int)[[fVidEncoderPopUp selectedItem] tag],
-                                &minValue, &maxValue, &granularity, &direction);
+
+    hb_video_quality_get_limits(self.codec, &minValue, &maxValue, &granularity, &direction);
+
     if (!direction)
     {
         [fVidQualityRFField setStringValue:[NSString stringWithFormat:@"%.2f",
@@ -979,7 +951,7 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
                                             inverseValue]];
     }
     /* Show a warning if x264 and rf 0 which is lossless */
-    if ([[fVidEncoderPopUp selectedItem] tag] == HB_VCODEC_X264 && inverseValue == 0.0)
+    if (self.codec == HB_VCODEC_X264 && inverseValue == 0.0)
     {
         [fVidQualityRFField setStringValue:[NSString stringWithFormat:@"%.2f (Warning: Lossless)",
                                             inverseValue]];
@@ -988,74 +960,114 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
     [self.fHBController customSettingUsed: sender];
 }
 
-#pragma mark - Video x264 Presets
+#pragma mark - Video x264/x265 Presets
+
+- (void)switchPresetViewForEncoder:(int)encoder
+{
+    [self.fAdvancedOptions setHidden:YES];
+
+    if (encoder == HB_VCODEC_X264 || encoder == HB_VCODEC_X265)
+    {
+        [fPresetsBox setContentView:fPresetView];
+        [self setupPresetsWidgetsForEncoder:encoder];
+
+        if (encoder == HB_VCODEC_X264)
+        {
+            [self.fAdvancedOptions setHidden:NO];
+        }
+    }
+    else if (encoder & HB_VCODEC_FFMPEG_MASK)
+    {
+        [fPresetsBox setContentView:fSimplePresetView];
+    }
+    else
+    {
+        [fPresetsBox setContentView:nil];
+    }
+}
 
-- (void) setupX264PresetsWidgets
+- (void) setupPresetsWidgetsForEncoder:(int)encoder
 {
+
+    if (encoder == HB_VCODEC_X264)
+    {
+        [fX264UseAdvancedOptionsCheck setHidden:NO];
+        [fFastDecodeCheck setHidden:NO];
+    }
+    else
+    {
+        [fX264UseAdvancedOptionsCheck setHidden:YES];
+        [fFastDecodeCheck setHidden:YES];
+    }
+
     NSUInteger i;
     // populate the preset system widgets via hb_video_encoder_get_* functions.
-    // store x264 preset names
-    const char* const *x264_presets = hb_video_encoder_get_presets(HB_VCODEC_X264);
+    // store preset names
+    const char* const *presets = hb_video_encoder_get_presets(encoder);
     NSMutableArray *tmp_array = [[NSMutableArray alloc] init];
-    for (i = 0; x264_presets[i] != NULL; i++)
+    for (i = 0; presets[i] != NULL; i++)
     {
-        [tmp_array addObject:[NSString stringWithUTF8String:x264_presets[i]]];
-        if (!strcasecmp(x264_presets[i], "medium"))
+        [tmp_array addObject:@(presets[i])];
+        if (!strcasecmp(presets[i], "medium"))
         {
-            fX264MediumPresetIndex = i;
+            fMediumPresetIndex = i;
         }
     }
-    fX264PresetNames = [[NSArray alloc] initWithArray:tmp_array];
+    fPresetNames = [[NSArray alloc] initWithArray:tmp_array];
     [tmp_array release];
-    // setup the x264 preset slider
-    [fX264PresetsSlider setMinValue:0];
-    [fX264PresetsSlider setMaxValue:[fX264PresetNames count]-1];
-    [fX264PresetsSlider setNumberOfTickMarks:[fX264PresetNames count]];
-    [fX264PresetsSlider setIntegerValue:fX264MediumPresetIndex];
-    [fX264PresetsSlider setTickMarkPosition:NSTickMarkAbove];
-    [fX264PresetsSlider setAllowsTickMarkValuesOnly:YES];
-    [self x264PresetsSliderChanged: nil];
-    // setup the x264 tune popup
-    [fX264TunePopUp removeAllItems];
-    [fX264TunePopUp addItemWithTitle: @"none"];
-    const char* const *x264_tunes = hb_video_encoder_get_tunes(HB_VCODEC_X264);
-    for (int i = 0; x264_tunes[i] != NULL; i++)
+    // setup the preset slider
+    [fPresetsSlider setMinValue:0];
+    [fPresetsSlider setMaxValue:[fPresetNames count]-1];
+    [fPresetsSlider setNumberOfTickMarks:[fPresetNames count]];
+    [fPresetsSlider setIntegerValue:fMediumPresetIndex];
+    [fPresetsSlider setTickMarkPosition:NSTickMarkAbove];
+    [fPresetsSlider setAllowsTickMarkValuesOnly:YES];
+    [self presetsSliderChanged: nil];
+    // setup the tune popup
+    [fTunePopUp removeAllItems];
+    [fTunePopUp addItemWithTitle: @"none"];
+    const char* const *tunes = hb_video_encoder_get_tunes(encoder);
+    for (int i = 0; tunes[i] != NULL; i++)
     {
         // we filter out "fastdecode" as we have a dedicated checkbox for it
-        if (strcasecmp(x264_tunes[i], "fastdecode") != 0)
+        if (strcasecmp(tunes[i], "fastdecode") != 0)
         {
-            [fX264TunePopUp addItemWithTitle: [NSString stringWithUTF8String:x264_tunes[i]]];
+            [fTunePopUp addItemWithTitle: @(tunes[i])];
         }
     }
     // the fastdecode checkbox is off by default
-    [fX264FastDecodeCheck setState: NSOffState];
+    [fFastDecodeCheck setState: NSOffState];
     // setup the h264 profile popup
-    [fX264ProfilePopUp removeAllItems];
-    const char* const *h264_profiles = hb_video_encoder_get_profiles(HB_VCODEC_X264);
-    for (int i = 0; h264_profiles[i] != NULL; i++)
+    [fProfilePopUp removeAllItems];
+    const char* const *profiles = hb_video_encoder_get_profiles(encoder);
+    for (int i = 0; profiles[i] != NULL; i++)
+    {
+        [fProfilePopUp addItemWithTitle: @(profiles[i])];
+    }
+    // setup the level popup
+    [fLevelPopUp removeAllItems];
+    const char* const *levels = hb_video_encoder_get_levels(encoder);
+    for (int i = 0; levels != NULL && levels[i] != NULL; i++)
     {
-        [fX264ProfilePopUp addItemWithTitle: [NSString stringWithUTF8String:h264_profiles[i]]];
+        [fLevelPopUp addItemWithTitle: @(levels[i])];
     }
-    // setup the h264 level popup
-    [fX264LevelPopUp removeAllItems];
-    const char* const *h264_levels = hb_video_encoder_get_levels(HB_VCODEC_X264);
-    for (int i = 0; h264_levels[i] != NULL; i++)
+    if ([[fLevelPopUp itemArray] count] == 0)
     {
-        [fX264LevelPopUp addItemWithTitle: [NSString stringWithUTF8String:h264_levels[i]]];
+        [fLevelPopUp addItemWithTitle:@"auto"];
     }
     // clear the additional x264 options
-    [fDisplayX264PresetsAdditonalOptionsTextField setStringValue:@""];
+    [fDisplayPresetsAdditonalOptionsTextField setStringValue:@""];
 }
 
-- (void) enableX264Widgets: (bool) enable
+- (void) enableEncoderOptionsWidgets: (BOOL) enable
 {
     NSControl *controls[] =
     {
-        fX264PresetsSlider, fX264PresetSliderLabel, fX264PresetSelectedTextField,
-        fX264TunePopUp, fX264TunePopUpLabel, fX264FastDecodeCheck,
-        fDisplayX264PresetsAdditonalOptionsTextField, fDisplayX264PresetsAdditonalOptionsLabel,
-        fX264ProfilePopUp, fX264ProfilePopUpLabel,
-        fX264LevelPopUp, fX264LevelPopUpLabel,
+        fPresetsSlider, fPresetSliderLabel, fPresetSelectedTextField,
+        fTunePopUp, fTunePopUpLabel, fFastDecodeCheck,
+        fDisplayPresetsAdditonalOptionsTextField, fDisplayPresetsAdditonalOptionsLabel,
+        fProfilePopUp, fProfilePopUpLabel,
+        fLevelPopUp, fLevelPopUpLabel,
         fDisplayX264PresetsUnparseTextField,
     };
 
@@ -1085,7 +1097,7 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
     }
 }
 
-- (IBAction) updateX264Widgets: (id) sender
+- (IBAction) updateEncoderOptionsWidgets: (id) sender
 {
     if ([fX264UseAdvancedOptionsCheck state] == NSOnState)
     {
@@ -1102,8 +1114,7 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
         {
             if (fX264PresetsUnparsedUTF8String != NULL)
             {
-                [self.fAdvancedOptions setOptions:
-                 [NSString stringWithUTF8String:fX264PresetsUnparsedUTF8String]];
+                [self.fAdvancedOptions setOptions:@(fX264PresetsUnparsedUTF8String)];
             }
             else
             {
@@ -1112,159 +1123,182 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
         }
     }
     // enable/disable, populate and update the various widgets
-    [self             enableX264Widgets:       YES];
-    [self             x264PresetsSliderChanged:nil];
+    [self             enableEncoderOptionsWidgets:       YES];
+    [self             presetsSliderChanged:nil];
     [self.fAdvancedOptions X264AdvancedOptionsSet:  nil];
 }
 
+#pragma mark - Lavc presets
+
+- (void) setLavcOptions: (NSString *)optionExtra
+{
+    if (!optionExtra)
+    {
+        [fLavcOptionsTextField setStringValue:@""];
+        return;
+    }
+    [fLavcOptionsTextField setStringValue:optionExtra];
+}
+
+- (NSString *) lavcOptions
+{
+    return [fLavcOptionsTextField stringValue];
+}
+
 #pragma mark -
-#pragma mark x264 preset system
+#pragma mark x264/x265 preset system
 
-- (NSString *) x264Preset
+- (NSString *) preset
 {
-    return (NSString *)[fX264PresetNames objectAtIndex:[fX264PresetsSlider intValue]];
+    return (NSString *)fPresetNames[[fPresetsSlider intValue]];
 }
 
-- (NSString *) x264Tune
+- (NSString *) tune
 {
-    NSString *x264Tune = @"";
-    if ([fX264TunePopUp indexOfSelectedItem])
+    NSString *tune = @"";
+    if ([fTunePopUp indexOfSelectedItem])
     {
-        x264Tune = [x264Tune stringByAppendingString:
-                    [fX264TunePopUp titleOfSelectedItem]];
+        tune = [tune stringByAppendingString:
+                    [fTunePopUp titleOfSelectedItem]];
     }
-    if ([fX264FastDecodeCheck state])
+    if ([fFastDecodeCheck state])
     {
-        if ([x264Tune length])
+        if ([tune length])
         {
-            x264Tune = [x264Tune stringByAppendingString: @","];
+            tune = [tune stringByAppendingString: @","];
         }
-        x264Tune = [x264Tune stringByAppendingString: @"fastdecode"];
+        tune = [tune stringByAppendingString: @"fastdecode"];
     }
-    return x264Tune;
+    return tune;
 }
 
-- (NSString*) x264OptionExtra
+- (NSString *) optionExtra
 {
-    return [fDisplayX264PresetsAdditonalOptionsTextField stringValue];
+    return [fDisplayPresetsAdditonalOptionsTextField stringValue];
 }
 
-- (NSString*) h264Profile
+- (NSString *) profile
 {
-    if ([fX264ProfilePopUp indexOfSelectedItem])
+    if ([fProfilePopUp indexOfSelectedItem])
     {
-        return [fX264ProfilePopUp titleOfSelectedItem];
+        return [fProfilePopUp titleOfSelectedItem];
     }
     return @"";
 }
 
-- (NSString*) h264Level
+- (NSString *) level
 {
-    if ([fX264LevelPopUp indexOfSelectedItem])
+    if ([fLevelPopUp indexOfSelectedItem])
     {
-        return [fX264LevelPopUp titleOfSelectedItem];
+        return [fLevelPopUp titleOfSelectedItem];
     }
     return @"";
 }
 
-- (void) setX264Preset: (NSString*)x264Preset
+- (void) setPreset: (NSString *)preset
 {
-    if (x264Preset)
+    if (preset)
     {
-        NSString *name;
-        NSEnumerator *enumerator = [fX264PresetNames objectEnumerator];
-        while ((name = (NSString *)[enumerator nextObject]))
+        for (NSString *name in fPresetNames)
         {
-            if ([name isEqualToString:x264Preset])
+            if ([name isEqualToString:preset])
             {
-                [fX264PresetsSlider setIntegerValue:
-                 [fX264PresetNames indexOfObject:name]];
+                [fPresetsSlider setIntegerValue:
+                 [fPresetNames indexOfObject:name]];
                 return;
             }
         }
     }
-    [fX264PresetsSlider setIntegerValue:fX264MediumPresetIndex];
+    [fPresetsSlider setIntegerValue:fMediumPresetIndex];
 }
 
-- (void) setX264Tune: (NSString*)x264Tune
+- (void) setTune: (NSString *)tune
 {
-    if (!x264Tune)
+    if (!tune)
     {
-        [fX264TunePopUp selectItemAtIndex:0];
-        [fX264FastDecodeCheck setState:NSOffState];
+        [fTunePopUp selectItemAtIndex:0];
+        [fFastDecodeCheck setState:NSOffState];
         return;
     }
     // handle fastdecode
-    if ([x264Tune rangeOfString:@"fastdecode"].location != NSNotFound)
+    if ([tune rangeOfString:@"fastdecode"].location != NSNotFound)
     {
-        [fX264FastDecodeCheck setState:NSOnState];
+        [fFastDecodeCheck setState:NSOnState];
     }
     else
     {
-        [fX264FastDecodeCheck setState:NSOffState];
+        [fFastDecodeCheck setState:NSOffState];
     }
     // filter out fastdecode
-    x264Tune = [x264Tune stringByReplacingOccurrencesOfString:@","
+    tune = [tune stringByReplacingOccurrencesOfString:@","
                                                    withString:@""];
-    x264Tune = [x264Tune stringByReplacingOccurrencesOfString:@"fastdecode"
+    tune = [tune stringByReplacingOccurrencesOfString:@"fastdecode"
                                                    withString:@""];
     // set the tune
-    [fX264TunePopUp selectItemWithTitle:x264Tune];
+    [fTunePopUp selectItemWithTitle:tune];
     // fallback
-    if ([fX264TunePopUp indexOfSelectedItem] == -1)
+    if ([fTunePopUp indexOfSelectedItem] == -1)
     {
-        [fX264TunePopUp selectItemAtIndex:0];
+        [fTunePopUp selectItemAtIndex:0];
     }
 }
 
-- (void) setX264OptionExtra: (NSString*)x264OptionExtra
+- (void) setOptionExtra: (NSString *)optionExtra
 {
-    if (!x264OptionExtra)
+    if (!optionExtra)
     {
-        [fDisplayX264PresetsAdditonalOptionsTextField setStringValue:@""];
+        [fDisplayPresetsAdditonalOptionsTextField setStringValue:@""];
         return;
     }
-    [fDisplayX264PresetsAdditonalOptionsTextField setStringValue:x264OptionExtra];
+    [fDisplayPresetsAdditonalOptionsTextField setStringValue:optionExtra];
 }
 
-- (void) setH264Profile: (NSString*)h264Profile
+- (void) setProfile: (NSString *)profile
 {
-    if (!h264Profile)
+    if (!profile)
     {
-        [fX264ProfilePopUp selectItemAtIndex:0];
+        [fProfilePopUp selectItemAtIndex:0];
         return;
     }
     // set the profile
-    [fX264ProfilePopUp selectItemWithTitle:h264Profile];
+    [fProfilePopUp selectItemWithTitle:profile];
     // fallback
-    if ([fX264ProfilePopUp indexOfSelectedItem] == -1)
+    if ([fProfilePopUp indexOfSelectedItem] == -1)
     {
-        [fX264ProfilePopUp selectItemAtIndex:0];
+        [fProfilePopUp selectItemAtIndex:0];
     }
 }
 
-- (void) setH264Level: (NSString*)h264Level
+- (void) setLevel: (NSString *)level
 {
-    if (!h264Level)
+    if (!level)
     {
-        [fX264LevelPopUp selectItemAtIndex:0];
+        [fLevelPopUp selectItemAtIndex:0];
         return;
     }
     // set the level
-    [fX264LevelPopUp selectItemWithTitle:h264Level];
+    [fLevelPopUp selectItemWithTitle:level];
     // fallback
-    if ([fX264LevelPopUp indexOfSelectedItem] == -1)
+    if ([fLevelPopUp indexOfSelectedItem] == -1)
     {
-        [fX264LevelPopUp selectItemAtIndex:0];
+        [fLevelPopUp selectItemAtIndex:0];
     }
 }
 
-
-- (IBAction) x264PresetsSliderChanged: (id) sender
+- (IBAction) presetsSliderChanged: (id) sender
 {
     // we assume the preset names and slider were setup properly
-    [fX264PresetSelectedTextField setStringValue: [self x264Preset]];
-    [self x264PresetsChangedDisplayExpandedOptions:nil];
+    [fPresetSelectedTextField setStringValue: [self preset]];
+
+    if (self.codec == HB_VCODEC_X264)
+    {
+        [self x264PresetsChangedDisplayExpandedOptions:nil];
+        [fDisplayX264PresetsUnparseTextField setHidden:NO];
+    }
+    else
+    {
+        [fDisplayX264PresetsUnparseTextField setHidden:YES];
+    }
 
 }
 
@@ -1274,6 +1308,11 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
 - (IBAction) x264PresetsChangedDisplayExpandedOptions: (id) sender
 
 {
+    if (self.codec != HB_VCODEC_X264)
+    {
+        return;
+    }
+
     /* API reference:
      *
      * char * hb_x264_param_unparse(const char *x264_preset,
@@ -1284,7 +1323,7 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
      *                              int width, int height);
      */
     NSString   *tmpString;
-    const char *x264_preset   = [[self x264Preset] UTF8String];
+    const char *x264_preset   = [[self preset] UTF8String];
     const char *x264_tune     = NULL;
     const char *advanced_opts = NULL;
     const char *h264_profile  = NULL;
@@ -1292,27 +1331,27 @@ NSString *HBVideoEncoderChangedNotification = @"HBVideoEncoderChangedNotificatio
     int         width         = 1;
     int         height        = 1;
     // prepare the tune, advanced options, profile and level
-    if ([(tmpString = [self x264Tune]) length])
+    if ([(tmpString = [self tune]) length])
     {
         x264_tune = [tmpString UTF8String];
     }
-    if ([(tmpString = [self x264OptionExtra]) length])
+    if ([(tmpString = [self optionExtra]) length])
     {
         advanced_opts = [tmpString UTF8String];
     }
-    if ([(tmpString = [self h264Profile]) length])
+    if ([(tmpString = [self profile]) length])
     {
         h264_profile = [tmpString UTF8String];
     }
-    if ([(tmpString = [self h264Level]) length])
+    if ([(tmpString = [self level]) length])
     {
         h264_level = [tmpString UTF8String];
     }
     // width and height must be non-zero
-    if (_fX264PresetsWidthForUnparse && _fX264PresetsHeightForUnparse)
+    if (_fPresetsWidthForUnparse && _fPresetsHeightForUnparse)
     {
-        width  = (int)_fX264PresetsWidthForUnparse;
-        height = (int)_fX264PresetsHeightForUnparse;
+        width  = (int)_fPresetsWidthForUnparse;
+        height = (int)_fPresetsHeightForUnparse;
     }
     // free the previous unparsed string
     free(fX264PresetsUnparsedUTF8String);