diff --git a/doc/examples/muxing.c b/doc/examples/muxing.c index b5bd54a105..041617aff3 100644 --- a/doc/examples/muxing.c +++ b/doc/examples/muxing.c @@ -498,39 +498,20 @@ static int write_video_frame(AVFormatContext *oc, OutputStream *ost) 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); - - 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); + AVPacket pkt = { 0 }; + av_init_packet(&pkt); - pkt.pts = pkt.dts = frame->pts; - av_packet_rescale_ts(&pkt, c->time_base, ost->st->time_base); + /* encode the image */ + ret = avcodec_encode_video2(c, &pkt, frame, &got_packet); + if (ret < 0) { + fprintf(stderr, "Error encoding video frame: %s\n", av_err2str(ret)); + exit(1); + } - ret = av_interleaved_write_frame(oc, &pkt); + if (got_packet) { + ret = write_frame(oc, &c->time_base, ost->st, &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 video frame: %s\n", av_err2str(ret)); - exit(1); - } - - if (got_packet) { - ret = write_frame(oc, &c->time_base, ost->st, &pkt); - } else { - ret = 0; - } + ret = 0; } if (ret < 0) { diff --git a/libavformat/avformat.h b/libavformat/avformat.h index e2a27d437b..f3ffcfbe38 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -465,8 +465,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. */ @@ -511,7 +513,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 diff --git a/libavformat/version.h b/libavformat/version.h index f7a2e09852..7e706637a9 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -65,6 +65,9 @@ #ifndef FF_API_URL_FEOF #define FF_API_URL_FEOF (LIBAVFORMAT_VERSION_MAJOR < 58) #endif +#ifndef FF_API_LAVF_FMT_RAWPICTURE +#define FF_API_LAVF_FMT_RAWPICTURE (LIBAVFORMAT_VERSION_MAJOR < 58) +#endif #ifndef FF_API_R_FRAME_RATE #define FF_API_R_FRAME_RATE 1