Просьба спецам из Beholder глянуть на этот кусок инициализации saa6752hs:
---------------------------------
/* Set video format - must be done first as it resets other settings */
buf[0] = 0x41;
buf[1] = h->video_format;
i2c_master_send(client, buf, 2);
/* Set number of lines in input signal */
buf[0] = 0x40;
buf[1] = 0x00;
if (h->standard & V4L2_STD_525_60)
buf[1] = 0x01;
i2c_master_send(client, buf, 2);
/* set bitrate */
saa6752hs_set_bitrate(client, &h->params);
/* Set GOP structure {3, 13} */
buf[0] = 0x72;
buf[1] = 0x03;
buf[2] = 0x0D;
i2c_master_send(client,buf,3);
/* Set minimum Q-scale {4} */
buf[0] = 0x82;
buf[1] = 0x04;
i2c_master_send(client,buf,2);
/* Set maximum Q-scale {12} */
buf[0] = 0x83;
buf[1] = 0x0C;
i2c_master_send(client,buf,2);
/* Set Output Protocol */
buf[0] = 0xD0;
buf[1] = 0x81;
i2c_master_send(client,buf,2);
/* Set video output stream format {TS} */
buf[0] = 0xB0;
buf[1] = 0x05;
i2c_master_send(client,buf,2);
/* compute PAT */
memcpy(localPAT, PAT, sizeof(PAT));
localPAT[17] = 0xe0 | ((h->params.ts_pid_pmt >>
& 0x0f);
localPAT[18] = h->params.ts_pid_pmt & 0xff;
crc = crc32_be(~0, &localPAT[7], sizeof(PAT) - 7 - 4);
localPAT[sizeof(PAT) - 4] = (crc >> 24) & 0xFF;
localPAT[sizeof(PAT) - 3] = (crc >> 16) & 0xFF;
localPAT[sizeof(PAT) - 2] = (crc >>
& 0xFF;
localPAT[sizeof(PAT) - 1] = crc & 0xFF;
/* compute PMT */
memcpy(localPMT, PMT, sizeof(PMT));
localPMT[3] = 0x40 | ((h->params.ts_pid_pmt >>
& 0x0f);
localPMT[4] = h->params.ts_pid_pmt & 0xff;
localPMT[15] = 0xE0 | ((h->params.ts_pid_pcr >>
& 0x0F);
localPMT[16] = h->params.ts_pid_pcr & 0xFF;
localPMT[20] = 0xE0 | ((h->params.ts_pid_video >>
& 0x0F);
localPMT[21] = h->params.ts_pid_video & 0xFF;
localPMT[25] = 0xE0 | ((h->params.ts_pid_audio >>
& 0x0F);
localPMT[26] = h->params.ts_pid_audio & 0xFF;
crc = crc32_be(~0, &localPMT[7], sizeof(PMT) - 7 - 4);
localPMT[sizeof(PMT) - 4] = (crc >> 24) & 0xFF;
localPMT[sizeof(PMT) - 3] = (crc >> 16) & 0xFF;
localPMT[sizeof(PMT) - 2] = (crc >>
& 0xFF;
localPMT[sizeof(PMT) - 1] = crc & 0xFF;
/* Set Audio PID */
buf[0] = 0xC1;
buf[1] = (h->params.ts_pid_audio >>
& 0xFF;
buf[2] = h->params.ts_pid_audio & 0xFF;
i2c_master_send(client,buf,3);
/* Set Video PID */
buf[0] = 0xC0;
buf[1] = (h->params.ts_pid_video >>
& 0xFF;
buf[2] = h->params.ts_pid_video & 0xFF;
i2c_master_send(client,buf,3);
/* Set PCR PID */
buf[0] = 0xC4;
buf[1] = (h->params.ts_pid_pcr >>
& 0xFF;
buf[2] = h->params.ts_pid_pcr & 0xFF;
i2c_master_send(client,buf,3);
/* Send SI tables */
i2c_master_send(client,localPAT,sizeof(PAT));
i2c_master_send(client,localPMT,sizeof(PMT));
/* mute then unmute audio. This removes buzzing artefacts */
buf[0] = 0xa4;
buf[1] = 1;
i2c_master_send(client, buf, 2);
buf[1] = 0;
i2c_master_send(client, buf, 2);
/* start it going */
saa6752hs_chip_command(client, SAA6752HS_COMMAND_START);
/* readout current state */
buf[0] = 0xE1;
buf[1] = 0xA7;
buf[2] = 0xFE;
buf[3] = 0x82;
buf[4] = 0xB0;
i2c_master_send(client, buf, 5);
i2c_master_recv(client, buf2, 4);
/* change aspect ratio */
buf[0] = 0xE0;
buf[1] = 0xA7;
buf[2] = 0xFE;
buf[3] = 0x82;
buf[4] = 0xB0;
buf[5] = buf2[0];
switch(h->params.vi_aspect) {
case V4L2_MPEG_VIDEO_ASPECT_16x9:
buf[6] = buf2[1] | 0x40;
break;
case V4L2_MPEG_VIDEO_ASPECT_4x3:
default:
buf[6] = buf2[1] & 0xBF;
break;
break;
}
buf[7] = buf2[2];
buf[8] = buf2[3];
i2c_master_send(client, buf, 9);
----------------------------
Что-то здесь не так. Например - я не могу найти описание команд для смены aspect ratio, хотя в этом коде применяется последовательность, начинающаясь с 0xE0
saa6752hl выдаёт на выходе видео в таком формате:
VIDEO: [DVSD] 720x480 24bpp 29,970 fps