fix logic and possible memleak

This commit is contained in:
Jacek Jendrzej
2017-11-17 06:34:13 +01:00
parent e0effa50e2
commit 545fb415b2

View File

@@ -220,15 +220,19 @@ int decode_frame(AVCodecContext *codecContext,AVPacket &packet, FILE* fp)
AVCodecContext* open_codec(AVMediaType mediaType, AVFormatContext* formatContext)
{
int stream_index = av_find_best_stream(formatContext, mediaType, -1, -1, NULL, 0);
if (stream_index < 0){
return NULL;
if (stream_index >=0 ){
AVCodecContext * codecContext = formatContext->streams[stream_index]->codec;
if(codecContext){
AVCodec *codec = avcodec_find_decoder(codecContext->codec_id);
if(codec){
if ((avcodec_open2(codecContext, codec, NULL)) != 0){
return NULL;
}
}
return codecContext;
}
}
AVCodecContext * codecContext = formatContext->streams[stream_index]->codec;
AVCodec *codec = avcodec_find_decoder(codecContext->codec_id);
if (codec && (avcodec_open2(codecContext, codec, NULL)) != 0){
return NULL;
}
return codecContext;
return NULL;
}
int image_to_mpeg2(const char *image_name, const char *encode_name)
@@ -253,11 +257,11 @@ int image_to_mpeg2(const char *image_name, const char *encode_name)
}
fclose(fp);
}
avcodec_close(codecContext);
av_free_packet(&packet);
}
avformat_close_input(&formatContext);
avcodec_close(codecContext);
}
avformat_close_input(&formatContext);
}
av_free(formatContext);
return 0;