This way the encoder does not need to access the decoder AVCodecContext, which will allow to make it private in future commits. --- 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 fd697c5f1e..cb967d5930 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; -- 2.42.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".