[
  {
    "path": ".gitignore",
    "content": "# OS X\n.DS_Store\n\n# Xcode\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata\n*.xccheckout\nprofile\n*.moved-aside\nDerivedData\n*.hmap\n*.ipa\n\n# Bundler\n.bundle\n\nCarthage\n# We recommend against adding the Pods directory to your .gitignore. However\n# you should judge for yourself, the pros and cons are mentioned at:\n# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control\n# \n# Note: if you ignore the Pods directory, make sure to uncomment\n# `pod install` in .travis.yml\n#\n# Pods/\n"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"VideoCore\"]\n\tpath = VideoCore\n\turl = https://github.com/goodow/VideoCore.git\n"
  },
  {
    "path": ".travis.yml",
    "content": "# references:\n# * http://www.objc.io/issue-6/travis-ci.html\n# * https://github.com/supermarin/xcpretty#usage\n\nlanguage: objective-c\n# cache: cocoapods\n# podfile: Example/Podfile\n# before_install:\n# - gem install cocoapods # Since Travis is not always on latest version\n# - pod install --project-directory=Example\nscript:\n- set -o pipefail && xcodebuild test -workspace Example/GDLiveStreaming.xcworkspace -scheme GDLiveStreaming-Example -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO | xcpretty\n- pod lib lint\n"
  },
  {
    "path": "Example/.idea/codeStyleSettings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ProjectCodeStyleSettingsManager\">\n    <option name=\"PER_PROJECT_SETTINGS\">\n      <value>\n        <Objective-C-extensions>\n          <option name=\"GENERATE_INSTANCE_VARIABLES_FOR_PROPERTIES\" value=\"ASK\" />\n          <option name=\"RELEASE_STYLE\" value=\"IVAR\" />\n          <option name=\"TYPE_QUALIFIERS_PLACEMENT\" value=\"BEFORE\" />\n          <file>\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"Import\" />\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"Macro\" />\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"Typedef\" />\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"Enum\" />\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"Constant\" />\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"Global\" />\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"Struct\" />\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"ClassPredef\" />\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"FunctionPredecl\" />\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"Function\" />\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"Class\" />\n          </file>\n          <class>\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"Property\" />\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"Synthesize\" />\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"InitMethod\" />\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"StaticMethod\" />\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"InstanceMethod\" />\n            <option name=\"com.jetbrains.cidr.lang.util.OCDeclarationKind\" value=\"DeallocMethod\" />\n          </class>\n          <extensions>\n            <pair source=\"mm\" header=\"h\" />\n            <pair source=\"cpp\" header=\"h\" />\n            <pair source=\"c\" header=\"h\" />\n          </extensions>\n        </Objective-C-extensions>\n      </value>\n    </option>\n    <option name=\"PREFERRED_PROJECT_CODE_STYLE\" value=\"Default (1)\" />\n  </component>\n</project>"
  },
  {
    "path": "Example/GDLiveStreaming/GDLAppDelegate.h",
    "content": "//\n//  GDLAppDelegate.h\n//  GDLiveStreaming\n//\n//  Created by Larry Tin on 05/06/2016.\n//  Copyright (c) 2016 Larry Tin. All rights reserved.\n//\n\n@import UIKit;\n\n@interface GDLAppDelegate : UIResponder <UIApplicationDelegate>\n\n@property (strong, nonatomic) UIWindow *window;\n\n@end\n"
  },
  {
    "path": "Example/GDLiveStreaming/GDLAppDelegate.m",
    "content": "//\n//  GDLAppDelegate.m\n//  GDLiveStreaming\n//\n//  Created by Larry Tin on 05/06/2016.\n//  Copyright (c) 2016 Larry Tin. All rights reserved.\n//\n\n#import \"GDLAppDelegate.h\"\n\n@implementation GDLAppDelegate\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions\n{\n    // Override point for customization after application launch.\n    return YES;\n}\n\n- (void)applicationWillResignActive:(UIApplication *)application\n{\n    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.\n    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.\n}\n\n- (void)applicationDidEnterBackground:(UIApplication *)application\n{\n    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.\n    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.\n}\n\n- (void)applicationWillEnterForeground:(UIApplication *)application\n{\n    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.\n}\n\n- (void)applicationDidBecomeActive:(UIApplication *)application\n{\n    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.\n}\n\n- (void)applicationWillTerminate:(UIApplication *)application\n{\n    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.\n}\n\n@end\n"
  },
  {
    "path": "Example/GDLiveStreaming/GDLViewController.h",
    "content": "//\n//  GDLViewController.h\n//  GDLiveStreaming\n//\n//  Created by Larry Tin on 05/06/2016.\n//  Copyright (c) 2016 Larry Tin. All rights reserved.\n//\n\n@import UIKit;\n\n@interface GDLViewController : UIViewController\n\n@end\n"
  },
  {
    "path": "Example/GDLiveStreaming/GDLViewController.m",
    "content": "//\n//  GDLViewController.m\n//  GDLiveStreaming\n//\n//  Created by Larry Tin on 05/06/2016.\n//  Copyright (c) 2016 Larry Tin. All rights reserved.\n//\n\n#import <GPUImage/GPUImageView.h>\n#import <GPUImage/GPUImageFilter.h>\n#import <AVFoundation/AVFoundation.h>\n#import <GPUImage/GPUImageVideoCamera.h>\n#import <GPUImage/GPUImageRawDataOutput.h>\n#import \"GDLViewController.h\"\n#import \"GDLRawDataOutput.h\"\n#import \"GPUImageMovieWriter.h\"\n#import \"GPUImageLanczosResamplingFilter.h\"\n#import \"GPUImageBeautifyFilter.h\"\n#import \"GDLFilterUtil.h\"\n#import <AssetsLibrary/ALAssetsLibrary.h>\n\n@interface GDLViewController ()\n\n@end\n\n@implementation GDLViewController {\n  GPUImageVideoCamera *_videoCamera;\n}\n\n- (void)viewDidLoad {\n  [super viewDidLoad];\n  // Do any additional setup after loading the view, typically from a nib.\n\n  _videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset1280x720 cameraPosition:AVCaptureDevicePositionFront];\n  _videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;\n  _videoCamera.frameRate = 20;\n\n  CGSize viewSize = self.view.frame.size;\n  GPUImageView *filteredVideoView = [[GPUImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, viewSize.width, viewSize.height)];\n  [self.view addSubview:filteredVideoView];\n  [_videoCamera addTarget:filteredVideoView];\n\n  CGSize captureSize = CGSizeMake(16 * 45, 1280);\n  CGSize rtmpSize = CGSizeMake(16 * 23, 640);\n  GPUImageFilter *filter = [[GPUImageLanczosResamplingFilter alloc] init];\n  [filter forceProcessingAtSize:rtmpSize];\n  GDLRawDataOutput *rtmpOutput = [[GDLRawDataOutput alloc] initWithVideoCamera:_videoCamera withImageSize:rtmpSize];\n  [_videoCamera addTarget:filter];\n  [filter addTarget:rtmpOutput];\n\n  // 同时备份视频到本地文件\n  NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@\"Documents/Movie.m4v\"];\n  unlink([pathToMovie UTF8String]); // If a file already exists, AVAssetWriter won't let you record new frames, so delete the old movie\n  NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie];\n  GPUImageMovieWriter *movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:captureSize];\n  movieWriter.encodingLiveVideo = YES;\n  [_videoCamera addTarget:movieWriter];\n\n  // 是否开启美颜\n  BOOL useSkinSmoothing = NO;\n  if (useSkinSmoothing) {\n    GPUImageBeautifyFilter *beautifyFilter = [[GPUImageBeautifyFilter alloc] init];\n    [GDLFilterUtil insertFilter:beautifyFilter before:filteredVideoView toChain:_videoCamera];\n  }\n\n  [_videoCamera startCameraCapture];\n\n  dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 3 * NSEC_PER_SEC), dispatch_get_main_queue(), ^(void) {\n      _videoCamera.audioEncodingTarget = movieWriter;\n      [movieWriter startRecording];\n      [rtmpOutput startUploadStreamWithURL:@\"rtmp://a.rtmp.youtube.com/live2\" andStreamKey:@\"323c-p07x-2g2e-c57k\"];\n\n      dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 120.0 * NSEC_PER_SEC), dispatch_get_main_queue(), ^(void) {\n          [_videoCamera removeTarget:movieWriter];\n          _videoCamera.audioEncodingTarget = nil;\n          [movieWriter finishRecording];\n          NSLog(@\"Movie completed\");\n\n          ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];\n          if ([library videoAtPathIsCompatibleWithSavedPhotosAlbum:movieURL]) {\n            [library writeVideoAtPathToSavedPhotosAlbum:movieURL completionBlock:^(NSURL *assetURL, NSError *error) {\n                dispatch_async(dispatch_get_main_queue(), ^{\n                    if (error) {\n                      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@\"Error\" message:@\"Video Saving Failed\"\n                                                                     delegate:nil cancelButtonTitle:@\"OK\" otherButtonTitles:nil];\n                      [alert show];\n                    } else {\n                      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@\"Video Saved\" message:@\"Saved To Photo Album\"\n                                                                     delegate:self cancelButtonTitle:@\"OK\" otherButtonTitles:nil];\n                      [alert show];\n                    }\n                });\n            }];\n          }\n      });\n  });\n}\n\n- (void)didReceiveMemoryWarning {\n  [super didReceiveMemoryWarning];\n  // Dispose of any resources that can be recreated.\n}\n\n@end\n"
  },
  {
    "path": "Example/GDLiveStreaming/GDLiveStreaming-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleDisplayName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>${PRODUCT_NAME}</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1.0</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example/GDLiveStreaming/GDLiveStreaming-Prefix.pch",
    "content": "//\n//  Prefix header\n//\n//  The contents of this file are implicitly included at the beginning of every source file.\n//\n\n#import <Availability.h>\n\n#ifndef __IPHONE_5_0\n#warning \"This project uses features only available in iOS SDK 5.0 and later.\"\n#endif\n\n#ifdef __OBJC__\n//    @import UIKit;\n//    @import Foundation;\n    #import <UIKit/UIKit.h>;\n    #import <Foundation/Foundation.h>;\n#endif\n"
  },
  {
    "path": "Example/GDLiveStreaming/Images.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"60x60\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"76x76\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}\n"
  },
  {
    "path": "Example/GDLiveStreaming/Images.xcassets/LaunchImage.launchimage/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"iphone\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"iphone\",\n      \"subtype\" : \"retina4\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"ipad\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"orientation\" : \"landscape\",\n      \"idiom\" : \"ipad\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"ipad\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"orientation\" : \"landscape\",\n      \"idiom\" : \"ipad\",\n      \"extent\" : \"full-screen\",\n      \"minimum-system-version\" : \"7.0\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}\n"
  },
  {
    "path": "Example/GDLiveStreaming/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"7706\" systemVersion=\"14D136\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" initialViewController=\"whP-gf-Uak\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"7703\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"wQg-tq-qST\">\n            <objects>\n                <viewController id=\"whP-gf-Uak\" customClass=\"GDLViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"uEw-UM-LJ8\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"Mvr-aV-6Um\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"TpU-gO-2f1\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"calibratedWhite\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"tc2-Qw-aMS\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"305\" y=\"433\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "Example/GDLiveStreaming/en.lproj/InfoPlist.strings",
    "content": "/* Localized versions of Info.plist keys */\n\n"
  },
  {
    "path": "Example/GDLiveStreaming/main.m",
    "content": "//\n//  main.m\n//  GDLiveStreaming\n//\n//  Created by Larry Tin on 05/06/2016.\n//  Copyright (c) 2016 Larry Tin. All rights reserved.\n//\n\n@import UIKit;\n#import \"GDLAppDelegate.h\"\n\nint main(int argc, char * argv[])\n{\n    @autoreleasepool {\n        return UIApplicationMain(argc, argv, nil, NSStringFromClass([GDLAppDelegate class]));\n    }\n}\n"
  },
  {
    "path": "Example/GDLiveStreaming.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t27AF606F80AC75AD993D6ED6 /* libPods-GDLiveStreaming_Example.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DACD57B59AAB2025B0F4BD13 /* libPods-GDLiveStreaming_Example.a */; };\n\t\t6003F58E195388D20070C39A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58D195388D20070C39A /* Foundation.framework */; };\n\t\t6003F590195388D20070C39A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58F195388D20070C39A /* CoreGraphics.framework */; };\n\t\t6003F592195388D20070C39A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F591195388D20070C39A /* UIKit.framework */; };\n\t\t6003F598195388D20070C39A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6003F596195388D20070C39A /* InfoPlist.strings */; };\n\t\t6003F59A195388D20070C39A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F599195388D20070C39A /* main.m */; };\n\t\t6003F59E195388D20070C39A /* GDLAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F59D195388D20070C39A /* GDLAppDelegate.m */; };\n\t\t6003F5A7195388D20070C39A /* GDLViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F5A6195388D20070C39A /* GDLViewController.m */; };\n\t\t6003F5A9195388D20070C39A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6003F5A8195388D20070C39A /* Images.xcassets */; };\n\t\t6003F5B0195388D20070C39A /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F5AF195388D20070C39A /* XCTest.framework */; };\n\t\t6003F5B1195388D20070C39A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F58D195388D20070C39A /* Foundation.framework */; };\n\t\t6003F5B2195388D20070C39A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F591195388D20070C39A /* UIKit.framework */; };\n\t\t6003F5BA195388D20070C39A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6003F5B8195388D20070C39A /* InfoPlist.strings */; };\n\t\t6003F5BC195388D20070C39A /* Tests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F5BB195388D20070C39A /* Tests.m */; };\n\t\t873B8AEB1B1F5CCA007FD442 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 873B8AEA1B1F5CCA007FD442 /* Main.storyboard */; };\n\t\tD537675F4891E6DA3588394A /* libPods-GDLiveStreaming_Tests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3EE0BA6DE122642C05D558A7 /* libPods-GDLiveStreaming_Tests.a */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXContainerItemProxy section */\n\t\t6003F5B3195388D20070C39A /* PBXContainerItemProxy */ = {\n\t\t\tisa = PBXContainerItemProxy;\n\t\t\tcontainerPortal = 6003F582195388D10070C39A /* Project object */;\n\t\t\tproxyType = 1;\n\t\t\tremoteGlobalIDString = 6003F589195388D20070C39A;\n\t\t\tremoteInfo = GDLiveStreaming;\n\t\t};\n/* End PBXContainerItemProxy section */\n\n/* Begin PBXFileReference section */\n\t\t06C8AC2040A10125E67F54DC /* Pods-GDLiveStreaming_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-GDLiveStreaming_Tests.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-GDLiveStreaming_Tests/Pods-GDLiveStreaming_Tests.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t1C62093B6E6174A88CB1D146 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = \"<group>\"; };\n\t\t3EE0BA6DE122642C05D558A7 /* libPods-GDLiveStreaming_Tests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-GDLiveStreaming_Tests.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t6003F58A195388D20070C39A /* GDLiveStreaming_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GDLiveStreaming_Example.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t6003F58D195388D20070C39A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };\n\t\t6003F58F195388D20070C39A /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };\n\t\t6003F591195388D20070C39A /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };\n\t\t6003F595195388D20070C39A /* GDLiveStreaming-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = \"GDLiveStreaming-Info.plist\"; sourceTree = \"<group>\"; };\n\t\t6003F597195388D20070C39A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = \"<group>\"; };\n\t\t6003F599195388D20070C39A /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\t6003F59B195388D20070C39A /* GDLiveStreaming-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"GDLiveStreaming-Prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t6003F59C195388D20070C39A /* GDLAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GDLAppDelegate.h; sourceTree = \"<group>\"; };\n\t\t6003F59D195388D20070C39A /* GDLAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GDLAppDelegate.m; sourceTree = \"<group>\"; };\n\t\t6003F5A5195388D20070C39A /* GDLViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GDLViewController.h; sourceTree = \"<group>\"; };\n\t\t6003F5A6195388D20070C39A /* GDLViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GDLViewController.m; sourceTree = \"<group>\"; };\n\t\t6003F5A8195388D20070C39A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = \"<group>\"; };\n\t\t6003F5AE195388D20070C39A /* GDLiveStreaming_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GDLiveStreaming_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t6003F5AF195388D20070C39A /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };\n\t\t6003F5B7195388D20070C39A /* Tests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = \"Tests-Info.plist\"; sourceTree = \"<group>\"; };\n\t\t6003F5B9195388D20070C39A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = \"<group>\"; };\n\t\t6003F5BB195388D20070C39A /* Tests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Tests.m; sourceTree = \"<group>\"; };\n\t\t606FC2411953D9B200FFA9A0 /* Tests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"Tests-Prefix.pch\"; sourceTree = \"<group>\"; };\n\t\t62BBC973148F8EC0BF82D888 /* GDLiveStreaming.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = GDLiveStreaming.podspec; path = ../GDLiveStreaming.podspec; sourceTree = \"<group>\"; };\n\t\t7F227D185912B9C58B4956B6 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = \"<group>\"; };\n\t\t873B8AEA1B1F5CCA007FD442 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = \"<group>\"; };\n\t\t96E0E270AA4F3AAD7EFBBA74 /* Pods-GDLiveStreaming_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-GDLiveStreaming_Tests.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-GDLiveStreaming_Tests/Pods-GDLiveStreaming_Tests.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\t970A800CD78E9FFD137338EB /* Pods-GDLiveStreaming_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-GDLiveStreaming_Example.release.xcconfig\"; path = \"Pods/Target Support Files/Pods-GDLiveStreaming_Example/Pods-GDLiveStreaming_Example.release.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tCFBE094C848EC256D273B967 /* Pods-GDLiveStreaming_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = \"Pods-GDLiveStreaming_Example.debug.xcconfig\"; path = \"Pods/Target Support Files/Pods-GDLiveStreaming_Example/Pods-GDLiveStreaming_Example.debug.xcconfig\"; sourceTree = \"<group>\"; };\n\t\tDACD57B59AAB2025B0F4BD13 /* libPods-GDLiveStreaming_Example.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-GDLiveStreaming_Example.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t6003F587195388D20070C39A /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6003F590195388D20070C39A /* CoreGraphics.framework in Frameworks */,\n\t\t\t\t6003F592195388D20070C39A /* UIKit.framework in Frameworks */,\n\t\t\t\t6003F58E195388D20070C39A /* Foundation.framework in Frameworks */,\n\t\t\t\t27AF606F80AC75AD993D6ED6 /* libPods-GDLiveStreaming_Example.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6003F5AB195388D20070C39A /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6003F5B0195388D20070C39A /* XCTest.framework in Frameworks */,\n\t\t\t\t6003F5B2195388D20070C39A /* UIKit.framework in Frameworks */,\n\t\t\t\t6003F5B1195388D20070C39A /* Foundation.framework in Frameworks */,\n\t\t\t\tD537675F4891E6DA3588394A /* libPods-GDLiveStreaming_Tests.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t6003F581195388D10070C39A = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t60FF7A9C1954A5C5007DD14C /* Podspec Metadata */,\n\t\t\t\t6003F593195388D20070C39A /* Example for GDLiveStreaming */,\n\t\t\t\t6003F5B5195388D20070C39A /* Tests */,\n\t\t\t\t6003F58C195388D20070C39A /* Frameworks */,\n\t\t\t\t6003F58B195388D20070C39A /* Products */,\n\t\t\t\t6E86C501B8E4788BFA46478E /* Pods */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6003F58B195388D20070C39A /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6003F58A195388D20070C39A /* GDLiveStreaming_Example.app */,\n\t\t\t\t6003F5AE195388D20070C39A /* GDLiveStreaming_Tests.xctest */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6003F58C195388D20070C39A /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6003F58D195388D20070C39A /* Foundation.framework */,\n\t\t\t\t6003F58F195388D20070C39A /* CoreGraphics.framework */,\n\t\t\t\t6003F591195388D20070C39A /* UIKit.framework */,\n\t\t\t\t6003F5AF195388D20070C39A /* XCTest.framework */,\n\t\t\t\tDACD57B59AAB2025B0F4BD13 /* libPods-GDLiveStreaming_Example.a */,\n\t\t\t\t3EE0BA6DE122642C05D558A7 /* libPods-GDLiveStreaming_Tests.a */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6003F593195388D20070C39A /* Example for GDLiveStreaming */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6003F59C195388D20070C39A /* GDLAppDelegate.h */,\n\t\t\t\t6003F59D195388D20070C39A /* GDLAppDelegate.m */,\n\t\t\t\t873B8AEA1B1F5CCA007FD442 /* Main.storyboard */,\n\t\t\t\t6003F5A5195388D20070C39A /* GDLViewController.h */,\n\t\t\t\t6003F5A6195388D20070C39A /* GDLViewController.m */,\n\t\t\t\t6003F5A8195388D20070C39A /* Images.xcassets */,\n\t\t\t\t6003F594195388D20070C39A /* Supporting Files */,\n\t\t\t);\n\t\t\tname = \"Example for GDLiveStreaming\";\n\t\t\tpath = GDLiveStreaming;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6003F594195388D20070C39A /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6003F595195388D20070C39A /* GDLiveStreaming-Info.plist */,\n\t\t\t\t6003F596195388D20070C39A /* InfoPlist.strings */,\n\t\t\t\t6003F599195388D20070C39A /* main.m */,\n\t\t\t\t6003F59B195388D20070C39A /* GDLiveStreaming-Prefix.pch */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6003F5B5195388D20070C39A /* Tests */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6003F5BB195388D20070C39A /* Tests.m */,\n\t\t\t\t6003F5B6195388D20070C39A /* Supporting Files */,\n\t\t\t);\n\t\t\tpath = Tests;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6003F5B6195388D20070C39A /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t6003F5B7195388D20070C39A /* Tests-Info.plist */,\n\t\t\t\t6003F5B8195388D20070C39A /* InfoPlist.strings */,\n\t\t\t\t606FC2411953D9B200FFA9A0 /* Tests-Prefix.pch */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t60FF7A9C1954A5C5007DD14C /* Podspec Metadata */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t62BBC973148F8EC0BF82D888 /* GDLiveStreaming.podspec */,\n\t\t\t\t1C62093B6E6174A88CB1D146 /* README.md */,\n\t\t\t\t7F227D185912B9C58B4956B6 /* LICENSE */,\n\t\t\t);\n\t\t\tname = \"Podspec Metadata\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6E86C501B8E4788BFA46478E /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tCFBE094C848EC256D273B967 /* Pods-GDLiveStreaming_Example.debug.xcconfig */,\n\t\t\t\t970A800CD78E9FFD137338EB /* Pods-GDLiveStreaming_Example.release.xcconfig */,\n\t\t\t\t06C8AC2040A10125E67F54DC /* Pods-GDLiveStreaming_Tests.debug.xcconfig */,\n\t\t\t\t96E0E270AA4F3AAD7EFBBA74 /* Pods-GDLiveStreaming_Tests.release.xcconfig */,\n\t\t\t);\n\t\t\tname = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t6003F589195388D20070C39A /* GDLiveStreaming_Example */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 6003F5BF195388D20070C39A /* Build configuration list for PBXNativeTarget \"GDLiveStreaming_Example\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tEDB20C74295148FA8C6BD2BC /* 📦 Check Pods Manifest.lock */,\n\t\t\t\t6003F586195388D20070C39A /* Sources */,\n\t\t\t\t6003F587195388D20070C39A /* Frameworks */,\n\t\t\t\t6003F588195388D20070C39A /* Resources */,\n\t\t\t\t2410864071AE57993B5F2478 /* 📦 Embed Pods Frameworks */,\n\t\t\t\t01C9A5ACD6C55CD1D32DABA4 /* 📦 Copy Pods Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = GDLiveStreaming_Example;\n\t\t\tproductName = GDLiveStreaming;\n\t\t\tproductReference = 6003F58A195388D20070C39A /* GDLiveStreaming_Example.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n\t\t6003F5AD195388D20070C39A /* GDLiveStreaming_Tests */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 6003F5C2195388D20070C39A /* Build configuration list for PBXNativeTarget \"GDLiveStreaming_Tests\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tC7E8CD76D05F93DBECEA4C23 /* 📦 Check Pods Manifest.lock */,\n\t\t\t\t1E3DEAF3D2071B9E1F739A2A /* uD83DuDCE6 Check Pods Manifest.lock */,\n\t\t\t\t8E49C6756BD41FD5D1B2D00C /* uD83DuDCE6 Check Pods Manifest.lock */,\n\t\t\t\t6003F5AA195388D20070C39A /* Sources */,\n\t\t\t\t6003F5AB195388D20070C39A /* Frameworks */,\n\t\t\t\t6003F5AC195388D20070C39A /* Resources */,\n\t\t\t\tA3CDBAF508CEE967508F50C5 /* uD83DuDCE6 Embed Pods Frameworks */,\n\t\t\t\t34EC280F61CC790E1B7BF31F /* uD83DuDCE6 Copy Pods Resources */,\n\t\t\t\tAD56384822C9D396E0A47B41 /* uD83DuDCE6 Embed Pods Frameworks */,\n\t\t\t\t27DE2D392A020BAB21848541 /* uD83DuDCE6 Copy Pods Resources */,\n\t\t\t\t571FC359F146F0ECCC63F584 /* 📦 Embed Pods Frameworks */,\n\t\t\t\t49955AE2E21D59362435D6C9 /* 📦 Copy Pods Resources */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t\t6003F5B4195388D20070C39A /* PBXTargetDependency */,\n\t\t\t);\n\t\t\tname = GDLiveStreaming_Tests;\n\t\t\tproductName = GDLiveStreamingTests;\n\t\t\tproductReference = 6003F5AE195388D20070C39A /* GDLiveStreaming_Tests.xctest */;\n\t\t\tproductType = \"com.apple.product-type.bundle.unit-test\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t6003F582195388D10070C39A /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tCLASSPREFIX = GDL;\n\t\t\t\tLastUpgradeCheck = 0720;\n\t\t\t\tORGANIZATIONNAME = \"Larry Tin\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t6003F5AD195388D20070C39A = {\n\t\t\t\t\t\tTestTargetID = 6003F589195388D20070C39A;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 6003F585195388D10070C39A /* Build configuration list for PBXProject \"GDLiveStreaming\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 6003F581195388D10070C39A;\n\t\t\tproductRefGroup = 6003F58B195388D20070C39A /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t6003F589195388D20070C39A /* GDLiveStreaming_Example */,\n\t\t\t\t6003F5AD195388D20070C39A /* GDLiveStreaming_Tests */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t6003F588195388D20070C39A /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t873B8AEB1B1F5CCA007FD442 /* Main.storyboard in Resources */,\n\t\t\t\t6003F5A9195388D20070C39A /* Images.xcassets in Resources */,\n\t\t\t\t6003F598195388D20070C39A /* InfoPlist.strings in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6003F5AC195388D20070C39A /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6003F5BA195388D20070C39A /* InfoPlist.strings in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t01C9A5ACD6C55CD1D32DABA4 /* 📦 Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"📦 Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-GDLiveStreaming_Example/Pods-GDLiveStreaming_Example-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t1E3DEAF3D2071B9E1F739A2A /* uD83DuDCE6 Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"uD83DuDCE6 Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_ROOT}/../Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [[ $? != 0 ]] ; then\\n    cat << EOM\\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\nEOM\\n    exit 1\\nfi\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t2410864071AE57993B5F2478 /* 📦 Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"📦 Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-GDLiveStreaming_Example/Pods-GDLiveStreaming_Example-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t27DE2D392A020BAB21848541 /* uD83DuDCE6 Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"uD83DuDCE6 Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-GDLiveStreaming_Tests/Pods-GDLiveStreaming_Tests-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t34EC280F61CC790E1B7BF31F /* uD83DuDCE6 Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"uD83DuDCE6 Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-GDLiveStreaming_Tests/Pods-GDLiveStreaming_Tests-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t49955AE2E21D59362435D6C9 /* 📦 Copy Pods Resources */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"📦 Copy Pods Resources\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-GDLiveStreaming_Tests/Pods-GDLiveStreaming_Tests-resources.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t571FC359F146F0ECCC63F584 /* 📦 Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"📦 Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-GDLiveStreaming_Tests/Pods-GDLiveStreaming_Tests-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\t8E49C6756BD41FD5D1B2D00C /* uD83DuDCE6 Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"uD83DuDCE6 Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_ROOT}/../Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [[ $? != 0 ]] ; then\\n    cat << EOM\\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\nEOM\\n    exit 1\\nfi\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tA3CDBAF508CEE967508F50C5 /* uD83DuDCE6 Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"uD83DuDCE6 Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-GDLiveStreaming_Tests/Pods-GDLiveStreaming_Tests-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tAD56384822C9D396E0A47B41 /* uD83DuDCE6 Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"uD83DuDCE6 Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-GDLiveStreaming_Tests/Pods-GDLiveStreaming_Tests-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tC7E8CD76D05F93DBECEA4C23 /* 📦 Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"📦 Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_ROOT}/../Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [[ $? != 0 ]] ; then\\n    cat << EOM\\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\nEOM\\n    exit 1\\nfi\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tEDB20C74295148FA8C6BD2BC /* 📦 Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"📦 Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_ROOT}/../Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [[ $? != 0 ]] ; then\\n    cat << EOM\\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\nEOM\\n    exit 1\\nfi\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t6003F586195388D20070C39A /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6003F59E195388D20070C39A /* GDLAppDelegate.m in Sources */,\n\t\t\t\t6003F5A7195388D20070C39A /* GDLViewController.m in Sources */,\n\t\t\t\t6003F59A195388D20070C39A /* main.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n\t\t6003F5AA195388D20070C39A /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t6003F5BC195388D20070C39A /* Tests.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXTargetDependency section */\n\t\t6003F5B4195388D20070C39A /* PBXTargetDependency */ = {\n\t\t\tisa = PBXTargetDependency;\n\t\t\ttarget = 6003F589195388D20070C39A /* GDLiveStreaming_Example */;\n\t\t\ttargetProxy = 6003F5B3195388D20070C39A /* PBXContainerItemProxy */;\n\t\t};\n/* End PBXTargetDependency section */\n\n/* Begin PBXVariantGroup section */\n\t\t6003F596195388D20070C39A /* InfoPlist.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t6003F597195388D20070C39A /* en */,\n\t\t\t);\n\t\t\tname = InfoPlist.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t6003F5B8195388D20070C39A /* InfoPlist.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t6003F5B9195388D20070C39A /* en */,\n\t\t\t);\n\t\t\tname = InfoPlist.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t6003F5BD195388D20070C39A /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_SYMBOLS_PRIVATE_EXTERN = NO;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.3;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t6003F5BE195388D20070C39A /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = YES;\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.3;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t6003F5C0195388D20070C39A /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = CFBE094C848EC256D273B967 /* Pods-GDLiveStreaming_Example.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"GDLiveStreaming/GDLiveStreaming-Prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"GDLiveStreaming/GDLiveStreaming-Info.plist\";\n\t\t\t\tMODULE_NAME = ExampleApp;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t6003F5C1195388D20070C39A /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 970A800CD78E9FFD137338EB /* Pods-GDLiveStreaming_Example.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"GDLiveStreaming/GDLiveStreaming-Prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"GDLiveStreaming/GDLiveStreaming-Info.plist\";\n\t\t\t\tMODULE_NAME = ExampleApp;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tWRAPPER_EXTENSION = app;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t6003F5C3195388D20070C39A /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 06C8AC2040A10125E67F54DC /* Pods-GDLiveStreaming_Tests.debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(SDKROOT)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t);\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"Tests/Tests-Prefix.pch\";\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = \"Tests/Tests-Info.plist\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/GDLiveStreaming_Example.app/GDLiveStreaming_Example\";\n\t\t\t\tWRAPPER_EXTENSION = xctest;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t6003F5C4195388D20070C39A /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 96E0E270AA4F3AAD7EFBBA74 /* Pods-GDLiveStreaming_Tests.release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tBUNDLE_LOADER = \"$(TEST_HOST)\";\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(SDKROOT)/Developer/Library/Frameworks\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(DEVELOPER_FRAMEWORKS_DIR)\",\n\t\t\t\t);\n\t\t\t\tGCC_PRECOMPILE_PREFIX_HEADER = YES;\n\t\t\t\tGCC_PREFIX_HEADER = \"Tests/Tests-Prefix.pch\";\n\t\t\t\tINFOPLIST_FILE = \"Tests/Tests-Info.plist\";\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = \"org.cocoapods.demo.${PRODUCT_NAME:rfc1034identifier}\";\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tTEST_HOST = \"$(BUILT_PRODUCTS_DIR)/GDLiveStreaming_Example.app/GDLiveStreaming_Example\";\n\t\t\t\tWRAPPER_EXTENSION = xctest;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t6003F585195388D10070C39A /* Build configuration list for PBXProject \"GDLiveStreaming\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t6003F5BD195388D20070C39A /* Debug */,\n\t\t\t\t6003F5BE195388D20070C39A /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t6003F5BF195388D20070C39A /* Build configuration list for PBXNativeTarget \"GDLiveStreaming_Example\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t6003F5C0195388D20070C39A /* Debug */,\n\t\t\t\t6003F5C1195388D20070C39A /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t6003F5C2195388D20070C39A /* Build configuration list for PBXNativeTarget \"GDLiveStreaming_Tests\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t6003F5C3195388D20070C39A /* Debug */,\n\t\t\t\t6003F5C4195388D20070C39A /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 6003F582195388D10070C39A /* Project object */;\n}\n"
  },
  {
    "path": "Example/GDLiveStreaming.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:GDLiveStreaming.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Example/GDLiveStreaming.xcodeproj/xcshareddata/xcschemes/GDLiveStreaming-Example.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0720\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"6003F589195388D20070C39A\"\n               BuildableName = \"GDLiveStreaming_Example.app\"\n               BlueprintName = \"GDLiveStreaming_Example\"\n               ReferencedContainer = \"container:GDLiveStreaming.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n         <TestableReference\n            skipped = \"NO\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"6003F5AD195388D20070C39A\"\n               BuildableName = \"GDLiveStreaming_Tests.xctest\"\n               BlueprintName = \"GDLiveStreaming_Tests\"\n               ReferencedContainer = \"container:GDLiveStreaming.xcodeproj\">\n            </BuildableReference>\n         </TestableReference>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"6003F589195388D20070C39A\"\n            BuildableName = \"GDLiveStreaming_Example.app\"\n            BlueprintName = \"GDLiveStreaming_Example\"\n            ReferencedContainer = \"container:GDLiveStreaming.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"6003F589195388D20070C39A\"\n            BuildableName = \"GDLiveStreaming_Example.app\"\n            BlueprintName = \"GDLiveStreaming_Example\"\n            ReferencedContainer = \"container:GDLiveStreaming.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"6003F589195388D20070C39A\"\n            BuildableName = \"GDLiveStreaming_Example.app\"\n            BlueprintName = \"GDLiveStreaming_Example\"\n            ReferencedContainer = \"container:GDLiveStreaming.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "Example/GDLiveStreaming.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:GDLiveStreaming.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Pods/Pods.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "Example/GDLiveStreaming.xcworkspace/xcshareddata/GDLiveStreaming.xcscmblueprint",
    "content": "{\n  \"DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey\" : \"3CE58021EDA72649347557AFC5E38FE66917F8AD\",\n  \"DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey\" : {\n\n  },\n  \"DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey\" : {\n    \"A107FF7BCB99FF99C2B67132DFBE913E3CBFAFE8\" : 0,\n    \"3CE58021EDA72649347557AFC5E38FE66917F8AD\" : 0,\n    \"8A4C2317AABFC6C7581C76128382C1AB7028A50A\" : 0\n  },\n  \"DVTSourceControlWorkspaceBlueprintIdentifierKey\" : \"E824E097-66C8-4F36-8D71-ABE15BBCAE27\",\n  \"DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey\" : {\n    \"A107FF7BCB99FF99C2B67132DFBE913E3CBFAFE8\" : \"\",\n    \"3CE58021EDA72649347557AFC5E38FE66917F8AD\" : \"GDLiveStreaming\\/\",\n    \"8A4C2317AABFC6C7581C76128382C1AB7028A50A\" : \"GDLiveStreaming\\/VideoCore\\/\"\n  },\n  \"DVTSourceControlWorkspaceBlueprintNameKey\" : \"GDLiveStreaming\",\n  \"DVTSourceControlWorkspaceBlueprintVersion\" : 204,\n  \"DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey\" : \"Example\\/GDLiveStreaming.xcworkspace\",\n  \"DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey\" : [\n    {\n      \"DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey\" : \"https:\\/\\/github.com\\/goodow\\/GDLiveStreaming.git\",\n      \"DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey\" : \"com.apple.dt.Xcode.sourcecontrol.Git\",\n      \"DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey\" : \"3CE58021EDA72649347557AFC5E38FE66917F8AD\"\n    },\n    {\n      \"DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey\" : \"https:\\/\\/github.com\\/goodow\\/VideoCore.git\",\n      \"DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey\" : \"com.apple.dt.Xcode.sourcecontrol.Git\",\n      \"DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey\" : \"8A4C2317AABFC6C7581C76128382C1AB7028A50A\"\n    },\n    {\n      \"DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey\" : \"http:\\/\\/gerrit.oa.com\\/video\\/QQLiveBroadcast\",\n      \"DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey\" : \"com.apple.dt.Xcode.sourcecontrol.Git\",\n      \"DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey\" : \"A107FF7BCB99FF99C2B67132DFBE913E3CBFAFE8\"\n    }\n  ]\n}"
  },
  {
    "path": "Example/Podfile",
    "content": "#use_frameworks!\n\n# pod 'VideoCore', :git => 'https://github.com/goodow/VideoCore.git'\npod 'glm', :podspec => 'https://raw.githubusercontent.com/goodow/GDLiveStreaming/master/glm.podspec'\npod 'VideoCore', path: '../VideoCore'\n\ntarget 'GDLiveStreaming_Example' do\n  pod 'GDLiveStreaming', :path => '../'\nend\n\ntarget 'GDLiveStreaming_Tests' do\n  pod 'GDLiveStreaming', :path => '../'\nend\n"
  },
  {
    "path": "Example/Tests/Tests-Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>${EXECUTABLE_NAME}</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundlePackageType</key>\n\t<string>BNDL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "Example/Tests/Tests-Prefix.pch",
    "content": "//  The contents of this file are implicitly included at the beginning of every test case source file.\n\n#ifdef __OBJC__\n\n  \n\n#endif\n"
  },
  {
    "path": "Example/Tests/Tests.m",
    "content": "//\n//  GDLiveStreamingTests.m\n//  GDLiveStreamingTests\n//\n//  Created by Larry Tin on 05/06/2016.\n//  Copyright (c) 2016 Larry Tin. All rights reserved.\n//\n\n@import XCTest;\n\n@interface Tests : XCTestCase\n\n@end\n\n@implementation Tests\n\n- (void)setUp\n{\n    [super setUp];\n    // Put setup code here. This method is called before the invocation of each test method in the class.\n}\n\n- (void)tearDown\n{\n    // Put teardown code here. This method is called after the invocation of each test method in the class.\n    [super tearDown];\n}\n\n- (void)testExample\n{\n    XCTFail(@\"No implementation for \\\"%s\\\"\", __PRETTY_FUNCTION__);\n}\n\n@end\n\n"
  },
  {
    "path": "Example/Tests/en.lproj/InfoPlist.strings",
    "content": "/* Localized versions of Info.plist keys */\n\n"
  },
  {
    "path": "GDLiveStreaming/Assets/.gitkeep",
    "content": ""
  },
  {
    "path": "GDLiveStreaming/Classes/GDLAlignVideoAudioTimestamp.h",
    "content": "//\n//  Created by Larry Tin on 16/3/30.\n//\n\n#import \"GPUImageVideoCamera.h\"\n\n@interface GDLAlignVideoAudioTimestamp : NSObject\n\n- (instancetype)initWithVideoCamera:(GPUImageVideoCamera *)camera;\n\n- (CMTime)calculateVideoTimestamp:(CMTime)frameTime;\n\n- (BOOL)checkAudioTimestamp:(CMSampleBufferRef)audioBuffer;\n\n- (void)pauseRecording;\n\n- (void)resumeRecording;\n\n@end"
  },
  {
    "path": "GDLiveStreaming/Classes/GDLAlignVideoAudioTimestamp.m",
    "content": "//\n//  Created by Larry Tin on 16/3/30.\n//\n\n#import <CoreTelephony/CTCallCenter.h>\n#import <CoreTelephony/CTCall.h>\n#import \"GDLAlignVideoAudioTimestamp.h\"\n\nstatic const float maxFrameTimeOffset = 4.f * 1 / 43;\n\n@implementation GDLAlignVideoAudioTimestamp {\n  __weak GPUImageVideoCamera *_videoCamera;\n  AVCaptureSession *_captureSession;\n\n  CMTime _timeOffset;\n  CMTime _lastAudioTime;\n  BOOL _discont;\n  BOOL _isPaused;\n  CMTime _lastVideoTime;\n\n  CTCallCenter *_callCenter;\n}\n\n- (instancetype)initWithVideoCamera:(GPUImageVideoCamera *)camera {\n  self = [super init];\n  if (self) {\n    _videoCamera = camera;\n    _captureSession = _videoCamera.captureSession;\n\n    _timeOffset = CMTimeMake(0, 0);\n    _callCenter = [[CTCallCenter alloc] init];\n    __weak GDLAlignVideoAudioTimestamp *weakSelf = self;\n    _callCenter.callEventHandler = ^(CTCall *call) {\n        if ([call.callState isEqualToString:CTCallStateIncoming]) {\n          NSLog(@\"CTCallCenter: call Incoming\");\n          [camera pauseCameraCapture];\n          [weakSelf pauseRecording];\n        } else if ([call.callState isEqualToString:CTCallStateDisconnected]) {\n          NSLog(@\"CTCallCenter: call Disconnected\");\n          [camera resumeCameraCapture];\n          [weakSelf resumeRecording];\n        }\n    };\n  }\n\n  return self;\n}\n\n- (void)dealloc {\n  _callCenter.callEventHandler = nil;\n  _callCenter = nil;\n}\n\n- (CMTime)calculateVideoTimestamp:(CMTime)frameTime {\n//  NSLog(@\"videoFrame: %f\", ((double) frameTime.value) / frameTime.timescale);\n  if (_discont) {\n    return kCMTimeInvalid;\n  }\n  CMTime offset = CMTimeSubtract(frameTime, _lastAudioTime);\n  double offsetDuration = ((double) offset.value) / offset.timescale;\n  if (offsetDuration > maxFrameTimeOffset) {\n    CMTime videoOffset = CMTimeSubtract(frameTime, _lastVideoTime);\n    NSLog(@\"%s: drop video frame, audioOffset = %f, videoOffset = %f\", __PRETTY_FUNCTION__, offsetDuration, ((double) videoOffset.value) / videoOffset.timescale);\n//    frameTime = CMTimeAdd(_lastVideoTime, CMTimeMakeWithSeconds((double) 1.0 / QQLSettingsEntry.instance.broadcast.frameRate / 5, NSEC_PER_SEC));\n    return kCMTimeInvalid;\n  } else if (_timeOffset.value > 0) {\n    frameTime = CMTimeSubtract(frameTime, _timeOffset);\n  }\n  if (_lastVideoTime.value != 0 && CMTIME_COMPARE_INLINE(frameTime, <=, _lastVideoTime)) {\n    NSLog(@\"%s: drop video frame, frameTime(%f) <= lastVideoTime(%f)\", __PRETTY_FUNCTION__, ((double) frameTime.value) / frameTime.timescale, ((double) _lastVideoTime.value) / _lastVideoTime.timescale);\n    return kCMTimeInvalid;\n  }\n\n  _lastVideoTime = frameTime;\n  return frameTime;\n}\n\n- (BOOL)checkAudioTimestamp:(CMSampleBufferRef)audioBuffer {\n  CMTime pts = CMSampleBufferGetPresentationTimeStamp(audioBuffer);\n//  NSLog(@\"audioFrame: %f\", ((double) pts.value) / pts.timescale);\n\n  static CMTime last;\n  BOOL invalid = last.value != 0 && CMTIME_COMPARE_INLINE(pts, <=, last);\n  if (invalid) {\n    NSLog(@\"%s: frameTime(%f) <= lastAudioTime(%f)\", __PRETTY_FUNCTION__, ((double) pts.value) / pts.timescale, ((double) last.value) / last.timescale);\n  } else {\n    last = pts;\n  }\n  if (_isPaused || invalid) {\n    return NO;\n  }\n\n  CMTime offset = CMTimeSubtract(pts, _lastAudioTime);\n  double offsetDuration = ((double) offset.value) / offset.timescale;\n  if (!_discont && (offsetDuration > maxFrameTimeOffset)) {\n    _discont = YES;\n  }\n  if (_discont) {\n    _discont = NO;\n    // calc adjustment\n    if (_lastAudioTime.flags & kCMTimeFlags_Valid) {\n      NSLog(@\"%s: Adding %f to %f (pts %f)\", __PRETTY_FUNCTION__, offsetDuration, ((double) _timeOffset.value) / _timeOffset.timescale, ((double) pts.value / pts.timescale));\n\n      // this stops us having to set a scale for _timeOffset before we see the first video time\n      if (_timeOffset.value == 0) {\n        _timeOffset = offset;\n      } else {\n        _timeOffset = CMTimeAdd(_timeOffset, offset);\n      }\n    }\n    _lastAudioTime.flags = 0;\n  }\n\n  // record most recent time so we know the length of the pause\n  _lastAudioTime = pts;\n  CMTime dur = CMSampleBufferGetDuration(audioBuffer);\n  if (dur.value > 0) {\n    _lastAudioTime = CMTimeAdd(_lastAudioTime, dur);\n  }\n//  if (_timeOffset.value > 0) {\n//    audioBuffer = [self.class adjustTime:audioBuffer by:_timeOffset];\n//  }\n\n  return YES;\n}\n\n- (void)pauseRecording {\n  if (!_isPaused) {\n    NSLog(@\"%s\", __PRETTY_FUNCTION__);\n  }\n  _isPaused = YES;\n  _discont = YES;\n}\n\n- (void)resumeRecording {\n  if (!_captureSession.isInterrupted) {\n    NSLog(@\"%s\", __PRETTY_FUNCTION__);\n  }\n  _isPaused = NO;\n}\n\n+ (CMSampleBufferRef)adjustTime:(CMSampleBufferRef)sample by:(CMTime)offset {\n  CMItemCount count;\n  CMSampleBufferGetSampleTimingInfoArray(sample, 0, nil, &count);\n  CMSampleTimingInfo *pInfo = malloc(sizeof(CMSampleTimingInfo) * count);\n  CMSampleBufferGetSampleTimingInfoArray(sample, count, pInfo, &count);\n  for (CMItemCount i = 0; i < count; i++) {\n    pInfo[i].decodeTimeStamp = CMTimeSubtract(pInfo[i].decodeTimeStamp, offset);\n    pInfo[i].presentationTimeStamp = CMTimeSubtract(pInfo[i].presentationTimeStamp, offset);\n  }\n  CMSampleBufferRef sout;\n  CMSampleBufferCreateCopyWithNewTiming(nil, sample, count, pInfo, &sout);\n  free(pInfo);\n  return sout;\n}\n@end\n"
  },
  {
    "path": "GDLiveStreaming/Classes/GDLCameraUtil.h",
    "content": "//\n//  Created by Larry Tin on 16/5/12.\n//\n\n#import <Foundation/Foundation.h>\n#import <AVFoundation/AVFoundation.h>\n#import \"GPUImageView.h\"\n#import \"GPUImageVideoCamera.h\"\n\n@interface GDLCameraUtil : NSObject\n\n// Focusing and Exposure on tap\n+ (void)captureDevice:(AVCaptureDevice *)device focusWithMode:(AVCaptureFocusMode)focusMode exposeWithMode:(AVCaptureExposureMode)exposureMode atDevicePoint:(CGPoint)point monitorSubjectAreaChange:(BOOL)monitorSubjectAreaChange;\n\n// Convert tap's coordinates in preview view to the coordinate space of the capture device\n+ (CGPoint)captureDevicePointOfInterestForPoint:(CGPoint)point inPreview:(GPUImageView *)previewView withVideoCamera:(GPUImageVideoCamera *)videoCamera;\n@end\n"
  },
  {
    "path": "GDLiveStreaming/Classes/GDLCameraUtil.m",
    "content": "//\n//  Created by Larry Tin on 16/5/12.\n//\n\n#import \"GDLCameraUtil.h\"\n#import \"GDLResolutionUtil.h\"\n\n@implementation GDLCameraUtil\n\n+ (void)captureDevice:(AVCaptureDevice *)device focusWithMode:(AVCaptureFocusMode)focusMode exposeWithMode:(AVCaptureExposureMode)exposureMode atDevicePoint:(CGPoint)point monitorSubjectAreaChange:(BOOL)monitorSubjectAreaChange {\n  focusMode = focusMode == -1 ? device.focusMode : focusMode;\n  exposureMode = exposureMode == -1 ? device.exposureMode : exposureMode;\n  NSError *error = nil;\n  if ([device lockForConfiguration:&error]) {\n    // Setting (focus/exposure)PointOfInterest alone does not initiate a (focus/exposure) operation.\n    // Call -set(Focus/Exposure)Mode: to apply the new point of interest.\n    if (device.isFocusPointOfInterestSupported && [device isFocusModeSupported:focusMode]) {\n      device.focusPointOfInterest = point;\n      device.focusMode = focusMode;\n    }\n\n    if (device.isExposurePointOfInterestSupported && [device isExposureModeSupported:exposureMode]) {\n      device.exposurePointOfInterest = point;\n      device.exposureMode = exposureMode;\n    }\n\n    device.subjectAreaChangeMonitoringEnabled = monitorSubjectAreaChange;\n    [device unlockForConfiguration];\n  } else {\n    NSLog(@\"Could not lock device for configuration: %@\", error);\n  }\n}\n\n+ (CGPoint)captureDevicePointOfInterestForPoint:(CGPoint)point inPreview:(GPUImageView *)previewView withVideoCamera:(GPUImageVideoCamera *)videoCamera {\n  CGSize size = previewView.frame.size;\n  if (videoCamera.cameraPosition == AVCaptureDevicePositionFront) {\n    point.x = size.width - point.x;\n  }\n\n  NSString *sessionPreset = videoCamera.captureSessionPreset;\n  float videoWidthPixels = [GDLResolutionUtil videoWidth:sessionPreset];\n  float videoHeightPixels = [GDLResolutionUtil videoHeight:sessionPreset];\n  if (videoWidthPixels == 0 || videoHeightPixels == 0) {\n    return CGPointMake(0.5, 0.5);\n  }\n\n  // 转换为基于Home键在右侧, 以左上角为原点的坐标\n  float xInView;\n  float yInView;\n  float viewHeight;\n  float viewWidth;\n  switch (videoCamera.outputImageOrientation) {\n    case UIInterfaceOrientationPortrait:\n      viewHeight = size.width;\n      viewWidth = size.height;\n      xInView = point.y;\n      yInView = viewHeight - point.x;\n      break;\n    case UIInterfaceOrientationLandscapeRight:\n      viewHeight = size.height;\n      viewWidth = size.width;\n      xInView = point.x;\n      yInView = point.y;\n      break;\n    case UIInterfaceOrientationLandscapeLeft:\n      viewHeight = size.height;\n      viewWidth = size.width;\n      xInView = viewWidth - point.x;\n      yInView = viewHeight - point.y;\n      break;\n  }\n  CGFloat videoRatio = videoWidthPixels / videoHeightPixels;\n  CGFloat viewRatio = viewWidth / viewHeight;\n  float videoHeight;\n  float videoWidth;\n  float xInVideo;\n  float yInVideo;\n  switch (previewView.fillMode) {\n    case kGPUImageFillModePreserveAspectRatioAndFill:\n      if (videoRatio >= viewRatio) {\n        videoHeight = viewHeight;\n        videoWidth = videoHeight * videoRatio;\n        yInVideo = yInView;\n        xInVideo = xInView + (videoWidth - viewWidth) / 2;\n      } else {\n        videoWidth = viewWidth;\n        videoHeight = videoWidth / videoRatio;\n        xInVideo = xInView;\n        yInVideo = yInView + (videoHeight - viewHeight) / 2;\n      }\n      break;\n    case kGPUImageFillModePreserveAspectRatio:\n      if (videoRatio >= viewRatio) {\n        videoWidth = viewWidth;\n        videoHeight = videoWidth / videoRatio;\n        xInVideo = xInView;\n        float blackBar = (viewHeight - videoHeight) / 2;\n        if (yInView >= blackBar && yInView <= viewHeight - blackBar) {\n          yInVideo = yInView - blackBar;\n        }\n      } else {\n        videoHeight = viewHeight;\n        videoWidth = videoHeight * videoRatio;\n        yInVideo = yInView;\n        float blackBar = (viewWidth - videoWidth) / 2;\n        if (xInView >= blackBar && xInView <= viewWidth - blackBar) {\n          xInVideo = xInView - blackBar;\n        }\n      }\n      break;\n    case kGPUImageFillModeStretch:\n      videoWidth = viewWidth;\n      videoHeight = viewHeight;\n      xInVideo = xInView;\n      yInVideo = yInView;\n      break;\n  }\n\n  return CGPointMake(xInVideo / videoWidth, yInVideo / videoHeight);\n}\n\n@end\n"
  },
  {
    "path": "GDLiveStreaming/Classes/GDLFilterUtil.h",
    "content": "//\n// Created by Larry Tin on 16/5/9.\n//\n\n#import <Foundation/Foundation.h>\n#import \"GPUImageFilter.h\"\n\n@interface GDLFilterUtil : NSObject\n\n+ (void)removeFilter:(GPUImageOutput <GPUImageInput> *)filter fromChain:(GPUImageFilter *)chain;\n\n+ (void)insertFilter:(GPUImageOutput <GPUImageInput> *)filter before:(id <GPUImageInput>)before toChain:(GPUImageFilter *)chain;\n\n@end"
  },
  {
    "path": "GDLiveStreaming/Classes/GDLFilterUtil.m",
    "content": "//\n// Created by Larry Tin on 16/5/9.\n//\n\n#import \"GDLFilterUtil.h\"\n\n@implementation GDLFilterUtil {\n\n}\n\n+ (void)insertFilter:(GPUImageOutput <GPUImageInput> *)filter before:(id <GPUImageInput>)before toChain:(GPUImageOutput *)chain {\n  GPUImageOutput *lastOutput = [self findOutputBefore:before from:chain];\n  NSArray *inputs = lastOutput.targets;\n  [lastOutput removeAllTargets];\n  for (id <GPUImageInput> input in inputs) {\n    [filter addTarget:input];\n  }\n  [lastOutput addTarget:filter];\n}\n\n+ (void)removeFilter:(GPUImageOutput <GPUImageInput> *)filter fromChain:(GPUImageOutput *)chain {\n  GPUImageOutput *previousFilter = [self findOutputBefore:filter from:chain];\n  [previousFilter removeTarget:filter];\n  NSArray *targets = filter.targets;\n  for (id <GPUImageInput> input in targets) {\n    [previousFilter addTarget:input];\n  }\n}\n\n+ (GPUImageOutput *)findOutputBefore:(id <GPUImageInput>)input from:(GPUImageOutput *)output {\n  if ([output.targets containsObject:input]) {\n    return output;\n  }\n  for (GPUImageOutput *out in output.targets) {\n    GPUImageOutput *find = [self findOutputBefore:input from:out];\n    if (find) {\n      return find;\n    }\n  }\n  return nil;\n}\n@end"
  },
  {
    "path": "GDLiveStreaming/Classes/GDLRawDataOutput.h",
    "content": "//\n// Created by Larry Tin on 15/12/28.\n//\n\n#import <Foundation/Foundation.h>\n#import \"GDLStreamUploader.h\"\n#import \"GPUImageRawDataOutput.h\"\n#import \"GPUImageVideoCamera.h\"\n\n@protocol GPUImageAudioEncodingTarget\n- (BOOL)hasAudioTrack;\n\n- (void)processAudioBuffer:(CMSampleBufferRef)audioBuffer;\n@end\n\n@interface GDLRawDataOutput : GPUImageRawDataOutput <GDLStreamUploader>\n\n- (instancetype)initWithVideoCamera:(GPUImageVideoCamera *)camera withImageSize:(CGSize)newImageSize;\n\n@end"
  },
  {
    "path": "GDLiveStreaming/Classes/GDLRawDataOutput.mm",
    "content": "//\n// Created by Larry Tin on 15/12/28.\n//\n\n#import \"GDLRawDataOutput.h\"\n#import <videocore/api/iOS/VCSimpleSession.h>\n\nusing namespace videocore;\n\n@interface GDLRawDataOutput () <VCSessionDelegate, GPUImageVideoCameraDelegate, GPUImageAudioEncodingTarget>\n@end\n\n@implementation GDLRawDataOutput {\n  __weak GPUImageVideoCamera *_videoCamera;\n  VCSimpleSession *_session;\n  BOOL _upload;\n}\n\n- (instancetype)initWithVideoCamera:(GPUImageVideoCamera *)camera withImageSize:(CGSize)size {\n  self = [super initWithImageSize:size resultsInBGRAFormat:YES];\n  if (self) {\n    _videoCamera = camera;\n//    _videoCamera.audioEncodingTarget = (id) self;\n\n    _session = [[VCSimpleSession alloc] initWithVideoSize:size frameRate:_videoCamera.frameRate bitrate:4000 * 1024];\n    _session.useAdaptiveBitrate = YES;\n    _session.delegate = self;\n  }\n\n  return self;\n}\n\n- (void)startUploadStreamWithURL:(NSString *)rtmpUrl\n                    andStreamKey:(NSString *)streamKey {\n  _upload = YES;\n  [_session startRtmpSessionWithURL:rtmpUrl andStreamKey:streamKey];\n}\n\n- (void)stopUploadStream {\n  if (!_upload) {\n    return;\n  }\n  _upload = NO;\n  [_session endRtmpSession];\n}\n\n- (void)newFrameReadyAtTime:(CMTime)frameTime atIndex:(NSInteger)textureIndex {\n  [super newFrameReadyAtTime:frameTime atIndex:textureIndex];\n\n  if (!_upload) {\n    return;\n  }\n  [self lockFramebufferForReading];\n  CGFloat width = imageSize.width;\n  CGFloat height = imageSize.height;\n  GLubyte *sourceBytes = self.rawBytesForImage;\n  NSInteger bytesPerRow = self.bytesPerRowInOutput;\n\n  CVPixelBufferRef pixelBuffer = NULL;\n  OSStatus result = CVPixelBufferCreateWithBytes(kCFAllocatorDefault, width, height, kCVPixelFormatType_32BGRA, sourceBytes, bytesPerRow, nil, nil, nil, &pixelBuffer);\n  CMVideoFormatDescriptionRef videoInfo = NULL;\n  result = CMVideoFormatDescriptionCreateForImageBuffer(kCFAllocatorDefault, pixelBuffer, &videoInfo);\n  CMSampleTimingInfo timingInfo = {0,};\n  timingInfo.duration = kCMTimeInvalid;\n  timingInfo.decodeTimeStamp = kCMTimeInvalid;\n  timingInfo.presentationTimeStamp = frameTime;\n\n  _session->m_cameraSource->bufferCaptured(pixelBuffer);\n  CFRelease(videoInfo);\n  CVPixelBufferRelease(pixelBuffer);\n  [self unlockFramebufferAfterReading];\n}\n\n- (void)willOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer {\n}\n\n- (void)processAudioBuffer:(CMSampleBufferRef)audioBuffer {\n  if (!_upload) {\n    return;\n  }\n}\n\n- (BOOL)hasAudioTrack {\n  return YES;\n}\n\n- (void)connectionStatusChanged:(VCSessionState)state {\n  switch (state) {\n    case VCSessionStateStarting:\n      break;\n    case VCSessionStateStarted:\n      break;\n    default:\n      break;\n  }\n}\n@end"
  },
  {
    "path": "GDLiveStreaming/Classes/GDLResolutionUtil.h",
    "content": "//\n// Created by Larry Tin on 16/5/9.\n//\n\n#import <Foundation/Foundation.h>\n#import <AVFoundation/AVFoundation.h>\n\nstruct GDLRange {\n  CGFloat min;\n  CGFloat max;\n};\ntypedef struct GDLRange GDLRange;\nstruct GDLResolution {\n  CGSize size;\n  struct GDLRange bitrate;\n};\ntypedef struct GDLResolution GDLResolution;\n\nextern const struct GDLResolution GDLResolution1440p60fps;\nextern const struct GDLResolution GDLResolution1440p;\nextern const struct GDLResolution GDLResolution1080p60fps;\nextern const struct GDLResolution GDLResolution1080p;\nextern const struct GDLResolution GDLResolution720p60fps;\nextern const struct GDLResolution GDLResolution720p;\nextern const struct GDLResolution GDLResolution480p;\nextern const struct GDLResolution GDLResolution360p;\nextern const struct GDLResolution GDLResolution240p;\n\n@interface GDLResolutionUtil : NSObject\n+ (CGSize)videoSize:(NSString *)sessionPreset isPortrait:(BOOL)isPortrait;\n\n+ (float)videoWidth:(NSString *)sessionPreset;\n\n+ (float)videoHeight:(NSString *)sessionPreset;\n@end"
  },
  {
    "path": "GDLiveStreaming/Classes/GDLResolutionUtil.m",
    "content": "//\n// Created by Larry Tin on 16/5/9.\n//\n\n#import \"GDLResolutionUtil.h\"\n\n// https://support.google.com/youtube/answer/2853702\nconst struct GDLResolution GDLResolution1440p60fps = {\n    .size = {.width = 2560.f, .height = 1440.f},\n    .bitrate = {.min = 9000, .max = 18000}\n};\nconst struct GDLResolution GDLResolution1440p = {\n    .size = {.width = 2560.f, .height = 1440.f},\n    .bitrate = {.min = 6000, .max = 13000}\n};\nconst struct GDLResolution GDLResolution1080p60fps = {\n    .size = {.width = 1920.f, .height = 1080.f},\n    .bitrate = {.min = 4500, .max = 9000}\n};\nconst struct GDLResolution GDLResolution1080p = {\n    .size = {.width = 1920.f, .height = 1080.f},\n    .bitrate = {.min = 3000, .max = 6000}\n};\nconst struct GDLResolution GDLResolution720p60fps = {\n    .size = {.width = 1280.f, .height = 720.f},\n    .bitrate = {.min = 2250, .max = 6000}\n};\nconst struct GDLResolution GDLResolution720p = {\n    .size = {.width = 1280.f, .height = 720.f},\n    .bitrate = {.min = 1500, .max = 4000}\n};\nconst struct GDLResolution GDLResolution480p = {\n    .size = {.width = 854.f, .height = 480.f},\n    .bitrate = {.min = 500, .max = 2000}\n};\nconst struct GDLResolution GDLResolution360p = {\n    .size = {.width = 640.f, .height = 360.f},\n    .bitrate = {.min = 400, .max = 1000}\n};\nconst struct GDLResolution GDLResolution240p = {\n    .size = {.width = 426.f, .height = 240.f},\n    .bitrate = {.min = 300, .max = 700}\n};\n\n@implementation GDLResolutionUtil {\n\n}\n\n+ (CGSize)videoSize:(NSString *)sessionPreset isPortrait:(BOOL)isPortrait {\n  float width = [self videoWidth:sessionPreset];\n  float height = [self videoHeight:sessionPreset];\n  return isPortrait ? CGSizeMake(height, width) : CGSizeMake(width, height);\n}\n\n+ (float)videoWidth:(NSString *)sessionPreset {\n  if ([AVCaptureSessionPreset1920x1080 isEqualToString:sessionPreset]) {\n    return 1920;\n  } else if ([AVCaptureSessionPreset1280x720 isEqualToString:sessionPreset]) {\n    return 1280;\n  } else if ([AVCaptureSessionPreset640x480 isEqualToString:sessionPreset]) {\n    return 640;\n  } else if ([AVCaptureSessionPreset352x288 isEqualToString:sessionPreset]) {\n    return 352;\n  } else {\n    return 0;\n  }\n}\n\n+ (float)videoHeight:(NSString *)sessionPreset {\n  if ([AVCaptureSessionPreset1920x1080 isEqualToString:sessionPreset]) {\n    return 1080;\n  } else if ([AVCaptureSessionPreset1280x720 isEqualToString:sessionPreset]) {\n    return 720;\n  } else if ([AVCaptureSessionPreset640x480 isEqualToString:sessionPreset]) {\n    return 480;\n  } else if ([AVCaptureSessionPreset352x288 isEqualToString:sessionPreset]) {\n    return 288;\n  } else {\n    return 0;\n  }\n}\n@end"
  },
  {
    "path": "GDLiveStreaming/Classes/GDLStreamUploader.h",
    "content": "//\n// Created by Larry Tin on 16/5/9.\n//\n\n#import <Foundation/Foundation.h>\n#import <CoreMedia/CoreMedia.h>\n\n@protocol GDLStreamUploader <NSObject>\n- (void)startUploadStreamWithURL:(NSString *)rtmpUrl andStreamKey:(NSString *)streamKey;\n\n- (void)stopUploadStream;\n\n@optional\n- (void)processAudioBuffer:(CMSampleBufferRef)audioBuffer;\n\n@end"
  },
  {
    "path": "GDLiveStreaming/Classes/filter/GPUImageBeautifyFilter.h",
    "content": "//\n//  GPUImageBeautifyFilter.h\n//  BeautifyFaceDemo\n//\n//  Created by guikz on 16/4/28.\n//  Copyright © 2016年 guikz. All rights reserved.\n//\n\n#import <GPUImage/GPUImage.h>\n\n@class GPUImageCombinationFilter;\n\n@interface GPUImageBeautifyFilter : GPUImageFilterGroup {\n    GPUImageBilateralFilter *bilateralFilter;\n    GPUImageCannyEdgeDetectionFilter *cannyEdgeFilter;\n    GPUImageCombinationFilter *combinationFilter;\n    GPUImageHSBFilter *hsbFilter;\n}\n\n@end\n"
  },
  {
    "path": "GDLiveStreaming/Classes/filter/GPUImageBeautifyFilter.m",
    "content": "//\n//  GPUImageBeautifyFilter.m\n//  BeautifyFaceDemo\n//\n//  Created by guikz on 16/4/28.\n//  Copyright © 2016年 guikz. All rights reserved.\n//\n\n#import \"GPUImageBeautifyFilter.h\"\n\n// Internal CombinationFilter(It should not be used outside)\n@interface GPUImageCombinationFilter : GPUImageThreeInputFilter\n{\n    GLint smoothDegreeUniform;\n}\n\n@property (nonatomic, assign) CGFloat intensity;\n\n@end\n\nNSString *const kGPUImageBeautifyFragmentShaderString = SHADER_STRING\n(\n varying highp vec2 textureCoordinate;\n varying highp vec2 textureCoordinate2;\n varying highp vec2 textureCoordinate3;\n \n uniform sampler2D inputImageTexture;\n uniform sampler2D inputImageTexture2;\n uniform sampler2D inputImageTexture3;\n uniform mediump float smoothDegree;\n \n void main()\n {\n     highp vec4 bilateral = texture2D(inputImageTexture, textureCoordinate);\n     highp vec4 canny = texture2D(inputImageTexture2, textureCoordinate2);\n     highp vec4 origin = texture2D(inputImageTexture3,textureCoordinate3);\n     highp vec4 smooth;\n     lowp float r = origin.r;\n     lowp float g = origin.g;\n     lowp float b = origin.b;\n     if (canny.r < 0.2 && r > 0.3725 && g > 0.1568 && b > 0.0784 && r > b && (max(max(r, g), b) - min(min(r, g), b)) > 0.0588 && abs(r-g) > 0.0588) {\n         smooth = (1.0 - smoothDegree) * (origin - bilateral) + bilateral;\n     }\n     else {\n         smooth = origin;\n     }\n     smooth.r = log(1.0 + 0.2 * smooth.r)/log(1.2);\n     smooth.g = log(1.0 + 0.2 * smooth.g)/log(1.2);\n     smooth.b = log(1.0 + 0.2 * smooth.b)/log(1.2);\n     gl_FragColor = smooth;\n }\n );\n\n@implementation GPUImageCombinationFilter\n\n- (id)init {\n    if (self = [super initWithFragmentShaderFromString:kGPUImageBeautifyFragmentShaderString]) {\n        smoothDegreeUniform = [filterProgram uniformIndex:@\"smoothDegree\"];\n    }\n    self.intensity = 0.5;\n    return self;\n}\n\n- (void)setIntensity:(CGFloat)intensity {\n    _intensity = intensity;\n    [self setFloat:intensity forUniform:smoothDegreeUniform program:filterProgram];\n}\n\n@end\n\n@implementation GPUImageBeautifyFilter\n\n- (id)init;\n{\n    if (!(self = [super init]))\n    {\n        return nil;\n    }\n    \n    // First pass: face smoothing filter\n    bilateralFilter = [[GPUImageBilateralFilter alloc] init];\n    bilateralFilter.distanceNormalizationFactor = 4.0;\n    [self addFilter:bilateralFilter];\n    \n    // Second pass: edge detection\n    cannyEdgeFilter = [[GPUImageCannyEdgeDetectionFilter alloc] init];\n    [self addFilter:cannyEdgeFilter];\n    \n    // Third pass: combination bilateral, edge detection and origin\n    combinationFilter = [[GPUImageCombinationFilter alloc] init];\n    [self addFilter:combinationFilter];\n    \n    // Adjust HSB\n    hsbFilter = [[GPUImageHSBFilter alloc] init];\n    [hsbFilter adjustBrightness:1.1];\n    [hsbFilter adjustSaturation:1.1];\n    \n    [bilateralFilter addTarget:combinationFilter];\n    [cannyEdgeFilter addTarget:combinationFilter];\n    \n    [combinationFilter addTarget:hsbFilter];\n    \n    self.initialFilters = [NSArray arrayWithObjects:bilateralFilter,cannyEdgeFilter,combinationFilter,nil];\n    self.terminalFilter = hsbFilter;\n    \n    return self;\n}\n\n#pragma mark -\n#pragma mark GPUImageInput protocol\n\n- (void)newFrameReadyAtTime:(CMTime)frameTime atIndex:(NSInteger)textureIndex;\n{\n    for (GPUImageOutput<GPUImageInput> *currentFilter in self.initialFilters)\n    {\n        if (currentFilter != self.inputFilterToIgnoreForUpdates)\n        {\n            if (currentFilter == combinationFilter) {\n                textureIndex = 2;\n            }\n            [currentFilter newFrameReadyAtTime:frameTime atIndex:textureIndex];\n        }\n    }\n}\n\n- (void)setInputFramebuffer:(GPUImageFramebuffer *)newInputFramebuffer atIndex:(NSInteger)textureIndex;\n{\n    for (GPUImageOutput<GPUImageInput> *currentFilter in self.initialFilters)\n    {\n        if (currentFilter == combinationFilter) {\n            textureIndex = 2;\n        }\n        [currentFilter setInputFramebuffer:newInputFramebuffer atIndex:textureIndex];\n    }\n}\n\n@end\n"
  },
  {
    "path": "GDLiveStreaming.podspec",
    "content": "#\n# Be sure to run `pod lib lint GDLiveStreaming.podspec' to ensure this is a\n# valid spec before submitting.\n#\n# Any lines starting with a # are optional, but their use is encouraged\n# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html\n#\n\nPod::Spec.new do |s|\n  s.name             = \"GDLiveStreaming\"\n  s.version          = \"0.1.0\"\n  s.summary          = \"Audio/Video Capturing->Filtering->Encoding->RTMP pushing\"\n\n  s.description      = <<-DESC\n                       Live audio and video manipulation pipeline\n                       DESC\n\n  s.homepage         = \"https://github.com/goodow/GDLiveStreaming\"\n  s.license          = 'MIT'\n  s.author           = { \"Larry Tin\" => \"dev@goodow.com\" }\n  s.source           = { :git => \"https://github.com/goodow/GDLiveStreaming.git\", :tag => \"v#{s.version.to_s}\" }\n\n  s.ios.deployment_target = '8.0'\n\n  s.source_files = 'GDLiveStreaming/Classes/**/*', 'lib/libyuv/include/**/*.{h}'\n  s.xcconfig = { \"HEADER_SEARCH_PATHS\" => \"${PODS_ROOT}/boost\" }\n\n  # s.resource_bundles = {\n  #   'GDLiveStreaming' => ['GDLiveStreaming/Assets/*.png']\n  # }\n\n  # s.public_header_files = 'Pod/Classes/**/*.h'\n  # s.frameworks = 'UIKit', 'MapKit'\n  s.dependency 'GPUImage', '~> 0.1'\n  s.dependency 'VideoCore', '~> 0.3'\n\n  s.ios.vendored_libraries = 'lib/libyuv/libyuv.a'\n  #s.header_dir = 'lib/libyuv/include'\n  #s.header_mappings_dir = 'lib/libyuv/include'\n\nend\n"
  },
  {
    "path": "LICENSE",
    "content": "Copyright (c) 2016 Larry Tin <dev@goodow.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# GDLiveStreaming\n\n[![CI Status](http://img.shields.io/travis/Larry Tin/GDLiveStreaming.svg?style=flat)](https://travis-ci.org/Larry Tin/GDLiveStreaming)\n[![Version](https://img.shields.io/cocoapods/v/GDLiveStreaming.svg?style=flat)](http://cocoapods.org/pods/GDLiveStreaming)\n[![License](https://img.shields.io/cocoapods/l/GDLiveStreaming.svg?style=flat)](http://cocoapods.org/pods/GDLiveStreaming)\n[![Platform](https://img.shields.io/cocoapods/p/GDLiveStreaming.svg?style=flat)](http://cocoapods.org/pods/GDLiveStreaming)\n\n## Features\n\n* Capturing and filtering live video via [GPUImage](https://github.com/BradLarson/GPUImage)\n* Focusing and Exposure on tap: [GDLCameraUtil](https://github.com/goodow/GDLiveStreaming/blob/master/GDLiveStreaming/Classes/GDLCameraUtil.h)\n* Pause and resume during recording: [GDLAlignVideoAudioTimestamp](https://github.com/goodow/GDLiveStreaming/blob/master/GDLiveStreaming/Classes/GDLAlignVideoAudioTimestamp.h)\n  * Rotate camera between front and rear\n  * Incoming call\n  * Alarm\n* H264 video encoding using VideoToolbox\n* Push stream through [RTMP](https://en.wikipedia.org/wiki/Real_Time_Messaging_Protocol)\n\n## Example\n\nTo run the example project:\n  1. Clone the repo, run `git submodule update --init` in the root directory.\n  2. Run `pod install` from the Example directory and open `GDLiveStreaming.xcworkspace` file.\n\n## Requirements\n\n## Installation\n\nGDLiveStreaming is available through [CocoaPods](http://cocoapods.org). To install\nit, simply add the following line to your Podfile:\n\n```ruby\npod 'GDLiveStreaming', :git => 'https://github.com/goodow/GDLiveStreaming.git'\npod 'VideoCore', :git => 'https://github.com/goodow/VideoCore.git'\npod 'glm', :podspec => 'https://raw.githubusercontent.com/goodow/GDLiveStreaming/master/glm.podspec'\n```\n\n## Author\n\nLarry Tin, dev@goodow.com\n\n## License\n\nGDLiveStreaming is available under the MIT license. See the LICENSE file for more info.\n"
  },
  {
    "path": "glm.podspec",
    "content": "Pod::Spec.new do |s|\n  s.name             = \"glm\"\n  s.module_name      = \"glm\"\n  s.version          = \"0.9.7.4\"\n  s.summary          = \"OpenGL Mathematics\"\n  s.description      = <<-DESC\n                       OpenGL Mathematics is a header only C++ mathematics library for graphics software based on the OpenGL Shading Language specifications.\n                       DESC\n  s.homepage         = \"http://glm.g-truc.net\"\n  s.license          = {:type => 'MIT', :file => 'copying.txt' }\n  s.authors          = { \"Christophe Riccio\" => \"glm@g-truc.net\"}\n  s.source           = { :git => \"https://github.com/g-truc/glm.git\", :tag => s.version.to_s }\n\n  s.requires_arc     = false\n\n  s.header_dir       = \"glm\"\n  s.header_mappings_dir = \"glm\"\n \n  s.libraries = 'c++'\n\n  s.ios.deployment_target = '5.0'\n  s.osx.deployment_target = '10.7'\n\n  s.source_files     = 'glm/**/*{.h,.hpp}'\n\n  s.xcconfig = { 'LIBRARY_SEARCH_PATHS' => '$(PODS_ROOT)/glm' }\n  s.preserve_paths = 'glm/**/*{.h,.hpp,.inl}'\n  s.public_header_files = 'glm/**/*{.h,.hpp,.inl}'\nend\n"
  },
  {
    "path": "lib/libyuv/include/libyuv/basic_types.h",
    "content": "/*\n *  Copyright 2011 The LibYuv Project Authors. All rights reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree. An additional intellectual property rights grant can be found\n *  in the file PATENTS. All contributing project authors may\n *  be found in the AUTHORS file in the root of the source tree.\n */\n\n#ifndef INCLUDE_LIBYUV_BASIC_TYPES_H_  // NOLINT\n#define INCLUDE_LIBYUV_BASIC_TYPES_H_\n\n#include <stddef.h>  // for NULL, size_t\n\n#if defined(__ANDROID__) || (defined(_MSC_VER) && (_MSC_VER < 1600))\n#include <sys/types.h>  // for uintptr_t on x86\n#else\n#include <stdint.h>  // for uintptr_t\n#endif\n\n#ifndef GG_LONGLONG\n#ifndef INT_TYPES_DEFINED\n#define INT_TYPES_DEFINED\n#ifdef COMPILER_MSVC\ntypedef unsigned __int64 uint64;\ntypedef __int64 int64;\n#ifndef INT64_C\n#define INT64_C(x) x ## I64\n#endif\n#ifndef UINT64_C\n#define UINT64_C(x) x ## UI64\n#endif\n#define INT64_F \"I64\"\n#else  // COMPILER_MSVC\n#if defined(__LP64__) && !defined(__OpenBSD__) && !defined(__APPLE__)\ntypedef unsigned long uint64;  // NOLINT\ntypedef long int64;  // NOLINT\n#ifndef INT64_C\n#define INT64_C(x) x ## L\n#endif\n#ifndef UINT64_C\n#define UINT64_C(x) x ## UL\n#endif\n#define INT64_F \"l\"\n#else  // defined(__LP64__) && !defined(__OpenBSD__) && !defined(__APPLE__)\ntypedef unsigned long long uint64;  // NOLINT\ntypedef long long int64;  // NOLINT\n#ifndef INT64_C\n#define INT64_C(x) x ## LL\n#endif\n#ifndef UINT64_C\n#define UINT64_C(x) x ## ULL\n#endif\n#define INT64_F \"ll\"\n#endif  // __LP64__\n#endif  // COMPILER_MSVC\ntypedef unsigned int uint32;\ntypedef int int32;\ntypedef unsigned short uint16;  // NOLINT\ntypedef short int16;  // NOLINT\ntypedef unsigned char uint8;\ntypedef signed char int8;\n#endif  // INT_TYPES_DEFINED\n#endif  // GG_LONGLONG\n\n// Detect compiler is for x86 or x64.\n#if defined(__x86_64__) || defined(_M_X64) || \\\n    defined(__i386__) || defined(_M_IX86)\n#define CPU_X86 1\n#endif\n// Detect compiler is for ARM.\n#if defined(__arm__) || defined(_M_ARM)\n#define CPU_ARM 1\n#endif\n\n#ifndef ALIGNP\n#ifdef __cplusplus\n#define ALIGNP(p, t) \\\n    (reinterpret_cast<uint8*>(((reinterpret_cast<uintptr_t>(p) + \\\n    ((t) - 1)) & ~((t) - 1))))\n#else\n#define ALIGNP(p, t) \\\n    ((uint8*)((((uintptr_t)(p) + ((t) - 1)) & ~((t) - 1))))  /* NOLINT */\n#endif\n#endif\n\n#if !defined(LIBYUV_API)\n#if defined(_WIN32) || defined(__CYGWIN__)\n#if defined(LIBYUV_BUILDING_SHARED_LIBRARY)\n#define LIBYUV_API __declspec(dllexport)\n#elif defined(LIBYUV_USING_SHARED_LIBRARY)\n#define LIBYUV_API __declspec(dllimport)\n#else\n#define LIBYUV_API\n#endif  // LIBYUV_BUILDING_SHARED_LIBRARY\n#elif defined(__GNUC__) && (__GNUC__ >= 4) && !defined(__APPLE__) && \\\n    (defined(LIBYUV_BUILDING_SHARED_LIBRARY) || \\\n    defined(LIBYUV_USING_SHARED_LIBRARY))\n#define LIBYUV_API __attribute__ ((visibility (\"default\")))\n#else\n#define LIBYUV_API\n#endif  // __GNUC__\n#endif  // LIBYUV_API\n\n#define LIBYUV_BOOL int\n#define LIBYUV_FALSE 0\n#define LIBYUV_TRUE 1\n\n// Visual C x86 or GCC little endian.\n#if defined(__x86_64__) || defined(_M_X64) || \\\n  defined(__i386__) || defined(_M_IX86) || \\\n  defined(__arm__) || defined(_M_ARM) || \\\n  (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)\n#define LIBYUV_LITTLE_ENDIAN\n#endif\n\n#endif  // INCLUDE_LIBYUV_BASIC_TYPES_H_  NOLINT\n"
  },
  {
    "path": "lib/libyuv/include/libyuv/compare.h",
    "content": "/*\n *  Copyright 2011 The LibYuv Project Authors. All rights reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree. An additional intellectual property rights grant can be found\n *  in the file PATENTS. All contributing project authors may\n *  be found in the AUTHORS file in the root of the source tree.\n */\n\n#ifndef INCLUDE_LIBYUV_COMPARE_H_  // NOLINT\n#define INCLUDE_LIBYUV_COMPARE_H_\n\n#include \"basic_types.h\"\n\n#ifdef __cplusplus\nnamespace libyuv {\nextern \"C\" {\n#endif\n\n// Compute a hash for specified memory. Seed of 5381 recommended.\nLIBYUV_API\nuint32 HashDjb2(const uint8* src, uint64 count, uint32 seed);\n\n// Scan an opaque argb image and return fourcc based on alpha offset.\n// Returns FOURCC_ARGB, FOURCC_BGRA, or 0 if unknown.\nLIBYUV_API\nuint32 ARGBDetect(const uint8* argb, int stride_argb, int width, int height);\n\n// Sum Square Error - used to compute Mean Square Error or PSNR.\nLIBYUV_API\nuint64 ComputeSumSquareError(const uint8* src_a,\n                             const uint8* src_b, int count);\n\nLIBYUV_API\nuint64 ComputeSumSquareErrorPlane(const uint8* src_a, int stride_a,\n                                  const uint8* src_b, int stride_b,\n                                  int width, int height);\n\nstatic const int kMaxPsnr = 128;\n\nLIBYUV_API\ndouble SumSquareErrorToPsnr(uint64 sse, uint64 count);\n\nLIBYUV_API\ndouble CalcFramePsnr(const uint8* src_a, int stride_a,\n                     const uint8* src_b, int stride_b,\n                     int width, int height);\n\nLIBYUV_API\ndouble I420Psnr(const uint8* src_y_a, int stride_y_a,\n                const uint8* src_u_a, int stride_u_a,\n                const uint8* src_v_a, int stride_v_a,\n                const uint8* src_y_b, int stride_y_b,\n                const uint8* src_u_b, int stride_u_b,\n                const uint8* src_v_b, int stride_v_b,\n                int width, int height);\n\nLIBYUV_API\ndouble CalcFrameSsim(const uint8* src_a, int stride_a,\n                     const uint8* src_b, int stride_b,\n                     int width, int height);\n\nLIBYUV_API\ndouble I420Ssim(const uint8* src_y_a, int stride_y_a,\n                const uint8* src_u_a, int stride_u_a,\n                const uint8* src_v_a, int stride_v_a,\n                const uint8* src_y_b, int stride_y_b,\n                const uint8* src_u_b, int stride_u_b,\n                const uint8* src_v_b, int stride_v_b,\n                int width, int height);\n\n#ifdef __cplusplus\n}  // extern \"C\"\n}  // namespace libyuv\n#endif\n\n#endif  // INCLUDE_LIBYUV_COMPARE_H_  NOLINT\n"
  },
  {
    "path": "lib/libyuv/include/libyuv/convert.h",
    "content": "/*\n *  Copyright 2011 The LibYuv Project Authors. All rights reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree. An additional intellectual property rights grant can be found\n *  in the file PATENTS. All contributing project authors may\n *  be found in the AUTHORS file in the root of the source tree.\n */\n\n#ifndef INCLUDE_LIBYUV_CONVERT_H_  // NOLINT\n#define INCLUDE_LIBYUV_CONVERT_H_\n\n#include \"basic_types.h\"\n// TODO(fbarchard): Remove the following headers includes.\n#include \"convert_from.h\"\n#include \"planar_functions.h\"\n#include \"rotate.h\"\n\n#ifdef __cplusplus\nnamespace libyuv {\nextern \"C\" {\n#endif\n\n// Convert I444 to I420.\nLIBYUV_API\nint I444ToI420(const uint8* src_y, int src_stride_y,\n               const uint8* src_u, int src_stride_u,\n               const uint8* src_v, int src_stride_v,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_u, int dst_stride_u,\n               uint8* dst_v, int dst_stride_v,\n               int width, int height);\n\n// Convert I422 to I420.\nLIBYUV_API\nint I422ToI420(const uint8* src_y, int src_stride_y,\n               const uint8* src_u, int src_stride_u,\n               const uint8* src_v, int src_stride_v,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_u, int dst_stride_u,\n               uint8* dst_v, int dst_stride_v,\n               int width, int height);\n\n// Convert I411 to I420.\nLIBYUV_API\nint I411ToI420(const uint8* src_y, int src_stride_y,\n               const uint8* src_u, int src_stride_u,\n               const uint8* src_v, int src_stride_v,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_u, int dst_stride_u,\n               uint8* dst_v, int dst_stride_v,\n               int width, int height);\n\n// Copy I420 to I420.\n#define I420ToI420 I420Copy\nLIBYUV_API\nint I420Copy(const uint8* src_y, int src_stride_y,\n             const uint8* src_u, int src_stride_u,\n             const uint8* src_v, int src_stride_v,\n             uint8* dst_y, int dst_stride_y,\n             uint8* dst_u, int dst_stride_u,\n             uint8* dst_v, int dst_stride_v,\n             int width, int height);\n\n// Convert I400 (grey) to I420.\nLIBYUV_API\nint I400ToI420(const uint8* src_y, int src_stride_y,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_u, int dst_stride_u,\n               uint8* dst_v, int dst_stride_v,\n               int width, int height);\n\n#define J400ToJ420 I400ToI420\n\n// Convert NV12 to I420.\nLIBYUV_API\nint NV12ToI420(const uint8* src_y, int src_stride_y,\n               const uint8* src_uv, int src_stride_uv,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_u, int dst_stride_u,\n               uint8* dst_v, int dst_stride_v,\n               int width, int height);\n\n// Convert NV21 to I420.\nLIBYUV_API\nint NV21ToI420(const uint8* src_y, int src_stride_y,\n               const uint8* src_vu, int src_stride_vu,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_u, int dst_stride_u,\n               uint8* dst_v, int dst_stride_v,\n               int width, int height);\n\n// Convert YUY2 to I420.\nLIBYUV_API\nint YUY2ToI420(const uint8* src_yuy2, int src_stride_yuy2,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_u, int dst_stride_u,\n               uint8* dst_v, int dst_stride_v,\n               int width, int height);\n\n// Convert UYVY to I420.\nLIBYUV_API\nint UYVYToI420(const uint8* src_uyvy, int src_stride_uyvy,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_u, int dst_stride_u,\n               uint8* dst_v, int dst_stride_v,\n               int width, int height);\n\n// Convert M420 to I420.\nLIBYUV_API\nint M420ToI420(const uint8* src_m420, int src_stride_m420,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_u, int dst_stride_u,\n               uint8* dst_v, int dst_stride_v,\n               int width, int height);\n\n// ARGB little endian (bgra in memory) to I420.\nLIBYUV_API\nint ARGBToI420(const uint8* src_frame, int src_stride_frame,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_u, int dst_stride_u,\n               uint8* dst_v, int dst_stride_v,\n               int width, int height);\n\n// BGRA little endian (argb in memory) to I420.\nLIBYUV_API\nint BGRAToI420(const uint8* src_frame, int src_stride_frame,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_u, int dst_stride_u,\n               uint8* dst_v, int dst_stride_v,\n               int width, int height);\n\n// ABGR little endian (rgba in memory) to I420.\nLIBYUV_API\nint ABGRToI420(const uint8* src_frame, int src_stride_frame,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_u, int dst_stride_u,\n               uint8* dst_v, int dst_stride_v,\n               int width, int height);\n\n// RGBA little endian (abgr in memory) to I420.\nLIBYUV_API\nint RGBAToI420(const uint8* src_frame, int src_stride_frame,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_u, int dst_stride_u,\n               uint8* dst_v, int dst_stride_v,\n               int width, int height);\n\n// RGB little endian (bgr in memory) to I420.\nLIBYUV_API\nint RGB24ToI420(const uint8* src_frame, int src_stride_frame,\n                uint8* dst_y, int dst_stride_y,\n                uint8* dst_u, int dst_stride_u,\n                uint8* dst_v, int dst_stride_v,\n                int width, int height);\n\n// RGB big endian (rgb in memory) to I420.\nLIBYUV_API\nint RAWToI420(const uint8* src_frame, int src_stride_frame,\n              uint8* dst_y, int dst_stride_y,\n              uint8* dst_u, int dst_stride_u,\n              uint8* dst_v, int dst_stride_v,\n              int width, int height);\n\n// RGB16 (RGBP fourcc) little endian to I420.\nLIBYUV_API\nint RGB565ToI420(const uint8* src_frame, int src_stride_frame,\n                 uint8* dst_y, int dst_stride_y,\n                 uint8* dst_u, int dst_stride_u,\n                 uint8* dst_v, int dst_stride_v,\n                 int width, int height);\n\n// RGB15 (RGBO fourcc) little endian to I420.\nLIBYUV_API\nint ARGB1555ToI420(const uint8* src_frame, int src_stride_frame,\n                   uint8* dst_y, int dst_stride_y,\n                   uint8* dst_u, int dst_stride_u,\n                   uint8* dst_v, int dst_stride_v,\n                   int width, int height);\n\n// RGB12 (R444 fourcc) little endian to I420.\nLIBYUV_API\nint ARGB4444ToI420(const uint8* src_frame, int src_stride_frame,\n                   uint8* dst_y, int dst_stride_y,\n                   uint8* dst_u, int dst_stride_u,\n                   uint8* dst_v, int dst_stride_v,\n                   int width, int height);\n\n#ifdef HAVE_JPEG\n// src_width/height provided by capture.\n// dst_width/height for clipping determine final size.\nLIBYUV_API\nint MJPGToI420(const uint8* sample, size_t sample_size,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_u, int dst_stride_u,\n               uint8* dst_v, int dst_stride_v,\n               int src_width, int src_height,\n               int dst_width, int dst_height);\n\n// Query size of MJPG in pixels.\nLIBYUV_API\nint MJPGSize(const uint8* sample, size_t sample_size,\n             int* width, int* height);\n#endif\n\n// Convert camera sample to I420 with cropping, rotation and vertical flip.\n// \"src_size\" is needed to parse MJPG.\n// \"dst_stride_y\" number of bytes in a row of the dst_y plane.\n//   Normally this would be the same as dst_width, with recommended alignment\n//   to 16 bytes for better efficiency.\n//   If rotation of 90 or 270 is used, stride is affected. The caller should\n//   allocate the I420 buffer according to rotation.\n// \"dst_stride_u\" number of bytes in a row of the dst_u plane.\n//   Normally this would be the same as (dst_width + 1) / 2, with\n//   recommended alignment to 16 bytes for better efficiency.\n//   If rotation of 90 or 270 is used, stride is affected.\n// \"crop_x\" and \"crop_y\" are starting position for cropping.\n//   To center, crop_x = (src_width - dst_width) / 2\n//              crop_y = (src_height - dst_height) / 2\n// \"src_width\" / \"src_height\" is size of src_frame in pixels.\n//   \"src_height\" can be negative indicating a vertically flipped image source.\n// \"crop_width\" / \"crop_height\" is the size to crop the src to.\n//    Must be less than or equal to src_width/src_height\n//    Cropping parameters are pre-rotation.\n// \"rotation\" can be 0, 90, 180 or 270.\n// \"format\" is a fourcc. ie 'I420', 'YUY2'\n// Returns 0 for successful; -1 for invalid parameter. Non-zero for failure.\nLIBYUV_API\nint ConvertToI420(const uint8* src_frame, size_t src_size,\n                  uint8* dst_y, int dst_stride_y,\n                  uint8* dst_u, int dst_stride_u,\n                  uint8* dst_v, int dst_stride_v,\n                  int crop_x, int crop_y,\n                  int src_width, int src_height,\n                  int crop_width, int crop_height,\n                  enum RotationMode rotation,\n                  uint32 format);\n\n#ifdef __cplusplus\n}  // extern \"C\"\n}  // namespace libyuv\n#endif\n\n#endif  // INCLUDE_LIBYUV_CONVERT_H_  NOLINT\n"
  },
  {
    "path": "lib/libyuv/include/libyuv/convert_argb.h",
    "content": "/*\n *  Copyright 2012 The LibYuv Project Authors. All rights reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree. An additional intellectual property rights grant can be found\n *  in the file PATENTS. All contributing project authors may\n *  be found in the AUTHORS file in the root of the source tree.\n */\n\n#ifndef INCLUDE_LIBYUV_CONVERT_ARGB_H_  // NOLINT\n#define INCLUDE_LIBYUV_CONVERT_ARGB_H_\n\n#include \"basic_types.h\"\n// TODO(fbarchard): Remove the following headers includes\n#include \"convert_from.h\"\n#include \"planar_functions.h\"\n#include \"rotate.h\"\n\n// TODO(fbarchard): This set of functions should exactly match convert.h\n// TODO(fbarchard): Add tests. Create random content of right size and convert\n// with C vs Opt and or to I420 and compare.\n// TODO(fbarchard): Some of these functions lack parameter setting.\n\n#ifdef __cplusplus\nnamespace libyuv {\nextern \"C\" {\n#endif\n\n// Alias.\n#define ARGBToARGB ARGBCopy\n\n// Copy ARGB to ARGB.\nLIBYUV_API\nint ARGBCopy(const uint8* src_argb, int src_stride_argb,\n             uint8* dst_argb, int dst_stride_argb,\n             int width, int height);\n\n// Convert I420 to ARGB.\nLIBYUV_API\nint I420ToARGB(const uint8* src_y, int src_stride_y,\n               const uint8* src_u, int src_stride_u,\n               const uint8* src_v, int src_stride_v,\n               uint8* dst_argb, int dst_stride_argb,\n               int width, int height);\n\n// Convert I422 to ARGB.\nLIBYUV_API\nint I422ToARGB(const uint8* src_y, int src_stride_y,\n               const uint8* src_u, int src_stride_u,\n               const uint8* src_v, int src_stride_v,\n               uint8* dst_argb, int dst_stride_argb,\n               int width, int height);\n\n// Convert I444 to ARGB.\nLIBYUV_API\nint I444ToARGB(const uint8* src_y, int src_stride_y,\n               const uint8* src_u, int src_stride_u,\n               const uint8* src_v, int src_stride_v,\n               uint8* dst_argb, int dst_stride_argb,\n               int width, int height);\n\n// Convert I411 to ARGB.\nLIBYUV_API\nint I411ToARGB(const uint8* src_y, int src_stride_y,\n               const uint8* src_u, int src_stride_u,\n               const uint8* src_v, int src_stride_v,\n               uint8* dst_argb, int dst_stride_argb,\n               int width, int height);\n\n// Convert I400 (grey) to ARGB.  Reverse of ARGBToI400.\nLIBYUV_API\nint I400ToARGB(const uint8* src_y, int src_stride_y,\n               uint8* dst_argb, int dst_stride_argb,\n               int width, int height);\n\n// Convert J400 (jpeg grey) to ARGB.\nLIBYUV_API\nint J400ToARGB(const uint8* src_y, int src_stride_y,\n               uint8* dst_argb, int dst_stride_argb,\n               int width, int height);\n\n// Alias.\n#define YToARGB I400ToARGB\n\n// Convert NV12 to ARGB.\nLIBYUV_API\nint NV12ToARGB(const uint8* src_y, int src_stride_y,\n               const uint8* src_uv, int src_stride_uv,\n               uint8* dst_argb, int dst_stride_argb,\n               int width, int height);\n\n// Convert NV21 to ARGB.\nLIBYUV_API\nint NV21ToARGB(const uint8* src_y, int src_stride_y,\n               const uint8* src_vu, int src_stride_vu,\n               uint8* dst_argb, int dst_stride_argb,\n               int width, int height);\n\n// Convert M420 to ARGB.\nLIBYUV_API\nint M420ToARGB(const uint8* src_m420, int src_stride_m420,\n               uint8* dst_argb, int dst_stride_argb,\n               int width, int height);\n\n// Convert YUY2 to ARGB.\nLIBYUV_API\nint YUY2ToARGB(const uint8* src_yuy2, int src_stride_yuy2,\n               uint8* dst_argb, int dst_stride_argb,\n               int width, int height);\n\n// Convert UYVY to ARGB.\nLIBYUV_API\nint UYVYToARGB(const uint8* src_uyvy, int src_stride_uyvy,\n               uint8* dst_argb, int dst_stride_argb,\n               int width, int height);\n\n// Convert J420 to ARGB.\nLIBYUV_API\nint J420ToARGB(const uint8* src_y, int src_stride_y,\n               const uint8* src_u, int src_stride_u,\n               const uint8* src_v, int src_stride_v,\n               uint8* dst_argb, int dst_stride_argb,\n               int width, int height);\n\n// Convert J422 to ARGB.\nLIBYUV_API\nint J422ToARGB(const uint8* src_y, int src_stride_y,\n               const uint8* src_u, int src_stride_u,\n               const uint8* src_v, int src_stride_v,\n               uint8* dst_argb, int dst_stride_argb,\n               int width, int height);\n\n// BGRA little endian (argb in memory) to ARGB.\nLIBYUV_API\nint BGRAToARGB(const uint8* src_frame, int src_stride_frame,\n               uint8* dst_argb, int dst_stride_argb,\n               int width, int height);\n\n// ABGR little endian (rgba in memory) to ARGB.\nLIBYUV_API\nint ABGRToARGB(const uint8* src_frame, int src_stride_frame,\n               uint8* dst_argb, int dst_stride_argb,\n               int width, int height);\n\n// RGBA little endian (abgr in memory) to ARGB.\nLIBYUV_API\nint RGBAToARGB(const uint8* src_frame, int src_stride_frame,\n               uint8* dst_argb, int dst_stride_argb,\n               int width, int height);\n\n// Deprecated function name.\n#define BG24ToARGB RGB24ToARGB\n\n// RGB little endian (bgr in memory) to ARGB.\nLIBYUV_API\nint RGB24ToARGB(const uint8* src_frame, int src_stride_frame,\n                uint8* dst_argb, int dst_stride_argb,\n                int width, int height);\n\n// RGB big endian (rgb in memory) to ARGB.\nLIBYUV_API\nint RAWToARGB(const uint8* src_frame, int src_stride_frame,\n              uint8* dst_argb, int dst_stride_argb,\n              int width, int height);\n\n// RGB16 (RGBP fourcc) little endian to ARGB.\nLIBYUV_API\nint RGB565ToARGB(const uint8* src_frame, int src_stride_frame,\n                 uint8* dst_argb, int dst_stride_argb,\n                 int width, int height);\n\n// RGB15 (RGBO fourcc) little endian to ARGB.\nLIBYUV_API\nint ARGB1555ToARGB(const uint8* src_frame, int src_stride_frame,\n                   uint8* dst_argb, int dst_stride_argb,\n                   int width, int height);\n\n// RGB12 (R444 fourcc) little endian to ARGB.\nLIBYUV_API\nint ARGB4444ToARGB(const uint8* src_frame, int src_stride_frame,\n                   uint8* dst_argb, int dst_stride_argb,\n                   int width, int height);\n\n#ifdef HAVE_JPEG\n// src_width/height provided by capture\n// dst_width/height for clipping determine final size.\nLIBYUV_API\nint MJPGToARGB(const uint8* sample, size_t sample_size,\n               uint8* dst_argb, int dst_stride_argb,\n               int src_width, int src_height,\n               int dst_width, int dst_height);\n#endif\n\n// Convert camera sample to ARGB with cropping, rotation and vertical flip.\n// \"src_size\" is needed to parse MJPG.\n// \"dst_stride_argb\" number of bytes in a row of the dst_argb plane.\n//   Normally this would be the same as dst_width, with recommended alignment\n//   to 16 bytes for better efficiency.\n//   If rotation of 90 or 270 is used, stride is affected. The caller should\n//   allocate the I420 buffer according to rotation.\n// \"dst_stride_u\" number of bytes in a row of the dst_u plane.\n//   Normally this would be the same as (dst_width + 1) / 2, with\n//   recommended alignment to 16 bytes for better efficiency.\n//   If rotation of 90 or 270 is used, stride is affected.\n// \"crop_x\" and \"crop_y\" are starting position for cropping.\n//   To center, crop_x = (src_width - dst_width) / 2\n//              crop_y = (src_height - dst_height) / 2\n// \"src_width\" / \"src_height\" is size of src_frame in pixels.\n//   \"src_height\" can be negative indicating a vertically flipped image source.\n// \"crop_width\" / \"crop_height\" is the size to crop the src to.\n//    Must be less than or equal to src_width/src_height\n//    Cropping parameters are pre-rotation.\n// \"rotation\" can be 0, 90, 180 or 270.\n// \"format\" is a fourcc. ie 'I420', 'YUY2'\n// Returns 0 for successful; -1 for invalid parameter. Non-zero for failure.\nLIBYUV_API\nint ConvertToARGB(const uint8* src_frame, size_t src_size,\n                  uint8* dst_argb, int dst_stride_argb,\n                  int crop_x, int crop_y,\n                  int src_width, int src_height,\n                  int crop_width, int crop_height,\n                  enum RotationMode rotation,\n                  uint32 format);\n\n#ifdef __cplusplus\n}  // extern \"C\"\n}  // namespace libyuv\n#endif\n\n#endif  // INCLUDE_LIBYUV_CONVERT_ARGB_H_  NOLINT\n"
  },
  {
    "path": "lib/libyuv/include/libyuv/convert_from.h",
    "content": "/*\n *  Copyright 2011 The LibYuv Project Authors. All rights reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree. An additional intellectual property rights grant can be found\n *  in the file PATENTS. All contributing project authors may\n *  be found in the AUTHORS file in the root of the source tree.\n */\n\n#ifndef INCLUDE_LIBYUV_CONVERT_FROM_H_  // NOLINT\n#define INCLUDE_LIBYUV_CONVERT_FROM_H_\n\n#include \"basic_types.h\"\n#include \"rotate.h\"\n\n#ifdef __cplusplus\nnamespace libyuv {\nextern \"C\" {\n#endif\n\n// See Also convert.h for conversions from formats to I420.\n\n// I420Copy in convert to I420ToI420.\n\nLIBYUV_API\nint I420ToI422(const uint8* src_y, int src_stride_y,\n               const uint8* src_u, int src_stride_u,\n               const uint8* src_v, int src_stride_v,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_u, int dst_stride_u,\n               uint8* dst_v, int dst_stride_v,\n               int width, int height);\n\nLIBYUV_API\nint I420ToI444(const uint8* src_y, int src_stride_y,\n               const uint8* src_u, int src_stride_u,\n               const uint8* src_v, int src_stride_v,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_u, int dst_stride_u,\n               uint8* dst_v, int dst_stride_v,\n               int width, int height);\n\nLIBYUV_API\nint I420ToI411(const uint8* src_y, int src_stride_y,\n               const uint8* src_u, int src_stride_u,\n               const uint8* src_v, int src_stride_v,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_u, int dst_stride_u,\n               uint8* dst_v, int dst_stride_v,\n               int width, int height);\n\n// Copy to I400. Source can be I420, I422, I444, I400, NV12 or NV21.\nLIBYUV_API\nint I400Copy(const uint8* src_y, int src_stride_y,\n             uint8* dst_y, int dst_stride_y,\n             int width, int height);\n\n// TODO(fbarchard): I420ToM420\n\nLIBYUV_API\nint I420ToNV12(const uint8* src_y, int src_stride_y,\n               const uint8* src_u, int src_stride_u,\n               const uint8* src_v, int src_stride_v,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_uv, int dst_stride_uv,\n               int width, int height);\n\nLIBYUV_API\nint I420ToNV21(const uint8* src_y, int src_stride_y,\n               const uint8* src_u, int src_stride_u,\n               const uint8* src_v, int src_stride_v,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_vu, int dst_stride_vu,\n               int width, int height);\n\nLIBYUV_API\nint I420ToYUY2(const uint8* src_y, int src_stride_y,\n               const uint8* src_u, int src_stride_u,\n               const uint8* src_v, int src_stride_v,\n               uint8* dst_frame, int dst_stride_frame,\n               int width, int height);\n\nLIBYUV_API\nint I420ToUYVY(const uint8* src_y, int src_stride_y,\n               const uint8* src_u, int src_stride_u,\n               const uint8* src_v, int src_stride_v,\n               uint8* dst_frame, int dst_stride_frame,\n               int width, int height);\n\nLIBYUV_API\nint I420ToARGB(const uint8* src_y, int src_stride_y,\n               const uint8* src_u, int src_stride_u,\n               const uint8* src_v, int src_stride_v,\n               uint8* dst_argb, int dst_stride_argb,\n               int width, int height);\n\nLIBYUV_API\nint I420ToBGRA(const uint8* src_y, int src_stride_y,\n               const uint8* src_u, int src_stride_u,\n               const uint8* src_v, int src_stride_v,\n               uint8* dst_argb, int dst_stride_argb,\n               int width, int height);\n\nLIBYUV_API\nint I420ToABGR(const uint8* src_y, int src_stride_y,\n               const uint8* src_u, int src_stride_u,\n               const uint8* src_v, int src_stride_v,\n               uint8* dst_argb, int dst_stride_argb,\n               int width, int height);\n\nLIBYUV_API\nint I420ToRGBA(const uint8* src_y, int src_stride_y,\n               const uint8* src_u, int src_stride_u,\n               const uint8* src_v, int src_stride_v,\n               uint8* dst_rgba, int dst_stride_rgba,\n               int width, int height);\n\nLIBYUV_API\nint I420ToRGB24(const uint8* src_y, int src_stride_y,\n                const uint8* src_u, int src_stride_u,\n                const uint8* src_v, int src_stride_v,\n                uint8* dst_frame, int dst_stride_frame,\n                int width, int height);\n\nLIBYUV_API\nint I420ToRAW(const uint8* src_y, int src_stride_y,\n              const uint8* src_u, int src_stride_u,\n              const uint8* src_v, int src_stride_v,\n              uint8* dst_frame, int dst_stride_frame,\n              int width, int height);\n\nLIBYUV_API\nint I420ToRGB565(const uint8* src_y, int src_stride_y,\n                 const uint8* src_u, int src_stride_u,\n                 const uint8* src_v, int src_stride_v,\n                 uint8* dst_frame, int dst_stride_frame,\n                 int width, int height);\n\n// Convert I420 To RGB565 with 4x4 dither matrix (16 bytes).\n// Values in dither matrix from 0 to 7 recommended.\n// The order of the dither matrix is first byte is upper left.\n\nLIBYUV_API\nint I420ToRGB565Dither(const uint8* src_y, int src_stride_y,\n                       const uint8* src_u, int src_stride_u,\n                       const uint8* src_v, int src_stride_v,\n                       uint8* dst_frame, int dst_stride_frame,\n                       const uint8* dither4x4, int width, int height);\n\nLIBYUV_API\nint I420ToARGB1555(const uint8* src_y, int src_stride_y,\n                   const uint8* src_u, int src_stride_u,\n                   const uint8* src_v, int src_stride_v,\n                   uint8* dst_frame, int dst_stride_frame,\n                   int width, int height);\n\nLIBYUV_API\nint I420ToARGB4444(const uint8* src_y, int src_stride_y,\n                   const uint8* src_u, int src_stride_u,\n                   const uint8* src_v, int src_stride_v,\n                   uint8* dst_frame, int dst_stride_frame,\n                   int width, int height);\n\n// Convert I420 to specified format.\n// \"dst_sample_stride\" is bytes in a row for the destination. Pass 0 if the\n//    buffer has contiguous rows. Can be negative. A multiple of 16 is optimal.\nLIBYUV_API\nint ConvertFromI420(const uint8* y, int y_stride,\n                    const uint8* u, int u_stride,\n                    const uint8* v, int v_stride,\n                    uint8* dst_sample, int dst_sample_stride,\n                    int width, int height,\n                    uint32 format);\n\n#ifdef __cplusplus\n}  // extern \"C\"\n}  // namespace libyuv\n#endif\n\n#endif  // INCLUDE_LIBYUV_CONVERT_FROM_H_  NOLINT\n"
  },
  {
    "path": "lib/libyuv/include/libyuv/convert_from_argb.h",
    "content": "/*\n *  Copyright 2012 The LibYuv Project Authors. All rights reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree. An additional intellectual property rights grant can be found\n *  in the file PATENTS. All contributing project authors may\n *  be found in the AUTHORS file in the root of the source tree.\n */\n\n#ifndef INCLUDE_LIBYUV_CONVERT_FROM_ARGB_H_  // NOLINT\n#define INCLUDE_LIBYUV_CONVERT_FROM_ARGB_H_\n\n#include \"basic_types.h\"\n\n#ifdef __cplusplus\nnamespace libyuv {\nextern \"C\" {\n#endif\n\n// Copy ARGB to ARGB.\n#define ARGBToARGB ARGBCopy\nLIBYUV_API\nint ARGBCopy(const uint8* src_argb, int src_stride_argb,\n             uint8* dst_argb, int dst_stride_argb,\n             int width, int height);\n\n// Convert ARGB To BGRA.\nLIBYUV_API\nint ARGBToBGRA(const uint8* src_argb, int src_stride_argb,\n               uint8* dst_bgra, int dst_stride_bgra,\n               int width, int height);\n\n// Convert ARGB To ABGR.\nLIBYUV_API\nint ARGBToABGR(const uint8* src_argb, int src_stride_argb,\n               uint8* dst_abgr, int dst_stride_abgr,\n               int width, int height);\n\n// Convert ARGB To RGBA.\nLIBYUV_API\nint ARGBToRGBA(const uint8* src_argb, int src_stride_argb,\n               uint8* dst_rgba, int dst_stride_rgba,\n               int width, int height);\n\n// Convert ARGB To RGB24.\nLIBYUV_API\nint ARGBToRGB24(const uint8* src_argb, int src_stride_argb,\n                uint8* dst_rgb24, int dst_stride_rgb24,\n                int width, int height);\n\n// Convert ARGB To RAW.\nLIBYUV_API\nint ARGBToRAW(const uint8* src_argb, int src_stride_argb,\n              uint8* dst_rgb, int dst_stride_rgb,\n              int width, int height);\n\n// Convert ARGB To RGB565.\nLIBYUV_API\nint ARGBToRGB565(const uint8* src_argb, int src_stride_argb,\n                 uint8* dst_rgb565, int dst_stride_rgb565,\n                 int width, int height);\n\n// Convert ARGB To RGB565 with 4x4 dither matrix (16 bytes).\n// Values in dither matrix from 0 to 7 recommended.\n// The order of the dither matrix is first byte is upper left.\n// TODO(fbarchard): Consider pointer to 2d array for dither4x4.\n// const uint8(*dither)[4][4];\nLIBYUV_API\nint ARGBToRGB565Dither(const uint8* src_argb, int src_stride_argb,\n                       uint8* dst_rgb565, int dst_stride_rgb565,\n                       const uint8* dither4x4, int width, int height);\n\n// Convert ARGB To ARGB1555.\nLIBYUV_API\nint ARGBToARGB1555(const uint8* src_argb, int src_stride_argb,\n                   uint8* dst_argb1555, int dst_stride_argb1555,\n                   int width, int height);\n\n// Convert ARGB To ARGB4444.\nLIBYUV_API\nint ARGBToARGB4444(const uint8* src_argb, int src_stride_argb,\n                   uint8* dst_argb4444, int dst_stride_argb4444,\n                   int width, int height);\n\n// Convert ARGB To I444.\nLIBYUV_API\nint ARGBToI444(const uint8* src_argb, int src_stride_argb,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_u, int dst_stride_u,\n               uint8* dst_v, int dst_stride_v,\n               int width, int height);\n\n// Convert ARGB To I422.\nLIBYUV_API\nint ARGBToI422(const uint8* src_argb, int src_stride_argb,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_u, int dst_stride_u,\n               uint8* dst_v, int dst_stride_v,\n               int width, int height);\n\n// Convert ARGB To I420. (also in convert.h)\nLIBYUV_API\nint ARGBToI420(const uint8* src_argb, int src_stride_argb,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_u, int dst_stride_u,\n               uint8* dst_v, int dst_stride_v,\n               int width, int height);\n\n// Convert ARGB to J420. (JPeg full range I420).\nLIBYUV_API\nint ARGBToJ420(const uint8* src_argb, int src_stride_argb,\n               uint8* dst_yj, int dst_stride_yj,\n               uint8* dst_u, int dst_stride_u,\n               uint8* dst_v, int dst_stride_v,\n               int width, int height);\n\n// Convert ARGB to J422.\nLIBYUV_API\nint ARGBToJ422(const uint8* src_argb, int src_stride_argb,\n               uint8* dst_yj, int dst_stride_yj,\n               uint8* dst_u, int dst_stride_u,\n               uint8* dst_v, int dst_stride_v,\n               int width, int height);\n\n// Convert ARGB To I411.\nLIBYUV_API\nint ARGBToI411(const uint8* src_argb, int src_stride_argb,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_u, int dst_stride_u,\n               uint8* dst_v, int dst_stride_v,\n               int width, int height);\n\n// Convert ARGB to J400. (JPeg full range).\nLIBYUV_API\nint ARGBToJ400(const uint8* src_argb, int src_stride_argb,\n               uint8* dst_yj, int dst_stride_yj,\n               int width, int height);\n\n// Convert ARGB to I400.\nLIBYUV_API\nint ARGBToI400(const uint8* src_argb, int src_stride_argb,\n               uint8* dst_y, int dst_stride_y,\n               int width, int height);\n\n// Convert ARGB to G. (Reverse of J400toARGB, which replicates G back to ARGB)\nLIBYUV_API\nint ARGBToG(const uint8* src_argb, int src_stride_argb,\n            uint8* dst_g, int dst_stride_g,\n            int width, int height);\n\n// Convert ARGB To NV12.\nLIBYUV_API\nint ARGBToNV12(const uint8* src_argb, int src_stride_argb,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_uv, int dst_stride_uv,\n               int width, int height);\n\n// Convert ARGB To NV21.\nLIBYUV_API\nint ARGBToNV21(const uint8* src_argb, int src_stride_argb,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_vu, int dst_stride_vu,\n               int width, int height);\n\n// Convert ARGB To NV21.\nLIBYUV_API\nint ARGBToNV21(const uint8* src_argb, int src_stride_argb,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_vu, int dst_stride_vu,\n               int width, int height);\n\n// Convert ARGB To YUY2.\nLIBYUV_API\nint ARGBToYUY2(const uint8* src_argb, int src_stride_argb,\n               uint8* dst_yuy2, int dst_stride_yuy2,\n               int width, int height);\n\n// Convert ARGB To UYVY.\nLIBYUV_API\nint ARGBToUYVY(const uint8* src_argb, int src_stride_argb,\n               uint8* dst_uyvy, int dst_stride_uyvy,\n               int width, int height);\n\n#ifdef __cplusplus\n}  // extern \"C\"\n}  // namespace libyuv\n#endif\n\n#endif  // INCLUDE_LIBYUV_CONVERT_FROM_ARGB_H_  NOLINT\n"
  },
  {
    "path": "lib/libyuv/include/libyuv/cpu_id.h",
    "content": "/*\n *  Copyright 2011 The LibYuv Project Authors. All rights reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree. An additional intellectual property rights grant can be found\n *  in the file PATENTS. All contributing project authors may\n *  be found in the AUTHORS file in the root of the source tree.\n */\n\n#ifndef INCLUDE_LIBYUV_CPU_ID_H_  // NOLINT\n#define INCLUDE_LIBYUV_CPU_ID_H_\n\n#include \"basic_types.h\"\n\n#ifdef __cplusplus\nnamespace libyuv {\nextern \"C\" {\n#endif\n\n// TODO(fbarchard): Consider overlapping bits for different architectures.\n// Internal flag to indicate cpuid requires initialization.\n#define kCpuInit 0x1\n\n// These flags are only valid on ARM processors.\nstatic const int kCpuHasARM = 0x2;\nstatic const int kCpuHasNEON = 0x4;\n// 0x8 reserved for future ARM flag.\n\n// These flags are only valid on x86 processors.\nstatic const int kCpuHasX86 = 0x10;\nstatic const int kCpuHasSSE2 = 0x20;\nstatic const int kCpuHasSSSE3 = 0x40;\nstatic const int kCpuHasSSE41 = 0x80;\nstatic const int kCpuHasSSE42 = 0x100;\nstatic const int kCpuHasAVX = 0x200;\nstatic const int kCpuHasAVX2 = 0x400;\nstatic const int kCpuHasERMS = 0x800;\nstatic const int kCpuHasFMA3 = 0x1000;\n// 0x2000, 0x4000, 0x8000 reserved for future X86 flags.\n\n// These flags are only valid on MIPS processors.\nstatic const int kCpuHasMIPS = 0x10000;\nstatic const int kCpuHasMIPS_DSP = 0x20000;\nstatic const int kCpuHasMIPS_DSPR2 = 0x40000;\n\n// Internal function used to auto-init.\nLIBYUV_API\nint InitCpuFlags(void);\n\n// Internal function for parsing /proc/cpuinfo.\nLIBYUV_API\nint ArmCpuCaps(const char* cpuinfo_name);\n\n// Detect CPU has SSE2 etc.\n// Test_flag parameter should be one of kCpuHas constants above.\n// returns non-zero if instruction set is detected\nstatic __inline int TestCpuFlag(int test_flag) {\n  LIBYUV_API extern int cpu_info_;\n  return (cpu_info_ == kCpuInit ? InitCpuFlags() : cpu_info_) & test_flag;\n}\n\n// For testing, allow CPU flags to be disabled.\n// ie MaskCpuFlags(~kCpuHasSSSE3) to disable SSSE3.\n// MaskCpuFlags(-1) to enable all cpu specific optimizations.\n// MaskCpuFlags(0) to disable all cpu specific optimizations.\nLIBYUV_API\nvoid MaskCpuFlags(int enable_flags);\n\n// Low level cpuid for X86. Returns zeros on other CPUs.\n// eax is the info type that you want.\n// ecx is typically the cpu number, and should normally be zero.\nLIBYUV_API\nvoid CpuId(uint32 eax, uint32 ecx, uint32* cpu_info);\n\n#ifdef __cplusplus\n}  // extern \"C\"\n}  // namespace libyuv\n#endif\n\n#endif  // INCLUDE_LIBYUV_CPU_ID_H_  NOLINT\n"
  },
  {
    "path": "lib/libyuv/include/libyuv/mjpeg_decoder.h",
    "content": "/*\n *  Copyright 2012 The LibYuv Project Authors. All rights reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree. An additional intellectual property rights grant can be found\n *  in the file PATENTS. All contributing project authors may\n *  be found in the AUTHORS file in the root of the source tree.\n */\n\n#ifndef INCLUDE_LIBYUV_MJPEG_DECODER_H_  // NOLINT\n#define INCLUDE_LIBYUV_MJPEG_DECODER_H_\n\n#include \"basic_types.h\"\n\n#ifdef __cplusplus\n// NOTE: For a simplified public API use convert.h MJPGToI420().\n\nstruct jpeg_common_struct;\nstruct jpeg_decompress_struct;\nstruct jpeg_source_mgr;\n\nnamespace libyuv {\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nLIBYUV_BOOL ValidateJpeg(const uint8* sample, size_t sample_size);\n\n#ifdef __cplusplus\n}  // extern \"C\"\n#endif\n\nstatic const uint32 kUnknownDataSize = 0xFFFFFFFF;\n\nenum JpegSubsamplingType {\n  kJpegYuv420,\n  kJpegYuv422,\n  kJpegYuv411,\n  kJpegYuv444,\n  kJpegYuv400,\n  kJpegUnknown\n};\n\nstruct Buffer {\n  const uint8* data;\n  int len;\n};\n\nstruct BufferVector {\n  Buffer* buffers;\n  int len;\n  int pos;\n};\n\nstruct SetJmpErrorMgr;\n\n// MJPEG (\"Motion JPEG\") is a pseudo-standard video codec where the frames are\n// simply independent JPEG images with a fixed huffman table (which is omitted).\n// It is rarely used in video transmission, but is common as a camera capture\n// format, especially in Logitech devices. This class implements a decoder for\n// MJPEG frames.\n//\n// See http://tools.ietf.org/html/rfc2435\nclass LIBYUV_API MJpegDecoder {\n public:\n  typedef void (*CallbackFunction)(void* opaque,\n                                   const uint8* const* data,\n                                   const int* strides,\n                                   int rows);\n\n  static const int kColorSpaceUnknown;\n  static const int kColorSpaceGrayscale;\n  static const int kColorSpaceRgb;\n  static const int kColorSpaceYCbCr;\n  static const int kColorSpaceCMYK;\n  static const int kColorSpaceYCCK;\n\n  MJpegDecoder();\n  ~MJpegDecoder();\n\n  // Loads a new frame, reads its headers, and determines the uncompressed\n  // image format.\n  // Returns LIBYUV_TRUE if image looks valid and format is supported.\n  // If return value is LIBYUV_TRUE, then the values for all the following\n  // getters are populated.\n  // src_len is the size of the compressed mjpeg frame in bytes.\n  LIBYUV_BOOL LoadFrame(const uint8* src, size_t src_len);\n\n  // Returns width of the last loaded frame in pixels.\n  int GetWidth();\n\n  // Returns height of the last loaded frame in pixels.\n  int GetHeight();\n\n  // Returns format of the last loaded frame. The return value is one of the\n  // kColorSpace* constants.\n  int GetColorSpace();\n\n  // Number of color components in the color space.\n  int GetNumComponents();\n\n  // Sample factors of the n-th component.\n  int GetHorizSampFactor(int component);\n\n  int GetVertSampFactor(int component);\n\n  int GetHorizSubSampFactor(int component);\n\n  int GetVertSubSampFactor(int component);\n\n  // Public for testability.\n  int GetImageScanlinesPerImcuRow();\n\n  // Public for testability.\n  int GetComponentScanlinesPerImcuRow(int component);\n\n  // Width of a component in bytes.\n  int GetComponentWidth(int component);\n\n  // Height of a component.\n  int GetComponentHeight(int component);\n\n  // Width of a component in bytes with padding for DCTSIZE. Public for testing.\n  int GetComponentStride(int component);\n\n  // Size of a component in bytes.\n  int GetComponentSize(int component);\n\n  // Call this after LoadFrame() if you decide you don't want to decode it\n  // after all.\n  LIBYUV_BOOL UnloadFrame();\n\n  // Decodes the entire image into a one-buffer-per-color-component format.\n  // dst_width must match exactly. dst_height must be <= to image height; if\n  // less, the image is cropped. \"planes\" must have size equal to at least\n  // GetNumComponents() and they must point to non-overlapping buffers of size\n  // at least GetComponentSize(i). The pointers in planes are incremented\n  // to point to after the end of the written data.\n  // TODO(fbarchard): Add dst_x, dst_y to allow specific rect to be decoded.\n  LIBYUV_BOOL DecodeToBuffers(uint8** planes, int dst_width, int dst_height);\n\n  // Decodes the entire image and passes the data via repeated calls to a\n  // callback function. Each call will get the data for a whole number of\n  // image scanlines.\n  // TODO(fbarchard): Add dst_x, dst_y to allow specific rect to be decoded.\n  LIBYUV_BOOL DecodeToCallback(CallbackFunction fn, void* opaque,\n                        int dst_width, int dst_height);\n\n  // The helper function which recognizes the jpeg sub-sampling type.\n  static JpegSubsamplingType JpegSubsamplingTypeHelper(\n     int* subsample_x, int* subsample_y, int number_of_components);\n\n private:\n  void AllocOutputBuffers(int num_outbufs);\n  void DestroyOutputBuffers();\n\n  LIBYUV_BOOL StartDecode();\n  LIBYUV_BOOL FinishDecode();\n\n  void SetScanlinePointers(uint8** data);\n  LIBYUV_BOOL DecodeImcuRow();\n\n  int GetComponentScanlinePadding(int component);\n\n  // A buffer holding the input data for a frame.\n  Buffer buf_;\n  BufferVector buf_vec_;\n\n  jpeg_decompress_struct* decompress_struct_;\n  jpeg_source_mgr* source_mgr_;\n  SetJmpErrorMgr* error_mgr_;\n\n  // LIBYUV_TRUE iff at least one component has scanline padding. (i.e.,\n  // GetComponentScanlinePadding() != 0.)\n  LIBYUV_BOOL has_scanline_padding_;\n\n  // Temporaries used to point to scanline outputs.\n  int num_outbufs_;  // Outermost size of all arrays below.\n  uint8*** scanlines_;\n  int* scanlines_sizes_;\n  // Temporary buffer used for decoding when we can't decode directly to the\n  // output buffers. Large enough for just one iMCU row.\n  uint8** databuf_;\n  int* databuf_strides_;\n};\n\n}  // namespace libyuv\n\n#endif  //  __cplusplus\n#endif  // INCLUDE_LIBYUV_MJPEG_DECODER_H_  NOLINT\n"
  },
  {
    "path": "lib/libyuv/include/libyuv/planar_functions.h",
    "content": "/*\n *  Copyright 2011 The LibYuv Project Authors. All rights reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree. An additional intellectual property rights grant can be found\n *  in the file PATENTS. All contributing project authors may\n *  be found in the AUTHORS file in the root of the source tree.\n */\n\n#ifndef INCLUDE_LIBYUV_PLANAR_FUNCTIONS_H_  // NOLINT\n#define INCLUDE_LIBYUV_PLANAR_FUNCTIONS_H_\n\n#include \"basic_types.h\"\n\n// TODO(fbarchard): Remove the following headers includes.\n#include \"convert.h\"\n#include \"convert_argb.h\"\n\n#ifdef __cplusplus\nnamespace libyuv {\nextern \"C\" {\n#endif\n\n// Copy a plane of data.\nLIBYUV_API\nvoid CopyPlane(const uint8* src_y, int src_stride_y,\n               uint8* dst_y, int dst_stride_y,\n               int width, int height);\n\nLIBYUV_API\nvoid CopyPlane_16(const uint16* src_y, int src_stride_y,\n                  uint16* dst_y, int dst_stride_y,\n                  int width, int height);\n\n// Set a plane of data to a 32 bit value.\nLIBYUV_API\nvoid SetPlane(uint8* dst_y, int dst_stride_y,\n              int width, int height,\n              uint32 value);\n\n// Copy I400.  Supports inverting.\nLIBYUV_API\nint I400ToI400(const uint8* src_y, int src_stride_y,\n               uint8* dst_y, int dst_stride_y,\n               int width, int height);\n\n#define J400ToJ400 I400ToI400\n\n// Copy I422 to I422.\n#define I422ToI422 I422Copy\nLIBYUV_API\nint I422Copy(const uint8* src_y, int src_stride_y,\n             const uint8* src_u, int src_stride_u,\n             const uint8* src_v, int src_stride_v,\n             uint8* dst_y, int dst_stride_y,\n             uint8* dst_u, int dst_stride_u,\n             uint8* dst_v, int dst_stride_v,\n             int width, int height);\n\n// Copy I444 to I444.\n#define I444ToI444 I444Copy\nLIBYUV_API\nint I444Copy(const uint8* src_y, int src_stride_y,\n             const uint8* src_u, int src_stride_u,\n             const uint8* src_v, int src_stride_v,\n             uint8* dst_y, int dst_stride_y,\n             uint8* dst_u, int dst_stride_u,\n             uint8* dst_v, int dst_stride_v,\n             int width, int height);\n\n// Convert YUY2 to I422.\nLIBYUV_API\nint YUY2ToI422(const uint8* src_yuy2, int src_stride_yuy2,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_u, int dst_stride_u,\n               uint8* dst_v, int dst_stride_v,\n               int width, int height);\n\n// Convert UYVY to I422.\nLIBYUV_API\nint UYVYToI422(const uint8* src_uyvy, int src_stride_uyvy,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_u, int dst_stride_u,\n               uint8* dst_v, int dst_stride_v,\n               int width, int height);\n\n\n// Convert I420 to I400. (calls CopyPlane ignoring u/v).\nLIBYUV_API\nint I420ToI400(const uint8* src_y, int src_stride_y,\n               const uint8* src_u, int src_stride_u,\n               const uint8* src_v, int src_stride_v,\n               uint8* dst_y, int dst_stride_y,\n               int width, int height);\n\n// Alias\n#define J420ToJ400 I420ToI400\n#define I420ToI420Mirror I420Mirror\n\n// I420 mirror.\nLIBYUV_API\nint I420Mirror(const uint8* src_y, int src_stride_y,\n               const uint8* src_u, int src_stride_u,\n               const uint8* src_v, int src_stride_v,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_u, int dst_stride_u,\n               uint8* dst_v, int dst_stride_v,\n               int width, int height);\n\n// Alias\n#define I400ToI400Mirror I400Mirror\n\n// I400 mirror.  A single plane is mirrored horizontally.\n// Pass negative height to achieve 180 degree rotation.\nLIBYUV_API\nint I400Mirror(const uint8* src_y, int src_stride_y,\n               uint8* dst_y, int dst_stride_y,\n               int width, int height);\n\n// Alias\n#define ARGBToARGBMirror ARGBMirror\n\n// ARGB mirror.\nLIBYUV_API\nint ARGBMirror(const uint8* src_argb, int src_stride_argb,\n               uint8* dst_argb, int dst_stride_argb,\n               int width, int height);\n\n// Convert NV12 to RGB565.\nLIBYUV_API\nint NV12ToRGB565(const uint8* src_y, int src_stride_y,\n                 const uint8* src_uv, int src_stride_uv,\n                 uint8* dst_rgb565, int dst_stride_rgb565,\n                 int width, int height);\n\n// Convert NV21 to RGB565.\nLIBYUV_API\nint NV21ToRGB565(const uint8* src_y, int src_stride_y,\n                 const uint8* src_uv, int src_stride_uv,\n                 uint8* dst_rgb565, int dst_stride_rgb565,\n                 int width, int height);\n\n// I422ToARGB is in convert_argb.h\n// Convert I422 to BGRA.\nLIBYUV_API\nint I422ToBGRA(const uint8* src_y, int src_stride_y,\n               const uint8* src_u, int src_stride_u,\n               const uint8* src_v, int src_stride_v,\n               uint8* dst_bgra, int dst_stride_bgra,\n               int width, int height);\n\n// Convert I422 to ABGR.\nLIBYUV_API\nint I422ToABGR(const uint8* src_y, int src_stride_y,\n               const uint8* src_u, int src_stride_u,\n               const uint8* src_v, int src_stride_v,\n               uint8* dst_abgr, int dst_stride_abgr,\n               int width, int height);\n\n// Convert I422 to RGBA.\nLIBYUV_API\nint I422ToRGBA(const uint8* src_y, int src_stride_y,\n               const uint8* src_u, int src_stride_u,\n               const uint8* src_v, int src_stride_v,\n               uint8* dst_rgba, int dst_stride_rgba,\n               int width, int height);\n\n// Draw a rectangle into I420.\nLIBYUV_API\nint I420Rect(uint8* dst_y, int dst_stride_y,\n             uint8* dst_u, int dst_stride_u,\n             uint8* dst_v, int dst_stride_v,\n             int x, int y, int width, int height,\n             int value_y, int value_u, int value_v);\n\n// Draw a rectangle into ARGB.\nLIBYUV_API\nint ARGBRect(uint8* dst_argb, int dst_stride_argb,\n             int x, int y, int width, int height, uint32 value);\n\n// Convert ARGB to gray scale ARGB.\nLIBYUV_API\nint ARGBGrayTo(const uint8* src_argb, int src_stride_argb,\n               uint8* dst_argb, int dst_stride_argb,\n               int width, int height);\n\n// Make a rectangle of ARGB gray scale.\nLIBYUV_API\nint ARGBGray(uint8* dst_argb, int dst_stride_argb,\n             int x, int y, int width, int height);\n\n// Make a rectangle of ARGB Sepia tone.\nLIBYUV_API\nint ARGBSepia(uint8* dst_argb, int dst_stride_argb,\n              int x, int y, int width, int height);\n\n// Apply a matrix rotation to each ARGB pixel.\n// matrix_argb is 4 signed ARGB values. -128 to 127 representing -2 to 2.\n// The first 4 coefficients apply to B, G, R, A and produce B of the output.\n// The next 4 coefficients apply to B, G, R, A and produce G of the output.\n// The next 4 coefficients apply to B, G, R, A and produce R of the output.\n// The last 4 coefficients apply to B, G, R, A and produce A of the output.\nLIBYUV_API\nint ARGBColorMatrix(const uint8* src_argb, int src_stride_argb,\n                    uint8* dst_argb, int dst_stride_argb,\n                    const int8* matrix_argb,\n                    int width, int height);\n\n// Deprecated. Use ARGBColorMatrix instead.\n// Apply a matrix rotation to each ARGB pixel.\n// matrix_argb is 3 signed ARGB values. -128 to 127 representing -1 to 1.\n// The first 4 coefficients apply to B, G, R, A and produce B of the output.\n// The next 4 coefficients apply to B, G, R, A and produce G of the output.\n// The last 4 coefficients apply to B, G, R, A and produce R of the output.\nLIBYUV_API\nint RGBColorMatrix(uint8* dst_argb, int dst_stride_argb,\n                   const int8* matrix_rgb,\n                   int x, int y, int width, int height);\n\n// Apply a color table each ARGB pixel.\n// Table contains 256 ARGB values.\nLIBYUV_API\nint ARGBColorTable(uint8* dst_argb, int dst_stride_argb,\n                   const uint8* table_argb,\n                   int x, int y, int width, int height);\n\n// Apply a color table each ARGB pixel but preserve destination alpha.\n// Table contains 256 ARGB values.\nLIBYUV_API\nint RGBColorTable(uint8* dst_argb, int dst_stride_argb,\n                  const uint8* table_argb,\n                  int x, int y, int width, int height);\n\n// Apply a luma/color table each ARGB pixel but preserve destination alpha.\n// Table contains 32768 values indexed by [Y][C] where 7 it 7 bit luma from\n// RGB (YJ style) and C is an 8 bit color component (R, G or B).\nLIBYUV_API\nint ARGBLumaColorTable(const uint8* src_argb, int src_stride_argb,\n                       uint8* dst_argb, int dst_stride_argb,\n                       const uint8* luma_rgb_table,\n                       int width, int height);\n\n// Apply a 3 term polynomial to ARGB values.\n// poly points to a 4x4 matrix.  The first row is constants.  The 2nd row is\n// coefficients for b, g, r and a.  The 3rd row is coefficients for b squared,\n// g squared, r squared and a squared.  The 4rd row is coefficients for b to\n// the 3, g to the 3, r to the 3 and a to the 3.  The values are summed and\n// result clamped to 0 to 255.\n// A polynomial approximation can be dirived using software such as 'R'.\n\nLIBYUV_API\nint ARGBPolynomial(const uint8* src_argb, int src_stride_argb,\n                   uint8* dst_argb, int dst_stride_argb,\n                   const float* poly,\n                   int width, int height);\n\n// Quantize a rectangle of ARGB. Alpha unaffected.\n// scale is a 16 bit fractional fixed point scaler between 0 and 65535.\n// interval_size should be a value between 1 and 255.\n// interval_offset should be a value between 0 and 255.\nLIBYUV_API\nint ARGBQuantize(uint8* dst_argb, int dst_stride_argb,\n                 int scale, int interval_size, int interval_offset,\n                 int x, int y, int width, int height);\n\n// Copy ARGB to ARGB.\nLIBYUV_API\nint ARGBCopy(const uint8* src_argb, int src_stride_argb,\n             uint8* dst_argb, int dst_stride_argb,\n             int width, int height);\n\n// Copy ARGB to ARGB.\nLIBYUV_API\nint ARGBCopyAlpha(const uint8* src_argb, int src_stride_argb,\n                  uint8* dst_argb, int dst_stride_argb,\n                  int width, int height);\n\n// Copy ARGB to ARGB.\nLIBYUV_API\nint ARGBCopyYToAlpha(const uint8* src_y, int src_stride_y,\n                     uint8* dst_argb, int dst_stride_argb,\n                     int width, int height);\n\ntypedef void (*ARGBBlendRow)(const uint8* src_argb0, const uint8* src_argb1,\n                             uint8* dst_argb, int width);\n\n// Get function to Alpha Blend ARGB pixels and store to destination.\nLIBYUV_API\nARGBBlendRow GetARGBBlend();\n\n// Alpha Blend ARGB images and store to destination.\n// Alpha of destination is set to 255.\nLIBYUV_API\nint ARGBBlend(const uint8* src_argb0, int src_stride_argb0,\n              const uint8* src_argb1, int src_stride_argb1,\n              uint8* dst_argb, int dst_stride_argb,\n              int width, int height);\n\n// Multiply ARGB image by ARGB image. Shifted down by 8. Saturates to 255.\nLIBYUV_API\nint ARGBMultiply(const uint8* src_argb0, int src_stride_argb0,\n                 const uint8* src_argb1, int src_stride_argb1,\n                 uint8* dst_argb, int dst_stride_argb,\n                 int width, int height);\n\n// Add ARGB image with ARGB image. Saturates to 255.\nLIBYUV_API\nint ARGBAdd(const uint8* src_argb0, int src_stride_argb0,\n            const uint8* src_argb1, int src_stride_argb1,\n            uint8* dst_argb, int dst_stride_argb,\n            int width, int height);\n\n// Subtract ARGB image (argb1) from ARGB image (argb0). Saturates to 0.\nLIBYUV_API\nint ARGBSubtract(const uint8* src_argb0, int src_stride_argb0,\n                 const uint8* src_argb1, int src_stride_argb1,\n                 uint8* dst_argb, int dst_stride_argb,\n                 int width, int height);\n\n// Convert I422 to YUY2.\nLIBYUV_API\nint I422ToYUY2(const uint8* src_y, int src_stride_y,\n               const uint8* src_u, int src_stride_u,\n               const uint8* src_v, int src_stride_v,\n               uint8* dst_frame, int dst_stride_frame,\n               int width, int height);\n\n// Convert I422 to UYVY.\nLIBYUV_API\nint I422ToUYVY(const uint8* src_y, int src_stride_y,\n               const uint8* src_u, int src_stride_u,\n               const uint8* src_v, int src_stride_v,\n               uint8* dst_frame, int dst_stride_frame,\n               int width, int height);\n\n// Convert unattentuated ARGB to preattenuated ARGB.\nLIBYUV_API\nint ARGBAttenuate(const uint8* src_argb, int src_stride_argb,\n                  uint8* dst_argb, int dst_stride_argb,\n                  int width, int height);\n\n// Convert preattentuated ARGB to unattenuated ARGB.\nLIBYUV_API\nint ARGBUnattenuate(const uint8* src_argb, int src_stride_argb,\n                    uint8* dst_argb, int dst_stride_argb,\n                    int width, int height);\n\n// Convert MJPG to ARGB.\nLIBYUV_API\nint MJPGToARGB(const uint8* sample, size_t sample_size,\n               uint8* argb, int argb_stride,\n               int w, int h, int dw, int dh);\n\n// Internal function - do not call directly.\n// Computes table of cumulative sum for image where the value is the sum\n// of all values above and to the left of the entry. Used by ARGBBlur.\nLIBYUV_API\nint ARGBComputeCumulativeSum(const uint8* src_argb, int src_stride_argb,\n                             int32* dst_cumsum, int dst_stride32_cumsum,\n                             int width, int height);\n\n// Blur ARGB image.\n// dst_cumsum table of width * (height + 1) * 16 bytes aligned to\n//   16 byte boundary.\n// dst_stride32_cumsum is number of ints in a row (width * 4).\n// radius is number of pixels around the center.  e.g. 1 = 3x3. 2=5x5.\n// Blur is optimized for radius of 5 (11x11) or less.\nLIBYUV_API\nint ARGBBlur(const uint8* src_argb, int src_stride_argb,\n             uint8* dst_argb, int dst_stride_argb,\n             int32* dst_cumsum, int dst_stride32_cumsum,\n             int width, int height, int radius);\n\n// Multiply ARGB image by ARGB value.\nLIBYUV_API\nint ARGBShade(const uint8* src_argb, int src_stride_argb,\n              uint8* dst_argb, int dst_stride_argb,\n              int width, int height, uint32 value);\n\n// Interpolate between two ARGB images using specified amount of interpolation\n// (0 to 255) and store to destination.\n// 'interpolation' is specified as 8 bit fraction where 0 means 100% src_argb0\n// and 255 means 1% src_argb0 and 99% src_argb1.\n// Internally uses ARGBScale bilinear filtering.\n// Caveat: This function will write up to 16 bytes beyond the end of dst_argb.\nLIBYUV_API\nint ARGBInterpolate(const uint8* src_argb0, int src_stride_argb0,\n                    const uint8* src_argb1, int src_stride_argb1,\n                    uint8* dst_argb, int dst_stride_argb,\n                    int width, int height, int interpolation);\n\n#if defined(__pnacl__) || defined(__CLR_VER) || defined(COVERAGE_ENABLED) || \\\n    defined(TARGET_IPHONE_SIMULATOR) || \\\n    (defined(__i386__) && !defined(__SSE2__)) || \\\n    ((defined(_MSC_VER) && !defined(__clang__)) && defined(__clang__))\n#define LIBYUV_DISABLE_X86\n#endif\n\n// Row functions for copying a pixels from a source with a slope to a row\n// of destination. Useful for scaling, rotation, mirror, texture mapping.\nLIBYUV_API\nvoid ARGBAffineRow_C(const uint8* src_argb, int src_argb_stride,\n                     uint8* dst_argb, const float* uv_dudv, int width);\n// The following are available on all x86 platforms:\n#if !defined(LIBYUV_DISABLE_X86) && \\\n    (defined(_M_IX86) || defined(__x86_64__) || defined(__i386__))\nLIBYUV_API\nvoid ARGBAffineRow_SSE2(const uint8* src_argb, int src_argb_stride,\n                        uint8* dst_argb, const float* uv_dudv, int width);\n#define HAS_ARGBAFFINEROW_SSE2\n#endif  // LIBYUV_DISABLE_X86\n\n// Shuffle ARGB channel order.  e.g. BGRA to ARGB.\n// shuffler is 16 bytes and must be aligned.\nLIBYUV_API\nint ARGBShuffle(const uint8* src_bgra, int src_stride_bgra,\n                uint8* dst_argb, int dst_stride_argb,\n                const uint8* shuffler, int width, int height);\n\n// Sobel ARGB effect with planar output.\nLIBYUV_API\nint ARGBSobelToPlane(const uint8* src_argb, int src_stride_argb,\n                     uint8* dst_y, int dst_stride_y,\n                     int width, int height);\n\n// Sobel ARGB effect.\nLIBYUV_API\nint ARGBSobel(const uint8* src_argb, int src_stride_argb,\n              uint8* dst_argb, int dst_stride_argb,\n              int width, int height);\n\n// Sobel ARGB effect w/ Sobel X, Sobel, Sobel Y in ARGB.\nLIBYUV_API\nint ARGBSobelXY(const uint8* src_argb, int src_stride_argb,\n                uint8* dst_argb, int dst_stride_argb,\n                int width, int height);\n\n#ifdef __cplusplus\n}  // extern \"C\"\n}  // namespace libyuv\n#endif\n\n#endif  // INCLUDE_LIBYUV_PLANAR_FUNCTIONS_H_  NOLINT\n"
  },
  {
    "path": "lib/libyuv/include/libyuv/rotate.h",
    "content": "/*\n *  Copyright 2011 The LibYuv Project Authors. All rights reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree. An additional intellectual property rights grant can be found\n *  in the file PATENTS. All contributing project authors may\n *  be found in the AUTHORS file in the root of the source tree.\n */\n\n#ifndef INCLUDE_LIBYUV_ROTATE_H_  // NOLINT\n#define INCLUDE_LIBYUV_ROTATE_H_\n\n#include \"basic_types.h\"\n\n#ifdef __cplusplus\nnamespace libyuv {\nextern \"C\" {\n#endif\n\n// Supported rotation.\ntypedef enum RotationMode {\n  kRotate0 = 0,  // No rotation.\n  kRotate90 = 90,  // Rotate 90 degrees clockwise.\n  kRotate180 = 180,  // Rotate 180 degrees.\n  kRotate270 = 270,  // Rotate 270 degrees clockwise.\n\n  // Deprecated.\n  kRotateNone = 0,\n  kRotateClockwise = 90,\n  kRotateCounterClockwise = 270,\n} RotationModeEnum;\n\n// Rotate I420 frame.\nLIBYUV_API\nint I420Rotate(const uint8* src_y, int src_stride_y,\n               const uint8* src_u, int src_stride_u,\n               const uint8* src_v, int src_stride_v,\n               uint8* dst_y, int dst_stride_y,\n               uint8* dst_u, int dst_stride_u,\n               uint8* dst_v, int dst_stride_v,\n               int src_width, int src_height, enum RotationMode mode);\n\n// Rotate NV12 input and store in I420.\nLIBYUV_API\nint NV12ToI420Rotate(const uint8* src_y, int src_stride_y,\n                     const uint8* src_uv, int src_stride_uv,\n                     uint8* dst_y, int dst_stride_y,\n                     uint8* dst_u, int dst_stride_u,\n                     uint8* dst_v, int dst_stride_v,\n                     int src_width, int src_height, enum RotationMode mode);\n\n// Rotate a plane by 0, 90, 180, or 270.\nLIBYUV_API\nint RotatePlane(const uint8* src, int src_stride,\n                uint8* dst, int dst_stride,\n                int src_width, int src_height, enum RotationMode mode);\n\n// Rotate planes by 90, 180, 270. Deprecated.\nLIBYUV_API\nvoid RotatePlane90(const uint8* src, int src_stride,\n                   uint8* dst, int dst_stride,\n                   int width, int height);\n\nLIBYUV_API\nvoid RotatePlane180(const uint8* src, int src_stride,\n                    uint8* dst, int dst_stride,\n                    int width, int height);\n\nLIBYUV_API\nvoid RotatePlane270(const uint8* src, int src_stride,\n                    uint8* dst, int dst_stride,\n                    int width, int height);\n\nLIBYUV_API\nvoid RotateUV90(const uint8* src, int src_stride,\n                uint8* dst_a, int dst_stride_a,\n                uint8* dst_b, int dst_stride_b,\n                int width, int height);\n\n// Rotations for when U and V are interleaved.\n// These functions take one input pointer and\n// split the data into two buffers while\n// rotating them. Deprecated.\nLIBYUV_API\nvoid RotateUV180(const uint8* src, int src_stride,\n                 uint8* dst_a, int dst_stride_a,\n                 uint8* dst_b, int dst_stride_b,\n                 int width, int height);\n\nLIBYUV_API\nvoid RotateUV270(const uint8* src, int src_stride,\n                 uint8* dst_a, int dst_stride_a,\n                 uint8* dst_b, int dst_stride_b,\n                 int width, int height);\n\n// The 90 and 270 functions are based on transposes.\n// Doing a transpose with reversing the read/write\n// order will result in a rotation by +- 90 degrees.\n// Deprecated.\nLIBYUV_API\nvoid TransposePlane(const uint8* src, int src_stride,\n                    uint8* dst, int dst_stride,\n                    int width, int height);\n\nLIBYUV_API\nvoid TransposeUV(const uint8* src, int src_stride,\n                 uint8* dst_a, int dst_stride_a,\n                 uint8* dst_b, int dst_stride_b,\n                 int width, int height);\n\n#ifdef __cplusplus\n}  // extern \"C\"\n}  // namespace libyuv\n#endif\n\n#endif  // INCLUDE_LIBYUV_ROTATE_H_  NOLINT\n"
  },
  {
    "path": "lib/libyuv/include/libyuv/rotate_argb.h",
    "content": "/*\n *  Copyright 2012 The LibYuv Project Authors. All rights reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree. An additional intellectual property rights grant can be found\n *  in the file PATENTS. All contributing project authors may\n *  be found in the AUTHORS file in the root of the source tree.\n */\n\n#ifndef INCLUDE_LIBYUV_ROTATE_ARGB_H_  // NOLINT\n#define INCLUDE_LIBYUV_ROTATE_ARGB_H_\n\n#include \"basic_types.h\"\n#include \"rotate.h\"  // For RotationMode.\n\n#ifdef __cplusplus\nnamespace libyuv {\nextern \"C\" {\n#endif\n\n// Rotate ARGB frame\nLIBYUV_API\nint ARGBRotate(const uint8* src_argb, int src_stride_argb,\n               uint8* dst_argb, int dst_stride_argb,\n               int src_width, int src_height, enum RotationMode mode);\n\n#ifdef __cplusplus\n}  // extern \"C\"\n}  // namespace libyuv\n#endif\n\n#endif  // INCLUDE_LIBYUV_ROTATE_ARGB_H_  NOLINT\n"
  },
  {
    "path": "lib/libyuv/include/libyuv/row.h",
    "content": "/*\n *  Copyright 2011 The LibYuv Project Authors. All rights reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree. An additional intellectual property rights grant can be found\n *  in the file PATENTS. All contributing project authors may\n *  be found in the AUTHORS file in the root of the source tree.\n */\n\n#ifndef INCLUDE_LIBYUV_ROW_H_  // NOLINT\n#define INCLUDE_LIBYUV_ROW_H_\n\n#include <stdlib.h>  // For malloc.\n\n#include \"basic_types.h\"\n\n#ifdef __cplusplus\nnamespace libyuv {\nextern \"C\" {\n#endif\n\n#define IS_ALIGNED(p, a) (!((uintptr_t)(p) & ((a) - 1)))\n\n#ifdef __cplusplus\n#define align_buffer_64(var, size)                                             \\\n  uint8* var##_mem = reinterpret_cast<uint8*>(malloc((size) + 63));            \\\n  uint8* var = reinterpret_cast<uint8*>                                        \\\n      ((reinterpret_cast<intptr_t>(var##_mem) + 63) & ~63)\n#else\n#define align_buffer_64(var, size)                                             \\\n  uint8* var##_mem = (uint8*)(malloc((size) + 63));               /* NOLINT */ \\\n  uint8* var = (uint8*)(((intptr_t)(var##_mem) + 63) & ~63)       /* NOLINT */\n#endif\n\n#define free_aligned_buffer_64(var) \\\n  free(var##_mem);  \\\n  var = 0\n\n#if defined(__pnacl__) || defined(__CLR_VER) || defined(COVERAGE_ENABLED) || \\\n    defined(TARGET_IPHONE_SIMULATOR) || \\\n    (defined(__i386__) && !defined(__SSE2__))\n#define LIBYUV_DISABLE_X86\n#endif\n// True if compiling for SSSE3 as a requirement.\n#if defined(__SSSE3__) || (defined(_M_IX86_FP) && (_M_IX86_FP >= 3))\n#define LIBYUV_SSSE3_ONLY\n#endif\n\n#if defined(__native_client__)\n#define LIBYUV_DISABLE_NEON\n#endif\n// clang >= 3.5.0 required for Arm64.\n#if defined(__clang__) && defined(__aarch64__) && !defined(LIBYUV_DISABLE_NEON)\n#if (__clang_major__ < 3) || (__clang_major__ == 3 && (__clang_minor__ < 5))\n#define LIBYUV_DISABLE_NEON\n#endif  // clang >= 3.5\n#endif  // __clang__\n\n// The following are available on all x86 platforms:\n#if !defined(LIBYUV_DISABLE_X86) && \\\n    (defined(_M_IX86) || defined(__x86_64__) || defined(__i386__))\n// Conversions:\n#define HAS_ABGRTOUVROW_SSSE3\n#define HAS_ABGRTOYROW_SSSE3\n#define HAS_ARGB1555TOARGBROW_SSE2\n#define HAS_ARGB4444TOARGBROW_SSE2\n#define HAS_ARGBSETROW_X86\n#define HAS_ARGBSHUFFLEROW_SSE2\n#define HAS_ARGBSHUFFLEROW_SSSE3\n#define HAS_ARGBTOARGB1555ROW_SSE2\n#define HAS_ARGBTOARGB4444ROW_SSE2\n#define HAS_ARGBTORAWROW_SSSE3\n#define HAS_ARGBTORGB24ROW_SSSE3\n#define HAS_ARGBTORGB565ROW_SSE2\n#define HAS_ARGBTOUV422ROW_SSSE3\n#define HAS_ARGBTOUV444ROW_SSSE3\n#define HAS_ARGBTOUVJROW_SSSE3\n#define HAS_ARGBTOUVROW_SSSE3\n#define HAS_ARGBTOYJROW_SSSE3\n#define HAS_ARGBTOYROW_SSSE3\n#define HAS_BGRATOUVROW_SSSE3\n#define HAS_BGRATOYROW_SSSE3\n#define HAS_COPYROW_ERMS\n#define HAS_COPYROW_SSE2\n#define HAS_I400TOARGBROW_SSE2\n#define HAS_I411TOARGBROW_SSSE3\n#define HAS_I422TOABGRROW_SSSE3\n#define HAS_I422TOARGB1555ROW_SSSE3\n#define HAS_I422TOARGB4444ROW_SSSE3\n#define HAS_I422TOARGBROW_SSSE3\n#define HAS_I422TOBGRAROW_SSSE3\n#define HAS_I422TORAWROW_SSSE3\n#define HAS_I422TORGB24ROW_SSSE3\n#define HAS_I422TORGB565ROW_SSSE3\n#define HAS_I422TORGBAROW_SSSE3\n#define HAS_I422TOUYVYROW_SSE2\n#define HAS_I422TOYUY2ROW_SSE2\n#define HAS_I444TOARGBROW_SSSE3\n#define HAS_J400TOARGBROW_SSE2\n#define HAS_J422TOARGBROW_SSSE3\n#define HAS_MERGEUVROW_SSE2\n#define HAS_MIRRORROW_SSE2\n#define HAS_MIRRORROW_SSSE3\n#define HAS_MIRRORROW_UV_SSSE3\n#define HAS_MIRRORUVROW_SSSE3\n#define HAS_NV12TOARGBROW_SSSE3\n#define HAS_NV12TORGB565ROW_SSSE3\n#define HAS_NV21TOARGBROW_SSSE3\n#define HAS_NV21TORGB565ROW_SSSE3\n#define HAS_RAWTOARGBROW_SSSE3\n#define HAS_RAWTOYROW_SSSE3\n#define HAS_RGB24TOARGBROW_SSSE3\n#define HAS_RGB24TOYROW_SSSE3\n#define HAS_RGB565TOARGBROW_SSE2\n#define HAS_RGBATOUVROW_SSSE3\n#define HAS_RGBATOYROW_SSSE3\n#define HAS_SETROW_ERMS\n#define HAS_SETROW_X86\n#define HAS_SPLITUVROW_SSE2\n#define HAS_UYVYTOARGBROW_SSSE3\n#define HAS_UYVYTOUV422ROW_SSE2\n#define HAS_UYVYTOUVROW_SSE2\n#define HAS_UYVYTOYROW_SSE2\n#define HAS_YUY2TOARGBROW_SSSE3\n#define HAS_YUY2TOUV422ROW_SSE2\n#define HAS_YUY2TOUVROW_SSE2\n#define HAS_YUY2TOYROW_SSE2\n\n// Effects:\n#define HAS_ARGBADDROW_SSE2\n#define HAS_ARGBAFFINEROW_SSE2\n#define HAS_ARGBATTENUATEROW_SSSE3\n#define HAS_ARGBBLENDROW_SSSE3\n#define HAS_ARGBCOLORMATRIXROW_SSSE3\n#define HAS_ARGBCOLORTABLEROW_X86\n#define HAS_ARGBCOPYALPHAROW_SSE2\n#define HAS_ARGBCOPYYTOALPHAROW_SSE2\n#define HAS_ARGBGRAYROW_SSSE3\n#define HAS_ARGBLUMACOLORTABLEROW_SSSE3\n#define HAS_ARGBMIRRORROW_SSE2\n#define HAS_ARGBMULTIPLYROW_SSE2\n#define HAS_ARGBPOLYNOMIALROW_SSE2\n#define HAS_ARGBQUANTIZEROW_SSE2\n#define HAS_ARGBSEPIAROW_SSSE3\n#define HAS_ARGBSHADEROW_SSE2\n#define HAS_ARGBSUBTRACTROW_SSE2\n#define HAS_ARGBUNATTENUATEROW_SSE2\n#define HAS_COMPUTECUMULATIVESUMROW_SSE2\n#define HAS_CUMULATIVESUMTOAVERAGEROW_SSE2\n#define HAS_INTERPOLATEROW_SSE2\n#define HAS_INTERPOLATEROW_SSSE3\n#define HAS_RGBCOLORTABLEROW_X86\n#define HAS_SOBELROW_SSE2\n#define HAS_SOBELTOPLANEROW_SSE2\n#define HAS_SOBELXROW_SSE2\n#define HAS_SOBELXYROW_SSE2\n#define HAS_SOBELYROW_SSE2\n#endif\n\n// The following are available on x64 Visual C and clangcl.\n#if !defined(LIBYUV_DISABLE_X86) && defined (_M_X64) && \\\n    (!defined(__clang__) || defined(__SSSE3__))\n#define HAS_I422TOARGBROW_SSSE3\n#endif\n\n// GCC >= 4.7.0 required for AVX2.\n#if defined(__GNUC__) && (defined(__x86_64__) || defined(__i386__))\n#if (__GNUC__ > 4) || (__GNUC__ == 4 && (__GNUC_MINOR__ >= 7))\n#define GCC_HAS_AVX2 1\n#endif  // GNUC >= 4.7\n#endif  // __GNUC__\n\n// clang >= 3.4.0 required for AVX2.\n#if defined(__clang__) && (defined(__x86_64__) || defined(__i386__))\n#if (__clang_major__ > 3) || (__clang_major__ == 3 && (__clang_minor__ >= 4))\n#define CLANG_HAS_AVX2 1\n#endif  // clang >= 3.4\n#endif  // __clang__\n\n// Visual C 2012 required for AVX2.\n#if defined(_M_IX86) && !defined(__clang__) && \\\n    defined(_MSC_VER) && _MSC_VER >= 1700\n#define VISUALC_HAS_AVX2 1\n#endif  // VisualStudio >= 2012\n\n// The following are available require VS2012.  Port to GCC.\n#if !defined(LIBYUV_DISABLE_X86) && defined(VISUALC_HAS_AVX2)\n#define HAS_ARGB1555TOARGBROW_AVX2\n#define HAS_ARGB4444TOARGBROW_AVX2\n#define HAS_ARGBTOARGB1555ROW_AVX2\n#define HAS_ARGBTOARGB4444ROW_AVX2\n#define HAS_ARGBTORGB565DITHERROW_AVX2\n#define HAS_ARGBTORGB565DITHERROW_SSE2\n#define HAS_ARGBTORGB565ROW_AVX2\n#define HAS_I411TOARGBROW_AVX2\n#define HAS_I422TOARGB1555ROW_AVX2\n#define HAS_I422TOARGB4444ROW_AVX2\n#define HAS_I422TORGB565ROW_AVX2\n#define HAS_I444TOARGBROW_AVX2\n#define HAS_J400TOARGBROW_AVX2\n#define HAS_NV12TOARGBROW_AVX2\n#define HAS_NV12TORGB565ROW_AVX2\n#define HAS_NV21TOARGBROW_AVX2\n#define HAS_NV21TORGB565ROW_AVX2\n#define HAS_RGB565TOARGBROW_AVX2\n#endif\n\n// The following are available on all x86 platforms, but\n// require VS2012, clang 3.4 or gcc 4.7.\n// The code supports NaCL but requires a new compiler and validator.\n#if !defined(LIBYUV_DISABLE_X86) && (defined(VISUALC_HAS_AVX2) || \\\n    defined(CLANG_HAS_AVX2) || defined(GCC_HAS_AVX2))\n#define HAS_ARGBCOPYALPHAROW_AVX2\n#define HAS_ARGBCOPYYTOALPHAROW_AVX2\n#define HAS_ARGBMIRRORROW_AVX2\n#define HAS_ARGBPOLYNOMIALROW_AVX2\n#define HAS_ARGBSHUFFLEROW_AVX2\n#define HAS_ARGBTOUVROW_AVX2\n#define HAS_ARGBTOYJROW_AVX2\n#define HAS_ARGBTOYROW_AVX2\n#define HAS_COPYROW_AVX\n#define HAS_I400TOARGBROW_AVX2\n#define HAS_I422TOABGRROW_AVX2\n#define HAS_I422TOARGBROW_AVX2\n#define HAS_I422TOBGRAROW_AVX2\n#define HAS_I422TORAWROW_AVX2\n#define HAS_I422TORGB24ROW_AVX2\n#define HAS_I422TORGBAROW_AVX2\n#define HAS_INTERPOLATEROW_AVX2\n#define HAS_J422TOARGBROW_AVX2\n#define HAS_MERGEUVROW_AVX2\n#define HAS_MIRRORROW_AVX2\n#define HAS_SPLITUVROW_AVX2\n#define HAS_UYVYTOARGBROW_AVX2\n#define HAS_UYVYTOUV422ROW_AVX2\n#define HAS_UYVYTOUVROW_AVX2\n#define HAS_UYVYTOYROW_AVX2\n#define HAS_YUY2TOARGBROW_AVX2\n#define HAS_YUY2TOUV422ROW_AVX2\n#define HAS_YUY2TOUVROW_AVX2\n#define HAS_YUY2TOYROW_AVX2\n\n// Effects:\n#define HAS_ARGBADDROW_AVX2\n#define HAS_ARGBATTENUATEROW_AVX2\n#define HAS_ARGBMULTIPLYROW_AVX2\n#define HAS_ARGBSUBTRACTROW_AVX2\n#define HAS_ARGBUNATTENUATEROW_AVX2\n#endif\n\n// The following are disabled when SSSE3 is available:\n#if !defined(LIBYUV_DISABLE_X86) && \\\n    (defined(_M_IX86) || defined(__x86_64__) || defined(__i386__)) && \\\n    !defined(LIBYUV_SSSE3_ONLY)\n#define HAS_ARGBATTENUATEROW_SSE2\n#define HAS_ARGBBLENDROW_SSE2\n#define HAS_MIRRORROW_SSE2\n#endif\n\n// The following are available on Neon platforms:\n#if !defined(LIBYUV_DISABLE_NEON) && \\\n    (defined(__aarch64__) || defined(__ARM_NEON__) || defined(LIBYUV_NEON))\n#define HAS_ABGRTOUVROW_NEON\n#define HAS_ABGRTOYROW_NEON\n#define HAS_ARGB1555TOARGBROW_NEON\n#define HAS_ARGB1555TOUVROW_NEON\n#define HAS_ARGB1555TOYROW_NEON\n#define HAS_ARGB4444TOARGBROW_NEON\n#define HAS_ARGB4444TOUVROW_NEON\n#define HAS_ARGB4444TOYROW_NEON\n#define HAS_ARGBTOARGB1555ROW_NEON\n#define HAS_ARGBTOARGB4444ROW_NEON\n#define HAS_ARGBTORAWROW_NEON\n#define HAS_ARGBTORGB24ROW_NEON\n#define HAS_ARGBTORGB565ROW_NEON\n#define HAS_ARGBTOUV411ROW_NEON\n#define HAS_ARGBTOUV422ROW_NEON\n#define HAS_ARGBTOUV444ROW_NEON\n#define HAS_ARGBTOUVJROW_NEON\n#define HAS_ARGBTOUVROW_NEON\n#define HAS_ARGBTOYJROW_NEON\n#define HAS_ARGBTOYROW_NEON\n#define HAS_BGRATOUVROW_NEON\n#define HAS_BGRATOYROW_NEON\n#define HAS_COPYROW_NEON\n#define HAS_J400TOARGBROW_NEON\n#define HAS_I411TOARGBROW_NEON\n#define HAS_I422TOABGRROW_NEON\n#define HAS_I422TOARGB1555ROW_NEON\n#define HAS_I422TOARGB4444ROW_NEON\n#define HAS_I422TOARGBROW_NEON\n#define HAS_I422TOBGRAROW_NEON\n#define HAS_I422TORAWROW_NEON\n#define HAS_I422TORGB24ROW_NEON\n#define HAS_I422TORGB565ROW_NEON\n#define HAS_I422TORGBAROW_NEON\n#define HAS_I422TOUYVYROW_NEON\n#define HAS_I422TOYUY2ROW_NEON\n#define HAS_I444TOARGBROW_NEON\n#define HAS_MERGEUVROW_NEON\n#define HAS_MIRRORROW_NEON\n#define HAS_MIRRORUVROW_NEON\n#define HAS_NV12TOARGBROW_NEON\n#define HAS_NV12TORGB565ROW_NEON\n#define HAS_NV21TOARGBROW_NEON\n#define HAS_NV21TORGB565ROW_NEON\n#define HAS_RAWTOARGBROW_NEON\n#define HAS_RAWTOUVROW_NEON\n#define HAS_RAWTOYROW_NEON\n#define HAS_RGB24TOARGBROW_NEON\n#define HAS_RGB24TOUVROW_NEON\n#define HAS_RGB24TOYROW_NEON\n#define HAS_RGB565TOARGBROW_NEON\n#define HAS_RGB565TOUVROW_NEON\n#define HAS_RGB565TOYROW_NEON\n#define HAS_RGBATOUVROW_NEON\n#define HAS_RGBATOYROW_NEON\n#define HAS_SETROW_NEON\n#define HAS_ARGBSETROW_NEON\n#define HAS_SPLITUVROW_NEON\n#define HAS_UYVYTOARGBROW_NEON\n#define HAS_UYVYTOUV422ROW_NEON\n#define HAS_UYVYTOUVROW_NEON\n#define HAS_UYVYTOYROW_NEON\n#define HAS_I400TOARGBROW_NEON\n#define HAS_YUY2TOARGBROW_NEON\n#define HAS_YUY2TOUV422ROW_NEON\n#define HAS_YUY2TOUVROW_NEON\n#define HAS_YUY2TOYROW_NEON\n#define HAS_ARGBTORGB565DITHERROW_NEON\n\n// Effects:\n#define HAS_ARGBADDROW_NEON\n#define HAS_ARGBATTENUATEROW_NEON\n#define HAS_ARGBBLENDROW_NEON\n#define HAS_ARGBGRAYROW_NEON\n#define HAS_ARGBMIRRORROW_NEON\n#define HAS_ARGBMULTIPLYROW_NEON\n#define HAS_ARGBQUANTIZEROW_NEON\n#define HAS_ARGBSEPIAROW_NEON\n#define HAS_ARGBSHADEROW_NEON\n#define HAS_ARGBSUBTRACTROW_NEON\n#define HAS_INTERPOLATEROW_NEON\n#define HAS_SOBELROW_NEON\n#define HAS_SOBELTOPLANEROW_NEON\n#define HAS_SOBELXROW_NEON\n#define HAS_SOBELXYROW_NEON\n#define HAS_SOBELYROW_NEON\n#define HAS_ARGBCOLORMATRIXROW_NEON\n#define HAS_ARGBSHUFFLEROW_NEON\n#endif\n\n// The following are available on Mips platforms:\n#if !defined(LIBYUV_DISABLE_MIPS) && defined(__mips__) && \\\n    (_MIPS_SIM == _MIPS_SIM_ABI32) && (__mips_isa_rev < 6)\n#define HAS_COPYROW_MIPS\n#if defined(__mips_dsp) && (__mips_dsp_rev >= 2)\n#define HAS_I422TOABGRROW_MIPS_DSPR2\n#define HAS_I422TOARGBROW_MIPS_DSPR2\n#define HAS_I422TOBGRAROW_MIPS_DSPR2\n#define HAS_INTERPOLATEROW_MIPS_DSPR2\n#define HAS_MIRRORROW_MIPS_DSPR2\n#define HAS_MIRRORUVROW_MIPS_DSPR2\n#define HAS_SPLITUVROW_MIPS_DSPR2\n#endif\n#endif\n\n#if defined(_MSC_VER) && !defined(__CLR_VER)\n#define SIMD_ALIGNED(var) __declspec(align(16)) var\n#define SIMD_ALIGNED32(var) __declspec(align(64)) var\ntypedef __declspec(align(16)) int16 vec16[8];\ntypedef __declspec(align(16)) int32 vec32[4];\ntypedef __declspec(align(16)) int8 vec8[16];\ntypedef __declspec(align(16)) uint16 uvec16[8];\ntypedef __declspec(align(16)) uint32 uvec32[4];\ntypedef __declspec(align(16)) uint8 uvec8[16];\ntypedef __declspec(align(32)) int16 lvec16[16];\ntypedef __declspec(align(32)) int32 lvec32[8];\ntypedef __declspec(align(32)) int8 lvec8[32];\ntypedef __declspec(align(32)) uint16 ulvec16[16];\ntypedef __declspec(align(32)) uint32 ulvec32[8];\ntypedef __declspec(align(32)) uint8 ulvec8[32];\n#elif defined(__GNUC__)\n// Caveat GCC 4.2 to 4.7 have a known issue using vectors with const.\n#define SIMD_ALIGNED(var) var __attribute__((aligned(16)))\n#define SIMD_ALIGNED32(var) var __attribute__((aligned(64)))\ntypedef int16 __attribute__((vector_size(16))) vec16;\ntypedef int32 __attribute__((vector_size(16))) vec32;\ntypedef int8 __attribute__((vector_size(16))) vec8;\ntypedef uint16 __attribute__((vector_size(16))) uvec16;\ntypedef uint32 __attribute__((vector_size(16))) uvec32;\ntypedef uint8 __attribute__((vector_size(16))) uvec8;\ntypedef int16 __attribute__((vector_size(32))) lvec16;\ntypedef int32 __attribute__((vector_size(32))) lvec32;\ntypedef int8 __attribute__((vector_size(32))) lvec8;\ntypedef uint16 __attribute__((vector_size(32))) ulvec16;\ntypedef uint32 __attribute__((vector_size(32))) ulvec32;\ntypedef uint8 __attribute__((vector_size(32))) ulvec8;\n#else\n#define SIMD_ALIGNED(var) var\n#define SIMD_ALIGNED32(var) var\ntypedef int16 vec16[8];\ntypedef int32 vec32[4];\ntypedef int8 vec8[16];\ntypedef uint16 uvec16[8];\ntypedef uint32 uvec32[4];\ntypedef uint8 uvec8[16];\ntypedef int16 lvec16[16];\ntypedef int32 lvec32[8];\ntypedef int8 lvec8[32];\ntypedef uint16 ulvec16[16];\ntypedef uint32 ulvec32[8];\ntypedef uint8 ulvec8[32];\n#endif\n\n#if defined(__APPLE__) || defined(__x86_64__) || defined(__llvm__)\n#define OMITFP\n#else\n#define OMITFP __attribute__((optimize(\"omit-frame-pointer\")))\n#endif\n\n// NaCL macros for GCC x86 and x64.\n#if defined(__native_client__)\n#define LABELALIGN \".p2align 5\\n\"\n#else\n#define LABELALIGN\n#endif\n#if defined(__native_client__) && defined(__x86_64__)\n// r14 is used for MEMOP macros.\n#define NACL_R14 \"r14\",\n#define BUNDLELOCK \".bundle_lock\\n\"\n#define BUNDLEUNLOCK \".bundle_unlock\\n\"\n#define MEMACCESS(base) \"%%nacl:(%%r15,%q\" #base \")\"\n#define MEMACCESS2(offset, base) \"%%nacl:\" #offset \"(%%r15,%q\" #base \")\"\n#define MEMLEA(offset, base) #offset \"(%q\" #base \")\"\n#define MEMLEA3(offset, index, scale) \\\n    #offset \"(,%q\" #index \",\" #scale \")\"\n#define MEMLEA4(offset, base, index, scale) \\\n    #offset \"(%q\" #base \",%q\" #index \",\" #scale \")\"\n#define MEMMOVESTRING(s, d) \"%%nacl:(%q\" #s \"),%%nacl:(%q\" #d \"), %%r15\"\n#define MEMSTORESTRING(reg, d) \"%%\" #reg \",%%nacl:(%q\" #d \"), %%r15\"\n#define MEMOPREG(opcode, offset, base, index, scale, reg) \\\n    BUNDLELOCK \\\n    \"lea \" #offset \"(%q\" #base \",%q\" #index \",\" #scale \"),%%r14d\\n\" \\\n    #opcode \" (%%r15,%%r14),%%\" #reg \"\\n\" \\\n    BUNDLEUNLOCK\n#define MEMOPMEM(opcode, reg, offset, base, index, scale) \\\n    BUNDLELOCK \\\n    \"lea \" #offset \"(%q\" #base \",%q\" #index \",\" #scale \"),%%r14d\\n\" \\\n    #opcode \" %%\" #reg \",(%%r15,%%r14)\\n\" \\\n    BUNDLEUNLOCK\n#define MEMOPARG(opcode, offset, base, index, scale, arg) \\\n    BUNDLELOCK \\\n    \"lea \" #offset \"(%q\" #base \",%q\" #index \",\" #scale \"),%%r14d\\n\" \\\n    #opcode \" (%%r15,%%r14),%\" #arg \"\\n\" \\\n    BUNDLEUNLOCK\n#define VMEMOPREG(opcode, offset, base, index, scale, reg1, reg2) \\\n    BUNDLELOCK \\\n    \"lea \" #offset \"(%q\" #base \",%q\" #index \",\" #scale \"),%%r14d\\n\" \\\n    #opcode \" (%%r15,%%r14),%%\" #reg1 \",%%\" #reg2 \"\\n\" \\\n    BUNDLEUNLOCK\n#define VEXTOPMEM(op, sel, reg, offset, base, index, scale) \\\n    BUNDLELOCK \\\n    \"lea \" #offset \"(%q\" #base \",%q\" #index \",\" #scale \"),%%r14d\\n\" \\\n    #op \" $\" #sel \",%%\" #reg \",(%%r15,%%r14)\\n\" \\\n    BUNDLEUNLOCK\n#else  // defined(__native_client__) && defined(__x86_64__)\n#define NACL_R14\n#define BUNDLEALIGN\n#define MEMACCESS(base) \"(%\" #base \")\"\n#define MEMACCESS2(offset, base) #offset \"(%\" #base \")\"\n#define MEMLEA(offset, base) #offset \"(%\" #base \")\"\n#define MEMLEA3(offset, index, scale) \\\n    #offset \"(,%\" #index \",\" #scale \")\"\n#define MEMLEA4(offset, base, index, scale) \\\n    #offset \"(%\" #base \",%\" #index \",\" #scale \")\"\n#define MEMMOVESTRING(s, d)\n#define MEMSTORESTRING(reg, d)\n#define MEMOPREG(opcode, offset, base, index, scale, reg) \\\n    #opcode \" \" #offset \"(%\" #base \",%\" #index \",\" #scale \"),%%\" #reg \"\\n\"\n#define MEMOPMEM(opcode, reg, offset, base, index, scale) \\\n    #opcode \" %%\" #reg \",\"#offset \"(%\" #base \",%\" #index \",\" #scale \")\\n\"\n#define MEMOPARG(opcode, offset, base, index, scale, arg) \\\n    #opcode \" \" #offset \"(%\" #base \",%\" #index \",\" #scale \"),%\" #arg \"\\n\"\n#define VMEMOPREG(opcode, offset, base, index, scale, reg1, reg2) \\\n    #opcode \" \" #offset \"(%\" #base \",%\" #index \",\" #scale \"),%%\" #reg1 \",%%\" \\\n    #reg2 \"\\n\"\n#define VEXTOPMEM(op, sel, reg, offset, base, index, scale) \\\n    #op \" $\" #sel \",%%\" #reg \",\"#offset \"(%\" #base \",%\" #index \",\" #scale \")\\n\"\n#endif  // defined(__native_client__) && defined(__x86_64__)\n\n#if defined(__arm__) || defined(__aarch64__)\n#undef MEMACCESS\n#if defined(__native_client__)\n#define MEMACCESS(base) \".p2align 3\\nbic %\" #base \", #0xc0000000\\n\"\n#else\n#define MEMACCESS(base)\n#endif\n#endif\n\nvoid I444ToARGBRow_NEON(const uint8* src_y,\n                        const uint8* src_u,\n                        const uint8* src_v,\n                        uint8* dst_argb,\n                        int width);\nvoid I422ToARGBRow_NEON(const uint8* src_y,\n                        const uint8* src_u,\n                        const uint8* src_v,\n                        uint8* dst_argb,\n                        int width);\nvoid I411ToARGBRow_NEON(const uint8* src_y,\n                        const uint8* src_u,\n                        const uint8* src_v,\n                        uint8* dst_argb,\n                        int width);\nvoid I422ToBGRARow_NEON(const uint8* src_y,\n                        const uint8* src_u,\n                        const uint8* src_v,\n                        uint8* dst_bgra,\n                        int width);\nvoid I422ToABGRRow_NEON(const uint8* src_y,\n                        const uint8* src_u,\n                        const uint8* src_v,\n                        uint8* dst_abgr,\n                        int width);\nvoid I422ToRGBARow_NEON(const uint8* src_y,\n                        const uint8* src_u,\n                        const uint8* src_v,\n                        uint8* dst_rgba,\n                        int width);\nvoid I422ToRGB24Row_NEON(const uint8* src_y,\n                         const uint8* src_u,\n                         const uint8* src_v,\n                         uint8* dst_rgb24,\n                         int width);\nvoid I422ToRAWRow_NEON(const uint8* src_y,\n                       const uint8* src_u,\n                       const uint8* src_v,\n                       uint8* dst_raw,\n                       int width);\nvoid I422ToRGB565Row_NEON(const uint8* src_y,\n                          const uint8* src_u,\n                          const uint8* src_v,\n                          uint8* dst_rgb565,\n                          int width);\nvoid I422ToARGB1555Row_NEON(const uint8* src_y,\n                            const uint8* src_u,\n                            const uint8* src_v,\n                            uint8* dst_argb1555,\n                            int width);\nvoid I422ToARGB4444Row_NEON(const uint8* src_y,\n                            const uint8* src_u,\n                            const uint8* src_v,\n                            uint8* dst_argb4444,\n                            int width);\nvoid NV12ToARGBRow_NEON(const uint8* src_y,\n                        const uint8* src_uv,\n                        uint8* dst_argb,\n                        int width);\nvoid NV21ToARGBRow_NEON(const uint8* src_y,\n                        const uint8* src_vu,\n                        uint8* dst_argb,\n                        int width);\nvoid NV12ToRGB565Row_NEON(const uint8* src_y,\n                          const uint8* src_uv,\n                          uint8* dst_rgb565,\n                          int width);\nvoid NV21ToRGB565Row_NEON(const uint8* src_y,\n                          const uint8* src_vu,\n                          uint8* dst_rgb565,\n                          int width);\nvoid YUY2ToARGBRow_NEON(const uint8* src_yuy2,\n                        uint8* dst_argb,\n                        int width);\nvoid UYVYToARGBRow_NEON(const uint8* src_uyvy,\n                        uint8* dst_argb,\n                        int width);\n\nvoid ARGBToYRow_AVX2(const uint8* src_argb, uint8* dst_y, int pix);\nvoid ARGBToYRow_Any_AVX2(const uint8* src_argb, uint8* dst_y, int pix);\nvoid ARGBToYRow_SSSE3(const uint8* src_argb, uint8* dst_y, int pix);\nvoid ARGBToYJRow_AVX2(const uint8* src_argb, uint8* dst_y, int pix);\nvoid ARGBToYJRow_Any_AVX2(const uint8* src_argb, uint8* dst_y, int pix);\nvoid ARGBToYJRow_SSSE3(const uint8* src_argb, uint8* dst_y, int pix);\nvoid BGRAToYRow_SSSE3(const uint8* src_bgra, uint8* dst_y, int pix);\nvoid ABGRToYRow_SSSE3(const uint8* src_abgr, uint8* dst_y, int pix);\nvoid RGBAToYRow_SSSE3(const uint8* src_rgba, uint8* dst_y, int pix);\nvoid RGB24ToYRow_SSSE3(const uint8* src_rgb24, uint8* dst_y, int pix);\nvoid RAWToYRow_SSSE3(const uint8* src_raw, uint8* dst_y, int pix);\nvoid ARGBToYRow_NEON(const uint8* src_argb, uint8* dst_y, int pix);\nvoid ARGBToYJRow_NEON(const uint8* src_argb, uint8* dst_y, int pix);\nvoid ARGBToUV444Row_NEON(const uint8* src_argb, uint8* dst_u, uint8* dst_v,\n                         int pix);\nvoid ARGBToUV422Row_NEON(const uint8* src_argb, uint8* dst_u, uint8* dst_v,\n                         int pix);\nvoid ARGBToUV411Row_NEON(const uint8* src_argb, uint8* dst_u, uint8* dst_v,\n                         int pix);\nvoid ARGBToUVRow_NEON(const uint8* src_argb, int src_stride_argb,\n                      uint8* dst_u, uint8* dst_v, int pix);\nvoid ARGBToUVJRow_NEON(const uint8* src_argb, int src_stride_argb,\n                       uint8* dst_u, uint8* dst_v, int pix);\nvoid BGRAToUVRow_NEON(const uint8* src_bgra, int src_stride_bgra,\n                      uint8* dst_u, uint8* dst_v, int pix);\nvoid ABGRToUVRow_NEON(const uint8* src_abgr, int src_stride_abgr,\n                      uint8* dst_u, uint8* dst_v, int pix);\nvoid RGBAToUVRow_NEON(const uint8* src_rgba, int src_stride_rgba,\n                      uint8* dst_u, uint8* dst_v, int pix);\nvoid RGB24ToUVRow_NEON(const uint8* src_rgb24, int src_stride_rgb24,\n                       uint8* dst_u, uint8* dst_v, int pix);\nvoid RAWToUVRow_NEON(const uint8* src_raw, int src_stride_raw,\n                     uint8* dst_u, uint8* dst_v, int pix);\nvoid RGB565ToUVRow_NEON(const uint8* src_rgb565, int src_stride_rgb565,\n                        uint8* dst_u, uint8* dst_v, int pix);\nvoid ARGB1555ToUVRow_NEON(const uint8* src_argb1555, int src_stride_argb1555,\n                          uint8* dst_u, uint8* dst_v, int pix);\nvoid ARGB4444ToUVRow_NEON(const uint8* src_argb4444, int src_stride_argb4444,\n                          uint8* dst_u, uint8* dst_v, int pix);\nvoid BGRAToYRow_NEON(const uint8* src_bgra, uint8* dst_y, int pix);\nvoid ABGRToYRow_NEON(const uint8* src_abgr, uint8* dst_y, int pix);\nvoid RGBAToYRow_NEON(const uint8* src_rgba, uint8* dst_y, int pix);\nvoid RGB24ToYRow_NEON(const uint8* src_rgb24, uint8* dst_y, int pix);\nvoid RAWToYRow_NEON(const uint8* src_raw, uint8* dst_y, int pix);\nvoid RGB565ToYRow_NEON(const uint8* src_rgb565, uint8* dst_y, int pix);\nvoid ARGB1555ToYRow_NEON(const uint8* src_argb1555, uint8* dst_y, int pix);\nvoid ARGB4444ToYRow_NEON(const uint8* src_argb4444, uint8* dst_y, int pix);\nvoid ARGBToYRow_C(const uint8* src_argb, uint8* dst_y, int pix);\nvoid ARGBToYJRow_C(const uint8* src_argb, uint8* dst_y, int pix);\nvoid BGRAToYRow_C(const uint8* src_bgra, uint8* dst_y, int pix);\nvoid ABGRToYRow_C(const uint8* src_abgr, uint8* dst_y, int pix);\nvoid RGBAToYRow_C(const uint8* src_rgba, uint8* dst_y, int pix);\nvoid RGB24ToYRow_C(const uint8* src_rgb24, uint8* dst_y, int pix);\nvoid RAWToYRow_C(const uint8* src_raw, uint8* dst_y, int pix);\nvoid RGB565ToYRow_C(const uint8* src_rgb565, uint8* dst_y, int pix);\nvoid ARGB1555ToYRow_C(const uint8* src_argb1555, uint8* dst_y, int pix);\nvoid ARGB4444ToYRow_C(const uint8* src_argb4444, uint8* dst_y, int pix);\nvoid ARGBToYRow_Any_SSSE3(const uint8* src_argb, uint8* dst_y, int pix);\nvoid ARGBToYJRow_Any_SSSE3(const uint8* src_argb, uint8* dst_y, int pix);\nvoid BGRAToYRow_Any_SSSE3(const uint8* src_bgra, uint8* dst_y, int pix);\nvoid ABGRToYRow_Any_SSSE3(const uint8* src_abgr, uint8* dst_y, int pix);\nvoid RGBAToYRow_Any_SSSE3(const uint8* src_rgba, uint8* dst_y, int pix);\nvoid RGB24ToYRow_Any_SSSE3(const uint8* src_rgb24, uint8* dst_y, int pix);\nvoid RAWToYRow_Any_SSSE3(const uint8* src_raw, uint8* dst_y, int pix);\nvoid ARGBToYRow_Any_NEON(const uint8* src_argb, uint8* dst_y, int pix);\nvoid ARGBToYJRow_Any_NEON(const uint8* src_argb, uint8* dst_y, int pix);\nvoid BGRAToYRow_Any_NEON(const uint8* src_bgra, uint8* dst_y, int pix);\nvoid ABGRToYRow_Any_NEON(const uint8* src_abgr, uint8* dst_y, int pix);\nvoid RGBAToYRow_Any_NEON(const uint8* src_rgba, uint8* dst_y, int pix);\nvoid RGB24ToYRow_Any_NEON(const uint8* src_rgb24, uint8* dst_y, int pix);\nvoid RAWToYRow_Any_NEON(const uint8* src_raw, uint8* dst_y, int pix);\nvoid RGB565ToYRow_Any_NEON(const uint8* src_rgb565, uint8* dst_y, int pix);\nvoid ARGB1555ToYRow_Any_NEON(const uint8* src_argb1555, uint8* dst_y, int pix);\nvoid ARGB4444ToYRow_Any_NEON(const uint8* src_argb4444, uint8* dst_y, int pix);\n\nvoid ARGBToUVRow_AVX2(const uint8* src_argb, int src_stride_argb,\n                      uint8* dst_u, uint8* dst_v, int width);\nvoid ARGBToUVRow_Any_AVX2(const uint8* src_argb, int src_stride_argb,\n                          uint8* dst_u, uint8* dst_v, int width);\nvoid ARGBToUVRow_SSSE3(const uint8* src_argb, int src_stride_argb,\n                       uint8* dst_u, uint8* dst_v, int width);\nvoid ARGBToUVJRow_SSSE3(const uint8* src_argb, int src_stride_argb,\n                        uint8* dst_u, uint8* dst_v, int width);\nvoid BGRAToUVRow_SSSE3(const uint8* src_bgra, int src_stride_bgra,\n                       uint8* dst_u, uint8* dst_v, int width);\nvoid ABGRToUVRow_SSSE3(const uint8* src_abgr, int src_stride_abgr,\n                       uint8* dst_u, uint8* dst_v, int width);\nvoid RGBAToUVRow_SSSE3(const uint8* src_rgba, int src_stride_rgba,\n                       uint8* dst_u, uint8* dst_v, int width);\nvoid ARGBToUVRow_Any_SSSE3(const uint8* src_argb, int src_stride_argb,\n                           uint8* dst_u, uint8* dst_v, int width);\nvoid ARGBToUVJRow_Any_SSSE3(const uint8* src_argb, int src_stride_argb,\n                            uint8* dst_u, uint8* dst_v, int width);\nvoid BGRAToUVRow_Any_SSSE3(const uint8* src_bgra, int src_stride_bgra,\n                           uint8* dst_u, uint8* dst_v, int width);\nvoid ABGRToUVRow_Any_SSSE3(const uint8* src_abgr, int src_stride_abgr,\n                           uint8* dst_u, uint8* dst_v, int width);\nvoid RGBAToUVRow_Any_SSSE3(const uint8* src_rgba, int src_stride_rgba,\n                           uint8* dst_u, uint8* dst_v, int width);\nvoid ARGBToUV444Row_Any_NEON(const uint8* src_argb, uint8* dst_u, uint8* dst_v,\n                             int pix);\nvoid ARGBToUV422Row_Any_NEON(const uint8* src_argb, uint8* dst_u, uint8* dst_v,\n                             int pix);\nvoid ARGBToUV411Row_Any_NEON(const uint8* src_argb, uint8* dst_u, uint8* dst_v,\n                             int pix);\nvoid ARGBToUVRow_Any_NEON(const uint8* src_argb, int src_stride_argb,\n                          uint8* dst_u, uint8* dst_v, int pix);\nvoid ARGBToUVJRow_Any_NEON(const uint8* src_argb, int src_stride_argb,\n                           uint8* dst_u, uint8* dst_v, int pix);\nvoid BGRAToUVRow_Any_NEON(const uint8* src_bgra, int src_stride_bgra,\n                          uint8* dst_u, uint8* dst_v, int pix);\nvoid ABGRToUVRow_Any_NEON(const uint8* src_abgr, int src_stride_abgr,\n                          uint8* dst_u, uint8* dst_v, int pix);\nvoid RGBAToUVRow_Any_NEON(const uint8* src_rgba, int src_stride_rgba,\n                          uint8* dst_u, uint8* dst_v, int pix);\nvoid RGB24ToUVRow_Any_NEON(const uint8* src_rgb24, int src_stride_rgb24,\n                           uint8* dst_u, uint8* dst_v, int pix);\nvoid RAWToUVRow_Any_NEON(const uint8* src_raw, int src_stride_raw,\n                         uint8* dst_u, uint8* dst_v, int pix);\nvoid RGB565ToUVRow_Any_NEON(const uint8* src_rgb565, int src_stride_rgb565,\n                            uint8* dst_u, uint8* dst_v, int pix);\nvoid ARGB1555ToUVRow_Any_NEON(const uint8* src_argb1555,\n                              int src_stride_argb1555,\n                              uint8* dst_u, uint8* dst_v, int pix);\nvoid ARGB4444ToUVRow_Any_NEON(const uint8* src_argb4444,\n                              int src_stride_argb4444,\n                              uint8* dst_u, uint8* dst_v, int pix);\nvoid ARGBToUVRow_C(const uint8* src_argb, int src_stride_argb,\n                   uint8* dst_u, uint8* dst_v, int width);\nvoid ARGBToUVJRow_C(const uint8* src_argb, int src_stride_argb,\n                    uint8* dst_u, uint8* dst_v, int width);\nvoid BGRAToUVRow_C(const uint8* src_bgra, int src_stride_bgra,\n                   uint8* dst_u, uint8* dst_v, int width);\nvoid ABGRToUVRow_C(const uint8* src_abgr, int src_stride_abgr,\n                   uint8* dst_u, uint8* dst_v, int width);\nvoid RGBAToUVRow_C(const uint8* src_rgba, int src_stride_rgba,\n                   uint8* dst_u, uint8* dst_v, int width);\nvoid RGB24ToUVRow_C(const uint8* src_rgb24, int src_stride_rgb24,\n                    uint8* dst_u, uint8* dst_v, int width);\nvoid RAWToUVRow_C(const uint8* src_raw, int src_stride_raw,\n                  uint8* dst_u, uint8* dst_v, int width);\nvoid RGB565ToUVRow_C(const uint8* src_rgb565, int src_stride_rgb565,\n                     uint8* dst_u, uint8* dst_v, int width);\nvoid ARGB1555ToUVRow_C(const uint8* src_argb1555, int src_stride_argb1555,\n                       uint8* dst_u, uint8* dst_v, int width);\nvoid ARGB4444ToUVRow_C(const uint8* src_argb4444, int src_stride_argb4444,\n                       uint8* dst_u, uint8* dst_v, int width);\n\nvoid ARGBToUV444Row_SSSE3(const uint8* src_argb,\n                          uint8* dst_u, uint8* dst_v, int width);\nvoid ARGBToUV444Row_Any_SSSE3(const uint8* src_argb,\n                              uint8* dst_u, uint8* dst_v, int width);\n\nvoid ARGBToUV422Row_SSSE3(const uint8* src_argb,\n                          uint8* dst_u, uint8* dst_v, int width);\nvoid ARGBToUV422Row_Any_SSSE3(const uint8* src_argb,\n                              uint8* dst_u, uint8* dst_v, int width);\n\nvoid ARGBToUV444Row_C(const uint8* src_argb,\n                      uint8* dst_u, uint8* dst_v, int width);\nvoid ARGBToUV422Row_C(const uint8* src_argb,\n                      uint8* dst_u, uint8* dst_v, int width);\nvoid ARGBToUV411Row_C(const uint8* src_argb,\n                      uint8* dst_u, uint8* dst_v, int width);\nvoid ARGBToUVJ422Row_C(const uint8* src_argb,\n                       uint8* dst_u, uint8* dst_v, int width);\n\nvoid MirrorRow_AVX2(const uint8* src, uint8* dst, int width);\nvoid MirrorRow_SSSE3(const uint8* src, uint8* dst, int width);\nvoid MirrorRow_SSE2(const uint8* src, uint8* dst, int width);\nvoid MirrorRow_NEON(const uint8* src, uint8* dst, int width);\nvoid MirrorRow_MIPS_DSPR2(const uint8* src, uint8* dst, int width);\nvoid MirrorRow_C(const uint8* src, uint8* dst, int width);\nvoid MirrorRow_Any_AVX2(const uint8* src, uint8* dst, int width);\nvoid MirrorRow_Any_SSSE3(const uint8* src, uint8* dst, int width);\nvoid MirrorRow_Any_SSE2(const uint8* src, uint8* dst, int width);\nvoid MirrorRow_Any_NEON(const uint8* src, uint8* dst, int width);\n\nvoid MirrorUVRow_SSSE3(const uint8* src_uv, uint8* dst_u, uint8* dst_v,\n                       int width);\nvoid MirrorUVRow_NEON(const uint8* src_uv, uint8* dst_u, uint8* dst_v,\n                      int width);\nvoid MirrorUVRow_MIPS_DSPR2(const uint8* src_uv, uint8* dst_u, uint8* dst_v,\n                            int width);\nvoid MirrorUVRow_C(const uint8* src_uv, uint8* dst_u, uint8* dst_v,\n                   int width);\n\nvoid ARGBMirrorRow_AVX2(const uint8* src, uint8* dst, int width);\nvoid ARGBMirrorRow_SSE2(const uint8* src, uint8* dst, int width);\nvoid ARGBMirrorRow_NEON(const uint8* src, uint8* dst, int width);\nvoid ARGBMirrorRow_C(const uint8* src, uint8* dst, int width);\nvoid ARGBMirrorRow_Any_AVX2(const uint8* src, uint8* dst, int width);\nvoid ARGBMirrorRow_Any_SSE2(const uint8* src, uint8* dst, int width);\nvoid ARGBMirrorRow_Any_NEON(const uint8* src, uint8* dst, int width);\n\nvoid SplitUVRow_C(const uint8* src_uv, uint8* dst_u, uint8* dst_v, int pix);\nvoid SplitUVRow_SSE2(const uint8* src_uv, uint8* dst_u, uint8* dst_v, int pix);\nvoid SplitUVRow_AVX2(const uint8* src_uv, uint8* dst_u, uint8* dst_v, int pix);\nvoid SplitUVRow_NEON(const uint8* src_uv, uint8* dst_u, uint8* dst_v, int pix);\nvoid SplitUVRow_MIPS_DSPR2(const uint8* src_uv, uint8* dst_u, uint8* dst_v,\n                           int pix);\nvoid SplitUVRow_Any_SSE2(const uint8* src_uv, uint8* dst_u, uint8* dst_v,\n                         int pix);\nvoid SplitUVRow_Any_AVX2(const uint8* src_uv, uint8* dst_u, uint8* dst_v,\n                         int pix);\nvoid SplitUVRow_Any_NEON(const uint8* src_uv, uint8* dst_u, uint8* dst_v,\n                         int pix);\nvoid SplitUVRow_Any_MIPS_DSPR2(const uint8* src_uv, uint8* dst_u, uint8* dst_v,\n                               int pix);\n\nvoid MergeUVRow_C(const uint8* src_u, const uint8* src_v, uint8* dst_uv,\n                  int width);\nvoid MergeUVRow_SSE2(const uint8* src_u, const uint8* src_v, uint8* dst_uv,\n                     int width);\nvoid MergeUVRow_AVX2(const uint8* src_u, const uint8* src_v, uint8* dst_uv,\n                     int width);\nvoid MergeUVRow_NEON(const uint8* src_u, const uint8* src_v, uint8* dst_uv,\n                     int width);\nvoid MergeUVRow_Any_SSE2(const uint8* src_u, const uint8* src_v, uint8* dst_uv,\n                         int width);\nvoid MergeUVRow_Any_AVX2(const uint8* src_u, const uint8* src_v, uint8* dst_uv,\n                         int width);\nvoid MergeUVRow_Any_NEON(const uint8* src_u, const uint8* src_v, uint8* dst_uv,\n                         int width);\n\nvoid CopyRow_SSE2(const uint8* src, uint8* dst, int count);\nvoid CopyRow_AVX(const uint8* src, uint8* dst, int count);\nvoid CopyRow_ERMS(const uint8* src, uint8* dst, int count);\nvoid CopyRow_NEON(const uint8* src, uint8* dst, int count);\nvoid CopyRow_MIPS(const uint8* src, uint8* dst, int count);\nvoid CopyRow_C(const uint8* src, uint8* dst, int count);\nvoid CopyRow_Any_SSE2(const uint8* src, uint8* dst, int count);\nvoid CopyRow_Any_AVX(const uint8* src, uint8* dst, int count);\nvoid CopyRow_Any_NEON(const uint8* src, uint8* dst, int count);\n\nvoid CopyRow_16_C(const uint16* src, uint16* dst, int count);\n\nvoid ARGBCopyAlphaRow_C(const uint8* src_argb, uint8* dst_argb, int width);\nvoid ARGBCopyAlphaRow_SSE2(const uint8* src_argb, uint8* dst_argb, int width);\nvoid ARGBCopyAlphaRow_AVX2(const uint8* src_argb, uint8* dst_argb, int width);\n\nvoid ARGBCopyYToAlphaRow_C(const uint8* src_y, uint8* dst_argb, int width);\nvoid ARGBCopyYToAlphaRow_SSE2(const uint8* src_y, uint8* dst_argb, int width);\nvoid ARGBCopyYToAlphaRow_AVX2(const uint8* src_y, uint8* dst_argb, int width);\n\nvoid SetRow_C(uint8* dst, uint8 v8, int count);\nvoid SetRow_X86(uint8* dst, uint8 v8, int count);\nvoid SetRow_ERMS(uint8* dst, uint8 v8, int count);\nvoid SetRow_NEON(uint8* dst, uint8 v8, int count);\nvoid SetRow_Any_X86(uint8* dst, uint8 v8, int count);\nvoid SetRow_Any_NEON(uint8* dst, uint8 v8, int count);\n\nvoid ARGBSetRow_C(uint8* dst_argb, uint32 v32, int count);\nvoid ARGBSetRow_X86(uint8* dst_argb, uint32 v32, int count);\nvoid ARGBSetRow_NEON(uint8* dst_argb, uint32 v32, int count);\nvoid ARGBSetRow_Any_NEON(uint8* dst_argb, uint32 v32, int count);\n\n// ARGBShufflers for BGRAToARGB etc.\nvoid ARGBShuffleRow_C(const uint8* src_argb, uint8* dst_argb,\n                      const uint8* shuffler, int pix);\nvoid ARGBShuffleRow_SSE2(const uint8* src_argb, uint8* dst_argb,\n                         const uint8* shuffler, int pix);\nvoid ARGBShuffleRow_SSSE3(const uint8* src_argb, uint8* dst_argb,\n                          const uint8* shuffler, int pix);\nvoid ARGBShuffleRow_AVX2(const uint8* src_argb, uint8* dst_argb,\n                         const uint8* shuffler, int pix);\nvoid ARGBShuffleRow_NEON(const uint8* src_argb, uint8* dst_argb,\n                         const uint8* shuffler, int pix);\nvoid ARGBShuffleRow_Any_SSE2(const uint8* src_argb, uint8* dst_argb,\n                             const uint8* shuffler, int pix);\nvoid ARGBShuffleRow_Any_SSSE3(const uint8* src_argb, uint8* dst_argb,\n                              const uint8* shuffler, int pix);\nvoid ARGBShuffleRow_Any_AVX2(const uint8* src_argb, uint8* dst_argb,\n                             const uint8* shuffler, int pix);\nvoid ARGBShuffleRow_Any_NEON(const uint8* src_argb, uint8* dst_argb,\n                             const uint8* shuffler, int pix);\n\nvoid RGB24ToARGBRow_SSSE3(const uint8* src_rgb24, uint8* dst_argb, int pix);\nvoid RAWToARGBRow_SSSE3(const uint8* src_raw, uint8* dst_argb, int pix);\nvoid RGB565ToARGBRow_SSE2(const uint8* src_rgb565, uint8* dst_argb, int pix);\nvoid ARGB1555ToARGBRow_SSE2(const uint8* src_argb1555, uint8* dst_argb,\n                            int pix);\nvoid ARGB4444ToARGBRow_SSE2(const uint8* src_argb4444, uint8* dst_argb,\n                            int pix);\nvoid RGB565ToARGBRow_AVX2(const uint8* src_rgb565, uint8* dst_argb, int pix);\nvoid ARGB1555ToARGBRow_AVX2(const uint8* src_argb1555, uint8* dst_argb,\n                            int pix);\nvoid ARGB4444ToARGBRow_AVX2(const uint8* src_argb4444, uint8* dst_argb,\n                            int pix);\n\nvoid RGB24ToARGBRow_NEON(const uint8* src_rgb24, uint8* dst_argb, int pix);\nvoid RAWToARGBRow_NEON(const uint8* src_raw, uint8* dst_argb, int pix);\nvoid RGB565ToARGBRow_NEON(const uint8* src_rgb565, uint8* dst_argb, int pix);\nvoid ARGB1555ToARGBRow_NEON(const uint8* src_argb1555, uint8* dst_argb,\n                            int pix);\nvoid ARGB4444ToARGBRow_NEON(const uint8* src_argb4444, uint8* dst_argb,\n                            int pix);\nvoid RGB24ToARGBRow_C(const uint8* src_rgb24, uint8* dst_argb, int pix);\nvoid RAWToARGBRow_C(const uint8* src_raw, uint8* dst_argb, int pix);\nvoid RGB565ToARGBRow_C(const uint8* src_rgb, uint8* dst_argb, int pix);\nvoid ARGB1555ToARGBRow_C(const uint8* src_argb, uint8* dst_argb, int pix);\nvoid ARGB4444ToARGBRow_C(const uint8* src_argb, uint8* dst_argb, int pix);\nvoid RGB24ToARGBRow_Any_SSSE3(const uint8* src_rgb24, uint8* dst_argb, int pix);\nvoid RAWToARGBRow_Any_SSSE3(const uint8* src_raw, uint8* dst_argb, int pix);\n\nvoid RGB565ToARGBRow_Any_SSE2(const uint8* src_rgb565, uint8* dst_argb,\n                              int pix);\nvoid ARGB1555ToARGBRow_Any_SSE2(const uint8* src_argb1555, uint8* dst_argb,\n                                int pix);\nvoid ARGB4444ToARGBRow_Any_SSE2(const uint8* src_argb4444, uint8* dst_argb,\n                                int pix);\nvoid RGB565ToARGBRow_Any_AVX2(const uint8* src_rgb565, uint8* dst_argb,\n                              int pix);\nvoid ARGB1555ToARGBRow_Any_AVX2(const uint8* src_argb1555, uint8* dst_argb,\n                                int pix);\nvoid ARGB4444ToARGBRow_Any_AVX2(const uint8* src_argb4444, uint8* dst_argb,\n                                int pix);\n\nvoid RGB24ToARGBRow_Any_NEON(const uint8* src_rgb24, uint8* dst_argb, int pix);\nvoid RAWToARGBRow_Any_NEON(const uint8* src_raw, uint8* dst_argb, int pix);\nvoid RGB565ToARGBRow_Any_NEON(const uint8* src_rgb565, uint8* dst_argb,\n                              int pix);\nvoid ARGB1555ToARGBRow_Any_NEON(const uint8* src_argb1555, uint8* dst_argb,\n                                int pix);\nvoid ARGB4444ToARGBRow_Any_NEON(const uint8* src_argb4444, uint8* dst_argb,\n                                int pix);\n\nvoid ARGBToRGB24Row_SSSE3(const uint8* src_argb, uint8* dst_rgb, int pix);\nvoid ARGBToRAWRow_SSSE3(const uint8* src_argb, uint8* dst_rgb, int pix);\nvoid ARGBToRGB565Row_SSE2(const uint8* src_argb, uint8* dst_rgb, int pix);\nvoid ARGBToARGB1555Row_SSE2(const uint8* src_argb, uint8* dst_rgb, int pix);\nvoid ARGBToARGB4444Row_SSE2(const uint8* src_argb, uint8* dst_rgb, int pix);\n\nvoid ARGBToRGB565DitherRow_C(const uint8* src_argb, uint8* dst_rgb,\n                             const uint32 dither4, int pix);\nvoid ARGBToRGB565DitherRow_SSE2(const uint8* src_argb, uint8* dst_rgb,\n                                const uint32 dither4, int pix);\nvoid ARGBToRGB565DitherRow_AVX2(const uint8* src_argb, uint8* dst_rgb,\n                                const uint32 dither4, int pix);\n\nvoid ARGBToRGB565Row_AVX2(const uint8* src_argb, uint8* dst_rgb, int pix);\nvoid ARGBToARGB1555Row_AVX2(const uint8* src_argb, uint8* dst_rgb, int pix);\nvoid ARGBToARGB4444Row_AVX2(const uint8* src_argb, uint8* dst_rgb, int pix);\n\nvoid ARGBToRGB24Row_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);\nvoid ARGBToRAWRow_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);\nvoid ARGBToRGB565Row_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);\nvoid ARGBToARGB1555Row_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);\nvoid ARGBToARGB4444Row_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);\nvoid ARGBToRGB565DitherRow_NEON(const uint8* src_argb, uint8* dst_rgb,\n                                const uint32 dither4, int width);\n\nvoid ARGBToRGBARow_C(const uint8* src_argb, uint8* dst_rgb, int pix);\nvoid ARGBToRGB24Row_C(const uint8* src_argb, uint8* dst_rgb, int pix);\nvoid ARGBToRAWRow_C(const uint8* src_argb, uint8* dst_rgb, int pix);\nvoid ARGBToRGB565Row_C(const uint8* src_argb, uint8* dst_rgb, int pix);\nvoid ARGBToARGB1555Row_C(const uint8* src_argb, uint8* dst_rgb, int pix);\nvoid ARGBToARGB4444Row_C(const uint8* src_argb, uint8* dst_rgb, int pix);\n\nvoid J400ToARGBRow_SSE2(const uint8* src_y, uint8* dst_argb, int pix);\nvoid J400ToARGBRow_AVX2(const uint8* src_y, uint8* dst_argb, int pix);\nvoid J400ToARGBRow_NEON(const uint8* src_y, uint8* dst_argb, int pix);\nvoid J400ToARGBRow_C(const uint8* src_y, uint8* dst_argb, int pix);\nvoid J400ToARGBRow_Any_SSE2(const uint8* src_y, uint8* dst_argb, int pix);\nvoid J400ToARGBRow_Any_AVX2(const uint8* src_y, uint8* dst_argb, int pix);\nvoid J400ToARGBRow_Any_NEON(const uint8* src_y, uint8* dst_argb, int pix);\n\nvoid I444ToARGBRow_C(const uint8* src_y,\n                     const uint8* src_u,\n                     const uint8* src_v,\n                     uint8* dst_argb,\n                     int width);\nvoid I422ToARGBRow_C(const uint8* src_y,\n                     const uint8* src_u,\n                     const uint8* src_v,\n                     uint8* dst_argb,\n                     int width);\nvoid I411ToARGBRow_C(const uint8* src_y,\n                     const uint8* src_u,\n                     const uint8* src_v,\n                     uint8* dst_argb,\n                     int width);\nvoid NV12ToARGBRow_C(const uint8* src_y,\n                     const uint8* src_uv,\n                     uint8* dst_argb,\n                     int width);\nvoid NV21ToRGB565Row_C(const uint8* src_y,\n                       const uint8* src_vu,\n                       uint8* dst_argb,\n                       int width);\nvoid NV12ToRGB565Row_C(const uint8* src_y,\n                       const uint8* src_uv,\n                       uint8* dst_argb,\n                       int width);\nvoid NV21ToARGBRow_C(const uint8* src_y,\n                     const uint8* src_vu,\n                     uint8* dst_argb,\n                     int width);\nvoid YUY2ToARGBRow_C(const uint8* src_yuy2,\n                     uint8* dst_argb,\n                     int width);\nvoid UYVYToARGBRow_C(const uint8* src_uyvy,\n                     uint8* dst_argb,\n                     int width);\nvoid J422ToARGBRow_C(const uint8* src_y,\n                     const uint8* src_u,\n                     const uint8* src_v,\n                     uint8* dst_argb,\n                     int width);\nvoid I422ToBGRARow_C(const uint8* src_y,\n                     const uint8* src_u,\n                     const uint8* src_v,\n                     uint8* dst_bgra,\n                     int width);\nvoid I422ToABGRRow_C(const uint8* src_y,\n                     const uint8* src_u,\n                     const uint8* src_v,\n                     uint8* dst_abgr,\n                     int width);\nvoid I422ToRGBARow_C(const uint8* src_y,\n                     const uint8* src_u,\n                     const uint8* src_v,\n                     uint8* dst_rgba,\n                     int width);\nvoid I422ToRGB24Row_C(const uint8* src_y,\n                      const uint8* src_u,\n                      const uint8* src_v,\n                      uint8* dst_rgb24,\n                      int width);\nvoid I422ToRAWRow_C(const uint8* src_y,\n                    const uint8* src_u,\n                    const uint8* src_v,\n                    uint8* dst_raw,\n                    int width);\nvoid I422ToARGB4444Row_C(const uint8* src_y,\n                         const uint8* src_u,\n                         const uint8* src_v,\n                         uint8* dst_argb4444,\n                         int width);\nvoid I422ToARGB1555Row_C(const uint8* src_y,\n                         const uint8* src_u,\n                         const uint8* src_v,\n                         uint8* dst_argb4444,\n                         int width);\nvoid I422ToRGB565Row_C(const uint8* src_y,\n                       const uint8* src_u,\n                       const uint8* src_v,\n                       uint8* dst_rgb565,\n                       int width);\nvoid I422ToARGBRow_AVX2(const uint8* src_y,\n                        const uint8* src_u,\n                        const uint8* src_v,\n                        uint8* dst_argb,\n                        int width);\nvoid I422ToBGRARow_AVX2(const uint8* src_y,\n                        const uint8* src_u,\n                        const uint8* src_v,\n                        uint8* dst_argb,\n                        int width);\nvoid I422ToRGBARow_AVX2(const uint8* src_y,\n                        const uint8* src_u,\n                        const uint8* src_v,\n                        uint8* dst_argb,\n                        int width);\nvoid I422ToABGRRow_AVX2(const uint8* src_y,\n                        const uint8* src_u,\n                        const uint8* src_v,\n                        uint8* dst_argb,\n                        int width);\nvoid I444ToARGBRow_SSSE3(const uint8* src_y,\n                         const uint8* src_u,\n                         const uint8* src_v,\n                         uint8* dst_argb,\n                         int width);\nvoid I444ToARGBRow_AVX2(const uint8* src_y,\n                        const uint8* src_u,\n                        const uint8* src_v,\n                        uint8* dst_argb,\n                        int width);\nvoid I422ToARGBRow_SSSE3(const uint8* src_y,\n                         const uint8* src_u,\n                         const uint8* src_v,\n                         uint8* dst_argb,\n                         int width);\nvoid I411ToARGBRow_SSSE3(const uint8* src_y,\n                         const uint8* src_u,\n                         const uint8* src_v,\n                         uint8* dst_argb,\n                         int width);\nvoid I411ToARGBRow_AVX2(const uint8* src_y,\n                        const uint8* src_u,\n                        const uint8* src_v,\n                        uint8* dst_argb,\n                        int width);\nvoid NV12ToARGBRow_SSSE3(const uint8* src_y,\n                         const uint8* src_uv,\n                         uint8* dst_argb,\n                         int width);\nvoid NV21ToARGBRow_SSSE3(const uint8* src_y,\n                         const uint8* src_vu,\n                         uint8* dst_argb,\n                         int width);\nvoid NV12ToARGBRow_AVX2(const uint8* src_y,\n                        const uint8* src_uv,\n                        uint8* dst_argb,\n                        int width);\nvoid NV21ToARGBRow_AVX2(const uint8* src_y,\n                        const uint8* src_vu,\n                        uint8* dst_argb,\n                        int width);\nvoid NV12ToRGB565Row_SSSE3(const uint8* src_y,\n                           const uint8* src_uv,\n                           uint8* dst_argb,\n                           int width);\nvoid NV21ToRGB565Row_SSSE3(const uint8* src_y,\n                           const uint8* src_vu,\n                           uint8* dst_argb,\n                           int width);\nvoid NV12ToRGB565Row_AVX2(const uint8* src_y,\n                          const uint8* src_uv,\n                          uint8* dst_argb,\n                          int width);\nvoid NV21ToRGB565Row_AVX2(const uint8* src_y,\n                          const uint8* src_vu,\n                          uint8* dst_argb,\n                          int width);\nvoid YUY2ToARGBRow_SSSE3(const uint8* src_yuy2,\n                         uint8* dst_argb,\n                         int width);\nvoid UYVYToARGBRow_SSSE3(const uint8* src_uyvy,\n                         uint8* dst_argb,\n                         int width);\nvoid YUY2ToARGBRow_AVX2(const uint8* src_yuy2,\n                        uint8* dst_argb,\n                        int width);\nvoid UYVYToARGBRow_AVX2(const uint8* src_uyvy,\n                        uint8* dst_argb,\n                        int width);\nvoid J422ToARGBRow_SSSE3(const uint8* src_y,\n                         const uint8* src_u,\n                         const uint8* src_v,\n                         uint8* dst_argb,\n                         int width);\nvoid J422ToARGBRow_AVX2(const uint8* src_y,\n                        const uint8* src_u,\n                        const uint8* src_v,\n                        uint8* dst_argb,\n                        int width);\nvoid I422ToBGRARow_SSSE3(const uint8* src_y,\n                         const uint8* src_u,\n                         const uint8* src_v,\n                         uint8* dst_bgra,\n                         int width);\nvoid I422ToABGRRow_SSSE3(const uint8* src_y,\n                         const uint8* src_u,\n                         const uint8* src_v,\n                         uint8* dst_abgr,\n                         int width);\nvoid I422ToRGBARow_SSSE3(const uint8* src_y,\n                         const uint8* src_u,\n                         const uint8* src_v,\n                         uint8* dst_rgba,\n                         int width);\nvoid I422ToARGB4444Row_SSSE3(const uint8* src_y,\n                             const uint8* src_u,\n                             const uint8* src_v,\n                             uint8* dst_argb,\n                             int width);\nvoid I422ToARGB4444Row_AVX2(const uint8* src_y,\n                            const uint8* src_u,\n                            const uint8* src_v,\n                            uint8* dst_argb,\n                            int width);\nvoid I422ToARGB1555Row_SSSE3(const uint8* src_y,\n                             const uint8* src_u,\n                             const uint8* src_v,\n                             uint8* dst_argb,\n                             int width);\nvoid I422ToARGB1555Row_AVX2(const uint8* src_y,\n                            const uint8* src_u,\n                            const uint8* src_v,\n                            uint8* dst_argb,\n                            int width);\nvoid I422ToRGB565Row_SSSE3(const uint8* src_y,\n                           const uint8* src_u,\n                           const uint8* src_v,\n                           uint8* dst_argb,\n                           int width);\nvoid I422ToRGB565Row_AVX2(const uint8* src_y,\n                          const uint8* src_u,\n                          const uint8* src_v,\n                          uint8* dst_argb,\n                          int width);\nvoid I422ToRGB24Row_SSSE3(const uint8* src_y,\n                          const uint8* src_u,\n                          const uint8* src_v,\n                          uint8* dst_rgb24,\n                          int width);\nvoid I422ToRGB24Row_AVX2(const uint8* src_y,\n                         const uint8* src_u,\n                         const uint8* src_v,\n                         uint8* dst_rgb24,\n                         int width);\nvoid I422ToRAWRow_SSSE3(const uint8* src_y,\n                        const uint8* src_u,\n                        const uint8* src_v,\n                        uint8* dst_raw,\n                        int width);\nvoid I422ToRAWRow_AVX2(const uint8* src_y,\n                       const uint8* src_u,\n                       const uint8* src_v,\n                       uint8* dst_raw,\n                       int width);\nvoid I422ToARGBRow_Any_AVX2(const uint8* src_y,\n                            const uint8* src_u,\n                            const uint8* src_v,\n                            uint8* dst_argb,\n                            int width);\nvoid I422ToBGRARow_Any_AVX2(const uint8* src_y,\n                            const uint8* src_u,\n                            const uint8* src_v,\n                            uint8* dst_argb,\n                            int width);\nvoid I422ToRGBARow_Any_AVX2(const uint8* src_y,\n                            const uint8* src_u,\n                            const uint8* src_v,\n                            uint8* dst_argb,\n                            int width);\nvoid I422ToABGRRow_Any_AVX2(const uint8* src_y,\n                            const uint8* src_u,\n                            const uint8* src_v,\n                            uint8* dst_argb,\n                            int width);\nvoid I444ToARGBRow_Any_SSSE3(const uint8* src_y,\n                             const uint8* src_u,\n                             const uint8* src_v,\n                             uint8* dst_argb,\n                             int width);\nvoid I444ToARGBRow_Any_AVX2(const uint8* src_y,\n                            const uint8* src_u,\n                            const uint8* src_v,\n                            uint8* dst_argb,\n                            int width);\nvoid I422ToARGBRow_Any_SSSE3(const uint8* src_y,\n                             const uint8* src_u,\n                             const uint8* src_v,\n                             uint8* dst_argb,\n                             int width);\nvoid I411ToARGBRow_Any_SSSE3(const uint8* src_y,\n                             const uint8* src_u,\n                             const uint8* src_v,\n                             uint8* dst_argb,\n                             int width);\nvoid I411ToARGBRow_Any_AVX2(const uint8* src_y,\n                            const uint8* src_u,\n                            const uint8* src_v,\n                            uint8* dst_argb,\n                            int width);\nvoid NV12ToARGBRow_Any_SSSE3(const uint8* src_y,\n                             const uint8* src_uv,\n                             uint8* dst_argb,\n                             int width);\nvoid NV21ToARGBRow_Any_SSSE3(const uint8* src_y,\n                             const uint8* src_vu,\n                             uint8* dst_argb,\n                             int width);\nvoid NV12ToARGBRow_Any_AVX2(const uint8* src_y,\n                            const uint8* src_uv,\n                            uint8* dst_argb,\n                            int width);\nvoid NV21ToARGBRow_Any_AVX2(const uint8* src_y,\n                            const uint8* src_vu,\n                            uint8* dst_argb,\n                            int width);\nvoid NV12ToRGB565Row_Any_SSSE3(const uint8* src_y,\n                               const uint8* src_uv,\n                               uint8* dst_argb,\n                               int width);\nvoid NV21ToRGB565Row_Any_SSSE3(const uint8* src_y,\n                               const uint8* src_vu,\n                               uint8* dst_argb,\n                               int width);\nvoid NV12ToRGB565Row_Any_AVX2(const uint8* src_y,\n                              const uint8* src_uv,\n                              uint8* dst_argb,\n                              int width);\nvoid NV21ToRGB565Row_Any_AVX2(const uint8* src_y,\n                              const uint8* src_vu,\n                              uint8* dst_argb,\n                              int width);\nvoid YUY2ToARGBRow_Any_SSSE3(const uint8* src_yuy2,\n                             uint8* dst_argb,\n                             int width);\nvoid UYVYToARGBRow_Any_SSSE3(const uint8* src_uyvy,\n                             uint8* dst_argb,\n                             int width);\nvoid YUY2ToARGBRow_Any_AVX2(const uint8* src_yuy2,\n                            uint8* dst_argb,\n                            int width);\nvoid UYVYToARGBRow_Any_AVX2(const uint8* src_uyvy,\n                            uint8* dst_argb,\n                            int width);\nvoid J422ToARGBRow_Any_SSSE3(const uint8* src_y,\n                             const uint8* src_u,\n                             const uint8* src_v,\n                             uint8* dst_argb,\n                             int width);\nvoid J422ToARGBRow_Any_AVX2(const uint8* src_y,\n                            const uint8* src_u,\n                            const uint8* src_v,\n                            uint8* dst_argb,\n                            int width);\nvoid I422ToBGRARow_Any_SSSE3(const uint8* src_y,\n                             const uint8* src_u,\n                             const uint8* src_v,\n                             uint8* dst_bgra,\n                             int width);\nvoid I422ToABGRRow_Any_SSSE3(const uint8* src_y,\n                             const uint8* src_u,\n                             const uint8* src_v,\n                             uint8* dst_abgr,\n                             int width);\nvoid I422ToRGBARow_Any_SSSE3(const uint8* src_y,\n                             const uint8* src_u,\n                             const uint8* src_v,\n                             uint8* dst_rgba,\n                             int width);\nvoid I422ToARGB4444Row_Any_SSSE3(const uint8* src_y,\n                                 const uint8* src_u,\n                                 const uint8* src_v,\n                                 uint8* dst_rgba,\n                                 int width);\nvoid I422ToARGB4444Row_Any_AVX2(const uint8* src_y,\n                                const uint8* src_u,\n                                const uint8* src_v,\n                                uint8* dst_rgba,\n                                int width);\nvoid I422ToARGB1555Row_Any_SSSE3(const uint8* src_y,\n                                 const uint8* src_u,\n                                 const uint8* src_v,\n                                 uint8* dst_rgba,\n                                 int width);\nvoid I422ToARGB1555Row_Any_AVX2(const uint8* src_y,\n                                const uint8* src_u,\n                                const uint8* src_v,\n                                uint8* dst_rgba,\n                                int width);\nvoid I422ToRGB565Row_Any_SSSE3(const uint8* src_y,\n                               const uint8* src_u,\n                               const uint8* src_v,\n                               uint8* dst_rgba,\n                               int width);\nvoid I422ToRGB565Row_Any_AVX2(const uint8* src_y,\n                              const uint8* src_u,\n                              const uint8* src_v,\n                              uint8* dst_rgba,\n                              int width);\nvoid I422ToRGB24Row_Any_SSSE3(const uint8* src_y,\n                              const uint8* src_u,\n                              const uint8* src_v,\n                              uint8* dst_argb,\n                              int width);\nvoid I422ToRGB24Row_Any_AVX2(const uint8* src_y,\n                             const uint8* src_u,\n                             const uint8* src_v,\n                             uint8* dst_argb,\n                             int width);\nvoid I422ToRAWRow_Any_SSSE3(const uint8* src_y,\n                            const uint8* src_u,\n                            const uint8* src_v,\n                            uint8* dst_argb,\n                            int width);\nvoid I422ToRAWRow_Any_AVX2(const uint8* src_y,\n                           const uint8* src_u,\n                           const uint8* src_v,\n                           uint8* dst_argb,\n                           int width);\n\nvoid I400ToARGBRow_C(const uint8* src_y, uint8* dst_argb, int width);\nvoid I400ToARGBRow_SSE2(const uint8* src_y, uint8* dst_argb, int width);\nvoid I400ToARGBRow_AVX2(const uint8* src_y, uint8* dst_argb, int width);\nvoid I400ToARGBRow_NEON(const uint8* src_y, uint8* dst_argb, int width);\nvoid I400ToARGBRow_Any_SSE2(const uint8* src_y, uint8* dst_argb, int width);\nvoid I400ToARGBRow_Any_AVX2(const uint8* src_y, uint8* dst_argb, int width);\nvoid I400ToARGBRow_Any_NEON(const uint8* src_y, uint8* dst_argb, int width);\n\n// ARGB preattenuated alpha blend.\nvoid ARGBBlendRow_SSSE3(const uint8* src_argb, const uint8* src_argb1,\n                        uint8* dst_argb, int width);\nvoid ARGBBlendRow_SSE2(const uint8* src_argb, const uint8* src_argb1,\n                       uint8* dst_argb, int width);\nvoid ARGBBlendRow_NEON(const uint8* src_argb, const uint8* src_argb1,\n                       uint8* dst_argb, int width);\nvoid ARGBBlendRow_C(const uint8* src_argb, const uint8* src_argb1,\n                    uint8* dst_argb, int width);\n\n// ARGB multiply images. Same API as Blend, but these require\n// pointer and width alignment for SSE2.\nvoid ARGBMultiplyRow_C(const uint8* src_argb, const uint8* src_argb1,\n                       uint8* dst_argb, int width);\nvoid ARGBMultiplyRow_SSE2(const uint8* src_argb, const uint8* src_argb1,\n                          uint8* dst_argb, int width);\nvoid ARGBMultiplyRow_Any_SSE2(const uint8* src_argb, const uint8* src_argb1,\n                              uint8* dst_argb, int width);\nvoid ARGBMultiplyRow_AVX2(const uint8* src_argb, const uint8* src_argb1,\n                          uint8* dst_argb, int width);\nvoid ARGBMultiplyRow_Any_AVX2(const uint8* src_argb, const uint8* src_argb1,\n                              uint8* dst_argb, int width);\nvoid ARGBMultiplyRow_NEON(const uint8* src_argb, const uint8* src_argb1,\n                          uint8* dst_argb, int width);\nvoid ARGBMultiplyRow_Any_NEON(const uint8* src_argb, const uint8* src_argb1,\n                              uint8* dst_argb, int width);\n\n// ARGB add images.\nvoid ARGBAddRow_C(const uint8* src_argb, const uint8* src_argb1,\n                  uint8* dst_argb, int width);\nvoid ARGBAddRow_SSE2(const uint8* src_argb, const uint8* src_argb1,\n                     uint8* dst_argb, int width);\nvoid ARGBAddRow_Any_SSE2(const uint8* src_argb, const uint8* src_argb1,\n                         uint8* dst_argb, int width);\nvoid ARGBAddRow_AVX2(const uint8* src_argb, const uint8* src_argb1,\n                     uint8* dst_argb, int width);\nvoid ARGBAddRow_Any_AVX2(const uint8* src_argb, const uint8* src_argb1,\n                         uint8* dst_argb, int width);\nvoid ARGBAddRow_NEON(const uint8* src_argb, const uint8* src_argb1,\n                     uint8* dst_argb, int width);\nvoid ARGBAddRow_Any_NEON(const uint8* src_argb, const uint8* src_argb1,\n                         uint8* dst_argb, int width);\n\n// ARGB subtract images. Same API as Blend, but these require\n// pointer and width alignment for SSE2.\nvoid ARGBSubtractRow_C(const uint8* src_argb, const uint8* src_argb1,\n                       uint8* dst_argb, int width);\nvoid ARGBSubtractRow_SSE2(const uint8* src_argb, const uint8* src_argb1,\n                          uint8* dst_argb, int width);\nvoid ARGBSubtractRow_Any_SSE2(const uint8* src_argb, const uint8* src_argb1,\n                              uint8* dst_argb, int width);\nvoid ARGBSubtractRow_AVX2(const uint8* src_argb, const uint8* src_argb1,\n                          uint8* dst_argb, int width);\nvoid ARGBSubtractRow_Any_AVX2(const uint8* src_argb, const uint8* src_argb1,\n                              uint8* dst_argb, int width);\nvoid ARGBSubtractRow_NEON(const uint8* src_argb, const uint8* src_argb1,\n                          uint8* dst_argb, int width);\nvoid ARGBSubtractRow_Any_NEON(const uint8* src_argb, const uint8* src_argb1,\n                              uint8* dst_argb, int width);\n\nvoid ARGBToRGB24Row_Any_SSSE3(const uint8* src_argb, uint8* dst_rgb, int pix);\nvoid ARGBToRAWRow_Any_SSSE3(const uint8* src_argb, uint8* dst_rgb, int pix);\nvoid ARGBToRGB565Row_Any_SSE2(const uint8* src_argb, uint8* dst_rgb, int pix);\nvoid ARGBToARGB1555Row_Any_SSE2(const uint8* src_argb, uint8* dst_rgb, int pix);\nvoid ARGBToARGB4444Row_Any_SSE2(const uint8* src_argb, uint8* dst_rgb, int pix);\n\nvoid ARGBToRGB565DitherRow_Any_SSE2(const uint8* src_argb, uint8* dst_rgb,\n                                    const uint32 dither4, int pix);\nvoid ARGBToRGB565DitherRow_Any_AVX2(const uint8* src_argb, uint8* dst_rgb,\n                                    const uint32 dither4, int pix);\n\nvoid ARGBToRGB565Row_Any_AVX2(const uint8* src_argb, uint8* dst_rgb, int pix);\nvoid ARGBToARGB1555Row_Any_AVX2(const uint8* src_argb, uint8* dst_rgb, int pix);\nvoid ARGBToARGB4444Row_Any_AVX2(const uint8* src_argb, uint8* dst_rgb, int pix);\n\nvoid ARGBToRGB24Row_Any_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);\nvoid ARGBToRAWRow_Any_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);\nvoid ARGBToRGB565Row_Any_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);\nvoid ARGBToARGB1555Row_Any_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);\nvoid ARGBToARGB4444Row_Any_NEON(const uint8* src_argb, uint8* dst_rgb, int pix);\nvoid ARGBToRGB565DitherRow_Any_NEON(const uint8* src_argb, uint8* dst_rgb,\n                                    const uint32 dither4, int width);\n\nvoid I444ToARGBRow_Any_NEON(const uint8* src_y,\n                            const uint8* src_u,\n                            const uint8* src_v,\n                            uint8* dst_argb,\n                            int width);\nvoid I422ToARGBRow_Any_NEON(const uint8* src_y,\n                            const uint8* src_u,\n                            const uint8* src_v,\n                            uint8* dst_argb,\n                            int width);\nvoid I411ToARGBRow_Any_NEON(const uint8* src_y,\n                            const uint8* src_u,\n                            const uint8* src_v,\n                            uint8* dst_argb,\n                            int width);\nvoid I422ToBGRARow_Any_NEON(const uint8* src_y,\n                            const uint8* src_u,\n                            const uint8* src_v,\n                            uint8* dst_argb,\n                            int width);\nvoid I422ToABGRRow_Any_NEON(const uint8* src_y,\n                            const uint8* src_u,\n                            const uint8* src_v,\n                            uint8* dst_argb,\n                            int width);\nvoid I422ToRGBARow_Any_NEON(const uint8* src_y,\n                            const uint8* src_u,\n                            const uint8* src_v,\n                            uint8* dst_argb,\n                            int width);\nvoid I422ToRGB24Row_Any_NEON(const uint8* src_y,\n                             const uint8* src_u,\n                             const uint8* src_v,\n                             uint8* dst_argb,\n                             int width);\nvoid I422ToRAWRow_Any_NEON(const uint8* src_y,\n                           const uint8* src_u,\n                           const uint8* src_v,\n                           uint8* dst_argb,\n                           int width);\nvoid I422ToARGB4444Row_Any_NEON(const uint8* src_y,\n                                const uint8* src_u,\n                                const uint8* src_v,\n                                uint8* dst_argb,\n                                int width);\nvoid I422ToARGB1555Row_Any_NEON(const uint8* src_y,\n                                const uint8* src_u,\n                                const uint8* src_v,\n                                uint8* dst_argb,\n                                int width);\nvoid I422ToRGB565Row_Any_NEON(const uint8* src_y,\n                              const uint8* src_u,\n                              const uint8* src_v,\n                              uint8* dst_argb,\n                              int width);\nvoid NV12ToARGBRow_Any_NEON(const uint8* src_y,\n                            const uint8* src_uv,\n                            uint8* dst_argb,\n                            int width);\nvoid NV21ToARGBRow_Any_NEON(const uint8* src_y,\n                            const uint8* src_uv,\n                            uint8* dst_argb,\n                            int width);\nvoid NV12ToRGB565Row_Any_NEON(const uint8* src_y,\n                              const uint8* src_uv,\n                              uint8* dst_argb,\n                              int width);\nvoid NV21ToRGB565Row_Any_NEON(const uint8* src_y,\n                              const uint8* src_uv,\n                              uint8* dst_argb,\n                              int width);\nvoid YUY2ToARGBRow_Any_NEON(const uint8* src_yuy2,\n                            uint8* dst_argb,\n                            int width);\nvoid UYVYToARGBRow_Any_NEON(const uint8* src_uyvy,\n                            uint8* dst_argb,\n                            int width);\nvoid I422ToARGBRow_MIPS_DSPR2(const uint8* src_y,\n                              const uint8* src_u,\n                              const uint8* src_v,\n                              uint8* dst_argb,\n                              int width);\nvoid I422ToBGRARow_MIPS_DSPR2(const uint8* src_y,\n                              const uint8* src_u,\n                              const uint8* src_v,\n                              uint8* dst_argb,\n                              int width);\nvoid I422ToABGRRow_MIPS_DSPR2(const uint8* src_y,\n                              const uint8* src_u,\n                              const uint8* src_v,\n                              uint8* dst_argb,\n                              int width);\nvoid I422ToARGBRow_MIPS_DSPR2(const uint8* src_y,\n                              const uint8* src_u,\n                              const uint8* src_v,\n                              uint8* dst_argb,\n                              int width);\nvoid I422ToBGRARow_MIPS_DSPR2(const uint8* src_y,\n                              const uint8* src_u,\n                              const uint8* src_v,\n                              uint8* dst_argb,\n                              int width);\nvoid I422ToABGRRow_MIPS_DSPR2(const uint8* src_y,\n                              const uint8* src_u,\n                              const uint8* src_v,\n                              uint8* dst_argb,\n                              int width);\n\nvoid YUY2ToYRow_AVX2(const uint8* src_yuy2, uint8* dst_y, int pix);\nvoid YUY2ToUVRow_AVX2(const uint8* src_yuy2, int stride_yuy2,\n                      uint8* dst_u, uint8* dst_v, int pix);\nvoid YUY2ToUV422Row_AVX2(const uint8* src_yuy2,\n                         uint8* dst_u, uint8* dst_v, int pix);\nvoid YUY2ToYRow_SSE2(const uint8* src_yuy2, uint8* dst_y, int pix);\nvoid YUY2ToUVRow_SSE2(const uint8* src_yuy2, int stride_yuy2,\n                      uint8* dst_u, uint8* dst_v, int pix);\nvoid YUY2ToUV422Row_SSE2(const uint8* src_yuy2,\n                         uint8* dst_u, uint8* dst_v, int pix);\nvoid YUY2ToYRow_NEON(const uint8* src_yuy2, uint8* dst_y, int pix);\nvoid YUY2ToUVRow_NEON(const uint8* src_yuy2, int stride_yuy2,\n                      uint8* dst_u, uint8* dst_v, int pix);\nvoid YUY2ToUV422Row_NEON(const uint8* src_yuy2,\n                         uint8* dst_u, uint8* dst_v, int pix);\nvoid YUY2ToYRow_C(const uint8* src_yuy2, uint8* dst_y, int pix);\nvoid YUY2ToUVRow_C(const uint8* src_yuy2, int stride_yuy2,\n                   uint8* dst_u, uint8* dst_v, int pix);\nvoid YUY2ToUV422Row_C(const uint8* src_yuy2,\n                      uint8* dst_u, uint8* dst_v, int pix);\nvoid YUY2ToYRow_Any_AVX2(const uint8* src_yuy2, uint8* dst_y, int pix);\nvoid YUY2ToUVRow_Any_AVX2(const uint8* src_yuy2, int stride_yuy2,\n                          uint8* dst_u, uint8* dst_v, int pix);\nvoid YUY2ToUV422Row_Any_AVX2(const uint8* src_yuy2,\n                             uint8* dst_u, uint8* dst_v, int pix);\nvoid YUY2ToYRow_Any_SSE2(const uint8* src_yuy2, uint8* dst_y, int pix);\nvoid YUY2ToUVRow_Any_SSE2(const uint8* src_yuy2, int stride_yuy2,\n                          uint8* dst_u, uint8* dst_v, int pix);\nvoid YUY2ToUV422Row_Any_SSE2(const uint8* src_yuy2,\n                             uint8* dst_u, uint8* dst_v, int pix);\nvoid YUY2ToYRow_Any_NEON(const uint8* src_yuy2, uint8* dst_y, int pix);\nvoid YUY2ToUVRow_Any_NEON(const uint8* src_yuy2, int stride_yuy2,\n                          uint8* dst_u, uint8* dst_v, int pix);\nvoid YUY2ToUV422Row_Any_NEON(const uint8* src_yuy2,\n                             uint8* dst_u, uint8* dst_v, int pix);\nvoid UYVYToYRow_AVX2(const uint8* src_uyvy, uint8* dst_y, int pix);\nvoid UYVYToUVRow_AVX2(const uint8* src_uyvy, int stride_uyvy,\n                      uint8* dst_u, uint8* dst_v, int pix);\nvoid UYVYToUV422Row_AVX2(const uint8* src_uyvy,\n                         uint8* dst_u, uint8* dst_v, int pix);\nvoid UYVYToYRow_SSE2(const uint8* src_uyvy, uint8* dst_y, int pix);\nvoid UYVYToUVRow_SSE2(const uint8* src_uyvy, int stride_uyvy,\n                      uint8* dst_u, uint8* dst_v, int pix);\nvoid UYVYToUV422Row_SSE2(const uint8* src_uyvy,\n                         uint8* dst_u, uint8* dst_v, int pix);\nvoid UYVYToYRow_AVX2(const uint8* src_uyvy, uint8* dst_y, int pix);\nvoid UYVYToUVRow_AVX2(const uint8* src_uyvy, int stride_uyvy,\n                      uint8* dst_u, uint8* dst_v, int pix);\nvoid UYVYToUV422Row_AVX2(const uint8* src_uyvy,\n                         uint8* dst_u, uint8* dst_v, int pix);\nvoid UYVYToYRow_NEON(const uint8* src_uyvy, uint8* dst_y, int pix);\nvoid UYVYToUVRow_NEON(const uint8* src_uyvy, int stride_uyvy,\n                      uint8* dst_u, uint8* dst_v, int pix);\nvoid UYVYToUV422Row_NEON(const uint8* src_uyvy,\n                         uint8* dst_u, uint8* dst_v, int pix);\n\nvoid UYVYToYRow_C(const uint8* src_uyvy, uint8* dst_y, int pix);\nvoid UYVYToUVRow_C(const uint8* src_uyvy, int stride_uyvy,\n                   uint8* dst_u, uint8* dst_v, int pix);\nvoid UYVYToUV422Row_C(const uint8* src_uyvy,\n                      uint8* dst_u, uint8* dst_v, int pix);\nvoid UYVYToYRow_Any_AVX2(const uint8* src_uyvy, uint8* dst_y, int pix);\nvoid UYVYToUVRow_Any_AVX2(const uint8* src_uyvy, int stride_uyvy,\n                          uint8* dst_u, uint8* dst_v, int pix);\nvoid UYVYToUV422Row_Any_AVX2(const uint8* src_uyvy,\n                             uint8* dst_u, uint8* dst_v, int pix);\nvoid UYVYToYRow_Any_SSE2(const uint8* src_uyvy, uint8* dst_y, int pix);\nvoid UYVYToUVRow_Any_SSE2(const uint8* src_uyvy, int stride_uyvy,\n                          uint8* dst_u, uint8* dst_v, int pix);\nvoid UYVYToUV422Row_Any_SSE2(const uint8* src_uyvy,\n                             uint8* dst_u, uint8* dst_v, int pix);\nvoid UYVYToYRow_Any_NEON(const uint8* src_uyvy, uint8* dst_y, int pix);\nvoid UYVYToUVRow_Any_NEON(const uint8* src_uyvy, int stride_uyvy,\n                          uint8* dst_u, uint8* dst_v, int pix);\nvoid UYVYToUV422Row_Any_NEON(const uint8* src_uyvy,\n                             uint8* dst_u, uint8* dst_v, int pix);\n\nvoid I422ToYUY2Row_C(const uint8* src_y,\n                     const uint8* src_u,\n                     const uint8* src_v,\n                     uint8* dst_yuy2, int width);\nvoid I422ToUYVYRow_C(const uint8* src_y,\n                     const uint8* src_u,\n                     const uint8* src_v,\n                     uint8* dst_uyvy, int width);\nvoid I422ToYUY2Row_SSE2(const uint8* src_y,\n                        const uint8* src_u,\n                        const uint8* src_v,\n                        uint8* dst_yuy2, int width);\nvoid I422ToUYVYRow_SSE2(const uint8* src_y,\n                        const uint8* src_u,\n                        const uint8* src_v,\n                        uint8* dst_uyvy, int width);\nvoid I422ToYUY2Row_Any_SSE2(const uint8* src_y,\n                            const uint8* src_u,\n                            const uint8* src_v,\n                            uint8* dst_yuy2, int width);\nvoid I422ToUYVYRow_Any_SSE2(const uint8* src_y,\n                            const uint8* src_u,\n                            const uint8* src_v,\n                            uint8* dst_uyvy, int width);\nvoid I422ToYUY2Row_NEON(const uint8* src_y,\n                        const uint8* src_u,\n                        const uint8* src_v,\n                        uint8* dst_yuy2, int width);\nvoid I422ToUYVYRow_NEON(const uint8* src_y,\n                        const uint8* src_u,\n                        const uint8* src_v,\n                        uint8* dst_uyvy, int width);\nvoid I422ToYUY2Row_Any_NEON(const uint8* src_y,\n                            const uint8* src_u,\n                            const uint8* src_v,\n                            uint8* dst_yuy2, int width);\nvoid I422ToUYVYRow_Any_NEON(const uint8* src_y,\n                            const uint8* src_u,\n                            const uint8* src_v,\n                            uint8* dst_uyvy, int width);\n\n// Effects related row functions.\nvoid ARGBAttenuateRow_C(const uint8* src_argb, uint8* dst_argb, int width);\nvoid ARGBAttenuateRow_SSE2(const uint8* src_argb, uint8* dst_argb, int width);\nvoid ARGBAttenuateRow_SSSE3(const uint8* src_argb, uint8* dst_argb, int width);\nvoid ARGBAttenuateRow_AVX2(const uint8* src_argb, uint8* dst_argb, int width);\nvoid ARGBAttenuateRow_NEON(const uint8* src_argb, uint8* dst_argb, int width);\nvoid ARGBAttenuateRow_Any_SSE2(const uint8* src_argb, uint8* dst_argb,\n                               int width);\nvoid ARGBAttenuateRow_Any_SSSE3(const uint8* src_argb, uint8* dst_argb,\n                                int width);\nvoid ARGBAttenuateRow_Any_AVX2(const uint8* src_argb, uint8* dst_argb,\n                               int width);\nvoid ARGBAttenuateRow_Any_NEON(const uint8* src_argb, uint8* dst_argb,\n                               int width);\n\n// Inverse table for unattenuate, shared by C and SSE2.\nextern const uint32 fixed_invtbl8[256];\nvoid ARGBUnattenuateRow_C(const uint8* src_argb, uint8* dst_argb, int width);\nvoid ARGBUnattenuateRow_SSE2(const uint8* src_argb, uint8* dst_argb, int width);\nvoid ARGBUnattenuateRow_AVX2(const uint8* src_argb, uint8* dst_argb, int width);\nvoid ARGBUnattenuateRow_Any_SSE2(const uint8* src_argb, uint8* dst_argb,\n                                 int width);\nvoid ARGBUnattenuateRow_Any_AVX2(const uint8* src_argb, uint8* dst_argb,\n                                 int width);\n\nvoid ARGBGrayRow_C(const uint8* src_argb, uint8* dst_argb, int width);\nvoid ARGBGrayRow_SSSE3(const uint8* src_argb, uint8* dst_argb, int width);\nvoid ARGBGrayRow_NEON(const uint8* src_argb, uint8* dst_argb, int width);\n\nvoid ARGBSepiaRow_C(uint8* dst_argb, int width);\nvoid ARGBSepiaRow_SSSE3(uint8* dst_argb, int width);\nvoid ARGBSepiaRow_NEON(uint8* dst_argb, int width);\n\nvoid ARGBColorMatrixRow_C(const uint8* src_argb, uint8* dst_argb,\n                          const int8* matrix_argb, int width);\nvoid ARGBColorMatrixRow_SSSE3(const uint8* src_argb, uint8* dst_argb,\n                              const int8* matrix_argb, int width);\nvoid ARGBColorMatrixRow_NEON(const uint8* src_argb, uint8* dst_argb,\n                             const int8* matrix_argb, int width);\n\nvoid ARGBColorTableRow_C(uint8* dst_argb, const uint8* table_argb, int width);\nvoid ARGBColorTableRow_X86(uint8* dst_argb, const uint8* table_argb, int width);\n\nvoid RGBColorTableRow_C(uint8* dst_argb, const uint8* table_argb, int width);\nvoid RGBColorTableRow_X86(uint8* dst_argb, const uint8* table_argb, int width);\n\nvoid ARGBQuantizeRow_C(uint8* dst_argb, int scale, int interval_size,\n                       int interval_offset, int width);\nvoid ARGBQuantizeRow_SSE2(uint8* dst_argb, int scale, int interval_size,\n                          int interval_offset, int width);\nvoid ARGBQuantizeRow_NEON(uint8* dst_argb, int scale, int interval_size,\n                          int interval_offset, int width);\n\nvoid ARGBShadeRow_C(const uint8* src_argb, uint8* dst_argb, int width,\n                    uint32 value);\nvoid ARGBShadeRow_SSE2(const uint8* src_argb, uint8* dst_argb, int width,\n                       uint32 value);\nvoid ARGBShadeRow_NEON(const uint8* src_argb, uint8* dst_argb, int width,\n                       uint32 value);\n\n// Used for blur.\nvoid CumulativeSumToAverageRow_SSE2(const int32* topleft, const int32* botleft,\n                                    int width, int area, uint8* dst, int count);\nvoid ComputeCumulativeSumRow_SSE2(const uint8* row, int32* cumsum,\n                                  const int32* previous_cumsum, int width);\n\nvoid CumulativeSumToAverageRow_C(const int32* topleft, const int32* botleft,\n                                 int width, int area, uint8* dst, int count);\nvoid ComputeCumulativeSumRow_C(const uint8* row, int32* cumsum,\n                               const int32* previous_cumsum, int width);\n\nLIBYUV_API\nvoid ARGBAffineRow_C(const uint8* src_argb, int src_argb_stride,\n                     uint8* dst_argb, const float* uv_dudv, int width);\nLIBYUV_API\nvoid ARGBAffineRow_SSE2(const uint8* src_argb, int src_argb_stride,\n                        uint8* dst_argb, const float* uv_dudv, int width);\n\n// Used for I420Scale, ARGBScale, and ARGBInterpolate.\nvoid InterpolateRow_C(uint8* dst_ptr, const uint8* src_ptr,\n                      ptrdiff_t src_stride_ptr,\n                      int width, int source_y_fraction);\nvoid InterpolateRow_SSE2(uint8* dst_ptr, const uint8* src_ptr,\n                         ptrdiff_t src_stride_ptr, int width,\n                         int source_y_fraction);\nvoid InterpolateRow_SSSE3(uint8* dst_ptr, const uint8* src_ptr,\n                          ptrdiff_t src_stride_ptr, int width,\n                          int source_y_fraction);\nvoid InterpolateRow_AVX2(uint8* dst_ptr, const uint8* src_ptr,\n                         ptrdiff_t src_stride_ptr, int width,\n                         int source_y_fraction);\nvoid InterpolateRow_NEON(uint8* dst_ptr, const uint8* src_ptr,\n                         ptrdiff_t src_stride_ptr, int width,\n                         int source_y_fraction);\nvoid InterpolateRow_MIPS_DSPR2(uint8* dst_ptr, const uint8* src_ptr,\n                               ptrdiff_t src_stride_ptr, int width,\n                               int source_y_fraction);\nvoid InterpolateRow_Any_NEON(uint8* dst_ptr, const uint8* src_ptr,\n                             ptrdiff_t src_stride_ptr, int width,\n                             int source_y_fraction);\nvoid InterpolateRow_Any_SSE2(uint8* dst_ptr, const uint8* src_ptr,\n                             ptrdiff_t src_stride_ptr, int width,\n                             int source_y_fraction);\nvoid InterpolateRow_Any_SSSE3(uint8* dst_ptr, const uint8* src_ptr,\n                              ptrdiff_t src_stride_ptr, int width,\n                              int source_y_fraction);\nvoid InterpolateRow_Any_AVX2(uint8* dst_ptr, const uint8* src_ptr,\n                             ptrdiff_t src_stride_ptr, int width,\n                             int source_y_fraction);\nvoid InterpolateRow_Any_MIPS_DSPR2(uint8* dst_ptr, const uint8* src_ptr,\n                                   ptrdiff_t src_stride_ptr, int width,\n                                   int source_y_fraction);\n\nvoid InterpolateRow_16_C(uint16* dst_ptr, const uint16* src_ptr,\n                         ptrdiff_t src_stride_ptr,\n                         int width, int source_y_fraction);\n\n// Sobel images.\nvoid SobelXRow_C(const uint8* src_y0, const uint8* src_y1, const uint8* src_y2,\n                 uint8* dst_sobelx, int width);\nvoid SobelXRow_SSE2(const uint8* src_y0, const uint8* src_y1,\n                    const uint8* src_y2, uint8* dst_sobelx, int width);\nvoid SobelXRow_NEON(const uint8* src_y0, const uint8* src_y1,\n                    const uint8* src_y2, uint8* dst_sobelx, int width);\nvoid SobelYRow_C(const uint8* src_y0, const uint8* src_y1,\n                 uint8* dst_sobely, int width);\nvoid SobelYRow_SSE2(const uint8* src_y0, const uint8* src_y1,\n                    uint8* dst_sobely, int width);\nvoid SobelYRow_NEON(const uint8* src_y0, const uint8* src_y1,\n                    uint8* dst_sobely, int width);\nvoid SobelRow_C(const uint8* src_sobelx, const uint8* src_sobely,\n                uint8* dst_argb, int width);\nvoid SobelRow_SSE2(const uint8* src_sobelx, const uint8* src_sobely,\n                   uint8* dst_argb, int width);\nvoid SobelRow_NEON(const uint8* src_sobelx, const uint8* src_sobely,\n                   uint8* dst_argb, int width);\nvoid SobelToPlaneRow_C(const uint8* src_sobelx, const uint8* src_sobely,\n                       uint8* dst_y, int width);\nvoid SobelToPlaneRow_SSE2(const uint8* src_sobelx, const uint8* src_sobely,\n                          uint8* dst_y, int width);\nvoid SobelToPlaneRow_NEON(const uint8* src_sobelx, const uint8* src_sobely,\n                          uint8* dst_y, int width);\nvoid SobelXYRow_C(const uint8* src_sobelx, const uint8* src_sobely,\n                  uint8* dst_argb, int width);\nvoid SobelXYRow_SSE2(const uint8* src_sobelx, const uint8* src_sobely,\n                     uint8* dst_argb, int width);\nvoid SobelXYRow_NEON(const uint8* src_sobelx, const uint8* src_sobely,\n                     uint8* dst_argb, int width);\nvoid SobelRow_Any_SSE2(const uint8* src_sobelx, const uint8* src_sobely,\n                       uint8* dst_argb, int width);\nvoid SobelRow_Any_NEON(const uint8* src_sobelx, const uint8* src_sobely,\n                       uint8* dst_argb, int width);\nvoid SobelToPlaneRow_Any_SSE2(const uint8* src_sobelx, const uint8* src_sobely,\n                              uint8* dst_y, int width);\nvoid SobelToPlaneRow_Any_NEON(const uint8* src_sobelx, const uint8* src_sobely,\n                              uint8* dst_y, int width);\nvoid SobelXYRow_Any_SSE2(const uint8* src_sobelx, const uint8* src_sobely,\n                         uint8* dst_argb, int width);\nvoid SobelXYRow_Any_NEON(const uint8* src_sobelx, const uint8* src_sobely,\n                         uint8* dst_argb, int width);\n\nvoid ARGBPolynomialRow_C(const uint8* src_argb,\n                         uint8* dst_argb, const float* poly,\n                         int width);\nvoid ARGBPolynomialRow_SSE2(const uint8* src_argb,\n                            uint8* dst_argb, const float* poly,\n                            int width);\nvoid ARGBPolynomialRow_AVX2(const uint8* src_argb,\n                            uint8* dst_argb, const float* poly,\n                            int width);\n\nvoid ARGBLumaColorTableRow_C(const uint8* src_argb, uint8* dst_argb, int width,\n                             const uint8* luma, uint32 lumacoeff);\nvoid ARGBLumaColorTableRow_SSSE3(const uint8* src_argb, uint8* dst_argb,\n                                 int width,\n                                 const uint8* luma, uint32 lumacoeff);\n\n#ifdef __cplusplus\n}  // extern \"C\"\n}  // namespace libyuv\n#endif\n\n#endif  // INCLUDE_LIBYUV_ROW_H_  NOLINT\n"
  },
  {
    "path": "lib/libyuv/include/libyuv/scale.h",
    "content": "/*\n *  Copyright 2011 The LibYuv Project Authors. All rights reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree. An additional intellectual property rights grant can be found\n *  in the file PATENTS. All contributing project authors may\n *  be found in the AUTHORS file in the root of the source tree.\n */\n\n#ifndef INCLUDE_LIBYUV_SCALE_H_  // NOLINT\n#define INCLUDE_LIBYUV_SCALE_H_\n\n#include \"basic_types.h\"\n\n#ifdef __cplusplus\nnamespace libyuv {\nextern \"C\" {\n#endif\n\n// Supported filtering.\ntypedef enum FilterMode {\n  kFilterNone = 0,  // Point sample; Fastest.\n  kFilterLinear = 1,  // Filter horizontally only.\n  kFilterBilinear = 2,  // Faster than box, but lower quality scaling down.\n  kFilterBox = 3  // Highest quality.\n} FilterModeEnum;\n\n// Scale a YUV plane.\nLIBYUV_API\nvoid ScalePlane(const uint8* src, int src_stride,\n                int src_width, int src_height,\n                uint8* dst, int dst_stride,\n                int dst_width, int dst_height,\n                enum FilterMode filtering);\n\nLIBYUV_API\nvoid ScalePlane_16(const uint16* src, int src_stride,\n                   int src_width, int src_height,\n                   uint16* dst, int dst_stride,\n                   int dst_width, int dst_height,\n                   enum FilterMode filtering);\n\n// Scales a YUV 4:2:0 image from the src width and height to the\n// dst width and height.\n// If filtering is kFilterNone, a simple nearest-neighbor algorithm is\n// used. This produces basic (blocky) quality at the fastest speed.\n// If filtering is kFilterBilinear, interpolation is used to produce a better\n// quality image, at the expense of speed.\n// If filtering is kFilterBox, averaging is used to produce ever better\n// quality image, at further expense of speed.\n// Returns 0 if successful.\n\nLIBYUV_API\nint I420Scale(const uint8* src_y, int src_stride_y,\n              const uint8* src_u, int src_stride_u,\n              const uint8* src_v, int src_stride_v,\n              int src_width, int src_height,\n              uint8* dst_y, int dst_stride_y,\n              uint8* dst_u, int dst_stride_u,\n              uint8* dst_v, int dst_stride_v,\n              int dst_width, int dst_height,\n              enum FilterMode filtering);\n\nLIBYUV_API\nint I420Scale_16(const uint16* src_y, int src_stride_y,\n                 const uint16* src_u, int src_stride_u,\n                 const uint16* src_v, int src_stride_v,\n                 int src_width, int src_height,\n                 uint16* dst_y, int dst_stride_y,\n                 uint16* dst_u, int dst_stride_u,\n                 uint16* dst_v, int dst_stride_v,\n                 int dst_width, int dst_height,\n                 enum FilterMode filtering);\n\n#ifdef __cplusplus\n// Legacy API.  Deprecated.\nLIBYUV_API\nint Scale(const uint8* src_y, const uint8* src_u, const uint8* src_v,\n          int src_stride_y, int src_stride_u, int src_stride_v,\n          int src_width, int src_height,\n          uint8* dst_y, uint8* dst_u, uint8* dst_v,\n          int dst_stride_y, int dst_stride_u, int dst_stride_v,\n          int dst_width, int dst_height,\n          LIBYUV_BOOL interpolate);\n\n// Legacy API.  Deprecated.\nLIBYUV_API\nint ScaleOffset(const uint8* src_i420, int src_width, int src_height,\n                uint8* dst_i420, int dst_width, int dst_height, int dst_yoffset,\n                LIBYUV_BOOL interpolate);\n\n// For testing, allow disabling of specialized scalers.\nLIBYUV_API\nvoid SetUseReferenceImpl(LIBYUV_BOOL use);\n#endif  // __cplusplus\n\n#ifdef __cplusplus\n}  // extern \"C\"\n}  // namespace libyuv\n#endif\n\n#endif  // INCLUDE_LIBYUV_SCALE_H_  NOLINT\n"
  },
  {
    "path": "lib/libyuv/include/libyuv/scale_argb.h",
    "content": "/*\n *  Copyright 2012 The LibYuv Project Authors. All rights reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree. An additional intellectual property rights grant can be found\n *  in the file PATENTS. All contributing project authors may\n *  be found in the AUTHORS file in the root of the source tree.\n */\n\n#ifndef INCLUDE_LIBYUV_SCALE_ARGB_H_  // NOLINT\n#define INCLUDE_LIBYUV_SCALE_ARGB_H_\n\n#include \"basic_types.h\"\n#include \"scale.h\"  // For FilterMode\n\n#ifdef __cplusplus\nnamespace libyuv {\nextern \"C\" {\n#endif\n\nLIBYUV_API\nint ARGBScale(const uint8* src_argb, int src_stride_argb,\n              int src_width, int src_height,\n              uint8* dst_argb, int dst_stride_argb,\n              int dst_width, int dst_height,\n              enum FilterMode filtering);\n\n// Clipped scale takes destination rectangle coordinates for clip values.\nLIBYUV_API\nint ARGBScaleClip(const uint8* src_argb, int src_stride_argb,\n                  int src_width, int src_height,\n                  uint8* dst_argb, int dst_stride_argb,\n                  int dst_width, int dst_height,\n                  int clip_x, int clip_y, int clip_width, int clip_height,\n                  enum FilterMode filtering);\n\n// TODO(fbarchard): Implement this.\n// Scale with YUV conversion to ARGB and clipping.\nLIBYUV_API\nint YUVToARGBScaleClip(const uint8* src_y, int src_stride_y,\n                       const uint8* src_u, int src_stride_u,\n                       const uint8* src_v, int src_stride_v,\n                       uint32 src_fourcc,\n                       int src_width, int src_height,\n                       uint8* dst_argb, int dst_stride_argb,\n                       uint32 dst_fourcc,\n                       int dst_width, int dst_height,\n                       int clip_x, int clip_y, int clip_width, int clip_height,\n                       enum FilterMode filtering);\n\n#ifdef __cplusplus\n}  // extern \"C\"\n}  // namespace libyuv\n#endif\n\n#endif  // INCLUDE_LIBYUV_SCALE_ARGB_H_  NOLINT\n"
  },
  {
    "path": "lib/libyuv/include/libyuv/scale_row.h",
    "content": "/*\n *  Copyright 2013 The LibYuv Project Authors. All rights reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree. An additional intellectual property rights grant can be found\n *  in the file PATENTS. All contributing project authors may\n *  be found in the AUTHORS file in the root of the source tree.\n */\n\n#ifndef INCLUDE_LIBYUV_SCALE_ROW_H_  // NOLINT\n#define INCLUDE_LIBYUV_SCALE_ROW_H_\n\n#include \"basic_types.h\"\n#include \"scale.h\"\n\n#ifdef __cplusplus\nnamespace libyuv {\nextern \"C\" {\n#endif\n\n#if defined(__pnacl__) || defined(__CLR_VER) || defined(COVERAGE_ENABLED) || \\\n    defined(TARGET_IPHONE_SIMULATOR)\n#define LIBYUV_DISABLE_X86\n#endif\n\n// Visual C 2012 required for AVX2.\n#if defined(_M_IX86) && !defined(__clang__) && \\\n    defined(_MSC_VER) && _MSC_VER >= 1700\n#define VISUALC_HAS_AVX2 1\n#endif  // VisualStudio >= 2012\n\n// The following are available on all x86 platforms:\n#if !defined(LIBYUV_DISABLE_X86) && \\\n    (defined(_M_IX86) || defined(__x86_64__) || defined(__i386__))\n#define HAS_FIXEDDIV1_X86\n#define HAS_FIXEDDIV_X86\n#define HAS_SCALEARGBCOLS_SSE2\n#define HAS_SCALEARGBCOLSUP2_SSE2\n#define HAS_SCALEARGBFILTERCOLS_SSSE3\n#define HAS_SCALEARGBROWDOWN2_SSE2\n#define HAS_SCALEARGBROWDOWNEVEN_SSE2\n#define HAS_SCALECOLSUP2_SSE2\n#define HAS_SCALEFILTERCOLS_SSSE3\n#define HAS_SCALEROWDOWN2_SSE2\n#define HAS_SCALEROWDOWN34_SSSE3\n#define HAS_SCALEROWDOWN38_SSSE3\n#define HAS_SCALEROWDOWN4_SSE2\n#endif\n\n// The following are available on VS2012:\n#if !defined(LIBYUV_DISABLE_X86) && defined(VISUALC_HAS_AVX2)\n#define HAS_SCALEADDROW_AVX2\n#define HAS_SCALEROWDOWN2_AVX2\n#define HAS_SCALEROWDOWN4_AVX2\n#endif\n\n// The following are available on Visual C:\n#if !defined(LIBYUV_DISABLE_X86) && defined(_M_IX86) && !defined(__clang__)\n#define HAS_SCALEADDROW_SSE2\n#endif\n\n// The following are available on Neon platforms:\n#if !defined(LIBYUV_DISABLE_NEON) && !defined(__native_client__) && \\\n    (defined(__ARM_NEON__) || defined(LIBYUV_NEON) || defined(__aarch64__))\n#define HAS_SCALEARGBCOLS_NEON\n#define HAS_SCALEARGBROWDOWN2_NEON\n#define HAS_SCALEARGBROWDOWNEVEN_NEON\n#define HAS_SCALEFILTERCOLS_NEON\n#define HAS_SCALEROWDOWN2_NEON\n#define HAS_SCALEROWDOWN34_NEON\n#define HAS_SCALEROWDOWN38_NEON\n#define HAS_SCALEROWDOWN4_NEON\n#define HAS_SCALEARGBFILTERCOLS_NEON\n#endif\n\n// The following are available on Mips platforms:\n#if !defined(LIBYUV_DISABLE_MIPS) && !defined(__native_client__) && \\\n    defined(__mips__) && defined(__mips_dsp) && (__mips_dsp_rev >= 2)\n#define HAS_SCALEROWDOWN2_MIPS_DSPR2\n#define HAS_SCALEROWDOWN4_MIPS_DSPR2\n#define HAS_SCALEROWDOWN34_MIPS_DSPR2\n#define HAS_SCALEROWDOWN38_MIPS_DSPR2\n#endif\n\n// Scale ARGB vertically with bilinear interpolation.\nvoid ScalePlaneVertical(int src_height,\n                        int dst_width, int dst_height,\n                        int src_stride, int dst_stride,\n                        const uint8* src_argb, uint8* dst_argb,\n                        int x, int y, int dy,\n                        int bpp, enum FilterMode filtering);\n\nvoid ScalePlaneVertical_16(int src_height,\n                           int dst_width, int dst_height,\n                           int src_stride, int dst_stride,\n                           const uint16* src_argb, uint16* dst_argb,\n                           int x, int y, int dy,\n                           int wpp, enum FilterMode filtering);\n\n// Simplify the filtering based on scale factors.\nenum FilterMode ScaleFilterReduce(int src_width, int src_height,\n                                  int dst_width, int dst_height,\n                                  enum FilterMode filtering);\n\n// Divide num by div and return as 16.16 fixed point result.\nint FixedDiv_C(int num, int div);\nint FixedDiv_X86(int num, int div);\n// Divide num - 1 by div - 1 and return as 16.16 fixed point result.\nint FixedDiv1_C(int num, int div);\nint FixedDiv1_X86(int num, int div);\n#ifdef HAS_FIXEDDIV_X86\n#define FixedDiv FixedDiv_X86\n#define FixedDiv1 FixedDiv1_X86\n#else\n#define FixedDiv FixedDiv_C\n#define FixedDiv1 FixedDiv1_C\n#endif\n\n// Compute slope values for stepping.\nvoid ScaleSlope(int src_width, int src_height,\n                int dst_width, int dst_height,\n                enum FilterMode filtering,\n                int* x, int* y, int* dx, int* dy);\n\nvoid ScaleRowDown2_C(const uint8* src_ptr, ptrdiff_t src_stride,\n                     uint8* dst, int dst_width);\nvoid ScaleRowDown2_16_C(const uint16* src_ptr, ptrdiff_t src_stride,\n                        uint16* dst, int dst_width);\nvoid ScaleRowDown2Linear_C(const uint8* src_ptr, ptrdiff_t src_stride,\n                           uint8* dst, int dst_width);\nvoid ScaleRowDown2Linear_16_C(const uint16* src_ptr, ptrdiff_t src_stride,\n                              uint16* dst, int dst_width);\nvoid ScaleRowDown2Box_C(const uint8* src_ptr, ptrdiff_t src_stride,\n                        uint8* dst, int dst_width);\nvoid ScaleRowDown2Box_16_C(const uint16* src_ptr, ptrdiff_t src_stride,\n                           uint16* dst, int dst_width);\nvoid ScaleRowDown4_C(const uint8* src_ptr, ptrdiff_t src_stride,\n                     uint8* dst, int dst_width);\nvoid ScaleRowDown4_16_C(const uint16* src_ptr, ptrdiff_t src_stride,\n                        uint16* dst, int dst_width);\nvoid ScaleRowDown4Box_C(const uint8* src_ptr, ptrdiff_t src_stride,\n                        uint8* dst, int dst_width);\nvoid ScaleRowDown4Box_16_C(const uint16* src_ptr, ptrdiff_t src_stride,\n                           uint16* dst, int dst_width);\nvoid ScaleRowDown34_C(const uint8* src_ptr, ptrdiff_t src_stride,\n                      uint8* dst, int dst_width);\nvoid ScaleRowDown34_16_C(const uint16* src_ptr, ptrdiff_t src_stride,\n                         uint16* dst, int dst_width);\nvoid ScaleRowDown34_0_Box_C(const uint8* src_ptr, ptrdiff_t src_stride,\n                            uint8* d, int dst_width);\nvoid ScaleRowDown34_0_Box_16_C(const uint16* src_ptr, ptrdiff_t src_stride,\n                               uint16* d, int dst_width);\nvoid ScaleRowDown34_1_Box_C(const uint8* src_ptr, ptrdiff_t src_stride,\n                            uint8* d, int dst_width);\nvoid ScaleRowDown34_1_Box_16_C(const uint16* src_ptr, ptrdiff_t src_stride,\n                               uint16* d, int dst_width);\nvoid ScaleCols_C(uint8* dst_ptr, const uint8* src_ptr,\n                 int dst_width, int x, int dx);\nvoid ScaleCols_16_C(uint16* dst_ptr, const uint16* src_ptr,\n                    int dst_width, int x, int dx);\nvoid ScaleColsUp2_C(uint8* dst_ptr, const uint8* src_ptr,\n                    int dst_width, int, int);\nvoid ScaleColsUp2_16_C(uint16* dst_ptr, const uint16* src_ptr,\n                       int dst_width, int, int);\nvoid ScaleFilterCols_C(uint8* dst_ptr, const uint8* src_ptr,\n                       int dst_width, int x, int dx);\nvoid ScaleFilterCols_16_C(uint16* dst_ptr, const uint16* src_ptr,\n                          int dst_width, int x, int dx);\nvoid ScaleFilterCols64_C(uint8* dst_ptr, const uint8* src_ptr,\n                         int dst_width, int x, int dx);\nvoid ScaleFilterCols64_16_C(uint16* dst_ptr, const uint16* src_ptr,\n                            int dst_width, int x, int dx);\nvoid ScaleRowDown38_C(const uint8* src_ptr, ptrdiff_t src_stride,\n                      uint8* dst, int dst_width);\nvoid ScaleRowDown38_16_C(const uint16* src_ptr, ptrdiff_t src_stride,\n                         uint16* dst, int dst_width);\nvoid ScaleRowDown38_3_Box_C(const uint8* src_ptr,\n                            ptrdiff_t src_stride,\n                            uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown38_3_Box_16_C(const uint16* src_ptr,\n                               ptrdiff_t src_stride,\n                               uint16* dst_ptr, int dst_width);\nvoid ScaleRowDown38_2_Box_C(const uint8* src_ptr, ptrdiff_t src_stride,\n                            uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown38_2_Box_16_C(const uint16* src_ptr, ptrdiff_t src_stride,\n                               uint16* dst_ptr, int dst_width);\nvoid ScaleAddRow_C(const uint8* src_ptr, uint16* dst_ptr, int src_width);\nvoid ScaleAddRow_16_C(const uint16* src_ptr, uint32* dst_ptr, int src_width);\nvoid ScaleARGBRowDown2_C(const uint8* src_argb,\n                         ptrdiff_t src_stride,\n                         uint8* dst_argb, int dst_width);\nvoid ScaleARGBRowDown2Linear_C(const uint8* src_argb,\n                               ptrdiff_t src_stride,\n                               uint8* dst_argb, int dst_width);\nvoid ScaleARGBRowDown2Box_C(const uint8* src_argb, ptrdiff_t src_stride,\n                            uint8* dst_argb, int dst_width);\nvoid ScaleARGBRowDownEven_C(const uint8* src_argb, ptrdiff_t src_stride,\n                            int src_stepx,\n                            uint8* dst_argb, int dst_width);\nvoid ScaleARGBRowDownEvenBox_C(const uint8* src_argb,\n                               ptrdiff_t src_stride,\n                               int src_stepx,\n                               uint8* dst_argb, int dst_width);\nvoid ScaleARGBCols_C(uint8* dst_argb, const uint8* src_argb,\n                     int dst_width, int x, int dx);\nvoid ScaleARGBCols64_C(uint8* dst_argb, const uint8* src_argb,\n                       int dst_width, int x, int dx);\nvoid ScaleARGBColsUp2_C(uint8* dst_argb, const uint8* src_argb,\n                        int dst_width, int, int);\nvoid ScaleARGBFilterCols_C(uint8* dst_argb, const uint8* src_argb,\n                           int dst_width, int x, int dx);\nvoid ScaleARGBFilterCols64_C(uint8* dst_argb, const uint8* src_argb,\n                             int dst_width, int x, int dx);\n\n// Specialized scalers for x86.\nvoid ScaleRowDown2_SSE2(const uint8* src_ptr, ptrdiff_t src_stride,\n                        uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown2Linear_SSE2(const uint8* src_ptr, ptrdiff_t src_stride,\n                              uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown2Box_SSE2(const uint8* src_ptr, ptrdiff_t src_stride,\n                           uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown2_AVX2(const uint8* src_ptr, ptrdiff_t src_stride,\n                        uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown2Linear_AVX2(const uint8* src_ptr, ptrdiff_t src_stride,\n                              uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown2Box_AVX2(const uint8* src_ptr, ptrdiff_t src_stride,\n                           uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown4_SSE2(const uint8* src_ptr, ptrdiff_t src_stride,\n                        uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown4Box_SSE2(const uint8* src_ptr, ptrdiff_t src_stride,\n                           uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown4_AVX2(const uint8* src_ptr, ptrdiff_t src_stride,\n                        uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown4Box_AVX2(const uint8* src_ptr, ptrdiff_t src_stride,\n                           uint8* dst_ptr, int dst_width);\n\nvoid ScaleRowDown34_SSSE3(const uint8* src_ptr, ptrdiff_t src_stride,\n                          uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown34_1_Box_SSSE3(const uint8* src_ptr,\n                                ptrdiff_t src_stride,\n                                uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown34_0_Box_SSSE3(const uint8* src_ptr,\n                                ptrdiff_t src_stride,\n                                uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown38_SSSE3(const uint8* src_ptr, ptrdiff_t src_stride,\n                          uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown38_3_Box_SSSE3(const uint8* src_ptr,\n                                ptrdiff_t src_stride,\n                                uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown38_2_Box_SSSE3(const uint8* src_ptr,\n                                ptrdiff_t src_stride,\n                                uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown2_Any_SSE2(const uint8* src_ptr, ptrdiff_t src_stride,\n                            uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown2Linear_Any_SSE2(const uint8* src_ptr, ptrdiff_t src_stride,\n                                  uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown2Box_Any_SSE2(const uint8* src_ptr, ptrdiff_t src_stride,\n                               uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown2_Any_AVX2(const uint8* src_ptr, ptrdiff_t src_stride,\n                            uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown2Linear_Any_AVX2(const uint8* src_ptr, ptrdiff_t src_stride,\n                                  uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown2Box_Any_AVX2(const uint8* src_ptr, ptrdiff_t src_stride,\n                           uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown4_Any_SSE2(const uint8* src_ptr, ptrdiff_t src_stride,\n                            uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown4Box_Any_SSE2(const uint8* src_ptr, ptrdiff_t src_stride,\n                               uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown4_Any_AVX2(const uint8* src_ptr, ptrdiff_t src_stride,\n                            uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown4Box_Any_AVX2(const uint8* src_ptr, ptrdiff_t src_stride,\n                               uint8* dst_ptr, int dst_width);\n\nvoid ScaleRowDown34_Any_SSSE3(const uint8* src_ptr, ptrdiff_t src_stride,\n                              uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown34_1_Box_Any_SSSE3(const uint8* src_ptr,\n                                    ptrdiff_t src_stride,\n                                    uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown34_0_Box_Any_SSSE3(const uint8* src_ptr,\n                                    ptrdiff_t src_stride,\n                                    uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown38_Any_SSSE3(const uint8* src_ptr, ptrdiff_t src_stride,\n                              uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown38_3_Box_Any_SSSE3(const uint8* src_ptr,\n                                    ptrdiff_t src_stride,\n                                    uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown38_2_Box_Any_SSSE3(const uint8* src_ptr,\n                                    ptrdiff_t src_stride,\n                                    uint8* dst_ptr, int dst_width);\n\nvoid ScaleAddRow_SSE2(const uint8* src_ptr, uint16* dst_ptr, int src_width);\nvoid ScaleAddRow_AVX2(const uint8* src_ptr, uint16* dst_ptr, int src_width);\nvoid ScaleAddRow_Any_SSE2(const uint8* src_ptr, uint16* dst_ptr, int src_width);\nvoid ScaleAddRow_Any_AVX2(const uint8* src_ptr, uint16* dst_ptr, int src_width);\n\nvoid ScaleFilterCols_SSSE3(uint8* dst_ptr, const uint8* src_ptr,\n                           int dst_width, int x, int dx);\nvoid ScaleColsUp2_SSE2(uint8* dst_ptr, const uint8* src_ptr,\n                       int dst_width, int x, int dx);\n\n\n// ARGB Column functions\nvoid ScaleARGBCols_SSE2(uint8* dst_argb, const uint8* src_argb,\n                        int dst_width, int x, int dx);\nvoid ScaleARGBFilterCols_SSSE3(uint8* dst_argb, const uint8* src_argb,\n                               int dst_width, int x, int dx);\nvoid ScaleARGBColsUp2_SSE2(uint8* dst_argb, const uint8* src_argb,\n                           int dst_width, int x, int dx);\nvoid ScaleARGBFilterCols_NEON(uint8* dst_argb, const uint8* src_argb,\n                              int dst_width, int x, int dx);\nvoid ScaleARGBCols_NEON(uint8* dst_argb, const uint8* src_argb,\n                        int dst_width, int x, int dx);\nvoid ScaleARGBFilterCols_Any_NEON(uint8* dst_argb, const uint8* src_argb,\n                                  int dst_width, int x, int dx);\nvoid ScaleARGBCols_Any_NEON(uint8* dst_argb, const uint8* src_argb,\n                            int dst_width, int x, int dx);\n\n// ARGB Row functions\nvoid ScaleARGBRowDown2_SSE2(const uint8* src_argb, ptrdiff_t src_stride,\n                            uint8* dst_argb, int dst_width);\nvoid ScaleARGBRowDown2Linear_SSE2(const uint8* src_argb, ptrdiff_t src_stride,\n                                  uint8* dst_argb, int dst_width);\nvoid ScaleARGBRowDown2Box_SSE2(const uint8* src_argb, ptrdiff_t src_stride,\n                               uint8* dst_argb, int dst_width);\nvoid ScaleARGBRowDown2_NEON(const uint8* src_ptr, ptrdiff_t src_stride,\n                            uint8* dst, int dst_width);\nvoid ScaleARGBRowDown2Linear_NEON(const uint8* src_argb, ptrdiff_t src_stride,\n                                  uint8* dst_argb, int dst_width);\nvoid ScaleARGBRowDown2Box_NEON(const uint8* src_ptr, ptrdiff_t src_stride,\n                               uint8* dst, int dst_width);\nvoid ScaleARGBRowDown2_Any_SSE2(const uint8* src_argb, ptrdiff_t src_stride,\n                                uint8* dst_argb, int dst_width);\nvoid ScaleARGBRowDown2Linear_Any_SSE2(const uint8* src_argb,\n                                      ptrdiff_t src_stride,\n                                      uint8* dst_argb, int dst_width);\nvoid ScaleARGBRowDown2Box_Any_SSE2(const uint8* src_argb, ptrdiff_t src_stride,\n                                   uint8* dst_argb, int dst_width);\nvoid ScaleARGBRowDown2_Any_NEON(const uint8* src_ptr, ptrdiff_t src_stride,\n                                uint8* dst, int dst_width);\nvoid ScaleARGBRowDown2Linear_Any_NEON(const uint8* src_argb,\n                                      ptrdiff_t src_stride,\n                                      uint8* dst_argb, int dst_width);\nvoid ScaleARGBRowDown2Box_Any_NEON(const uint8* src_ptr, ptrdiff_t src_stride,\n                                   uint8* dst, int dst_width);\n\nvoid ScaleARGBRowDownEven_SSE2(const uint8* src_argb, ptrdiff_t src_stride,\n                               int src_stepx, uint8* dst_argb, int dst_width);\nvoid ScaleARGBRowDownEvenBox_SSE2(const uint8* src_argb, ptrdiff_t src_stride,\n                                  int src_stepx,\n                                  uint8* dst_argb, int dst_width);\nvoid ScaleARGBRowDownEven_NEON(const uint8* src_argb, ptrdiff_t src_stride,\n                               int src_stepx,\n                               uint8* dst_argb, int dst_width);\nvoid ScaleARGBRowDownEvenBox_NEON(const uint8* src_argb, ptrdiff_t src_stride,\n                                  int src_stepx,\n                                  uint8* dst_argb, int dst_width);\nvoid ScaleARGBRowDownEven_Any_SSE2(const uint8* src_argb, ptrdiff_t src_stride,\n                                   int src_stepx,\n                                   uint8* dst_argb, int dst_width);\nvoid ScaleARGBRowDownEvenBox_Any_SSE2(const uint8* src_argb,\n                                      ptrdiff_t src_stride,\n                                      int src_stepx,\n                                      uint8* dst_argb, int dst_width);\nvoid ScaleARGBRowDownEven_Any_NEON(const uint8* src_argb, ptrdiff_t src_stride,\n                                   int src_stepx,\n                                   uint8* dst_argb, int dst_width);\nvoid ScaleARGBRowDownEvenBox_Any_NEON(const uint8* src_argb,\n                                      ptrdiff_t src_stride,\n                                      int src_stepx,\n                                      uint8* dst_argb, int dst_width);\n\n// ScaleRowDown2Box also used by planar functions\n// NEON downscalers with interpolation.\n\n// Note - not static due to reuse in convert for 444 to 420.\nvoid ScaleRowDown2_NEON(const uint8* src_ptr, ptrdiff_t src_stride,\n                        uint8* dst, int dst_width);\nvoid ScaleRowDown2Linear_NEON(const uint8* src_ptr, ptrdiff_t src_stride,\n                              uint8* dst, int dst_width);\nvoid ScaleRowDown2Box_NEON(const uint8* src_ptr, ptrdiff_t src_stride,\n                           uint8* dst, int dst_width);\n\nvoid ScaleRowDown4_NEON(const uint8* src_ptr, ptrdiff_t src_stride,\n                        uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown4Box_NEON(const uint8* src_ptr, ptrdiff_t src_stride,\n                           uint8* dst_ptr, int dst_width);\n\n// Down scale from 4 to 3 pixels. Use the neon multilane read/write\n//  to load up the every 4th pixel into a 4 different registers.\n// Point samples 32 pixels to 24 pixels.\nvoid ScaleRowDown34_NEON(const uint8* src_ptr,\n                         ptrdiff_t src_stride,\n                         uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown34_0_Box_NEON(const uint8* src_ptr,\n                               ptrdiff_t src_stride,\n                               uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown34_1_Box_NEON(const uint8* src_ptr,\n                               ptrdiff_t src_stride,\n                               uint8* dst_ptr, int dst_width);\n\n// 32 -> 12\nvoid ScaleRowDown38_NEON(const uint8* src_ptr,\n                         ptrdiff_t src_stride,\n                         uint8* dst_ptr, int dst_width);\n// 32x3 -> 12x1\nvoid ScaleRowDown38_3_Box_NEON(const uint8* src_ptr,\n                               ptrdiff_t src_stride,\n                               uint8* dst_ptr, int dst_width);\n// 32x2 -> 12x1\nvoid ScaleRowDown38_2_Box_NEON(const uint8* src_ptr,\n                               ptrdiff_t src_stride,\n                               uint8* dst_ptr, int dst_width);\n\nvoid ScaleRowDown2_Any_NEON(const uint8* src_ptr, ptrdiff_t src_stride,\n                            uint8* dst, int dst_width);\nvoid ScaleRowDown2Linear_Any_NEON(const uint8* src_ptr, ptrdiff_t src_stride,\n                                  uint8* dst, int dst_width);\nvoid ScaleRowDown2Box_Any_NEON(const uint8* src_ptr, ptrdiff_t src_stride,\n                               uint8* dst, int dst_width);\nvoid ScaleRowDown4_Any_NEON(const uint8* src_ptr, ptrdiff_t src_stride,\n                            uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown4Box_Any_NEON(const uint8* src_ptr, ptrdiff_t src_stride,\n                               uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown34_Any_NEON(const uint8* src_ptr, ptrdiff_t src_stride,\n                             uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown34_0_Box_Any_NEON(const uint8* src_ptr, ptrdiff_t src_stride,\n                                   uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown34_1_Box_Any_NEON(const uint8* src_ptr, ptrdiff_t src_stride,\n                                   uint8* dst_ptr, int dst_width);\n// 32 -> 12\nvoid ScaleRowDown38_Any_NEON(const uint8* src_ptr, ptrdiff_t src_stride,\n                             uint8* dst_ptr, int dst_width);\n// 32x3 -> 12x1\nvoid ScaleRowDown38_3_Box_Any_NEON(const uint8* src_ptr, ptrdiff_t src_stride,\n                               uint8* dst_ptr, int dst_width);\n// 32x2 -> 12x1\nvoid ScaleRowDown38_2_Box_Any_NEON(const uint8* src_ptr, ptrdiff_t src_stride,\n                               uint8* dst_ptr, int dst_width);\n\nvoid ScaleAddRow_NEON(const uint8* src_ptr, uint16* dst_ptr, int src_width);\nvoid ScaleAddRow_Any_NEON(const uint8* src_ptr, uint16* dst_ptr, int src_width);\n\nvoid ScaleFilterCols_NEON(uint8* dst_ptr, const uint8* src_ptr,\n                          int dst_width, int x, int dx);\n\nvoid ScaleFilterCols_Any_NEON(uint8* dst_ptr, const uint8* src_ptr,\n                              int dst_width, int x, int dx);\n\n\nvoid ScaleRowDown2_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,\n                              uint8* dst, int dst_width);\nvoid ScaleRowDown2Box_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,\n                                 uint8* dst, int dst_width);\nvoid ScaleRowDown4_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,\n                              uint8* dst, int dst_width);\nvoid ScaleRowDown4Box_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,\n                                 uint8* dst, int dst_width);\nvoid ScaleRowDown34_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,\n                               uint8* dst, int dst_width);\nvoid ScaleRowDown34_0_Box_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,\n                                     uint8* d, int dst_width);\nvoid ScaleRowDown34_1_Box_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,\n                                     uint8* d, int dst_width);\nvoid ScaleRowDown38_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,\n                               uint8* dst, int dst_width);\nvoid ScaleRowDown38_2_Box_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,\n                                     uint8* dst_ptr, int dst_width);\nvoid ScaleRowDown38_3_Box_MIPS_DSPR2(const uint8* src_ptr,\n                                     ptrdiff_t src_stride,\n                                     uint8* dst_ptr, int dst_width);\n\n#ifdef __cplusplus\n}  // extern \"C\"\n}  // namespace libyuv\n#endif\n\n#endif  // INCLUDE_LIBYUV_SCALE_ROW_H_  NOLINT\n"
  },
  {
    "path": "lib/libyuv/include/libyuv/version.h",
    "content": "/*\n *  Copyright 2012 The LibYuv Project Authors. All rights reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree. An additional intellectual property rights grant can be found\n *  in the file PATENTS. All contributing project authors may\n *  be found in the AUTHORS file in the root of the source tree.\n */\n\n#ifndef INCLUDE_LIBYUV_VERSION_H_  // NOLINT\n#define INCLUDE_LIBYUV_VERSION_H_\n\n#define LIBYUV_VERSION 1419\n\n#endif  // INCLUDE_LIBYUV_VERSION_H_  NOLINT\n"
  },
  {
    "path": "lib/libyuv/include/libyuv/video_common.h",
    "content": "/*\n *  Copyright 2011 The LibYuv Project Authors. All rights reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree. An additional intellectual property rights grant can be found\n *  in the file PATENTS. All contributing project authors may\n *  be found in the AUTHORS file in the root of the source tree.\n */\n\n// Common definitions for video, including fourcc and VideoFormat.\n\n#ifndef INCLUDE_LIBYUV_VIDEO_COMMON_H_  // NOLINT\n#define INCLUDE_LIBYUV_VIDEO_COMMON_H_\n\n#include \"basic_types.h\"\n\n#ifdef __cplusplus\nnamespace libyuv {\nextern \"C\" {\n#endif\n\n//////////////////////////////////////////////////////////////////////////////\n// Definition of FourCC codes\n//////////////////////////////////////////////////////////////////////////////\n\n// Convert four characters to a FourCC code.\n// Needs to be a macro otherwise the OS X compiler complains when the kFormat*\n// constants are used in a switch.\n#ifdef __cplusplus\n#define FOURCC(a, b, c, d) ( \\\n    (static_cast<uint32>(a)) | (static_cast<uint32>(b) << 8) | \\\n    (static_cast<uint32>(c) << 16) | (static_cast<uint32>(d) << 24))\n#else\n#define FOURCC(a, b, c, d) ( \\\n    ((uint32)(a)) | ((uint32)(b) << 8) | /* NOLINT */ \\\n    ((uint32)(c) << 16) | ((uint32)(d) << 24))  /* NOLINT */\n#endif\n\n// Some pages discussing FourCC codes:\n//   http://www.fourcc.org/yuv.php\n//   http://v4l2spec.bytesex.org/spec/book1.htm\n//   http://developer.apple.com/quicktime/icefloe/dispatch020.html\n//   http://msdn.microsoft.com/library/windows/desktop/dd206750.aspx#nv12\n//   http://people.xiph.org/~xiphmont/containers/nut/nut4cc.txt\n\n// FourCC codes grouped according to implementation efficiency.\n// Primary formats should convert in 1 efficient step.\n// Secondary formats are converted in 2 steps.\n// Auxilliary formats call primary converters.\nenum FourCC {\n  // 9 Primary YUV formats: 5 planar, 2 biplanar, 2 packed.\n  FOURCC_I420 = FOURCC('I', '4', '2', '0'),\n  FOURCC_I422 = FOURCC('I', '4', '2', '2'),\n  FOURCC_I444 = FOURCC('I', '4', '4', '4'),\n  FOURCC_I411 = FOURCC('I', '4', '1', '1'),\n  FOURCC_I400 = FOURCC('I', '4', '0', '0'),\n  FOURCC_NV21 = FOURCC('N', 'V', '2', '1'),\n  FOURCC_NV12 = FOURCC('N', 'V', '1', '2'),\n  FOURCC_YUY2 = FOURCC('Y', 'U', 'Y', '2'),\n  FOURCC_UYVY = FOURCC('U', 'Y', 'V', 'Y'),\n\n  // 2 Secondary YUV formats: row biplanar.\n  FOURCC_M420 = FOURCC('M', '4', '2', '0'),\n  FOURCC_Q420 = FOURCC('Q', '4', '2', '0'), // deprecated.\n\n  // 9 Primary RGB formats: 4 32 bpp, 2 24 bpp, 3 16 bpp.\n  FOURCC_ARGB = FOURCC('A', 'R', 'G', 'B'),\n  FOURCC_BGRA = FOURCC('B', 'G', 'R', 'A'),\n  FOURCC_ABGR = FOURCC('A', 'B', 'G', 'R'),\n  FOURCC_24BG = FOURCC('2', '4', 'B', 'G'),\n  FOURCC_RAW  = FOURCC('r', 'a', 'w', ' '),\n  FOURCC_RGBA = FOURCC('R', 'G', 'B', 'A'),\n  FOURCC_RGBP = FOURCC('R', 'G', 'B', 'P'),  // rgb565 LE.\n  FOURCC_RGBO = FOURCC('R', 'G', 'B', 'O'),  // argb1555 LE.\n  FOURCC_R444 = FOURCC('R', '4', '4', '4'),  // argb4444 LE.\n\n  // 4 Secondary RGB formats: 4 Bayer Patterns. deprecated.\n  FOURCC_RGGB = FOURCC('R', 'G', 'G', 'B'),\n  FOURCC_BGGR = FOURCC('B', 'G', 'G', 'R'),\n  FOURCC_GRBG = FOURCC('G', 'R', 'B', 'G'),\n  FOURCC_GBRG = FOURCC('G', 'B', 'R', 'G'),\n\n  // 1 Primary Compressed YUV format.\n  FOURCC_MJPG = FOURCC('M', 'J', 'P', 'G'),\n\n  // 5 Auxiliary YUV variations: 3 with U and V planes are swapped, 1 Alias.\n  FOURCC_YV12 = FOURCC('Y', 'V', '1', '2'),\n  FOURCC_YV16 = FOURCC('Y', 'V', '1', '6'),\n  FOURCC_YV24 = FOURCC('Y', 'V', '2', '4'),\n  FOURCC_YU12 = FOURCC('Y', 'U', '1', '2'),  // Linux version of I420.\n  FOURCC_J420 = FOURCC('J', '4', '2', '0'),\n  FOURCC_J400 = FOURCC('J', '4', '0', '0'),\n\n  // 14 Auxiliary aliases.  CanonicalFourCC() maps these to canonical fourcc.\n  FOURCC_IYUV = FOURCC('I', 'Y', 'U', 'V'),  // Alias for I420.\n  FOURCC_YU16 = FOURCC('Y', 'U', '1', '6'),  // Alias for I422.\n  FOURCC_YU24 = FOURCC('Y', 'U', '2', '4'),  // Alias for I444.\n  FOURCC_YUYV = FOURCC('Y', 'U', 'Y', 'V'),  // Alias for YUY2.\n  FOURCC_YUVS = FOURCC('y', 'u', 'v', 's'),  // Alias for YUY2 on Mac.\n  FOURCC_HDYC = FOURCC('H', 'D', 'Y', 'C'),  // Alias for UYVY.\n  FOURCC_2VUY = FOURCC('2', 'v', 'u', 'y'),  // Alias for UYVY on Mac.\n  FOURCC_JPEG = FOURCC('J', 'P', 'E', 'G'),  // Alias for MJPG.\n  FOURCC_DMB1 = FOURCC('d', 'm', 'b', '1'),  // Alias for MJPG on Mac.\n  FOURCC_BA81 = FOURCC('B', 'A', '8', '1'),  // Alias for BGGR.\n  FOURCC_RGB3 = FOURCC('R', 'G', 'B', '3'),  // Alias for RAW.\n  FOURCC_BGR3 = FOURCC('B', 'G', 'R', '3'),  // Alias for 24BG.\n  FOURCC_CM32 = FOURCC(0, 0, 0, 32),  // Alias for BGRA kCMPixelFormat_32ARGB\n  FOURCC_CM24 = FOURCC(0, 0, 0, 24),  // Alias for RAW kCMPixelFormat_24RGB\n  FOURCC_L555 = FOURCC('L', '5', '5', '5'),  // Alias for RGBO.\n  FOURCC_L565 = FOURCC('L', '5', '6', '5'),  // Alias for RGBP.\n  FOURCC_5551 = FOURCC('5', '5', '5', '1'),  // Alias for RGBO.\n\n  // 1 Auxiliary compressed YUV format set aside for capturer.\n  FOURCC_H264 = FOURCC('H', '2', '6', '4'),\n\n  // Match any fourcc.\n  FOURCC_ANY = -1,\n};\n\nenum FourCCBpp {\n  // Canonical fourcc codes used in our code.\n  FOURCC_BPP_I420 = 12,\n  FOURCC_BPP_I422 = 16,\n  FOURCC_BPP_I444 = 24,\n  FOURCC_BPP_I411 = 12,\n  FOURCC_BPP_I400 = 8,\n  FOURCC_BPP_NV21 = 12,\n  FOURCC_BPP_NV12 = 12,\n  FOURCC_BPP_YUY2 = 16,\n  FOURCC_BPP_UYVY = 16,\n  FOURCC_BPP_M420 = 12,\n  FOURCC_BPP_Q420 = 12,\n  FOURCC_BPP_ARGB = 32,\n  FOURCC_BPP_BGRA = 32,\n  FOURCC_BPP_ABGR = 32,\n  FOURCC_BPP_RGBA = 32,\n  FOURCC_BPP_24BG = 24,\n  FOURCC_BPP_RAW  = 24,\n  FOURCC_BPP_RGBP = 16,\n  FOURCC_BPP_RGBO = 16,\n  FOURCC_BPP_R444 = 16,\n  FOURCC_BPP_RGGB = 8,\n  FOURCC_BPP_BGGR = 8,\n  FOURCC_BPP_GRBG = 8,\n  FOURCC_BPP_GBRG = 8,\n  FOURCC_BPP_YV12 = 12,\n  FOURCC_BPP_YV16 = 16,\n  FOURCC_BPP_YV24 = 24,\n  FOURCC_BPP_YU12 = 12,\n  FOURCC_BPP_J420 = 12,\n  FOURCC_BPP_J400 = 8,\n  FOURCC_BPP_MJPG = 0,  // 0 means unknown.\n  FOURCC_BPP_H264 = 0,\n  FOURCC_BPP_IYUV = 12,\n  FOURCC_BPP_YU16 = 16,\n  FOURCC_BPP_YU24 = 24,\n  FOURCC_BPP_YUYV = 16,\n  FOURCC_BPP_YUVS = 16,\n  FOURCC_BPP_HDYC = 16,\n  FOURCC_BPP_2VUY = 16,\n  FOURCC_BPP_JPEG = 1,\n  FOURCC_BPP_DMB1 = 1,\n  FOURCC_BPP_BA81 = 8,\n  FOURCC_BPP_RGB3 = 24,\n  FOURCC_BPP_BGR3 = 24,\n  FOURCC_BPP_CM32 = 32,\n  FOURCC_BPP_CM24 = 24,\n\n  // Match any fourcc.\n  FOURCC_BPP_ANY  = 0,  // 0 means unknown.\n};\n\n// Converts fourcc aliases into canonical ones.\nLIBYUV_API uint32 CanonicalFourCC(uint32 fourcc);\n\n#ifdef __cplusplus\n}  // extern \"C\"\n}  // namespace libyuv\n#endif\n\n#endif  // INCLUDE_LIBYUV_VIDEO_COMMON_H_  NOLINT\n"
  },
  {
    "path": "lib/libyuv/include/libyuv.h",
    "content": "/*\n *  Copyright 2011 The LibYuv Project Authors. All rights reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree. An additional intellectual property rights grant can be found\n *  in the file PATENTS. All contributing project authors may\n *  be found in the AUTHORS file in the root of the source tree.\n */\n\n#ifndef INCLUDE_LIBYUV_H_  // NOLINT\n#define INCLUDE_LIBYUV_H_\n\n#include \"basic_types.h\"\n#include \"compare.h\"\n#include \"convert.h\"\n#include \"convert_argb.h\"\n#include \"convert_from.h\"\n#include \"convert_from_argb.h\"\n#include \"cpu_id.h\"\n#include \"mjpeg_decoder.h\"\n#include \"planar_functions.h\"\n#include \"rotate.h\"\n#include \"rotate_argb.h\"\n#include \"row.h\"\n#include \"scale.h\"\n#include \"scale_argb.h\"\n#include \"scale_row.h\"\n#include \"version.h\"\n#include \"video_common.h\"\n\n#endif  // INCLUDE_LIBYUV_H_  NOLINT\n"
  }
]