Lines Matching +full:max +full:- +full:bitrate
2 saa6752hs - i2c-driver for the saa6752hs by Philips
6 AC-3 support:
38 #include <media/v4l2-device.h>
39 #include <media/v4l2-ctrls.h>
40 #include <media/v4l2-common.h>
45 #define MPEG_PID_MAX ((1 << 14) - 1)
96 struct { /* video bitrate mode control cluster */
125 /* ---------------------------------------------------------------------- */
232 /* ---------------------------------------------------------------------- */
272 return -EINVAL; in saa6752hs_chip_command()
287 status = -ETIMEDOUT; in saa6752hs_chip_command()
323 struct saa6752hs_mpeg_params *params = &h->params; in saa6752hs_set_bitrate()
327 /* set the bitrate mode */ in saa6752hs_set_bitrate()
329 params->vi_bitrate_mode != V4L2_MPEG_VIDEO_BITRATE_MODE_VBR); in saa6752hs_set_bitrate()
331 /* set the video bitrate */ in saa6752hs_set_bitrate()
332 if (params->vi_bitrate_mode == V4L2_MPEG_VIDEO_BITRATE_MODE_VBR) { in saa6752hs_set_bitrate()
333 /* set the target bitrate */ in saa6752hs_set_bitrate()
334 set_reg16(client, 0x80, params->vi_bitrate); in saa6752hs_set_bitrate()
336 /* set the max bitrate */ in saa6752hs_set_bitrate()
337 set_reg16(client, 0x81, params->vi_bitrate_peak); in saa6752hs_set_bitrate()
338 tot_bitrate = params->vi_bitrate_peak; in saa6752hs_set_bitrate()
340 /* set the target bitrate (no max bitrate for CBR) */ in saa6752hs_set_bitrate()
341 set_reg16(client, 0x81, params->vi_bitrate); in saa6752hs_set_bitrate()
342 tot_bitrate = params->vi_bitrate; in saa6752hs_set_bitrate()
347 params->au_encoding == V4L2_MPEG_AUDIO_ENCODING_AC3); in saa6752hs_set_bitrate()
349 /* set the audio bitrate */ in saa6752hs_set_bitrate()
350 if (params->au_encoding == V4L2_MPEG_AUDIO_ENCODING_AC3) in saa6752hs_set_bitrate()
351 is_384k = V4L2_MPEG_AUDIO_AC3_BITRATE_384K == params->au_ac3_bitrate; in saa6752hs_set_bitrate()
353 is_384k = V4L2_MPEG_AUDIO_L2_BITRATE_384K == params->au_l2_bitrate; in saa6752hs_set_bitrate()
357 /* Note: the total max bitrate is determined by adding the video and audio in saa6752hs_set_bitrate()
365 /* set the total bitrate */ in saa6752hs_set_bitrate()
373 container_of(ctrl->handler, struct saa6752hs_state, hdl); in saa6752hs_try_ctrl()
375 switch (ctrl->id) { in saa6752hs_try_ctrl()
377 /* peak bitrate shall be >= normal bitrate */ in saa6752hs_try_ctrl()
378 if (ctrl->val == V4L2_MPEG_VIDEO_BITRATE_MODE_VBR && in saa6752hs_try_ctrl()
379 h->video_bitrate_peak->val < h->video_bitrate->val) in saa6752hs_try_ctrl()
380 h->video_bitrate_peak->val = h->video_bitrate->val; in saa6752hs_try_ctrl()
389 container_of(ctrl->handler, struct saa6752hs_state, hdl); in saa6752hs_s_ctrl()
390 struct saa6752hs_mpeg_params *params = &h->params; in saa6752hs_s_ctrl()
392 switch (ctrl->id) { in saa6752hs_s_ctrl()
396 params->ts_pid_pmt = ctrl->val; in saa6752hs_s_ctrl()
399 params->ts_pid_audio = ctrl->val; in saa6752hs_s_ctrl()
402 params->ts_pid_video = ctrl->val; in saa6752hs_s_ctrl()
405 params->ts_pid_pcr = ctrl->val; in saa6752hs_s_ctrl()
408 params->au_encoding = ctrl->val; in saa6752hs_s_ctrl()
411 params->au_l2_bitrate = ctrl->val; in saa6752hs_s_ctrl()
414 params->au_ac3_bitrate = ctrl->val; in saa6752hs_s_ctrl()
421 params->vi_aspect = ctrl->val; in saa6752hs_s_ctrl()
424 params->vi_bitrate_mode = ctrl->val; in saa6752hs_s_ctrl()
425 params->vi_bitrate = h->video_bitrate->val / 1000; in saa6752hs_s_ctrl()
426 params->vi_bitrate_peak = h->video_bitrate_peak->val / 1000; in saa6752hs_s_ctrl()
427 v4l2_ctrl_activate(h->video_bitrate_peak, in saa6752hs_s_ctrl()
428 ctrl->val == V4L2_MPEG_VIDEO_BITRATE_MODE_VBR); in saa6752hs_s_ctrl()
431 return -EINVAL; in saa6752hs_s_ctrl()
446 /* Set video format - must be done first as it resets other settings */ in saa6752hs_init()
447 set_reg8(client, 0x41, h->video_format); in saa6752hs_init()
450 set_reg8(client, 0x40, (h->standard & V4L2_STD_525_60) ? 1 : 0); in saa6752hs_init()
452 /* set bitrate */ in saa6752hs_init()
458 /* Set minimum Q-scale {4} */ in saa6752hs_init()
461 /* Set maximum Q-scale {12} */ in saa6752hs_init()
475 localPAT[17] = 0xe0 | ((h->params.ts_pid_pmt >> 8) & 0x0f); in saa6752hs_init()
476 localPAT[18] = h->params.ts_pid_pmt & 0xff; in saa6752hs_init()
477 crc = crc32_be(~0, &localPAT[7], sizeof(PAT) - 7 - 4); in saa6752hs_init()
478 localPAT[sizeof(PAT) - 4] = (crc >> 24) & 0xFF; in saa6752hs_init()
479 localPAT[sizeof(PAT) - 3] = (crc >> 16) & 0xFF; in saa6752hs_init()
480 localPAT[sizeof(PAT) - 2] = (crc >> 8) & 0xFF; in saa6752hs_init()
481 localPAT[sizeof(PAT) - 1] = crc & 0xFF; in saa6752hs_init()
484 if (h->params.au_encoding == V4L2_MPEG_AUDIO_ENCODING_AC3) { in saa6752hs_init()
491 localPMT[3] = 0x40 | ((h->params.ts_pid_pmt >> 8) & 0x0f); in saa6752hs_init()
492 localPMT[4] = h->params.ts_pid_pmt & 0xff; in saa6752hs_init()
493 localPMT[15] = 0xE0 | ((h->params.ts_pid_pcr >> 8) & 0x0F); in saa6752hs_init()
494 localPMT[16] = h->params.ts_pid_pcr & 0xFF; in saa6752hs_init()
495 localPMT[20] = 0xE0 | ((h->params.ts_pid_video >> 8) & 0x0F); in saa6752hs_init()
496 localPMT[21] = h->params.ts_pid_video & 0xFF; in saa6752hs_init()
497 localPMT[25] = 0xE0 | ((h->params.ts_pid_audio >> 8) & 0x0F); in saa6752hs_init()
498 localPMT[26] = h->params.ts_pid_audio & 0xFF; in saa6752hs_init()
499 crc = crc32_be(~0, &localPMT[7], size - 7 - 4); in saa6752hs_init()
500 localPMT[size - 4] = (crc >> 24) & 0xFF; in saa6752hs_init()
501 localPMT[size - 3] = (crc >> 16) & 0xFF; in saa6752hs_init()
502 localPMT[size - 2] = (crc >> 8) & 0xFF; in saa6752hs_init()
503 localPMT[size - 1] = crc & 0xFF; in saa6752hs_init()
506 set_reg16(client, 0xc1, h->params.ts_pid_audio); in saa6752hs_init()
509 set_reg16(client, 0xc0, h->params.ts_pid_video); in saa6752hs_init()
512 set_reg16(client, 0xc4, h->params.ts_pid_pcr); in saa6752hs_init()
541 switch (h->params.vi_aspect) { in saa6752hs_init()
561 struct v4l2_mbus_framefmt *f = &format->format; in saa6752hs_get_fmt()
564 if (format->pad) in saa6752hs_get_fmt()
565 return -EINVAL; in saa6752hs_get_fmt()
567 if (h->video_format == SAA6752HS_VF_UNKNOWN) in saa6752hs_get_fmt()
568 h->video_format = SAA6752HS_VF_D1; in saa6752hs_get_fmt()
569 f->width = v4l2_format_table[h->video_format].fmt.pix.width; in saa6752hs_get_fmt()
570 f->height = v4l2_format_table[h->video_format].fmt.pix.height; in saa6752hs_get_fmt()
571 f->code = MEDIA_BUS_FMT_FIXED; in saa6752hs_get_fmt()
572 f->field = V4L2_FIELD_INTERLACED; in saa6752hs_get_fmt()
573 f->colorspace = V4L2_COLORSPACE_SMPTE170M; in saa6752hs_get_fmt()
581 struct v4l2_mbus_framefmt *f = &format->format; in saa6752hs_set_fmt()
585 if (format->pad) in saa6752hs_set_fmt()
586 return -EINVAL; in saa6752hs_set_fmt()
588 f->code = MEDIA_BUS_FMT_FIXED; in saa6752hs_set_fmt()
590 dist_352 = abs(f->width - 352); in saa6752hs_set_fmt()
591 dist_480 = abs(f->width - 480); in saa6752hs_set_fmt()
592 dist_720 = abs(f->width - 720); in saa6752hs_set_fmt()
594 f->width = 720; in saa6752hs_set_fmt()
595 f->height = 576; in saa6752hs_set_fmt()
597 f->width = 480; in saa6752hs_set_fmt()
598 f->height = 576; in saa6752hs_set_fmt()
600 f->width = 352; in saa6752hs_set_fmt()
601 if (abs(f->height - 576) < abs(f->height - 288)) in saa6752hs_set_fmt()
602 f->height = 576; in saa6752hs_set_fmt()
604 f->height = 288; in saa6752hs_set_fmt()
606 f->field = V4L2_FIELD_INTERLACED; in saa6752hs_set_fmt()
607 f->colorspace = V4L2_COLORSPACE_SMPTE170M; in saa6752hs_set_fmt()
609 if (format->which == V4L2_SUBDEV_FORMAT_TRY) { in saa6752hs_set_fmt()
610 cfg->try_fmt = *f; in saa6752hs_set_fmt()
619 --------------------------- in saa6752hs_set_fmt()
626 if (f->code != MEDIA_BUS_FMT_FIXED) in saa6752hs_set_fmt()
627 return -EINVAL; in saa6752hs_set_fmt()
629 if (f->width == 720) in saa6752hs_set_fmt()
630 h->video_format = SAA6752HS_VF_D1; in saa6752hs_set_fmt()
631 else if (f->width == 480) in saa6752hs_set_fmt()
632 h->video_format = SAA6752HS_VF_2_3_D1; in saa6752hs_set_fmt()
633 else if (f->height == 576) in saa6752hs_set_fmt()
634 h->video_format = SAA6752HS_VF_1_2_D1; in saa6752hs_set_fmt()
636 h->video_format = SAA6752HS_VF_SIF; in saa6752hs_set_fmt()
644 h->standard = std; in saa6752hs_s_std()
648 /* ----------------------------------------------------------------------- */
684 client->addr << 1, client->adapter->name); in saa6752hs_probe()
686 h = devm_kzalloc(&client->dev, sizeof(*h), GFP_KERNEL); in saa6752hs_probe()
688 return -ENOMEM; in saa6752hs_probe()
689 sd = &h->sd; in saa6752hs_probe()
694 h->revision = (data[8] << 8) | data[9]; in saa6752hs_probe()
695 h->has_ac3 = 0; in saa6752hs_probe()
696 if (h->revision == 0x0206) { in saa6752hs_probe()
697 h->has_ac3 = 1; in saa6752hs_probe()
698 v4l_info(client, "supports AC-3\n"); in saa6752hs_probe()
700 h->params = param_defaults; in saa6752hs_probe()
702 hdl = &h->hdl; in saa6752hs_probe()
706 h->has_ac3 ? V4L2_MPEG_AUDIO_ENCODING_AC3 : in saa6752hs_probe()
717 if (h->has_ac3) in saa6752hs_probe()
742 h->video_bitrate_peak = v4l2_ctrl_new_std(hdl, &saa6752hs_ctrl_ops, in saa6752hs_probe()
752 h->video_bitrate_mode = v4l2_ctrl_new_std_menu(hdl, &saa6752hs_ctrl_ops, in saa6752hs_probe()
756 h->video_bitrate = v4l2_ctrl_new_std(hdl, &saa6752hs_ctrl_ops, in saa6752hs_probe()
759 V4L2_CID_MPEG_STREAM_PID_PMT, 0, (1 << 14) - 1, 1, 16); in saa6752hs_probe()
761 V4L2_CID_MPEG_STREAM_PID_AUDIO, 0, (1 << 14) - 1, 1, 260); in saa6752hs_probe()
763 V4L2_CID_MPEG_STREAM_PID_VIDEO, 0, (1 << 14) - 1, 1, 256); in saa6752hs_probe()
765 V4L2_CID_MPEG_STREAM_PID_PCR, 0, (1 << 14) - 1, 1, 259); in saa6752hs_probe()
766 sd->ctrl_handler = hdl; in saa6752hs_probe()
767 if (hdl->error) { in saa6752hs_probe()
768 int err = hdl->error; in saa6752hs_probe()
773 v4l2_ctrl_cluster(3, &h->video_bitrate_mode); in saa6752hs_probe()
775 h->standard = 0; /* Assume 625 input lines */ in saa6752hs_probe()
784 v4l2_ctrl_handler_free(&to_state(sd)->hdl); in saa6752hs_remove()