package com.netsdk.lib.structure;

import com.netsdk.lib.NetSDKLib;

/**
 * @author 291189
 * @version 1.0
 * @description
 * @date 2023/11/18 15:10
 */
public class NET_VIDEOENC_OPT extends NetSDKLib.SdkStructure{
    /*茹�蘂�����*/
    /**
     * 茹�蘂�篏粋�緒�1鐚���綣�,0鐚��渇��
     */
    public    byte                byVideoEnable;
    /**
     * ��羌��у�駈����у幻��"��羌��у��"絎�箙�
     */
    public    byte                 byBitRateControl;
    /**
     * 絽х�
     */
    public    byte                  byFramesPerSec;
    /**
     * 膽���罔≦�鐚����у幻��"膽���罔≦�"絎�箙�
     */
    public    byte                 byEncodeMode;
    /**
     * ��莨��鐚����у幻��"��莨��"絎�箙�
     */
    public    byte                 byImageSize;
    /**
     * 絨�byImageQlty菴�茵����,��byImageQlty筝�0,���冗��臀���ImgQlty筝�10/30/50/60/80/100�℡肩��,��羌���臀���ImgQlty�寂減1-6,�弱�箙�����1-6罅f�,��///ImgQltyType筝�1,��ImgQlty���岩減0~100
     */
    public    byte                 byImageQltyData;

    //  public    byte                 byImageQlty:7;

    //  public    byte                 byImageQltyType:1;

    public short                wLimitStream;                   /// ����羌�����

    /* �渇����� */

    /**
     *   �渇�篏粋�緒�1鐚���綣�,0鐚��渇��
     */
    public    byte                 byAudioEnable;

    /**
     *   �渇�膽���膠糸��: 0:G711A,1:PCM,2:G711U,3:AMR,4:AAC
     */
    public    byte                    wFormatTag;
    /**
     * 紕育����
     */
    public short                nChannels;
    /**
     * ���傑訓綺�
     */
    public short                 wBitsPerSample;
    /**
     * �渇�����篏粋��
     */
    public    byte                  bAudioOverlay;
    /**
     * H.264 Profile膈�膾�(綵�膽���罔≦�筝�H264�倶④���医�惹����),���ф��筝丞瓜��EM_H264_PROFILE_RANK,篌�0,�弱�篁ュ��,茵�ず莚ュ�罧究����,筝���荀�����膾у����
     */
    public    byte                 bH264ProfileRank;
    /**
     * ���欠�
     */
    public int               nSamplesPerSec;
    /**
     * I絽ч�顔��絽ф�育��,�颷遺犬筝�I絽т��雁��P絽т肩��,0-149
     */
    public    byte                  bIFrameInterval;
    /**
     * NSP
     */
    public    byte                    bScanMode;

    public    byte                 bReserved_3;

    public    byte                 bReserved_4;

    public byte getByImageQlty(){
        byte a=0;
        byte b=7;
        return getAnd(byImageQltyData,a,b);
    }

    public byte getByImageQltyType(){
        byte a=7;
        byte b=7+1;
        return getAnd(byImageQltyData,a,b);
    }

    /**
     * ��篏�筝�
     * @param date ��紮��井��
     * @param start ��荀��霡紫��篏���
     * @param end 筝���篏���
     * @return
     */
    private byte getAnd(byte date,byte start,byte end){

        return (byte) (date>>start&getOr(start,end));
    }

    /**
     * ��篏�筝���篏���
     * @param start 綣�紮�筝���篏���
     * @param end 膸���筝���篏���
     * @return
     */
    private byte getOr(byte start,byte end){
        byte result=0;
        for (int i = 0; i < end-start; i++) {
            result|=(1<<i);
        }
        return result;
    }
}