diff options
author | Martin Storsjö <martin@martin.st> | 2013-03-08 11:59:57 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2013-03-08 13:42:45 +0100 |
commit | f1af3d19a7924c6f5963ee15a83bad26d2262dc3 (patch) | |
tree | b2605a3ea6b5d50dcd22280af1b77a8ed415ae1f | |
parent | 2240e92f052960693de55cf4924e80426dfaa965 (diff) | |
download | ffmpeg-f1af3d19a7924c6f5963ee15a83bad26d2262dc3.tar.gz |
output-example: Update to use encode_video2 instead of the now dropped encode_video
Signed-off-by: Anton Khirnov <anton@khirnov.net>
-rw-r--r-- | libavformat/output-example.c | 43 |
1 files changed, 15 insertions, 28 deletions
diff --git a/libavformat/output-example.c b/libavformat/output-example.c index 2f83990011..496b7f8212 100644 --- a/libavformat/output-example.c +++ b/libavformat/output-example.c @@ -177,8 +177,7 @@ static void close_audio(AVFormatContext *oc, AVStream *st) /* video output */ static AVFrame *picture, *tmp_picture; -static uint8_t *video_outbuf; -static int frame_count, video_outbuf_size; +static int frame_count; /* Add a video output stream. */ static AVStream *add_video_stream(AVFormatContext *oc, enum AVCodecID codec_id) @@ -264,18 +263,6 @@ static void open_video(AVFormatContext *oc, AVStream *st) exit(1); } - video_outbuf = NULL; - if (!(oc->oformat->flags & AVFMT_RAWPICTURE)) { - /* Allocate output buffer. */ - /* XXX: API change will be done. */ - /* Buffers passed into lav* can be allocated any way you prefer, - * as long as they're aligned enough for the architecture, and - * they're freed appropriately (such as using av_free for buffers - * allocated with av_malloc). */ - video_outbuf_size = 200000; - video_outbuf = av_malloc(video_outbuf_size); - } - /* Allocate the encoded raw picture. */ picture = alloc_picture(c->pix_fmt, c->width, c->height); if (!picture) { @@ -320,7 +307,7 @@ static void fill_yuv_image(AVFrame *pict, int frame_index, static void write_video_frame(AVFormatContext *oc, AVStream *st) { - int out_size, ret; + int ret; AVCodecContext *c; static struct SwsContext *img_convert_ctx; @@ -367,22 +354,23 @@ static void write_video_frame(AVFormatContext *oc, AVStream *st) ret = av_interleaved_write_frame(oc, &pkt); } else { + AVPacket pkt = { 0 }; + int got_packet; + av_init_packet(&pkt); + /* encode the image */ - out_size = avcodec_encode_video(c, video_outbuf, - video_outbuf_size, picture); + ret = avcodec_encode_video2(c, &pkt, picture, &got_packet); /* If size is zero, it means the image was buffered. */ - if (out_size > 0) { - AVPacket pkt; - av_init_packet(&pkt); - - if (c->coded_frame->pts != AV_NOPTS_VALUE) - pkt.pts = av_rescale_q(c->coded_frame->pts, + if (!ret && got_packet && pkt.size) { + if (pkt.pts != AV_NOPTS_VALUE) { + pkt.pts = av_rescale_q(pkt.pts, + c->time_base, st->time_base); + } + if (pkt.dts != AV_NOPTS_VALUE) { + pkt.dts = av_rescale_q(pkt.dts, c->time_base, st->time_base); - if (c->coded_frame->key_frame) - pkt.flags |= AV_PKT_FLAG_KEY; + } pkt.stream_index = st->index; - pkt.data = video_outbuf; - pkt.size = out_size; /* Write the compressed frame to the media file. */ ret = av_interleaved_write_frame(oc, &pkt); @@ -406,7 +394,6 @@ static void close_video(AVFormatContext *oc, AVStream *st) av_free(tmp_picture->data[0]); av_free(tmp_picture); } - av_free(video_outbuf); } /**************************************************************/ |