diff --git a/mojo/services/media/common/cpp/fifo_allocator.cc b/mojo/services/media/common/cpp/fifo_allocator.cc
index 0823b44..b92b4e1 100644
--- a/mojo/services/media/common/cpp/fifo_allocator.cc
+++ b/mojo/services/media/common/cpp/fifo_allocator.cc
@@ -67,22 +67,20 @@
   return allocated->offset;
 }
 
-void FifoAllocator::ReleaseRegion(uint64_t size, uint64_t offset) {
+void FifoAllocator::ReleaseRegion(uint64_t offset) {
   // Start at active_->next. That's usually the region we're looking for.
-  bool released = Release(size, offset, active_->next, nullptr) ||
-                  Release(size, offset, front_, active_);
+  bool released = Release(offset, active_->next, nullptr) ||
+                  Release(offset, front_, active_);
   MOJO_DCHECK(released);
 }
 
-bool FifoAllocator::Release(uint64_t size,
-                            uint64_t offset,
+bool FifoAllocator::Release(uint64_t offset,
                             Region* begin,
                             Region* end) {
   MOJO_DCHECK(begin != nullptr || end == nullptr);
   for (Region* region = begin; region != end; region = region->next) {
     if (region->offset == offset) {
       MOJO_DCHECK(region->allocated);
-      MOJO_DCHECK(region->size == size);
       region->allocated = false;
 
       Region* prev = region->prev;
diff --git a/mojo/services/media/common/cpp/fifo_allocator.h b/mojo/services/media/common/cpp/fifo_allocator.h
index 06e66e5..f2e07d4 100644
--- a/mojo/services/media/common/cpp/fifo_allocator.h
+++ b/mojo/services/media/common/cpp/fifo_allocator.h
@@ -77,7 +77,7 @@
   uint64_t AllocateRegion(uint64_t size);
 
   // Releases a previously-allocated region.
-  void ReleaseRegion(uint64_t size, uint64_t offset);
+  void ReleaseRegion(uint64_t offset);
 
  private:
   // List element to track allocated and free regions.
@@ -93,7 +93,7 @@
 
   // Releases the specified region if it's found between begin (inclusive) and
   // end (exclusive).
-  bool Release(uint64_t size, uint64_t offset, Region* begin, Region* end);
+  bool Release(uint64_t offset, Region* begin, Region* end);
 
   // Advances the active region to one that's at least the specified size.
   // Returns false if none could be found.
diff --git a/mojo/services/media/common/cpp/shared_media_buffer_allocator.h b/mojo/services/media/common/cpp/shared_media_buffer_allocator.h
index 994e83f..3700a13 100644
--- a/mojo/services/media/common/cpp/shared_media_buffer_allocator.h
+++ b/mojo/services/media/common/cpp/shared_media_buffer_allocator.h
@@ -36,9 +36,9 @@
 
   // Releases a region of the buffer previously allocated by calling
   // AllocateRegionByOffset.
-  void ReleaseRegionByOffset(uint64_t size, uint64_t offset) {
+  void ReleaseRegionByOffset(uint64_t offset) {
     std::lock_guard<std::mutex> lock(lock_);
-    fifo_allocator_.ReleaseRegion(size, offset);
+    fifo_allocator_.ReleaseRegion(offset);
   }
 
   // Allocates a region of the buffer returning a pointer. If the requested
@@ -49,8 +49,8 @@
 
   // Releases a region of the buffer previously allocated by calling
   // AllocateRegion.
-  void ReleaseRegion(uint64_t size, void* ptr) {
-    ReleaseRegionByOffset(size, OffsetFromPtr(ptr));
+  void ReleaseRegion(void* ptr) {
+    ReleaseRegionByOffset(OffsetFromPtr(ptr));
   }
 
  protected:
diff --git a/services/media/framework/packet.cc b/services/media/framework/packet.cc
index eef3e3e..3c96701 100644
--- a/services/media/framework/packet.cc
+++ b/services/media/framework/packet.cc
@@ -32,7 +32,7 @@
     // payload() and handling deallocation themselves, so allocator_ can be
     // nullptr even when payload() is not.
     if (payload() != nullptr && allocator_ != nullptr) {
-      allocator_->ReleasePayloadBuffer(size(), payload());
+      allocator_->ReleasePayloadBuffer(payload());
     }
     delete this;
   }
diff --git a/services/media/framework/payload_allocator.cc b/services/media/framework/payload_allocator.cc
index 3687100..45198f8 100644
--- a/services/media/framework/payload_allocator.cc
+++ b/services/media/framework/payload_allocator.cc
@@ -19,7 +19,7 @@
   // PayloadAllocator implementation.
   void* AllocatePayloadBuffer(size_t size) override;
 
-  void ReleasePayloadBuffer(size_t size, void* buffer) override;
+  void ReleasePayloadBuffer(void* buffer) override;
 };
 
 void* DefaultAllocator::AllocatePayloadBuffer(size_t size) {
@@ -27,8 +27,7 @@
   return std::malloc(static_cast<size_t>(size));
 }
 
-void DefaultAllocator::ReleasePayloadBuffer(size_t size, void* buffer) {
-  DCHECK(size > 0);
+void DefaultAllocator::ReleasePayloadBuffer(void* buffer) {
   DCHECK(buffer);
   std::free(buffer);
 }
diff --git a/services/media/framework/payload_allocator.h b/services/media/framework/payload_allocator.h
index 8e398f3..633cdaa 100644
--- a/services/media/framework/payload_allocator.h
+++ b/services/media/framework/payload_allocator.h
@@ -21,7 +21,7 @@
   virtual void* AllocatePayloadBuffer(size_t size) = 0;
 
   // Releases a buffer previously allocated via AllocatePayloadBuffer.
-  virtual void ReleasePayloadBuffer(size_t size, void* buffer) = 0;
+  virtual void ReleasePayloadBuffer(void* buffer) = 0;
 };
 
 }  // namespace media
diff --git a/services/media/framework_ffmpeg/ffmpeg_decoder_base.h b/services/media/framework_ffmpeg/ffmpeg_decoder_base.h
index 63dd2ed..e829fca 100644
--- a/services/media/framework_ffmpeg/ffmpeg_decoder_base.h
+++ b/services/media/framework_ffmpeg/ffmpeg_decoder_base.h
@@ -57,7 +57,7 @@
 
       if (size_ != 0) {
         DCHECK(buffer_ != nullptr);
-        allocator_->ReleasePayloadBuffer(size_, buffer_);
+        allocator_->ReleasePayloadBuffer(buffer_);
         return;
       }
 
diff --git a/services/media/framework_mojo/mojo_allocator.cc b/services/media/framework_mojo/mojo_allocator.cc
index 6622357..65298fd 100644
--- a/services/media/framework_mojo/mojo_allocator.cc
+++ b/services/media/framework_mojo/mojo_allocator.cc
@@ -13,8 +13,8 @@
   return AllocateRegion(size);
 }
 
-void MojoAllocator::ReleasePayloadBuffer(size_t size, void* buffer) {
-  ReleaseRegion(size, buffer);
+void MojoAllocator::ReleasePayloadBuffer(void* buffer) {
+  ReleaseRegion(buffer);
 }
 
 }  // namespace media
diff --git a/services/media/framework_mojo/mojo_allocator.h b/services/media/framework_mojo/mojo_allocator.h
index 75a8371..a32d600 100644
--- a/services/media/framework_mojo/mojo_allocator.h
+++ b/services/media/framework_mojo/mojo_allocator.h
@@ -20,7 +20,7 @@
   // PayloadAllocator implementation.
   void* AllocatePayloadBuffer(size_t size) override;
 
-  void ReleasePayloadBuffer(size_t size, void* buffer) override;
+  void ReleasePayloadBuffer(void* buffer) override;
 };
 
 }  // namespace media
