Re: [FFmpeg-devel] [PATCH] lavf/mov: atom box parsing returneofcause play fail

2017-12-11 Thread Tiejun.Peng
yes, it  is.
maybe we should add every stream's status and the whole file status can't  be 
fail only by  one of streams.
but the modification will be too much and the effect  is extensive.



-- Original --
From:  "Michael Niedermayer";<mich...@niedermayer.cc>;
Send time: Saturday, Dec 9, 2017 3:36 AM
To: "FFmpeg development discussions and patches"<ffmpeg-devel@ffmpeg.org>; 

Subject:  Re: [FFmpeg-devel] [PATCH] lavf/mov: atom box parsing returneofcause 
play fail

On Sat, Dec 09, 2017 at 12:06:47AM +0800, Tiejun.Peng wrote: > yes,  i have 
checked this case and i have done a lot of tests  with .mp4 file and fate  
Please correct me if iam wrong there are many different atoms/boxes and many 
functions parsing them If any of these return EOF, it has previously been 
consideered an error now it can be handled as not an error. Noone has reviewed 
most of this code to be safe after the change. It doesnt crash in fate or with 
some valid mp4 files When a parsing function hits EOF it may return EOF. This 
can occur in the middle of the function, initializing some but not all of what 
it does normally. Previously this would stop the demuxer and trigger cleanup, 
after the change the code continues and may behave badly when it uses half 
initialized structures
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH] lavf/mp3dec: fix mp3 file probe fail

2017-12-08 Thread Tiejun.Peng
i agree with you. too much  experience value in condition of Judgement  like 
this:
"else if(max_frames>=4 && max_frames >= p->buf_size/1)".
 why  it is the value ? it is hard to known. 
maybe  the work of cleaned up  need a few days, so i just  repair of the probe.


-- Original --
From:  "wm4";<nfx...@googlemail.com>;
Send time: Thursday, Dec 7, 2017 9:16 PM
To: "ffmpeg-devel"<ffmpeg-devel@ffmpeg.org>; 

Subject:  Re: [FFmpeg-devel] [PATCH] lavf/mp3dec: fix mp3 file probe fail



On Wed,  6 Dec 2017 17:27:43 +0800
"tiejun.peng" <tiejun.p...@foxmail.com> wrote:

> fix #6895: https://trac.ffmpeg.org/ticket/6895
> stream:https://trac.ffmpeg.org/attachment/ticket/6895/music_mp3
> 
> Signed-off-by: tiejun.peng <tiejun.p...@foxmail.com>
> ---
>  libavformat/mp3dec.c | 4 
>  1 file changed, 4 insertions(+)
> 
> diff --git a/libavformat/mp3dec.c b/libavformat/mp3dec.c
> index a76fe32..286eb68 100644
> --- a/libavformat/mp3dec.c
> +++ b/libavformat/mp3dec.c
> @@ -73,6 +73,7 @@ static int mp3_read_probe(AVProbeData *p)
>  int frames, ret;
>  uint32_t header;
>  const uint8_t *buf, *buf0, *buf2, *end;
> +int match_size = 0;
>  
>  buf0 = p->buf;
>  end = p->buf + p->buf_size - sizeof(uint32_t);
> @@ -92,6 +93,7 @@ static int mp3_read_probe(AVProbeData *p)
>  if (ret != 0)
>  break;
>  buf2 += h.frame_size;
> +match_size += h.frame_size;
>  }
>  max_frames = FFMAX(max_frames, frames);
>  if(buf == buf0) {
> @@ -104,6 +106,8 @@ static int mp3_read_probe(AVProbeData *p)
>  // issues with MPEG-files!
>  if   (first_frames>=7) return AVPROBE_SCORE_EXTENSION + 1;
>  else if(max_frames>200)return AVPROBE_SCORE_EXTENSION;
> +// over 50% of probe size is valid
> +else if (p->buf_size > 1 && match_size > (p->buf_size/2)) return 
> AVPROBE_SCORE_EXTENSION;
>  else if(max_frames>=4 && max_frames >= p->buf_size/1) return 
> AVPROBE_SCORE_EXTENSION / 2;
>  else if(ff_id3v2_match(buf0, ID3v2_DEFAULT_MAGIC) && 
> 2*ff_id3v2_tag_len(buf0) >= p->buf_size)
> return p->buf_size < PROBE_BUF_MAX ? 
> AVPROBE_SCORE_EXTENSION / 4 : AVPROBE_SCORE_EXTENSION - 2;

That doesn't necessarily affect whether this patch should be applied,
but: I think this mp4 probe should really be cleaned up. It's one of
the most complex probe functions, and it doesn't even work correctly.
It still detects some ELF files as mp3 (or mp1/2), for example.
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH] lavf/mp3dec: fix mp3 file probe fail

2017-12-08 Thread Tiejun.Peng
sorry , i can't  produce the output file of  pcm with vlc .
below link  is the vlc record file, maybe it is useful for you. i try to play 
it with ffmpeg is ok.

https://trac.ffmpeg.org/attachment/ticket/6895/vlc-record-2017-12-09-01h02m32s-music_mp3-.mp3




-- Original --
From:  "Carl Eugen Hoyos";<ceffm...@gmail.com>;
Send time: Saturday, Dec 9, 2017 0:21 AM
To: "FFmpeg development discussions and patches"<ffmpeg-devel@ffmpeg.org>; 

Subject:  Re: [FFmpeg-devel] [PATCH] lavf/mp3dec: fix mp3 file probe fail



2017-12-08 17:13 GMT+01:00 Tiejun.Peng <tiejun.p...@foxmail.com>:
> can this commit  be merged into master?

Given that it would introduce a regression, I guess not.

More important though: I cannot reproduce successful
playback with vlc - can you provide the output file that
vlc produces for you?

Please do not top-post here, Carl Eugen
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH V2] lavf/mov: atom box parsing return eof cause play fail

2017-12-08 Thread tiejun.peng
fix eof lead to play fail.

Signed-off-by: tiejun.peng <tiejun.p...@foxmail.com>
---
 libavformat/mov.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/libavformat/mov.c b/libavformat/mov.c
index 180b6f4..870fdd6 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -6632,7 +6632,9 @@ static int mov_read_header(AVFormatContext *s)
 do {
 if (mov->moov_retry)
 avio_seek(pb, 0, SEEK_SET);
-if ((err = mov_read_default(mov, pb, atom)) < 0) {
+/* EOF don't mean the file to play fail*/
+err = mov_read_default(mov, pb, atom);
+if (err < 0 && err != AVERROR_EOF) {
 av_log(s, AV_LOG_ERROR, "error reading header\n");
 mov_read_close(s);
 return err;
-- 
2.7.4



___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH] lavf/mov: modify code indentation

2017-12-08 Thread tiejun.peng
Signed-off-by: tiejun.peng <tiejun.p...@foxmail.com>
---
 libavformat/mov.c | 14 +++---
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/libavformat/mov.c b/libavformat/mov.c
index 9982204..180b6f4 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -6630,13 +6630,13 @@ static int mov_read_header(AVFormatContext *s)
 
 /* check MOV header */
 do {
-if (mov->moov_retry)
-avio_seek(pb, 0, SEEK_SET);
-if ((err = mov_read_default(mov, pb, atom)) < 0) {
-av_log(s, AV_LOG_ERROR, "error reading header\n");
-mov_read_close(s);
-return err;
-}
+if (mov->moov_retry)
+avio_seek(pb, 0, SEEK_SET);
+if ((err = mov_read_default(mov, pb, atom)) < 0) {
+av_log(s, AV_LOG_ERROR, "error reading header\n");
+mov_read_close(s);
+return err;
+}
 } while ((pb->seekable & AVIO_SEEKABLE_NORMAL) && !mov->found_moov && 
!mov->moov_retry++);
 if (!mov->found_moov) {
 av_log(s, AV_LOG_ERROR, "moov atom not found\n");
-- 
2.7.4



___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH] lavf/mov: add some useful warning log of eof

2017-12-08 Thread tiejun.peng
Signed-off-by: tiejun.peng <tiejun.p...@foxmail.com>
---
 libavformat/mov.c | 43 +--
 1 file changed, 33 insertions(+), 10 deletions(-)

diff --git a/libavformat/mov.c b/libavformat/mov.c
index c901859..9982204 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -1991,8 +1991,10 @@ static int mov_read_stco(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 sc->chunk_count = i;
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STCO atom\n");
 return AVERROR_EOF;
+}
 
 return 0;
 }
@@ -2522,8 +2524,10 @@ int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext 
*pb, int entries)
 sc->stsd_count++;
 }
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STSD atom\n");
 return AVERROR_EOF;
+}
 
 return 0;
 }
@@ -2624,8 +2628,10 @@ static int mov_read_stsc(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 sc->stsc_count = i;
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STSC atom\n");
 return AVERROR_EOF;
+}
 
 return 0;
 }
@@ -2676,8 +2682,10 @@ static int mov_read_stps(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 sc->stps_count = i;
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STPS atom\n");
 return AVERROR_EOF;
+}
 
 return 0;
 }
@@ -2723,8 +2731,10 @@ static int mov_read_stss(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 sc->keyframe_count = i;
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STSS atom\n");
 return AVERROR_EOF;
+}
 
 return 0;
 }
@@ -2808,8 +2818,10 @@ static int mov_read_stsz(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 av_free(buf);
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STSZ atom\n");
 return AVERROR_EOF;
+}
 
 return 0;
 }
@@ -2870,8 +2882,10 @@ static int mov_read_stts(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 sc->duration_for_fps  += duration;
 sc->nb_frames_for_fps += total_sample_count;
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STTS atom\n");
 return AVERROR_EOF;
+}
 
 st->nb_frames= total_sample_count;
 if (duration)
@@ -2948,8 +2962,10 @@ static int mov_read_ctts(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 sc->ctts_count = ctts_count;
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted CTTS atom\n");
 return AVERROR_EOF;
+}
 
 av_log(c->fc, AV_LOG_TRACE, "dts shift %d\n", sc->dts_shift);
 
@@ -2995,7 +3011,12 @@ static int mov_read_sbgp(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 sc->rap_group_count = i;
 
-return pb->eof_reached ? AVERROR_EOF : 0;
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted SBGP atom\n");
+return AVERROR_EOF;
+}
+
+return 0;
 }
 
 /**
@@ -4720,8 +4741,10 @@ static int mov_read_trun(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 fix_frag_index_entries(>frag_index, next_frag_index,
frag->track_id, entries);
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted TRUN atom\n");
 return AVERROR_EOF;
+}
 
 frag->implicit_offset = offset;
 
-- 
2.7.4



___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH] lavf/mp3dec: fix mp3 file probe fail

2017-12-08 Thread Tiejun.Peng
can this commit  be merged into master?
-- Original --
From:  "Tiejun.Peng";<tiejun.p...@foxmail.com>;
Send time: Thursday, Dec 7, 2017 5:32 PM
To: "FFmpeg development discussions and patches"<ffmpeg-devel@ffmpeg.org>; 

Subject:  Re: [FFmpeg-devel] [PATCH] lavf/mp3dec: fix mp3 file probe fail



Playback of the mp3 file sounds very good with VLC media player 2.2.2 
Weatherwax (revision 2.2.2-0-g6259d80)


Tiejun Peng

-- Original --
From:  "Carl Eugen Hoyos";<ceffm...@gmail.com>;
Send time: Thursday, Dec 7, 2017 0:00 AM
To: "FFmpeg development discussions and patches"<ffmpeg-devel@ffmpeg.org>; 

Subject:  Re: [FFmpeg-devel] [PATCH] lavf/mp3dec: fix mp3 file probe fail



2017-12-06 10:27 GMT+01:00 tiejun.peng <tiejun.p...@foxmail.com>:
> fix #6895: https://trac.ffmpeg.org/ticket/6895

The patch breaks issue3327-libc-2.17.so

> stream:https://trac.ffmpeg.org/attachment/ticket/6895/music_mp3

Which player does something useful with this file?

I am not saying there can't be an issue, but not detecting
severely broken files does not sound necessarily wrong
to me.

Carl Eugen
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH] lavf/mov: atom box parsing return eofcause play fail

2017-12-08 Thread Tiejun.Peng
yes,  i have checked this case and i have done a lot of tests  with .mp4 file 
and fate

-- Original --
From:  "Michael Niedermayer";<mich...@niedermayer.cc>;
Send time: Friday, Dec 8, 2017 4:42 AM
To: "FFmpeg development discussions and patches"<ffmpeg-devel@ffmpeg.org>; 
Subject:  Re: [FFmpeg-devel] [PATCH] lavf/mov: atom box parsing return eofcause 
play fail

On Thu, Dec 07, 2017 at 05:47:46PM +0800, tiejun.peng wrote: > fix eof lead to 
play fail. >  > Signed-off-by: tiejun.peng  > --- > 
 libavformat/mov.c | 47 --- >  1 
file changed, 36 insertions(+), 11 deletions(-)  please split the addition of 
warning messages from the change to EOF behavior did you check that every EOF 
return case is safe to continue as if no error occured ? That change has quite 
wide effects possibly unless i misunderstand. [...] --  Michael GnuPG 
fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH] lavf/mov: atom box parsing return eof cause play fail

2017-12-07 Thread tiejun.peng
fix eof lead to play fail.

Signed-off-by: tiejun.peng <tiejun.p...@foxmail.com>
---
 libavformat/mov.c | 47 ---
 1 file changed, 36 insertions(+), 11 deletions(-)

diff --git a/libavformat/mov.c b/libavformat/mov.c
index c901859..6c3567f 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -1991,8 +1991,10 @@ static int mov_read_stco(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 sc->chunk_count = i;
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STCO atom\n");
 return AVERROR_EOF;
+}
 
 return 0;
 }
@@ -2522,8 +2524,10 @@ int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext 
*pb, int entries)
 sc->stsd_count++;
 }
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STSD atom\n");
 return AVERROR_EOF;
+}
 
 return 0;
 }
@@ -2624,8 +2628,10 @@ static int mov_read_stsc(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 sc->stsc_count = i;
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STSC atom\n");
 return AVERROR_EOF;
+}
 
 return 0;
 }
@@ -2676,8 +2682,10 @@ static int mov_read_stps(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 sc->stps_count = i;
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STPS atom\n");
 return AVERROR_EOF;
+}
 
 return 0;
 }
@@ -2723,8 +2731,10 @@ static int mov_read_stss(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 sc->keyframe_count = i;
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STSS atom\n");
 return AVERROR_EOF;
+}
 
 return 0;
 }
@@ -2808,8 +2818,10 @@ static int mov_read_stsz(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 av_free(buf);
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STSZ atom\n");
 return AVERROR_EOF;
+}
 
 return 0;
 }
@@ -2870,8 +2882,10 @@ static int mov_read_stts(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 sc->duration_for_fps  += duration;
 sc->nb_frames_for_fps += total_sample_count;
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STTS atom\n");
 return AVERROR_EOF;
+}
 
 st->nb_frames= total_sample_count;
 if (duration)
@@ -2948,8 +2962,10 @@ static int mov_read_ctts(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 sc->ctts_count = ctts_count;
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted CTTS atom\n");
 return AVERROR_EOF;
+}
 
 av_log(c->fc, AV_LOG_TRACE, "dts shift %d\n", sc->dts_shift);
 
@@ -2995,7 +3011,12 @@ static int mov_read_sbgp(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 sc->rap_group_count = i;
 
-return pb->eof_reached ? AVERROR_EOF : 0;
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted SBGP atom\n");
+return AVERROR_EOF;
+}
+
+return 0;
 }
 
 /**
@@ -4720,8 +4741,10 @@ static int mov_read_trun(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 fix_frag_index_entries(>frag_index, next_frag_index,
frag->track_id, entries);
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted TRUN atom\n");
 return AVERROR_EOF;
+}
 
 frag->implicit_offset = offset;
 
@@ -6609,7 +6632,9 @@ static int mov_read_header(AVFormatContext *s)
 do {
 if (mov->moov_retry)
 avio_seek(pb, 0, SEEK_SET);
-if ((err = mov_read_default(mov, pb, atom)) < 0) {
+/* EOF don't mean the file to play fail*/
+err = mov_read_default(mov, pb, atom);
+if (err < 0 && err != AVERROR_EOF) {
 av_log(s, AV_LOG_ERROR, "error reading header\n");
 mov_read_close(s);
 return err;
-- 
2.7.4



___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH] lavf/mp3dec: fix mp3 file probe fail

2017-12-07 Thread Tiejun.Peng
Playback of the mp3 file sounds very good with VLC media player 2.2.2 
Weatherwax (revision 2.2.2-0-g6259d80)


Tiejun Peng

-- Original --
From:  "Carl Eugen Hoyos";<ceffm...@gmail.com>;
Send time: Thursday, Dec 7, 2017 0:00 AM
To: "FFmpeg development discussions and patches"<ffmpeg-devel@ffmpeg.org>; 

Subject:  Re: [FFmpeg-devel] [PATCH] lavf/mp3dec: fix mp3 file probe fail



2017-12-06 10:27 GMT+01:00 tiejun.peng <tiejun.p...@foxmail.com>:
> fix #6895: https://trac.ffmpeg.org/ticket/6895

The patch breaks issue3327-libc-2.17.so

> stream:https://trac.ffmpeg.org/attachment/ticket/6895/music_mp3

Which player does something useful with this file?

I am not saying there can't be an issue, but not detecting
severely broken files does not sound necessarily wrong
to me.

Carl Eugen
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH] lavf/mp3dec: fix mp3 file probe fail

2017-12-06 Thread tiejun.peng
fix #6895: https://trac.ffmpeg.org/ticket/6895
stream:https://trac.ffmpeg.org/attachment/ticket/6895/music_mp3

Signed-off-by: tiejun.peng <tiejun.p...@foxmail.com>
---
 libavformat/mp3dec.c | 4 
 1 file changed, 4 insertions(+)

diff --git a/libavformat/mp3dec.c b/libavformat/mp3dec.c
index a76fe32..286eb68 100644
--- a/libavformat/mp3dec.c
+++ b/libavformat/mp3dec.c
@@ -73,6 +73,7 @@ static int mp3_read_probe(AVProbeData *p)
 int frames, ret;
 uint32_t header;
 const uint8_t *buf, *buf0, *buf2, *end;
+int match_size = 0;
 
 buf0 = p->buf;
 end = p->buf + p->buf_size - sizeof(uint32_t);
@@ -92,6 +93,7 @@ static int mp3_read_probe(AVProbeData *p)
 if (ret != 0)
 break;
 buf2 += h.frame_size;
+match_size += h.frame_size;
 }
 max_frames = FFMAX(max_frames, frames);
 if(buf == buf0) {
@@ -104,6 +106,8 @@ static int mp3_read_probe(AVProbeData *p)
 // issues with MPEG-files!
 if   (first_frames>=7) return AVPROBE_SCORE_EXTENSION + 1;
 else if(max_frames>200)return AVPROBE_SCORE_EXTENSION;
+// over 50% of probe size is valid
+else if (p->buf_size > 1 && match_size > (p->buf_size/2)) return 
AVPROBE_SCORE_EXTENSION;
 else if(max_frames>=4 && max_frames >= p->buf_size/1) return 
AVPROBE_SCORE_EXTENSION / 2;
 else if(ff_id3v2_match(buf0, ID3v2_DEFAULT_MAGIC) && 
2*ff_id3v2_tag_len(buf0) >= p->buf_size)
return p->buf_size < PROBE_BUF_MAX ? 
AVPROBE_SCORE_EXTENSION / 4 : AVPROBE_SCORE_EXTENSION - 2;
-- 
2.7.4



___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH] lavf/mov: atom box parsing return eof cause play fail

2017-12-06 Thread tiejun.peng
fix eof lead to play fail.

Signed-off-by: tiejun.peng <tiejun.p...@foxmail.com>
---
 libavformat/mov.c | 59 +++
 1 file changed, 42 insertions(+), 17 deletions(-)

diff --git a/libavformat/mov.c b/libavformat/mov.c
index c901859..870fdd6 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -1991,8 +1991,10 @@ static int mov_read_stco(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 sc->chunk_count = i;
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STCO atom\n");
 return AVERROR_EOF;
+}
 
 return 0;
 }
@@ -2522,8 +2524,10 @@ int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext 
*pb, int entries)
 sc->stsd_count++;
 }
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STSD atom\n");
 return AVERROR_EOF;
+}
 
 return 0;
 }
@@ -2624,8 +2628,10 @@ static int mov_read_stsc(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 sc->stsc_count = i;
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STSC atom\n");
 return AVERROR_EOF;
+}
 
 return 0;
 }
@@ -2676,8 +2682,10 @@ static int mov_read_stps(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 sc->stps_count = i;
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STPS atom\n");
 return AVERROR_EOF;
+}
 
 return 0;
 }
@@ -2723,8 +2731,10 @@ static int mov_read_stss(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 sc->keyframe_count = i;
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STSS atom\n");
 return AVERROR_EOF;
+}
 
 return 0;
 }
@@ -2808,8 +2818,10 @@ static int mov_read_stsz(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 av_free(buf);
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STSZ atom\n");
 return AVERROR_EOF;
+}
 
 return 0;
 }
@@ -2870,8 +2882,10 @@ static int mov_read_stts(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 sc->duration_for_fps  += duration;
 sc->nb_frames_for_fps += total_sample_count;
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STTS atom\n");
 return AVERROR_EOF;
+}
 
 st->nb_frames= total_sample_count;
 if (duration)
@@ -2948,8 +2962,10 @@ static int mov_read_ctts(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 sc->ctts_count = ctts_count;
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted CTTS atom\n");
 return AVERROR_EOF;
+}
 
 av_log(c->fc, AV_LOG_TRACE, "dts shift %d\n", sc->dts_shift);
 
@@ -2995,7 +3011,12 @@ static int mov_read_sbgp(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 sc->rap_group_count = i;
 
-return pb->eof_reached ? AVERROR_EOF : 0;
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted SBGP atom\n");
+return AVERROR_EOF;
+}
+
+return 0;
 }
 
 /**
@@ -4720,8 +4741,10 @@ static int mov_read_trun(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 fix_frag_index_entries(>frag_index, next_frag_index,
frag->track_id, entries);
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted TRUN atom\n");
 return AVERROR_EOF;
+}
 
 frag->implicit_offset = offset;
 
@@ -6607,13 +6630,15 @@ static int mov_read_header(AVFormatContext *s)
 
 /* check MOV header */
 do {
-if (mov->moov_retry)
-avio_seek(pb, 0, SEEK_SET);
-if ((err = mov_read_default(mov, pb, atom)) < 0) {
-av_log(s, AV_LOG_ERROR, "error reading header\n");
-mov_read_close(s);
-return err;
-}
+if (mov->moov_retry)
+avio_seek(pb, 0, SEEK_SET);
+/* EOF don't mean the file to play fail*/
+err = mov_read_default(mov, pb, atom);
+if (err < 0 && err != AVERROR_EOF) {
+av_log(s, AV_LOG_ERROR, "error reading header\n");
+mov_read_close(s);
+return err;
+}
 } while ((pb->seekable & AVIO_SEEKABLE_NORMAL) && !mov->found_moov && 
!mov->moov_retry++);
 if (!mov->found_moov) {
 av_log(s, AV_LOG_ERROR, "moov atom not found\n");
-- 
2.7.4



___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH] libavformat/id3v2: add some ID3v2.3 tags convertion

2017-12-04 Thread tiejun.peng
Signed-off-by: tiejun.peng <tiejun.p...@foxmail.com>
---
 libavformat/id3v2.c | 5 +
 1 file changed, 5 insertions(+)

diff --git a/libavformat/id3v2.c b/libavformat/id3v2.c
index 6c216ba..1cf759b 100644
--- a/libavformat/id3v2.c
+++ b/libavformat/id3v2.c
@@ -56,6 +56,11 @@ const AVMetadataConv ff_id3v2_34_metadata_conv[] = {
 { "TRCK", "track"},
 { "TSSE", "encoder"  },
 { "USLT", "lyrics"   },
+{ "TYER", "year" },
+{ "TDAT", "date" },
+{ "TMED", "media_type"   },
+{ "TOLY", "author"   },
+{ "TBPM", "BPM"  },
 { 0 }
 };
 
-- 

Please have a look this patch, give some advice or merge it.
Thank you.

2.7.4



___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH] lavf/mov: atom box parsing return eof cause play fail

2017-12-04 Thread tiejun.peng
1.add warning info about corrupted atom box parsing.
2.atom box parsing return eof cause mov_read_close called in mov_read_header
and user have no chance to play the file.

Signed-off-by: tiejun.peng <tiejun.p...@foxmail.com>
---
 libavformat/mov.c | 46 +++---
 1 file changed, 35 insertions(+), 11 deletions(-)

diff --git a/libavformat/mov.c b/libavformat/mov.c
index c901859..ef8b357 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -1991,8 +1991,10 @@ static int mov_read_stco(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 sc->chunk_count = i;
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STCO atom\n");
 return AVERROR_EOF;
+}
 
 return 0;
 }
@@ -2522,8 +2524,10 @@ int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext 
*pb, int entries)
 sc->stsd_count++;
 }
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STSD atom\n");
 return AVERROR_EOF;
+}
 
 return 0;
 }
@@ -2624,8 +2628,10 @@ static int mov_read_stsc(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 sc->stsc_count = i;
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STSC atom\n");
 return AVERROR_EOF;
+}
 
 return 0;
 }
@@ -2676,8 +2682,10 @@ static int mov_read_stps(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 sc->stps_count = i;
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STPS atom\n");
 return AVERROR_EOF;
+}
 
 return 0;
 }
@@ -2723,8 +2731,10 @@ static int mov_read_stss(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 sc->keyframe_count = i;
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STSS atom\n");
 return AVERROR_EOF;
+}
 
 return 0;
 }
@@ -2808,8 +2818,10 @@ static int mov_read_stsz(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 av_free(buf);
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STSZ atom\n");
 return AVERROR_EOF;
+}
 
 return 0;
 }
@@ -2870,8 +2882,10 @@ static int mov_read_stts(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 sc->duration_for_fps  += duration;
 sc->nb_frames_for_fps += total_sample_count;
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STTS atom\n");
 return AVERROR_EOF;
+}
 
 st->nb_frames= total_sample_count;
 if (duration)
@@ -2948,8 +2962,10 @@ static int mov_read_ctts(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 sc->ctts_count = ctts_count;
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted CTTS atom\n");
 return AVERROR_EOF;
+}
 
 av_log(c->fc, AV_LOG_TRACE, "dts shift %d\n", sc->dts_shift);
 
@@ -2995,7 +3011,12 @@ static int mov_read_sbgp(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 sc->rap_group_count = i;
 
-return pb->eof_reached ? AVERROR_EOF : 0;
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted SBGP atom\n");
+return AVERROR_EOF;
+}
+
+return 0;
 }
 
 /**
@@ -4720,8 +4741,10 @@ static int mov_read_trun(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 fix_frag_index_entries(>frag_index, next_frag_index,
frag->track_id, entries);
 
-if (pb->eof_reached)
+if (pb->eof_reached) {
+av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted TRUN atom\n");
 return AVERROR_EOF;
+}
 
 frag->implicit_offset = offset;
 
@@ -6609,7 +6632,8 @@ static int mov_read_header(AVFormatContext *s)
 do {
 if (mov->moov_retry)
 avio_seek(pb, 0, SEEK_SET);
-if ((err = mov_read_default(mov, pb, atom)) < 0) {
+/* EOF don't mean the file to play fail*/
+if ((err = mov_read_default(mov, pb, atom) && err != AVERROR_EOF) < 0) {
 av_log(s, AV_LOG_ERROR, "error reading header\n");
 mov_read_close(s);
 return err;
-- 
2.7.4

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH] libavformat/mov:the "stco" box parse no need return eof.

2017-11-29 Thread tiejun.peng
discard corrupted track and good track have chance to play.

Signed-off-by: tiejun.peng <tiejun.p...@foxmail.com>
---
 libavformat/mov.c | 6 --
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/libavformat/mov.c b/libavformat/mov.c
index c901859..5c2ce39 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -1991,8 +1991,10 @@ static int mov_read_stco(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 sc->chunk_count = i;
 
-if (pb->eof_reached)
-return AVERROR_EOF;
+if (i < entries) {
+av_log(c->fc, AV_LOG_WARNING, "stream id[0x%x]: corrupted STCO 
atom\n", st->id);
+st->discard = AVDISCARD_ALL;
+}
 
 return 0;
 }
-- 
2.7.4



___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH] libavformat/id3v2: add some ID3v2.3 tags convertion

2017-11-27 Thread tiejun.peng
Signed-off-by: tiejun.peng <tiejun.p...@foxmail.com>
---
 libavformat/id3v2.c | 5 +
 1 file changed, 5 insertions(+)

diff --git a/libavformat/id3v2.c b/libavformat/id3v2.c
index 6c216ba..1cf759b 100644
--- a/libavformat/id3v2.c
+++ b/libavformat/id3v2.c
@@ -56,6 +56,11 @@ const AVMetadataConv ff_id3v2_34_metadata_conv[] = {
 { "TRCK", "track"},
 { "TSSE", "encoder"  },
 { "USLT", "lyrics"   },
+{ "TYER", "year" },
+{ "TDAT", "date" },
+{ "TMED", "media_type"   },
+{ "TOLY", "author"   },
+{ "TBPM", "BPM"  },
 { 0 }
 };
 
-- 

Please have a look this patch, give some advice or merge it.
Thank you.

2.7.4



___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH] libavformat/mov:the "stco" box parse no need return eof.

2017-11-19 Thread tiejun.peng
if return eof, will cause to play the whole mp4 file fail.
For example, currently the whole file will play fail
when a few bytes missed in the "stco" box
and the "stco" box is the last box of MP4 file,
Actually the almost media frames can play success at most time.
A few words missed in "stco" box and the other box data is full
will not cause the whole mp4 file fail.

Signed-off-by: tiejun.peng <tiejun.p...@foxmail.com>
---
 libavformat/mov.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/libavformat/mov.c b/libavformat/mov.c
index 5c9f926..78b7bf7 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -1989,9 +1989,6 @@ static int mov_read_stco(MOVContext *c, AVIOContext *pb, 
MOVAtom atom)
 
 sc->chunk_count = i;
 
-if (pb->eof_reached)
-return AVERROR_EOF;
-
 return 0;
 }
 
-- 
2.7.4




___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH] libavformat/id3v2: add some ID3v2.3 tags convertion

2017-11-19 Thread tiejun.peng
Signed-off-by: tiejun.peng <tiejun.p...@foxmail.com>
---
 libavformat/id3v2.c | 5 +
 1 file changed, 5 insertions(+)

diff --git a/libavformat/id3v2.c b/libavformat/id3v2.c
index 6c216ba..1cf759b 100644
--- a/libavformat/id3v2.c
+++ b/libavformat/id3v2.c
@@ -56,6 +56,11 @@ const AVMetadataConv ff_id3v2_34_metadata_conv[] = {
 { "TRCK", "track"},
 { "TSSE", "encoder"  },
 { "USLT", "lyrics"   },
+{ "TYER", "year" },
+{ "TDAT", "date" },
+{ "TMED", "media-type"   },
+{ "TOLY", "author"   },
+{ "TBPM", "BPM"  },
 { 0 }
 };
 
-- 
2.7.4



___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH] libavformat/avidec: subtitle stream disable some non-interleaved process

2017-09-09 Thread tiejun.peng
non-interleaved process call avio_seek frequently, it will cause some 
performance issues especially in network play scene, such as http/ftp protocol.

Signed-off-by: tiejun.peng <tiejun.p...@foxmail.com>
---
 libavformat/avidec.c | 11 ++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/libavformat/avidec.c b/libavformat/avidec.c
index b8a31dc..0220ea1 100644
--- a/libavformat/avidec.c
+++ b/libavformat/avidec.c
@@ -1520,7 +1520,8 @@ resync:
 }
 ast->seek_pos= 0;
 
-if (!avi->non_interleaved && st->nb_index_entries>1 && 
avi->index_loaded>1) {
+/* subtitle stream no need the next process, because subtitle's 
pkt->dts is always 0 */
+if (!avi->non_interleaved && st->nb_index_entries>1 && 
avi->index_loaded>1 && st->codecpar->codec_type != AVMEDIA_TYPE_SUBTITLE) {
 int64_t dts= av_rescale_q(pkt->dts, st->time_base, AV_TIME_BASE_Q);
 
 if (avi->dts_max - dts > 2*AV_TIME_BASE) {
@@ -1646,6 +1647,10 @@ static int check_stream_max_drift(AVFormatContext *s)
 AVStream *st = s->streams[i];
 AVIStream *ast = st->priv_data;
 int n = st->nb_index_entries;
+/* when stream is subtitle, don't change min_dts, because subtitle 
stream's dts is always 0 */
+if (st->codecpar->codec_type == AVMEDIA_TYPE_SUBTITLE)
+continue;
+
 while (idx[i] < n && st->index_entries[idx[i]].pos < pos)
 idx[i]++;
 if (idx[i] < n) {
@@ -1661,6 +1666,10 @@ static int check_stream_max_drift(AVFormatContext *s)
 AVStream *st = s->streams[i];
 AVIStream *ast = st->priv_data;
 
+/* when stream is subtitle, don't change max_dts, because subtitle 
stream's dts is always 0 */
+if (st->codecpar->codec_type == AVMEDIA_TYPE_SUBTITLE)
+continue;
+
 if (idx[i] && min_dts != INT64_MAX / 2) {
 int64_t dts;
 dts = av_rescale_q(st->index_entries[idx[i] - 1].timestamp /
-- 
2.7.4



___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH v2] avformat/ftp: Solve a crash bug when network occur a exception

2017-03-20 Thread tiejun.peng
This fixes a proble where ffmpeg would cause crash to do a seek when the 
network disconnect.
The log like this:
01-01 10:53:03.441  6580  6580 F DEBUG   : backtrace:
01-01 10:53:03.441  6580  6580 F DEBUG   : #00 pc 0002942e  
/system/lib/libavformat.so (ffurl_write+9)

Signed-off-by: tiejun.peng <tiejun.p...@foxmail.com>
---
 libavformat/ftp.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/libavformat/ftp.c b/libavformat/ftp.c
index 0663b47..9aa7a45 100644
--- a/libavformat/ftp.c
+++ b/libavformat/ftp.c
@@ -206,6 +206,9 @@ static int ftp_send_command(FTPContext *s, const char 
*command,
 if (response)
 *response = NULL;
 
+if (!s->conn_control)
+return AVERROR(EIO);
+
 if ((err = ffurl_write(s->conn_control, command, strlen(command))) < 0)
 return err;
 if (!err)
-- 
2.7.4



___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH] avformat/ftp: Solve a crash bug when network occur a exception

2017-03-19 Thread tiejun.peng
This fixes a proble where ffmpeg would cause crash to do a seek when the 
network disconnect.
The log like this:
01-01 10:53:03.441  6580  6580 F DEBUG   : backtrace:
01-01 10:53:03.441  6580  6580 F DEBUG   : #00 pc 0002942e  
/system/lib/libavformat.so (ffurl_write+9)

Signed-off-by: tiejun.peng <tiejun.p...@foxmail.com>
---
 libavformat/ftp.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/libavformat/ftp.c b/libavformat/ftp.c
index 0663b47..3f1bf2e 100644
--- a/libavformat/ftp.c
+++ b/libavformat/ftp.c
@@ -206,6 +206,9 @@ static int ftp_send_command(FTPContext *s, const char 
*command,
 if (response)
 *response = NULL;
 
+if (!s->conn_control)
+return -1;
+
 if ((err = ffurl_write(s->conn_control, command, strlen(command))) < 0)
 return err;
 if (!err)
-- 
2.7.4

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel