From patchwork Mon Apr 3 14:33:55 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthieu Bouron X-Patchwork-Id: 3263 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.44.195 with SMTP id s186csp62984vss; Mon, 3 Apr 2017 05:40:53 -0700 (PDT) X-Received: by 10.223.133.146 with SMTP id 18mr16052947wrt.39.1491223253310; Mon, 03 Apr 2017 05:40:53 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id w10si3838654wrb.207.2017.04.03.05.40.52; Mon, 03 Apr 2017 05:40:53 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B180C68837B; Mon, 3 Apr 2017 15:40:48 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr0-f193.google.com (mail-wr0-f193.google.com [209.85.128.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 58301687EC7 for ; Mon, 3 Apr 2017 15:40:42 +0300 (EEST) Received: by mail-wr0-f193.google.com with SMTP id u18so33244926wrc.0 for ; Mon, 03 Apr 2017 05:40:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=8j5nZaMBsGwjhxFCbks8Jz0fkLDXt+Ff+Ocj0m0jB1o=; b=OQS2sXKWuwEZukm288CS/UUldPBNaCpxZg9vz6HMuxPnrC+/4/3mBx36VSwRy04x8v gjbEyKi3KhMpUWpNRXxAs7CQhf7Ji6a6tywjyoEbyT3OaHm/7/oR/uiBdWp6TqSr8gS2 sHROs4kqNnt5zWRD5LVP6DMftriHr28w0jNPwUnu+DTVWJeukLrgDWt2f2IuV0qQ44Da eXowWjNh3lEJH0dL4eg5W18CxWRrJkQQINhzu1Abe1V7jqrx3SI+vfzOwawbT5KVH/On v6lD26f9iacVR5FFInz/TgiOfUdYhEmQHTL1FO2YeFsEaFq9bSpVpVhJDgOB8hZFUViW qjtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=8j5nZaMBsGwjhxFCbks8Jz0fkLDXt+Ff+Ocj0m0jB1o=; b=fVQS6i6dOkzyVI8ZMQ6XVyLMFWju/CgdrzSLYTYk9zBRIrj2smDaye/P0OzJCCd6aT f9v5tvAShFAVOtb4Qzry2bLyBbbxMINnoDVs7IijcwmAFx1KkhpZQS5QJvti12FqkDP3 W1EpHuRzo/4Dnq9Wq+FC5axErl4MWt9ZGW9ul9/mp9EhwEAYvVMYn0TkNEsYNpR5OqC2 JFlrdcTjZZffbO60v2WeiRj2fZYRGrdBNuPDCgFU7h8/QYWRkq0Pxcvl2RveyiC0U7rP 3/nqQwV/vR+rn+S9EAVWv6nWTNxt2IpqyUh08DDbYu5jBbabVh1afiKRYCUICWPRNKxD AGWw== X-Gm-Message-State: AFeK/H2JKZGDlHW3c8SiTWuOLXYH6wyVDFXUZjAbwcD2y7Ja5ScbaFH5eoGBl6Q783wTNw== X-Received: by 10.223.151.217 with SMTP id t25mr15600274wrb.105.1491222826891; Mon, 03 Apr 2017 05:33:46 -0700 (PDT) Received: from boken.gopro.lcl (LPuteaux-656-1-74-135.w80-12.abo.wanadoo.fr. [80.12.80.135]) by smtp.gmail.com with ESMTPSA id o22sm3183438wro.45.2017.04.03.05.33.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 03 Apr 2017 05:33:46 -0700 (PDT) From: Matthieu Bouron To: ffmpeg-devel@ffmpeg.org Date: Mon, 3 Apr 2017 16:33:55 +0200 Message-Id: <20170403143357.10803-1-matthieu.bouron@gmail.com> X-Mailer: git-send-email 2.12.0 Subject: [FFmpeg-devel] [PATCH 1/3] doc/examples/extract_mvs: switch to new decoding API 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: Matthieu Bouron MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" --- doc/examples/extract_mvs.c | 72 ++++++++++++++++++++++------------------------ 1 file changed, 35 insertions(+), 37 deletions(-) diff --git a/doc/examples/extract_mvs.c b/doc/examples/extract_mvs.c index 8b22b40c11..d6730db3a2 100644 --- a/doc/examples/extract_mvs.c +++ b/doc/examples/extract_mvs.c @@ -34,39 +34,46 @@ static AVFrame *frame = NULL; static AVPacket pkt; static int video_frame_count = 0; -static int decode_packet(int *got_frame, int cached) +static int decode_packet(void) { - int decoded = pkt.size; - - *got_frame = 0; - if (pkt.stream_index == video_stream_idx) { - int ret = avcodec_decode_video2(video_dec_ctx, frame, got_frame, &pkt); + int ret = avcodec_send_packet(video_dec_ctx, &pkt); if (ret < 0) { - fprintf(stderr, "Error decoding video frame (%s)\n", av_err2str(ret)); + fprintf(stderr, "Error while sending a packet to the decoder: %s\n", av_err2str(ret)); return ret; } - if (*got_frame) { - int i; - AVFrameSideData *sd; - - video_frame_count++; - sd = av_frame_get_side_data(frame, AV_FRAME_DATA_MOTION_VECTORS); - if (sd) { - const AVMotionVector *mvs = (const AVMotionVector *)sd->data; - for (i = 0; i < sd->size / sizeof(*mvs); i++) { - const AVMotionVector *mv = &mvs[i]; - printf("%d,%2d,%2d,%2d,%4d,%4d,%4d,%4d,0x%"PRIx64"\n", - video_frame_count, mv->source, - mv->w, mv->h, mv->src_x, mv->src_y, - mv->dst_x, mv->dst_y, mv->flags); + while (ret >= 0) { + ret = avcodec_receive_frame(video_dec_ctx, frame); + if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) { + break; + } else if (ret < 0) { + fprintf(stderr, "Error while receiving a frame from the decoder: %s\n", av_err2str(ret)); + return ret; + } + + if (ret >= 0) { + int i; + AVFrameSideData *sd; + + video_frame_count++; + sd = av_frame_get_side_data(frame, AV_FRAME_DATA_MOTION_VECTORS); + if (sd) { + const AVMotionVector *mvs = (const AVMotionVector *)sd->data; + for (i = 0; i < sd->size / sizeof(*mvs); i++) { + const AVMotionVector *mv = &mvs[i]; + printf("%d,%2d,%2d,%2d,%4d,%4d,%4d,%4d,0x%"PRIx64"\n", + video_frame_count, mv->source, + mv->w, mv->h, mv->src_x, mv->src_y, + mv->dst_x, mv->dst_y, mv->flags); + } } + av_frame_unref(frame); } } } - return decoded; + return 0; } static int open_codec_context(AVFormatContext *fmt_ctx, enum AVMediaType type) @@ -116,7 +123,7 @@ static int open_codec_context(AVFormatContext *fmt_ctx, enum AVMediaType type) int main(int argc, char **argv) { - int ret = 0, got_frame; + int ret = 0; if (argc != 2) { fprintf(stderr, "Usage: %s