2013-10-15 12 views
11

frame.data[]'un video olarak hangi piksel biçimine (RGB veya YUV) bağlı olduğuna göre yorumlandığı genel fikrini alırım. Ancak tüm piksel verilerini çerçeveden almanın genel bir yolu var mı? Sadece görüntüyü göstermek için yorum yapmadan çerçeve verilerinin karmasını hesaplamak istiyorum. AVFrame.h göre AVFrame.data [] ve AVFrame.linesize [] öğelerinden ham kare verileri piksel biçimini belirtmeden nasıl alınır?

: resim/kanal düzlemlerine

uint8_t* AVFrame::data[AV_NUM_DATA_POINTERS] 

işaretçi.

int AVFrame::linesize[AV_NUM_DATA_POINTERS] 

Her bir resim satırının bayt cinsinden boyutunda video için.

Bu,bayt için data[i]'dan ayıklamak için çerçeve hakkında tam piksel bilgisini aldığım anlamına mı geliyor?

cevap

9

linesize[i]i oyunu bırakanların uçak için adım içerir.

bütün tampon elde etmek için, gerekli bellek büyüklüğü hesaplamak için kullanımı

int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height); 

avcodec.h

/** 
* Copy pixel data from an AVPicture into a buffer, always assume a 
* linesize alignment of 1. */ 
int avpicture_layout(const AVPicture* src, enum AVPixelFormat pix_fmt, 
       int width, int height, 
       unsigned char *dest, int dest_size); 

işlevini kullanın. , D btw düzlem ise R/G/B veya E/U/V gibi bir renk kanalı anlamına yapar:

+0

sayesinde bu ı arıyorum nedir? Tanımı aramayı denedim, ancak bu anahtar kelimelerle çok fazla bilgi alamadım. – vivienlwt

+0

böyle 'bir tampon ve artım {linesize kadar bellek kopyası (dikey çizgilerin [] sayısı) gelince, avpicture_layout'' olmadan elle kopyalamak gelip nasıl http://stackoverflow.com/questions/13286022 – pogorskiy

+0

cevabım bkz linesize tarafından buffer işaretçisi} 'iş yapacak? – nmxprime