วันเสาร์ที่ 23 กุมภาพันธ์ พ.ศ. 2551

Step 1: Video for Linux API

การทำ application ด้าน realtime video processing ไม่ว่าจะ apply ไปใช้ด้านไหน เช่น broadcasting, editing, computer vision, image processing สิ่งสำคัญอันดับแรกนั่นก็คือ การรับ data input เข้ามานั่นเอง ยิ่งเป็นด้านที่เกี่ยวกับ streaming ด้วยละก็ เน้นเลย เพราะต้องรับ data เข้ามาอย่างต่อเนื่อง ดังนั้นเรื่องความถูกต้อง, frame rate, คุณภาพ และความเสถียร ของระบบจึงเป็นเรื่องสำคัญมากๆ

การเขียนโปรแกรมติดต่อกับ video input บนลินุกส์นั้นอาศัย API ที่ชื่อว่า Video For Linux (v4l) ซึ่ง driver เกือบทุกตัว สนับสนุนการติดต่อผ่าน v4l นี้ทำให้ไม่ต้องคำนึงว่า hardware จะเป็นอะไร หมายความว่าถ้าเราสามารถ setup (install driver, config)ให้อุปกรณ์ทำงานได้แล้วละก็ โปรแกรมที่เราเขียนด้วย v4l สามารถคุยกับอุปกรณ์นั้นได้อย่างแน่นอน เช่น webcam USB, dvr card

ปัจจุบัน v4l มี 2 เวอร์ชันซึ่ง ซึ่งแนวทางการเขียนก็ไม่ได้แตกต่างกัน คือ เรียกใช้ฟังก์ชันต่างๆผ่านทาง ioctl() ซึ่งมีทั้ง get และ set คุณสมบัติต่างๆของตัวอุปกรณ์

วิธีที่ดูจะง่ายและเสถียรที่สุดในการรับภาพเข้ามาคือ รับแบบ blocking function โดยใช้ mmap เพราะเราจะได้ framerate ตามความเป็นจริงเลย โดยไม่ต้องมานั่ง sync เอาเอง แต่สิ่งที่ต้องคำนึงก็คือจำนวน buffer ที่จะใช้เอาไปรับภาพหรือข้อมูลมา ที่เคยลองเขียนมาอย่างน้อยต้องเป็น double buffer จึงจะได้ภาพที่ full framerate จริงๆ เช่น ถ้าเป็น PAL ก็จะเป็นที่ 25 fps

เมื่อมีระบบที่ให้ raw data ที่ดีได้แล้ว จะทำไรต่อไปก็เชิญตามสะดวกได้แล้วทีนี้

ถ้ามีใครเข้ามาทัก จะเขียนต่อ (coding by example) อิอิ