[FFmpeg-cvslog] fftools/ffmpeg: factor out attaching FrameData to a frame

Anton Khirnov git at videolan.org
Mon Jun 5 17:31:17 EEST 2023


ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Sat May 27 12:25:51 2023 +0200| [963034107356cc83a75115644e1516e92c6fa3db] | committer: Anton Khirnov

fftools/ffmpeg: factor out attaching FrameData to a frame

Will be useful in following commits.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=963034107356cc83a75115644e1516e92c6fa3db
---

 fftools/ffmpeg.c     | 11 +++++++++++
 fftools/ffmpeg.h     |  6 ++++++
 fftools/ffmpeg_dec.c |  5 ++---
 3 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c
index bcda7570e9..9997881572 100644
--- a/fftools/ffmpeg.c
+++ b/fftools/ffmpeg.c
@@ -431,6 +431,17 @@ InputStream *ist_iter(InputStream *prev)
     return NULL;
 }
 
+FrameData *frame_data(AVFrame *frame)
+{
+    if (!frame->opaque_ref) {
+        frame->opaque_ref = av_buffer_allocz(sizeof(FrameData));
+        if (!frame->opaque_ref)
+            return NULL;
+    }
+
+    return (FrameData*)frame->opaque_ref->data;
+}
+
 void remove_avoptions(AVDictionary **a, AVDictionary *b)
 {
     const AVDictionaryEntry *t = NULL;
diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h
index 0e9ad5f9f7..6f71e85658 100644
--- a/fftools/ffmpeg.h
+++ b/fftools/ffmpeg.h
@@ -737,6 +737,12 @@ int init_complex_filtergraph(FilterGraph *fg);
 
 int copy_av_subtitle(AVSubtitle *dst, const AVSubtitle *src);
 
+/**
+ * Get our axiliary frame data attached to the frame, allocating it
+ * if needed.
+ */
+FrameData *frame_data(AVFrame *frame);
+
 int ifilter_send_frame(InputFilter *ifilter, AVFrame *frame, int keep_reference);
 int ifilter_send_eof(InputFilter *ifilter, int64_t pts, AVRational tb);
 int ifilter_sub2video(InputFilter *ifilter, const AVSubtitle *sub);
diff --git a/fftools/ffmpeg_dec.c b/fftools/ffmpeg_dec.c
index 30959c64b7..799be63215 100644
--- a/fftools/ffmpeg_dec.c
+++ b/fftools/ffmpeg_dec.c
@@ -499,12 +499,11 @@ int dec_packet(InputStream *ist, const AVPacket *pkt, int no_eof)
             FrameData *fd;
 
             av_assert0(!frame->opaque_ref);
-            frame->opaque_ref = av_buffer_allocz(sizeof(*fd));
-            if (!frame->opaque_ref) {
+            fd      = frame_data(frame);
+            if (!fd) {
                 av_frame_unref(frame);
                 report_and_exit(AVERROR(ENOMEM));
             }
-            fd      = (FrameData*)frame->opaque_ref->data;
             fd->pts = frame->pts;
             fd->tb  = dec->pkt_timebase;
             fd->idx = dec->frame_num - 1;



More information about the ffmpeg-cvslog mailing list