2012-11-08 54 views
16

Tôi đã cố gắng tìm ra mỗi ô của AVFrame.linesize[] có nghĩa là gì, nhưng tôi không tìm thấy.Có ai có thể giúp đỡ trong việc hiểu AVFrame.linesize []?

Như tôi đã hiểu linesize[0] là chiều rộng, linesize[1] là chiều cao.

  1. Nếu tôi đúng ý nghĩa của các ô khác?
  2. lý do tại sao sau avcodec_decode_video2(codecCtxDecode, frameDecoded, &frameFinished, &packet); chỉ dòng [0] có giá trị và các ô khác luôn bằng 0?

CẬP NHẬT

Tôi nghĩ rằng AVFrame.data [i] và AVFrame.linesize [i] là những dữ liệu về màu sắc cụ thể trong dòng và chiều dài của hàng, tôi có đúng không?

Trả lời

23

Trong trường hợp dữ liệu phẳng, chẳng hạn như YUV420, linesize[i] có sải chân cho mặt phẳng i -th.

Ví dụ, đối với khung 640x480data[0] chứa con trỏ đến Y thành phần, và data[2] chứa con trỏ để UV máy bay. Trong trường hợp này, linesize[0] == 640, linesize[1] == linesize[2] == 320 (vì UV máy bay nhỏ hơn Y máy bay một nửa)

Trong trường hợp dữ liệu pixel (RGB24), chỉ có một mặt phẳng (data[0]) và linesize[0] == width * channels (640 * 3 cho RGB24)

+0

hi, Sau 'avcodec_decode_video2 (dc, yuvFrame, & got_picture, & h264packet);' nếu tôi in 'linesize', nó không giống như bạn đã nói. tại sao các dòng là như vậy rất lớn (một số 8 chữ số lớn)? – nmxprime

11

Hãy nhìn vào mô tả các định dạng khung hình:

Bạn sẽ thấy rằng các định dạng được chia thành hai nhóm lớn: đóng gói và phẳng, tùy thuộc vào việc các thành phần được giữ riêng biệt hay xen kẽ. Strides có ý nghĩa hơi khác nhau đối với những người, và về cơ bản họ là số byte bạn cần phải bỏ qua để tạm ứng bởi một hàng.