author Wes Kocher <>
Tue, 01 Mar 2016 11:36:35 -0800
changeset 322637 71fabdbb3567e3d16836fac9daf84f9e6eaf5543
parent 313059 3e4d6d892dd8e8bfb31022ca5268c17d7529c41b
child 304162 a602dbc1a620fa3cd96a093b13893376aed3106a
permissions -rw-r--r--
Backed out 2 changesets (bug 1251714, bug 1251715) for gtest failures in media code a=backout Backed out changeset 1bbd0cd10f76 (bug 1251714) Backed out changeset 80b197c5608f (bug 1251715) MozReview-Commit-ID: EHOtiKLS4Xr

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at */

 * Deinterlacer is a utility class to allow Downscaler to work with interlaced
 * images.

 * Since Downscaler needs to receive rows in top-to-bottom or
 * bottom-to-top order, it can't natively handle interlaced images, in which the
 * rows arrive in an interleaved order. Deinterlacer solves this problem by
 * acting as an intermediate buffer that records decoded rows. Unlike
 * Downscaler, it allows the rows to be written in arbitrary order. After each
 * pass, calling PropagatePassToDownscaler() will downscale every buffered row
 * in a single operation. The rows remain in the buffer, so rows that were
 * written in one pass will be included in subsequent passes.

#ifndef mozilla_image_Deinterlacer_h
#define mozilla_image_Deinterlacer_h

#include "Downscaler.h"

namespace mozilla {
namespace image {

class Deinterlacer
  explicit Deinterlacer(const nsIntSize& aImageSize);
  bool IsValid() { return !!mBuffer; }

  uint8_t* RowBuffer(uint32_t aRow);
  void PropagatePassToDownscaler(Downscaler& aDownscaler);

  uint32_t RowSize() const;

  nsIntSize mImageSize;
  UniquePtr<uint8_t[]> mBuffer;

} // namespace image
} // namespace mozilla

#endif // mozilla_image_Deinterlacer_h