putpic.c
上传用户:super_houu
上传日期:2008-09-21
资源大小:4099k
文件大小:5k
源码类别:

DVD

开发平台:

Others

  1. #include "PlaycoreCaptureLogompeg_encdct.h"
  2. #include "PlaycoreCaptureLogompeg_encquantize.h"
  3. #include "PlaycoreCaptureLogompeg_encput_block.h"
  4. #include "PlaycoreCaptureLogompeg_encputbits.h"
  5. #include "PlaycoreCaptureLogompeg_encputvlc.h"
  6. #include "PlaycoreCaptureLogompeg_encmpeg_defs.h"
  7. #include "PlaycoreCaptureLogompeg_encenc_io.h"
  8. #include "PlaycoreCaptureLogompeg_encenc.h"
  9. #ifdef SUPPORT_CAPTURE_LOGO
  10. //static short MB[6][8][8];
  11. void PutSeqHdr(int hsize,int vsize,int aspectratio);
  12. void PutGopHdr(void);
  13. void PutPicHdr(int dc_prec,int prog_frame);
  14. void PutSeqEnd(void);
  15. void putseq(int hsize,int vsize,int aspectratio,int prog_frame,int quality)
  16. {
  17. short MB[6][8][8]; //jerry move it from bss to stack
  18. int i,j,k;
  19. int mb_height=vsize/16;
  20. int mb_width=hsize/16;
  21. int prev_mquant;
  22. int dc_prec=0; /* BUGBUG - uninitalized */
  23. MB_TYPE mb_type;
  24.   int x, y;
  25. initbits();
  26. prev_mquant=quality;
  27. if( prev_mquant<2 )
  28. {
  29. prev_mquant=2;
  30. }
  31. else if (prev_mquant>62 )
  32. {
  33. prev_mquant=62;
  34. }
  35. putsyshdr();
  36. PutSeqHdr(hsize,vsize,aspectratio);
  37. PutGopHdr();
  38. PutPicHdr(dc_prec,prog_frame);
  39. for (j=0; j<mb_height; j++)
  40. {
  41. /* macroblock row loop */
  42. alignbits();
  43. putbits(0x00000101UL+j,32); /* slice SC */
  44. putbits(prev_mquant >> 1, 5);
  45. putbits(0,1); /* extra_bit_slice */
  46.         for (k=0; k<3; k++)
  47. {
  48.            pLogoCapture->dc_dct_pred[k] = 128;
  49. }
  50. for (i=0; i<mb_width; i++)
  51. {
  52. /* macroblock loop */
  53. get_mb(MB,i,j);
  54. for(k=0;k<6;k++)
  55. {
  56. dct(MB[k]);
  57. quant_intra(MB[k],dc_prec,prev_mquant);
  58. }
  59. mb_type=MB_INTRA; /* BUGBUG - what about quant ?? */
  60. putbits(1,1); /* macroblock_address_increment */
  61. putmbtype(mb_type);
  62. /* if (mb_type & MB_QUANT) BUGBUG - MB-quant
  63. {
  64. putbits(mbinfo[k].mquant>>1,5);
  65. prev_mquant = mbinfo[k].mquant;
  66. }*/
  67. for(k=0;k<4;k++)
  68. {
  69. put_blk(MB[k],0);
  70. }
  71. put_blk(MB[4],1);
  72. put_blk(MB[5],2);
  73.      } 
  74.    }
  75. PutSeqEnd();
  76. alignsector();
  77. }
  78. void PutSeqHdr(int hsize,int vsize,int aspectratio)
  79. {
  80.   alignbits();
  81.   putbits(SEQ_START_CODE,32); /* sequence_header_code */
  82.   putbits(hsize,12); /* horizontal_size_value */
  83.   putbits(vsize,12); /* vertical_size_value */
  84.   putbits(aspectratio,4); /* aspect_ratio_information */
  85.   if( vsize==480 || vsize==240 )
  86.   {
  87. putbits(4,4); /* NTSC */
  88.   }
  89.   else
  90.   {
  91. putbits(3,4); /* PAL */
  92.   }
  93.   putbits(27000,18); /* bit_rate_value */
  94.   putbits(1,1); /* marker_bit */
  95.   putbits(112,10); /* vbv_buffer_size_value */
  96.   putbits(0,1); /* constrained_parameters_flag */
  97.   putbits(0,1); /* load_intra_quantizer_matrix */
  98. #if 0
  99.   if (load_iquant)
  100.   {
  101. for (i=0; i<64; i++)  /* matrices are always downloaded in zig-zag order */
  102. {
  103. putbits(intra_q[zig_zag_scan[i]],8); /* intra_quantizer_matrix */
  104. }
  105.   }
  106. #endif
  107.   putbits(0,1); /* load_non_intra_quantizer_matrix */
  108.   /* generate sequence extension (6.2.2.3, 6.3.5) header (MPEG-2 only) */
  109.   alignbits();
  110.   putbits(EXT_START_CODE,32); /* extension_start_code */
  111.   putbits(SEQ_ID,4); /* extension_start_code_identifier */
  112.   putbits(0x48 /*MP@ML*/,8); /* profile_and_level_indication */
  113.   putbits(0,1); /* progressive sequence */
  114.   putbits(CHROMA420,2); /* chroma_format */
  115.   putbits(0,2); /* horizontal_size_extension */
  116.   putbits(0,2); /* vertical_size_extension */
  117.   putbits(0,12); /* bit_rate_extension */
  118.   putbits(1,1); /* marker_bit */
  119.   putbits(0,8); /* vbv_buffer_size_extension */
  120.   putbits(0,1); /* low_delay  -- currently not implemented */
  121.   putbits(0,2); /* frame_rate_extension_n */
  122.   putbits(0,5); /* frame_rate_extension_d */
  123. }
  124. void PutGopHdr(void)
  125. {
  126.   alignbits();
  127.   putbits(GOP_START_CODE,32); /* group_start_code */
  128.   putbits(0,25); /* time_code */
  129.   putbits(1,1); /* closed_gop */
  130.   putbits(0,1); /* broken_link */
  131. }
  132. void PutPicHdr(int dc_prec,int prog_frame)
  133. {
  134.   alignbits();
  135.   putbits(PICTURE_START_CODE,32); /* picture_start_code */
  136.   putbits(0,10); /* temporal_reference */
  137.   putbits(1,3); /* picture_coding_type */
  138.   putbits(0,16); /* vbv_delay */
  139.   putbits(0,1); /* extra_bit_picture */
  140. /* generate picture coding extension (6.2.3.1, 6.3.11) */
  141.   alignbits();
  142.   putbits(EXT_START_CODE,32); /* extension_start_code */
  143.   putbits(CODING_ID,4); /* extension_start_code_identifier */
  144.   putbits(0xf,4); /* forward_horizontal_f_code */
  145.   putbits(0xf,4); /* forward_vertical_f_code */
  146.   putbits(0xf,4); /* backward_horizontal_f_code */
  147.   putbits(0xf,4); /* backward_vertical_f_code */
  148.   putbits(dc_prec,2); /* intra_dc_precision */
  149.   putbits(FRAME_PICTURE,2); /* picture_structure */
  150.   putbits(1,1); /* top_field_first */
  151.   putbits(1,1); /* frame_pred_frame_dct */
  152.   putbits(0,1); /* concealment_motion_vectors  -- currently not implemented */
  153.   putbits(0,1); /* q_scale_type */
  154.   putbits(0,1); /* intra_vlc_format */
  155.   putbits(0,1); /* alternate_scan */
  156.   putbits(0,1); /* repeat_first_field */
  157.   putbits(prog_frame,1); /* chroma_420_type */
  158.   putbits(prog_frame,1); /* progressive_frame */
  159.   putbits(0,1); /* composite_display_flag */
  160. }
  161. void PutSeqEnd(void)
  162. {
  163.   alignbits();
  164.   putbits(SEQ_END_CODE,32);
  165.   putbits(0,32);
  166.   putbits(ISO_END_CODE,32);
  167.   putbits(0,32);
  168. }
  169. #endif