wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6270|回復(fù): 0
收起左側(cè)

為madplay編寫應(yīng)用程序

[復(fù)制鏈接]
ID:72519 發(fā)表于 2015-1-20 02:29 | 顯示全部樓層 |閱讀模式

這篇文章的app程序是參考國嵌的。

在編寫app之前我們要編譯好madplay


準(zhǔn)備工作一:

編譯madplay

首先解壓三個壓縮文件

[root@localhost ~]# cd /work/projects/sound/

[root@localhost sound]# ls

libid3tag-0.15.1b.tar.gz libmad-0.15.1b.tar.gz madplay-0.15.2b.tar.gz

[root@localhost sound]# tar xzf libid3tag-0.15.1b.tar.gz  //從名字上看是個庫

[root@localhost sound]# tar xzf libmad-0.15.1b.tar.gz     //這個也是庫

[root@localhost sound]# tar xzf madplay-0.15.2b.tar.gz  //這個是應(yīng)用程序,它依賴這兩個庫

[root@localhost sound]#


[root@localhost sound]# cd libid3tag-0.15.1b

[root@localhost libid3tag-0.15.1b]# ./configure--host=arm-linux --prefix=/work/projects/sound/tmp

configure: WARNING: If you wanted to set the --build type, don't use--host.

    If a cross compiler isdetected then cross compile mode will be used.

checking for a BSD-compatible install... /usr/bin/install -c

checking whether build environment is sane... yes


然后再

make

make install
再按照上面的方法進(jìn)入libmad-0.15.1b文件夾編譯

./configure --host=arm-linux --prefix=/work/projects/sound/tmpLDFLAGS="-L/work/projects/sound/tmp/lib" CFLAGS="-I/work/projects/sound/tmp/include"

注意: -L/work…..

這個-L與/之間沒有空格.

然后再

make

make install

把tmp/bin/*  tmp/lib/*so* -d把庫文件復(fù)制到開發(fā)板lib文件夾,bin文件復(fù)制到開發(fā)板的bin文件夾


# madplay --tty-control /mnt/mp3/beyond.mp3

MPEG Audio Decoder 0.15.2 (beta) - Copyright (C) 2000-2004 RobertLeslie et al.

s3c2410-uda1341-superlp: audio_set_dsp_speed:44100 prescaler:66

         Artist: Beyond£¨»Æ¼ò¾Ô£©

          Album:òôàÖμîìÃMusicPalace

        Comment:http://music.zkinfo.ha.cn

s3c2410-uda1341-superlp: audio_set_dsp_speed:44100 prescaler:66


到這里時候測試下自己的開發(fā)板能否播放mp3音樂。

注意事項(xiàng):確保自己的開發(fā)板已經(jīng)有聲卡了,想提高播放音樂的音量不能用madplay提供的方法(聲音加大會破掉,而且音質(zhì)會變得很差),如果你的開發(fā)板有QT界面直接調(diào)整音量滑塊。


準(zhǔn)備工作二:

編寫開發(fā)板上的驅(qū)動程序。我的開發(fā)板是TQ2440。

key_drv_irq.c

  1. #include <linux/module.h>
  2. #include <linux/kernel.h>
  3. #include <linux/fs.h>
  4. #include <linux/init.h>
  5. #include <linux/delay.h>
  6. #include <linux/irq.h>
  7. #include <asm/uaccess.h>
  8. #include <asm/irq.h>
  9. #include <asm/io.h>
  10. #include <asm/arch/regs-gpio.h>
  11. #include <asm/hardware.h>

  12. static int major;
  13. static struct class *key_class;
  14. static struct class_device        *key_class_dev;

  15. volatile unsigned long *gpfcon;
  16. volatile unsigned long *gpfdat;

  17. static DECLARE_WAIT_QUEUE_HEAD(button_waitq);

  18. /* 中斷事件標(biāo)志, 中斷服務(wù)程序?qū)⑺?,third_drv_read將它清0 */
  19. static volatile int ev_press = 0;


  20. struct pin_desc{
  21.         unsigned int pin;
  22.         unsigned int key_val;
  23. };


  24. /* 鍵值: 按下時, 0x01, 0x02, 0x03, 0x04 */
  25. /* 鍵值: 松開時, 0x81, 0x82, 0x83, 0x84 */
  26. static unsigned char key_val;

  27. struct pin_desc pins_desc[4] = {
  28.         {S3C2410_GPF1, 0x01},
  29.         {S3C2410_GPF4, 0x02},
  30.         {S3C2410_GPF2, 0x03},
  31.         {S3C2410_GPF0, 0x04},
  32. };

  33. /*
  34.   * 確定按鍵值
  35.   */
  36. static irqreturn_t buttons_irq(int irq, void *dev_id)
  37. {
  38.         struct pin_desc * pindesc = (struct pin_desc *)dev_id;
  39.         unsigned int pinval;
  40.        
  41.         pinval = s3c2410_gpio_getpin(pindesc->pin);

  42.         if (pinval)
  43.         {
  44.                 /* 松開 */
  45.                 key_val = 0x80 | pindesc->key_val;
  46.         }
  47.         else
  48.         {
  49.                 /* 按下 */
  50.                 key_val = pindesc->key_val;
  51.         }

  52.   ev_press = 1;                  /* 表示中斷發(fā)生了 */
  53.   wake_up_interruptible(&button_waitq);   /* 喚醒休眠的進(jìn)程 */
  54.        
  55.         return IRQ_RETVAL(IRQ_HANDLED);
  56. }

  57. static int key_drv_open(struct inode *inode, struct file *file)
  58. {
  59.   /* 配置成輸入模式 */
  60.   request_irq(IRQ_EINT1, buttons_irq, IRQT_BOTHEDGE, "K1", &pins_desc[0]);
  61.   request_irq(IRQ_EINT4, buttons_irq, IRQT_BOTHEDGE, "K2", &pins_desc[1]);  
  62.   request_irq(IRQ_EINT2, buttons_irq, IRQT_BOTHEDGE, "K3", &pins_desc[2]);
  63.   request_irq(IRQ_EINT0, buttons_irq, IRQT_BOTHEDGE, "K4", &pins_desc[3]);
  64.    
  65.   return 0;
  66. }

  67. static ssize_t key_drv_read(struct file *file, char __user *buf, size_t size, loff_t *ppos)
  68. {
  69.         if (size != 1)
  70.                 return -EINVAL;

  71.         /* 如果沒有按鍵動作, 休眠 */
  72.         wait_event_interruptible(button_waitq, ev_press);

  73.         /* 如果有按鍵動作, 返回鍵值 */
  74.         copy_to_user(buf, &key_val, 1);
  75.         ev_press = 0;
  76.        
  77.         return 1;
  78. }

  79. int key_dev_close(struct inode *inode, struct file *file)
  80. {
  81.         free_irq(IRQ_EINT1, &pins_desc[0]);
  82.         free_irq(IRQ_EINT4, &pins_desc[1]);
  83.         free_irq(IRQ_EINT2, &pins_desc[2]);
  84.         free_irq(IRQ_EINT0, &pins_desc[3]);
  85.   return 0;
  86. }
  87.             
  88. static struct file_operations key_drv_fops={
  89.   .owner=THIS_MODULE,
  90.   .open=key_drv_open,
  91.   .read=key_drv_read,
  92.   .release=key_dev_close,
  93. };

  94. static int key_drv_init(void)
  95. {
  96.   major=register_chrdev(0, "key_drv", &key_drv_fops);
  97.   key_class=class_create(THIS_MODULE, "keydrv");
  98.   key_class_dev=class_device_create(key_class, NULL, MKDEV(major,0), NULL,"buttons"); /* dev/buttons */
  99.   
  100.   gpfcon = (volatile unsigned long *)ioremap(0x56000050, 16); //0x56000010是的GPIOB的
  101.         gpfdat = gpfcon + 1;
  102.        
  103.   return 0;
  104. }

  105. static void key_drv_exit(void)
  106. {
  107.   unregister_chrdev(major, "key_drv");
  108.   class_device_unregister(key_class_dev);
  109.   class_destroy(key_class);   //class_destory(key_class);
  110.   iounmap(gpfcon);
  111. }

  112. module_init(key_drv_init);
  113. module_exit(key_drv_exit);

  114. MODULE_LICENSE("GPL");
復(fù)制代碼

準(zhǔn)備工作三:

app-mp3.c

  1. /*
  2. *     mp3播放器控制程序
  3. *           功能:
  4.                          k1:播放、暫停
  5.                          k2:停止播放
  6.                          k3:上一首
  7.                          k4:下一首
  8. *     附加:歌曲自動循環(huán)播放
  9. *
  10. */
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #include <unistd.h>
  14. #include <sys/ioctl.h>
  15. #include <sys/types.h>
  16. #include <sys/stat.h>
  17. #include <fcntl.h>
  18. #include <signal.h>
  19. #include <sys/select.h>
  20. #include <sys/time.h>
  21. #include <errno.h>
  22. #include <sys/wait.h>
  23. #include <string.h>
  24. #include <sys/ipc.h>
  25. #include <sys/shm.h>

  26. /*共享內(nèi)存申請標(biāo)記*/
  27. #define PERM S_IRUSR|S_IWUSR                                                                                                       

  28. /*雙向循環(huán)列表:存放歌曲名*/
  29. struct song                               
  30. {
  31.         char songname[20];
  32.         struct song *prev;
  33.         struct song *next;
  34. };

  35. /*孫子進(jìn)程id號*/
  36. pid_t gradchild;

  37. /*子進(jìn)程id號*/
  38. pid_t pid;

  39. /*共享內(nèi)存描述標(biāo)記*/
  40. int shmid;

  41. char *p_addr;

  42. /*播放標(biāo)記*/
  43. int first_key=1;
  44. int play_flag=0;

  45. /*************************************************
  46. Function name: play
  47. Parameter    : struct song *
  48. Description         : 播放函數(shù)
  49. Return                 : void
  50. Argument     : void
  51. Autor & date : ada 09,12,07
  52. **************************************************/
  53. void play(struct song *currentsong)
  54. {
  55.         pid_t fd;
  56.         char *c_addr;
  57.         char *p;
  58.         int len;
  59.         char my_song[30]="/mp3/";
  60.         while(currentsong)
  61.         {
  62.                 /*創(chuàng)建子進(jìn)程,即孫子進(jìn)程*/
  63.                 fd = fork();
  64.                 if(fd == -1)
  65.                 {       
  66.                         perror("fork");
  67.                         exit(1);
  68.                 }
  69.                 else if(fd == 0)
  70.                 {
  71.                         /*把歌曲名加上根路徑*/
  72.                         strcat(my_song,currentsong->songname);
  73.                         p = my_song;
  74.                         len = strlen(p);

  75.                         /*去掉文件名最后的'\n'*/
  76.                         my_song[len-1]='\0';

  77.                         printf("THIS SONG IS %s\n",my_song);
  78.                         execl("/bin/madplay","madplay",my_song,NULL);
  79.                         printf("\n\n\n");
  80.                 }
  81.                 else
  82.                 {
  83.                         /*內(nèi)存映射*/
  84.                         c_addr = shmat(shmid,0,0);

  85.                         /*把孫子進(jìn)程的id和當(dāng)前播放歌曲的節(jié)點(diǎn)指針傳入共享內(nèi)存*/
  86.                         memcpy(c_addr,&fd,sizeof(pid_t));
  87.                         memcpy(c_addr + sizeof(pid_t)+1,¤tsong,4);
  88.                         /*使用wait阻塞孫子進(jìn)程,直到孫子進(jìn)程播放完才能被喚醒;
  89.                           當(dāng)被喚醒時,表示播放MP3期間沒有按鍵按下,則繼續(xù)順序播放下一首MP3*/
  90.                         if(fd == wait(NULL))
  91.                         {
  92.                                 currentsong = currentsong->next;
  93.                                 printf("THE NEXT SONG IS %s\n",currentsong->songname);
  94.                         }
  95.                 }
  96.         }
  97. }

  98. /*************************************************
  99. Function name: creat_song_list
  100. Parameter    : void
  101. Description         : 創(chuàng)建歌曲名的雙向循環(huán)鏈表
  102. Return                 : struct song *
  103. Argument     : void
  104. Autor & date : ada 09.12.07
  105. **************************************************/
  106. struct song *creat_song_list(void)
  107. {       
  108.         FILE *fd;
  109.         size_t size;
  110.         size_t len;
  111.         char *line = NULL;
  112.         struct song *head;
  113.         struct song *p1;
  114.         struct song *p2;
  115.         system("ls /mp3 >song_list");
  116.         fd = fopen("song_list","r");

  117.         p1 = (struct song *)malloc(sizeof(struct song));

  118.         printf("==================================song list=====================================\n");
  119.         system("ls /mp3");       
  120.         printf("\n");
  121.         printf("================================================================================\n");
  122.         size = getline(&line,&len,fd);

  123.         strncpy(p1->songname,line,strlen(line));
  124.         head = p1;
  125.         while((size = getline(&line,&len,fd)) != -1)
  126.         {       
  127.                 p2 = p1;
  128.                 p1 = (struct song *)malloc(sizeof(struct song));
  129.                 strncpy(p1->songname,line,strlen(line));
  130.                 p2->next = p1;
  131.                 p1->prev = p2;       
  132.         }
  133.         p1->next = head;
  134.         head->prev = p1;
  135.         p1 = NULL;
  136.         p2 = NULL;
  137.         system("rm -rf song_list");
  138.         return head;
  139. }
  140. /*************************************************
  141. Function name: startplay
  142. Parameter    : pid_t *,struct song *
  143. Description         : 開始播放函數(shù)
  144. Return                 : void
  145. Argument     : void
  146. Autor & date : ada 09.12.07
  147. **************************************************/
  148. void startplay(pid_t *childpid,struct song *my_song)
  149. {
  150.         pid_t pid;
  151.         int ret;
  152.         /*創(chuàng)建子進(jìn)程*/
  153.         pid = fork();

  154.         if(pid > 0)
  155.         {
  156.                 *childpid = pid;
  157.                 play_flag = 1;
  158.                 sleep(1);
  159.                 /*把孫子進(jìn)程的pid傳給父進(jìn)程*/
  160.                 memcpy(&gradchild,p_addr,sizeof(pid_t));
  161.         }
  162.         else if(0 == pid)
  163.         {       
  164.                 /*子進(jìn)程播放MP3函數(shù)*/
  165.                 play(my_song);
  166.         }
  167. }
  168. /*************************************************
  169. Function name: my_pause
  170. Parameter    : pid_t
  171. Description         : 暫停函數(shù)
  172. Return                 : void
  173. Argument     : void
  174. Autor & date : ada 09,12,07
  175. **************************************************/
  176. void my_pause(pid_t pid)
  177. {
  178.         printf("=======================PAUSE!PRESS K1 TO CONTINUE===================\n");
  179.         kill(pid,SIGSTOP); //對孫子進(jìn)程發(fā)送SKGSTOP信號
  180.         play_flag = 0;
  181. }

  182. /*************************************************
  183. Function name: my_pause
  184. Parameter    : pid_t
  185. Description         : 停止播放函數(shù)
  186. Return                 : void
  187. Argument     : void
  188. Autor & date : ada 09,12,07
  189. **************************************************/
  190. void my_stop(pid_t g_pid)
  191. {

  192.         printf("=======================STOP!PRESS K1 TO START PLAY===================\n");
  193.         kill(g_pid,SIGKILL); //對孫子進(jìn)程發(fā)送SKGKILL信號
  194.         kill(pid,SIGKILL);   //對子進(jìn)程發(fā)送SKGKILL信號
  195.         first_key=1;

  196. }

  197. /*************************************************
  198. Function name: conti_play
  199. Parameter    : pid_t
  200. Description         : 繼續(xù)函數(shù)
  201. Return                 : void
  202. Argument     : void
  203. Autor & date : ada 09,12,07
  204. **************************************************/
  205. void conti_play(pid_t pid)
  206. {
  207.         printf("===============================CONTINUE=============================\n");
  208.         kill(pid,SIGCONT); //對孫子進(jìn)程發(fā)送SIGCONT信號
  209.         play_flag=1;
  210. }

  211. /*************************************************
  212. Function name: next
  213. Parameter    : pid_t
  214. Description         : 下一首函數(shù)
  215. Return                 : void
  216. Argument     : void
  217. Autor & date : ada 09.12.07
  218. **************************************************/
  219. void next(pid_t next_pid)
  220. {
  221.         struct song *nextsong;

  222.         printf("===============================NEXT MP3=============================\n");
  223.         /*從共享內(nèi)存獲得孫子進(jìn)程播放歌曲的節(jié)點(diǎn)指針*/
  224.         memcpy(&nextsong,p_addr + sizeof(pid_t)+1,4);
  225.         /*指向下首歌曲的節(jié)點(diǎn)*/
  226.         nextsong = nextsong->next;
  227.         /*殺死當(dāng)前歌曲播放的子進(jìn)程,孫子進(jìn)程*/
  228.         kill(pid,SIGKILL);
  229.         kill(next_pid,SIGKILL);
  230.         wait(NULL);
  231.         startplay(&pid,nextsong);
  232. }

  233. /*************************************************
  234. Function name: prev
  235. Parameter    : pid_t
  236. Description         : 上一首函數(shù)
  237. Return                 : void
  238. Argument     : void
  239. Autor & date : yuanhui 09.12.08
  240. **************************************************/
  241. void prev(pid_t prev_pid)
  242. {
  243.         struct song *prevsong;
  244.         /*從共享內(nèi)存獲得孫子進(jìn)程播放歌曲的節(jié)點(diǎn)指針*/
  245.         printf("===============================PRIOR MP3=============================\n");
  246.         memcpy(&prevsong,p_addr + sizeof(pid_t)+1,4);
  247.         /*指向上首歌曲的節(jié)點(diǎn)*/
  248.         prevsong = prevsong->prev;
  249.         /*殺死當(dāng)前歌曲播放的子進(jìn)程,孫子進(jìn)程*/
  250.         kill(pid,SIGKILL);
  251.         kill(prev_pid,SIGKILL);
  252.         wait(NULL);
  253. //linux C中的wait(NULL)是什么意思?請問_百度知道
  254. //答:等待子進(jìn)程退出。NULL的意思是退出狀態(tài)不關(guān)注。如果要獲取退出狀態(tài)應(yīng)該寫成wait(&status);
  255.         startplay(&pid,prevsong);
  256. }

  257. /*************************************************
  258. Function name: main
  259. Parameter    : void
  260. Description         : 主函數(shù)
  261. Return                 : int
  262. Argument     : void
  263. Autor & date : ada 09.12.07
  264. **************************************************/
  265. int main(void)
  266. {
  267.         int buttons_fd;
  268.         int key_value;
  269.         struct song *head;
  270.         /*打開設(shè)備文件*/
  271.         buttons_fd = open("/dev/buttons", O_RDWR);
  272.         if (buttons_fd < 0) {
  273.                 perror("open /dev/buttons fail!!!");
  274.                 exit(1);
  275.         }


  276.   /*創(chuàng)建播放列表*/
  277.         head = creat_song_list();
  278.         printf("===================================OPTION=======================================\n\n\n\n");
  279.         printf("        K1:START/PAUSE     K2:STOP   K3:NEXT      K4:PRIOR\n\n\n\n");
  280.         printf("================================================================================\n");


  281.   /*共享內(nèi)存:用于存放子進(jìn)程ID,播放列表位置*/
  282.         if((shmid = shmget(IPC_PRIVATE,5,PERM))== -1)
  283.                 exit(1);
  284.         p_addr = shmat(shmid,0,0);
  285.         memset(p_addr,'\0',1024);
  286.        
  287.        
  288.         while(1)
  289.         {
  290.                         unsigned char key_value;
  291.                        
  292.                         read(buttons_fd, &key_value, 1);       
  293.                         key_value--;
  294.       /*首次播放,必須是按鍵1*/
  295.       if(first_key) {
  296.         switch(key_value)
  297.         {       
  298.           case 0:
  299.               startplay(&pid,head);
  300.               first_key=0;
  301.             break;
  302.           case 1:
  303.           case 2:
  304.           case 3:
  305.             printf("=======================PRESS K1 TO START PLAY===================\n");
  306.           break;
  307.          default:
  308.             printf("=======================PRESS K1 TO START PLAY===================\n");
  309.           break;
  310.         } //end switch
  311.       }//end if(first_key)
  312.       /*若不是首次播放,則根據(jù)不同鍵值處理*/
  313.       else if(!first_key) {
  314.         switch(key_value)
  315.         {
  316.           case 0:
  317.           //printf("play_flag:%d\n",play_flag);
  318.           if(play_flag)
  319.           my_pause(gradchild);
  320.           else
  321.           conti_play(gradchild);
  322.           break;
  323.           case 1:
  324.           my_stop(gradchild);
  325.           break;
  326.           case 2:
  327.           next(gradchild);
  328.           break;
  329.           case 3:
  330.           prev(gradchild);
  331.           break;
  332.         } //end switch
  333.       }//end if(!first_key)
  334.         }

  335.         close(buttons_fd);
  336.         return 0;
  337. }
復(fù)制代碼

準(zhǔn)備工作四:

在開發(fā)板根目錄建立mp3文件夾,拷貝幾首MP3文件進(jìn)去,注意文件名不要超過20個字符。



現(xiàn)在可以運(yùn)行這個app-mp3應(yīng)用程序了。

=======================PRESS K1 TO START PLAY===================
=======================PRESS K1 TO START PLAY===================
=======================PRESS K1 TO START PLAY===================
THIS SONG IS /mp3/Tank.mp3
MPEG Audio Decoder 0.15.2 (beta) - Copyright (C) 2000-2004 Robert Leslie et al.
s3c2410-uda1341-superlp: audio_set_dsp_speed:44100 prescaler:66
          Title: 販販販        Artist: Tank(販s3c2410-uda1341-superlp: audio_set_dsp_speed:44100 prescaler:66
===============================NEXT MP3=============================
THIS SONG IS /mp3/beyond.mp3
MPEG Audio Decoder 0.15.2 (beta) - Copyright (C) 2000-2004 Robert Leslie et al.
s3c2410-uda1341-superlp: audio_set_dsp_speed:44100 prescaler:66
         Artist: Beyond(黃家駒)
          Album: 音樂殿堂Musics3c2410-uda1341-superlp: audio_set_dsp_speed:44100 prescaler:66
Palace
        Comment: http://music.zkinfo.ha.cn
error: frame 12346: lost synchronization
12346 frames decoded (0:05:22.5), +0.6 dB peak amplitude, 19 clipped samples
THE NEXT SONG IS huanghun.mp3


THIS SONG IS /mp3/huanghun.mp3
MPEG Audio Decoder 0.15.2 (beta) - Copyright (C) 2000-2004 Robert Leslie et al.
s3c2410-uda1341-superlp: audio_set_dsp_speed:44100 prescaler:66
          Title: 黃昏
         Artist: 周傳雄 (小剛)
          s3c2410-uda1341-superlp: audio_set_dsp_speed:44100 prescaler:66
Album: transfer
           Year: 2000
          Genre: Pop
        Comment: mp3.attin.com




回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
亚洲一级视频在线观看| 99精品欧美| japanese色国产在线看视频| 免费在线性爱视频| 青娱在线视频| 伊人网在线视频| 亚洲综合色视频在线观看| 一级特黄特色的免费大片| 高清av影院| 黄色一级影院| 在线视频专区| 川上优的av在线一区二区| 日韩黄色在线视频| 国产一级片免费观看| 一级片免费网址| 中文字幕在线播| 一本到在线视频| 丰满人妻一区二区三区免费视频| 天堂在线中文网| 日韩精品免费一区二区| 国产三级做爰在线观看| 日本三级电影网站| 99热免费观看| 国产污污在线观看| av福利在线播放| av电影免费在线看| 国产精品成人国产| 久9re热视频这里只有精品| 九九热线有精品视频99| 国产大片一区| 国产亚洲午夜| 国产精品1024| 中文字幕 久热精品 视频在线| 亚洲欧美日韩久久| 色噜噜狠狠成人网p站| 欧美日韩中文国产| 日韩电影中文字幕在线| 久久亚洲精品成人| 国产成人在线一区二区| 国产在线精品二区| 国产精品波多野结衣| www黄色av| 久久免费精品国产| 国产成人自拍网站| 在线观看免费观看在线| 丁香久久五月| 天天堂资源网在线观看免费视频| 中文字幕不卡| 国内小视频在线看| 日韩精品免费视频一区二区三区| 成人高清av| 久久成人国产| av成人免费看| 国产图片一区| 一区在线视频观看| 成人妖精视频yjsp地址| 一区av在线播放| 91精品国产aⅴ一区二区| 亚洲色图美腿丝袜| 国产成人精品免高潮费视频| 久久精品ww人人做人人爽| 99中文字幕在线观看| 日本在线观看免费视频| 国产精品久久免费观看| 精品国产青草久久久久96| 一区二区免费播放| 91原色影院| www.久久久久.com| theporn国产在线精品| 红桃视频欧美| 久久久久久99精品| 欧美日韩大陆在线| 久久久999精品免费| 91精品黄色| 777av视频| 88久久精品无码一区二区毛片| 欧美一区二区三区网站| 欧美黑人巨大xxxx猛交| 伊人国产在线| 久久亚洲人体| 99国产精品私拍| 日本一区二区成人| 日韩一二三四区| 欧美激情xxxxx| 免费看成人av| 中文字幕欧美视频| 波多野结衣二区三区| 91free张津瑜movies| 国产高清美女一级毛片久久| 三级欧美日韩| 免费一级欧美片在线观看| 一级特黄大欧美久久久| 亚洲人午夜精品免费| 96成人在线视频| 欧美精品aaaa| 日本午夜精品理论片a级app发布| 国产精品偷伦视频免费观看了 | 中文字幕日本不卡| 欧美变态tickling挠脚心| 26uuu国产精品视频| 天天成人综合网| 欧美 日韩 国产 成人 在线观看| 国产福利第一页| 日本女优北野望在线电影| 亚洲日本网址| 亚洲欧美日韩国产一区| 亚洲一区二区欧美激情| 日韩综合视频在线观看| 欧美日韩精品不卡| 久久久久9999| 五月婷婷丁香六月| 日本视频在线观看一区二区三区| 亚洲国产欧美在线观看| 精品亚洲aⅴ乱码一区二区三区| 欧美日韩国产一区二区三区| 欧美精品aaa| 久久久久久久久久久综合| 亚洲欧美精品久久| 国产麻豆综合视频在线观看| 青青草视频在线免费直播| 一区二区在线| 一区二区三区小说| 国产69精品久久久久9| 国产精品国产三级国产专区51| 成人高潮免费视频| 人人做人人草| 欧美最新精品| 久久99精品国产麻豆婷婷| 欧美日韩一级大片网址| 91理论片午午论夜理片久久| 精产国品一二三区| 国产高清在线观看视频| 深夜视频在线免费| 第一会所亚洲原创| 亚洲精品免费看| 久久久久久综合网天天| aa在线免费观看| 在线观看国产区| 手机福利在线| 国产精品99久久精品| 亚洲欧美一区二区在线观看| 欧美激情第99页| 欧美激情成人网| 亚洲怡红院av| 午夜毛片在线| 亚洲精品社区| 欧美美女喷水视频| 久久狠狠久久综合桃花| 暗呦丨小u女国产精品| av先锋资源网| 黄色美女久久久| 成人激情自拍| 99精品欧美一区二区三区综合在线| 亚洲欧美成人精品| 中文网丁香综合网| 黄色一级视频免费看| 日韩欧美在线观看一区二区| 婷婷亚洲五月色综合| 精品久久久久久中文字幕一区奶水 | 亚洲欧美日韩天堂一区二区| 亚洲一区二区三区加勒比| 久久久久久福利| 91美女在线| 国产精品久久久乱弄 | 成人性生活视频免费看| 在线免费看91| 黄a在线观看| 欧美aⅴ一区二区三区视频| 精品国产91乱码一区二区三区 | 亚洲人成影院77777| 99re6在线精品视频免费播放| 精一区二区三区| 在线播放国产精品| 青青在线视频观看| 天天摸天天碰天天爽天天弄| 在线天堂中文资源最新版| 国产69精品久久久久毛片 | 最近2019中文免费高清视频观看www99 | 国产精品美女免费| 成人精品在线观看视频| a√在线视频| 欧美色图国产精品| 在线影视一区二区三区| 奇米影视首页 狠狠色丁香婷婷久久综合 | 四虎永久免费在线| 中文在线网在线中文| av成人手机在线| 伊人久久亚洲热| 亚洲高清av在线| 日本一道本久久| www.男人天堂.com| 亚洲精品大全| 亚洲天堂精品视频| 91精品国产一区二区三区动漫| 国语对白在线播放| 免费国产在线视频| 日本aⅴ亚洲精品中文乱码| 伊人伊人伊人久久| 国产美女视频免费看| 99久久精品国产一区二区小说 | 亚洲精品第一| 亚洲最新视频在线观看| 国产伦精品一区二区三毛| 国产成人亚洲精品自产在线| 久操视频在线观看| 不卡一区二区三区四区| 国产91在线视频| 亚洲综合网在线| 午夜视频在线| 99re热视频精品| 国产日韩欧美一二三区| 国产在线视频99| 欧美1234区| 国产日韩欧美精品综合| 亚洲中国色老太| 亚洲毛片一区二区三区| 麻豆免费版在线观看| 国产精品国产三级国产有无不卡| 国产精品久久久对白| 一级特黄aaaaaa大片| 日本欧美在线| 色嗨嗨av一区二区三区| 国产成人艳妇aa视频在线| 日本欧美色图| 99视频精品全国免费| 国产视频精品一区二区三区| 欧美污在线观看| 人人在线97| 精彩视频一区二区| 国产精品热视频| 日韩三级一区二区| 欧美xxx性| 欧美午夜影院在线视频| 男女啪啪免费视频网站| 九九视频在线播放| 销魂美女一区二区三区视频在线| 欧美片一区二区三区| 国产三级精品三级观看| a篇片在线观看网站| 国产精品久久久久av蜜臀| 欧美日本在线一区| 手机视频在线观看| 午夜免费啪视频观看视频| 黄页网站大全一区二区| 国产精品美女av| 亚洲天堂久久久久| 成功精品影院| 亚洲国产精品小视频| 日本不卡视频一区| xxxxx日韩| 中文字幕日韩av资源站| 亚洲第一综合网站| 五月天丁香在线| 肉色丝袜一区二区| 国产精品专区h在线观看| 亚洲综合精品在线| 久久精品国产亚洲5555| 亚洲精品一区二区网址| 免费观看a级片| 不卡av免费观看| 色国产精品一区在线观看| 最新免费av网址| 精品视频一二区| 国产精品对白交换视频| 4444亚洲人成无码网在线观看| 福利视频网址导航| 精品中文字幕一区二区小辣椒| 国产精品中出一区二区三区| 一区二区在线观看视频在线| 狠狠爱综合网| 国产精品视频内| www香蕉视频| 亚洲成人精品| 奇门遁甲1982国语版免费观看高清| 中文字幕人妻色偷偷久久| 亚洲欧洲av| 欧美日韩爱爱视频| 中文字幕在线观看视频免费| 久久九九热re6这里有精品| 自拍偷拍亚洲一区| 六月丁香在线视频| 成人在线视频你懂的| 自拍偷拍亚洲在线| 精品成人久久久| 久久365资源| 欧美精品免费播放| 91porny九色| 天堂av一区二区三区在线播放| 久久激情视频久久| 午夜一区二区三区四区| 国产精品免费大片| 91成人在线播放| 午夜精品久久久久久久99| 亚洲综合中文| 成人中心免费视频| 欧美粗暴性video| 九九**精品视频免费播放| 日韩欧美一区二区视频在线播放 | 国产在线观看99| 一区二区小说| 97久久超碰福利国产精品…| 国产美女www爽爽爽视频| 欧美福利一区| 欧美日韩人人澡狠狠躁视频| 中文字幕久久久久久久| 国产理论电影在线| 日韩丝袜情趣美女图片| 极品魔鬼身材女神啪啪精品| 久久动漫网址| 热久久免费国产视频| 亚洲人成电影在在线观看网色| 美女www一区二区| 在线成人性视频| 黄网站app在线观看下载视频大全官网 | 国产精品视频免费看| 亚洲天堂网一区| а_天堂中文在线| 国产丝袜高跟一区| www.色国产| 激情久久婷婷| 久久涩涩网站| 国产三级免费观看| 亚洲福利一二三区| 加勒比综合在线| 伊色综合久久之综合久久| 国产69精品久久久久9| 最近更新在线中文字幕一页| 国产成人在线视频免费播放| 欧美又粗又长又爽做受| 日本精品在线| 亚洲精品一区二区三区福利| 五月天婷婷激情| 亚洲三级国产| 亚洲乱码一区二区三区| 天堂中文在线资| 欧美精品日韩一本| 午夜精品三级久久久有码| 欧美fxxxxxx另类| 欧美日本亚洲| 久久手机免费观看| 日韩欧美在线综合网| 亚洲国产成人精品女人久久| 99精品免费网| 中文字幕の友人北条麻妃| 亚乱亚乱亚洲乱妇| 日韩精品视频免费专区在线播放| 中文亚洲av片在线观看| 视频一区二区国产| 精品视频在线观看一区| 精精国产xxxx视频在线中文版| 亚洲色图激情小说| 无码国产色欲xxxx视频| 在线一区二区三区四区五区| 一本久久综合亚洲鲁鲁五月天| 一本加勒比北条麻妃| 国产一区二区三区免费观看在线 | 国产精品白浆流出视频| 亚洲自拍偷拍av| 亚洲视频免费播放| 激情综合色综合久久| 韩国三级视频在线观看| 日韩一区三区| 成人一级生活片| 成人av小说网| 欧美人妇做爰xxxⅹ性高电影| 99热这里只有精品在线观看| 国产清纯白嫩初高生在线观看91 | 久久99精品久久久久久动态图| 午夜诱惑痒痒网| 色综合狠狠操| 九九热只有这里有精品| 亚洲青青一区| 欧美午夜视频在线| 345成人影院| 成人h片在线播放免费网站| 激情福利在线| 欧美日韩国产成人在线| 国产国产人免费人成免费视频| 亚洲精品网址在线观看| 美女福利视频导航| 精品国产一区二区三区不卡| 青春草国产成人精品久久| 91福利区一区二区三区| 人妻少妇精品无码专区| 香蕉乱码成人久久天堂爱免费| 97人妻一区二区精品免费视频| 国产精品久久久久久久久果冻传媒 | 亚洲国产一区二区精品专区| 国产福利在线免费| 日韩情爱电影在线观看| 黄在线观看网站| 久久爱www成人| 男人添女人下面高潮视频| 牲欧美videos精品| av网站大全免费| 少妇久久久久| 欧美成人黑人猛交| 天天做天天爱天天综合网| 伊人影院综合在线| 欧美日韩国产亚洲一区|