Advertisement
Guest User

Untitled

a guest
Dec 18th, 2014
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.03 KB | None | 0 0
  1. commit dbb9b0b989cbd3d116554093a91dfe185662bd3c
  2. Author: Eejya Singh <[email protected]>
  3. Date: Mon Dec 15 18:57:31 2014 +0530
  4.  
  5. DVD input device
  6.  
  7. diff --git a/configure b/configure
  8. index 40d5428..6e7ffbd 100755
  9. --- a/configure
  10. +++ b/configure
  11. @@ -1350,6 +1350,7 @@ EXTERNAL_LIBRARY_LIST="
  12. libcdio
  13. libcelt
  14. libdc1394
  15. + libdvdnav
  16. libfaac
  17. libfdk_aac
  18. libflite
  19. @@ -2485,6 +2486,7 @@ dshow_indev_deps="IBaseFilter"
  20. dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid"
  21. dv1394_indev_deps="dv1394"
  22. dv1394_indev_select="dv_demuxer"
  23. +dvd_indev_deps="libdvdnav"
  24. fbdev_indev_deps="linux_fb_h"
  25. fbdev_outdev_deps="linux_fb_h"
  26. gdigrab_indev_deps="CreateDIBSection"
  27. @@ -4858,6 +4860,7 @@ enabled libcelt && require libcelt celt/celt.h celt_decode -lcelt0 &&
  28. { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 ||
  29. die "ERROR: libcelt must be installed and version must be >= 0.11.0."; }
  30. enabled libcaca && require_pkg_config caca caca.h caca_create_canvas
  31. +enabled libdvdnav && require_pkg_config dvdnav dvdnav/dvdnav.h dvdnav_open -ldvdnav -lpthread
  32. enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
  33. enabled libfdk_aac && require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac
  34. 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"
  35. diff --git a/libavdevice/Makefile b/libavdevice/Makefile
  36. index 6b8ab2e..ef0ce60 100644
  37. --- a/libavdevice/Makefile
  38. +++ b/libavdevice/Makefile
  39. @@ -22,6 +22,7 @@ OBJS-$(CONFIG_DSHOW_INDEV) += dshow.o dshow_enummediatypes.o \
  40. dshow_enumpins.o dshow_filter.o \
  41. dshow_pin.o dshow_common.o
  42. OBJS-$(CONFIG_DV1394_INDEV) += dv1394.o
  43. +OBJS-$(CONFIG_DVD_INDEV) += dvd-dec.o
  44. OBJS-$(CONFIG_FBDEV_INDEV) += fbdev_dec.o \
  45. fbdev_common.o
  46. OBJS-$(CONFIG_FBDEV_OUTDEV) += fbdev_enc.o \
  47. diff --git a/libavdevice/alldevices.c b/libavdevice/alldevices.c
  48. index 26aecf2..dd125df 100644
  49. --- a/libavdevice/alldevices.c
  50. +++ b/libavdevice/alldevices.c
  51. @@ -53,6 +53,7 @@ void avdevice_register_all(void)
  52. REGISTER_INOUTDEV(DECKLINK, decklink);
  53. REGISTER_INDEV (DSHOW, dshow);
  54. REGISTER_INDEV (DV1394, dv1394);
  55. + REGISTER_INDEV (DVD, dvd);
  56. REGISTER_INOUTDEV(FBDEV, fbdev);
  57. REGISTER_INDEV (GDIGRAB, gdigrab);
  58. REGISTER_INDEV (IEC61883, iec61883);
  59. diff --git a/libavdevice/dvd-dec.c b/libavdevice/dvd-dec.c
  60. new file mode 100644
  61. index 0000000..2769ade
  62. --- /dev/null
  63. +++ b/libavdevice/dvd-dec.c
  64. @@ -0,0 +1,128 @@
  65. +/*
  66. + * Copyright (c) 2014 Eejya Singh
  67. + *
  68. + * This file is part of FFmpeg.
  69. + *
  70. + * Permission to use, copy, modify, and/or distribute this software for any
  71. + * purpose with or without fee is hereby granted, provided that the above
  72. + * copyright notice and this permission notice appear in all copies.
  73. + *
  74. + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
  75. + * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
  76. + * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
  77. + * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
  78. + * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
  79. + * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  80. + * PERFORMANCE OF THIS SOFTWARE.
  81. + */
  82. +
  83. +/**
  84. + * @file
  85. + * DVD 1.1 capture device for libavdevice
  86. + **/
  87. +
  88. +#include "libavutil/opt.h"
  89. +#include "libavutil/time.h"
  90. +#include "libavformat/internal.h"
  91. +#include "avdevice.h"
  92. +#include <dvdnav/dvdnav.h>
  93. +#include <dvdnav/dvd_types.h>
  94. +
  95. +/* libdvdnav's read ahead cache to be used */
  96. +#define DVD_READ_CACHE 1
  97. +
  98. +/* default language for menus/audio/subpictures */
  99. +#define DVD_LANGUAGE "en"
  100. +
  101. +typedef struct {
  102. + dvdnav_t *nav_data;
  103. + uint8_t cache_buf[DVD_VIDEO_LB_LEN];
  104. + char *language;
  105. +} DVDContext;
  106. +
  107. +
  108. +static int read_header(AVFormatContext *ctx)
  109. +{
  110. + DVDContext *dvd = ctx->priv_data;
  111. + int titles;
  112. + if (!(dvd = av_mallocz(sizeof(DVDContext))))
  113. + return AVERROR(ENOMEM);
  114. +
  115. + if(dvdnav_open(&dvd->nav_data,ctx->filename[0] ? ctx->filename : NULL) != DVDNAV_STATUS_OK)
  116. + {
  117. + av_freep(&dvd);
  118. + return AVERROR(EIO);
  119. + }
  120. +
  121. + dvd->language = av_strdup(DVD_LANGUAGE);
  122. +
  123. + dvdnav_get_number_of_titles(dvd->nav_data, &titles);
  124. + av_log(ctx , 0 , " Hello DVD !\n No. of Titles is %d\n",titles);
  125. +
  126. + /* set read ahead cache usage */
  127. + if (dvdnav_set_readahead_flag(dvd->nav_data, DVD_READ_CACHE) != DVDNAV_STATUS_OK) {
  128. + dvdnav_close(dvd->nav_data);
  129. + av_freep(&dvd);
  130. + return AVERROR(EACCES);
  131. + }
  132. + av_log(ctx, 0 , "Setting Readahead Flag\n");
  133. + /* set the language */
  134. + if ((dvdnav_menu_language_select (dvd->nav_data, dvd->language) != DVDNAV_STATUS_OK) ||
  135. + (dvdnav_audio_language_select(dvd->nav_data, dvd->language) != DVDNAV_STATUS_OK) ||
  136. + (dvdnav_spu_language_select (dvd->nav_data, dvd->language) != DVDNAV_STATUS_OK)) {
  137. + av_log(ctx, AV_LOG_ERROR, "Error selecting language\n");
  138. + dvdnav_close(dvd->nav_data);
  139. + return AVERROR(EACCES);
  140. + }
  141. + av_log(ctx, 0 , "Selecting language\n");
  142. + /* set the PGC positioning flag to have position information relatively to the
  143. + * current chapter (seek will seek in the chapter) */
  144. + if (dvdnav_set_PGC_positioning_flag(dvd->nav_data, 0) != DVDNAV_STATUS_OK) {
  145. + av_log(ctx, AV_LOG_ERROR, "Error setting PGC positioning flags\n");
  146. + dvdnav_close(dvd->nav_data);
  147. + av_freep(&dvd);
  148. + return AVERROR(EACCES);
  149. + }
  150. + av_log(ctx, 0 , "Seeking PGC positioning flag\n");
  151. + return 0;
  152. +}
  153. +
  154. +static int read_packet(AVFormatContext* ctx, AVPacket *pkt)
  155. +{
  156. + return pkt->size;
  157. +}
  158. +
  159. +static int read_close(AVFormatContext* ctx)
  160. +{
  161. + DVDContext *dvd = (DVDContext *)ctx->priv_data;
  162. + if (dvd) {
  163. + av_freep(&dvd->language);
  164. + dvdnav_close(dvd->nav_data);
  165. + av_freep(&dvd);
  166. + }
  167. +
  168. + return 0;
  169. +}
  170. +
  171. +#define OFFSET(x) offsetof(al_data, x)
  172. +
  173. +
  174. +static const AVClass class = {
  175. + .class_name = "dvd",
  176. + .item_name = av_default_item_name,
  177. +// .option = options,
  178. + .version = LIBAVUTIL_VERSION_INT,
  179. + .category = AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT,
  180. +};
  181. +
  182. +AVInputFormat ff_dvd_demuxer = {
  183. + .name = "dvd",
  184. + .long_name = NULL_IF_CONFIG_SMALL("DVD audio video capture device"),
  185. + .priv_data_size = sizeof(DVDContext),
  186. + .read_probe = NULL,
  187. + .read_header = read_header,
  188. + .read_packet = read_packet,
  189. + .read_close = read_close,
  190. + .flags = AVFMT_NOFILE,
  191. + .priv_class = &class
  192. +};
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement