From patchwork Mon Sep 21 11:21:47 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zane van Iperen X-Patchwork-Id: 22549 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 8A68044B724 for ; Mon, 21 Sep 2020 14:22:04 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 624FB68B652; Mon, 21 Sep 2020 14:22:04 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-40133.protonmail.ch (mail-40133.protonmail.ch [185.70.40.133]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6C15568B5C9 for ; Mon, 21 Sep 2020 14:21:58 +0300 (EEST) Date: Mon, 21 Sep 2020 11:21:47 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=zanevaniperen.com; s=protonmail2; t=1600687317; bh=meB1AEvYAbhq9Xjo9KQ2phEvcoH9M9o6p1MzAtQlTFg=; h=Date:To:From:Cc:Reply-To:Subject:From; b=RLRJiGtb0zcvjKc8kFakarB+a0u5qMUv+/DgWfd5Lhm5BeKGutdVJxgEE5QXXDx4j JUVQ9QoMaZxaQv489gOzrr4UJQ4lmcGhndAqjgNflCPs0lLf734OANKb+BuP4rX6Zw acv6uVFTheAj//wooepMTmXfIhXZuefdEIcNYhbEWpzLAKFiB+85cjR/kChNuWVY8d LD7giEYj/gbmLw2piLOJ2e1irFfFRc6qAiMlvK6gE+ZLhfiY6yQXh4M8JSRRa02W7l aBDIrKYTVWXIWfaUGf1saXJq+5NMWl+V07TyqDokIq/OmVUMCmrdV4J7Q2YvcvawjP 4dYplIGs16CCA== To: ffmpeg-devel@ffmpeg.org From: Zane van Iperen Message-ID: <20200921112132.21688-1-zane@zanevaniperen.com> MIME-Version: 1.0 X-Spam-Status: No, score=-1.2 required=10.0 tests=ALL_TRUSTED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF shortcircuit=no autolearn=disabled version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on mailout.protonmail.ch Subject: [FFmpeg-devel] [PATCH] avformat/argo_asf: implement seeking X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Zane van Iperen Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Causes some error as the ADPCM predictors aren't known, but the difference is negligible and not audible. Signed-off-by: Zane van Iperen --- libavformat/argo_asf.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/libavformat/argo_asf.c b/libavformat/argo_asf.c index 6f7d9e93c9..de941caeac 100644 --- a/libavformat/argo_asf.c +++ b/libavformat/argo_asf.c @@ -238,12 +238,34 @@ static int argo_asf_read_packet(AVFormatContext *s, AVPacket *pkt) pkt->stream_index = st->index; pkt->duration = asf->ckhdr.num_samples * (ret / st->codecpar->block_align); + pkt->pts = asf->blocks_read * asf->ckhdr.num_samples; asf->blocks_read += (ret / st->codecpar->block_align); pkt->flags &= ~AV_PKT_FLAG_CORRUPT; return 0; } +static int argo_asf_seek(AVFormatContext *s, int stream_index, + int64_t pts, int flags) +{ + ArgoASFDemuxContext *asf = s->priv_data; + AVStream *st = s->streams[stream_index]; + int64_t offset; + uint32_t block = pts / asf->ckhdr.num_samples; + + if (block >= asf->ckhdr.num_blocks) + return -1; + + offset = asf->fhdr.chunk_offset + ASF_CHUNK_HEADER_SIZE + + (block * st->codecpar->block_align); + + if ((offset = avio_seek(s->pb, offset, SEEK_SET)) < 0) + return offset; + + asf->blocks_read = block; + return 0; +} + /* * Not actually sure what ASF stands for. * - Argonaut Sound File? @@ -255,7 +277,8 @@ AVInputFormat ff_argo_asf_demuxer = { .priv_data_size = sizeof(ArgoASFDemuxContext), .read_probe = argo_asf_probe, .read_header = argo_asf_read_header, - .read_packet = argo_asf_read_packet + .read_packet = argo_asf_read_packet, + .read_seek = argo_asf_seek, }; #endif