[asterisk-commits] rizzo: branch rizzo/astobj2 r77249 - /team/rizzo/astobj2/channels/chan_oss.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Thu Jul 26 00:44:25 CDT 2007
Author: rizzo
Date: Thu Jul 26 00:44:25 2007
New Revision: 77249
URL: http://svn.digium.com/view/asterisk?view=rev&rev=77249
Log:
update the video support code
Modified:
team/rizzo/astobj2/channels/chan_oss.c
Modified: team/rizzo/astobj2/channels/chan_oss.c
URL: http://svn.digium.com/view/asterisk/team/rizzo/astobj2/channels/chan_oss.c?view=diff&rev=77249&r1=77248&r2=77249
==============================================================================
--- team/rizzo/astobj2/channels/chan_oss.c (original)
+++ team/rizzo/astobj2/channels/chan_oss.c Thu Jul 26 00:44:25 2007
@@ -322,16 +322,10 @@
[general](+)
allow=h263p
-and this one to main/rtp.c:
-
-@@ -1509,5 +1511,6 @@
- [31] = {1, AST_FORMAT_H261},
- [34] = {1, AST_FORMAT_H263},
- [97] = {1, AST_FORMAT_ILBC},
-+ [98] = {1, AST_FORMAT_H263_PLUS},
- [99] = {1, AST_FORMAT_H264},
- [101] = {0, AST_RTP_DTMF},
-
+ */
+/*
+ * Examples for video encoding are at
+http://www.irisa.fr/texmex/people/dufouil/ffmpegdoxy/apiexample_8c-source.html
*/
/* Structures for ffmpeg processing */
@@ -368,7 +362,7 @@
static void ffmpeg_init(struct video_desc *);
/* Uninitialize the decoding structure */
static void ffmpeg_uninit(struct video_desc *);
-/* Clean the bitstream in the RTP payload */
+/* Extract the bitstream from the RTP payload */
static uint8_t *pre_process_data(uint8_t *, int *);
/* Decode video frame once completed */
static int decode_video(struct video_desc *);
@@ -495,9 +489,31 @@
return (ntohs(p[0])>>3) & MAKE_MASK(6);
}
-/*
- * It skips the extra header in the bitstream and constructs a valid
- * H.263+ bitstream start code (see RFC 2429).
+/*! \brief extract the bitstreem from the RTP payload.
+ * This is format dependent.
+ * For h261, the format is defined in RFC 4587
+ * and basically has a fixed 4-byte header as follows:
+ * 3 bits SBIT start bit, how many msbits to ignore in first byte
+ * 3 bits EBIT end bit, how many lsbits to ignore in last byte
+ * 1 bit I 1 if frame only contain INTRA blocks
+ * 1 bit V 0 if motion vector not used, 1 if may be used
+ * 4 bits GOBN gob number at start of packet (0 for gob header)
+ * 5 bits MBAP macroblock address predictor
+ * 5 bits QUANT quantizer value
+ * 5 bits HMVD horiz motion vector
+ * 5 bits VMVD vert. motion vector
+ *
+ * For h263, the format is defined in RFC 2429
+ * and basically has a fixed 2-byte header as follows:
+ * 5 bits RR reserved, shall be 0
+ * 1 bit P indicate a start/end condition,
+ * in which case the payload should be prepended
+ * by two zero-valued bytes.
+ * 1 bit V there is an additional VRC header after this header
+ * 6 bits PLEN length in bytes of extra picture header
+ * 3 bits PEBIT how many bits to be ignored in the last byte
+ *
+ * XXX the code below is not complete.
*/
static uint8_t *pre_process_data(uint8_t *data, int *len)
{
@@ -629,9 +645,12 @@
}
#endif
/*
- * If there is the discard flag, every packet must be discarded.
- * When a marked packet arrive we can restart the decoding.
- */
+ * If there is the discard flag, every packet must be discarded.
+ * When a marked packet arrive we can restart the decoding.
+ * XXX note that the RTP marker flag is sent as the LSB of the
+ * subclass. This is slightly annoying as it goes to overwrite
+ * the payload type entry.
+ */
if(env->discard) {
if(f->subclass & 0x01) {
free(env->data);
More information about the asterisk-commits
mailing list