|
|
Definition at line 316 of file mpeg.c.
References _Image::columns, _Image::filename, FormatMagickString(), LocaleCompare(), _ImageInfo::magick, MagickBooleanType, MagickFalse, MagickStatusType, MagickTrue, Max, MaxTextExtent, Min, _Image::next, ParseGeometry(), _Image::quality, _Image::rows, _ImageInfo::sampling_factor, SigmaValue, ssize_t, and UndefinedCompressionQuality.
00318 {
00319 char
00320 filename[ MaxTextExtent];
00321
00322 double
00323 q;
00324
00325 FILE
00326 *file,
00327 *parameter_file;
00328
00329 long
00330 quant,
00331 vertical_factor;
00332
00333 MagickBooleanType
00334 mpeg;
00335
00336 register Image
00337 *p;
00338
00339 register long
00340 i;
00341
00342 ssize_t
00343 count;
00344
00345 static int
00346 q_matrix[]=
00347 {
00348 8, 16, 19, 22, 26, 27, 29, 34,
00349 16, 16, 22, 24, 27, 29, 34, 37,
00350 19, 22, 26, 27, 29, 34, 34, 38,
00351 22, 22, 26, 27, 29, 34, 37, 40,
00352 22, 26, 27, 29, 32, 35, 40, 48,
00353 26, 27, 29, 32, 35, 40, 48, 58,
00354 26, 27, 29, 34, 38, 46, 56, 69,
00355 27, 29, 35, 38, 46, 56, 69, 83
00356 };
00357
00358
00359
00360
00361 file=fopen(basename, "w");
00362 if (file == (FILE *) NULL)
00363 return( MagickFalse);
00364 ( void) fprintf(file, "MPEG\n");
00365 ( void) fprintf(file, "%s.%%d\n",image-> filename);
00366 ( void) fprintf(file, "-\n");
00367 if (image-> quality == UndefinedCompressionQuality)
00368 ( void) fprintf(file, "-\n");
00369 else
00370 {
00371
00372
00373
00374 ( void) FormatMagickString(filename,MaxTextExtent, "%s.iqm",basename);
00375 ( void) fprintf(file, "%s\n",filename);
00376 parameter_file=fopen(filename, "w");
00377 if (parameter_file == (FILE *) NULL)
00378 return( MagickFalse);
00379 if (image-> quality >= 75)
00380 {
00381 q=( double) Max((image-> quality-75)*2,1);
00382 for (i=0; i < 64; i++)
00383 {
00384 quant=( long) Min( Max(q_matrix[i]/q,1.0),255.0);
00385 ( void) fprintf(parameter_file, " %ld",quant);
00386 if ((i % 8) == 7)
00387 ( void) fprintf(parameter_file, "\n");
00388 }
00389 }
00390 else
00391 {
00392 q=( double) Max((75-image-> quality)/8,1);
00393 for (i=0; i < 64; i++)
00394 {
00395 quant=( long) Min( Max(q*q_matrix[i]+0.5,1.0),255.0);
00396 ( void) fprintf(parameter_file, " %ld",quant);
00397 if ((i % 8) == 7)
00398 ( void) fprintf(parameter_file, "\n");
00399 }
00400 }
00401 ( void) fclose(parameter_file);
00402 }
00403 if (image-> quality == UndefinedCompressionQuality)
00404 ( void) fprintf(file, "-\n");
00405 else
00406 {
00407
00408
00409
00410 ( void) FormatMagickString(filename,MaxTextExtent, "%s.niq",basename);
00411 ( void) fprintf(file, "%s\n",filename);
00412 parameter_file=fopen(filename, "w");
00413 if (parameter_file == (FILE *) NULL)
00414 return( MagickFalse);
00415 q= Min( Max(66.0-(2*image-> quality)/3.0,1.0),255);
00416 for (i=0; i < 64; i++)
00417 {
00418 ( void) fprintf(parameter_file, " %d",( int) q);
00419 if ((i % 8) == 7)
00420 ( void) fprintf(parameter_file, "\n");
00421 }
00422 ( void) fclose(parameter_file);
00423 }
00424 ( void) fprintf(file, "%s.log\n",basename);
00425 ( void) fprintf(file, "1\n");
00426 count=0;
00427 for (p=image; p != ( Image *) NULL; p=p-> next)
00428 count+= Max((p->delay+1)/3,1);
00429 ( void) fprintf(file, "%lu\n",( unsigned long) count);
00430 ( void) fprintf(file, "0\n");
00431 ( void) fprintf(file, "00:00:00:00\n");
00432 mpeg=(MagickBooleanType) ( LocaleCompare(image_info-> magick, "M2V") != 0);
00433 if (image-> quality > 98)
00434 ( void) fprintf(file, "1\n");
00435 else
00436 ( void) fprintf(file, "%d\n",mpeg != MagickFalse ? 12 : 15);
00437 if (image-> quality > 98)
00438 ( void) fprintf(file, "1\n");
00439 else
00440 ( void) fprintf(file, "3\n");
00441 ( void) fprintf(file, "%d\n",mpeg != MagickFalse ? 1 : 0);
00442 ( void) fprintf(file, "0\n");
00443 ( void) fprintf(file, "%lu\n",image-> columns+
00444 ((image-> columns & 0x01) != 0 ? 1 : 0));
00445 ( void) fprintf(file, "%lu\n",image-> rows+((image-> rows & 0x01) != 0 ? 1 : 0));
00446 ( void) fprintf(file, "%d\n",mpeg != MagickFalse ? 8 : 2);
00447 ( void) fprintf(file, "%d\n",mpeg != MagickFalse ? 3 : 5);
00448 ( void) fprintf(file, "%g\n",mpeg != MagickFalse ? 1152000.0 : 5000000.0);
00449 ( void) fprintf(file, "%d\n",mpeg != MagickFalse ? 20 : 112);
00450 ( void) fprintf(file, "0\n");
00451 ( void) fprintf(file, "%d\n",mpeg != MagickFalse ? 1 : 0);
00452 ( void) fprintf(file, "%d\n",mpeg != MagickFalse ? 4 : 1);
00453 ( void) fprintf(file, "%d\n",mpeg != MagickFalse ? 8 : 4);
00454 ( void) fprintf(file, "%d\n",mpeg != MagickFalse ? 1 : 0);
00455 vertical_factor=2;
00456 if (image_info-> sampling_factor != ( char *) NULL)
00457 {
00458 GeometryInfo
00459 geometry_info;
00460
00461 long
00462 horizontal_factor;
00463
00464 MagickStatusType
00465 flags;
00466
00467 flags= ParseGeometry(image_info-> sampling_factor,&geometry_info);
00468 horizontal_factor=( long) geometry_info.rho;
00469 vertical_factor=( long) geometry_info.sigma;
00470 if ((flags & SigmaValue) == 0)
00471 vertical_factor=horizontal_factor;
00472 if (mpeg != MagickFalse)
00473 {
00474 if ((horizontal_factor != 2) || (vertical_factor != 2))
00475 {
00476 ( void) fclose(file);
00477 return(MagickFalse);
00478 }
00479 }
00480 else
00481 if ((horizontal_factor != 2) ||
00482 ((vertical_factor != 1) && (vertical_factor != 2)))
00483 {
00484 ( void) fclose(file);
00485 return(MagickFalse);
00486 }
00487 }
00488 ( void) fprintf(file, "%d\n",vertical_factor == 2 ? 1 : 2);
00489 ( void) fprintf(file, "%d\n",mpeg != MagickFalse ? 1 : 2);
00490 ( void) fprintf(file, "5\n");
00491 ( void) fprintf(file, "5\n");
00492 ( void) fprintf(file, "%d\n",mpeg != MagickFalse ? 5 : 4);
00493 ( void) fprintf(file, "%lu\n",image-> columns+
00494 ((image-> columns & 0x01) != 0 ? 1 : 0));
00495 ( void) fprintf(file, "%lu\n",image-> rows+((image-> rows & 0x01) != 0 ? 1 : 0));
00496 ( void) fprintf(file, "0\n");
00497 ( void) fprintf(file, "%d\n",mpeg != MagickFalse ? 0 : 1);
00498 ( void) fprintf(file, "%d %d %d\n",mpeg != MagickFalse ? 1 : 0,
00499 mpeg != MagickFalse ? 1 : 0, mpeg != MagickFalse ? 1 : 0);
00500 ( void) fprintf(file, "0 0 0\n");
00501 ( void) fprintf(file, "%d %d %d\n",mpeg != MagickFalse ? 0 : 1,
00502 mpeg != MagickFalse ? 0 : 1,mpeg != MagickFalse ? 0 : 1);
00503 ( void) fprintf(file, "%d 0 0\n",mpeg != MagickFalse ? 0 : 1);
00504 ( void) fprintf(file, "0 0 0\n");
00505 ( void) fprintf(file, "0\n");
00506 ( void) fprintf(file, "%d\n",mpeg != MagickFalse ? 1 : 0);
00507 ( void) fprintf(file, "0\n");
00508 ( void) fprintf(file, "0\n");
00509 ( void) fprintf(file, "0\n");
00510 ( void) fprintf(file, "0\n");
00511 ( void) fprintf(file, "0\n");
00512 ( void) fprintf(file, "0\n");
00513 ( void) fprintf(file, "0\n");
00514 ( void) fprintf(file, "0\n");
00515 ( void) fprintf(file, "0\n");
00516 ( void) fprintf(file, "2 2 11 11\n");
00517 ( void) fprintf(file, "1 1 3 3\n");
00518 ( void) fprintf(file, "1 1 7 7\n");
00519 ( void) fprintf(file, "1 1 7 7\n");
00520 ( void) fprintf(file, "1 1 3 3\n");
00521 ( void) fclose(file);
00522 return(MagickTrue);
00523 }
Here is the call graph for this function:
|