[FFmpeg-cvslog] fftools/ffmpeg_dec: export subtitle_header in Decoder

Anton Khirnov git at videolan.org
Tue Jan 30 11:07:18 EET 2024


ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Wed Jan 10 12:20:32 2024 +0100| [b43d4a06925867fbbc0dbe21d63a3593253f672a] | committer: Anton Khirnov

fftools/ffmpeg_dec: export subtitle_header in Decoder

This way the encoder does not need to access the decoder AVCodecContext,
which will allow to make it private in future commits.

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

 fftools/ffmpeg.h     |  3 ++-
 fftools/ffmpeg_dec.c |  3 +++
 fftools/ffmpeg_enc.c | 19 ++++++++++---------
 3 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h
index 429c1aba85..4c9424d02f 100644
--- a/fftools/ffmpeg.h
+++ b/fftools/ffmpeg.h
@@ -281,7 +281,8 @@ typedef struct FilterGraph {
 } FilterGraph;
 
 typedef struct Decoder {
-    char dummy;
+    const uint8_t   *subtitle_header;
+    int              subtitle_header_size;
 } Decoder;
 
 typedef struct InputStream {
diff --git a/fftools/ffmpeg_dec.c b/fftools/ffmpeg_dec.c
index 16f653d52f..74f85f2ff7 100644
--- a/fftools/ffmpeg_dec.c
+++ b/fftools/ffmpeg_dec.c
@@ -969,5 +969,8 @@ int dec_open(InputStream *ist, Scheduler *sch, unsigned sch_idx)
     if (ret < 0)
         return ret;
 
+    dp->dec.subtitle_header      = ist->dec_ctx->subtitle_header;
+    dp->dec.subtitle_header_size = ist->dec_ctx->subtitle_header_size;
+
     return 0;
 }
diff --git a/fftools/ffmpeg_enc.c b/fftools/ffmpeg_enc.c
index 2a7fba0c51..bbd86a6fe1 100644
--- a/fftools/ffmpeg_enc.c
+++ b/fftools/ffmpeg_enc.c
@@ -171,7 +171,7 @@ int enc_open(void *opaque, const AVFrame *frame)
     InputStream *ist = ost->ist;
     Encoder              *e = ost->enc;
     AVCodecContext *enc_ctx = ost->enc_ctx;
-    AVCodecContext *dec_ctx = NULL;
+    Decoder            *dec;
     const AVCodec      *enc = enc_ctx->codec;
     OutputFile          *of = ost->file;
     FrameData *fd;
@@ -193,9 +193,8 @@ int enc_open(void *opaque, const AVFrame *frame)
     if (ret < 0)
         return ret;
 
-    if (ist) {
-        dec_ctx = ist->dec_ctx;
-    }
+    if (ist)
+        dec = ist->decoder;
 
     // the timebase is chosen by filtering code
     if (ost->type == AVMEDIA_TYPE_AUDIO || ost->type == AVMEDIA_TYPE_VIDEO) {
@@ -279,14 +278,16 @@ int enc_open(void *opaque, const AVFrame *frame)
             enc_ctx->width     = ost->ist->par->width;
             enc_ctx->height    = ost->ist->par->height;
         }
-        if (dec_ctx && dec_ctx->subtitle_header) {
+
+        av_assert0(dec);
+        if (dec->subtitle_header) {
             /* ASS code assumes this buffer is null terminated so add extra byte. */
-            enc_ctx->subtitle_header = av_mallocz(dec_ctx->subtitle_header_size + 1);
+            enc_ctx->subtitle_header = av_mallocz(dec->subtitle_header_size + 1);
             if (!enc_ctx->subtitle_header)
                 return AVERROR(ENOMEM);
-            memcpy(enc_ctx->subtitle_header, dec_ctx->subtitle_header,
-                   dec_ctx->subtitle_header_size);
-            enc_ctx->subtitle_header_size = dec_ctx->subtitle_header_size;
+            memcpy(enc_ctx->subtitle_header, dec->subtitle_header,
+                   dec->subtitle_header_size);
+            enc_ctx->subtitle_header_size = dec->subtitle_header_size;
         }
 
         break;



More information about the ffmpeg-cvslog mailing list