Doxygen Source Code Documentation
mpeg2_internal.h File Reference
Go to the source code of this file.
Define Documentation
| 
 | 
| 
 Definition at line 207 of file mpeg2_internal.h. Referenced by mpeg2_init(). | 
| 
 | 
| 
 Definition at line 209 of file mpeg2_internal.h. Referenced by mpeg2_convert(). | 
| 
 | 
| 
 Definition at line 210 of file mpeg2_internal.h. Referenced by mpeg2_header_picture(). | 
| 
 | 
| 
 Definition at line 206 of file mpeg2_internal.h. Referenced by mpeg2_init(). | 
| 
 | 
| 
 Definition at line 208 of file mpeg2_internal.h. Referenced by mpeg2_convert(), and mpeg2_header_picture(). | 
| 
 | 
| 
 Definition at line 47 of file mpeg2_internal.h. Referenced by get_macroblock_modes(), mpeg2_header_end(), mpeg2_header_slice_start(), mpeg2_init_fbuf(), mpeg2_set_fbuf(), and slice_init(). | 
| 
 | 
| 
 Definition at line 41 of file mpeg2_internal.h. Referenced by mpeg2_header_slice_start(), mpeg2_init_fbuf(), and picture_coding_ext(). | 
| 
 | 
| 
 Definition at line 48 of file mpeg2_internal.h. Referenced by get_macroblock_modes(), mpeg2_slice(), and slice_intra_DCT(). | 
| 
 | 
| 
 Definition at line 30 of file mpeg2_internal.h. Referenced by get_macroblock_modes(), and mpeg2_slice(). | 
| 
 | 
| 
 Definition at line 42 of file mpeg2_internal.h. Referenced by get_macroblock_modes(), mpeg2_header_sequence(), mpeg2_init_fbuf(), mpeg2_slice(), and picture_coding_ext(). | 
| 
 | 
| 
 Definition at line 45 of file mpeg2_internal.h. Referenced by get_macroblock_modes(). | 
| 
 | 
| 
 Definition at line 25 of file mpeg2_internal.h. Referenced by get_macroblock_modes(), and mpeg2_slice(). | 
| 
 | 
| 
 Definition at line 27 of file mpeg2_internal.h. | 
| 
 | 
| 
 Definition at line 28 of file mpeg2_internal.h. Referenced by get_macroblock_modes(), and mpeg2_slice(). | 
| 
 | 
| 
 Definition at line 26 of file mpeg2_internal.h. Referenced by get_macroblock_modes(), and mpeg2_slice(). | 
| 
 | 
| 
 Definition at line 29 of file mpeg2_internal.h. Referenced by mpeg2_slice(). | 
| 
 | 
| 
 Definition at line 36 of file mpeg2_internal.h. Referenced by mpeg2_slice(). | 
| 
 | 
| 
 Definition at line 37 of file mpeg2_internal.h. Referenced by mpeg2_slice(). | 
| 
 | 
| 
 Definition at line 34 of file mpeg2_internal.h. Referenced by mpeg2_slice(). | 
| 
 | 
| 
 Definition at line 35 of file mpeg2_internal.h. Referenced by get_macroblock_modes(), and mpeg2_slice(). | 
| 
 | 
| 
 Definition at line 33 of file mpeg2_internal.h. Referenced by get_macroblock_modes(). | 
| 
 | 
| 
 Definition at line 32 of file mpeg2_internal.h. Referenced by mpeg2_slice(). | 
| 
 | 
| Value: mpeg2_mc_t mpeg2_mc_##x = { \ {MC_put_o_16_##x, MC_put_x_16_##x, MC_put_y_16_##x, MC_put_xy_16_##x, \ MC_put_o_8_##x, MC_put_x_8_##x, MC_put_y_8_##x, MC_put_xy_8_##x}, \ {MC_avg_o_16_##x, MC_avg_x_16_##x, MC_avg_y_16_##x, MC_avg_xy_16_##x, \ MC_avg_o_8_##x, MC_avg_x_8_##x, MC_avg_y_8_##x, MC_avg_xy_8_##x} \ }; Definition at line 283 of file mpeg2_internal.h. | 
| 
 | 
| 
 Definition at line 46 of file mpeg2_internal.h. Referenced by get_macroblock_modes(), and mpeg2_slice(). | 
| 
 | 
| 
 Definition at line 40 of file mpeg2_internal.h. Referenced by mpeg2_header_slice_start(), and picture_coding_ext(). | 
Typedef Documentation
| 
 | 
| 
 Definition at line 276 of file mpeg2_internal.h. Referenced by motion_fi_16x8(), motion_fi_dmv(), motion_fi_field(), motion_fr_dmv(), motion_fr_field(), motion_fr_frame(), motion_mp1(), motion_reuse(), and motion_zero(). | 
Function Documentation
| 
 | 
| 
 Definition at line 106 of file cpu_state.c. References MPEG2_ACCEL_PPC_ALTIVEC, MPEG2_ACCEL_X86_MMX, mpeg2_cpu_state_restore, mpeg2_cpu_state_save, and uint32_t. Referenced by mpeg2_accel(). 
 00107 {
00108 #ifdef ARCH_X86
00109     if (accel & MPEG2_ACCEL_X86_MMX) {
00110         mpeg2_cpu_state_restore = state_restore_mmx;
00111     }
00112 #endif
00113 #ifdef ARCH_PPC
00114     if (accel & MPEG2_ACCEL_PPC_ALTIVEC) {
00115         mpeg2_cpu_state_save = state_save_altivec;
00116         mpeg2_cpu_state_restore = state_restore_altivec;
00117     }
00118 #endif
00119 }
 | 
| 
 | 
| 
 Definition at line 161 of file cpu_accel.c. References MPEG2_ACCEL_MLIB, and uint32_t. Referenced by mpeg2_accel(). 
 00162 {
00163     uint32_t accel;
00164 
00165     accel = 0;
00166 #ifdef ACCEL_DETECT
00167 #ifdef LIBMPEG2_MLIB
00168     accel = MPEG2_ACCEL_MLIB;
00169 #endif
00170 #if defined (ARCH_X86) || defined (ARCH_PPC) || defined (ARCH_ALPHA)
00171     accel |= arch_accel ();
00172 #endif
00173 #endif
00174     return accel;
00175 }
 | 
| 
 | 
| 
 Definition at line 66 of file alloc.c. References free, and mpeg2_free_hook. Referenced by mpeg2_close(). 
 00067 {
00068     if (mpeg2_free_hook && mpeg2_free_hook (buf))
00069         return;
00070 
00071 #if defined(HAVE_MEMALIGN) && !defined(__cplusplus) && !defined(DEBUG)
00072     free (buf);
00073 #else
00074     free (*(((void **)buf) - 1));
00075 #endif
00076 }
 | 
| 
 | 
| 
 | 
| 
 Definition at line 588 of file header.c. References mpeg2dec_s::chunk_start, copyright_ext(), mpeg2dec_s::ext_state, picture_coding_ext(), picture_display_ext(), quant_matrix_ext(), sequence_display_ext(), and sequence_ext(). 
 00589 {
00590     static int (* parser[]) (mpeg2dec_t *) = {
00591         0, sequence_ext, sequence_display_ext, quant_matrix_ext,
00592         copyright_ext, 0, 0, picture_display_ext, picture_coding_ext
00593     };
00594     int ext, ext_bit;
00595 
00596     ext = mpeg2dec->chunk_start[0] >> 4;
00597     ext_bit = 1 << ext;
00598 
00599     if (!(mpeg2dec->ext_state & ext_bit))
00600         return 0;       /* ignore illegal extensions */
00601     mpeg2dec->ext_state &= ~ext_bit;
00602     return parser[ext] (mpeg2dec);
00603 }
 | 
| 
 | 
| 
 Definition at line 328 of file header.c. References mpeg2dec_s::info, reset_info(), mpeg2dec_s::state, and STATE_GOP. 
 00329 {
00330     mpeg2dec->state = STATE_GOP;
00331     reset_info (&(mpeg2dec->info));
00332     return 0;
00333 }
 | 
| 
 | 
| 
 Definition at line 389 of file header.c. References ALLOC_CONVERTED, mpeg2dec_s::alloc_index, ALLOC_YUV, decoder_s::b_motion, fbuf_t::buf, mpeg2dec_s::chunk_start, decoder_s::coding_type, mpeg2dec_s::convert_size, mpeg2dec_s::convert_start, mpeg2_info_t::current_picture, mpeg2_info_t::current_picture_2nd, mpeg2dec_s::custom_fbuf, mpeg2dec_s::decoder, mpeg2_info_t::discard_fbuf, mpeg2_info_t::display_fbuf, mpeg2_info_t::display_picture, mpeg2_info_t::display_picture_2nd, mpeg2dec_s::ext_state, motion_t::f_code, decoder_s::f_motion, mpeg2dec_s::fbuf, mpeg2dec_s::fbuf_alloc, mpeg2dec_s::first, picture_t::flags, sequence_t::flags, decoder_s::height, fbuf_t::id, mpeg2dec_s::info, mpeg2_malloc(), mpeg2_set_fbuf(), picture_t::nb_fields, PIC_CODING_EXT, PIC_FLAG_CODING_TYPE_B, PIC_FLAG_CODING_TYPE_P, mpeg2dec_s::picture, mpeg2dec_s::pictures, reset_info(), decoder_s::second_field, SEQ_FLAG_LOW_DELAY, mpeg2dec_s::sequence, mpeg2dec_s::state, STATE_PICTURE, picture_t::temporal_reference, uint8_t, mpeg2_info_t::user_data, mpeg2_info_t::user_data_len, and decoder_s::width. 
 00390 {
00391     uint8_t * buffer = mpeg2dec->chunk_start;
00392     picture_t * picture = mpeg2dec->picture;
00393     decoder_t * decoder = &(mpeg2dec->decoder);
00394     int type;
00395     int low_delay;
00396 
00397     type = (buffer [1] >> 3) & 7;
00398     low_delay = mpeg2dec->sequence.flags & SEQ_FLAG_LOW_DELAY;
00399 
00400     if (mpeg2dec->state == STATE_PICTURE) {
00401         picture_t * other;
00402 
00403         decoder->second_field = 0;
00404         other = mpeg2dec->pictures;
00405         if (other == picture)
00406             other += 2;
00407         if (decoder->coding_type != PIC_FLAG_CODING_TYPE_B) {
00408             mpeg2dec->fbuf[2] = mpeg2dec->fbuf[1];
00409             mpeg2dec->fbuf[1] = mpeg2dec->fbuf[0];
00410         }
00411         mpeg2dec->fbuf[0] = NULL;
00412         reset_info (&(mpeg2dec->info));
00413         mpeg2dec->info.current_picture = picture;
00414         mpeg2dec->info.display_picture = picture;
00415         if (type != PIC_FLAG_CODING_TYPE_B) {
00416             if (!low_delay) {
00417                 if (mpeg2dec->first) {
00418                     mpeg2dec->info.display_picture = NULL;
00419                     mpeg2dec->first = 0;
00420                 } else {
00421                     mpeg2dec->info.display_picture = other;
00422                     if (other->nb_fields == 1)
00423                         mpeg2dec->info.display_picture_2nd = other + 1;
00424                     mpeg2dec->info.display_fbuf = mpeg2dec->fbuf[1];
00425                 }
00426             }
00427             if (!low_delay + !mpeg2dec->convert_start)
00428                 mpeg2dec->info.discard_fbuf =
00429                     mpeg2dec->fbuf[!low_delay + !mpeg2dec->convert_start];
00430         }
00431         if (!mpeg2dec->custom_fbuf) {
00432             while (mpeg2dec->alloc_index < 3) {
00433                 fbuf_t * fbuf;
00434 
00435                 fbuf = &(mpeg2dec->fbuf_alloc[mpeg2dec->alloc_index++].fbuf);
00436                 fbuf->id = NULL;
00437                 if (mpeg2dec->convert_start) {    
00438                     fbuf->buf[0] =
00439                         (uint8_t *) mpeg2_malloc (mpeg2dec->convert_size[0],
00440                                                   ALLOC_CONVERTED);
00441                     fbuf->buf[1] = fbuf->buf[0] + mpeg2dec->convert_size[1];
00442                     fbuf->buf[2] = fbuf->buf[0] + mpeg2dec->convert_size[2];
00443                 } else {
00444                     int size;
00445                     size = mpeg2dec->decoder.width * mpeg2dec->decoder.height;
00446                     fbuf->buf[0] = (uint8_t *) mpeg2_malloc (6 * size >> 2,
00447                                                              ALLOC_YUV);
00448                     fbuf->buf[1] = fbuf->buf[0] + size;
00449                     fbuf->buf[2] = fbuf->buf[1] + (size >> 2);
00450                 }
00451             }
00452             mpeg2_set_fbuf (mpeg2dec, type);
00453         }
00454     } else {
00455         decoder->second_field = 1;
00456         mpeg2dec->info.current_picture_2nd = picture;
00457         mpeg2dec->info.user_data = NULL; mpeg2dec->info.user_data_len = 0;
00458         if (low_delay || type == PIC_FLAG_CODING_TYPE_B)
00459             mpeg2dec->info.display_picture_2nd = picture;
00460     }
00461     mpeg2dec->ext_state = PIC_CODING_EXT;
00462 
00463     picture->temporal_reference = (buffer[0] << 2) | (buffer[1] >> 6);
00464 
00465     decoder->coding_type = type;
00466     picture->flags |= type;
00467 
00468     if (type == PIC_FLAG_CODING_TYPE_P || type == PIC_FLAG_CODING_TYPE_B) {
00469         /* forward_f_code and backward_f_code - used in mpeg1 only */
00470         decoder->f_motion.f_code[1] = (buffer[3] >> 2) & 1;
00471         decoder->f_motion.f_code[0] =
00472             (((buffer[3] << 1) | (buffer[4] >> 7)) & 7) - 1;
00473         decoder->b_motion.f_code[1] = (buffer[4] >> 6) & 1;
00474         decoder->b_motion.f_code[0] = ((buffer[4] >> 3) & 7) - 1;
00475     }
00476 
00477     /* XXXXXX decode extra_information_picture as well */
00478 
00479     picture->nb_fields = 2;
00480 
00481     return 0;
00482 }
 | 
| 
 | 
| 
 Definition at line 354 of file header.c. References mpeg2dec_s::bytes_since_pts, decoder_s::coding_type, mpeg2dec_s::decoder, picture_t::display_offset, mpeg2dec_s::display_offset_x, mpeg2dec_s::display_offset_y, picture_t::flags, mpeg2_parse_header(), mpeg2dec_s::num_pts, PIC_FLAG_CODING_TYPE_B, PIC_FLAG_PTS, mpeg2dec_s::picture, mpeg2dec_s::pictures, picture_t::pts, mpeg2dec_s::pts_current, mpeg2dec_s::pts_previous, mpeg2dec_s::state, STATE_PICTURE, STATE_PICTURE_2ND, and STATE_SLICE_1ST. 
 00355 {
00356     decoder_t * decoder = &(mpeg2dec->decoder);
00357     picture_t * picture;
00358 
00359     if (mpeg2dec->state != STATE_SLICE_1ST) {
00360         mpeg2dec->state = STATE_PICTURE;
00361         picture = mpeg2dec->pictures;
00362         if ((decoder->coding_type != PIC_FLAG_CODING_TYPE_B) ^
00363             (mpeg2dec->picture >= mpeg2dec->pictures + 2))
00364             picture += 2;
00365     } else {
00366         mpeg2dec->state = STATE_PICTURE_2ND;
00367         picture = mpeg2dec->picture + 1;        /* second field picture */
00368     }
00369     mpeg2dec->picture = picture;
00370     picture->flags = 0;
00371     if (mpeg2dec->num_pts) {
00372         if (mpeg2dec->bytes_since_pts >= 4) {
00373             mpeg2dec->num_pts = 0;
00374             picture->pts = mpeg2dec->pts_current;
00375             picture->flags = PIC_FLAG_PTS;
00376         } else if (mpeg2dec->num_pts > 1) {
00377             mpeg2dec->num_pts = 1;
00378             picture->pts = mpeg2dec->pts_previous;
00379             picture->flags = PIC_FLAG_PTS;
00380         }
00381     }
00382     picture->display_offset[0].x = picture->display_offset[1].x =
00383         picture->display_offset[2].x = mpeg2dec->display_offset_x;
00384     picture->display_offset[0].y = picture->display_offset[1].y =
00385         picture->display_offset[2].y = mpeg2dec->display_offset_y;
00386     return mpeg2_parse_header (mpeg2dec);
00387 }
 | 
| 
 | 
| 
 Definition at line 97 of file header.c. References sequence_t::byte_rate, sequence_t::chroma_height, sequence_t::chroma_width, mpeg2dec_s::chunk_start, sequence_t::colour_primaries, decoder_s::concealment_motion_vectors, mpeg2dec_s::decoder, sequence_t::display_height, mpeg2dec_s::display_offset_x, mpeg2dec_s::display_offset_y, sequence_t::display_width, mpeg2dec_s::ext_state, sequence_t::flags, sequence_t::frame_period, FRAME_PICTURE, decoder_s::frame_pred_frame_dct, sequence_t::height, decoder_s::height, i, mpeg2dec_s::info, decoder_s::intra_dc_precision, decoder_s::intra_quantizer_matrix, sequence_t::matrix_coefficients, decoder_s::mpeg1, mpeg2dec_s::new_sequence, decoder_s::non_intra_quantizer_matrix, sequence_t::picture_height, decoder_s::picture_structure, sequence_t::picture_width, sequence_t::pixel_width, sequence_t::profile_level_id, decoder_s::q_scale_type, reset_info(), decoder_s::scan, SEQ_EXT, SEQ_FLAG_CONSTRAINED_PARAMETERS, SEQ_FLAG_PROGRESSIVE_SEQUENCE, mpeg2dec_s::state, STATE_SEQUENCE, sequence_t::transfer_characteristics, uint8_t, sequence_t::vbv_buffer_size, decoder_s::vertical_position_extension, sequence_t::width, and decoder_s::width. 
 00098 {
00099     uint8_t * buffer = mpeg2dec->chunk_start;
00100     sequence_t * sequence = &(mpeg2dec->new_sequence);
00101     decoder_t * decoder = &(mpeg2dec->decoder);
00102     static unsigned int frame_period[9] = {
00103         0, 1126125, 1125000, 1080000, 900900, 900000, 540000, 450450, 450000
00104     };
00105     int width, height;
00106     int i;
00107 
00108     if ((buffer[6] & 0x20) != 0x20)     /* missing marker_bit */
00109         return 1;
00110 
00111     i = (buffer[0] << 16) | (buffer[1] << 8) | buffer[2];
00112     sequence->display_width = sequence->picture_width = width = i >> 12;
00113     sequence->display_height = sequence->picture_height = height = i & 0xfff;
00114     decoder->width = sequence->width = width = (width + 15) & ~15;
00115     decoder->height = sequence->height = height = (height + 15) & ~15;
00116     decoder->vertical_position_extension = (height > 2800);
00117     sequence->chroma_width = width >> 1;
00118     sequence->chroma_height = height >> 1;
00119 
00120     sequence->flags = SEQ_FLAG_PROGRESSIVE_SEQUENCE;
00121 
00122     sequence->pixel_width = buffer[3] >> 4;     /* aspect ratio */
00123     sequence->frame_period = 0;
00124     if ((buffer[3] & 15) < 9)
00125         sequence->frame_period = frame_period[buffer[3] & 15];
00126 
00127     sequence->byte_rate = (buffer[4]<<10) | (buffer[5]<<2) | (buffer[6]>>6);
00128 
00129     sequence->vbv_buffer_size = ((buffer[6]<<16)|(buffer[7]<<8))&0x1ff800;
00130 
00131     if (buffer[7] & 4)
00132         sequence->flags |= SEQ_FLAG_CONSTRAINED_PARAMETERS;
00133 
00134     if (buffer[7] & 2) {
00135         for (i = 0; i < 64; i++)
00136             decoder->intra_quantizer_matrix[mpeg2_scan_norm[i]] =
00137                 (buffer[i+7] << 7) | (buffer[i+8] >> 1);
00138         buffer += 64;
00139     } else
00140         for (i = 0; i < 64; i++)
00141             decoder->intra_quantizer_matrix[mpeg2_scan_norm[i]] =
00142                 default_intra_quantizer_matrix [i];
00143 
00144     if (buffer[7] & 1)
00145         for (i = 0; i < 64; i++)
00146             decoder->non_intra_quantizer_matrix[mpeg2_scan_norm[i]] =
00147                 buffer[i+8];
00148     else
00149         for (i = 0; i < 64; i++)
00150             decoder->non_intra_quantizer_matrix[i] = 16;
00151 
00152     sequence->profile_level_id = 0x80;
00153     sequence->colour_primaries = 1;
00154     sequence->transfer_characteristics = 1;
00155     sequence->matrix_coefficients = 1;
00156 
00157     decoder->mpeg1 = 1;
00158     decoder->intra_dc_precision = 0;
00159     decoder->frame_pred_frame_dct = 1;
00160     decoder->q_scale_type = 0;
00161     decoder->concealment_motion_vectors = 0;
00162     decoder->scan = mpeg2_scan_norm;
00163     decoder->picture_structure = FRAME_PICTURE;
00164 
00165     mpeg2dec->ext_state = SEQ_EXT;
00166     mpeg2dec->state = STATE_SEQUENCE;
00167     mpeg2dec->display_offset_x = mpeg2dec->display_offset_y = 0;
00168 
00169     reset_info (&(mpeg2dec->info));
00170     return 0;
00171 }
 | 
| 
 | 
| 
 Definition at line 307 of file header.c. References sequence_t::byte_rate, finalize_sequence(), mpeg2dec_s::info, memcmp(), mpeg2dec_s::new_sequence, mpeg2_info_t::sequence, mpeg2dec_s::sequence, mpeg2dec_s::state, and STATE_SEQUENCE_REPEATED. Referenced by mpeg2_parse_header(). 
 00308 {
00309     sequence_t * sequence = &(mpeg2dec->new_sequence);
00310 
00311     finalize_sequence (sequence);
00312 
00313     /*
00314      * according to 6.1.1.6, repeat sequence headers should be
00315      * identical to the original. However some DVDs dont respect that
00316      * and have different bitrates in the repeat sequence headers. So
00317      * we'll ignore that in the comparison and still consider these as
00318      * repeat sequence headers.
00319      */
00320     mpeg2dec->sequence.byte_rate = sequence->byte_rate;
00321     if (!memcmp (&(mpeg2dec->sequence), sequence, sizeof (sequence_t)))
00322         mpeg2dec->state = STATE_SEQUENCE_REPEATED;
00323     mpeg2dec->sequence = *sequence;
00324 
00325     mpeg2dec->info.sequence = &(mpeg2dec->sequence);
00326 }
 | 
| 
 | 
| 
 | 
| 
 Definition at line 77 of file header.c. References mpeg2dec_s::alloc_index, mpeg2dec_s::alloc_index_user, mpeg2dec_s::decoder, fbuf_alloc_t::fbuf, mpeg2dec_s::fbuf, mpeg2dec_s::fbuf_alloc, mpeg2dec_s::first, mpeg2dec_s::picture, mpeg2dec_s::pictures, and decoder_s::scan. Referenced by mpeg2_init(). 
 00078 {
00079     mpeg2dec->decoder.scan = mpeg2_scan_norm;
00080     mpeg2dec->picture = mpeg2dec->pictures;
00081     mpeg2dec->fbuf[0] = &mpeg2dec->fbuf_alloc[0].fbuf;
00082     mpeg2dec->fbuf[1] = &mpeg2dec->fbuf_alloc[1].fbuf;
00083     mpeg2dec->fbuf[2] = &mpeg2dec->fbuf_alloc[2].fbuf;
00084     mpeg2dec->first = 1;
00085     mpeg2dec->alloc_index = 0;
00086     mpeg2dec->alloc_index_user = 0;
00087 }
 | 
| 
 | 
| 
 Definition at line 605 of file header.c. References mpeg2dec_s::chunk_ptr, mpeg2dec_s::chunk_start, mpeg2dec_s::info, mpeg2_info_t::user_data, and mpeg2_info_t::user_data_len. 
 00606 {
00607     if (!mpeg2dec->info.user_data_len)
00608         mpeg2dec->info.user_data = mpeg2dec->chunk_start;
00609     else
00610         mpeg2dec->info.user_data_len += 3;
00611     mpeg2dec->info.user_data_len += (mpeg2dec->chunk_ptr - 4 -
00612                                      mpeg2dec->chunk_start);
00613     mpeg2dec->chunk_start = mpeg2dec->chunk_ptr - 1;
00614     
00615     return 0;
00616 }
 | 
| 
 | ||||||||||||||||||||
| 
 Referenced by mpeg2_idct_init(). | 
| 
 | ||||||||||||||||||||
| 
 Referenced by mpeg2_idct_init(). | 
| 
 | ||||||||||||||||||||
| 
 Referenced by mpeg2_idct_init(). | 
| 
 | ||||||||||||||||||||
| 
 Referenced by mpeg2_idct_init(). | 
| 
 | ||||||||||||||||||||
| 
 Referenced by mpeg2_idct_init(). | 
| 
 | ||||||||||||||||||||
| 
 Referenced by mpeg2_idct_init(). | 
| 
 | ||||||||||||||||||||
| 
 Referenced by mpeg2_idct_init(). | 
| 
 | 
| 
 Referenced by mpeg2_idct_init(). | 
| 
 | 
| 
 Referenced by mpeg2_idct_init(). | 
| 
 | ||||||||||||||||
| 
 Referenced by mpeg2_idct_init(). | 
| 
 | ||||||||||||||||
| 
 Referenced by mpeg2_idct_init(). | 
| 
 | ||||||||||||||||
| 
 Referenced by mpeg2_idct_init(). | 
| 
 | ||||||||||||||||
| 
 Referenced by mpeg2_idct_init(). | 
| 
 | ||||||||||||||||
| 
 Referenced by mpeg2_idct_init(). | 
| 
 | ||||||||||||||||
| 
 Referenced by mpeg2_idct_init(). | 
| 
 | 
| 
 | 
| 
 Referenced by mpeg2_idct_init(). | 
| 
 | ||||||||||||
| 
 Definition at line 40 of file alloc.c. References malloc, memalign(), and mpeg2_malloc_hook. Referenced by mpeg2_convert(), mpeg2_header_picture(), and mpeg2_init(). 
 00041 {
00042     char * buf;
00043 
00044     if (mpeg2_malloc_hook) {
00045         buf = (char *) mpeg2_malloc_hook (size, reason);
00046         if (buf)
00047             return buf;
00048     }
00049 
00050 #if defined(HAVE_MEMALIGN) && !defined(__cplusplus) && !defined(DEBUG)
00051     return memalign (16, size);
00052 #else
00053     buf = (char *) malloc (size + 15 + sizeof (void **));
00054     if (buf) {
00055         char * align_buf;
00056 
00057         align_buf = buf + 15 + sizeof (void **);
00058         align_buf -= (long)align_buf & 15;
00059         *(((void **)align_buf) - 1) = buf;
00060         return align_buf;
00061     }
00062     return NULL;
00063 #endif
00064 }
 | 
| 
 | 
| 
 | 
| 
 Definition at line 219 of file decode.c. References mpeg2dec_s::action, mpeg2dec_s::buf_end, mpeg2dec_s::buf_start, BUFFER_SIZE, mpeg2dec_s::bytes_since_pts, mpeg2dec_s::chunk_buffer, mpeg2dec_s::chunk_ptr, mpeg2dec_s::chunk_start, mpeg2dec_s::code, copy_chunk(), mpeg2_header_sequence_finalize(), mpeg2_parse_header(), mpeg2_seek_header(), RECEIVED, mpeg2dec_s::state, STATE_GOP, STATE_INVALID, STATE_PICTURE, STATE_PICTURE_2ND, STATE_SEQUENCE, and x00. Referenced by mpeg2_header_picture_start(), mpeg2_parse(), mpeg2_parse_header(), and mpeg2_seek_header(). 
 00220 {
00221     static int (* process_header[]) (mpeg2dec_t * mpeg2dec) = {
00222         mpeg2_header_picture, mpeg2_header_extension, mpeg2_header_user_data,
00223         mpeg2_header_sequence, NULL, NULL, NULL, NULL, mpeg2_header_gop
00224     };
00225     int size_buffer, size_chunk, copied;
00226 
00227     mpeg2dec->action = mpeg2_parse_header;
00228     while (1) {
00229         size_buffer = mpeg2dec->buf_end - mpeg2dec->buf_start;
00230         size_chunk = (mpeg2dec->chunk_buffer + BUFFER_SIZE -
00231                       mpeg2dec->chunk_ptr);
00232         if (size_buffer <= size_chunk) {
00233             copied = copy_chunk (mpeg2dec, size_buffer);
00234             if (!copied) {
00235                 mpeg2dec->bytes_since_pts += size_buffer;
00236                 mpeg2dec->chunk_ptr += size_buffer;
00237                 return -1;
00238             }
00239         } else {
00240             copied = copy_chunk (mpeg2dec, size_chunk);
00241             if (!copied) {
00242                 /* filled the chunk buffer without finding a start code */
00243                 mpeg2dec->bytes_since_pts += size_chunk;
00244                 mpeg2dec->code = 0xb4;
00245                 mpeg2dec->action = mpeg2_seek_header;
00246                 return STATE_INVALID;
00247             }
00248         }
00249         mpeg2dec->bytes_since_pts += copied;
00250 
00251         if (process_header[mpeg2dec->code & 0x0b] (mpeg2dec)) {
00252             mpeg2dec->code = mpeg2dec->buf_start[-1];
00253             mpeg2dec->action = mpeg2_seek_header;
00254             return STATE_INVALID;
00255         }
00256 
00257         mpeg2dec->code = mpeg2dec->buf_start[-1];
00258         switch (RECEIVED (mpeg2dec->code, mpeg2dec->state)) {
00259 
00260         /* state transition after a sequence header */
00261         case RECEIVED (0x00, STATE_SEQUENCE):
00262             mpeg2dec->action = mpeg2_header_picture_start;
00263         case RECEIVED (0xb8, STATE_SEQUENCE):
00264             mpeg2_header_sequence_finalize (mpeg2dec);
00265             break;
00266 
00267         /* other legal state transitions */
00268         case RECEIVED (0x00, STATE_GOP):
00269             mpeg2dec->action = mpeg2_header_picture_start;
00270             break;
00271         case RECEIVED (0x01, STATE_PICTURE):
00272         case RECEIVED (0x01, STATE_PICTURE_2ND):
00273             mpeg2dec->action = mpeg2_header_slice_start;
00274             break;
00275 
00276         /* legal headers within a given state */
00277         case RECEIVED (0xb2, STATE_SEQUENCE):
00278         case RECEIVED (0xb2, STATE_GOP):
00279         case RECEIVED (0xb2, STATE_PICTURE):
00280         case RECEIVED (0xb2, STATE_PICTURE_2ND):
00281         case RECEIVED (0xb5, STATE_SEQUENCE):
00282         case RECEIVED (0xb5, STATE_PICTURE):
00283         case RECEIVED (0xb5, STATE_PICTURE_2ND):
00284             mpeg2dec->chunk_ptr = mpeg2dec->chunk_start;
00285             continue;
00286 
00287         default:
00288             mpeg2dec->action = mpeg2_seek_header;
00289             return STATE_INVALID;
00290         }
00291 
00292         mpeg2dec->chunk_start = mpeg2dec->chunk_ptr = mpeg2dec->chunk_buffer;
00293         return mpeg2dec->state;
00294     }
00295 }
 | 
| 
 | 
| 
 Definition at line 134 of file decode.c. References mpeg2dec_s::chunk_buffer, mpeg2dec_s::chunk_ptr, mpeg2dec_s::chunk_start, mpeg2dec_s::code, mpeg2_parse_header(), seek_chunk(), mpeg2dec_s::sequence, and sequence_t::width. Referenced by mpeg2_parse(), mpeg2_parse_header(), and mpeg2_seek_sequence(). 
 00135 {
00136     while (mpeg2dec->code != 0xb3 &&
00137            ((mpeg2dec->code != 0xb7 && mpeg2dec->code != 0xb8 &&
00138              mpeg2dec->code) || mpeg2dec->sequence.width == -1))
00139         if (seek_chunk (mpeg2dec))
00140             return -1;
00141     mpeg2dec->chunk_start = mpeg2dec->chunk_ptr = mpeg2dec->chunk_buffer;
00142     return mpeg2_parse_header (mpeg2dec);
00143 }
 | 
| 
 | 
| 
 Definition at line 145 of file decode.c. References mpeg2_seek_header(), mpeg2dec_s::sequence, and sequence_t::width. Referenced by mpeg2_init(). 
 00146 {
00147     mpeg2dec->sequence.width = -1;
00148     return mpeg2_seek_header (mpeg2dec);
00149 }
 | 
| 
 | ||||||||||||
| 
 Definition at line 335 of file header.c. References B_TYPE, mpeg2dec_s::convert_start, mpeg2_info_t::current_fbuf, mpeg2_info_t::discard_fbuf, mpeg2_info_t::display_fbuf, mpeg2dec_s::fbuf, mpeg2dec_s::fbuf_alloc, sequence_t::flags, i, mpeg2dec_s::info, SEQ_FLAG_LOW_DELAY, and mpeg2dec_s::sequence. Referenced by mpeg2_header_picture(), and mpeg2_set_buf(). 
 00336 {
00337     int i;
00338 
00339     for (i = 0; i < 3; i++)
00340         if (mpeg2dec->fbuf[1] != &mpeg2dec->fbuf_alloc[i].fbuf &&
00341             mpeg2dec->fbuf[2] != &mpeg2dec->fbuf_alloc[i].fbuf) {
00342             mpeg2dec->fbuf[0] = &mpeg2dec->fbuf_alloc[i].fbuf;
00343             mpeg2dec->info.current_fbuf = mpeg2dec->fbuf[0];
00344             if ((coding_type == B_TYPE) ||
00345                 (mpeg2dec->sequence.flags & SEQ_FLAG_LOW_DELAY)) {
00346                 if ((coding_type == B_TYPE) || (mpeg2dec->convert_start))
00347                     mpeg2dec->info.discard_fbuf = mpeg2dec->fbuf[0];
00348                 mpeg2dec->info.display_fbuf = mpeg2dec->fbuf[0];
00349             }
00350             break;
00351         }
00352 }
 | 
Variable Documentation
| 
 | 
| 
 Definition at line 293 of file mpeg2_internal.h. Referenced by mpeg2_mc_init(). | 
| 
 | 
| 
 Definition at line 295 of file mpeg2_internal.h. Referenced by mpeg2_mc_init(). | 
| 
 | 
| 
 Definition at line 294 of file mpeg2_internal.h. Referenced by mpeg2_mc_init(). | 
| 
 | 
| 
 Definition at line 290 of file mpeg2_internal.h. Referenced by mpeg2_mc_init(). | 
| 
 | 
| 
 Definition at line 296 of file mpeg2_internal.h. Referenced by mpeg2_mc_init(). | 
| 
 | 
| 
 Definition at line 291 of file mpeg2_internal.h. Referenced by mpeg2_mc_init(). | 
| 
 | 
| 
 Definition at line 292 of file mpeg2_internal.h. Referenced by mpeg2_mc_init(). | 
 
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
 
 
 
 
       
	   
	   
	   
	  