いつもお世話になっております。
C言語で作ったプログラムをVisual Studio 2010と2013で起動し、挙動を比較したところ、同じ挙動にならなかったことに疑問を持ちましたので質問させていただきます。
###事象
Visual Studio 2010では下記コードを記述すると
「Error:型"void*"の値を使用して型"VideoState*"のエンティティを初期化することはできません。」
といったエラーが出ます。
Visual Studio 2013ではエラーは発生しませんでした。
C
1[FFMPEGAPIの構造体] 2[エラーは下にあるFFMPEGAPIの関数で発生] 3typedef struct VideoState { 4 SDL_Thread *read_tid; 5 SDL_Thread *video_tid; 6 SDL_Thread *audio_tid; 7 AVInputFormat *iformat; 8 int no_background; 9 int abort_request; 10 int force_refresh; 11 int paused; 12 int last_paused; 13 int queue_attachments_req; 14 int seek_req; 15 int seek_flags; 16 int64_t seek_pos; 17 int64_t seek_rel; 18 int read_pause_return; 19 AVFormatContext *ic[1024]; 20 int realtime; 21 22 Clock audclk; 23 Clock vidclk; 24 Clock extclk; 25 26 FrameQueue pictq; 27 FrameQueue subpq; 28 FrameQueue sampq; 29 30 Decoder auddec; 31 Decoder viddec; 32 Decoder subdec; 33 34 int audio_stream; 35 36 int av_sync_type; 37 38 double audio_clock; 39 int audio_clock_serial; 40 double audio_diff_cum; /* used for AV difference average computation */ 41 double audio_diff_avg_coef; 42 double audio_diff_threshold; 43 int audio_diff_avg_count; 44 AVStream *audio_st; 45 PacketQueue audioq; 46 int audio_hw_buf_size; 47 uint8_t silence_buf[SDL_AUDIO_MIN_BUFFER_SIZE]; 48 uint8_t *audio_buf; 49 uint8_t *audio_buf1; 50 unsigned int audio_buf_size; /* in bytes */ 51 unsigned int audio_buf1_size; 52 int audio_buf_index; /* in bytes */ 53 int audio_write_buf_size; 54 struct AudioParams audio_src; 55#if CONFIG_AVFILTER 56 struct AudioParams audio_filter_src; 57#endif 58 struct AudioParams audio_tgt; 59 struct SwrContext *swr_ctx; 60 int frame_drops_early; 61 int frame_drops_late; 62 63 enum ShowMode { 64 SHOW_MODE_NONE = -1, SHOW_MODE_VIDEO = 0, SHOW_MODE_WAVES, SHOW_MODE_RDFT, SHOW_MODE_NB 65 } show_mode; 66 int16_t sample_array[SAMPLE_ARRAY_SIZE]; 67 int sample_array_index; 68 int last_i_start; 69 RDFTContext *rdft; 70 int rdft_bits; 71 FFTSample *rdft_data; 72 int xpos; 73 double last_vis_time; 74 75 SDL_Thread *subtitle_tid; 76 int subtitle_stream; 77 AVStream *subtitle_st; 78 PacketQueue subtitleq; 79 80 double frame_timer; 81 double frame_last_returned_time; 82 double frame_last_filter_delay; 83 int video_stream; 84 AVStream *video_st; 85 PacketQueue videoq; 86 double max_frame_duration; // maximum duration of a frame - above this, we consider the jump a timestamp discontinuity 87#if !CONFIG_AVFILTER 88 struct SwsContext *img_convert_ctx; 89#endif 90 SDL_Rect last_display_rect; 91 92 char filename[1024]; 93 int width, height, xleft, ytop; 94 int step; 95 96#if CONFIG_AVFILTER 97 int vfilter_idx; 98 AVFilterContext *in_video_filter; // the first filter in the video chain 99 AVFilterContext *out_video_filter; // the last filter in the video chain 100 AVFilterContext *in_audio_filter; // the first filter in the audio chain 101 AVFilterContext *out_audio_filter; // the last filter in the audio chain 102 AVFilterGraph *agraph; // audio filter graph 103#endif 104 105 int last_video_stream, last_audio_stream, last_subtitle_stream; 106 107 SDL_cond *continue_read_thread; 108}VideoState;
C
1[FFMPEGAPIの関数] 2static int read_thread(void *arg) 3{ 4 //ここでエラー 5 VideoState *is = arg; 6 ...省略... 7return 0; 8}
###質問
Visual Studio2010と2013にはどんな違いがあるのか?
個人的な推測になりますが、コンパイラのバージョンが違えば設計自体も異なるといった話を
聞いたことがありますので、それの類なのではないかと考えています。
ですが、理由を明確にすることができなかったので御存知の方が居ましたら教えていただきたいです。
#もしかして調べ方が悪いのかな...?
よろしくお願い致します。m(_ _)m
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/31 04:33
2016/08/31 04:51
2016/08/31 06:34