亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? grab.c

?? 杜比AC-3編碼解碼器(參考程序)
?? C
字號(hào):
/*
 * Linux audio/video grab interface
 * Copyright (c) 2000 Gerard Lantau.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
#include <stdlib.h>
#include <stdio.h>
#include <netinet/in.h>
#include <linux/videodev.h>
#include <linux/soundcard.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <errno.h>
#include <sys/time.h>
#include <getopt.h>

#include "mpegenc.h"

long long gettime(void)
{
    struct timeval tv;
    gettimeofday(&tv,NULL);
    return (long long)tv.tv_sec * 1000000 + tv.tv_usec;
}

const char *v4l_device = "/dev/video";
const char *audio_device = "/dev/dsp";

/* v4l capture */

static struct video_capability  video_cap;
int video_fd = -1;
UINT8 *video_buf, *picture_buf;
struct video_mbuf gb_buffers;
struct video_mmap gb_buf;
struct video_audio audio;
int gb_frame = 0;
long long time_frame;
int frame_rate;
int use_mmap = 0;

int v4l_init(int rate, int width, int height)
{
    frame_rate = rate;

    video_fd = open(v4l_device, O_RDWR);
    if (video_fd < 0) {
        perror(v4l_device);
        return -1;
    }
    
    if (ioctl(video_fd,VIDIOCGCAP,&video_cap) < 0) {
        perror("VIDIOCGCAP");
        return -1;
    }
    
    /* unmute audio */
    ioctl(video_fd, VIDIOCGAUDIO, &audio);
    audio.flags &= ~VIDEO_AUDIO_MUTE;
    ioctl(video_fd, VIDIOCSAUDIO, &audio);

    if (!(video_cap.type & VID_TYPE_CAPTURE)) {
        /* try to use read based access */
        struct video_window win;
        int val;

        win.x = 0;
        win.y = 0;
        win.width = width;
        win.height = height;
        win.chromakey = -1;
        win.flags = 0;

        ioctl(video_fd, VIDIOCSWIN, &win);

        val = 1;
        ioctl(video_fd, VIDIOCCAPTURE, &val);
        video_buf = malloc( width * height * 2);
        picture_buf = malloc( (width * height * 3) / 2);
        use_mmap = 0;
        return 0;
    }
    
    if (ioctl(video_fd,VIDIOCGMBUF,&gb_buffers) < 0) {
        perror("ioctl VIDIOCGMBUF");
    }
    
    video_buf = mmap(0,gb_buffers.size,PROT_READ|PROT_WRITE,MAP_SHARED,video_fd,0);
    if ((unsigned char*)-1 == video_buf) {
        perror("mmap");
        return -1;
    }
    gb_frame = 0;
    time_frame = gettime();
    
    /* start to grab the first frame */
    gb_buf.frame = 1 - gb_frame;
    gb_buf.height = height;
    gb_buf.width = width;
    gb_buf.format = VIDEO_PALETTE_YUV420P;
    
    if (ioctl(video_fd, VIDIOCMCAPTURE, &gb_buf) < 0) {
        if (errno == EAGAIN)
            fprintf(stderr,"Cannot Sync\n");
        else
            perror("VIDIOCMCAPTURE");
        return -1;
    }
    use_mmap = 1;
    return 0;
}

/* test with read call and YUV422 stream */
static int v4l_basic_read_picture(UINT8 *picture[3],
                                  int width, int height,
                                  int picture_number)
{
    int x, y;
    UINT8 *p, *lum, *cb, *cr;
    
    if (read(video_fd, video_buf, width * height * 2) < 0)
        perror("read");

    picture[0] = picture_buf;
    picture[1] = picture_buf + width * height;
    picture[2] = picture_buf + (width * height) + (width * height) / 4;
    
    /* XXX: optimize */
    lum = picture[0];
    cb = picture[1];
    cr = picture[2];
    p = video_buf;
    for(y=0;y<height;y+=2) {
        for(x=0;x<width;x+=2) {
            lum[0] = p[0];
            cb[0] = p[1];
            lum[1] = p[2];
            cr[0] = p[3];
            p += 4;
            lum += 2;
            cb++;
            cr++;
        }
        for(x=0;x<width;x+=2) {
            lum[0] = p[0];
            lum[1] = p[2];
            p += 4;
            lum += 2;
        }
    }
    return 0;
}

static int v4l_mm_read_picture(UINT8 *picture[3],
                               int width, int height,
                               int picture_number)
{
    UINT8 *ptr;
    int size;
    long long curtime;

    /* wait based on the frame rate */
    time_frame += 1000000 / frame_rate;
    do {
        curtime = gettime();
    } while (curtime < time_frame);
    
    gb_buf.frame = gb_frame;
    if (ioctl(video_fd, VIDIOCMCAPTURE, &gb_buf) < 0) {
	if (errno == EAGAIN)
	    fprintf(stderr,"Cannot Sync\n");
	else
            perror("VIDIOCMCAPTURE");
	return -1;
    }
    gb_frame = 1 - gb_frame;

    if (ioctl(video_fd, VIDIOCSYNC, &gb_frame) < 0) {
        if (errno != EAGAIN) {
            perror("VIDIOCSYNC");
        }
    }

    size = width * height;
    ptr = video_buf + gb_buffers.offsets[gb_frame];
    picture[0] = ptr;
    picture[1] = ptr + size;
    picture[2] = ptr + size + (size / 4);
    
    return 0;
}

int v4l_read_picture(UINT8 *picture[3],
                     int width, int height,
                     int picture_number)
{
    if (use_mmap) {
        return v4l_mm_read_picture(picture, width, height, picture_number);
    } else {
        return v4l_basic_read_picture(picture, width, height, picture_number);
    }
}

/* open audio device */
int audio_open(int freq, int channels)
{
    int audio_fd, tmp, err;

    audio_fd = open(audio_device,O_RDONLY);
    if (audio_fd < 0) {
        perror(audio_device);
        return -1;
    }
    /* non blocking mode */
    fcntl(audio_fd, F_SETFL, O_NONBLOCK);

#if 0
    tmp=(NB_FRAGMENTS << 16) | FRAGMENT_BITS;
    err=ioctl(audio_fd, SNDCTL_DSP_SETFRAGMENT, &tmp);
    if (err < 0) {
        perror("SNDCTL_DSP_SETFRAGMENT");
    }
#endif

    /* always set to this size */
    /* XXX: incorrect if big endian */
    tmp=AFMT_S16_LE;
    err=ioctl(audio_fd,SNDCTL_DSP_SETFMT,&tmp);
    if (err < 0) {
        perror("SNDCTL_DSP_SETFMT");
    }
    
    tmp= (channels == 2);
    err=ioctl(audio_fd,SNDCTL_DSP_STEREO,&tmp);
    if (err < 0) {
        perror("SNDCTL_DSP_STEREO");
    }
    
    /* should be last */
    tmp = freq;
    err=ioctl(audio_fd, SNDCTL_DSP_SPEED, &tmp);
    if (err < 0) {
        perror("SNDCTL_DSP_SPEED");
    }
    return audio_fd;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
97精品国产露脸对白| 久久婷婷综合激情| 欧洲色大大久久| 成人午夜av影视| 高清日韩电视剧大全免费| 国产一区二区电影| 国模无码大尺度一区二区三区| 青青草97国产精品免费观看无弹窗版| 亚洲一线二线三线久久久| 亚洲免费资源在线播放| 亚洲精选视频免费看| 亚洲欧美欧美一区二区三区| 亚洲视频综合在线| 一区二区三区在线免费播放 | 丝袜亚洲另类欧美综合| 亚洲一区二区欧美日韩| 亚洲国产精品久久久久秋霞影院| 亚洲一区二区三区在线| 日韩精品久久理论片| 日韩电影在线一区二区| 美脚の诱脚舐め脚责91 | 亚洲色图欧美激情| 亚洲一区二区视频在线| 爽爽淫人综合网网站| 免费人成网站在线观看欧美高清| 美女精品一区二区| 国产精选一区二区三区| aaa欧美色吧激情视频| 91久久香蕉国产日韩欧美9色| 欧美日韩国产综合一区二区 | 综合分类小说区另类春色亚洲小说欧美| 国产精品久久久久四虎| 夜夜亚洲天天久久| 亚洲成人久久影院| 激情综合色播五月| 成人18精品视频| 欧美日韩大陆一区二区| 欧美tickling网站挠脚心| 中文欧美字幕免费| 亚洲线精品一区二区三区| 久久国产夜色精品鲁鲁99| 国产精品1区二区.| 欧美中文字幕一区二区三区亚洲| 91精品婷婷国产综合久久性色| 日韩一区精品视频| 精品亚洲免费视频| 一本久久精品一区二区| 制服丝袜亚洲色图| 中文久久乱码一区二区| 偷拍亚洲欧洲综合| 国产精品亚洲人在线观看| 在线日韩一区二区| 26uuu精品一区二区三区四区在线| 国产精品国产三级国产专播品爱网| 一卡二卡三卡日韩欧美| 韩日欧美一区二区三区| 色欲综合视频天天天| 精品久久久网站| 国产精品国模大尺度视频| 男人的天堂亚洲一区| 99精品热视频| 亚洲精品一区二区三区99| 尤物av一区二区| 国产精品亚洲综合一区在线观看| 欧美探花视频资源| 欧美韩国一区二区| 免费日韩伦理电影| 欧美在线一二三| 久久精品欧美日韩| 日韩激情视频网站| 色av一区二区| 中文字幕av一区二区三区| 蜜桃av噜噜一区| 欧美色视频在线观看| 国产精品久久久久aaaa| 捆绑紧缚一区二区三区视频| 日本韩国欧美一区二区三区| 国产亚洲综合在线| 蜜臀av一区二区三区| 欧美午夜在线观看| 国产精品福利在线播放| 国产真实乱对白精彩久久| 欧美日韩你懂得| 玉米视频成人免费看| jizzjizzjizz欧美| 国产亚洲短视频| 国产在线观看免费一区| 欧美一级日韩不卡播放免费| 亚洲成人自拍一区| 在线精品亚洲一区二区不卡| 亚洲天堂免费看| 成人av电影免费在线播放| 国产精品网站在线观看| 国产一区二区三区电影在线观看 | 91精品国产综合久久精品性色| 一区二区三区影院| eeuss国产一区二区三区| 国产精品美女www爽爽爽| 岛国一区二区在线观看| 欧美高清在线精品一区| 国产福利一区在线| 久久久无码精品亚洲日韩按摩| 久久66热偷产精品| 精品国产一区二区国模嫣然| 美女视频黄久久| 日韩一区二区电影网| 日本v片在线高清不卡在线观看| 欧美日韩在线播放| 亚洲成年人网站在线观看| 欧美一a一片一级一片| 亚洲福利视频三区| 欧美日韩综合不卡| 视频一区中文字幕| 欧美一区二区三区视频在线观看| 亚洲成人1区2区| 日韩午夜在线影院| 精品无人码麻豆乱码1区2区| 久久久激情视频| 99视频在线精品| 亚洲一级片在线观看| 在线不卡的av| 麻豆一区二区三| 久久色.com| 懂色一区二区三区免费观看| 国产精品久久国产精麻豆99网站| 99re这里只有精品视频首页| 亚洲人成伊人成综合网小说| 欧美亚洲一区二区三区四区| 日本亚洲一区二区| 久久综合视频网| 成人avav在线| 亚洲自拍偷拍网站| 欧美一区二区三区喷汁尤物| 国产一区二区三区免费看| 日韩一区欧美一区| 欧美精品日韩一本| 国产一区二区福利视频| 亚洲女与黑人做爰| 欧美肥妇bbw| 国产精品996| 亚洲女与黑人做爰| 欧美v亚洲v综合ⅴ国产v| 成人激情小说乱人伦| 亚洲一区二区视频在线观看| 欧美大片在线观看| av在线播放一区二区三区| 亚洲福利一区二区| 久久久噜噜噜久久人人看| www.欧美.com| 日韩中文字幕不卡| 亚洲欧洲色图综合| 91精品国产入口在线| www.成人在线| 另类调教123区| 亚洲免费伊人电影| 日韩欧美激情在线| 一本大道久久a久久综合婷婷| 美腿丝袜一区二区三区| 日韩一区日韩二区| 精品va天堂亚洲国产| 欧美在线观看一区| 国产精品一区二区91| 亚洲mv在线观看| 国产精品美女久久久久高潮| 欧美一级精品在线| 色综合视频在线观看| 国产一区二区三区国产| 亚洲 欧美综合在线网络| 国产精品伦理一区二区| 亚洲成人激情av| 国产精品成人免费精品自在线观看| 制服.丝袜.亚洲.中文.综合| 91网站最新网址| 国产一区91精品张津瑜| 日韩中文字幕麻豆| 亚洲宅男天堂在线观看无病毒| 久久精品一区二区三区四区| 777a∨成人精品桃花网| 91成人看片片| 成人av资源在线| 精品一区二区精品| 日韩精品成人一区二区三区| 一区二区三区在线不卡| 国产精品成人一区二区三区夜夜夜 | 欧美色手机在线观看| 99在线热播精品免费| 国产成人综合在线| 精品一区二区免费| 日本午夜精品视频在线观看| 亚洲五月六月丁香激情| 综合在线观看色| 国产精品国产精品国产专区不蜜 | 亚洲精品视频一区二区| 国产精品少妇自拍| 久久精品免视看| 国产婷婷色一区二区三区| 久久综合色之久久综合| 精品国产网站在线观看| 欧美videofree性高清杂交| 欧美成人性战久久|