-/**
- * @file
+/*
* Psygnosis YOP demuxer
*
* Copyright (C) 2010 Mohamed Naufal Basheer <naufal11@gmail.com>
* derived from the code by
* Copyright (C) 2009 Thomas P. Higdon <thomas.p.higdon@gmail.com>
*
- * This file is part of FFmpeg.
+ * This file is part of Libav.
*
- * FFmpeg is free software; you can redistribute it and/or
+ * Libav is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
- * FFmpeg is distributed in the hope that it will be useful,
+ * Libav is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
- * License along with FFmpeg; if not, write to the Free Software
+ * License along with Libav; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include "libavutil/channel_layout.h"
#include "libavutil/intreadwrite.h"
#include "avformat.h"
+#include "internal.h"
typedef struct yop_dec_context {
AVPacket video_packet;
return 0;
}
-static int yop_read_header(AVFormatContext *s, AVFormatParameters *ap)
+static int yop_read_header(AVFormatContext *s)
{
YopDecContext *yop = s->priv_data;
AVIOContext *pb = s->pb;
int frame_rate, ret;
- audio_stream = av_new_stream(s, 0);
- video_stream = av_new_stream(s, 1);
+ audio_stream = avformat_new_stream(s, NULL);
+ video_stream = avformat_new_stream(s, NULL);
// Extra data that will be passed to the decoder
video_stream->codec->extradata_size = 8;
// Audio
audio_dec = audio_stream->codec;
audio_dec->codec_type = AVMEDIA_TYPE_AUDIO;
- audio_dec->codec_id = CODEC_ID_ADPCM_IMA_WS;
+ audio_dec->codec_id = AV_CODEC_ID_ADPCM_IMA_APC;
audio_dec->channels = 1;
+ audio_dec->channel_layout = AV_CH_LAYOUT_MONO;
audio_dec->sample_rate = 22050;
// Video
video_dec = video_stream->codec;
video_dec->codec_type = AVMEDIA_TYPE_VIDEO;
- video_dec->codec_id = CODEC_ID_YOP;
+ video_dec->codec_id = AV_CODEC_ID_YOP;
avio_skip(pb, 6);
avio_seek(pb, 2048, SEEK_SET);
- av_set_pts_info(video_stream, 32, 1, frame_rate);
+ avpriv_set_pts_info(video_stream, 32, 1, frame_rate);
return 0;
}
int64_t frame_pos, pos_min, pos_max;
int frame_count;
- av_free_packet(&yop->video_packet);
-
if (!stream_index)
return -1;
timestamp = FFMAX(0, FFMIN(frame_count, timestamp));
frame_pos = timestamp * yop->frame_size + pos_min;
+
+ if (avio_seek(s->pb, frame_pos, SEEK_SET) < 0)
+ return -1;
+
+ av_free_packet(&yop->video_packet);
yop->odd_frame = timestamp & 1;
- avio_seek(s->pb, frame_pos, SEEK_SET);
return 0;
}
AVInputFormat ff_yop_demuxer = {
- "yop",
- NULL_IF_CONFIG_SMALL("Psygnosis YOP Format"),
- sizeof(YopDecContext),
- yop_probe,
- yop_read_header,
- yop_read_packet,
- yop_read_close,
- yop_read_seek,
- .extensions = "yop",
- .flags = AVFMT_GENERIC_INDEX,
+ .name = "yop",
+ .long_name = NULL_IF_CONFIG_SMALL("Psygnosis YOP"),
+ .priv_data_size = sizeof(YopDecContext),
+ .read_probe = yop_probe,
+ .read_header = yop_read_header,
+ .read_packet = yop_read_packet,
+ .read_close = yop_read_close,
+ .read_seek = yop_read_seek,
+ .extensions = "yop",
+ .flags = AVFMT_GENERIC_INDEX,
};