mirror of
https://git.freebsd.org/ports.git
synced 2025-06-08 06:10:30 -04:00
ffmpeg.cc:79:29: error: use of undeclared identifier 'PIX_FMT_YUV420P'; did you mean 'AV_PIX_FMT_YUV420P'?
_stream->codec->pix_fmt = PIX_FMT_YUV420P;
^~~~~~~~~~~~~~~
AV_PIX_FMT_YUV420P
/usr/local/include/libavutil/pixfmt.h:62:5: note: 'AV_PIX_FMT_YUV420P' declared here
AV_PIX_FMT_YUV420P, ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
^
ffmpeg.cc💯12: error: use of undeclared identifier 'avcodec_alloc_frame'
_frame = avcodec_alloc_frame();
^
ffmpeg.cc:159:18: error: use of undeclared identifier 'avcodec_encode_video'; did you mean 'avcodec_encode_video2'?
int out_size = avcodec_encode_video(_stream->codec, _buf, _bufsize, _frame);
^~~~~~~~~~~~~~~~~~~~
avcodec_encode_video2
/usr/local/include/libavcodec/avcodec.h:5261:5: note: 'avcodec_encode_video2' declared here
int avcodec_encode_video2(AVCodecContext *avctx, AVPacket *avpkt,
^
ffmpeg.cc:159:55: error: cannot initialize a parameter of type 'AVPacket *' with an lvalue of type 'byte_t *' (aka 'unsigned char *')
int out_size = avcodec_encode_video(_stream->codec, _buf, _bufsize, _frame);
^~~~
/usr/local/include/libavcodec/avcodec.h:5261:60: note: passing argument to parameter 'avpkt' here
int avcodec_encode_video2(AVCodecContext *avctx, AVPacket *avpkt,
^
PR: 214188
Approved by: maintainer timeout (2 weeks)
123 lines
3.6 KiB
C++
123 lines
3.6 KiB
C++
--- src/ui/gtk/ffmpeg.cc.orig 2010-03-07 19:50:23 UTC
|
|
+++ src/ui/gtk/ffmpeg.cc
|
|
@@ -48,7 +48,7 @@ FfmpegVideoEncoder::init(const char *fil
|
|
|
|
av_register_all();
|
|
|
|
- AVOutputFormat *fmt = guess_format("avi", NULL, "video/x-msvideo");
|
|
+ AVOutputFormat *fmt = av_guess_format("avi", NULL, "video/x-msvideo");
|
|
if (fmt == NULL)
|
|
return false;
|
|
|
|
@@ -59,14 +59,15 @@ FfmpegVideoEncoder::init(const char *fil
|
|
_context->oformat = fmt;
|
|
snprintf(_context->filename, sizeof (_context->filename), "%s", filename);
|
|
|
|
- _stream = av_new_stream(_context, 0);
|
|
+ _stream = avformat_new_stream(_context, NULL);
|
|
if (_stream == NULL)
|
|
{
|
|
close();
|
|
return false;
|
|
}
|
|
+ _stream->id = 0;
|
|
_stream->codec->codec_id = fmt->video_codec;
|
|
- _stream->codec->codec_type = CODEC_TYPE_VIDEO;
|
|
+ _stream->codec->codec_type = AVMEDIA_TYPE_VIDEO;
|
|
_stream->codec->codec_tag = MKTAG('D', 'X', '5', '0');
|
|
|
|
_stream->codec->bit_rate = 79000 + 1000 * pow(1.4, quality * 20.0);
|
|
@@ -75,20 +76,14 @@ FfmpegVideoEncoder::init(const char *fil
|
|
_stream->codec->time_base.den = 50;
|
|
_stream->codec->time_base.num = fps_den;
|
|
_stream->codec->gop_size = 100 / fps_den;
|
|
- _stream->codec->pix_fmt = PIX_FMT_YUV420P;
|
|
+ _stream->codec->pix_fmt = AV_PIX_FMT_YUV420P;
|
|
|
|
// some formats want stream headers to be separate
|
|
if (_context->oformat->flags & AVFMT_GLOBALHEADER)
|
|
_stream->codec->flags |= CODEC_FLAG_GLOBAL_HEADER;
|
|
|
|
- if (av_set_parameters(_context, NULL) < 0)
|
|
- {
|
|
- close();
|
|
- return false;
|
|
- }
|
|
-
|
|
AVCodec *codec = avcodec_find_encoder(_stream->codec->codec_id);
|
|
- if (avcodec_open(_stream->codec, codec) < 0)
|
|
+ if (avcodec_open2(_stream->codec, codec, NULL) < 0)
|
|
{
|
|
close();
|
|
return false;
|
|
@@ -102,7 +97,7 @@ FfmpegVideoEncoder::init(const char *fil
|
|
return false;
|
|
}
|
|
|
|
- _frame = avcodec_alloc_frame();
|
|
+ _frame = av_frame_alloc();
|
|
if (_frame == NULL)
|
|
{
|
|
close();
|
|
@@ -119,14 +114,14 @@ FfmpegVideoEncoder::init(const char *fil
|
|
|
|
avpicture_fill((AVPicture *) _frame, buf, _stream->codec->pix_fmt, width, height);
|
|
|
|
- if (url_fopen(&_context->pb, filename, URL_WRONLY) < 0)
|
|
+ if (avio_open(&_context->pb, filename, AVIO_FLAG_WRITE) < 0)
|
|
{
|
|
close();
|
|
return false;
|
|
}
|
|
|
|
//dump_format(_context, 0, filename, 1);
|
|
- av_write_header(_context);
|
|
+ avformat_write_header(_context, NULL);
|
|
return true;
|
|
}
|
|
|
|
@@ -161,20 +156,21 @@ FfmpegVideoEncoder::encode(byte_t *image
|
|
}
|
|
}
|
|
|
|
- int out_size = avcodec_encode_video(_stream->codec, _buf, _bufsize, _frame);
|
|
- if (out_size == 0)
|
|
- return true;
|
|
-
|
|
AVPacket pkt;
|
|
av_init_packet(&pkt);
|
|
+ pkt.data = _buf;
|
|
+ pkt.size = _bufsize;
|
|
+
|
|
+ int got_packet = 0;
|
|
+ int ret = avcodec_encode_video2(_stream->codec, &pkt, _frame, &got_packet);
|
|
+ if (ret < 0 || !got_packet || pkt.size <= 0)
|
|
+ return true;
|
|
|
|
if (_stream->codec->coded_frame->pts != AV_NOPTS_VALUE)
|
|
pkt.pts = av_rescale_q(_stream->codec->coded_frame->pts, _stream->codec->time_base, _stream->time_base);
|
|
if (_stream->codec->coded_frame->key_frame)
|
|
- pkt.flags |= PKT_FLAG_KEY;
|
|
+ pkt.flags |= AV_PKT_FLAG_KEY;
|
|
pkt.stream_index = _stream->index;
|
|
- pkt.data = _buf;
|
|
- pkt.size = out_size;
|
|
|
|
return av_interleaved_write_frame(_context, &pkt) == 0;
|
|
}
|
|
@@ -197,7 +193,7 @@ FfmpegVideoEncoder::close(void)
|
|
av_freep(&_context->streams[i]->codec);
|
|
av_freep(&_context->streams[i]);
|
|
}
|
|
- url_fclose(_context->pb);
|
|
+ avio_close(_context->pb);
|
|
|
|
av_free(_context);
|
|
|
|
@@ -207,4 +203,4 @@ FfmpegVideoEncoder::close(void)
|
|
_buf = NULL;
|
|
}
|
|
|
|
-#endif /* HAVE_LIBAVFORMAT */
|
|
\ No newline at end of file
|
|
+#endif /* HAVE_LIBAVFORMAT */
|