锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
{
//閲嶈澆闇瑕佺殑綆楁硶鎿嶄綔
template <typename R>
op<R> operator=(R i)
{
return op<R>(i);
}
};
template <typename T>
struct op
{
op(T i): _i(i) {}
T operator()(T &i)
{
return i = _i;
}
T _i;
};
浠ヤ笂鐨勪唬鐮佸疄鐜?鎿嶄綔濡傛灉闇瑕佸叾浠栨搷浣滃垯閲嶈澆鐩稿簲鐨勬搷浣滀緥濡?=
渚濇綾繪帹鍗犱綅綾誨疄鐜?=騫墮氳繃浠垮嚱鏁板彲浠ュ疄鐜?=鐨勬搷浣滀互涓嬫槸瀹屾垚鐨勪唬鐮?br>
#include "stdafx.h"
#include <vector>
#include <algorithm>
using namespace std;
//浠垮嚱鏁幫紝鍗抽噸杞戒簡()鎿嶄綔鐨勭被
template <typename T>
struct op
{
op(T i): _i(i) {}
T operator()(T &i)
{
return i = _i;
}
T _i;
};
template <typename T>
struct op1
{
op1(T i):_i(i){}
T operator()(T &i)
{
return i + _i;
}
T _i;
};
//鍗犱綅絎?/span>
struct place_holder
{
//閲嶈澆闇瑕佺殑綆楁硶鎿嶄綔
template <typename R>
op<R> operator=(R i)
{
return op<R>(i);
}
template <typename R>
op1<R> operator+=(R i)
{
return op1<R>(i);
}
};
place_holder _1;
int _tmain(int argc, _TCHAR* argv[])
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
//for_each(v.begin(), v.end(), op()); //鍘熸牸寮忓姝?/span>
for_each(v.begin(), v.end(), _1=2); //_1=2鏄竴涓豢鍑芥暟,閫氳繃閲嶈澆=瀹炵幇
return 0;
}
]]>
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct Person
{
Person(const string& name)
: name_(name)
{}
string Name()
{
return name_;
}
void SetName(string name)
{
name_ = name;
}
string name_;
};
template <typename R, typename T, typename Arg>
class simple_binder
{
public:
explicit simple_binder(R (T::*pfn)(Arg), const Arg& arg)
: pfn_(pfn)
, arg_(arg)
{}
R operator()(T& t)
{
return (t.*pfn_)(arg_);
}
private:
R (T::*pfn_)(Arg);
Arg arg_;
};
template <typename R, typename T, typename Arg>
simple_binder<R, T, Arg>
simple_bind( R (T::*pfn)(Arg), const Arg& arg)
{
return simple_binder<R, T, Arg>(pfn, arg);
}
int main()
{
Person person("Ralph");
//smimple_bind鐢熸垚涓涓豢鍑芥暟綾伙紝榪欎釜綾繪瀯閫犳椂璧嬪間簡arg
//閬囧埌(person)鏃訛紝璋冪敤榪欎釜浠垮嚱鏁扮被閲嶈澆鐨?)鎿嶄綔鍗?br> //t.*pfn(arg)
//鍙堝洖褰掍負涓涓嚱鏁幫紝涓嶈繃鍙傛暟鍙互鑷繁鎺у埗浜?濞冨搱鍝?/span>
simple_bind(&Person::SetName, string("Martin"))(person);
cout << person.Name() << endl;
}
]]>
F = r [ R ] + g [ G ] + b [ B ]
鍏朵腑錛宺銆乬銆乥鍒嗗埆涓轟笁鍩鴻壊鍙備笌娣峰悎鐨勭郴鏁般傚綋涓夊熀鑹插垎閲忛兘涓?錛堟渶寮憋級鏃舵販鍚堜負榛戣壊鍏夛紱鑰屽綋涓夊熀鑹插垎閲忛兘涓簁錛堟渶寮猴級鏃舵販鍚堜負鐧借壊鍏夈傝皟鏁磖銆乬銆乥涓変釜緋繪暟鐨勫鹼紝鍙互娣峰悎鍑轟粙浜庨粦鑹插厜鍜岀櫧鑹插厜涔嬮棿鐨勫悇縐嶅悇鏍風殑鑹插厜銆?br>閭d箞YUV鍙堜粠浣曡屾潵鍛紵鍦ㄧ幇浠e僵鑹茬數瑙嗙郴緇熶腑錛岄氬父閲囩敤涓夌褰╄壊鎽勫儚鏈烘垨褰╄壊CCD鎽勫儚鏈鴻繘琛屾憚鍍忥紝鐒跺悗鎶婃憚寰楃殑褰╄壊鍥懼儚淇″彿緇忓垎鑹層佸垎鍒斁澶ф牎姝e悗寰楀埌RGB錛屽啀緇忚繃鐭╅樀鍙樻崲鐢佃礬寰楀埌浜害淇″彿Y鍜屼袱涓壊宸俊鍙稲錛峐錛堝嵆U錛夈丅錛峐錛堝嵆V錛夛紝鏈鍚庡彂閫佺灝嗕寒搴﹀拰鑹插樊涓変釜淇″彿鍒嗗埆榪涜緙栫爜錛岀敤鍚屼竴淇¢亾鍙戦佸嚭鍘匯傝繖縐嶈壊褰╃殑琛ㄧず鏂規硶灝辨槸鎵璋撶殑YUV鑹插僵絀洪棿琛ㄧず銆?br>閲囩敤YUV鑹插僵絀洪棿鐨勯噸瑕佹ф槸瀹冪殑浜害淇″彿Y鍜岃壊搴︿俊鍙稶銆乂鏄垎紱葷殑銆傚鏋滃彧鏈塝淇″彿鍒嗛噺鑰屾病鏈塙銆乂鍒嗛噺錛岄偅涔堣繖鏍瘋〃紺虹殑鍥懼儚灝辨槸榛戠櫧鐏板害鍥懼儚銆傚僵鑹茬數瑙嗛噰鐢╕UV絀洪棿姝f槸涓轟簡鐢ㄤ寒搴︿俊鍙穀瑙e喅褰╄壊鐢佃鏈轟笌榛戠櫧鐢佃鏈虹殑鍏煎闂錛屼嬌榛戠櫧鐢佃鏈轟篃鑳芥帴鏀跺僵鑹茬數瑙嗕俊鍙楓?br>YUV涓嶳GB鐩鎬簰杞崲鐨勫叕寮忓涓嬶紙RGB鍙栧艱寖鍥村潎涓?-255錛夛細
Y = 0.299R + 0.587G + 0.114B
U = -0.147R - 0.289G + 0.436B
V = 0.615R - 0.515G - 0.100B
R = Y + 1.14V
G = Y - 0.39U - 0.58V
B = Y + 2.03U
鍦―irectShow涓紝甯歌鐨凴GB鏍煎紡鏈塕GB1銆丷GB4銆丷GB8銆丷GB565銆丷GB555銆丷GB24銆丷GB32銆丄RGB32絳夛紱甯歌鐨刌UV鏍煎紡鏈塝UY2銆乊UYV銆乊VYU銆乁YVY銆丄YUV銆乊41P銆乊411銆乊211銆両F09銆両YUV銆乊V12銆乊VU9銆?YUV411銆乊UV420絳夈備綔涓鴻棰戝獟浣撶被鍨嬬殑杈呭姪璇存槑綾誨瀷錛圫ubtype錛夛紝瀹冧滑瀵瑰簲鐨凣UID瑙佽〃2.3銆?br>
琛?.3 甯歌鐨凴GB鍜孻UV鏍煎紡
GUID 鏍煎紡鎻忚堪
MEDIASUBTYPE_RGB1 2鑹詫紝姣忎釜鍍忕礌鐢?浣嶈〃紺猴紝闇瑕佽皟鑹叉澘
MEDIASUBTYPE_RGB4 16鑹詫紝姣忎釜鍍忕礌鐢?浣嶈〃紺猴紝闇瑕佽皟鑹叉澘
MEDIASUBTYPE_RGB8 256鑹詫紝姣忎釜鍍忕礌鐢?浣嶈〃紺猴紝闇瑕佽皟鑹叉澘
MEDIASUBTYPE_RGB565 姣忎釜鍍忕礌鐢?6浣嶈〃紺猴紝RGB鍒嗛噺鍒嗗埆浣跨敤5浣嶃?浣嶃?浣?br>MEDIASUBTYPE_RGB555 姣忎釜鍍忕礌鐢?6浣嶈〃紺猴紝RGB鍒嗛噺閮戒嬌鐢?浣嶏紙鍓╀笅鐨?浣嶄笉鐢級
MEDIASUBTYPE_RGB24 姣忎釜鍍忕礌鐢?4浣嶈〃紺猴紝RGB鍒嗛噺鍚勪嬌鐢?浣?br>MEDIASUBTYPE_RGB32 姣忎釜鍍忕礌鐢?2浣嶈〃紺猴紝RGB鍒嗛噺鍚勪嬌鐢?浣嶏紙鍓╀笅鐨?浣嶄笉鐢級
MEDIASUBTYPE_ARGB32 姣忎釜鍍忕礌鐢?2浣嶈〃紺猴紝RGB鍒嗛噺鍚勪嬌鐢?浣嶏紙鍓╀笅鐨?浣嶇敤浜庤〃紺篈lpha閫氶亾鍊鹼級
MEDIASUBTYPE_YUY2 YUY2鏍煎紡錛屼互4:2:2鏂瑰紡鎵撳寘
MEDIASUBTYPE_YUYV YUYV鏍煎紡錛堝疄闄呮牸寮忎笌YUY2鐩稿悓錛?br>MEDIASUBTYPE_YVYU YVYU鏍煎紡錛屼互4:2:2鏂瑰紡鎵撳寘
MEDIASUBTYPE_UYVY UYVY鏍煎紡錛屼互4:2:2鏂瑰紡鎵撳寘
MEDIASUBTYPE_AYUV 甯lpha閫氶亾鐨?:4:4 YUV鏍煎紡
MEDIASUBTYPE_Y41P Y41P鏍煎紡錛屼互4:1:1鏂瑰紡鎵撳寘
MEDIASUBTYPE_Y411 Y411鏍煎紡錛堝疄闄呮牸寮忎笌Y41P鐩稿悓錛?br>MEDIASUBTYPE_Y211 Y211鏍煎紡
MEDIASUBTYPE_IF09 IF09鏍煎紡
MEDIASUBTYPE_IYUV IYUV鏍煎紡
MEDIASUBTYPE_YV12 YV12鏍煎紡
MEDIASUBTYPE_YVU9 YVU9鏍煎紡
涓嬮潰鍒嗗埆浠嬬粛鍚勭RGB鏍煎紡銆?br>
¨RGB1銆丷GB4銆丷GB8閮芥槸璋冭壊鏉跨被鍨嬬殑RGB鏍煎紡錛屽湪鎻忚堪榪欎簺濯掍綋綾誨瀷鐨勬牸寮忕粏鑺傛椂錛岄氬父浼氬湪BITMAPINFOHEADER鏁版嵁緇撴瀯鍚庨潰璺熺潃涓涓皟鑹叉澘錛堝畾涔変竴緋誨垪棰滆壊錛夈傚畠浠殑鍥懼儚鏁版嵁騫朵笉鏄湡姝g殑棰滆壊鍊鹼紝鑰屾槸褰撳墠鍍忕礌棰滆壊鍊煎湪璋冭壊鏉夸腑鐨勭儲寮曘備互RGB1錛?鑹蹭綅鍥撅級涓轟緥錛屾瘮濡傚畠鐨勮皟鑹叉澘涓畾涔夌殑涓ょ棰滆壊鍊間緷嬈′負0x000000錛堥粦鑹詫級鍜?xFFFFFF錛堢櫧鑹詫級錛岄偅涔堝浘鍍忔暟鎹?01101010111…錛堟瘡涓儚绱犵敤1浣嶈〃紺猴級琛ㄧず瀵瑰簲鍚勫儚绱犵殑棰滆壊涓猴細榛戦粦鐧界櫧榛戠櫧榛戠櫧榛戠櫧鐧界櫧…銆?br>
¨ RGB565浣跨敤16浣嶈〃紺轟竴涓儚绱狅紝榪?6浣嶄腑鐨?浣嶇敤浜嶳錛?浣嶇敤浜嶨錛?浣嶇敤浜嶣銆傜▼搴忎腑閫氬父浣跨敤涓涓瓧錛圵ORD錛屼竴涓瓧絳変簬涓や釜瀛楄妭錛夋潵鎿嶄綔涓涓儚绱犮傚綋璇誨嚭涓涓儚绱犲悗錛岃繖涓瓧鐨勫悇涓綅鎰忎箟濡備笅錛?br>楂樺瓧鑺?nbsp; 浣庡瓧鑺?br>R R R R R G G G G G G B B B B B
鍙互緇勫悎浣跨敤灞忚斀瀛楀拰縐諱綅鎿嶄綔鏉ュ緱鍒癛GB鍚勫垎閲忕殑鍊鹼細
#define RGB565_MASK_RED 0xF800
#define RGB565_MASK_GREEN 0x07E0
#define RGB565_MASK_BLUE 0x001F
R = (wPixel & RGB565_MASK_RED) >> 11; // 鍙栧艱寖鍥?-31
G = (wPixel & RGB565_MASK_GREEN) >> 5; // 鍙栧艱寖鍥?-63
B = wPixel & RGB565_MASK_BLUE; // 鍙栧艱寖鍥?-31
¨ RGB555鏄彟涓縐?6浣嶇殑RGB鏍煎紡錛孯GB鍒嗛噺閮界敤5浣嶈〃紺猴紙鍓╀笅鐨?浣嶄笉鐢級銆備嬌鐢ㄤ竴涓瓧璇誨嚭涓涓儚绱犲悗錛岃繖涓瓧鐨勫悇涓綅鎰忎箟濡備笅錛?br>楂樺瓧鑺?nbsp; 浣庡瓧鑺?br>X R R R R G G G G G B B B B B 錛圶琛ㄧず涓嶇敤錛屽彲浠ュ拷鐣ワ級
鍙互緇勫悎浣跨敤灞忚斀瀛楀拰縐諱綅鎿嶄綔鏉ュ緱鍒癛GB鍚勫垎閲忕殑鍊鹼細
#define RGB555_MASK_RED 0x7C00
#define RGB555_MASK_GREEN 0x03E0
#define RGB555_MASK_BLUE 0x001F
R = (wPixel & RGB555_MASK_RED) >> 10; // 鍙栧艱寖鍥?-31
G = (wPixel & RGB555_MASK_GREEN) >> 5; // 鍙栧艱寖鍥?-31
B = wPixel & RGB555_MASK_BLUE; // 鍙栧艱寖鍥?-31
¨ RGB24浣跨敤24浣嶆潵琛ㄧず涓涓儚绱狅紝RGB鍒嗛噺閮界敤8浣嶈〃紺猴紝鍙栧艱寖鍥翠負0-255銆傛敞鎰忓湪鍐呭瓨涓璕GB鍚勫垎閲忕殑鎺掑垪欏哄簭涓猴細BGR BGR BGR…銆傞氬父鍙互浣跨敤RGBTRIPLE鏁版嵁緇撴瀯鏉ユ搷浣滀竴涓儚绱狅紝瀹冪殑瀹氫箟涓猴細
typedef struct tagRGBTRIPLE {
BYTE rgbtBlue; // 钃濊壊鍒嗛噺
BYTE rgbtGreen; // 緇胯壊鍒嗛噺
BYTE rgbtRed; // 綰㈣壊鍒嗛噺
} RGBTRIPLE;
¨ RGB32浣跨敤32浣嶆潵琛ㄧず涓涓儚绱狅紝RGB鍒嗛噺鍚勭敤鍘?浣嶏紝鍓╀笅鐨?浣嶇敤浣淎lpha閫氶亾鎴栬呬笉鐢ㄣ傦紙ARGB32灝辨槸甯lpha閫氶亾鐨?RGB32銆傦級娉ㄦ剰鍦ㄥ唴瀛樹腑RGB鍚勫垎閲忕殑鎺掑垪欏哄簭涓猴細BGRA BGRABGRA…銆傞氬父鍙互浣跨敤RGBQUAD鏁版嵁緇撴瀯鏉ユ搷浣滀竴涓儚绱狅紝瀹冪殑瀹氫箟涓猴細
typedef struct tagRGBQUAD {
BYTE rgbBlue; // 钃濊壊鍒嗛噺
BYTE rgbGreen; // 緇胯壊鍒嗛噺
BYTE rgbRed; // 綰㈣壊鍒嗛噺
BYTE rgbReserved; // 淇濈暀瀛楄妭錛堢敤浣淎lpha閫氶亾鎴栧拷鐣ワ級
} RGBQUAD;
涓嬮潰浠嬬粛鍚勭YUV鏍煎紡銆俌UV鏍煎紡閫氬父鏈変袱澶х被錛氭墦鍖咃紙packed錛夋牸寮忓拰騫抽潰錛坧lanar錛夋牸寮忋傚墠鑰呭皢YUV鍒嗛噺瀛樻斁鍦ㄥ悓涓涓暟緇勪腑錛岄氬父鏄嚑涓浉閭葷殑鍍忕礌緇勬垚涓涓畯鍍忕礌錛坢acro-pixel錛夛紱鑰屽悗鑰呬嬌鐢ㄤ笁涓暟緇勫垎寮瀛樻斁YUV涓変釜鍒嗛噺錛屽氨鍍忔槸涓涓笁緇村鉤闈竴鏍楓傝〃2.3涓殑YUY2鍒?Y211閮芥槸鎵撳寘鏍煎紡錛岃孖F09鍒癥VU9閮芥槸騫抽潰鏍煎紡銆傦紙娉ㄦ剰錛氬湪浠嬬粛鍚勭鍏蜂綋鏍煎紡鏃訛紝YUV鍚勫垎閲忛兘浼氬甫鏈変笅鏍囷紝濡俌0銆乁0銆乂0琛ㄧず絎竴涓儚绱犵殑YUV鍒嗛噺錛孻1銆乁1銆乂1琛ㄧず絎簩涓儚绱犵殑YUV鍒嗛噺錛屼互姝ょ被鎺ㄣ傦級
¨ YUY2錛堝拰YUYV錛夋牸寮忎負姣忎釜鍍忕礌淇濈暀Y鍒嗛噺錛岃孶V鍒嗛噺鍦ㄦ按騫蟲柟鍚戜笂姣忎袱涓儚绱犻噰鏍蜂竴嬈°備竴涓畯鍍忕礌涓?涓瓧鑺傦紝瀹為檯琛ㄧず2涓儚绱犮傦紙4:2:2鐨勬剰鎬濅負涓涓畯鍍忕礌涓湁4涓猋鍒嗛噺銆?涓猆鍒嗛噺鍜?涓猇鍒嗛噺銆傦級鍥懼儚鏁版嵁涓璝UV鍒嗛噺鎺掑垪欏哄簭濡備笅錛?br>Y0 U0 Y1 V0 Y2 U2 Y3 V2 …
¨ YVYU鏍煎紡璺焂UY2綾諱技錛屽彧鏄浘鍍忔暟鎹腑YUV鍒嗛噺鐨勬帓鍒楅『搴忔湁鎵涓嶅悓錛?br>Y0 V0 Y1 U0 Y2 V2 Y3 U2 …
¨ UYVY鏍煎紡璺焂UY2綾諱技錛屽彧鏄浘鍍忔暟鎹腑YUV鍒嗛噺鐨勬帓鍒楅『搴忔湁鎵涓嶅悓錛?br>U0 Y0 V0 Y1 U2 Y2 V2 Y3 …
¨ AYUV鏍煎紡甯︽湁涓涓狝lpha閫氶亾錛屽茍涓斾負姣忎釜鍍忕礌閮芥彁鍙朰UV鍒嗛噺錛屽浘鍍忔暟鎹牸寮忓涓嬶細
A0 Y0 U0 V0 A1 Y1 U1 V1 …
¨ Y41P錛堝拰Y411錛夋牸寮忎負姣忎釜鍍忕礌淇濈暀Y鍒嗛噺錛岃孶V鍒嗛噺鍦ㄦ按騫蟲柟鍚戜笂姣?涓儚绱犻噰鏍蜂竴嬈°備竴涓畯鍍忕礌涓?2涓瓧鑺傦紝瀹為檯琛ㄧず8涓儚绱犮傚浘鍍忔暟鎹腑YUV鍒嗛噺鎺掑垪欏哄簭濡備笅錛?br>U0 Y0 V0 Y1 U4 Y2 V4 Y3 Y4 Y5 Y6 Y8 …
¨ Y211鏍煎紡鍦ㄦ按騫蟲柟鍚戜笂Y鍒嗛噺姣?涓儚绱犻噰鏍蜂竴嬈★紝鑰孶V鍒嗛噺姣?涓儚绱犻噰鏍蜂竴嬈°備竴涓畯鍍忕礌涓?涓瓧鑺傦紝瀹為檯琛ㄧず4涓儚绱犮傚浘鍍忔暟鎹腑YUV鍒嗛噺鎺掑垪欏哄簭濡備笅錛?br>Y0 U0 Y2 V0 Y4 U4 Y6 V4 …
¨ YVU9鏍煎紡涓烘瘡涓儚绱犻兘鎻愬彇Y鍒嗛噺錛岃屽湪UV鍒嗛噺鐨勬彁鍙栨椂錛岄鍏堝皢鍥懼儚鍒嗘垚鑻ュ共涓? x 4鐨勫畯鍧楋紝鐒跺悗姣忎釜瀹忓潡鎻愬彇涓涓猆鍒嗛噺鍜屼竴涓猇鍒嗛噺銆傚浘鍍忔暟鎹瓨鍌ㄦ椂錛岄鍏堟槸鏁村箙鍥懼儚鐨刌鍒嗛噺鏁扮粍錛岀劧鍚庡氨璺熺潃U鍒嗛噺鏁扮粍錛屼互鍙奦鍒嗛噺鏁扮粍銆侷F09鏍煎紡涓嶻VU9綾諱技銆?br>
¨ IYUV鏍煎紡涓烘瘡涓儚绱犻兘鎻愬彇Y鍒嗛噺錛岃屽湪UV鍒嗛噺鐨勬彁鍙栨椂錛岄鍏堝皢鍥懼儚鍒嗘垚鑻ュ共涓? x 2鐨勫畯鍧楋紝鐒跺悗姣忎釜瀹忓潡鎻愬彇涓涓猆鍒嗛噺鍜屼竴涓猇鍒嗛噺銆俌V12鏍煎紡涓嶪YUV綾諱技銆?br>
¨YUV411銆乊UV420鏍煎紡澶氳浜嶥V鏁版嵁涓紝鍓嶈呯敤浜嶯TSC鍒訛紝鍚庤呯敤浜嶱AL鍒躲俌UV411涓烘瘡涓儚绱犻兘鎻愬彇Y鍒嗛噺錛岃孶V鍒嗛噺鍦ㄦ按騫蟲柟鍚戜笂姣?涓儚绱犻噰鏍蜂竴嬈°俌UV420騫墮潪V鍒嗛噺閲囨牱涓?錛岃屾槸璺焂UV411鐩告瘮錛屽湪姘村鉤鏂瑰悜涓婃彁楂樹竴鍊嶈壊宸噰鏍烽鐜囷紝鍦ㄥ瀭鐩存柟鍚戜笂浠/V闂撮殧鐨勬柟寮忓噺灝忎竴鍗婅壊宸噰鏍楓?br>
//YUV杞琔YVY鏍煎紡
void YUVtoUYVY(uint8_t *y_plane, uint8_t *u_plane, uint8_t *v_plane, int y_stride,
int uv_stride, OUT uint8_t *pDstBuf, int width, int height)

{
for (int row = 0; row < height; row = row + 1)
{
for (int col = 0; col < width; col=col + 2)
{
pDstBuf[0] = u_plane[row/2 * uv_stride + col/2];
pDstBuf[1] = y_plane[row * y_stride + col];
pDstBuf[2] = v_plane[row/2 * uv_stride + col/2];
pDstBuf[3] = y_plane[row * y_stride + col + 1];
pDstBuf += 4;
}
}
}
|
V| P| RC| PT=SR=200| LEN| 鍙戦佽匰SRC 錛堝凡鍏寵仈錛?/font> NTP鏃墮棿鎴籌紙楂?2浣嶏級 SR_GetNTPTimestamp ()
NTP鏃墮棿鎴籌紙浣?2浣嶏級 RTP鏃墮棿鎴?span class=Apple-tab-span style="WHITE-SPACE: pre"> SR_GetRTPTimestamp ()
鍙戦佽呭垎緇勮鏁板櫒 SR_GetPacketCount錛堬級
鍙戦佽呭瓧鑺傝鏁板櫒 SR_GetByteCount ()
...(涓嬮潰鏄繖涓彂閫佽呮墍鍙戦佺殑鎺ユ敹鑰呮姤鍛婏紝鍦ㄤ笅闈㈠拰RR涓璧瘋璁猴級
闄勫姞淇℃伅錛?/font> 榪欎釜婧愭槸鍚︽湁鍙戦佸彂閫佽呮姤鍛?/font> SR_HasInfo () 榪欎釜鍙戦佽呮姤鍛婃帴鏀剁殑鏃墮棿 浠ュ強浠R_Prev_寮澶寸殑錛岃幏寰楀掓暟絎簩涓彂閫佽呮姤鍛婄殑淇℃伅銆?/span> |
|
V| P| RC| PT=SR=201| LEN|
SSRC1(絎竴涓帴鏀惰呮姤鍛婂潡鎵鍏寵仈鐨勫彂閫佽咃級 錛堝凡鍏寵仈錛?/span>
鍒嗙粍涓㈠け鐜?span class=Apple-tab-span style="WHITE-SPACE: pre"> | 涓㈠け鍒嗙粍鎬繪暟| 鎵╁睍鐨勬渶楂樺簭鍙?/div> 闂撮殧鎶栧姩 RR_GetJitter ()
鏈鏂扮殑鍙戦佽呮姤鍛婃椂闂存埑錛圠SR) SR鏈鏂伴棿闅旓紙DLSR)
闄勫姞淇℃伅錛?/span>
榪欎釜婧愭槸鍚︽湁鍙戦佹帴鏀惰呮姤鍛?/span>
RR_HasInfo ()
鎺ユ敹鑰呮姤鍛婃帴鏀舵椂闂?/div>
浠ュ強浠R_Prev_寮澶寸殑錛岃幏寰楀掓暟絎簩涓帴鏀惰呮姤鍛婄殑淇℃伅銆?/span>
|
YUV涓昏鐨勯噰鏍鋒牸寮?/span>
涓昏鐨勯噰鏍鋒牸寮忔湁YCbCr 4:2:0銆?/span>YCbCr 4:2:2銆?/span>YCbCr 4:1:1鍜?/span> YCbCr 4:4:4銆傚叾涓?/span>YCbCr 4:1:1 姣旇緝甯哥敤錛屽叾鍚箟涓猴細姣忎釜鐐逛繚瀛樹竴涓?/span> 8bit 鐨勪寒搴﹀?/span>(涔熷氨鏄?/span>Y鍊?/span>), 姣?/span> 2x2 涓偣淇濆瓨涓涓?/span> Cr 鍜?/span>Cb 鍊?/span>, 鍥懼儚鍦ㄨ倝鐪間腑鐨勬劅瑙変笉浼氳搗澶ぇ鐨勫彉鍖栥傛墍浠?/span>, 鍘熸潵鐢?/span> RGB(R,G,B 閮芥槸 8bit unsigned) 妯″瀷, 4 涓偣闇瑕?/span> 8x3=24 bites錛堝涓嬪浘絎竴涓浘錛?/span>. 鑰岀幇鍦ㄤ粎闇瑕?/span> 8+(8/4)+(8/4)=12bites, 騫沖潎姣忎釜鐐瑰崰12bites(濡備笅鍥劇浜屼釜鍥?/span>)銆傝繖鏍峰氨鎶婂浘鍍忕殑鏁版嵁鍘嬬緝浜嗕竴鍗娿?/span>
涓婅竟浠呯粰鍑轟簡鐞嗚涓婄殑紺轟緥錛屽湪瀹為檯鏁版嵁瀛樺偍涓槸鏈夊彲鑳芥槸涓嶅悓鐨勶紝涓嬮潰緇欏嚭鍑犵鍏蜂綋鐨勫瓨鍌ㄥ艦寮忥細
錛?/span>1錛?/span> YUV 4:4:4
YUV涓変釜淇¢亾鐨勬娊鏍風巼鐩稿悓錛屽洜姝ゅ湪鐢熸垚鐨勫浘鍍忛噷錛屾瘡涓薄绱犵殑涓変釜鍒嗛噺淇℃伅瀹屾暣錛堟瘡涓垎閲忛氬父8姣旂壒錛夛紝緇忚繃8姣旂壒閲忓寲涔嬪悗錛屾湭緇忓帇緙╃殑姣忎釜鍍忕礌鍗犵敤3涓瓧鑺傘?/span>
涓嬮潰鐨勫洓涓儚绱犱負: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
瀛樻斁鐨勭爜嫻佷負: Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
錛?span>2錛?span> YUV 4:2:2
姣忎釜鑹插樊淇¢亾鐨勬娊鏍風巼鏄寒搴︿俊閬撶殑涓鍗婏紝鎵浠ユ按騫蟲柟鍚戠殑鑹插害鎶芥牱鐜囧彧鏄?span>4:4:4鐨勪竴鍗娿傚闈炲帇緙╃殑8姣旂壒閲忓寲鐨勫浘鍍忔潵璇達紝姣忎釜鐢變袱涓按騫蟲柟鍚戠浉閭葷殑鍍忕礌緇勬垚鐨勫畯鍍忕礌闇瑕佸崰鐢?span>4瀛楄妭鍐呭瓨銆?/span>
涓嬮潰鐨勫洓涓儚绱犱負: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
瀛樻斁鐨勭爜嫻佷負: Y0 U0 Y1 V1 Y2 U2 Y3 V3
鏄犲皠鍑哄儚绱犵偣涓猴細[Y0 U0 V1] [Y1 U0 V1] [Y2 U2 V3] [Y3 U2 V3]
錛?span>3錛?span> YUV 4:1:1
4:1:1鐨勮壊搴︽娊鏍鳳紝鏄湪姘村鉤鏂瑰悜涓婂鑹插害榪涜4:1鎶芥牱銆傚浜庝綆绔敤鎴峰拰娑堣垂綾諱駭鍝佽繖浠嶇劧鏄彲浠ユ帴鍙楃殑銆傚闈炲帇緙╃殑8姣旂壒閲忓寲鐨勮棰戞潵璇達紝姣忎釜鐢?span>4涓按騫蟲柟鍚戠浉閭葷殑鍍忕礌緇勬垚鐨勫畯鍍忕礌闇瑕佸崰鐢?span>6瀛楄妭鍐呭瓨
涓嬮潰鐨勫洓涓儚绱犱負: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
瀛樻斁鐨勭爜嫻佷負: Y0 U0 Y1 Y2 V2 Y3
鏄犲皠鍑哄儚绱犵偣涓猴細[Y0 U0 V2] [Y1 U0 V2] [Y2 U0 V2] [Y3 U0 V2]
錛?span>4錛?span>YUV4:2:0
4:2:0騫朵笉鎰忓懗鐫鍙湁Y,Cb鑰屾病鏈?span>Cr鍒嗛噺銆傚畠鎸囧緱鏄姣忚鎵弿綰挎潵璇達紝鍙湁涓縐嶈壊搴﹀垎閲忎互2:1鐨勬娊鏍風巼瀛樺偍銆傝繘琛岄殧琛屾壂鎻忥紝鐩擱偦鐨勬壂鎻忚瀛樺偍涓嶅悓鐨勮壊搴﹀垎閲忥紝涔熷氨鏄錛屽鏋滀竴琛屾槸4:2:0鐨勮瘽錛屼笅涓琛屽氨鏄?span>4:0:2錛屽啀涓嬩竴琛屾槸4:2:0...浠ユ綾繪帹銆傚姣忎釜鑹插害鍒嗛噺鏉ヨ錛屾按騫蟲柟鍚戝拰绔栫洿鏂瑰悜鐨勬娊鏍風巼閮芥槸2:1錛屾墍浠ュ彲浠ヨ鑹插害鐨勬娊鏍風巼鏄?span>4:1銆傚闈炲帇緙╃殑8姣旂壒閲忓寲鐨勮棰戞潵璇達紝姣忎釜鐢?span>2x2涓?span>2琛?span>2鍒楃浉閭葷殑鍍忕礌緇勬垚鐨勫畯鍍忕礌闇瑕佸崰鐢?span>6瀛楄妭鍐呭瓨銆?/span>
涓嬮潰鍏釜鍍忕礌涓猴細[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
[Y5 U5 V5] [Y6 U6 V6] [Y7U7 V7] [Y8 U8 V8]
瀛樻斁鐨勭爜嫻佷負錛?span>Y0 U0 Y1 Y2 U2 Y3
Y5 V5 Y6 Y7 V7 Y8
鏄犲皠鍑虹殑鍍忕礌鐐逛負錛?span>[Y0 U0 V5] [Y1 U0 V5] [Y2 U2 V7] [Y3 U2 V7]
[Y5 U0 V5] [Y6 U0 V5] [Y7U2 V7] [Y8 U2 V7]瀵瑰簲AVPicture閲岄潰鏈塪ata[4]鍜宭inesize[4]鍏朵腑data鏄竴涓寚鍚戞寚閽堢殑鎸囬拡錛堜簩綰с佷簩緇存寚閽堬級錛屼篃灝辨槸鎸囧悜瑙嗛鏁版嵁緙撳啿鍖虹殑棣栧湴鍧錛岃宒ata[0]~data[3]鏄竴綰ф寚閽堬紝鍙互鐢ㄥ涓嬬殑鍥炬潵琛ㄧず錛?
data -->xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
^ ^ ^
| | |
data[0] data[1] data[2]
姣斿璇達紝褰損ix_fmt=PIX_FMT_YUV420P鏃訛紝data涓殑鏁版嵁鏄寜鐓UV鐨勬牸寮忓瓨鍌ㄧ殑錛屼篃灝辨槸錛?
data -->YYYYYYYYYYYYYYUUUUUUUUUUUUUVVVVVVVVVVVV ^ ^ ^ | | | data[0] data[1] data[2]
linesize鏄寚瀵瑰簲浜庢瘡涓琛岀殑澶у皬錛屼負浠涔堥渶瑕佽繖涓彉閲忥紝鏄洜涓哄湪YUV鏍煎紡鍜孯GB鏍煎紡鏃訛紝姣忚鐨勫ぇ灝忎笉涓瀹氱瓑浜庡浘鍍忕殑瀹藉害錛屽浜嶳GB鏍煎紡杈撳嚭鏃?鍙湁涓涓氶亾(bgrbgrbgr......)鍙敤錛屽嵆linesize[0],鍜宒ata[0],so RGB24 : data[0] = packet rgb//bgrbgrbgr......
linesize[0] = width*3
鍏朵粬鐨勫data[1][2][3]涓巐inesize[1][2][3]鏃犱換浣曟剰涔?
鑰屽浜庯脊錛碉級鏍煎紡杈撳嚭鏃訛紝鏈変笁涓氶亾鍙敤錛屽嵆data[0][1][2],涓巐inesize[0][1][2]錛岃寉uv鏍煎紡瀵逛簬榪愬姩浼拌鏃訛紝闇瑕佸~鍏卲adding(right, bottom),鏁咃細
linesize=width+padding size(16+16). ///////////////////////////////////////////////////////////////////////////////////////
case PIX_FMT_YUV420P:
case PIX_FMT_YUVJ420P:
case PIX_FMT_RGB555:
if (PIC_DIRECTION_0 == m_dwFilpPicDirection)
{
m_pYuvFrame->data [0] += m_pYuvFrame->linesize[0] * m_pVCodecContext->height;
//鍥犱負鏄殧琛屾壂鎻廢涓嶸鍙湁楂樺害鐨勪竴鍗?br> m_pYuvFrame->data [1] += m_pYuvFrame->linesize[1] * m_pVCodecContext->height/2;
m_pYuvFrame->data [2] += m_pYuvFrame->linesize[2] * m_pVCodecContext->height/2;
m_pYuvFrame->linesize[0] = -m_pYuvFrame->linesize[0];
m_pYuvFrame->linesize[1] = -m_pYuvFrame->linesize[1];
m_pYuvFrame->linesize[2] = -m_pYuvFrame->linesize[2];
}
break;
case PIX_FMT_YUVJ422P:
case PIX_FMT_YUV422P:
case PIX_FMT_YUYVJ422:
case PIX_FMT_YUV411P:
case PIX_FMT_YUYV422:
if (PIC_DIRECTION_0 == m_dwFilpPicDirection)
{
m_pYuvFrame->data [0] += m_pYuvFrame->linesize[0] * m_pVCodecContext->height;
m_pYuvFrame->data [1] += m_pYuvFrame->linesize[1] * m_pVCodecContext->height;
m_pYuvFrame->data [2] += m_pYuvFrame->linesize[2] * m_pVCodecContext->height;
m_pYuvFrame->linesize[0] = -m_pYuvFrame->linesize[0];
m_pYuvFrame->linesize[1] = -m_pYuvFrame->linesize[1];
m_pYuvFrame->linesize[2] = -m_pYuvFrame->linesize[2];
}
break;
}
鍦‵FMPEG涓漿鎹GB鏃墮『渚塊鍊掑浘鍍忕殑鏂瑰悜綆楁硶