2 * RTP packetization for H.261 video (RFC 4587)
3 * Copyright (c) 2014 Thomas Volkert <thomas@homer-conferencing.com>
5 * This file is part of FFmpeg.
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
25 void ff_rtp_send_h261(AVFormatContext
*s1
, const uint8_t *frame_buf
, int frame_size
)
27 RTPMuxContext
*rtp_ctx
= s1
->priv_data
;
28 int processed_frame_size
;
29 int last_packet_of_frame
;
32 /* use the default 90 KHz time stamp */
33 rtp_ctx
->timestamp
= rtp_ctx
->cur_timestamp
;
35 /* continue as long as not all frame data is processed */
36 while (frame_size
> 0) {
37 tmp_buf_ptr
= rtp_ctx
->buf
;
38 *tmp_buf_ptr
++ = 1; /* V=1 */
43 processed_frame_size
= FFMIN(rtp_ctx
->max_payload_size
- 4, frame_size
);
45 //XXX: parse the h.261 bitstream and improve frame splitting here
47 last_packet_of_frame
= (processed_frame_size
== frame_size
);
49 memcpy(tmp_buf_ptr
, frame_buf
, processed_frame_size
);
50 tmp_buf_ptr
+= processed_frame_size
;
52 ff_rtp_send_data(s1
, rtp_ctx
->buf
, tmp_buf_ptr
- rtp_ctx
->buf
, last_packet_of_frame
);
54 frame_buf
+= processed_frame_size
;
55 frame_size
-= processed_frame_size
;