ARTPAssembler.h revision 39ddf8e0f18766f7ba1e3246b774aa6ebd93eea8
1e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*
2e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard * Copyright (C) 2010 The Android Open Source Project
3e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard *
4e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard * Licensed under the Apache License, Version 2.0 (the "License");
5e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard * you may not use this file except in compliance with the License.
6e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard * You may obtain a copy of the License at
7e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard *
8e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard *      http://www.apache.org/licenses/LICENSE-2.0
9e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard *
10e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard * Unless required by applicable law or agreed to in writing, software
11e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard * distributed under the License is distributed on an "AS IS" BASIS,
12e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard * See the License for the specific language governing permissions and
14e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard * limitations under the License.
15e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard */
16e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
17e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#ifndef A_RTP_ASSEMBLER_H_
18e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
19e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define A_RTP_ASSEMBLER_H_
20e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
21e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#include <media/stagefright/foundation/ABase.h>
225d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen#include <utils/RefBase.h>
23e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
24e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardnamespace android {
25e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
26e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstruct ABuffer;
27e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstruct ARTPSource;
28e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
29e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardstruct ARTPAssembler : public RefBase {
30e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    enum AssemblyStatus {
315d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        MALFORMED_PACKET,
325d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen        WRONG_SEQUENCE_NUMBER,
33e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        NOT_ENOUGH_DATA,
34e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        OK
355d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    };
365d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen
375d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    ARTPAssembler();
38e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
39e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    void onPacketReceived(const sp<ARTPSource> &source);
405d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    virtual void onByeReceived() = 0;
415d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen
425d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissenprotected:
435d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    static void PropagateTimes(
44e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        const sp<ABuffer> &from, const sp<ABuffer> &to);
45e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
465d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    virtual AssemblyStatus assembleMore(const sp<ARTPSource> &source) = 0;
475d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    virtual void packetLost() = 0;
485d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen
495d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissenprivate:
505d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen    int64_t mFirstFailureTimeUs;
51e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
52e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard    DISALLOW_EVIL_CONSTRUCTORS(ARTPAssembler);
535d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen};
545d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen
55e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}  // namespace android
56e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
575d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen#endif  // A_RTP_ASSEMBLER_H_
585d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen