comparison stream/tvi_dshow.c @ 25085:da7c8d1b7a36

Move common chain uninit code into separate routine.
author voroshil
date Mon, 19 Nov 2007 19:45:01 +0000
parents f72ebba1e6d1
children e91503fbf524
comparison
equal deleted inserted replaced
25084:f72ebba1e6d1 25085:da7c8d1b7a36
2936 } 2936 }
2937 return result; 2937 return result;
2938 } 2938 }
2939 2939
2940 /** 2940 /**
2941 * \brief chain uninitialization
2942 * \param chain chain data structure
2943 */
2944 static void destroy_chain(chain_t *chain)
2945 {
2946 int i;
2947
2948 if(!chain)
2949 return;
2950
2951 OLE_RELEASE_SAFE(chain->pStreamConfig);
2952 OLE_RELEASE_SAFE(chain->pCaptureFilter);
2953 if (chain->pmt)
2954 DeleteMediaType(chain->pmt);
2955
2956 if (chain->arpmt) {
2957 for (i = 0; chain->arpmt[i]; i++) {
2958 DeleteMediaType(chain->arpmt[i]);
2959 }
2960 free(chain->arpmt);
2961 }
2962
2963 if (chain->arStreamCaps) {
2964 for (i = 0; chain->arStreamCaps[i]; i++) {
2965 free(chain->arStreamCaps[i]);
2966 }
2967 free(chain->arStreamCaps);
2968 }
2969
2970 if (chain->rbuf) {
2971 destroy_ringbuffer(chain->rbuf);
2972 free(chain->rbuf);
2973 chain->rbuf = NULL;
2974 }
2975 free(chain);
2976 }
2977 /**
2941 * \brief driver uninitialization 2978 * \brief driver uninitialization
2942 * 2979 *
2943 * \param priv driver's private data structure 2980 * \param priv driver's private data structure
2944 * 2981 *
2945 * \return always 1 2982 * \return always 1
2969 OLE_CALL_ARGS(priv->pGraph, RemoveFilter, priv->chains[0]->pCaptureFilter); 3006 OLE_CALL_ARGS(priv->pGraph, RemoveFilter, priv->chains[0]->pCaptureFilter);
2970 if (priv->chains[1]->pCaptureFilter) 3007 if (priv->chains[1]->pCaptureFilter)
2971 OLE_CALL_ARGS(priv->pGraph, RemoveFilter, priv->chains[1]->pCaptureFilter); 3008 OLE_CALL_ARGS(priv->pGraph, RemoveFilter, priv->chains[1]->pCaptureFilter);
2972 } 3009 }
2973 OLE_RELEASE_SAFE(priv->pCrossbar); 3010 OLE_RELEASE_SAFE(priv->pCrossbar);
2974 OLE_RELEASE_SAFE(priv->chains[0]->pStreamConfig);
2975 OLE_RELEASE_SAFE(priv->chains[1]->pStreamConfig);
2976 OLE_RELEASE_SAFE(priv->pVideoProcAmp); 3011 OLE_RELEASE_SAFE(priv->pVideoProcAmp);
2977 OLE_RELEASE_SAFE(priv->chains[0]->pCaptureFilter);
2978 OLE_RELEASE_SAFE(priv->chains[1]->pCaptureFilter);
2979 OLE_RELEASE_SAFE(priv->pGraph); 3012 OLE_RELEASE_SAFE(priv->pGraph);
2980 OLE_RELEASE_SAFE(priv->pBuilder); 3013 OLE_RELEASE_SAFE(priv->pBuilder);
2981 OLE_RELEASE_SAFE(priv->pCSGCB); 3014 OLE_RELEASE_SAFE(priv->pCSGCB);
2982 3015
2983 if (priv->chains[0]->pmt)
2984 DeleteMediaType(priv->chains[0]->pmt);
2985 if (priv->chains[1]->pmt)
2986 DeleteMediaType(priv->chains[1]->pmt);
2987 if (priv->chains[2]->pmt)
2988 DeleteMediaType(priv->chains[2]->pmt);
2989
2990 if (priv->chains[0]->arpmt) {
2991 for (i = 0; priv->chains[0]->arpmt[i]; i++) {
2992 DeleteMediaType(priv->chains[0]->arpmt[i]);
2993 }
2994 free(priv->chains[0]->arpmt);
2995 }
2996 if (priv->chains[0]->arStreamCaps) {
2997 for (i = 0; priv->chains[0]->arStreamCaps[i]; i++) {
2998 free(priv->chains[0]->arStreamCaps[i]);
2999 }
3000 free(priv->chains[0]->arStreamCaps);
3001 }
3002 if (priv->chains[1]->arpmt) {
3003 for (i = 0; priv->chains[1]->arpmt[i]; i++) {
3004 DeleteMediaType(priv->chains[1]->arpmt[i]);
3005 }
3006 free(priv->chains[1]->arpmt);
3007 }
3008 if (priv->chains[1]->arStreamCaps) {
3009 for (i = 0; priv->chains[1]->arStreamCaps[i]; i++) {
3010 free(priv->chains[1]->arStreamCaps[i]);
3011 }
3012 free(priv->chains[1]->arStreamCaps);
3013 }
3014 if (priv->chains[1]->rbuf) {
3015 destroy_ringbuffer(priv->chains[1]->rbuf);
3016 free(priv->chains[1]->rbuf);
3017 priv->chains[1]->rbuf = NULL;
3018 }
3019 if (priv->chains[0]->rbuf) {
3020 destroy_ringbuffer(priv->chains[0]->rbuf);
3021 free(priv->chains[0]->rbuf);
3022 priv->chains[0]->rbuf = NULL;
3023 }
3024 if (priv->chains[2]->rbuf) {
3025 destroy_ringbuffer(priv->chains[2]->rbuf);
3026 free(priv->chains[2]->rbuf);
3027 priv->chains[2]->rbuf = NULL;
3028 }
3029 if(priv->freq_table){ 3016 if(priv->freq_table){
3030 priv->freq_table_len=-1; 3017 priv->freq_table_len=-1;
3031 free(priv->freq_table); 3018 free(priv->freq_table);
3032 priv->freq_table=NULL; 3019 priv->freq_table=NULL;
3033 } 3020 }
3034 3021
3035 for(i=0; i<3;i++) 3022 for(i=0; i<3;i++)
3036 { 3023 {
3037 if(priv->chains[i]) 3024 destroy_chain(priv->chains[i]);
3038 free(priv->chains[i]);
3039 priv->chains[i] = NULL; 3025 priv->chains[i] = NULL;
3040 } 3026 }
3041 CoUninitialize(); 3027 CoUninitialize();
3042 return (1); 3028 return (1);
3043 } 3029 }