mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-02-12 04:44:25 +00:00
* Fix a problem caused by a duplicate free of priv_data -- now uses av_freep
* Make sure that the read buffer for the ffm file is allocated in the priv_data. Originally committed as revision 578 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
ec3b22326d
commit
789bee1264
20
libav/ffm.c
20
libav/ffm.c
@ -172,7 +172,7 @@ static int ffm_write_header(AVFormatContext *s)
|
|||||||
put_le16(pb, codec->frame_size);
|
put_le16(pb, codec->frame_size);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
abort();
|
av_abort();
|
||||||
}
|
}
|
||||||
/* hack to have real time */
|
/* hack to have real time */
|
||||||
if (ffm_nopts)
|
if (ffm_nopts)
|
||||||
@ -198,8 +198,7 @@ static int ffm_write_header(AVFormatContext *s)
|
|||||||
fail:
|
fail:
|
||||||
for(i=0;i<s->nb_streams;i++) {
|
for(i=0;i<s->nb_streams;i++) {
|
||||||
st = s->streams[i];
|
st = s->streams[i];
|
||||||
fst = st->priv_data;
|
av_freep(&st->priv_data);
|
||||||
av_free(fst);
|
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -251,7 +250,7 @@ static int ffm_write_trailer(AVFormatContext *s)
|
|||||||
put_flush_packet(pb);
|
put_flush_packet(pb);
|
||||||
|
|
||||||
for(i=0;i<s->nb_streams;i++)
|
for(i=0;i<s->nb_streams;i++)
|
||||||
av_free(s->streams[i]->priv_data);
|
av_freep(&s->streams[i]->priv_data);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -320,7 +319,7 @@ static int ffm_read_data(AVFormatContext *s,
|
|||||||
}
|
}
|
||||||
ffm->first_packet = 0;
|
ffm->first_packet = 0;
|
||||||
if ((frame_offset & 0x7ffff) < FFM_HEADER_SIZE)
|
if ((frame_offset & 0x7ffff) < FFM_HEADER_SIZE)
|
||||||
abort();
|
av_abort();
|
||||||
ffm->packet_ptr = ffm->packet + (frame_offset & 0x7fff) - FFM_HEADER_SIZE;
|
ffm->packet_ptr = ffm->packet + (frame_offset & 0x7fff) - FFM_HEADER_SIZE;
|
||||||
if (!first)
|
if (!first)
|
||||||
break;
|
break;
|
||||||
@ -403,7 +402,7 @@ static int ffm_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
|||||||
codec->frame_size = get_le16(pb);
|
codec->frame_size = get_le16(pb);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
abort();
|
av_abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -424,8 +423,7 @@ static int ffm_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
|||||||
for(i=0;i<s->nb_streams;i++) {
|
for(i=0;i<s->nb_streams;i++) {
|
||||||
st = s->streams[i];
|
st = s->streams[i];
|
||||||
if (st) {
|
if (st) {
|
||||||
fst = st->priv_data;
|
av_freep(&st->priv_data);
|
||||||
av_free(fst);
|
|
||||||
av_free(st);
|
av_free(st);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -604,16 +602,16 @@ static int ffm_read_close(AVFormatContext *s)
|
|||||||
|
|
||||||
for(i=0;i<s->nb_streams;i++) {
|
for(i=0;i<s->nb_streams;i++) {
|
||||||
st = s->streams[i];
|
st = s->streams[i];
|
||||||
av_free(st->priv_data);
|
av_freep(&st->priv_data);
|
||||||
}
|
}
|
||||||
av_free(s->priv_data);
|
av_freep(&s->priv_data);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
AVInputFormat ffm_iformat = {
|
AVInputFormat ffm_iformat = {
|
||||||
"ffm",
|
"ffm",
|
||||||
"ffm format",
|
"ffm format",
|
||||||
sizeof(FFMContext),
|
sizeof(FFMContext) + FFM_PACKET_SIZE,
|
||||||
NULL,
|
NULL,
|
||||||
ffm_read_header,
|
ffm_read_header,
|
||||||
ffm_read_packet,
|
ffm_read_packet,
|
||||||
|
Loading…
Reference in New Issue
Block a user