# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /Users/saki/android-sdks/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

-keepclasseswithmembernames class * {
    native <methods>;
	*** mNativePtr;
	*** mNativeValue;
	*** mContext;
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

-keep public class com.serenegiant.usb.DeviceDetector {
    native <methods>;
	public *;
	protected *;
	private *;
}

-keep public class com.serenegiant.usb.uac.UACClient {
    native <methods>;
	public *;
	protected *;
	private *;
}

-keep public class com.serenegiant.media.Encoder {
    native <methods>;
	public *;
	protected *;
	private *;
}

-keep public class com.serenegiant.media.VideoEncoder {
    native <methods>;
	public *;
	protected *;
	private *;
}

-keep public class com.serenegiant.media.VideoMuxer {
    native <methods>;
	public *;
	protected *;
	private *;
}

-keep public interface com.serenegiant.camera.ICamera { *; }
-keep public interface com.serenegiant.camera.ICameraControl { *; }
-keep public interface com.serenegiant.camera.IFrameCallback { *; }
-keep public class com.serenegiant.camera.FuncMaxMinDef {
	public *;
	protected *;
	private *;
}

-keep public enum com.serenegiant.camera.RawFrameType {
    public *;
}

-keep public interface com.serenegiant.usb.uvc.IButtonCallback { *; }
-keep public interface com.serenegiant.usb.uvc.IStatusCallback { *; }
-keep public interface com.serenegiant.usb.uvc.IUVCCamera { *; }
-keep public interface com.serenegiant.usb.uvc.IUVCCameraControl { *; }

-keep public class com.serenegiant.usb.uvc.IPipeline {*;}
-dontnote com.serenegiant.usb.uvc.IPipeline

-keep public class com.serenegiant.usb.uvc.NativeCallback {*;}
-dontnote com.serenegiant.usb.uvc.NativeCallback

-keep public class com.serenegiant.usb.uvc.BufferedPipeline {
    native <methods>;
	public *;
	protected *;
	private *;
}

-keep public class com.serenegiant.usb.uvc.CapturePipeline {
    native <methods>;
	public *;
	protected *;
	private *;
}

-keep public class com.serenegiant.usb.uvc.ConvertPipeline {
    native <methods>;
	public *;
	protected *;
	private *;
}

-keep public class com.serenegiant.usb.uvc.DistributePipeline {
    native <methods>;
	public *;
	protected *;
	private *;
}

-keep public class com.serenegiant.usb.uvc.FrameCallbackPipeline {
    native <methods>;
	public *;
	protected *;
	private *;
}

-keep public class com.serenegiant.usb.uvc.FrameSavePipeline {
    native <methods>;
	public *;
	protected *;
	private *;
}

-keep public class com.serenegiant.usb.uvc.GLPreviewPipeline {
    native <methods>;
	public *;
	protected *;
	private *;
}

-keep public class com.serenegiant.usb.uvc.GLRendererPipeline {
    native <methods>;
	public *;
	protected *;
	private *;
}

-keep public class com.serenegiant.usb.uvc.MP4FrameSavePipeline {
    native <methods>;
	public *;
	protected *;
	private *;
}

-keep public class com.serenegiant.usb.uvc.NativeCallbackPipeline {
    native <methods>;
	public *;
	protected *;
	private *;
}

-keep public class com.serenegiant.usb.uvc.PipelineSource {
    native <methods>;
	public *;
	protected *;
	private *;
}

-keep public enum com.serenegiant.usb.uvc.PreviewFormat {
    public *;
}

-keep public enum com.serenegiant.usb.uvc.PreviewMode {
    public *;
}

-keep public class com.serenegiant.usb.uvc.PreviewPipeline {
    native <methods>;
	public *;
	protected *;
	private *;
}

-keep public class com.serenegiant.usb.uvc.PtsCalcPipeline {
    native <methods>;
	public *;
	protected *;
	private *;
}

-keep public class com.serenegiant.usb.uvc.SurfaceH264PipelineSource {
    native <methods>;
	public *;
	protected *;
	private *;
}

-keep public class com.serenegiant.usb.uvc.TranscodeH264 {
    native <methods>;
	public *;
	protected *;
	private *;
}

-keep public class com.serenegiant.usb.uvc.TranscodeH264PipelineSource {
    native <methods>;
	public *;
	protected *;
	private *;
}

-keep public class com.serenegiant.usb.uvc.Utils {
	native <methods>;
	public *;
	protected *;
	private *;
}

-keep public class com.serenegiant.usb.uvc.UVCPipeline {
    native <methods>;
	public *;
	protected *;
	private *;
}

##---------------Begin: proguard configuration for Gson  ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature

# For using GSON @Expose annotation
-keepattributes *Annotation*

# Gson specific classes
-keep class sun.misc.Unsafe
-keep class sun.misc.Unsafe.**
-dontnote sun.misc.Unsafe
#-keep class com.google.gson.stream.** { *; }

-keep class com.serenegiant.camera.Size
-keep class com.serenegiant.camera.Size { *; }

-keep public class com.serenegiant.aandusb.R
-keep public class com.serenegiant.aandusb.R.**
-keep public class com.serenegiant.aandusb.R.*$*
-keep public class com.serenegiant.aandusb.R.$**
-keep public class com.serenegiant.usb.R
-keep public class com.serenegiant.usb.R.**
-keep public class com.serenegiant.usb.R.*$*
-keep public class com.serenegiant.usb.R.$**
