Ticket #1937: cdxl2.diff

File cdxl2.diff, 1.8 KB (added by ami_stuff, 4 years ago)
  • libavformat/cdxl.c

    diff --git a/libavformat/cdxl.c b/libavformat/cdxl.c
    index 185b745..c73ec72 100644
    a b typedef struct CDXLDemuxContext { 
    3737    uint8_t     header[CDXL_HEADER_SIZE]; 
    3838    int         video_stream_index; 
    3939    int         audio_stream_index; 
     40    int64_t     filesize; 
    4041} CDXLDemuxContext; 
    4142 
    4243static int cdxl_read_probe(AVProbeData *p) 
    static int cdxl_read_probe(AVProbeData *p) 
    8485static int cdxl_read_header(AVFormatContext *s) 
    8586{ 
    8687    CDXLDemuxContext *cdxl = s->priv_data; 
    87     int ret; 
     88    int frames, ret; 
    8889 
    8990    if (cdxl->framerate && (ret = av_parse_video_rate(&cdxl->fps, cdxl->framerate)) < 0) { 
    9091        av_log(s, AV_LOG_ERROR, 
    static int cdxl_read_header(AVFormatContext *s) 
    9293        return ret; 
    9394    } 
    9495 
     96    cdxl->filesize = avio_size(s->pb); 
     97 
    9598    cdxl->read_chunk         =  0; 
    9699    cdxl->video_stream_index = -1; 
    97100    cdxl->audio_stream_index = -1; 
    static int cdxl_read_packet(AVFormatContext *s, AVPacket *pkt) 
    129132    audio_size   = AV_RB16(&cdxl->header[22]); 
    130133    image_size   = FFALIGN(width, 16) * height * cdxl->header[19] / 8; 
    131134    video_size   = palette_size + image_size; 
     135     
     136    frames       = cdxl->filesize / (audio_size + video_size); 
    132137 
    133138    if (palette_size > 512) 
    134139        return AVERROR_INVALIDDATA; 
    static int cdxl_read_packet(AVFormatContext *s, AVPacket *pkt) 
    175180            st->codec->codec_id      = AV_CODEC_ID_CDXL; 
    176181            st->codec->width         = width; 
    177182            st->codec->height        = height; 
     183            if(!cdxl->framerate) 
     184            st->duration             = frames * audio_size; 
    178185            st->start_time           = 0; 
    179186            cdxl->video_stream_index = st->index; 
    180187            if (cdxl->framerate)