| | 838 | /* Only force the chroma setting if it is specified by the user. */ |
|---|
| | 839 | if( p_sys->b_chroma ) |
|---|
| | 840 | { |
|---|
| | 841 | /* Find out if the pin handles MEDIATYPE_Stream, in which case we |
|---|
| | 842 | * won't add a prefered media type as this doesn't seem to work well |
|---|
| | 843 | * -- to investigate. */ |
|---|
| | 844 | vlc_bool_t b_stream_type = VLC_FALSE; |
|---|
| | 845 | for( size_t i = 0; i < media_count; i++ ) |
|---|
| | 846 | { |
|---|
| | 847 | if( media_types[i].majortype == MEDIATYPE_Stream ) |
|---|
| | 848 | { |
|---|
| | 849 | b_stream_type = VLC_TRUE; |
|---|
| | 850 | break; |
|---|
| | 851 | } |
|---|
| | 852 | } |
|---|
| | 853 | |
|---|
| | 854 | if( !b_stream_type && !b_audio ) |
|---|
| | 855 | { |
|---|
| | 856 | // Insert prefered video media type |
|---|
| | 857 | AM_MEDIA_TYPE mtr; |
|---|
| | 858 | VIDEOINFOHEADER vh; |
|---|
| | 859 | |
|---|
| | 860 | mtr.majortype = MEDIATYPE_Video; |
|---|
| | 861 | mtr.subtype = MEDIASUBTYPE_I420; |
|---|
| | 862 | mtr.bFixedSizeSamples = TRUE; |
|---|
| | 863 | mtr.bTemporalCompression = FALSE; |
|---|
| | 864 | mtr.pUnk = NULL; |
|---|
| | 865 | mtr.formattype = FORMAT_VideoInfo; |
|---|
| | 866 | mtr.cbFormat = sizeof(vh); |
|---|
| | 867 | mtr.pbFormat = (BYTE *)&vh; |
|---|
| | 868 | |
|---|
| | 869 | memset(&vh, 0, sizeof(vh)); |
|---|
| | 870 | |
|---|
| | 871 | vh.bmiHeader.biSize = sizeof(vh.bmiHeader); |
|---|
| | 872 | vh.bmiHeader.biWidth = p_sys->i_width > 0 ? p_sys->i_width : 320; |
|---|
| | 873 | vh.bmiHeader.biHeight = p_sys->i_height > 0 ? p_sys->i_height : 240; |
|---|
| | 874 | vh.bmiHeader.biPlanes = 3; |
|---|
| | 875 | vh.bmiHeader.biBitCount = 12; |
|---|
| | 876 | vh.bmiHeader.biCompression = VLC_FOURCC('I','4','2','0'); |
|---|
| | 877 | vh.bmiHeader.biSizeImage = vh.bmiHeader.biWidth * 12 * |
|---|
| | 878 | vh.bmiHeader.biHeight / 8; |
|---|
| | 879 | mtr.lSampleSize = vh.bmiHeader.biSizeImage; |
|---|
| | 880 | |
|---|
| | 881 | mt_count = 1; |
|---|
| | 882 | mt = (AM_MEDIA_TYPE *)malloc( sizeof(AM_MEDIA_TYPE)*mt_count ); |
|---|
| | 883 | CopyMediaType(mt, &mtr); |
|---|
| | 884 | } |
|---|
| | 885 | else if( !b_stream_type ) |
|---|
| | 886 | { |
|---|
| | 887 | // Insert prefered audio media type |
|---|
| | 888 | AM_MEDIA_TYPE mtr; |
|---|
| | 889 | WAVEFORMATEX wf; |
|---|
| | 890 | |
|---|
| | 891 | mtr.majortype = MEDIATYPE_Audio; |
|---|
| | 892 | mtr.subtype = MEDIASUBTYPE_PCM; |
|---|
| | 893 | mtr.bFixedSizeSamples = TRUE; |
|---|
| | 894 | mtr.bTemporalCompression = FALSE; |
|---|
| | 895 | mtr.lSampleSize = 0; |
|---|
| | 896 | mtr.pUnk = NULL; |
|---|
| | 897 | mtr.formattype = FORMAT_WaveFormatEx; |
|---|
| | 898 | mtr.cbFormat = sizeof(wf); |
|---|
| | 899 | mtr.pbFormat = (BYTE *)&wf; |
|---|
| | 900 | |
|---|
| | 901 | memset(&wf, 0, sizeof(wf)); |
|---|
| | 902 | |
|---|
| | 903 | wf.wFormatTag = WAVE_FORMAT_PCM; |
|---|
| | 904 | wf.nChannels = 2; |
|---|
| | 905 | wf.nSamplesPerSec = 44100; |
|---|
| | 906 | wf.wBitsPerSample = 16; |
|---|
| | 907 | wf.nBlockAlign = wf.nSamplesPerSec * wf.wBitsPerSample / 8; |
|---|
| | 908 | wf.nAvgBytesPerSec = wf.nSamplesPerSec * wf.nBlockAlign; |
|---|
| | 909 | wf.cbSize = 0; |
|---|
| | 910 | |
|---|
| | 911 | mt_count = 1; |
|---|
| | 912 | mt = (AM_MEDIA_TYPE *)malloc( sizeof(AM_MEDIA_TYPE)*mt_count ); |
|---|
| | 913 | CopyMediaType(mt, &mtr); |
|---|
| | 914 | } |
|---|
| | 915 | } |
|---|
| | 916 | |
|---|