2004年10月 3日

GV-1394TVでのキャプチャ(その2)

GV-1394TVからffmpegで直接mpeg2/4がとれないかなぁと試してみた。

hcube:/home/DV# ffmpeg -dv1394  dada.avi
ffmpeg version 0.4.9-pre1, build 4718, Copyright (c) 2000-2004 Fabrice Bellard
  built on Sep 12 2004 09:27:55, gcc: 3.3.4 (Debian 1:3.3.4-11)
Failed to initialize DV interface: Invalid argument
Could not find video grab device
うーん、なんじゃそれ。

ffmpeg-cvs-2004-07-12/libavformat/dv1394.cを見てみた。

    /* Open and initialize DV1394 device */
    video_device = ap->device;
    if (!video_device)
        video_device = "/dev/dv1394/0";
    dv->fd = open(video_device, O_RDONLY);
    if (dv->fd < 0) {
        perror("Failed to open DV interface");
        goto failed;
    }

    if (dv1394_reset(dv) < 0) {
        perror("Failed to initialize DV interface");
        goto failed;
    }
openはうまくいっていて、その次が問題みたいだ。

dv1394_reset()を見てみると、

/*
 * The trick here is to kludge around well known problem with kernel Ooopsing
 * when you try to capture PAL on a device node configure for NTSC. That's
 * why we have to configure the device node for PAL, and then read only NTSC
 * amount of data.
 */
static int dv1394_reset(struct dv1394_data *dv)
{
    struct dv1394_init init;

    init.channel     = dv->channel;
    init.api_version = DV1394_API_VERSION;
    init.n_frames    = DV1394_RING_FRAMES;
    init.format      = DV1394_PAL;

    if (ioctl(dv->fd, DV1394_INIT, &init) < 0)
        return -1;

    dv->avail  = dv->done = 0;
    return 0;
}
PALとして埋め込んでみるみたいだし、動いているのかなぁ(^^;。


dvts1.0b/dvrecv/ieee1394-linux.cを見てみると、

int
prepare_ieee1394 (struct dvrecv_param *dvrecv_param)
{
  int fd;

  fd = open(dvrecv_param->ieee1394dv.devname, O_RDWR);
  if (fd < 0) {
    printf("failed to open device : %s\n", dvrecv_param->ieee1394dv.devname);
    return(-1);
  }

  dv1394_init_param.api_version = DV1394_API_VERSION;
  dv1394_init_param.channel = 63;
  dv1394_init_param.n_frames = 2;
  dv1394_init_param.cip_n = 0;
  dv1394_init_param.cip_d = 0;
  dv1394_init_param.syt_offset = 0;

  if (dvrecv_param->format == DV_FORMAT_NTSC) {
    dv1394_init_param.format = DV1394_NTSC;
  } else if (dvrecv_param->format == DV_FORMAT_PAL) {
    dv1394_init_param.format = DV1394_PAL;
  } else {
    return(-1);
  }

  if (ioctl(fd, DV1394_INIT, &dv1394_init_param) < 0) {
    perror("ioctl DV1394_INIT");
    printf("channel  : %d\n", dv1394_init_param.channel);
    printf("n_frames : %d\n", dv1394_init_param.n_frames);
    return(-1);
  }

  dvrecv_param->ieee1394dv.fd1394 = fd;

  return(1);
}
このあたりから持ってくればいいかなぁ。

投稿者 his : 2004年10月 3日 23:39
このエントリーのトラックバックURL: http://hoop.euqset.org/blog/mt-tb2006.cgi/687
GV-1394TVとLinux
概要 ググッてみたら、こんなページを発見。 GV-1394など、DVキャプチャ機器を操作する仕組みは、一応統一された方法があるようだ。iMovieがいろいろなビデオカメラを操作出来るのは、こういった技術があるからなのか。やはり、チャネルを変える方法がネックになる。 柴田(...
ウェブログ: MyCometG3
時刻: 2004年12月25日 19:18
コメント

うーん、そもそもdvtsがきちんと動かない(^^;

dvgrabは動くんだけど、c++で書いてあって
私には解読が面倒。

時間かかりそうだなぁ。根気が続くかなぁ。

Posted by: his : 2004年10月 5日 02:18
コメントする









名前、アドレスを登録しますか?





画像の中に見える文字を入力してください。