/* * GPAC - Multimedia Framework C SDK * * Authors: Arash Shafiei * Copyright (c) Telecom ParisTech 2000-2013 * All rights reserved * * This file is part of GPAC / dashcast * * GPAC is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * GPAC is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; see the file COPYING. If not, write to * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. * */ #ifndef VIDEO_DECODER_H_ #define VIDEO_DECODER_H_ #include "video_data.h" #include "libavformat/avformat.h" #include "libavdevice/avdevice.h" /* * The structure which keeps the data of * input video file. */ typedef struct { /* Format context structure provided by avlib to open and read from a media file. */ AVFormatContext *av_fmt_ctx; /* A reference counter on the format context (may be shared with other sources). Currently redundant with av_pkt_list non-NULLness. */ int av_fmt_ctx_ref_cnt; /* A list of AVPackets and return value to be processed: when this parameter is non-null, * the video thread makes the demux and pushes the packets. Packets must be freed when retrieved.*/ GF_List *av_pkt_list; GF_Mutex *av_pkt_list_mutex; /* The index of the video stream in the file. */ int vstream_idx; /* video width, height, and pixel format. */ int width; int height; int pix_fmt; AVRational sar; int mode; int no_loop, nb_consumers; u32 frame_decoded; u32 pts_init; u64 first_pts, prev_pts, pts_dur_estimate, sync_tolerance; u64 utc_at_init; } VideoInputFile; /* * Open the input video * * @param cmd_data [in] contains information about the file name * and the video format. * * @param video_input_file [out] pointer to the structure which we want to * open the file * * @return 0 on success -1 on failure. */ int dc_video_decoder_open(VideoInputFile *video_input_file, VideoDataConf *video_data_conf, int mode, int no_loop, int nb_consumers); /* * Read and decode video and put decoded frames on circular buffer * * @param video_input_file [in] contains info on input video. * @param video_input_data [out] the decoded samples will be put * on the circular buffer of this parameter. * * @return 0 on success, -1 on failure, -2 on EOF (end of the file) */ int dc_video_decoder_read(VideoInputFile *video_input_file, VideoInputData *video_input_data, int source_number, int use_source_timing, int is_live_capture, const int *exit_signal_addr); /* * Close the input video * * @param video_input_file [in] the video file to be closed * */ void dc_video_decoder_close(VideoInputFile *); #endif /* VIDEO_DECODER_H_ */