V4L 2 soc - camera 데이터 구조
static LIST_HEAD(hosts)
모든 host 는 hosts 가 가리 키 는 링크 에 있 습 니 다.static LIST_HEAD(devices);
모든 soc camera device 는 devices 가 가리 키 는 링크 에 걸 려 있 습 니 다.시스템 내 에 soc 가 여러 개 있 을 수 있 습 니 다.camera_host, 각 soccamera_host 1 ~ n 개 soc 대응 가능camera_device。각 soccamera_device soccamera_video_start 함수 생 성 장치 노드 / dev / videoX
soc_camera_host 는 시스템 camera 처리 모듈 에 대응 합 니 다. 이론 적 으로 여러 개의 camera host 가 있 을 수 있 지만 대부분의 시스템 은 camera host 만 있 습 니 다.
soccamera_host_register 에서 v4l2 호출device_register 는 이 soccamera_host v4l2 등록장치 장치.
soccamera_probe 에서 soc 호출camera_init_i2c, soccamera_device 등록 v4l2subdev, 우 리 는 soccamera_probe 코드 를 통 해 알 수 있 듯 이 i2C 장치 만 이런 방식 을 사용 할 수 있 습 니 다. 비 I2C 장치 에 있어 soc 가 필요 합 니 다.camera_링크 제공 add장치 추가.
soc_camera_host, soc_camera_device,v4l2_device,v4l2_subdev 관 계 는 다음 과 같 습 니 다:
struct soc_camera_device {
struct list_head list;
struct device dev;
struct device *pdev; /* Platform device */
s32 user_width;
s32 user_height;
enum v4l2_colorspace colorspace;
unsigned char iface; /* Host number */
unsigned char devnum; /* Device number per host */
struct soc_camera_sense *sense; /* See comment in struct definition */
struct soc_camera_ops *ops;
struct video_device *vdev;
const struct soc_camera_format_xlate *current_fmt;
struct soc_camera_format_xlate *user_formats;
int num_user_formats;
enum v4l2_field field; /* Preserve field over close() */
void *host_priv; /* Per-device host private data */
/* soc_camera.c private count. Only accessed with .video_lock held */
int use_count;
struct mutex video_lock; /* Protects device data */
struct file *streamer; /* stream owner */
struct videobuf_queue vb_vidq;
};
각 soccamera_device 는 soc 를 제외 하고 / dev / videoX 장치 노드 에 대응 합 니 다.camera_probe 시 실 패 했 습 니 다.
@list:soc_came_device 는 이 구성원 을 통 해 전역 devices 링크 에 연결 합 니 다.
@ pdev: 모든 soccamera_device, 모두 하나의 platform device 가 있 습 니 다. pdev 가 바로 이 platform device 구조의 dev 구성원 입 니 다.
@user_width, @user_height: 이 카메라 의 부족 width 와 height
@ iface: camera bus id 이자 host id 입 니 다. 하나의 host 는 여러 soc 에 대응 할 수 있 습 니 다.camera_device
@ devnum: device number, 각 soccamera_device 는 자동 으로 device number 를 할당 합 니 다.
@ ops: 조작 집합, sensor, video AD (host 도 있 을 수 있 음) 구동 이 인 터 페 이 스 를 실현 하려 면
@use_count: soc camera 사용 계수, 이 장 치 를 열 때마다 1 을 추가 하고 닫 으 면 1 을 감소 합 니 다.
soc_camera_host
struct soc_camera_host {
struct v4l2_device v4l2_dev;
struct list_head list;
unsigned char nr; /* Host number */
void *priv;
const char *drv_name;
struct soc_camera_host_ops *ops;
}
@v4l2_dev: host 마다 v4l2device
@list:soc_camera_host 는 이 구성원 을 통 해 전역 hosts 링크 에 연결 합 니 다.
@ nr: host number, 호스트 인터페이스 마다 host 가 대응 합 니 다.
@ priv: 일반적으로 플랫폼 의 특정한 camera 인 자 를 저장 합 니 다. 예 를 들 어 irq, DMA 등 입 니 다.
struct soc_camera_ops {
int (*suspend)(struct soc_camera_device *, pm_message_t state);
int (*resume)(struct soc_camera_device *);
unsigned long (*query_bus_param)(struct soc_camera_device *);
int (*set_bus_param)(struct soc_camera_device *, unsigned long);
int (*enum_input)(struct soc_camera_device *, struct v4l2_input *);
const struct v4l2_queryctrl *controls;
int num_controls;
};
이것 은 sensor, video AD 또는 host 가 실현 하 는 리 셋 함수 집합 입 니 다.@ suspend, @ resume: 시스템 휴면 깨 울 때의 리 셋 함수 입 니 다. 전원 관 리 를 고려 하지 않 으 면 이 두 함 수 를 실현 하지 않 을 수 있 습 니 다.
@query_bus_param: sensor 와 host 간 의 버스 정 보 를 얻 습 니 다. 예 를 들 어 HSYNC VSYNC 극성, 데이터 버스 너비, 데이터 라인 극성 등 입 니 다.
@set_bus_param: sensor 와 host 사이 의 버스 매개 변 수 를 설정 합 니 다.
@enum_input: 주어진 input number 를 매 거 하고 상층 부 는 @ v4l2 를 통과 합 니 다.input - > index 는 어떤 input 를 볼 지 지정 합 니 다. 일반적으로 실현 되 지 않 을 수 있 습 니 다.
@controls:controls
@num_controls: @ controls 수
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.