SetNewFrame에 대해서 또 문의드립니다.
Please provide your development details as below;
1. SDK Version: 4.1.4
2. Development Environment: Unity-Android
3. Tracker/Scanner: Tracker
4. License Type(Free / Pro-One Time Fee / Pro-Subscription / Enterprise): Free
5. Target Device(Optional): LEGEND DECA
We can assist better if you attach screenshots of issues.
안녕하세요.
저번에 SetNewFrame이 동작안한다고 문의드렸는데 어찌어찌 해서 잘돌아게 되었습니다.
현재 usbwebcam을 연결해서 SetNewFrame 메소드로 한창 개발중에 있습니다.
그런데 한가지 요구사항이 생긴게 유니티 상에서 버튼 ui로 디바이스 카메라와 usb 카메라를 전환이 가능하게 구현 하고싶습니다.
일단 코드 처리 순서는 디바이스 카메라 버튼을 누를때의 스크립트 코드는
StartCamera();
usb카메라 로직 off
=========
이렇게 되고 usb카메라 버튼을 누를때의 코드는
StopCamera();
usb카메라 로직 on (SetNewFrame 포함)
=========
이렇게 짜봤습니다.
처음 씬을 시작할때 디바이스 카메라이든 usb카메라이든 잘 되는데
문제는 위의 코드로 다른한쪽으로 전환했을때 화면이 먹통이 됩니다.
예를 들어 usb카메라를 연결해서 잘 띄우다가 디바이스카메라로 전환하면 화면이 먹통이 되고
디바이스카메라로 시작하다가 usb카메라로 전환하면 또 화면이 먹통이됩니다.
혹시 하나의 씬 내에서는, 그러니까 런타임에서
SetNewFrame으로 usb카메라를 쓰던지 아니면 디바이스 카메라를 쓰던지 둘중 하나만 가능한가요?
앱 실행중에 디바이스 카메라를 쓰다가 SetNewFrame으로 usb카메라를 쓰거나
그역은 안되는지 답변 부탁드리겠습니다.
장치관리자에서 내장 카메라 혹은 USB카메라가 모두 카메라로 잡히는지 확인해보시기 바랍니다.
그리고 카메라로 잡힌다면 SetNewFrame 함수를 굳이 사용하지 않으셔도 됩니다.
SetNewFrame은 카메라로 잡히지 않는 외부 카메라를 연결하였을 경우, 외부 카메라에 대한 버퍼를 받아올 수 없기 때문에
그런 상황에서 버퍼를 수동으로 입력해주는 것입니다.
현재 상황에서 체크하셔야 할 상황이 두 가지가 있습니다.
1. 해상도
두 카메라의 해상도가 같은지 확인해보시기 바랍니다.
질문내용이 원인이 이 문제일 가능성이 높습니다.
SetNewFrame 함수를 사용하면 외부 카메라의 해상도를 버퍼로 생성하는데,
초기 생성된 버퍼의 크기를 추후에 다른 해상도가 들어와도 버퍼크기를 유동적으로 변경하지 않습니다.
2. 카메라 넘버링
해상도에 대해 얘기했다시피, SetNewFrame은 여러 대의 다른 해상도를 가진 외부 디바이스가 연결될 것을 고려하지 않고,
하나의 해상도 버퍼만 생성하는 함수입니다.
장치 관리자에 내장 카메라와 USB카메라 모두 잡힌다면 두 카메라 모두 SetNewFrame 을 사용하지 않으셔도 됩니다.
카메라 스위칭할 때 연결된 카메라 넘버링만 0, 1로 바꿔서 사용해보시기 바랍니다.
혹은 USB카메라가 카메라로 잡히지 않는다면 USB카메라에 대해서만 SetNewFrame함수를 사용하여 버퍼를 수동으로 입력해주시기 바랍니다.
감사합니다.
Leo
Maxst Support Team
답변 정말 감사드립니다.
1번 문제일 경우
'초기 생성된 버퍼의 크기를 추후에 다른 해상도가 들어와도 버퍼크기를 유동적으로 변경하지 않습니다. '
라고 말씀해주셨는데 수동으로 변경하는 방법이 있을까요?
현재는 안드로이드 기기 카메라는 전면 카메라만 사용하고있고 usb카메라는 그보다 더 좋은 해상도를 사용하고 있어서
동일하게 사용못하기 때문에 어떻게든 수동으로 변경해야될것같아서요...
저희가 SetNewFrame 함수를 그렇게 구현해 놓았기 때문에 작성자님이 수동으로 변경할 방법은 없습니다.
해결책은 2번을 참고해보시기 바랍니다.
두 카메라 모두 장치관리자에서 카메라로 인식이 된다면 카메라 넘버링만으로 간단히 해결할 수 있습니다.
카메라로 인식되는 장치는 당연히 카메라 넘버링을 바꾸는 것만으로 해당 카메라의 해상도를 받아오고 카메라 버퍼의 크기를 유동적으로 바꾸게 됩니다.
유동적으로 대처하지 못한다고 했던 것은 SetNewFrame 함수에서 생성한 카메라 버퍼만 해당됩니다.
그리고 만약 usb카메라가 카메라로 잡히지 않는다면
안드로이드 전면 카메라는 기기 내장 카메라이기 때문에 당연히 카메라로 잡힐 것이며,
SetNewFrame 함수를 통해 임의로 카메라 버퍼를 받아와야 하는 기기는 usb 카메라 하나밖에 없습니다.
여러 장치의 카메라 해상도에 대응하는 것이 아닌, usb 카메라에 대한 카메라 버퍼만 생성하기 때문에 두 카메라에 대해 스위칭하여 사용이 가능합니다.
감사합니다.
Leo
Maxst Support Team