Commit 6a047213 authored by Anton Khirnov's avatar Anton Khirnov

dvenc: switch to encode2().

parent b3566a6a
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
#include "avcodec.h" #include "avcodec.h"
#include "dsputil.h" #include "dsputil.h"
#include "get_bits.h" #include "get_bits.h"
#include "internal.h"
#include "put_bits.h" #include "put_bits.h"
#include "simple_idct.h" #include "simple_idct.h"
#include "dvdata.h" #include "dvdata.h"
...@@ -1275,29 +1276,37 @@ static void dv_format_frame(DVVideoContext* c, uint8_t* buf) ...@@ -1275,29 +1276,37 @@ static void dv_format_frame(DVVideoContext* c, uint8_t* buf)
} }
static int dvvideo_encode_frame(AVCodecContext *c, uint8_t *buf, int buf_size, static int dvvideo_encode_frame(AVCodecContext *c, AVPacket *pkt,
void *data) const AVFrame *frame, int *got_packet)
{ {
DVVideoContext *s = c->priv_data; DVVideoContext *s = c->priv_data;
int ret;
s->sys = avpriv_dv_codec_profile(c); s->sys = avpriv_dv_codec_profile(c);
if (!s->sys || buf_size < s->sys->frame_size || dv_init_dynamic_tables(s->sys)) if (!s->sys || dv_init_dynamic_tables(s->sys))
return -1; return -1;
if ((ret = ff_alloc_packet(pkt, s->sys->frame_size)) < 0) {
av_log(c, AV_LOG_ERROR, "Error getting output packet.\n");
return ret;
}
c->pix_fmt = s->sys->pix_fmt; c->pix_fmt = s->sys->pix_fmt;
s->picture = *((AVFrame *)data); s->picture = *frame;
s->picture.key_frame = 1; s->picture.key_frame = 1;
s->picture.pict_type = AV_PICTURE_TYPE_I; s->picture.pict_type = AV_PICTURE_TYPE_I;
s->buf = buf; s->buf = pkt->data;
c->execute(c, dv_encode_video_segment, s->sys->work_chunks, NULL, c->execute(c, dv_encode_video_segment, s->sys->work_chunks, NULL,
dv_work_pool_size(s->sys), sizeof(DVwork_chunk)); dv_work_pool_size(s->sys), sizeof(DVwork_chunk));
emms_c(); emms_c();
dv_format_frame(s, buf); dv_format_frame(s, pkt->data);
return s->sys->frame_size; pkt->flags |= AV_PKT_FLAG_KEY;
*got_packet = 1;
return 0;
} }
#endif #endif
...@@ -1319,7 +1328,7 @@ AVCodec ff_dvvideo_encoder = { ...@@ -1319,7 +1328,7 @@ AVCodec ff_dvvideo_encoder = {
.id = CODEC_ID_DVVIDEO, .id = CODEC_ID_DVVIDEO,
.priv_data_size = sizeof(DVVideoContext), .priv_data_size = sizeof(DVVideoContext),
.init = dvvideo_init_encoder, .init = dvvideo_init_encoder,
.encode = dvvideo_encode_frame, .encode2 = dvvideo_encode_frame,
.capabilities = CODEC_CAP_SLICE_THREADS, .capabilities = CODEC_CAP_SLICE_THREADS,
.pix_fmts = (const enum PixelFormat[]) {PIX_FMT_YUV411P, PIX_FMT_YUV422P, PIX_FMT_YUV420P, PIX_FMT_NONE}, .pix_fmts = (const enum PixelFormat[]) {PIX_FMT_YUV411P, PIX_FMT_YUV422P, PIX_FMT_YUV420P, PIX_FMT_NONE},
.long_name = NULL_IF_CONFIG_SMALL("DV (Digital Video)"), .long_name = NULL_IF_CONFIG_SMALL("DV (Digital Video)"),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment