Doing a little but of code Archaeology on old video conferencing code from 25 years ago.
Ran across an Interesting codec I wasn't familiar with. CPV
In the early days the same codec keep getting referenced, some like JPEG and H.261 are ubiquitous and still around. Others like CPV, NV, PicW are still mysteries at least to me and about to be forgotten in time.
CelB: The CELL-B encoding is a proprietary encoding proposed by Sun
Microsystems. The byte stream format is described in RFC TBD.
CPV: This proprietary encoding, "Compressed Packet Video is imple-
mented by Concept, Bolter, and ViewPoint Systems video codecs.
For further information, contact: Glenn Norem, President
ViewPoint Systems, Inc.
2247 Wisconsin Street, Suite 110
Dallas, TX 75229-2037
United States
Phone: +1-214-243-0634
JPEG: The encoding is specified in ISO Standards 10918-1 and
10918-2. The RTP payload format is as specified in RFC TBD.
H261: The encoding is specified in CCITT/ITU-T standard H.261. The
packetization and RTP-specific properties are described in RFC
TBD.
HDCC: The HDCC encoding is a proprietary encoding used by Silicon
Graphics. Contact
inperson@sgi.com for further details.
MPV: MPV designates the use MPEG-I and MPEG-II video encoding ele-
mentary streams as specified in ISO Standards ISO/IEC 11172
and 13818-2, respectively. The RTP payload format is as speci-
fied in RFC TBD, Section 3.
MP2T: MP2T designates the use of MPEG-II transport streams, for
either audio or video. The encapsulation is described in RFC
TBD, Section 2.
nv: The encoding is implemented in the program 'nv' developed at
Xerox PARC by Ron Frederick.
CUSM: The encoding is implemented in the program CU-SeeMe developed
at Cornell University by Dick Cogger, Scott Brim, Tim Dorcey
and John Lynn.
PicW: The encoding is implemented in the program PictureWindow
developed at Bolt, Beranek and Newman (BBN).
https://tools.ietf.org/html/draft-ietf-avt-profile-00 December 15, 1992Internet Engineering Task Force Audio-Video Transport Working Group INTERNET-DRAFT H. Schulzrinne AT&T Bell Laboratories December 15, 1992 Expires: 5/1/93 Sample Profile for the Use of RTP for Audio and Video Conferences with Minimal Control_number__name_ 31 H261 30 Bolt 29 dvc 28 nv Table 2: Default Video Encodings
Bolt is Bolter - CPV
V2 of this document extended to:
_number__name_ 31 H261 30 Bolt 29 PicW 28 nv 27 CUSM 26 JPEG Table 2: Standard Video Encodings
I just got a hold of the NV source code. (Xerox Park, Net Video _ which is plan to make sure it's available somewhere on github.
https://tools.ietf.org/html/draft-ietf-avt-profile-03 October 20, 1993
CPV: This encoding, "Compressed Packet Video" is implemented by Concept, Bolter, and ViewPoint Systems video codecs.
RFC 1890 AV Profile January 1996
PT encoding audio/video clock rate channels
name (A/V) (Hz) (audio)
_______________________________________________________________
0 PCMU A 8000 1
1 1016 A 8000 1
2 G721 A 8000 1
3 GSM A 8000 1
4 unassigned A 8000 1
5 DVI4 A 8000 1
6 DVI4 A 16000 1
7 LPC A 8000 1
8 PCMA A 8000 1
9 G722 A 8000 1
10 L16 A 44100 2
11 L16 A 44100 1
12 unassigned A
13 unassigned A
14 MPA A 90000 (see text)
15 G728 A 8000 1
16--23 unassigned A
24 unassigned V
25 CelB V 90000
26 JPEG V 90000
27 unassigned V
28 nv V 90000
29 unassigned V
30 unassigned V
31 H261 V 90000
32 MPV V 90000
33 MP2T AV 90000
34--71 unassigned ?
72--76 reserved N/A N/A N/A
77--95 unassigned ?
96--127 dynamic ?
Table 2: Payload types (PT) for standard audio and video encodings
From NV 2.7 code and similar in the 3.2 tree.
more bolter_decode.h/****************************************************************************//* bolter_decode.h -- Return codes from Bolter_Decode subroutine *//****************************************************************************/ #define VxSUCCESS 0 /* Packet successfully decoded */#define VxEXTRAPIXEL 1 /* Extra pixel past end of pixmap */#define VxBADADDRESS 2 /* Bad address in video data */#define VxUNTERMINATED 3 /* Packet not terminated */#define VxBADHEADER 4 /* Bad video header format */#define VxBADLENGTH 5 /* Unreasonable packet length */#define VxNONMOTION 6 /* Non-motion video packet found */ src/nv.c:#ifdef BOLTERsrc/nv.c: (void) Bolter_Decode(source[i].image, packet+8, len-8);src/nv.c:#endif BOLTER
From NV (Xerox Park, Net Video version 3.3)
There are Binary object for it.
7592 Feb 22 1994 cpv_decode-alpha.o
2849 Nov 1 1994 cpv_decode-bsdi.o
4176 Feb 18 1994 cpv_decode-dec5k.o
3120 Feb 18 1994 cpv_decode-hp.o
4112 Feb 17 1994 cpv_decode-irix4.o
5156 Mar 7 1994 cpv_decode-irix5.o
2764 Feb 17 1994 cpv_decode-sunos4.o
4132 Mar 7 1994 cpv_decode-sunos5.o
/src/cpv.h Feb 3, 1994
/****************************************************************************/ /* */ /* cpv.h -- Return codes from CPV_Decode subroutine to decode */ /* Concept/Bolter/ViewPoint Compressed Packet Video (CPV) (TM) */ /* */ /****************************************************************************/ /* */ /* Copyright (c) 1994 by the University of Southern California. */ /* All rights reserved. */ /* */ /* COMMERCIAL USE OF THIS CODE IS STRICTLY PROHIBITED WITHOUT THE */ /* SPECIFIC PRIOR WRITTEN AUTHORIZATION OF VIEWPOINT SYSTEMS, INC. */ /* de-CPV-ware(TM), CPV(TM), and Compressed Packet Video(TM) are */ /* trademarks of VIEWPOINT SYSTEMS, INC., 2247 Wisconsin Street */ /* #110, DALLAS, TEXAS 75229 */ /* */ /* Permission to use, copy, and distribute this software and its */ /* documentation in binary form for non-commercial purposes and */ /* without fee is hereby granted, provided that the above copyright */ /* notice appears in all copies, that both the copyright notice and */ /* this permission notice appear in supporting documentation, and */ /* that any documentation, advertising materials, and other */ /* materials related to such distribution and use acknowledge that */ /* the software was developed by the University of Southern */ /* California, Information Sciences Institute. The name of the */ /* University may not be used to endorse or promote products derived */ /* from this software without specific prior written permission. */ /* */ /* THE UNIVERSITY OF SOUTHERN CALIFORNIA makes no representations */ /* about the suitability of this software for any purpose. THIS */ /* SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED */ /* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES */ /* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ /* */ /* Other copyrights might apply to parts of this software and are */ /* so noted when applicable. */ /* */ /****************************************************************************/ /* */ /* This software decompression function is also known as */ /* "de-CPV-ware", Version 1.0. */ /* */ /****************************************************************************/ /* */ /* Author: Stephen Casner, casner@isi.edu */ /* USC Information Sciences Institute */ /* 4676 Admiralty Way */ /* Marina del Rey, CA 90292-6695 */ /* */ /****************************************************************************/ /* */ /* Programming Interface */ /* */ /* int CPV_Decode(image, pktptr, pktlen) */ /* struct vidimage { Output image arrays CPV_WIDTHxCPV_HEIGHT */ /* unsigned char *y_data; Pixel luminance image */ /* char *uv_data; Pixel chrominance image */ /* short width, height; Size of pixel image */ /* Other stuff here that we ignore */ /* } *image; Pointer to output image array struct */ /* unsigned char *pktptr; Pointer to start of video data in packet */ /* int pktlen; Length of video data as received */ /* */ /* The caller is responsible for allocating the image output */ /* arrays y_data and uv_data; these arrays continuously maintain */ /* the output image as it is updated for each call. For each */ /* call, one packet of compressed video data is decompressed and */ /* written as Y and UV pixels at the addressed locations in the */ /* y_data and uv_data output arrays. The image is in "4:2:2" */ /* format; that is, for each horizontal pair of Y pixels there is */ /* one U and one V pixel that together form the chrominance shared */ /* by both Y pixels. The conversion from the encoding of video */ /* data in the packet to Y and UV pixels is accomplished with */ /* lookup tables indexed by an RGB value of 5 bits each. These */ /* tables occupy a total of 98304 bytes. These lookup tables may */ /* be supplied by the caller in the two arrays: */ /* */ /* extern unsigned char rgb2y[32768]; RGB to Y or B&W table */ /* extern unsigned short rgb2uv[32768]; RGB to U & V table */ /* */ /* Or, if this module is compiled with FIRST_ENTRY defined, */ /* static arrays will be allocated and on the first call tables */ /* values will be calculated. */ /* */ /* For each rectangular area of the image which has been updated, */ /* a call is made to the following routine to allow the caller to */ /* further process and display those parts of the image: */ /* */ /* extern void VidImage_UpdateRect(image, x, y, width, height); */ /* struct vidimage *image; Pointer to output image array struct */ /* int x,y; Offsets of area within image (left,top) */ /* int width,height; Size of update area in pixels */ /* */ /* The return value from CPV_decode is an integer success/failure */ /* code. */ /* */ /****************************************************************************/ #define CPV_SUCCESS 0 /* Packet successfully decoded */ #define CPV_EXTRAPIXEL 1 /* Extra pixel past end of pixmap */ #define CPV_BADADDRESS 2 /* Bad address in video data */ #define CPV_UNTERM 3 /* Packet not terminated */ #define CPV_BADHEADER 4 /* Bad video header format */ #define CPV_BADLENGTH 5 /* Unreasonable packet length */ #define CPV_NONMOTION 6 /* Non-motion video packet found */ #define CPV_WIDTH 256 #define CPV_HEIGHT 200 extern int CPV_Decode(vidimage_t *image, unsigned char *data, int len);x
No comments:
Post a Comment