Re: [FFmpeg-devel] [PATCH] aformat/movenc: add missing padding to output track extradata

2019-09-26 Thread James Almer
On 9/26/2019 3:04 PM, Thierry Foucu wrote:
> On Wed, Sep 25, 2019 at 10:30 AM James Almer  wrote:
> 
>> Fixes ticket #8183.
>>
>> Signed-off-by: James Almer 
>> ---
>>  libavformat/movenc.c | 15 ++-
>>  1 file changed, 10 insertions(+), 5 deletions(-)
>>
>> diff --git a/libavformat/movenc.c b/libavformat/movenc.c
>> index c824ff5ba1..e3283871d0 100644
>> --- a/libavformat/movenc.c
>> +++ b/libavformat/movenc.c
>> @@ -5377,12 +5377,13 @@ int ff_mov_write_packet(AVFormatContext *s,
>> AVPacket *pkt)
>>  !TAG_IS_AVCI(trk->tag) &&
>>  (par->codec_id != AV_CODEC_ID_DNXHD)) {
>>  trk->vos_len  = par->extradata_size;
>> -trk->vos_data = av_malloc(trk->vos_len);
>> +trk->vos_data = av_malloc(trk->vos_len +
>> AV_INPUT_BUFFER_PADDING_SIZE);
>>  if (!trk->vos_data) {
>>  ret = AVERROR(ENOMEM);
>>  goto err;
>>  }
>>  memcpy(trk->vos_data, par->extradata, trk->vos_len);
>> +memset(trk->vos_data + trk->vos_len, 0,
>> AV_INPUT_BUFFER_PADDING_SIZE);
>>  }
>>
>>  if (par->codec_id == AV_CODEC_ID_AAC && pkt->size > 2 &&
>> @@ -5460,12 +5461,13 @@ int ff_mov_write_packet(AVFormatContext *s,
>> AVPacket *pkt)
>>   par->codec_id == AV_CODEC_ID_AC3) && !trk->vos_len) {
>>  /* copy frame to create needed atoms */
>>  trk->vos_len  = size;
>> -trk->vos_data = av_malloc(size);
>> +trk->vos_data = av_malloc(size + AV_INPUT_BUFFER_PADDING_SIZE);
>>  if (!trk->vos_data) {
>>  ret = AVERROR(ENOMEM);
>>  goto err;
>>  }
>>  memcpy(trk->vos_data, pkt->data, size);
>> +memset(trk->vos_data + size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
>>  }
>>
>>  if (trk->entry >= trk->cluster_capacity) {
>> @@ -6090,12 +6092,13 @@ static int
>> mov_create_dvd_sub_decoder_specific_info(MOVTrack *track,
>>  cur += strspn(cur, "\n\r");
>>  }
>>  if (have_palette) {
>> -track->vos_data = av_malloc(16*4);
>> +track->vos_data = av_malloc(16*4 + AV_INPUT_BUFFER_PADDING_SIZE);
>>  if (!track->vos_data)
>>  return AVERROR(ENOMEM);
>>  for (i = 0; i < 16; i++) {
>>  AV_WB32(track->vos_data + i * 4, palette[i]);
>>  }
>> +memset(track->vos_data + 16*4, 0, AV_INPUT_BUFFER_PADDING_SIZE);
>>  track->vos_len = 16 * 4;
>>  }
>>  st->codecpar->width = width;
>> @@ -6453,11 +6456,12 @@ static int mov_write_header(AVFormatContext *s)
>>  mov_create_dvd_sub_decoder_specific_info(track, st);
>>  else if (!TAG_IS_AVCI(track->tag) && st->codecpar->codec_id
>> != AV_CODEC_ID_DNXHD) {
>>  track->vos_len  = st->codecpar->extradata_size;
>> -track->vos_data = av_malloc(track->vos_len);
>> +track->vos_data = av_malloc(track->vos_len +
>> AV_INPUT_BUFFER_PADDING_SIZE);
>>  if (!track->vos_data) {
>>  return AVERROR(ENOMEM);
>>  }
>>  memcpy(track->vos_data, st->codecpar->extradata,
>> track->vos_len);
>> +memset(track->vos_data + track->vos_len, 0,
>> AV_INPUT_BUFFER_PADDING_SIZE);
>>  }
>>  }
>>
>> @@ -6713,10 +6717,11 @@ static int mov_write_trailer(AVFormatContext *s)
>>  AVCodecParameters *par = track->par;
>>
>>  track->vos_len  = par->extradata_size;
>> -track->vos_data = av_malloc(track->vos_len);
>> +track->vos_data = av_malloc(track->vos_len +
>> AV_INPUT_BUFFER_PADDING_SIZE);
>>  if (!track->vos_data)
>>  return AVERROR(ENOMEM);
>>  memcpy(track->vos_data, par->extradata, track->vos_len);
>> +memset(track->vos_data + track->vos_len, 0,
>> AV_INPUT_BUFFER_PADDING_SIZE);
>>  }
>>  mov->need_rewrite_extradata = 0;
>>  }
>> --
>> 2.22.0
>>
>>
> I confirm that this patch fixes the issue i have here as well.

Applied, thanks.
___
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".

Re: [FFmpeg-devel] [PATCH] aformat/movenc: add missing padding to output track extradata

2019-09-26 Thread Thierry Foucu
On Wed, Sep 25, 2019 at 10:30 AM James Almer  wrote:

> Fixes ticket #8183.
>
> Signed-off-by: James Almer 
> ---
>  libavformat/movenc.c | 15 ++-
>  1 file changed, 10 insertions(+), 5 deletions(-)
>
> diff --git a/libavformat/movenc.c b/libavformat/movenc.c
> index c824ff5ba1..e3283871d0 100644
> --- a/libavformat/movenc.c
> +++ b/libavformat/movenc.c
> @@ -5377,12 +5377,13 @@ int ff_mov_write_packet(AVFormatContext *s,
> AVPacket *pkt)
>  !TAG_IS_AVCI(trk->tag) &&
>  (par->codec_id != AV_CODEC_ID_DNXHD)) {
>  trk->vos_len  = par->extradata_size;
> -trk->vos_data = av_malloc(trk->vos_len);
> +trk->vos_data = av_malloc(trk->vos_len +
> AV_INPUT_BUFFER_PADDING_SIZE);
>  if (!trk->vos_data) {
>  ret = AVERROR(ENOMEM);
>  goto err;
>  }
>  memcpy(trk->vos_data, par->extradata, trk->vos_len);
> +memset(trk->vos_data + trk->vos_len, 0,
> AV_INPUT_BUFFER_PADDING_SIZE);
>  }
>
>  if (par->codec_id == AV_CODEC_ID_AAC && pkt->size > 2 &&
> @@ -5460,12 +5461,13 @@ int ff_mov_write_packet(AVFormatContext *s,
> AVPacket *pkt)
>   par->codec_id == AV_CODEC_ID_AC3) && !trk->vos_len) {
>  /* copy frame to create needed atoms */
>  trk->vos_len  = size;
> -trk->vos_data = av_malloc(size);
> +trk->vos_data = av_malloc(size + AV_INPUT_BUFFER_PADDING_SIZE);
>  if (!trk->vos_data) {
>  ret = AVERROR(ENOMEM);
>  goto err;
>  }
>  memcpy(trk->vos_data, pkt->data, size);
> +memset(trk->vos_data + size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
>  }
>
>  if (trk->entry >= trk->cluster_capacity) {
> @@ -6090,12 +6092,13 @@ static int
> mov_create_dvd_sub_decoder_specific_info(MOVTrack *track,
>  cur += strspn(cur, "\n\r");
>  }
>  if (have_palette) {
> -track->vos_data = av_malloc(16*4);
> +track->vos_data = av_malloc(16*4 + AV_INPUT_BUFFER_PADDING_SIZE);
>  if (!track->vos_data)
>  return AVERROR(ENOMEM);
>  for (i = 0; i < 16; i++) {
>  AV_WB32(track->vos_data + i * 4, palette[i]);
>  }
> +memset(track->vos_data + 16*4, 0, AV_INPUT_BUFFER_PADDING_SIZE);
>  track->vos_len = 16 * 4;
>  }
>  st->codecpar->width = width;
> @@ -6453,11 +6456,12 @@ static int mov_write_header(AVFormatContext *s)
>  mov_create_dvd_sub_decoder_specific_info(track, st);
>  else if (!TAG_IS_AVCI(track->tag) && st->codecpar->codec_id
> != AV_CODEC_ID_DNXHD) {
>  track->vos_len  = st->codecpar->extradata_size;
> -track->vos_data = av_malloc(track->vos_len);
> +track->vos_data = av_malloc(track->vos_len +
> AV_INPUT_BUFFER_PADDING_SIZE);
>  if (!track->vos_data) {
>  return AVERROR(ENOMEM);
>  }
>  memcpy(track->vos_data, st->codecpar->extradata,
> track->vos_len);
> +memset(track->vos_data + track->vos_len, 0,
> AV_INPUT_BUFFER_PADDING_SIZE);
>  }
>  }
>
> @@ -6713,10 +6717,11 @@ static int mov_write_trailer(AVFormatContext *s)
>  AVCodecParameters *par = track->par;
>
>  track->vos_len  = par->extradata_size;
> -track->vos_data = av_malloc(track->vos_len);
> +track->vos_data = av_malloc(track->vos_len +
> AV_INPUT_BUFFER_PADDING_SIZE);
>  if (!track->vos_data)
>  return AVERROR(ENOMEM);
>  memcpy(track->vos_data, par->extradata, track->vos_len);
> +memset(track->vos_data + track->vos_len, 0,
> AV_INPUT_BUFFER_PADDING_SIZE);
>  }
>  mov->need_rewrite_extradata = 0;
>  }
> --
> 2.22.0
>
>
I confirm that this patch fixes the issue i have here as well.


> ___
> 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".
___
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".

[FFmpeg-devel] [PATCH] aformat/movenc: add missing padding to output track extradata

2019-09-25 Thread James Almer
Fixes ticket #8183.

Signed-off-by: James Almer 
---
 libavformat/movenc.c | 15 ++-
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index c824ff5ba1..e3283871d0 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -5377,12 +5377,13 @@ int ff_mov_write_packet(AVFormatContext *s, AVPacket 
*pkt)
 !TAG_IS_AVCI(trk->tag) &&
 (par->codec_id != AV_CODEC_ID_DNXHD)) {
 trk->vos_len  = par->extradata_size;
-trk->vos_data = av_malloc(trk->vos_len);
+trk->vos_data = av_malloc(trk->vos_len + AV_INPUT_BUFFER_PADDING_SIZE);
 if (!trk->vos_data) {
 ret = AVERROR(ENOMEM);
 goto err;
 }
 memcpy(trk->vos_data, par->extradata, trk->vos_len);
+memset(trk->vos_data + trk->vos_len, 0, AV_INPUT_BUFFER_PADDING_SIZE);
 }
 
 if (par->codec_id == AV_CODEC_ID_AAC && pkt->size > 2 &&
@@ -5460,12 +5461,13 @@ int ff_mov_write_packet(AVFormatContext *s, AVPacket 
*pkt)
  par->codec_id == AV_CODEC_ID_AC3) && !trk->vos_len) {
 /* copy frame to create needed atoms */
 trk->vos_len  = size;
-trk->vos_data = av_malloc(size);
+trk->vos_data = av_malloc(size + AV_INPUT_BUFFER_PADDING_SIZE);
 if (!trk->vos_data) {
 ret = AVERROR(ENOMEM);
 goto err;
 }
 memcpy(trk->vos_data, pkt->data, size);
+memset(trk->vos_data + size, 0, AV_INPUT_BUFFER_PADDING_SIZE);
 }
 
 if (trk->entry >= trk->cluster_capacity) {
@@ -6090,12 +6092,13 @@ static int 
mov_create_dvd_sub_decoder_specific_info(MOVTrack *track,
 cur += strspn(cur, "\n\r");
 }
 if (have_palette) {
-track->vos_data = av_malloc(16*4);
+track->vos_data = av_malloc(16*4 + AV_INPUT_BUFFER_PADDING_SIZE);
 if (!track->vos_data)
 return AVERROR(ENOMEM);
 for (i = 0; i < 16; i++) {
 AV_WB32(track->vos_data + i * 4, palette[i]);
 }
+memset(track->vos_data + 16*4, 0, AV_INPUT_BUFFER_PADDING_SIZE);
 track->vos_len = 16 * 4;
 }
 st->codecpar->width = width;
@@ -6453,11 +6456,12 @@ static int mov_write_header(AVFormatContext *s)
 mov_create_dvd_sub_decoder_specific_info(track, st);
 else if (!TAG_IS_AVCI(track->tag) && st->codecpar->codec_id != 
AV_CODEC_ID_DNXHD) {
 track->vos_len  = st->codecpar->extradata_size;
-track->vos_data = av_malloc(track->vos_len);
+track->vos_data = av_malloc(track->vos_len + 
AV_INPUT_BUFFER_PADDING_SIZE);
 if (!track->vos_data) {
 return AVERROR(ENOMEM);
 }
 memcpy(track->vos_data, st->codecpar->extradata, 
track->vos_len);
+memset(track->vos_data + track->vos_len, 0, 
AV_INPUT_BUFFER_PADDING_SIZE);
 }
 }
 
@@ -6713,10 +6717,11 @@ static int mov_write_trailer(AVFormatContext *s)
 AVCodecParameters *par = track->par;
 
 track->vos_len  = par->extradata_size;
-track->vos_data = av_malloc(track->vos_len);
+track->vos_data = av_malloc(track->vos_len + 
AV_INPUT_BUFFER_PADDING_SIZE);
 if (!track->vos_data)
 return AVERROR(ENOMEM);
 memcpy(track->vos_data, par->extradata, track->vos_len);
+memset(track->vos_data + track->vos_len, 0, 
AV_INPUT_BUFFER_PADDING_SIZE);
 }
 mov->need_rewrite_extradata = 0;
 }
-- 
2.22.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".