diff options
Diffstat (limited to 'contrib/ffmpeg/libavformat/segafilm.c')
-rw-r--r-- | contrib/ffmpeg/libavformat/segafilm.c | 51 |
1 files changed, 18 insertions, 33 deletions
diff --git a/contrib/ffmpeg/libavformat/segafilm.c b/contrib/ffmpeg/libavformat/segafilm.c index 4feb97262..b5375ccf7 100644 --- a/contrib/ffmpeg/libavformat/segafilm.c +++ b/contrib/ffmpeg/libavformat/segafilm.c @@ -58,8 +58,6 @@ typedef struct FilmDemuxContext { unsigned int base_clock; unsigned int version; - int cvid_extra_bytes; /* the number of bytes thrown into the Cinepak - * chunk header to throw off decoders */ /* buffer used for interleaving stereo PCM data */ unsigned char *stereo_buffer; @@ -71,7 +69,7 @@ static int film_probe(AVProbeData *p) if (p->buf_size < 4) return 0; - if (BE_32(&p->buf[0]) != FILM_TAG) + if (AV_RB32(&p->buf[0]) != FILM_TAG) return 0; return AVPROBE_SCORE_MAX; @@ -95,8 +93,8 @@ static int film_read_header(AVFormatContext *s, /* load the main FILM header */ if (get_buffer(pb, scratch, 16) != 16) return AVERROR_IO; - data_offset = BE_32(&scratch[4]); - film->version = BE_32(&scratch[8]); + data_offset = AV_RB32(&scratch[4]); + film->version = AV_RB32(&scratch[8]); /* load the FDSC chunk */ if (film->version == 0) { @@ -112,7 +110,7 @@ static int film_read_header(AVFormatContext *s, /* normal Saturn .cpk files; 32-byte header */ if (get_buffer(pb, scratch, 32) != 32) return AVERROR_IO; - film->audio_samplerate = BE_16(&scratch[24]);; + film->audio_samplerate = AV_RB16(&scratch[24]);; film->audio_channels = scratch[21]; film->audio_bits = scratch[22]; if (film->audio_bits == 8) @@ -123,16 +121,11 @@ static int film_read_header(AVFormatContext *s, film->audio_type = 0; } - if (BE_32(&scratch[0]) != FDSC_TAG) + if (AV_RB32(&scratch[0]) != FDSC_TAG) return AVERROR_INVALIDDATA; - film->cvid_extra_bytes = 0; - if (BE_32(&scratch[8]) == CVID_TAG) { + if (AV_RB32(&scratch[8]) == CVID_TAG) { film->video_type = CODEC_ID_CINEPAK; - if (film->version) - film->cvid_extra_bytes = 2; - else - film->cvid_extra_bytes = 6; /* Lemmings 3DO case */ } else film->video_type = 0; @@ -145,8 +138,8 @@ static int film_read_header(AVFormatContext *s, st->codec->codec_type = CODEC_TYPE_VIDEO; st->codec->codec_id = film->video_type; st->codec->codec_tag = 0; /* no fourcc */ - st->codec->width = BE_32(&scratch[16]); - st->codec->height = BE_32(&scratch[12]); + st->codec->width = AV_RB32(&scratch[16]); + st->codec->height = AV_RB32(&scratch[12]); } if (film->audio_type) { @@ -169,10 +162,10 @@ static int film_read_header(AVFormatContext *s, /* load the sample table */ if (get_buffer(pb, scratch, 16) != 16) return AVERROR_IO; - if (BE_32(&scratch[0]) != STAB_TAG) + if (AV_RB32(&scratch[0]) != STAB_TAG) return AVERROR_INVALIDDATA; - film->base_clock = BE_32(&scratch[8]); - film->sample_count = BE_32(&scratch[12]); + film->base_clock = AV_RB32(&scratch[8]); + film->sample_count = AV_RB32(&scratch[12]); if(film->sample_count >= UINT_MAX / sizeof(film_sample_t)) return -1; film->sample_table = av_malloc(film->sample_count * sizeof(film_sample_t)); @@ -188,9 +181,9 @@ static int film_read_header(AVFormatContext *s, return AVERROR_IO; } film->sample_table[i].sample_offset = - data_offset + BE_32(&scratch[0]); - film->sample_table[i].sample_size = BE_32(&scratch[4]); - if (BE_32(&scratch[8]) == 0xFFFFFFFF) { + data_offset + AV_RB32(&scratch[0]); + film->sample_table[i].sample_size = AV_RB32(&scratch[4]); + if (AV_RB32(&scratch[8]) == 0xFFFFFFFF) { film->sample_table[i].stream = film->audio_stream_index; film->sample_table[i].pts = audio_frame_counter; film->sample_table[i].pts *= film->base_clock; @@ -200,7 +193,7 @@ static int film_read_header(AVFormatContext *s, (film->audio_channels * film->audio_bits / 8)); } else { film->sample_table[i].stream = film->video_stream_index; - film->sample_table[i].pts = BE_32(&scratch[8]) & 0x7FFFFFFF; + film->sample_table[i].pts = AV_RB32(&scratch[8]) & 0x7FFFFFFF; film->sample_table[i].keyframe = (scratch[8] & 0x80) ? 0 : 1; } } @@ -231,18 +224,10 @@ static int film_read_packet(AVFormatContext *s, /* do a special song and dance when loading FILM Cinepak chunks */ if ((sample->stream == film->video_stream_index) && (film->video_type == CODEC_ID_CINEPAK)) { - if (av_new_packet(pkt, sample->sample_size - film->cvid_extra_bytes)) - return AVERROR_NOMEM; - if(pkt->size < 10) - return -1; pkt->pos= url_ftell(pb); - ret = get_buffer(pb, pkt->data, 10); - /* skip the non-spec CVID bytes */ - url_fseek(pb, film->cvid_extra_bytes, SEEK_CUR); - ret += get_buffer(pb, pkt->data + 10, - sample->sample_size - 10 - film->cvid_extra_bytes); - if (ret != sample->sample_size - film->cvid_extra_bytes) - ret = AVERROR_IO; + if (av_new_packet(pkt, sample->sample_size)) + return AVERROR_NOMEM; + get_buffer(pb, pkt->data, sample->sample_size); } else if ((sample->stream == film->audio_stream_index) && (film->audio_channels == 2)) { /* stereo PCM needs to be interleaved */ |