V4l2 v4l2_field理解

 video的幀可區分爲隔行和逐行: 逐行順序的傳輸一幀所有的行,而隔行則把一幀劃分成兩個fields,分別保存幀的奇數行和偶數行,被稱作奇場和偶場.  陰極射線電視機需要交替的顯示兩場來組成一個完整的幀,交替的時延需要我們交替的傳輸奇場和偶場。這個奇怪技術的引入是因爲:在刷新率接近電影時,圖片會消退的過快。使用奇偶場可以避免使用雙倍的buffer以及額外的帶寬需求。

 

首先要明確camera並不是在同一時間曝光一幀,camera通過場來傳輸這些幀的,這些場是在不同瞬間拍攝的。屏幕上的一個運動對象因此會在兩個field之間產生動畫效果。這種情況下需要識別哪一幀更老一點,也稱作“瞬間序”。

 

當驅動通過場提供或者接收images,應用應該知道如何通過這些場組合成幀,通過劃分爲top bottom 場,頂場的第一行是幀的第一行,底場的第一行是幀的第二行。

 然而因爲field是一個跟着一個拍的,爭論幀是由top還是bottom開始的是沒意義的,任何兩個相鄰的top bottom場, 或者 bottom top場都可以組成一個有效的幀。

 與直覺相反,top 場不一定排在bottom前面, top和bottom到底誰先誰後,是由video標準決定的。因此要區分瞬間序和空間序,下面的圖會給出清晰的解釋。

 

所有的video capture和out devices必須彙報當前的field順序。 一些驅動可能允許選擇不同的序,終端應用可以在調用VIDIOC_S_FMT前初始化struct v4l2_pix_format的 field成員。否則可以使用V4L2_FIELD_ANY

 

下面列出了可能的field類型

V4L2_FIELD_ANY 0 Application 可以請求使用這個參數,如果V4L2_FIELD_NONE, V4L2_FIELD_TOP, V4L2_FIELD_BOTTOM V4L2_FIELD_INTERLACE 中任何一個格式都支持.驅動選擇使用哪一個格式依賴於硬件能力,以及請求的image尺寸,驅動選擇一個然後返回這個格式。struct_buffer的field成員不可以爲V4L2_FIELD_ANY.
V4L2_FIELD_NONE 1 Images是逐行格式,當驅動無法區分V4L2_FIELD_TOP和V4L2_FIELD_BOTTOM,可以使用這種field類型
V4L2_FIELD_TOP 2 Images僅僅包含top field
V4L2_FIELD_BOTTOM 3 Images僅僅包含bottom field,應用可能希望防止設備捕獲interlaced的圖片,因爲這種圖片會在運動物體周圍產生毛狀特效
V4L2_FIELD_INTERLACED 4 Images包含top和bottom field, 隔行交替,場序依賴於當前video的標準。NTSC首先傳輸bottom field, PAL則先傳輸top field。
V4L2_FIELD_SEQ_TB 5 Images包含top和bottom field, top field的行首先存放在memory中,然後緊跟着bottom field的行。 Fields一直以瞬間序存儲,較老的放在內存前面。Images的尺寸和幀相關,而不是field
V4L2_FIELD_SEQ_BT 6 Images包含top和bottom field, bottom field的行首先存放在memory中,然後緊跟着top field的行。 Fields一直以瞬間序存儲,較老的放在內存前面。Images的尺寸和幀相關,而不是field
V4L2_FIELD_ALTERATE 7  一個幀的兩個field分別放在不同的buffer, 按照瞬間序,也就是說老的一個是第一個。driver或者應用指明field的奇偶性(奇偶性:當前的field是top 還是bottom field). 任何兩個連續的field構成一個frame,是否兩個field是連續的,不需要drop掉他們,可以通過v4l2_buffer中的sequence 成員判定。Images的尺寸和frame而不是fields相關
V4L2_FIELD_INTERLACED_TB 8 Images 包含top和bottom field, 每行交替, top field在前面。top field首先傳送
V4L2_FIELD_INTERLACED_BT 9 Images 包含top和bottom field, 每行交替, bottom field在前面。bottom field首先傳送

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章