Message ID | 20160817095334.15855-1-michael@niedermayer.cc |
---|---|
State | Rejected |
Headers | show |
On 8/17/16, Michael Niedermayer <michael@niedermayer.cc> wrote: > This is needed for encoders which store a final sample count or checksum in > extradata > > alternatively every encoder as well as muxer can implement > AV_PKT_DATA_NEW_EXTRADATA support > to update the extradata at the end. > > Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> > --- > ffmpeg.c | 17 +++++++++++++++++ > 1 file changed, 17 insertions(+) > > diff --git a/ffmpeg.c b/ffmpeg.c > index bae515d..9d972d0 100644 > --- a/ffmpeg.c > +++ b/ffmpeg.c > @@ -1772,6 +1772,23 @@ static void flush_encoders(void) > if (stop_encoding) > break; > } > + if (ost->enc_ctx->extradata_size) { > + void *ptr = av_mallocz(ost->enc_ctx->extradata_size + > AV_INPUT_BUFFER_PADDING_SIZE); > + void *ptr2 = av_mallocz(ost->enc_ctx->extradata_size + > AV_INPUT_BUFFER_PADDING_SIZE); > + if (ptr && ptr2) { > + av_free(ost->st->codec->extradata); > + av_free(ost->st->codecpar->extradata); > + ost->st->codec->extradata = ptr; > + ost->st->codecpar->extradata = ptr2; > + memcpy(ost->st->codec->extradata , > ost->enc_ctx->extradata, ost->enc_ctx->extradata_size); > + memcpy(ost->st->codecpar->extradata, > ost->enc_ctx->extradata, ost->enc_ctx->extradata_size); > + ost->st->codec ->extradata_size = > ost->enc_ctx->extradata_size; > + ost->st->codecpar->extradata_size = > ost->enc_ctx->extradata_size; > + } else { > + av_free(ptr); > + av_free(ptr2); > + } > + } > } > } I'm against this patch. Use API already available, don't add hacks on top of hacks.
Hi, On Wed, Aug 17, 2016 at 3:43 PM, Paul B Mahol <onemda@gmail.com> wrote: > On 8/17/16, Michael Niedermayer <michael@niedermayer.cc> wrote: >> This is needed for encoders which store a final sample count or checksum in >> extradata >> >> alternatively every encoder as well as muxer can implement >> AV_PKT_DATA_NEW_EXTRADATA support >> to update the extradata at the end. >> >> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> >> --- >> ffmpeg.c | 17 +++++++++++++++++ >> 1 file changed, 17 insertions(+) >> >> diff --git a/ffmpeg.c b/ffmpeg.c >> index bae515d..9d972d0 100644 >> --- a/ffmpeg.c >> +++ b/ffmpeg.c >> @@ -1772,6 +1772,23 @@ static void flush_encoders(void) >> if (stop_encoding) >> break; >> } >> + if (ost->enc_ctx->extradata_size) { >> + void *ptr = av_mallocz(ost->enc_ctx->extradata_size + >> AV_INPUT_BUFFER_PADDING_SIZE); >> + void *ptr2 = av_mallocz(ost->enc_ctx->extradata_size + >> AV_INPUT_BUFFER_PADDING_SIZE); >> + if (ptr && ptr2) { >> + av_free(ost->st->codec->extradata); >> + av_free(ost->st->codecpar->extradata); >> + ost->st->codec->extradata = ptr; >> + ost->st->codecpar->extradata = ptr2; >> + memcpy(ost->st->codec->extradata , >> ost->enc_ctx->extradata, ost->enc_ctx->extradata_size); >> + memcpy(ost->st->codecpar->extradata, >> ost->enc_ctx->extradata, ost->enc_ctx->extradata_size); >> + ost->st->codec ->extradata_size = >> ost->enc_ctx->extradata_size; >> + ost->st->codecpar->extradata_size = >> ost->enc_ctx->extradata_size; >> + } else { >> + av_free(ptr); >> + av_free(ptr2); >> + } >> + } >> } >> } > > I'm against this patch. Use API already available, don't add hacks on > top of hacks. I had a look at the mp4 muxer code. And it itself doesn't implement the AV_PKT_DATA_NEW_EXTRADATA api. I'll try to implement that in the mp4 muxer now. - Umair
Hi, On Wed, Aug 17, 2016 at 10:44 PM, Umair Khan <omerjerk@gmail.com> wrote: > Hi, > > On Wed, Aug 17, 2016 at 3:43 PM, Paul B Mahol <onemda@gmail.com> wrote: >> On 8/17/16, Michael Niedermayer <michael@niedermayer.cc> wrote: >>> This is needed for encoders which store a final sample count or checksum in >>> extradata >>> >>> alternatively every encoder as well as muxer can implement >>> AV_PKT_DATA_NEW_EXTRADATA support >>> to update the extradata at the end. >>> >>> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> >>> --- >>> ffmpeg.c | 17 +++++++++++++++++ >>> 1 file changed, 17 insertions(+) >>> >>> diff --git a/ffmpeg.c b/ffmpeg.c >>> index bae515d..9d972d0 100644 >>> --- a/ffmpeg.c >>> +++ b/ffmpeg.c >>> @@ -1772,6 +1772,23 @@ static void flush_encoders(void) >>> if (stop_encoding) >>> break; >>> } >>> + if (ost->enc_ctx->extradata_size) { >>> + void *ptr = av_mallocz(ost->enc_ctx->extradata_size + >>> AV_INPUT_BUFFER_PADDING_SIZE); >>> + void *ptr2 = av_mallocz(ost->enc_ctx->extradata_size + >>> AV_INPUT_BUFFER_PADDING_SIZE); >>> + if (ptr && ptr2) { >>> + av_free(ost->st->codec->extradata); >>> + av_free(ost->st->codecpar->extradata); >>> + ost->st->codec->extradata = ptr; >>> + ost->st->codecpar->extradata = ptr2; >>> + memcpy(ost->st->codec->extradata , >>> ost->enc_ctx->extradata, ost->enc_ctx->extradata_size); >>> + memcpy(ost->st->codecpar->extradata, >>> ost->enc_ctx->extradata, ost->enc_ctx->extradata_size); >>> + ost->st->codec ->extradata_size = >>> ost->enc_ctx->extradata_size; >>> + ost->st->codecpar->extradata_size = >>> ost->enc_ctx->extradata_size; >>> + } else { >>> + av_free(ptr); >>> + av_free(ptr2); >>> + } >>> + } >>> } >>> } >> >> I'm against this patch. Use API already available, don't add hacks on >> top of hacks. > > I had a look at the mp4 muxer code. And it itself doesn't implement > the AV_PKT_DATA_NEW_EXTRADATA api. > I'll try to implement that in the mp4 muxer now. I've sent the patch to the mailing list. Please review it. Meanwhile, I'll finalise my alsenc patch. :) - Umair
diff --git a/ffmpeg.c b/ffmpeg.c index bae515d..9d972d0 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -1772,6 +1772,23 @@ static void flush_encoders(void) if (stop_encoding) break; } + if (ost->enc_ctx->extradata_size) { + void *ptr = av_mallocz(ost->enc_ctx->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE); + void *ptr2 = av_mallocz(ost->enc_ctx->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE); + if (ptr && ptr2) { + av_free(ost->st->codec->extradata); + av_free(ost->st->codecpar->extradata); + ost->st->codec->extradata = ptr; + ost->st->codecpar->extradata = ptr2; + memcpy(ost->st->codec->extradata , ost->enc_ctx->extradata, ost->enc_ctx->extradata_size); + memcpy(ost->st->codecpar->extradata, ost->enc_ctx->extradata, ost->enc_ctx->extradata_size); + ost->st->codec ->extradata_size = ost->enc_ctx->extradata_size; + ost->st->codecpar->extradata_size = ost->enc_ctx->extradata_size; + } else { + av_free(ptr); + av_free(ptr2); + } + } } }
This is needed for encoders which store a final sample count or checksum in extradata alternatively every encoder as well as muxer can implement AV_PKT_DATA_NEW_EXTRADATA support to update the extradata at the end. Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> --- ffmpeg.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)