X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fmtv.c;h=fdf13bbf394837cfe7a76d320b8ec6af5c8e956f;hb=9200514ad8717c63f82101dc394f4378854325bf;hp=572288894dda0d44f8330aed2e51a198386e6542;hpb=716d413c13981da15323c7a3821860536eefdbbb;p=ffmpeg diff --git a/libavformat/mtv.c b/libavformat/mtv.c index 572288894dd..fdf13bbf394 100644 --- a/libavformat/mtv.c +++ b/libavformat/mtv.c @@ -64,13 +64,13 @@ static int mtv_probe(AVProbeData *p) if(!AV_RL16(&p->buf[52]) || !AV_RL16(&p->buf[54])) { if(!!AV_RL16(&p->buf[56])) - return AVPROBE_SCORE_MAX/2; + return AVPROBE_SCORE_EXTENSION; else return 0; } if(p->buf[51] != 16) - return AVPROBE_SCORE_MAX/4; // But we are going to assume 16bpp anyway .. + return AVPROBE_SCORE_EXTENSION / 2; // But we are going to assume 16bpp anyway .. return AVPROBE_SCORE_MAX; } @@ -96,20 +96,23 @@ static int mtv_read_header(AVFormatContext *s) /* Calculate width and height if missing from header */ - if(!mtv->img_width) + if (!mtv->img_width && mtv->img_height > 0 && mtv->img_bpp >= 8) mtv->img_width=mtv->img_segment_size / (mtv->img_bpp>>3) / mtv->img_height; - if(!mtv->img_height) + if (!mtv->img_height && mtv->img_width > 0 && mtv->img_bpp >= 8) mtv->img_height=mtv->img_segment_size / (mtv->img_bpp>>3) / mtv->img_width; + if (!mtv->img_width || !mtv->img_height) + return AVERROR_INVALIDDATA; + avio_skip(pb, 4); audio_subsegments = avio_rl16(pb); if (audio_subsegments == 0) { - av_log_ask_for_sample(s, "MTV files without audio are not supported\n"); - return AVERROR_INVALIDDATA; + avpriv_request_sample(s, "MTV files without audio"); + return AVERROR_PATCHWELCOME; } mtv->full_segment_size = @@ -128,14 +131,13 @@ static int mtv_read_header(AVFormatContext *s) return AVERROR(ENOMEM); avpriv_set_pts_info(st, 64, 1, mtv->video_fps); - st->codec->codec_type = AVMEDIA_TYPE_VIDEO; - st->codec->codec_id = AV_CODEC_ID_RAWVIDEO; - st->codec->pix_fmt = AV_PIX_FMT_RGB565BE; - st->codec->width = mtv->img_width; - st->codec->height = mtv->img_height; - st->codec->sample_rate = mtv->video_fps; - st->codec->extradata = av_strdup("BottomUp"); - st->codec->extradata_size = 9; + st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; + st->codecpar->codec_id = AV_CODEC_ID_RAWVIDEO; + st->codecpar->format = AV_PIX_FMT_RGB565BE; + st->codecpar->width = mtv->img_width; + st->codecpar->height = mtv->img_height; + st->codecpar->extradata = av_strdup("BottomUp"); + st->codecpar->extradata_size = 9; // audio - mp3 @@ -144,10 +146,10 @@ static int mtv_read_header(AVFormatContext *s) return AVERROR(ENOMEM); avpriv_set_pts_info(st, 64, 1, AUDIO_SAMPLING_RATE); - st->codec->codec_type = AVMEDIA_TYPE_AUDIO; - st->codec->codec_id = AV_CODEC_ID_MP3; - st->codec->bit_rate = mtv->audio_br; - st->need_parsing = AVSTREAM_PARSE_FULL; + st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; + st->codecpar->codec_id = AV_CODEC_ID_MP3; + st->codecpar->bit_rate = mtv->audio_br; + st->need_parsing = AVSTREAM_PARSE_FULL; // Jump over header @@ -164,7 +166,7 @@ static int mtv_read_packet(AVFormatContext *s, AVPacket *pkt) AVIOContext *pb = s->pb; int ret; - if((avio_tell(pb) - s->data_offset + mtv->img_segment_size) % mtv->full_segment_size) + if((avio_tell(pb) - s->internal->data_offset + mtv->img_segment_size) % mtv->full_segment_size) { avio_skip(pb, MTV_AUDIO_PADDING_SIZE);