2012-11-08 40 views
16

Ho cercato di scoprire cosa significa ogni cella di AVFrame.linesize[], ma non l'ho trovata.Qualcuno può aiutare a comprendere AVFrame.linesize []?

Come ho capito linesize[0] è la larghezza, linesize[1] è l'altezza.

  1. Se ho ragione cosa significano le altre celle?
  2. perché dopo avcodec_decode_video2(codecCtxDecode, frameDecoded, &frameFinished, &packet); solo la lineize [0] ha il valore e altre celle sono sempre 0?

AGGIORNATO

Penso AVFrame.data [i] e AVFrame.linesize [i] sono i dati di colore specifico nella riga e la lunghezza della fila, Ho ragione?

risposta

23

Nel caso di dati planari, ad esempio YUV420, linesize[i] contiene il passo per il piano i -esimo.

Ad esempio, per telai 640x480data[0] contiene puntatore Y componente e data[2] contiene puntatori a U e V piani. In questo caso, linesize[0] == 640, linesize[1] == linesize[2] == 320 (perché i U e V piani è inferiore Y piano metà)

nel caso di dati pixel (RGB24), v'è un solo piano (data[0]) e linesize[0] == width * channels (640 * 3 per RGB24)

+0

hi, dopo 'avcodec_decode_video2 (dc, yuvFrame, & got_picture, & h264packet);' se stampo 'linesize', non è come hai detto tu. perché la lineize è così grande (un grande numero di 8 cifre)? – nmxprime

11

Dai un'occhiata alla descrizione del video di formati di frame:

Vedrai che i formati sono divisi in due grandi gruppi: impacchettati e planari, a seconda che i componenti siano tenuti separati o interfogliati. Gli strides hanno un significato leggermente diverso per quelli, e fondamentalmente sono il numero di byte che devi saltare per avanzare di una riga.