⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stream_pvr.c

📁 君正早期ucos系统(只有早期的才不没有打包成库),MPLAYER,文件系统,图片解码,浏览,电子书,录音,想学ucos,识货的人就下吧 russblock fmradio explore set
💻 C
📖 第 1 页 / 共 3 页
字号:
  }  memset (&vt, 0, sizeof(vt));  if (ioctl (pvr->dev_fd, VIDIOC_G_TUNER, &vt) < 0)  {    mp_msg (MSGT_OPEN, MSGL_ERR, "%s can't set tuner (%s).\n",            LOG_LEVEL_V4L2, strerror (errno));    return -1;  }  /* just a notification */  if (!vt.signal)    mp_msg (MSGT_OPEN, MSGL_ERR, "%s NO SIGNAL at frequency %d (%d)\n",            LOG_LEVEL_V4L2, pvr->freq, vf.frequency);  else    mp_msg (MSGT_OPEN, MSGL_STATUS, "%s Got signal at frequency %d (%d)\n",            LOG_LEVEL_V4L2, pvr->freq, vf.frequency);  return 0;}static intset_station_by_step (struct pvr_t *pvr, int step, int v4lAction) {  if (!pvr || !pvr->stationlist.list)     return -1;  if (pvr->stationlist.enabled >= abs (step))  {    int gotcha = 0;    int chidx = pvr->chan_idx + step;    while (!gotcha)    {      chidx = (chidx + pvr->stationlist.used) % pvr->stationlist.used;      mp_msg (MSGT_OPEN, MSGL_DBG2,              "%s Offset switch: current %d, enabled %d, step %d -> %d\n",              LOG_LEVEL_V4L2, pvr->chan_idx,              pvr->stationlist.enabled, step, chidx);      if (!pvr->stationlist.list[chidx].enabled)      {        mp_msg (MSGT_OPEN, MSGL_DBG2,                "%s Switch disabled to user station channel: %8s - freq: %8d - station: %s\n", LOG_LEVEL_V4L2,                 pvr->stationlist.list[chidx].name,                pvr->stationlist.list[chidx].freq,                pvr->stationlist.list[chidx].station);        chidx += FFSIGN (step);      }      else        gotcha = 1;    }    pvr->freq = pvr->stationlist.list[chidx].freq;    pvr->chan_idx_last = pvr->chan_idx;    pvr->chan_idx = chidx;    mp_msg (MSGT_OPEN, MSGL_INFO,            "%s Switch to user station channel: %8s - freq: %8d - station: %s\n", LOG_LEVEL_V4L2,             pvr->stationlist.list[chidx].name,            pvr->stationlist.list[chidx].freq,            pvr->stationlist.list[chidx].station);    if (v4lAction)      return set_v4l2_freq (pvr);    return (pvr->freq > 0) ? 0 : -1;  }  mp_msg (MSGT_OPEN, MSGL_ERR,          "%s Ooops couldn't set freq by channel entry step %d to current %d, enabled %d\n", LOG_LEVEL_V4L2,           step, pvr->chan_idx, pvr->stationlist.enabled);  return -1;}static intset_station_by_channelname_or_freq (struct pvr_t *pvr, const char *channel,                                    int freq, int v4lAction){  int i = 0;  if (!pvr || !pvr->stationlist.list)     return -1;  if (0 >= pvr->stationlist.enabled)  {    mp_msg (MSGT_OPEN, MSGL_WARN,            "%s No enabled station, cannot switch channel/frequency\n",            LOG_LEVEL_V4L2);    return -1;  }  if (channel)  {    /* select by channel */    for (i = 0; i < pvr->stationlist.used ; i++)    {      if (!strcasecmp (pvr->stationlist.list[i].name, channel))      {        if (!pvr->stationlist.list[i].enabled)        {          mp_msg (MSGT_OPEN, MSGL_WARN,                  "%s Switch disabled to user station channel: %8s - freq: %8d - station: %s\n", LOG_LEVEL_V4L2,                   pvr->stationlist.list[i].name,                  pvr->stationlist.list[i].freq,                  pvr->stationlist.list[i].station);          return -1;        }        pvr->freq = pvr->stationlist.list[i].freq;        pvr->chan_idx_last = pvr->chan_idx;        pvr->chan_idx = i;        break;      }    }  }  else if (freq >= 0)  {    /* select by freq */    for (i = 0; i < pvr->stationlist.used; i++)    {      if (pvr->stationlist.list[i].freq == freq)      {        if (!pvr->stationlist.list[i].enabled)        {          mp_msg (MSGT_OPEN, MSGL_WARN,                  "%s Switch disabled to user station channel: %8s - freq: %8d - station: %s\n", LOG_LEVEL_V4L2,                   pvr->stationlist.list[i].name,                  pvr->stationlist.list[i].freq,                  pvr->stationlist.list[i].station);                    return -1;        }        pvr->freq = pvr->stationlist.list[i].freq;        pvr->chan_idx_last = pvr->chan_idx;        pvr->chan_idx = i;        break;      }    }  }  if (i >= pvr->stationlist.used)  {    if (channel)      mp_msg (MSGT_OPEN, MSGL_WARN,              "%s unable to find channel %s\n", LOG_LEVEL_V4L2, channel);    else      mp_msg (MSGT_OPEN, MSGL_WARN,              "%s unable to find frequency %d\n", LOG_LEVEL_V4L2, freq);    return -1;  }  mp_msg (MSGT_OPEN, MSGL_INFO,          "%s Switch to user station channel: %8s - freq: %8d - station: %s\n", LOG_LEVEL_V4L2,           pvr->stationlist.list[i].name,          pvr->stationlist.list[i].freq,          pvr->stationlist.list[i].station);  if (v4lAction)    return set_v4l2_freq (pvr);  return (pvr->freq > 0) ? 0 : -1;}static int force_freq_step (struct pvr_t *pvr, int step){  int freq;  if (!pvr)     return -1;  freq = pvr->freq+step;  if (freq)  {    mp_msg (MSGT_OPEN, MSGL_INFO,            "%s Force Frequency %d + %d = %d \n", LOG_LEVEL_V4L2,             pvr->freq, step, freq);    pvr->freq = freq;    return set_v4l2_freq (pvr);  }    return -1;}static voidparse_encoder_options (struct pvr_t *pvr){  if (!pvr)    return;  /* -pvr aspect=digit */  if (pvr_param_aspect_ratio >= 0 && pvr_param_aspect_ratio <= 3)    pvr->aspect = pvr_param_aspect_ratio;  /* -pvr arate=x */  if (pvr_param_sample_rate != 0)  {    switch (pvr_param_sample_rate)    {    case 32000:      pvr->samplerate = V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000;      break;    case 44100:      pvr->samplerate = V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100;      break;    case 48000:      pvr->samplerate = V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000;      break;    default:      break;    }  }  /* -pvr alayer=x */  if (pvr_param_audio_layer == 1)    pvr->layer = V4L2_MPEG_AUDIO_ENCODING_LAYER_1;  else if (pvr_param_audio_layer == 2)    pvr->layer = V4L2_MPEG_AUDIO_ENCODING_LAYER_2;  else if (pvr_param_audio_layer == 3)    pvr->layer = V4L2_MPEG_AUDIO_ENCODING_LAYER_3;  /* -pvr abitrate=x */  if (pvr_param_audio_bitrate != 0)  {    if (pvr->layer == V4L2_MPEG_AUDIO_ENCODING_LAYER_1)    {      switch (pvr_param_audio_bitrate)      {      case 32:        pvr->audio_rate = V4L2_MPEG_AUDIO_L1_BITRATE_32K;        break;      case 64:        pvr->audio_rate = V4L2_MPEG_AUDIO_L1_BITRATE_64K;        break;      case 96:        pvr->audio_rate = V4L2_MPEG_AUDIO_L1_BITRATE_96K;        break;      case 128:        pvr->audio_rate = V4L2_MPEG_AUDIO_L1_BITRATE_128K;        break;      case 160:        pvr->audio_rate = V4L2_MPEG_AUDIO_L1_BITRATE_160K;        break;      case 192:        pvr->audio_rate = V4L2_MPEG_AUDIO_L1_BITRATE_192K;        break;      case 224:        pvr->audio_rate = V4L2_MPEG_AUDIO_L1_BITRATE_224K;        break;      case 256:        pvr->audio_rate = V4L2_MPEG_AUDIO_L1_BITRATE_256K;        break;      case 288:        pvr->audio_rate = V4L2_MPEG_AUDIO_L1_BITRATE_288K;        break;      case 320:        pvr->audio_rate = V4L2_MPEG_AUDIO_L1_BITRATE_320K;        break;      case 352:        pvr->audio_rate = V4L2_MPEG_AUDIO_L1_BITRATE_352K;        break;      case 384:        pvr->audio_rate = V4L2_MPEG_AUDIO_L1_BITRATE_384K;        break;      case 416:        pvr->audio_rate = V4L2_MPEG_AUDIO_L1_BITRATE_416K;        break;      case 448:        pvr->audio_rate = V4L2_MPEG_AUDIO_L1_BITRATE_448K;        break;      default:        break;      }    }        else if (pvr->layer == V4L2_MPEG_AUDIO_ENCODING_LAYER_2)    {      switch (pvr_param_audio_bitrate)      {      case 32:        pvr->audio_rate = V4L2_MPEG_AUDIO_L2_BITRATE_32K;        break;      case 48:        pvr->audio_rate = V4L2_MPEG_AUDIO_L2_BITRATE_48K;        break;      case 56:        pvr->audio_rate = V4L2_MPEG_AUDIO_L2_BITRATE_56K;        break;      case 64:        pvr->audio_rate = V4L2_MPEG_AUDIO_L2_BITRATE_64K;        break;      case 80:        pvr->audio_rate = V4L2_MPEG_AUDIO_L2_BITRATE_80K;        break;      case 96:        pvr->audio_rate = V4L2_MPEG_AUDIO_L2_BITRATE_96K;        break;      case 112:        pvr->audio_rate = V4L2_MPEG_AUDIO_L2_BITRATE_112K;        break;      case 128:        pvr->audio_rate = V4L2_MPEG_AUDIO_L2_BITRATE_128K;        break;      case 160:        pvr->audio_rate = V4L2_MPEG_AUDIO_L2_BITRATE_160K;        break;      case 192:        pvr->audio_rate = V4L2_MPEG_AUDIO_L2_BITRATE_192K;        break;      case 224:        pvr->audio_rate = V4L2_MPEG_AUDIO_L2_BITRATE_224K;        break;      case 256:        pvr->audio_rate = V4L2_MPEG_AUDIO_L2_BITRATE_256K;        break;      case 320:        pvr->audio_rate = V4L2_MPEG_AUDIO_L2_BITRATE_320K;        break;      case 384:        pvr->audio_rate = V4L2_MPEG_AUDIO_L2_BITRATE_384K;        break;      default:        break;      }    }    else if (pvr->layer == V4L2_MPEG_AUDIO_ENCODING_LAYER_3)    {      switch (pvr_param_audio_bitrate)      {      case 32:        pvr->audio_rate = V4L2_MPEG_AUDIO_L3_BITRATE_32K;        break;      case 40:        pvr->audio_rate = V4L2_MPEG_AUDIO_L3_BITRATE_40K;        break;      case 48:        pvr->audio_rate = V4L2_MPEG_AUDIO_L3_BITRATE_48K;        break;      case 56:        pvr->audio_rate = V4L2_MPEG_AUDIO_L3_BITRATE_56K;        break;      case 64:        pvr->audio_rate = V4L2_MPEG_AUDIO_L3_BITRATE_64K;        break;      case 80:        pvr->audio_rate = V4L2_MPEG_AUDIO_L3_BITRATE_80K;        break;      case 96:        pvr->audio_rate = V4L2_MPEG_AUDIO_L3_BITRATE_96K;        break;      case 112:        pvr->audio_rate = V4L2_MPEG_AUDIO_L3_BITRATE_112K;        break;      case 128:        pvr->audio_rate = V4L2_MPEG_AUDIO_L3_BITRATE_128K;        break;      case 160:        pvr->audio_rate = V4L2_MPEG_AUDIO_L3_BITRATE_160K;        break;      case 192:        pvr->audio_rate = V4L2_MPEG_AUDIO_L3_BITRATE_192K;        break;      case 224:        pvr->audio_rate = V4L2_MPEG_AUDIO_L3_BITRATE_224K;        break;      case 256:        pvr->audio_rate = V4L2_MPEG_AUDIO_L3_BITRATE_256K;        break;      case 320:        pvr->audio_rate = V4L2_MPEG_AUDIO_L3_BITRATE_320K;        break;      default:        break;      }    }  }    /* -pvr amode=x */  if (pvr_param_audio_mode)  {    if (!strcmp (pvr_param_audio_mode, PVR_AUDIO_MODE_ARG_STEREO))      pvr->audio_mode = V4L2_MPEG_AUDIO_MODE_STEREO;    else if (!strcmp (pvr_param_audio_mode, PVR_AUDIO_MODE_ARG_JOINT_STEREO))      pvr->audio_mode = V4L2_MPEG_AUDIO_MODE_JOINT_STEREO;    else if (!strcmp (pvr_param_audio_mode, PVR_AUDIO_MODE_ARG_DUAL))      pvr->audio_mode = V4L2_MPEG_AUDIO_MODE_DUAL;    else if (!strcmp (pvr_param_audio_mode, PVR_AUDIO_MODE_ARG_MONO))      pvr->audio_mode = V4L2_MPEG_AUDIO_MODE_MONO;  }  /* -pvr vbitrate=x */  if (pvr_param_bitrate)    pvr->bitrate = pvr_param_bitrate;  /* -pvr vmode=x */  if (pvr_param_bitrate_mode)  {    if (!strcmp (pvr_param_bitrate_mode, PVR_VIDEO_BITRATE_MODE_ARG_VBR))      pvr->bitrate_mode = V4L2_MPEG_VIDEO_BITRATE_MODE_VBR;    else if (!strcmp (pvr_param_bitrate_mode, PVR_VIDEO_BITRATE_MODE_ARG_CBR))      pvr->bitrate_mode = V4L2_MPEG_VIDEO_BITRATE_MODE_CBR;  }  /* -pvr vpeak=x */  if (pvr_param_bitrate_peak)    pvr->bitrate_peak = pvr_param_bitrate_peak;  /* -pvr fmt=x */  if (pvr_param_stream_type)  {    if (!strcmp (pvr_param_stream_type, PVR_VIDEO_STREAM_TYPE_PS))      pvr->stream_type = V4L2_MPEG_STREAM_TYPE_MPEG2_PS;    else if (!strcmp (pvr_param_stream_type, PVR_VIDEO_STREAM_TYPE_TS))      pvr->stream_type = V4L2_MPEG_STREAM_TYPE_MPEG2_TS;    else if (!strcmp (pvr_param_stream_type, PVR_VIDEO_STREAM_TYPE_MPEG1))      pvr->stream_type = V4L2_MPEG_STREAM_TYPE_MPEG1_SS;    else if (!strcmp (pvr_param_stream_type, PVR_VIDEO_STREAM_TYPE_DVD))      pvr->stream_type = V4L2_MPEG_STREAM_TYPE_MPEG2_DVD;    else if (!strcmp (pvr_param_stream_type, PVR_VIDEO_STREAM_TYPE_VCD))      pvr->stream_type = V4L2_MPEG_STREAM_TYPE_MPEG1_VCD;    else if (!strcmp (pvr_param_stream_type, PVR_VIDEO_STREAM_TYPE_SVCD))      pvr->stream_type = V4L2_MPEG_STREAM_TYPE_MPEG2_SVCD;  }}static voidadd_v4l2_ext_control (struct v4l2_ext_control *ctrl,                      uint32_t id, int32_t value){  ctrl->id = id;   ctrl->value = value;}static intset_encoder_settings (struct pvr_t *pvr){  struct v4l2_ext_control *ext_ctrl = NULL;  struct v4l2_ext_controls ctrls;  uint32_t count = 0;    if (!pvr)    return -1;    if (pvr->dev_fd < 0)    return -1;  ext_ctrl = (struct v4l2_ext_control *)    malloc (PVR_MAX_CONTROLS * sizeof (struct v4l2_ext_control));   add_v4l2_ext_control (&ext_ctrl[count++], V4L2_CID_MPEG_VIDEO_ASPECT,                        pvr->aspect);  add_v4l2_ext_control (&ext_ctrl[count++], V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ,                        pvr->samplerate);  add_v4l2_ext_control (&ext_ctrl[count++], V4L2_CID_MPEG_AUDIO_ENCODING,                        pvr->layer);  switch (pvr->layer)  {  case V4L2_MPEG_AUDIO_ENCODING_LAYER_1:    add_v4l2_ext_control (&ext_ctrl[count++], V4L2_CID_MPEG_AUDIO_L1_BITRATE,                          pvr->audio_rate);    break;  case V4L2_MPEG_AUDIO_ENCODING_LAYER_2:    add_v4l2_ext_control (&ext_ctrl[count++], V4L2_CID_MPEG_AUDIO_L2_BITRATE,                          pvr->audio_rate);    break;  case V4L2_MPEG_AUDIO_ENCODING_LAYER_3:    add_v4l2_ext_control (&ext_ctrl[count++], V4L2_CID_MPEG_AUDIO_L3_BITRATE,                          pvr->audio_rate);    break;  default:    break;  }  add_v4l2_ext_control (&ext_ctrl[count++], V4L2_CID_MPEG_AUDIO_MODE,                        pvr->audio_mode);  add_v4l2_ext_control (&ext_ctrl[count++], V4L2_CID_MPEG_VIDEO_BITRATE,                        pvr->bitrate);  add_v4l2_ext_control (&ext_ctrl[count++], V4L2_CID_MPEG_VIDEO_BITRATE_PEAK,                        pvr->bitrate_peak);  add_v4l2_ext_control (&ext_ctrl[count++], V4L2_CID_MPEG_VIDEO_BITRATE_MODE,                        pvr->bitrate_mode);  add_v4l2_ext_control (&ext_ctrl[count++], V4L2_CID_MPEG_STREAM_TYPE,                        pvr->stream_type);  /* set new encoding settings */  ctrls.ctrl_class = V4L2_CTRL_CLASS_MPEG;   ctrls.count = count;   ctrls.controls = ext_ctrl;    if (ioctl (pvr->dev_fd, VIDIOC_S_EXT_CTRLS, &ctrls) < 0)  {    mp_msg (MSGT_OPEN, MSGL_ERR, "%s Error setting MPEG controls (%s).\n",            LOG_LEVEL_ENCODER, strerror (errno));    free (ext_ctrl);     return -1;  }  free (ext_ctrl);   return 0;}static voidparse_v4l2_tv_options (struct pvr_t *pvr){  if (!pvr)    return;  /* Create our station/channel list */  parse_setup_stationlist (pvr);  if (pvr->param_channel)  {    if (set_station_by_channelname_or_freq (pvr, pvr->param_channel,                                            -1, 0) >= 0)    {      if (stream_tv_defaults.freq)      {        mp_msg (MSGT_OPEN, MSGL_HINT,                "%s tv param freq %s is overwritten by channel setting freq %d\n", LOG_LEVEL_V4L2,                 stream_tv_defaults.freq, pvr->freq);      }    }  }    if (pvr->freq < 0 && stream_tv_defaults.freq)  {    mp_msg (MSGT_OPEN, MSGL_HINT, "%s tv param freq %s is used directly\n",            LOG_LEVEL_V4L2, stream_tv_defaults.freq);    if (set_station_by_channelname_or_freq (pvr, NULL,                                            atoi (stream_tv_defaults.freq), 0)<0)      {        mp_msg (MSGT_OPEN, MSGL_WARN,                "%s tv param freq %s invalid to set station\n",                LOG_LEVEL_V4L2, stream_tv_defaults.freq);      }  }    if (stream_tv_defaults.device)  {    if (pvr->video_dev)      free (pvr->video_dev);    pvr->video_dev = strdup (stream_tv_defaults.device);  }    if (stream_tv_defaults.noaudio)    pvr->mute = stream_tv_defaults.noaudio;  if (stream_tv_defaults.input)    pvr->input = stream_tv_defaults.input;    if (stream_tv_defaults.normid)    pvr->normid = stream_tv_defaults.normid;    if (stream_tv_defaults.brightness)    pvr->brightness = stream_tv_defaults.brightness;    if (stream_tv_defaults.contrast)    pvr->contrast = stream_tv_defaults.contrast;    if (stream_tv_defaults.hue)    pvr->hue = stream_tv_defaults.hue;    if (stream_tv_defaults.saturation)    pvr->saturation = stream_tv_defaults.saturation;  if (stream_tv_defaults.width)    pvr->width = stream_tv_defaults.width;  if (stream_tv_defaults.height)    pvr->height = stream_tv_defaults.height;}static intset_v4l2_settings (struct pvr_t *pvr){

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -