[FFmpeg-devel] avcodec: Allow to query number of consumed bytes using the new API

Submitted by jannis_wth on Jan. 31, 2019, 9:33 a.m.

Details

Message ID 0c645eff-1915-6b1d-2426-de3a40ed31da@gmx.de
State New
Headers show

Commit Message

jannis_wth Jan. 31, 2019, 9:33 a.m.
30.01.19 21:42 - jannis_wth:
> 30.01.19 21:02 - James Almer:
>> I guess avctx->internal->last_pkt_props could work for this, but it may
>> not be consistent across decoders.
> 
> avctx->internal->last_pkt_props stores the properties of the last passed
> packet, and does not get updated on decoding frames. Since I set the
> input-packets size to a constant (size is unknown) this is not very
> helpfull..

My bad, avctx->internal->last_pkt_props works as expected. Thank you James.

Patch hide | download patch | download mbox

From 2c9eee171e512a25c73c8ed144c8a130abb2d2a4 Mon Sep 17 00:00:00 2001
From: user <user@host>
Date: Thu, 31 Jan 2019 10:28:22 +0100
Subject: [PATCH 1/1] avcodec: Allow to query number of consumed bytes using
 the new API

Currently the only way to get the number of consumed bytes is by using
the deprecated decode_audio4() API. This patch adds a simple function
to fix this.

Signed-off-by: Jannis Kambs <jannis_wth@gmx.de>
---
 libavcodec/avcodec.h | 9 +++++++++
 libavcodec/utils.c   | 5 +++++
 2 files changed, 14 insertions(+)

diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index f554c53f0e..43bf84e58b 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -5714,6 +5714,15 @@  int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes);
  */
 int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes);
 
+/**
+ * This function allows to get the number of remaining bytes after
+ * avcodec_receive_frame() has been called.
+ *
+ * @param avctx the codec context
+ * @return number of remaining bytes from the input AVPacket.
+ */
+int avcodec_get_remaining_size(AVCodecContext *avctx);
+
 #if FF_API_OLD_BSF
 typedef struct AVBitStreamFilterContext {
     void *priv_data;
diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index d519b16092..998e77524e 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -1727,6 +1727,11 @@  int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes)
                                     frame_bytes);
 }
 
+int avcodec_get_remaining_size(AVCodecContext *avctx)
+{
+    return avctx->internal->last_pkt_props->size;
+}
+
 #if !HAVE_THREADS
 int ff_thread_init(AVCodecContext *s)
 {
-- 
2.11.0