diff --git a/libavformat/asfenc.c b/libavformat/asfenc.c
index 1e42e1c825..d1bb07b8eb 100644
--- a/libavformat/asfenc.c
+++ b/libavformat/asfenc.c
@@ -808,6 +808,7 @@ static int asf_write_packet(AVFormatContext *s, AVPacket *pkt)
 
     /* check index */
     if ((!asf->is_streamed) && (flags & AV_PKT_FLAG_KEY)) {
+        uint16_t packet_count = asf->nb_packets - packet_number;
         start_sec = (int)(pts / INT64_C(10000000));
         if (start_sec != (int)(asf->last_indexed_pts / INT64_C(10000000))) {
             if (start_sec > asf->nb_index_memory_alloc) {
@@ -817,8 +818,8 @@ static int asf_write_packet(AVFormatContext *s, AVPacket *pkt)
             for(i=asf->nb_index_count;i<start_sec;i++) {
                 // store
                 asf->index_ptr[i].packet_number = (uint32_t)packet_number;
-                asf->index_ptr[i].packet_count  = (uint16_t)(asf->nb_packets-packet_number);
-                asf->maximum_packet = FFMAX(asf->maximum_packet, (uint16_t)(asf->nb_packets-packet_number));
+                asf->index_ptr[i].packet_count  = (uint16_t)packet_count;
+                asf->maximum_packet = FFMAX(asf->maximum_packet, (uint16_t)packet_count);
             }
             asf->nb_index_count = start_sec;
             asf->last_indexed_pts = pts;