mirror of https://github.com/mpv-player/mpv
Fix a crash when playing some H264 over rtsp streams: Do pass an
AVCodecContext to the H264 parser. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29493 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
6960e4c1b1
commit
bb6c23de0c
|
@ -117,6 +117,7 @@ int rtsp_transport_tcp = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern int rtsp_port;
|
extern int rtsp_port;
|
||||||
|
extern void *avcctx;
|
||||||
|
|
||||||
extern "C" int audio_id, video_id, dvdsub_id;
|
extern "C" int audio_id, video_id, dvdsub_id;
|
||||||
extern "C" demuxer_t* demux_open_rtp(demuxer_t* demuxer) {
|
extern "C" demuxer_t* demux_open_rtp(demuxer_t* demuxer) {
|
||||||
|
@ -388,6 +389,9 @@ extern "C" void demux_close_rtp(demuxer_t* demuxer) {
|
||||||
delete rtpState->videoBufferQueue;
|
delete rtpState->videoBufferQueue;
|
||||||
delete rtpState->sdpDescription;
|
delete rtpState->sdpDescription;
|
||||||
delete rtpState;
|
delete rtpState;
|
||||||
|
#ifdef CONFIG_LIBAVCODEC
|
||||||
|
av_free(avcctx);
|
||||||
|
#endif
|
||||||
|
|
||||||
env->reclaim(); delete scheduler;
|
env->reclaim(); delete scheduler;
|
||||||
}
|
}
|
||||||
|
@ -561,7 +565,7 @@ static demux_packet_t* getBuffer(demuxer_t* demuxer, demux_stream_t* ds,
|
||||||
}
|
}
|
||||||
if (headersize == 3 && h264parserctx) { // h264
|
if (headersize == 3 && h264parserctx) { // h264
|
||||||
consumed = h264parserctx->parser->parser_parse(h264parserctx,
|
consumed = h264parserctx->parser->parser_parse(h264parserctx,
|
||||||
NULL,
|
(AVCodecContext *)avcctx,
|
||||||
&poutbuf, &poutbuf_size,
|
&poutbuf, &poutbuf_size,
|
||||||
dp->buffer, dp->len);
|
dp->buffer, dp->len);
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ extern "C" {
|
||||||
#ifdef CONFIG_LIBAVCODEC
|
#ifdef CONFIG_LIBAVCODEC
|
||||||
AVCodecParserContext * h264parserctx;
|
AVCodecParserContext * h264parserctx;
|
||||||
#endif
|
#endif
|
||||||
|
void *avcctx;
|
||||||
|
|
||||||
// Copied from vlc
|
// Copied from vlc
|
||||||
static unsigned char* parseH264ConfigStr( char const* configStr,
|
static unsigned char* parseH264ConfigStr( char const* configStr,
|
||||||
|
@ -137,6 +138,7 @@ void rtpCodecInitialize_video(demuxer_t* demuxer,
|
||||||
#ifdef CONFIG_LIBAVCODEC
|
#ifdef CONFIG_LIBAVCODEC
|
||||||
avcodec_register_all();
|
avcodec_register_all();
|
||||||
h264parserctx = av_parser_init(CODEC_ID_H264);
|
h264parserctx = av_parser_init(CODEC_ID_H264);
|
||||||
|
avcctx = avcodec_alloc_context();
|
||||||
#endif
|
#endif
|
||||||
needVideoFrameRate(demuxer, subsession);
|
needVideoFrameRate(demuxer, subsession);
|
||||||
} else if (strcmp(subsession->codecName(), "H261") == 0) {
|
} else if (strcmp(subsession->codecName(), "H261") == 0) {
|
||||||
|
|
Loading…
Reference in New Issue