setcurrentItem在带有摄像机预览的片段可见时不起作用

问题描述 投票:0回答:1

我正在使用qReader库,该库根据我的日志按预期工作,与大错误日志相反,但尝试使用MainFragment中的viewPager.setCurrentItem(0)更改片段时除外。我希望有人能够识别这些错误,并告诉我是否与我更改片段的问题有关。如果没有人识别出错误,那么我猜测它们是特定于库的,并且会在库的github上打开一个问题。

日志摘要

  • SubFragment2显示(是)
  • SubFragment2扫描QRCode并调用returnData()(YES)
  • returnData()调用mainFragmentInterface.onQRCodeScanned(是)
  • onQRCodeScanned()中的setCurrentItem(0)运行(是)
  • FragmentPagerAdapter中的getItem()中的案例0运行(是)
  • 子片段1显示(否)
  • 错误日志

2020-01-22 06:02:06.940 794-29400/? E/ResolverController: No valid NAT64 prefix (118, <unspecified>/0)
2020-01-22 06:02:11.756 838-31771/? E/libc: Access denied finding property "ro.camera.req.fmq.size"
2020-01-22 06:02:11.757 838-31771/? E/libc: Access denied finding property "ro.camera.res.fmq.size"
2020-01-22 06:02:11.804 838-1444/? E/CamX: [ERROR][PPROC  ] camxipenode.cpp:3598 GetEISMargin() No margin for stabilization type 0
2020-01-22 06:02:11.804 838-1444/? E/CamX: [ERROR][PPROC  ] camxipenode.cpp:3598 GetEISMargin() No margin for stabilization type 0
2020-01-22 06:02:11.804 838-1444/? E/CamX: [ERROR][PPROC  ] camxipenode.cpp:3598 GetEISMargin() No margin for stabilization type 0
2020-01-22 06:02:11.859 838-1444/? E/CamX: [ERROR][PPROC  ] camxipenode.cpp:3598 GetEISMargin() No margin for stabilization type 0
2020-01-22 06:02:11.859 838-1444/? E/CamX: [ERROR][PPROC  ] camxipenode.cpp:3598 GetEISMargin() No margin for stabilization type 0
2020-01-22 06:02:11.859 838-1444/? E/CamX: [ERROR][PPROC  ] camxipenode.cpp:3598 GetEISMargin() No margin for stabilization type 0
2020-01-22 06:02:11.859 838-1444/? E/CamX: [ERROR][PPROC  ] camxipenode.cpp:3598 GetEISMargin() No margin for stabilization type 0
2020-01-22 06:02:11.876 838-1444/? E/CamX: [ERROR][HAL    ] camxmetadatapool.cpp:1556 SetMetadataByTag() Invalid slot; cannot set metadata tag 80090003
2020-01-22 06:02:11.876 838-1444/? E/CamX: [ERROR][HAL    ] camxmetadatapool.cpp:1720 PublishMetadataList() Invalid slot, cannot publish metadata list
2020-01-22 06:02:11.934 838-1444/? E/CamX: [ERROR][SENSOR ] camxsensornode.cpp:2174 LoadPDlibrary() PD library CreateLib failure result=0, m_pPDLib=0x7d44b54ec0
2020-01-22 06:02:11.937 838-1444/? E/CamX: [ERROR][CORE   ] camxnode.cpp:4702 CreateBufferManagers() invalid type streamConfig 
2020-01-22 06:02:12.042 838-1444/? E/CamX: [ERROR][CORE   ] camxnode.cpp:4702 CreateBufferManagers() invalid type streamConfig 
2020-01-22 06:02:12.049 838-1444/? E/CamX: [ERROR][STATS_AF] camxcaecstatsprocessor.cpp:3392 ReadTuningModeParameter() PropertyIDUsecaseChiTuningModeParameter is not published!
2020-01-22 06:02:12.052 838-1444/? E/CamX: [ERROR][STATS_AEC] aec_set.cpp:2692: aec_set_param Aec_Error: Sensor Config input is wrong
2020-01-22 06:02:12.052 838-1444/? E/CamX: [ERROR][STATS_AEC] aec_led_calibration.cpp:560: aec_led_cal_apply_calibration Invalid pointer 0x7d3c0ff340 0x0
2020-01-22 06:02:12.052 838-1444/? E/CamX: [ERROR][STATS_AEC] aec_set.cpp:1350: aec_set_fps_range Aec_Error invalid input 417 
2020-01-22 06:02:12.052 838-1444/? E/CamX: [ERROR][STATS_AEC] aec_set.cpp:225: aec_calculate_sensitivity Set sensor configuration has not been set
2020-01-22 06:02:12.052 838-1444/? E/CamX: [ERROR][STATS_AEC] aec_set.cpp:225: aec_calculate_sensitivity Set sensor configuration has not been set
2020-01-22 06:02:12.052 838-1444/? E/CamX: [ERROR][STATS  ] gcamfastaeutil.cpp:1154 SetTuningData() [FastAE] ERROR! Failed to get the tuning data
2020-01-22 06:02:12.052 838-1444/? E/CamX: [ERROR][HAL    ] camxmetadatapool.cpp:1397 GetMetadataByTag() Invalid Slot to get a metadata from
2020-01-22 06:02:12.052 838-1444/? E/CamX: [ERROR][HAL    ] camxmetadatapool.cpp:1397 GetMetadataByTag() Invalid Slot to get a metadata from
2020-01-22 06:02:12.052 838-1444/? E/CamX: [ERROR][STATS_AEC] aec_led_calibration.cpp:560: aec_led_cal_apply_calibration Invalid pointer 0x7d3c0ff340 0x0
2020-01-22 06:02:12.052 838-1444/? E/CamX: [ERROR][STATS_AEC] aec_set.cpp:1350: aec_set_fps_range Aec_Error invalid input 417 
2020-01-22 06:02:12.052 838-1444/? E/CamX: [ERROR][HAL    ] camxmetadatapool.cpp:1397 GetMetadataByTag() Invalid Slot to get a metadata from
2020-01-22 06:02:12.053 838-1444/? E/CamX: [ERROR][HAL    ] camxmetadatapool.cpp:1397 GetMetadataByTag() Invalid Slot to get a metadata from
2020-01-22 06:02:12.061 838-1444/? E/GoogTuning: Error! Unsupported tuning mode (usecase: 65535, sensorMode: 65535) - using the default tuning header instead
2020-01-22 06:02:12.077 838-1444/? E/CamX: [ERROR][HAL    ] camxmetadatapool.cpp:1397 GetMetadataByTag() Invalid Slot to get a metadata from
2020-01-22 06:02:12.083 838-1439/? E/CamX: [ERROR][STATS_AF] pdlib_lcr_utils.cpp:136 pdaf_lcr_get_vertical_blocks() Cound not find a good partition, set mega_block_y = 1
2020-01-22 06:02:12.116 838-1444/? E/CamX: [ERROR][HAL    ] camxsession.cpp:3537 GetIntraRealtimePipelineId() Less than two realtime pipelines, no intra result
2020-01-22 06:02:12.116 838-1444/? E/CamX: [ERROR][STATS_AF] camxcafioutil.cpp:378 ReadTuningModeParameter() PropertyIDUsecaseChiTuningModeParameter is not published!
2020-01-22 06:02:12.118 838-1444/? E/GoogTuning: Error! Unsupported tuning mode (usecase: 65535, sensorMode: 65535) - using the default tuning header instead
2020-01-22 06:02:12.118 838-1444/? E/CamX: [ERROR][HAL    ] camxmetadatapool.cpp:1397 GetMetadataByTag() Invalid Slot to get a metadata from
2020-01-22 06:02:12.265 838-1444/? E/CamX: [ERROR][HAL    ] camxmetadatapool.cpp:1397 GetMetadataByTag() Invalid Slot to get a metadata from
2020-01-22 06:02:12.280 838-1444/? E/CamX: [ERROR][ISP    ] camxnode.cpp:2606 GetSensorModeData() currentMode beyond the MaxSensorModes : 65539
2020-01-22 06:02:12.280 838-1444/? E/CamX: [ERROR][CORE   ] camxnode.cpp:4686 CreateBufferManagers() no StreamConfig 
2020-01-22 06:02:12.280 838-1444/? E/CamX: [ERROR][ISP    ] camxnode.cpp:2606 GetSensorModeData() currentMode beyond the MaxSensorModes : 65539
2020-01-22 06:02:12.280 838-1444/? E/CamX: [ERROR][CORE   ] camxnode.cpp:4686 CreateBufferManagers() no StreamConfig 
2020-01-22 06:02:12.292 838-1444/? E/CamX: [ERROR][ISP    ] camxnode.cpp:2606 GetSensorModeData() currentMode beyond the MaxSensorModes : 65539
2020-01-22 06:02:12.292 838-1444/? E/CamX: [ERROR][CORE   ] camxnode.cpp:4686 CreateBufferManagers() no StreamConfig 
2020-01-22 06:02:12.293 838-1444/? E/CamX: [ERROR][ISP    ] camxnode.cpp:2606 GetSensorModeData() currentMode beyond the MaxSensorModes : 65539
2020-01-22 06:02:12.293 838-1444/? E/CamX: [ERROR][CORE   ] camxnode.cpp:4686 CreateBufferManagers() no StreamConfig 
2020-01-22 06:02:12.306 838-1444/? E/CamX: [ERROR][ISP    ] camxnode.cpp:2606 GetSensorModeData() currentMode beyond the MaxSensorModes : 65539
2020-01-22 06:02:12.306 838-1444/? E/CamX: [ERROR][CORE   ] camxnode.cpp:4686 CreateBufferManagers() no StreamConfig 
2020-01-22 06:02:12.309 838-1444/? E/CamX: [ERROR][ISP    ] camxnode.cpp:2606 GetSensorModeData() currentMode beyond the MaxSensorModes : 65539
2020-01-22 06:02:12.309 838-1444/? E/CamX: [ERROR][CORE   ] camxnode.cpp:4686 CreateBufferManagers() no StreamConfig 
2020-01-22 06:02:12.309 838-1444/? E/CamX: [ERROR][ISP    ] camxnode.cpp:2606 GetSensorModeData() currentMode beyond the MaxSensorModes : 65539
2020-01-22 06:02:12.309 838-1444/? E/CamX: [ERROR][CORE   ] camxnode.cpp:4686 CreateBufferManagers() no StreamConfig 
2020-01-22 06:02:12.311 838-1444/? E/CamX: [ERROR][ISP    ] camxnode.cpp:2606 GetSensorModeData() currentMode beyond the MaxSensorModes : 65539
2020-01-22 06:02:12.311 838-1444/? E/CamX: [ERROR][CORE   ] camxnode.cpp:4686 CreateBufferManagers() no StreamConfig 
2020-01-22 06:02:12.311 838-1444/? E/CamX: [ERROR][ISP    ] camxnode.cpp:2606 GetSensorModeData() currentMode beyond the MaxSensorModes : 65539
2020-01-22 06:02:12.311 838-1444/? E/CamX: [ERROR][CORE   ] camxnode.cpp:4686 CreateBufferManagers() no StreamConfig 
2020-01-22 06:02:12.311 838-1444/? E/CamX: [ERROR][ISP    ] camxnode.cpp:2606 GetSensorModeData() currentMode beyond the MaxSensorModes : 65539
2020-01-22 06:02:12.311 838-1444/? E/CamX: [ERROR][CORE   ] camxnode.cpp:4686 CreateBufferManagers() no StreamConfig 
2020-01-22 06:02:12.347 838-1444/? E/CamX: [ERROR][ISP    ] camxnode.cpp:2606 GetSensorModeData() currentMode beyond the MaxSensorModes : 65539
2020-01-22 06:02:12.347 838-1444/? E/CamX: [ERROR][CORE   ] camxnode.cpp:4686 CreateBufferManagers() no StreamConfig 
2020-01-22 06:02:12.350 838-1444/? E/CamX: [ERROR][ISP    ] camxnode.cpp:2606 GetSensorModeData() currentMode beyond the MaxSensorModes : 65539
2020-01-22 06:02:12.351 838-1444/? E/CamX: [ERROR][CORE   ] camxnode.cpp:4686 CreateBufferManagers() no StreamConfig 
2020-01-22 06:02:12.352 838-1444/? E/CamX: [ERROR][ISP    ] camxnode.cpp:2606 GetSensorModeData() currentMode beyond the MaxSensorModes : 65539
2020-01-22 06:02:12.352 838-1444/? E/CamX: [ERROR][CORE   ] camxnode.cpp:4686 CreateBufferManagers() no StreamConfig 
2020-01-22 06:02:12.433 838-1444/? E/CamX: [ERROR][HAL    ] camxmetadatapool.cpp:1397 GetMetadataByTag() Invalid Slot to get a metadata from
2020-01-22 06:02:12.433 838-1444/? E/CamX: [ERROR][PPROC  ] camxbpsnode.cpp:792 GetSensorModeData() Mode index vendor tag not provided! Using default 0!
2020-01-22 06:02:12.433 838-1444/? E/CamX: [ERROR][HAL    ] camxmetadatapool.cpp:1397 GetMetadataByTag() Invalid Slot to get a metadata from
2020-01-22 06:02:12.433 838-1444/? E/CamX: [ERROR][PPROC  ] camxbpsnode.cpp:792 GetSensorModeData() Mode index vendor tag not provided! Using default 0!
2020-01-22 06:02:12.536 838-1089/? E/CamX: [ERROR][HAL    ] camxmetadatapool.cpp:1556 SetMetadataByTag() Invalid slot; cannot set metadata tag 80210000
2020-01-22 06:02:12.536 838-1089/? E/CamX: [ERROR][HAL    ] camxmetadatapool.cpp:1720 PublishMetadataList() Invalid slot, cannot publish metadata list
2020-01-22 06:02:12.569 838-1089/? E/CamX: [ERROR][HAL    ] camxmetadatapool.cpp:1556 SetMetadataByTag() Invalid slot; cannot set metadata tag 80210000
2020-01-22 06:02:12.569 838-1089/? E/CamX: [ERROR][HAL    ] camxmetadatapool.cpp:1720 PublishMetadataList() Invalid slot, cannot publish metadata list
2020-01-22 06:02:12.602 838-1089/? E/CamX: [ERROR][HAL    ] camxmetadatapool.cpp:1556 SetMetadataByTag() Invalid slot; cannot set metadata tag 80210000
2020-01-22 06:02:12.603 838-1089/? E/CamX: [ERROR][HAL    ] camxmetadatapool.cpp:1720 PublishMetadataList() Invalid slot, cannot publish metadata list
2020-01-22 06:02:12.613 838-1439/? E/CamX: [ERROR][STATS_AF] camxcafioutil.cpp:988 ReadAECInput() PropertyIDAECInternal null data
2020-01-22 06:02:12.613 838-1439/? E/CamX: [ERROR][STATS_AF] camxcafioutil.cpp:1015 ReadAECInput() PropertyIDAECFrameInfo null data
2020-01-22 06:02:12.614 838-1436/? E/CamX: [ERROR][STATS  ] camxcaecstatsprocessor.cpp:3347 ProcessRequestFastAE() [FastAE] Failed to apply gain to the stats!
2020-01-22 06:02:12.614 838-1436/? E/CamX: [ERROR][STATS_AEC] aec_process.cpp:1229: aec_process_stats_parsing aec is null or invalid
2020-01-22 06:02:12.614 838-1436/? E/CamX: [ERROR][STATS_AEC] aec_process.cpp:7983: aec_process_preview_and_video Error: invalid stats
2020-01-22 06:02:12.623 838-1436/? E/CamX: [ERROR][STATS  ] camxcaecstatsprocessor.cpp:3347 ProcessRequestFastAE() [FastAE] Failed to apply gain to the stats!
2020-01-22 06:02:12.623 838-1436/? E/CamX: [ERROR][STATS_AEC] aec_process.cpp:1229: aec_process_stats_parsing aec is null or invalid
2020-01-22 06:02:12.625 838-1436/? E/CamX: [ERROR][STATS_AEC] aec_process.cpp:7983: aec_process_preview_and_video Error: invalid stats
2020-01-22 06:02:12.635 838-1438/? E/CamX: [ERROR][STATS_AEC] camxcaecstatsprocessor.cpp:1745 SetAlgoBayerHistValue() Unsupported bayer hist channel!
2020-01-22 06:02:12.635 838-1438/? E/CamX: [ERROR][STATS  ] camxcaecstatsprocessor.cpp:3347 ProcessRequestFastAE() [FastAE] Failed to apply gain to the stats!
2020-01-22 06:02:12.636 838-1089/? E/CamX: [ERROR][HAL    ] camxmetadatapool.cpp:1556 SetMetadataByTag() Invalid slot; cannot set metadata tag 80210000
2020-01-22 06:02:12.636 838-1089/? E/CamX: [ERROR][HAL    ] camxmetadatapool.cpp:1720 PublishMetadataList() Invalid slot, cannot publish metadata list
2020-01-22 06:02:12.636 838-1438/? E/CamX: [ERROR][STATS_AEC] aec_process.cpp:1229: aec_process_stats_parsing aec is null or invalid
2020-01-22 06:02:12.637 838-1438/? E/CamX: [ERROR][STATS_AEC] aec_process.cpp:7983: aec_process_preview_and_video Error: invalid stats
2020-01-22 06:02:12.644 838-1438/? E/CamX: [ERROR][STATS  ] camxcaecstatsprocessor.cpp:3347 ProcessRequestFastAE() [FastAE] Failed to apply gain to the stats!
2020-01-22 06:02:12.644 838-1438/? E/CamX: [ERROR][STATS_AEC] aec_process.cpp:1229: aec_process_stats_parsing aec is null or invalid
2020-01-22 06:02:12.644 838-1438/? E/CamX: [ERROR][STATS_AEC] aec_process.cpp:7983: aec_process_preview_and_video Error: invalid stats
2020-01-22 06:02:12.669 838-1089/? E/CamX: [ERROR][HAL    ] camxmetadatapool.cpp:1556 SetMetadataByTag() Invalid slot; cannot set metadata tag 80210000
2020-01-22 06:02:12.669 838-1089/? E/CamX: [ERROR][HAL    ] camxmetadatapool.cpp:1720 PublishMetadataList() Invalid slot, cannot publish metadata list
2020-01-22 06:02:12.737 838-1440/? E/CamX: [ERROR][CORE   ] camxnode.cpp:2267 GetDataCountFromPipeline() Attempting to get metadata count for tag a0550005 when unpublished
2020-01-22 06:02:12.741 838-1437/? E/CamX: [ERROR][STATS_AFD] afd_process.cpp:1533: afd_process_algo_run stats=0x7d4c4d80f8, bg_stats=0x7d4c4d8338, rowSumTime=0.000000
2020-01-22 06:02:12.770 838-1089/? E/CamX: [ERROR][HAL    ] camxmetadatapool.cpp:1556 SetMetadataByTag() Invalid slot; cannot set metadata tag 80210000
2020-01-22 06:02:12.770 838-1089/? E/CamX: [ERROR][HAL    ] camxmetadatapool.cpp:1720 PublishMetadataList() Invalid slot, cannot publish metadata list

MainFragment

public class MainFragment extends Fragment implements MainFragmentInterface{
    private Context context;
    View view;
    protected static NonSwipeableViewPager viewPager;
    FragmentPagerAdapter pagerAdapter;

    public MainFragment(Context context) {
        this.context = context;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_main1, container, false);
        viewPager = view.findViewById(R.id.viewPager);

        return view;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        pagerAdapter = new Main1FragmentPagerAdapter(getChildFragmentManager(), 3, context, this);
        viewPager.setAdapter(pagerAdapter);
        viewPager.setCurrentItem(1);
    }

    //MainFragmentInterface
    @Override
    public void onQRCodeScanned(String data) {
        viewPager.setCurrentItem(0);
        Log.d("QRData", "onQRCodeScanned() called")
    }
}

FragmentPagerAdapter

public class Main1FragmentPagerAdapter extends FragmentPagerAdapter{
    Context context;
    int numOfFragments;
    SparseArray<Fragment> registeredFragments = new SparseArray<Fragment>();
    MainFragmentInterface mainFragmentInterface;

    public Main1FragmentPagerAdapter(FragmentManager fm, int tabCount, Context context, MainFragmentInterface MainFragmentInterface) {
        super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
        numOfFragments= tabCount;
        this.context = context;
        this.MainFragmentInterface = MainFragmentInterface;
    }


    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                Log.d("QRData", "getItem(0) called");
                return new SubFragment1(context, MainFragmentInterface);
            case 1:
                return new SubFragment2(context, MainFragmentInterface);
            case 2:
                return new SubFragment3(context, MainFragmentInterface);
            default:
                return null;
        }
    }
    @Override
    public int getCount() {
        return numOfFragments;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {//on each instantiation we are saving the reference of the instantiated Fragment in an array, helping us retrieve the Fragment by position
        Fragment fragment = (Fragment) super.instantiateItem(container, position);
        registeredFragments.put(position, fragment);
        return fragment;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {//on each destruction we are removing the reference of the destroyed fragment from the array
        registeredFragments.remove(position);
        super.destroyItem(container, position, object);
    }

    public Fragment getRegisteredFragment(int position) {//get fragment by position in the registeredFragments array
        return registeredFragments.get(position);
    }
}

SubFragment2(QReader)

public class SubFragment2 extends Fragment {

    private Context context;
    private MainFragmentInterface mainFragmentInterface;
    View view;

    private SurfaceView surfaceView;
    private QREader qrEader;
    private FrameLayout frameLayout;

    public SubFragment2(Context context, MainFragmentInterface mainFragmentInterface) {
        this.context = context;
        this.mainFragmentInterface = mainFragmentInterface;
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment_sub1, container, false);
        frameLayout = view.findViewById(R.id.frameLayout);
        return view;
    }


    public void returnData(String data) {
        Log.d("QRData", data);
        frameLayout.removeAllViews();
        mainFragmentInterface.onQRCodeScanned(data);
    }

    @Override
    public void onResume() {
        super.onResume();
        frameLayout.removeAllViews();
        surfaceView = new SurfaceView(context);
        frameLayout.addView(surfaceView);
        qrEader = new QREader.Builder(context, surfaceView, new QRDataListener() {
            @Override
            public void onDetected(final String data) {
                Log.d("QREader", "Value : " + data);
                returnData(data);
            }
        }).facing(QREader.BACK_CAM)
                .enableAutofocus(true)
                .height(surfaceView.getHeight())
                .width(surfaceView.getWidth())
                .build();
        // Init and Start with SurfaceView
        // -------------------------------
        qrEader.initAndStart(surfaceView);
        if (!qrEader.isCameraRunning()) {
            qrEader.start();
        }
    }

    @Override
    public void onPause() {
        super.onPause();

        // Cleanup in onPause()
        // --------------------
        if(qrEader.isCameraRunning()){
            qrEader.stop();
        }
        qrEader.releaseAndCleanup();
    }
}

我正在使用qReader库,该库根据我的日志按预期工作,与大错误日志相反,但尝试使用MainFragment中的viewPager.setCurrentItem(0)更改片段时除外。 ...

java android android-viewpager android-camera
1个回答
0
投票

不必从UI线程调用CameraSource.stop(),但是由于实现细节,不应从执行receiveDetections的线程中调用它。 stop()代码等待该线程完成,因此以这种方式调用它将创建死锁。

© www.soinside.com 2019 - 2024. All rights reserved.