📄 avslibtestdlg.cpp
字号:
// AVSLibTestDlg.cpp : implementation file
//
#include "stdafx.h"
#include "AVSLibTest.h"
#include "AVSLibTestDlg.h"
#include "avsdeclib.h"
#include <afxmt.h>
#include "Mmsystem.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
int c_int[3][3][256] = {
{
{
0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 15, 16, 17,
18, 19, 20, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 36,
37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 54,
55, 57, 58, 59, 60, 61, 62, 64, 65, 66, 67, 68, 69, 71, 72, 73,
74, 75, 76, 78, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91,
93, 94, 95, 96, 97, 98, 100, 101, 102, 103, 104, 105, 107, 108, 109, 110,
111, 112, 114, 115, 116, 117, 118, 119, 121, 122, 123, 124, 125, 126, 128, 129,
130, 131, 132, 133, 135, 136, 137, 138, 139, 140, 142, 143, 144, 145, 146, 147,
149, 150, 151, 152, 153, 154, 156, 157, 158, 159, 160, 161, 163, 164, 165, 166,
167, 168, 170, 171, 172, 173, 174, 175, 176, 178, 179, 180, 181, 182, 183, 185,
186, 187, 188, 189, 190, 192, 193, 194, 195, 196, 197, 199, 200, 201, 202, 203,
204, 206, 207, 208, 209, 210, 211, 213, 214, 215, 216, 217, 218, 220, 221, 222,
223, 224, 225, 227, 228, 229, 230, 231, 232, 234, 235, 236, 237, 238, 239, 241,
242, 243, 244, 245, 246, 248, 249, 250, 251, 252, 253, 255, 256, 257, 258, 259,
260, 261, 263, 264, 265, 266, 267, 268, 270, 271, 272, 273, 274, 275, 277, 278,
279, 280, 281, 282, 284, 285, 286, 287, 288, 289, 291, 292, 293, 294, 295, 296
},
{
0, 0, 0, -1, -1, -1, -2, -2, -3, -3, -3, -4, -4, -5, -5, -5,
-6, -6, -7, -7, -7, -8, -8, -8, -9, -9, -10, -10, -10, -11, -11, -12,
-12, -12, -13, -13, -14, -14, -14, -15, -15, -16, -16, -16, -17, -17, -17, -18,
-18, -19, -19, -19, -20, -20, -21, -21, -21, -22, -22, -23, -23, -23, -24, -24,
-25, -25, -25, -26, -26, -26, -27, -27, -28, -28, -28, -29, -29, -30, -30, -30,
-31, -31, -32, -32, -32, -33, -33, -34, -34, -34, -35, -35, -35, -36, -36, -37,
-37, -37, -38, -38, -39, -39, -39, -40, -40, -41, -41, -41, -42, -42, -43, -43,
-43, -44, -44, -44, -45, -45, -46, -46, -46, -47, -47, -48, -48, -48, -49, -49,
-50, -50, -50, -51, -51, -52, -52, -52, -53, -53, -53, -54, -54, -55, -55, -55,
-56, -56, -57, -57, -57, -58, -58, -59, -59, -59, -60, -60, -61, -61, -61, -62,
-62, -62, -63, -63, -64, -64, -64, -65, -65, -66, -66, -66, -67, -67, -68, -68,
-68, -69, -69, -70, -70, -70, -71, -71, -71, -72, -72, -73, -73, -73, -74, -74,
-75, -75, -75, -76, -76, -77, -77, -77, -78, -78, -79, -79, -79, -80, -80, -80,
-81, -81, -82, -82, -82, -83, -83, -84, -84, -84, -85, -85, -86, -86, -86, -87,
-87, -88, -88, -88, -89, -89, -89, -90, -90, -91, -91, -91, -92, -92, -93, -93,
-93, -94, -94, -95, -95, -95, -96, -96, -97, -97, -97, -98, -98, -98, -99, -99
},
{
0, 0, -1, -2, -3, -4, -4, -5, -6, -7, -8, -8, -9, -10, -11, -12,
-13, -13, -14, -15, -16, -17, -17, -18, -19, -20, -21, -21, -22, -23, -24, -25,
-26, -26, -27, -28, -29, -30, -30, -31, -32, -33, -34, -34, -35, -36, -37, -38,
-39, -39, -40, -41, -42, -43, -43, -44, -45, -46, -47, -47, -48, -49, -50, -51,
-52, -52, -53, -54, -55, -56, -56, -57, -58, -59, -60, -60, -61, -62, -63, -64,
-65, -65, -66, -67, -68, -69, -69, -70, -71, -72, -73, -73, -74, -75, -76, -77,
-78, -78, -79, -80, -81, -82, -82, -83, -84, -85, -86, -86, -87, -88, -89, -90,
-91, -91, -92, -93, -94, -95, -95, -96, -97, -98, -99, -100, -100, -101, -102, -103,
-104, -104, -105, -106, -107, -108, -108, -109, -110, -111, -112, -113, -113, -114, -115, -116,
-117, -117, -118, -119, -120, -121, -121, -122, -123, -124, -125, -126, -126, -127, -128, -129,
-130, -130, -131, -132, -133, -134, -134, -135, -136, -137, -138, -139, -139, -140, -141, -142,
-143, -143, -144, -145, -146, -147, -147, -148, -149, -150, -151, -152, -152, -153, -154, -155,
-156, -156, -157, -158, -159, -160, -160, -161, -162, -163, -164, -165, -165, -166, -167, -168,
-169, -169, -170, -171, -172, -173, -173, -174, -175, -176, -177, -178, -178, -179, -180, -181,
-182, -182, -183, -184, -185, -186, -186, -187, -188, -189, -190, -191, -191, -192, -193, -194,
-195, -195, -196, -197, -198, -199, -200, -200, -201, -202, -203, -204, -204, -205, -206, -207
}
},
{
{
0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 15, 16, 17,
18, 19, 20, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 36,
37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 54,
55, 57, 58, 59, 60, 61, 62, 64, 65, 66, 67, 68, 69, 71, 72, 73,
74, 75, 76, 78, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91,
93, 94, 95, 96, 97, 98, 100, 101, 102, 103, 104, 105, 107, 108, 109, 110,
111, 112, 114, 115, 116, 117, 118, 119, 121, 122, 123, 124, 125, 126, 128, 129,
130, 131, 132, 133, 135, 136, 137, 138, 139, 140, 142, 143, 144, 145, 146, 147,
149, 150, 151, 152, 153, 154, 156, 157, 158, 159, 160, 161, 163, 164, 165, 166,
167, 168, 170, 171, 172, 173, 174, 175, 176, 178, 179, 180, 181, 182, 183, 185,
186, 187, 188, 189, 190, 192, 193, 194, 195, 196, 197, 199, 200, 201, 202, 203,
204, 206, 207, 208, 209, 210, 211, 213, 214, 215, 216, 217, 218, 220, 221, 222,
223, 224, 225, 227, 228, 229, 230, 231, 232, 234, 235, 236, 237, 238, 239, 241,
242, 243, 244, 245, 246, 248, 249, 250, 251, 252, 253, 255, 256, 257, 258, 259,
260, 261, 263, 264, 265, 266, 267, 268, 270, 271, 272, 273, 274, 275, 277, 278,
279, 280, 281, 282, 284, 285, 286, 287, 288, 289, 291, 292, 293, 294, 295, 296
},
{
0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30,
32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62,
64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94,
96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 117, 119, 121, 123, 125, 127,
129, 131, 133, 135, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159,
161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 191,
193, 195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 221, 223,
225, 227, 229, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256,
258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288,
290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320,
322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 347, 349, 351, 353,
355, 357, 359, 361, 363, 365, 367, 369, 371, 373, 375, 377, 379, 381, 383, 385,
387, 389, 391, 393, 395, 397, 399, 401, 403, 405, 407, 409, 411, 413, 415, 417,
419, 421, 423, 425, 427, 429, 431, 433, 435, 437, 439, 441, 443, 445, 447, 449,
451, 453, 455, 457, 459, 461, 464, 466, 468, 470, 472, 474, 476, 478, 480, 482,
484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514
},
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
}
},
{
{
0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 15, 16, 17,
18, 19, 20, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 36,
37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50, 51, 52, 53, 54,
55, 57, 58, 59, 60, 61, 62, 64, 65, 66, 67, 68, 69, 71, 72, 73,
74, 75, 76, 78, 79, 80, 81, 82, 83, 85, 86, 87, 88, 89, 90, 91,
93, 94, 95, 96, 97, 98, 100, 101, 102, 103, 104, 105, 107, 108, 109, 110,
111, 112, 114, 115, 116, 117, 118, 119, 121, 122, 123, 124, 125, 126, 128, 129,
130, 131, 132, 133, 135, 136, 137, 138, 139, 140, 142, 143, 144, 145, 146, 147,
149, 150, 151, 152, 153, 154, 156, 157, 158, 159, 160, 161, 163, 164, 165, 166,
167, 168, 170, 171, 172, 173, 174, 175, 176, 178, 179, 180, 181, 182, 183, 185,
186, 187, 188, 189, 190, 192, 193, 194, 195, 196, 197, 199, 200, 201, 202, 203,
204, 206, 207, 208, 209, 210, 211, 213, 214, 215, 216, 217, 218, 220, 221, 222,
223, 224, 225, 227, 228, 229, 230, 231, 232, 234, 235, 236, 237, 238, 239, 241,
242, 243, 244, 245, 246, 248, 249, 250, 251, 252, 253, 255, 256, 257, 258, 259,
260, 261, 263, 264, 265, 266, 267, 268, 270, 271, 272, 273, 274, 275, 277, 278,
279, 280, 281, 282, 284, 285, 286, 287, 288, 289, 291, 292, 293, 294, 295, 296
},
{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
},
{
0, 1, 3, 4, 6, 7, 9, 11, 12, 14, 15, 17, 19, 20, 22, 23,
25, 27, 28, 30, 31, 33, 35, 36, 38, 39, 41, 43, 44, 46, 47, 49,
51, 52, 54, 55, 57, 59, 60, 62, 63, 65, 67, 68, 70, 71, 73, 74,
76, 78, 79, 81, 82, 84, 86, 87, 89, 90, 92, 94, 95, 97, 98, 100,
102, 103, 105, 106, 108, 110, 111, 113, 114, 116, 118, 119, 121, 122, 124, 126,
127, 129, 130, 132, 134, 135, 137, 138, 140, 142, 143, 145, 146, 148, 149, 151,
153, 154, 156, 157, 159, 161, 162, 164, 165, 167, 169, 170, 172, 173, 175, 177,
178, 180, 181, 183, 185, 186, 188, 189, 191, 193, 194, 196, 197, 199, 201, 202,
204, 205, 207, 209, 210, 212, 213, 215, 217, 218, 220, 221, 223, 224, 226, 228,
229, 231, 232, 234, 236, 237, 239, 240, 242, 244, 245, 247, 248, 250, 252, 253,
255, 256, 258, 260, 261, 263, 264, 266, 268, 269, 271, 272, 274, 276, 277, 279,
280, 282, 284, 285, 287, 288, 290, 292, 293, 295, 296, 298, 299, 301, 303, 304,
306, 307, 309, 311, 312, 314, 315, 317, 319, 320, 322, 323, 325, 327, 328, 330,
331, 333, 335, 336, 338, 339, 341, 343, 344, 346, 347, 349, 351, 352, 354, 355,
357, 359, 360, 362, 363, 365, 367, 368, 370, 371, 373, 374, 376, 378, 379, 381,
382, 384, 386, 387, 389, 390, 392, 394, 395, 397, 398, 400, 402, 403, 405, 406
}
}
};
int GG_int = -135,BB_int = 277, RR_int = 222;
char clip[1536],*clp;
void init_clp(void)
{
int i;
clp = clip + 512;
for (i=-512;i<1024;i++)
clp[i] = (i<0) ? 0 : ((i>255) ? 255 : i);
}
void yuv2rgb420(unsigned char *_bmBits,unsigned char *_Y, unsigned char* _U, unsigned char* _V,
int _Width,int _Height,int _Format)
{
unsigned char *Y0,*Y1,*U,*V,*p0,*p1;
int wLuma = _Width;
int hLuma = _Height;
int x,y,size;
int BytesPerLine = ( _Width * 24 + 31 ) / 32 * 4;
int Bcc,Gcc,Rcc;
size = 2*BytesPerLine - 3*_Width;
//Y0 = _YUV[0];
//Y1 = _YUV[0]+wLuma;
Y0 = _Y;
Y1 = _Y+wLuma;
//U = _YUV[1];
//V = _YUV[2];
U = _U;
V = _V;
p0 = _bmBits;
p1 = _bmBits + BytesPerLine;
for (y=0;y<_Height/2;y++)
{
for(x=0;x<_Width/2;x++)
{
Bcc = c_int[1][1][*U] + c_int[1][2][*V] - BB_int;
Gcc = c_int[0][1][*U] + c_int[0][2][*V] - GG_int;
Rcc = c_int[2][1][*U] + c_int[2][2][*V] - RR_int;
*p0++ = clp[c_int[1][0][*Y0] + Bcc];
*p0++ = clp[c_int[0][0][*Y0] + Gcc];
*p0++ = clp[c_int[2][0][*Y0] + Rcc];
Y0++;
*p0++ = clp[c_int[1][0][*Y0] + Bcc];
*p0++ = clp[c_int[0][0][*Y0] + Gcc];
*p0++ = clp[c_int[2][0][*Y0] + Rcc];
Y0++;
*p1++ = clp[c_int[1][0][*Y1] + Bcc];
*p1++ = clp[c_int[0][0][*Y1] + Gcc];
*p1++ = clp[c_int[2][0][*Y1] + Rcc];
Y1++;
*p1++ = clp[c_int[1][0][*Y1] + Bcc];
*p1++ = clp[c_int[0][0][*Y1] + Gcc];
*p1++ = clp[c_int[2][0][*Y1] + Rcc];
Y1++;
U++;
V++;
}
p0 += size;
p1 += size;
Y0 += _Width;
Y1 += _Width;
}
}
void ShowYuvImage(unsigned char* pBmp, unsigned char* pY, unsigned char* pU, unsigned char* pV,
DWORD dwWidth, DWORD dwHeight, CDC* pDC, DWORD dwDCWidth, DWORD dwDCHeight)
{
//////////////////////////////////////////////////////////////////////////
if(pY==NULL || pU==NULL || pV==NULL)
return;
yuv2rgb420(pBmp, pY, pU, pV, dwWidth, dwHeight, 1);
BITMAPINFO m_BmpInfo;
m_BmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
m_BmpInfo.bmiHeader.biWidth = dwWidth;
m_BmpInfo.bmiHeader.biHeight = -dwHeight;
m_BmpInfo.bmiHeader.biCompression = BI_RGB;
m_BmpInfo.bmiHeader.biPlanes = 1;
m_BmpInfo.bmiHeader.biBitCount = 24;
m_BmpInfo.bmiHeader.biSizeImage = dwHeight*dwWidth*3;
//CDC* pDC = GetDlgItem(IDC_ORG)->GetDC();
HBITMAP hBmp;
CDC MemDC;
hBmp = CreateDIBitmap(
pDC->m_hDC, // handle to device context
(BITMAPINFOHEADER*)(&m_BmpInfo), // pointer to bitmap size and format data
CBM_INIT, // initialization flag
pBmp, // pointer to initialization data
&m_BmpInfo, // pointer to bitmap color-format data
DIB_RGB_COLORS // color-data usage
);
if(hBmp == NULL)
{
pDC->DeleteDC();
return;
}
MemDC.CreateCompatibleDC(pDC);
SelectObject(MemDC.m_hDC,hBmp);
BOOL ret = pDC->BitBlt(0, 0,dwDCWidth,dwDCHeight,&MemDC, 0, 0,SRCCOPY);
DeleteObject(hBmp);
//ReleaseDC(pDC);
MemDC.DeleteDC();
//////////////////////////////////////////////////////////////////////////
}
void CThreadProc(LPVOID pParam);
CFile g_file;
CFile g_fileSaveAs;
INT g_nBufLen;
YUVFrame g_Frame;
YUVFrame* g_pFrame;
CDC* g_pDCShow;
CRect g_rectShow;
INT g_nLeft;
UINT g_nFrameNo;
CString g_strFilePath;
int g_iState;
unsigned char* g_pbBuf;
unsigned char* g_pbBmpBuf;
CWinThread* g_pThreadObj;
enum PLAYSTATE {Stopped, Paused, Running, Init};
PLAYSTATE g_psCurrent;
CCriticalSection m_sec;
int g_decTime=0;
int g_bitRate=0;
UINT g_nSaveAsFrameNo;
CString g_strSaveAsFilePath;
BOOL g_bShowImage;
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -