summaryrefslogtreecommitdiff
path: root/src/rtp_profile.h
blob: 6865adbe5442c9defc41a6640fa048114cd43a2e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set et sw=2 ts=2: */
/***************************************************************************
 *            rtp_profile.h
 *
 *  Wed Sep 11 08:40:11 CEST 2013
 *  Copyright 2013 Bent Bisballe Nyeng
 *  deva@aasimon.org
 ****************************************************************************/

/*
 *  This file is part of lrtp.
 *
 * lrtp is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * lrtp is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with lrtp; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 */
#ifndef __LRTP_RTP_PROFILE_H__
#define __LRTP_RTP_PROFILE_H__

#include <stdint.h>
#include <list>

#include "rtp.h"

struct lrtp_t;

typedef struct {
  char *data;
  size_t size;
  size_t offset;
  unsigned long int timestamp;
} inputframe_t;

typedef std::list<inputframe_t *> iframelist_t;

typedef struct {
  char *data;
  size_t size;

  csrc_t csrc;
  unsigned int ts;
  // TODO: Add other metadata ...

} outputframe_t;

typedef std::list<outputframe_t *> oframelist_t;

struct lrtp_profile_t {
  struct lrtp_t *lrtp;
  lrtp_profile_id_t id;
  unsigned int csrc;

  // Frames ready for packing with this profile:
  iframelist_t framelist;

  //  Profile functions:
  /**
   * Custom callback used when a frame has been processed.
   * This could be the place to call free(3), decrease a reference counter or
   * re-add to a memory pool.
   * Use ptr to pass custom parameters to the callback.
   * If NULL, no call is performed.
   */
  void (*process_finished)(struct lrtp_profile_t *profile,
                           const char *frame, void *ptr);
  void *process_finished_ptr;

  int (*pack)(struct lrtp_profile_t *profile,
              const char *frame, size_t framesize,
              RTP &rtp);

  int (*unpack)(struct lrtp_profile_t *profile,
                const RTP &rtp,
                oframelist_t &framelist);

  void (*destroy)(struct lrtp_profile_t *profile);

};

#endif/*__LRTP_RTP_PROFILE_H__*/