[FFmpeg-devel] [PATCH 3/3] avformat: deprecate muxing uncoded frames

Marton Balint cus at passwd.hu
Mon Apr 6 02:38:24 EEST 2020


The same goal can be achieved using the WRAPPED_AVFRAME codec with the existing
API.

Signed-off-by: Marton Balint <cus at passwd.hu>
---
 doc/APIchanges                   |  4 ++++
 libavdevice/alsa_enc.c           |  4 ++++
 libavdevice/opengl_enc.c         |  4 ++++
 libavdevice/pulse_audio_enc.c    |  4 ++++
 libavdevice/version.h            |  4 ++--
 libavdevice/xv.c                 |  4 ++++
 libavformat/avformat.h           |  7 +++++++
 libavformat/internal.h           |  2 ++
 libavformat/mux.c                | 16 ++++++++++++++++
 libavformat/uncodedframecrcenc.c |  6 ++++++
 libavformat/version.h            |  6 +++++-
 11 files changed, 58 insertions(+), 3 deletions(-)

diff --git a/doc/APIchanges b/doc/APIchanges
index f1d7eac2ee..57d4fdc609 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -15,6 +15,10 @@ libavutil:     2017-10-21
 
 API changes, most recent first:
 
+2020-04-xx - xxxxxxxxxx - lavf 58.43.100 - avformat.h
+  Deprecate av_interleaved_write_uncoded_frame(), av_write_uncoded_frame() and
+  av_write_uncoded_frame_query().
+
 2020-03-29 - xxxxxxxxxx - lavf 58.42.100 - avformat.h
   av_read_frame() now guarantees to handle uninitialized input packets
   and to return refcounted packets on success.
diff --git a/libavdevice/alsa_enc.c b/libavdevice/alsa_enc.c
index 1a6d01e3b1..80c9c509e2 100644
--- a/libavdevice/alsa_enc.c
+++ b/libavdevice/alsa_enc.c
@@ -116,6 +116,7 @@ static int audio_write_packet(AVFormatContext *s1, AVPacket *pkt)
     return 0;
 }
 
+#if FF_API_UNCODED_FRAME
 static int audio_write_frame(AVFormatContext *s1, int stream_index,
                              AVFrame **frame, unsigned flags)
 {
@@ -133,6 +134,7 @@ static int audio_write_frame(AVFormatContext *s1, int stream_index,
     pkt.duration = (*frame)->pkt_duration;
     return audio_write_packet(s1, &pkt);
 }
+#endif
 
 static void
 audio_get_output_timestamp(AVFormatContext *s1, int stream,
@@ -166,7 +168,9 @@ AVOutputFormat ff_alsa_muxer = {
     .write_header   = audio_write_header,
     .write_packet   = audio_write_packet,
     .write_trailer  = ff_alsa_close,
+#if FF_API_UNCODED_FRAME
     .write_uncoded_frame = audio_write_frame,
+#endif
     .get_device_list = audio_get_device_list,
     .get_output_timestamp = audio_get_output_timestamp,
     .flags          = AVFMT_NOFILE,
diff --git a/libavdevice/opengl_enc.c b/libavdevice/opengl_enc.c
index b8bc46ebb5..a829f9ccb2 100644
--- a/libavdevice/opengl_enc.c
+++ b/libavdevice/opengl_enc.c
@@ -1225,6 +1225,7 @@ static int opengl_write_packet(AVFormatContext *h, AVPacket *pkt)
     return opengl_draw(h, frame, 0);
 }
 
+#if FF_API_UNCODED_FRAME
 static int opengl_write_frame(AVFormatContext *h, int stream_index,
                               AVFrame **frame, unsigned flags)
 {
@@ -1232,6 +1233,7 @@ static int opengl_write_frame(AVFormatContext *h, int stream_index,
         return 0;
     return opengl_draw(h, *frame, 0);
 }
+#endif
 
 #define OFFSET(x) offsetof(OpenGLContext, x)
 #define ENC AV_OPT_FLAG_ENCODING_PARAM
@@ -1259,7 +1261,9 @@ AVOutputFormat ff_opengl_muxer = {
     .video_codec    = AV_CODEC_ID_WRAPPED_AVFRAME,
     .write_header   = opengl_write_header,
     .write_packet   = opengl_write_packet,
+#if FF_API_UNCODED_FRAME
     .write_uncoded_frame = opengl_write_frame,
+#endif
     .write_trailer  = opengl_write_trailer,
     .control_message = opengl_control_message,
     .flags          = AVFMT_NOFILE | AVFMT_VARIABLE_FPS | AVFMT_NOTIMESTAMPS,
diff --git a/libavdevice/pulse_audio_enc.c b/libavdevice/pulse_audio_enc.c
index e0a631b227..0b56984ec4 100644
--- a/libavdevice/pulse_audio_enc.c
+++ b/libavdevice/pulse_audio_enc.c
@@ -670,6 +670,7 @@ static int pulse_write_packet(AVFormatContext *h, AVPacket *pkt)
     return AVERROR_EXTERNAL;
 }
 
+#if FF_API_UNCODED_FRAME
 static int pulse_write_frame(AVFormatContext *h, int stream_index,
                              AVFrame **frame, unsigned flags)
 {
@@ -686,6 +687,7 @@ static int pulse_write_frame(AVFormatContext *h, int stream_index,
     pkt.duration = (*frame)->pkt_duration;
     return pulse_write_packet(h, &pkt);
 }
+#endif
 
 
 static void pulse_get_output_timestamp(AVFormatContext *h, int stream, int64_t *dts, int64_t *wall)
@@ -786,7 +788,9 @@ AVOutputFormat ff_pulse_muxer = {
     .video_codec          = AV_CODEC_ID_NONE,
     .write_header         = pulse_write_header,
     .write_packet         = pulse_write_packet,
+#if FF_API_UNCODED_FRAME
     .write_uncoded_frame  = pulse_write_frame,
+#endif
     .write_trailer        = pulse_write_trailer,
     .get_output_timestamp = pulse_get_output_timestamp,
     .get_device_list      = pulse_get_device_list,
diff --git a/libavdevice/version.h b/libavdevice/version.h
index 10717564e9..9ee3d3db4a 100644
--- a/libavdevice/version.h
+++ b/libavdevice/version.h
@@ -28,8 +28,8 @@
 #include "libavutil/version.h"
 
 #define LIBAVDEVICE_VERSION_MAJOR  58
-#define LIBAVDEVICE_VERSION_MINOR   9
-#define LIBAVDEVICE_VERSION_MICRO 103
+#define LIBAVDEVICE_VERSION_MINOR  10
+#define LIBAVDEVICE_VERSION_MICRO 100
 
 #define LIBAVDEVICE_VERSION_INT AV_VERSION_INT(LIBAVDEVICE_VERSION_MAJOR, \
                                                LIBAVDEVICE_VERSION_MINOR, \
diff --git a/libavdevice/xv.c b/libavdevice/xv.c
index 2c5f1a4432..67e1530199 100644
--- a/libavdevice/xv.c
+++ b/libavdevice/xv.c
@@ -325,6 +325,7 @@ static int xv_write_packet(AVFormatContext *s, AVPacket *pkt)
     return write_picture(s, frame->data, frame->linesize);
 }
 
+#if FF_API_UNCODED_FRAME
 static int xv_write_frame(AVFormatContext *s, int stream_index, AVFrame **frame,
                           unsigned flags)
 {
@@ -333,6 +334,7 @@ static int xv_write_frame(AVFormatContext *s, int stream_index, AVFrame **frame,
         return 0;
     return write_picture(s, (*frame)->data, (*frame)->linesize);
 }
+#endif
 
 static int xv_control_message(AVFormatContext *s, int type, void *data, size_t data_size)
 {
@@ -373,7 +375,9 @@ AVOutputFormat ff_xv_muxer = {
     .video_codec    = AV_CODEC_ID_WRAPPED_AVFRAME,
     .write_header   = xv_write_header,
     .write_packet   = xv_write_packet,
+#if FF_API_UNCODED_FRAME
     .write_uncoded_frame = xv_write_frame,
+#endif
     .write_trailer  = xv_write_trailer,
     .control_message = xv_control_message,
     .flags          = AVFMT_NOFILE | AVFMT_VARIABLE_FPS | AVFMT_NOTIMESTAMPS,
diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index 39b99b4481..c7dd35f714 100644
--- a/libavformat/avformat.h
+++ b/libavformat/avformat.h
@@ -573,6 +573,7 @@ typedef struct AVOutputFormat {
     int (*control_message)(struct AVFormatContext *s, int type,
                            void *data, size_t data_size);
 
+#if FF_API_UNCODED_FRAME
     /**
      * Write an uncoded AVFrame.
      *
@@ -583,6 +584,7 @@ typedef struct AVOutputFormat {
      */
     int (*write_uncoded_frame)(struct AVFormatContext *, int stream_index,
                                AVFrame **frame, unsigned flags);
+#endif
     /**
      * Returns device list with it properties.
      * @see avdevice_list_devices() for more details.
@@ -2636,6 +2638,7 @@ int av_write_frame(AVFormatContext *s, AVPacket *pkt);
  */
 int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt);
 
+#if FF_API_UNCODED_FRAME
 /**
  * Write an uncoded frame to an output media file.
  *
@@ -2644,6 +2647,7 @@ int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt);
  *
  * See av_interleaved_write_uncoded_frame() for details.
  */
+attribute_deprecated
 int av_write_uncoded_frame(AVFormatContext *s, int stream_index,
                            AVFrame *frame);
 
@@ -2663,6 +2667,7 @@ int av_write_uncoded_frame(AVFormatContext *s, int stream_index,
  *
  * @return  >=0 for success, a negative code on error
  */
+attribute_deprecated
 int av_interleaved_write_uncoded_frame(AVFormatContext *s, int stream_index,
                                        AVFrame *frame);
 
@@ -2672,7 +2677,9 @@ int av_interleaved_write_uncoded_frame(AVFormatContext *s, int stream_index,
  * @return  >=0 if an uncoded frame can be written to that muxer and stream,
  *          <0 if not
  */
+attribute_deprecated
 int av_write_uncoded_frame_query(AVFormatContext *s, int stream_index);
+#endif
 
 /**
  * Write the stream trailer to an output media file and free the
diff --git a/libavformat/internal.h b/libavformat/internal.h
index 332477a532..6b16a36a73 100644
--- a/libavformat/internal.h
+++ b/libavformat/internal.h
@@ -618,6 +618,7 @@ int ff_rfps_add_frame(AVFormatContext *ic, AVStream *st, int64_t dts);
 
 void ff_rfps_calculate(AVFormatContext *ic);
 
+#if FF_API_UNCODED_FRAME
 /**
  * Flags for AVFormatContext.write_uncoded_frame()
  */
@@ -630,6 +631,7 @@ enum AVWriteUncodedFrameFlags {
     AV_WRITE_UNCODED_FRAME_QUERY           = 0x0001,
 
 };
+#endif
 
 /**
  * Copies the whilelists from one context to the other
diff --git a/libavformat/mux.c b/libavformat/mux.c
index cc2d1e275a..26af5c5030 100644
--- a/libavformat/mux.c
+++ b/libavformat/mux.c
@@ -548,6 +548,7 @@ fail:
     return ret;
 }
 
+#if FF_API_UNCODED_FRAME
 #define AV_PKT_FLAG_UNCODED_FRAME 0x2000
 
 /* Note: using sizeof(AVFrame) from outside lavu is unsafe in general, but
@@ -555,6 +556,7 @@ fail:
    The value is chosen to be very unlikely to appear on its own and to cause
    immediate failure if used anywhere as a real size. */
 #define UNCODED_FRAME_PACKET_SIZE (INT_MIN / 3 * 2 + (int)sizeof(AVFrame))
+#endif
 
 
 #if FF_API_COMPUTE_PKT_FIELDS2 && FF_API_LAVF_AVCTX
@@ -649,8 +651,12 @@ static int compute_muxer_pkt_fields(AVFormatContext *s, AVStream *st, AVPacket *
     /* update pts */
     switch (st->codecpar->codec_type) {
     case AVMEDIA_TYPE_AUDIO:
+#if FF_API_UNCODED_FRAME
         frame_size = (pkt->flags & AV_PKT_FLAG_UNCODED_FRAME) ?
                      ((AVFrame *)pkt->data)->nb_samples :
+#else
+        frame_size =
+#endif
                      av_get_audio_frame_duration(st->codec, pkt->size);
 
         /* HACK/FIXME, we skip the initial 0 size packets as they are most
@@ -745,12 +751,16 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt)
         }
     }
 
+#if FF_API_UNCODED_FRAME
     if ((pkt->flags & AV_PKT_FLAG_UNCODED_FRAME)) {
         AVFrame *frame = (AVFrame *)pkt->data;
         av_assert0(pkt->size == UNCODED_FRAME_PACKET_SIZE);
         ret = s->oformat->write_uncoded_frame(s, pkt->stream_index, &frame, 0);
         av_frame_free(&frame);
     } else {
+#else
+    {
+#endif
         ret = s->oformat->write_packet(s, pkt);
     }
 
@@ -926,10 +936,14 @@ int ff_interleave_add_packet(AVFormatContext *s, AVPacket *pkt,
     this_pktl    = av_malloc(sizeof(AVPacketList));
     if (!this_pktl)
         return AVERROR(ENOMEM);
+#if FF_API_UNCODED_FRAME
     if (pkt->flags & AV_PKT_FLAG_UNCODED_FRAME) {
         av_assert0(pkt->size == UNCODED_FRAME_PACKET_SIZE);
         av_assert0(((AVFrame *)pkt->data)->buf);
     } else {
+#else
+    {
+#endif
         if ((ret = av_packet_make_refcounted(pkt)) < 0) {
             av_free(this_pktl);
             return ret;
@@ -1319,6 +1333,7 @@ int ff_write_chained(AVFormatContext *dst, int dst_stream, AVPacket *pkt,
     return ret;
 }
 
+#if FF_API_UNCODED_FRAME
 static int write_uncoded_frame_internal(AVFormatContext *s, int stream_index,
                                         AVFrame *frame, int interleaved)
 {
@@ -1366,3 +1381,4 @@ int av_write_uncoded_frame_query(AVFormatContext *s, int stream_index)
     return s->oformat->write_uncoded_frame(s, stream_index, NULL,
                                            AV_WRITE_UNCODED_FRAME_QUERY);
 }
+#endif
diff --git a/libavformat/uncodedframecrcenc.c b/libavformat/uncodedframecrcenc.c
index 2f1a14ca97..6d6b1397b1 100644
--- a/libavformat/uncodedframecrcenc.c
+++ b/libavformat/uncodedframecrcenc.c
@@ -26,6 +26,7 @@
 #include "avformat.h"
 #include "internal.h"
 
+#if FF_API_UNCODED_FRAME
 /* Identical to Adler32 when the type is uint8_t. */
 #define DEFINE_CKSUM_LINE(name, type, conv) \
 static void cksum_line_ ## name(unsigned *cksum, void *data, unsigned size) \
@@ -118,12 +119,14 @@ static void audio_frame_cksum(AVBPrint *bp, AVFrame *frame)
         av_bprintf(bp, ", 0x%08"PRIx32, cksum);
     }
 }
+#endif
 
 static int write_header(struct AVFormatContext *s)
 {
     return ff_framehash_write_header(s);
 }
 
+#if FF_API_UNCODED_FRAME
 static int write_frame(struct AVFormatContext *s, int stream_index,
                        AVFrame **frame, unsigned flags)
 {
@@ -158,6 +161,7 @@ static int write_frame(struct AVFormatContext *s, int stream_index,
     av_bprint_finalize(&bp, NULL);
     return ret;
 }
+#endif
 
 static int write_packet(struct AVFormatContext *s, AVPacket *pkt)
 {
@@ -171,7 +175,9 @@ AVOutputFormat ff_uncodedframecrc_muxer = {
     .video_codec       = AV_CODEC_ID_RAWVIDEO,
     .write_header      = write_header,
     .write_packet      = write_packet,
+#if FF_API_UNCODED_FRAME
     .write_uncoded_frame = write_frame,
+#endif
     .flags             = AVFMT_VARIABLE_FPS | AVFMT_TS_NONSTRICT |
                          AVFMT_TS_NEGATIVE,
 };
diff --git a/libavformat/version.h b/libavformat/version.h
index 18c2f5fec2..80bb0e9d1d 100644
--- a/libavformat/version.h
+++ b/libavformat/version.h
@@ -32,7 +32,7 @@
 // Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium)
 // Also please add any ticket numbers that you believe might be affected here
 #define LIBAVFORMAT_VERSION_MAJOR  58
-#define LIBAVFORMAT_VERSION_MINOR  42
+#define LIBAVFORMAT_VERSION_MINOR  43
 #define LIBAVFORMAT_VERSION_MICRO 100
 
 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
@@ -106,6 +106,10 @@
 #ifndef FF_API_AVIOFORMAT
 #define FF_API_AVIOFORMAT               (LIBAVFORMAT_VERSION_MAJOR < 59)
 #endif
+#ifndef FF_API_UNCODED_FRAME
+#define FF_API_UNCODED_FRAME            (LIBAVFORMAT_VERSION_MAJOR < 59)
+#endif
+
 
 
 #ifndef FF_API_R_FRAME_RATE
-- 
2.16.4



More information about the ffmpeg-devel mailing list