-/*******************************************************************************
+/*****************************************************************************
* video_decoder.h : video decoder thread
* (c)1999 VideoLAN
- *******************************************************************************
- *******************************************************************************
+ *****************************************************************************
+ *****************************************************************************
* Requires:
* "config.h"
* "common.h"
* "video.h"
* "video_output.h"
* "decoder_fifo.h"
- *******************************************************************************/
+ *****************************************************************************/
-/*******************************************************************************
+/*****************************************************************************
* vdec_thread_t: video decoder thread descriptor
- *******************************************************************************
+ *****************************************************************************
* ??
- *******************************************************************************/
+ *****************************************************************************/
typedef struct vdec_thread_s
{
/* Thread properties and locks */
- boolean_t b_die; /* `die' flag */
- boolean_t b_run; /* `run' flag */
- boolean_t b_error; /* `error' flag */
- boolean_t b_active; /* `active' flag */
- vlc_thread_t thread_id; /* id for thread functions */
+ boolean_t b_die; /* `die' flag */
+ boolean_t b_run; /* `run' flag */
+ boolean_t b_error; /* `error' flag */
+ boolean_t b_active; /* `active' flag */
+ vlc_thread_t thread_id; /* id for thread functions */
/* Thread configuration */
/* ?? */
/*??*/
// int *pi_status;
-
+#ifdef OLD_DECODER
/* Input properties */
- decoder_fifo_t fifo; /* PES input fifo */
+ decoder_fifo_t fifo; /* PES input fifo */
/* The bit stream structure handles the PES stream at the bit level */
bit_stream_t bit_stream;
/* Output properties */
- vout_thread_t * p_vout; /* video output thread */
- int i_stream; /* video stream id */
-
+ vout_thread_t * p_vout; /* video output thread */
+ int i_stream; /* video stream id */
+#else
+ /* idct iformations */
+ dctelem_t p_pre_idct[64*64];
+
+ /* Input properties */
+ struct vpar_thread_s * p_vpar; /* video_parser thread */
+
+ /* Lookup tables */
+//#ifdef MPEG2_COMPLIANT
+ u8 pi_crop_buf[VDEC_CROPRANGE];
+ u8 * pi_crop;
+//#endif
+#endif
#ifdef STATS
/* Statistics */
- count_t c_loops; /* number of loops */
- count_t c_idle_loops; /* number of idle loops */
- count_t c_pictures; /* number of pictures read */
- count_t c_i_pictures; /* number of I pictures read */
- count_t c_p_pictures; /* number of P pictures read */
- count_t c_b_pictures; /* number of B pictures read */
- count_t c_decoded_pictures; /* number of pictures decoded */
- count_t c_decoded_i_pictures; /* number of I pictures decoded */
- count_t c_decoded_p_pictures; /* number of P pictures decoded */
- count_t c_decoded_b_pictures; /* number of B pictures decoded */
+ count_t c_loops; /* number of loops */
+ count_t c_idle_loops; /* number of idle loops */
+#ifdef OLD_DECODER
+ count_t c_pictures; /* number of pictures read */
+ count_t c_i_pictures; /* number of I pictures read */
+ count_t c_p_pictures; /* number of P pictures read */
+ count_t c_b_pictures; /* number of B pictures read */
+#endif
+ count_t c_decoded_pictures; /* number of pictures decoded */
+ count_t c_decoded_i_pictures; /* number of I pictures decoded */
+ count_t c_decoded_p_pictures; /* number of P pictures decoded */
+ count_t c_decoded_b_pictures; /* number of B pictures decoded */
#endif
} vdec_thread_t;
-/*******************************************************************************
+/*****************************************************************************
+ * Function pointers
+ *****************************************************************************/
+#ifndef OLD_DECODER
+typedef void (*f_addb_t)( vdec_thread_t *, dctelem_t*, yuv_data_t*, int );
+#endif
+
+/*****************************************************************************
* Prototypes
- *******************************************************************************/
+ *****************************************************************************/
+#ifndef OLD_DECODER
+struct vpar_thread_s;
+#endif
/* Thread management functions */
+#ifdef OLD_DECODER
p_vdec_thread_t vdec_CreateThread ( /* video_cfg_t *p_cfg, */ input_thread_t *p_input /*,
vout_thread_t *p_vout, int *pi_status */ );
void vdec_DestroyThread ( vdec_thread_t *p_vdec /*, int *pi_status */ );
-
-/* Time management functions */
-/* ?? */
-
-/* Dynamic thread settings */
-/* ?? */
+#else
+vdec_thread_t * vdec_CreateThread ( struct vpar_thread_s *p_vpar /*, int *pi_status */ );
+void vdec_DestroyThread ( vdec_thread_t *p_vdec /*, int *pi_status */ );
+void vdec_AddBlock( vdec_thread_t *, dctelem_t*, yuv_data_t*, int );
+void vdec_CopyBlock( vdec_thread_t *, dctelem_t*, yuv_data_t*, int );
+void vdec_DummyBlock( vdec_thread_t *, dctelem_t*, yuv_data_t*, int );
+#endif
{
/* File methods */
case INPUT_METHOD_TS_FILE:
+#ifdef OLD_DECODER
p_input->p_open = &input_FileCreateMethod;
p_input->p_read = &input_FileRead;
p_input->p_clean = &input_FileDestroyMethod;
+#else
+ p_input->p_open = input_FileCreateMethod;
+ p_input->p_read = input_FileRead;
+ p_input->p_clean = input_FileDestroyMethod;
+#endif
break;
/* Network methods */
case INPUT_METHOD_TS_MCAST:
case INPUT_METHOD_TS_BCAST:
case INPUT_METHOD_TS_VLAN_BCAST:
+#ifdef OLD_DECODER
p_input->p_open = &input_NetworkCreateMethod;
p_input->p_read = &input_NetworkRead;
p_input->p_clean = &input_NetworkDestroyMethod;
+#else
+ p_input->p_open = input_NetworkCreateMethod;
+ p_input->p_read = input_NetworkRead;
+ p_input->p_clean = input_NetworkDestroyMethod;
+#endif
break;
case INPUT_METHOD_NONE:
{
case MPEG1_VIDEO_ES:
case MPEG2_VIDEO_ES:
+#ifdef OLD_DECODER
vdec_DestroyThread( (vdec_thread_t*)(p_input->pp_selected_es[i_es_loop]->p_dec) /*, NULL */ );
+#else
+ vpar_DestroyThread( (vpar_thread_t*)(p_input->pp_selected_es[i_es_loop]->p_dec) /*, NULL */ );
+#endif
break;
case MPEG1_AUDIO_ES:
{
case MPEG1_VIDEO_ES:
case MPEG2_VIDEO_ES:
+#ifdef OLD_DECODER
p_fifo = &(((vdec_thread_t*)(p_es_descriptor->p_dec))->fifo);
+#else
+ p_fifo = &(((vpar_thread_t*)(p_es_descriptor->p_dec))->fifo);
+#endif
break;
case MPEG1_AUDIO_ES:
/*******************************************************************************
* Preamble
*******************************************************************************/
+
#include "vlc.h"
-/*
+#if 0
#include <errno.h>
-#include <sys/uio.h>
-#include <stdlib.h>
+#include <sys/uio.h> /* iovec */
+#include <stdlib.h> /* atoi(), malloc(), free() */
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <X11/Xlib.h>
#include <X11/extensions/XShm.h>
#include <sys/soundcard.h>
-#include <netinet/in.h>
+#include <netinet/in.h> /* ntohs */
#include "common.h"
#include "config.h"
#include "video.h"
#include "video_output.h"
-#include "video_decoder.h" */
+#include "video_decoder.h"
+
+#endif
/******************************************************************************
* input_AddPgrmElem: Start the extraction and the decoding of a program element
case MPEG2_VIDEO_ES:
/* Spawn video thread. */
/* Les 2 pointeurs NULL ne doivent pas etre NULL sinon on segfault !!!! */
+#ifdef OLD_DECODER
if( ((vdec_thread_t*)(p_input->p_es[i_es_loop].p_dec) =
vdec_CreateThread( p_input )) == NULL )
+#else
+ if( ((vpar_thread_t*)(p_input->p_es[i_es_loop].p_dec) =
+ vpar_CreateThread( p_input )) == NULL )
+#endif
{
+#ifdef OLD_DECODER
intf_ErrMsg("Could not start video decoder\n");
+#else
+ intf_ErrMsg("Could not start video parser\n");
+#endif
vlc_mutex_unlock( &p_input->es_lock );
return( -1 );
}
case MPEG1_VIDEO_ES:
case MPEG2_VIDEO_ES:
+#ifdef OLD_DECODER
vdec_DestroyThread( (vdec_thread_t*)(p_input->pp_selected_es[i_selected_es_loop]->p_dec) /*, NULL */ );
+#else
+ vpar_DestroyThread( (vpar_thread_t*)(p_input->pp_selected_es[i_selected_es_loop]->p_dec) /*, NULL */ );
+#endif
break;
}