Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- commit dbb9b0b989cbd3d116554093a91dfe185662bd3c
- Author: Eejya Singh <[email protected]>
- Date: Mon Dec 15 18:57:31 2014 +0530
- DVD input device
- diff --git a/configure b/configure
- index 40d5428..6e7ffbd 100755
- --- a/configure
- +++ b/configure
- @@ -1350,6 +1350,7 @@ EXTERNAL_LIBRARY_LIST="
- libcdio
- libcelt
- libdc1394
- + libdvdnav
- libfaac
- libfdk_aac
- libflite
- @@ -2485,6 +2486,7 @@ dshow_indev_deps="IBaseFilter"
- dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid"
- dv1394_indev_deps="dv1394"
- dv1394_indev_select="dv_demuxer"
- +dvd_indev_deps="libdvdnav"
- fbdev_indev_deps="linux_fb_h"
- fbdev_outdev_deps="linux_fb_h"
- gdigrab_indev_deps="CreateDIBSection"
- @@ -4858,6 +4860,7 @@ enabled libcelt && require libcelt celt/celt.h celt_decode -lcelt0 &&
- { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
- die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
- enabled libcaca && require_pkg_config caca caca.h caca_create_canvas
- +enabled libdvdnav && require_pkg_config dvdnav dvdnav/dvdnav.h dvdnav_open -ldvdnav -lpthread
- enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
- enabled libfdk_aac && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
- flite_libs="-lflite_cmu_time_awb -lflite_cmu_us_awb -lflite_cmu_us_kal -lflite_cmu_us_kal16 -lflite_cmu_us_rms -lflite_cmu_us_slt -lflite_usenglish -lflite_cmulex -lflite"
- diff --git a/libavdevice/Makefile b/libavdevice/Makefile
- index 6b8ab2e..ef0ce60 100644
- --- a/libavdevice/Makefile
- +++ b/libavdevice/Makefile
- @@ -22,6 +22,7 @@ OBJS-$(CONFIG_DSHOW_INDEV) += dshow.o dshow_enummediatypes.o \
- dshow_enumpins.o dshow_filter.o \
- dshow_pin.o dshow_common.o
- OBJS-$(CONFIG_DV1394_INDEV) += dv1394.o
- +OBJS-$(CONFIG_DVD_INDEV) += dvd-dec.o
- OBJS-$(CONFIG_FBDEV_INDEV) += fbdev_dec.o \
- fbdev_common.o
- OBJS-$(CONFIG_FBDEV_OUTDEV) += fbdev_enc.o \
- diff --git a/libavdevice/alldevices.c b/libavdevice/alldevices.c
- index 26aecf2..dd125df 100644
- --- a/libavdevice/alldevices.c
- +++ b/libavdevice/alldevices.c
- @@ -53,6 +53,7 @@ void avdevice_register_all(void)
- REGISTER_INOUTDEV(DECKLINK, decklink);
- REGISTER_INDEV (DSHOW, dshow);
- REGISTER_INDEV (DV1394, dv1394);
- + REGISTER_INDEV (DVD, dvd);
- REGISTER_INOUTDEV(FBDEV, fbdev);
- REGISTER_INDEV (GDIGRAB, gdigrab);
- REGISTER_INDEV (IEC61883, iec61883);
- diff --git a/libavdevice/dvd-dec.c b/libavdevice/dvd-dec.c
- new file mode 100644
- index 0000000..2769ade
- --- /dev/null
- +++ b/libavdevice/dvd-dec.c
- @@ -0,0 +1,128 @@
- +/*
- + * Copyright (c) 2014 Eejya Singh
- + *
- + * This file is part of FFmpeg.
- + *
- + * Permission to use, copy, modify, and/or distribute this software for any
- + * purpose with or without fee is hereby granted, provided that the above
- + * copyright notice and this permission notice appear in all copies.
- + *
- + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
- + * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- + * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
- + * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- + * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
- + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- + * PERFORMANCE OF THIS SOFTWARE.
- + */
- +
- +/**
- + * @file
- + * DVD 1.1 capture device for libavdevice
- + **/
- +
- +#include "libavutil/opt.h"
- +#include "libavutil/time.h"
- +#include "libavformat/internal.h"
- +#include "avdevice.h"
- +#include <dvdnav/dvdnav.h>
- +#include <dvdnav/dvd_types.h>
- +
- +/* libdvdnav's read ahead cache to be used */
- +#define DVD_READ_CACHE 1
- +
- +/* default language for menus/audio/subpictures */
- +#define DVD_LANGUAGE "en"
- +
- +typedef struct {
- + dvdnav_t *nav_data;
- + uint8_t cache_buf[DVD_VIDEO_LB_LEN];
- + char *language;
- +} DVDContext;
- +
- +
- +static int read_header(AVFormatContext *ctx)
- +{
- + DVDContext *dvd = ctx->priv_data;
- + int titles;
- + if (!(dvd = av_mallocz(sizeof(DVDContext))))
- + return AVERROR(ENOMEM);
- +
- + if(dvdnav_open(&dvd->nav_data,ctx->filename[0] ? ctx->filename : NULL) != DVDNAV_STATUS_OK)
- + {
- + av_freep(&dvd);
- + return AVERROR(EIO);
- + }
- +
- + dvd->language = av_strdup(DVD_LANGUAGE);
- +
- + dvdnav_get_number_of_titles(dvd->nav_data, &titles);
- + av_log(ctx , 0 , " Hello DVD !\n No. of Titles is %d\n",titles);
- +
- + /* set read ahead cache usage */
- + if (dvdnav_set_readahead_flag(dvd->nav_data, DVD_READ_CACHE) != DVDNAV_STATUS_OK) {
- + dvdnav_close(dvd->nav_data);
- + av_freep(&dvd);
- + return AVERROR(EACCES);
- + }
- + av_log(ctx, 0 , "Setting Readahead Flag\n");
- + /* set the language */
- + if ((dvdnav_menu_language_select (dvd->nav_data, dvd->language) != DVDNAV_STATUS_OK) ||
- + (dvdnav_audio_language_select(dvd->nav_data, dvd->language) != DVDNAV_STATUS_OK) ||
- + (dvdnav_spu_language_select (dvd->nav_data, dvd->language) != DVDNAV_STATUS_OK)) {
- + av_log(ctx, AV_LOG_ERROR, "Error selecting language\n");
- + dvdnav_close(dvd->nav_data);
- + return AVERROR(EACCES);
- + }
- + av_log(ctx, 0 , "Selecting language\n");
- + /* set the PGC positioning flag to have position information relatively to the
- + * current chapter (seek will seek in the chapter) */
- + if (dvdnav_set_PGC_positioning_flag(dvd->nav_data, 0) != DVDNAV_STATUS_OK) {
- + av_log(ctx, AV_LOG_ERROR, "Error setting PGC positioning flags\n");
- + dvdnav_close(dvd->nav_data);
- + av_freep(&dvd);
- + return AVERROR(EACCES);
- + }
- + av_log(ctx, 0 , "Seeking PGC positioning flag\n");
- + return 0;
- +}
- +
- +static int read_packet(AVFormatContext* ctx, AVPacket *pkt)
- +{
- + return pkt->size;
- +}
- +
- +static int read_close(AVFormatContext* ctx)
- +{
- + DVDContext *dvd = (DVDContext *)ctx->priv_data;
- + if (dvd) {
- + av_freep(&dvd->language);
- + dvdnav_close(dvd->nav_data);
- + av_freep(&dvd);
- + }
- +
- + return 0;
- +}
- +
- +#define OFFSET(x) offsetof(al_data, x)
- +
- +
- +static const AVClass class = {
- + .class_name = "dvd",
- + .item_name = av_default_item_name,
- +// .option = options,
- + .version = LIBAVUTIL_VERSION_INT,
- + .category = AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT,
- +};
- +
- +AVInputFormat ff_dvd_demuxer = {
- + .name = "dvd",
- + .long_name = NULL_IF_CONFIG_SMALL("DVD audio video capture device"),
- + .priv_data_size = sizeof(DVDContext),
- + .read_probe = NULL,
- + .read_header = read_header,
- + .read_packet = read_packet,
- + .read_close = read_close,
- + .flags = AVFMT_NOFILE,
- + .priv_class = &class
- +};
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement