* 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 = avformat_new_stream(s, NULL);
- video_stream = av_new_stream(s, 1);
+ video_stream = avformat_new_stream(s, NULL);
// Extra data that will be passed to the decoder
- video_stream->codec->extradata_size = 8;
- video_stream->codec->extradata = av_mallocz(video_stream->codec->extradata_size +
- FF_INPUT_BUFFER_PADDING_SIZE);
+ video_stream->codec->extradata = av_mallocz(8 + FF_INPUT_BUFFER_PADDING_SIZE);
if (!video_stream->codec->extradata)
return AVERROR(ENOMEM);
+ 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;
}
if (yop->video_packet.data) {
*pkt = yop->video_packet;
yop->video_packet.data = NULL;
+ yop->video_packet.buf = NULL;
+#if FF_API_DESTRUCT_PACKET
+FF_DISABLE_DEPRECATION_WARNINGS
+ yop->video_packet.destruct = NULL;
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
yop->video_packet.size = 0;
pkt->data[0] = yop->odd_frame;
pkt->flags |= AV_PKT_FLAG_KEY;
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 = {
.name = "yop",
- .long_name = NULL_IF_CONFIG_SMALL("Psygnosis YOP Format"),
+ .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,
+ .extensions = "yop",
+ .flags = AVFMT_GENERIC_INDEX,
};