21 #pragma GCC diagnostic push
22 #pragma GCC diagnostic ignored "-Wold-style-cast"
23 #include <libavcodec/avcodec.h>
24 #include <libavutil/imgutils.h>
25 #pragma GCC diagnostic pop
51 , deleteOnClose{
false}
67 std::shared_ptr<VideoFrame> vframe;
68 int width = vpxframe->d_w;
69 int height = vpxframe->d_h;
74 AVFrame* avframe = av_frame_alloc();
78 avframe->width = width;
79 avframe->height = height;
80 avframe->format = AV_PIX_FMT_YUV420P;
83 av_image_alloc(avframe->data, avframe->linesize, width, height,
87 av_frame_free(&avframe);
91 for (
int i = 0; i < 3; ++i) {
92 int dstStride = avframe->linesize[i];
93 int srcStride = vpxframe->stride[i];
94 int minStride = std::min(dstStride, srcStride);
95 int size = (i == 0) ? height : height / 2;
97 for (
int j = 0; j < size; ++j) {
98 uint8_t* dst = avframe->data[i] + dstStride * j;
99 uint8_t* src = vpxframe->planes[i] + srcStride * j;
100 memcpy(dst, src, minStride);
104 vframe = std::make_shared<VideoFrame>(
id, avframe,
true);