avformat: Do not use AVFMT_RAWPICTURE
There are no formats supporting it anymore and it is deprecated. Update the documentation accordingly.
This commit is contained in:
parent
16b0c92962
commit
34ed5c2e4d
76
avconv.c
76
avconv.c
@ -452,7 +452,7 @@ static void do_video_out(AVFormatContext *s,
|
||||
AVFrame *in_picture,
|
||||
int *frame_size)
|
||||
{
|
||||
int ret, format_video_sync;
|
||||
int ret, format_video_sync, got_packet;
|
||||
AVPacket pkt;
|
||||
AVCodecContext *enc = ost->enc_ctx;
|
||||
|
||||
@ -488,57 +488,37 @@ static void do_video_out(AVFormatContext *s,
|
||||
if (ost->frame_number >= ost->max_frames)
|
||||
return;
|
||||
|
||||
if (s->oformat->flags & AVFMT_RAWPICTURE &&
|
||||
enc->codec->id == AV_CODEC_ID_RAWVIDEO) {
|
||||
/* raw pictures are written as AVPicture structure to
|
||||
avoid any copies. We support temporarily the older
|
||||
method. */
|
||||
#if FF_API_CODED_FRAME
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
enc->coded_frame->interlaced_frame = in_picture->interlaced_frame;
|
||||
enc->coded_frame->top_field_first = in_picture->top_field_first;
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
pkt.data = (uint8_t *)in_picture;
|
||||
pkt.size = sizeof(AVPicture);
|
||||
pkt.pts = av_rescale_q(in_picture->pts, enc->time_base, ost->st->time_base);
|
||||
pkt.flags |= AV_PKT_FLAG_KEY;
|
||||
if (enc->flags & (AV_CODEC_FLAG_INTERLACED_DCT | AV_CODEC_FLAG_INTERLACED_ME) &&
|
||||
ost->top_field_first >= 0)
|
||||
in_picture->top_field_first = !!ost->top_field_first;
|
||||
|
||||
in_picture->quality = enc->global_quality;
|
||||
in_picture->pict_type = 0;
|
||||
if (ost->forced_kf_index < ost->forced_kf_count &&
|
||||
in_picture->pts >= ost->forced_kf_pts[ost->forced_kf_index]) {
|
||||
in_picture->pict_type = AV_PICTURE_TYPE_I;
|
||||
ost->forced_kf_index++;
|
||||
}
|
||||
|
||||
ost->frames_encoded++;
|
||||
|
||||
ret = avcodec_encode_video2(enc, &pkt, in_picture, &got_packet);
|
||||
if (ret < 0) {
|
||||
av_log(NULL, AV_LOG_FATAL, "Video encoding failed\n");
|
||||
exit_program(1);
|
||||
}
|
||||
|
||||
if (got_packet) {
|
||||
av_packet_rescale_ts(&pkt, enc->time_base, ost->st->time_base);
|
||||
write_frame(s, &pkt, ost);
|
||||
} else {
|
||||
int got_packet;
|
||||
*frame_size = pkt.size;
|
||||
|
||||
if (enc->flags & (AV_CODEC_FLAG_INTERLACED_DCT | AV_CODEC_FLAG_INTERLACED_ME) &&
|
||||
ost->top_field_first >= 0)
|
||||
in_picture->top_field_first = !!ost->top_field_first;
|
||||
|
||||
in_picture->quality = enc->global_quality;
|
||||
in_picture->pict_type = 0;
|
||||
if (ost->forced_kf_index < ost->forced_kf_count &&
|
||||
in_picture->pts >= ost->forced_kf_pts[ost->forced_kf_index]) {
|
||||
in_picture->pict_type = AV_PICTURE_TYPE_I;
|
||||
ost->forced_kf_index++;
|
||||
}
|
||||
|
||||
ost->frames_encoded++;
|
||||
|
||||
ret = avcodec_encode_video2(enc, &pkt, in_picture, &got_packet);
|
||||
if (ret < 0) {
|
||||
av_log(NULL, AV_LOG_FATAL, "Video encoding failed\n");
|
||||
exit_program(1);
|
||||
}
|
||||
|
||||
if (got_packet) {
|
||||
av_packet_rescale_ts(&pkt, enc->time_base, ost->st->time_base);
|
||||
write_frame(s, &pkt, ost);
|
||||
*frame_size = pkt.size;
|
||||
|
||||
/* if two pass, output log */
|
||||
if (ost->logfile && enc->stats_out) {
|
||||
fprintf(ost->logfile, "%s", enc->stats_out);
|
||||
}
|
||||
/* if two pass, output log */
|
||||
if (ost->logfile && enc->stats_out) {
|
||||
fprintf(ost->logfile, "%s", enc->stats_out);
|
||||
}
|
||||
}
|
||||
|
||||
ost->sync_opts++;
|
||||
/*
|
||||
* For video, number of frames in == number of packets out.
|
||||
@ -959,8 +939,6 @@ static void flush_encoders(void)
|
||||
|
||||
if (enc->codec_type == AVMEDIA_TYPE_AUDIO && enc->frame_size <= 1)
|
||||
continue;
|
||||
if (enc->codec_type == AVMEDIA_TYPE_VIDEO && (os->oformat->flags & AVFMT_RAWPICTURE) && enc->codec->id == AV_CODEC_ID_RAWVIDEO)
|
||||
continue;
|
||||
|
||||
for (;;) {
|
||||
int (*encode)(AVCodecContext*, AVPacket*, const AVFrame*, int*) = NULL;
|
||||
|
@ -491,48 +491,30 @@ static int write_video_frame(AVFormatContext *oc, OutputStream *ost)
|
||||
int ret;
|
||||
AVCodecContext *c;
|
||||
AVFrame *frame;
|
||||
AVPacket pkt = { 0 };
|
||||
int got_packet = 0;
|
||||
|
||||
c = ost->st->codec;
|
||||
|
||||
frame = get_video_frame(ost);
|
||||
|
||||
if (oc->oformat->flags & AVFMT_RAWPICTURE) {
|
||||
/* a hack to avoid data copy with some raw video muxers */
|
||||
AVPacket pkt;
|
||||
av_init_packet(&pkt);
|
||||
av_init_packet(&pkt);
|
||||
|
||||
if (!frame)
|
||||
return 1;
|
||||
|
||||
pkt.flags |= AV_PKT_FLAG_KEY;
|
||||
pkt.stream_index = ost->st->index;
|
||||
pkt.data = (uint8_t *)frame;
|
||||
pkt.size = sizeof(AVPicture);
|
||||
|
||||
pkt.pts = pkt.dts = frame->pts;
|
||||
av_packet_rescale_ts(&pkt, c->time_base, ost->st->time_base);
|
||||
|
||||
ret = av_interleaved_write_frame(oc, &pkt);
|
||||
} else {
|
||||
AVPacket pkt = { 0 };
|
||||
av_init_packet(&pkt);
|
||||
|
||||
/* encode the image */
|
||||
ret = avcodec_encode_video2(c, &pkt, frame, &got_packet);
|
||||
if (ret < 0) {
|
||||
fprintf(stderr, "Error encoding a video frame\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (got_packet) {
|
||||
av_packet_rescale_ts(&pkt, c->time_base, ost->st->time_base);
|
||||
pkt.stream_index = ost->st->index;
|
||||
|
||||
/* Write the compressed frame to the media file. */
|
||||
ret = av_interleaved_write_frame(oc, &pkt);
|
||||
}
|
||||
/* encode the image */
|
||||
ret = avcodec_encode_video2(c, &pkt, frame, &got_packet);
|
||||
if (ret < 0) {
|
||||
fprintf(stderr, "Error encoding a video frame\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (got_packet) {
|
||||
av_packet_rescale_ts(&pkt, c->time_base, ost->st->time_base);
|
||||
pkt.stream_index = ost->st->index;
|
||||
|
||||
/* Write the compressed frame to the media file. */
|
||||
ret = av_interleaved_write_frame(oc, &pkt);
|
||||
}
|
||||
|
||||
if (ret != 0) {
|
||||
fprintf(stderr, "Error while writing video frame\n");
|
||||
exit(1);
|
||||
|
@ -413,8 +413,10 @@ typedef struct AVProbeData {
|
||||
#define AVFMT_NOFILE 0x0001
|
||||
#define AVFMT_NEEDNUMBER 0x0002 /**< Needs '%d' in filename. */
|
||||
#define AVFMT_SHOW_IDS 0x0008 /**< Show format stream IDs numbers. */
|
||||
#if FF_API_LAVF_FMT_RAWPICTURE
|
||||
#define AVFMT_RAWPICTURE 0x0020 /**< Format wants AVPicture structure for
|
||||
raw picture data. */
|
||||
raw picture data. @deprecated Not used anymore */
|
||||
#endif
|
||||
#define AVFMT_GLOBALHEADER 0x0040 /**< Format wants global header. */
|
||||
#define AVFMT_NOTIMESTAMPS 0x0080 /**< Format does not need / have any timestamps. */
|
||||
#define AVFMT_GENERIC_INDEX 0x0100 /**< Use generic index building code. */
|
||||
@ -454,7 +456,7 @@ typedef struct AVOutputFormat {
|
||||
enum AVCodecID video_codec; /**< default video codec */
|
||||
enum AVCodecID subtitle_codec; /**< default subtitle codec */
|
||||
/**
|
||||
* can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_RAWPICTURE,
|
||||
* can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER,
|
||||
* AVFMT_GLOBALHEADER, AVFMT_NOTIMESTAMPS, AVFMT_VARIABLE_FPS,
|
||||
* AVFMT_NODIMENSIONS, AVFMT_NOSTREAMS, AVFMT_ALLOW_FLUSH,
|
||||
* AVFMT_TS_NONSTRICT
|
||||
|
@ -57,5 +57,8 @@
|
||||
#ifndef FF_API_LAVF_CODEC_TB
|
||||
#define FF_API_LAVF_CODEC_TB (LIBAVFORMAT_VERSION_MAJOR < 58)
|
||||
#endif
|
||||
#ifndef FF_API_LAVF_FMT_RAWPICTURE
|
||||
#define FF_API_LAVF_FMT_RAWPICTURE (LIBAVFORMAT_VERSION_MAJOR < 58)
|
||||
#endif
|
||||
|
||||
#endif /* AVFORMAT_VERSION_H */
|
||||
|
Loading…
x
Reference in New Issue
Block a user