1

ウェブカメラからのビデオをエンコードするために QVideoFrame (QT) を AVFrame に変換するのに苦労しています。

QVideoFrame のドキュメント: http://qt-project.org/doc/qt-5/qvideoframe.html

画像形式、ストライドなどの基本は理解していますが、何かが欠けています。これは、libav の例 ( https://libav.org/doxygen/release/0.8/libavformat_2output-example_8c-example.html )から適応した、これまでに得たものです。

static void fill_yuv_image(const QVideoFrame &frame, AVFrame *pict, int frame_index, int width, int height)
{
    pict->pts = frame.startTime() * 1000000.0; // time_base is 1/1000000
    pict->width = frame.width();
    pict->height = frame.height();
    pict->format = STREAM_PIX_FMT; //todo: get this from the frame
    pict->data[0] = (uint8_t*)frame.bits();
    pict->linesize[0] = frame.bytesPerLine();
}

その後、エンコードしようとしています:

AVPacket pkt;
int got_packet_ptr = 0;
int success = avcodec_encode_video2(c, &pkt, picture, &got_packet_ptr);
/* if zero size, it means the image was buffered */
if (success == 0) {
    /* write the compressed frame in the media file */
    ret = av_interleaved_write_frame(oc, &pkt);
} else {
    ret = 0;
}        

ストライドが一致しないというエラーを返しています。どんな助けでも大歓迎です。ありがとう!

4

0 に答える 0